diff --git a/common/hogql_parser/HogQLLexer.cpp b/common/hogql_parser/HogQLLexer.cpp index 1ec067b5f1bb..6f9a8960302d 100644 --- a/common/hogql_parser/HogQLLexer.cpp +++ b/common/hogql_parser/HogQLLexer.cpp @@ -65,13 +65,14 @@ void hogqllexerLexerInitialize() { "ALL", "AND", "ANTI", "ANY", "ARRAY", "AS", "ASCENDING", "ASOF", "BETWEEN", "BOTH", "BY", "CASE", "CAST", "CATCH", "COHORT", "COLLATE", "COLUMNS", "CROSS", "CUBE", "CURRENT", "DATE", "DAY", "DESC", "DESCENDING", "DISTINCT", - "ELSE", "END", "EXCEPT", "EXCLUDE", "EXTRACT", "FINAL", "FINALLY", - "FIRST", "FN", "FOLLOWING", "FOR", "FROM", "FULL", "FUN", "GROUP", - "GROUPING", "HAVING", "HOUR", "ID", "IF", "ILIKE", "IN", "INF", "INNER", - "INTERSECT", "INTERVAL", "IS", "JOIN", "KEY", "LAMBDA", "LAST", "LEADING", - "LEFT", "LET", "LIKE", "LIMIT", "MATERIALIZED", "MINUTE", "MONTH", - "NAME", "NAN_SQL", "NOT", "NULL_SQL", "NULLS", "OFFSET", "ON", "OR", - "ORDER", "OUTER", "OVER", "PARTITION", "PRECEDING", "PREWHERE", "QUALIFY", + "ELSE", "END", "EXCEPT", "EXCLUDE", "EXTRACT", "FINAL", "FILTER", + "FINALLY", "FIRST", "FN", "FOLLOWING", "FOR", "FROM", "FULL", "FUN", + "GROUP", "GROUPING", "HAVING", "HOUR", "ID", "IF", "ILIKE", "IGNORE", + "INCLUDE", "IN", "INF", "INNER", "INTERSECT", "INTERVAL", "IS", "JOIN", + "KEY", "LAMBDA", "LAST", "LEADING", "LEFT", "LET", "LIKE", "LIMIT", + "MATERIALIZED", "MINUTE", "MONTH", "NAME", "NATURAL", "NAN_SQL", "NOT", + "NULL_SQL", "NULLS", "OFFSET", "ON", "OR", "ORDER", "OUTER", "OVER", + "PARTITION", "PIVOT", "POSITIONAL", "PRECEDING", "PREWHERE", "QUALIFY", "QUARTER", "RANGE", "RECURSIVE", "REPLACE", "RETURN", "RIGHT", "ROLLUP", "ROW", "ROWS", "SAMPLE", "SECOND", "SELECT", "SEMI", "SETS", "SETTINGS", "SUBSTRING", "THEN", "THROW", "TIES", "TIMESTAMP", "TO", "TOP", "TOTALS", @@ -111,47 +112,47 @@ void hogqllexerLexerInitialize() { "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", "", "'->'", "'*'", "'`'", "'\\'", - "'::'", "':='", "':'", "','", "'||'", "'-'", "'$'", "'.'", "'=='", - "", "'>='", "", "'#'", "'~*'", "'=~*'", "'{'", "'['", "'('", "'<='", - "'<'", "''", + "'*'", "'`'", "'\\'", "'::'", "':='", "':'", "','", "'||'", "'-'", + "'$'", "'.'", "'=='", "", "'>='", "", "'#'", "'~*'", "'=~*'", "'{'", + "'['", "'('", "'<='", "'<'", "'{ "", "ALL", "AND", "ANTI", "ANY", "ARRAY", "AS", "ASCENDING", "ASOF", "BETWEEN", "BOTH", "BY", "CASE", "CAST", "CATCH", "COHORT", "COLLATE", "COLUMNS", "CROSS", "CUBE", "CURRENT", "DATE", "DAY", "DESC", "DESCENDING", "DISTINCT", "ELSE", "END", "EXCEPT", "EXCLUDE", "EXTRACT", "FINAL", - "FINALLY", "FIRST", "FN", "FOLLOWING", "FOR", "FROM", "FULL", "FUN", - "GROUP", "GROUPING", "HAVING", "HOUR", "ID", "IF", "ILIKE", "IN", - "INF", "INNER", "INTERSECT", "INTERVAL", "IS", "JOIN", "KEY", "LAMBDA", - "LAST", "LEADING", "LEFT", "LET", "LIKE", "LIMIT", "MATERIALIZED", - "MINUTE", "MONTH", "NAME", "NAN_SQL", "NOT", "NULL_SQL", "NULLS", - "OFFSET", "ON", "OR", "ORDER", "OUTER", "OVER", "PARTITION", "PRECEDING", - "PREWHERE", "QUALIFY", "QUARTER", "RANGE", "RECURSIVE", "REPLACE", - "RETURN", "RIGHT", "ROLLUP", "ROW", "ROWS", "SAMPLE", "SECOND", "SELECT", - "SEMI", "SETS", "SETTINGS", "SUBSTRING", "THEN", "THROW", "TIES", - "TIMESTAMP", "TO", "TOP", "TOTALS", "TRAILING", "TRIM", "TRUNCATE", - "TRY", "TRY_CAST", "UNBOUNDED", "UNION", "UNPIVOT", "USING", "VALUES", - "WEEK", "WHEN", "WHERE", "WHILE", "WINDOW", "WITH", "WITHIN", "YEAR", - "ESCAPE_CHAR_COMMON", "IDENTIFIER", "FLOATING_LITERAL", "OCTAL_LITERAL", - "DECIMAL_LITERAL", "HEXADECIMAL_LITERAL", "STRING_LITERAL", "ARROW", - "ASTERISK", "BACKQUOTE", "BACKSLASH", "DOUBLECOLON", "COLONEQUALS", - "COLON", "COMMA", "CONCAT", "DASH", "DOLLAR", "DOT", "EQ_DOUBLE", - "EQ_SINGLE", "GT_EQ", "GT", "HASH", "IREGEX_SINGLE", "IREGEX_DOUBLE", - "LBRACE", "LBRACKET", "LPAREN", "LT_EQ", "LT", "LT_SLASH", "NOT_EQ", - "NOT_IREGEX", "NOT_REGEX", "NULL_PROPERTY", "NULLISH", "PERCENT", - "PLUS", "QUERY", "QUOTE_DOUBLE", "QUOTE_SINGLE_TEMPLATE", "QUOTE_SINGLE_TEMPLATE_FULL", - "QUOTE_SINGLE", "REGEX_SINGLE", "REGEX_DOUBLE", "RBRACE", "RBRACKET", - "RPAREN", "SEMICOLON", "SLASH", "SLASH_GT", "UNDERSCORE", "MULTI_LINE_COMMENT", - "SINGLE_LINE_COMMENT", "WHITESPACE", "STRING_TEXT", "STRING_ESCAPE_TRIGGER", - "FULL_STRING_TEXT", "FULL_STRING_ESCAPE_TRIGGER", "TAG_WS", "TAGC_WS", - "HOGQLX_TEXT_TEXT", "HOGQLX_TEXT_WS" + "FILTER", "FINALLY", "FIRST", "FN", "FOLLOWING", "FOR", "FROM", "FULL", + "FUN", "GROUP", "GROUPING", "HAVING", "HOUR", "ID", "IF", "ILIKE", + "IGNORE", "INCLUDE", "IN", "INF", "INNER", "INTERSECT", "INTERVAL", + "IS", "JOIN", "KEY", "LAMBDA", "LAST", "LEADING", "LEFT", "LET", "LIKE", + "LIMIT", "MATERIALIZED", "MINUTE", "MONTH", "NAME", "NATURAL", "NAN_SQL", + "NOT", "NULL_SQL", "NULLS", "OFFSET", "ON", "OR", "ORDER", "OUTER", + "OVER", "PARTITION", "PIVOT", "POSITIONAL", "PRECEDING", "PREWHERE", + "QUALIFY", "QUARTER", "RANGE", "RECURSIVE", "REPLACE", "RETURN", "RIGHT", + "ROLLUP", "ROW", "ROWS", "SAMPLE", "SECOND", "SELECT", "SEMI", "SETS", + "SETTINGS", "SUBSTRING", "THEN", "THROW", "TIES", "TIMESTAMP", "TO", + "TOP", "TOTALS", "TRAILING", "TRIM", "TRUNCATE", "TRY", "TRY_CAST", + "UNBOUNDED", "UNION", "UNPIVOT", "USING", "VALUES", "WEEK", "WHEN", + "WHERE", "WHILE", "WINDOW", "WITH", "WITHIN", "YEAR", "ESCAPE_CHAR_COMMON", + "IDENTIFIER", "FLOATING_LITERAL", "OCTAL_LITERAL", "DECIMAL_LITERAL", + "HEXADECIMAL_LITERAL", "STRING_LITERAL", "ARROW", "ASTERISK", "BACKQUOTE", + "BACKSLASH", "DOUBLECOLON", "COLONEQUALS", "COLON", "COMMA", "CONCAT", + "DASH", "DOLLAR", "DOT", "EQ_DOUBLE", "EQ_SINGLE", "GT_EQ", "GT", + "HASH", "IREGEX_SINGLE", "IREGEX_DOUBLE", "LBRACE", "LBRACKET", "LPAREN", + "LT_EQ", "LT", "LT_SLASH", "NOT_EQ", "NOT_IREGEX", "NOT_REGEX", "NULL_PROPERTY", + "NULLISH", "PERCENT", "PLUS", "QUERY", "QUOTE_DOUBLE", "QUOTE_SINGLE_TEMPLATE", + "QUOTE_SINGLE_TEMPLATE_FULL", "QUOTE_SINGLE", "REGEX_SINGLE", "REGEX_DOUBLE", + "RBRACE", "RBRACKET", "RPAREN", "SEMICOLON", "SLASH", "SLASH_GT", + "UNDERSCORE", "MULTI_LINE_COMMENT", "SINGLE_LINE_COMMENT", "WHITESPACE", + "STRING_TEXT", "STRING_ESCAPE_TRIGGER", "FULL_STRING_TEXT", "FULL_STRING_ESCAPE_TRIGGER", + "TAG_WS", "TAGC_WS", "HOGQLX_TEXT_TEXT", "HOGQLX_TEXT_WS" } ); static const int32_t serializedATNSegment[] = { - 4,0,184,1776,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2, + 4,0,190,1840,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2, 3,7,3,2,4,7,4,2,5,7,5,2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11, 7,11,2,12,7,12,2,13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18, 7,18,2,19,7,19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25, @@ -187,9 +188,10 @@ void hogqllexerLexerInitialize() { 2,210,7,210,2,211,7,211,2,212,7,212,2,213,7,213,2,214,7,214,2,215,7,215, 2,216,7,216,2,217,7,217,2,218,7,218,2,219,7,219,2,220,7,220,2,221,7,221, 2,222,7,222,2,223,7,223,2,224,7,224,2,225,7,225,2,226,7,226,2,227,7,227, + 2,228,7,228,2,229,7,229,2,230,7,230,2,231,7,231,2,232,7,232,2,233,7,233, 1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1, 4,1,4,1,4,1,4,1,4,1,4,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6, - 1,6,1,6,1,6,1,6,1,6,3,6,503,8,6,1,7,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,1, + 1,6,1,6,1,6,1,6,1,6,3,6,515,8,6,1,7,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,1, 8,1,8,1,8,1,8,1,9,1,9,1,9,1,9,1,9,1,10,1,10,1,10,1,11,1,11,1,11,1,11, 1,11,1,12,1,12,1,12,1,12,1,12,1,13,1,13,1,13,1,13,1,13,1,13,1,14,1,14, 1,14,1,14,1,14,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,16, @@ -200,123 +202,128 @@ void hogqllexerLexerInitialize() { 1,24,1,24,1,24,1,24,1,25,1,25,1,25,1,25,1,25,1,26,1,26,1,26,1,26,1,27, 1,27,1,27,1,27,1,27,1,27,1,27,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28, 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,30,1,30,1,30, - 1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,32,1,32,1,32,1,32,1,32,1,32, - 1,33,1,33,1,33,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,35, - 1,35,1,35,1,35,1,36,1,36,1,36,1,36,1,36,1,37,1,37,1,37,1,37,1,37,1,38, - 1,38,1,38,1,38,1,39,1,39,1,39,1,39,1,39,1,39,1,40,1,40,1,40,1,40,1,40, - 1,40,1,40,1,40,1,40,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,42,1,42,1,42, - 1,42,1,42,1,43,1,43,1,43,1,44,1,44,1,44,1,45,1,45,1,45,1,45,1,45,1,45, - 1,46,1,46,1,46,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47, - 1,47,1,47,3,47,756,8,47,1,48,1,48,1,48,1,48,1,48,1,48,1,49,1,49,1,49, - 1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,50,1,50,1,50,1,50,1,50,1,50,1,50, - 1,50,1,50,1,51,1,51,1,51,1,52,1,52,1,52,1,52,1,52,1,53,1,53,1,53,1,53, - 1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,55,1,55,1,55,1,55,1,55,1,56,1,56, - 1,56,1,56,1,56,1,56,1,56,1,56,1,57,1,57,1,57,1,57,1,57,1,58,1,58,1,58, - 1,58,1,59,1,59,1,59,1,59,1,59,1,60,1,60,1,60,1,60,1,60,1,60,1,61,1,61, - 1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,62,1,62,1,62, - 1,62,1,62,1,62,1,62,1,63,1,63,1,63,1,63,1,63,1,63,1,64,1,64,1,64,1,64, - 1,64,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66,1,67,1,67,1,67,1,67,1,67, - 1,68,1,68,1,68,1,68,1,68,1,68,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,70, - 1,70,1,70,1,71,1,71,1,71,1,72,1,72,1,72,1,72,1,72,1,72,1,73,1,73,1,73, - 1,73,1,73,1,73,1,74,1,74,1,74,1,74,1,74,1,75,1,75,1,75,1,75,1,75,1,75, - 1,75,1,75,1,75,1,75,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76, - 1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,78,1,78,1,78,1,78,1,78, - 1,78,1,78,1,78,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,80,1,80,1,80, - 1,80,1,80,1,80,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,82, - 1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,83,1,83,1,83,1,83,1,83,1,83,1,83, - 1,84,1,84,1,84,1,84,1,84,1,84,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,86, - 1,86,1,86,1,86,1,87,1,87,1,87,1,87,1,87,1,88,1,88,1,88,1,88,1,88,1,88, - 1,88,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,90,1,90,1,90,1,90,1,90,1,90, - 1,90,1,91,1,91,1,91,1,91,1,91,1,92,1,92,1,92,1,92,1,92,1,93,1,93,1,93, - 1,93,1,93,1,93,1,93,1,93,1,93,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94, - 1,94,1,94,1,95,1,95,1,95,1,95,1,95,1,96,1,96,1,96,1,96,1,96,1,96,1,97, - 1,97,1,97,1,97,1,97,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98, - 1,99,1,99,1,99,1,100,1,100,1,100,1,100,1,101,1,101,1,101,1,101,1,101, - 1,101,1,101,1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,103, - 1,103,1,103,1,103,1,103,1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,104, - 1,104,1,105,1,105,1,105,1,105,1,106,1,106,1,106,1,106,1,106,1,106,1,106, - 1,106,1,106,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,107, - 1,108,1,108,1,108,1,108,1,108,1,108,1,109,1,109,1,109,1,109,1,109,1,109, - 1,109,1,109,1,110,1,110,1,110,1,110,1,110,1,110,1,111,1,111,1,111,1,111, - 1,111,1,111,1,111,1,112,1,112,1,112,1,112,1,112,1,113,1,113,1,113,1,113, - 1,113,1,114,1,114,1,114,1,114,1,114,1,114,1,115,1,115,1,115,1,115,1,115, - 1,115,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,117,1,117,1,117,1,117, - 1,117,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,119,1,119,1,119,1,119, - 1,119,1,119,1,119,1,119,1,119,1,119,3,119,1227,8,119,1,120,1,120,1,120, - 1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120, - 1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120, - 3,120,1256,8,120,1,121,1,121,1,121,3,121,1261,8,121,1,121,1,121,1,121, - 1,121,5,121,1267,8,121,10,121,12,121,1270,9,121,1,121,1,121,1,121,1,121, - 1,121,1,121,1,121,1,121,1,121,5,121,1281,8,121,10,121,12,121,1284,9,121, - 1,121,1,121,1,121,1,121,1,121,1,121,1,121,1,121,1,121,1,121,1,121,5,121, - 1297,8,121,10,121,12,121,1300,9,121,1,121,1,121,3,121,1304,8,121,1,122, - 1,122,1,122,5,122,1309,8,122,10,122,12,122,1312,9,122,1,122,1,122,3,122, - 1316,8,122,1,122,1,122,3,122,1320,8,122,1,122,4,122,1323,8,122,11,122, - 12,122,1324,1,122,1,122,1,122,3,122,1330,8,122,1,122,1,122,3,122,1334, - 8,122,1,122,4,122,1337,8,122,11,122,12,122,1338,1,122,1,122,1,122,5,122, - 1344,8,122,10,122,12,122,1347,9,122,1,122,1,122,1,122,3,122,1352,8,122, - 1,122,4,122,1355,8,122,11,122,12,122,1356,1,122,1,122,1,122,1,122,1,122, - 3,122,1364,8,122,1,122,4,122,1367,8,122,11,122,12,122,1368,1,122,1,122, - 1,122,1,122,3,122,1375,8,122,1,122,4,122,1378,8,122,11,122,12,122,1379, - 3,122,1382,8,122,1,123,1,123,4,123,1386,8,123,11,123,12,123,1387,1,124, - 4,124,1391,8,124,11,124,12,124,1392,1,125,1,125,1,125,4,125,1398,8,125, - 11,125,12,125,1399,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1, - 126,5,126,1411,8,126,10,126,12,126,1414,9,126,1,126,1,126,1,127,1,127, - 1,128,1,128,1,129,1,129,1,130,1,130,1,131,1,131,1,132,1,132,1,133,1,133, - 1,134,1,134,1,135,1,135,1,136,1,136,1,137,1,137,1,138,1,138,1,139,1,139, - 1,140,1,140,1,141,1,141,1,142,1,142,1,143,1,143,1,144,1,144,1,145,1,145, - 1,146,1,146,1,147,1,147,1,148,1,148,1,149,1,149,1,150,1,150,1,151,1,151, - 1,152,1,152,1,153,1,153,1,154,1,154,1,155,1,155,1,156,1,156,1,157,1,157, - 1,157,1,158,1,158,1,159,1,159,1,160,1,160,1,161,1,161,1,161,1,162,1,162, - 1,162,1,163,1,163,1,164,1,164,1,165,1,165,1,165,1,166,1,166,1,167,1,167, - 1,168,1,168,1,169,1,169,1,169,1,170,1,170,1,171,1,171,1,171,1,172,1,172, - 1,173,1,173,1,174,1,174,1,174,1,175,1,175,1,175,1,175,1,176,1,176,1,176, - 1,176,1,177,1,177,1,178,1,178,1,179,1,179,1,179,1,180,1,180,1,180,1,180, - 1,180,1,180,1,181,1,181,1,181,1,181,1,181,1,181,1,182,1,182,1,183,1,183, - 1,183,1,184,1,184,1,184,1,184,3,184,1557,8,184,1,185,1,185,1,185,1,185, - 1,186,1,186,1,186,1,187,1,187,1,187,1,188,1,188,1,188,1,189,1,189,1,190, - 1,190,1,191,1,191,1,192,1,192,1,193,1,193,1,193,1,193,1,193,1,194,1,194, - 1,194,1,194,1,194,1,195,1,195,1,196,1,196,1,197,1,197,1,197,1,198,1,198, - 1,198,1,198,1,199,1,199,1,200,1,200,1,201,1,201,1,202,1,202,1,203,1,203, - 1,203,1,204,1,204,1,205,1,205,1,205,1,205,5,205,1618,8,205,10,205,12, - 205,1621,9,205,1,205,1,205,1,205,1,205,1,205,1,206,1,206,1,206,1,206, - 3,206,1632,8,206,1,206,5,206,1635,8,206,10,206,12,206,1638,9,206,1,206, - 3,206,1641,8,206,1,206,1,206,1,207,1,207,1,207,1,207,1,208,1,208,1,208, - 1,208,1,208,1,208,1,208,1,208,1,208,1,208,1,208,4,208,1660,8,208,11,208, - 12,208,1661,1,209,1,209,1,209,1,209,1,210,1,210,1,210,1,210,1,210,1,211, - 1,211,1,211,1,211,1,211,4,211,1678,8,211,11,211,12,211,1679,1,212,1,212, - 1,212,1,212,1,213,1,213,1,213,1,213,1,213,1,213,1,214,1,214,1,214,1,214, - 1,214,1,214,1,215,1,215,5,215,1700,8,215,10,215,12,215,1703,9,215,1,215, - 1,215,1,216,1,216,1,216,1,216,1,217,1,217,1,217,1,217,1,218,4,218,1716, - 8,218,11,218,12,218,1717,1,218,1,218,1,219,1,219,1,219,1,219,1,219,1, - 220,1,220,1,220,1,220,1,220,1,221,1,221,5,221,1734,8,221,10,221,12,221, - 1737,9,221,1,221,1,221,1,222,4,222,1742,8,222,11,222,12,222,1743,1,222, - 1,222,1,223,4,223,1749,8,223,11,223,12,223,1750,1,224,1,224,1,224,1,224, - 1,224,1,225,1,225,1,225,1,225,1,225,1,225,1,225,1,226,1,226,1,226,1,226, - 1,226,1,227,4,227,1771,8,227,11,227,12,227,1772,1,227,1,227,1,1619,0, - 228,6,1,8,2,10,3,12,4,14,5,16,6,18,7,20,8,22,9,24,10,26,11,28,12,30,13, - 32,14,34,15,36,16,38,17,40,18,42,19,44,20,46,21,48,22,50,23,52,24,54, - 25,56,26,58,27,60,28,62,29,64,30,66,31,68,32,70,33,72,34,74,35,76,36, - 78,37,80,38,82,39,84,40,86,41,88,42,90,43,92,44,94,45,96,46,98,47,100, - 48,102,49,104,50,106,51,108,52,110,53,112,54,114,55,116,56,118,57,120, - 58,122,59,124,60,126,61,128,62,130,63,132,64,134,65,136,66,138,67,140, - 68,142,69,144,70,146,71,148,72,150,73,152,74,154,75,156,76,158,77,160, - 78,162,79,164,80,166,81,168,82,170,83,172,84,174,85,176,86,178,87,180, - 88,182,89,184,90,186,91,188,92,190,93,192,94,194,95,196,96,198,97,200, - 98,202,99,204,100,206,101,208,102,210,103,212,104,214,105,216,106,218, - 107,220,108,222,109,224,110,226,111,228,112,230,113,232,114,234,115,236, - 116,238,117,240,118,242,119,244,120,246,121,248,122,250,123,252,124,254, - 125,256,126,258,127,260,0,262,0,264,0,266,0,268,0,270,0,272,0,274,0,276, - 0,278,0,280,0,282,0,284,0,286,0,288,0,290,0,292,0,294,0,296,0,298,0,300, - 0,302,0,304,0,306,0,308,0,310,0,312,0,314,0,316,0,318,0,320,128,322,129, - 324,130,326,131,328,132,330,133,332,134,334,135,336,136,338,137,340,138, - 342,139,344,140,346,141,348,142,350,143,352,144,354,145,356,146,358,147, - 360,148,362,149,364,150,366,0,368,0,370,151,372,152,374,153,376,154,378, - 155,380,156,382,157,384,158,386,159,388,160,390,161,392,162,394,163,396, - 164,398,165,400,166,402,167,404,168,406,169,408,170,410,171,412,172,414, - 173,416,174,418,175,420,176,422,177,424,178,426,0,428,179,430,180,432, - 0,434,0,436,0,438,0,440,0,442,181,444,0,446,0,448,0,450,182,452,183,454, - 0,456,0,458,0,460,184,6,0,1,2,3,4,5,42,2,0,92,92,96,96,2,0,34,34,92,92, + 1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,32,1,32,1,32,1,32,1,32,1,32,1,32, + 1,32,1,33,1,33,1,33,1,33,1,33,1,33,1,34,1,34,1,34,1,35,1,35,1,35,1,35, + 1,35,1,35,1,35,1,35,1,35,1,35,1,36,1,36,1,36,1,36,1,37,1,37,1,37,1,37, + 1,37,1,38,1,38,1,38,1,38,1,38,1,39,1,39,1,39,1,39,1,40,1,40,1,40,1,40, + 1,40,1,40,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,42,1,42,1,42, + 1,42,1,42,1,42,1,42,1,43,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,45,1,45, + 1,45,1,46,1,46,1,46,1,46,1,46,1,46,1,47,1,47,1,47,1,47,1,47,1,47,1,47, + 1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,49,1,49,1,49,1,50,1,50,1,50, + 1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,3,50,790,8,50,1,51, + 1,51,1,51,1,51,1,51,1,51,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52, + 1,52,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,54,1,54,1,54,1,55, + 1,55,1,55,1,55,1,55,1,56,1,56,1,56,1,56,1,57,1,57,1,57,1,57,1,57,1,57, + 1,57,1,58,1,58,1,58,1,58,1,58,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59, + 1,60,1,60,1,60,1,60,1,60,1,61,1,61,1,61,1,61,1,62,1,62,1,62,1,62,1,62, + 1,63,1,63,1,63,1,63,1,63,1,63,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64, + 1,64,1,64,1,64,1,64,1,64,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,66,1,66, + 1,66,1,66,1,66,1,66,1,67,1,67,1,67,1,67,1,67,1,68,1,68,1,68,1,68,1,68, + 1,68,1,68,1,68,1,69,1,69,1,69,1,69,1,70,1,70,1,70,1,70,1,71,1,71,1,71, + 1,71,1,71,1,72,1,72,1,72,1,72,1,72,1,72,1,73,1,73,1,73,1,73,1,73,1,73, + 1,73,1,74,1,74,1,74,1,75,1,75,1,75,1,76,1,76,1,76,1,76,1,76,1,76,1,77, + 1,77,1,77,1,77,1,77,1,77,1,78,1,78,1,78,1,78,1,78,1,79,1,79,1,79,1,79, + 1,79,1,79,1,79,1,79,1,79,1,79,1,80,1,80,1,80,1,80,1,80,1,80,1,81,1,81, + 1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,82,1,82,1,82,1,82,1,82, + 1,82,1,82,1,82,1,82,1,82,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83, + 1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,85,1,85,1,85,1,85,1,85,1,85, + 1,85,1,85,1,86,1,86,1,86,1,86,1,86,1,86,1,87,1,87,1,87,1,87,1,87,1,87, + 1,87,1,87,1,87,1,87,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,89,1,89, + 1,89,1,89,1,89,1,89,1,89,1,90,1,90,1,90,1,90,1,90,1,90,1,91,1,91,1,91, + 1,91,1,91,1,91,1,91,1,92,1,92,1,92,1,92,1,93,1,93,1,93,1,93,1,93,1,94, + 1,94,1,94,1,94,1,94,1,94,1,94,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,96, + 1,96,1,96,1,96,1,96,1,96,1,96,1,97,1,97,1,97,1,97,1,97,1,98,1,98,1,98, + 1,98,1,98,1,99,1,99,1,99,1,99,1,99,1,99,1,99,1,99,1,99,1,100,1,100,1, + 100,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,101,1,101,1,101,1,101, + 1,101,1,102,1,102,1,102,1,102,1,102,1,102,1,103,1,103,1,103,1,103,1,103, + 1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,105,1,105, + 1,105,1,106,1,106,1,106,1,106,1,107,1,107,1,107,1,107,1,107,1,107,1,107, + 1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,109,1,109,1,109, + 1,109,1,109,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,111, + 1,111,1,111,1,111,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,112, + 1,113,1,113,1,113,1,113,1,113,1,113,1,113,1,113,1,113,1,113,1,114,1,114, + 1,114,1,114,1,114,1,114,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115, + 1,116,1,116,1,116,1,116,1,116,1,116,1,117,1,117,1,117,1,117,1,117,1,117, + 1,117,1,118,1,118,1,118,1,118,1,118,1,119,1,119,1,119,1,119,1,119,1,120, + 1,120,1,120,1,120,1,120,1,120,1,121,1,121,1,121,1,121,1,121,1,121,1,122, + 1,122,1,122,1,122,1,122,1,122,1,122,1,123,1,123,1,123,1,123,1,123,1,124, + 1,124,1,124,1,124,1,124,1,124,1,124,1,125,1,125,1,125,1,125,1,125,1,125, + 1,125,1,125,1,125,1,125,3,125,1286,8,125,1,126,1,126,1,126,1,126,1,126, + 1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126, + 1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126, + 1,126,1,126,1,126,3,126,1320,8,126,1,127,1,127,1,127,3,127,1325,8,127, + 1,127,1,127,1,127,1,127,5,127,1331,8,127,10,127,12,127,1334,9,127,1,127, + 1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,127,5,127,1345,8,127,10,127, + 12,127,1348,9,127,1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,127, + 1,127,1,127,5,127,1361,8,127,10,127,12,127,1364,9,127,1,127,1,127,3,127, + 1368,8,127,1,128,1,128,1,128,5,128,1373,8,128,10,128,12,128,1376,9,128, + 1,128,1,128,3,128,1380,8,128,1,128,1,128,3,128,1384,8,128,1,128,4,128, + 1387,8,128,11,128,12,128,1388,1,128,1,128,1,128,3,128,1394,8,128,1,128, + 1,128,3,128,1398,8,128,1,128,4,128,1401,8,128,11,128,12,128,1402,1,128, + 1,128,1,128,5,128,1408,8,128,10,128,12,128,1411,9,128,1,128,1,128,1,128, + 3,128,1416,8,128,1,128,4,128,1419,8,128,11,128,12,128,1420,1,128,1,128, + 1,128,1,128,1,128,3,128,1428,8,128,1,128,4,128,1431,8,128,11,128,12,128, + 1432,1,128,1,128,1,128,1,128,3,128,1439,8,128,1,128,4,128,1442,8,128, + 11,128,12,128,1443,3,128,1446,8,128,1,129,1,129,4,129,1450,8,129,11,129, + 12,129,1451,1,130,4,130,1455,8,130,11,130,12,130,1456,1,131,1,131,1,131, + 4,131,1462,8,131,11,131,12,131,1463,1,132,1,132,1,132,1,132,1,132,1,132, + 1,132,1,132,1,132,5,132,1475,8,132,10,132,12,132,1478,9,132,1,132,1,132, + 1,133,1,133,1,134,1,134,1,135,1,135,1,136,1,136,1,137,1,137,1,138,1,138, + 1,139,1,139,1,140,1,140,1,141,1,141,1,142,1,142,1,143,1,143,1,144,1,144, + 1,145,1,145,1,146,1,146,1,147,1,147,1,148,1,148,1,149,1,149,1,150,1,150, + 1,151,1,151,1,152,1,152,1,153,1,153,1,154,1,154,1,155,1,155,1,156,1,156, + 1,157,1,157,1,158,1,158,1,159,1,159,1,160,1,160,1,161,1,161,1,162,1,162, + 1,163,1,163,1,163,1,164,1,164,1,165,1,165,1,166,1,166,1,167,1,167,1,167, + 1,168,1,168,1,168,1,169,1,169,1,170,1,170,1,171,1,171,1,171,1,172,1,172, + 1,173,1,173,1,174,1,174,1,175,1,175,1,175,1,176,1,176,1,177,1,177,1,177, + 1,178,1,178,1,179,1,179,1,180,1,180,1,180,1,181,1,181,1,181,1,181,1,182, + 1,182,1,182,1,182,1,183,1,183,1,184,1,184,1,185,1,185,1,185,1,186,1,186, + 1,186,1,186,1,186,1,186,1,187,1,187,1,187,1,187,1,187,1,187,1,188,1,188, + 1,189,1,189,1,189,1,190,1,190,1,190,1,190,3,190,1621,8,190,1,191,1,191, + 1,191,1,191,1,192,1,192,1,192,1,193,1,193,1,193,1,194,1,194,1,194,1,195, + 1,195,1,196,1,196,1,197,1,197,1,198,1,198,1,199,1,199,1,199,1,199,1,199, + 1,200,1,200,1,200,1,200,1,200,1,201,1,201,1,202,1,202,1,203,1,203,1,203, + 1,204,1,204,1,204,1,204,1,205,1,205,1,206,1,206,1,207,1,207,1,208,1,208, + 1,209,1,209,1,209,1,210,1,210,1,211,1,211,1,211,1,211,5,211,1682,8,211, + 10,211,12,211,1685,9,211,1,211,1,211,1,211,1,211,1,211,1,212,1,212,1, + 212,1,212,3,212,1696,8,212,1,212,5,212,1699,8,212,10,212,12,212,1702, + 9,212,1,212,3,212,1705,8,212,1,212,1,212,1,213,1,213,1,213,1,213,1,214, + 1,214,1,214,1,214,1,214,1,214,1,214,1,214,1,214,1,214,1,214,4,214,1724, + 8,214,11,214,12,214,1725,1,215,1,215,1,215,1,215,1,216,1,216,1,216,1, + 216,1,216,1,217,1,217,1,217,1,217,1,217,4,217,1742,8,217,11,217,12,217, + 1743,1,218,1,218,1,218,1,218,1,219,1,219,1,219,1,219,1,219,1,219,1,220, + 1,220,1,220,1,220,1,220,1,220,1,221,1,221,5,221,1764,8,221,10,221,12, + 221,1767,9,221,1,221,1,221,1,222,1,222,1,222,1,222,1,223,1,223,1,223, + 1,223,1,224,4,224,1780,8,224,11,224,12,224,1781,1,224,1,224,1,225,1,225, + 1,225,1,225,1,225,1,226,1,226,1,226,1,226,1,226,1,227,1,227,5,227,1798, + 8,227,10,227,12,227,1801,9,227,1,227,1,227,1,228,4,228,1806,8,228,11, + 228,12,228,1807,1,228,1,228,1,229,4,229,1813,8,229,11,229,12,229,1814, + 1,230,1,230,1,230,1,230,1,230,1,231,1,231,1,231,1,231,1,231,1,231,1,231, + 1,232,1,232,1,232,1,232,1,232,1,233,4,233,1835,8,233,11,233,12,233,1836, + 1,233,1,233,1,1683,0,234,6,1,8,2,10,3,12,4,14,5,16,6,18,7,20,8,22,9,24, + 10,26,11,28,12,30,13,32,14,34,15,36,16,38,17,40,18,42,19,44,20,46,21, + 48,22,50,23,52,24,54,25,56,26,58,27,60,28,62,29,64,30,66,31,68,32,70, + 33,72,34,74,35,76,36,78,37,80,38,82,39,84,40,86,41,88,42,90,43,92,44, + 94,45,96,46,98,47,100,48,102,49,104,50,106,51,108,52,110,53,112,54,114, + 55,116,56,118,57,120,58,122,59,124,60,126,61,128,62,130,63,132,64,134, + 65,136,66,138,67,140,68,142,69,144,70,146,71,148,72,150,73,152,74,154, + 75,156,76,158,77,160,78,162,79,164,80,166,81,168,82,170,83,172,84,174, + 85,176,86,178,87,180,88,182,89,184,90,186,91,188,92,190,93,192,94,194, + 95,196,96,198,97,200,98,202,99,204,100,206,101,208,102,210,103,212,104, + 214,105,216,106,218,107,220,108,222,109,224,110,226,111,228,112,230,113, + 232,114,234,115,236,116,238,117,240,118,242,119,244,120,246,121,248,122, + 250,123,252,124,254,125,256,126,258,127,260,128,262,129,264,130,266,131, + 268,132,270,133,272,0,274,0,276,0,278,0,280,0,282,0,284,0,286,0,288,0, + 290,0,292,0,294,0,296,0,298,0,300,0,302,0,304,0,306,0,308,0,310,0,312, + 0,314,0,316,0,318,0,320,0,322,0,324,0,326,0,328,0,330,0,332,134,334,135, + 336,136,338,137,340,138,342,139,344,140,346,141,348,142,350,143,352,144, + 354,145,356,146,358,147,360,148,362,149,364,150,366,151,368,152,370,153, + 372,154,374,155,376,156,378,0,380,0,382,157,384,158,386,159,388,160,390, + 161,392,162,394,163,396,164,398,165,400,166,402,167,404,168,406,169,408, + 170,410,171,412,172,414,173,416,174,418,175,420,176,422,177,424,178,426, + 179,428,180,430,181,432,182,434,183,436,184,438,0,440,185,442,186,444, + 0,446,0,448,0,450,0,452,0,454,187,456,0,458,0,460,0,462,188,464,189,466, + 0,468,0,470,0,472,190,6,0,1,2,3,4,5,42,2,0,92,92,96,96,2,0,34,34,92,92, 2,0,39,39,92,92,2,0,65,65,97,97,2,0,66,66,98,98,2,0,67,67,99,99,2,0,68, 68,100,100,2,0,69,69,101,101,2,0,70,70,102,102,2,0,71,71,103,103,2,0, 72,72,104,104,2,0,73,73,105,105,2,0,74,74,106,106,2,0,75,75,107,107,2, @@ -327,7 +334,7 @@ void hogqllexerLexerInitialize() { 1,0,48,55,1,0,48,57,3,0,48,57,65,70,97,102,2,0,10,10,13,13,2,1,10,10, 13,13,2,0,9,13,32,32,3,0,39,39,92,92,123,123,1,0,123,123,3,0,65,90,95, 95,97,122,5,0,45,45,48,57,65,90,95,95,97,122,3,0,9,10,13,13,32,32,2,0, - 60,60,123,123,1815,0,6,1,0,0,0,0,8,1,0,0,0,0,10,1,0,0,0,0,12,1,0,0,0, + 60,60,123,123,1880,0,6,1,0,0,0,0,8,1,0,0,0,0,10,1,0,0,0,0,12,1,0,0,0, 0,14,1,0,0,0,0,16,1,0,0,0,0,18,1,0,0,0,0,20,1,0,0,0,0,22,1,0,0,0,0,24, 1,0,0,0,0,26,1,0,0,0,0,28,1,0,0,0,0,30,1,0,0,0,0,32,1,0,0,0,0,34,1,0, 0,0,0,36,1,0,0,0,0,38,1,0,0,0,0,40,1,0,0,0,0,42,1,0,0,0,0,44,1,0,0,0, @@ -352,8 +359,8 @@ void hogqllexerLexerInitialize() { 0,0,0,230,1,0,0,0,0,232,1,0,0,0,0,234,1,0,0,0,0,236,1,0,0,0,0,238,1,0, 0,0,0,240,1,0,0,0,0,242,1,0,0,0,0,244,1,0,0,0,0,246,1,0,0,0,0,248,1,0, 0,0,0,250,1,0,0,0,0,252,1,0,0,0,0,254,1,0,0,0,0,256,1,0,0,0,0,258,1,0, - 0,0,0,320,1,0,0,0,0,322,1,0,0,0,0,324,1,0,0,0,0,326,1,0,0,0,0,328,1,0, - 0,0,0,330,1,0,0,0,0,332,1,0,0,0,0,334,1,0,0,0,0,336,1,0,0,0,0,338,1,0, + 0,0,0,260,1,0,0,0,0,262,1,0,0,0,0,264,1,0,0,0,0,266,1,0,0,0,0,268,1,0, + 0,0,0,270,1,0,0,0,0,332,1,0,0,0,0,334,1,0,0,0,0,336,1,0,0,0,0,338,1,0, 0,0,0,340,1,0,0,0,0,342,1,0,0,0,0,344,1,0,0,0,0,346,1,0,0,0,0,348,1,0, 0,0,0,350,1,0,0,0,0,352,1,0,0,0,0,354,1,0,0,0,0,356,1,0,0,0,0,358,1,0, 0,0,0,360,1,0,0,0,0,362,1,0,0,0,0,364,1,0,0,0,0,366,1,0,0,0,0,368,1,0, @@ -362,450 +369,468 @@ void hogqllexerLexerInitialize() { 0,0,0,390,1,0,0,0,0,392,1,0,0,0,0,394,1,0,0,0,0,396,1,0,0,0,0,398,1,0, 0,0,0,400,1,0,0,0,0,402,1,0,0,0,0,404,1,0,0,0,0,406,1,0,0,0,0,408,1,0, 0,0,0,410,1,0,0,0,0,412,1,0,0,0,0,414,1,0,0,0,0,416,1,0,0,0,0,418,1,0, - 0,0,0,420,1,0,0,0,1,422,1,0,0,0,1,424,1,0,0,0,1,426,1,0,0,0,2,428,1,0, - 0,0,2,430,1,0,0,0,3,432,1,0,0,0,3,434,1,0,0,0,3,436,1,0,0,0,3,438,1,0, - 0,0,3,440,1,0,0,0,3,442,1,0,0,0,3,444,1,0,0,0,4,446,1,0,0,0,4,448,1,0, - 0,0,4,450,1,0,0,0,5,452,1,0,0,0,5,454,1,0,0,0,5,456,1,0,0,0,5,458,1,0, - 0,0,5,460,1,0,0,0,6,462,1,0,0,0,8,466,1,0,0,0,10,470,1,0,0,0,12,475,1, - 0,0,0,14,479,1,0,0,0,16,485,1,0,0,0,18,502,1,0,0,0,20,504,1,0,0,0,22, - 509,1,0,0,0,24,517,1,0,0,0,26,522,1,0,0,0,28,525,1,0,0,0,30,530,1,0,0, - 0,32,535,1,0,0,0,34,541,1,0,0,0,36,548,1,0,0,0,38,556,1,0,0,0,40,564, - 1,0,0,0,42,570,1,0,0,0,44,575,1,0,0,0,46,583,1,0,0,0,48,588,1,0,0,0,50, - 592,1,0,0,0,52,597,1,0,0,0,54,608,1,0,0,0,56,617,1,0,0,0,58,622,1,0,0, - 0,60,626,1,0,0,0,62,633,1,0,0,0,64,641,1,0,0,0,66,649,1,0,0,0,68,655, - 1,0,0,0,70,663,1,0,0,0,72,669,1,0,0,0,74,672,1,0,0,0,76,682,1,0,0,0,78, - 686,1,0,0,0,80,691,1,0,0,0,82,696,1,0,0,0,84,700,1,0,0,0,86,706,1,0,0, - 0,88,715,1,0,0,0,90,722,1,0,0,0,92,727,1,0,0,0,94,730,1,0,0,0,96,733, - 1,0,0,0,98,739,1,0,0,0,100,755,1,0,0,0,102,757,1,0,0,0,104,763,1,0,0, - 0,106,773,1,0,0,0,108,782,1,0,0,0,110,785,1,0,0,0,112,790,1,0,0,0,114, - 794,1,0,0,0,116,801,1,0,0,0,118,806,1,0,0,0,120,814,1,0,0,0,122,819,1, - 0,0,0,124,823,1,0,0,0,126,828,1,0,0,0,128,834,1,0,0,0,130,847,1,0,0,0, - 132,854,1,0,0,0,134,860,1,0,0,0,136,865,1,0,0,0,138,869,1,0,0,0,140,873, - 1,0,0,0,142,878,1,0,0,0,144,884,1,0,0,0,146,891,1,0,0,0,148,894,1,0,0, - 0,150,897,1,0,0,0,152,903,1,0,0,0,154,909,1,0,0,0,156,914,1,0,0,0,158, - 924,1,0,0,0,160,934,1,0,0,0,162,943,1,0,0,0,164,951,1,0,0,0,166,959,1, - 0,0,0,168,965,1,0,0,0,170,975,1,0,0,0,172,983,1,0,0,0,174,990,1,0,0,0, - 176,996,1,0,0,0,178,1003,1,0,0,0,180,1007,1,0,0,0,182,1012,1,0,0,0,184, - 1019,1,0,0,0,186,1026,1,0,0,0,188,1033,1,0,0,0,190,1038,1,0,0,0,192,1043, - 1,0,0,0,194,1052,1,0,0,0,196,1062,1,0,0,0,198,1067,1,0,0,0,200,1073,1, - 0,0,0,202,1078,1,0,0,0,204,1088,1,0,0,0,206,1091,1,0,0,0,208,1095,1,0, - 0,0,210,1102,1,0,0,0,212,1111,1,0,0,0,214,1116,1,0,0,0,216,1125,1,0,0, - 0,218,1129,1,0,0,0,220,1138,1,0,0,0,222,1148,1,0,0,0,224,1154,1,0,0,0, - 226,1162,1,0,0,0,228,1168,1,0,0,0,230,1175,1,0,0,0,232,1180,1,0,0,0,234, - 1185,1,0,0,0,236,1191,1,0,0,0,238,1197,1,0,0,0,240,1204,1,0,0,0,242,1209, - 1,0,0,0,244,1226,1,0,0,0,246,1255,1,0,0,0,248,1303,1,0,0,0,250,1381,1, - 0,0,0,252,1383,1,0,0,0,254,1390,1,0,0,0,256,1394,1,0,0,0,258,1401,1,0, - 0,0,260,1417,1,0,0,0,262,1419,1,0,0,0,264,1421,1,0,0,0,266,1423,1,0,0, - 0,268,1425,1,0,0,0,270,1427,1,0,0,0,272,1429,1,0,0,0,274,1431,1,0,0,0, - 276,1433,1,0,0,0,278,1435,1,0,0,0,280,1437,1,0,0,0,282,1439,1,0,0,0,284, - 1441,1,0,0,0,286,1443,1,0,0,0,288,1445,1,0,0,0,290,1447,1,0,0,0,292,1449, - 1,0,0,0,294,1451,1,0,0,0,296,1453,1,0,0,0,298,1455,1,0,0,0,300,1457,1, - 0,0,0,302,1459,1,0,0,0,304,1461,1,0,0,0,306,1463,1,0,0,0,308,1465,1,0, - 0,0,310,1467,1,0,0,0,312,1469,1,0,0,0,314,1471,1,0,0,0,316,1473,1,0,0, - 0,318,1475,1,0,0,0,320,1477,1,0,0,0,322,1480,1,0,0,0,324,1482,1,0,0,0, - 326,1484,1,0,0,0,328,1486,1,0,0,0,330,1489,1,0,0,0,332,1492,1,0,0,0,334, - 1494,1,0,0,0,336,1496,1,0,0,0,338,1499,1,0,0,0,340,1501,1,0,0,0,342,1503, - 1,0,0,0,344,1505,1,0,0,0,346,1508,1,0,0,0,348,1510,1,0,0,0,350,1513,1, - 0,0,0,352,1515,1,0,0,0,354,1517,1,0,0,0,356,1520,1,0,0,0,358,1524,1,0, - 0,0,360,1528,1,0,0,0,362,1530,1,0,0,0,364,1532,1,0,0,0,366,1535,1,0,0, - 0,368,1541,1,0,0,0,370,1547,1,0,0,0,372,1549,1,0,0,0,374,1556,1,0,0,0, - 376,1558,1,0,0,0,378,1562,1,0,0,0,380,1565,1,0,0,0,382,1568,1,0,0,0,384, - 1571,1,0,0,0,386,1573,1,0,0,0,388,1575,1,0,0,0,390,1577,1,0,0,0,392,1579, - 1,0,0,0,394,1584,1,0,0,0,396,1589,1,0,0,0,398,1591,1,0,0,0,400,1593,1, - 0,0,0,402,1596,1,0,0,0,404,1600,1,0,0,0,406,1602,1,0,0,0,408,1604,1,0, - 0,0,410,1606,1,0,0,0,412,1608,1,0,0,0,414,1611,1,0,0,0,416,1613,1,0,0, - 0,418,1631,1,0,0,0,420,1644,1,0,0,0,422,1659,1,0,0,0,424,1663,1,0,0,0, - 426,1667,1,0,0,0,428,1677,1,0,0,0,430,1681,1,0,0,0,432,1685,1,0,0,0,434, - 1691,1,0,0,0,436,1697,1,0,0,0,438,1706,1,0,0,0,440,1710,1,0,0,0,442,1715, - 1,0,0,0,444,1721,1,0,0,0,446,1726,1,0,0,0,448,1731,1,0,0,0,450,1741,1, - 0,0,0,452,1748,1,0,0,0,454,1752,1,0,0,0,456,1757,1,0,0,0,458,1764,1,0, - 0,0,460,1770,1,0,0,0,462,463,3,260,127,0,463,464,3,282,138,0,464,465, - 3,282,138,0,465,7,1,0,0,0,466,467,3,260,127,0,467,468,3,286,140,0,468, - 469,3,266,130,0,469,9,1,0,0,0,470,471,3,260,127,0,471,472,3,286,140,0, - 472,473,3,298,146,0,473,474,3,276,135,0,474,11,1,0,0,0,475,476,3,260, - 127,0,476,477,3,286,140,0,477,478,3,308,151,0,478,13,1,0,0,0,479,480, - 3,260,127,0,480,481,3,294,144,0,481,482,3,294,144,0,482,483,3,260,127, - 0,483,484,3,308,151,0,484,15,1,0,0,0,485,486,3,260,127,0,486,487,3,296, - 145,0,487,17,1,0,0,0,488,489,3,260,127,0,489,490,3,296,145,0,490,491, - 3,264,129,0,491,503,1,0,0,0,492,493,3,260,127,0,493,494,3,296,145,0,494, - 495,3,264,129,0,495,496,3,268,131,0,496,497,3,286,140,0,497,498,3,266, - 130,0,498,499,3,276,135,0,499,500,3,286,140,0,500,501,3,272,133,0,501, - 503,1,0,0,0,502,488,1,0,0,0,502,492,1,0,0,0,503,19,1,0,0,0,504,505,3, - 260,127,0,505,506,3,296,145,0,506,507,3,288,141,0,507,508,3,270,132,0, - 508,21,1,0,0,0,509,510,3,262,128,0,510,511,3,268,131,0,511,512,3,298, - 146,0,512,513,3,304,149,0,513,514,3,268,131,0,514,515,3,268,131,0,515, - 516,3,286,140,0,516,23,1,0,0,0,517,518,3,262,128,0,518,519,3,288,141, - 0,519,520,3,298,146,0,520,521,3,274,134,0,521,25,1,0,0,0,522,523,3,262, - 128,0,523,524,3,308,151,0,524,27,1,0,0,0,525,526,3,264,129,0,526,527, - 3,260,127,0,527,528,3,296,145,0,528,529,3,268,131,0,529,29,1,0,0,0,530, - 531,3,264,129,0,531,532,3,260,127,0,532,533,3,296,145,0,533,534,3,298, - 146,0,534,31,1,0,0,0,535,536,3,264,129,0,536,537,3,260,127,0,537,538, - 3,298,146,0,538,539,3,264,129,0,539,540,3,274,134,0,540,33,1,0,0,0,541, - 542,3,264,129,0,542,543,3,288,141,0,543,544,3,274,134,0,544,545,3,288, - 141,0,545,546,3,294,144,0,546,547,3,298,146,0,547,35,1,0,0,0,548,549, - 3,264,129,0,549,550,3,288,141,0,550,551,3,282,138,0,551,552,3,282,138, - 0,552,553,3,260,127,0,553,554,3,298,146,0,554,555,3,268,131,0,555,37, - 1,0,0,0,556,557,3,264,129,0,557,558,3,288,141,0,558,559,3,282,138,0,559, - 560,3,300,147,0,560,561,3,284,139,0,561,562,3,286,140,0,562,563,3,296, - 145,0,563,39,1,0,0,0,564,565,3,264,129,0,565,566,3,294,144,0,566,567, - 3,288,141,0,567,568,3,296,145,0,568,569,3,296,145,0,569,41,1,0,0,0,570, - 571,3,264,129,0,571,572,3,300,147,0,572,573,3,262,128,0,573,574,3,268, - 131,0,574,43,1,0,0,0,575,576,3,264,129,0,576,577,3,300,147,0,577,578, - 3,294,144,0,578,579,3,294,144,0,579,580,3,268,131,0,580,581,3,286,140, - 0,581,582,3,298,146,0,582,45,1,0,0,0,583,584,3,266,130,0,584,585,3,260, - 127,0,585,586,3,298,146,0,586,587,3,268,131,0,587,47,1,0,0,0,588,589, - 3,266,130,0,589,590,3,260,127,0,590,591,3,308,151,0,591,49,1,0,0,0,592, - 593,3,266,130,0,593,594,3,268,131,0,594,595,3,296,145,0,595,596,3,264, - 129,0,596,51,1,0,0,0,597,598,3,266,130,0,598,599,3,268,131,0,599,600, - 3,296,145,0,600,601,3,264,129,0,601,602,3,268,131,0,602,603,3,286,140, - 0,603,604,3,266,130,0,604,605,3,276,135,0,605,606,3,286,140,0,606,607, - 3,272,133,0,607,53,1,0,0,0,608,609,3,266,130,0,609,610,3,276,135,0,610, - 611,3,296,145,0,611,612,3,298,146,0,612,613,3,276,135,0,613,614,3,286, - 140,0,614,615,3,264,129,0,615,616,3,298,146,0,616,55,1,0,0,0,617,618, - 3,268,131,0,618,619,3,282,138,0,619,620,3,296,145,0,620,621,3,268,131, - 0,621,57,1,0,0,0,622,623,3,268,131,0,623,624,3,286,140,0,624,625,3,266, - 130,0,625,59,1,0,0,0,626,627,3,268,131,0,627,628,3,306,150,0,628,629, - 3,264,129,0,629,630,3,268,131,0,630,631,3,290,142,0,631,632,3,298,146, - 0,632,61,1,0,0,0,633,634,3,268,131,0,634,635,3,306,150,0,635,636,3,264, - 129,0,636,637,3,282,138,0,637,638,3,300,147,0,638,639,3,266,130,0,639, - 640,3,268,131,0,640,63,1,0,0,0,641,642,3,268,131,0,642,643,3,306,150, - 0,643,644,3,298,146,0,644,645,3,294,144,0,645,646,3,260,127,0,646,647, - 3,264,129,0,647,648,3,298,146,0,648,65,1,0,0,0,649,650,3,270,132,0,650, - 651,3,276,135,0,651,652,3,286,140,0,652,653,3,260,127,0,653,654,3,282, - 138,0,654,67,1,0,0,0,655,656,3,270,132,0,656,657,3,276,135,0,657,658, - 3,286,140,0,658,659,3,260,127,0,659,660,3,282,138,0,660,661,3,282,138, - 0,661,662,3,308,151,0,662,69,1,0,0,0,663,664,3,270,132,0,664,665,3,276, - 135,0,665,666,3,294,144,0,666,667,3,296,145,0,667,668,3,298,146,0,668, - 71,1,0,0,0,669,670,3,270,132,0,670,671,3,286,140,0,671,73,1,0,0,0,672, - 673,3,270,132,0,673,674,3,288,141,0,674,675,3,282,138,0,675,676,3,282, - 138,0,676,677,3,288,141,0,677,678,3,304,149,0,678,679,3,276,135,0,679, - 680,3,286,140,0,680,681,3,272,133,0,681,75,1,0,0,0,682,683,3,270,132, - 0,683,684,3,288,141,0,684,685,3,294,144,0,685,77,1,0,0,0,686,687,3,270, - 132,0,687,688,3,294,144,0,688,689,3,288,141,0,689,690,3,284,139,0,690, - 79,1,0,0,0,691,692,3,270,132,0,692,693,3,300,147,0,693,694,3,282,138, - 0,694,695,3,282,138,0,695,81,1,0,0,0,696,697,3,270,132,0,697,698,3,300, - 147,0,698,699,3,286,140,0,699,83,1,0,0,0,700,701,3,272,133,0,701,702, - 3,294,144,0,702,703,3,288,141,0,703,704,3,300,147,0,704,705,3,290,142, - 0,705,85,1,0,0,0,706,707,3,272,133,0,707,708,3,294,144,0,708,709,3,288, - 141,0,709,710,3,300,147,0,710,711,3,290,142,0,711,712,3,276,135,0,712, - 713,3,286,140,0,713,714,3,272,133,0,714,87,1,0,0,0,715,716,3,274,134, - 0,716,717,3,260,127,0,717,718,3,302,148,0,718,719,3,276,135,0,719,720, - 3,286,140,0,720,721,3,272,133,0,721,89,1,0,0,0,722,723,3,274,134,0,723, - 724,3,288,141,0,724,725,3,300,147,0,725,726,3,294,144,0,726,91,1,0,0, - 0,727,728,3,276,135,0,728,729,3,266,130,0,729,93,1,0,0,0,730,731,3,276, - 135,0,731,732,3,270,132,0,732,95,1,0,0,0,733,734,3,276,135,0,734,735, - 3,282,138,0,735,736,3,276,135,0,736,737,3,280,137,0,737,738,3,268,131, - 0,738,97,1,0,0,0,739,740,3,276,135,0,740,741,3,286,140,0,741,99,1,0,0, - 0,742,743,3,276,135,0,743,744,3,286,140,0,744,745,3,270,132,0,745,756, - 1,0,0,0,746,747,3,276,135,0,747,748,3,286,140,0,748,749,3,270,132,0,749, - 750,3,276,135,0,750,751,3,286,140,0,751,752,3,276,135,0,752,753,3,298, - 146,0,753,754,3,308,151,0,754,756,1,0,0,0,755,742,1,0,0,0,755,746,1,0, - 0,0,756,101,1,0,0,0,757,758,3,276,135,0,758,759,3,286,140,0,759,760,3, - 286,140,0,760,761,3,268,131,0,761,762,3,294,144,0,762,103,1,0,0,0,763, - 764,3,276,135,0,764,765,3,286,140,0,765,766,3,298,146,0,766,767,3,268, - 131,0,767,768,3,294,144,0,768,769,3,296,145,0,769,770,3,268,131,0,770, - 771,3,264,129,0,771,772,3,298,146,0,772,105,1,0,0,0,773,774,3,276,135, - 0,774,775,3,286,140,0,775,776,3,298,146,0,776,777,3,268,131,0,777,778, - 3,294,144,0,778,779,3,302,148,0,779,780,3,260,127,0,780,781,3,282,138, - 0,781,107,1,0,0,0,782,783,3,276,135,0,783,784,3,296,145,0,784,109,1,0, - 0,0,785,786,3,278,136,0,786,787,3,288,141,0,787,788,3,276,135,0,788,789, - 3,286,140,0,789,111,1,0,0,0,790,791,3,280,137,0,791,792,3,268,131,0,792, - 793,3,308,151,0,793,113,1,0,0,0,794,795,3,282,138,0,795,796,3,260,127, - 0,796,797,3,284,139,0,797,798,3,262,128,0,798,799,3,266,130,0,799,800, - 3,260,127,0,800,115,1,0,0,0,801,802,3,282,138,0,802,803,3,260,127,0,803, - 804,3,296,145,0,804,805,3,298,146,0,805,117,1,0,0,0,806,807,3,282,138, - 0,807,808,3,268,131,0,808,809,3,260,127,0,809,810,3,266,130,0,810,811, - 3,276,135,0,811,812,3,286,140,0,812,813,3,272,133,0,813,119,1,0,0,0,814, - 815,3,282,138,0,815,816,3,268,131,0,816,817,3,270,132,0,817,818,3,298, - 146,0,818,121,1,0,0,0,819,820,3,282,138,0,820,821,3,268,131,0,821,822, - 3,298,146,0,822,123,1,0,0,0,823,824,3,282,138,0,824,825,3,276,135,0,825, - 826,3,280,137,0,826,827,3,268,131,0,827,125,1,0,0,0,828,829,3,282,138, - 0,829,830,3,276,135,0,830,831,3,284,139,0,831,832,3,276,135,0,832,833, - 3,298,146,0,833,127,1,0,0,0,834,835,3,284,139,0,835,836,3,260,127,0,836, - 837,3,298,146,0,837,838,3,268,131,0,838,839,3,294,144,0,839,840,3,276, - 135,0,840,841,3,260,127,0,841,842,3,282,138,0,842,843,3,276,135,0,843, - 844,3,310,152,0,844,845,3,268,131,0,845,846,3,266,130,0,846,129,1,0,0, - 0,847,848,3,284,139,0,848,849,3,276,135,0,849,850,3,286,140,0,850,851, - 3,300,147,0,851,852,3,298,146,0,852,853,3,268,131,0,853,131,1,0,0,0,854, - 855,3,284,139,0,855,856,3,288,141,0,856,857,3,286,140,0,857,858,3,298, - 146,0,858,859,3,274,134,0,859,133,1,0,0,0,860,861,3,286,140,0,861,862, - 3,260,127,0,862,863,3,284,139,0,863,864,3,268,131,0,864,135,1,0,0,0,865, - 866,3,286,140,0,866,867,3,260,127,0,867,868,3,286,140,0,868,137,1,0,0, - 0,869,870,3,286,140,0,870,871,3,288,141,0,871,872,3,298,146,0,872,139, - 1,0,0,0,873,874,3,286,140,0,874,875,3,300,147,0,875,876,3,282,138,0,876, - 877,3,282,138,0,877,141,1,0,0,0,878,879,3,286,140,0,879,880,3,300,147, - 0,880,881,3,282,138,0,881,882,3,282,138,0,882,883,3,296,145,0,883,143, - 1,0,0,0,884,885,3,288,141,0,885,886,3,270,132,0,886,887,3,270,132,0,887, - 888,3,296,145,0,888,889,3,268,131,0,889,890,3,298,146,0,890,145,1,0,0, - 0,891,892,3,288,141,0,892,893,3,286,140,0,893,147,1,0,0,0,894,895,3,288, - 141,0,895,896,3,294,144,0,896,149,1,0,0,0,897,898,3,288,141,0,898,899, - 3,294,144,0,899,900,3,266,130,0,900,901,3,268,131,0,901,902,3,294,144, - 0,902,151,1,0,0,0,903,904,3,288,141,0,904,905,3,300,147,0,905,906,3,298, - 146,0,906,907,3,268,131,0,907,908,3,294,144,0,908,153,1,0,0,0,909,910, - 3,288,141,0,910,911,3,302,148,0,911,912,3,268,131,0,912,913,3,294,144, - 0,913,155,1,0,0,0,914,915,3,290,142,0,915,916,3,260,127,0,916,917,3,294, - 144,0,917,918,3,298,146,0,918,919,3,276,135,0,919,920,3,298,146,0,920, - 921,3,276,135,0,921,922,3,288,141,0,922,923,3,286,140,0,923,157,1,0,0, - 0,924,925,3,290,142,0,925,926,3,294,144,0,926,927,3,268,131,0,927,928, - 3,264,129,0,928,929,3,268,131,0,929,930,3,266,130,0,930,931,3,276,135, - 0,931,932,3,286,140,0,932,933,3,272,133,0,933,159,1,0,0,0,934,935,3,290, - 142,0,935,936,3,294,144,0,936,937,3,268,131,0,937,938,3,304,149,0,938, - 939,3,274,134,0,939,940,3,268,131,0,940,941,3,294,144,0,941,942,3,268, - 131,0,942,161,1,0,0,0,943,944,3,292,143,0,944,945,3,300,147,0,945,946, - 3,260,127,0,946,947,3,282,138,0,947,948,3,276,135,0,948,949,3,270,132, - 0,949,950,3,308,151,0,950,163,1,0,0,0,951,952,3,292,143,0,952,953,3,300, - 147,0,953,954,3,260,127,0,954,955,3,294,144,0,955,956,3,298,146,0,956, - 957,3,268,131,0,957,958,3,294,144,0,958,165,1,0,0,0,959,960,3,294,144, - 0,960,961,3,260,127,0,961,962,3,286,140,0,962,963,3,272,133,0,963,964, - 3,268,131,0,964,167,1,0,0,0,965,966,3,294,144,0,966,967,3,268,131,0,967, - 968,3,264,129,0,968,969,3,300,147,0,969,970,3,294,144,0,970,971,3,296, - 145,0,971,972,3,276,135,0,972,973,3,302,148,0,973,974,3,268,131,0,974, - 169,1,0,0,0,975,976,3,294,144,0,976,977,3,268,131,0,977,978,3,290,142, - 0,978,979,3,282,138,0,979,980,3,260,127,0,980,981,3,264,129,0,981,982, - 3,268,131,0,982,171,1,0,0,0,983,984,3,294,144,0,984,985,3,268,131,0,985, - 986,3,298,146,0,986,987,3,300,147,0,987,988,3,294,144,0,988,989,3,286, - 140,0,989,173,1,0,0,0,990,991,3,294,144,0,991,992,3,276,135,0,992,993, - 3,272,133,0,993,994,3,274,134,0,994,995,3,298,146,0,995,175,1,0,0,0,996, - 997,3,294,144,0,997,998,3,288,141,0,998,999,3,282,138,0,999,1000,3,282, - 138,0,1000,1001,3,300,147,0,1001,1002,3,290,142,0,1002,177,1,0,0,0,1003, - 1004,3,294,144,0,1004,1005,3,288,141,0,1005,1006,3,304,149,0,1006,179, - 1,0,0,0,1007,1008,3,294,144,0,1008,1009,3,288,141,0,1009,1010,3,304,149, - 0,1010,1011,3,296,145,0,1011,181,1,0,0,0,1012,1013,3,296,145,0,1013,1014, - 3,260,127,0,1014,1015,3,284,139,0,1015,1016,3,290,142,0,1016,1017,3,282, - 138,0,1017,1018,3,268,131,0,1018,183,1,0,0,0,1019,1020,3,296,145,0,1020, - 1021,3,268,131,0,1021,1022,3,264,129,0,1022,1023,3,288,141,0,1023,1024, - 3,286,140,0,1024,1025,3,266,130,0,1025,185,1,0,0,0,1026,1027,3,296,145, - 0,1027,1028,3,268,131,0,1028,1029,3,282,138,0,1029,1030,3,268,131,0,1030, - 1031,3,264,129,0,1031,1032,3,298,146,0,1032,187,1,0,0,0,1033,1034,3,296, - 145,0,1034,1035,3,268,131,0,1035,1036,3,284,139,0,1036,1037,3,276,135, - 0,1037,189,1,0,0,0,1038,1039,3,296,145,0,1039,1040,3,268,131,0,1040,1041, - 3,298,146,0,1041,1042,3,296,145,0,1042,191,1,0,0,0,1043,1044,3,296,145, - 0,1044,1045,3,268,131,0,1045,1046,3,298,146,0,1046,1047,3,298,146,0,1047, - 1048,3,276,135,0,1048,1049,3,286,140,0,1049,1050,3,272,133,0,1050,1051, - 3,296,145,0,1051,193,1,0,0,0,1052,1053,3,296,145,0,1053,1054,3,300,147, - 0,1054,1055,3,262,128,0,1055,1056,3,296,145,0,1056,1057,3,298,146,0,1057, - 1058,3,294,144,0,1058,1059,3,276,135,0,1059,1060,3,286,140,0,1060,1061, - 3,272,133,0,1061,195,1,0,0,0,1062,1063,3,298,146,0,1063,1064,3,274,134, - 0,1064,1065,3,268,131,0,1065,1066,3,286,140,0,1066,197,1,0,0,0,1067,1068, - 3,298,146,0,1068,1069,3,274,134,0,1069,1070,3,294,144,0,1070,1071,3,288, - 141,0,1071,1072,3,304,149,0,1072,199,1,0,0,0,1073,1074,3,298,146,0,1074, - 1075,3,276,135,0,1075,1076,3,268,131,0,1076,1077,3,296,145,0,1077,201, - 1,0,0,0,1078,1079,3,298,146,0,1079,1080,3,276,135,0,1080,1081,3,284,139, - 0,1081,1082,3,268,131,0,1082,1083,3,296,145,0,1083,1084,3,298,146,0,1084, - 1085,3,260,127,0,1085,1086,3,284,139,0,1086,1087,3,290,142,0,1087,203, - 1,0,0,0,1088,1089,3,298,146,0,1089,1090,3,288,141,0,1090,205,1,0,0,0, - 1091,1092,3,298,146,0,1092,1093,3,288,141,0,1093,1094,3,290,142,0,1094, - 207,1,0,0,0,1095,1096,3,298,146,0,1096,1097,3,288,141,0,1097,1098,3,298, - 146,0,1098,1099,3,260,127,0,1099,1100,3,282,138,0,1100,1101,3,296,145, - 0,1101,209,1,0,0,0,1102,1103,3,298,146,0,1103,1104,3,294,144,0,1104,1105, - 3,260,127,0,1105,1106,3,276,135,0,1106,1107,3,282,138,0,1107,1108,3,276, - 135,0,1108,1109,3,286,140,0,1109,1110,3,272,133,0,1110,211,1,0,0,0,1111, - 1112,3,298,146,0,1112,1113,3,294,144,0,1113,1114,3,276,135,0,1114,1115, - 3,284,139,0,1115,213,1,0,0,0,1116,1117,3,298,146,0,1117,1118,3,294,144, - 0,1118,1119,3,300,147,0,1119,1120,3,286,140,0,1120,1121,3,264,129,0,1121, - 1122,3,260,127,0,1122,1123,3,298,146,0,1123,1124,3,268,131,0,1124,215, - 1,0,0,0,1125,1126,3,298,146,0,1126,1127,3,294,144,0,1127,1128,3,308,151, - 0,1128,217,1,0,0,0,1129,1130,3,298,146,0,1130,1131,3,294,144,0,1131,1132, - 3,308,151,0,1132,1133,5,95,0,0,1133,1134,3,264,129,0,1134,1135,3,260, - 127,0,1135,1136,3,296,145,0,1136,1137,3,298,146,0,1137,219,1,0,0,0,1138, - 1139,3,300,147,0,1139,1140,3,286,140,0,1140,1141,3,262,128,0,1141,1142, - 3,288,141,0,1142,1143,3,300,147,0,1143,1144,3,286,140,0,1144,1145,3,266, - 130,0,1145,1146,3,268,131,0,1146,1147,3,266,130,0,1147,221,1,0,0,0,1148, - 1149,3,300,147,0,1149,1150,3,286,140,0,1150,1151,3,276,135,0,1151,1152, - 3,288,141,0,1152,1153,3,286,140,0,1153,223,1,0,0,0,1154,1155,3,300,147, - 0,1155,1156,3,286,140,0,1156,1157,3,290,142,0,1157,1158,3,276,135,0,1158, - 1159,3,302,148,0,1159,1160,3,288,141,0,1160,1161,3,298,146,0,1161,225, - 1,0,0,0,1162,1163,3,300,147,0,1163,1164,3,296,145,0,1164,1165,3,276,135, - 0,1165,1166,3,286,140,0,1166,1167,3,272,133,0,1167,227,1,0,0,0,1168,1169, - 3,302,148,0,1169,1170,3,260,127,0,1170,1171,3,282,138,0,1171,1172,3,300, - 147,0,1172,1173,3,268,131,0,1173,1174,3,296,145,0,1174,229,1,0,0,0,1175, - 1176,3,304,149,0,1176,1177,3,268,131,0,1177,1178,3,268,131,0,1178,1179, - 3,280,137,0,1179,231,1,0,0,0,1180,1181,3,304,149,0,1181,1182,3,274,134, - 0,1182,1183,3,268,131,0,1183,1184,3,286,140,0,1184,233,1,0,0,0,1185,1186, - 3,304,149,0,1186,1187,3,274,134,0,1187,1188,3,268,131,0,1188,1189,3,294, - 144,0,1189,1190,3,268,131,0,1190,235,1,0,0,0,1191,1192,3,304,149,0,1192, - 1193,3,274,134,0,1193,1194,3,276,135,0,1194,1195,3,282,138,0,1195,1196, - 3,268,131,0,1196,237,1,0,0,0,1197,1198,3,304,149,0,1198,1199,3,276,135, - 0,1199,1200,3,286,140,0,1200,1201,3,266,130,0,1201,1202,3,288,141,0,1202, - 1203,3,304,149,0,1203,239,1,0,0,0,1204,1205,3,304,149,0,1205,1206,3,276, - 135,0,1206,1207,3,298,146,0,1207,1208,3,274,134,0,1208,241,1,0,0,0,1209, - 1210,3,304,149,0,1210,1211,3,276,135,0,1211,1212,3,298,146,0,1212,1213, - 3,274,134,0,1213,1214,3,276,135,0,1214,1215,3,286,140,0,1215,243,1,0, - 0,0,1216,1217,3,308,151,0,1217,1218,3,268,131,0,1218,1219,3,260,127,0, - 1219,1220,3,294,144,0,1220,1227,1,0,0,0,1221,1222,3,308,151,0,1222,1223, - 3,308,151,0,1223,1224,3,308,151,0,1224,1225,3,308,151,0,1225,1227,1,0, - 0,0,1226,1216,1,0,0,0,1226,1221,1,0,0,0,1227,245,1,0,0,0,1228,1229,3, - 326,160,0,1229,1230,3,262,128,0,1230,1256,1,0,0,0,1231,1232,3,326,160, - 0,1232,1233,3,270,132,0,1233,1256,1,0,0,0,1234,1235,3,326,160,0,1235, - 1236,3,294,144,0,1236,1256,1,0,0,0,1237,1238,3,326,160,0,1238,1239,3, - 286,140,0,1239,1256,1,0,0,0,1240,1241,3,326,160,0,1241,1242,3,298,146, - 0,1242,1256,1,0,0,0,1243,1244,3,326,160,0,1244,1245,5,48,0,0,1245,1256, - 1,0,0,0,1246,1247,3,326,160,0,1247,1248,3,260,127,0,1248,1256,1,0,0,0, - 1249,1250,3,326,160,0,1250,1251,3,302,148,0,1251,1256,1,0,0,0,1252,1253, - 3,326,160,0,1253,1254,3,326,160,0,1254,1256,1,0,0,0,1255,1228,1,0,0,0, - 1255,1231,1,0,0,0,1255,1234,1,0,0,0,1255,1237,1,0,0,0,1255,1240,1,0,0, - 0,1255,1243,1,0,0,0,1255,1246,1,0,0,0,1255,1249,1,0,0,0,1255,1252,1,0, - 0,0,1256,247,1,0,0,0,1257,1261,3,312,153,0,1258,1261,3,414,204,0,1259, - 1261,3,340,167,0,1260,1257,1,0,0,0,1260,1258,1,0,0,0,1260,1259,1,0,0, - 0,1261,1268,1,0,0,0,1262,1267,3,312,153,0,1263,1267,3,414,204,0,1264, - 1267,3,316,155,0,1265,1267,3,340,167,0,1266,1262,1,0,0,0,1266,1263,1, - 0,0,0,1266,1264,1,0,0,0,1266,1265,1,0,0,0,1267,1270,1,0,0,0,1268,1266, - 1,0,0,0,1268,1269,1,0,0,0,1269,1304,1,0,0,0,1270,1268,1,0,0,0,1271,1282, - 3,324,159,0,1272,1281,8,0,0,0,1273,1281,3,246,120,0,1274,1275,3,326,160, - 0,1275,1276,3,396,195,0,1276,1281,1,0,0,0,1277,1278,3,324,159,0,1278, - 1279,3,324,159,0,1279,1281,1,0,0,0,1280,1272,1,0,0,0,1280,1273,1,0,0, - 0,1280,1274,1,0,0,0,1280,1277,1,0,0,0,1281,1284,1,0,0,0,1282,1280,1,0, - 0,0,1282,1283,1,0,0,0,1283,1285,1,0,0,0,1284,1282,1,0,0,0,1285,1286,3, - 324,159,0,1286,1304,1,0,0,0,1287,1298,3,390,192,0,1288,1297,8,1,0,0,1289, - 1297,3,246,120,0,1290,1291,3,326,160,0,1291,1292,3,390,192,0,1292,1297, - 1,0,0,0,1293,1294,3,390,192,0,1294,1295,3,390,192,0,1295,1297,1,0,0,0, - 1296,1288,1,0,0,0,1296,1289,1,0,0,0,1296,1290,1,0,0,0,1296,1293,1,0,0, - 0,1297,1300,1,0,0,0,1298,1296,1,0,0,0,1298,1299,1,0,0,0,1299,1301,1,0, - 0,0,1300,1298,1,0,0,0,1301,1302,3,390,192,0,1302,1304,1,0,0,0,1303,1260, - 1,0,0,0,1303,1271,1,0,0,0,1303,1287,1,0,0,0,1304,249,1,0,0,0,1305,1306, - 3,256,125,0,1306,1310,3,342,168,0,1307,1309,3,318,156,0,1308,1307,1,0, - 0,0,1309,1312,1,0,0,0,1310,1308,1,0,0,0,1310,1311,1,0,0,0,1311,1315,1, - 0,0,0,1312,1310,1,0,0,0,1313,1316,3,290,142,0,1314,1316,3,268,131,0,1315, - 1313,1,0,0,0,1315,1314,1,0,0,0,1316,1319,1,0,0,0,1317,1320,3,386,190, - 0,1318,1320,3,338,166,0,1319,1317,1,0,0,0,1319,1318,1,0,0,0,1319,1320, - 1,0,0,0,1320,1322,1,0,0,0,1321,1323,3,316,155,0,1322,1321,1,0,0,0,1323, - 1324,1,0,0,0,1324,1322,1,0,0,0,1324,1325,1,0,0,0,1325,1382,1,0,0,0,1326, - 1329,3,256,125,0,1327,1330,3,290,142,0,1328,1330,3,268,131,0,1329,1327, - 1,0,0,0,1329,1328,1,0,0,0,1330,1333,1,0,0,0,1331,1334,3,386,190,0,1332, - 1334,3,338,166,0,1333,1331,1,0,0,0,1333,1332,1,0,0,0,1333,1334,1,0,0, - 0,1334,1336,1,0,0,0,1335,1337,3,316,155,0,1336,1335,1,0,0,0,1337,1338, - 1,0,0,0,1338,1336,1,0,0,0,1338,1339,1,0,0,0,1339,1382,1,0,0,0,1340,1341, - 3,254,124,0,1341,1345,3,342,168,0,1342,1344,3,316,155,0,1343,1342,1,0, - 0,0,1344,1347,1,0,0,0,1345,1343,1,0,0,0,1345,1346,1,0,0,0,1346,1348,1, - 0,0,0,1347,1345,1,0,0,0,1348,1351,3,268,131,0,1349,1352,3,386,190,0,1350, - 1352,3,338,166,0,1351,1349,1,0,0,0,1351,1350,1,0,0,0,1351,1352,1,0,0, - 0,1352,1354,1,0,0,0,1353,1355,3,316,155,0,1354,1353,1,0,0,0,1355,1356, - 1,0,0,0,1356,1354,1,0,0,0,1356,1357,1,0,0,0,1357,1382,1,0,0,0,1358,1359, - 3,342,168,0,1359,1360,3,254,124,0,1360,1363,3,268,131,0,1361,1364,3,386, - 190,0,1362,1364,3,338,166,0,1363,1361,1,0,0,0,1363,1362,1,0,0,0,1363, - 1364,1,0,0,0,1364,1366,1,0,0,0,1365,1367,3,316,155,0,1366,1365,1,0,0, - 0,1367,1368,1,0,0,0,1368,1366,1,0,0,0,1368,1369,1,0,0,0,1369,1382,1,0, - 0,0,1370,1371,3,254,124,0,1371,1374,3,268,131,0,1372,1375,3,386,190,0, - 1373,1375,3,338,166,0,1374,1372,1,0,0,0,1374,1373,1,0,0,0,1374,1375,1, - 0,0,0,1375,1377,1,0,0,0,1376,1378,3,316,155,0,1377,1376,1,0,0,0,1378, - 1379,1,0,0,0,1379,1377,1,0,0,0,1379,1380,1,0,0,0,1380,1382,1,0,0,0,1381, - 1305,1,0,0,0,1381,1326,1,0,0,0,1381,1340,1,0,0,0,1381,1358,1,0,0,0,1381, - 1370,1,0,0,0,1382,251,1,0,0,0,1383,1385,5,48,0,0,1384,1386,3,314,154, - 0,1385,1384,1,0,0,0,1386,1387,1,0,0,0,1387,1385,1,0,0,0,1387,1388,1,0, - 0,0,1388,253,1,0,0,0,1389,1391,3,316,155,0,1390,1389,1,0,0,0,1391,1392, - 1,0,0,0,1392,1390,1,0,0,0,1392,1393,1,0,0,0,1393,255,1,0,0,0,1394,1395, - 5,48,0,0,1395,1397,3,306,150,0,1396,1398,3,318,156,0,1397,1396,1,0,0, - 0,1398,1399,1,0,0,0,1399,1397,1,0,0,0,1399,1400,1,0,0,0,1400,257,1,0, - 0,0,1401,1412,3,396,195,0,1402,1411,8,2,0,0,1403,1411,3,246,120,0,1404, - 1405,3,326,160,0,1405,1406,3,396,195,0,1406,1411,1,0,0,0,1407,1408,3, - 396,195,0,1408,1409,3,396,195,0,1409,1411,1,0,0,0,1410,1402,1,0,0,0,1410, - 1403,1,0,0,0,1410,1404,1,0,0,0,1410,1407,1,0,0,0,1411,1414,1,0,0,0,1412, - 1410,1,0,0,0,1412,1413,1,0,0,0,1413,1415,1,0,0,0,1414,1412,1,0,0,0,1415, - 1416,3,396,195,0,1416,259,1,0,0,0,1417,1418,7,3,0,0,1418,261,1,0,0,0, - 1419,1420,7,4,0,0,1420,263,1,0,0,0,1421,1422,7,5,0,0,1422,265,1,0,0,0, - 1423,1424,7,6,0,0,1424,267,1,0,0,0,1425,1426,7,7,0,0,1426,269,1,0,0,0, - 1427,1428,7,8,0,0,1428,271,1,0,0,0,1429,1430,7,9,0,0,1430,273,1,0,0,0, - 1431,1432,7,10,0,0,1432,275,1,0,0,0,1433,1434,7,11,0,0,1434,277,1,0,0, - 0,1435,1436,7,12,0,0,1436,279,1,0,0,0,1437,1438,7,13,0,0,1438,281,1,0, - 0,0,1439,1440,7,14,0,0,1440,283,1,0,0,0,1441,1442,7,15,0,0,1442,285,1, - 0,0,0,1443,1444,7,16,0,0,1444,287,1,0,0,0,1445,1446,7,17,0,0,1446,289, - 1,0,0,0,1447,1448,7,18,0,0,1448,291,1,0,0,0,1449,1450,7,19,0,0,1450,293, - 1,0,0,0,1451,1452,7,20,0,0,1452,295,1,0,0,0,1453,1454,7,21,0,0,1454,297, - 1,0,0,0,1455,1456,7,22,0,0,1456,299,1,0,0,0,1457,1458,7,23,0,0,1458,301, - 1,0,0,0,1459,1460,7,24,0,0,1460,303,1,0,0,0,1461,1462,7,25,0,0,1462,305, - 1,0,0,0,1463,1464,7,26,0,0,1464,307,1,0,0,0,1465,1466,7,27,0,0,1466,309, - 1,0,0,0,1467,1468,7,28,0,0,1468,311,1,0,0,0,1469,1470,7,29,0,0,1470,313, - 1,0,0,0,1471,1472,7,30,0,0,1472,315,1,0,0,0,1473,1474,7,31,0,0,1474,317, - 1,0,0,0,1475,1476,7,32,0,0,1476,319,1,0,0,0,1477,1478,5,45,0,0,1478,1479, - 5,62,0,0,1479,321,1,0,0,0,1480,1481,5,42,0,0,1481,323,1,0,0,0,1482,1483, - 5,96,0,0,1483,325,1,0,0,0,1484,1485,5,92,0,0,1485,327,1,0,0,0,1486,1487, - 5,58,0,0,1487,1488,5,58,0,0,1488,329,1,0,0,0,1489,1490,5,58,0,0,1490, - 1491,5,61,0,0,1491,331,1,0,0,0,1492,1493,5,58,0,0,1493,333,1,0,0,0,1494, - 1495,5,44,0,0,1495,335,1,0,0,0,1496,1497,5,124,0,0,1497,1498,5,124,0, - 0,1498,337,1,0,0,0,1499,1500,5,45,0,0,1500,339,1,0,0,0,1501,1502,5,36, - 0,0,1502,341,1,0,0,0,1503,1504,5,46,0,0,1504,343,1,0,0,0,1505,1506,5, - 61,0,0,1506,1507,5,61,0,0,1507,345,1,0,0,0,1508,1509,5,61,0,0,1509,347, - 1,0,0,0,1510,1511,5,62,0,0,1511,1512,5,61,0,0,1512,349,1,0,0,0,1513,1514, - 5,62,0,0,1514,351,1,0,0,0,1515,1516,5,35,0,0,1516,353,1,0,0,0,1517,1518, - 5,126,0,0,1518,1519,5,42,0,0,1519,355,1,0,0,0,1520,1521,5,61,0,0,1521, - 1522,5,126,0,0,1522,1523,5,42,0,0,1523,357,1,0,0,0,1524,1525,5,123,0, - 0,1525,1526,1,0,0,0,1526,1527,6,176,0,0,1527,359,1,0,0,0,1528,1529,5, - 91,0,0,1529,361,1,0,0,0,1530,1531,5,40,0,0,1531,363,1,0,0,0,1532,1533, - 5,60,0,0,1533,1534,5,61,0,0,1534,365,1,0,0,0,1535,1536,5,60,0,0,1536, - 1537,5,47,0,0,1537,1538,1,0,0,0,1538,1539,6,180,1,0,1539,1540,6,180,2, - 0,1540,367,1,0,0,0,1541,1542,5,60,0,0,1542,1543,4,181,0,0,1543,1544,1, - 0,0,0,1544,1545,6,181,3,0,1545,1546,6,181,4,0,1546,369,1,0,0,0,1547,1548, - 5,60,0,0,1548,371,1,0,0,0,1549,1550,5,60,0,0,1550,1551,5,47,0,0,1551, - 373,1,0,0,0,1552,1553,5,33,0,0,1553,1557,5,61,0,0,1554,1555,5,60,0,0, - 1555,1557,5,62,0,0,1556,1552,1,0,0,0,1556,1554,1,0,0,0,1557,375,1,0,0, - 0,1558,1559,5,33,0,0,1559,1560,5,126,0,0,1560,1561,5,42,0,0,1561,377, - 1,0,0,0,1562,1563,5,33,0,0,1563,1564,5,126,0,0,1564,379,1,0,0,0,1565, - 1566,5,63,0,0,1566,1567,5,46,0,0,1567,381,1,0,0,0,1568,1569,5,63,0,0, - 1569,1570,5,63,0,0,1570,383,1,0,0,0,1571,1572,5,37,0,0,1572,385,1,0,0, - 0,1573,1574,5,43,0,0,1574,387,1,0,0,0,1575,1576,5,63,0,0,1576,389,1,0, - 0,0,1577,1578,5,34,0,0,1578,391,1,0,0,0,1579,1580,5,102,0,0,1580,1581, - 5,39,0,0,1581,1582,1,0,0,0,1582,1583,6,193,5,0,1583,393,1,0,0,0,1584, - 1585,5,70,0,0,1585,1586,5,39,0,0,1586,1587,1,0,0,0,1587,1588,6,194,6, - 0,1588,395,1,0,0,0,1589,1590,5,39,0,0,1590,397,1,0,0,0,1591,1592,5,126, - 0,0,1592,399,1,0,0,0,1593,1594,5,61,0,0,1594,1595,5,126,0,0,1595,401, - 1,0,0,0,1596,1597,5,125,0,0,1597,1598,1,0,0,0,1598,1599,6,198,7,0,1599, - 403,1,0,0,0,1600,1601,5,93,0,0,1601,405,1,0,0,0,1602,1603,5,41,0,0,1603, - 407,1,0,0,0,1604,1605,5,59,0,0,1605,409,1,0,0,0,1606,1607,5,47,0,0,1607, - 411,1,0,0,0,1608,1609,5,47,0,0,1609,1610,5,62,0,0,1610,413,1,0,0,0,1611, - 1612,5,95,0,0,1612,415,1,0,0,0,1613,1614,5,47,0,0,1614,1615,5,42,0,0, - 1615,1619,1,0,0,0,1616,1618,9,0,0,0,1617,1616,1,0,0,0,1618,1621,1,0,0, - 0,1619,1620,1,0,0,0,1619,1617,1,0,0,0,1620,1622,1,0,0,0,1621,1619,1,0, - 0,0,1622,1623,5,42,0,0,1623,1624,5,47,0,0,1624,1625,1,0,0,0,1625,1626, - 6,205,8,0,1626,417,1,0,0,0,1627,1628,5,45,0,0,1628,1632,5,45,0,0,1629, - 1630,5,47,0,0,1630,1632,5,47,0,0,1631,1627,1,0,0,0,1631,1629,1,0,0,0, - 1632,1636,1,0,0,0,1633,1635,8,33,0,0,1634,1633,1,0,0,0,1635,1638,1,0, - 0,0,1636,1634,1,0,0,0,1636,1637,1,0,0,0,1637,1640,1,0,0,0,1638,1636,1, - 0,0,0,1639,1641,7,34,0,0,1640,1639,1,0,0,0,1641,1642,1,0,0,0,1642,1643, - 6,206,8,0,1643,419,1,0,0,0,1644,1645,7,35,0,0,1645,1646,1,0,0,0,1646, - 1647,6,207,9,0,1647,421,1,0,0,0,1648,1660,8,36,0,0,1649,1660,3,246,120, - 0,1650,1651,3,326,160,0,1651,1652,3,396,195,0,1652,1660,1,0,0,0,1653, - 1654,3,326,160,0,1654,1655,3,358,176,0,1655,1660,1,0,0,0,1656,1657,3, - 396,195,0,1657,1658,3,396,195,0,1658,1660,1,0,0,0,1659,1648,1,0,0,0,1659, - 1649,1,0,0,0,1659,1650,1,0,0,0,1659,1653,1,0,0,0,1659,1656,1,0,0,0,1660, - 1661,1,0,0,0,1661,1659,1,0,0,0,1661,1662,1,0,0,0,1662,423,1,0,0,0,1663, - 1664,3,358,176,0,1664,1665,1,0,0,0,1665,1666,6,209,0,0,1666,425,1,0,0, - 0,1667,1668,3,396,195,0,1668,1669,1,0,0,0,1669,1670,6,210,10,0,1670,1671, - 6,210,7,0,1671,427,1,0,0,0,1672,1678,8,37,0,0,1673,1678,3,246,120,0,1674, - 1675,3,326,160,0,1675,1676,3,358,176,0,1676,1678,1,0,0,0,1677,1672,1, - 0,0,0,1677,1673,1,0,0,0,1677,1674,1,0,0,0,1678,1679,1,0,0,0,1679,1677, - 1,0,0,0,1679,1680,1,0,0,0,1680,429,1,0,0,0,1681,1682,3,358,176,0,1682, - 1683,1,0,0,0,1683,1684,6,212,0,0,1684,431,1,0,0,0,1685,1686,5,47,0,0, - 1686,1687,5,62,0,0,1687,1688,1,0,0,0,1688,1689,6,213,11,0,1689,1690,6, - 213,7,0,1690,433,1,0,0,0,1691,1692,5,62,0,0,1692,1693,1,0,0,0,1693,1694, - 6,214,12,0,1694,1695,6,214,7,0,1695,1696,6,214,13,0,1696,435,1,0,0,0, - 1697,1701,7,38,0,0,1698,1700,7,39,0,0,1699,1698,1,0,0,0,1700,1703,1,0, - 0,0,1701,1699,1,0,0,0,1701,1702,1,0,0,0,1702,1704,1,0,0,0,1703,1701,1, - 0,0,0,1704,1705,6,215,14,0,1705,437,1,0,0,0,1706,1707,5,61,0,0,1707,1708, - 1,0,0,0,1708,1709,6,216,15,0,1709,439,1,0,0,0,1710,1711,3,258,126,0,1711, - 1712,1,0,0,0,1712,1713,6,217,16,0,1713,441,1,0,0,0,1714,1716,7,40,0,0, - 1715,1714,1,0,0,0,1716,1717,1,0,0,0,1717,1715,1,0,0,0,1717,1718,1,0,0, - 0,1718,1719,1,0,0,0,1719,1720,6,218,9,0,1720,443,1,0,0,0,1721,1722,5, - 123,0,0,1722,1723,1,0,0,0,1723,1724,6,219,17,0,1724,1725,6,219,0,0,1725, - 445,1,0,0,0,1726,1727,5,62,0,0,1727,1728,1,0,0,0,1728,1729,6,220,12,0, - 1729,1730,6,220,7,0,1730,447,1,0,0,0,1731,1735,7,38,0,0,1732,1734,7,39, - 0,0,1733,1732,1,0,0,0,1734,1737,1,0,0,0,1735,1733,1,0,0,0,1735,1736,1, - 0,0,0,1736,1738,1,0,0,0,1737,1735,1,0,0,0,1738,1739,6,221,14,0,1739,449, - 1,0,0,0,1740,1742,7,40,0,0,1741,1740,1,0,0,0,1742,1743,1,0,0,0,1743,1741, - 1,0,0,0,1743,1744,1,0,0,0,1744,1745,1,0,0,0,1745,1746,6,222,9,0,1746, - 451,1,0,0,0,1747,1749,8,41,0,0,1748,1747,1,0,0,0,1749,1750,1,0,0,0,1750, - 1748,1,0,0,0,1750,1751,1,0,0,0,1751,453,1,0,0,0,1752,1753,5,123,0,0,1753, - 1754,1,0,0,0,1754,1755,6,224,17,0,1755,1756,6,224,0,0,1756,455,1,0,0, - 0,1757,1758,5,60,0,0,1758,1759,5,47,0,0,1759,1760,1,0,0,0,1760,1761,6, - 225,1,0,1761,1762,6,225,7,0,1762,1763,6,225,2,0,1763,457,1,0,0,0,1764, - 1765,5,60,0,0,1765,1766,1,0,0,0,1766,1767,6,226,3,0,1767,1768,6,226,4, - 0,1768,459,1,0,0,0,1769,1771,7,40,0,0,1770,1769,1,0,0,0,1771,1772,1,0, - 0,0,1772,1770,1,0,0,0,1772,1773,1,0,0,0,1773,1774,1,0,0,0,1774,1775,6, - 227,9,0,1775,461,1,0,0,0,53,0,1,2,3,4,5,502,755,1226,1255,1260,1266,1268, - 1280,1282,1296,1298,1303,1310,1315,1319,1324,1329,1333,1338,1345,1351, - 1356,1363,1368,1374,1379,1381,1387,1392,1399,1410,1412,1556,1619,1631, - 1636,1640,1659,1661,1677,1679,1701,1717,1735,1743,1750,1772,18,5,0,0, - 7,152,0,5,4,0,7,151,0,5,3,0,5,1,0,5,2,0,4,0,0,6,0,0,0,1,0,7,164,0,7,172, - 0,7,143,0,5,5,0,7,122,0,7,141,0,7,127,0,7,147,0 + 0,0,0,420,1,0,0,0,0,422,1,0,0,0,0,424,1,0,0,0,0,426,1,0,0,0,0,428,1,0, + 0,0,0,430,1,0,0,0,0,432,1,0,0,0,1,434,1,0,0,0,1,436,1,0,0,0,1,438,1,0, + 0,0,2,440,1,0,0,0,2,442,1,0,0,0,3,444,1,0,0,0,3,446,1,0,0,0,3,448,1,0, + 0,0,3,450,1,0,0,0,3,452,1,0,0,0,3,454,1,0,0,0,3,456,1,0,0,0,4,458,1,0, + 0,0,4,460,1,0,0,0,4,462,1,0,0,0,5,464,1,0,0,0,5,466,1,0,0,0,5,468,1,0, + 0,0,5,470,1,0,0,0,5,472,1,0,0,0,6,474,1,0,0,0,8,478,1,0,0,0,10,482,1, + 0,0,0,12,487,1,0,0,0,14,491,1,0,0,0,16,497,1,0,0,0,18,514,1,0,0,0,20, + 516,1,0,0,0,22,521,1,0,0,0,24,529,1,0,0,0,26,534,1,0,0,0,28,537,1,0,0, + 0,30,542,1,0,0,0,32,547,1,0,0,0,34,553,1,0,0,0,36,560,1,0,0,0,38,568, + 1,0,0,0,40,576,1,0,0,0,42,582,1,0,0,0,44,587,1,0,0,0,46,595,1,0,0,0,48, + 600,1,0,0,0,50,604,1,0,0,0,52,609,1,0,0,0,54,620,1,0,0,0,56,629,1,0,0, + 0,58,634,1,0,0,0,60,638,1,0,0,0,62,645,1,0,0,0,64,653,1,0,0,0,66,661, + 1,0,0,0,68,667,1,0,0,0,70,674,1,0,0,0,72,682,1,0,0,0,74,688,1,0,0,0,76, + 691,1,0,0,0,78,701,1,0,0,0,80,705,1,0,0,0,82,710,1,0,0,0,84,715,1,0,0, + 0,86,719,1,0,0,0,88,725,1,0,0,0,90,734,1,0,0,0,92,741,1,0,0,0,94,746, + 1,0,0,0,96,749,1,0,0,0,98,752,1,0,0,0,100,758,1,0,0,0,102,765,1,0,0,0, + 104,773,1,0,0,0,106,789,1,0,0,0,108,791,1,0,0,0,110,797,1,0,0,0,112,807, + 1,0,0,0,114,816,1,0,0,0,116,819,1,0,0,0,118,824,1,0,0,0,120,828,1,0,0, + 0,122,835,1,0,0,0,124,840,1,0,0,0,126,848,1,0,0,0,128,853,1,0,0,0,130, + 857,1,0,0,0,132,862,1,0,0,0,134,868,1,0,0,0,136,881,1,0,0,0,138,888,1, + 0,0,0,140,894,1,0,0,0,142,899,1,0,0,0,144,907,1,0,0,0,146,911,1,0,0,0, + 148,915,1,0,0,0,150,920,1,0,0,0,152,926,1,0,0,0,154,933,1,0,0,0,156,936, + 1,0,0,0,158,939,1,0,0,0,160,945,1,0,0,0,162,951,1,0,0,0,164,956,1,0,0, + 0,166,966,1,0,0,0,168,972,1,0,0,0,170,983,1,0,0,0,172,993,1,0,0,0,174, + 1002,1,0,0,0,176,1010,1,0,0,0,178,1018,1,0,0,0,180,1024,1,0,0,0,182,1034, + 1,0,0,0,184,1042,1,0,0,0,186,1049,1,0,0,0,188,1055,1,0,0,0,190,1062,1, + 0,0,0,192,1066,1,0,0,0,194,1071,1,0,0,0,196,1078,1,0,0,0,198,1085,1,0, + 0,0,200,1092,1,0,0,0,202,1097,1,0,0,0,204,1102,1,0,0,0,206,1111,1,0,0, + 0,208,1121,1,0,0,0,210,1126,1,0,0,0,212,1132,1,0,0,0,214,1137,1,0,0,0, + 216,1147,1,0,0,0,218,1150,1,0,0,0,220,1154,1,0,0,0,222,1161,1,0,0,0,224, + 1170,1,0,0,0,226,1175,1,0,0,0,228,1184,1,0,0,0,230,1188,1,0,0,0,232,1197, + 1,0,0,0,234,1207,1,0,0,0,236,1213,1,0,0,0,238,1221,1,0,0,0,240,1227,1, + 0,0,0,242,1234,1,0,0,0,244,1239,1,0,0,0,246,1244,1,0,0,0,248,1250,1,0, + 0,0,250,1256,1,0,0,0,252,1263,1,0,0,0,254,1268,1,0,0,0,256,1285,1,0,0, + 0,258,1319,1,0,0,0,260,1367,1,0,0,0,262,1445,1,0,0,0,264,1447,1,0,0,0, + 266,1454,1,0,0,0,268,1458,1,0,0,0,270,1465,1,0,0,0,272,1481,1,0,0,0,274, + 1483,1,0,0,0,276,1485,1,0,0,0,278,1487,1,0,0,0,280,1489,1,0,0,0,282,1491, + 1,0,0,0,284,1493,1,0,0,0,286,1495,1,0,0,0,288,1497,1,0,0,0,290,1499,1, + 0,0,0,292,1501,1,0,0,0,294,1503,1,0,0,0,296,1505,1,0,0,0,298,1507,1,0, + 0,0,300,1509,1,0,0,0,302,1511,1,0,0,0,304,1513,1,0,0,0,306,1515,1,0,0, + 0,308,1517,1,0,0,0,310,1519,1,0,0,0,312,1521,1,0,0,0,314,1523,1,0,0,0, + 316,1525,1,0,0,0,318,1527,1,0,0,0,320,1529,1,0,0,0,322,1531,1,0,0,0,324, + 1533,1,0,0,0,326,1535,1,0,0,0,328,1537,1,0,0,0,330,1539,1,0,0,0,332,1541, + 1,0,0,0,334,1544,1,0,0,0,336,1546,1,0,0,0,338,1548,1,0,0,0,340,1550,1, + 0,0,0,342,1553,1,0,0,0,344,1556,1,0,0,0,346,1558,1,0,0,0,348,1560,1,0, + 0,0,350,1563,1,0,0,0,352,1565,1,0,0,0,354,1567,1,0,0,0,356,1569,1,0,0, + 0,358,1572,1,0,0,0,360,1574,1,0,0,0,362,1577,1,0,0,0,364,1579,1,0,0,0, + 366,1581,1,0,0,0,368,1584,1,0,0,0,370,1588,1,0,0,0,372,1592,1,0,0,0,374, + 1594,1,0,0,0,376,1596,1,0,0,0,378,1599,1,0,0,0,380,1605,1,0,0,0,382,1611, + 1,0,0,0,384,1613,1,0,0,0,386,1620,1,0,0,0,388,1622,1,0,0,0,390,1626,1, + 0,0,0,392,1629,1,0,0,0,394,1632,1,0,0,0,396,1635,1,0,0,0,398,1637,1,0, + 0,0,400,1639,1,0,0,0,402,1641,1,0,0,0,404,1643,1,0,0,0,406,1648,1,0,0, + 0,408,1653,1,0,0,0,410,1655,1,0,0,0,412,1657,1,0,0,0,414,1660,1,0,0,0, + 416,1664,1,0,0,0,418,1666,1,0,0,0,420,1668,1,0,0,0,422,1670,1,0,0,0,424, + 1672,1,0,0,0,426,1675,1,0,0,0,428,1677,1,0,0,0,430,1695,1,0,0,0,432,1708, + 1,0,0,0,434,1723,1,0,0,0,436,1727,1,0,0,0,438,1731,1,0,0,0,440,1741,1, + 0,0,0,442,1745,1,0,0,0,444,1749,1,0,0,0,446,1755,1,0,0,0,448,1761,1,0, + 0,0,450,1770,1,0,0,0,452,1774,1,0,0,0,454,1779,1,0,0,0,456,1785,1,0,0, + 0,458,1790,1,0,0,0,460,1795,1,0,0,0,462,1805,1,0,0,0,464,1812,1,0,0,0, + 466,1816,1,0,0,0,468,1821,1,0,0,0,470,1828,1,0,0,0,472,1834,1,0,0,0,474, + 475,3,272,133,0,475,476,3,294,144,0,476,477,3,294,144,0,477,7,1,0,0,0, + 478,479,3,272,133,0,479,480,3,298,146,0,480,481,3,278,136,0,481,9,1,0, + 0,0,482,483,3,272,133,0,483,484,3,298,146,0,484,485,3,310,152,0,485,486, + 3,288,141,0,486,11,1,0,0,0,487,488,3,272,133,0,488,489,3,298,146,0,489, + 490,3,320,157,0,490,13,1,0,0,0,491,492,3,272,133,0,492,493,3,306,150, + 0,493,494,3,306,150,0,494,495,3,272,133,0,495,496,3,320,157,0,496,15, + 1,0,0,0,497,498,3,272,133,0,498,499,3,308,151,0,499,17,1,0,0,0,500,501, + 3,272,133,0,501,502,3,308,151,0,502,503,3,276,135,0,503,515,1,0,0,0,504, + 505,3,272,133,0,505,506,3,308,151,0,506,507,3,276,135,0,507,508,3,280, + 137,0,508,509,3,298,146,0,509,510,3,278,136,0,510,511,3,288,141,0,511, + 512,3,298,146,0,512,513,3,284,139,0,513,515,1,0,0,0,514,500,1,0,0,0,514, + 504,1,0,0,0,515,19,1,0,0,0,516,517,3,272,133,0,517,518,3,308,151,0,518, + 519,3,300,147,0,519,520,3,282,138,0,520,21,1,0,0,0,521,522,3,274,134, + 0,522,523,3,280,137,0,523,524,3,310,152,0,524,525,3,316,155,0,525,526, + 3,280,137,0,526,527,3,280,137,0,527,528,3,298,146,0,528,23,1,0,0,0,529, + 530,3,274,134,0,530,531,3,300,147,0,531,532,3,310,152,0,532,533,3,286, + 140,0,533,25,1,0,0,0,534,535,3,274,134,0,535,536,3,320,157,0,536,27,1, + 0,0,0,537,538,3,276,135,0,538,539,3,272,133,0,539,540,3,308,151,0,540, + 541,3,280,137,0,541,29,1,0,0,0,542,543,3,276,135,0,543,544,3,272,133, + 0,544,545,3,308,151,0,545,546,3,310,152,0,546,31,1,0,0,0,547,548,3,276, + 135,0,548,549,3,272,133,0,549,550,3,310,152,0,550,551,3,276,135,0,551, + 552,3,286,140,0,552,33,1,0,0,0,553,554,3,276,135,0,554,555,3,300,147, + 0,555,556,3,286,140,0,556,557,3,300,147,0,557,558,3,306,150,0,558,559, + 3,310,152,0,559,35,1,0,0,0,560,561,3,276,135,0,561,562,3,300,147,0,562, + 563,3,294,144,0,563,564,3,294,144,0,564,565,3,272,133,0,565,566,3,310, + 152,0,566,567,3,280,137,0,567,37,1,0,0,0,568,569,3,276,135,0,569,570, + 3,300,147,0,570,571,3,294,144,0,571,572,3,312,153,0,572,573,3,296,145, + 0,573,574,3,298,146,0,574,575,3,308,151,0,575,39,1,0,0,0,576,577,3,276, + 135,0,577,578,3,306,150,0,578,579,3,300,147,0,579,580,3,308,151,0,580, + 581,3,308,151,0,581,41,1,0,0,0,582,583,3,276,135,0,583,584,3,312,153, + 0,584,585,3,274,134,0,585,586,3,280,137,0,586,43,1,0,0,0,587,588,3,276, + 135,0,588,589,3,312,153,0,589,590,3,306,150,0,590,591,3,306,150,0,591, + 592,3,280,137,0,592,593,3,298,146,0,593,594,3,310,152,0,594,45,1,0,0, + 0,595,596,3,278,136,0,596,597,3,272,133,0,597,598,3,310,152,0,598,599, + 3,280,137,0,599,47,1,0,0,0,600,601,3,278,136,0,601,602,3,272,133,0,602, + 603,3,320,157,0,603,49,1,0,0,0,604,605,3,278,136,0,605,606,3,280,137, + 0,606,607,3,308,151,0,607,608,3,276,135,0,608,51,1,0,0,0,609,610,3,278, + 136,0,610,611,3,280,137,0,611,612,3,308,151,0,612,613,3,276,135,0,613, + 614,3,280,137,0,614,615,3,298,146,0,615,616,3,278,136,0,616,617,3,288, + 141,0,617,618,3,298,146,0,618,619,3,284,139,0,619,53,1,0,0,0,620,621, + 3,278,136,0,621,622,3,288,141,0,622,623,3,308,151,0,623,624,3,310,152, + 0,624,625,3,288,141,0,625,626,3,298,146,0,626,627,3,276,135,0,627,628, + 3,310,152,0,628,55,1,0,0,0,629,630,3,280,137,0,630,631,3,294,144,0,631, + 632,3,308,151,0,632,633,3,280,137,0,633,57,1,0,0,0,634,635,3,280,137, + 0,635,636,3,298,146,0,636,637,3,278,136,0,637,59,1,0,0,0,638,639,3,280, + 137,0,639,640,3,318,156,0,640,641,3,276,135,0,641,642,3,280,137,0,642, + 643,3,302,148,0,643,644,3,310,152,0,644,61,1,0,0,0,645,646,3,280,137, + 0,646,647,3,318,156,0,647,648,3,276,135,0,648,649,3,294,144,0,649,650, + 3,312,153,0,650,651,3,278,136,0,651,652,3,280,137,0,652,63,1,0,0,0,653, + 654,3,280,137,0,654,655,3,318,156,0,655,656,3,310,152,0,656,657,3,306, + 150,0,657,658,3,272,133,0,658,659,3,276,135,0,659,660,3,310,152,0,660, + 65,1,0,0,0,661,662,3,282,138,0,662,663,3,288,141,0,663,664,3,298,146, + 0,664,665,3,272,133,0,665,666,3,294,144,0,666,67,1,0,0,0,667,668,3,282, + 138,0,668,669,3,288,141,0,669,670,3,294,144,0,670,671,3,310,152,0,671, + 672,3,280,137,0,672,673,3,306,150,0,673,69,1,0,0,0,674,675,3,282,138, + 0,675,676,3,288,141,0,676,677,3,298,146,0,677,678,3,272,133,0,678,679, + 3,294,144,0,679,680,3,294,144,0,680,681,3,320,157,0,681,71,1,0,0,0,682, + 683,3,282,138,0,683,684,3,288,141,0,684,685,3,306,150,0,685,686,3,308, + 151,0,686,687,3,310,152,0,687,73,1,0,0,0,688,689,3,282,138,0,689,690, + 3,298,146,0,690,75,1,0,0,0,691,692,3,282,138,0,692,693,3,300,147,0,693, + 694,3,294,144,0,694,695,3,294,144,0,695,696,3,300,147,0,696,697,3,316, + 155,0,697,698,3,288,141,0,698,699,3,298,146,0,699,700,3,284,139,0,700, + 77,1,0,0,0,701,702,3,282,138,0,702,703,3,300,147,0,703,704,3,306,150, + 0,704,79,1,0,0,0,705,706,3,282,138,0,706,707,3,306,150,0,707,708,3,300, + 147,0,708,709,3,296,145,0,709,81,1,0,0,0,710,711,3,282,138,0,711,712, + 3,312,153,0,712,713,3,294,144,0,713,714,3,294,144,0,714,83,1,0,0,0,715, + 716,3,282,138,0,716,717,3,312,153,0,717,718,3,298,146,0,718,85,1,0,0, + 0,719,720,3,284,139,0,720,721,3,306,150,0,721,722,3,300,147,0,722,723, + 3,312,153,0,723,724,3,302,148,0,724,87,1,0,0,0,725,726,3,284,139,0,726, + 727,3,306,150,0,727,728,3,300,147,0,728,729,3,312,153,0,729,730,3,302, + 148,0,730,731,3,288,141,0,731,732,3,298,146,0,732,733,3,284,139,0,733, + 89,1,0,0,0,734,735,3,286,140,0,735,736,3,272,133,0,736,737,3,314,154, + 0,737,738,3,288,141,0,738,739,3,298,146,0,739,740,3,284,139,0,740,91, + 1,0,0,0,741,742,3,286,140,0,742,743,3,300,147,0,743,744,3,312,153,0,744, + 745,3,306,150,0,745,93,1,0,0,0,746,747,3,288,141,0,747,748,3,278,136, + 0,748,95,1,0,0,0,749,750,3,288,141,0,750,751,3,282,138,0,751,97,1,0,0, + 0,752,753,3,288,141,0,753,754,3,294,144,0,754,755,3,288,141,0,755,756, + 3,292,143,0,756,757,3,280,137,0,757,99,1,0,0,0,758,759,3,288,141,0,759, + 760,3,284,139,0,760,761,3,298,146,0,761,762,3,300,147,0,762,763,3,306, + 150,0,763,764,3,280,137,0,764,101,1,0,0,0,765,766,3,288,141,0,766,767, + 3,298,146,0,767,768,3,276,135,0,768,769,3,294,144,0,769,770,3,312,153, + 0,770,771,3,278,136,0,771,772,3,280,137,0,772,103,1,0,0,0,773,774,3,288, + 141,0,774,775,3,298,146,0,775,105,1,0,0,0,776,777,3,288,141,0,777,778, + 3,298,146,0,778,779,3,282,138,0,779,790,1,0,0,0,780,781,3,288,141,0,781, + 782,3,298,146,0,782,783,3,282,138,0,783,784,3,288,141,0,784,785,3,298, + 146,0,785,786,3,288,141,0,786,787,3,310,152,0,787,788,3,320,157,0,788, + 790,1,0,0,0,789,776,1,0,0,0,789,780,1,0,0,0,790,107,1,0,0,0,791,792,3, + 288,141,0,792,793,3,298,146,0,793,794,3,298,146,0,794,795,3,280,137,0, + 795,796,3,306,150,0,796,109,1,0,0,0,797,798,3,288,141,0,798,799,3,298, + 146,0,799,800,3,310,152,0,800,801,3,280,137,0,801,802,3,306,150,0,802, + 803,3,308,151,0,803,804,3,280,137,0,804,805,3,276,135,0,805,806,3,310, + 152,0,806,111,1,0,0,0,807,808,3,288,141,0,808,809,3,298,146,0,809,810, + 3,310,152,0,810,811,3,280,137,0,811,812,3,306,150,0,812,813,3,314,154, + 0,813,814,3,272,133,0,814,815,3,294,144,0,815,113,1,0,0,0,816,817,3,288, + 141,0,817,818,3,308,151,0,818,115,1,0,0,0,819,820,3,290,142,0,820,821, + 3,300,147,0,821,822,3,288,141,0,822,823,3,298,146,0,823,117,1,0,0,0,824, + 825,3,292,143,0,825,826,3,280,137,0,826,827,3,320,157,0,827,119,1,0,0, + 0,828,829,3,294,144,0,829,830,3,272,133,0,830,831,3,296,145,0,831,832, + 3,274,134,0,832,833,3,278,136,0,833,834,3,272,133,0,834,121,1,0,0,0,835, + 836,3,294,144,0,836,837,3,272,133,0,837,838,3,308,151,0,838,839,3,310, + 152,0,839,123,1,0,0,0,840,841,3,294,144,0,841,842,3,280,137,0,842,843, + 3,272,133,0,843,844,3,278,136,0,844,845,3,288,141,0,845,846,3,298,146, + 0,846,847,3,284,139,0,847,125,1,0,0,0,848,849,3,294,144,0,849,850,3,280, + 137,0,850,851,3,282,138,0,851,852,3,310,152,0,852,127,1,0,0,0,853,854, + 3,294,144,0,854,855,3,280,137,0,855,856,3,310,152,0,856,129,1,0,0,0,857, + 858,3,294,144,0,858,859,3,288,141,0,859,860,3,292,143,0,860,861,3,280, + 137,0,861,131,1,0,0,0,862,863,3,294,144,0,863,864,3,288,141,0,864,865, + 3,296,145,0,865,866,3,288,141,0,866,867,3,310,152,0,867,133,1,0,0,0,868, + 869,3,296,145,0,869,870,3,272,133,0,870,871,3,310,152,0,871,872,3,280, + 137,0,872,873,3,306,150,0,873,874,3,288,141,0,874,875,3,272,133,0,875, + 876,3,294,144,0,876,877,3,288,141,0,877,878,3,322,158,0,878,879,3,280, + 137,0,879,880,3,278,136,0,880,135,1,0,0,0,881,882,3,296,145,0,882,883, + 3,288,141,0,883,884,3,298,146,0,884,885,3,312,153,0,885,886,3,310,152, + 0,886,887,3,280,137,0,887,137,1,0,0,0,888,889,3,296,145,0,889,890,3,300, + 147,0,890,891,3,298,146,0,891,892,3,310,152,0,892,893,3,286,140,0,893, + 139,1,0,0,0,894,895,3,298,146,0,895,896,3,272,133,0,896,897,3,296,145, + 0,897,898,3,280,137,0,898,141,1,0,0,0,899,900,3,298,146,0,900,901,3,272, + 133,0,901,902,3,310,152,0,902,903,3,312,153,0,903,904,3,306,150,0,904, + 905,3,272,133,0,905,906,3,294,144,0,906,143,1,0,0,0,907,908,3,298,146, + 0,908,909,3,272,133,0,909,910,3,298,146,0,910,145,1,0,0,0,911,912,3,298, + 146,0,912,913,3,300,147,0,913,914,3,310,152,0,914,147,1,0,0,0,915,916, + 3,298,146,0,916,917,3,312,153,0,917,918,3,294,144,0,918,919,3,294,144, + 0,919,149,1,0,0,0,920,921,3,298,146,0,921,922,3,312,153,0,922,923,3,294, + 144,0,923,924,3,294,144,0,924,925,3,308,151,0,925,151,1,0,0,0,926,927, + 3,300,147,0,927,928,3,282,138,0,928,929,3,282,138,0,929,930,3,308,151, + 0,930,931,3,280,137,0,931,932,3,310,152,0,932,153,1,0,0,0,933,934,3,300, + 147,0,934,935,3,298,146,0,935,155,1,0,0,0,936,937,3,300,147,0,937,938, + 3,306,150,0,938,157,1,0,0,0,939,940,3,300,147,0,940,941,3,306,150,0,941, + 942,3,278,136,0,942,943,3,280,137,0,943,944,3,306,150,0,944,159,1,0,0, + 0,945,946,3,300,147,0,946,947,3,312,153,0,947,948,3,310,152,0,948,949, + 3,280,137,0,949,950,3,306,150,0,950,161,1,0,0,0,951,952,3,300,147,0,952, + 953,3,314,154,0,953,954,3,280,137,0,954,955,3,306,150,0,955,163,1,0,0, + 0,956,957,3,302,148,0,957,958,3,272,133,0,958,959,3,306,150,0,959,960, + 3,310,152,0,960,961,3,288,141,0,961,962,3,310,152,0,962,963,3,288,141, + 0,963,964,3,300,147,0,964,965,3,298,146,0,965,165,1,0,0,0,966,967,3,302, + 148,0,967,968,3,288,141,0,968,969,3,314,154,0,969,970,3,300,147,0,970, + 971,3,310,152,0,971,167,1,0,0,0,972,973,3,302,148,0,973,974,3,300,147, + 0,974,975,3,308,151,0,975,976,3,288,141,0,976,977,3,310,152,0,977,978, + 3,288,141,0,978,979,3,300,147,0,979,980,3,298,146,0,980,981,3,272,133, + 0,981,982,3,294,144,0,982,169,1,0,0,0,983,984,3,302,148,0,984,985,3,306, + 150,0,985,986,3,280,137,0,986,987,3,276,135,0,987,988,3,280,137,0,988, + 989,3,278,136,0,989,990,3,288,141,0,990,991,3,298,146,0,991,992,3,284, + 139,0,992,171,1,0,0,0,993,994,3,302,148,0,994,995,3,306,150,0,995,996, + 3,280,137,0,996,997,3,316,155,0,997,998,3,286,140,0,998,999,3,280,137, + 0,999,1000,3,306,150,0,1000,1001,3,280,137,0,1001,173,1,0,0,0,1002,1003, + 3,304,149,0,1003,1004,3,312,153,0,1004,1005,3,272,133,0,1005,1006,3,294, + 144,0,1006,1007,3,288,141,0,1007,1008,3,282,138,0,1008,1009,3,320,157, + 0,1009,175,1,0,0,0,1010,1011,3,304,149,0,1011,1012,3,312,153,0,1012,1013, + 3,272,133,0,1013,1014,3,306,150,0,1014,1015,3,310,152,0,1015,1016,3,280, + 137,0,1016,1017,3,306,150,0,1017,177,1,0,0,0,1018,1019,3,306,150,0,1019, + 1020,3,272,133,0,1020,1021,3,298,146,0,1021,1022,3,284,139,0,1022,1023, + 3,280,137,0,1023,179,1,0,0,0,1024,1025,3,306,150,0,1025,1026,3,280,137, + 0,1026,1027,3,276,135,0,1027,1028,3,312,153,0,1028,1029,3,306,150,0,1029, + 1030,3,308,151,0,1030,1031,3,288,141,0,1031,1032,3,314,154,0,1032,1033, + 3,280,137,0,1033,181,1,0,0,0,1034,1035,3,306,150,0,1035,1036,3,280,137, + 0,1036,1037,3,302,148,0,1037,1038,3,294,144,0,1038,1039,3,272,133,0,1039, + 1040,3,276,135,0,1040,1041,3,280,137,0,1041,183,1,0,0,0,1042,1043,3,306, + 150,0,1043,1044,3,280,137,0,1044,1045,3,310,152,0,1045,1046,3,312,153, + 0,1046,1047,3,306,150,0,1047,1048,3,298,146,0,1048,185,1,0,0,0,1049,1050, + 3,306,150,0,1050,1051,3,288,141,0,1051,1052,3,284,139,0,1052,1053,3,286, + 140,0,1053,1054,3,310,152,0,1054,187,1,0,0,0,1055,1056,3,306,150,0,1056, + 1057,3,300,147,0,1057,1058,3,294,144,0,1058,1059,3,294,144,0,1059,1060, + 3,312,153,0,1060,1061,3,302,148,0,1061,189,1,0,0,0,1062,1063,3,306,150, + 0,1063,1064,3,300,147,0,1064,1065,3,316,155,0,1065,191,1,0,0,0,1066,1067, + 3,306,150,0,1067,1068,3,300,147,0,1068,1069,3,316,155,0,1069,1070,3,308, + 151,0,1070,193,1,0,0,0,1071,1072,3,308,151,0,1072,1073,3,272,133,0,1073, + 1074,3,296,145,0,1074,1075,3,302,148,0,1075,1076,3,294,144,0,1076,1077, + 3,280,137,0,1077,195,1,0,0,0,1078,1079,3,308,151,0,1079,1080,3,280,137, + 0,1080,1081,3,276,135,0,1081,1082,3,300,147,0,1082,1083,3,298,146,0,1083, + 1084,3,278,136,0,1084,197,1,0,0,0,1085,1086,3,308,151,0,1086,1087,3,280, + 137,0,1087,1088,3,294,144,0,1088,1089,3,280,137,0,1089,1090,3,276,135, + 0,1090,1091,3,310,152,0,1091,199,1,0,0,0,1092,1093,3,308,151,0,1093,1094, + 3,280,137,0,1094,1095,3,296,145,0,1095,1096,3,288,141,0,1096,201,1,0, + 0,0,1097,1098,3,308,151,0,1098,1099,3,280,137,0,1099,1100,3,310,152,0, + 1100,1101,3,308,151,0,1101,203,1,0,0,0,1102,1103,3,308,151,0,1103,1104, + 3,280,137,0,1104,1105,3,310,152,0,1105,1106,3,310,152,0,1106,1107,3,288, + 141,0,1107,1108,3,298,146,0,1108,1109,3,284,139,0,1109,1110,3,308,151, + 0,1110,205,1,0,0,0,1111,1112,3,308,151,0,1112,1113,3,312,153,0,1113,1114, + 3,274,134,0,1114,1115,3,308,151,0,1115,1116,3,310,152,0,1116,1117,3,306, + 150,0,1117,1118,3,288,141,0,1118,1119,3,298,146,0,1119,1120,3,284,139, + 0,1120,207,1,0,0,0,1121,1122,3,310,152,0,1122,1123,3,286,140,0,1123,1124, + 3,280,137,0,1124,1125,3,298,146,0,1125,209,1,0,0,0,1126,1127,3,310,152, + 0,1127,1128,3,286,140,0,1128,1129,3,306,150,0,1129,1130,3,300,147,0,1130, + 1131,3,316,155,0,1131,211,1,0,0,0,1132,1133,3,310,152,0,1133,1134,3,288, + 141,0,1134,1135,3,280,137,0,1135,1136,3,308,151,0,1136,213,1,0,0,0,1137, + 1138,3,310,152,0,1138,1139,3,288,141,0,1139,1140,3,296,145,0,1140,1141, + 3,280,137,0,1141,1142,3,308,151,0,1142,1143,3,310,152,0,1143,1144,3,272, + 133,0,1144,1145,3,296,145,0,1145,1146,3,302,148,0,1146,215,1,0,0,0,1147, + 1148,3,310,152,0,1148,1149,3,300,147,0,1149,217,1,0,0,0,1150,1151,3,310, + 152,0,1151,1152,3,300,147,0,1152,1153,3,302,148,0,1153,219,1,0,0,0,1154, + 1155,3,310,152,0,1155,1156,3,300,147,0,1156,1157,3,310,152,0,1157,1158, + 3,272,133,0,1158,1159,3,294,144,0,1159,1160,3,308,151,0,1160,221,1,0, + 0,0,1161,1162,3,310,152,0,1162,1163,3,306,150,0,1163,1164,3,272,133,0, + 1164,1165,3,288,141,0,1165,1166,3,294,144,0,1166,1167,3,288,141,0,1167, + 1168,3,298,146,0,1168,1169,3,284,139,0,1169,223,1,0,0,0,1170,1171,3,310, + 152,0,1171,1172,3,306,150,0,1172,1173,3,288,141,0,1173,1174,3,296,145, + 0,1174,225,1,0,0,0,1175,1176,3,310,152,0,1176,1177,3,306,150,0,1177,1178, + 3,312,153,0,1178,1179,3,298,146,0,1179,1180,3,276,135,0,1180,1181,3,272, + 133,0,1181,1182,3,310,152,0,1182,1183,3,280,137,0,1183,227,1,0,0,0,1184, + 1185,3,310,152,0,1185,1186,3,306,150,0,1186,1187,3,320,157,0,1187,229, + 1,0,0,0,1188,1189,3,310,152,0,1189,1190,3,306,150,0,1190,1191,3,320,157, + 0,1191,1192,5,95,0,0,1192,1193,3,276,135,0,1193,1194,3,272,133,0,1194, + 1195,3,308,151,0,1195,1196,3,310,152,0,1196,231,1,0,0,0,1197,1198,3,312, + 153,0,1198,1199,3,298,146,0,1199,1200,3,274,134,0,1200,1201,3,300,147, + 0,1201,1202,3,312,153,0,1202,1203,3,298,146,0,1203,1204,3,278,136,0,1204, + 1205,3,280,137,0,1205,1206,3,278,136,0,1206,233,1,0,0,0,1207,1208,3,312, + 153,0,1208,1209,3,298,146,0,1209,1210,3,288,141,0,1210,1211,3,300,147, + 0,1211,1212,3,298,146,0,1212,235,1,0,0,0,1213,1214,3,312,153,0,1214,1215, + 3,298,146,0,1215,1216,3,302,148,0,1216,1217,3,288,141,0,1217,1218,3,314, + 154,0,1218,1219,3,300,147,0,1219,1220,3,310,152,0,1220,237,1,0,0,0,1221, + 1222,3,312,153,0,1222,1223,3,308,151,0,1223,1224,3,288,141,0,1224,1225, + 3,298,146,0,1225,1226,3,284,139,0,1226,239,1,0,0,0,1227,1228,3,314,154, + 0,1228,1229,3,272,133,0,1229,1230,3,294,144,0,1230,1231,3,312,153,0,1231, + 1232,3,280,137,0,1232,1233,3,308,151,0,1233,241,1,0,0,0,1234,1235,3,316, + 155,0,1235,1236,3,280,137,0,1236,1237,3,280,137,0,1237,1238,3,292,143, + 0,1238,243,1,0,0,0,1239,1240,3,316,155,0,1240,1241,3,286,140,0,1241,1242, + 3,280,137,0,1242,1243,3,298,146,0,1243,245,1,0,0,0,1244,1245,3,316,155, + 0,1245,1246,3,286,140,0,1246,1247,3,280,137,0,1247,1248,3,306,150,0,1248, + 1249,3,280,137,0,1249,247,1,0,0,0,1250,1251,3,316,155,0,1251,1252,3,286, + 140,0,1252,1253,3,288,141,0,1253,1254,3,294,144,0,1254,1255,3,280,137, + 0,1255,249,1,0,0,0,1256,1257,3,316,155,0,1257,1258,3,288,141,0,1258,1259, + 3,298,146,0,1259,1260,3,278,136,0,1260,1261,3,300,147,0,1261,1262,3,316, + 155,0,1262,251,1,0,0,0,1263,1264,3,316,155,0,1264,1265,3,288,141,0,1265, + 1266,3,310,152,0,1266,1267,3,286,140,0,1267,253,1,0,0,0,1268,1269,3,316, + 155,0,1269,1270,3,288,141,0,1270,1271,3,310,152,0,1271,1272,3,286,140, + 0,1272,1273,3,288,141,0,1273,1274,3,298,146,0,1274,255,1,0,0,0,1275,1276, + 3,320,157,0,1276,1277,3,280,137,0,1277,1278,3,272,133,0,1278,1279,3,306, + 150,0,1279,1286,1,0,0,0,1280,1281,3,320,157,0,1281,1282,3,320,157,0,1282, + 1283,3,320,157,0,1283,1284,3,320,157,0,1284,1286,1,0,0,0,1285,1275,1, + 0,0,0,1285,1280,1,0,0,0,1286,257,1,0,0,0,1287,1288,3,338,166,0,1288,1289, + 3,274,134,0,1289,1320,1,0,0,0,1290,1291,3,338,166,0,1291,1292,3,282,138, + 0,1292,1320,1,0,0,0,1293,1294,3,338,166,0,1294,1295,3,306,150,0,1295, + 1320,1,0,0,0,1296,1297,3,338,166,0,1297,1298,3,298,146,0,1298,1320,1, + 0,0,0,1299,1300,3,338,166,0,1300,1301,3,310,152,0,1301,1320,1,0,0,0,1302, + 1303,3,338,166,0,1303,1304,5,48,0,0,1304,1320,1,0,0,0,1305,1306,3,338, + 166,0,1306,1307,3,272,133,0,1307,1320,1,0,0,0,1308,1309,3,338,166,0,1309, + 1310,3,314,154,0,1310,1320,1,0,0,0,1311,1312,3,338,166,0,1312,1313,3, + 338,166,0,1313,1320,1,0,0,0,1314,1315,3,338,166,0,1315,1316,3,318,156, + 0,1316,1317,3,330,162,0,1317,1318,3,330,162,0,1318,1320,1,0,0,0,1319, + 1287,1,0,0,0,1319,1290,1,0,0,0,1319,1293,1,0,0,0,1319,1296,1,0,0,0,1319, + 1299,1,0,0,0,1319,1302,1,0,0,0,1319,1305,1,0,0,0,1319,1308,1,0,0,0,1319, + 1311,1,0,0,0,1319,1314,1,0,0,0,1320,259,1,0,0,0,1321,1325,3,324,159,0, + 1322,1325,3,426,210,0,1323,1325,3,352,173,0,1324,1321,1,0,0,0,1324,1322, + 1,0,0,0,1324,1323,1,0,0,0,1325,1332,1,0,0,0,1326,1331,3,324,159,0,1327, + 1331,3,426,210,0,1328,1331,3,328,161,0,1329,1331,3,352,173,0,1330,1326, + 1,0,0,0,1330,1327,1,0,0,0,1330,1328,1,0,0,0,1330,1329,1,0,0,0,1331,1334, + 1,0,0,0,1332,1330,1,0,0,0,1332,1333,1,0,0,0,1333,1368,1,0,0,0,1334,1332, + 1,0,0,0,1335,1346,3,336,165,0,1336,1345,8,0,0,0,1337,1345,3,258,126,0, + 1338,1339,3,338,166,0,1339,1340,3,408,201,0,1340,1345,1,0,0,0,1341,1342, + 3,336,165,0,1342,1343,3,336,165,0,1343,1345,1,0,0,0,1344,1336,1,0,0,0, + 1344,1337,1,0,0,0,1344,1338,1,0,0,0,1344,1341,1,0,0,0,1345,1348,1,0,0, + 0,1346,1344,1,0,0,0,1346,1347,1,0,0,0,1347,1349,1,0,0,0,1348,1346,1,0, + 0,0,1349,1350,3,336,165,0,1350,1368,1,0,0,0,1351,1362,3,402,198,0,1352, + 1361,8,1,0,0,1353,1361,3,258,126,0,1354,1355,3,338,166,0,1355,1356,3, + 402,198,0,1356,1361,1,0,0,0,1357,1358,3,402,198,0,1358,1359,3,402,198, + 0,1359,1361,1,0,0,0,1360,1352,1,0,0,0,1360,1353,1,0,0,0,1360,1354,1,0, + 0,0,1360,1357,1,0,0,0,1361,1364,1,0,0,0,1362,1360,1,0,0,0,1362,1363,1, + 0,0,0,1363,1365,1,0,0,0,1364,1362,1,0,0,0,1365,1366,3,402,198,0,1366, + 1368,1,0,0,0,1367,1324,1,0,0,0,1367,1335,1,0,0,0,1367,1351,1,0,0,0,1368, + 261,1,0,0,0,1369,1370,3,268,131,0,1370,1374,3,354,174,0,1371,1373,3,330, + 162,0,1372,1371,1,0,0,0,1373,1376,1,0,0,0,1374,1372,1,0,0,0,1374,1375, + 1,0,0,0,1375,1379,1,0,0,0,1376,1374,1,0,0,0,1377,1380,3,302,148,0,1378, + 1380,3,280,137,0,1379,1377,1,0,0,0,1379,1378,1,0,0,0,1380,1383,1,0,0, + 0,1381,1384,3,398,196,0,1382,1384,3,350,172,0,1383,1381,1,0,0,0,1383, + 1382,1,0,0,0,1383,1384,1,0,0,0,1384,1386,1,0,0,0,1385,1387,3,328,161, + 0,1386,1385,1,0,0,0,1387,1388,1,0,0,0,1388,1386,1,0,0,0,1388,1389,1,0, + 0,0,1389,1446,1,0,0,0,1390,1393,3,268,131,0,1391,1394,3,302,148,0,1392, + 1394,3,280,137,0,1393,1391,1,0,0,0,1393,1392,1,0,0,0,1394,1397,1,0,0, + 0,1395,1398,3,398,196,0,1396,1398,3,350,172,0,1397,1395,1,0,0,0,1397, + 1396,1,0,0,0,1397,1398,1,0,0,0,1398,1400,1,0,0,0,1399,1401,3,328,161, + 0,1400,1399,1,0,0,0,1401,1402,1,0,0,0,1402,1400,1,0,0,0,1402,1403,1,0, + 0,0,1403,1446,1,0,0,0,1404,1405,3,266,130,0,1405,1409,3,354,174,0,1406, + 1408,3,328,161,0,1407,1406,1,0,0,0,1408,1411,1,0,0,0,1409,1407,1,0,0, + 0,1409,1410,1,0,0,0,1410,1412,1,0,0,0,1411,1409,1,0,0,0,1412,1415,3,280, + 137,0,1413,1416,3,398,196,0,1414,1416,3,350,172,0,1415,1413,1,0,0,0,1415, + 1414,1,0,0,0,1415,1416,1,0,0,0,1416,1418,1,0,0,0,1417,1419,3,328,161, + 0,1418,1417,1,0,0,0,1419,1420,1,0,0,0,1420,1418,1,0,0,0,1420,1421,1,0, + 0,0,1421,1446,1,0,0,0,1422,1423,3,354,174,0,1423,1424,3,266,130,0,1424, + 1427,3,280,137,0,1425,1428,3,398,196,0,1426,1428,3,350,172,0,1427,1425, + 1,0,0,0,1427,1426,1,0,0,0,1427,1428,1,0,0,0,1428,1430,1,0,0,0,1429,1431, + 3,328,161,0,1430,1429,1,0,0,0,1431,1432,1,0,0,0,1432,1430,1,0,0,0,1432, + 1433,1,0,0,0,1433,1446,1,0,0,0,1434,1435,3,266,130,0,1435,1438,3,280, + 137,0,1436,1439,3,398,196,0,1437,1439,3,350,172,0,1438,1436,1,0,0,0,1438, + 1437,1,0,0,0,1438,1439,1,0,0,0,1439,1441,1,0,0,0,1440,1442,3,328,161, + 0,1441,1440,1,0,0,0,1442,1443,1,0,0,0,1443,1441,1,0,0,0,1443,1444,1,0, + 0,0,1444,1446,1,0,0,0,1445,1369,1,0,0,0,1445,1390,1,0,0,0,1445,1404,1, + 0,0,0,1445,1422,1,0,0,0,1445,1434,1,0,0,0,1446,263,1,0,0,0,1447,1449, + 5,48,0,0,1448,1450,3,326,160,0,1449,1448,1,0,0,0,1450,1451,1,0,0,0,1451, + 1449,1,0,0,0,1451,1452,1,0,0,0,1452,265,1,0,0,0,1453,1455,3,328,161,0, + 1454,1453,1,0,0,0,1455,1456,1,0,0,0,1456,1454,1,0,0,0,1456,1457,1,0,0, + 0,1457,267,1,0,0,0,1458,1459,5,48,0,0,1459,1461,3,318,156,0,1460,1462, + 3,330,162,0,1461,1460,1,0,0,0,1462,1463,1,0,0,0,1463,1461,1,0,0,0,1463, + 1464,1,0,0,0,1464,269,1,0,0,0,1465,1476,3,408,201,0,1466,1475,8,2,0,0, + 1467,1475,3,258,126,0,1468,1469,3,338,166,0,1469,1470,3,408,201,0,1470, + 1475,1,0,0,0,1471,1472,3,408,201,0,1472,1473,3,408,201,0,1473,1475,1, + 0,0,0,1474,1466,1,0,0,0,1474,1467,1,0,0,0,1474,1468,1,0,0,0,1474,1471, + 1,0,0,0,1475,1478,1,0,0,0,1476,1474,1,0,0,0,1476,1477,1,0,0,0,1477,1479, + 1,0,0,0,1478,1476,1,0,0,0,1479,1480,3,408,201,0,1480,271,1,0,0,0,1481, + 1482,7,3,0,0,1482,273,1,0,0,0,1483,1484,7,4,0,0,1484,275,1,0,0,0,1485, + 1486,7,5,0,0,1486,277,1,0,0,0,1487,1488,7,6,0,0,1488,279,1,0,0,0,1489, + 1490,7,7,0,0,1490,281,1,0,0,0,1491,1492,7,8,0,0,1492,283,1,0,0,0,1493, + 1494,7,9,0,0,1494,285,1,0,0,0,1495,1496,7,10,0,0,1496,287,1,0,0,0,1497, + 1498,7,11,0,0,1498,289,1,0,0,0,1499,1500,7,12,0,0,1500,291,1,0,0,0,1501, + 1502,7,13,0,0,1502,293,1,0,0,0,1503,1504,7,14,0,0,1504,295,1,0,0,0,1505, + 1506,7,15,0,0,1506,297,1,0,0,0,1507,1508,7,16,0,0,1508,299,1,0,0,0,1509, + 1510,7,17,0,0,1510,301,1,0,0,0,1511,1512,7,18,0,0,1512,303,1,0,0,0,1513, + 1514,7,19,0,0,1514,305,1,0,0,0,1515,1516,7,20,0,0,1516,307,1,0,0,0,1517, + 1518,7,21,0,0,1518,309,1,0,0,0,1519,1520,7,22,0,0,1520,311,1,0,0,0,1521, + 1522,7,23,0,0,1522,313,1,0,0,0,1523,1524,7,24,0,0,1524,315,1,0,0,0,1525, + 1526,7,25,0,0,1526,317,1,0,0,0,1527,1528,7,26,0,0,1528,319,1,0,0,0,1529, + 1530,7,27,0,0,1530,321,1,0,0,0,1531,1532,7,28,0,0,1532,323,1,0,0,0,1533, + 1534,7,29,0,0,1534,325,1,0,0,0,1535,1536,7,30,0,0,1536,327,1,0,0,0,1537, + 1538,7,31,0,0,1538,329,1,0,0,0,1539,1540,7,32,0,0,1540,331,1,0,0,0,1541, + 1542,5,45,0,0,1542,1543,5,62,0,0,1543,333,1,0,0,0,1544,1545,5,42,0,0, + 1545,335,1,0,0,0,1546,1547,5,96,0,0,1547,337,1,0,0,0,1548,1549,5,92,0, + 0,1549,339,1,0,0,0,1550,1551,5,58,0,0,1551,1552,5,58,0,0,1552,341,1,0, + 0,0,1553,1554,5,58,0,0,1554,1555,5,61,0,0,1555,343,1,0,0,0,1556,1557, + 5,58,0,0,1557,345,1,0,0,0,1558,1559,5,44,0,0,1559,347,1,0,0,0,1560,1561, + 5,124,0,0,1561,1562,5,124,0,0,1562,349,1,0,0,0,1563,1564,5,45,0,0,1564, + 351,1,0,0,0,1565,1566,5,36,0,0,1566,353,1,0,0,0,1567,1568,5,46,0,0,1568, + 355,1,0,0,0,1569,1570,5,61,0,0,1570,1571,5,61,0,0,1571,357,1,0,0,0,1572, + 1573,5,61,0,0,1573,359,1,0,0,0,1574,1575,5,62,0,0,1575,1576,5,61,0,0, + 1576,361,1,0,0,0,1577,1578,5,62,0,0,1578,363,1,0,0,0,1579,1580,5,35,0, + 0,1580,365,1,0,0,0,1581,1582,5,126,0,0,1582,1583,5,42,0,0,1583,367,1, + 0,0,0,1584,1585,5,61,0,0,1585,1586,5,126,0,0,1586,1587,5,42,0,0,1587, + 369,1,0,0,0,1588,1589,5,123,0,0,1589,1590,1,0,0,0,1590,1591,6,182,0,0, + 1591,371,1,0,0,0,1592,1593,5,91,0,0,1593,373,1,0,0,0,1594,1595,5,40,0, + 0,1595,375,1,0,0,0,1596,1597,5,60,0,0,1597,1598,5,61,0,0,1598,377,1,0, + 0,0,1599,1600,5,60,0,0,1600,1601,5,47,0,0,1601,1602,1,0,0,0,1602,1603, + 6,186,1,0,1603,1604,6,186,2,0,1604,379,1,0,0,0,1605,1606,5,60,0,0,1606, + 1607,4,187,0,0,1607,1608,1,0,0,0,1608,1609,6,187,3,0,1609,1610,6,187, + 4,0,1610,381,1,0,0,0,1611,1612,5,60,0,0,1612,383,1,0,0,0,1613,1614,5, + 60,0,0,1614,1615,5,47,0,0,1615,385,1,0,0,0,1616,1617,5,33,0,0,1617,1621, + 5,61,0,0,1618,1619,5,60,0,0,1619,1621,5,62,0,0,1620,1616,1,0,0,0,1620, + 1618,1,0,0,0,1621,387,1,0,0,0,1622,1623,5,33,0,0,1623,1624,5,126,0,0, + 1624,1625,5,42,0,0,1625,389,1,0,0,0,1626,1627,5,33,0,0,1627,1628,5,126, + 0,0,1628,391,1,0,0,0,1629,1630,5,63,0,0,1630,1631,5,46,0,0,1631,393,1, + 0,0,0,1632,1633,5,63,0,0,1633,1634,5,63,0,0,1634,395,1,0,0,0,1635,1636, + 5,37,0,0,1636,397,1,0,0,0,1637,1638,5,43,0,0,1638,399,1,0,0,0,1639,1640, + 5,63,0,0,1640,401,1,0,0,0,1641,1642,5,34,0,0,1642,403,1,0,0,0,1643,1644, + 5,102,0,0,1644,1645,5,39,0,0,1645,1646,1,0,0,0,1646,1647,6,199,5,0,1647, + 405,1,0,0,0,1648,1649,5,70,0,0,1649,1650,5,39,0,0,1650,1651,1,0,0,0,1651, + 1652,6,200,6,0,1652,407,1,0,0,0,1653,1654,5,39,0,0,1654,409,1,0,0,0,1655, + 1656,5,126,0,0,1656,411,1,0,0,0,1657,1658,5,61,0,0,1658,1659,5,126,0, + 0,1659,413,1,0,0,0,1660,1661,5,125,0,0,1661,1662,1,0,0,0,1662,1663,6, + 204,7,0,1663,415,1,0,0,0,1664,1665,5,93,0,0,1665,417,1,0,0,0,1666,1667, + 5,41,0,0,1667,419,1,0,0,0,1668,1669,5,59,0,0,1669,421,1,0,0,0,1670,1671, + 5,47,0,0,1671,423,1,0,0,0,1672,1673,5,47,0,0,1673,1674,5,62,0,0,1674, + 425,1,0,0,0,1675,1676,5,95,0,0,1676,427,1,0,0,0,1677,1678,5,47,0,0,1678, + 1679,5,42,0,0,1679,1683,1,0,0,0,1680,1682,9,0,0,0,1681,1680,1,0,0,0,1682, + 1685,1,0,0,0,1683,1684,1,0,0,0,1683,1681,1,0,0,0,1684,1686,1,0,0,0,1685, + 1683,1,0,0,0,1686,1687,5,42,0,0,1687,1688,5,47,0,0,1688,1689,1,0,0,0, + 1689,1690,6,211,8,0,1690,429,1,0,0,0,1691,1692,5,45,0,0,1692,1696,5,45, + 0,0,1693,1694,5,47,0,0,1694,1696,5,47,0,0,1695,1691,1,0,0,0,1695,1693, + 1,0,0,0,1696,1700,1,0,0,0,1697,1699,8,33,0,0,1698,1697,1,0,0,0,1699,1702, + 1,0,0,0,1700,1698,1,0,0,0,1700,1701,1,0,0,0,1701,1704,1,0,0,0,1702,1700, + 1,0,0,0,1703,1705,7,34,0,0,1704,1703,1,0,0,0,1705,1706,1,0,0,0,1706,1707, + 6,212,8,0,1707,431,1,0,0,0,1708,1709,7,35,0,0,1709,1710,1,0,0,0,1710, + 1711,6,213,9,0,1711,433,1,0,0,0,1712,1724,8,36,0,0,1713,1724,3,258,126, + 0,1714,1715,3,338,166,0,1715,1716,3,408,201,0,1716,1724,1,0,0,0,1717, + 1718,3,338,166,0,1718,1719,3,370,182,0,1719,1724,1,0,0,0,1720,1721,3, + 408,201,0,1721,1722,3,408,201,0,1722,1724,1,0,0,0,1723,1712,1,0,0,0,1723, + 1713,1,0,0,0,1723,1714,1,0,0,0,1723,1717,1,0,0,0,1723,1720,1,0,0,0,1724, + 1725,1,0,0,0,1725,1723,1,0,0,0,1725,1726,1,0,0,0,1726,435,1,0,0,0,1727, + 1728,3,370,182,0,1728,1729,1,0,0,0,1729,1730,6,215,0,0,1730,437,1,0,0, + 0,1731,1732,3,408,201,0,1732,1733,1,0,0,0,1733,1734,6,216,10,0,1734,1735, + 6,216,7,0,1735,439,1,0,0,0,1736,1742,8,37,0,0,1737,1742,3,258,126,0,1738, + 1739,3,338,166,0,1739,1740,3,370,182,0,1740,1742,1,0,0,0,1741,1736,1, + 0,0,0,1741,1737,1,0,0,0,1741,1738,1,0,0,0,1742,1743,1,0,0,0,1743,1741, + 1,0,0,0,1743,1744,1,0,0,0,1744,441,1,0,0,0,1745,1746,3,370,182,0,1746, + 1747,1,0,0,0,1747,1748,6,218,0,0,1748,443,1,0,0,0,1749,1750,5,47,0,0, + 1750,1751,5,62,0,0,1751,1752,1,0,0,0,1752,1753,6,219,11,0,1753,1754,6, + 219,7,0,1754,445,1,0,0,0,1755,1756,5,62,0,0,1756,1757,1,0,0,0,1757,1758, + 6,220,12,0,1758,1759,6,220,7,0,1759,1760,6,220,13,0,1760,447,1,0,0,0, + 1761,1765,7,38,0,0,1762,1764,7,39,0,0,1763,1762,1,0,0,0,1764,1767,1,0, + 0,0,1765,1763,1,0,0,0,1765,1766,1,0,0,0,1766,1768,1,0,0,0,1767,1765,1, + 0,0,0,1768,1769,6,221,14,0,1769,449,1,0,0,0,1770,1771,5,61,0,0,1771,1772, + 1,0,0,0,1772,1773,6,222,15,0,1773,451,1,0,0,0,1774,1775,3,270,132,0,1775, + 1776,1,0,0,0,1776,1777,6,223,16,0,1777,453,1,0,0,0,1778,1780,7,40,0,0, + 1779,1778,1,0,0,0,1780,1781,1,0,0,0,1781,1779,1,0,0,0,1781,1782,1,0,0, + 0,1782,1783,1,0,0,0,1783,1784,6,224,9,0,1784,455,1,0,0,0,1785,1786,5, + 123,0,0,1786,1787,1,0,0,0,1787,1788,6,225,17,0,1788,1789,6,225,0,0,1789, + 457,1,0,0,0,1790,1791,5,62,0,0,1791,1792,1,0,0,0,1792,1793,6,226,12,0, + 1793,1794,6,226,7,0,1794,459,1,0,0,0,1795,1799,7,38,0,0,1796,1798,7,39, + 0,0,1797,1796,1,0,0,0,1798,1801,1,0,0,0,1799,1797,1,0,0,0,1799,1800,1, + 0,0,0,1800,1802,1,0,0,0,1801,1799,1,0,0,0,1802,1803,6,227,14,0,1803,461, + 1,0,0,0,1804,1806,7,40,0,0,1805,1804,1,0,0,0,1806,1807,1,0,0,0,1807,1805, + 1,0,0,0,1807,1808,1,0,0,0,1808,1809,1,0,0,0,1809,1810,6,228,9,0,1810, + 463,1,0,0,0,1811,1813,8,41,0,0,1812,1811,1,0,0,0,1813,1814,1,0,0,0,1814, + 1812,1,0,0,0,1814,1815,1,0,0,0,1815,465,1,0,0,0,1816,1817,5,123,0,0,1817, + 1818,1,0,0,0,1818,1819,6,230,17,0,1819,1820,6,230,0,0,1820,467,1,0,0, + 0,1821,1822,5,60,0,0,1822,1823,5,47,0,0,1823,1824,1,0,0,0,1824,1825,6, + 231,1,0,1825,1826,6,231,7,0,1826,1827,6,231,2,0,1827,469,1,0,0,0,1828, + 1829,5,60,0,0,1829,1830,1,0,0,0,1830,1831,6,232,3,0,1831,1832,6,232,4, + 0,1832,471,1,0,0,0,1833,1835,7,40,0,0,1834,1833,1,0,0,0,1835,1836,1,0, + 0,0,1836,1834,1,0,0,0,1836,1837,1,0,0,0,1837,1838,1,0,0,0,1838,1839,6, + 233,9,0,1839,473,1,0,0,0,53,0,1,2,3,4,5,514,789,1285,1319,1324,1330,1332, + 1344,1346,1360,1362,1367,1374,1379,1383,1388,1393,1397,1402,1409,1415, + 1420,1427,1432,1438,1443,1445,1451,1456,1463,1474,1476,1620,1683,1695, + 1700,1704,1723,1725,1741,1743,1765,1781,1799,1807,1814,1836,18,5,0,0, + 7,158,0,5,4,0,7,157,0,5,3,0,5,1,0,5,2,0,4,0,0,6,0,0,0,1,0,7,170,0,7,178, + 0,7,149,0,5,5,0,7,128,0,7,147,0,7,133,0,7,153,0 }; staticData->serializedATN = antlr4::atn::SerializedATNView(serializedATNSegment, sizeof(serializedATNSegment) / sizeof(serializedATNSegment[0])); @@ -862,7 +887,7 @@ const atn::ATN& HogQLLexer::getATN() const { bool HogQLLexer::sempred(RuleContext *context, size_t ruleIndex, size_t predicateIndex) { switch (ruleIndex) { - case 181: return TAG_LT_OPENSempred(antlrcpp::downCast(context), predicateIndex); + case 187: return TAG_LT_OPENSempred(antlrcpp::downCast(context), predicateIndex); default: break; diff --git a/common/hogql_parser/HogQLLexer.h b/common/hogql_parser/HogQLLexer.h index 78589403003a..e548453b4b67 100644 --- a/common/hogql_parser/HogQLLexer.h +++ b/common/hogql_parser/HogQLLexer.h @@ -21,37 +21,39 @@ class HogQLLexer : public antlr4::Lexer { ASOF = 8, BETWEEN = 9, BOTH = 10, BY = 11, CASE = 12, CAST = 13, CATCH = 14, COHORT = 15, COLLATE = 16, COLUMNS = 17, CROSS = 18, CUBE = 19, CURRENT = 20, DATE = 21, DAY = 22, DESC = 23, DESCENDING = 24, DISTINCT = 25, ELSE = 26, - END = 27, EXCEPT = 28, EXCLUDE = 29, EXTRACT = 30, FINAL = 31, FINALLY = 32, - FIRST = 33, FN = 34, FOLLOWING = 35, FOR = 36, FROM = 37, FULL = 38, - FUN = 39, GROUP = 40, GROUPING = 41, HAVING = 42, HOUR = 43, ID = 44, - IF = 45, ILIKE = 46, IN = 47, INF = 48, INNER = 49, INTERSECT = 50, - INTERVAL = 51, IS = 52, JOIN = 53, KEY = 54, LAMBDA = 55, LAST = 56, - LEADING = 57, LEFT = 58, LET = 59, LIKE = 60, LIMIT = 61, MATERIALIZED = 62, - MINUTE = 63, MONTH = 64, NAME = 65, NAN_SQL = 66, NOT = 67, NULL_SQL = 68, - NULLS = 69, OFFSET = 70, ON = 71, OR = 72, ORDER = 73, OUTER = 74, OVER = 75, - PARTITION = 76, PRECEDING = 77, PREWHERE = 78, QUALIFY = 79, QUARTER = 80, - RANGE = 81, RECURSIVE = 82, REPLACE = 83, RETURN = 84, RIGHT = 85, ROLLUP = 86, - ROW = 87, ROWS = 88, SAMPLE = 89, SECOND = 90, SELECT = 91, SEMI = 92, - SETS = 93, SETTINGS = 94, SUBSTRING = 95, THEN = 96, THROW = 97, TIES = 98, - TIMESTAMP = 99, TO = 100, TOP = 101, TOTALS = 102, TRAILING = 103, TRIM = 104, - TRUNCATE = 105, TRY = 106, TRY_CAST = 107, UNBOUNDED = 108, UNION = 109, - UNPIVOT = 110, USING = 111, VALUES = 112, WEEK = 113, WHEN = 114, WHERE = 115, - WHILE = 116, WINDOW = 117, WITH = 118, WITHIN = 119, YEAR = 120, ESCAPE_CHAR_COMMON = 121, - IDENTIFIER = 122, FLOATING_LITERAL = 123, OCTAL_LITERAL = 124, DECIMAL_LITERAL = 125, - HEXADECIMAL_LITERAL = 126, STRING_LITERAL = 127, ARROW = 128, ASTERISK = 129, - BACKQUOTE = 130, BACKSLASH = 131, DOUBLECOLON = 132, COLONEQUALS = 133, - COLON = 134, COMMA = 135, CONCAT = 136, DASH = 137, DOLLAR = 138, DOT = 139, - EQ_DOUBLE = 140, EQ_SINGLE = 141, GT_EQ = 142, GT = 143, HASH = 144, - IREGEX_SINGLE = 145, IREGEX_DOUBLE = 146, LBRACE = 147, LBRACKET = 148, - LPAREN = 149, LT_EQ = 150, LT = 151, LT_SLASH = 152, NOT_EQ = 153, NOT_IREGEX = 154, - NOT_REGEX = 155, NULL_PROPERTY = 156, NULLISH = 157, PERCENT = 158, - PLUS = 159, QUERY = 160, QUOTE_DOUBLE = 161, QUOTE_SINGLE_TEMPLATE = 162, - QUOTE_SINGLE_TEMPLATE_FULL = 163, QUOTE_SINGLE = 164, REGEX_SINGLE = 165, - REGEX_DOUBLE = 166, RBRACE = 167, RBRACKET = 168, RPAREN = 169, SEMICOLON = 170, - SLASH = 171, SLASH_GT = 172, UNDERSCORE = 173, MULTI_LINE_COMMENT = 174, - SINGLE_LINE_COMMENT = 175, WHITESPACE = 176, STRING_TEXT = 177, STRING_ESCAPE_TRIGGER = 178, - FULL_STRING_TEXT = 179, FULL_STRING_ESCAPE_TRIGGER = 180, TAG_WS = 181, - TAGC_WS = 182, HOGQLX_TEXT_TEXT = 183, HOGQLX_TEXT_WS = 184 + END = 27, EXCEPT = 28, EXCLUDE = 29, EXTRACT = 30, FINAL = 31, FILTER = 32, + FINALLY = 33, FIRST = 34, FN = 35, FOLLOWING = 36, FOR = 37, FROM = 38, + FULL = 39, FUN = 40, GROUP = 41, GROUPING = 42, HAVING = 43, HOUR = 44, + ID = 45, IF = 46, ILIKE = 47, IGNORE = 48, INCLUDE = 49, IN = 50, INF = 51, + INNER = 52, INTERSECT = 53, INTERVAL = 54, IS = 55, JOIN = 56, KEY = 57, + LAMBDA = 58, LAST = 59, LEADING = 60, LEFT = 61, LET = 62, LIKE = 63, + LIMIT = 64, MATERIALIZED = 65, MINUTE = 66, MONTH = 67, NAME = 68, NATURAL = 69, + NAN_SQL = 70, NOT = 71, NULL_SQL = 72, NULLS = 73, OFFSET = 74, ON = 75, + OR = 76, ORDER = 77, OUTER = 78, OVER = 79, PARTITION = 80, PIVOT = 81, + POSITIONAL = 82, PRECEDING = 83, PREWHERE = 84, QUALIFY = 85, QUARTER = 86, + RANGE = 87, RECURSIVE = 88, REPLACE = 89, RETURN = 90, RIGHT = 91, ROLLUP = 92, + ROW = 93, ROWS = 94, SAMPLE = 95, SECOND = 96, SELECT = 97, SEMI = 98, + SETS = 99, SETTINGS = 100, SUBSTRING = 101, THEN = 102, THROW = 103, + TIES = 104, TIMESTAMP = 105, TO = 106, TOP = 107, TOTALS = 108, TRAILING = 109, + TRIM = 110, TRUNCATE = 111, TRY = 112, TRY_CAST = 113, UNBOUNDED = 114, + UNION = 115, UNPIVOT = 116, USING = 117, VALUES = 118, WEEK = 119, WHEN = 120, + WHERE = 121, WHILE = 122, WINDOW = 123, WITH = 124, WITHIN = 125, YEAR = 126, + ESCAPE_CHAR_COMMON = 127, IDENTIFIER = 128, FLOATING_LITERAL = 129, + OCTAL_LITERAL = 130, DECIMAL_LITERAL = 131, HEXADECIMAL_LITERAL = 132, + STRING_LITERAL = 133, ARROW = 134, ASTERISK = 135, BACKQUOTE = 136, + BACKSLASH = 137, DOUBLECOLON = 138, COLONEQUALS = 139, COLON = 140, + COMMA = 141, CONCAT = 142, DASH = 143, DOLLAR = 144, DOT = 145, EQ_DOUBLE = 146, + EQ_SINGLE = 147, GT_EQ = 148, GT = 149, HASH = 150, IREGEX_SINGLE = 151, + IREGEX_DOUBLE = 152, LBRACE = 153, LBRACKET = 154, LPAREN = 155, LT_EQ = 156, + LT = 157, LT_SLASH = 158, NOT_EQ = 159, NOT_IREGEX = 160, NOT_REGEX = 161, + NULL_PROPERTY = 162, NULLISH = 163, PERCENT = 164, PLUS = 165, QUERY = 166, + QUOTE_DOUBLE = 167, QUOTE_SINGLE_TEMPLATE = 168, QUOTE_SINGLE_TEMPLATE_FULL = 169, + QUOTE_SINGLE = 170, REGEX_SINGLE = 171, REGEX_DOUBLE = 172, RBRACE = 173, + RBRACKET = 174, RPAREN = 175, SEMICOLON = 176, SLASH = 177, SLASH_GT = 178, + UNDERSCORE = 179, MULTI_LINE_COMMENT = 180, SINGLE_LINE_COMMENT = 181, + WHITESPACE = 182, STRING_TEXT = 183, STRING_ESCAPE_TRIGGER = 184, FULL_STRING_TEXT = 185, + FULL_STRING_ESCAPE_TRIGGER = 186, TAG_WS = 187, TAGC_WS = 188, HOGQLX_TEXT_TEXT = 189, + HOGQLX_TEXT_WS = 190 }; enum { diff --git a/common/hogql_parser/HogQLLexer.interp b/common/hogql_parser/HogQLLexer.interp index 763a5a08bccb..6225a0cf04ab 100644 --- a/common/hogql_parser/HogQLLexer.interp +++ b/common/hogql_parser/HogQLLexer.interp @@ -127,6 +127,12 @@ null null null null +null +null +null +null +null +null '->' '*' '`' @@ -218,6 +224,7 @@ EXCEPT EXCLUDE EXTRACT FINAL +FILTER FINALLY FIRST FN @@ -233,6 +240,8 @@ HOUR ID IF ILIKE +IGNORE +INCLUDE IN INF INNER @@ -252,6 +261,7 @@ MATERIALIZED MINUTE MONTH NAME +NATURAL NAN_SQL NOT NULL_SQL @@ -263,6 +273,8 @@ ORDER OUTER OVER PARTITION +PIVOT +POSITIONAL PRECEDING PREWHERE QUALIFY @@ -404,6 +416,7 @@ EXCEPT EXCLUDE EXTRACT FINAL +FILTER FINALLY FIRST FN @@ -419,6 +432,8 @@ HOUR ID IF ILIKE +IGNORE +INCLUDE IN INF INNER @@ -438,6 +453,7 @@ MATERIALIZED MINUTE MONTH NAME +NATURAL NAN_SQL NOT NULL_SQL @@ -449,6 +465,8 @@ ORDER OUTER OVER PARTITION +PIVOT +POSITIONAL PRECEDING PREWHERE QUALIFY @@ -615,4 +633,4 @@ HOGQLX_TAG_CLOSE HOGQLX_TEXT atn: -[4, 0, 184, 1776, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 2, 201, 7, 201, 2, 202, 7, 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 503, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 756, 8, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 3, 119, 1227, 8, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 3, 120, 1256, 8, 120, 1, 121, 1, 121, 1, 121, 3, 121, 1261, 8, 121, 1, 121, 1, 121, 1, 121, 1, 121, 5, 121, 1267, 8, 121, 10, 121, 12, 121, 1270, 9, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 5, 121, 1281, 8, 121, 10, 121, 12, 121, 1284, 9, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 5, 121, 1297, 8, 121, 10, 121, 12, 121, 1300, 9, 121, 1, 121, 1, 121, 3, 121, 1304, 8, 121, 1, 122, 1, 122, 1, 122, 5, 122, 1309, 8, 122, 10, 122, 12, 122, 1312, 9, 122, 1, 122, 1, 122, 3, 122, 1316, 8, 122, 1, 122, 1, 122, 3, 122, 1320, 8, 122, 1, 122, 4, 122, 1323, 8, 122, 11, 122, 12, 122, 1324, 1, 122, 1, 122, 1, 122, 3, 122, 1330, 8, 122, 1, 122, 1, 122, 3, 122, 1334, 8, 122, 1, 122, 4, 122, 1337, 8, 122, 11, 122, 12, 122, 1338, 1, 122, 1, 122, 1, 122, 5, 122, 1344, 8, 122, 10, 122, 12, 122, 1347, 9, 122, 1, 122, 1, 122, 1, 122, 3, 122, 1352, 8, 122, 1, 122, 4, 122, 1355, 8, 122, 11, 122, 12, 122, 1356, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 3, 122, 1364, 8, 122, 1, 122, 4, 122, 1367, 8, 122, 11, 122, 12, 122, 1368, 1, 122, 1, 122, 1, 122, 1, 122, 3, 122, 1375, 8, 122, 1, 122, 4, 122, 1378, 8, 122, 11, 122, 12, 122, 1379, 3, 122, 1382, 8, 122, 1, 123, 1, 123, 4, 123, 1386, 8, 123, 11, 123, 12, 123, 1387, 1, 124, 4, 124, 1391, 8, 124, 11, 124, 12, 124, 1392, 1, 125, 1, 125, 1, 125, 4, 125, 1398, 8, 125, 11, 125, 12, 125, 1399, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 5, 126, 1411, 8, 126, 10, 126, 12, 126, 1414, 9, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 128, 1, 128, 1, 129, 1, 129, 1, 130, 1, 130, 1, 131, 1, 131, 1, 132, 1, 132, 1, 133, 1, 133, 1, 134, 1, 134, 1, 135, 1, 135, 1, 136, 1, 136, 1, 137, 1, 137, 1, 138, 1, 138, 1, 139, 1, 139, 1, 140, 1, 140, 1, 141, 1, 141, 1, 142, 1, 142, 1, 143, 1, 143, 1, 144, 1, 144, 1, 145, 1, 145, 1, 146, 1, 146, 1, 147, 1, 147, 1, 148, 1, 148, 1, 149, 1, 149, 1, 150, 1, 150, 1, 151, 1, 151, 1, 152, 1, 152, 1, 153, 1, 153, 1, 154, 1, 154, 1, 155, 1, 155, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 159, 1, 159, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 163, 1, 163, 1, 164, 1, 164, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 1, 167, 1, 167, 1, 168, 1, 168, 1, 169, 1, 169, 1, 169, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 172, 1, 172, 1, 173, 1, 173, 1, 174, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 176, 1, 176, 1, 177, 1, 177, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 182, 1, 182, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 1, 184, 3, 184, 1557, 8, 184, 1, 185, 1, 185, 1, 185, 1, 185, 1, 186, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 188, 1, 188, 1, 188, 1, 189, 1, 189, 1, 190, 1, 190, 1, 191, 1, 191, 1, 192, 1, 192, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 195, 1, 195, 1, 196, 1, 196, 1, 197, 1, 197, 1, 197, 1, 198, 1, 198, 1, 198, 1, 198, 1, 199, 1, 199, 1, 200, 1, 200, 1, 201, 1, 201, 1, 202, 1, 202, 1, 203, 1, 203, 1, 203, 1, 204, 1, 204, 1, 205, 1, 205, 1, 205, 1, 205, 5, 205, 1618, 8, 205, 10, 205, 12, 205, 1621, 9, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 206, 1, 206, 1, 206, 1, 206, 3, 206, 1632, 8, 206, 1, 206, 5, 206, 1635, 8, 206, 10, 206, 12, 206, 1638, 9, 206, 1, 206, 3, 206, 1641, 8, 206, 1, 206, 1, 206, 1, 207, 1, 207, 1, 207, 1, 207, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 4, 208, 1660, 8, 208, 11, 208, 12, 208, 1661, 1, 209, 1, 209, 1, 209, 1, 209, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 4, 211, 1678, 8, 211, 11, 211, 12, 211, 1679, 1, 212, 1, 212, 1, 212, 1, 212, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 215, 1, 215, 5, 215, 1700, 8, 215, 10, 215, 12, 215, 1703, 9, 215, 1, 215, 1, 215, 1, 216, 1, 216, 1, 216, 1, 216, 1, 217, 1, 217, 1, 217, 1, 217, 1, 218, 4, 218, 1716, 8, 218, 11, 218, 12, 218, 1717, 1, 218, 1, 218, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 221, 1, 221, 5, 221, 1734, 8, 221, 10, 221, 12, 221, 1737, 9, 221, 1, 221, 1, 221, 1, 222, 4, 222, 1742, 8, 222, 11, 222, 12, 222, 1743, 1, 222, 1, 222, 1, 223, 4, 223, 1749, 8, 223, 11, 223, 12, 223, 1750, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 227, 4, 227, 1771, 8, 227, 11, 227, 12, 227, 1772, 1, 227, 1, 227, 1, 1619, 0, 228, 6, 1, 8, 2, 10, 3, 12, 4, 14, 5, 16, 6, 18, 7, 20, 8, 22, 9, 24, 10, 26, 11, 28, 12, 30, 13, 32, 14, 34, 15, 36, 16, 38, 17, 40, 18, 42, 19, 44, 20, 46, 21, 48, 22, 50, 23, 52, 24, 54, 25, 56, 26, 58, 27, 60, 28, 62, 29, 64, 30, 66, 31, 68, 32, 70, 33, 72, 34, 74, 35, 76, 36, 78, 37, 80, 38, 82, 39, 84, 40, 86, 41, 88, 42, 90, 43, 92, 44, 94, 45, 96, 46, 98, 47, 100, 48, 102, 49, 104, 50, 106, 51, 108, 52, 110, 53, 112, 54, 114, 55, 116, 56, 118, 57, 120, 58, 122, 59, 124, 60, 126, 61, 128, 62, 130, 63, 132, 64, 134, 65, 136, 66, 138, 67, 140, 68, 142, 69, 144, 70, 146, 71, 148, 72, 150, 73, 152, 74, 154, 75, 156, 76, 158, 77, 160, 78, 162, 79, 164, 80, 166, 81, 168, 82, 170, 83, 172, 84, 174, 85, 176, 86, 178, 87, 180, 88, 182, 89, 184, 90, 186, 91, 188, 92, 190, 93, 192, 94, 194, 95, 196, 96, 198, 97, 200, 98, 202, 99, 204, 100, 206, 101, 208, 102, 210, 103, 212, 104, 214, 105, 216, 106, 218, 107, 220, 108, 222, 109, 224, 110, 226, 111, 228, 112, 230, 113, 232, 114, 234, 115, 236, 116, 238, 117, 240, 118, 242, 119, 244, 120, 246, 121, 248, 122, 250, 123, 252, 124, 254, 125, 256, 126, 258, 127, 260, 0, 262, 0, 264, 0, 266, 0, 268, 0, 270, 0, 272, 0, 274, 0, 276, 0, 278, 0, 280, 0, 282, 0, 284, 0, 286, 0, 288, 0, 290, 0, 292, 0, 294, 0, 296, 0, 298, 0, 300, 0, 302, 0, 304, 0, 306, 0, 308, 0, 310, 0, 312, 0, 314, 0, 316, 0, 318, 0, 320, 128, 322, 129, 324, 130, 326, 131, 328, 132, 330, 133, 332, 134, 334, 135, 336, 136, 338, 137, 340, 138, 342, 139, 344, 140, 346, 141, 348, 142, 350, 143, 352, 144, 354, 145, 356, 146, 358, 147, 360, 148, 362, 149, 364, 150, 366, 0, 368, 0, 370, 151, 372, 152, 374, 153, 376, 154, 378, 155, 380, 156, 382, 157, 384, 158, 386, 159, 388, 160, 390, 161, 392, 162, 394, 163, 396, 164, 398, 165, 400, 166, 402, 167, 404, 168, 406, 169, 408, 170, 410, 171, 412, 172, 414, 173, 416, 174, 418, 175, 420, 176, 422, 177, 424, 178, 426, 0, 428, 179, 430, 180, 432, 0, 434, 0, 436, 0, 438, 0, 440, 0, 442, 181, 444, 0, 446, 0, 448, 0, 450, 182, 452, 183, 454, 0, 456, 0, 458, 0, 460, 184, 6, 0, 1, 2, 3, 4, 5, 42, 2, 0, 92, 92, 96, 96, 2, 0, 34, 34, 92, 92, 2, 0, 39, 39, 92, 92, 2, 0, 65, 65, 97, 97, 2, 0, 66, 66, 98, 98, 2, 0, 67, 67, 99, 99, 2, 0, 68, 68, 100, 100, 2, 0, 69, 69, 101, 101, 2, 0, 70, 70, 102, 102, 2, 0, 71, 71, 103, 103, 2, 0, 72, 72, 104, 104, 2, 0, 73, 73, 105, 105, 2, 0, 74, 74, 106, 106, 2, 0, 75, 75, 107, 107, 2, 0, 76, 76, 108, 108, 2, 0, 77, 77, 109, 109, 2, 0, 78, 78, 110, 110, 2, 0, 79, 79, 111, 111, 2, 0, 80, 80, 112, 112, 2, 0, 81, 81, 113, 113, 2, 0, 82, 82, 114, 114, 2, 0, 83, 83, 115, 115, 2, 0, 84, 84, 116, 116, 2, 0, 85, 85, 117, 117, 2, 0, 86, 86, 118, 118, 2, 0, 87, 87, 119, 119, 2, 0, 88, 88, 120, 120, 2, 0, 89, 89, 121, 121, 2, 0, 90, 90, 122, 122, 2, 0, 65, 90, 97, 122, 1, 0, 48, 55, 1, 0, 48, 57, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, 10, 10, 13, 13, 2, 1, 10, 10, 13, 13, 2, 0, 9, 13, 32, 32, 3, 0, 39, 39, 92, 92, 123, 123, 1, 0, 123, 123, 3, 0, 65, 90, 95, 95, 97, 122, 5, 0, 45, 45, 48, 57, 65, 90, 95, 95, 97, 122, 3, 0, 9, 10, 13, 13, 32, 32, 2, 0, 60, 60, 123, 123, 1815, 0, 6, 1, 0, 0, 0, 0, 8, 1, 0, 0, 0, 0, 10, 1, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 14, 1, 0, 0, 0, 0, 16, 1, 0, 0, 0, 0, 18, 1, 0, 0, 0, 0, 20, 1, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 24, 1, 0, 0, 0, 0, 26, 1, 0, 0, 0, 0, 28, 1, 0, 0, 0, 0, 30, 1, 0, 0, 0, 0, 32, 1, 0, 0, 0, 0, 34, 1, 0, 0, 0, 0, 36, 1, 0, 0, 0, 0, 38, 1, 0, 0, 0, 0, 40, 1, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 44, 1, 0, 0, 0, 0, 46, 1, 0, 0, 0, 0, 48, 1, 0, 0, 0, 0, 50, 1, 0, 0, 0, 0, 52, 1, 0, 0, 0, 0, 54, 1, 0, 0, 0, 0, 56, 1, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 60, 1, 0, 0, 0, 0, 62, 1, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 66, 1, 0, 0, 0, 0, 68, 1, 0, 0, 0, 0, 70, 1, 0, 0, 0, 0, 72, 1, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, 78, 1, 0, 0, 0, 0, 80, 1, 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 84, 1, 0, 0, 0, 0, 86, 1, 0, 0, 0, 0, 88, 1, 0, 0, 0, 0, 90, 1, 0, 0, 0, 0, 92, 1, 0, 0, 0, 0, 94, 1, 0, 0, 0, 0, 96, 1, 0, 0, 0, 0, 98, 1, 0, 0, 0, 0, 100, 1, 0, 0, 0, 0, 102, 1, 0, 0, 0, 0, 104, 1, 0, 0, 0, 0, 106, 1, 0, 0, 0, 0, 108, 1, 0, 0, 0, 0, 110, 1, 0, 0, 0, 0, 112, 1, 0, 0, 0, 0, 114, 1, 0, 0, 0, 0, 116, 1, 0, 0, 0, 0, 118, 1, 0, 0, 0, 0, 120, 1, 0, 0, 0, 0, 122, 1, 0, 0, 0, 0, 124, 1, 0, 0, 0, 0, 126, 1, 0, 0, 0, 0, 128, 1, 0, 0, 0, 0, 130, 1, 0, 0, 0, 0, 132, 1, 0, 0, 0, 0, 134, 1, 0, 0, 0, 0, 136, 1, 0, 0, 0, 0, 138, 1, 0, 0, 0, 0, 140, 1, 0, 0, 0, 0, 142, 1, 0, 0, 0, 0, 144, 1, 0, 0, 0, 0, 146, 1, 0, 0, 0, 0, 148, 1, 0, 0, 0, 0, 150, 1, 0, 0, 0, 0, 152, 1, 0, 0, 0, 0, 154, 1, 0, 0, 0, 0, 156, 1, 0, 0, 0, 0, 158, 1, 0, 0, 0, 0, 160, 1, 0, 0, 0, 0, 162, 1, 0, 0, 0, 0, 164, 1, 0, 0, 0, 0, 166, 1, 0, 0, 0, 0, 168, 1, 0, 0, 0, 0, 170, 1, 0, 0, 0, 0, 172, 1, 0, 0, 0, 0, 174, 1, 0, 0, 0, 0, 176, 1, 0, 0, 0, 0, 178, 1, 0, 0, 0, 0, 180, 1, 0, 0, 0, 0, 182, 1, 0, 0, 0, 0, 184, 1, 0, 0, 0, 0, 186, 1, 0, 0, 0, 0, 188, 1, 0, 0, 0, 0, 190, 1, 0, 0, 0, 0, 192, 1, 0, 0, 0, 0, 194, 1, 0, 0, 0, 0, 196, 1, 0, 0, 0, 0, 198, 1, 0, 0, 0, 0, 200, 1, 0, 0, 0, 0, 202, 1, 0, 0, 0, 0, 204, 1, 0, 0, 0, 0, 206, 1, 0, 0, 0, 0, 208, 1, 0, 0, 0, 0, 210, 1, 0, 0, 0, 0, 212, 1, 0, 0, 0, 0, 214, 1, 0, 0, 0, 0, 216, 1, 0, 0, 0, 0, 218, 1, 0, 0, 0, 0, 220, 1, 0, 0, 0, 0, 222, 1, 0, 0, 0, 0, 224, 1, 0, 0, 0, 0, 226, 1, 0, 0, 0, 0, 228, 1, 0, 0, 0, 0, 230, 1, 0, 0, 0, 0, 232, 1, 0, 0, 0, 0, 234, 1, 0, 0, 0, 0, 236, 1, 0, 0, 0, 0, 238, 1, 0, 0, 0, 0, 240, 1, 0, 0, 0, 0, 242, 1, 0, 0, 0, 0, 244, 1, 0, 0, 0, 0, 246, 1, 0, 0, 0, 0, 248, 1, 0, 0, 0, 0, 250, 1, 0, 0, 0, 0, 252, 1, 0, 0, 0, 0, 254, 1, 0, 0, 0, 0, 256, 1, 0, 0, 0, 0, 258, 1, 0, 0, 0, 0, 320, 1, 0, 0, 0, 0, 322, 1, 0, 0, 0, 0, 324, 1, 0, 0, 0, 0, 326, 1, 0, 0, 0, 0, 328, 1, 0, 0, 0, 0, 330, 1, 0, 0, 0, 0, 332, 1, 0, 0, 0, 0, 334, 1, 0, 0, 0, 0, 336, 1, 0, 0, 0, 0, 338, 1, 0, 0, 0, 0, 340, 1, 0, 0, 0, 0, 342, 1, 0, 0, 0, 0, 344, 1, 0, 0, 0, 0, 346, 1, 0, 0, 0, 0, 348, 1, 0, 0, 0, 0, 350, 1, 0, 0, 0, 0, 352, 1, 0, 0, 0, 0, 354, 1, 0, 0, 0, 0, 356, 1, 0, 0, 0, 0, 358, 1, 0, 0, 0, 0, 360, 1, 0, 0, 0, 0, 362, 1, 0, 0, 0, 0, 364, 1, 0, 0, 0, 0, 366, 1, 0, 0, 0, 0, 368, 1, 0, 0, 0, 0, 370, 1, 0, 0, 0, 0, 372, 1, 0, 0, 0, 0, 374, 1, 0, 0, 0, 0, 376, 1, 0, 0, 0, 0, 378, 1, 0, 0, 0, 0, 380, 1, 0, 0, 0, 0, 382, 1, 0, 0, 0, 0, 384, 1, 0, 0, 0, 0, 386, 1, 0, 0, 0, 0, 388, 1, 0, 0, 0, 0, 390, 1, 0, 0, 0, 0, 392, 1, 0, 0, 0, 0, 394, 1, 0, 0, 0, 0, 396, 1, 0, 0, 0, 0, 398, 1, 0, 0, 0, 0, 400, 1, 0, 0, 0, 0, 402, 1, 0, 0, 0, 0, 404, 1, 0, 0, 0, 0, 406, 1, 0, 0, 0, 0, 408, 1, 0, 0, 0, 0, 410, 1, 0, 0, 0, 0, 412, 1, 0, 0, 0, 0, 414, 1, 0, 0, 0, 0, 416, 1, 0, 0, 0, 0, 418, 1, 0, 0, 0, 0, 420, 1, 0, 0, 0, 1, 422, 1, 0, 0, 0, 1, 424, 1, 0, 0, 0, 1, 426, 1, 0, 0, 0, 2, 428, 1, 0, 0, 0, 2, 430, 1, 0, 0, 0, 3, 432, 1, 0, 0, 0, 3, 434, 1, 0, 0, 0, 3, 436, 1, 0, 0, 0, 3, 438, 1, 0, 0, 0, 3, 440, 1, 0, 0, 0, 3, 442, 1, 0, 0, 0, 3, 444, 1, 0, 0, 0, 4, 446, 1, 0, 0, 0, 4, 448, 1, 0, 0, 0, 4, 450, 1, 0, 0, 0, 5, 452, 1, 0, 0, 0, 5, 454, 1, 0, 0, 0, 5, 456, 1, 0, 0, 0, 5, 458, 1, 0, 0, 0, 5, 460, 1, 0, 0, 0, 6, 462, 1, 0, 0, 0, 8, 466, 1, 0, 0, 0, 10, 470, 1, 0, 0, 0, 12, 475, 1, 0, 0, 0, 14, 479, 1, 0, 0, 0, 16, 485, 1, 0, 0, 0, 18, 502, 1, 0, 0, 0, 20, 504, 1, 0, 0, 0, 22, 509, 1, 0, 0, 0, 24, 517, 1, 0, 0, 0, 26, 522, 1, 0, 0, 0, 28, 525, 1, 0, 0, 0, 30, 530, 1, 0, 0, 0, 32, 535, 1, 0, 0, 0, 34, 541, 1, 0, 0, 0, 36, 548, 1, 0, 0, 0, 38, 556, 1, 0, 0, 0, 40, 564, 1, 0, 0, 0, 42, 570, 1, 0, 0, 0, 44, 575, 1, 0, 0, 0, 46, 583, 1, 0, 0, 0, 48, 588, 1, 0, 0, 0, 50, 592, 1, 0, 0, 0, 52, 597, 1, 0, 0, 0, 54, 608, 1, 0, 0, 0, 56, 617, 1, 0, 0, 0, 58, 622, 1, 0, 0, 0, 60, 626, 1, 0, 0, 0, 62, 633, 1, 0, 0, 0, 64, 641, 1, 0, 0, 0, 66, 649, 1, 0, 0, 0, 68, 655, 1, 0, 0, 0, 70, 663, 1, 0, 0, 0, 72, 669, 1, 0, 0, 0, 74, 672, 1, 0, 0, 0, 76, 682, 1, 0, 0, 0, 78, 686, 1, 0, 0, 0, 80, 691, 1, 0, 0, 0, 82, 696, 1, 0, 0, 0, 84, 700, 1, 0, 0, 0, 86, 706, 1, 0, 0, 0, 88, 715, 1, 0, 0, 0, 90, 722, 1, 0, 0, 0, 92, 727, 1, 0, 0, 0, 94, 730, 1, 0, 0, 0, 96, 733, 1, 0, 0, 0, 98, 739, 1, 0, 0, 0, 100, 755, 1, 0, 0, 0, 102, 757, 1, 0, 0, 0, 104, 763, 1, 0, 0, 0, 106, 773, 1, 0, 0, 0, 108, 782, 1, 0, 0, 0, 110, 785, 1, 0, 0, 0, 112, 790, 1, 0, 0, 0, 114, 794, 1, 0, 0, 0, 116, 801, 1, 0, 0, 0, 118, 806, 1, 0, 0, 0, 120, 814, 1, 0, 0, 0, 122, 819, 1, 0, 0, 0, 124, 823, 1, 0, 0, 0, 126, 828, 1, 0, 0, 0, 128, 834, 1, 0, 0, 0, 130, 847, 1, 0, 0, 0, 132, 854, 1, 0, 0, 0, 134, 860, 1, 0, 0, 0, 136, 865, 1, 0, 0, 0, 138, 869, 1, 0, 0, 0, 140, 873, 1, 0, 0, 0, 142, 878, 1, 0, 0, 0, 144, 884, 1, 0, 0, 0, 146, 891, 1, 0, 0, 0, 148, 894, 1, 0, 0, 0, 150, 897, 1, 0, 0, 0, 152, 903, 1, 0, 0, 0, 154, 909, 1, 0, 0, 0, 156, 914, 1, 0, 0, 0, 158, 924, 1, 0, 0, 0, 160, 934, 1, 0, 0, 0, 162, 943, 1, 0, 0, 0, 164, 951, 1, 0, 0, 0, 166, 959, 1, 0, 0, 0, 168, 965, 1, 0, 0, 0, 170, 975, 1, 0, 0, 0, 172, 983, 1, 0, 0, 0, 174, 990, 1, 0, 0, 0, 176, 996, 1, 0, 0, 0, 178, 1003, 1, 0, 0, 0, 180, 1007, 1, 0, 0, 0, 182, 1012, 1, 0, 0, 0, 184, 1019, 1, 0, 0, 0, 186, 1026, 1, 0, 0, 0, 188, 1033, 1, 0, 0, 0, 190, 1038, 1, 0, 0, 0, 192, 1043, 1, 0, 0, 0, 194, 1052, 1, 0, 0, 0, 196, 1062, 1, 0, 0, 0, 198, 1067, 1, 0, 0, 0, 200, 1073, 1, 0, 0, 0, 202, 1078, 1, 0, 0, 0, 204, 1088, 1, 0, 0, 0, 206, 1091, 1, 0, 0, 0, 208, 1095, 1, 0, 0, 0, 210, 1102, 1, 0, 0, 0, 212, 1111, 1, 0, 0, 0, 214, 1116, 1, 0, 0, 0, 216, 1125, 1, 0, 0, 0, 218, 1129, 1, 0, 0, 0, 220, 1138, 1, 0, 0, 0, 222, 1148, 1, 0, 0, 0, 224, 1154, 1, 0, 0, 0, 226, 1162, 1, 0, 0, 0, 228, 1168, 1, 0, 0, 0, 230, 1175, 1, 0, 0, 0, 232, 1180, 1, 0, 0, 0, 234, 1185, 1, 0, 0, 0, 236, 1191, 1, 0, 0, 0, 238, 1197, 1, 0, 0, 0, 240, 1204, 1, 0, 0, 0, 242, 1209, 1, 0, 0, 0, 244, 1226, 1, 0, 0, 0, 246, 1255, 1, 0, 0, 0, 248, 1303, 1, 0, 0, 0, 250, 1381, 1, 0, 0, 0, 252, 1383, 1, 0, 0, 0, 254, 1390, 1, 0, 0, 0, 256, 1394, 1, 0, 0, 0, 258, 1401, 1, 0, 0, 0, 260, 1417, 1, 0, 0, 0, 262, 1419, 1, 0, 0, 0, 264, 1421, 1, 0, 0, 0, 266, 1423, 1, 0, 0, 0, 268, 1425, 1, 0, 0, 0, 270, 1427, 1, 0, 0, 0, 272, 1429, 1, 0, 0, 0, 274, 1431, 1, 0, 0, 0, 276, 1433, 1, 0, 0, 0, 278, 1435, 1, 0, 0, 0, 280, 1437, 1, 0, 0, 0, 282, 1439, 1, 0, 0, 0, 284, 1441, 1, 0, 0, 0, 286, 1443, 1, 0, 0, 0, 288, 1445, 1, 0, 0, 0, 290, 1447, 1, 0, 0, 0, 292, 1449, 1, 0, 0, 0, 294, 1451, 1, 0, 0, 0, 296, 1453, 1, 0, 0, 0, 298, 1455, 1, 0, 0, 0, 300, 1457, 1, 0, 0, 0, 302, 1459, 1, 0, 0, 0, 304, 1461, 1, 0, 0, 0, 306, 1463, 1, 0, 0, 0, 308, 1465, 1, 0, 0, 0, 310, 1467, 1, 0, 0, 0, 312, 1469, 1, 0, 0, 0, 314, 1471, 1, 0, 0, 0, 316, 1473, 1, 0, 0, 0, 318, 1475, 1, 0, 0, 0, 320, 1477, 1, 0, 0, 0, 322, 1480, 1, 0, 0, 0, 324, 1482, 1, 0, 0, 0, 326, 1484, 1, 0, 0, 0, 328, 1486, 1, 0, 0, 0, 330, 1489, 1, 0, 0, 0, 332, 1492, 1, 0, 0, 0, 334, 1494, 1, 0, 0, 0, 336, 1496, 1, 0, 0, 0, 338, 1499, 1, 0, 0, 0, 340, 1501, 1, 0, 0, 0, 342, 1503, 1, 0, 0, 0, 344, 1505, 1, 0, 0, 0, 346, 1508, 1, 0, 0, 0, 348, 1510, 1, 0, 0, 0, 350, 1513, 1, 0, 0, 0, 352, 1515, 1, 0, 0, 0, 354, 1517, 1, 0, 0, 0, 356, 1520, 1, 0, 0, 0, 358, 1524, 1, 0, 0, 0, 360, 1528, 1, 0, 0, 0, 362, 1530, 1, 0, 0, 0, 364, 1532, 1, 0, 0, 0, 366, 1535, 1, 0, 0, 0, 368, 1541, 1, 0, 0, 0, 370, 1547, 1, 0, 0, 0, 372, 1549, 1, 0, 0, 0, 374, 1556, 1, 0, 0, 0, 376, 1558, 1, 0, 0, 0, 378, 1562, 1, 0, 0, 0, 380, 1565, 1, 0, 0, 0, 382, 1568, 1, 0, 0, 0, 384, 1571, 1, 0, 0, 0, 386, 1573, 1, 0, 0, 0, 388, 1575, 1, 0, 0, 0, 390, 1577, 1, 0, 0, 0, 392, 1579, 1, 0, 0, 0, 394, 1584, 1, 0, 0, 0, 396, 1589, 1, 0, 0, 0, 398, 1591, 1, 0, 0, 0, 400, 1593, 1, 0, 0, 0, 402, 1596, 1, 0, 0, 0, 404, 1600, 1, 0, 0, 0, 406, 1602, 1, 0, 0, 0, 408, 1604, 1, 0, 0, 0, 410, 1606, 1, 0, 0, 0, 412, 1608, 1, 0, 0, 0, 414, 1611, 1, 0, 0, 0, 416, 1613, 1, 0, 0, 0, 418, 1631, 1, 0, 0, 0, 420, 1644, 1, 0, 0, 0, 422, 1659, 1, 0, 0, 0, 424, 1663, 1, 0, 0, 0, 426, 1667, 1, 0, 0, 0, 428, 1677, 1, 0, 0, 0, 430, 1681, 1, 0, 0, 0, 432, 1685, 1, 0, 0, 0, 434, 1691, 1, 0, 0, 0, 436, 1697, 1, 0, 0, 0, 438, 1706, 1, 0, 0, 0, 440, 1710, 1, 0, 0, 0, 442, 1715, 1, 0, 0, 0, 444, 1721, 1, 0, 0, 0, 446, 1726, 1, 0, 0, 0, 448, 1731, 1, 0, 0, 0, 450, 1741, 1, 0, 0, 0, 452, 1748, 1, 0, 0, 0, 454, 1752, 1, 0, 0, 0, 456, 1757, 1, 0, 0, 0, 458, 1764, 1, 0, 0, 0, 460, 1770, 1, 0, 0, 0, 462, 463, 3, 260, 127, 0, 463, 464, 3, 282, 138, 0, 464, 465, 3, 282, 138, 0, 465, 7, 1, 0, 0, 0, 466, 467, 3, 260, 127, 0, 467, 468, 3, 286, 140, 0, 468, 469, 3, 266, 130, 0, 469, 9, 1, 0, 0, 0, 470, 471, 3, 260, 127, 0, 471, 472, 3, 286, 140, 0, 472, 473, 3, 298, 146, 0, 473, 474, 3, 276, 135, 0, 474, 11, 1, 0, 0, 0, 475, 476, 3, 260, 127, 0, 476, 477, 3, 286, 140, 0, 477, 478, 3, 308, 151, 0, 478, 13, 1, 0, 0, 0, 479, 480, 3, 260, 127, 0, 480, 481, 3, 294, 144, 0, 481, 482, 3, 294, 144, 0, 482, 483, 3, 260, 127, 0, 483, 484, 3, 308, 151, 0, 484, 15, 1, 0, 0, 0, 485, 486, 3, 260, 127, 0, 486, 487, 3, 296, 145, 0, 487, 17, 1, 0, 0, 0, 488, 489, 3, 260, 127, 0, 489, 490, 3, 296, 145, 0, 490, 491, 3, 264, 129, 0, 491, 503, 1, 0, 0, 0, 492, 493, 3, 260, 127, 0, 493, 494, 3, 296, 145, 0, 494, 495, 3, 264, 129, 0, 495, 496, 3, 268, 131, 0, 496, 497, 3, 286, 140, 0, 497, 498, 3, 266, 130, 0, 498, 499, 3, 276, 135, 0, 499, 500, 3, 286, 140, 0, 500, 501, 3, 272, 133, 0, 501, 503, 1, 0, 0, 0, 502, 488, 1, 0, 0, 0, 502, 492, 1, 0, 0, 0, 503, 19, 1, 0, 0, 0, 504, 505, 3, 260, 127, 0, 505, 506, 3, 296, 145, 0, 506, 507, 3, 288, 141, 0, 507, 508, 3, 270, 132, 0, 508, 21, 1, 0, 0, 0, 509, 510, 3, 262, 128, 0, 510, 511, 3, 268, 131, 0, 511, 512, 3, 298, 146, 0, 512, 513, 3, 304, 149, 0, 513, 514, 3, 268, 131, 0, 514, 515, 3, 268, 131, 0, 515, 516, 3, 286, 140, 0, 516, 23, 1, 0, 0, 0, 517, 518, 3, 262, 128, 0, 518, 519, 3, 288, 141, 0, 519, 520, 3, 298, 146, 0, 520, 521, 3, 274, 134, 0, 521, 25, 1, 0, 0, 0, 522, 523, 3, 262, 128, 0, 523, 524, 3, 308, 151, 0, 524, 27, 1, 0, 0, 0, 525, 526, 3, 264, 129, 0, 526, 527, 3, 260, 127, 0, 527, 528, 3, 296, 145, 0, 528, 529, 3, 268, 131, 0, 529, 29, 1, 0, 0, 0, 530, 531, 3, 264, 129, 0, 531, 532, 3, 260, 127, 0, 532, 533, 3, 296, 145, 0, 533, 534, 3, 298, 146, 0, 534, 31, 1, 0, 0, 0, 535, 536, 3, 264, 129, 0, 536, 537, 3, 260, 127, 0, 537, 538, 3, 298, 146, 0, 538, 539, 3, 264, 129, 0, 539, 540, 3, 274, 134, 0, 540, 33, 1, 0, 0, 0, 541, 542, 3, 264, 129, 0, 542, 543, 3, 288, 141, 0, 543, 544, 3, 274, 134, 0, 544, 545, 3, 288, 141, 0, 545, 546, 3, 294, 144, 0, 546, 547, 3, 298, 146, 0, 547, 35, 1, 0, 0, 0, 548, 549, 3, 264, 129, 0, 549, 550, 3, 288, 141, 0, 550, 551, 3, 282, 138, 0, 551, 552, 3, 282, 138, 0, 552, 553, 3, 260, 127, 0, 553, 554, 3, 298, 146, 0, 554, 555, 3, 268, 131, 0, 555, 37, 1, 0, 0, 0, 556, 557, 3, 264, 129, 0, 557, 558, 3, 288, 141, 0, 558, 559, 3, 282, 138, 0, 559, 560, 3, 300, 147, 0, 560, 561, 3, 284, 139, 0, 561, 562, 3, 286, 140, 0, 562, 563, 3, 296, 145, 0, 563, 39, 1, 0, 0, 0, 564, 565, 3, 264, 129, 0, 565, 566, 3, 294, 144, 0, 566, 567, 3, 288, 141, 0, 567, 568, 3, 296, 145, 0, 568, 569, 3, 296, 145, 0, 569, 41, 1, 0, 0, 0, 570, 571, 3, 264, 129, 0, 571, 572, 3, 300, 147, 0, 572, 573, 3, 262, 128, 0, 573, 574, 3, 268, 131, 0, 574, 43, 1, 0, 0, 0, 575, 576, 3, 264, 129, 0, 576, 577, 3, 300, 147, 0, 577, 578, 3, 294, 144, 0, 578, 579, 3, 294, 144, 0, 579, 580, 3, 268, 131, 0, 580, 581, 3, 286, 140, 0, 581, 582, 3, 298, 146, 0, 582, 45, 1, 0, 0, 0, 583, 584, 3, 266, 130, 0, 584, 585, 3, 260, 127, 0, 585, 586, 3, 298, 146, 0, 586, 587, 3, 268, 131, 0, 587, 47, 1, 0, 0, 0, 588, 589, 3, 266, 130, 0, 589, 590, 3, 260, 127, 0, 590, 591, 3, 308, 151, 0, 591, 49, 1, 0, 0, 0, 592, 593, 3, 266, 130, 0, 593, 594, 3, 268, 131, 0, 594, 595, 3, 296, 145, 0, 595, 596, 3, 264, 129, 0, 596, 51, 1, 0, 0, 0, 597, 598, 3, 266, 130, 0, 598, 599, 3, 268, 131, 0, 599, 600, 3, 296, 145, 0, 600, 601, 3, 264, 129, 0, 601, 602, 3, 268, 131, 0, 602, 603, 3, 286, 140, 0, 603, 604, 3, 266, 130, 0, 604, 605, 3, 276, 135, 0, 605, 606, 3, 286, 140, 0, 606, 607, 3, 272, 133, 0, 607, 53, 1, 0, 0, 0, 608, 609, 3, 266, 130, 0, 609, 610, 3, 276, 135, 0, 610, 611, 3, 296, 145, 0, 611, 612, 3, 298, 146, 0, 612, 613, 3, 276, 135, 0, 613, 614, 3, 286, 140, 0, 614, 615, 3, 264, 129, 0, 615, 616, 3, 298, 146, 0, 616, 55, 1, 0, 0, 0, 617, 618, 3, 268, 131, 0, 618, 619, 3, 282, 138, 0, 619, 620, 3, 296, 145, 0, 620, 621, 3, 268, 131, 0, 621, 57, 1, 0, 0, 0, 622, 623, 3, 268, 131, 0, 623, 624, 3, 286, 140, 0, 624, 625, 3, 266, 130, 0, 625, 59, 1, 0, 0, 0, 626, 627, 3, 268, 131, 0, 627, 628, 3, 306, 150, 0, 628, 629, 3, 264, 129, 0, 629, 630, 3, 268, 131, 0, 630, 631, 3, 290, 142, 0, 631, 632, 3, 298, 146, 0, 632, 61, 1, 0, 0, 0, 633, 634, 3, 268, 131, 0, 634, 635, 3, 306, 150, 0, 635, 636, 3, 264, 129, 0, 636, 637, 3, 282, 138, 0, 637, 638, 3, 300, 147, 0, 638, 639, 3, 266, 130, 0, 639, 640, 3, 268, 131, 0, 640, 63, 1, 0, 0, 0, 641, 642, 3, 268, 131, 0, 642, 643, 3, 306, 150, 0, 643, 644, 3, 298, 146, 0, 644, 645, 3, 294, 144, 0, 645, 646, 3, 260, 127, 0, 646, 647, 3, 264, 129, 0, 647, 648, 3, 298, 146, 0, 648, 65, 1, 0, 0, 0, 649, 650, 3, 270, 132, 0, 650, 651, 3, 276, 135, 0, 651, 652, 3, 286, 140, 0, 652, 653, 3, 260, 127, 0, 653, 654, 3, 282, 138, 0, 654, 67, 1, 0, 0, 0, 655, 656, 3, 270, 132, 0, 656, 657, 3, 276, 135, 0, 657, 658, 3, 286, 140, 0, 658, 659, 3, 260, 127, 0, 659, 660, 3, 282, 138, 0, 660, 661, 3, 282, 138, 0, 661, 662, 3, 308, 151, 0, 662, 69, 1, 0, 0, 0, 663, 664, 3, 270, 132, 0, 664, 665, 3, 276, 135, 0, 665, 666, 3, 294, 144, 0, 666, 667, 3, 296, 145, 0, 667, 668, 3, 298, 146, 0, 668, 71, 1, 0, 0, 0, 669, 670, 3, 270, 132, 0, 670, 671, 3, 286, 140, 0, 671, 73, 1, 0, 0, 0, 672, 673, 3, 270, 132, 0, 673, 674, 3, 288, 141, 0, 674, 675, 3, 282, 138, 0, 675, 676, 3, 282, 138, 0, 676, 677, 3, 288, 141, 0, 677, 678, 3, 304, 149, 0, 678, 679, 3, 276, 135, 0, 679, 680, 3, 286, 140, 0, 680, 681, 3, 272, 133, 0, 681, 75, 1, 0, 0, 0, 682, 683, 3, 270, 132, 0, 683, 684, 3, 288, 141, 0, 684, 685, 3, 294, 144, 0, 685, 77, 1, 0, 0, 0, 686, 687, 3, 270, 132, 0, 687, 688, 3, 294, 144, 0, 688, 689, 3, 288, 141, 0, 689, 690, 3, 284, 139, 0, 690, 79, 1, 0, 0, 0, 691, 692, 3, 270, 132, 0, 692, 693, 3, 300, 147, 0, 693, 694, 3, 282, 138, 0, 694, 695, 3, 282, 138, 0, 695, 81, 1, 0, 0, 0, 696, 697, 3, 270, 132, 0, 697, 698, 3, 300, 147, 0, 698, 699, 3, 286, 140, 0, 699, 83, 1, 0, 0, 0, 700, 701, 3, 272, 133, 0, 701, 702, 3, 294, 144, 0, 702, 703, 3, 288, 141, 0, 703, 704, 3, 300, 147, 0, 704, 705, 3, 290, 142, 0, 705, 85, 1, 0, 0, 0, 706, 707, 3, 272, 133, 0, 707, 708, 3, 294, 144, 0, 708, 709, 3, 288, 141, 0, 709, 710, 3, 300, 147, 0, 710, 711, 3, 290, 142, 0, 711, 712, 3, 276, 135, 0, 712, 713, 3, 286, 140, 0, 713, 714, 3, 272, 133, 0, 714, 87, 1, 0, 0, 0, 715, 716, 3, 274, 134, 0, 716, 717, 3, 260, 127, 0, 717, 718, 3, 302, 148, 0, 718, 719, 3, 276, 135, 0, 719, 720, 3, 286, 140, 0, 720, 721, 3, 272, 133, 0, 721, 89, 1, 0, 0, 0, 722, 723, 3, 274, 134, 0, 723, 724, 3, 288, 141, 0, 724, 725, 3, 300, 147, 0, 725, 726, 3, 294, 144, 0, 726, 91, 1, 0, 0, 0, 727, 728, 3, 276, 135, 0, 728, 729, 3, 266, 130, 0, 729, 93, 1, 0, 0, 0, 730, 731, 3, 276, 135, 0, 731, 732, 3, 270, 132, 0, 732, 95, 1, 0, 0, 0, 733, 734, 3, 276, 135, 0, 734, 735, 3, 282, 138, 0, 735, 736, 3, 276, 135, 0, 736, 737, 3, 280, 137, 0, 737, 738, 3, 268, 131, 0, 738, 97, 1, 0, 0, 0, 739, 740, 3, 276, 135, 0, 740, 741, 3, 286, 140, 0, 741, 99, 1, 0, 0, 0, 742, 743, 3, 276, 135, 0, 743, 744, 3, 286, 140, 0, 744, 745, 3, 270, 132, 0, 745, 756, 1, 0, 0, 0, 746, 747, 3, 276, 135, 0, 747, 748, 3, 286, 140, 0, 748, 749, 3, 270, 132, 0, 749, 750, 3, 276, 135, 0, 750, 751, 3, 286, 140, 0, 751, 752, 3, 276, 135, 0, 752, 753, 3, 298, 146, 0, 753, 754, 3, 308, 151, 0, 754, 756, 1, 0, 0, 0, 755, 742, 1, 0, 0, 0, 755, 746, 1, 0, 0, 0, 756, 101, 1, 0, 0, 0, 757, 758, 3, 276, 135, 0, 758, 759, 3, 286, 140, 0, 759, 760, 3, 286, 140, 0, 760, 761, 3, 268, 131, 0, 761, 762, 3, 294, 144, 0, 762, 103, 1, 0, 0, 0, 763, 764, 3, 276, 135, 0, 764, 765, 3, 286, 140, 0, 765, 766, 3, 298, 146, 0, 766, 767, 3, 268, 131, 0, 767, 768, 3, 294, 144, 0, 768, 769, 3, 296, 145, 0, 769, 770, 3, 268, 131, 0, 770, 771, 3, 264, 129, 0, 771, 772, 3, 298, 146, 0, 772, 105, 1, 0, 0, 0, 773, 774, 3, 276, 135, 0, 774, 775, 3, 286, 140, 0, 775, 776, 3, 298, 146, 0, 776, 777, 3, 268, 131, 0, 777, 778, 3, 294, 144, 0, 778, 779, 3, 302, 148, 0, 779, 780, 3, 260, 127, 0, 780, 781, 3, 282, 138, 0, 781, 107, 1, 0, 0, 0, 782, 783, 3, 276, 135, 0, 783, 784, 3, 296, 145, 0, 784, 109, 1, 0, 0, 0, 785, 786, 3, 278, 136, 0, 786, 787, 3, 288, 141, 0, 787, 788, 3, 276, 135, 0, 788, 789, 3, 286, 140, 0, 789, 111, 1, 0, 0, 0, 790, 791, 3, 280, 137, 0, 791, 792, 3, 268, 131, 0, 792, 793, 3, 308, 151, 0, 793, 113, 1, 0, 0, 0, 794, 795, 3, 282, 138, 0, 795, 796, 3, 260, 127, 0, 796, 797, 3, 284, 139, 0, 797, 798, 3, 262, 128, 0, 798, 799, 3, 266, 130, 0, 799, 800, 3, 260, 127, 0, 800, 115, 1, 0, 0, 0, 801, 802, 3, 282, 138, 0, 802, 803, 3, 260, 127, 0, 803, 804, 3, 296, 145, 0, 804, 805, 3, 298, 146, 0, 805, 117, 1, 0, 0, 0, 806, 807, 3, 282, 138, 0, 807, 808, 3, 268, 131, 0, 808, 809, 3, 260, 127, 0, 809, 810, 3, 266, 130, 0, 810, 811, 3, 276, 135, 0, 811, 812, 3, 286, 140, 0, 812, 813, 3, 272, 133, 0, 813, 119, 1, 0, 0, 0, 814, 815, 3, 282, 138, 0, 815, 816, 3, 268, 131, 0, 816, 817, 3, 270, 132, 0, 817, 818, 3, 298, 146, 0, 818, 121, 1, 0, 0, 0, 819, 820, 3, 282, 138, 0, 820, 821, 3, 268, 131, 0, 821, 822, 3, 298, 146, 0, 822, 123, 1, 0, 0, 0, 823, 824, 3, 282, 138, 0, 824, 825, 3, 276, 135, 0, 825, 826, 3, 280, 137, 0, 826, 827, 3, 268, 131, 0, 827, 125, 1, 0, 0, 0, 828, 829, 3, 282, 138, 0, 829, 830, 3, 276, 135, 0, 830, 831, 3, 284, 139, 0, 831, 832, 3, 276, 135, 0, 832, 833, 3, 298, 146, 0, 833, 127, 1, 0, 0, 0, 834, 835, 3, 284, 139, 0, 835, 836, 3, 260, 127, 0, 836, 837, 3, 298, 146, 0, 837, 838, 3, 268, 131, 0, 838, 839, 3, 294, 144, 0, 839, 840, 3, 276, 135, 0, 840, 841, 3, 260, 127, 0, 841, 842, 3, 282, 138, 0, 842, 843, 3, 276, 135, 0, 843, 844, 3, 310, 152, 0, 844, 845, 3, 268, 131, 0, 845, 846, 3, 266, 130, 0, 846, 129, 1, 0, 0, 0, 847, 848, 3, 284, 139, 0, 848, 849, 3, 276, 135, 0, 849, 850, 3, 286, 140, 0, 850, 851, 3, 300, 147, 0, 851, 852, 3, 298, 146, 0, 852, 853, 3, 268, 131, 0, 853, 131, 1, 0, 0, 0, 854, 855, 3, 284, 139, 0, 855, 856, 3, 288, 141, 0, 856, 857, 3, 286, 140, 0, 857, 858, 3, 298, 146, 0, 858, 859, 3, 274, 134, 0, 859, 133, 1, 0, 0, 0, 860, 861, 3, 286, 140, 0, 861, 862, 3, 260, 127, 0, 862, 863, 3, 284, 139, 0, 863, 864, 3, 268, 131, 0, 864, 135, 1, 0, 0, 0, 865, 866, 3, 286, 140, 0, 866, 867, 3, 260, 127, 0, 867, 868, 3, 286, 140, 0, 868, 137, 1, 0, 0, 0, 869, 870, 3, 286, 140, 0, 870, 871, 3, 288, 141, 0, 871, 872, 3, 298, 146, 0, 872, 139, 1, 0, 0, 0, 873, 874, 3, 286, 140, 0, 874, 875, 3, 300, 147, 0, 875, 876, 3, 282, 138, 0, 876, 877, 3, 282, 138, 0, 877, 141, 1, 0, 0, 0, 878, 879, 3, 286, 140, 0, 879, 880, 3, 300, 147, 0, 880, 881, 3, 282, 138, 0, 881, 882, 3, 282, 138, 0, 882, 883, 3, 296, 145, 0, 883, 143, 1, 0, 0, 0, 884, 885, 3, 288, 141, 0, 885, 886, 3, 270, 132, 0, 886, 887, 3, 270, 132, 0, 887, 888, 3, 296, 145, 0, 888, 889, 3, 268, 131, 0, 889, 890, 3, 298, 146, 0, 890, 145, 1, 0, 0, 0, 891, 892, 3, 288, 141, 0, 892, 893, 3, 286, 140, 0, 893, 147, 1, 0, 0, 0, 894, 895, 3, 288, 141, 0, 895, 896, 3, 294, 144, 0, 896, 149, 1, 0, 0, 0, 897, 898, 3, 288, 141, 0, 898, 899, 3, 294, 144, 0, 899, 900, 3, 266, 130, 0, 900, 901, 3, 268, 131, 0, 901, 902, 3, 294, 144, 0, 902, 151, 1, 0, 0, 0, 903, 904, 3, 288, 141, 0, 904, 905, 3, 300, 147, 0, 905, 906, 3, 298, 146, 0, 906, 907, 3, 268, 131, 0, 907, 908, 3, 294, 144, 0, 908, 153, 1, 0, 0, 0, 909, 910, 3, 288, 141, 0, 910, 911, 3, 302, 148, 0, 911, 912, 3, 268, 131, 0, 912, 913, 3, 294, 144, 0, 913, 155, 1, 0, 0, 0, 914, 915, 3, 290, 142, 0, 915, 916, 3, 260, 127, 0, 916, 917, 3, 294, 144, 0, 917, 918, 3, 298, 146, 0, 918, 919, 3, 276, 135, 0, 919, 920, 3, 298, 146, 0, 920, 921, 3, 276, 135, 0, 921, 922, 3, 288, 141, 0, 922, 923, 3, 286, 140, 0, 923, 157, 1, 0, 0, 0, 924, 925, 3, 290, 142, 0, 925, 926, 3, 294, 144, 0, 926, 927, 3, 268, 131, 0, 927, 928, 3, 264, 129, 0, 928, 929, 3, 268, 131, 0, 929, 930, 3, 266, 130, 0, 930, 931, 3, 276, 135, 0, 931, 932, 3, 286, 140, 0, 932, 933, 3, 272, 133, 0, 933, 159, 1, 0, 0, 0, 934, 935, 3, 290, 142, 0, 935, 936, 3, 294, 144, 0, 936, 937, 3, 268, 131, 0, 937, 938, 3, 304, 149, 0, 938, 939, 3, 274, 134, 0, 939, 940, 3, 268, 131, 0, 940, 941, 3, 294, 144, 0, 941, 942, 3, 268, 131, 0, 942, 161, 1, 0, 0, 0, 943, 944, 3, 292, 143, 0, 944, 945, 3, 300, 147, 0, 945, 946, 3, 260, 127, 0, 946, 947, 3, 282, 138, 0, 947, 948, 3, 276, 135, 0, 948, 949, 3, 270, 132, 0, 949, 950, 3, 308, 151, 0, 950, 163, 1, 0, 0, 0, 951, 952, 3, 292, 143, 0, 952, 953, 3, 300, 147, 0, 953, 954, 3, 260, 127, 0, 954, 955, 3, 294, 144, 0, 955, 956, 3, 298, 146, 0, 956, 957, 3, 268, 131, 0, 957, 958, 3, 294, 144, 0, 958, 165, 1, 0, 0, 0, 959, 960, 3, 294, 144, 0, 960, 961, 3, 260, 127, 0, 961, 962, 3, 286, 140, 0, 962, 963, 3, 272, 133, 0, 963, 964, 3, 268, 131, 0, 964, 167, 1, 0, 0, 0, 965, 966, 3, 294, 144, 0, 966, 967, 3, 268, 131, 0, 967, 968, 3, 264, 129, 0, 968, 969, 3, 300, 147, 0, 969, 970, 3, 294, 144, 0, 970, 971, 3, 296, 145, 0, 971, 972, 3, 276, 135, 0, 972, 973, 3, 302, 148, 0, 973, 974, 3, 268, 131, 0, 974, 169, 1, 0, 0, 0, 975, 976, 3, 294, 144, 0, 976, 977, 3, 268, 131, 0, 977, 978, 3, 290, 142, 0, 978, 979, 3, 282, 138, 0, 979, 980, 3, 260, 127, 0, 980, 981, 3, 264, 129, 0, 981, 982, 3, 268, 131, 0, 982, 171, 1, 0, 0, 0, 983, 984, 3, 294, 144, 0, 984, 985, 3, 268, 131, 0, 985, 986, 3, 298, 146, 0, 986, 987, 3, 300, 147, 0, 987, 988, 3, 294, 144, 0, 988, 989, 3, 286, 140, 0, 989, 173, 1, 0, 0, 0, 990, 991, 3, 294, 144, 0, 991, 992, 3, 276, 135, 0, 992, 993, 3, 272, 133, 0, 993, 994, 3, 274, 134, 0, 994, 995, 3, 298, 146, 0, 995, 175, 1, 0, 0, 0, 996, 997, 3, 294, 144, 0, 997, 998, 3, 288, 141, 0, 998, 999, 3, 282, 138, 0, 999, 1000, 3, 282, 138, 0, 1000, 1001, 3, 300, 147, 0, 1001, 1002, 3, 290, 142, 0, 1002, 177, 1, 0, 0, 0, 1003, 1004, 3, 294, 144, 0, 1004, 1005, 3, 288, 141, 0, 1005, 1006, 3, 304, 149, 0, 1006, 179, 1, 0, 0, 0, 1007, 1008, 3, 294, 144, 0, 1008, 1009, 3, 288, 141, 0, 1009, 1010, 3, 304, 149, 0, 1010, 1011, 3, 296, 145, 0, 1011, 181, 1, 0, 0, 0, 1012, 1013, 3, 296, 145, 0, 1013, 1014, 3, 260, 127, 0, 1014, 1015, 3, 284, 139, 0, 1015, 1016, 3, 290, 142, 0, 1016, 1017, 3, 282, 138, 0, 1017, 1018, 3, 268, 131, 0, 1018, 183, 1, 0, 0, 0, 1019, 1020, 3, 296, 145, 0, 1020, 1021, 3, 268, 131, 0, 1021, 1022, 3, 264, 129, 0, 1022, 1023, 3, 288, 141, 0, 1023, 1024, 3, 286, 140, 0, 1024, 1025, 3, 266, 130, 0, 1025, 185, 1, 0, 0, 0, 1026, 1027, 3, 296, 145, 0, 1027, 1028, 3, 268, 131, 0, 1028, 1029, 3, 282, 138, 0, 1029, 1030, 3, 268, 131, 0, 1030, 1031, 3, 264, 129, 0, 1031, 1032, 3, 298, 146, 0, 1032, 187, 1, 0, 0, 0, 1033, 1034, 3, 296, 145, 0, 1034, 1035, 3, 268, 131, 0, 1035, 1036, 3, 284, 139, 0, 1036, 1037, 3, 276, 135, 0, 1037, 189, 1, 0, 0, 0, 1038, 1039, 3, 296, 145, 0, 1039, 1040, 3, 268, 131, 0, 1040, 1041, 3, 298, 146, 0, 1041, 1042, 3, 296, 145, 0, 1042, 191, 1, 0, 0, 0, 1043, 1044, 3, 296, 145, 0, 1044, 1045, 3, 268, 131, 0, 1045, 1046, 3, 298, 146, 0, 1046, 1047, 3, 298, 146, 0, 1047, 1048, 3, 276, 135, 0, 1048, 1049, 3, 286, 140, 0, 1049, 1050, 3, 272, 133, 0, 1050, 1051, 3, 296, 145, 0, 1051, 193, 1, 0, 0, 0, 1052, 1053, 3, 296, 145, 0, 1053, 1054, 3, 300, 147, 0, 1054, 1055, 3, 262, 128, 0, 1055, 1056, 3, 296, 145, 0, 1056, 1057, 3, 298, 146, 0, 1057, 1058, 3, 294, 144, 0, 1058, 1059, 3, 276, 135, 0, 1059, 1060, 3, 286, 140, 0, 1060, 1061, 3, 272, 133, 0, 1061, 195, 1, 0, 0, 0, 1062, 1063, 3, 298, 146, 0, 1063, 1064, 3, 274, 134, 0, 1064, 1065, 3, 268, 131, 0, 1065, 1066, 3, 286, 140, 0, 1066, 197, 1, 0, 0, 0, 1067, 1068, 3, 298, 146, 0, 1068, 1069, 3, 274, 134, 0, 1069, 1070, 3, 294, 144, 0, 1070, 1071, 3, 288, 141, 0, 1071, 1072, 3, 304, 149, 0, 1072, 199, 1, 0, 0, 0, 1073, 1074, 3, 298, 146, 0, 1074, 1075, 3, 276, 135, 0, 1075, 1076, 3, 268, 131, 0, 1076, 1077, 3, 296, 145, 0, 1077, 201, 1, 0, 0, 0, 1078, 1079, 3, 298, 146, 0, 1079, 1080, 3, 276, 135, 0, 1080, 1081, 3, 284, 139, 0, 1081, 1082, 3, 268, 131, 0, 1082, 1083, 3, 296, 145, 0, 1083, 1084, 3, 298, 146, 0, 1084, 1085, 3, 260, 127, 0, 1085, 1086, 3, 284, 139, 0, 1086, 1087, 3, 290, 142, 0, 1087, 203, 1, 0, 0, 0, 1088, 1089, 3, 298, 146, 0, 1089, 1090, 3, 288, 141, 0, 1090, 205, 1, 0, 0, 0, 1091, 1092, 3, 298, 146, 0, 1092, 1093, 3, 288, 141, 0, 1093, 1094, 3, 290, 142, 0, 1094, 207, 1, 0, 0, 0, 1095, 1096, 3, 298, 146, 0, 1096, 1097, 3, 288, 141, 0, 1097, 1098, 3, 298, 146, 0, 1098, 1099, 3, 260, 127, 0, 1099, 1100, 3, 282, 138, 0, 1100, 1101, 3, 296, 145, 0, 1101, 209, 1, 0, 0, 0, 1102, 1103, 3, 298, 146, 0, 1103, 1104, 3, 294, 144, 0, 1104, 1105, 3, 260, 127, 0, 1105, 1106, 3, 276, 135, 0, 1106, 1107, 3, 282, 138, 0, 1107, 1108, 3, 276, 135, 0, 1108, 1109, 3, 286, 140, 0, 1109, 1110, 3, 272, 133, 0, 1110, 211, 1, 0, 0, 0, 1111, 1112, 3, 298, 146, 0, 1112, 1113, 3, 294, 144, 0, 1113, 1114, 3, 276, 135, 0, 1114, 1115, 3, 284, 139, 0, 1115, 213, 1, 0, 0, 0, 1116, 1117, 3, 298, 146, 0, 1117, 1118, 3, 294, 144, 0, 1118, 1119, 3, 300, 147, 0, 1119, 1120, 3, 286, 140, 0, 1120, 1121, 3, 264, 129, 0, 1121, 1122, 3, 260, 127, 0, 1122, 1123, 3, 298, 146, 0, 1123, 1124, 3, 268, 131, 0, 1124, 215, 1, 0, 0, 0, 1125, 1126, 3, 298, 146, 0, 1126, 1127, 3, 294, 144, 0, 1127, 1128, 3, 308, 151, 0, 1128, 217, 1, 0, 0, 0, 1129, 1130, 3, 298, 146, 0, 1130, 1131, 3, 294, 144, 0, 1131, 1132, 3, 308, 151, 0, 1132, 1133, 5, 95, 0, 0, 1133, 1134, 3, 264, 129, 0, 1134, 1135, 3, 260, 127, 0, 1135, 1136, 3, 296, 145, 0, 1136, 1137, 3, 298, 146, 0, 1137, 219, 1, 0, 0, 0, 1138, 1139, 3, 300, 147, 0, 1139, 1140, 3, 286, 140, 0, 1140, 1141, 3, 262, 128, 0, 1141, 1142, 3, 288, 141, 0, 1142, 1143, 3, 300, 147, 0, 1143, 1144, 3, 286, 140, 0, 1144, 1145, 3, 266, 130, 0, 1145, 1146, 3, 268, 131, 0, 1146, 1147, 3, 266, 130, 0, 1147, 221, 1, 0, 0, 0, 1148, 1149, 3, 300, 147, 0, 1149, 1150, 3, 286, 140, 0, 1150, 1151, 3, 276, 135, 0, 1151, 1152, 3, 288, 141, 0, 1152, 1153, 3, 286, 140, 0, 1153, 223, 1, 0, 0, 0, 1154, 1155, 3, 300, 147, 0, 1155, 1156, 3, 286, 140, 0, 1156, 1157, 3, 290, 142, 0, 1157, 1158, 3, 276, 135, 0, 1158, 1159, 3, 302, 148, 0, 1159, 1160, 3, 288, 141, 0, 1160, 1161, 3, 298, 146, 0, 1161, 225, 1, 0, 0, 0, 1162, 1163, 3, 300, 147, 0, 1163, 1164, 3, 296, 145, 0, 1164, 1165, 3, 276, 135, 0, 1165, 1166, 3, 286, 140, 0, 1166, 1167, 3, 272, 133, 0, 1167, 227, 1, 0, 0, 0, 1168, 1169, 3, 302, 148, 0, 1169, 1170, 3, 260, 127, 0, 1170, 1171, 3, 282, 138, 0, 1171, 1172, 3, 300, 147, 0, 1172, 1173, 3, 268, 131, 0, 1173, 1174, 3, 296, 145, 0, 1174, 229, 1, 0, 0, 0, 1175, 1176, 3, 304, 149, 0, 1176, 1177, 3, 268, 131, 0, 1177, 1178, 3, 268, 131, 0, 1178, 1179, 3, 280, 137, 0, 1179, 231, 1, 0, 0, 0, 1180, 1181, 3, 304, 149, 0, 1181, 1182, 3, 274, 134, 0, 1182, 1183, 3, 268, 131, 0, 1183, 1184, 3, 286, 140, 0, 1184, 233, 1, 0, 0, 0, 1185, 1186, 3, 304, 149, 0, 1186, 1187, 3, 274, 134, 0, 1187, 1188, 3, 268, 131, 0, 1188, 1189, 3, 294, 144, 0, 1189, 1190, 3, 268, 131, 0, 1190, 235, 1, 0, 0, 0, 1191, 1192, 3, 304, 149, 0, 1192, 1193, 3, 274, 134, 0, 1193, 1194, 3, 276, 135, 0, 1194, 1195, 3, 282, 138, 0, 1195, 1196, 3, 268, 131, 0, 1196, 237, 1, 0, 0, 0, 1197, 1198, 3, 304, 149, 0, 1198, 1199, 3, 276, 135, 0, 1199, 1200, 3, 286, 140, 0, 1200, 1201, 3, 266, 130, 0, 1201, 1202, 3, 288, 141, 0, 1202, 1203, 3, 304, 149, 0, 1203, 239, 1, 0, 0, 0, 1204, 1205, 3, 304, 149, 0, 1205, 1206, 3, 276, 135, 0, 1206, 1207, 3, 298, 146, 0, 1207, 1208, 3, 274, 134, 0, 1208, 241, 1, 0, 0, 0, 1209, 1210, 3, 304, 149, 0, 1210, 1211, 3, 276, 135, 0, 1211, 1212, 3, 298, 146, 0, 1212, 1213, 3, 274, 134, 0, 1213, 1214, 3, 276, 135, 0, 1214, 1215, 3, 286, 140, 0, 1215, 243, 1, 0, 0, 0, 1216, 1217, 3, 308, 151, 0, 1217, 1218, 3, 268, 131, 0, 1218, 1219, 3, 260, 127, 0, 1219, 1220, 3, 294, 144, 0, 1220, 1227, 1, 0, 0, 0, 1221, 1222, 3, 308, 151, 0, 1222, 1223, 3, 308, 151, 0, 1223, 1224, 3, 308, 151, 0, 1224, 1225, 3, 308, 151, 0, 1225, 1227, 1, 0, 0, 0, 1226, 1216, 1, 0, 0, 0, 1226, 1221, 1, 0, 0, 0, 1227, 245, 1, 0, 0, 0, 1228, 1229, 3, 326, 160, 0, 1229, 1230, 3, 262, 128, 0, 1230, 1256, 1, 0, 0, 0, 1231, 1232, 3, 326, 160, 0, 1232, 1233, 3, 270, 132, 0, 1233, 1256, 1, 0, 0, 0, 1234, 1235, 3, 326, 160, 0, 1235, 1236, 3, 294, 144, 0, 1236, 1256, 1, 0, 0, 0, 1237, 1238, 3, 326, 160, 0, 1238, 1239, 3, 286, 140, 0, 1239, 1256, 1, 0, 0, 0, 1240, 1241, 3, 326, 160, 0, 1241, 1242, 3, 298, 146, 0, 1242, 1256, 1, 0, 0, 0, 1243, 1244, 3, 326, 160, 0, 1244, 1245, 5, 48, 0, 0, 1245, 1256, 1, 0, 0, 0, 1246, 1247, 3, 326, 160, 0, 1247, 1248, 3, 260, 127, 0, 1248, 1256, 1, 0, 0, 0, 1249, 1250, 3, 326, 160, 0, 1250, 1251, 3, 302, 148, 0, 1251, 1256, 1, 0, 0, 0, 1252, 1253, 3, 326, 160, 0, 1253, 1254, 3, 326, 160, 0, 1254, 1256, 1, 0, 0, 0, 1255, 1228, 1, 0, 0, 0, 1255, 1231, 1, 0, 0, 0, 1255, 1234, 1, 0, 0, 0, 1255, 1237, 1, 0, 0, 0, 1255, 1240, 1, 0, 0, 0, 1255, 1243, 1, 0, 0, 0, 1255, 1246, 1, 0, 0, 0, 1255, 1249, 1, 0, 0, 0, 1255, 1252, 1, 0, 0, 0, 1256, 247, 1, 0, 0, 0, 1257, 1261, 3, 312, 153, 0, 1258, 1261, 3, 414, 204, 0, 1259, 1261, 3, 340, 167, 0, 1260, 1257, 1, 0, 0, 0, 1260, 1258, 1, 0, 0, 0, 1260, 1259, 1, 0, 0, 0, 1261, 1268, 1, 0, 0, 0, 1262, 1267, 3, 312, 153, 0, 1263, 1267, 3, 414, 204, 0, 1264, 1267, 3, 316, 155, 0, 1265, 1267, 3, 340, 167, 0, 1266, 1262, 1, 0, 0, 0, 1266, 1263, 1, 0, 0, 0, 1266, 1264, 1, 0, 0, 0, 1266, 1265, 1, 0, 0, 0, 1267, 1270, 1, 0, 0, 0, 1268, 1266, 1, 0, 0, 0, 1268, 1269, 1, 0, 0, 0, 1269, 1304, 1, 0, 0, 0, 1270, 1268, 1, 0, 0, 0, 1271, 1282, 3, 324, 159, 0, 1272, 1281, 8, 0, 0, 0, 1273, 1281, 3, 246, 120, 0, 1274, 1275, 3, 326, 160, 0, 1275, 1276, 3, 396, 195, 0, 1276, 1281, 1, 0, 0, 0, 1277, 1278, 3, 324, 159, 0, 1278, 1279, 3, 324, 159, 0, 1279, 1281, 1, 0, 0, 0, 1280, 1272, 1, 0, 0, 0, 1280, 1273, 1, 0, 0, 0, 1280, 1274, 1, 0, 0, 0, 1280, 1277, 1, 0, 0, 0, 1281, 1284, 1, 0, 0, 0, 1282, 1280, 1, 0, 0, 0, 1282, 1283, 1, 0, 0, 0, 1283, 1285, 1, 0, 0, 0, 1284, 1282, 1, 0, 0, 0, 1285, 1286, 3, 324, 159, 0, 1286, 1304, 1, 0, 0, 0, 1287, 1298, 3, 390, 192, 0, 1288, 1297, 8, 1, 0, 0, 1289, 1297, 3, 246, 120, 0, 1290, 1291, 3, 326, 160, 0, 1291, 1292, 3, 390, 192, 0, 1292, 1297, 1, 0, 0, 0, 1293, 1294, 3, 390, 192, 0, 1294, 1295, 3, 390, 192, 0, 1295, 1297, 1, 0, 0, 0, 1296, 1288, 1, 0, 0, 0, 1296, 1289, 1, 0, 0, 0, 1296, 1290, 1, 0, 0, 0, 1296, 1293, 1, 0, 0, 0, 1297, 1300, 1, 0, 0, 0, 1298, 1296, 1, 0, 0, 0, 1298, 1299, 1, 0, 0, 0, 1299, 1301, 1, 0, 0, 0, 1300, 1298, 1, 0, 0, 0, 1301, 1302, 3, 390, 192, 0, 1302, 1304, 1, 0, 0, 0, 1303, 1260, 1, 0, 0, 0, 1303, 1271, 1, 0, 0, 0, 1303, 1287, 1, 0, 0, 0, 1304, 249, 1, 0, 0, 0, 1305, 1306, 3, 256, 125, 0, 1306, 1310, 3, 342, 168, 0, 1307, 1309, 3, 318, 156, 0, 1308, 1307, 1, 0, 0, 0, 1309, 1312, 1, 0, 0, 0, 1310, 1308, 1, 0, 0, 0, 1310, 1311, 1, 0, 0, 0, 1311, 1315, 1, 0, 0, 0, 1312, 1310, 1, 0, 0, 0, 1313, 1316, 3, 290, 142, 0, 1314, 1316, 3, 268, 131, 0, 1315, 1313, 1, 0, 0, 0, 1315, 1314, 1, 0, 0, 0, 1316, 1319, 1, 0, 0, 0, 1317, 1320, 3, 386, 190, 0, 1318, 1320, 3, 338, 166, 0, 1319, 1317, 1, 0, 0, 0, 1319, 1318, 1, 0, 0, 0, 1319, 1320, 1, 0, 0, 0, 1320, 1322, 1, 0, 0, 0, 1321, 1323, 3, 316, 155, 0, 1322, 1321, 1, 0, 0, 0, 1323, 1324, 1, 0, 0, 0, 1324, 1322, 1, 0, 0, 0, 1324, 1325, 1, 0, 0, 0, 1325, 1382, 1, 0, 0, 0, 1326, 1329, 3, 256, 125, 0, 1327, 1330, 3, 290, 142, 0, 1328, 1330, 3, 268, 131, 0, 1329, 1327, 1, 0, 0, 0, 1329, 1328, 1, 0, 0, 0, 1330, 1333, 1, 0, 0, 0, 1331, 1334, 3, 386, 190, 0, 1332, 1334, 3, 338, 166, 0, 1333, 1331, 1, 0, 0, 0, 1333, 1332, 1, 0, 0, 0, 1333, 1334, 1, 0, 0, 0, 1334, 1336, 1, 0, 0, 0, 1335, 1337, 3, 316, 155, 0, 1336, 1335, 1, 0, 0, 0, 1337, 1338, 1, 0, 0, 0, 1338, 1336, 1, 0, 0, 0, 1338, 1339, 1, 0, 0, 0, 1339, 1382, 1, 0, 0, 0, 1340, 1341, 3, 254, 124, 0, 1341, 1345, 3, 342, 168, 0, 1342, 1344, 3, 316, 155, 0, 1343, 1342, 1, 0, 0, 0, 1344, 1347, 1, 0, 0, 0, 1345, 1343, 1, 0, 0, 0, 1345, 1346, 1, 0, 0, 0, 1346, 1348, 1, 0, 0, 0, 1347, 1345, 1, 0, 0, 0, 1348, 1351, 3, 268, 131, 0, 1349, 1352, 3, 386, 190, 0, 1350, 1352, 3, 338, 166, 0, 1351, 1349, 1, 0, 0, 0, 1351, 1350, 1, 0, 0, 0, 1351, 1352, 1, 0, 0, 0, 1352, 1354, 1, 0, 0, 0, 1353, 1355, 3, 316, 155, 0, 1354, 1353, 1, 0, 0, 0, 1355, 1356, 1, 0, 0, 0, 1356, 1354, 1, 0, 0, 0, 1356, 1357, 1, 0, 0, 0, 1357, 1382, 1, 0, 0, 0, 1358, 1359, 3, 342, 168, 0, 1359, 1360, 3, 254, 124, 0, 1360, 1363, 3, 268, 131, 0, 1361, 1364, 3, 386, 190, 0, 1362, 1364, 3, 338, 166, 0, 1363, 1361, 1, 0, 0, 0, 1363, 1362, 1, 0, 0, 0, 1363, 1364, 1, 0, 0, 0, 1364, 1366, 1, 0, 0, 0, 1365, 1367, 3, 316, 155, 0, 1366, 1365, 1, 0, 0, 0, 1367, 1368, 1, 0, 0, 0, 1368, 1366, 1, 0, 0, 0, 1368, 1369, 1, 0, 0, 0, 1369, 1382, 1, 0, 0, 0, 1370, 1371, 3, 254, 124, 0, 1371, 1374, 3, 268, 131, 0, 1372, 1375, 3, 386, 190, 0, 1373, 1375, 3, 338, 166, 0, 1374, 1372, 1, 0, 0, 0, 1374, 1373, 1, 0, 0, 0, 1374, 1375, 1, 0, 0, 0, 1375, 1377, 1, 0, 0, 0, 1376, 1378, 3, 316, 155, 0, 1377, 1376, 1, 0, 0, 0, 1378, 1379, 1, 0, 0, 0, 1379, 1377, 1, 0, 0, 0, 1379, 1380, 1, 0, 0, 0, 1380, 1382, 1, 0, 0, 0, 1381, 1305, 1, 0, 0, 0, 1381, 1326, 1, 0, 0, 0, 1381, 1340, 1, 0, 0, 0, 1381, 1358, 1, 0, 0, 0, 1381, 1370, 1, 0, 0, 0, 1382, 251, 1, 0, 0, 0, 1383, 1385, 5, 48, 0, 0, 1384, 1386, 3, 314, 154, 0, 1385, 1384, 1, 0, 0, 0, 1386, 1387, 1, 0, 0, 0, 1387, 1385, 1, 0, 0, 0, 1387, 1388, 1, 0, 0, 0, 1388, 253, 1, 0, 0, 0, 1389, 1391, 3, 316, 155, 0, 1390, 1389, 1, 0, 0, 0, 1391, 1392, 1, 0, 0, 0, 1392, 1390, 1, 0, 0, 0, 1392, 1393, 1, 0, 0, 0, 1393, 255, 1, 0, 0, 0, 1394, 1395, 5, 48, 0, 0, 1395, 1397, 3, 306, 150, 0, 1396, 1398, 3, 318, 156, 0, 1397, 1396, 1, 0, 0, 0, 1398, 1399, 1, 0, 0, 0, 1399, 1397, 1, 0, 0, 0, 1399, 1400, 1, 0, 0, 0, 1400, 257, 1, 0, 0, 0, 1401, 1412, 3, 396, 195, 0, 1402, 1411, 8, 2, 0, 0, 1403, 1411, 3, 246, 120, 0, 1404, 1405, 3, 326, 160, 0, 1405, 1406, 3, 396, 195, 0, 1406, 1411, 1, 0, 0, 0, 1407, 1408, 3, 396, 195, 0, 1408, 1409, 3, 396, 195, 0, 1409, 1411, 1, 0, 0, 0, 1410, 1402, 1, 0, 0, 0, 1410, 1403, 1, 0, 0, 0, 1410, 1404, 1, 0, 0, 0, 1410, 1407, 1, 0, 0, 0, 1411, 1414, 1, 0, 0, 0, 1412, 1410, 1, 0, 0, 0, 1412, 1413, 1, 0, 0, 0, 1413, 1415, 1, 0, 0, 0, 1414, 1412, 1, 0, 0, 0, 1415, 1416, 3, 396, 195, 0, 1416, 259, 1, 0, 0, 0, 1417, 1418, 7, 3, 0, 0, 1418, 261, 1, 0, 0, 0, 1419, 1420, 7, 4, 0, 0, 1420, 263, 1, 0, 0, 0, 1421, 1422, 7, 5, 0, 0, 1422, 265, 1, 0, 0, 0, 1423, 1424, 7, 6, 0, 0, 1424, 267, 1, 0, 0, 0, 1425, 1426, 7, 7, 0, 0, 1426, 269, 1, 0, 0, 0, 1427, 1428, 7, 8, 0, 0, 1428, 271, 1, 0, 0, 0, 1429, 1430, 7, 9, 0, 0, 1430, 273, 1, 0, 0, 0, 1431, 1432, 7, 10, 0, 0, 1432, 275, 1, 0, 0, 0, 1433, 1434, 7, 11, 0, 0, 1434, 277, 1, 0, 0, 0, 1435, 1436, 7, 12, 0, 0, 1436, 279, 1, 0, 0, 0, 1437, 1438, 7, 13, 0, 0, 1438, 281, 1, 0, 0, 0, 1439, 1440, 7, 14, 0, 0, 1440, 283, 1, 0, 0, 0, 1441, 1442, 7, 15, 0, 0, 1442, 285, 1, 0, 0, 0, 1443, 1444, 7, 16, 0, 0, 1444, 287, 1, 0, 0, 0, 1445, 1446, 7, 17, 0, 0, 1446, 289, 1, 0, 0, 0, 1447, 1448, 7, 18, 0, 0, 1448, 291, 1, 0, 0, 0, 1449, 1450, 7, 19, 0, 0, 1450, 293, 1, 0, 0, 0, 1451, 1452, 7, 20, 0, 0, 1452, 295, 1, 0, 0, 0, 1453, 1454, 7, 21, 0, 0, 1454, 297, 1, 0, 0, 0, 1455, 1456, 7, 22, 0, 0, 1456, 299, 1, 0, 0, 0, 1457, 1458, 7, 23, 0, 0, 1458, 301, 1, 0, 0, 0, 1459, 1460, 7, 24, 0, 0, 1460, 303, 1, 0, 0, 0, 1461, 1462, 7, 25, 0, 0, 1462, 305, 1, 0, 0, 0, 1463, 1464, 7, 26, 0, 0, 1464, 307, 1, 0, 0, 0, 1465, 1466, 7, 27, 0, 0, 1466, 309, 1, 0, 0, 0, 1467, 1468, 7, 28, 0, 0, 1468, 311, 1, 0, 0, 0, 1469, 1470, 7, 29, 0, 0, 1470, 313, 1, 0, 0, 0, 1471, 1472, 7, 30, 0, 0, 1472, 315, 1, 0, 0, 0, 1473, 1474, 7, 31, 0, 0, 1474, 317, 1, 0, 0, 0, 1475, 1476, 7, 32, 0, 0, 1476, 319, 1, 0, 0, 0, 1477, 1478, 5, 45, 0, 0, 1478, 1479, 5, 62, 0, 0, 1479, 321, 1, 0, 0, 0, 1480, 1481, 5, 42, 0, 0, 1481, 323, 1, 0, 0, 0, 1482, 1483, 5, 96, 0, 0, 1483, 325, 1, 0, 0, 0, 1484, 1485, 5, 92, 0, 0, 1485, 327, 1, 0, 0, 0, 1486, 1487, 5, 58, 0, 0, 1487, 1488, 5, 58, 0, 0, 1488, 329, 1, 0, 0, 0, 1489, 1490, 5, 58, 0, 0, 1490, 1491, 5, 61, 0, 0, 1491, 331, 1, 0, 0, 0, 1492, 1493, 5, 58, 0, 0, 1493, 333, 1, 0, 0, 0, 1494, 1495, 5, 44, 0, 0, 1495, 335, 1, 0, 0, 0, 1496, 1497, 5, 124, 0, 0, 1497, 1498, 5, 124, 0, 0, 1498, 337, 1, 0, 0, 0, 1499, 1500, 5, 45, 0, 0, 1500, 339, 1, 0, 0, 0, 1501, 1502, 5, 36, 0, 0, 1502, 341, 1, 0, 0, 0, 1503, 1504, 5, 46, 0, 0, 1504, 343, 1, 0, 0, 0, 1505, 1506, 5, 61, 0, 0, 1506, 1507, 5, 61, 0, 0, 1507, 345, 1, 0, 0, 0, 1508, 1509, 5, 61, 0, 0, 1509, 347, 1, 0, 0, 0, 1510, 1511, 5, 62, 0, 0, 1511, 1512, 5, 61, 0, 0, 1512, 349, 1, 0, 0, 0, 1513, 1514, 5, 62, 0, 0, 1514, 351, 1, 0, 0, 0, 1515, 1516, 5, 35, 0, 0, 1516, 353, 1, 0, 0, 0, 1517, 1518, 5, 126, 0, 0, 1518, 1519, 5, 42, 0, 0, 1519, 355, 1, 0, 0, 0, 1520, 1521, 5, 61, 0, 0, 1521, 1522, 5, 126, 0, 0, 1522, 1523, 5, 42, 0, 0, 1523, 357, 1, 0, 0, 0, 1524, 1525, 5, 123, 0, 0, 1525, 1526, 1, 0, 0, 0, 1526, 1527, 6, 176, 0, 0, 1527, 359, 1, 0, 0, 0, 1528, 1529, 5, 91, 0, 0, 1529, 361, 1, 0, 0, 0, 1530, 1531, 5, 40, 0, 0, 1531, 363, 1, 0, 0, 0, 1532, 1533, 5, 60, 0, 0, 1533, 1534, 5, 61, 0, 0, 1534, 365, 1, 0, 0, 0, 1535, 1536, 5, 60, 0, 0, 1536, 1537, 5, 47, 0, 0, 1537, 1538, 1, 0, 0, 0, 1538, 1539, 6, 180, 1, 0, 1539, 1540, 6, 180, 2, 0, 1540, 367, 1, 0, 0, 0, 1541, 1542, 5, 60, 0, 0, 1542, 1543, 4, 181, 0, 0, 1543, 1544, 1, 0, 0, 0, 1544, 1545, 6, 181, 3, 0, 1545, 1546, 6, 181, 4, 0, 1546, 369, 1, 0, 0, 0, 1547, 1548, 5, 60, 0, 0, 1548, 371, 1, 0, 0, 0, 1549, 1550, 5, 60, 0, 0, 1550, 1551, 5, 47, 0, 0, 1551, 373, 1, 0, 0, 0, 1552, 1553, 5, 33, 0, 0, 1553, 1557, 5, 61, 0, 0, 1554, 1555, 5, 60, 0, 0, 1555, 1557, 5, 62, 0, 0, 1556, 1552, 1, 0, 0, 0, 1556, 1554, 1, 0, 0, 0, 1557, 375, 1, 0, 0, 0, 1558, 1559, 5, 33, 0, 0, 1559, 1560, 5, 126, 0, 0, 1560, 1561, 5, 42, 0, 0, 1561, 377, 1, 0, 0, 0, 1562, 1563, 5, 33, 0, 0, 1563, 1564, 5, 126, 0, 0, 1564, 379, 1, 0, 0, 0, 1565, 1566, 5, 63, 0, 0, 1566, 1567, 5, 46, 0, 0, 1567, 381, 1, 0, 0, 0, 1568, 1569, 5, 63, 0, 0, 1569, 1570, 5, 63, 0, 0, 1570, 383, 1, 0, 0, 0, 1571, 1572, 5, 37, 0, 0, 1572, 385, 1, 0, 0, 0, 1573, 1574, 5, 43, 0, 0, 1574, 387, 1, 0, 0, 0, 1575, 1576, 5, 63, 0, 0, 1576, 389, 1, 0, 0, 0, 1577, 1578, 5, 34, 0, 0, 1578, 391, 1, 0, 0, 0, 1579, 1580, 5, 102, 0, 0, 1580, 1581, 5, 39, 0, 0, 1581, 1582, 1, 0, 0, 0, 1582, 1583, 6, 193, 5, 0, 1583, 393, 1, 0, 0, 0, 1584, 1585, 5, 70, 0, 0, 1585, 1586, 5, 39, 0, 0, 1586, 1587, 1, 0, 0, 0, 1587, 1588, 6, 194, 6, 0, 1588, 395, 1, 0, 0, 0, 1589, 1590, 5, 39, 0, 0, 1590, 397, 1, 0, 0, 0, 1591, 1592, 5, 126, 0, 0, 1592, 399, 1, 0, 0, 0, 1593, 1594, 5, 61, 0, 0, 1594, 1595, 5, 126, 0, 0, 1595, 401, 1, 0, 0, 0, 1596, 1597, 5, 125, 0, 0, 1597, 1598, 1, 0, 0, 0, 1598, 1599, 6, 198, 7, 0, 1599, 403, 1, 0, 0, 0, 1600, 1601, 5, 93, 0, 0, 1601, 405, 1, 0, 0, 0, 1602, 1603, 5, 41, 0, 0, 1603, 407, 1, 0, 0, 0, 1604, 1605, 5, 59, 0, 0, 1605, 409, 1, 0, 0, 0, 1606, 1607, 5, 47, 0, 0, 1607, 411, 1, 0, 0, 0, 1608, 1609, 5, 47, 0, 0, 1609, 1610, 5, 62, 0, 0, 1610, 413, 1, 0, 0, 0, 1611, 1612, 5, 95, 0, 0, 1612, 415, 1, 0, 0, 0, 1613, 1614, 5, 47, 0, 0, 1614, 1615, 5, 42, 0, 0, 1615, 1619, 1, 0, 0, 0, 1616, 1618, 9, 0, 0, 0, 1617, 1616, 1, 0, 0, 0, 1618, 1621, 1, 0, 0, 0, 1619, 1620, 1, 0, 0, 0, 1619, 1617, 1, 0, 0, 0, 1620, 1622, 1, 0, 0, 0, 1621, 1619, 1, 0, 0, 0, 1622, 1623, 5, 42, 0, 0, 1623, 1624, 5, 47, 0, 0, 1624, 1625, 1, 0, 0, 0, 1625, 1626, 6, 205, 8, 0, 1626, 417, 1, 0, 0, 0, 1627, 1628, 5, 45, 0, 0, 1628, 1632, 5, 45, 0, 0, 1629, 1630, 5, 47, 0, 0, 1630, 1632, 5, 47, 0, 0, 1631, 1627, 1, 0, 0, 0, 1631, 1629, 1, 0, 0, 0, 1632, 1636, 1, 0, 0, 0, 1633, 1635, 8, 33, 0, 0, 1634, 1633, 1, 0, 0, 0, 1635, 1638, 1, 0, 0, 0, 1636, 1634, 1, 0, 0, 0, 1636, 1637, 1, 0, 0, 0, 1637, 1640, 1, 0, 0, 0, 1638, 1636, 1, 0, 0, 0, 1639, 1641, 7, 34, 0, 0, 1640, 1639, 1, 0, 0, 0, 1641, 1642, 1, 0, 0, 0, 1642, 1643, 6, 206, 8, 0, 1643, 419, 1, 0, 0, 0, 1644, 1645, 7, 35, 0, 0, 1645, 1646, 1, 0, 0, 0, 1646, 1647, 6, 207, 9, 0, 1647, 421, 1, 0, 0, 0, 1648, 1660, 8, 36, 0, 0, 1649, 1660, 3, 246, 120, 0, 1650, 1651, 3, 326, 160, 0, 1651, 1652, 3, 396, 195, 0, 1652, 1660, 1, 0, 0, 0, 1653, 1654, 3, 326, 160, 0, 1654, 1655, 3, 358, 176, 0, 1655, 1660, 1, 0, 0, 0, 1656, 1657, 3, 396, 195, 0, 1657, 1658, 3, 396, 195, 0, 1658, 1660, 1, 0, 0, 0, 1659, 1648, 1, 0, 0, 0, 1659, 1649, 1, 0, 0, 0, 1659, 1650, 1, 0, 0, 0, 1659, 1653, 1, 0, 0, 0, 1659, 1656, 1, 0, 0, 0, 1660, 1661, 1, 0, 0, 0, 1661, 1659, 1, 0, 0, 0, 1661, 1662, 1, 0, 0, 0, 1662, 423, 1, 0, 0, 0, 1663, 1664, 3, 358, 176, 0, 1664, 1665, 1, 0, 0, 0, 1665, 1666, 6, 209, 0, 0, 1666, 425, 1, 0, 0, 0, 1667, 1668, 3, 396, 195, 0, 1668, 1669, 1, 0, 0, 0, 1669, 1670, 6, 210, 10, 0, 1670, 1671, 6, 210, 7, 0, 1671, 427, 1, 0, 0, 0, 1672, 1678, 8, 37, 0, 0, 1673, 1678, 3, 246, 120, 0, 1674, 1675, 3, 326, 160, 0, 1675, 1676, 3, 358, 176, 0, 1676, 1678, 1, 0, 0, 0, 1677, 1672, 1, 0, 0, 0, 1677, 1673, 1, 0, 0, 0, 1677, 1674, 1, 0, 0, 0, 1678, 1679, 1, 0, 0, 0, 1679, 1677, 1, 0, 0, 0, 1679, 1680, 1, 0, 0, 0, 1680, 429, 1, 0, 0, 0, 1681, 1682, 3, 358, 176, 0, 1682, 1683, 1, 0, 0, 0, 1683, 1684, 6, 212, 0, 0, 1684, 431, 1, 0, 0, 0, 1685, 1686, 5, 47, 0, 0, 1686, 1687, 5, 62, 0, 0, 1687, 1688, 1, 0, 0, 0, 1688, 1689, 6, 213, 11, 0, 1689, 1690, 6, 213, 7, 0, 1690, 433, 1, 0, 0, 0, 1691, 1692, 5, 62, 0, 0, 1692, 1693, 1, 0, 0, 0, 1693, 1694, 6, 214, 12, 0, 1694, 1695, 6, 214, 7, 0, 1695, 1696, 6, 214, 13, 0, 1696, 435, 1, 0, 0, 0, 1697, 1701, 7, 38, 0, 0, 1698, 1700, 7, 39, 0, 0, 1699, 1698, 1, 0, 0, 0, 1700, 1703, 1, 0, 0, 0, 1701, 1699, 1, 0, 0, 0, 1701, 1702, 1, 0, 0, 0, 1702, 1704, 1, 0, 0, 0, 1703, 1701, 1, 0, 0, 0, 1704, 1705, 6, 215, 14, 0, 1705, 437, 1, 0, 0, 0, 1706, 1707, 5, 61, 0, 0, 1707, 1708, 1, 0, 0, 0, 1708, 1709, 6, 216, 15, 0, 1709, 439, 1, 0, 0, 0, 1710, 1711, 3, 258, 126, 0, 1711, 1712, 1, 0, 0, 0, 1712, 1713, 6, 217, 16, 0, 1713, 441, 1, 0, 0, 0, 1714, 1716, 7, 40, 0, 0, 1715, 1714, 1, 0, 0, 0, 1716, 1717, 1, 0, 0, 0, 1717, 1715, 1, 0, 0, 0, 1717, 1718, 1, 0, 0, 0, 1718, 1719, 1, 0, 0, 0, 1719, 1720, 6, 218, 9, 0, 1720, 443, 1, 0, 0, 0, 1721, 1722, 5, 123, 0, 0, 1722, 1723, 1, 0, 0, 0, 1723, 1724, 6, 219, 17, 0, 1724, 1725, 6, 219, 0, 0, 1725, 445, 1, 0, 0, 0, 1726, 1727, 5, 62, 0, 0, 1727, 1728, 1, 0, 0, 0, 1728, 1729, 6, 220, 12, 0, 1729, 1730, 6, 220, 7, 0, 1730, 447, 1, 0, 0, 0, 1731, 1735, 7, 38, 0, 0, 1732, 1734, 7, 39, 0, 0, 1733, 1732, 1, 0, 0, 0, 1734, 1737, 1, 0, 0, 0, 1735, 1733, 1, 0, 0, 0, 1735, 1736, 1, 0, 0, 0, 1736, 1738, 1, 0, 0, 0, 1737, 1735, 1, 0, 0, 0, 1738, 1739, 6, 221, 14, 0, 1739, 449, 1, 0, 0, 0, 1740, 1742, 7, 40, 0, 0, 1741, 1740, 1, 0, 0, 0, 1742, 1743, 1, 0, 0, 0, 1743, 1741, 1, 0, 0, 0, 1743, 1744, 1, 0, 0, 0, 1744, 1745, 1, 0, 0, 0, 1745, 1746, 6, 222, 9, 0, 1746, 451, 1, 0, 0, 0, 1747, 1749, 8, 41, 0, 0, 1748, 1747, 1, 0, 0, 0, 1749, 1750, 1, 0, 0, 0, 1750, 1748, 1, 0, 0, 0, 1750, 1751, 1, 0, 0, 0, 1751, 453, 1, 0, 0, 0, 1752, 1753, 5, 123, 0, 0, 1753, 1754, 1, 0, 0, 0, 1754, 1755, 6, 224, 17, 0, 1755, 1756, 6, 224, 0, 0, 1756, 455, 1, 0, 0, 0, 1757, 1758, 5, 60, 0, 0, 1758, 1759, 5, 47, 0, 0, 1759, 1760, 1, 0, 0, 0, 1760, 1761, 6, 225, 1, 0, 1761, 1762, 6, 225, 7, 0, 1762, 1763, 6, 225, 2, 0, 1763, 457, 1, 0, 0, 0, 1764, 1765, 5, 60, 0, 0, 1765, 1766, 1, 0, 0, 0, 1766, 1767, 6, 226, 3, 0, 1767, 1768, 6, 226, 4, 0, 1768, 459, 1, 0, 0, 0, 1769, 1771, 7, 40, 0, 0, 1770, 1769, 1, 0, 0, 0, 1771, 1772, 1, 0, 0, 0, 1772, 1770, 1, 0, 0, 0, 1772, 1773, 1, 0, 0, 0, 1773, 1774, 1, 0, 0, 0, 1774, 1775, 6, 227, 9, 0, 1775, 461, 1, 0, 0, 0, 53, 0, 1, 2, 3, 4, 5, 502, 755, 1226, 1255, 1260, 1266, 1268, 1280, 1282, 1296, 1298, 1303, 1310, 1315, 1319, 1324, 1329, 1333, 1338, 1345, 1351, 1356, 1363, 1368, 1374, 1379, 1381, 1387, 1392, 1399, 1410, 1412, 1556, 1619, 1631, 1636, 1640, 1659, 1661, 1677, 1679, 1701, 1717, 1735, 1743, 1750, 1772, 18, 5, 0, 0, 7, 152, 0, 5, 4, 0, 7, 151, 0, 5, 3, 0, 5, 1, 0, 5, 2, 0, 4, 0, 0, 6, 0, 0, 0, 1, 0, 7, 164, 0, 7, 172, 0, 7, 143, 0, 5, 5, 0, 7, 122, 0, 7, 141, 0, 7, 127, 0, 7, 147, 0] \ No newline at end of file +[4, 0, 190, 1840, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 2, 201, 7, 201, 2, 202, 7, 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 2, 228, 7, 228, 2, 229, 7, 229, 2, 230, 7, 230, 2, 231, 7, 231, 2, 232, 7, 232, 2, 233, 7, 233, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 515, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 790, 8, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 3, 125, 1286, 8, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 3, 126, 1320, 8, 126, 1, 127, 1, 127, 1, 127, 3, 127, 1325, 8, 127, 1, 127, 1, 127, 1, 127, 1, 127, 5, 127, 1331, 8, 127, 10, 127, 12, 127, 1334, 9, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 5, 127, 1345, 8, 127, 10, 127, 12, 127, 1348, 9, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 5, 127, 1361, 8, 127, 10, 127, 12, 127, 1364, 9, 127, 1, 127, 1, 127, 3, 127, 1368, 8, 127, 1, 128, 1, 128, 1, 128, 5, 128, 1373, 8, 128, 10, 128, 12, 128, 1376, 9, 128, 1, 128, 1, 128, 3, 128, 1380, 8, 128, 1, 128, 1, 128, 3, 128, 1384, 8, 128, 1, 128, 4, 128, 1387, 8, 128, 11, 128, 12, 128, 1388, 1, 128, 1, 128, 1, 128, 3, 128, 1394, 8, 128, 1, 128, 1, 128, 3, 128, 1398, 8, 128, 1, 128, 4, 128, 1401, 8, 128, 11, 128, 12, 128, 1402, 1, 128, 1, 128, 1, 128, 5, 128, 1408, 8, 128, 10, 128, 12, 128, 1411, 9, 128, 1, 128, 1, 128, 1, 128, 3, 128, 1416, 8, 128, 1, 128, 4, 128, 1419, 8, 128, 11, 128, 12, 128, 1420, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 3, 128, 1428, 8, 128, 1, 128, 4, 128, 1431, 8, 128, 11, 128, 12, 128, 1432, 1, 128, 1, 128, 1, 128, 1, 128, 3, 128, 1439, 8, 128, 1, 128, 4, 128, 1442, 8, 128, 11, 128, 12, 128, 1443, 3, 128, 1446, 8, 128, 1, 129, 1, 129, 4, 129, 1450, 8, 129, 11, 129, 12, 129, 1451, 1, 130, 4, 130, 1455, 8, 130, 11, 130, 12, 130, 1456, 1, 131, 1, 131, 1, 131, 4, 131, 1462, 8, 131, 11, 131, 12, 131, 1463, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 5, 132, 1475, 8, 132, 10, 132, 12, 132, 1478, 9, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 134, 1, 134, 1, 135, 1, 135, 1, 136, 1, 136, 1, 137, 1, 137, 1, 138, 1, 138, 1, 139, 1, 139, 1, 140, 1, 140, 1, 141, 1, 141, 1, 142, 1, 142, 1, 143, 1, 143, 1, 144, 1, 144, 1, 145, 1, 145, 1, 146, 1, 146, 1, 147, 1, 147, 1, 148, 1, 148, 1, 149, 1, 149, 1, 150, 1, 150, 1, 151, 1, 151, 1, 152, 1, 152, 1, 153, 1, 153, 1, 154, 1, 154, 1, 155, 1, 155, 1, 156, 1, 156, 1, 157, 1, 157, 1, 158, 1, 158, 1, 159, 1, 159, 1, 160, 1, 160, 1, 161, 1, 161, 1, 162, 1, 162, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 165, 1, 165, 1, 166, 1, 166, 1, 167, 1, 167, 1, 167, 1, 168, 1, 168, 1, 168, 1, 169, 1, 169, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 172, 1, 172, 1, 173, 1, 173, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 1, 178, 1, 178, 1, 179, 1, 179, 1, 180, 1, 180, 1, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 182, 1, 182, 1, 182, 1, 182, 1, 183, 1, 183, 1, 184, 1, 184, 1, 185, 1, 185, 1, 185, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 188, 1, 188, 1, 189, 1, 189, 1, 189, 1, 190, 1, 190, 1, 190, 1, 190, 3, 190, 1621, 8, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 192, 1, 192, 1, 192, 1, 193, 1, 193, 1, 193, 1, 194, 1, 194, 1, 194, 1, 195, 1, 195, 1, 196, 1, 196, 1, 197, 1, 197, 1, 198, 1, 198, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 201, 1, 201, 1, 202, 1, 202, 1, 203, 1, 203, 1, 203, 1, 204, 1, 204, 1, 204, 1, 204, 1, 205, 1, 205, 1, 206, 1, 206, 1, 207, 1, 207, 1, 208, 1, 208, 1, 209, 1, 209, 1, 209, 1, 210, 1, 210, 1, 211, 1, 211, 1, 211, 1, 211, 5, 211, 1682, 8, 211, 10, 211, 12, 211, 1685, 9, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 212, 1, 212, 1, 212, 1, 212, 3, 212, 1696, 8, 212, 1, 212, 5, 212, 1699, 8, 212, 10, 212, 12, 212, 1702, 9, 212, 1, 212, 3, 212, 1705, 8, 212, 1, 212, 1, 212, 1, 213, 1, 213, 1, 213, 1, 213, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 4, 214, 1724, 8, 214, 11, 214, 12, 214, 1725, 1, 215, 1, 215, 1, 215, 1, 215, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 4, 217, 1742, 8, 217, 11, 217, 12, 217, 1743, 1, 218, 1, 218, 1, 218, 1, 218, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 221, 1, 221, 5, 221, 1764, 8, 221, 10, 221, 12, 221, 1767, 9, 221, 1, 221, 1, 221, 1, 222, 1, 222, 1, 222, 1, 222, 1, 223, 1, 223, 1, 223, 1, 223, 1, 224, 4, 224, 1780, 8, 224, 11, 224, 12, 224, 1781, 1, 224, 1, 224, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 227, 1, 227, 5, 227, 1798, 8, 227, 10, 227, 12, 227, 1801, 9, 227, 1, 227, 1, 227, 1, 228, 4, 228, 1806, 8, 228, 11, 228, 12, 228, 1807, 1, 228, 1, 228, 1, 229, 4, 229, 1813, 8, 229, 11, 229, 12, 229, 1814, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 233, 4, 233, 1835, 8, 233, 11, 233, 12, 233, 1836, 1, 233, 1, 233, 1, 1683, 0, 234, 6, 1, 8, 2, 10, 3, 12, 4, 14, 5, 16, 6, 18, 7, 20, 8, 22, 9, 24, 10, 26, 11, 28, 12, 30, 13, 32, 14, 34, 15, 36, 16, 38, 17, 40, 18, 42, 19, 44, 20, 46, 21, 48, 22, 50, 23, 52, 24, 54, 25, 56, 26, 58, 27, 60, 28, 62, 29, 64, 30, 66, 31, 68, 32, 70, 33, 72, 34, 74, 35, 76, 36, 78, 37, 80, 38, 82, 39, 84, 40, 86, 41, 88, 42, 90, 43, 92, 44, 94, 45, 96, 46, 98, 47, 100, 48, 102, 49, 104, 50, 106, 51, 108, 52, 110, 53, 112, 54, 114, 55, 116, 56, 118, 57, 120, 58, 122, 59, 124, 60, 126, 61, 128, 62, 130, 63, 132, 64, 134, 65, 136, 66, 138, 67, 140, 68, 142, 69, 144, 70, 146, 71, 148, 72, 150, 73, 152, 74, 154, 75, 156, 76, 158, 77, 160, 78, 162, 79, 164, 80, 166, 81, 168, 82, 170, 83, 172, 84, 174, 85, 176, 86, 178, 87, 180, 88, 182, 89, 184, 90, 186, 91, 188, 92, 190, 93, 192, 94, 194, 95, 196, 96, 198, 97, 200, 98, 202, 99, 204, 100, 206, 101, 208, 102, 210, 103, 212, 104, 214, 105, 216, 106, 218, 107, 220, 108, 222, 109, 224, 110, 226, 111, 228, 112, 230, 113, 232, 114, 234, 115, 236, 116, 238, 117, 240, 118, 242, 119, 244, 120, 246, 121, 248, 122, 250, 123, 252, 124, 254, 125, 256, 126, 258, 127, 260, 128, 262, 129, 264, 130, 266, 131, 268, 132, 270, 133, 272, 0, 274, 0, 276, 0, 278, 0, 280, 0, 282, 0, 284, 0, 286, 0, 288, 0, 290, 0, 292, 0, 294, 0, 296, 0, 298, 0, 300, 0, 302, 0, 304, 0, 306, 0, 308, 0, 310, 0, 312, 0, 314, 0, 316, 0, 318, 0, 320, 0, 322, 0, 324, 0, 326, 0, 328, 0, 330, 0, 332, 134, 334, 135, 336, 136, 338, 137, 340, 138, 342, 139, 344, 140, 346, 141, 348, 142, 350, 143, 352, 144, 354, 145, 356, 146, 358, 147, 360, 148, 362, 149, 364, 150, 366, 151, 368, 152, 370, 153, 372, 154, 374, 155, 376, 156, 378, 0, 380, 0, 382, 157, 384, 158, 386, 159, 388, 160, 390, 161, 392, 162, 394, 163, 396, 164, 398, 165, 400, 166, 402, 167, 404, 168, 406, 169, 408, 170, 410, 171, 412, 172, 414, 173, 416, 174, 418, 175, 420, 176, 422, 177, 424, 178, 426, 179, 428, 180, 430, 181, 432, 182, 434, 183, 436, 184, 438, 0, 440, 185, 442, 186, 444, 0, 446, 0, 448, 0, 450, 0, 452, 0, 454, 187, 456, 0, 458, 0, 460, 0, 462, 188, 464, 189, 466, 0, 468, 0, 470, 0, 472, 190, 6, 0, 1, 2, 3, 4, 5, 42, 2, 0, 92, 92, 96, 96, 2, 0, 34, 34, 92, 92, 2, 0, 39, 39, 92, 92, 2, 0, 65, 65, 97, 97, 2, 0, 66, 66, 98, 98, 2, 0, 67, 67, 99, 99, 2, 0, 68, 68, 100, 100, 2, 0, 69, 69, 101, 101, 2, 0, 70, 70, 102, 102, 2, 0, 71, 71, 103, 103, 2, 0, 72, 72, 104, 104, 2, 0, 73, 73, 105, 105, 2, 0, 74, 74, 106, 106, 2, 0, 75, 75, 107, 107, 2, 0, 76, 76, 108, 108, 2, 0, 77, 77, 109, 109, 2, 0, 78, 78, 110, 110, 2, 0, 79, 79, 111, 111, 2, 0, 80, 80, 112, 112, 2, 0, 81, 81, 113, 113, 2, 0, 82, 82, 114, 114, 2, 0, 83, 83, 115, 115, 2, 0, 84, 84, 116, 116, 2, 0, 85, 85, 117, 117, 2, 0, 86, 86, 118, 118, 2, 0, 87, 87, 119, 119, 2, 0, 88, 88, 120, 120, 2, 0, 89, 89, 121, 121, 2, 0, 90, 90, 122, 122, 2, 0, 65, 90, 97, 122, 1, 0, 48, 55, 1, 0, 48, 57, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, 10, 10, 13, 13, 2, 1, 10, 10, 13, 13, 2, 0, 9, 13, 32, 32, 3, 0, 39, 39, 92, 92, 123, 123, 1, 0, 123, 123, 3, 0, 65, 90, 95, 95, 97, 122, 5, 0, 45, 45, 48, 57, 65, 90, 95, 95, 97, 122, 3, 0, 9, 10, 13, 13, 32, 32, 2, 0, 60, 60, 123, 123, 1880, 0, 6, 1, 0, 0, 0, 0, 8, 1, 0, 0, 0, 0, 10, 1, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 14, 1, 0, 0, 0, 0, 16, 1, 0, 0, 0, 0, 18, 1, 0, 0, 0, 0, 20, 1, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 24, 1, 0, 0, 0, 0, 26, 1, 0, 0, 0, 0, 28, 1, 0, 0, 0, 0, 30, 1, 0, 0, 0, 0, 32, 1, 0, 0, 0, 0, 34, 1, 0, 0, 0, 0, 36, 1, 0, 0, 0, 0, 38, 1, 0, 0, 0, 0, 40, 1, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 44, 1, 0, 0, 0, 0, 46, 1, 0, 0, 0, 0, 48, 1, 0, 0, 0, 0, 50, 1, 0, 0, 0, 0, 52, 1, 0, 0, 0, 0, 54, 1, 0, 0, 0, 0, 56, 1, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 60, 1, 0, 0, 0, 0, 62, 1, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 66, 1, 0, 0, 0, 0, 68, 1, 0, 0, 0, 0, 70, 1, 0, 0, 0, 0, 72, 1, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, 78, 1, 0, 0, 0, 0, 80, 1, 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 84, 1, 0, 0, 0, 0, 86, 1, 0, 0, 0, 0, 88, 1, 0, 0, 0, 0, 90, 1, 0, 0, 0, 0, 92, 1, 0, 0, 0, 0, 94, 1, 0, 0, 0, 0, 96, 1, 0, 0, 0, 0, 98, 1, 0, 0, 0, 0, 100, 1, 0, 0, 0, 0, 102, 1, 0, 0, 0, 0, 104, 1, 0, 0, 0, 0, 106, 1, 0, 0, 0, 0, 108, 1, 0, 0, 0, 0, 110, 1, 0, 0, 0, 0, 112, 1, 0, 0, 0, 0, 114, 1, 0, 0, 0, 0, 116, 1, 0, 0, 0, 0, 118, 1, 0, 0, 0, 0, 120, 1, 0, 0, 0, 0, 122, 1, 0, 0, 0, 0, 124, 1, 0, 0, 0, 0, 126, 1, 0, 0, 0, 0, 128, 1, 0, 0, 0, 0, 130, 1, 0, 0, 0, 0, 132, 1, 0, 0, 0, 0, 134, 1, 0, 0, 0, 0, 136, 1, 0, 0, 0, 0, 138, 1, 0, 0, 0, 0, 140, 1, 0, 0, 0, 0, 142, 1, 0, 0, 0, 0, 144, 1, 0, 0, 0, 0, 146, 1, 0, 0, 0, 0, 148, 1, 0, 0, 0, 0, 150, 1, 0, 0, 0, 0, 152, 1, 0, 0, 0, 0, 154, 1, 0, 0, 0, 0, 156, 1, 0, 0, 0, 0, 158, 1, 0, 0, 0, 0, 160, 1, 0, 0, 0, 0, 162, 1, 0, 0, 0, 0, 164, 1, 0, 0, 0, 0, 166, 1, 0, 0, 0, 0, 168, 1, 0, 0, 0, 0, 170, 1, 0, 0, 0, 0, 172, 1, 0, 0, 0, 0, 174, 1, 0, 0, 0, 0, 176, 1, 0, 0, 0, 0, 178, 1, 0, 0, 0, 0, 180, 1, 0, 0, 0, 0, 182, 1, 0, 0, 0, 0, 184, 1, 0, 0, 0, 0, 186, 1, 0, 0, 0, 0, 188, 1, 0, 0, 0, 0, 190, 1, 0, 0, 0, 0, 192, 1, 0, 0, 0, 0, 194, 1, 0, 0, 0, 0, 196, 1, 0, 0, 0, 0, 198, 1, 0, 0, 0, 0, 200, 1, 0, 0, 0, 0, 202, 1, 0, 0, 0, 0, 204, 1, 0, 0, 0, 0, 206, 1, 0, 0, 0, 0, 208, 1, 0, 0, 0, 0, 210, 1, 0, 0, 0, 0, 212, 1, 0, 0, 0, 0, 214, 1, 0, 0, 0, 0, 216, 1, 0, 0, 0, 0, 218, 1, 0, 0, 0, 0, 220, 1, 0, 0, 0, 0, 222, 1, 0, 0, 0, 0, 224, 1, 0, 0, 0, 0, 226, 1, 0, 0, 0, 0, 228, 1, 0, 0, 0, 0, 230, 1, 0, 0, 0, 0, 232, 1, 0, 0, 0, 0, 234, 1, 0, 0, 0, 0, 236, 1, 0, 0, 0, 0, 238, 1, 0, 0, 0, 0, 240, 1, 0, 0, 0, 0, 242, 1, 0, 0, 0, 0, 244, 1, 0, 0, 0, 0, 246, 1, 0, 0, 0, 0, 248, 1, 0, 0, 0, 0, 250, 1, 0, 0, 0, 0, 252, 1, 0, 0, 0, 0, 254, 1, 0, 0, 0, 0, 256, 1, 0, 0, 0, 0, 258, 1, 0, 0, 0, 0, 260, 1, 0, 0, 0, 0, 262, 1, 0, 0, 0, 0, 264, 1, 0, 0, 0, 0, 266, 1, 0, 0, 0, 0, 268, 1, 0, 0, 0, 0, 270, 1, 0, 0, 0, 0, 332, 1, 0, 0, 0, 0, 334, 1, 0, 0, 0, 0, 336, 1, 0, 0, 0, 0, 338, 1, 0, 0, 0, 0, 340, 1, 0, 0, 0, 0, 342, 1, 0, 0, 0, 0, 344, 1, 0, 0, 0, 0, 346, 1, 0, 0, 0, 0, 348, 1, 0, 0, 0, 0, 350, 1, 0, 0, 0, 0, 352, 1, 0, 0, 0, 0, 354, 1, 0, 0, 0, 0, 356, 1, 0, 0, 0, 0, 358, 1, 0, 0, 0, 0, 360, 1, 0, 0, 0, 0, 362, 1, 0, 0, 0, 0, 364, 1, 0, 0, 0, 0, 366, 1, 0, 0, 0, 0, 368, 1, 0, 0, 0, 0, 370, 1, 0, 0, 0, 0, 372, 1, 0, 0, 0, 0, 374, 1, 0, 0, 0, 0, 376, 1, 0, 0, 0, 0, 378, 1, 0, 0, 0, 0, 380, 1, 0, 0, 0, 0, 382, 1, 0, 0, 0, 0, 384, 1, 0, 0, 0, 0, 386, 1, 0, 0, 0, 0, 388, 1, 0, 0, 0, 0, 390, 1, 0, 0, 0, 0, 392, 1, 0, 0, 0, 0, 394, 1, 0, 0, 0, 0, 396, 1, 0, 0, 0, 0, 398, 1, 0, 0, 0, 0, 400, 1, 0, 0, 0, 0, 402, 1, 0, 0, 0, 0, 404, 1, 0, 0, 0, 0, 406, 1, 0, 0, 0, 0, 408, 1, 0, 0, 0, 0, 410, 1, 0, 0, 0, 0, 412, 1, 0, 0, 0, 0, 414, 1, 0, 0, 0, 0, 416, 1, 0, 0, 0, 0, 418, 1, 0, 0, 0, 0, 420, 1, 0, 0, 0, 0, 422, 1, 0, 0, 0, 0, 424, 1, 0, 0, 0, 0, 426, 1, 0, 0, 0, 0, 428, 1, 0, 0, 0, 0, 430, 1, 0, 0, 0, 0, 432, 1, 0, 0, 0, 1, 434, 1, 0, 0, 0, 1, 436, 1, 0, 0, 0, 1, 438, 1, 0, 0, 0, 2, 440, 1, 0, 0, 0, 2, 442, 1, 0, 0, 0, 3, 444, 1, 0, 0, 0, 3, 446, 1, 0, 0, 0, 3, 448, 1, 0, 0, 0, 3, 450, 1, 0, 0, 0, 3, 452, 1, 0, 0, 0, 3, 454, 1, 0, 0, 0, 3, 456, 1, 0, 0, 0, 4, 458, 1, 0, 0, 0, 4, 460, 1, 0, 0, 0, 4, 462, 1, 0, 0, 0, 5, 464, 1, 0, 0, 0, 5, 466, 1, 0, 0, 0, 5, 468, 1, 0, 0, 0, 5, 470, 1, 0, 0, 0, 5, 472, 1, 0, 0, 0, 6, 474, 1, 0, 0, 0, 8, 478, 1, 0, 0, 0, 10, 482, 1, 0, 0, 0, 12, 487, 1, 0, 0, 0, 14, 491, 1, 0, 0, 0, 16, 497, 1, 0, 0, 0, 18, 514, 1, 0, 0, 0, 20, 516, 1, 0, 0, 0, 22, 521, 1, 0, 0, 0, 24, 529, 1, 0, 0, 0, 26, 534, 1, 0, 0, 0, 28, 537, 1, 0, 0, 0, 30, 542, 1, 0, 0, 0, 32, 547, 1, 0, 0, 0, 34, 553, 1, 0, 0, 0, 36, 560, 1, 0, 0, 0, 38, 568, 1, 0, 0, 0, 40, 576, 1, 0, 0, 0, 42, 582, 1, 0, 0, 0, 44, 587, 1, 0, 0, 0, 46, 595, 1, 0, 0, 0, 48, 600, 1, 0, 0, 0, 50, 604, 1, 0, 0, 0, 52, 609, 1, 0, 0, 0, 54, 620, 1, 0, 0, 0, 56, 629, 1, 0, 0, 0, 58, 634, 1, 0, 0, 0, 60, 638, 1, 0, 0, 0, 62, 645, 1, 0, 0, 0, 64, 653, 1, 0, 0, 0, 66, 661, 1, 0, 0, 0, 68, 667, 1, 0, 0, 0, 70, 674, 1, 0, 0, 0, 72, 682, 1, 0, 0, 0, 74, 688, 1, 0, 0, 0, 76, 691, 1, 0, 0, 0, 78, 701, 1, 0, 0, 0, 80, 705, 1, 0, 0, 0, 82, 710, 1, 0, 0, 0, 84, 715, 1, 0, 0, 0, 86, 719, 1, 0, 0, 0, 88, 725, 1, 0, 0, 0, 90, 734, 1, 0, 0, 0, 92, 741, 1, 0, 0, 0, 94, 746, 1, 0, 0, 0, 96, 749, 1, 0, 0, 0, 98, 752, 1, 0, 0, 0, 100, 758, 1, 0, 0, 0, 102, 765, 1, 0, 0, 0, 104, 773, 1, 0, 0, 0, 106, 789, 1, 0, 0, 0, 108, 791, 1, 0, 0, 0, 110, 797, 1, 0, 0, 0, 112, 807, 1, 0, 0, 0, 114, 816, 1, 0, 0, 0, 116, 819, 1, 0, 0, 0, 118, 824, 1, 0, 0, 0, 120, 828, 1, 0, 0, 0, 122, 835, 1, 0, 0, 0, 124, 840, 1, 0, 0, 0, 126, 848, 1, 0, 0, 0, 128, 853, 1, 0, 0, 0, 130, 857, 1, 0, 0, 0, 132, 862, 1, 0, 0, 0, 134, 868, 1, 0, 0, 0, 136, 881, 1, 0, 0, 0, 138, 888, 1, 0, 0, 0, 140, 894, 1, 0, 0, 0, 142, 899, 1, 0, 0, 0, 144, 907, 1, 0, 0, 0, 146, 911, 1, 0, 0, 0, 148, 915, 1, 0, 0, 0, 150, 920, 1, 0, 0, 0, 152, 926, 1, 0, 0, 0, 154, 933, 1, 0, 0, 0, 156, 936, 1, 0, 0, 0, 158, 939, 1, 0, 0, 0, 160, 945, 1, 0, 0, 0, 162, 951, 1, 0, 0, 0, 164, 956, 1, 0, 0, 0, 166, 966, 1, 0, 0, 0, 168, 972, 1, 0, 0, 0, 170, 983, 1, 0, 0, 0, 172, 993, 1, 0, 0, 0, 174, 1002, 1, 0, 0, 0, 176, 1010, 1, 0, 0, 0, 178, 1018, 1, 0, 0, 0, 180, 1024, 1, 0, 0, 0, 182, 1034, 1, 0, 0, 0, 184, 1042, 1, 0, 0, 0, 186, 1049, 1, 0, 0, 0, 188, 1055, 1, 0, 0, 0, 190, 1062, 1, 0, 0, 0, 192, 1066, 1, 0, 0, 0, 194, 1071, 1, 0, 0, 0, 196, 1078, 1, 0, 0, 0, 198, 1085, 1, 0, 0, 0, 200, 1092, 1, 0, 0, 0, 202, 1097, 1, 0, 0, 0, 204, 1102, 1, 0, 0, 0, 206, 1111, 1, 0, 0, 0, 208, 1121, 1, 0, 0, 0, 210, 1126, 1, 0, 0, 0, 212, 1132, 1, 0, 0, 0, 214, 1137, 1, 0, 0, 0, 216, 1147, 1, 0, 0, 0, 218, 1150, 1, 0, 0, 0, 220, 1154, 1, 0, 0, 0, 222, 1161, 1, 0, 0, 0, 224, 1170, 1, 0, 0, 0, 226, 1175, 1, 0, 0, 0, 228, 1184, 1, 0, 0, 0, 230, 1188, 1, 0, 0, 0, 232, 1197, 1, 0, 0, 0, 234, 1207, 1, 0, 0, 0, 236, 1213, 1, 0, 0, 0, 238, 1221, 1, 0, 0, 0, 240, 1227, 1, 0, 0, 0, 242, 1234, 1, 0, 0, 0, 244, 1239, 1, 0, 0, 0, 246, 1244, 1, 0, 0, 0, 248, 1250, 1, 0, 0, 0, 250, 1256, 1, 0, 0, 0, 252, 1263, 1, 0, 0, 0, 254, 1268, 1, 0, 0, 0, 256, 1285, 1, 0, 0, 0, 258, 1319, 1, 0, 0, 0, 260, 1367, 1, 0, 0, 0, 262, 1445, 1, 0, 0, 0, 264, 1447, 1, 0, 0, 0, 266, 1454, 1, 0, 0, 0, 268, 1458, 1, 0, 0, 0, 270, 1465, 1, 0, 0, 0, 272, 1481, 1, 0, 0, 0, 274, 1483, 1, 0, 0, 0, 276, 1485, 1, 0, 0, 0, 278, 1487, 1, 0, 0, 0, 280, 1489, 1, 0, 0, 0, 282, 1491, 1, 0, 0, 0, 284, 1493, 1, 0, 0, 0, 286, 1495, 1, 0, 0, 0, 288, 1497, 1, 0, 0, 0, 290, 1499, 1, 0, 0, 0, 292, 1501, 1, 0, 0, 0, 294, 1503, 1, 0, 0, 0, 296, 1505, 1, 0, 0, 0, 298, 1507, 1, 0, 0, 0, 300, 1509, 1, 0, 0, 0, 302, 1511, 1, 0, 0, 0, 304, 1513, 1, 0, 0, 0, 306, 1515, 1, 0, 0, 0, 308, 1517, 1, 0, 0, 0, 310, 1519, 1, 0, 0, 0, 312, 1521, 1, 0, 0, 0, 314, 1523, 1, 0, 0, 0, 316, 1525, 1, 0, 0, 0, 318, 1527, 1, 0, 0, 0, 320, 1529, 1, 0, 0, 0, 322, 1531, 1, 0, 0, 0, 324, 1533, 1, 0, 0, 0, 326, 1535, 1, 0, 0, 0, 328, 1537, 1, 0, 0, 0, 330, 1539, 1, 0, 0, 0, 332, 1541, 1, 0, 0, 0, 334, 1544, 1, 0, 0, 0, 336, 1546, 1, 0, 0, 0, 338, 1548, 1, 0, 0, 0, 340, 1550, 1, 0, 0, 0, 342, 1553, 1, 0, 0, 0, 344, 1556, 1, 0, 0, 0, 346, 1558, 1, 0, 0, 0, 348, 1560, 1, 0, 0, 0, 350, 1563, 1, 0, 0, 0, 352, 1565, 1, 0, 0, 0, 354, 1567, 1, 0, 0, 0, 356, 1569, 1, 0, 0, 0, 358, 1572, 1, 0, 0, 0, 360, 1574, 1, 0, 0, 0, 362, 1577, 1, 0, 0, 0, 364, 1579, 1, 0, 0, 0, 366, 1581, 1, 0, 0, 0, 368, 1584, 1, 0, 0, 0, 370, 1588, 1, 0, 0, 0, 372, 1592, 1, 0, 0, 0, 374, 1594, 1, 0, 0, 0, 376, 1596, 1, 0, 0, 0, 378, 1599, 1, 0, 0, 0, 380, 1605, 1, 0, 0, 0, 382, 1611, 1, 0, 0, 0, 384, 1613, 1, 0, 0, 0, 386, 1620, 1, 0, 0, 0, 388, 1622, 1, 0, 0, 0, 390, 1626, 1, 0, 0, 0, 392, 1629, 1, 0, 0, 0, 394, 1632, 1, 0, 0, 0, 396, 1635, 1, 0, 0, 0, 398, 1637, 1, 0, 0, 0, 400, 1639, 1, 0, 0, 0, 402, 1641, 1, 0, 0, 0, 404, 1643, 1, 0, 0, 0, 406, 1648, 1, 0, 0, 0, 408, 1653, 1, 0, 0, 0, 410, 1655, 1, 0, 0, 0, 412, 1657, 1, 0, 0, 0, 414, 1660, 1, 0, 0, 0, 416, 1664, 1, 0, 0, 0, 418, 1666, 1, 0, 0, 0, 420, 1668, 1, 0, 0, 0, 422, 1670, 1, 0, 0, 0, 424, 1672, 1, 0, 0, 0, 426, 1675, 1, 0, 0, 0, 428, 1677, 1, 0, 0, 0, 430, 1695, 1, 0, 0, 0, 432, 1708, 1, 0, 0, 0, 434, 1723, 1, 0, 0, 0, 436, 1727, 1, 0, 0, 0, 438, 1731, 1, 0, 0, 0, 440, 1741, 1, 0, 0, 0, 442, 1745, 1, 0, 0, 0, 444, 1749, 1, 0, 0, 0, 446, 1755, 1, 0, 0, 0, 448, 1761, 1, 0, 0, 0, 450, 1770, 1, 0, 0, 0, 452, 1774, 1, 0, 0, 0, 454, 1779, 1, 0, 0, 0, 456, 1785, 1, 0, 0, 0, 458, 1790, 1, 0, 0, 0, 460, 1795, 1, 0, 0, 0, 462, 1805, 1, 0, 0, 0, 464, 1812, 1, 0, 0, 0, 466, 1816, 1, 0, 0, 0, 468, 1821, 1, 0, 0, 0, 470, 1828, 1, 0, 0, 0, 472, 1834, 1, 0, 0, 0, 474, 475, 3, 272, 133, 0, 475, 476, 3, 294, 144, 0, 476, 477, 3, 294, 144, 0, 477, 7, 1, 0, 0, 0, 478, 479, 3, 272, 133, 0, 479, 480, 3, 298, 146, 0, 480, 481, 3, 278, 136, 0, 481, 9, 1, 0, 0, 0, 482, 483, 3, 272, 133, 0, 483, 484, 3, 298, 146, 0, 484, 485, 3, 310, 152, 0, 485, 486, 3, 288, 141, 0, 486, 11, 1, 0, 0, 0, 487, 488, 3, 272, 133, 0, 488, 489, 3, 298, 146, 0, 489, 490, 3, 320, 157, 0, 490, 13, 1, 0, 0, 0, 491, 492, 3, 272, 133, 0, 492, 493, 3, 306, 150, 0, 493, 494, 3, 306, 150, 0, 494, 495, 3, 272, 133, 0, 495, 496, 3, 320, 157, 0, 496, 15, 1, 0, 0, 0, 497, 498, 3, 272, 133, 0, 498, 499, 3, 308, 151, 0, 499, 17, 1, 0, 0, 0, 500, 501, 3, 272, 133, 0, 501, 502, 3, 308, 151, 0, 502, 503, 3, 276, 135, 0, 503, 515, 1, 0, 0, 0, 504, 505, 3, 272, 133, 0, 505, 506, 3, 308, 151, 0, 506, 507, 3, 276, 135, 0, 507, 508, 3, 280, 137, 0, 508, 509, 3, 298, 146, 0, 509, 510, 3, 278, 136, 0, 510, 511, 3, 288, 141, 0, 511, 512, 3, 298, 146, 0, 512, 513, 3, 284, 139, 0, 513, 515, 1, 0, 0, 0, 514, 500, 1, 0, 0, 0, 514, 504, 1, 0, 0, 0, 515, 19, 1, 0, 0, 0, 516, 517, 3, 272, 133, 0, 517, 518, 3, 308, 151, 0, 518, 519, 3, 300, 147, 0, 519, 520, 3, 282, 138, 0, 520, 21, 1, 0, 0, 0, 521, 522, 3, 274, 134, 0, 522, 523, 3, 280, 137, 0, 523, 524, 3, 310, 152, 0, 524, 525, 3, 316, 155, 0, 525, 526, 3, 280, 137, 0, 526, 527, 3, 280, 137, 0, 527, 528, 3, 298, 146, 0, 528, 23, 1, 0, 0, 0, 529, 530, 3, 274, 134, 0, 530, 531, 3, 300, 147, 0, 531, 532, 3, 310, 152, 0, 532, 533, 3, 286, 140, 0, 533, 25, 1, 0, 0, 0, 534, 535, 3, 274, 134, 0, 535, 536, 3, 320, 157, 0, 536, 27, 1, 0, 0, 0, 537, 538, 3, 276, 135, 0, 538, 539, 3, 272, 133, 0, 539, 540, 3, 308, 151, 0, 540, 541, 3, 280, 137, 0, 541, 29, 1, 0, 0, 0, 542, 543, 3, 276, 135, 0, 543, 544, 3, 272, 133, 0, 544, 545, 3, 308, 151, 0, 545, 546, 3, 310, 152, 0, 546, 31, 1, 0, 0, 0, 547, 548, 3, 276, 135, 0, 548, 549, 3, 272, 133, 0, 549, 550, 3, 310, 152, 0, 550, 551, 3, 276, 135, 0, 551, 552, 3, 286, 140, 0, 552, 33, 1, 0, 0, 0, 553, 554, 3, 276, 135, 0, 554, 555, 3, 300, 147, 0, 555, 556, 3, 286, 140, 0, 556, 557, 3, 300, 147, 0, 557, 558, 3, 306, 150, 0, 558, 559, 3, 310, 152, 0, 559, 35, 1, 0, 0, 0, 560, 561, 3, 276, 135, 0, 561, 562, 3, 300, 147, 0, 562, 563, 3, 294, 144, 0, 563, 564, 3, 294, 144, 0, 564, 565, 3, 272, 133, 0, 565, 566, 3, 310, 152, 0, 566, 567, 3, 280, 137, 0, 567, 37, 1, 0, 0, 0, 568, 569, 3, 276, 135, 0, 569, 570, 3, 300, 147, 0, 570, 571, 3, 294, 144, 0, 571, 572, 3, 312, 153, 0, 572, 573, 3, 296, 145, 0, 573, 574, 3, 298, 146, 0, 574, 575, 3, 308, 151, 0, 575, 39, 1, 0, 0, 0, 576, 577, 3, 276, 135, 0, 577, 578, 3, 306, 150, 0, 578, 579, 3, 300, 147, 0, 579, 580, 3, 308, 151, 0, 580, 581, 3, 308, 151, 0, 581, 41, 1, 0, 0, 0, 582, 583, 3, 276, 135, 0, 583, 584, 3, 312, 153, 0, 584, 585, 3, 274, 134, 0, 585, 586, 3, 280, 137, 0, 586, 43, 1, 0, 0, 0, 587, 588, 3, 276, 135, 0, 588, 589, 3, 312, 153, 0, 589, 590, 3, 306, 150, 0, 590, 591, 3, 306, 150, 0, 591, 592, 3, 280, 137, 0, 592, 593, 3, 298, 146, 0, 593, 594, 3, 310, 152, 0, 594, 45, 1, 0, 0, 0, 595, 596, 3, 278, 136, 0, 596, 597, 3, 272, 133, 0, 597, 598, 3, 310, 152, 0, 598, 599, 3, 280, 137, 0, 599, 47, 1, 0, 0, 0, 600, 601, 3, 278, 136, 0, 601, 602, 3, 272, 133, 0, 602, 603, 3, 320, 157, 0, 603, 49, 1, 0, 0, 0, 604, 605, 3, 278, 136, 0, 605, 606, 3, 280, 137, 0, 606, 607, 3, 308, 151, 0, 607, 608, 3, 276, 135, 0, 608, 51, 1, 0, 0, 0, 609, 610, 3, 278, 136, 0, 610, 611, 3, 280, 137, 0, 611, 612, 3, 308, 151, 0, 612, 613, 3, 276, 135, 0, 613, 614, 3, 280, 137, 0, 614, 615, 3, 298, 146, 0, 615, 616, 3, 278, 136, 0, 616, 617, 3, 288, 141, 0, 617, 618, 3, 298, 146, 0, 618, 619, 3, 284, 139, 0, 619, 53, 1, 0, 0, 0, 620, 621, 3, 278, 136, 0, 621, 622, 3, 288, 141, 0, 622, 623, 3, 308, 151, 0, 623, 624, 3, 310, 152, 0, 624, 625, 3, 288, 141, 0, 625, 626, 3, 298, 146, 0, 626, 627, 3, 276, 135, 0, 627, 628, 3, 310, 152, 0, 628, 55, 1, 0, 0, 0, 629, 630, 3, 280, 137, 0, 630, 631, 3, 294, 144, 0, 631, 632, 3, 308, 151, 0, 632, 633, 3, 280, 137, 0, 633, 57, 1, 0, 0, 0, 634, 635, 3, 280, 137, 0, 635, 636, 3, 298, 146, 0, 636, 637, 3, 278, 136, 0, 637, 59, 1, 0, 0, 0, 638, 639, 3, 280, 137, 0, 639, 640, 3, 318, 156, 0, 640, 641, 3, 276, 135, 0, 641, 642, 3, 280, 137, 0, 642, 643, 3, 302, 148, 0, 643, 644, 3, 310, 152, 0, 644, 61, 1, 0, 0, 0, 645, 646, 3, 280, 137, 0, 646, 647, 3, 318, 156, 0, 647, 648, 3, 276, 135, 0, 648, 649, 3, 294, 144, 0, 649, 650, 3, 312, 153, 0, 650, 651, 3, 278, 136, 0, 651, 652, 3, 280, 137, 0, 652, 63, 1, 0, 0, 0, 653, 654, 3, 280, 137, 0, 654, 655, 3, 318, 156, 0, 655, 656, 3, 310, 152, 0, 656, 657, 3, 306, 150, 0, 657, 658, 3, 272, 133, 0, 658, 659, 3, 276, 135, 0, 659, 660, 3, 310, 152, 0, 660, 65, 1, 0, 0, 0, 661, 662, 3, 282, 138, 0, 662, 663, 3, 288, 141, 0, 663, 664, 3, 298, 146, 0, 664, 665, 3, 272, 133, 0, 665, 666, 3, 294, 144, 0, 666, 67, 1, 0, 0, 0, 667, 668, 3, 282, 138, 0, 668, 669, 3, 288, 141, 0, 669, 670, 3, 294, 144, 0, 670, 671, 3, 310, 152, 0, 671, 672, 3, 280, 137, 0, 672, 673, 3, 306, 150, 0, 673, 69, 1, 0, 0, 0, 674, 675, 3, 282, 138, 0, 675, 676, 3, 288, 141, 0, 676, 677, 3, 298, 146, 0, 677, 678, 3, 272, 133, 0, 678, 679, 3, 294, 144, 0, 679, 680, 3, 294, 144, 0, 680, 681, 3, 320, 157, 0, 681, 71, 1, 0, 0, 0, 682, 683, 3, 282, 138, 0, 683, 684, 3, 288, 141, 0, 684, 685, 3, 306, 150, 0, 685, 686, 3, 308, 151, 0, 686, 687, 3, 310, 152, 0, 687, 73, 1, 0, 0, 0, 688, 689, 3, 282, 138, 0, 689, 690, 3, 298, 146, 0, 690, 75, 1, 0, 0, 0, 691, 692, 3, 282, 138, 0, 692, 693, 3, 300, 147, 0, 693, 694, 3, 294, 144, 0, 694, 695, 3, 294, 144, 0, 695, 696, 3, 300, 147, 0, 696, 697, 3, 316, 155, 0, 697, 698, 3, 288, 141, 0, 698, 699, 3, 298, 146, 0, 699, 700, 3, 284, 139, 0, 700, 77, 1, 0, 0, 0, 701, 702, 3, 282, 138, 0, 702, 703, 3, 300, 147, 0, 703, 704, 3, 306, 150, 0, 704, 79, 1, 0, 0, 0, 705, 706, 3, 282, 138, 0, 706, 707, 3, 306, 150, 0, 707, 708, 3, 300, 147, 0, 708, 709, 3, 296, 145, 0, 709, 81, 1, 0, 0, 0, 710, 711, 3, 282, 138, 0, 711, 712, 3, 312, 153, 0, 712, 713, 3, 294, 144, 0, 713, 714, 3, 294, 144, 0, 714, 83, 1, 0, 0, 0, 715, 716, 3, 282, 138, 0, 716, 717, 3, 312, 153, 0, 717, 718, 3, 298, 146, 0, 718, 85, 1, 0, 0, 0, 719, 720, 3, 284, 139, 0, 720, 721, 3, 306, 150, 0, 721, 722, 3, 300, 147, 0, 722, 723, 3, 312, 153, 0, 723, 724, 3, 302, 148, 0, 724, 87, 1, 0, 0, 0, 725, 726, 3, 284, 139, 0, 726, 727, 3, 306, 150, 0, 727, 728, 3, 300, 147, 0, 728, 729, 3, 312, 153, 0, 729, 730, 3, 302, 148, 0, 730, 731, 3, 288, 141, 0, 731, 732, 3, 298, 146, 0, 732, 733, 3, 284, 139, 0, 733, 89, 1, 0, 0, 0, 734, 735, 3, 286, 140, 0, 735, 736, 3, 272, 133, 0, 736, 737, 3, 314, 154, 0, 737, 738, 3, 288, 141, 0, 738, 739, 3, 298, 146, 0, 739, 740, 3, 284, 139, 0, 740, 91, 1, 0, 0, 0, 741, 742, 3, 286, 140, 0, 742, 743, 3, 300, 147, 0, 743, 744, 3, 312, 153, 0, 744, 745, 3, 306, 150, 0, 745, 93, 1, 0, 0, 0, 746, 747, 3, 288, 141, 0, 747, 748, 3, 278, 136, 0, 748, 95, 1, 0, 0, 0, 749, 750, 3, 288, 141, 0, 750, 751, 3, 282, 138, 0, 751, 97, 1, 0, 0, 0, 752, 753, 3, 288, 141, 0, 753, 754, 3, 294, 144, 0, 754, 755, 3, 288, 141, 0, 755, 756, 3, 292, 143, 0, 756, 757, 3, 280, 137, 0, 757, 99, 1, 0, 0, 0, 758, 759, 3, 288, 141, 0, 759, 760, 3, 284, 139, 0, 760, 761, 3, 298, 146, 0, 761, 762, 3, 300, 147, 0, 762, 763, 3, 306, 150, 0, 763, 764, 3, 280, 137, 0, 764, 101, 1, 0, 0, 0, 765, 766, 3, 288, 141, 0, 766, 767, 3, 298, 146, 0, 767, 768, 3, 276, 135, 0, 768, 769, 3, 294, 144, 0, 769, 770, 3, 312, 153, 0, 770, 771, 3, 278, 136, 0, 771, 772, 3, 280, 137, 0, 772, 103, 1, 0, 0, 0, 773, 774, 3, 288, 141, 0, 774, 775, 3, 298, 146, 0, 775, 105, 1, 0, 0, 0, 776, 777, 3, 288, 141, 0, 777, 778, 3, 298, 146, 0, 778, 779, 3, 282, 138, 0, 779, 790, 1, 0, 0, 0, 780, 781, 3, 288, 141, 0, 781, 782, 3, 298, 146, 0, 782, 783, 3, 282, 138, 0, 783, 784, 3, 288, 141, 0, 784, 785, 3, 298, 146, 0, 785, 786, 3, 288, 141, 0, 786, 787, 3, 310, 152, 0, 787, 788, 3, 320, 157, 0, 788, 790, 1, 0, 0, 0, 789, 776, 1, 0, 0, 0, 789, 780, 1, 0, 0, 0, 790, 107, 1, 0, 0, 0, 791, 792, 3, 288, 141, 0, 792, 793, 3, 298, 146, 0, 793, 794, 3, 298, 146, 0, 794, 795, 3, 280, 137, 0, 795, 796, 3, 306, 150, 0, 796, 109, 1, 0, 0, 0, 797, 798, 3, 288, 141, 0, 798, 799, 3, 298, 146, 0, 799, 800, 3, 310, 152, 0, 800, 801, 3, 280, 137, 0, 801, 802, 3, 306, 150, 0, 802, 803, 3, 308, 151, 0, 803, 804, 3, 280, 137, 0, 804, 805, 3, 276, 135, 0, 805, 806, 3, 310, 152, 0, 806, 111, 1, 0, 0, 0, 807, 808, 3, 288, 141, 0, 808, 809, 3, 298, 146, 0, 809, 810, 3, 310, 152, 0, 810, 811, 3, 280, 137, 0, 811, 812, 3, 306, 150, 0, 812, 813, 3, 314, 154, 0, 813, 814, 3, 272, 133, 0, 814, 815, 3, 294, 144, 0, 815, 113, 1, 0, 0, 0, 816, 817, 3, 288, 141, 0, 817, 818, 3, 308, 151, 0, 818, 115, 1, 0, 0, 0, 819, 820, 3, 290, 142, 0, 820, 821, 3, 300, 147, 0, 821, 822, 3, 288, 141, 0, 822, 823, 3, 298, 146, 0, 823, 117, 1, 0, 0, 0, 824, 825, 3, 292, 143, 0, 825, 826, 3, 280, 137, 0, 826, 827, 3, 320, 157, 0, 827, 119, 1, 0, 0, 0, 828, 829, 3, 294, 144, 0, 829, 830, 3, 272, 133, 0, 830, 831, 3, 296, 145, 0, 831, 832, 3, 274, 134, 0, 832, 833, 3, 278, 136, 0, 833, 834, 3, 272, 133, 0, 834, 121, 1, 0, 0, 0, 835, 836, 3, 294, 144, 0, 836, 837, 3, 272, 133, 0, 837, 838, 3, 308, 151, 0, 838, 839, 3, 310, 152, 0, 839, 123, 1, 0, 0, 0, 840, 841, 3, 294, 144, 0, 841, 842, 3, 280, 137, 0, 842, 843, 3, 272, 133, 0, 843, 844, 3, 278, 136, 0, 844, 845, 3, 288, 141, 0, 845, 846, 3, 298, 146, 0, 846, 847, 3, 284, 139, 0, 847, 125, 1, 0, 0, 0, 848, 849, 3, 294, 144, 0, 849, 850, 3, 280, 137, 0, 850, 851, 3, 282, 138, 0, 851, 852, 3, 310, 152, 0, 852, 127, 1, 0, 0, 0, 853, 854, 3, 294, 144, 0, 854, 855, 3, 280, 137, 0, 855, 856, 3, 310, 152, 0, 856, 129, 1, 0, 0, 0, 857, 858, 3, 294, 144, 0, 858, 859, 3, 288, 141, 0, 859, 860, 3, 292, 143, 0, 860, 861, 3, 280, 137, 0, 861, 131, 1, 0, 0, 0, 862, 863, 3, 294, 144, 0, 863, 864, 3, 288, 141, 0, 864, 865, 3, 296, 145, 0, 865, 866, 3, 288, 141, 0, 866, 867, 3, 310, 152, 0, 867, 133, 1, 0, 0, 0, 868, 869, 3, 296, 145, 0, 869, 870, 3, 272, 133, 0, 870, 871, 3, 310, 152, 0, 871, 872, 3, 280, 137, 0, 872, 873, 3, 306, 150, 0, 873, 874, 3, 288, 141, 0, 874, 875, 3, 272, 133, 0, 875, 876, 3, 294, 144, 0, 876, 877, 3, 288, 141, 0, 877, 878, 3, 322, 158, 0, 878, 879, 3, 280, 137, 0, 879, 880, 3, 278, 136, 0, 880, 135, 1, 0, 0, 0, 881, 882, 3, 296, 145, 0, 882, 883, 3, 288, 141, 0, 883, 884, 3, 298, 146, 0, 884, 885, 3, 312, 153, 0, 885, 886, 3, 310, 152, 0, 886, 887, 3, 280, 137, 0, 887, 137, 1, 0, 0, 0, 888, 889, 3, 296, 145, 0, 889, 890, 3, 300, 147, 0, 890, 891, 3, 298, 146, 0, 891, 892, 3, 310, 152, 0, 892, 893, 3, 286, 140, 0, 893, 139, 1, 0, 0, 0, 894, 895, 3, 298, 146, 0, 895, 896, 3, 272, 133, 0, 896, 897, 3, 296, 145, 0, 897, 898, 3, 280, 137, 0, 898, 141, 1, 0, 0, 0, 899, 900, 3, 298, 146, 0, 900, 901, 3, 272, 133, 0, 901, 902, 3, 310, 152, 0, 902, 903, 3, 312, 153, 0, 903, 904, 3, 306, 150, 0, 904, 905, 3, 272, 133, 0, 905, 906, 3, 294, 144, 0, 906, 143, 1, 0, 0, 0, 907, 908, 3, 298, 146, 0, 908, 909, 3, 272, 133, 0, 909, 910, 3, 298, 146, 0, 910, 145, 1, 0, 0, 0, 911, 912, 3, 298, 146, 0, 912, 913, 3, 300, 147, 0, 913, 914, 3, 310, 152, 0, 914, 147, 1, 0, 0, 0, 915, 916, 3, 298, 146, 0, 916, 917, 3, 312, 153, 0, 917, 918, 3, 294, 144, 0, 918, 919, 3, 294, 144, 0, 919, 149, 1, 0, 0, 0, 920, 921, 3, 298, 146, 0, 921, 922, 3, 312, 153, 0, 922, 923, 3, 294, 144, 0, 923, 924, 3, 294, 144, 0, 924, 925, 3, 308, 151, 0, 925, 151, 1, 0, 0, 0, 926, 927, 3, 300, 147, 0, 927, 928, 3, 282, 138, 0, 928, 929, 3, 282, 138, 0, 929, 930, 3, 308, 151, 0, 930, 931, 3, 280, 137, 0, 931, 932, 3, 310, 152, 0, 932, 153, 1, 0, 0, 0, 933, 934, 3, 300, 147, 0, 934, 935, 3, 298, 146, 0, 935, 155, 1, 0, 0, 0, 936, 937, 3, 300, 147, 0, 937, 938, 3, 306, 150, 0, 938, 157, 1, 0, 0, 0, 939, 940, 3, 300, 147, 0, 940, 941, 3, 306, 150, 0, 941, 942, 3, 278, 136, 0, 942, 943, 3, 280, 137, 0, 943, 944, 3, 306, 150, 0, 944, 159, 1, 0, 0, 0, 945, 946, 3, 300, 147, 0, 946, 947, 3, 312, 153, 0, 947, 948, 3, 310, 152, 0, 948, 949, 3, 280, 137, 0, 949, 950, 3, 306, 150, 0, 950, 161, 1, 0, 0, 0, 951, 952, 3, 300, 147, 0, 952, 953, 3, 314, 154, 0, 953, 954, 3, 280, 137, 0, 954, 955, 3, 306, 150, 0, 955, 163, 1, 0, 0, 0, 956, 957, 3, 302, 148, 0, 957, 958, 3, 272, 133, 0, 958, 959, 3, 306, 150, 0, 959, 960, 3, 310, 152, 0, 960, 961, 3, 288, 141, 0, 961, 962, 3, 310, 152, 0, 962, 963, 3, 288, 141, 0, 963, 964, 3, 300, 147, 0, 964, 965, 3, 298, 146, 0, 965, 165, 1, 0, 0, 0, 966, 967, 3, 302, 148, 0, 967, 968, 3, 288, 141, 0, 968, 969, 3, 314, 154, 0, 969, 970, 3, 300, 147, 0, 970, 971, 3, 310, 152, 0, 971, 167, 1, 0, 0, 0, 972, 973, 3, 302, 148, 0, 973, 974, 3, 300, 147, 0, 974, 975, 3, 308, 151, 0, 975, 976, 3, 288, 141, 0, 976, 977, 3, 310, 152, 0, 977, 978, 3, 288, 141, 0, 978, 979, 3, 300, 147, 0, 979, 980, 3, 298, 146, 0, 980, 981, 3, 272, 133, 0, 981, 982, 3, 294, 144, 0, 982, 169, 1, 0, 0, 0, 983, 984, 3, 302, 148, 0, 984, 985, 3, 306, 150, 0, 985, 986, 3, 280, 137, 0, 986, 987, 3, 276, 135, 0, 987, 988, 3, 280, 137, 0, 988, 989, 3, 278, 136, 0, 989, 990, 3, 288, 141, 0, 990, 991, 3, 298, 146, 0, 991, 992, 3, 284, 139, 0, 992, 171, 1, 0, 0, 0, 993, 994, 3, 302, 148, 0, 994, 995, 3, 306, 150, 0, 995, 996, 3, 280, 137, 0, 996, 997, 3, 316, 155, 0, 997, 998, 3, 286, 140, 0, 998, 999, 3, 280, 137, 0, 999, 1000, 3, 306, 150, 0, 1000, 1001, 3, 280, 137, 0, 1001, 173, 1, 0, 0, 0, 1002, 1003, 3, 304, 149, 0, 1003, 1004, 3, 312, 153, 0, 1004, 1005, 3, 272, 133, 0, 1005, 1006, 3, 294, 144, 0, 1006, 1007, 3, 288, 141, 0, 1007, 1008, 3, 282, 138, 0, 1008, 1009, 3, 320, 157, 0, 1009, 175, 1, 0, 0, 0, 1010, 1011, 3, 304, 149, 0, 1011, 1012, 3, 312, 153, 0, 1012, 1013, 3, 272, 133, 0, 1013, 1014, 3, 306, 150, 0, 1014, 1015, 3, 310, 152, 0, 1015, 1016, 3, 280, 137, 0, 1016, 1017, 3, 306, 150, 0, 1017, 177, 1, 0, 0, 0, 1018, 1019, 3, 306, 150, 0, 1019, 1020, 3, 272, 133, 0, 1020, 1021, 3, 298, 146, 0, 1021, 1022, 3, 284, 139, 0, 1022, 1023, 3, 280, 137, 0, 1023, 179, 1, 0, 0, 0, 1024, 1025, 3, 306, 150, 0, 1025, 1026, 3, 280, 137, 0, 1026, 1027, 3, 276, 135, 0, 1027, 1028, 3, 312, 153, 0, 1028, 1029, 3, 306, 150, 0, 1029, 1030, 3, 308, 151, 0, 1030, 1031, 3, 288, 141, 0, 1031, 1032, 3, 314, 154, 0, 1032, 1033, 3, 280, 137, 0, 1033, 181, 1, 0, 0, 0, 1034, 1035, 3, 306, 150, 0, 1035, 1036, 3, 280, 137, 0, 1036, 1037, 3, 302, 148, 0, 1037, 1038, 3, 294, 144, 0, 1038, 1039, 3, 272, 133, 0, 1039, 1040, 3, 276, 135, 0, 1040, 1041, 3, 280, 137, 0, 1041, 183, 1, 0, 0, 0, 1042, 1043, 3, 306, 150, 0, 1043, 1044, 3, 280, 137, 0, 1044, 1045, 3, 310, 152, 0, 1045, 1046, 3, 312, 153, 0, 1046, 1047, 3, 306, 150, 0, 1047, 1048, 3, 298, 146, 0, 1048, 185, 1, 0, 0, 0, 1049, 1050, 3, 306, 150, 0, 1050, 1051, 3, 288, 141, 0, 1051, 1052, 3, 284, 139, 0, 1052, 1053, 3, 286, 140, 0, 1053, 1054, 3, 310, 152, 0, 1054, 187, 1, 0, 0, 0, 1055, 1056, 3, 306, 150, 0, 1056, 1057, 3, 300, 147, 0, 1057, 1058, 3, 294, 144, 0, 1058, 1059, 3, 294, 144, 0, 1059, 1060, 3, 312, 153, 0, 1060, 1061, 3, 302, 148, 0, 1061, 189, 1, 0, 0, 0, 1062, 1063, 3, 306, 150, 0, 1063, 1064, 3, 300, 147, 0, 1064, 1065, 3, 316, 155, 0, 1065, 191, 1, 0, 0, 0, 1066, 1067, 3, 306, 150, 0, 1067, 1068, 3, 300, 147, 0, 1068, 1069, 3, 316, 155, 0, 1069, 1070, 3, 308, 151, 0, 1070, 193, 1, 0, 0, 0, 1071, 1072, 3, 308, 151, 0, 1072, 1073, 3, 272, 133, 0, 1073, 1074, 3, 296, 145, 0, 1074, 1075, 3, 302, 148, 0, 1075, 1076, 3, 294, 144, 0, 1076, 1077, 3, 280, 137, 0, 1077, 195, 1, 0, 0, 0, 1078, 1079, 3, 308, 151, 0, 1079, 1080, 3, 280, 137, 0, 1080, 1081, 3, 276, 135, 0, 1081, 1082, 3, 300, 147, 0, 1082, 1083, 3, 298, 146, 0, 1083, 1084, 3, 278, 136, 0, 1084, 197, 1, 0, 0, 0, 1085, 1086, 3, 308, 151, 0, 1086, 1087, 3, 280, 137, 0, 1087, 1088, 3, 294, 144, 0, 1088, 1089, 3, 280, 137, 0, 1089, 1090, 3, 276, 135, 0, 1090, 1091, 3, 310, 152, 0, 1091, 199, 1, 0, 0, 0, 1092, 1093, 3, 308, 151, 0, 1093, 1094, 3, 280, 137, 0, 1094, 1095, 3, 296, 145, 0, 1095, 1096, 3, 288, 141, 0, 1096, 201, 1, 0, 0, 0, 1097, 1098, 3, 308, 151, 0, 1098, 1099, 3, 280, 137, 0, 1099, 1100, 3, 310, 152, 0, 1100, 1101, 3, 308, 151, 0, 1101, 203, 1, 0, 0, 0, 1102, 1103, 3, 308, 151, 0, 1103, 1104, 3, 280, 137, 0, 1104, 1105, 3, 310, 152, 0, 1105, 1106, 3, 310, 152, 0, 1106, 1107, 3, 288, 141, 0, 1107, 1108, 3, 298, 146, 0, 1108, 1109, 3, 284, 139, 0, 1109, 1110, 3, 308, 151, 0, 1110, 205, 1, 0, 0, 0, 1111, 1112, 3, 308, 151, 0, 1112, 1113, 3, 312, 153, 0, 1113, 1114, 3, 274, 134, 0, 1114, 1115, 3, 308, 151, 0, 1115, 1116, 3, 310, 152, 0, 1116, 1117, 3, 306, 150, 0, 1117, 1118, 3, 288, 141, 0, 1118, 1119, 3, 298, 146, 0, 1119, 1120, 3, 284, 139, 0, 1120, 207, 1, 0, 0, 0, 1121, 1122, 3, 310, 152, 0, 1122, 1123, 3, 286, 140, 0, 1123, 1124, 3, 280, 137, 0, 1124, 1125, 3, 298, 146, 0, 1125, 209, 1, 0, 0, 0, 1126, 1127, 3, 310, 152, 0, 1127, 1128, 3, 286, 140, 0, 1128, 1129, 3, 306, 150, 0, 1129, 1130, 3, 300, 147, 0, 1130, 1131, 3, 316, 155, 0, 1131, 211, 1, 0, 0, 0, 1132, 1133, 3, 310, 152, 0, 1133, 1134, 3, 288, 141, 0, 1134, 1135, 3, 280, 137, 0, 1135, 1136, 3, 308, 151, 0, 1136, 213, 1, 0, 0, 0, 1137, 1138, 3, 310, 152, 0, 1138, 1139, 3, 288, 141, 0, 1139, 1140, 3, 296, 145, 0, 1140, 1141, 3, 280, 137, 0, 1141, 1142, 3, 308, 151, 0, 1142, 1143, 3, 310, 152, 0, 1143, 1144, 3, 272, 133, 0, 1144, 1145, 3, 296, 145, 0, 1145, 1146, 3, 302, 148, 0, 1146, 215, 1, 0, 0, 0, 1147, 1148, 3, 310, 152, 0, 1148, 1149, 3, 300, 147, 0, 1149, 217, 1, 0, 0, 0, 1150, 1151, 3, 310, 152, 0, 1151, 1152, 3, 300, 147, 0, 1152, 1153, 3, 302, 148, 0, 1153, 219, 1, 0, 0, 0, 1154, 1155, 3, 310, 152, 0, 1155, 1156, 3, 300, 147, 0, 1156, 1157, 3, 310, 152, 0, 1157, 1158, 3, 272, 133, 0, 1158, 1159, 3, 294, 144, 0, 1159, 1160, 3, 308, 151, 0, 1160, 221, 1, 0, 0, 0, 1161, 1162, 3, 310, 152, 0, 1162, 1163, 3, 306, 150, 0, 1163, 1164, 3, 272, 133, 0, 1164, 1165, 3, 288, 141, 0, 1165, 1166, 3, 294, 144, 0, 1166, 1167, 3, 288, 141, 0, 1167, 1168, 3, 298, 146, 0, 1168, 1169, 3, 284, 139, 0, 1169, 223, 1, 0, 0, 0, 1170, 1171, 3, 310, 152, 0, 1171, 1172, 3, 306, 150, 0, 1172, 1173, 3, 288, 141, 0, 1173, 1174, 3, 296, 145, 0, 1174, 225, 1, 0, 0, 0, 1175, 1176, 3, 310, 152, 0, 1176, 1177, 3, 306, 150, 0, 1177, 1178, 3, 312, 153, 0, 1178, 1179, 3, 298, 146, 0, 1179, 1180, 3, 276, 135, 0, 1180, 1181, 3, 272, 133, 0, 1181, 1182, 3, 310, 152, 0, 1182, 1183, 3, 280, 137, 0, 1183, 227, 1, 0, 0, 0, 1184, 1185, 3, 310, 152, 0, 1185, 1186, 3, 306, 150, 0, 1186, 1187, 3, 320, 157, 0, 1187, 229, 1, 0, 0, 0, 1188, 1189, 3, 310, 152, 0, 1189, 1190, 3, 306, 150, 0, 1190, 1191, 3, 320, 157, 0, 1191, 1192, 5, 95, 0, 0, 1192, 1193, 3, 276, 135, 0, 1193, 1194, 3, 272, 133, 0, 1194, 1195, 3, 308, 151, 0, 1195, 1196, 3, 310, 152, 0, 1196, 231, 1, 0, 0, 0, 1197, 1198, 3, 312, 153, 0, 1198, 1199, 3, 298, 146, 0, 1199, 1200, 3, 274, 134, 0, 1200, 1201, 3, 300, 147, 0, 1201, 1202, 3, 312, 153, 0, 1202, 1203, 3, 298, 146, 0, 1203, 1204, 3, 278, 136, 0, 1204, 1205, 3, 280, 137, 0, 1205, 1206, 3, 278, 136, 0, 1206, 233, 1, 0, 0, 0, 1207, 1208, 3, 312, 153, 0, 1208, 1209, 3, 298, 146, 0, 1209, 1210, 3, 288, 141, 0, 1210, 1211, 3, 300, 147, 0, 1211, 1212, 3, 298, 146, 0, 1212, 235, 1, 0, 0, 0, 1213, 1214, 3, 312, 153, 0, 1214, 1215, 3, 298, 146, 0, 1215, 1216, 3, 302, 148, 0, 1216, 1217, 3, 288, 141, 0, 1217, 1218, 3, 314, 154, 0, 1218, 1219, 3, 300, 147, 0, 1219, 1220, 3, 310, 152, 0, 1220, 237, 1, 0, 0, 0, 1221, 1222, 3, 312, 153, 0, 1222, 1223, 3, 308, 151, 0, 1223, 1224, 3, 288, 141, 0, 1224, 1225, 3, 298, 146, 0, 1225, 1226, 3, 284, 139, 0, 1226, 239, 1, 0, 0, 0, 1227, 1228, 3, 314, 154, 0, 1228, 1229, 3, 272, 133, 0, 1229, 1230, 3, 294, 144, 0, 1230, 1231, 3, 312, 153, 0, 1231, 1232, 3, 280, 137, 0, 1232, 1233, 3, 308, 151, 0, 1233, 241, 1, 0, 0, 0, 1234, 1235, 3, 316, 155, 0, 1235, 1236, 3, 280, 137, 0, 1236, 1237, 3, 280, 137, 0, 1237, 1238, 3, 292, 143, 0, 1238, 243, 1, 0, 0, 0, 1239, 1240, 3, 316, 155, 0, 1240, 1241, 3, 286, 140, 0, 1241, 1242, 3, 280, 137, 0, 1242, 1243, 3, 298, 146, 0, 1243, 245, 1, 0, 0, 0, 1244, 1245, 3, 316, 155, 0, 1245, 1246, 3, 286, 140, 0, 1246, 1247, 3, 280, 137, 0, 1247, 1248, 3, 306, 150, 0, 1248, 1249, 3, 280, 137, 0, 1249, 247, 1, 0, 0, 0, 1250, 1251, 3, 316, 155, 0, 1251, 1252, 3, 286, 140, 0, 1252, 1253, 3, 288, 141, 0, 1253, 1254, 3, 294, 144, 0, 1254, 1255, 3, 280, 137, 0, 1255, 249, 1, 0, 0, 0, 1256, 1257, 3, 316, 155, 0, 1257, 1258, 3, 288, 141, 0, 1258, 1259, 3, 298, 146, 0, 1259, 1260, 3, 278, 136, 0, 1260, 1261, 3, 300, 147, 0, 1261, 1262, 3, 316, 155, 0, 1262, 251, 1, 0, 0, 0, 1263, 1264, 3, 316, 155, 0, 1264, 1265, 3, 288, 141, 0, 1265, 1266, 3, 310, 152, 0, 1266, 1267, 3, 286, 140, 0, 1267, 253, 1, 0, 0, 0, 1268, 1269, 3, 316, 155, 0, 1269, 1270, 3, 288, 141, 0, 1270, 1271, 3, 310, 152, 0, 1271, 1272, 3, 286, 140, 0, 1272, 1273, 3, 288, 141, 0, 1273, 1274, 3, 298, 146, 0, 1274, 255, 1, 0, 0, 0, 1275, 1276, 3, 320, 157, 0, 1276, 1277, 3, 280, 137, 0, 1277, 1278, 3, 272, 133, 0, 1278, 1279, 3, 306, 150, 0, 1279, 1286, 1, 0, 0, 0, 1280, 1281, 3, 320, 157, 0, 1281, 1282, 3, 320, 157, 0, 1282, 1283, 3, 320, 157, 0, 1283, 1284, 3, 320, 157, 0, 1284, 1286, 1, 0, 0, 0, 1285, 1275, 1, 0, 0, 0, 1285, 1280, 1, 0, 0, 0, 1286, 257, 1, 0, 0, 0, 1287, 1288, 3, 338, 166, 0, 1288, 1289, 3, 274, 134, 0, 1289, 1320, 1, 0, 0, 0, 1290, 1291, 3, 338, 166, 0, 1291, 1292, 3, 282, 138, 0, 1292, 1320, 1, 0, 0, 0, 1293, 1294, 3, 338, 166, 0, 1294, 1295, 3, 306, 150, 0, 1295, 1320, 1, 0, 0, 0, 1296, 1297, 3, 338, 166, 0, 1297, 1298, 3, 298, 146, 0, 1298, 1320, 1, 0, 0, 0, 1299, 1300, 3, 338, 166, 0, 1300, 1301, 3, 310, 152, 0, 1301, 1320, 1, 0, 0, 0, 1302, 1303, 3, 338, 166, 0, 1303, 1304, 5, 48, 0, 0, 1304, 1320, 1, 0, 0, 0, 1305, 1306, 3, 338, 166, 0, 1306, 1307, 3, 272, 133, 0, 1307, 1320, 1, 0, 0, 0, 1308, 1309, 3, 338, 166, 0, 1309, 1310, 3, 314, 154, 0, 1310, 1320, 1, 0, 0, 0, 1311, 1312, 3, 338, 166, 0, 1312, 1313, 3, 338, 166, 0, 1313, 1320, 1, 0, 0, 0, 1314, 1315, 3, 338, 166, 0, 1315, 1316, 3, 318, 156, 0, 1316, 1317, 3, 330, 162, 0, 1317, 1318, 3, 330, 162, 0, 1318, 1320, 1, 0, 0, 0, 1319, 1287, 1, 0, 0, 0, 1319, 1290, 1, 0, 0, 0, 1319, 1293, 1, 0, 0, 0, 1319, 1296, 1, 0, 0, 0, 1319, 1299, 1, 0, 0, 0, 1319, 1302, 1, 0, 0, 0, 1319, 1305, 1, 0, 0, 0, 1319, 1308, 1, 0, 0, 0, 1319, 1311, 1, 0, 0, 0, 1319, 1314, 1, 0, 0, 0, 1320, 259, 1, 0, 0, 0, 1321, 1325, 3, 324, 159, 0, 1322, 1325, 3, 426, 210, 0, 1323, 1325, 3, 352, 173, 0, 1324, 1321, 1, 0, 0, 0, 1324, 1322, 1, 0, 0, 0, 1324, 1323, 1, 0, 0, 0, 1325, 1332, 1, 0, 0, 0, 1326, 1331, 3, 324, 159, 0, 1327, 1331, 3, 426, 210, 0, 1328, 1331, 3, 328, 161, 0, 1329, 1331, 3, 352, 173, 0, 1330, 1326, 1, 0, 0, 0, 1330, 1327, 1, 0, 0, 0, 1330, 1328, 1, 0, 0, 0, 1330, 1329, 1, 0, 0, 0, 1331, 1334, 1, 0, 0, 0, 1332, 1330, 1, 0, 0, 0, 1332, 1333, 1, 0, 0, 0, 1333, 1368, 1, 0, 0, 0, 1334, 1332, 1, 0, 0, 0, 1335, 1346, 3, 336, 165, 0, 1336, 1345, 8, 0, 0, 0, 1337, 1345, 3, 258, 126, 0, 1338, 1339, 3, 338, 166, 0, 1339, 1340, 3, 408, 201, 0, 1340, 1345, 1, 0, 0, 0, 1341, 1342, 3, 336, 165, 0, 1342, 1343, 3, 336, 165, 0, 1343, 1345, 1, 0, 0, 0, 1344, 1336, 1, 0, 0, 0, 1344, 1337, 1, 0, 0, 0, 1344, 1338, 1, 0, 0, 0, 1344, 1341, 1, 0, 0, 0, 1345, 1348, 1, 0, 0, 0, 1346, 1344, 1, 0, 0, 0, 1346, 1347, 1, 0, 0, 0, 1347, 1349, 1, 0, 0, 0, 1348, 1346, 1, 0, 0, 0, 1349, 1350, 3, 336, 165, 0, 1350, 1368, 1, 0, 0, 0, 1351, 1362, 3, 402, 198, 0, 1352, 1361, 8, 1, 0, 0, 1353, 1361, 3, 258, 126, 0, 1354, 1355, 3, 338, 166, 0, 1355, 1356, 3, 402, 198, 0, 1356, 1361, 1, 0, 0, 0, 1357, 1358, 3, 402, 198, 0, 1358, 1359, 3, 402, 198, 0, 1359, 1361, 1, 0, 0, 0, 1360, 1352, 1, 0, 0, 0, 1360, 1353, 1, 0, 0, 0, 1360, 1354, 1, 0, 0, 0, 1360, 1357, 1, 0, 0, 0, 1361, 1364, 1, 0, 0, 0, 1362, 1360, 1, 0, 0, 0, 1362, 1363, 1, 0, 0, 0, 1363, 1365, 1, 0, 0, 0, 1364, 1362, 1, 0, 0, 0, 1365, 1366, 3, 402, 198, 0, 1366, 1368, 1, 0, 0, 0, 1367, 1324, 1, 0, 0, 0, 1367, 1335, 1, 0, 0, 0, 1367, 1351, 1, 0, 0, 0, 1368, 261, 1, 0, 0, 0, 1369, 1370, 3, 268, 131, 0, 1370, 1374, 3, 354, 174, 0, 1371, 1373, 3, 330, 162, 0, 1372, 1371, 1, 0, 0, 0, 1373, 1376, 1, 0, 0, 0, 1374, 1372, 1, 0, 0, 0, 1374, 1375, 1, 0, 0, 0, 1375, 1379, 1, 0, 0, 0, 1376, 1374, 1, 0, 0, 0, 1377, 1380, 3, 302, 148, 0, 1378, 1380, 3, 280, 137, 0, 1379, 1377, 1, 0, 0, 0, 1379, 1378, 1, 0, 0, 0, 1380, 1383, 1, 0, 0, 0, 1381, 1384, 3, 398, 196, 0, 1382, 1384, 3, 350, 172, 0, 1383, 1381, 1, 0, 0, 0, 1383, 1382, 1, 0, 0, 0, 1383, 1384, 1, 0, 0, 0, 1384, 1386, 1, 0, 0, 0, 1385, 1387, 3, 328, 161, 0, 1386, 1385, 1, 0, 0, 0, 1387, 1388, 1, 0, 0, 0, 1388, 1386, 1, 0, 0, 0, 1388, 1389, 1, 0, 0, 0, 1389, 1446, 1, 0, 0, 0, 1390, 1393, 3, 268, 131, 0, 1391, 1394, 3, 302, 148, 0, 1392, 1394, 3, 280, 137, 0, 1393, 1391, 1, 0, 0, 0, 1393, 1392, 1, 0, 0, 0, 1394, 1397, 1, 0, 0, 0, 1395, 1398, 3, 398, 196, 0, 1396, 1398, 3, 350, 172, 0, 1397, 1395, 1, 0, 0, 0, 1397, 1396, 1, 0, 0, 0, 1397, 1398, 1, 0, 0, 0, 1398, 1400, 1, 0, 0, 0, 1399, 1401, 3, 328, 161, 0, 1400, 1399, 1, 0, 0, 0, 1401, 1402, 1, 0, 0, 0, 1402, 1400, 1, 0, 0, 0, 1402, 1403, 1, 0, 0, 0, 1403, 1446, 1, 0, 0, 0, 1404, 1405, 3, 266, 130, 0, 1405, 1409, 3, 354, 174, 0, 1406, 1408, 3, 328, 161, 0, 1407, 1406, 1, 0, 0, 0, 1408, 1411, 1, 0, 0, 0, 1409, 1407, 1, 0, 0, 0, 1409, 1410, 1, 0, 0, 0, 1410, 1412, 1, 0, 0, 0, 1411, 1409, 1, 0, 0, 0, 1412, 1415, 3, 280, 137, 0, 1413, 1416, 3, 398, 196, 0, 1414, 1416, 3, 350, 172, 0, 1415, 1413, 1, 0, 0, 0, 1415, 1414, 1, 0, 0, 0, 1415, 1416, 1, 0, 0, 0, 1416, 1418, 1, 0, 0, 0, 1417, 1419, 3, 328, 161, 0, 1418, 1417, 1, 0, 0, 0, 1419, 1420, 1, 0, 0, 0, 1420, 1418, 1, 0, 0, 0, 1420, 1421, 1, 0, 0, 0, 1421, 1446, 1, 0, 0, 0, 1422, 1423, 3, 354, 174, 0, 1423, 1424, 3, 266, 130, 0, 1424, 1427, 3, 280, 137, 0, 1425, 1428, 3, 398, 196, 0, 1426, 1428, 3, 350, 172, 0, 1427, 1425, 1, 0, 0, 0, 1427, 1426, 1, 0, 0, 0, 1427, 1428, 1, 0, 0, 0, 1428, 1430, 1, 0, 0, 0, 1429, 1431, 3, 328, 161, 0, 1430, 1429, 1, 0, 0, 0, 1431, 1432, 1, 0, 0, 0, 1432, 1430, 1, 0, 0, 0, 1432, 1433, 1, 0, 0, 0, 1433, 1446, 1, 0, 0, 0, 1434, 1435, 3, 266, 130, 0, 1435, 1438, 3, 280, 137, 0, 1436, 1439, 3, 398, 196, 0, 1437, 1439, 3, 350, 172, 0, 1438, 1436, 1, 0, 0, 0, 1438, 1437, 1, 0, 0, 0, 1438, 1439, 1, 0, 0, 0, 1439, 1441, 1, 0, 0, 0, 1440, 1442, 3, 328, 161, 0, 1441, 1440, 1, 0, 0, 0, 1442, 1443, 1, 0, 0, 0, 1443, 1441, 1, 0, 0, 0, 1443, 1444, 1, 0, 0, 0, 1444, 1446, 1, 0, 0, 0, 1445, 1369, 1, 0, 0, 0, 1445, 1390, 1, 0, 0, 0, 1445, 1404, 1, 0, 0, 0, 1445, 1422, 1, 0, 0, 0, 1445, 1434, 1, 0, 0, 0, 1446, 263, 1, 0, 0, 0, 1447, 1449, 5, 48, 0, 0, 1448, 1450, 3, 326, 160, 0, 1449, 1448, 1, 0, 0, 0, 1450, 1451, 1, 0, 0, 0, 1451, 1449, 1, 0, 0, 0, 1451, 1452, 1, 0, 0, 0, 1452, 265, 1, 0, 0, 0, 1453, 1455, 3, 328, 161, 0, 1454, 1453, 1, 0, 0, 0, 1455, 1456, 1, 0, 0, 0, 1456, 1454, 1, 0, 0, 0, 1456, 1457, 1, 0, 0, 0, 1457, 267, 1, 0, 0, 0, 1458, 1459, 5, 48, 0, 0, 1459, 1461, 3, 318, 156, 0, 1460, 1462, 3, 330, 162, 0, 1461, 1460, 1, 0, 0, 0, 1462, 1463, 1, 0, 0, 0, 1463, 1461, 1, 0, 0, 0, 1463, 1464, 1, 0, 0, 0, 1464, 269, 1, 0, 0, 0, 1465, 1476, 3, 408, 201, 0, 1466, 1475, 8, 2, 0, 0, 1467, 1475, 3, 258, 126, 0, 1468, 1469, 3, 338, 166, 0, 1469, 1470, 3, 408, 201, 0, 1470, 1475, 1, 0, 0, 0, 1471, 1472, 3, 408, 201, 0, 1472, 1473, 3, 408, 201, 0, 1473, 1475, 1, 0, 0, 0, 1474, 1466, 1, 0, 0, 0, 1474, 1467, 1, 0, 0, 0, 1474, 1468, 1, 0, 0, 0, 1474, 1471, 1, 0, 0, 0, 1475, 1478, 1, 0, 0, 0, 1476, 1474, 1, 0, 0, 0, 1476, 1477, 1, 0, 0, 0, 1477, 1479, 1, 0, 0, 0, 1478, 1476, 1, 0, 0, 0, 1479, 1480, 3, 408, 201, 0, 1480, 271, 1, 0, 0, 0, 1481, 1482, 7, 3, 0, 0, 1482, 273, 1, 0, 0, 0, 1483, 1484, 7, 4, 0, 0, 1484, 275, 1, 0, 0, 0, 1485, 1486, 7, 5, 0, 0, 1486, 277, 1, 0, 0, 0, 1487, 1488, 7, 6, 0, 0, 1488, 279, 1, 0, 0, 0, 1489, 1490, 7, 7, 0, 0, 1490, 281, 1, 0, 0, 0, 1491, 1492, 7, 8, 0, 0, 1492, 283, 1, 0, 0, 0, 1493, 1494, 7, 9, 0, 0, 1494, 285, 1, 0, 0, 0, 1495, 1496, 7, 10, 0, 0, 1496, 287, 1, 0, 0, 0, 1497, 1498, 7, 11, 0, 0, 1498, 289, 1, 0, 0, 0, 1499, 1500, 7, 12, 0, 0, 1500, 291, 1, 0, 0, 0, 1501, 1502, 7, 13, 0, 0, 1502, 293, 1, 0, 0, 0, 1503, 1504, 7, 14, 0, 0, 1504, 295, 1, 0, 0, 0, 1505, 1506, 7, 15, 0, 0, 1506, 297, 1, 0, 0, 0, 1507, 1508, 7, 16, 0, 0, 1508, 299, 1, 0, 0, 0, 1509, 1510, 7, 17, 0, 0, 1510, 301, 1, 0, 0, 0, 1511, 1512, 7, 18, 0, 0, 1512, 303, 1, 0, 0, 0, 1513, 1514, 7, 19, 0, 0, 1514, 305, 1, 0, 0, 0, 1515, 1516, 7, 20, 0, 0, 1516, 307, 1, 0, 0, 0, 1517, 1518, 7, 21, 0, 0, 1518, 309, 1, 0, 0, 0, 1519, 1520, 7, 22, 0, 0, 1520, 311, 1, 0, 0, 0, 1521, 1522, 7, 23, 0, 0, 1522, 313, 1, 0, 0, 0, 1523, 1524, 7, 24, 0, 0, 1524, 315, 1, 0, 0, 0, 1525, 1526, 7, 25, 0, 0, 1526, 317, 1, 0, 0, 0, 1527, 1528, 7, 26, 0, 0, 1528, 319, 1, 0, 0, 0, 1529, 1530, 7, 27, 0, 0, 1530, 321, 1, 0, 0, 0, 1531, 1532, 7, 28, 0, 0, 1532, 323, 1, 0, 0, 0, 1533, 1534, 7, 29, 0, 0, 1534, 325, 1, 0, 0, 0, 1535, 1536, 7, 30, 0, 0, 1536, 327, 1, 0, 0, 0, 1537, 1538, 7, 31, 0, 0, 1538, 329, 1, 0, 0, 0, 1539, 1540, 7, 32, 0, 0, 1540, 331, 1, 0, 0, 0, 1541, 1542, 5, 45, 0, 0, 1542, 1543, 5, 62, 0, 0, 1543, 333, 1, 0, 0, 0, 1544, 1545, 5, 42, 0, 0, 1545, 335, 1, 0, 0, 0, 1546, 1547, 5, 96, 0, 0, 1547, 337, 1, 0, 0, 0, 1548, 1549, 5, 92, 0, 0, 1549, 339, 1, 0, 0, 0, 1550, 1551, 5, 58, 0, 0, 1551, 1552, 5, 58, 0, 0, 1552, 341, 1, 0, 0, 0, 1553, 1554, 5, 58, 0, 0, 1554, 1555, 5, 61, 0, 0, 1555, 343, 1, 0, 0, 0, 1556, 1557, 5, 58, 0, 0, 1557, 345, 1, 0, 0, 0, 1558, 1559, 5, 44, 0, 0, 1559, 347, 1, 0, 0, 0, 1560, 1561, 5, 124, 0, 0, 1561, 1562, 5, 124, 0, 0, 1562, 349, 1, 0, 0, 0, 1563, 1564, 5, 45, 0, 0, 1564, 351, 1, 0, 0, 0, 1565, 1566, 5, 36, 0, 0, 1566, 353, 1, 0, 0, 0, 1567, 1568, 5, 46, 0, 0, 1568, 355, 1, 0, 0, 0, 1569, 1570, 5, 61, 0, 0, 1570, 1571, 5, 61, 0, 0, 1571, 357, 1, 0, 0, 0, 1572, 1573, 5, 61, 0, 0, 1573, 359, 1, 0, 0, 0, 1574, 1575, 5, 62, 0, 0, 1575, 1576, 5, 61, 0, 0, 1576, 361, 1, 0, 0, 0, 1577, 1578, 5, 62, 0, 0, 1578, 363, 1, 0, 0, 0, 1579, 1580, 5, 35, 0, 0, 1580, 365, 1, 0, 0, 0, 1581, 1582, 5, 126, 0, 0, 1582, 1583, 5, 42, 0, 0, 1583, 367, 1, 0, 0, 0, 1584, 1585, 5, 61, 0, 0, 1585, 1586, 5, 126, 0, 0, 1586, 1587, 5, 42, 0, 0, 1587, 369, 1, 0, 0, 0, 1588, 1589, 5, 123, 0, 0, 1589, 1590, 1, 0, 0, 0, 1590, 1591, 6, 182, 0, 0, 1591, 371, 1, 0, 0, 0, 1592, 1593, 5, 91, 0, 0, 1593, 373, 1, 0, 0, 0, 1594, 1595, 5, 40, 0, 0, 1595, 375, 1, 0, 0, 0, 1596, 1597, 5, 60, 0, 0, 1597, 1598, 5, 61, 0, 0, 1598, 377, 1, 0, 0, 0, 1599, 1600, 5, 60, 0, 0, 1600, 1601, 5, 47, 0, 0, 1601, 1602, 1, 0, 0, 0, 1602, 1603, 6, 186, 1, 0, 1603, 1604, 6, 186, 2, 0, 1604, 379, 1, 0, 0, 0, 1605, 1606, 5, 60, 0, 0, 1606, 1607, 4, 187, 0, 0, 1607, 1608, 1, 0, 0, 0, 1608, 1609, 6, 187, 3, 0, 1609, 1610, 6, 187, 4, 0, 1610, 381, 1, 0, 0, 0, 1611, 1612, 5, 60, 0, 0, 1612, 383, 1, 0, 0, 0, 1613, 1614, 5, 60, 0, 0, 1614, 1615, 5, 47, 0, 0, 1615, 385, 1, 0, 0, 0, 1616, 1617, 5, 33, 0, 0, 1617, 1621, 5, 61, 0, 0, 1618, 1619, 5, 60, 0, 0, 1619, 1621, 5, 62, 0, 0, 1620, 1616, 1, 0, 0, 0, 1620, 1618, 1, 0, 0, 0, 1621, 387, 1, 0, 0, 0, 1622, 1623, 5, 33, 0, 0, 1623, 1624, 5, 126, 0, 0, 1624, 1625, 5, 42, 0, 0, 1625, 389, 1, 0, 0, 0, 1626, 1627, 5, 33, 0, 0, 1627, 1628, 5, 126, 0, 0, 1628, 391, 1, 0, 0, 0, 1629, 1630, 5, 63, 0, 0, 1630, 1631, 5, 46, 0, 0, 1631, 393, 1, 0, 0, 0, 1632, 1633, 5, 63, 0, 0, 1633, 1634, 5, 63, 0, 0, 1634, 395, 1, 0, 0, 0, 1635, 1636, 5, 37, 0, 0, 1636, 397, 1, 0, 0, 0, 1637, 1638, 5, 43, 0, 0, 1638, 399, 1, 0, 0, 0, 1639, 1640, 5, 63, 0, 0, 1640, 401, 1, 0, 0, 0, 1641, 1642, 5, 34, 0, 0, 1642, 403, 1, 0, 0, 0, 1643, 1644, 5, 102, 0, 0, 1644, 1645, 5, 39, 0, 0, 1645, 1646, 1, 0, 0, 0, 1646, 1647, 6, 199, 5, 0, 1647, 405, 1, 0, 0, 0, 1648, 1649, 5, 70, 0, 0, 1649, 1650, 5, 39, 0, 0, 1650, 1651, 1, 0, 0, 0, 1651, 1652, 6, 200, 6, 0, 1652, 407, 1, 0, 0, 0, 1653, 1654, 5, 39, 0, 0, 1654, 409, 1, 0, 0, 0, 1655, 1656, 5, 126, 0, 0, 1656, 411, 1, 0, 0, 0, 1657, 1658, 5, 61, 0, 0, 1658, 1659, 5, 126, 0, 0, 1659, 413, 1, 0, 0, 0, 1660, 1661, 5, 125, 0, 0, 1661, 1662, 1, 0, 0, 0, 1662, 1663, 6, 204, 7, 0, 1663, 415, 1, 0, 0, 0, 1664, 1665, 5, 93, 0, 0, 1665, 417, 1, 0, 0, 0, 1666, 1667, 5, 41, 0, 0, 1667, 419, 1, 0, 0, 0, 1668, 1669, 5, 59, 0, 0, 1669, 421, 1, 0, 0, 0, 1670, 1671, 5, 47, 0, 0, 1671, 423, 1, 0, 0, 0, 1672, 1673, 5, 47, 0, 0, 1673, 1674, 5, 62, 0, 0, 1674, 425, 1, 0, 0, 0, 1675, 1676, 5, 95, 0, 0, 1676, 427, 1, 0, 0, 0, 1677, 1678, 5, 47, 0, 0, 1678, 1679, 5, 42, 0, 0, 1679, 1683, 1, 0, 0, 0, 1680, 1682, 9, 0, 0, 0, 1681, 1680, 1, 0, 0, 0, 1682, 1685, 1, 0, 0, 0, 1683, 1684, 1, 0, 0, 0, 1683, 1681, 1, 0, 0, 0, 1684, 1686, 1, 0, 0, 0, 1685, 1683, 1, 0, 0, 0, 1686, 1687, 5, 42, 0, 0, 1687, 1688, 5, 47, 0, 0, 1688, 1689, 1, 0, 0, 0, 1689, 1690, 6, 211, 8, 0, 1690, 429, 1, 0, 0, 0, 1691, 1692, 5, 45, 0, 0, 1692, 1696, 5, 45, 0, 0, 1693, 1694, 5, 47, 0, 0, 1694, 1696, 5, 47, 0, 0, 1695, 1691, 1, 0, 0, 0, 1695, 1693, 1, 0, 0, 0, 1696, 1700, 1, 0, 0, 0, 1697, 1699, 8, 33, 0, 0, 1698, 1697, 1, 0, 0, 0, 1699, 1702, 1, 0, 0, 0, 1700, 1698, 1, 0, 0, 0, 1700, 1701, 1, 0, 0, 0, 1701, 1704, 1, 0, 0, 0, 1702, 1700, 1, 0, 0, 0, 1703, 1705, 7, 34, 0, 0, 1704, 1703, 1, 0, 0, 0, 1705, 1706, 1, 0, 0, 0, 1706, 1707, 6, 212, 8, 0, 1707, 431, 1, 0, 0, 0, 1708, 1709, 7, 35, 0, 0, 1709, 1710, 1, 0, 0, 0, 1710, 1711, 6, 213, 9, 0, 1711, 433, 1, 0, 0, 0, 1712, 1724, 8, 36, 0, 0, 1713, 1724, 3, 258, 126, 0, 1714, 1715, 3, 338, 166, 0, 1715, 1716, 3, 408, 201, 0, 1716, 1724, 1, 0, 0, 0, 1717, 1718, 3, 338, 166, 0, 1718, 1719, 3, 370, 182, 0, 1719, 1724, 1, 0, 0, 0, 1720, 1721, 3, 408, 201, 0, 1721, 1722, 3, 408, 201, 0, 1722, 1724, 1, 0, 0, 0, 1723, 1712, 1, 0, 0, 0, 1723, 1713, 1, 0, 0, 0, 1723, 1714, 1, 0, 0, 0, 1723, 1717, 1, 0, 0, 0, 1723, 1720, 1, 0, 0, 0, 1724, 1725, 1, 0, 0, 0, 1725, 1723, 1, 0, 0, 0, 1725, 1726, 1, 0, 0, 0, 1726, 435, 1, 0, 0, 0, 1727, 1728, 3, 370, 182, 0, 1728, 1729, 1, 0, 0, 0, 1729, 1730, 6, 215, 0, 0, 1730, 437, 1, 0, 0, 0, 1731, 1732, 3, 408, 201, 0, 1732, 1733, 1, 0, 0, 0, 1733, 1734, 6, 216, 10, 0, 1734, 1735, 6, 216, 7, 0, 1735, 439, 1, 0, 0, 0, 1736, 1742, 8, 37, 0, 0, 1737, 1742, 3, 258, 126, 0, 1738, 1739, 3, 338, 166, 0, 1739, 1740, 3, 370, 182, 0, 1740, 1742, 1, 0, 0, 0, 1741, 1736, 1, 0, 0, 0, 1741, 1737, 1, 0, 0, 0, 1741, 1738, 1, 0, 0, 0, 1742, 1743, 1, 0, 0, 0, 1743, 1741, 1, 0, 0, 0, 1743, 1744, 1, 0, 0, 0, 1744, 441, 1, 0, 0, 0, 1745, 1746, 3, 370, 182, 0, 1746, 1747, 1, 0, 0, 0, 1747, 1748, 6, 218, 0, 0, 1748, 443, 1, 0, 0, 0, 1749, 1750, 5, 47, 0, 0, 1750, 1751, 5, 62, 0, 0, 1751, 1752, 1, 0, 0, 0, 1752, 1753, 6, 219, 11, 0, 1753, 1754, 6, 219, 7, 0, 1754, 445, 1, 0, 0, 0, 1755, 1756, 5, 62, 0, 0, 1756, 1757, 1, 0, 0, 0, 1757, 1758, 6, 220, 12, 0, 1758, 1759, 6, 220, 7, 0, 1759, 1760, 6, 220, 13, 0, 1760, 447, 1, 0, 0, 0, 1761, 1765, 7, 38, 0, 0, 1762, 1764, 7, 39, 0, 0, 1763, 1762, 1, 0, 0, 0, 1764, 1767, 1, 0, 0, 0, 1765, 1763, 1, 0, 0, 0, 1765, 1766, 1, 0, 0, 0, 1766, 1768, 1, 0, 0, 0, 1767, 1765, 1, 0, 0, 0, 1768, 1769, 6, 221, 14, 0, 1769, 449, 1, 0, 0, 0, 1770, 1771, 5, 61, 0, 0, 1771, 1772, 1, 0, 0, 0, 1772, 1773, 6, 222, 15, 0, 1773, 451, 1, 0, 0, 0, 1774, 1775, 3, 270, 132, 0, 1775, 1776, 1, 0, 0, 0, 1776, 1777, 6, 223, 16, 0, 1777, 453, 1, 0, 0, 0, 1778, 1780, 7, 40, 0, 0, 1779, 1778, 1, 0, 0, 0, 1780, 1781, 1, 0, 0, 0, 1781, 1779, 1, 0, 0, 0, 1781, 1782, 1, 0, 0, 0, 1782, 1783, 1, 0, 0, 0, 1783, 1784, 6, 224, 9, 0, 1784, 455, 1, 0, 0, 0, 1785, 1786, 5, 123, 0, 0, 1786, 1787, 1, 0, 0, 0, 1787, 1788, 6, 225, 17, 0, 1788, 1789, 6, 225, 0, 0, 1789, 457, 1, 0, 0, 0, 1790, 1791, 5, 62, 0, 0, 1791, 1792, 1, 0, 0, 0, 1792, 1793, 6, 226, 12, 0, 1793, 1794, 6, 226, 7, 0, 1794, 459, 1, 0, 0, 0, 1795, 1799, 7, 38, 0, 0, 1796, 1798, 7, 39, 0, 0, 1797, 1796, 1, 0, 0, 0, 1798, 1801, 1, 0, 0, 0, 1799, 1797, 1, 0, 0, 0, 1799, 1800, 1, 0, 0, 0, 1800, 1802, 1, 0, 0, 0, 1801, 1799, 1, 0, 0, 0, 1802, 1803, 6, 227, 14, 0, 1803, 461, 1, 0, 0, 0, 1804, 1806, 7, 40, 0, 0, 1805, 1804, 1, 0, 0, 0, 1806, 1807, 1, 0, 0, 0, 1807, 1805, 1, 0, 0, 0, 1807, 1808, 1, 0, 0, 0, 1808, 1809, 1, 0, 0, 0, 1809, 1810, 6, 228, 9, 0, 1810, 463, 1, 0, 0, 0, 1811, 1813, 8, 41, 0, 0, 1812, 1811, 1, 0, 0, 0, 1813, 1814, 1, 0, 0, 0, 1814, 1812, 1, 0, 0, 0, 1814, 1815, 1, 0, 0, 0, 1815, 465, 1, 0, 0, 0, 1816, 1817, 5, 123, 0, 0, 1817, 1818, 1, 0, 0, 0, 1818, 1819, 6, 230, 17, 0, 1819, 1820, 6, 230, 0, 0, 1820, 467, 1, 0, 0, 0, 1821, 1822, 5, 60, 0, 0, 1822, 1823, 5, 47, 0, 0, 1823, 1824, 1, 0, 0, 0, 1824, 1825, 6, 231, 1, 0, 1825, 1826, 6, 231, 7, 0, 1826, 1827, 6, 231, 2, 0, 1827, 469, 1, 0, 0, 0, 1828, 1829, 5, 60, 0, 0, 1829, 1830, 1, 0, 0, 0, 1830, 1831, 6, 232, 3, 0, 1831, 1832, 6, 232, 4, 0, 1832, 471, 1, 0, 0, 0, 1833, 1835, 7, 40, 0, 0, 1834, 1833, 1, 0, 0, 0, 1835, 1836, 1, 0, 0, 0, 1836, 1834, 1, 0, 0, 0, 1836, 1837, 1, 0, 0, 0, 1837, 1838, 1, 0, 0, 0, 1838, 1839, 6, 233, 9, 0, 1839, 473, 1, 0, 0, 0, 53, 0, 1, 2, 3, 4, 5, 514, 789, 1285, 1319, 1324, 1330, 1332, 1344, 1346, 1360, 1362, 1367, 1374, 1379, 1383, 1388, 1393, 1397, 1402, 1409, 1415, 1420, 1427, 1432, 1438, 1443, 1445, 1451, 1456, 1463, 1474, 1476, 1620, 1683, 1695, 1700, 1704, 1723, 1725, 1741, 1743, 1765, 1781, 1799, 1807, 1814, 1836, 18, 5, 0, 0, 7, 158, 0, 5, 4, 0, 7, 157, 0, 5, 3, 0, 5, 1, 0, 5, 2, 0, 4, 0, 0, 6, 0, 0, 0, 1, 0, 7, 170, 0, 7, 178, 0, 7, 149, 0, 5, 5, 0, 7, 128, 0, 7, 147, 0, 7, 133, 0, 7, 153, 0] \ No newline at end of file diff --git a/common/hogql_parser/HogQLLexer.tokens b/common/hogql_parser/HogQLLexer.tokens index ff4c37fb8c46..83760b967113 100644 --- a/common/hogql_parser/HogQLLexer.tokens +++ b/common/hogql_parser/HogQLLexer.tokens @@ -29,198 +29,204 @@ EXCEPT=28 EXCLUDE=29 EXTRACT=30 FINAL=31 -FINALLY=32 -FIRST=33 -FN=34 -FOLLOWING=35 -FOR=36 -FROM=37 -FULL=38 -FUN=39 -GROUP=40 -GROUPING=41 -HAVING=42 -HOUR=43 -ID=44 -IF=45 -ILIKE=46 -IN=47 -INF=48 -INNER=49 -INTERSECT=50 -INTERVAL=51 -IS=52 -JOIN=53 -KEY=54 -LAMBDA=55 -LAST=56 -LEADING=57 -LEFT=58 -LET=59 -LIKE=60 -LIMIT=61 -MATERIALIZED=62 -MINUTE=63 -MONTH=64 -NAME=65 -NAN_SQL=66 -NOT=67 -NULL_SQL=68 -NULLS=69 -OFFSET=70 -ON=71 -OR=72 -ORDER=73 -OUTER=74 -OVER=75 -PARTITION=76 -PRECEDING=77 -PREWHERE=78 -QUALIFY=79 -QUARTER=80 -RANGE=81 -RECURSIVE=82 -REPLACE=83 -RETURN=84 -RIGHT=85 -ROLLUP=86 -ROW=87 -ROWS=88 -SAMPLE=89 -SECOND=90 -SELECT=91 -SEMI=92 -SETS=93 -SETTINGS=94 -SUBSTRING=95 -THEN=96 -THROW=97 -TIES=98 -TIMESTAMP=99 -TO=100 -TOP=101 -TOTALS=102 -TRAILING=103 -TRIM=104 -TRUNCATE=105 -TRY=106 -TRY_CAST=107 -UNBOUNDED=108 -UNION=109 -UNPIVOT=110 -USING=111 -VALUES=112 -WEEK=113 -WHEN=114 -WHERE=115 -WHILE=116 -WINDOW=117 -WITH=118 -WITHIN=119 -YEAR=120 -ESCAPE_CHAR_COMMON=121 -IDENTIFIER=122 -FLOATING_LITERAL=123 -OCTAL_LITERAL=124 -DECIMAL_LITERAL=125 -HEXADECIMAL_LITERAL=126 -STRING_LITERAL=127 -ARROW=128 -ASTERISK=129 -BACKQUOTE=130 -BACKSLASH=131 -DOUBLECOLON=132 -COLONEQUALS=133 -COLON=134 -COMMA=135 -CONCAT=136 -DASH=137 -DOLLAR=138 -DOT=139 -EQ_DOUBLE=140 -EQ_SINGLE=141 -GT_EQ=142 -GT=143 -HASH=144 -IREGEX_SINGLE=145 -IREGEX_DOUBLE=146 -LBRACE=147 -LBRACKET=148 -LPAREN=149 -LT_EQ=150 -LT=151 -LT_SLASH=152 -NOT_EQ=153 -NOT_IREGEX=154 -NOT_REGEX=155 -NULL_PROPERTY=156 -NULLISH=157 -PERCENT=158 -PLUS=159 -QUERY=160 -QUOTE_DOUBLE=161 -QUOTE_SINGLE_TEMPLATE=162 -QUOTE_SINGLE_TEMPLATE_FULL=163 -QUOTE_SINGLE=164 -REGEX_SINGLE=165 -REGEX_DOUBLE=166 -RBRACE=167 -RBRACKET=168 -RPAREN=169 -SEMICOLON=170 -SLASH=171 -SLASH_GT=172 -UNDERSCORE=173 -MULTI_LINE_COMMENT=174 -SINGLE_LINE_COMMENT=175 -WHITESPACE=176 -STRING_TEXT=177 -STRING_ESCAPE_TRIGGER=178 -FULL_STRING_TEXT=179 -FULL_STRING_ESCAPE_TRIGGER=180 -TAG_WS=181 -TAGC_WS=182 -HOGQLX_TEXT_TEXT=183 -HOGQLX_TEXT_WS=184 -'->'=128 -'*'=129 -'`'=130 -'\\'=131 -'::'=132 -':='=133 -':'=134 -','=135 -'||'=136 -'-'=137 -'$'=138 -'.'=139 -'=='=140 -'>='=142 -'#'=144 -'~*'=145 -'=~*'=146 -'{'=147 -'['=148 -'('=149 -'<='=150 -'<'=151 -''=134 +'*'=135 +'`'=136 +'\\'=137 +'::'=138 +':='=139 +':'=140 +','=141 +'||'=142 +'-'=143 +'$'=144 +'.'=145 +'=='=146 +'>='=148 +'#'=150 +'~*'=151 +'=~*'=152 +'{'=153 +'['=154 +'('=155 +'<='=156 +'<'=157 +'{ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", @@ -86,47 +86,47 @@ void hogqlparserParserInitialize() { "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", "", "'->'", "'*'", "'`'", "'\\'", - "'::'", "':='", "':'", "','", "'||'", "'-'", "'$'", "'.'", "'=='", - "", "'>='", "", "'#'", "'~*'", "'=~*'", "'{'", "'['", "'('", "'<='", - "'<'", "''", + "'*'", "'`'", "'\\'", "'::'", "':='", "':'", "','", "'||'", "'-'", + "'$'", "'.'", "'=='", "", "'>='", "", "'#'", "'~*'", "'=~*'", "'{'", + "'['", "'('", "'<='", "'<'", "'{ "", "ALL", "AND", "ANTI", "ANY", "ARRAY", "AS", "ASCENDING", "ASOF", "BETWEEN", "BOTH", "BY", "CASE", "CAST", "CATCH", "COHORT", "COLLATE", "COLUMNS", "CROSS", "CUBE", "CURRENT", "DATE", "DAY", "DESC", "DESCENDING", "DISTINCT", "ELSE", "END", "EXCEPT", "EXCLUDE", "EXTRACT", "FINAL", - "FINALLY", "FIRST", "FN", "FOLLOWING", "FOR", "FROM", "FULL", "FUN", - "GROUP", "GROUPING", "HAVING", "HOUR", "ID", "IF", "ILIKE", "IN", - "INF", "INNER", "INTERSECT", "INTERVAL", "IS", "JOIN", "KEY", "LAMBDA", - "LAST", "LEADING", "LEFT", "LET", "LIKE", "LIMIT", "MATERIALIZED", - "MINUTE", "MONTH", "NAME", "NAN_SQL", "NOT", "NULL_SQL", "NULLS", - "OFFSET", "ON", "OR", "ORDER", "OUTER", "OVER", "PARTITION", "PRECEDING", - "PREWHERE", "QUALIFY", "QUARTER", "RANGE", "RECURSIVE", "REPLACE", - "RETURN", "RIGHT", "ROLLUP", "ROW", "ROWS", "SAMPLE", "SECOND", "SELECT", - "SEMI", "SETS", "SETTINGS", "SUBSTRING", "THEN", "THROW", "TIES", - "TIMESTAMP", "TO", "TOP", "TOTALS", "TRAILING", "TRIM", "TRUNCATE", - "TRY", "TRY_CAST", "UNBOUNDED", "UNION", "UNPIVOT", "USING", "VALUES", - "WEEK", "WHEN", "WHERE", "WHILE", "WINDOW", "WITH", "WITHIN", "YEAR", - "ESCAPE_CHAR_COMMON", "IDENTIFIER", "FLOATING_LITERAL", "OCTAL_LITERAL", - "DECIMAL_LITERAL", "HEXADECIMAL_LITERAL", "STRING_LITERAL", "ARROW", - "ASTERISK", "BACKQUOTE", "BACKSLASH", "DOUBLECOLON", "COLONEQUALS", - "COLON", "COMMA", "CONCAT", "DASH", "DOLLAR", "DOT", "EQ_DOUBLE", - "EQ_SINGLE", "GT_EQ", "GT", "HASH", "IREGEX_SINGLE", "IREGEX_DOUBLE", - "LBRACE", "LBRACKET", "LPAREN", "LT_EQ", "LT", "LT_SLASH", "NOT_EQ", - "NOT_IREGEX", "NOT_REGEX", "NULL_PROPERTY", "NULLISH", "PERCENT", - "PLUS", "QUERY", "QUOTE_DOUBLE", "QUOTE_SINGLE_TEMPLATE", "QUOTE_SINGLE_TEMPLATE_FULL", - "QUOTE_SINGLE", "REGEX_SINGLE", "REGEX_DOUBLE", "RBRACE", "RBRACKET", - "RPAREN", "SEMICOLON", "SLASH", "SLASH_GT", "UNDERSCORE", "MULTI_LINE_COMMENT", - "SINGLE_LINE_COMMENT", "WHITESPACE", "STRING_TEXT", "STRING_ESCAPE_TRIGGER", - "FULL_STRING_TEXT", "FULL_STRING_ESCAPE_TRIGGER", "TAG_WS", "TAGC_WS", - "HOGQLX_TEXT_TEXT", "HOGQLX_TEXT_WS" + "FILTER", "FINALLY", "FIRST", "FN", "FOLLOWING", "FOR", "FROM", "FULL", + "FUN", "GROUP", "GROUPING", "HAVING", "HOUR", "ID", "IF", "ILIKE", + "IGNORE", "INCLUDE", "IN", "INF", "INNER", "INTERSECT", "INTERVAL", + "IS", "JOIN", "KEY", "LAMBDA", "LAST", "LEADING", "LEFT", "LET", "LIKE", + "LIMIT", "MATERIALIZED", "MINUTE", "MONTH", "NAME", "NATURAL", "NAN_SQL", + "NOT", "NULL_SQL", "NULLS", "OFFSET", "ON", "OR", "ORDER", "OUTER", + "OVER", "PARTITION", "PIVOT", "POSITIONAL", "PRECEDING", "PREWHERE", + "QUALIFY", "QUARTER", "RANGE", "RECURSIVE", "REPLACE", "RETURN", "RIGHT", + "ROLLUP", "ROW", "ROWS", "SAMPLE", "SECOND", "SELECT", "SEMI", "SETS", + "SETTINGS", "SUBSTRING", "THEN", "THROW", "TIES", "TIMESTAMP", "TO", + "TOP", "TOTALS", "TRAILING", "TRIM", "TRUNCATE", "TRY", "TRY_CAST", + "UNBOUNDED", "UNION", "UNPIVOT", "USING", "VALUES", "WEEK", "WHEN", + "WHERE", "WHILE", "WINDOW", "WITH", "WITHIN", "YEAR", "ESCAPE_CHAR_COMMON", + "IDENTIFIER", "FLOATING_LITERAL", "OCTAL_LITERAL", "DECIMAL_LITERAL", + "HEXADECIMAL_LITERAL", "STRING_LITERAL", "ARROW", "ASTERISK", "BACKQUOTE", + "BACKSLASH", "DOUBLECOLON", "COLONEQUALS", "COLON", "COMMA", "CONCAT", + "DASH", "DOLLAR", "DOT", "EQ_DOUBLE", "EQ_SINGLE", "GT_EQ", "GT", + "HASH", "IREGEX_SINGLE", "IREGEX_DOUBLE", "LBRACE", "LBRACKET", "LPAREN", + "LT_EQ", "LT", "LT_SLASH", "NOT_EQ", "NOT_IREGEX", "NOT_REGEX", "NULL_PROPERTY", + "NULLISH", "PERCENT", "PLUS", "QUERY", "QUOTE_DOUBLE", "QUOTE_SINGLE_TEMPLATE", + "QUOTE_SINGLE_TEMPLATE_FULL", "QUOTE_SINGLE", "REGEX_SINGLE", "REGEX_DOUBLE", + "RBRACE", "RBRACKET", "RPAREN", "SEMICOLON", "SLASH", "SLASH_GT", + "UNDERSCORE", "MULTI_LINE_COMMENT", "SINGLE_LINE_COMMENT", "WHITESPACE", + "STRING_TEXT", "STRING_ESCAPE_TRIGGER", "FULL_STRING_TEXT", "FULL_STRING_ESCAPE_TRIGGER", + "TAG_WS", "TAGC_WS", "HOGQLX_TEXT_TEXT", "HOGQLX_TEXT_WS" } ); static const int32_t serializedATNSegment[] = { - 4,1,184,1806,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6, + 4,1,190,1988,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6, 2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,14, 7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2,21, 7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7,26,2,27,7,27,2,28, @@ -141,682 +141,756 @@ void hogqlparserParserInitialize() { 7,84,2,85,7,85,2,86,7,86,2,87,7,87,2,88,7,88,2,89,7,89,2,90,7,90,2,91, 7,91,2,92,7,92,2,93,7,93,2,94,7,94,2,95,7,95,2,96,7,96,2,97,7,97,2,98, 7,98,2,99,7,99,2,100,7,100,2,101,7,101,2,102,7,102,2,103,7,103,2,104, - 7,104,2,105,7,105,2,106,7,106,2,107,7,107,1,0,5,0,218,8,0,10,0,12,0,221, - 9,0,1,0,1,0,1,1,1,1,3,1,227,8,1,1,2,1,2,1,3,1,3,1,3,1,3,3,3,235,8,3,1, - 4,1,4,1,4,5,4,240,8,4,10,4,12,4,243,9,4,1,4,3,4,246,8,4,1,5,1,5,1,5,1, - 5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,3,5,260,8,5,1,6,1,6,3,6,264,8,6,1,6, - 3,6,267,8,6,1,7,1,7,3,7,271,8,7,1,7,3,7,274,8,7,1,8,1,8,1,8,1,8,1,8,3, - 8,281,8,8,1,8,1,8,3,8,285,8,8,1,8,1,8,1,9,1,9,1,9,5,9,292,8,9,10,9,12, - 9,295,9,9,1,9,1,9,3,9,299,8,9,1,10,1,10,1,10,1,10,1,10,1,10,1,10,3,10, - 308,8,10,1,11,1,11,1,11,1,11,1,11,1,11,3,11,316,8,11,1,12,1,12,1,12,1, - 12,1,12,3,12,323,8,12,1,12,1,12,3,12,327,8,12,1,12,1,12,1,12,1,12,3,12, - 333,8,12,1,12,1,12,1,12,3,12,338,8,12,1,13,1,13,1,13,1,13,1,13,1,13,3, - 13,346,8,13,1,13,1,13,1,13,1,13,1,13,3,13,353,8,13,1,14,1,14,1,14,1,14, - 3,14,359,8,14,1,14,1,14,1,14,1,15,1,15,1,15,1,15,1,16,1,16,3,16,370,8, - 16,1,17,1,17,1,18,1,18,5,18,376,8,18,10,18,12,18,379,9,18,1,18,1,18,1, - 19,1,19,1,19,1,19,1,20,1,20,1,20,5,20,390,8,20,10,20,12,20,393,9,20,1, - 20,3,20,396,8,20,1,21,1,21,1,21,3,21,401,8,21,1,21,3,21,404,8,21,1,21, - 1,21,1,22,1,22,1,22,1,22,1,22,1,22,3,22,414,8,22,1,23,1,23,1,23,1,23, - 3,23,420,8,23,1,23,1,23,1,23,3,23,425,8,23,1,23,1,23,1,23,1,23,3,23,431, - 8,23,1,23,1,23,1,23,1,23,3,23,437,8,23,1,23,1,23,1,23,3,23,442,8,23,1, - 23,1,23,1,23,1,23,3,23,448,8,23,1,23,1,23,1,23,1,23,3,23,454,8,23,1,23, - 1,23,1,23,3,23,459,8,23,3,23,461,8,23,1,23,1,23,1,24,1,24,5,24,467,8, - 24,10,24,12,24,470,9,24,1,24,3,24,473,8,24,1,25,1,25,1,25,3,25,478,8, - 25,1,25,1,25,3,25,482,8,25,1,25,1,25,3,25,486,8,25,1,25,1,25,1,25,3,25, - 491,8,25,1,25,1,25,3,25,495,8,25,1,25,1,25,1,25,1,25,1,25,3,25,502,8, - 25,1,26,3,26,505,8,26,1,26,1,26,3,26,509,8,26,1,26,3,26,512,8,26,1,26, - 1,26,3,26,516,8,26,1,26,3,26,519,8,26,1,26,3,26,522,8,26,1,26,3,26,525, - 8,26,1,26,3,26,528,8,26,1,26,3,26,531,8,26,1,26,3,26,534,8,26,1,26,1, - 26,3,26,538,8,26,1,26,1,26,3,26,542,8,26,1,26,3,26,545,8,26,1,26,3,26, - 548,8,26,1,26,1,26,3,26,552,8,26,1,26,3,26,555,8,26,1,26,3,26,558,8,26, - 1,26,3,26,561,8,26,1,26,1,26,3,26,565,8,26,1,26,3,26,568,8,26,1,27,1, - 27,3,27,572,8,27,1,27,1,27,1,28,1,28,1,28,1,28,3,28,580,8,28,1,29,1,29, - 1,29,1,30,3,30,586,8,30,1,30,1,30,1,30,1,30,1,31,1,31,1,31,1,31,1,31, - 1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,5,31,605,8,31,10,31,12,31,608, - 9,31,1,32,1,32,1,32,1,33,1,33,1,33,1,34,1,34,1,34,1,34,1,34,1,34,1,34, - 1,34,1,34,1,34,1,34,1,34,1,34,1,34,3,34,630,8,34,1,35,1,35,1,35,5,35, - 635,8,35,10,35,12,35,638,9,35,1,36,1,36,3,36,642,8,36,1,36,1,36,1,37, - 1,37,1,37,1,38,1,38,1,38,1,39,1,39,1,39,1,39,1,40,1,40,1,40,1,40,1,41, - 1,41,1,41,1,41,1,41,1,42,1,42,1,42,3,42,668,8,42,1,42,1,42,3,42,672,8, - 42,1,42,1,42,3,42,676,8,42,1,42,1,42,1,42,3,42,681,8,42,1,42,1,42,3,42, - 685,8,42,1,42,1,42,1,42,3,42,690,8,42,1,43,1,43,1,43,1,44,1,44,1,44,1, - 45,1,45,1,45,1,45,5,45,702,8,45,10,45,12,45,705,9,45,1,46,1,46,1,46,1, - 46,5,46,711,8,46,10,46,12,46,714,9,46,1,46,1,46,1,47,1,47,1,47,3,47,721, - 8,47,1,47,3,47,724,8,47,1,47,1,47,1,47,1,47,3,47,730,8,47,1,47,1,47,1, - 47,1,47,1,47,1,47,3,47,738,8,47,1,47,1,47,1,47,1,47,5,47,744,8,47,10, - 47,12,47,747,9,47,1,48,3,48,750,8,48,1,48,1,48,1,48,3,48,755,8,48,1,48, - 1,48,1,48,3,48,760,8,48,1,48,3,48,763,8,48,1,48,1,48,3,48,767,8,48,1, - 48,1,48,3,48,771,8,48,1,48,3,48,774,8,48,3,48,776,8,48,1,48,3,48,779, - 8,48,1,48,1,48,3,48,783,8,48,1,48,1,48,3,48,787,8,48,1,48,3,48,790,8, - 48,3,48,792,8,48,3,48,794,8,48,1,49,1,49,1,49,3,49,799,8,49,1,50,1,50, - 1,50,1,50,1,50,1,50,1,50,1,50,1,50,3,50,810,8,50,1,51,1,51,1,51,3,51, - 815,8,51,1,51,1,51,3,51,819,8,51,1,51,1,51,1,51,1,51,3,51,825,8,51,1, - 52,1,52,1,52,3,52,830,8,52,1,53,1,53,1,53,5,53,835,8,53,10,53,12,53,838, - 9,53,1,54,1,54,3,54,842,8,54,1,54,1,54,3,54,846,8,54,1,54,1,54,3,54,850, - 8,54,1,55,1,55,1,55,1,55,3,55,856,8,55,3,55,858,8,55,1,56,1,56,1,56,5, - 56,863,8,56,10,56,12,56,866,9,56,1,57,1,57,1,57,1,57,1,58,3,58,873,8, - 58,1,58,3,58,876,8,58,1,58,3,58,879,8,58,1,59,1,59,1,59,1,59,1,60,1,60, - 1,60,1,60,1,61,1,61,1,61,1,61,1,61,1,61,1,62,1,62,1,62,1,63,1,63,1,63, - 1,63,1,63,1,63,3,63,904,8,63,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64, - 1,64,1,64,1,64,1,64,3,64,918,8,64,1,65,1,65,1,65,1,66,1,66,1,66,1,66, - 1,66,1,66,1,66,1,66,5,66,931,8,66,10,66,12,66,934,9,66,1,66,3,66,937, - 8,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,5,66,946,8,66,10,66,12,66,949, - 9,66,1,66,3,66,952,8,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,5,66,961,8, - 66,10,66,12,66,964,9,66,1,66,3,66,967,8,66,1,66,1,66,1,66,1,66,1,66,3, - 66,974,8,66,1,66,1,66,1,66,1,66,4,66,980,8,66,11,66,12,66,981,1,66,3, - 66,985,8,66,1,67,1,67,4,67,989,8,67,11,67,12,67,990,1,67,3,67,994,8,67, - 1,68,1,68,1,68,5,68,999,8,68,10,68,12,68,1002,9,68,1,68,3,68,1005,8,68, - 1,69,1,69,1,69,5,69,1010,8,69,10,69,12,69,1013,9,69,1,69,3,69,1016,8, - 69,1,70,1,70,1,70,1,70,1,70,3,70,1023,8,70,1,71,1,71,1,71,3,71,1028,8, - 71,1,71,1,71,1,71,1,71,1,71,4,71,1035,8,71,11,71,12,71,1036,1,71,1,71, - 3,71,1041,8,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, + 7,104,2,105,7,105,2,106,7,106,2,107,7,107,2,108,7,108,2,109,7,109,1,0, + 5,0,222,8,0,10,0,12,0,225,9,0,1,0,1,0,1,1,1,1,3,1,231,8,1,1,2,1,2,1,3, + 1,3,1,3,1,3,3,3,239,8,3,1,4,1,4,1,4,5,4,244,8,4,10,4,12,4,247,9,4,1,4, + 3,4,250,8,4,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,3,5,264,8, + 5,1,6,1,6,3,6,268,8,6,1,6,3,6,271,8,6,1,7,1,7,3,7,275,8,7,1,7,3,7,278, + 8,7,1,8,1,8,1,8,1,8,1,8,3,8,285,8,8,1,8,1,8,3,8,289,8,8,1,8,1,8,1,9,1, + 9,1,9,5,9,296,8,9,10,9,12,9,299,9,9,1,9,1,9,3,9,303,8,9,1,10,1,10,1,10, + 1,10,1,10,1,10,1,10,3,10,312,8,10,1,11,1,11,1,11,1,11,1,11,1,11,3,11, + 320,8,11,1,12,1,12,1,12,1,12,1,12,3,12,327,8,12,1,12,1,12,3,12,331,8, + 12,1,12,1,12,1,12,1,12,3,12,337,8,12,1,12,1,12,1,12,3,12,342,8,12,1,13, + 1,13,1,13,1,13,1,13,1,13,3,13,350,8,13,1,13,1,13,1,13,1,13,1,13,3,13, + 357,8,13,1,14,1,14,1,14,1,14,3,14,363,8,14,1,14,1,14,1,14,1,15,1,15,1, + 15,1,15,1,16,1,16,3,16,374,8,16,1,17,1,17,1,18,1,18,5,18,380,8,18,10, + 18,12,18,383,9,18,1,18,1,18,1,19,1,19,1,19,1,19,1,20,1,20,1,20,5,20,394, + 8,20,10,20,12,20,397,9,20,1,20,3,20,400,8,20,1,21,1,21,1,21,3,21,405, + 8,21,1,21,3,21,408,8,21,1,21,1,21,1,22,1,22,1,22,1,22,1,22,1,22,1,22, + 1,22,1,22,1,22,1,22,3,22,423,8,22,1,23,1,23,1,23,1,23,3,23,429,8,23,1, + 23,1,23,1,23,3,23,434,8,23,1,23,1,23,1,23,1,23,3,23,440,8,23,1,23,1,23, + 1,23,1,23,3,23,446,8,23,1,23,1,23,1,23,3,23,451,8,23,1,23,1,23,1,23,1, + 23,3,23,457,8,23,1,23,1,23,1,23,1,23,3,23,463,8,23,1,23,1,23,1,23,3,23, + 468,8,23,3,23,470,8,23,1,23,1,23,1,24,1,24,5,24,476,8,24,10,24,12,24, + 479,9,24,1,24,3,24,482,8,24,1,24,3,24,485,8,24,1,25,1,25,1,25,3,25,490, + 8,25,1,25,1,25,3,25,494,8,25,1,25,1,25,3,25,498,8,25,1,25,1,25,1,25,3, + 25,503,8,25,1,25,1,25,3,25,507,8,25,1,25,1,25,1,25,1,25,1,25,3,25,514, + 8,25,1,26,3,26,517,8,26,1,26,1,26,3,26,521,8,26,1,26,3,26,524,8,26,1, + 26,1,26,3,26,528,8,26,1,26,3,26,531,8,26,1,26,3,26,534,8,26,1,26,3,26, + 537,8,26,1,26,3,26,540,8,26,1,26,3,26,543,8,26,1,26,3,26,546,8,26,1,26, + 1,26,3,26,550,8,26,1,26,1,26,3,26,554,8,26,1,26,3,26,557,8,26,1,26,3, + 26,560,8,26,1,26,1,26,3,26,564,8,26,1,26,3,26,567,8,26,1,26,3,26,570, + 8,26,1,26,3,26,573,8,26,1,26,1,26,3,26,577,8,26,1,26,3,26,580,8,26,1, + 27,1,27,3,27,584,8,27,1,27,1,27,1,28,1,28,1,28,1,28,3,28,592,8,28,1,29, + 1,29,1,29,1,30,3,30,598,8,30,1,30,1,30,1,30,1,30,1,31,1,31,1,31,1,31, + 1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,5,31,617,8,31,10,31,12,31, + 620,9,31,1,32,1,32,1,32,1,33,1,33,1,33,1,34,1,34,1,34,1,34,1,34,1,34, + 1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,3,34,643,8,34,1,35,1,35, + 1,35,5,35,648,8,35,10,35,12,35,651,9,35,1,36,1,36,3,36,655,8,36,1,36, + 1,36,1,37,1,37,1,37,1,38,1,38,1,38,1,39,1,39,1,39,1,39,1,40,1,40,1,40, + 1,40,1,41,1,41,1,41,1,41,1,41,1,42,1,42,1,42,3,42,681,8,42,1,42,1,42, + 3,42,685,8,42,1,42,1,42,3,42,689,8,42,1,42,1,42,1,42,3,42,694,8,42,1, + 42,1,42,3,42,698,8,42,1,42,1,42,1,42,3,42,703,8,42,1,43,1,43,1,43,1,44, + 1,44,1,44,1,45,1,45,1,45,1,45,5,45,715,8,45,10,45,12,45,718,9,45,1,46, + 1,46,1,46,1,46,5,46,724,8,46,10,46,12,46,727,9,46,1,46,1,46,1,47,1,47, + 1,47,3,47,734,8,47,1,47,3,47,737,8,47,1,47,1,47,1,47,1,47,3,47,743,8, + 47,1,47,1,47,1,47,1,47,1,47,1,47,3,47,751,8,47,1,47,3,47,754,8,47,1,47, + 1,47,1,47,3,47,759,8,47,1,47,1,47,1,47,1,47,1,47,3,47,766,8,47,1,47,1, + 47,1,47,1,47,1,47,1,47,1,47,1,47,3,47,776,8,47,1,47,1,47,1,47,1,47,1, + 47,1,47,3,47,784,8,47,1,47,1,47,1,47,1,47,5,47,790,8,47,10,47,12,47,793, + 9,47,1,48,3,48,796,8,48,1,48,1,48,1,48,3,48,801,8,48,1,48,1,48,1,48,1, + 48,1,48,3,48,808,8,48,1,48,3,48,811,8,48,1,48,1,48,3,48,815,8,48,1,48, + 1,48,3,48,819,8,48,1,48,3,48,822,8,48,1,48,1,48,1,48,1,48,3,48,828,8, + 48,3,48,830,8,48,1,48,3,48,833,8,48,1,48,1,48,3,48,837,8,48,1,48,1,48, + 3,48,841,8,48,1,48,3,48,844,8,48,3,48,846,8,48,3,48,848,8,48,1,49,1,49, + 1,49,3,49,853,8,49,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,3,50, + 864,8,50,1,51,1,51,1,51,3,51,869,8,51,1,51,1,51,3,51,873,8,51,1,51,1, + 51,1,51,1,51,3,51,879,8,51,1,52,1,52,1,52,3,52,884,8,52,1,53,1,53,1,53, + 5,53,889,8,53,10,53,12,53,892,9,53,1,54,1,54,3,54,896,8,54,1,54,1,54, + 3,54,900,8,54,1,54,1,54,3,54,904,8,54,1,55,1,55,1,55,1,55,3,55,910,8, + 55,3,55,912,8,55,1,56,1,56,1,56,5,56,917,8,56,10,56,12,56,920,9,56,1, + 57,1,57,1,57,1,57,1,58,3,58,927,8,58,1,58,3,58,930,8,58,1,58,3,58,933, + 8,58,1,59,1,59,1,59,1,59,1,60,1,60,1,60,1,60,1,61,1,61,1,61,1,61,1,61, + 1,61,1,62,1,62,1,62,1,63,1,63,1,63,1,63,1,63,1,63,3,63,958,8,63,1,64, + 1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,3,64,972,8,64, + 1,65,1,65,1,65,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,5,66,986, + 8,66,10,66,12,66,989,9,66,1,66,3,66,992,8,66,1,66,1,66,1,66,1,66,1,66, + 1,66,1,66,5,66,1001,8,66,10,66,12,66,1004,9,66,1,66,3,66,1007,8,66,1, + 66,1,66,1,66,1,66,1,66,1,66,1,66,5,66,1016,8,66,10,66,12,66,1019,9,66, + 1,66,3,66,1022,8,66,1,66,1,66,1,66,1,66,1,66,3,66,1029,8,66,1,66,1,66, + 1,66,1,66,4,66,1035,8,66,11,66,12,66,1036,1,66,3,66,1040,8,66,1,66,1, + 66,1,66,3,66,1045,8,66,1,66,5,66,1048,8,66,10,66,12,66,1051,9,66,1,67, + 1,67,4,67,1055,8,67,11,67,12,67,1056,1,67,3,67,1060,8,67,1,68,1,68,1, + 68,5,68,1065,8,68,10,68,12,68,1068,9,68,1,68,3,68,1071,8,68,1,69,1,69, + 1,69,5,69,1076,8,69,10,69,12,69,1079,9,69,1,69,3,69,1082,8,69,1,70,1, + 70,1,70,1,70,1,70,3,70,1089,8,70,1,71,1,71,1,71,3,71,1094,8,71,1,71,1, + 71,1,71,1,71,1,71,4,71,1101,8,71,11,71,12,71,1102,1,71,1,71,3,71,1107, + 8,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, 1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, - 1,71,1,71,1,71,1,71,1,71,1,71,3,71,1074,8,71,1,71,1,71,1,71,1,71,1,71, + 1,71,1,71,1,71,1,71,3,71,1140,8,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, 1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, 1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, - 1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71, - 1122,8,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, + 1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1188,8,71, 1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, - 3,71,1150,8,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, - 1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1170,8,71,1,71,1,71,1,71,1,71, - 3,71,1176,8,71,1,71,3,71,1179,8,71,1,71,3,71,1182,8,71,1,71,1,71,1,71, - 1,71,1,71,1,71,1,71,1,71,3,71,1192,8,71,1,71,1,71,1,71,1,71,3,71,1198, - 8,71,1,71,3,71,1201,8,71,1,71,3,71,1204,8,71,1,71,1,71,1,71,1,71,1,71, - 1,71,3,71,1212,8,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1220,8,71,1,71, - 3,71,1223,8,71,1,71,1,71,3,71,1227,8,71,1,71,3,71,1230,8,71,1,71,1,71, - 1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1244,8,71,1,71, - 1,71,1,71,1,71,1,71,1,71,3,71,1252,8,71,1,71,1,71,1,71,1,71,5,71,1258, - 8,71,10,71,12,71,1261,9,71,1,71,3,71,1264,8,71,1,71,1,71,1,71,1,71,1, - 71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1283, - 8,71,1,71,1,71,1,71,3,71,1288,8,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, - 1,71,1,71,3,71,1299,8,71,1,71,1,71,1,71,1,71,3,71,1305,8,71,1,71,1,71, - 1,71,1,71,1,71,3,71,1312,8,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, - 1,71,1,71,3,71,1324,8,71,1,71,1,71,3,71,1328,8,71,1,71,3,71,1331,8,71, - 1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1340,8,71,1,71,1,71,1,71,1,71, - 3,71,1346,8,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, - 1,71,1,71,1,71,3,71,1362,8,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, - 1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1383,8,71, - 1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1394,8,71,1,71,1,71, - 3,71,1398,8,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, + 1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1216, + 8,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, 1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, - 3,71,1425,8,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1433,8,71,5,71,1435, - 8,71,10,71,12,71,1438,9,71,1,72,1,72,1,72,1,72,5,72,1444,8,72,10,72,12, - 72,1447,9,72,1,72,3,72,1450,8,72,1,72,1,72,1,72,1,72,1,72,5,72,1457,8, - 72,10,72,12,72,1460,9,72,1,72,3,72,1463,8,72,1,72,1,72,3,72,1467,8,72, - 1,72,1,72,1,72,3,72,1472,8,72,1,72,1,72,1,72,1,72,5,72,1478,8,72,10,72, - 12,72,1481,9,72,1,72,3,72,1484,8,72,1,72,1,72,1,72,3,72,1489,8,72,1,73, - 1,73,1,73,5,73,1494,8,73,10,73,12,73,1497,9,73,1,74,1,74,1,74,1,74,1, - 75,1,75,1,75,1,75,1,75,1,75,3,75,1509,8,75,1,76,1,76,1,77,1,77,1,77,5, - 77,1516,8,77,10,77,12,77,1519,9,77,1,77,1,77,1,77,1,77,1,77,5,77,1526, - 8,77,10,77,12,77,1529,9,77,1,77,1,77,5,77,1533,8,77,10,77,12,77,1536, - 9,77,1,77,1,77,1,77,1,77,3,77,1542,8,77,1,78,1,78,1,78,1,78,1,78,1,78, - 1,78,1,78,1,78,1,78,1,78,3,78,1555,8,78,1,79,1,79,1,79,5,79,1560,8,79, - 10,79,12,79,1563,9,79,1,79,3,79,1566,8,79,1,80,1,80,3,80,1570,8,80,1, - 80,1,80,1,80,3,80,1575,8,80,1,80,1,80,3,80,1579,8,80,1,80,3,80,1582,8, - 80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,3,80,1592,8,80,1,81,1,81,1, - 81,1,81,5,81,1598,8,81,10,81,12,81,1601,9,81,1,81,1,81,1,82,1,82,1,82, - 1,82,3,82,1609,8,82,1,82,3,82,1612,8,82,1,83,1,83,1,83,5,83,1617,8,83, - 10,83,12,83,1620,9,83,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1, - 84,1,84,1,84,1,84,3,84,1635,8,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1, - 84,1,84,1,84,3,84,1647,8,84,1,84,3,84,1650,8,84,5,84,1652,8,84,10,84, - 12,84,1655,9,84,1,85,1,85,1,85,5,85,1660,8,85,10,85,12,85,1663,9,85,1, - 85,3,85,1666,8,85,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,87,1,87,1, - 87,1,87,1,87,3,87,1681,8,87,1,88,1,88,1,88,1,88,5,88,1687,8,88,10,88, - 12,88,1690,9,88,1,88,1,88,1,89,1,89,1,89,3,89,1697,8,89,1,89,1,89,1,90, - 1,90,1,90,3,90,1704,8,90,1,90,1,90,1,91,1,91,1,91,5,91,1711,8,91,10,91, - 12,91,1714,9,91,1,91,3,91,1717,8,91,1,92,1,92,1,93,1,93,1,93,1,93,1,93, - 1,93,3,93,1727,8,93,3,93,1729,8,93,1,94,3,94,1732,8,94,1,94,1,94,1,94, - 1,94,1,94,1,94,3,94,1740,8,94,1,95,1,95,1,95,3,95,1745,8,95,1,96,1,96, - 1,97,1,97,1,98,1,98,1,99,1,99,3,99,1755,8,99,1,100,1,100,1,100,3,100, - 1760,8,100,1,101,1,101,1,101,1,101,1,102,1,102,1,102,1,102,1,103,1,103, - 3,103,1772,8,103,1,104,1,104,5,104,1776,8,104,10,104,12,104,1779,9,104, - 1,104,1,104,1,105,1,105,1,105,1,105,1,105,3,105,1788,8,105,1,106,1,106, - 5,106,1792,8,106,10,106,12,106,1795,9,106,1,106,1,106,1,107,1,107,1,107, - 1,107,1,107,3,107,1804,8,107,1,107,0,3,94,142,168,108,0,2,4,6,8,10,12, - 14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58, - 60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104, - 106,108,110,112,114,116,118,120,122,124,126,128,130,132,134,136,138,140, - 142,144,146,148,150,152,154,156,158,160,162,164,166,168,170,172,174,176, - 178,180,182,184,186,188,190,192,194,196,198,200,202,204,206,208,210,212, - 214,0,18,2,0,34,34,39,39,2,0,19,19,86,86,2,0,49,49,58,58,3,0,1,1,4,4, - 8,8,4,0,1,1,3,4,8,8,92,92,2,0,58,58,85,85,2,0,1,1,4,4,2,0,70,70,135,135, - 2,0,7,7,23,24,2,0,33,33,56,56,2,0,81,81,88,88,3,0,10,10,57,57,103,103, - 2,0,46,46,60,60,1,0,124,125,2,0,137,137,159,159,7,0,22,22,43,43,63,64, - 80,80,90,90,113,113,120,120,20,0,1,13,15,21,23,27,29,31,33,33,35,38,40, - 42,44,47,49,49,51,58,60,61,65,65,67,67,69,79,81,89,91,96,98,105,107,112, - 114,115,117,118,4,0,21,21,33,33,44,44,54,54,2046,0,219,1,0,0,0,2,226, - 1,0,0,0,4,228,1,0,0,0,6,230,1,0,0,0,8,236,1,0,0,0,10,259,1,0,0,0,12,261, - 1,0,0,0,14,268,1,0,0,0,16,275,1,0,0,0,18,288,1,0,0,0,20,300,1,0,0,0,22, - 309,1,0,0,0,24,317,1,0,0,0,26,339,1,0,0,0,28,354,1,0,0,0,30,363,1,0,0, - 0,32,367,1,0,0,0,34,371,1,0,0,0,36,373,1,0,0,0,38,382,1,0,0,0,40,386, - 1,0,0,0,42,400,1,0,0,0,44,413,1,0,0,0,46,460,1,0,0,0,48,464,1,0,0,0,50, - 501,1,0,0,0,52,504,1,0,0,0,54,569,1,0,0,0,56,575,1,0,0,0,58,581,1,0,0, - 0,60,585,1,0,0,0,62,591,1,0,0,0,64,609,1,0,0,0,66,612,1,0,0,0,68,615, - 1,0,0,0,70,631,1,0,0,0,72,639,1,0,0,0,74,645,1,0,0,0,76,648,1,0,0,0,78, - 651,1,0,0,0,80,655,1,0,0,0,82,659,1,0,0,0,84,689,1,0,0,0,86,691,1,0,0, - 0,88,694,1,0,0,0,90,697,1,0,0,0,92,706,1,0,0,0,94,729,1,0,0,0,96,793, - 1,0,0,0,98,798,1,0,0,0,100,809,1,0,0,0,102,811,1,0,0,0,104,826,1,0,0, - 0,106,831,1,0,0,0,108,839,1,0,0,0,110,857,1,0,0,0,112,859,1,0,0,0,114, - 867,1,0,0,0,116,872,1,0,0,0,118,880,1,0,0,0,120,884,1,0,0,0,122,888,1, - 0,0,0,124,894,1,0,0,0,126,903,1,0,0,0,128,917,1,0,0,0,130,919,1,0,0,0, - 132,984,1,0,0,0,134,993,1,0,0,0,136,995,1,0,0,0,138,1006,1,0,0,0,140, - 1022,1,0,0,0,142,1298,1,0,0,0,144,1488,1,0,0,0,146,1490,1,0,0,0,148,1498, - 1,0,0,0,150,1508,1,0,0,0,152,1510,1,0,0,0,154,1541,1,0,0,0,156,1554,1, - 0,0,0,158,1556,1,0,0,0,160,1591,1,0,0,0,162,1593,1,0,0,0,164,1611,1,0, - 0,0,166,1613,1,0,0,0,168,1634,1,0,0,0,170,1656,1,0,0,0,172,1667,1,0,0, - 0,174,1680,1,0,0,0,176,1682,1,0,0,0,178,1693,1,0,0,0,180,1703,1,0,0,0, - 182,1707,1,0,0,0,184,1718,1,0,0,0,186,1728,1,0,0,0,188,1731,1,0,0,0,190, - 1744,1,0,0,0,192,1746,1,0,0,0,194,1748,1,0,0,0,196,1750,1,0,0,0,198,1754, - 1,0,0,0,200,1759,1,0,0,0,202,1761,1,0,0,0,204,1765,1,0,0,0,206,1771,1, - 0,0,0,208,1773,1,0,0,0,210,1787,1,0,0,0,212,1789,1,0,0,0,214,1803,1,0, - 0,0,216,218,3,2,1,0,217,216,1,0,0,0,218,221,1,0,0,0,219,217,1,0,0,0,219, - 220,1,0,0,0,220,222,1,0,0,0,221,219,1,0,0,0,222,223,5,0,0,1,223,1,1,0, - 0,0,224,227,3,6,3,0,225,227,3,10,5,0,226,224,1,0,0,0,226,225,1,0,0,0, - 227,3,1,0,0,0,228,229,3,142,71,0,229,5,1,0,0,0,230,231,5,59,0,0,231,234, - 3,200,100,0,232,233,5,133,0,0,233,235,3,4,2,0,234,232,1,0,0,0,234,235, - 1,0,0,0,235,7,1,0,0,0,236,241,3,166,83,0,237,238,5,135,0,0,238,240,3, - 166,83,0,239,237,1,0,0,0,240,243,1,0,0,0,241,239,1,0,0,0,241,242,1,0, - 0,0,242,245,1,0,0,0,243,241,1,0,0,0,244,246,5,135,0,0,245,244,1,0,0,0, - 245,246,1,0,0,0,246,9,1,0,0,0,247,260,3,12,6,0,248,260,3,14,7,0,249,260, - 3,18,9,0,250,260,3,20,10,0,251,260,3,22,11,0,252,260,3,26,13,0,253,260, - 3,24,12,0,254,260,3,28,14,0,255,260,3,30,15,0,256,260,3,36,18,0,257,260, - 3,32,16,0,258,260,3,34,17,0,259,247,1,0,0,0,259,248,1,0,0,0,259,249,1, - 0,0,0,259,250,1,0,0,0,259,251,1,0,0,0,259,252,1,0,0,0,259,253,1,0,0,0, - 259,254,1,0,0,0,259,255,1,0,0,0,259,256,1,0,0,0,259,257,1,0,0,0,259,258, - 1,0,0,0,260,11,1,0,0,0,261,263,5,84,0,0,262,264,3,4,2,0,263,262,1,0,0, - 0,263,264,1,0,0,0,264,266,1,0,0,0,265,267,5,170,0,0,266,265,1,0,0,0,266, - 267,1,0,0,0,267,13,1,0,0,0,268,270,5,97,0,0,269,271,3,4,2,0,270,269,1, - 0,0,0,270,271,1,0,0,0,271,273,1,0,0,0,272,274,5,170,0,0,273,272,1,0,0, - 0,273,274,1,0,0,0,274,15,1,0,0,0,275,284,5,14,0,0,276,277,5,149,0,0,277, - 280,3,200,100,0,278,279,5,134,0,0,279,281,3,200,100,0,280,278,1,0,0,0, - 280,281,1,0,0,0,281,282,1,0,0,0,282,283,5,169,0,0,283,285,1,0,0,0,284, - 276,1,0,0,0,284,285,1,0,0,0,285,286,1,0,0,0,286,287,3,36,18,0,287,17, - 1,0,0,0,288,289,5,106,0,0,289,293,3,36,18,0,290,292,3,16,8,0,291,290, - 1,0,0,0,292,295,1,0,0,0,293,291,1,0,0,0,293,294,1,0,0,0,294,298,1,0,0, - 0,295,293,1,0,0,0,296,297,5,32,0,0,297,299,3,36,18,0,298,296,1,0,0,0, - 298,299,1,0,0,0,299,19,1,0,0,0,300,301,5,45,0,0,301,302,5,149,0,0,302, - 303,3,4,2,0,303,304,5,169,0,0,304,307,3,10,5,0,305,306,5,26,0,0,306,308, - 3,10,5,0,307,305,1,0,0,0,307,308,1,0,0,0,308,21,1,0,0,0,309,310,5,116, - 0,0,310,311,5,149,0,0,311,312,3,4,2,0,312,313,5,169,0,0,313,315,3,10, - 5,0,314,316,5,170,0,0,315,314,1,0,0,0,315,316,1,0,0,0,316,23,1,0,0,0, - 317,318,5,36,0,0,318,322,5,149,0,0,319,323,3,6,3,0,320,323,3,30,15,0, - 321,323,3,4,2,0,322,319,1,0,0,0,322,320,1,0,0,0,322,321,1,0,0,0,322,323, - 1,0,0,0,323,324,1,0,0,0,324,326,5,170,0,0,325,327,3,4,2,0,326,325,1,0, - 0,0,326,327,1,0,0,0,327,328,1,0,0,0,328,332,5,170,0,0,329,333,3,6,3,0, - 330,333,3,30,15,0,331,333,3,4,2,0,332,329,1,0,0,0,332,330,1,0,0,0,332, - 331,1,0,0,0,332,333,1,0,0,0,333,334,1,0,0,0,334,335,5,169,0,0,335,337, - 3,10,5,0,336,338,5,170,0,0,337,336,1,0,0,0,337,338,1,0,0,0,338,25,1,0, - 0,0,339,340,5,36,0,0,340,341,5,149,0,0,341,342,5,59,0,0,342,345,3,200, - 100,0,343,344,5,135,0,0,344,346,3,200,100,0,345,343,1,0,0,0,345,346,1, - 0,0,0,346,347,1,0,0,0,347,348,5,47,0,0,348,349,3,4,2,0,349,350,5,169, - 0,0,350,352,3,10,5,0,351,353,5,170,0,0,352,351,1,0,0,0,352,353,1,0,0, - 0,353,27,1,0,0,0,354,355,7,0,0,0,355,356,3,200,100,0,356,358,5,149,0, - 0,357,359,3,8,4,0,358,357,1,0,0,0,358,359,1,0,0,0,359,360,1,0,0,0,360, - 361,5,169,0,0,361,362,3,36,18,0,362,29,1,0,0,0,363,364,3,4,2,0,364,365, - 5,133,0,0,365,366,3,4,2,0,366,31,1,0,0,0,367,369,3,4,2,0,368,370,5,170, - 0,0,369,368,1,0,0,0,369,370,1,0,0,0,370,33,1,0,0,0,371,372,5,170,0,0, - 372,35,1,0,0,0,373,377,5,147,0,0,374,376,3,2,1,0,375,374,1,0,0,0,376, - 379,1,0,0,0,377,375,1,0,0,0,377,378,1,0,0,0,378,380,1,0,0,0,379,377,1, - 0,0,0,380,381,5,167,0,0,381,37,1,0,0,0,382,383,3,4,2,0,383,384,5,134, - 0,0,384,385,3,4,2,0,385,39,1,0,0,0,386,391,3,38,19,0,387,388,5,135,0, - 0,388,390,3,38,19,0,389,387,1,0,0,0,390,393,1,0,0,0,391,389,1,0,0,0,391, - 392,1,0,0,0,392,395,1,0,0,0,393,391,1,0,0,0,394,396,5,135,0,0,395,394, - 1,0,0,0,395,396,1,0,0,0,396,41,1,0,0,0,397,401,3,48,24,0,398,401,3,52, - 26,0,399,401,3,154,77,0,400,397,1,0,0,0,400,398,1,0,0,0,400,399,1,0,0, - 0,401,403,1,0,0,0,402,404,5,170,0,0,403,402,1,0,0,0,403,404,1,0,0,0,404, - 405,1,0,0,0,405,406,5,0,0,1,406,43,1,0,0,0,407,414,3,52,26,0,408,409, - 5,149,0,0,409,410,3,48,24,0,410,411,5,169,0,0,411,414,1,0,0,0,412,414, - 3,204,102,0,413,407,1,0,0,0,413,408,1,0,0,0,413,412,1,0,0,0,414,45,1, - 0,0,0,415,416,5,28,0,0,416,419,5,1,0,0,417,418,5,11,0,0,418,420,5,65, - 0,0,419,417,1,0,0,0,419,420,1,0,0,0,420,461,1,0,0,0,421,424,5,28,0,0, - 422,423,5,11,0,0,423,425,5,65,0,0,424,422,1,0,0,0,424,425,1,0,0,0,425, - 461,1,0,0,0,426,427,5,109,0,0,427,430,5,1,0,0,428,429,5,11,0,0,429,431, - 5,65,0,0,430,428,1,0,0,0,430,431,1,0,0,0,431,461,1,0,0,0,432,433,5,109, - 0,0,433,436,5,25,0,0,434,435,5,11,0,0,435,437,5,65,0,0,436,434,1,0,0, - 0,436,437,1,0,0,0,437,461,1,0,0,0,438,441,5,109,0,0,439,440,5,11,0,0, - 440,442,5,65,0,0,441,439,1,0,0,0,441,442,1,0,0,0,442,461,1,0,0,0,443, - 444,5,50,0,0,444,447,5,1,0,0,445,446,5,11,0,0,446,448,5,65,0,0,447,445, - 1,0,0,0,447,448,1,0,0,0,448,461,1,0,0,0,449,450,5,50,0,0,450,453,5,25, - 0,0,451,452,5,11,0,0,452,454,5,65,0,0,453,451,1,0,0,0,453,454,1,0,0,0, - 454,461,1,0,0,0,455,458,5,50,0,0,456,457,5,11,0,0,457,459,5,65,0,0,458, - 456,1,0,0,0,458,459,1,0,0,0,459,461,1,0,0,0,460,415,1,0,0,0,460,421,1, - 0,0,0,460,426,1,0,0,0,460,432,1,0,0,0,460,438,1,0,0,0,460,443,1,0,0,0, - 460,449,1,0,0,0,460,455,1,0,0,0,461,462,1,0,0,0,462,463,3,44,22,0,463, - 47,1,0,0,0,464,468,3,44,22,0,465,467,3,46,23,0,466,465,1,0,0,0,467,470, - 1,0,0,0,468,466,1,0,0,0,468,469,1,0,0,0,469,472,1,0,0,0,470,468,1,0,0, - 0,471,473,3,50,25,0,472,471,1,0,0,0,472,473,1,0,0,0,473,49,1,0,0,0,474, - 475,5,61,0,0,475,477,3,142,71,0,476,478,5,158,0,0,477,476,1,0,0,0,477, - 478,1,0,0,0,478,481,1,0,0,0,479,480,5,135,0,0,480,482,3,142,71,0,481, - 479,1,0,0,0,481,482,1,0,0,0,482,485,1,0,0,0,483,484,5,118,0,0,484,486, - 5,98,0,0,485,483,1,0,0,0,485,486,1,0,0,0,486,502,1,0,0,0,487,488,5,61, - 0,0,488,490,3,142,71,0,489,491,5,158,0,0,490,489,1,0,0,0,490,491,1,0, - 0,0,491,494,1,0,0,0,492,493,5,118,0,0,493,495,5,98,0,0,494,492,1,0,0, - 0,494,495,1,0,0,0,495,496,1,0,0,0,496,497,5,70,0,0,497,498,3,142,71,0, - 498,502,1,0,0,0,499,500,5,70,0,0,500,502,3,142,71,0,501,474,1,0,0,0,501, - 487,1,0,0,0,501,499,1,0,0,0,502,51,1,0,0,0,503,505,3,54,27,0,504,503, - 1,0,0,0,504,505,1,0,0,0,505,506,1,0,0,0,506,508,5,91,0,0,507,509,5,25, - 0,0,508,507,1,0,0,0,508,509,1,0,0,0,509,511,1,0,0,0,510,512,3,56,28,0, - 511,510,1,0,0,0,511,512,1,0,0,0,512,513,1,0,0,0,513,515,3,138,69,0,514, - 516,3,58,29,0,515,514,1,0,0,0,515,516,1,0,0,0,516,518,1,0,0,0,517,519, - 3,60,30,0,518,517,1,0,0,0,518,519,1,0,0,0,519,521,1,0,0,0,520,522,3,64, - 32,0,521,520,1,0,0,0,521,522,1,0,0,0,522,524,1,0,0,0,523,525,3,66,33, - 0,524,523,1,0,0,0,524,525,1,0,0,0,525,530,1,0,0,0,526,528,5,111,0,0,527, - 526,1,0,0,0,527,528,1,0,0,0,528,529,1,0,0,0,529,531,3,102,51,0,530,527, - 1,0,0,0,530,531,1,0,0,0,531,533,1,0,0,0,532,534,3,68,34,0,533,532,1,0, - 0,0,533,534,1,0,0,0,534,537,1,0,0,0,535,536,5,118,0,0,536,538,7,1,0,0, - 537,535,1,0,0,0,537,538,1,0,0,0,538,541,1,0,0,0,539,540,5,118,0,0,540, - 542,5,102,0,0,541,539,1,0,0,0,541,542,1,0,0,0,542,544,1,0,0,0,543,545, - 3,74,37,0,544,543,1,0,0,0,544,545,1,0,0,0,545,547,1,0,0,0,546,548,3,76, - 38,0,547,546,1,0,0,0,547,548,1,0,0,0,548,551,1,0,0,0,549,550,5,111,0, - 0,550,552,3,102,51,0,551,549,1,0,0,0,551,552,1,0,0,0,552,554,1,0,0,0, - 553,555,3,62,31,0,554,553,1,0,0,0,554,555,1,0,0,0,555,557,1,0,0,0,556, - 558,3,78,39,0,557,556,1,0,0,0,557,558,1,0,0,0,558,560,1,0,0,0,559,561, - 3,82,41,0,560,559,1,0,0,0,560,561,1,0,0,0,561,564,1,0,0,0,562,565,3,84, - 42,0,563,565,3,86,43,0,564,562,1,0,0,0,564,563,1,0,0,0,564,565,1,0,0, - 0,565,567,1,0,0,0,566,568,3,88,44,0,567,566,1,0,0,0,567,568,1,0,0,0,568, - 53,1,0,0,0,569,571,5,118,0,0,570,572,5,82,0,0,571,570,1,0,0,0,571,572, - 1,0,0,0,572,573,1,0,0,0,573,574,3,158,79,0,574,55,1,0,0,0,575,576,5,101, - 0,0,576,579,5,125,0,0,577,578,5,118,0,0,578,580,5,98,0,0,579,577,1,0, - 0,0,579,580,1,0,0,0,580,57,1,0,0,0,581,582,5,37,0,0,582,583,3,94,47,0, - 583,59,1,0,0,0,584,586,7,2,0,0,585,584,1,0,0,0,585,586,1,0,0,0,586,587, - 1,0,0,0,587,588,5,5,0,0,588,589,5,53,0,0,589,590,3,136,68,0,590,61,1, - 0,0,0,591,592,5,117,0,0,592,593,3,200,100,0,593,594,5,6,0,0,594,595,5, - 149,0,0,595,596,3,116,58,0,596,606,5,169,0,0,597,598,5,135,0,0,598,599, - 3,200,100,0,599,600,5,6,0,0,600,601,5,149,0,0,601,602,3,116,58,0,602, - 603,5,169,0,0,603,605,1,0,0,0,604,597,1,0,0,0,605,608,1,0,0,0,606,604, - 1,0,0,0,606,607,1,0,0,0,607,63,1,0,0,0,608,606,1,0,0,0,609,610,5,78,0, - 0,610,611,3,142,71,0,611,65,1,0,0,0,612,613,5,115,0,0,613,614,3,142,71, - 0,614,67,1,0,0,0,615,616,5,40,0,0,616,629,5,11,0,0,617,618,7,1,0,0,618, - 619,5,149,0,0,619,620,3,136,68,0,620,621,5,169,0,0,621,630,1,0,0,0,622, - 623,5,41,0,0,623,624,5,93,0,0,624,625,5,149,0,0,625,626,3,70,35,0,626, - 627,5,169,0,0,627,630,1,0,0,0,628,630,3,136,68,0,629,617,1,0,0,0,629, - 622,1,0,0,0,629,628,1,0,0,0,630,69,1,0,0,0,631,636,3,72,36,0,632,633, - 5,135,0,0,633,635,3,72,36,0,634,632,1,0,0,0,635,638,1,0,0,0,636,634,1, - 0,0,0,636,637,1,0,0,0,637,71,1,0,0,0,638,636,1,0,0,0,639,641,5,149,0, - 0,640,642,3,136,68,0,641,640,1,0,0,0,641,642,1,0,0,0,642,643,1,0,0,0, - 643,644,5,169,0,0,644,73,1,0,0,0,645,646,5,42,0,0,646,647,3,142,71,0, - 647,75,1,0,0,0,648,649,5,79,0,0,649,650,3,142,71,0,650,77,1,0,0,0,651, - 652,5,73,0,0,652,653,5,11,0,0,653,654,3,106,53,0,654,79,1,0,0,0,655,656, - 5,73,0,0,656,657,5,11,0,0,657,658,3,136,68,0,658,81,1,0,0,0,659,660,5, - 61,0,0,660,661,3,104,52,0,661,662,5,11,0,0,662,663,3,136,68,0,663,83, - 1,0,0,0,664,665,5,61,0,0,665,667,3,142,71,0,666,668,5,158,0,0,667,666, - 1,0,0,0,667,668,1,0,0,0,668,671,1,0,0,0,669,670,5,135,0,0,670,672,3,142, - 71,0,671,669,1,0,0,0,671,672,1,0,0,0,672,675,1,0,0,0,673,674,5,118,0, - 0,674,676,5,98,0,0,675,673,1,0,0,0,675,676,1,0,0,0,676,690,1,0,0,0,677, - 678,5,61,0,0,678,680,3,142,71,0,679,681,5,158,0,0,680,679,1,0,0,0,680, - 681,1,0,0,0,681,684,1,0,0,0,682,683,5,118,0,0,683,685,5,98,0,0,684,682, - 1,0,0,0,684,685,1,0,0,0,685,686,1,0,0,0,686,687,5,70,0,0,687,688,3,142, - 71,0,688,690,1,0,0,0,689,664,1,0,0,0,689,677,1,0,0,0,690,85,1,0,0,0,691, - 692,5,70,0,0,692,693,3,142,71,0,693,87,1,0,0,0,694,695,5,94,0,0,695,696, - 3,112,56,0,696,89,1,0,0,0,697,698,5,112,0,0,698,703,3,92,46,0,699,700, - 5,135,0,0,700,702,3,92,46,0,701,699,1,0,0,0,702,705,1,0,0,0,703,701,1, - 0,0,0,703,704,1,0,0,0,704,91,1,0,0,0,705,703,1,0,0,0,706,707,5,149,0, - 0,707,712,3,142,71,0,708,709,5,135,0,0,709,711,3,142,71,0,710,708,1,0, - 0,0,711,714,1,0,0,0,712,710,1,0,0,0,712,713,1,0,0,0,713,715,1,0,0,0,714, - 712,1,0,0,0,715,716,5,169,0,0,716,93,1,0,0,0,717,718,6,47,-1,0,718,720, - 3,168,84,0,719,721,5,31,0,0,720,719,1,0,0,0,720,721,1,0,0,0,721,723,1, - 0,0,0,722,724,3,102,51,0,723,722,1,0,0,0,723,724,1,0,0,0,724,730,1,0, - 0,0,725,726,5,149,0,0,726,727,3,94,47,0,727,728,5,169,0,0,728,730,1,0, - 0,0,729,717,1,0,0,0,729,725,1,0,0,0,730,745,1,0,0,0,731,732,10,3,0,0, - 732,733,3,98,49,0,733,734,3,94,47,4,734,744,1,0,0,0,735,737,10,4,0,0, - 736,738,3,96,48,0,737,736,1,0,0,0,737,738,1,0,0,0,738,739,1,0,0,0,739, - 740,5,53,0,0,740,741,3,94,47,0,741,742,3,100,50,0,742,744,1,0,0,0,743, - 731,1,0,0,0,743,735,1,0,0,0,744,747,1,0,0,0,745,743,1,0,0,0,745,746,1, - 0,0,0,746,95,1,0,0,0,747,745,1,0,0,0,748,750,7,3,0,0,749,748,1,0,0,0, - 749,750,1,0,0,0,750,751,1,0,0,0,751,760,5,49,0,0,752,754,5,49,0,0,753, - 755,7,3,0,0,754,753,1,0,0,0,754,755,1,0,0,0,755,760,1,0,0,0,756,760,7, - 3,0,0,757,760,5,3,0,0,758,760,5,92,0,0,759,749,1,0,0,0,759,752,1,0,0, - 0,759,756,1,0,0,0,759,757,1,0,0,0,759,758,1,0,0,0,760,794,1,0,0,0,761, - 763,7,4,0,0,762,761,1,0,0,0,762,763,1,0,0,0,763,764,1,0,0,0,764,766,7, - 5,0,0,765,767,5,74,0,0,766,765,1,0,0,0,766,767,1,0,0,0,767,776,1,0,0, - 0,768,770,7,5,0,0,769,771,5,74,0,0,770,769,1,0,0,0,770,771,1,0,0,0,771, - 773,1,0,0,0,772,774,7,4,0,0,773,772,1,0,0,0,773,774,1,0,0,0,774,776,1, - 0,0,0,775,762,1,0,0,0,775,768,1,0,0,0,776,794,1,0,0,0,777,779,7,6,0,0, - 778,777,1,0,0,0,778,779,1,0,0,0,779,780,1,0,0,0,780,782,5,38,0,0,781, - 783,5,74,0,0,782,781,1,0,0,0,782,783,1,0,0,0,783,792,1,0,0,0,784,786, - 5,38,0,0,785,787,5,74,0,0,786,785,1,0,0,0,786,787,1,0,0,0,787,789,1,0, - 0,0,788,790,7,6,0,0,789,788,1,0,0,0,789,790,1,0,0,0,790,792,1,0,0,0,791, - 778,1,0,0,0,791,784,1,0,0,0,792,794,1,0,0,0,793,759,1,0,0,0,793,775,1, - 0,0,0,793,791,1,0,0,0,794,97,1,0,0,0,795,796,5,18,0,0,796,799,5,53,0, - 0,797,799,5,135,0,0,798,795,1,0,0,0,798,797,1,0,0,0,799,99,1,0,0,0,800, - 801,5,71,0,0,801,810,3,136,68,0,802,803,5,111,0,0,803,804,5,149,0,0,804, - 805,3,136,68,0,805,806,5,169,0,0,806,810,1,0,0,0,807,808,5,111,0,0,808, - 810,3,136,68,0,809,800,1,0,0,0,809,802,1,0,0,0,809,807,1,0,0,0,810,101, - 1,0,0,0,811,812,5,89,0,0,812,814,3,110,55,0,813,815,5,158,0,0,814,813, - 1,0,0,0,814,815,1,0,0,0,815,818,1,0,0,0,816,817,5,70,0,0,817,819,3,110, - 55,0,818,816,1,0,0,0,818,819,1,0,0,0,819,824,1,0,0,0,820,821,5,149,0, - 0,821,822,3,200,100,0,822,823,5,169,0,0,823,825,1,0,0,0,824,820,1,0,0, - 0,824,825,1,0,0,0,825,103,1,0,0,0,826,829,3,142,71,0,827,828,7,7,0,0, - 828,830,3,142,71,0,829,827,1,0,0,0,829,830,1,0,0,0,830,105,1,0,0,0,831, - 836,3,108,54,0,832,833,5,135,0,0,833,835,3,108,54,0,834,832,1,0,0,0,835, - 838,1,0,0,0,836,834,1,0,0,0,836,837,1,0,0,0,837,107,1,0,0,0,838,836,1, - 0,0,0,839,841,3,142,71,0,840,842,7,8,0,0,841,840,1,0,0,0,841,842,1,0, - 0,0,842,845,1,0,0,0,843,844,5,69,0,0,844,846,7,9,0,0,845,843,1,0,0,0, - 845,846,1,0,0,0,846,849,1,0,0,0,847,848,5,16,0,0,848,850,5,127,0,0,849, - 847,1,0,0,0,849,850,1,0,0,0,850,109,1,0,0,0,851,858,3,204,102,0,852,855, - 3,188,94,0,853,854,5,171,0,0,854,856,3,188,94,0,855,853,1,0,0,0,855,856, - 1,0,0,0,856,858,1,0,0,0,857,851,1,0,0,0,857,852,1,0,0,0,858,111,1,0,0, - 0,859,864,3,114,57,0,860,861,5,135,0,0,861,863,3,114,57,0,862,860,1,0, - 0,0,863,866,1,0,0,0,864,862,1,0,0,0,864,865,1,0,0,0,865,113,1,0,0,0,866, - 864,1,0,0,0,867,868,3,200,100,0,868,869,5,141,0,0,869,870,3,190,95,0, - 870,115,1,0,0,0,871,873,3,118,59,0,872,871,1,0,0,0,872,873,1,0,0,0,873, - 875,1,0,0,0,874,876,3,120,60,0,875,874,1,0,0,0,875,876,1,0,0,0,876,878, - 1,0,0,0,877,879,3,124,62,0,878,877,1,0,0,0,878,879,1,0,0,0,879,117,1, - 0,0,0,880,881,5,76,0,0,881,882,5,11,0,0,882,883,3,136,68,0,883,119,1, - 0,0,0,884,885,5,73,0,0,885,886,5,11,0,0,886,887,3,106,53,0,887,121,1, - 0,0,0,888,889,5,119,0,0,889,890,5,40,0,0,890,891,5,149,0,0,891,892,3, - 78,39,0,892,893,5,169,0,0,893,123,1,0,0,0,894,895,7,10,0,0,895,896,3, - 126,63,0,896,125,1,0,0,0,897,904,3,128,64,0,898,899,5,9,0,0,899,900,3, - 128,64,0,900,901,5,2,0,0,901,902,3,128,64,0,902,904,1,0,0,0,903,897,1, - 0,0,0,903,898,1,0,0,0,904,127,1,0,0,0,905,906,5,20,0,0,906,918,5,87,0, - 0,907,908,5,108,0,0,908,918,5,77,0,0,909,910,5,108,0,0,910,918,5,35,0, - 0,911,912,3,142,71,0,912,913,5,77,0,0,913,918,1,0,0,0,914,915,3,142,71, - 0,915,916,5,35,0,0,916,918,1,0,0,0,917,905,1,0,0,0,917,907,1,0,0,0,917, - 909,1,0,0,0,917,911,1,0,0,0,917,914,1,0,0,0,918,129,1,0,0,0,919,920,3, - 142,71,0,920,921,5,0,0,1,921,131,1,0,0,0,922,923,3,200,100,0,923,924, - 5,149,0,0,924,925,3,200,100,0,925,932,3,132,66,0,926,927,5,135,0,0,927, - 928,3,200,100,0,928,929,3,132,66,0,929,931,1,0,0,0,930,926,1,0,0,0,931, - 934,1,0,0,0,932,930,1,0,0,0,932,933,1,0,0,0,933,936,1,0,0,0,934,932,1, - 0,0,0,935,937,5,135,0,0,936,935,1,0,0,0,936,937,1,0,0,0,937,938,1,0,0, - 0,938,939,5,169,0,0,939,985,1,0,0,0,940,941,3,200,100,0,941,942,5,149, - 0,0,942,947,3,202,101,0,943,944,5,135,0,0,944,946,3,202,101,0,945,943, - 1,0,0,0,946,949,1,0,0,0,947,945,1,0,0,0,947,948,1,0,0,0,948,951,1,0,0, - 0,949,947,1,0,0,0,950,952,5,135,0,0,951,950,1,0,0,0,951,952,1,0,0,0,952, - 953,1,0,0,0,953,954,5,169,0,0,954,985,1,0,0,0,955,956,3,200,100,0,956, - 957,5,149,0,0,957,962,3,132,66,0,958,959,5,135,0,0,959,961,3,132,66,0, - 960,958,1,0,0,0,961,964,1,0,0,0,962,960,1,0,0,0,962,963,1,0,0,0,963,966, - 1,0,0,0,964,962,1,0,0,0,965,967,5,135,0,0,966,965,1,0,0,0,966,967,1,0, - 0,0,967,968,1,0,0,0,968,969,5,169,0,0,969,985,1,0,0,0,970,971,3,200,100, - 0,971,973,5,149,0,0,972,974,3,136,68,0,973,972,1,0,0,0,973,974,1,0,0, - 0,974,975,1,0,0,0,975,976,5,169,0,0,976,985,1,0,0,0,977,979,3,200,100, - 0,978,980,3,200,100,0,979,978,1,0,0,0,980,981,1,0,0,0,981,979,1,0,0,0, - 981,982,1,0,0,0,982,985,1,0,0,0,983,985,3,200,100,0,984,922,1,0,0,0,984, - 940,1,0,0,0,984,955,1,0,0,0,984,970,1,0,0,0,984,977,1,0,0,0,984,983,1, - 0,0,0,985,133,1,0,0,0,986,988,3,200,100,0,987,989,3,200,100,0,988,987, - 1,0,0,0,989,990,1,0,0,0,990,988,1,0,0,0,990,991,1,0,0,0,991,994,1,0,0, - 0,992,994,3,200,100,0,993,986,1,0,0,0,993,992,1,0,0,0,994,135,1,0,0,0, - 995,1000,3,142,71,0,996,997,5,135,0,0,997,999,3,142,71,0,998,996,1,0, - 0,0,999,1002,1,0,0,0,1000,998,1,0,0,0,1000,1001,1,0,0,0,1001,1004,1,0, - 0,0,1002,1000,1,0,0,0,1003,1005,5,135,0,0,1004,1003,1,0,0,0,1004,1005, - 1,0,0,0,1005,137,1,0,0,0,1006,1011,3,140,70,0,1007,1008,5,135,0,0,1008, - 1010,3,140,70,0,1009,1007,1,0,0,0,1010,1013,1,0,0,0,1011,1009,1,0,0,0, - 1011,1012,1,0,0,0,1012,1015,1,0,0,0,1013,1011,1,0,0,0,1014,1016,5,135, - 0,0,1015,1014,1,0,0,0,1015,1016,1,0,0,0,1016,139,1,0,0,0,1017,1018,3, - 200,100,0,1018,1019,5,134,0,0,1019,1020,3,142,71,0,1020,1023,1,0,0,0, - 1021,1023,3,142,71,0,1022,1017,1,0,0,0,1022,1021,1,0,0,0,1023,141,1,0, - 0,0,1024,1025,6,71,-1,0,1025,1027,5,12,0,0,1026,1028,3,142,71,0,1027, - 1026,1,0,0,0,1027,1028,1,0,0,0,1028,1034,1,0,0,0,1029,1030,5,114,0,0, - 1030,1031,3,142,71,0,1031,1032,5,96,0,0,1032,1033,3,142,71,0,1033,1035, - 1,0,0,0,1034,1029,1,0,0,0,1035,1036,1,0,0,0,1036,1034,1,0,0,0,1036,1037, - 1,0,0,0,1037,1040,1,0,0,0,1038,1039,5,26,0,0,1039,1041,3,142,71,0,1040, - 1038,1,0,0,0,1040,1041,1,0,0,0,1041,1042,1,0,0,0,1042,1043,5,27,0,0,1043, - 1299,1,0,0,0,1044,1045,5,13,0,0,1045,1046,5,149,0,0,1046,1047,3,142,71, - 0,1047,1048,5,6,0,0,1048,1049,3,132,66,0,1049,1050,5,169,0,0,1050,1299, - 1,0,0,0,1051,1052,5,107,0,0,1052,1053,5,149,0,0,1053,1054,3,142,71,0, - 1054,1055,5,6,0,0,1055,1056,3,132,66,0,1056,1057,5,169,0,0,1057,1299, - 1,0,0,0,1058,1059,5,21,0,0,1059,1299,5,127,0,0,1060,1061,5,51,0,0,1061, - 1299,5,127,0,0,1062,1063,5,51,0,0,1063,1064,3,142,71,0,1064,1065,3,192, - 96,0,1065,1299,1,0,0,0,1066,1067,5,95,0,0,1067,1068,5,149,0,0,1068,1069, - 3,142,71,0,1069,1070,5,37,0,0,1070,1073,3,142,71,0,1071,1072,5,36,0,0, - 1072,1074,3,142,71,0,1073,1071,1,0,0,0,1073,1074,1,0,0,0,1074,1075,1, - 0,0,0,1075,1076,5,169,0,0,1076,1299,1,0,0,0,1077,1078,5,99,0,0,1078,1299, - 5,127,0,0,1079,1080,5,104,0,0,1080,1081,5,149,0,0,1081,1082,7,11,0,0, - 1082,1083,3,206,103,0,1083,1084,5,37,0,0,1084,1085,3,142,71,0,1085,1086, - 5,169,0,0,1086,1299,1,0,0,0,1087,1088,5,17,0,0,1088,1089,5,149,0,0,1089, - 1090,5,127,0,0,1090,1299,5,169,0,0,1091,1092,5,17,0,0,1092,1093,5,149, - 0,0,1093,1094,3,136,68,0,1094,1095,5,169,0,0,1095,1299,1,0,0,0,1096,1097, - 5,17,0,0,1097,1098,5,149,0,0,1098,1099,5,129,0,0,1099,1100,5,29,0,0,1100, - 1101,5,149,0,0,1101,1102,3,8,4,0,1102,1103,5,169,0,0,1103,1104,5,83,0, - 0,1104,1105,5,149,0,0,1105,1106,3,146,73,0,1106,1107,5,169,0,0,1107,1108, - 5,169,0,0,1108,1122,1,0,0,0,1109,1110,5,149,0,0,1110,1111,5,129,0,0,1111, - 1112,5,29,0,0,1112,1113,5,149,0,0,1113,1114,3,8,4,0,1114,1115,5,169,0, - 0,1115,1116,5,83,0,0,1116,1117,5,149,0,0,1117,1118,3,146,73,0,1118,1119, - 5,169,0,0,1119,1120,5,169,0,0,1120,1122,1,0,0,0,1121,1096,1,0,0,0,1121, - 1109,1,0,0,0,1122,1299,1,0,0,0,1123,1124,5,17,0,0,1124,1125,5,149,0,0, - 1125,1126,5,129,0,0,1126,1127,5,29,0,0,1127,1128,5,149,0,0,1128,1129, - 3,8,4,0,1129,1130,5,169,0,0,1130,1131,5,169,0,0,1131,1299,1,0,0,0,1132, - 1133,5,17,0,0,1133,1134,5,149,0,0,1134,1135,5,129,0,0,1135,1136,5,83, - 0,0,1136,1137,5,149,0,0,1137,1138,3,146,73,0,1138,1139,5,169,0,0,1139, - 1140,5,169,0,0,1140,1150,1,0,0,0,1141,1142,5,149,0,0,1142,1143,5,129, - 0,0,1143,1144,5,83,0,0,1144,1145,5,149,0,0,1145,1146,3,146,73,0,1146, - 1147,5,169,0,0,1147,1148,5,169,0,0,1148,1150,1,0,0,0,1149,1132,1,0,0, - 0,1149,1141,1,0,0,0,1150,1299,1,0,0,0,1151,1152,5,17,0,0,1152,1153,5, - 149,0,0,1153,1154,5,129,0,0,1154,1299,5,169,0,0,1155,1156,5,129,0,0,1156, - 1157,5,17,0,0,1157,1158,5,149,0,0,1158,1159,5,127,0,0,1159,1299,5,169, - 0,0,1160,1161,5,129,0,0,1161,1162,5,17,0,0,1162,1163,5,149,0,0,1163,1164, - 3,136,68,0,1164,1165,5,169,0,0,1165,1299,1,0,0,0,1166,1167,3,200,100, - 0,1167,1169,5,149,0,0,1168,1170,3,136,68,0,1169,1168,1,0,0,0,1169,1170, - 1,0,0,0,1170,1171,1,0,0,0,1171,1172,5,169,0,0,1172,1181,1,0,0,0,1173, - 1175,5,149,0,0,1174,1176,5,25,0,0,1175,1174,1,0,0,0,1175,1176,1,0,0,0, - 1176,1178,1,0,0,0,1177,1179,3,136,68,0,1178,1177,1,0,0,0,1178,1179,1, - 0,0,0,1179,1180,1,0,0,0,1180,1182,5,169,0,0,1181,1173,1,0,0,0,1181,1182, - 1,0,0,0,1182,1183,1,0,0,0,1183,1184,5,75,0,0,1184,1185,5,149,0,0,1185, - 1186,3,116,58,0,1186,1187,5,169,0,0,1187,1299,1,0,0,0,1188,1189,3,200, - 100,0,1189,1191,5,149,0,0,1190,1192,3,136,68,0,1191,1190,1,0,0,0,1191, - 1192,1,0,0,0,1192,1193,1,0,0,0,1193,1194,5,169,0,0,1194,1203,1,0,0,0, - 1195,1197,5,149,0,0,1196,1198,5,25,0,0,1197,1196,1,0,0,0,1197,1198,1, - 0,0,0,1198,1200,1,0,0,0,1199,1201,3,136,68,0,1200,1199,1,0,0,0,1200,1201, - 1,0,0,0,1201,1202,1,0,0,0,1202,1204,5,169,0,0,1203,1195,1,0,0,0,1203, - 1204,1,0,0,0,1204,1205,1,0,0,0,1205,1206,5,75,0,0,1206,1207,3,200,100, - 0,1207,1299,1,0,0,0,1208,1209,3,200,100,0,1209,1211,5,149,0,0,1210,1212, - 3,136,68,0,1211,1210,1,0,0,0,1211,1212,1,0,0,0,1212,1213,1,0,0,0,1213, - 1214,5,169,0,0,1214,1215,3,122,61,0,1215,1299,1,0,0,0,1216,1222,3,200, - 100,0,1217,1219,5,149,0,0,1218,1220,3,136,68,0,1219,1218,1,0,0,0,1219, - 1220,1,0,0,0,1220,1221,1,0,0,0,1221,1223,5,169,0,0,1222,1217,1,0,0,0, - 1222,1223,1,0,0,0,1223,1224,1,0,0,0,1224,1226,5,149,0,0,1225,1227,5,25, - 0,0,1226,1225,1,0,0,0,1226,1227,1,0,0,0,1227,1229,1,0,0,0,1228,1230,3, - 136,68,0,1229,1228,1,0,0,0,1229,1230,1,0,0,0,1230,1231,1,0,0,0,1231,1232, - 5,169,0,0,1232,1299,1,0,0,0,1233,1299,3,154,77,0,1234,1299,3,208,104, - 0,1235,1299,3,190,95,0,1236,1237,5,137,0,0,1237,1299,3,142,71,24,1238, - 1239,5,67,0,0,1239,1299,3,142,71,17,1240,1241,3,180,90,0,1241,1242,5, - 139,0,0,1242,1244,1,0,0,0,1243,1240,1,0,0,0,1243,1244,1,0,0,0,1244,1245, - 1,0,0,0,1245,1251,5,129,0,0,1246,1247,5,29,0,0,1247,1248,5,149,0,0,1248, - 1249,3,8,4,0,1249,1250,5,169,0,0,1250,1252,1,0,0,0,1251,1246,1,0,0,0, - 1251,1252,1,0,0,0,1252,1299,1,0,0,0,1253,1254,5,55,0,0,1254,1259,3,200, - 100,0,1255,1256,5,135,0,0,1256,1258,3,200,100,0,1257,1255,1,0,0,0,1258, - 1261,1,0,0,0,1259,1257,1,0,0,0,1259,1260,1,0,0,0,1260,1263,1,0,0,0,1261, - 1259,1,0,0,0,1262,1264,5,135,0,0,1263,1262,1,0,0,0,1263,1264,1,0,0,0, - 1264,1265,1,0,0,0,1265,1266,5,134,0,0,1266,1267,3,142,71,10,1267,1299, - 1,0,0,0,1268,1269,5,149,0,0,1269,1270,3,48,24,0,1270,1271,5,169,0,0,1271, - 1299,1,0,0,0,1272,1273,5,149,0,0,1273,1274,3,142,71,0,1274,1275,5,169, - 0,0,1275,1299,1,0,0,0,1276,1277,5,149,0,0,1277,1278,3,136,68,0,1278,1279, - 5,169,0,0,1279,1299,1,0,0,0,1280,1282,5,148,0,0,1281,1283,3,136,68,0, - 1282,1281,1,0,0,0,1282,1283,1,0,0,0,1283,1284,1,0,0,0,1284,1299,5,168, - 0,0,1285,1287,5,147,0,0,1286,1288,3,40,20,0,1287,1286,1,0,0,0,1287,1288, - 1,0,0,0,1288,1289,1,0,0,0,1289,1299,5,167,0,0,1290,1299,3,144,72,0,1291, - 1292,3,200,100,0,1292,1293,5,133,0,0,1293,1294,3,142,71,3,1294,1299,1, - 0,0,0,1295,1296,5,144,0,0,1296,1299,5,125,0,0,1297,1299,3,164,82,0,1298, - 1024,1,0,0,0,1298,1044,1,0,0,0,1298,1051,1,0,0,0,1298,1058,1,0,0,0,1298, - 1060,1,0,0,0,1298,1062,1,0,0,0,1298,1066,1,0,0,0,1298,1077,1,0,0,0,1298, - 1079,1,0,0,0,1298,1087,1,0,0,0,1298,1091,1,0,0,0,1298,1121,1,0,0,0,1298, - 1123,1,0,0,0,1298,1149,1,0,0,0,1298,1151,1,0,0,0,1298,1155,1,0,0,0,1298, - 1160,1,0,0,0,1298,1166,1,0,0,0,1298,1188,1,0,0,0,1298,1208,1,0,0,0,1298, - 1216,1,0,0,0,1298,1233,1,0,0,0,1298,1234,1,0,0,0,1298,1235,1,0,0,0,1298, - 1236,1,0,0,0,1298,1238,1,0,0,0,1298,1243,1,0,0,0,1298,1253,1,0,0,0,1298, - 1268,1,0,0,0,1298,1272,1,0,0,0,1298,1276,1,0,0,0,1298,1280,1,0,0,0,1298, - 1285,1,0,0,0,1298,1290,1,0,0,0,1298,1291,1,0,0,0,1298,1295,1,0,0,0,1298, - 1297,1,0,0,0,1299,1436,1,0,0,0,1300,1304,10,23,0,0,1301,1305,5,129,0, - 0,1302,1305,5,171,0,0,1303,1305,5,158,0,0,1304,1301,1,0,0,0,1304,1302, - 1,0,0,0,1304,1303,1,0,0,0,1305,1306,1,0,0,0,1306,1435,3,142,71,24,1307, - 1311,10,22,0,0,1308,1312,5,159,0,0,1309,1312,5,137,0,0,1310,1312,5,136, - 0,0,1311,1308,1,0,0,0,1311,1309,1,0,0,0,1311,1310,1,0,0,0,1312,1313,1, - 0,0,0,1313,1435,3,142,71,23,1314,1339,10,21,0,0,1315,1340,5,140,0,0,1316, - 1340,5,141,0,0,1317,1340,5,153,0,0,1318,1340,5,150,0,0,1319,1340,5,151, - 0,0,1320,1340,5,142,0,0,1321,1340,5,143,0,0,1322,1324,5,67,0,0,1323,1322, - 1,0,0,0,1323,1324,1,0,0,0,1324,1325,1,0,0,0,1325,1327,5,47,0,0,1326,1328, - 5,15,0,0,1327,1326,1,0,0,0,1327,1328,1,0,0,0,1328,1340,1,0,0,0,1329,1331, - 5,67,0,0,1330,1329,1,0,0,0,1330,1331,1,0,0,0,1331,1332,1,0,0,0,1332,1340, - 7,12,0,0,1333,1340,5,165,0,0,1334,1340,5,166,0,0,1335,1340,5,155,0,0, - 1336,1340,5,145,0,0,1337,1340,5,146,0,0,1338,1340,5,154,0,0,1339,1315, - 1,0,0,0,1339,1316,1,0,0,0,1339,1317,1,0,0,0,1339,1318,1,0,0,0,1339,1319, - 1,0,0,0,1339,1320,1,0,0,0,1339,1321,1,0,0,0,1339,1323,1,0,0,0,1339,1330, - 1,0,0,0,1339,1333,1,0,0,0,1339,1334,1,0,0,0,1339,1335,1,0,0,0,1339,1336, - 1,0,0,0,1339,1337,1,0,0,0,1339,1338,1,0,0,0,1340,1341,1,0,0,0,1341,1435, - 3,142,71,22,1342,1343,10,19,0,0,1343,1345,5,52,0,0,1344,1346,5,67,0,0, - 1345,1344,1,0,0,0,1345,1346,1,0,0,0,1346,1347,1,0,0,0,1347,1348,5,25, - 0,0,1348,1349,5,37,0,0,1349,1435,3,142,71,20,1350,1351,10,18,0,0,1351, - 1352,5,157,0,0,1352,1435,3,142,71,19,1353,1354,10,16,0,0,1354,1355,5, - 2,0,0,1355,1435,3,142,71,17,1356,1357,10,15,0,0,1357,1358,5,72,0,0,1358, - 1435,3,142,71,16,1359,1361,10,14,0,0,1360,1362,5,67,0,0,1361,1360,1,0, - 0,0,1361,1362,1,0,0,0,1362,1363,1,0,0,0,1363,1364,5,9,0,0,1364,1365,3, - 142,71,0,1365,1366,5,2,0,0,1366,1367,3,142,71,15,1367,1435,1,0,0,0,1368, - 1369,10,13,0,0,1369,1370,5,160,0,0,1370,1371,3,142,71,0,1371,1372,5,134, - 0,0,1372,1373,3,142,71,13,1373,1435,1,0,0,0,1374,1375,10,37,0,0,1375, - 1376,5,149,0,0,1376,1377,3,48,24,0,1377,1378,5,169,0,0,1378,1435,1,0, - 0,0,1379,1380,10,36,0,0,1380,1382,5,149,0,0,1381,1383,3,136,68,0,1382, - 1381,1,0,0,0,1382,1383,1,0,0,0,1383,1384,1,0,0,0,1384,1435,5,169,0,0, - 1385,1386,10,32,0,0,1386,1387,5,148,0,0,1387,1388,3,142,71,0,1388,1389, - 5,168,0,0,1389,1435,1,0,0,0,1390,1391,10,31,0,0,1391,1393,5,148,0,0,1392, - 1394,3,142,71,0,1393,1392,1,0,0,0,1393,1394,1,0,0,0,1394,1395,1,0,0,0, - 1395,1397,5,134,0,0,1396,1398,3,142,71,0,1397,1396,1,0,0,0,1397,1398, - 1,0,0,0,1398,1399,1,0,0,0,1399,1435,5,168,0,0,1400,1401,10,30,0,0,1401, - 1402,5,139,0,0,1402,1435,5,125,0,0,1403,1404,10,29,0,0,1404,1405,5,139, - 0,0,1405,1435,3,200,100,0,1406,1407,10,28,0,0,1407,1408,5,156,0,0,1408, - 1409,5,148,0,0,1409,1410,3,142,71,0,1410,1411,5,168,0,0,1411,1435,1,0, - 0,0,1412,1413,10,27,0,0,1413,1414,5,156,0,0,1414,1435,5,125,0,0,1415, - 1416,10,26,0,0,1416,1417,5,156,0,0,1417,1435,3,200,100,0,1418,1419,10, - 25,0,0,1419,1420,5,132,0,0,1420,1435,3,134,67,0,1421,1422,10,20,0,0,1422, - 1424,5,52,0,0,1423,1425,5,67,0,0,1424,1423,1,0,0,0,1424,1425,1,0,0,0, - 1425,1426,1,0,0,0,1426,1435,5,68,0,0,1427,1432,10,12,0,0,1428,1429,5, - 6,0,0,1429,1433,3,200,100,0,1430,1431,5,6,0,0,1431,1433,5,127,0,0,1432, - 1428,1,0,0,0,1432,1430,1,0,0,0,1433,1435,1,0,0,0,1434,1300,1,0,0,0,1434, - 1307,1,0,0,0,1434,1314,1,0,0,0,1434,1342,1,0,0,0,1434,1350,1,0,0,0,1434, - 1353,1,0,0,0,1434,1356,1,0,0,0,1434,1359,1,0,0,0,1434,1368,1,0,0,0,1434, - 1374,1,0,0,0,1434,1379,1,0,0,0,1434,1385,1,0,0,0,1434,1390,1,0,0,0,1434, - 1400,1,0,0,0,1434,1403,1,0,0,0,1434,1406,1,0,0,0,1434,1412,1,0,0,0,1434, - 1415,1,0,0,0,1434,1418,1,0,0,0,1434,1421,1,0,0,0,1434,1427,1,0,0,0,1435, - 1438,1,0,0,0,1436,1434,1,0,0,0,1436,1437,1,0,0,0,1437,143,1,0,0,0,1438, - 1436,1,0,0,0,1439,1440,5,149,0,0,1440,1445,3,200,100,0,1441,1442,5,135, - 0,0,1442,1444,3,200,100,0,1443,1441,1,0,0,0,1444,1447,1,0,0,0,1445,1443, - 1,0,0,0,1445,1446,1,0,0,0,1446,1449,1,0,0,0,1447,1445,1,0,0,0,1448,1450, - 5,135,0,0,1449,1448,1,0,0,0,1449,1450,1,0,0,0,1450,1451,1,0,0,0,1451, - 1452,5,169,0,0,1452,1467,1,0,0,0,1453,1458,3,200,100,0,1454,1455,5,135, - 0,0,1455,1457,3,200,100,0,1456,1454,1,0,0,0,1457,1460,1,0,0,0,1458,1456, - 1,0,0,0,1458,1459,1,0,0,0,1459,1462,1,0,0,0,1460,1458,1,0,0,0,1461,1463, - 5,135,0,0,1462,1461,1,0,0,0,1462,1463,1,0,0,0,1463,1467,1,0,0,0,1464, - 1465,5,149,0,0,1465,1467,5,169,0,0,1466,1439,1,0,0,0,1466,1453,1,0,0, - 0,1466,1464,1,0,0,0,1467,1468,1,0,0,0,1468,1471,5,128,0,0,1469,1472,3, - 142,71,0,1470,1472,3,36,18,0,1471,1469,1,0,0,0,1471,1470,1,0,0,0,1472, - 1489,1,0,0,0,1473,1474,5,55,0,0,1474,1479,3,200,100,0,1475,1476,5,135, - 0,0,1476,1478,3,200,100,0,1477,1475,1,0,0,0,1478,1481,1,0,0,0,1479,1477, - 1,0,0,0,1479,1480,1,0,0,0,1480,1483,1,0,0,0,1481,1479,1,0,0,0,1482,1484, - 5,135,0,0,1483,1482,1,0,0,0,1483,1484,1,0,0,0,1484,1485,1,0,0,0,1485, - 1486,5,134,0,0,1486,1487,3,142,71,0,1487,1489,1,0,0,0,1488,1466,1,0,0, - 0,1488,1473,1,0,0,0,1489,145,1,0,0,0,1490,1495,3,148,74,0,1491,1492,5, - 135,0,0,1492,1494,3,148,74,0,1493,1491,1,0,0,0,1494,1497,1,0,0,0,1495, - 1493,1,0,0,0,1495,1496,1,0,0,0,1496,147,1,0,0,0,1497,1495,1,0,0,0,1498, - 1499,3,142,71,0,1499,1500,5,6,0,0,1500,1501,3,200,100,0,1501,149,1,0, - 0,0,1502,1509,3,154,77,0,1503,1509,3,152,76,0,1504,1505,5,147,0,0,1505, - 1506,3,142,71,0,1506,1507,5,167,0,0,1507,1509,1,0,0,0,1508,1502,1,0,0, - 0,1508,1503,1,0,0,0,1508,1504,1,0,0,0,1509,151,1,0,0,0,1510,1511,5,183, - 0,0,1511,153,1,0,0,0,1512,1513,5,151,0,0,1513,1517,3,200,100,0,1514,1516, - 3,156,78,0,1515,1514,1,0,0,0,1516,1519,1,0,0,0,1517,1515,1,0,0,0,1517, - 1518,1,0,0,0,1518,1520,1,0,0,0,1519,1517,1,0,0,0,1520,1521,5,172,0,0, - 1521,1542,1,0,0,0,1522,1523,5,151,0,0,1523,1527,3,200,100,0,1524,1526, - 3,156,78,0,1525,1524,1,0,0,0,1526,1529,1,0,0,0,1527,1525,1,0,0,0,1527, - 1528,1,0,0,0,1528,1530,1,0,0,0,1529,1527,1,0,0,0,1530,1534,5,143,0,0, - 1531,1533,3,150,75,0,1532,1531,1,0,0,0,1533,1536,1,0,0,0,1534,1532,1, - 0,0,0,1534,1535,1,0,0,0,1535,1537,1,0,0,0,1536,1534,1,0,0,0,1537,1538, - 5,152,0,0,1538,1539,3,200,100,0,1539,1540,5,143,0,0,1540,1542,1,0,0,0, - 1541,1512,1,0,0,0,1541,1522,1,0,0,0,1542,155,1,0,0,0,1543,1544,3,200, - 100,0,1544,1545,5,141,0,0,1545,1546,3,206,103,0,1546,1555,1,0,0,0,1547, - 1548,3,200,100,0,1548,1549,5,141,0,0,1549,1550,5,147,0,0,1550,1551,3, - 142,71,0,1551,1552,5,167,0,0,1552,1555,1,0,0,0,1553,1555,3,200,100,0, - 1554,1543,1,0,0,0,1554,1547,1,0,0,0,1554,1553,1,0,0,0,1555,157,1,0,0, - 0,1556,1561,3,160,80,0,1557,1558,5,135,0,0,1558,1560,3,160,80,0,1559, - 1557,1,0,0,0,1560,1563,1,0,0,0,1561,1559,1,0,0,0,1561,1562,1,0,0,0,1562, - 1565,1,0,0,0,1563,1561,1,0,0,0,1564,1566,5,135,0,0,1565,1564,1,0,0,0, - 1565,1566,1,0,0,0,1566,159,1,0,0,0,1567,1569,3,200,100,0,1568,1570,3, - 162,81,0,1569,1568,1,0,0,0,1569,1570,1,0,0,0,1570,1574,1,0,0,0,1571,1572, - 5,111,0,0,1572,1573,5,54,0,0,1573,1575,3,162,81,0,1574,1571,1,0,0,0,1574, - 1575,1,0,0,0,1575,1576,1,0,0,0,1576,1581,5,6,0,0,1577,1579,5,67,0,0,1578, - 1577,1,0,0,0,1578,1579,1,0,0,0,1579,1580,1,0,0,0,1580,1582,5,62,0,0,1581, - 1578,1,0,0,0,1581,1582,1,0,0,0,1582,1583,1,0,0,0,1583,1584,5,149,0,0, - 1584,1585,3,48,24,0,1585,1586,5,169,0,0,1586,1592,1,0,0,0,1587,1588,3, - 142,71,0,1588,1589,5,6,0,0,1589,1590,3,200,100,0,1590,1592,1,0,0,0,1591, - 1567,1,0,0,0,1591,1587,1,0,0,0,1592,161,1,0,0,0,1593,1594,5,149,0,0,1594, - 1599,3,200,100,0,1595,1596,5,135,0,0,1596,1598,3,200,100,0,1597,1595, - 1,0,0,0,1598,1601,1,0,0,0,1599,1597,1,0,0,0,1599,1600,1,0,0,0,1600,1602, - 1,0,0,0,1601,1599,1,0,0,0,1602,1603,5,169,0,0,1603,163,1,0,0,0,1604,1612, - 3,204,102,0,1605,1606,3,180,90,0,1606,1607,5,139,0,0,1607,1609,1,0,0, - 0,1608,1605,1,0,0,0,1608,1609,1,0,0,0,1609,1610,1,0,0,0,1610,1612,3,166, - 83,0,1611,1604,1,0,0,0,1611,1608,1,0,0,0,1612,165,1,0,0,0,1613,1618,3, - 200,100,0,1614,1615,5,139,0,0,1615,1617,3,200,100,0,1616,1614,1,0,0,0, - 1617,1620,1,0,0,0,1618,1616,1,0,0,0,1618,1619,1,0,0,0,1619,167,1,0,0, - 0,1620,1618,1,0,0,0,1621,1622,6,84,-1,0,1622,1635,3,180,90,0,1623,1635, - 3,178,89,0,1624,1625,5,149,0,0,1625,1626,3,48,24,0,1626,1627,5,169,0, - 0,1627,1635,1,0,0,0,1628,1629,5,149,0,0,1629,1630,3,90,45,0,1630,1631, - 5,169,0,0,1631,1635,1,0,0,0,1632,1635,3,154,77,0,1633,1635,3,204,102, - 0,1634,1621,1,0,0,0,1634,1623,1,0,0,0,1634,1624,1,0,0,0,1634,1628,1,0, - 0,0,1634,1632,1,0,0,0,1634,1633,1,0,0,0,1635,1653,1,0,0,0,1636,1637,10, - 4,0,0,1637,1638,5,110,0,0,1638,1639,5,149,0,0,1639,1640,3,170,85,0,1640, - 1641,5,169,0,0,1641,1652,1,0,0,0,1642,1646,10,3,0,0,1643,1647,3,198,99, - 0,1644,1645,5,6,0,0,1645,1647,3,200,100,0,1646,1643,1,0,0,0,1646,1644, - 1,0,0,0,1647,1649,1,0,0,0,1648,1650,3,176,88,0,1649,1648,1,0,0,0,1649, - 1650,1,0,0,0,1650,1652,1,0,0,0,1651,1636,1,0,0,0,1651,1642,1,0,0,0,1652, - 1655,1,0,0,0,1653,1651,1,0,0,0,1653,1654,1,0,0,0,1654,169,1,0,0,0,1655, - 1653,1,0,0,0,1656,1661,3,172,86,0,1657,1658,5,135,0,0,1658,1660,3,172, - 86,0,1659,1657,1,0,0,0,1660,1663,1,0,0,0,1661,1659,1,0,0,0,1661,1662, - 1,0,0,0,1662,1665,1,0,0,0,1663,1661,1,0,0,0,1664,1666,5,135,0,0,1665, - 1664,1,0,0,0,1665,1666,1,0,0,0,1666,171,1,0,0,0,1667,1668,3,174,87,0, - 1668,1669,5,36,0,0,1669,1670,3,174,87,0,1670,1671,5,47,0,0,1671,1672, - 5,149,0,0,1672,1673,3,136,68,0,1673,1674,5,169,0,0,1674,173,1,0,0,0,1675, - 1676,5,149,0,0,1676,1677,3,136,68,0,1677,1678,5,169,0,0,1678,1681,1,0, - 0,0,1679,1681,3,142,71,0,1680,1675,1,0,0,0,1680,1679,1,0,0,0,1681,175, - 1,0,0,0,1682,1683,5,149,0,0,1683,1688,3,200,100,0,1684,1685,5,135,0,0, - 1685,1687,3,200,100,0,1686,1684,1,0,0,0,1687,1690,1,0,0,0,1688,1686,1, - 0,0,0,1688,1689,1,0,0,0,1689,1691,1,0,0,0,1690,1688,1,0,0,0,1691,1692, - 5,169,0,0,1692,177,1,0,0,0,1693,1694,3,200,100,0,1694,1696,5,149,0,0, - 1695,1697,3,182,91,0,1696,1695,1,0,0,0,1696,1697,1,0,0,0,1697,1698,1, - 0,0,0,1698,1699,5,169,0,0,1699,179,1,0,0,0,1700,1701,3,184,92,0,1701, - 1702,5,139,0,0,1702,1704,1,0,0,0,1703,1700,1,0,0,0,1703,1704,1,0,0,0, - 1704,1705,1,0,0,0,1705,1706,3,166,83,0,1706,181,1,0,0,0,1707,1712,3,142, - 71,0,1708,1709,5,135,0,0,1709,1711,3,142,71,0,1710,1708,1,0,0,0,1711, - 1714,1,0,0,0,1712,1710,1,0,0,0,1712,1713,1,0,0,0,1713,1716,1,0,0,0,1714, - 1712,1,0,0,0,1715,1717,5,135,0,0,1716,1715,1,0,0,0,1716,1717,1,0,0,0, - 1717,183,1,0,0,0,1718,1719,3,200,100,0,1719,185,1,0,0,0,1720,1729,5,123, - 0,0,1721,1722,5,139,0,0,1722,1729,7,13,0,0,1723,1724,5,125,0,0,1724,1726, - 5,139,0,0,1725,1727,7,13,0,0,1726,1725,1,0,0,0,1726,1727,1,0,0,0,1727, - 1729,1,0,0,0,1728,1720,1,0,0,0,1728,1721,1,0,0,0,1728,1723,1,0,0,0,1729, - 187,1,0,0,0,1730,1732,7,14,0,0,1731,1730,1,0,0,0,1731,1732,1,0,0,0,1732, - 1739,1,0,0,0,1733,1740,3,186,93,0,1734,1740,5,124,0,0,1735,1740,5,125, - 0,0,1736,1740,5,126,0,0,1737,1740,5,48,0,0,1738,1740,5,66,0,0,1739,1733, - 1,0,0,0,1739,1734,1,0,0,0,1739,1735,1,0,0,0,1739,1736,1,0,0,0,1739,1737, - 1,0,0,0,1739,1738,1,0,0,0,1740,189,1,0,0,0,1741,1745,3,188,94,0,1742, - 1745,5,127,0,0,1743,1745,5,68,0,0,1744,1741,1,0,0,0,1744,1742,1,0,0,0, - 1744,1743,1,0,0,0,1745,191,1,0,0,0,1746,1747,7,15,0,0,1747,193,1,0,0, - 0,1748,1749,7,16,0,0,1749,195,1,0,0,0,1750,1751,7,17,0,0,1751,197,1,0, - 0,0,1752,1755,5,122,0,0,1753,1755,3,196,98,0,1754,1752,1,0,0,0,1754,1753, - 1,0,0,0,1755,199,1,0,0,0,1756,1760,5,122,0,0,1757,1760,3,192,96,0,1758, - 1760,3,194,97,0,1759,1756,1,0,0,0,1759,1757,1,0,0,0,1759,1758,1,0,0,0, - 1760,201,1,0,0,0,1761,1762,3,206,103,0,1762,1763,5,141,0,0,1763,1764, - 3,188,94,0,1764,203,1,0,0,0,1765,1766,5,147,0,0,1766,1767,3,142,71,0, - 1767,1768,5,167,0,0,1768,205,1,0,0,0,1769,1772,5,127,0,0,1770,1772,3, - 208,104,0,1771,1769,1,0,0,0,1771,1770,1,0,0,0,1772,207,1,0,0,0,1773,1777, - 5,162,0,0,1774,1776,3,210,105,0,1775,1774,1,0,0,0,1776,1779,1,0,0,0,1777, - 1775,1,0,0,0,1777,1778,1,0,0,0,1778,1780,1,0,0,0,1779,1777,1,0,0,0,1780, - 1781,5,164,0,0,1781,209,1,0,0,0,1782,1783,5,178,0,0,1783,1784,3,142,71, - 0,1784,1785,5,167,0,0,1785,1788,1,0,0,0,1786,1788,5,177,0,0,1787,1782, - 1,0,0,0,1787,1786,1,0,0,0,1788,211,1,0,0,0,1789,1793,5,163,0,0,1790,1792, - 3,214,107,0,1791,1790,1,0,0,0,1792,1795,1,0,0,0,1793,1791,1,0,0,0,1793, - 1794,1,0,0,0,1794,1796,1,0,0,0,1795,1793,1,0,0,0,1796,1797,5,0,0,1,1797, - 213,1,0,0,0,1798,1799,5,180,0,0,1799,1800,3,142,71,0,1800,1801,5,167, - 0,0,1801,1804,1,0,0,0,1802,1804,5,179,0,0,1803,1798,1,0,0,0,1803,1802, - 1,0,0,0,1804,215,1,0,0,0,229,219,226,234,241,245,259,263,266,270,273, - 280,284,293,298,307,315,322,326,332,337,345,352,358,369,377,391,395,400, - 403,413,419,424,430,436,441,447,453,458,460,468,472,477,481,485,490,494, - 501,504,508,511,515,518,521,524,527,530,533,537,541,544,547,551,554,557, - 560,564,567,571,579,585,606,629,636,641,667,671,675,680,684,689,703,712, - 720,723,729,737,743,745,749,754,759,762,766,770,773,775,778,782,786,789, - 791,793,798,809,814,818,824,829,836,841,845,849,855,857,864,872,875,878, - 903,917,932,936,947,951,962,966,973,981,984,990,993,1000,1004,1011,1015, - 1022,1027,1036,1040,1073,1121,1149,1169,1175,1178,1181,1191,1197,1200, - 1203,1211,1219,1222,1226,1229,1243,1251,1259,1263,1282,1287,1298,1304, - 1311,1323,1327,1330,1339,1345,1361,1382,1393,1397,1424,1432,1434,1436, - 1445,1449,1458,1462,1466,1471,1479,1483,1488,1495,1508,1517,1527,1534, - 1541,1554,1561,1565,1569,1574,1578,1581,1591,1599,1608,1611,1618,1634, - 1646,1649,1651,1653,1661,1665,1680,1688,1696,1703,1712,1716,1726,1728, - 1731,1739,1744,1754,1759,1771,1777,1787,1793,1803 + 1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, + 1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, + 1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1280,8,71,1,71,1,71,1,71,1,71, + 1,71,1,71,3,71,1288,8,71,1,71,1,71,1,71,1,71,3,71,1294,8,71,1,71,3,71, + 1297,8,71,1,71,3,71,1300,8,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1308, + 8,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1318,8,71,1,71,1,71, + 1,71,1,71,3,71,1324,8,71,1,71,3,71,1327,8,71,1,71,3,71,1330,8,71,1,71, + 1,71,1,71,1,71,1,71,1,71,3,71,1338,8,71,1,71,1,71,1,71,1,71,1,71,1,71, + 3,71,1346,8,71,1,71,3,71,1349,8,71,1,71,1,71,3,71,1353,8,71,1,71,3,71, + 1356,8,71,1,71,1,71,1,71,3,71,1361,8,71,1,71,1,71,1,71,1,71,1,71,1,71, + 1,71,3,71,1370,8,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, + 3,71,1382,8,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1390,8,71,1,71,1,71, + 1,71,1,71,5,71,1396,8,71,10,71,12,71,1399,9,71,1,71,3,71,1402,8,71,1, + 71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1, + 71,1,71,3,71,1420,8,71,1,71,1,71,3,71,1424,8,71,1,71,1,71,1,71,3,71,1429, + 8,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1440,8,71,1,71, + 1,71,1,71,1,71,3,71,1446,8,71,1,71,1,71,1,71,1,71,1,71,3,71,1453,8,71, + 1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1465,8,71,1,71, + 1,71,3,71,1469,8,71,1,71,3,71,1472,8,71,1,71,1,71,1,71,1,71,1,71,1,71, + 1,71,3,71,1481,8,71,1,71,1,71,1,71,1,71,3,71,1487,8,71,1,71,1,71,1,71, + 1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1503,8,71, + 1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, + 1,71,1,71,1,71,1,71,1,71,3,71,1524,8,71,1,71,1,71,1,71,1,71,1,71,1,71, + 1,71,1,71,1,71,3,71,1535,8,71,1,71,1,71,3,71,1539,8,71,1,71,1,71,1,71, + 1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, + 1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1569,8,71, + 1,71,1,71,1,71,1,71,1,71,1,71,3,71,1577,8,71,5,71,1579,8,71,10,71,12, + 71,1582,9,71,1,72,1,72,1,72,1,72,5,72,1588,8,72,10,72,12,72,1591,9,72, + 1,72,3,72,1594,8,72,1,72,1,72,1,72,1,72,1,72,5,72,1601,8,72,10,72,12, + 72,1604,9,72,1,72,3,72,1607,8,72,1,72,1,72,3,72,1611,8,72,1,72,1,72,1, + 72,3,72,1616,8,72,1,72,1,72,1,72,1,72,5,72,1622,8,72,10,72,12,72,1625, + 9,72,1,72,3,72,1628,8,72,1,72,1,72,1,72,3,72,1633,8,72,1,73,1,73,1,73, + 5,73,1638,8,73,10,73,12,73,1641,9,73,1,74,1,74,1,74,1,74,1,75,1,75,1, + 75,1,75,1,75,1,75,3,75,1653,8,75,1,76,1,76,1,77,1,77,1,77,5,77,1660,8, + 77,10,77,12,77,1663,9,77,1,77,1,77,1,77,1,77,1,77,5,77,1670,8,77,10,77, + 12,77,1673,9,77,1,77,1,77,5,77,1677,8,77,10,77,12,77,1680,9,77,1,77,1, + 77,1,77,1,77,3,77,1686,8,77,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1, + 78,1,78,1,78,3,78,1699,8,78,1,79,1,79,1,79,5,79,1704,8,79,10,79,12,79, + 1707,9,79,1,79,3,79,1710,8,79,1,80,1,80,3,80,1714,8,80,1,80,1,80,1,80, + 3,80,1719,8,80,1,80,1,80,3,80,1723,8,80,1,80,3,80,1726,8,80,1,80,1,80, + 1,80,1,80,1,80,1,80,1,80,1,80,3,80,1736,8,80,1,81,1,81,1,81,1,81,5,81, + 1742,8,81,10,81,12,81,1745,9,81,1,81,1,81,1,82,1,82,1,82,1,82,3,82,1753, + 8,82,1,82,3,82,1756,8,82,1,83,1,83,1,83,5,83,1761,8,83,10,83,12,83,1764, + 9,83,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84, + 3,84,1779,8,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,3,84,1789,8,84, + 1,84,1,84,1,84,1,84,1,84,1,84,3,84,1797,8,84,1,84,1,84,1,84,1,84,1,84, + 1,84,1,84,1,84,3,84,1807,8,84,1,84,3,84,1810,8,84,5,84,1812,8,84,10,84, + 12,84,1815,9,84,1,85,1,85,4,85,1819,8,85,11,85,12,85,1820,1,86,1,86,1, + 86,1,86,1,86,1,86,1,87,1,87,1,87,5,87,1832,8,87,10,87,12,87,1835,9,87, + 1,87,3,87,1838,8,87,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88, + 1,88,1,88,1,88,5,88,1853,8,88,10,88,12,88,1856,9,88,1,89,1,89,1,89,1, + 89,1,89,3,89,1863,8,89,1,90,1,90,1,90,1,90,5,90,1869,8,90,10,90,12,90, + 1872,9,90,1,90,1,90,1,91,1,91,1,91,3,91,1879,8,91,1,91,1,91,1,92,1,92, + 1,92,3,92,1886,8,92,1,92,1,92,1,93,1,93,1,93,5,93,1893,8,93,10,93,12, + 93,1896,9,93,1,93,3,93,1899,8,93,1,94,1,94,1,95,1,95,1,95,1,95,1,95,1, + 95,3,95,1909,8,95,3,95,1911,8,95,1,96,3,96,1914,8,96,1,96,1,96,1,96,1, + 96,1,96,1,96,3,96,1922,8,96,1,97,1,97,1,97,3,97,1927,8,97,1,98,1,98,1, + 99,1,99,1,100,1,100,1,101,1,101,3,101,1937,8,101,1,102,1,102,1,102,3, + 102,1942,8,102,1,103,1,103,1,103,1,103,1,104,1,104,1,104,1,104,1,105, + 1,105,3,105,1954,8,105,1,106,1,106,5,106,1958,8,106,10,106,12,106,1961, + 9,106,1,106,1,106,1,107,1,107,1,107,1,107,1,107,3,107,1970,8,107,1,108, + 1,108,5,108,1974,8,108,10,108,12,108,1977,9,108,1,108,1,108,1,109,1,109, + 1,109,1,109,1,109,3,109,1986,8,109,1,109,0,4,94,132,142,168,110,0,2,4, + 6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52, + 54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98, + 100,102,104,106,108,110,112,114,116,118,120,122,124,126,128,130,132,134, + 136,138,140,142,144,146,148,150,152,154,156,158,160,162,164,166,168,170, + 172,174,176,178,180,182,184,186,188,190,192,194,196,198,200,202,204,206, + 208,210,212,214,216,218,0,18,2,0,35,35,40,40,2,0,19,19,92,92,2,0,52,52, + 61,61,3,0,1,1,4,4,8,8,2,0,3,3,98,98,4,0,1,1,3,4,8,8,98,98,2,0,61,61,91, + 91,2,0,74,74,141,141,2,0,7,7,23,24,2,0,34,34,59,59,2,0,87,87,94,94,3, + 0,10,10,60,60,109,109,2,0,47,47,63,63,1,0,130,131,2,0,143,143,165,165, + 7,0,22,22,44,44,66,67,86,86,96,96,119,119,126,126,20,0,1,13,15,21,23, + 27,29,32,34,34,36,39,41,43,45,50,52,52,54,61,63,64,68,69,71,71,73,85, + 87,95,97,102,104,111,113,118,120,121,123,124,4,0,21,21,34,34,45,45,57, + 57,2257,0,223,1,0,0,0,2,230,1,0,0,0,4,232,1,0,0,0,6,234,1,0,0,0,8,240, + 1,0,0,0,10,263,1,0,0,0,12,265,1,0,0,0,14,272,1,0,0,0,16,279,1,0,0,0,18, + 292,1,0,0,0,20,304,1,0,0,0,22,313,1,0,0,0,24,321,1,0,0,0,26,343,1,0,0, + 0,28,358,1,0,0,0,30,367,1,0,0,0,32,371,1,0,0,0,34,375,1,0,0,0,36,377, + 1,0,0,0,38,386,1,0,0,0,40,390,1,0,0,0,42,404,1,0,0,0,44,422,1,0,0,0,46, + 469,1,0,0,0,48,473,1,0,0,0,50,513,1,0,0,0,52,516,1,0,0,0,54,581,1,0,0, + 0,56,587,1,0,0,0,58,593,1,0,0,0,60,597,1,0,0,0,62,603,1,0,0,0,64,621, + 1,0,0,0,66,624,1,0,0,0,68,627,1,0,0,0,70,644,1,0,0,0,72,652,1,0,0,0,74, + 658,1,0,0,0,76,661,1,0,0,0,78,664,1,0,0,0,80,668,1,0,0,0,82,672,1,0,0, + 0,84,702,1,0,0,0,86,704,1,0,0,0,88,707,1,0,0,0,90,710,1,0,0,0,92,719, + 1,0,0,0,94,742,1,0,0,0,96,847,1,0,0,0,98,852,1,0,0,0,100,863,1,0,0,0, + 102,865,1,0,0,0,104,880,1,0,0,0,106,885,1,0,0,0,108,893,1,0,0,0,110,911, + 1,0,0,0,112,913,1,0,0,0,114,921,1,0,0,0,116,926,1,0,0,0,118,934,1,0,0, + 0,120,938,1,0,0,0,122,942,1,0,0,0,124,948,1,0,0,0,126,957,1,0,0,0,128, + 971,1,0,0,0,130,973,1,0,0,0,132,1039,1,0,0,0,134,1059,1,0,0,0,136,1061, + 1,0,0,0,138,1072,1,0,0,0,140,1088,1,0,0,0,142,1439,1,0,0,0,144,1632,1, + 0,0,0,146,1634,1,0,0,0,148,1642,1,0,0,0,150,1652,1,0,0,0,152,1654,1,0, + 0,0,154,1685,1,0,0,0,156,1698,1,0,0,0,158,1700,1,0,0,0,160,1735,1,0,0, + 0,162,1737,1,0,0,0,164,1755,1,0,0,0,166,1757,1,0,0,0,168,1778,1,0,0,0, + 170,1816,1,0,0,0,172,1822,1,0,0,0,174,1828,1,0,0,0,176,1839,1,0,0,0,178, + 1862,1,0,0,0,180,1864,1,0,0,0,182,1875,1,0,0,0,184,1885,1,0,0,0,186,1889, + 1,0,0,0,188,1900,1,0,0,0,190,1910,1,0,0,0,192,1913,1,0,0,0,194,1926,1, + 0,0,0,196,1928,1,0,0,0,198,1930,1,0,0,0,200,1932,1,0,0,0,202,1936,1,0, + 0,0,204,1941,1,0,0,0,206,1943,1,0,0,0,208,1947,1,0,0,0,210,1953,1,0,0, + 0,212,1955,1,0,0,0,214,1969,1,0,0,0,216,1971,1,0,0,0,218,1985,1,0,0,0, + 220,222,3,2,1,0,221,220,1,0,0,0,222,225,1,0,0,0,223,221,1,0,0,0,223,224, + 1,0,0,0,224,226,1,0,0,0,225,223,1,0,0,0,226,227,5,0,0,1,227,1,1,0,0,0, + 228,231,3,6,3,0,229,231,3,10,5,0,230,228,1,0,0,0,230,229,1,0,0,0,231, + 3,1,0,0,0,232,233,3,142,71,0,233,5,1,0,0,0,234,235,5,62,0,0,235,238,3, + 204,102,0,236,237,5,139,0,0,237,239,3,4,2,0,238,236,1,0,0,0,238,239,1, + 0,0,0,239,7,1,0,0,0,240,245,3,166,83,0,241,242,5,141,0,0,242,244,3,166, + 83,0,243,241,1,0,0,0,244,247,1,0,0,0,245,243,1,0,0,0,245,246,1,0,0,0, + 246,249,1,0,0,0,247,245,1,0,0,0,248,250,5,141,0,0,249,248,1,0,0,0,249, + 250,1,0,0,0,250,9,1,0,0,0,251,264,3,12,6,0,252,264,3,14,7,0,253,264,3, + 18,9,0,254,264,3,20,10,0,255,264,3,22,11,0,256,264,3,26,13,0,257,264, + 3,24,12,0,258,264,3,28,14,0,259,264,3,30,15,0,260,264,3,36,18,0,261,264, + 3,32,16,0,262,264,3,34,17,0,263,251,1,0,0,0,263,252,1,0,0,0,263,253,1, + 0,0,0,263,254,1,0,0,0,263,255,1,0,0,0,263,256,1,0,0,0,263,257,1,0,0,0, + 263,258,1,0,0,0,263,259,1,0,0,0,263,260,1,0,0,0,263,261,1,0,0,0,263,262, + 1,0,0,0,264,11,1,0,0,0,265,267,5,90,0,0,266,268,3,4,2,0,267,266,1,0,0, + 0,267,268,1,0,0,0,268,270,1,0,0,0,269,271,5,176,0,0,270,269,1,0,0,0,270, + 271,1,0,0,0,271,13,1,0,0,0,272,274,5,103,0,0,273,275,3,4,2,0,274,273, + 1,0,0,0,274,275,1,0,0,0,275,277,1,0,0,0,276,278,5,176,0,0,277,276,1,0, + 0,0,277,278,1,0,0,0,278,15,1,0,0,0,279,288,5,14,0,0,280,281,5,155,0,0, + 281,284,3,204,102,0,282,283,5,140,0,0,283,285,3,204,102,0,284,282,1,0, + 0,0,284,285,1,0,0,0,285,286,1,0,0,0,286,287,5,175,0,0,287,289,1,0,0,0, + 288,280,1,0,0,0,288,289,1,0,0,0,289,290,1,0,0,0,290,291,3,36,18,0,291, + 17,1,0,0,0,292,293,5,112,0,0,293,297,3,36,18,0,294,296,3,16,8,0,295,294, + 1,0,0,0,296,299,1,0,0,0,297,295,1,0,0,0,297,298,1,0,0,0,298,302,1,0,0, + 0,299,297,1,0,0,0,300,301,5,33,0,0,301,303,3,36,18,0,302,300,1,0,0,0, + 302,303,1,0,0,0,303,19,1,0,0,0,304,305,5,46,0,0,305,306,5,155,0,0,306, + 307,3,4,2,0,307,308,5,175,0,0,308,311,3,10,5,0,309,310,5,26,0,0,310,312, + 3,10,5,0,311,309,1,0,0,0,311,312,1,0,0,0,312,21,1,0,0,0,313,314,5,122, + 0,0,314,315,5,155,0,0,315,316,3,4,2,0,316,317,5,175,0,0,317,319,3,10, + 5,0,318,320,5,176,0,0,319,318,1,0,0,0,319,320,1,0,0,0,320,23,1,0,0,0, + 321,322,5,37,0,0,322,326,5,155,0,0,323,327,3,6,3,0,324,327,3,30,15,0, + 325,327,3,4,2,0,326,323,1,0,0,0,326,324,1,0,0,0,326,325,1,0,0,0,326,327, + 1,0,0,0,327,328,1,0,0,0,328,330,5,176,0,0,329,331,3,4,2,0,330,329,1,0, + 0,0,330,331,1,0,0,0,331,332,1,0,0,0,332,336,5,176,0,0,333,337,3,6,3,0, + 334,337,3,30,15,0,335,337,3,4,2,0,336,333,1,0,0,0,336,334,1,0,0,0,336, + 335,1,0,0,0,336,337,1,0,0,0,337,338,1,0,0,0,338,339,5,175,0,0,339,341, + 3,10,5,0,340,342,5,176,0,0,341,340,1,0,0,0,341,342,1,0,0,0,342,25,1,0, + 0,0,343,344,5,37,0,0,344,345,5,155,0,0,345,346,5,62,0,0,346,349,3,204, + 102,0,347,348,5,141,0,0,348,350,3,204,102,0,349,347,1,0,0,0,349,350,1, + 0,0,0,350,351,1,0,0,0,351,352,5,50,0,0,352,353,3,4,2,0,353,354,5,175, + 0,0,354,356,3,10,5,0,355,357,5,176,0,0,356,355,1,0,0,0,356,357,1,0,0, + 0,357,27,1,0,0,0,358,359,7,0,0,0,359,360,3,204,102,0,360,362,5,155,0, + 0,361,363,3,8,4,0,362,361,1,0,0,0,362,363,1,0,0,0,363,364,1,0,0,0,364, + 365,5,175,0,0,365,366,3,36,18,0,366,29,1,0,0,0,367,368,3,4,2,0,368,369, + 5,139,0,0,369,370,3,4,2,0,370,31,1,0,0,0,371,373,3,4,2,0,372,374,5,176, + 0,0,373,372,1,0,0,0,373,374,1,0,0,0,374,33,1,0,0,0,375,376,5,176,0,0, + 376,35,1,0,0,0,377,381,5,153,0,0,378,380,3,2,1,0,379,378,1,0,0,0,380, + 383,1,0,0,0,381,379,1,0,0,0,381,382,1,0,0,0,382,384,1,0,0,0,383,381,1, + 0,0,0,384,385,5,173,0,0,385,37,1,0,0,0,386,387,3,4,2,0,387,388,5,140, + 0,0,388,389,3,4,2,0,389,39,1,0,0,0,390,395,3,38,19,0,391,392,5,141,0, + 0,392,394,3,38,19,0,393,391,1,0,0,0,394,397,1,0,0,0,395,393,1,0,0,0,395, + 396,1,0,0,0,396,399,1,0,0,0,397,395,1,0,0,0,398,400,5,141,0,0,399,398, + 1,0,0,0,399,400,1,0,0,0,400,41,1,0,0,0,401,405,3,48,24,0,402,405,3,52, + 26,0,403,405,3,154,77,0,404,401,1,0,0,0,404,402,1,0,0,0,404,403,1,0,0, + 0,405,407,1,0,0,0,406,408,5,176,0,0,407,406,1,0,0,0,407,408,1,0,0,0,408, + 409,1,0,0,0,409,410,5,0,0,1,410,43,1,0,0,0,411,423,3,52,26,0,412,413, + 3,54,27,0,413,414,5,155,0,0,414,415,3,48,24,0,415,416,5,175,0,0,416,423, + 1,0,0,0,417,418,5,155,0,0,418,419,3,48,24,0,419,420,5,175,0,0,420,423, + 1,0,0,0,421,423,3,208,104,0,422,411,1,0,0,0,422,412,1,0,0,0,422,417,1, + 0,0,0,422,421,1,0,0,0,423,45,1,0,0,0,424,425,5,28,0,0,425,428,5,1,0,0, + 426,427,5,11,0,0,427,429,5,68,0,0,428,426,1,0,0,0,428,429,1,0,0,0,429, + 470,1,0,0,0,430,433,5,28,0,0,431,432,5,11,0,0,432,434,5,68,0,0,433,431, + 1,0,0,0,433,434,1,0,0,0,434,470,1,0,0,0,435,436,5,115,0,0,436,439,5,1, + 0,0,437,438,5,11,0,0,438,440,5,68,0,0,439,437,1,0,0,0,439,440,1,0,0,0, + 440,470,1,0,0,0,441,442,5,115,0,0,442,445,5,25,0,0,443,444,5,11,0,0,444, + 446,5,68,0,0,445,443,1,0,0,0,445,446,1,0,0,0,446,470,1,0,0,0,447,450, + 5,115,0,0,448,449,5,11,0,0,449,451,5,68,0,0,450,448,1,0,0,0,450,451,1, + 0,0,0,451,470,1,0,0,0,452,453,5,53,0,0,453,456,5,1,0,0,454,455,5,11,0, + 0,455,457,5,68,0,0,456,454,1,0,0,0,456,457,1,0,0,0,457,470,1,0,0,0,458, + 459,5,53,0,0,459,462,5,25,0,0,460,461,5,11,0,0,461,463,5,68,0,0,462,460, + 1,0,0,0,462,463,1,0,0,0,463,470,1,0,0,0,464,467,5,53,0,0,465,466,5,11, + 0,0,466,468,5,68,0,0,467,465,1,0,0,0,467,468,1,0,0,0,468,470,1,0,0,0, + 469,424,1,0,0,0,469,430,1,0,0,0,469,435,1,0,0,0,469,441,1,0,0,0,469,447, + 1,0,0,0,469,452,1,0,0,0,469,458,1,0,0,0,469,464,1,0,0,0,470,471,1,0,0, + 0,471,472,3,44,22,0,472,47,1,0,0,0,473,477,3,44,22,0,474,476,3,46,23, + 0,475,474,1,0,0,0,476,479,1,0,0,0,477,475,1,0,0,0,477,478,1,0,0,0,478, + 481,1,0,0,0,479,477,1,0,0,0,480,482,3,78,39,0,481,480,1,0,0,0,481,482, + 1,0,0,0,482,484,1,0,0,0,483,485,3,50,25,0,484,483,1,0,0,0,484,485,1,0, + 0,0,485,49,1,0,0,0,486,487,5,64,0,0,487,489,3,142,71,0,488,490,5,164, + 0,0,489,488,1,0,0,0,489,490,1,0,0,0,490,493,1,0,0,0,491,492,5,141,0,0, + 492,494,3,142,71,0,493,491,1,0,0,0,493,494,1,0,0,0,494,497,1,0,0,0,495, + 496,5,124,0,0,496,498,5,104,0,0,497,495,1,0,0,0,497,498,1,0,0,0,498,514, + 1,0,0,0,499,500,5,64,0,0,500,502,3,142,71,0,501,503,5,164,0,0,502,501, + 1,0,0,0,502,503,1,0,0,0,503,506,1,0,0,0,504,505,5,124,0,0,505,507,5,104, + 0,0,506,504,1,0,0,0,506,507,1,0,0,0,507,508,1,0,0,0,508,509,5,74,0,0, + 509,510,3,142,71,0,510,514,1,0,0,0,511,512,5,74,0,0,512,514,3,142,71, + 0,513,486,1,0,0,0,513,499,1,0,0,0,513,511,1,0,0,0,514,51,1,0,0,0,515, + 517,3,54,27,0,516,515,1,0,0,0,516,517,1,0,0,0,517,518,1,0,0,0,518,520, + 5,97,0,0,519,521,5,25,0,0,520,519,1,0,0,0,520,521,1,0,0,0,521,523,1,0, + 0,0,522,524,3,56,28,0,523,522,1,0,0,0,523,524,1,0,0,0,524,525,1,0,0,0, + 525,527,3,138,69,0,526,528,3,58,29,0,527,526,1,0,0,0,527,528,1,0,0,0, + 528,530,1,0,0,0,529,531,3,60,30,0,530,529,1,0,0,0,530,531,1,0,0,0,531, + 533,1,0,0,0,532,534,3,64,32,0,533,532,1,0,0,0,533,534,1,0,0,0,534,536, + 1,0,0,0,535,537,3,66,33,0,536,535,1,0,0,0,536,537,1,0,0,0,537,542,1,0, + 0,0,538,540,5,117,0,0,539,538,1,0,0,0,539,540,1,0,0,0,540,541,1,0,0,0, + 541,543,3,102,51,0,542,539,1,0,0,0,542,543,1,0,0,0,543,545,1,0,0,0,544, + 546,3,68,34,0,545,544,1,0,0,0,545,546,1,0,0,0,546,549,1,0,0,0,547,548, + 5,124,0,0,548,550,7,1,0,0,549,547,1,0,0,0,549,550,1,0,0,0,550,553,1,0, + 0,0,551,552,5,124,0,0,552,554,5,108,0,0,553,551,1,0,0,0,553,554,1,0,0, + 0,554,556,1,0,0,0,555,557,3,74,37,0,556,555,1,0,0,0,556,557,1,0,0,0,557, + 559,1,0,0,0,558,560,3,76,38,0,559,558,1,0,0,0,559,560,1,0,0,0,560,563, + 1,0,0,0,561,562,5,117,0,0,562,564,3,102,51,0,563,561,1,0,0,0,563,564, + 1,0,0,0,564,566,1,0,0,0,565,567,3,62,31,0,566,565,1,0,0,0,566,567,1,0, + 0,0,567,569,1,0,0,0,568,570,3,78,39,0,569,568,1,0,0,0,569,570,1,0,0,0, + 570,572,1,0,0,0,571,573,3,82,41,0,572,571,1,0,0,0,572,573,1,0,0,0,573, + 576,1,0,0,0,574,577,3,84,42,0,575,577,3,86,43,0,576,574,1,0,0,0,576,575, + 1,0,0,0,576,577,1,0,0,0,577,579,1,0,0,0,578,580,3,88,44,0,579,578,1,0, + 0,0,579,580,1,0,0,0,580,53,1,0,0,0,581,583,5,124,0,0,582,584,5,88,0,0, + 583,582,1,0,0,0,583,584,1,0,0,0,584,585,1,0,0,0,585,586,3,158,79,0,586, + 55,1,0,0,0,587,588,5,107,0,0,588,591,5,131,0,0,589,590,5,124,0,0,590, + 592,5,104,0,0,591,589,1,0,0,0,591,592,1,0,0,0,592,57,1,0,0,0,593,594, + 5,38,0,0,594,595,3,94,47,0,595,59,1,0,0,0,596,598,7,2,0,0,597,596,1,0, + 0,0,597,598,1,0,0,0,598,599,1,0,0,0,599,600,5,5,0,0,600,601,5,56,0,0, + 601,602,3,136,68,0,602,61,1,0,0,0,603,604,5,123,0,0,604,605,3,204,102, + 0,605,606,5,6,0,0,606,607,5,155,0,0,607,608,3,116,58,0,608,618,5,175, + 0,0,609,610,5,141,0,0,610,611,3,204,102,0,611,612,5,6,0,0,612,613,5,155, + 0,0,613,614,3,116,58,0,614,615,5,175,0,0,615,617,1,0,0,0,616,609,1,0, + 0,0,617,620,1,0,0,0,618,616,1,0,0,0,618,619,1,0,0,0,619,63,1,0,0,0,620, + 618,1,0,0,0,621,622,5,84,0,0,622,623,3,142,71,0,623,65,1,0,0,0,624,625, + 5,121,0,0,625,626,3,142,71,0,626,67,1,0,0,0,627,628,5,41,0,0,628,642, + 5,11,0,0,629,643,5,1,0,0,630,631,7,1,0,0,631,632,5,155,0,0,632,633,3, + 136,68,0,633,634,5,175,0,0,634,643,1,0,0,0,635,636,5,42,0,0,636,637,5, + 99,0,0,637,638,5,155,0,0,638,639,3,70,35,0,639,640,5,175,0,0,640,643, + 1,0,0,0,641,643,3,136,68,0,642,629,1,0,0,0,642,630,1,0,0,0,642,635,1, + 0,0,0,642,641,1,0,0,0,643,69,1,0,0,0,644,649,3,72,36,0,645,646,5,141, + 0,0,646,648,3,72,36,0,647,645,1,0,0,0,648,651,1,0,0,0,649,647,1,0,0,0, + 649,650,1,0,0,0,650,71,1,0,0,0,651,649,1,0,0,0,652,654,5,155,0,0,653, + 655,3,136,68,0,654,653,1,0,0,0,654,655,1,0,0,0,655,656,1,0,0,0,656,657, + 5,175,0,0,657,73,1,0,0,0,658,659,5,43,0,0,659,660,3,142,71,0,660,75,1, + 0,0,0,661,662,5,85,0,0,662,663,3,142,71,0,663,77,1,0,0,0,664,665,5,77, + 0,0,665,666,5,11,0,0,666,667,3,106,53,0,667,79,1,0,0,0,668,669,5,77,0, + 0,669,670,5,11,0,0,670,671,3,136,68,0,671,81,1,0,0,0,672,673,5,64,0,0, + 673,674,3,104,52,0,674,675,5,11,0,0,675,676,3,136,68,0,676,83,1,0,0,0, + 677,678,5,64,0,0,678,680,3,142,71,0,679,681,5,164,0,0,680,679,1,0,0,0, + 680,681,1,0,0,0,681,684,1,0,0,0,682,683,5,141,0,0,683,685,3,142,71,0, + 684,682,1,0,0,0,684,685,1,0,0,0,685,688,1,0,0,0,686,687,5,124,0,0,687, + 689,5,104,0,0,688,686,1,0,0,0,688,689,1,0,0,0,689,703,1,0,0,0,690,691, + 5,64,0,0,691,693,3,142,71,0,692,694,5,164,0,0,693,692,1,0,0,0,693,694, + 1,0,0,0,694,697,1,0,0,0,695,696,5,124,0,0,696,698,5,104,0,0,697,695,1, + 0,0,0,697,698,1,0,0,0,698,699,1,0,0,0,699,700,5,74,0,0,700,701,3,142, + 71,0,701,703,1,0,0,0,702,677,1,0,0,0,702,690,1,0,0,0,703,85,1,0,0,0,704, + 705,5,74,0,0,705,706,3,142,71,0,706,87,1,0,0,0,707,708,5,100,0,0,708, + 709,3,112,56,0,709,89,1,0,0,0,710,711,5,118,0,0,711,716,3,92,46,0,712, + 713,5,141,0,0,713,715,3,92,46,0,714,712,1,0,0,0,715,718,1,0,0,0,716,714, + 1,0,0,0,716,717,1,0,0,0,717,91,1,0,0,0,718,716,1,0,0,0,719,720,5,155, + 0,0,720,725,3,142,71,0,721,722,5,141,0,0,722,724,3,142,71,0,723,721,1, + 0,0,0,724,727,1,0,0,0,725,723,1,0,0,0,725,726,1,0,0,0,726,728,1,0,0,0, + 727,725,1,0,0,0,728,729,5,175,0,0,729,93,1,0,0,0,730,731,6,47,-1,0,731, + 733,3,168,84,0,732,734,5,31,0,0,733,732,1,0,0,0,733,734,1,0,0,0,734,736, + 1,0,0,0,735,737,3,102,51,0,736,735,1,0,0,0,736,737,1,0,0,0,737,743,1, + 0,0,0,738,739,5,155,0,0,739,740,3,94,47,0,740,741,5,175,0,0,741,743,1, + 0,0,0,742,730,1,0,0,0,742,738,1,0,0,0,743,791,1,0,0,0,744,745,10,5,0, + 0,745,746,3,98,49,0,746,747,3,94,47,6,747,790,1,0,0,0,748,750,10,7,0, + 0,749,751,5,69,0,0,750,749,1,0,0,0,750,751,1,0,0,0,751,753,1,0,0,0,752, + 754,3,96,48,0,753,752,1,0,0,0,753,754,1,0,0,0,754,755,1,0,0,0,755,756, + 5,56,0,0,756,758,3,94,47,0,757,759,3,100,50,0,758,757,1,0,0,0,758,759, + 1,0,0,0,759,790,1,0,0,0,760,761,10,6,0,0,761,762,5,82,0,0,762,763,5,56, + 0,0,763,765,3,94,47,0,764,766,3,100,50,0,765,764,1,0,0,0,765,766,1,0, + 0,0,766,790,1,0,0,0,767,768,10,4,0,0,768,769,5,81,0,0,769,770,5,155,0, + 0,770,771,3,136,68,0,771,775,3,170,85,0,772,773,5,41,0,0,773,774,5,11, + 0,0,774,776,3,136,68,0,775,772,1,0,0,0,775,776,1,0,0,0,776,777,1,0,0, + 0,777,778,5,175,0,0,778,790,1,0,0,0,779,780,10,3,0,0,780,783,5,116,0, + 0,781,782,5,49,0,0,782,784,5,73,0,0,783,781,1,0,0,0,783,784,1,0,0,0,784, + 785,1,0,0,0,785,786,5,155,0,0,786,787,3,174,87,0,787,788,5,175,0,0,788, + 790,1,0,0,0,789,744,1,0,0,0,789,748,1,0,0,0,789,760,1,0,0,0,789,767,1, + 0,0,0,789,779,1,0,0,0,790,793,1,0,0,0,791,789,1,0,0,0,791,792,1,0,0,0, + 792,95,1,0,0,0,793,791,1,0,0,0,794,796,7,3,0,0,795,794,1,0,0,0,795,796, + 1,0,0,0,796,797,1,0,0,0,797,808,5,52,0,0,798,800,5,52,0,0,799,801,7,3, + 0,0,800,799,1,0,0,0,800,801,1,0,0,0,801,808,1,0,0,0,802,808,7,3,0,0,803, + 808,5,3,0,0,804,808,5,98,0,0,805,806,5,8,0,0,806,808,7,4,0,0,807,795, + 1,0,0,0,807,798,1,0,0,0,807,802,1,0,0,0,807,803,1,0,0,0,807,804,1,0,0, + 0,807,805,1,0,0,0,808,848,1,0,0,0,809,811,7,5,0,0,810,809,1,0,0,0,810, + 811,1,0,0,0,811,812,1,0,0,0,812,814,7,6,0,0,813,815,5,78,0,0,814,813, + 1,0,0,0,814,815,1,0,0,0,815,830,1,0,0,0,816,818,7,6,0,0,817,819,5,78, + 0,0,818,817,1,0,0,0,818,819,1,0,0,0,819,821,1,0,0,0,820,822,7,5,0,0,821, + 820,1,0,0,0,821,822,1,0,0,0,822,830,1,0,0,0,823,824,5,8,0,0,824,825,7, + 4,0,0,825,827,7,6,0,0,826,828,5,78,0,0,827,826,1,0,0,0,827,828,1,0,0, + 0,828,830,1,0,0,0,829,810,1,0,0,0,829,816,1,0,0,0,829,823,1,0,0,0,830, + 848,1,0,0,0,831,833,7,3,0,0,832,831,1,0,0,0,832,833,1,0,0,0,833,834,1, + 0,0,0,834,836,5,39,0,0,835,837,5,78,0,0,836,835,1,0,0,0,836,837,1,0,0, + 0,837,846,1,0,0,0,838,840,5,39,0,0,839,841,5,78,0,0,840,839,1,0,0,0,840, + 841,1,0,0,0,841,843,1,0,0,0,842,844,7,3,0,0,843,842,1,0,0,0,843,844,1, + 0,0,0,844,846,1,0,0,0,845,832,1,0,0,0,845,838,1,0,0,0,846,848,1,0,0,0, + 847,807,1,0,0,0,847,829,1,0,0,0,847,845,1,0,0,0,848,97,1,0,0,0,849,850, + 5,18,0,0,850,853,5,56,0,0,851,853,5,141,0,0,852,849,1,0,0,0,852,851,1, + 0,0,0,853,99,1,0,0,0,854,855,5,75,0,0,855,864,3,136,68,0,856,857,5,117, + 0,0,857,858,5,155,0,0,858,859,3,136,68,0,859,860,5,175,0,0,860,864,1, + 0,0,0,861,862,5,117,0,0,862,864,3,136,68,0,863,854,1,0,0,0,863,856,1, + 0,0,0,863,861,1,0,0,0,864,101,1,0,0,0,865,866,5,95,0,0,866,868,3,110, + 55,0,867,869,5,164,0,0,868,867,1,0,0,0,868,869,1,0,0,0,869,872,1,0,0, + 0,870,871,5,74,0,0,871,873,3,110,55,0,872,870,1,0,0,0,872,873,1,0,0,0, + 873,878,1,0,0,0,874,875,5,155,0,0,875,876,3,204,102,0,876,877,5,175,0, + 0,877,879,1,0,0,0,878,874,1,0,0,0,878,879,1,0,0,0,879,103,1,0,0,0,880, + 883,3,142,71,0,881,882,7,7,0,0,882,884,3,142,71,0,883,881,1,0,0,0,883, + 884,1,0,0,0,884,105,1,0,0,0,885,890,3,108,54,0,886,887,5,141,0,0,887, + 889,3,108,54,0,888,886,1,0,0,0,889,892,1,0,0,0,890,888,1,0,0,0,890,891, + 1,0,0,0,891,107,1,0,0,0,892,890,1,0,0,0,893,895,3,142,71,0,894,896,7, + 8,0,0,895,894,1,0,0,0,895,896,1,0,0,0,896,899,1,0,0,0,897,898,5,73,0, + 0,898,900,7,9,0,0,899,897,1,0,0,0,899,900,1,0,0,0,900,903,1,0,0,0,901, + 902,5,16,0,0,902,904,5,133,0,0,903,901,1,0,0,0,903,904,1,0,0,0,904,109, + 1,0,0,0,905,912,3,208,104,0,906,909,3,192,96,0,907,908,5,177,0,0,908, + 910,3,192,96,0,909,907,1,0,0,0,909,910,1,0,0,0,910,912,1,0,0,0,911,905, + 1,0,0,0,911,906,1,0,0,0,912,111,1,0,0,0,913,918,3,114,57,0,914,915,5, + 141,0,0,915,917,3,114,57,0,916,914,1,0,0,0,917,920,1,0,0,0,918,916,1, + 0,0,0,918,919,1,0,0,0,919,113,1,0,0,0,920,918,1,0,0,0,921,922,3,204,102, + 0,922,923,5,147,0,0,923,924,3,194,97,0,924,115,1,0,0,0,925,927,3,118, + 59,0,926,925,1,0,0,0,926,927,1,0,0,0,927,929,1,0,0,0,928,930,3,120,60, + 0,929,928,1,0,0,0,929,930,1,0,0,0,930,932,1,0,0,0,931,933,3,124,62,0, + 932,931,1,0,0,0,932,933,1,0,0,0,933,117,1,0,0,0,934,935,5,80,0,0,935, + 936,5,11,0,0,936,937,3,136,68,0,937,119,1,0,0,0,938,939,5,77,0,0,939, + 940,5,11,0,0,940,941,3,106,53,0,941,121,1,0,0,0,942,943,5,125,0,0,943, + 944,5,41,0,0,944,945,5,155,0,0,945,946,3,78,39,0,946,947,5,175,0,0,947, + 123,1,0,0,0,948,949,7,10,0,0,949,950,3,126,63,0,950,125,1,0,0,0,951,958, + 3,128,64,0,952,953,5,9,0,0,953,954,3,128,64,0,954,955,5,2,0,0,955,956, + 3,128,64,0,956,958,1,0,0,0,957,951,1,0,0,0,957,952,1,0,0,0,958,127,1, + 0,0,0,959,960,5,20,0,0,960,972,5,93,0,0,961,962,5,114,0,0,962,972,5,83, + 0,0,963,964,5,114,0,0,964,972,5,36,0,0,965,966,3,142,71,0,966,967,5,83, + 0,0,967,972,1,0,0,0,968,969,3,142,71,0,969,970,5,36,0,0,970,972,1,0,0, + 0,971,959,1,0,0,0,971,961,1,0,0,0,971,963,1,0,0,0,971,965,1,0,0,0,971, + 968,1,0,0,0,972,129,1,0,0,0,973,974,3,142,71,0,974,975,5,0,0,1,975,131, + 1,0,0,0,976,977,6,66,-1,0,977,978,3,204,102,0,978,979,5,155,0,0,979,980, + 3,204,102,0,980,987,3,132,66,0,981,982,5,141,0,0,982,983,3,204,102,0, + 983,984,3,132,66,0,984,986,1,0,0,0,985,981,1,0,0,0,986,989,1,0,0,0,987, + 985,1,0,0,0,987,988,1,0,0,0,988,991,1,0,0,0,989,987,1,0,0,0,990,992,5, + 141,0,0,991,990,1,0,0,0,991,992,1,0,0,0,992,993,1,0,0,0,993,994,5,175, + 0,0,994,1040,1,0,0,0,995,996,3,204,102,0,996,997,5,155,0,0,997,1002,3, + 206,103,0,998,999,5,141,0,0,999,1001,3,206,103,0,1000,998,1,0,0,0,1001, + 1004,1,0,0,0,1002,1000,1,0,0,0,1002,1003,1,0,0,0,1003,1006,1,0,0,0,1004, + 1002,1,0,0,0,1005,1007,5,141,0,0,1006,1005,1,0,0,0,1006,1007,1,0,0,0, + 1007,1008,1,0,0,0,1008,1009,5,175,0,0,1009,1040,1,0,0,0,1010,1011,3,204, + 102,0,1011,1012,5,155,0,0,1012,1017,3,132,66,0,1013,1014,5,141,0,0,1014, + 1016,3,132,66,0,1015,1013,1,0,0,0,1016,1019,1,0,0,0,1017,1015,1,0,0,0, + 1017,1018,1,0,0,0,1018,1021,1,0,0,0,1019,1017,1,0,0,0,1020,1022,5,141, + 0,0,1021,1020,1,0,0,0,1021,1022,1,0,0,0,1022,1023,1,0,0,0,1023,1024,5, + 175,0,0,1024,1040,1,0,0,0,1025,1026,3,204,102,0,1026,1028,5,155,0,0,1027, + 1029,3,136,68,0,1028,1027,1,0,0,0,1028,1029,1,0,0,0,1029,1030,1,0,0,0, + 1030,1031,5,175,0,0,1031,1040,1,0,0,0,1032,1034,3,204,102,0,1033,1035, + 3,204,102,0,1034,1033,1,0,0,0,1035,1036,1,0,0,0,1036,1034,1,0,0,0,1036, + 1037,1,0,0,0,1037,1040,1,0,0,0,1038,1040,3,204,102,0,1039,976,1,0,0,0, + 1039,995,1,0,0,0,1039,1010,1,0,0,0,1039,1025,1,0,0,0,1039,1032,1,0,0, + 0,1039,1038,1,0,0,0,1040,1049,1,0,0,0,1041,1042,10,7,0,0,1042,1044,5, + 154,0,0,1043,1045,5,131,0,0,1044,1043,1,0,0,0,1044,1045,1,0,0,0,1045, + 1046,1,0,0,0,1046,1048,5,174,0,0,1047,1041,1,0,0,0,1048,1051,1,0,0,0, + 1049,1047,1,0,0,0,1049,1050,1,0,0,0,1050,133,1,0,0,0,1051,1049,1,0,0, + 0,1052,1054,3,204,102,0,1053,1055,3,204,102,0,1054,1053,1,0,0,0,1055, + 1056,1,0,0,0,1056,1054,1,0,0,0,1056,1057,1,0,0,0,1057,1060,1,0,0,0,1058, + 1060,3,204,102,0,1059,1052,1,0,0,0,1059,1058,1,0,0,0,1060,135,1,0,0,0, + 1061,1066,3,142,71,0,1062,1063,5,141,0,0,1063,1065,3,142,71,0,1064,1062, + 1,0,0,0,1065,1068,1,0,0,0,1066,1064,1,0,0,0,1066,1067,1,0,0,0,1067,1070, + 1,0,0,0,1068,1066,1,0,0,0,1069,1071,5,141,0,0,1070,1069,1,0,0,0,1070, + 1071,1,0,0,0,1071,137,1,0,0,0,1072,1077,3,140,70,0,1073,1074,5,141,0, + 0,1074,1076,3,140,70,0,1075,1073,1,0,0,0,1076,1079,1,0,0,0,1077,1075, + 1,0,0,0,1077,1078,1,0,0,0,1078,1081,1,0,0,0,1079,1077,1,0,0,0,1080,1082, + 5,141,0,0,1081,1080,1,0,0,0,1081,1082,1,0,0,0,1082,139,1,0,0,0,1083,1084, + 3,204,102,0,1084,1085,5,140,0,0,1085,1086,3,142,71,0,1086,1089,1,0,0, + 0,1087,1089,3,142,71,0,1088,1083,1,0,0,0,1088,1087,1,0,0,0,1089,141,1, + 0,0,0,1090,1091,6,71,-1,0,1091,1093,5,12,0,0,1092,1094,3,142,71,0,1093, + 1092,1,0,0,0,1093,1094,1,0,0,0,1094,1100,1,0,0,0,1095,1096,5,120,0,0, + 1096,1097,3,142,71,0,1097,1098,5,102,0,0,1098,1099,3,142,71,0,1099,1101, + 1,0,0,0,1100,1095,1,0,0,0,1101,1102,1,0,0,0,1102,1100,1,0,0,0,1102,1103, + 1,0,0,0,1103,1106,1,0,0,0,1104,1105,5,26,0,0,1105,1107,3,142,71,0,1106, + 1104,1,0,0,0,1106,1107,1,0,0,0,1107,1108,1,0,0,0,1108,1109,5,27,0,0,1109, + 1440,1,0,0,0,1110,1111,5,13,0,0,1111,1112,5,155,0,0,1112,1113,3,142,71, + 0,1113,1114,5,6,0,0,1114,1115,3,132,66,0,1115,1116,5,175,0,0,1116,1440, + 1,0,0,0,1117,1118,5,113,0,0,1118,1119,5,155,0,0,1119,1120,3,142,71,0, + 1120,1121,5,6,0,0,1121,1122,3,132,66,0,1122,1123,5,175,0,0,1123,1440, + 1,0,0,0,1124,1125,5,21,0,0,1125,1440,5,133,0,0,1126,1127,5,54,0,0,1127, + 1440,5,133,0,0,1128,1129,5,54,0,0,1129,1130,3,142,71,0,1130,1131,3,196, + 98,0,1131,1440,1,0,0,0,1132,1133,5,101,0,0,1133,1134,5,155,0,0,1134,1135, + 3,142,71,0,1135,1136,5,38,0,0,1136,1139,3,142,71,0,1137,1138,5,37,0,0, + 1138,1140,3,142,71,0,1139,1137,1,0,0,0,1139,1140,1,0,0,0,1140,1141,1, + 0,0,0,1141,1142,5,175,0,0,1142,1440,1,0,0,0,1143,1144,5,105,0,0,1144, + 1440,5,133,0,0,1145,1146,5,110,0,0,1146,1147,5,155,0,0,1147,1148,7,11, + 0,0,1148,1149,3,210,105,0,1149,1150,5,38,0,0,1150,1151,3,142,71,0,1151, + 1152,5,175,0,0,1152,1440,1,0,0,0,1153,1154,5,17,0,0,1154,1155,5,155,0, + 0,1155,1156,5,133,0,0,1156,1440,5,175,0,0,1157,1158,5,17,0,0,1158,1159, + 5,155,0,0,1159,1160,3,136,68,0,1160,1161,5,175,0,0,1161,1440,1,0,0,0, + 1162,1163,5,17,0,0,1163,1164,5,155,0,0,1164,1165,5,135,0,0,1165,1166, + 5,29,0,0,1166,1167,5,155,0,0,1167,1168,3,8,4,0,1168,1169,5,175,0,0,1169, + 1170,5,89,0,0,1170,1171,5,155,0,0,1171,1172,3,146,73,0,1172,1173,5,175, + 0,0,1173,1174,5,175,0,0,1174,1188,1,0,0,0,1175,1176,5,155,0,0,1176,1177, + 5,135,0,0,1177,1178,5,29,0,0,1178,1179,5,155,0,0,1179,1180,3,8,4,0,1180, + 1181,5,175,0,0,1181,1182,5,89,0,0,1182,1183,5,155,0,0,1183,1184,3,146, + 73,0,1184,1185,5,175,0,0,1185,1186,5,175,0,0,1186,1188,1,0,0,0,1187,1162, + 1,0,0,0,1187,1175,1,0,0,0,1188,1440,1,0,0,0,1189,1190,5,17,0,0,1190,1191, + 5,155,0,0,1191,1192,5,135,0,0,1192,1193,5,29,0,0,1193,1194,5,155,0,0, + 1194,1195,3,8,4,0,1195,1196,5,175,0,0,1196,1197,5,175,0,0,1197,1440,1, + 0,0,0,1198,1199,5,17,0,0,1199,1200,5,155,0,0,1200,1201,5,135,0,0,1201, + 1202,5,89,0,0,1202,1203,5,155,0,0,1203,1204,3,146,73,0,1204,1205,5,175, + 0,0,1205,1206,5,175,0,0,1206,1216,1,0,0,0,1207,1208,5,155,0,0,1208,1209, + 5,135,0,0,1209,1210,5,89,0,0,1210,1211,5,155,0,0,1211,1212,3,146,73,0, + 1212,1213,5,175,0,0,1213,1214,5,175,0,0,1214,1216,1,0,0,0,1215,1198,1, + 0,0,0,1215,1207,1,0,0,0,1216,1440,1,0,0,0,1217,1218,5,17,0,0,1218,1219, + 5,155,0,0,1219,1220,5,135,0,0,1220,1440,5,175,0,0,1221,1222,5,17,0,0, + 1222,1223,5,155,0,0,1223,1224,3,204,102,0,1224,1225,5,145,0,0,1225,1226, + 5,135,0,0,1226,1227,5,29,0,0,1227,1228,5,155,0,0,1228,1229,3,8,4,0,1229, + 1230,5,175,0,0,1230,1231,5,89,0,0,1231,1232,5,155,0,0,1232,1233,3,146, + 73,0,1233,1234,5,175,0,0,1234,1235,5,175,0,0,1235,1440,1,0,0,0,1236,1237, + 5,17,0,0,1237,1238,5,155,0,0,1238,1239,3,204,102,0,1239,1240,5,145,0, + 0,1240,1241,5,135,0,0,1241,1242,5,29,0,0,1242,1243,5,155,0,0,1243,1244, + 3,8,4,0,1244,1245,5,175,0,0,1245,1246,5,175,0,0,1246,1440,1,0,0,0,1247, + 1248,5,17,0,0,1248,1249,5,155,0,0,1249,1250,3,204,102,0,1250,1251,5,145, + 0,0,1251,1252,5,135,0,0,1252,1253,5,89,0,0,1253,1254,5,155,0,0,1254,1255, + 3,146,73,0,1255,1256,5,175,0,0,1256,1257,5,175,0,0,1257,1440,1,0,0,0, + 1258,1259,5,17,0,0,1259,1260,5,155,0,0,1260,1261,3,204,102,0,1261,1262, + 5,145,0,0,1262,1263,5,135,0,0,1263,1264,5,175,0,0,1264,1440,1,0,0,0,1265, + 1266,5,135,0,0,1266,1267,5,17,0,0,1267,1268,5,155,0,0,1268,1269,5,133, + 0,0,1269,1440,5,175,0,0,1270,1271,5,135,0,0,1271,1272,5,17,0,0,1272,1273, + 5,155,0,0,1273,1274,3,136,68,0,1274,1275,5,175,0,0,1275,1440,1,0,0,0, + 1276,1277,3,204,102,0,1277,1279,5,155,0,0,1278,1280,3,136,68,0,1279,1278, + 1,0,0,0,1279,1280,1,0,0,0,1280,1281,1,0,0,0,1281,1282,5,175,0,0,1282, + 1283,3,122,61,0,1283,1440,1,0,0,0,1284,1285,3,204,102,0,1285,1287,5,155, + 0,0,1286,1288,3,136,68,0,1287,1286,1,0,0,0,1287,1288,1,0,0,0,1288,1289, + 1,0,0,0,1289,1290,5,175,0,0,1290,1299,1,0,0,0,1291,1293,5,155,0,0,1292, + 1294,5,25,0,0,1293,1292,1,0,0,0,1293,1294,1,0,0,0,1294,1296,1,0,0,0,1295, + 1297,3,136,68,0,1296,1295,1,0,0,0,1296,1297,1,0,0,0,1297,1298,1,0,0,0, + 1298,1300,5,175,0,0,1299,1291,1,0,0,0,1299,1300,1,0,0,0,1300,1307,1,0, + 0,0,1301,1302,5,32,0,0,1302,1303,5,155,0,0,1303,1304,5,121,0,0,1304,1305, + 3,142,71,0,1305,1306,5,175,0,0,1306,1308,1,0,0,0,1307,1301,1,0,0,0,1307, + 1308,1,0,0,0,1308,1309,1,0,0,0,1309,1310,5,79,0,0,1310,1311,5,155,0,0, + 1311,1312,3,116,58,0,1312,1313,5,175,0,0,1313,1440,1,0,0,0,1314,1315, + 3,204,102,0,1315,1317,5,155,0,0,1316,1318,3,136,68,0,1317,1316,1,0,0, + 0,1317,1318,1,0,0,0,1318,1319,1,0,0,0,1319,1320,5,175,0,0,1320,1329,1, + 0,0,0,1321,1323,5,155,0,0,1322,1324,5,25,0,0,1323,1322,1,0,0,0,1323,1324, + 1,0,0,0,1324,1326,1,0,0,0,1325,1327,3,136,68,0,1326,1325,1,0,0,0,1326, + 1327,1,0,0,0,1327,1328,1,0,0,0,1328,1330,5,175,0,0,1329,1321,1,0,0,0, + 1329,1330,1,0,0,0,1330,1337,1,0,0,0,1331,1332,5,32,0,0,1332,1333,5,155, + 0,0,1333,1334,5,121,0,0,1334,1335,3,142,71,0,1335,1336,5,175,0,0,1336, + 1338,1,0,0,0,1337,1331,1,0,0,0,1337,1338,1,0,0,0,1338,1339,1,0,0,0,1339, + 1340,5,79,0,0,1340,1341,3,204,102,0,1341,1440,1,0,0,0,1342,1348,3,204, + 102,0,1343,1345,5,155,0,0,1344,1346,3,136,68,0,1345,1344,1,0,0,0,1345, + 1346,1,0,0,0,1346,1347,1,0,0,0,1347,1349,5,175,0,0,1348,1343,1,0,0,0, + 1348,1349,1,0,0,0,1349,1350,1,0,0,0,1350,1352,5,155,0,0,1351,1353,5,25, + 0,0,1352,1351,1,0,0,0,1352,1353,1,0,0,0,1353,1355,1,0,0,0,1354,1356,3, + 136,68,0,1355,1354,1,0,0,0,1355,1356,1,0,0,0,1356,1360,1,0,0,0,1357,1358, + 5,77,0,0,1358,1359,5,11,0,0,1359,1361,3,106,53,0,1360,1357,1,0,0,0,1360, + 1361,1,0,0,0,1361,1362,1,0,0,0,1362,1369,5,175,0,0,1363,1364,5,32,0,0, + 1364,1365,5,155,0,0,1365,1366,5,121,0,0,1366,1367,3,142,71,0,1367,1368, + 5,175,0,0,1368,1370,1,0,0,0,1369,1363,1,0,0,0,1369,1370,1,0,0,0,1370, + 1440,1,0,0,0,1371,1440,3,154,77,0,1372,1440,3,212,106,0,1373,1440,3,194, + 97,0,1374,1375,5,143,0,0,1375,1440,3,142,71,25,1376,1377,5,71,0,0,1377, + 1440,3,142,71,17,1378,1379,3,184,92,0,1379,1380,5,145,0,0,1380,1382,1, + 0,0,0,1381,1378,1,0,0,0,1381,1382,1,0,0,0,1382,1383,1,0,0,0,1383,1389, + 5,135,0,0,1384,1385,5,29,0,0,1385,1386,5,155,0,0,1386,1387,3,8,4,0,1387, + 1388,5,175,0,0,1388,1390,1,0,0,0,1389,1384,1,0,0,0,1389,1390,1,0,0,0, + 1390,1440,1,0,0,0,1391,1392,5,58,0,0,1392,1397,3,204,102,0,1393,1394, + 5,141,0,0,1394,1396,3,204,102,0,1395,1393,1,0,0,0,1396,1399,1,0,0,0,1397, + 1395,1,0,0,0,1397,1398,1,0,0,0,1398,1401,1,0,0,0,1399,1397,1,0,0,0,1400, + 1402,5,141,0,0,1401,1400,1,0,0,0,1401,1402,1,0,0,0,1402,1403,1,0,0,0, + 1403,1404,5,140,0,0,1404,1405,3,142,71,10,1405,1440,1,0,0,0,1406,1407, + 5,155,0,0,1407,1408,3,48,24,0,1408,1409,5,175,0,0,1409,1440,1,0,0,0,1410, + 1411,5,155,0,0,1411,1412,3,142,71,0,1412,1413,5,175,0,0,1413,1440,1,0, + 0,0,1414,1415,5,155,0,0,1415,1416,3,136,68,0,1416,1417,5,175,0,0,1417, + 1440,1,0,0,0,1418,1420,5,5,0,0,1419,1418,1,0,0,0,1419,1420,1,0,0,0,1420, + 1421,1,0,0,0,1421,1423,5,154,0,0,1422,1424,3,136,68,0,1423,1422,1,0,0, + 0,1423,1424,1,0,0,0,1424,1425,1,0,0,0,1425,1440,5,174,0,0,1426,1428,5, + 153,0,0,1427,1429,3,40,20,0,1428,1427,1,0,0,0,1428,1429,1,0,0,0,1429, + 1430,1,0,0,0,1430,1440,5,173,0,0,1431,1440,3,144,72,0,1432,1433,3,204, + 102,0,1433,1434,5,139,0,0,1434,1435,3,142,71,3,1435,1440,1,0,0,0,1436, + 1437,5,150,0,0,1437,1440,5,131,0,0,1438,1440,3,164,82,0,1439,1090,1,0, + 0,0,1439,1110,1,0,0,0,1439,1117,1,0,0,0,1439,1124,1,0,0,0,1439,1126,1, + 0,0,0,1439,1128,1,0,0,0,1439,1132,1,0,0,0,1439,1143,1,0,0,0,1439,1145, + 1,0,0,0,1439,1153,1,0,0,0,1439,1157,1,0,0,0,1439,1187,1,0,0,0,1439,1189, + 1,0,0,0,1439,1215,1,0,0,0,1439,1217,1,0,0,0,1439,1221,1,0,0,0,1439,1236, + 1,0,0,0,1439,1247,1,0,0,0,1439,1258,1,0,0,0,1439,1265,1,0,0,0,1439,1270, + 1,0,0,0,1439,1276,1,0,0,0,1439,1284,1,0,0,0,1439,1314,1,0,0,0,1439,1342, + 1,0,0,0,1439,1371,1,0,0,0,1439,1372,1,0,0,0,1439,1373,1,0,0,0,1439,1374, + 1,0,0,0,1439,1376,1,0,0,0,1439,1381,1,0,0,0,1439,1391,1,0,0,0,1439,1406, + 1,0,0,0,1439,1410,1,0,0,0,1439,1414,1,0,0,0,1439,1419,1,0,0,0,1439,1426, + 1,0,0,0,1439,1431,1,0,0,0,1439,1432,1,0,0,0,1439,1436,1,0,0,0,1439,1438, + 1,0,0,0,1440,1580,1,0,0,0,1441,1445,10,24,0,0,1442,1446,5,135,0,0,1443, + 1446,5,177,0,0,1444,1446,5,164,0,0,1445,1442,1,0,0,0,1445,1443,1,0,0, + 0,1445,1444,1,0,0,0,1446,1447,1,0,0,0,1447,1579,3,142,71,25,1448,1452, + 10,23,0,0,1449,1453,5,165,0,0,1450,1453,5,143,0,0,1451,1453,5,142,0,0, + 1452,1449,1,0,0,0,1452,1450,1,0,0,0,1452,1451,1,0,0,0,1453,1454,1,0,0, + 0,1454,1579,3,142,71,24,1455,1480,10,22,0,0,1456,1481,5,146,0,0,1457, + 1481,5,147,0,0,1458,1481,5,159,0,0,1459,1481,5,156,0,0,1460,1481,5,157, + 0,0,1461,1481,5,148,0,0,1462,1481,5,149,0,0,1463,1465,5,71,0,0,1464,1463, + 1,0,0,0,1464,1465,1,0,0,0,1465,1466,1,0,0,0,1466,1468,5,50,0,0,1467,1469, + 5,15,0,0,1468,1467,1,0,0,0,1468,1469,1,0,0,0,1469,1481,1,0,0,0,1470,1472, + 5,71,0,0,1471,1470,1,0,0,0,1471,1472,1,0,0,0,1472,1473,1,0,0,0,1473,1481, + 7,12,0,0,1474,1481,5,171,0,0,1475,1481,5,172,0,0,1476,1481,5,161,0,0, + 1477,1481,5,151,0,0,1478,1481,5,152,0,0,1479,1481,5,160,0,0,1480,1456, + 1,0,0,0,1480,1457,1,0,0,0,1480,1458,1,0,0,0,1480,1459,1,0,0,0,1480,1460, + 1,0,0,0,1480,1461,1,0,0,0,1480,1462,1,0,0,0,1480,1464,1,0,0,0,1480,1471, + 1,0,0,0,1480,1474,1,0,0,0,1480,1475,1,0,0,0,1480,1476,1,0,0,0,1480,1477, + 1,0,0,0,1480,1478,1,0,0,0,1480,1479,1,0,0,0,1481,1482,1,0,0,0,1482,1579, + 3,142,71,23,1483,1484,10,19,0,0,1484,1486,5,55,0,0,1485,1487,5,71,0,0, + 1486,1485,1,0,0,0,1486,1487,1,0,0,0,1487,1488,1,0,0,0,1488,1489,5,25, + 0,0,1489,1490,5,38,0,0,1490,1579,3,142,71,20,1491,1492,10,18,0,0,1492, + 1493,5,163,0,0,1493,1579,3,142,71,19,1494,1495,10,16,0,0,1495,1496,5, + 2,0,0,1496,1579,3,142,71,17,1497,1498,10,15,0,0,1498,1499,5,76,0,0,1499, + 1579,3,142,71,16,1500,1502,10,14,0,0,1501,1503,5,71,0,0,1502,1501,1,0, + 0,0,1502,1503,1,0,0,0,1503,1504,1,0,0,0,1504,1505,5,9,0,0,1505,1506,3, + 142,71,0,1506,1507,5,2,0,0,1507,1508,3,142,71,15,1508,1579,1,0,0,0,1509, + 1510,10,13,0,0,1510,1511,5,166,0,0,1511,1512,3,142,71,0,1512,1513,5,140, + 0,0,1513,1514,3,142,71,13,1514,1579,1,0,0,0,1515,1516,10,38,0,0,1516, + 1517,5,155,0,0,1517,1518,3,48,24,0,1518,1519,5,175,0,0,1519,1579,1,0, + 0,0,1520,1521,10,37,0,0,1521,1523,5,155,0,0,1522,1524,3,136,68,0,1523, + 1522,1,0,0,0,1523,1524,1,0,0,0,1524,1525,1,0,0,0,1525,1579,5,175,0,0, + 1526,1527,10,33,0,0,1527,1528,5,154,0,0,1528,1529,3,142,71,0,1529,1530, + 5,174,0,0,1530,1579,1,0,0,0,1531,1532,10,32,0,0,1532,1534,5,154,0,0,1533, + 1535,3,142,71,0,1534,1533,1,0,0,0,1534,1535,1,0,0,0,1535,1536,1,0,0,0, + 1536,1538,5,140,0,0,1537,1539,3,142,71,0,1538,1537,1,0,0,0,1538,1539, + 1,0,0,0,1539,1540,1,0,0,0,1540,1579,5,174,0,0,1541,1542,10,31,0,0,1542, + 1543,5,145,0,0,1543,1579,5,131,0,0,1544,1545,10,30,0,0,1545,1546,5,145, + 0,0,1546,1579,3,204,102,0,1547,1548,10,29,0,0,1548,1549,5,162,0,0,1549, + 1550,5,154,0,0,1550,1551,3,142,71,0,1551,1552,5,174,0,0,1552,1579,1,0, + 0,0,1553,1554,10,28,0,0,1554,1555,5,162,0,0,1555,1579,5,131,0,0,1556, + 1557,10,27,0,0,1557,1558,5,162,0,0,1558,1579,3,204,102,0,1559,1560,10, + 26,0,0,1560,1561,5,138,0,0,1561,1579,3,134,67,0,1562,1563,10,21,0,0,1563, + 1564,5,48,0,0,1564,1579,5,73,0,0,1565,1566,10,20,0,0,1566,1568,5,55,0, + 0,1567,1569,5,71,0,0,1568,1567,1,0,0,0,1568,1569,1,0,0,0,1569,1570,1, + 0,0,0,1570,1579,5,72,0,0,1571,1576,10,12,0,0,1572,1573,5,6,0,0,1573,1577, + 3,204,102,0,1574,1575,5,6,0,0,1575,1577,5,133,0,0,1576,1572,1,0,0,0,1576, + 1574,1,0,0,0,1577,1579,1,0,0,0,1578,1441,1,0,0,0,1578,1448,1,0,0,0,1578, + 1455,1,0,0,0,1578,1483,1,0,0,0,1578,1491,1,0,0,0,1578,1494,1,0,0,0,1578, + 1497,1,0,0,0,1578,1500,1,0,0,0,1578,1509,1,0,0,0,1578,1515,1,0,0,0,1578, + 1520,1,0,0,0,1578,1526,1,0,0,0,1578,1531,1,0,0,0,1578,1541,1,0,0,0,1578, + 1544,1,0,0,0,1578,1547,1,0,0,0,1578,1553,1,0,0,0,1578,1556,1,0,0,0,1578, + 1559,1,0,0,0,1578,1562,1,0,0,0,1578,1565,1,0,0,0,1578,1571,1,0,0,0,1579, + 1582,1,0,0,0,1580,1578,1,0,0,0,1580,1581,1,0,0,0,1581,143,1,0,0,0,1582, + 1580,1,0,0,0,1583,1584,5,155,0,0,1584,1589,3,204,102,0,1585,1586,5,141, + 0,0,1586,1588,3,204,102,0,1587,1585,1,0,0,0,1588,1591,1,0,0,0,1589,1587, + 1,0,0,0,1589,1590,1,0,0,0,1590,1593,1,0,0,0,1591,1589,1,0,0,0,1592,1594, + 5,141,0,0,1593,1592,1,0,0,0,1593,1594,1,0,0,0,1594,1595,1,0,0,0,1595, + 1596,5,175,0,0,1596,1611,1,0,0,0,1597,1602,3,204,102,0,1598,1599,5,141, + 0,0,1599,1601,3,204,102,0,1600,1598,1,0,0,0,1601,1604,1,0,0,0,1602,1600, + 1,0,0,0,1602,1603,1,0,0,0,1603,1606,1,0,0,0,1604,1602,1,0,0,0,1605,1607, + 5,141,0,0,1606,1605,1,0,0,0,1606,1607,1,0,0,0,1607,1611,1,0,0,0,1608, + 1609,5,155,0,0,1609,1611,5,175,0,0,1610,1583,1,0,0,0,1610,1597,1,0,0, + 0,1610,1608,1,0,0,0,1611,1612,1,0,0,0,1612,1615,5,134,0,0,1613,1616,3, + 142,71,0,1614,1616,3,36,18,0,1615,1613,1,0,0,0,1615,1614,1,0,0,0,1616, + 1633,1,0,0,0,1617,1618,5,58,0,0,1618,1623,3,204,102,0,1619,1620,5,141, + 0,0,1620,1622,3,204,102,0,1621,1619,1,0,0,0,1622,1625,1,0,0,0,1623,1621, + 1,0,0,0,1623,1624,1,0,0,0,1624,1627,1,0,0,0,1625,1623,1,0,0,0,1626,1628, + 5,141,0,0,1627,1626,1,0,0,0,1627,1628,1,0,0,0,1628,1629,1,0,0,0,1629, + 1630,5,140,0,0,1630,1631,3,142,71,0,1631,1633,1,0,0,0,1632,1610,1,0,0, + 0,1632,1617,1,0,0,0,1633,145,1,0,0,0,1634,1639,3,148,74,0,1635,1636,5, + 141,0,0,1636,1638,3,148,74,0,1637,1635,1,0,0,0,1638,1641,1,0,0,0,1639, + 1637,1,0,0,0,1639,1640,1,0,0,0,1640,147,1,0,0,0,1641,1639,1,0,0,0,1642, + 1643,3,142,71,0,1643,1644,5,6,0,0,1644,1645,3,204,102,0,1645,149,1,0, + 0,0,1646,1653,3,154,77,0,1647,1653,3,152,76,0,1648,1649,5,153,0,0,1649, + 1650,3,142,71,0,1650,1651,5,173,0,0,1651,1653,1,0,0,0,1652,1646,1,0,0, + 0,1652,1647,1,0,0,0,1652,1648,1,0,0,0,1653,151,1,0,0,0,1654,1655,5,189, + 0,0,1655,153,1,0,0,0,1656,1657,5,157,0,0,1657,1661,3,204,102,0,1658,1660, + 3,156,78,0,1659,1658,1,0,0,0,1660,1663,1,0,0,0,1661,1659,1,0,0,0,1661, + 1662,1,0,0,0,1662,1664,1,0,0,0,1663,1661,1,0,0,0,1664,1665,5,178,0,0, + 1665,1686,1,0,0,0,1666,1667,5,157,0,0,1667,1671,3,204,102,0,1668,1670, + 3,156,78,0,1669,1668,1,0,0,0,1670,1673,1,0,0,0,1671,1669,1,0,0,0,1671, + 1672,1,0,0,0,1672,1674,1,0,0,0,1673,1671,1,0,0,0,1674,1678,5,149,0,0, + 1675,1677,3,150,75,0,1676,1675,1,0,0,0,1677,1680,1,0,0,0,1678,1676,1, + 0,0,0,1678,1679,1,0,0,0,1679,1681,1,0,0,0,1680,1678,1,0,0,0,1681,1682, + 5,158,0,0,1682,1683,3,204,102,0,1683,1684,5,149,0,0,1684,1686,1,0,0,0, + 1685,1656,1,0,0,0,1685,1666,1,0,0,0,1686,155,1,0,0,0,1687,1688,3,204, + 102,0,1688,1689,5,147,0,0,1689,1690,3,210,105,0,1690,1699,1,0,0,0,1691, + 1692,3,204,102,0,1692,1693,5,147,0,0,1693,1694,5,153,0,0,1694,1695,3, + 142,71,0,1695,1696,5,173,0,0,1696,1699,1,0,0,0,1697,1699,3,204,102,0, + 1698,1687,1,0,0,0,1698,1691,1,0,0,0,1698,1697,1,0,0,0,1699,157,1,0,0, + 0,1700,1705,3,160,80,0,1701,1702,5,141,0,0,1702,1704,3,160,80,0,1703, + 1701,1,0,0,0,1704,1707,1,0,0,0,1705,1703,1,0,0,0,1705,1706,1,0,0,0,1706, + 1709,1,0,0,0,1707,1705,1,0,0,0,1708,1710,5,141,0,0,1709,1708,1,0,0,0, + 1709,1710,1,0,0,0,1710,159,1,0,0,0,1711,1713,3,204,102,0,1712,1714,3, + 162,81,0,1713,1712,1,0,0,0,1713,1714,1,0,0,0,1714,1718,1,0,0,0,1715,1716, + 5,117,0,0,1716,1717,5,57,0,0,1717,1719,3,162,81,0,1718,1715,1,0,0,0,1718, + 1719,1,0,0,0,1719,1720,1,0,0,0,1720,1725,5,6,0,0,1721,1723,5,71,0,0,1722, + 1721,1,0,0,0,1722,1723,1,0,0,0,1723,1724,1,0,0,0,1724,1726,5,65,0,0,1725, + 1722,1,0,0,0,1725,1726,1,0,0,0,1726,1727,1,0,0,0,1727,1728,5,155,0,0, + 1728,1729,3,48,24,0,1729,1730,5,175,0,0,1730,1736,1,0,0,0,1731,1732,3, + 142,71,0,1732,1733,5,6,0,0,1733,1734,3,204,102,0,1734,1736,1,0,0,0,1735, + 1711,1,0,0,0,1735,1731,1,0,0,0,1736,161,1,0,0,0,1737,1738,5,155,0,0,1738, + 1743,3,204,102,0,1739,1740,5,141,0,0,1740,1742,3,204,102,0,1741,1739, + 1,0,0,0,1742,1745,1,0,0,0,1743,1741,1,0,0,0,1743,1744,1,0,0,0,1744,1746, + 1,0,0,0,1745,1743,1,0,0,0,1746,1747,5,175,0,0,1747,163,1,0,0,0,1748,1756, + 3,208,104,0,1749,1750,3,184,92,0,1750,1751,5,145,0,0,1751,1753,1,0,0, + 0,1752,1749,1,0,0,0,1752,1753,1,0,0,0,1753,1754,1,0,0,0,1754,1756,3,166, + 83,0,1755,1748,1,0,0,0,1755,1752,1,0,0,0,1756,165,1,0,0,0,1757,1762,3, + 204,102,0,1758,1759,5,145,0,0,1759,1761,3,204,102,0,1760,1758,1,0,0,0, + 1761,1764,1,0,0,0,1762,1760,1,0,0,0,1762,1763,1,0,0,0,1763,167,1,0,0, + 0,1764,1762,1,0,0,0,1765,1766,6,84,-1,0,1766,1779,3,184,92,0,1767,1779, + 3,182,91,0,1768,1769,5,155,0,0,1769,1770,3,48,24,0,1770,1771,5,175,0, + 0,1771,1779,1,0,0,0,1772,1773,5,155,0,0,1773,1774,3,90,45,0,1774,1775, + 5,175,0,0,1775,1779,1,0,0,0,1776,1779,3,154,77,0,1777,1779,3,208,104, + 0,1778,1765,1,0,0,0,1778,1767,1,0,0,0,1778,1768,1,0,0,0,1778,1772,1,0, + 0,0,1778,1776,1,0,0,0,1778,1777,1,0,0,0,1779,1813,1,0,0,0,1780,1781,10, + 5,0,0,1781,1782,5,81,0,0,1782,1783,5,155,0,0,1783,1784,3,136,68,0,1784, + 1788,3,170,85,0,1785,1786,5,41,0,0,1786,1787,5,11,0,0,1787,1789,3,136, + 68,0,1788,1785,1,0,0,0,1788,1789,1,0,0,0,1789,1790,1,0,0,0,1790,1791, + 5,175,0,0,1791,1812,1,0,0,0,1792,1793,10,4,0,0,1793,1796,5,116,0,0,1794, + 1795,5,49,0,0,1795,1797,5,73,0,0,1796,1794,1,0,0,0,1796,1797,1,0,0,0, + 1797,1798,1,0,0,0,1798,1799,5,155,0,0,1799,1800,3,174,87,0,1800,1801, + 5,175,0,0,1801,1812,1,0,0,0,1802,1806,10,3,0,0,1803,1807,3,202,101,0, + 1804,1805,5,6,0,0,1805,1807,3,204,102,0,1806,1803,1,0,0,0,1806,1804,1, + 0,0,0,1807,1809,1,0,0,0,1808,1810,3,180,90,0,1809,1808,1,0,0,0,1809,1810, + 1,0,0,0,1810,1812,1,0,0,0,1811,1780,1,0,0,0,1811,1792,1,0,0,0,1811,1802, + 1,0,0,0,1812,1815,1,0,0,0,1813,1811,1,0,0,0,1813,1814,1,0,0,0,1814,169, + 1,0,0,0,1815,1813,1,0,0,0,1816,1818,5,37,0,0,1817,1819,3,172,86,0,1818, + 1817,1,0,0,0,1819,1820,1,0,0,0,1820,1818,1,0,0,0,1820,1821,1,0,0,0,1821, + 171,1,0,0,0,1822,1823,3,178,89,0,1823,1824,5,50,0,0,1824,1825,5,155,0, + 0,1825,1826,3,136,68,0,1826,1827,5,175,0,0,1827,173,1,0,0,0,1828,1833, + 3,176,88,0,1829,1830,5,141,0,0,1830,1832,3,176,88,0,1831,1829,1,0,0,0, + 1832,1835,1,0,0,0,1833,1831,1,0,0,0,1833,1834,1,0,0,0,1834,1837,1,0,0, + 0,1835,1833,1,0,0,0,1836,1838,5,141,0,0,1837,1836,1,0,0,0,1837,1838,1, + 0,0,0,1838,175,1,0,0,0,1839,1840,3,178,89,0,1840,1841,5,37,0,0,1841,1842, + 3,178,89,0,1842,1843,5,50,0,0,1843,1844,5,155,0,0,1844,1845,3,136,68, + 0,1845,1854,5,175,0,0,1846,1847,3,178,89,0,1847,1848,5,50,0,0,1848,1849, + 5,155,0,0,1849,1850,3,136,68,0,1850,1851,5,175,0,0,1851,1853,1,0,0,0, + 1852,1846,1,0,0,0,1853,1856,1,0,0,0,1854,1852,1,0,0,0,1854,1855,1,0,0, + 0,1855,177,1,0,0,0,1856,1854,1,0,0,0,1857,1858,5,155,0,0,1858,1859,3, + 136,68,0,1859,1860,5,175,0,0,1860,1863,1,0,0,0,1861,1863,3,142,71,0,1862, + 1857,1,0,0,0,1862,1861,1,0,0,0,1863,179,1,0,0,0,1864,1865,5,155,0,0,1865, + 1870,3,204,102,0,1866,1867,5,141,0,0,1867,1869,3,204,102,0,1868,1866, + 1,0,0,0,1869,1872,1,0,0,0,1870,1868,1,0,0,0,1870,1871,1,0,0,0,1871,1873, + 1,0,0,0,1872,1870,1,0,0,0,1873,1874,5,175,0,0,1874,181,1,0,0,0,1875,1876, + 3,204,102,0,1876,1878,5,155,0,0,1877,1879,3,186,93,0,1878,1877,1,0,0, + 0,1878,1879,1,0,0,0,1879,1880,1,0,0,0,1880,1881,5,175,0,0,1881,183,1, + 0,0,0,1882,1883,3,188,94,0,1883,1884,5,145,0,0,1884,1886,1,0,0,0,1885, + 1882,1,0,0,0,1885,1886,1,0,0,0,1886,1887,1,0,0,0,1887,1888,3,166,83,0, + 1888,185,1,0,0,0,1889,1894,3,142,71,0,1890,1891,5,141,0,0,1891,1893,3, + 142,71,0,1892,1890,1,0,0,0,1893,1896,1,0,0,0,1894,1892,1,0,0,0,1894,1895, + 1,0,0,0,1895,1898,1,0,0,0,1896,1894,1,0,0,0,1897,1899,5,141,0,0,1898, + 1897,1,0,0,0,1898,1899,1,0,0,0,1899,187,1,0,0,0,1900,1901,3,204,102,0, + 1901,189,1,0,0,0,1902,1911,5,129,0,0,1903,1904,5,145,0,0,1904,1911,7, + 13,0,0,1905,1906,5,131,0,0,1906,1908,5,145,0,0,1907,1909,7,13,0,0,1908, + 1907,1,0,0,0,1908,1909,1,0,0,0,1909,1911,1,0,0,0,1910,1902,1,0,0,0,1910, + 1903,1,0,0,0,1910,1905,1,0,0,0,1911,191,1,0,0,0,1912,1914,7,14,0,0,1913, + 1912,1,0,0,0,1913,1914,1,0,0,0,1914,1921,1,0,0,0,1915,1922,3,190,95,0, + 1916,1922,5,130,0,0,1917,1922,5,131,0,0,1918,1922,5,132,0,0,1919,1922, + 5,51,0,0,1920,1922,5,70,0,0,1921,1915,1,0,0,0,1921,1916,1,0,0,0,1921, + 1917,1,0,0,0,1921,1918,1,0,0,0,1921,1919,1,0,0,0,1921,1920,1,0,0,0,1922, + 193,1,0,0,0,1923,1927,3,192,96,0,1924,1927,5,133,0,0,1925,1927,5,72,0, + 0,1926,1923,1,0,0,0,1926,1924,1,0,0,0,1926,1925,1,0,0,0,1927,195,1,0, + 0,0,1928,1929,7,15,0,0,1929,197,1,0,0,0,1930,1931,7,16,0,0,1931,199,1, + 0,0,0,1932,1933,7,17,0,0,1933,201,1,0,0,0,1934,1937,5,128,0,0,1935,1937, + 3,200,100,0,1936,1934,1,0,0,0,1936,1935,1,0,0,0,1937,203,1,0,0,0,1938, + 1942,5,128,0,0,1939,1942,3,196,98,0,1940,1942,3,198,99,0,1941,1938,1, + 0,0,0,1941,1939,1,0,0,0,1941,1940,1,0,0,0,1942,205,1,0,0,0,1943,1944, + 3,210,105,0,1944,1945,5,147,0,0,1945,1946,3,192,96,0,1946,207,1,0,0,0, + 1947,1948,5,153,0,0,1948,1949,3,142,71,0,1949,1950,5,173,0,0,1950,209, + 1,0,0,0,1951,1954,5,133,0,0,1952,1954,3,212,106,0,1953,1951,1,0,0,0,1953, + 1952,1,0,0,0,1954,211,1,0,0,0,1955,1959,5,168,0,0,1956,1958,3,214,107, + 0,1957,1956,1,0,0,0,1958,1961,1,0,0,0,1959,1957,1,0,0,0,1959,1960,1,0, + 0,0,1960,1962,1,0,0,0,1961,1959,1,0,0,0,1962,1963,5,170,0,0,1963,213, + 1,0,0,0,1964,1965,5,184,0,0,1965,1966,3,142,71,0,1966,1967,5,173,0,0, + 1967,1970,1,0,0,0,1968,1970,5,183,0,0,1969,1964,1,0,0,0,1969,1968,1,0, + 0,0,1970,215,1,0,0,0,1971,1975,5,169,0,0,1972,1974,3,218,109,0,1973,1972, + 1,0,0,0,1974,1977,1,0,0,0,1975,1973,1,0,0,0,1975,1976,1,0,0,0,1976,1978, + 1,0,0,0,1977,1975,1,0,0,0,1978,1979,5,0,0,1,1979,217,1,0,0,0,1980,1981, + 5,186,0,0,1981,1982,3,142,71,0,1982,1983,5,173,0,0,1983,1986,1,0,0,0, + 1984,1986,5,185,0,0,1985,1980,1,0,0,0,1985,1984,1,0,0,0,1986,219,1,0, + 0,0,247,223,230,238,245,249,263,267,270,274,277,284,288,297,302,311,319, + 326,330,336,341,349,356,362,373,381,395,399,404,407,422,428,433,439,445, + 450,456,462,467,469,477,481,484,489,493,497,502,506,513,516,520,523,527, + 530,533,536,539,542,545,549,553,556,559,563,566,569,572,576,579,583,591, + 597,618,642,649,654,680,684,688,693,697,702,716,725,733,736,742,750,753, + 758,765,775,783,789,791,795,800,807,810,814,818,821,827,829,832,836,840, + 843,845,847,852,863,868,872,878,883,890,895,899,903,909,911,918,926,929, + 932,957,971,987,991,1002,1006,1017,1021,1028,1036,1039,1044,1049,1056, + 1059,1066,1070,1077,1081,1088,1093,1102,1106,1139,1187,1215,1279,1287, + 1293,1296,1299,1307,1317,1323,1326,1329,1337,1345,1348,1352,1355,1360, + 1369,1381,1389,1397,1401,1419,1423,1428,1439,1445,1452,1464,1468,1471, + 1480,1486,1502,1523,1534,1538,1568,1576,1578,1580,1589,1593,1602,1606, + 1610,1615,1623,1627,1632,1639,1652,1661,1671,1678,1685,1698,1705,1709, + 1713,1718,1722,1725,1735,1743,1752,1755,1762,1778,1788,1796,1806,1809, + 1811,1813,1820,1833,1837,1854,1862,1870,1878,1885,1894,1898,1908,1910, + 1913,1921,1926,1936,1941,1953,1959,1969,1975,1985 }; staticData->serializedATN = antlr4::atn::SerializedATNView(serializedATNSegment, sizeof(serializedATNSegment) / sizeof(serializedATNSegment[0])); @@ -910,20 +984,20 @@ HogQLParser::ProgramContext* HogQLParser::program() { }); try { enterOuterAlt(_localctx, 1); - setState(219); + setState(223); _errHandler->sync(this); _la = _input->LA(1); while ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & -4612811922897649666) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 64)) & -180143985094819841) != 0) || ((((_la - 129) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 129)) & 2208692995329) != 0)) { - setState(216); + ((1ULL << _la) & -9007208113127426) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 64)) & 6917529027641081853) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 128)) & 282712703402175) != 0)) { + setState(220); declaration(); - setState(221); + setState(225); _errHandler->sync(this); _la = _input->LA(1); } - setState(222); + setState(226); match(HogQLParser::EOF); } @@ -975,12 +1049,12 @@ HogQLParser::DeclarationContext* HogQLParser::declaration() { exitRule(); }); try { - setState(226); + setState(230); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::LET: { enterOuterAlt(_localctx, 1); - setState(224); + setState(228); varDecl(); break; } @@ -1014,6 +1088,7 @@ HogQLParser::DeclarationContext* HogQLParser::declaration() { case HogQLParser::EXCLUDE: case HogQLParser::EXTRACT: case HogQLParser::FINAL: + case HogQLParser::FILTER: case HogQLParser::FIRST: case HogQLParser::FN: case HogQLParser::FOLLOWING: @@ -1028,6 +1103,8 @@ HogQLParser::DeclarationContext* HogQLParser::declaration() { case HogQLParser::ID: case HogQLParser::IF: case HogQLParser::ILIKE: + case HogQLParser::IGNORE: + case HogQLParser::INCLUDE: case HogQLParser::IN: case HogQLParser::INF: case HogQLParser::INNER: @@ -1044,6 +1121,7 @@ HogQLParser::DeclarationContext* HogQLParser::declaration() { case HogQLParser::MINUTE: case HogQLParser::MONTH: case HogQLParser::NAME: + case HogQLParser::NATURAL: case HogQLParser::NAN_SQL: case HogQLParser::NOT: case HogQLParser::NULL_SQL: @@ -1055,6 +1133,8 @@ HogQLParser::DeclarationContext* HogQLParser::declaration() { case HogQLParser::OUTER: case HogQLParser::OVER: case HogQLParser::PARTITION: + case HogQLParser::PIVOT: + case HogQLParser::POSITIONAL: case HogQLParser::PRECEDING: case HogQLParser::PREWHERE: case HogQLParser::QUALIFY: @@ -1116,7 +1196,7 @@ HogQLParser::DeclarationContext* HogQLParser::declaration() { case HogQLParser::QUOTE_SINGLE_TEMPLATE: case HogQLParser::SEMICOLON: { enterOuterAlt(_localctx, 2); - setState(225); + setState(229); statement(); break; } @@ -1171,7 +1251,7 @@ HogQLParser::ExpressionContext* HogQLParser::expression() { }); try { enterOuterAlt(_localctx, 1); - setState(228); + setState(232); columnExpr(0); } @@ -1233,18 +1313,18 @@ HogQLParser::VarDeclContext* HogQLParser::varDecl() { }); try { enterOuterAlt(_localctx, 1); - setState(230); + setState(234); match(HogQLParser::LET); - setState(231); + setState(235); identifier(); - setState(234); + setState(238); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::COLONEQUALS) { - setState(232); + setState(236); match(HogQLParser::COLONEQUALS); - setState(233); + setState(237); expression(); } @@ -1308,28 +1388,28 @@ HogQLParser::IdentifierListContext* HogQLParser::identifierList() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(236); + setState(240); nestedIdentifier(); - setState(241); + setState(245); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 3, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(237); + setState(241); match(HogQLParser::COMMA); - setState(238); + setState(242); nestedIdentifier(); } - setState(243); + setState(247); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 3, _ctx); } - setState(245); + setState(249); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::COMMA) { - setState(244); + setState(248); match(HogQLParser::COMMA); } @@ -1422,89 +1502,89 @@ HogQLParser::StatementContext* HogQLParser::statement() { exitRule(); }); try { - setState(259); + setState(263); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 5, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(247); + setState(251); returnStmt(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(248); + setState(252); throwStmt(); break; } case 3: { enterOuterAlt(_localctx, 3); - setState(249); + setState(253); tryCatchStmt(); break; } case 4: { enterOuterAlt(_localctx, 4); - setState(250); + setState(254); ifStmt(); break; } case 5: { enterOuterAlt(_localctx, 5); - setState(251); + setState(255); whileStmt(); break; } case 6: { enterOuterAlt(_localctx, 6); - setState(252); + setState(256); forInStmt(); break; } case 7: { enterOuterAlt(_localctx, 7); - setState(253); + setState(257); forStmt(); break; } case 8: { enterOuterAlt(_localctx, 8); - setState(254); + setState(258); funcStmt(); break; } case 9: { enterOuterAlt(_localctx, 9); - setState(255); + setState(259); varAssignment(); break; } case 10: { enterOuterAlt(_localctx, 10); - setState(256); + setState(260); block(); break; } case 11: { enterOuterAlt(_localctx, 11); - setState(257); + setState(261); exprStmt(); break; } case 12: { enterOuterAlt(_localctx, 12); - setState(258); + setState(262); emptyStmt(); break; } @@ -1567,14 +1647,14 @@ HogQLParser::ReturnStmtContext* HogQLParser::returnStmt() { }); try { enterOuterAlt(_localctx, 1); - setState(261); + setState(265); match(HogQLParser::RETURN); - setState(263); + setState(267); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 6, _ctx)) { case 1: { - setState(262); + setState(266); expression(); break; } @@ -1582,12 +1662,12 @@ HogQLParser::ReturnStmtContext* HogQLParser::returnStmt() { default: break; } - setState(266); + setState(270); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 7, _ctx)) { case 1: { - setState(265); + setState(269); match(HogQLParser::SEMICOLON); break; } @@ -1650,14 +1730,14 @@ HogQLParser::ThrowStmtContext* HogQLParser::throwStmt() { }); try { enterOuterAlt(_localctx, 1); - setState(268); + setState(272); match(HogQLParser::THROW); - setState(270); + setState(274); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 8, _ctx)) { case 1: { - setState(269); + setState(273); expression(); break; } @@ -1665,12 +1745,12 @@ HogQLParser::ThrowStmtContext* HogQLParser::throwStmt() { default: break; } - setState(273); + setState(277); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 9, _ctx)) { case 1: { - setState(272); + setState(276); match(HogQLParser::SEMICOLON); break; } @@ -1750,31 +1830,31 @@ HogQLParser::CatchBlockContext* HogQLParser::catchBlock() { }); try { enterOuterAlt(_localctx, 1); - setState(275); + setState(279); match(HogQLParser::CATCH); - setState(284); + setState(288); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::LPAREN) { - setState(276); + setState(280); match(HogQLParser::LPAREN); - setState(277); + setState(281); antlrcpp::downCast(_localctx)->catchVar = identifier(); - setState(280); + setState(284); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::COLON) { - setState(278); + setState(282); match(HogQLParser::COLON); - setState(279); + setState(283); antlrcpp::downCast(_localctx)->catchType = identifier(); } - setState(282); + setState(286); match(HogQLParser::RPAREN); } - setState(286); + setState(290); antlrcpp::downCast(_localctx)->catchStmt = block(); } @@ -1844,28 +1924,28 @@ HogQLParser::TryCatchStmtContext* HogQLParser::tryCatchStmt() { }); try { enterOuterAlt(_localctx, 1); - setState(288); + setState(292); match(HogQLParser::TRY); - setState(289); - antlrcpp::downCast(_localctx)->tryStmt = block(); setState(293); + antlrcpp::downCast(_localctx)->tryStmt = block(); + setState(297); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::CATCH) { - setState(290); + setState(294); catchBlock(); - setState(295); + setState(299); _errHandler->sync(this); _la = _input->LA(1); } - setState(298); + setState(302); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::FINALLY) { - setState(296); + setState(300); match(HogQLParser::FINALLY); - setState(297); + setState(301); antlrcpp::downCast(_localctx)->finallyStmt = block(); } @@ -1939,24 +2019,24 @@ HogQLParser::IfStmtContext* HogQLParser::ifStmt() { }); try { enterOuterAlt(_localctx, 1); - setState(300); + setState(304); match(HogQLParser::IF); - setState(301); + setState(305); match(HogQLParser::LPAREN); - setState(302); + setState(306); expression(); - setState(303); + setState(307); match(HogQLParser::RPAREN); - setState(304); + setState(308); statement(); - setState(307); + setState(311); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 14, _ctx)) { case 1: { - setState(305); + setState(309); match(HogQLParser::ELSE); - setState(306); + setState(310); statement(); break; } @@ -2031,22 +2111,22 @@ HogQLParser::WhileStmtContext* HogQLParser::whileStmt() { }); try { enterOuterAlt(_localctx, 1); - setState(309); + setState(313); match(HogQLParser::WHILE); - setState(310); + setState(314); match(HogQLParser::LPAREN); - setState(311); + setState(315); expression(); - setState(312); + setState(316); match(HogQLParser::RPAREN); - setState(313); + setState(317); statement(); - setState(315); + setState(319); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 15, _ctx)) { case 1: { - setState(314); + setState(318); match(HogQLParser::SEMICOLON); break; } @@ -2146,28 +2226,28 @@ HogQLParser::ForStmtContext* HogQLParser::forStmt() { }); try { enterOuterAlt(_localctx, 1); - setState(317); + setState(321); match(HogQLParser::FOR); - setState(318); - match(HogQLParser::LPAREN); setState(322); + match(HogQLParser::LPAREN); + setState(326); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 16, _ctx)) { case 1: { - setState(319); + setState(323); antlrcpp::downCast(_localctx)->initializerVarDeclr = varDecl(); break; } case 2: { - setState(320); + setState(324); antlrcpp::downCast(_localctx)->initializerVarAssignment = varAssignment(); break; } case 3: { - setState(321); + setState(325); antlrcpp::downCast(_localctx)->initializerExpression = expression(); break; } @@ -2175,39 +2255,39 @@ HogQLParser::ForStmtContext* HogQLParser::forStmt() { default: break; } - setState(324); + setState(328); match(HogQLParser::SEMICOLON); - setState(326); + setState(330); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & -5189273242136756226) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 64)) & -184651991358636033) != 0) || ((((_la - 129) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 129)) & 9669739777) != 0)) { - setState(325); + ((1ULL << _la) & -4620694360411881474) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 64)) & 6629016626756845565) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 128)) & 1237726691519) != 0)) { + setState(329); antlrcpp::downCast(_localctx)->condition = expression(); } - setState(328); - match(HogQLParser::SEMICOLON); setState(332); + match(HogQLParser::SEMICOLON); + setState(336); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 18, _ctx)) { case 1: { - setState(329); + setState(333); antlrcpp::downCast(_localctx)->incrementVarDeclr = varDecl(); break; } case 2: { - setState(330); + setState(334); antlrcpp::downCast(_localctx)->incrementVarAssignment = varAssignment(); break; } case 3: { - setState(331); + setState(335); antlrcpp::downCast(_localctx)->incrementExpression = expression(); break; } @@ -2215,16 +2295,16 @@ HogQLParser::ForStmtContext* HogQLParser::forStmt() { default: break; } - setState(334); + setState(338); match(HogQLParser::RPAREN); - setState(335); + setState(339); statement(); - setState(337); + setState(341); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 19, _ctx)) { case 1: { - setState(336); + setState(340); match(HogQLParser::SEMICOLON); break; } @@ -2320,38 +2400,38 @@ HogQLParser::ForInStmtContext* HogQLParser::forInStmt() { }); try { enterOuterAlt(_localctx, 1); - setState(339); + setState(343); match(HogQLParser::FOR); - setState(340); + setState(344); match(HogQLParser::LPAREN); - setState(341); + setState(345); match(HogQLParser::LET); - setState(342); + setState(346); identifier(); - setState(345); + setState(349); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::COMMA) { - setState(343); + setState(347); match(HogQLParser::COMMA); - setState(344); + setState(348); identifier(); } - setState(347); + setState(351); match(HogQLParser::IN); - setState(348); + setState(352); expression(); - setState(349); + setState(353); match(HogQLParser::RPAREN); - setState(350); + setState(354); statement(); - setState(352); + setState(356); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 21, _ctx)) { case 1: { - setState(351); + setState(355); match(HogQLParser::SEMICOLON); break; } @@ -2431,7 +2511,7 @@ HogQLParser::FuncStmtContext* HogQLParser::funcStmt() { }); try { enterOuterAlt(_localctx, 1); - setState(354); + setState(358); _la = _input->LA(1); if (!(_la == HogQLParser::FN @@ -2442,23 +2522,23 @@ HogQLParser::FuncStmtContext* HogQLParser::funcStmt() { _errHandler->reportMatch(this); consume(); } - setState(355); + setState(359); identifier(); - setState(356); + setState(360); match(HogQLParser::LPAREN); - setState(358); + setState(362); _errHandler->sync(this); _la = _input->LA(1); - if ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & -5189554717113466882) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 64)) & 391808760944787435) != 0)) { - setState(357); + if (((((_la - 1) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 1)) & -2311473080112783361) != 0) || ((((_la - 66) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 66)) & 6268940175116599215) != 0)) { + setState(361); identifierList(); } - setState(360); + setState(364); match(HogQLParser::RPAREN); - setState(361); + setState(365); block(); } @@ -2515,11 +2595,11 @@ HogQLParser::VarAssignmentContext* HogQLParser::varAssignment() { }); try { enterOuterAlt(_localctx, 1); - setState(363); + setState(367); expression(); - setState(364); + setState(368); match(HogQLParser::COLONEQUALS); - setState(365); + setState(369); expression(); } @@ -2572,14 +2652,14 @@ HogQLParser::ExprStmtContext* HogQLParser::exprStmt() { }); try { enterOuterAlt(_localctx, 1); - setState(367); + setState(371); expression(); - setState(369); + setState(373); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 23, _ctx)) { case 1: { - setState(368); + setState(372); match(HogQLParser::SEMICOLON); break; } @@ -2634,7 +2714,7 @@ HogQLParser::EmptyStmtContext* HogQLParser::emptyStmt() { }); try { enterOuterAlt(_localctx, 1); - setState(371); + setState(375); match(HogQLParser::SEMICOLON); } @@ -2696,22 +2776,22 @@ HogQLParser::BlockContext* HogQLParser::block() { }); try { enterOuterAlt(_localctx, 1); - setState(373); - match(HogQLParser::LBRACE); setState(377); + match(HogQLParser::LBRACE); + setState(381); _errHandler->sync(this); _la = _input->LA(1); while ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & -4612811922897649666) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 64)) & -180143985094819841) != 0) || ((((_la - 129) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 129)) & 2208692995329) != 0)) { - setState(374); + ((1ULL << _la) & -9007208113127426) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 64)) & 6917529027641081853) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 128)) & 282712703402175) != 0)) { + setState(378); declaration(); - setState(379); + setState(383); _errHandler->sync(this); _la = _input->LA(1); } - setState(380); + setState(384); match(HogQLParser::RBRACE); } @@ -2768,11 +2848,11 @@ HogQLParser::KvPairContext* HogQLParser::kvPair() { }); try { enterOuterAlt(_localctx, 1); - setState(382); + setState(386); expression(); - setState(383); + setState(387); match(HogQLParser::COLON); - setState(384); + setState(388); expression(); } @@ -2835,28 +2915,28 @@ HogQLParser::KvPairListContext* HogQLParser::kvPairList() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(386); + setState(390); kvPair(); - setState(391); + setState(395); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 25, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(387); + setState(391); match(HogQLParser::COMMA); - setState(388); + setState(392); kvPair(); } - setState(393); + setState(397); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 25, _ctx); } - setState(395); + setState(399); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::COMMA) { - setState(394); + setState(398); match(HogQLParser::COMMA); } @@ -2923,23 +3003,23 @@ HogQLParser::SelectContext* HogQLParser::select() { }); try { enterOuterAlt(_localctx, 1); - setState(400); + setState(404); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 27, _ctx)) { case 1: { - setState(397); + setState(401); selectSetStmt(); break; } case 2: { - setState(398); + setState(402); selectStmt(); break; } case 3: { - setState(399); + setState(403); hogqlxTagElement(); break; } @@ -2947,15 +3027,15 @@ HogQLParser::SelectContext* HogQLParser::select() { default: break; } - setState(403); + setState(407); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::SEMICOLON) { - setState(402); + setState(406); match(HogQLParser::SEMICOLON); } - setState(405); + setState(409); match(HogQLParser::EOF); } @@ -2978,6 +3058,10 @@ HogQLParser::SelectStmtContext* HogQLParser::SelectStmtWithParensContext::select return getRuleContext(0); } +HogQLParser::WithClauseContext* HogQLParser::SelectStmtWithParensContext::withClause() { + return getRuleContext(0); +} + tree::TerminalNode* HogQLParser::SelectStmtWithParensContext::LPAREN() { return getToken(HogQLParser::LPAREN, 0); } @@ -3019,37 +3103,49 @@ HogQLParser::SelectStmtWithParensContext* HogQLParser::selectStmtWithParens() { exitRule(); }); try { - setState(413); + setState(422); _errHandler->sync(this); - switch (_input->LA(1)) { - case HogQLParser::SELECT: - case HogQLParser::WITH: { - enterOuterAlt(_localctx, 1); - setState(407); - selectStmt(); - break; - } + switch (getInterpreter()->adaptivePredict(_input, 29, _ctx)) { + case 1: { + enterOuterAlt(_localctx, 1); + setState(411); + selectStmt(); + break; + } - case HogQLParser::LPAREN: { - enterOuterAlt(_localctx, 2); - setState(408); - match(HogQLParser::LPAREN); - setState(409); - selectSetStmt(); - setState(410); - match(HogQLParser::RPAREN); - break; - } + case 2: { + enterOuterAlt(_localctx, 2); + setState(412); + withClause(); + setState(413); + match(HogQLParser::LPAREN); + setState(414); + selectSetStmt(); + setState(415); + match(HogQLParser::RPAREN); + break; + } - case HogQLParser::LBRACE: { - enterOuterAlt(_localctx, 3); - setState(412); - placeholder(); - break; - } + case 3: { + enterOuterAlt(_localctx, 3); + setState(417); + match(HogQLParser::LPAREN); + setState(418); + selectSetStmt(); + setState(419); + match(HogQLParser::RPAREN); + break; + } + + case 4: { + enterOuterAlt(_localctx, 4); + setState(421); + placeholder(); + break; + } default: - throw NoViableAltException(this); + break; } } @@ -3127,142 +3223,142 @@ HogQLParser::SubsequentSelectSetClauseContext* HogQLParser::subsequentSelectSetC }); try { enterOuterAlt(_localctx, 1); - setState(460); + setState(469); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 38, _ctx)) { case 1: { - setState(415); + setState(424); match(HogQLParser::EXCEPT); - setState(416); + setState(425); match(HogQLParser::ALL); - setState(419); + setState(428); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::BY) { - setState(417); + setState(426); match(HogQLParser::BY); - setState(418); + setState(427); match(HogQLParser::NAME); } break; } case 2: { - setState(421); + setState(430); match(HogQLParser::EXCEPT); - setState(424); + setState(433); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::BY) { - setState(422); + setState(431); match(HogQLParser::BY); - setState(423); + setState(432); match(HogQLParser::NAME); } break; } case 3: { - setState(426); + setState(435); match(HogQLParser::UNION); - setState(427); + setState(436); match(HogQLParser::ALL); - setState(430); + setState(439); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::BY) { - setState(428); + setState(437); match(HogQLParser::BY); - setState(429); + setState(438); match(HogQLParser::NAME); } break; } case 4: { - setState(432); + setState(441); match(HogQLParser::UNION); - setState(433); + setState(442); match(HogQLParser::DISTINCT); - setState(436); + setState(445); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::BY) { - setState(434); + setState(443); match(HogQLParser::BY); - setState(435); + setState(444); match(HogQLParser::NAME); } break; } case 5: { - setState(438); + setState(447); match(HogQLParser::UNION); - setState(441); + setState(450); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::BY) { - setState(439); + setState(448); match(HogQLParser::BY); - setState(440); + setState(449); match(HogQLParser::NAME); } break; } case 6: { - setState(443); + setState(452); match(HogQLParser::INTERSECT); - setState(444); + setState(453); match(HogQLParser::ALL); - setState(447); + setState(456); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::BY) { - setState(445); + setState(454); match(HogQLParser::BY); - setState(446); + setState(455); match(HogQLParser::NAME); } break; } case 7: { - setState(449); + setState(458); match(HogQLParser::INTERSECT); - setState(450); + setState(459); match(HogQLParser::DISTINCT); - setState(453); + setState(462); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::BY) { - setState(451); + setState(460); match(HogQLParser::BY); - setState(452); + setState(461); match(HogQLParser::NAME); } break; } case 8: { - setState(455); + setState(464); match(HogQLParser::INTERSECT); - setState(458); + setState(467); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::BY) { - setState(456); + setState(465); match(HogQLParser::BY); - setState(457); + setState(466); match(HogQLParser::NAME); } break; @@ -3271,7 +3367,7 @@ HogQLParser::SubsequentSelectSetClauseContext* HogQLParser::subsequentSelectSetC default: break; } - setState(462); + setState(471); selectStmtWithParens(); } @@ -3302,6 +3398,10 @@ HogQLParser::SubsequentSelectSetClauseContext* HogQLParser::SelectSetStmtContext return getRuleContext(i); } +HogQLParser::OrderByClauseContext* HogQLParser::SelectSetStmtContext::orderByClause() { + return getRuleContext(0); +} + HogQLParser::LimitAndOffsetClauseOptionalContext* HogQLParser::SelectSetStmtContext::limitAndOffsetClauseOptional() { return getRuleContext(0); } @@ -3333,28 +3433,36 @@ HogQLParser::SelectSetStmtContext* HogQLParser::selectSetStmt() { }); try { enterOuterAlt(_localctx, 1); - setState(464); + setState(473); selectStmtWithParens(); - setState(468); + setState(477); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::EXCEPT || _la == HogQLParser::INTERSECT || _la == HogQLParser::UNION) { - setState(465); + setState(474); subsequentSelectSetClause(); - setState(470); + setState(479); _errHandler->sync(this); _la = _input->LA(1); } - setState(472); + setState(481); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == HogQLParser::ORDER) { + setState(480); + orderByClause(); + } + setState(484); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::LIMIT || _la == HogQLParser::OFFSET) { - setState(471); + setState(483); limitAndOffsetClauseOptional(); } @@ -3432,41 +3540,41 @@ HogQLParser::LimitAndOffsetClauseOptionalContext* HogQLParser::limitAndOffsetCla exitRule(); }); try { - setState(501); + setState(513); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 46, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 47, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(474); + setState(486); match(HogQLParser::LIMIT); - setState(475); + setState(487); columnExpr(0); - setState(477); + setState(489); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::PERCENT) { - setState(476); + setState(488); match(HogQLParser::PERCENT); } - setState(481); + setState(493); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::COMMA) { - setState(479); + setState(491); match(HogQLParser::COMMA); - setState(480); + setState(492); columnExpr(0); } - setState(485); + setState(497); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::WITH) { - setState(483); + setState(495); match(HogQLParser::WITH); - setState(484); + setState(496); match(HogQLParser::TIES); } break; @@ -3474,40 +3582,40 @@ HogQLParser::LimitAndOffsetClauseOptionalContext* HogQLParser::limitAndOffsetCla case 2: { enterOuterAlt(_localctx, 2); - setState(487); + setState(499); match(HogQLParser::LIMIT); - setState(488); + setState(500); columnExpr(0); - setState(490); + setState(502); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::PERCENT) { - setState(489); + setState(501); match(HogQLParser::PERCENT); } - setState(494); + setState(506); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::WITH) { - setState(492); + setState(504); match(HogQLParser::WITH); - setState(493); + setState(505); match(HogQLParser::TIES); } - setState(496); + setState(508); match(HogQLParser::OFFSET); - setState(497); + setState(509); columnExpr(0); break; } case 3: { enterOuterAlt(_localctx, 3); - setState(499); + setState(511); match(HogQLParser::OFFSET); - setState(500); + setState(512); columnExpr(0); break; } @@ -3667,22 +3775,22 @@ HogQLParser::SelectStmtContext* HogQLParser::selectStmt() { }); try { enterOuterAlt(_localctx, 1); - setState(504); + setState(516); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::WITH) { - setState(503); + setState(515); antlrcpp::downCast(_localctx)->with = withClause(); } - setState(506); + setState(518); match(HogQLParser::SELECT); - setState(508); + setState(520); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 48, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 49, _ctx)) { case 1: { - setState(507); + setState(519); match(HogQLParser::DISTINCT); break; } @@ -3690,12 +3798,12 @@ HogQLParser::SelectStmtContext* HogQLParser::selectStmt() { default: break; } - setState(511); + setState(523); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 49, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 50, _ctx)) { case 1: { - setState(510); + setState(522); topClause(); break; } @@ -3703,55 +3811,55 @@ HogQLParser::SelectStmtContext* HogQLParser::selectStmt() { default: break; } - setState(513); + setState(525); antlrcpp::downCast(_localctx)->columns = selectColumnExprList(); - setState(515); + setState(527); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::FROM) { - setState(514); + setState(526); antlrcpp::downCast(_localctx)->from = fromClause(); } - setState(518); + setState(530); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & 288793326105133088) != 0)) { - setState(517); + ((1ULL << _la) & 2310346608841064480) != 0)) { + setState(529); arrayJoinClause(); } - setState(521); + setState(533); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::PREWHERE) { - setState(520); + setState(532); prewhereClause(); } - setState(524); + setState(536); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::WHERE) { - setState(523); + setState(535); antlrcpp::downCast(_localctx)->where = whereClause(); } - setState(530); + setState(542); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 55, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 56, _ctx)) { case 1: { - setState(527); + setState(539); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::USING) { - setState(526); + setState(538); match(HogQLParser::USING); } - setState(529); + setState(541); sampleClause(); break; } @@ -3759,22 +3867,22 @@ HogQLParser::SelectStmtContext* HogQLParser::selectStmt() { default: break; } - setState(533); + setState(545); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::GROUP) { - setState(532); + setState(544); groupByClause(); } - setState(537); + setState(549); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 57, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 58, _ctx)) { case 1: { - setState(535); + setState(547); match(HogQLParser::WITH); - setState(536); + setState(548); _la = _input->LA(1); if (!(_la == HogQLParser::CUBE || _la == HogQLParser::ROLLUP)) { _errHandler->recoverInline(this); @@ -3789,64 +3897,69 @@ HogQLParser::SelectStmtContext* HogQLParser::selectStmt() { default: break; } - setState(541); + setState(553); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::WITH) { - setState(539); + setState(551); match(HogQLParser::WITH); - setState(540); + setState(552); match(HogQLParser::TOTALS); } - setState(544); + setState(556); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::HAVING) { - setState(543); + setState(555); havingClause(); } - setState(547); + setState(559); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::QUALIFY) { - setState(546); + setState(558); qualifyClause(); } - setState(551); + setState(563); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::USING) { - setState(549); + setState(561); match(HogQLParser::USING); - setState(550); + setState(562); sampleClause(); } - setState(554); + setState(566); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::WINDOW) { - setState(553); + setState(565); windowClause(); } - setState(557); + setState(569); _errHandler->sync(this); - _la = _input->LA(1); - if (_la == HogQLParser::ORDER) { - setState(556); + switch (getInterpreter()->adaptivePredict(_input, 64, _ctx)) { + case 1: { + setState(568); orderByClause(); + break; + } + + default: + break; } - setState(560); + setState(572); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 64, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 65, _ctx)) { case 1: { - setState(559); + setState(571); limitByClause(); break; } @@ -3854,18 +3967,18 @@ HogQLParser::SelectStmtContext* HogQLParser::selectStmt() { default: break; } - setState(564); + setState(576); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 65, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 66, _ctx)) { case 1: { - setState(562); + setState(574); limitAndOffsetClause(); break; } case 2: { - setState(563); + setState(575); offsetOnlyClause(); break; } @@ -3873,12 +3986,12 @@ HogQLParser::SelectStmtContext* HogQLParser::selectStmt() { default: break; } - setState(567); + setState(579); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::SETTINGS) { - setState(566); + setState(578); settingsClause(); } @@ -3936,14 +4049,14 @@ HogQLParser::WithClauseContext* HogQLParser::withClause() { }); try { enterOuterAlt(_localctx, 1); - setState(569); + setState(581); match(HogQLParser::WITH); - setState(571); + setState(583); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 67, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 68, _ctx)) { case 1: { - setState(570); + setState(582); match(HogQLParser::RECURSIVE); break; } @@ -3951,7 +4064,7 @@ HogQLParser::WithClauseContext* HogQLParser::withClause() { default: break; } - setState(573); + setState(585); withExprList(); } @@ -4012,18 +4125,18 @@ HogQLParser::TopClauseContext* HogQLParser::topClause() { }); try { enterOuterAlt(_localctx, 1); - setState(575); + setState(587); match(HogQLParser::TOP); - setState(576); + setState(588); match(HogQLParser::DECIMAL_LITERAL); - setState(579); + setState(591); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 68, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 69, _ctx)) { case 1: { - setState(577); + setState(589); match(HogQLParser::WITH); - setState(578); + setState(590); match(HogQLParser::TIES); break; } @@ -4082,9 +4195,9 @@ HogQLParser::FromClauseContext* HogQLParser::fromClause() { }); try { enterOuterAlt(_localctx, 1); - setState(581); + setState(593); match(HogQLParser::FROM); - setState(582); + setState(594); joinExpr(0); } @@ -4150,14 +4263,14 @@ HogQLParser::ArrayJoinClauseContext* HogQLParser::arrayJoinClause() { }); try { enterOuterAlt(_localctx, 1); - setState(585); + setState(597); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::INNER || _la == HogQLParser::LEFT) { - setState(584); + setState(596); _la = _input->LA(1); if (!(_la == HogQLParser::INNER @@ -4169,11 +4282,11 @@ HogQLParser::ArrayJoinClauseContext* HogQLParser::arrayJoinClause() { consume(); } } - setState(587); + setState(599); match(HogQLParser::ARRAY); - setState(588); + setState(600); match(HogQLParser::JOIN); - setState(589); + setState(601); columnExprList(); } @@ -4271,35 +4384,35 @@ HogQLParser::WindowClauseContext* HogQLParser::windowClause() { }); try { enterOuterAlt(_localctx, 1); - setState(591); + setState(603); match(HogQLParser::WINDOW); - setState(592); + setState(604); identifier(); - setState(593); + setState(605); match(HogQLParser::AS); - setState(594); + setState(606); match(HogQLParser::LPAREN); - setState(595); + setState(607); windowExpr(); - setState(596); + setState(608); match(HogQLParser::RPAREN); - setState(606); + setState(618); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(597); + setState(609); match(HogQLParser::COMMA); - setState(598); + setState(610); identifier(); - setState(599); + setState(611); match(HogQLParser::AS); - setState(600); + setState(612); match(HogQLParser::LPAREN); - setState(601); + setState(613); windowExpr(); - setState(602); + setState(614); match(HogQLParser::RPAREN); - setState(608); + setState(620); _errHandler->sync(this); _la = _input->LA(1); } @@ -4354,9 +4467,9 @@ HogQLParser::PrewhereClauseContext* HogQLParser::prewhereClause() { }); try { enterOuterAlt(_localctx, 1); - setState(609); + setState(621); match(HogQLParser::PREWHERE); - setState(610); + setState(622); columnExpr(0); } @@ -4409,9 +4522,9 @@ HogQLParser::WhereClauseContext* HogQLParser::whereClause() { }); try { enterOuterAlt(_localctx, 1); - setState(612); + setState(624); match(HogQLParser::WHERE); - setState(613); + setState(625); columnExpr(0); } @@ -4438,6 +4551,10 @@ tree::TerminalNode* HogQLParser::GroupByClauseContext::BY() { return getToken(HogQLParser::BY, 0); } +tree::TerminalNode* HogQLParser::GroupByClauseContext::ALL() { + return getToken(HogQLParser::ALL, 0); +} + tree::TerminalNode* HogQLParser::GroupByClauseContext::LPAREN() { return getToken(HogQLParser::LPAREN, 0); } @@ -4497,15 +4614,21 @@ HogQLParser::GroupByClauseContext* HogQLParser::groupByClause() { }); try { enterOuterAlt(_localctx, 1); - setState(615); + setState(627); match(HogQLParser::GROUP); - setState(616); + setState(628); match(HogQLParser::BY); - setState(629); + setState(642); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 71, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 72, _ctx)) { case 1: { - setState(617); + setState(629); + match(HogQLParser::ALL); + break; + } + + case 2: { + setState(630); _la = _input->LA(1); if (!(_la == HogQLParser::CUBE || _la == HogQLParser::ROLLUP)) { _errHandler->recoverInline(this); @@ -4514,31 +4637,31 @@ HogQLParser::GroupByClauseContext* HogQLParser::groupByClause() { _errHandler->reportMatch(this); consume(); } - setState(618); + setState(631); match(HogQLParser::LPAREN); - setState(619); + setState(632); columnExprList(); - setState(620); + setState(633); match(HogQLParser::RPAREN); break; } - case 2: { - setState(622); + case 3: { + setState(635); match(HogQLParser::GROUPING); - setState(623); + setState(636); match(HogQLParser::SETS); - setState(624); + setState(637); match(HogQLParser::LPAREN); - setState(625); + setState(638); groupingSetList(); - setState(626); + setState(639); match(HogQLParser::RPAREN); break; } - case 3: { - setState(628); + case 4: { + setState(641); columnExprList(); break; } @@ -4606,17 +4729,17 @@ HogQLParser::GroupingSetListContext* HogQLParser::groupingSetList() { }); try { enterOuterAlt(_localctx, 1); - setState(631); + setState(644); groupingSet(); - setState(636); + setState(649); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(632); + setState(645); match(HogQLParser::COMMA); - setState(633); + setState(646); groupingSet(); - setState(638); + setState(651); _errHandler->sync(this); _la = _input->LA(1); } @@ -4676,20 +4799,20 @@ HogQLParser::GroupingSetContext* HogQLParser::groupingSet() { }); try { enterOuterAlt(_localctx, 1); - setState(639); + setState(652); match(HogQLParser::LPAREN); - setState(641); + setState(654); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & -5189273242136756226) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 64)) & -184651991358636033) != 0) || ((((_la - 129) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 129)) & 9669739777) != 0)) { - setState(640); + ((1ULL << _la) & -4620694360411881474) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 64)) & 6629016626756845565) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 128)) & 1237726691519) != 0)) { + setState(653); columnExprList(); } - setState(643); + setState(656); match(HogQLParser::RPAREN); } @@ -4742,9 +4865,9 @@ HogQLParser::HavingClauseContext* HogQLParser::havingClause() { }); try { enterOuterAlt(_localctx, 1); - setState(645); + setState(658); match(HogQLParser::HAVING); - setState(646); + setState(659); columnExpr(0); } @@ -4797,9 +4920,9 @@ HogQLParser::QualifyClauseContext* HogQLParser::qualifyClause() { }); try { enterOuterAlt(_localctx, 1); - setState(648); + setState(661); match(HogQLParser::QUALIFY); - setState(649); + setState(662); columnExpr(0); } @@ -4856,11 +4979,11 @@ HogQLParser::OrderByClauseContext* HogQLParser::orderByClause() { }); try { enterOuterAlt(_localctx, 1); - setState(651); + setState(664); match(HogQLParser::ORDER); - setState(652); + setState(665); match(HogQLParser::BY); - setState(653); + setState(666); orderExprList(); } @@ -4917,11 +5040,11 @@ HogQLParser::ProjectionOrderByClauseContext* HogQLParser::projectionOrderByClaus }); try { enterOuterAlt(_localctx, 1); - setState(655); + setState(668); match(HogQLParser::ORDER); - setState(656); + setState(669); match(HogQLParser::BY); - setState(657); + setState(670); columnExprList(); } @@ -4982,13 +5105,13 @@ HogQLParser::LimitByClauseContext* HogQLParser::limitByClause() { }); try { enterOuterAlt(_localctx, 1); - setState(659); + setState(672); match(HogQLParser::LIMIT); - setState(660); + setState(673); limitExpr(); - setState(661); + setState(674); match(HogQLParser::BY); - setState(662); + setState(675); columnExprList(); } @@ -5065,41 +5188,41 @@ HogQLParser::LimitAndOffsetClauseContext* HogQLParser::limitAndOffsetClause() { exitRule(); }); try { - setState(689); + setState(702); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 79, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 80, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(664); + setState(677); match(HogQLParser::LIMIT); - setState(665); + setState(678); columnExpr(0); - setState(667); + setState(680); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::PERCENT) { - setState(666); + setState(679); match(HogQLParser::PERCENT); } - setState(671); + setState(684); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::COMMA) { - setState(669); + setState(682); match(HogQLParser::COMMA); - setState(670); + setState(683); columnExpr(0); } - setState(675); + setState(688); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::WITH) { - setState(673); + setState(686); match(HogQLParser::WITH); - setState(674); + setState(687); match(HogQLParser::TIES); } break; @@ -5107,31 +5230,31 @@ HogQLParser::LimitAndOffsetClauseContext* HogQLParser::limitAndOffsetClause() { case 2: { enterOuterAlt(_localctx, 2); - setState(677); + setState(690); match(HogQLParser::LIMIT); - setState(678); + setState(691); columnExpr(0); - setState(680); + setState(693); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::PERCENT) { - setState(679); + setState(692); match(HogQLParser::PERCENT); } - setState(684); + setState(697); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::WITH) { - setState(682); + setState(695); match(HogQLParser::WITH); - setState(683); + setState(696); match(HogQLParser::TIES); } - setState(686); + setState(699); match(HogQLParser::OFFSET); - setState(687); + setState(700); columnExpr(0); break; } @@ -5190,9 +5313,9 @@ HogQLParser::OffsetOnlyClauseContext* HogQLParser::offsetOnlyClause() { }); try { enterOuterAlt(_localctx, 1); - setState(691); + setState(704); match(HogQLParser::OFFSET); - setState(692); + setState(705); columnExpr(0); } @@ -5245,9 +5368,9 @@ HogQLParser::SettingsClauseContext* HogQLParser::settingsClause() { }); try { enterOuterAlt(_localctx, 1); - setState(694); + setState(707); match(HogQLParser::SETTINGS); - setState(695); + setState(708); settingExprList(); } @@ -5313,19 +5436,19 @@ HogQLParser::ValuesClauseContext* HogQLParser::valuesClause() { }); try { enterOuterAlt(_localctx, 1); - setState(697); + setState(710); match(HogQLParser::VALUES); - setState(698); + setState(711); valuesRow(); - setState(703); + setState(716); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(699); + setState(712); match(HogQLParser::COMMA); - setState(700); + setState(713); valuesRow(); - setState(705); + setState(718); _errHandler->sync(this); _la = _input->LA(1); } @@ -5397,23 +5520,23 @@ HogQLParser::ValuesRowContext* HogQLParser::valuesRow() { }); try { enterOuterAlt(_localctx, 1); - setState(706); + setState(719); match(HogQLParser::LPAREN); - setState(707); + setState(720); columnExpr(0); - setState(712); + setState(725); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(708); + setState(721); match(HogQLParser::COMMA); - setState(709); + setState(722); columnExpr(0); - setState(714); + setState(727); _errHandler->sync(this); _la = _input->LA(1); } - setState(715); + setState(728); match(HogQLParser::RPAREN); } @@ -5441,6 +5564,37 @@ void HogQLParser::JoinExprContext::copyFrom(JoinExprContext *ctx) { ParserRuleContext::copyFrom(ctx); } +//----------------- JoinExprPositionalContext ------------------------------------------------------------------ + +std::vector HogQLParser::JoinExprPositionalContext::joinExpr() { + return getRuleContexts(); +} + +HogQLParser::JoinExprContext* HogQLParser::JoinExprPositionalContext::joinExpr(size_t i) { + return getRuleContext(i); +} + +tree::TerminalNode* HogQLParser::JoinExprPositionalContext::POSITIONAL() { + return getToken(HogQLParser::POSITIONAL, 0); +} + +tree::TerminalNode* HogQLParser::JoinExprPositionalContext::JOIN() { + return getToken(HogQLParser::JOIN, 0); +} + +HogQLParser::JoinConstraintClauseContext* HogQLParser::JoinExprPositionalContext::joinConstraintClause() { + return getRuleContext(0); +} + +HogQLParser::JoinExprPositionalContext::JoinExprPositionalContext(JoinExprContext *ctx) { copyFrom(ctx); } + + +std::any HogQLParser::JoinExprPositionalContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitJoinExprPositional(this); + else + return visitor->visitChildren(this); +} //----------------- JoinExprOpContext ------------------------------------------------------------------ std::vector HogQLParser::JoinExprOpContext::joinExpr() { @@ -5455,14 +5609,18 @@ tree::TerminalNode* HogQLParser::JoinExprOpContext::JOIN() { return getToken(HogQLParser::JOIN, 0); } -HogQLParser::JoinConstraintClauseContext* HogQLParser::JoinExprOpContext::joinConstraintClause() { - return getRuleContext(0); +tree::TerminalNode* HogQLParser::JoinExprOpContext::NATURAL() { + return getToken(HogQLParser::NATURAL, 0); } HogQLParser::JoinOpContext* HogQLParser::JoinExprOpContext::joinOp() { return getRuleContext(0); } +HogQLParser::JoinConstraintClauseContext* HogQLParser::JoinExprOpContext::joinConstraintClause() { + return getRuleContext(0); +} + HogQLParser::JoinExprOpContext::JoinExprOpContext(JoinExprContext *ctx) { copyFrom(ctx); } @@ -5495,6 +5653,45 @@ std::any HogQLParser::JoinExprTableContext::accept(tree::ParseTreeVisitor *visit else return visitor->visitChildren(this); } +//----------------- JoinExprUnpivotContext ------------------------------------------------------------------ + +HogQLParser::JoinExprContext* HogQLParser::JoinExprUnpivotContext::joinExpr() { + return getRuleContext(0); +} + +tree::TerminalNode* HogQLParser::JoinExprUnpivotContext::UNPIVOT() { + return getToken(HogQLParser::UNPIVOT, 0); +} + +tree::TerminalNode* HogQLParser::JoinExprUnpivotContext::LPAREN() { + return getToken(HogQLParser::LPAREN, 0); +} + +HogQLParser::UnpivotColumnListContext* HogQLParser::JoinExprUnpivotContext::unpivotColumnList() { + return getRuleContext(0); +} + +tree::TerminalNode* HogQLParser::JoinExprUnpivotContext::RPAREN() { + return getToken(HogQLParser::RPAREN, 0); +} + +tree::TerminalNode* HogQLParser::JoinExprUnpivotContext::INCLUDE() { + return getToken(HogQLParser::INCLUDE, 0); +} + +tree::TerminalNode* HogQLParser::JoinExprUnpivotContext::NULLS() { + return getToken(HogQLParser::NULLS, 0); +} + +HogQLParser::JoinExprUnpivotContext::JoinExprUnpivotContext(JoinExprContext *ctx) { copyFrom(ctx); } + + +std::any HogQLParser::JoinExprUnpivotContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitJoinExprUnpivot(this); + else + return visitor->visitChildren(this); +} //----------------- JoinExprParensContext ------------------------------------------------------------------ tree::TerminalNode* HogQLParser::JoinExprParensContext::LPAREN() { @@ -5541,6 +5738,53 @@ std::any HogQLParser::JoinExprCrossOpContext::accept(tree::ParseTreeVisitor *vis else return visitor->visitChildren(this); } +//----------------- JoinExprPivotContext ------------------------------------------------------------------ + +HogQLParser::JoinExprContext* HogQLParser::JoinExprPivotContext::joinExpr() { + return getRuleContext(0); +} + +tree::TerminalNode* HogQLParser::JoinExprPivotContext::PIVOT() { + return getToken(HogQLParser::PIVOT, 0); +} + +tree::TerminalNode* HogQLParser::JoinExprPivotContext::LPAREN() { + return getToken(HogQLParser::LPAREN, 0); +} + +std::vector HogQLParser::JoinExprPivotContext::columnExprList() { + return getRuleContexts(); +} + +HogQLParser::ColumnExprListContext* HogQLParser::JoinExprPivotContext::columnExprList(size_t i) { + return getRuleContext(i); +} + +HogQLParser::PivotColumnListContext* HogQLParser::JoinExprPivotContext::pivotColumnList() { + return getRuleContext(0); +} + +tree::TerminalNode* HogQLParser::JoinExprPivotContext::RPAREN() { + return getToken(HogQLParser::RPAREN, 0); +} + +tree::TerminalNode* HogQLParser::JoinExprPivotContext::GROUP() { + return getToken(HogQLParser::GROUP, 0); +} + +tree::TerminalNode* HogQLParser::JoinExprPivotContext::BY() { + return getToken(HogQLParser::BY, 0); +} + +HogQLParser::JoinExprPivotContext::JoinExprPivotContext(JoinExprContext *ctx) { copyFrom(ctx); } + + +std::any HogQLParser::JoinExprPivotContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitJoinExprPivot(this); + else + return visitor->visitChildren(this); +} HogQLParser::JoinExprContext* HogQLParser::joinExpr() { return joinExpr(0); @@ -5567,22 +5811,22 @@ HogQLParser::JoinExprContext* HogQLParser::joinExpr(int precedence) { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(729); + setState(742); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 84, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 85, _ctx)) { case 1: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(718); + setState(731); tableExpr(0); - setState(720); + setState(733); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 82, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 83, _ctx)) { case 1: { - setState(719); + setState(732); match(HogQLParser::FINAL); break; } @@ -5590,12 +5834,12 @@ HogQLParser::JoinExprContext* HogQLParser::joinExpr(int precedence) { default: break; } - setState(723); + setState(736); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 83, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 84, _ctx)) { case 1: { - setState(722); + setState(735); sampleClause(); break; } @@ -5610,11 +5854,11 @@ HogQLParser::JoinExprContext* HogQLParser::joinExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(725); + setState(738); match(HogQLParser::LPAREN); - setState(726); + setState(739); joinExpr(0); - setState(727); + setState(740); match(HogQLParser::RPAREN); break; } @@ -5623,28 +5867,28 @@ HogQLParser::JoinExprContext* HogQLParser::joinExpr(int precedence) { break; } _ctx->stop = _input->LT(-1); - setState(745); + setState(791); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 87, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 93, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { if (!_parseListeners.empty()) triggerExitRuleEvent(); previousContext = _localctx; - setState(743); + setState(789); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 86, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 92, _ctx)) { case 1: { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleJoinExpr); - setState(731); + setState(744); - if (!(precpred(_ctx, 3))) throw FailedPredicateException(this, "precpred(_ctx, 3)"); - setState(732); + if (!(precpred(_ctx, 5))) throw FailedPredicateException(this, "precpred(_ctx, 5)"); + setState(745); joinOpCross(); - setState(733); - joinExpr(4); + setState(746); + joinExpr(6); break; } @@ -5652,26 +5896,134 @@ HogQLParser::JoinExprContext* HogQLParser::joinExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleJoinExpr); - setState(735); + setState(748); - if (!(precpred(_ctx, 4))) throw FailedPredicateException(this, "precpred(_ctx, 4)"); - setState(737); + if (!(precpred(_ctx, 7))) throw FailedPredicateException(this, "precpred(_ctx, 7)"); + setState(750); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == HogQLParser::NATURAL) { + setState(749); + match(HogQLParser::NATURAL); + } + setState(753); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & 288793600983040282) != 0) || _la == HogQLParser::RIGHT + ((1ULL << _la) & 2310347158596878618) != 0) || _la == HogQLParser::RIGHT || _la == HogQLParser::SEMI) { - setState(736); + setState(752); joinOp(); } - setState(739); + setState(755); + match(HogQLParser::JOIN); + setState(756); + joinExpr(0); + setState(758); + _errHandler->sync(this); + + switch (getInterpreter()->adaptivePredict(_input, 88, _ctx)) { + case 1: { + setState(757); + joinConstraintClause(); + break; + } + + default: + break; + } + break; + } + + case 3: { + auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); + _localctx = newContext; + pushNewRecursionContext(newContext, startState, RuleJoinExpr); + setState(760); + + if (!(precpred(_ctx, 6))) throw FailedPredicateException(this, "precpred(_ctx, 6)"); + setState(761); + match(HogQLParser::POSITIONAL); + setState(762); match(HogQLParser::JOIN); - setState(740); + setState(763); joinExpr(0); - setState(741); - joinConstraintClause(); + setState(765); + _errHandler->sync(this); + + switch (getInterpreter()->adaptivePredict(_input, 89, _ctx)) { + case 1: { + setState(764); + joinConstraintClause(); + break; + } + + default: + break; + } + break; + } + + case 4: { + auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); + _localctx = newContext; + pushNewRecursionContext(newContext, startState, RuleJoinExpr); + setState(767); + + if (!(precpred(_ctx, 4))) throw FailedPredicateException(this, "precpred(_ctx, 4)"); + setState(768); + match(HogQLParser::PIVOT); + setState(769); + match(HogQLParser::LPAREN); + setState(770); + columnExprList(); + setState(771); + pivotColumnList(); + setState(775); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == HogQLParser::GROUP) { + setState(772); + match(HogQLParser::GROUP); + setState(773); + match(HogQLParser::BY); + setState(774); + columnExprList(); + } + setState(777); + match(HogQLParser::RPAREN); + break; + } + + case 5: { + auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); + _localctx = newContext; + pushNewRecursionContext(newContext, startState, RuleJoinExpr); + setState(779); + + if (!(precpred(_ctx, 3))) throw FailedPredicateException(this, "precpred(_ctx, 3)"); + setState(780); + match(HogQLParser::UNPIVOT); + setState(783); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == HogQLParser::INCLUDE) { + setState(781); + match(HogQLParser::INCLUDE); + setState(782); + match(HogQLParser::NULLS); + } + setState(785); + match(HogQLParser::LPAREN); + setState(786); + unpivotColumnList(); + setState(787); + match(HogQLParser::RPAREN); break; } @@ -5679,9 +6031,9 @@ HogQLParser::JoinExprContext* HogQLParser::joinExpr(int precedence) { break; } } - setState(747); + setState(793); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 87, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 93, _ctx); } } catch (RecognitionException &e) { @@ -5725,6 +6077,10 @@ tree::TerminalNode* HogQLParser::JoinOpFullContext::ANY() { return getToken(HogQLParser::ANY, 0); } +tree::TerminalNode* HogQLParser::JoinOpFullContext::ASOF() { + return getToken(HogQLParser::ASOF, 0); +} + HogQLParser::JoinOpFullContext::JoinOpFullContext(JoinOpContext *ctx) { copyFrom(ctx); } @@ -5748,6 +6104,10 @@ tree::TerminalNode* HogQLParser::JoinOpInnerContext::SEMI() { return getToken(HogQLParser::SEMI, 0); } +tree::TerminalNode* HogQLParser::JoinOpInnerContext::ASOF() { + return getToken(HogQLParser::ASOF, 0); +} + tree::TerminalNode* HogQLParser::JoinOpInnerContext::ALL() { return getToken(HogQLParser::ALL, 0); } @@ -5756,10 +6116,6 @@ tree::TerminalNode* HogQLParser::JoinOpInnerContext::ANY() { return getToken(HogQLParser::ANY, 0); } -tree::TerminalNode* HogQLParser::JoinOpInnerContext::ASOF() { - return getToken(HogQLParser::ASOF, 0); -} - HogQLParser::JoinOpInnerContext::JoinOpInnerContext(JoinOpContext *ctx) { copyFrom(ctx); } @@ -5771,6 +6127,10 @@ std::any HogQLParser::JoinOpInnerContext::accept(tree::ParseTreeVisitor *visitor } //----------------- JoinOpLeftRightContext ------------------------------------------------------------------ +tree::TerminalNode* HogQLParser::JoinOpLeftRightContext::ASOF() { + return getToken(HogQLParser::ASOF, 0); +} + tree::TerminalNode* HogQLParser::JoinOpLeftRightContext::LEFT() { return getToken(HogQLParser::LEFT, 0); } @@ -5779,30 +6139,26 @@ tree::TerminalNode* HogQLParser::JoinOpLeftRightContext::RIGHT() { return getToken(HogQLParser::RIGHT, 0); } -tree::TerminalNode* HogQLParser::JoinOpLeftRightContext::OUTER() { - return getToken(HogQLParser::OUTER, 0); +tree::TerminalNode* HogQLParser::JoinOpLeftRightContext::ANTI() { + return getToken(HogQLParser::ANTI, 0); } tree::TerminalNode* HogQLParser::JoinOpLeftRightContext::SEMI() { return getToken(HogQLParser::SEMI, 0); } -tree::TerminalNode* HogQLParser::JoinOpLeftRightContext::ALL() { - return getToken(HogQLParser::ALL, 0); +tree::TerminalNode* HogQLParser::JoinOpLeftRightContext::OUTER() { + return getToken(HogQLParser::OUTER, 0); } -tree::TerminalNode* HogQLParser::JoinOpLeftRightContext::ANTI() { - return getToken(HogQLParser::ANTI, 0); +tree::TerminalNode* HogQLParser::JoinOpLeftRightContext::ALL() { + return getToken(HogQLParser::ALL, 0); } tree::TerminalNode* HogQLParser::JoinOpLeftRightContext::ANY() { return getToken(HogQLParser::ANY, 0); } -tree::TerminalNode* HogQLParser::JoinOpLeftRightContext::ASOF() { - return getToken(HogQLParser::ASOF, 0); -} - HogQLParser::JoinOpLeftRightContext::JoinOpLeftRightContext(JoinOpContext *ctx) { copyFrom(ctx); } @@ -5825,23 +6181,23 @@ HogQLParser::JoinOpContext* HogQLParser::joinOp() { exitRule(); }); try { - setState(793); + setState(847); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 101, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 108, _ctx)) { case 1: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 1); - setState(759); + setState(807); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 90, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 96, _ctx)) { case 1: { - setState(749); + setState(795); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 274) != 0)) { - setState(748); + setState(794); _la = _input->LA(1); if (!((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 274) != 0))) { @@ -5852,21 +6208,21 @@ HogQLParser::JoinOpContext* HogQLParser::joinOp() { consume(); } } - setState(751); + setState(797); match(HogQLParser::INNER); break; } case 2: { - setState(752); + setState(798); match(HogQLParser::INNER); - setState(754); + setState(800); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 274) != 0)) { - setState(753); + setState(799); _la = _input->LA(1); if (!((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 274) != 0))) { @@ -5881,7 +6237,7 @@ HogQLParser::JoinOpContext* HogQLParser::joinOp() { } case 3: { - setState(756); + setState(802); _la = _input->LA(1); if (!((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 274) != 0))) { @@ -5895,17 +6251,32 @@ HogQLParser::JoinOpContext* HogQLParser::joinOp() { } case 4: { - setState(757); + setState(803); match(HogQLParser::ANTI); break; } case 5: { - setState(758); + setState(804); match(HogQLParser::SEMI); break; } + case 6: { + setState(805); + match(HogQLParser::ASOF); + setState(806); + _la = _input->LA(1); + if (!(_la == HogQLParser::ANTI || _la == HogQLParser::SEMI)) { + _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + break; + } + default: break; } @@ -5915,17 +6286,17 @@ HogQLParser::JoinOpContext* HogQLParser::joinOp() { case 2: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 2); - setState(775); + setState(829); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 95, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 102, _ctx)) { case 1: { - setState(762); + setState(810); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 282) != 0) || _la == HogQLParser::SEMI) { - setState(761); + setState(809); _la = _input->LA(1); if (!((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 282) != 0) || _la == HogQLParser::SEMI)) { @@ -5936,7 +6307,7 @@ HogQLParser::JoinOpContext* HogQLParser::joinOp() { consume(); } } - setState(764); + setState(812); _la = _input->LA(1); if (!(_la == HogQLParser::LEFT @@ -5947,19 +6318,19 @@ HogQLParser::JoinOpContext* HogQLParser::joinOp() { _errHandler->reportMatch(this); consume(); } - setState(766); + setState(814); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::OUTER) { - setState(765); + setState(813); match(HogQLParser::OUTER); } break; } case 2: { - setState(768); + setState(816); _la = _input->LA(1); if (!(_la == HogQLParser::LEFT @@ -5970,21 +6341,21 @@ HogQLParser::JoinOpContext* HogQLParser::joinOp() { _errHandler->reportMatch(this); consume(); } - setState(770); + setState(818); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::OUTER) { - setState(769); + setState(817); match(HogQLParser::OUTER); } - setState(773); + setState(821); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 282) != 0) || _la == HogQLParser::SEMI) { - setState(772); + setState(820); _la = _input->LA(1); if (!((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 282) != 0) || _la == HogQLParser::SEMI)) { @@ -5998,6 +6369,40 @@ HogQLParser::JoinOpContext* HogQLParser::joinOp() { break; } + case 3: { + setState(823); + match(HogQLParser::ASOF); + setState(824); + _la = _input->LA(1); + if (!(_la == HogQLParser::ANTI || _la == HogQLParser::SEMI)) { + _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(825); + _la = _input->LA(1); + if (!(_la == HogQLParser::LEFT + + || _la == HogQLParser::RIGHT)) { + _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(827); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == HogQLParser::OUTER) { + setState(826); + match(HogQLParser::OUTER); + } + break; + } + default: break; } @@ -6007,22 +6412,20 @@ HogQLParser::JoinOpContext* HogQLParser::joinOp() { case 3: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 3); - setState(791); + setState(845); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 100, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 107, _ctx)) { case 1: { - setState(778); + setState(832); _errHandler->sync(this); _la = _input->LA(1); - if (_la == HogQLParser::ALL - - || _la == HogQLParser::ANY) { - setState(777); + if ((((_la & ~ 0x3fULL) == 0) && + ((1ULL << _la) & 274) != 0)) { + setState(831); _la = _input->LA(1); - if (!(_la == HogQLParser::ALL - - || _la == HogQLParser::ANY)) { + if (!((((_la & ~ 0x3fULL) == 0) && + ((1ULL << _la) & 274) != 0))) { _errHandler->recoverInline(this); } else { @@ -6030,42 +6433,40 @@ HogQLParser::JoinOpContext* HogQLParser::joinOp() { consume(); } } - setState(780); + setState(834); match(HogQLParser::FULL); - setState(782); + setState(836); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::OUTER) { - setState(781); + setState(835); match(HogQLParser::OUTER); } break; } case 2: { - setState(784); + setState(838); match(HogQLParser::FULL); - setState(786); + setState(840); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::OUTER) { - setState(785); + setState(839); match(HogQLParser::OUTER); } - setState(789); + setState(843); _errHandler->sync(this); _la = _input->LA(1); - if (_la == HogQLParser::ALL - - || _la == HogQLParser::ANY) { - setState(788); + if ((((_la & ~ 0x3fULL) == 0) && + ((1ULL << _la) & 274) != 0)) { + setState(842); _la = _input->LA(1); - if (!(_la == HogQLParser::ALL - - || _la == HogQLParser::ANY)) { + if (!((((_la & ~ 0x3fULL) == 0) && + ((1ULL << _la) & 274) != 0))) { _errHandler->recoverInline(this); } else { @@ -6139,21 +6540,21 @@ HogQLParser::JoinOpCrossContext* HogQLParser::joinOpCross() { exitRule(); }); try { - setState(798); + setState(852); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::CROSS: { enterOuterAlt(_localctx, 1); - setState(795); + setState(849); match(HogQLParser::CROSS); - setState(796); + setState(850); match(HogQLParser::JOIN); break; } case HogQLParser::COMMA: { enterOuterAlt(_localctx, 2); - setState(797); + setState(851); match(HogQLParser::COMMA); break; } @@ -6223,36 +6624,36 @@ HogQLParser::JoinConstraintClauseContext* HogQLParser::joinConstraintClause() { exitRule(); }); try { - setState(809); + setState(863); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 103, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 110, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(800); + setState(854); match(HogQLParser::ON); - setState(801); + setState(855); columnExprList(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(802); + setState(856); match(HogQLParser::USING); - setState(803); + setState(857); match(HogQLParser::LPAREN); - setState(804); + setState(858); columnExprList(); - setState(805); + setState(859); match(HogQLParser::RPAREN); break; } case 3: { enterOuterAlt(_localctx, 3); - setState(807); + setState(861); match(HogQLParser::USING); - setState(808); + setState(862); columnExprList(); break; } @@ -6335,16 +6736,16 @@ HogQLParser::SampleClauseContext* HogQLParser::sampleClause() { }); try { enterOuterAlt(_localctx, 1); - setState(811); + setState(865); match(HogQLParser::SAMPLE); - setState(812); + setState(866); ratioExpr(); - setState(814); + setState(868); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 104, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 111, _ctx)) { case 1: { - setState(813); + setState(867); match(HogQLParser::PERCENT); break; } @@ -6352,14 +6753,14 @@ HogQLParser::SampleClauseContext* HogQLParser::sampleClause() { default: break; } - setState(818); + setState(872); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 105, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 112, _ctx)) { case 1: { - setState(816); + setState(870); match(HogQLParser::OFFSET); - setState(817); + setState(871); ratioExpr(); break; } @@ -6367,16 +6768,16 @@ HogQLParser::SampleClauseContext* HogQLParser::sampleClause() { default: break; } - setState(824); + setState(878); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 106, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 113, _ctx)) { case 1: { - setState(820); + setState(874); match(HogQLParser::LPAREN); - setState(821); + setState(875); identifier(); - setState(822); + setState(876); match(HogQLParser::RPAREN); break; } @@ -6444,14 +6845,14 @@ HogQLParser::LimitExprContext* HogQLParser::limitExpr() { }); try { enterOuterAlt(_localctx, 1); - setState(826); + setState(880); columnExpr(0); - setState(829); + setState(883); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::OFFSET || _la == HogQLParser::COMMA) { - setState(827); + setState(881); _la = _input->LA(1); if (!(_la == HogQLParser::OFFSET || _la == HogQLParser::COMMA)) { _errHandler->recoverInline(this); @@ -6460,7 +6861,7 @@ HogQLParser::LimitExprContext* HogQLParser::limitExpr() { _errHandler->reportMatch(this); consume(); } - setState(828); + setState(882); columnExpr(0); } @@ -6523,17 +6924,17 @@ HogQLParser::OrderExprListContext* HogQLParser::orderExprList() { }); try { enterOuterAlt(_localctx, 1); - setState(831); + setState(885); orderExpr(); - setState(836); + setState(890); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(832); + setState(886); match(HogQLParser::COMMA); - setState(833); + setState(887); orderExpr(); - setState(838); + setState(892); _errHandler->sync(this); _la = _input->LA(1); } @@ -6617,15 +7018,15 @@ HogQLParser::OrderExprContext* HogQLParser::orderExpr() { }); try { enterOuterAlt(_localctx, 1); - setState(839); + setState(893); columnExpr(0); - setState(841); + setState(895); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 25165952) != 0)) { - setState(840); + setState(894); _la = _input->LA(1); if (!((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 25165952) != 0))) { @@ -6636,14 +7037,14 @@ HogQLParser::OrderExprContext* HogQLParser::orderExpr() { consume(); } } - setState(845); + setState(899); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::NULLS) { - setState(843); + setState(897); match(HogQLParser::NULLS); - setState(844); + setState(898); _la = _input->LA(1); if (!(_la == HogQLParser::FIRST @@ -6655,14 +7056,14 @@ HogQLParser::OrderExprContext* HogQLParser::orderExpr() { consume(); } } - setState(849); + setState(903); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::COLLATE) { - setState(847); + setState(901); match(HogQLParser::COLLATE); - setState(848); + setState(902); match(HogQLParser::STRING_LITERAL); } @@ -6723,12 +7124,12 @@ HogQLParser::RatioExprContext* HogQLParser::ratioExpr() { exitRule(); }); try { - setState(857); + setState(911); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::LBRACE: { enterOuterAlt(_localctx, 1); - setState(851); + setState(905); placeholder(); break; } @@ -6743,16 +7144,16 @@ HogQLParser::RatioExprContext* HogQLParser::ratioExpr() { case HogQLParser::DOT: case HogQLParser::PLUS: { enterOuterAlt(_localctx, 2); - setState(852); + setState(906); numberLiteral(); - setState(855); + setState(909); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 112, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 119, _ctx)) { case 1: { - setState(853); + setState(907); match(HogQLParser::SLASH); - setState(854); + setState(908); numberLiteral(); break; } @@ -6826,17 +7227,17 @@ HogQLParser::SettingExprListContext* HogQLParser::settingExprList() { }); try { enterOuterAlt(_localctx, 1); - setState(859); + setState(913); settingExpr(); - setState(864); + setState(918); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(860); + setState(914); match(HogQLParser::COMMA); - setState(861); + setState(915); settingExpr(); - setState(866); + setState(920); _errHandler->sync(this); _la = _input->LA(1); } @@ -6895,11 +7296,11 @@ HogQLParser::SettingExprContext* HogQLParser::settingExpr() { }); try { enterOuterAlt(_localctx, 1); - setState(867); + setState(921); identifier(); - setState(868); + setState(922); match(HogQLParser::EQ_SINGLE); - setState(869); + setState(923); literal(); } @@ -6957,30 +7358,30 @@ HogQLParser::WindowExprContext* HogQLParser::windowExpr() { }); try { enterOuterAlt(_localctx, 1); - setState(872); + setState(926); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::PARTITION) { - setState(871); + setState(925); winPartitionByClause(); } - setState(875); + setState(929); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::ORDER) { - setState(874); + setState(928); winOrderByClause(); } - setState(878); + setState(932); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::RANGE || _la == HogQLParser::ROWS) { - setState(877); + setState(931); winFrameClause(); } @@ -7038,11 +7439,11 @@ HogQLParser::WinPartitionByClauseContext* HogQLParser::winPartitionByClause() { }); try { enterOuterAlt(_localctx, 1); - setState(880); + setState(934); match(HogQLParser::PARTITION); - setState(881); + setState(935); match(HogQLParser::BY); - setState(882); + setState(936); columnExprList(); } @@ -7099,11 +7500,11 @@ HogQLParser::WinOrderByClauseContext* HogQLParser::winOrderByClause() { }); try { enterOuterAlt(_localctx, 1); - setState(884); + setState(938); match(HogQLParser::ORDER); - setState(885); + setState(939); match(HogQLParser::BY); - setState(886); + setState(940); orderExprList(); } @@ -7168,15 +7569,15 @@ HogQLParser::WithinGroupClauseContext* HogQLParser::withinGroupClause() { }); try { enterOuterAlt(_localctx, 1); - setState(888); + setState(942); match(HogQLParser::WITHIN); - setState(889); + setState(943); match(HogQLParser::GROUP); - setState(890); + setState(944); match(HogQLParser::LPAREN); - setState(891); + setState(945); orderByClause(); - setState(892); + setState(946); match(HogQLParser::RPAREN); } @@ -7234,7 +7635,7 @@ HogQLParser::WinFrameClauseContext* HogQLParser::winFrameClause() { }); try { enterOuterAlt(_localctx, 1); - setState(894); + setState(948); _la = _input->LA(1); if (!(_la == HogQLParser::RANGE @@ -7245,7 +7646,7 @@ HogQLParser::WinFrameClauseContext* HogQLParser::winFrameClause() { _errHandler->reportMatch(this); consume(); } - setState(895); + setState(949); winFrameExtend(); } @@ -7327,13 +7728,13 @@ HogQLParser::WinFrameExtendContext* HogQLParser::winFrameExtend() { exitRule(); }); try { - setState(903); + setState(957); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 118, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 125, _ctx)) { case 1: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 1); - setState(897); + setState(951); winFrameBound(); break; } @@ -7341,13 +7742,13 @@ HogQLParser::WinFrameExtendContext* HogQLParser::winFrameExtend() { case 2: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 2); - setState(898); + setState(952); match(HogQLParser::BETWEEN); - setState(899); + setState(953); winFrameBound(); - setState(900); + setState(954); match(HogQLParser::AND); - setState(901); + setState(955); winFrameBound(); break; } @@ -7422,45 +7823,45 @@ HogQLParser::WinFrameBoundContext* HogQLParser::winFrameBound() { }); try { enterOuterAlt(_localctx, 1); - setState(917); + setState(971); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 119, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 126, _ctx)) { case 1: { - setState(905); + setState(959); match(HogQLParser::CURRENT); - setState(906); + setState(960); match(HogQLParser::ROW); break; } case 2: { - setState(907); + setState(961); match(HogQLParser::UNBOUNDED); - setState(908); + setState(962); match(HogQLParser::PRECEDING); break; } case 3: { - setState(909); + setState(963); match(HogQLParser::UNBOUNDED); - setState(910); + setState(964); match(HogQLParser::FOLLOWING); break; } case 4: { - setState(911); + setState(965); columnExpr(0); - setState(912); + setState(966); match(HogQLParser::PRECEDING); break; } case 5: { - setState(914); + setState(968); columnExpr(0); - setState(915); + setState(969); match(HogQLParser::FOLLOWING); break; } @@ -7519,9 +7920,9 @@ HogQLParser::ExprContext* HogQLParser::expr() { }); try { enterOuterAlt(_localctx, 1); - setState(919); + setState(973); columnExpr(0); - setState(920); + setState(974); match(HogQLParser::EOF); } @@ -7619,6 +8020,33 @@ std::any HogQLParser::ColumnTypeExprParamContext::accept(tree::ParseTreeVisitor else return visitor->visitChildren(this); } +//----------------- ColumnTypeExprArrayContext ------------------------------------------------------------------ + +HogQLParser::ColumnTypeExprContext* HogQLParser::ColumnTypeExprArrayContext::columnTypeExpr() { + return getRuleContext(0); +} + +tree::TerminalNode* HogQLParser::ColumnTypeExprArrayContext::LBRACKET() { + return getToken(HogQLParser::LBRACKET, 0); +} + +tree::TerminalNode* HogQLParser::ColumnTypeExprArrayContext::RBRACKET() { + return getToken(HogQLParser::RBRACKET, 0); +} + +tree::TerminalNode* HogQLParser::ColumnTypeExprArrayContext::DECIMAL_LITERAL() { + return getToken(HogQLParser::DECIMAL_LITERAL, 0); +} + +HogQLParser::ColumnTypeExprArrayContext::ColumnTypeExprArrayContext(ColumnTypeExprContext *ctx) { copyFrom(ctx); } + + +std::any HogQLParser::ColumnTypeExprArrayContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitColumnTypeExprArray(this); + else + return visitor->visitChildren(this); +} //----------------- ColumnTypeExprComplexContext ------------------------------------------------------------------ HogQLParser::IdentifierContext* HogQLParser::ColumnTypeExprComplexContext::identifier() { @@ -7731,182 +8159,207 @@ std::any HogQLParser::ColumnTypeExprCompoundContext::accept(tree::ParseTreeVisit else return visitor->visitChildren(this); } + HogQLParser::ColumnTypeExprContext* HogQLParser::columnTypeExpr() { - ColumnTypeExprContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 132, HogQLParser::RuleColumnTypeExpr); - size_t _la = 0; + return columnTypeExpr(0); +} + +HogQLParser::ColumnTypeExprContext* HogQLParser::columnTypeExpr(int precedence) { + ParserRuleContext *parentContext = _ctx; + size_t parentState = getState(); + HogQLParser::ColumnTypeExprContext *_localctx = _tracker.createInstance(_ctx, parentState); + HogQLParser::ColumnTypeExprContext *previousContext = _localctx; + (void)previousContext; // Silence compiler, in case the context is not used by generated code. + size_t startState = 132; + enterRecursionRule(_localctx, 132, HogQLParser::RuleColumnTypeExpr, precedence); + + size_t _la = 0; #if __cplusplus > 201703L auto onExit = finally([=, this] { #else auto onExit = finally([=] { #endif - exitRule(); + unrollRecursionContexts(parentContext); }); try { size_t alt; - setState(984); + enterOuterAlt(_localctx, 1); + setState(1039); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 128, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 135, _ctx)) { case 1: { - _localctx = _tracker.createInstance(_localctx); - enterOuterAlt(_localctx, 1); - setState(922); + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + + setState(977); identifier(); - setState(923); + setState(978); match(HogQLParser::LPAREN); - setState(924); + setState(979); identifier(); - setState(925); - columnTypeExpr(); - setState(932); + setState(980); + columnTypeExpr(0); + setState(987); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 120, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 127, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(926); + setState(981); match(HogQLParser::COMMA); - setState(927); + setState(982); identifier(); - setState(928); - columnTypeExpr(); + setState(983); + columnTypeExpr(0); } - setState(934); + setState(989); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 120, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 127, _ctx); } - setState(936); + setState(991); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::COMMA) { - setState(935); + setState(990); match(HogQLParser::COMMA); } - setState(938); + setState(993); match(HogQLParser::RPAREN); break; } case 2: { - _localctx = _tracker.createInstance(_localctx); - enterOuterAlt(_localctx, 2); - setState(940); + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + setState(995); identifier(); - setState(941); + setState(996); match(HogQLParser::LPAREN); - setState(942); + setState(997); enumValue(); - setState(947); + setState(1002); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 122, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 129, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(943); + setState(998); match(HogQLParser::COMMA); - setState(944); + setState(999); enumValue(); } - setState(949); + setState(1004); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 122, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 129, _ctx); } - setState(951); + setState(1006); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::COMMA) { - setState(950); + setState(1005); match(HogQLParser::COMMA); } - setState(953); + setState(1008); match(HogQLParser::RPAREN); break; } case 3: { - _localctx = _tracker.createInstance(_localctx); - enterOuterAlt(_localctx, 3); - setState(955); + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + setState(1010); identifier(); - setState(956); + setState(1011); match(HogQLParser::LPAREN); - setState(957); - columnTypeExpr(); - setState(962); + setState(1012); + columnTypeExpr(0); + setState(1017); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 124, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 131, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(958); + setState(1013); match(HogQLParser::COMMA); - setState(959); - columnTypeExpr(); + setState(1014); + columnTypeExpr(0); } - setState(964); + setState(1019); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 124, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 131, _ctx); } - setState(966); + setState(1021); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::COMMA) { - setState(965); + setState(1020); match(HogQLParser::COMMA); } - setState(968); + setState(1023); match(HogQLParser::RPAREN); break; } case 4: { - _localctx = _tracker.createInstance(_localctx); - enterOuterAlt(_localctx, 4); - setState(970); + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + setState(1025); identifier(); - setState(971); + setState(1026); match(HogQLParser::LPAREN); - setState(973); + setState(1028); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & -5189273242136756226) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 64)) & -184651991358636033) != 0) || ((((_la - 129) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 129)) & 9669739777) != 0)) { - setState(972); + ((1ULL << _la) & -4620694360411881474) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 64)) & 6629016626756845565) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 128)) & 1237726691519) != 0)) { + setState(1027); columnExprList(); } - setState(975); + setState(1030); match(HogQLParser::RPAREN); break; } case 5: { - _localctx = _tracker.createInstance(_localctx); - enterOuterAlt(_localctx, 5); - setState(977); + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + setState(1032); identifier(); - setState(979); + setState(1034); _errHandler->sync(this); - _la = _input->LA(1); + alt = 1; do { - setState(978); - identifier(); - setState(981); + switch (alt) { + case 1: { + setState(1033); + identifier(); + break; + } + + default: + throw NoViableAltException(this); + } + setState(1036); _errHandler->sync(this); - _la = _input->LA(1); - } while ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & -5189554717113466882) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 64)) & 391808760944787435) != 0)); + alt = getInterpreter()->adaptivePredict(_input, 134, _ctx); + } while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER); break; } case 6: { - _localctx = _tracker.createInstance(_localctx); - enterOuterAlt(_localctx, 6); - setState(983); + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + setState(1038); identifier(); break; } @@ -7914,14 +8367,44 @@ HogQLParser::ColumnTypeExprContext* HogQLParser::columnTypeExpr() { default: break; } - + _ctx->stop = _input->LT(-1); + setState(1049); + _errHandler->sync(this); + alt = getInterpreter()->adaptivePredict(_input, 137, _ctx); + while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { + if (alt == 1) { + if (!_parseListeners.empty()) + triggerExitRuleEvent(); + previousContext = _localctx; + auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); + _localctx = newContext; + pushNewRecursionContext(newContext, startState, RuleColumnTypeExpr); + setState(1041); + + if (!(precpred(_ctx, 7))) throw FailedPredicateException(this, "precpred(_ctx, 7)"); + setState(1042); + match(HogQLParser::LBRACKET); + setState(1044); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == HogQLParser::DECIMAL_LITERAL) { + setState(1043); + match(HogQLParser::DECIMAL_LITERAL); + } + setState(1046); + match(HogQLParser::RBRACKET); + } + setState(1051); + _errHandler->sync(this); + alt = getInterpreter()->adaptivePredict(_input, 137, _ctx); + } } catch (RecognitionException &e) { _errHandler->reportError(this, e); _localctx->exception = std::current_exception(); _errHandler->recover(this, _localctx->exception); } - return _localctx; } @@ -7987,21 +8470,21 @@ HogQLParser::ColumnTypeCastExprContext* HogQLParser::columnTypeCastExpr() { }); try { size_t alt; - setState(993); + setState(1059); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 130, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 139, _ctx)) { case 1: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 1); - setState(986); + setState(1052); identifier(); - setState(988); + setState(1054); _errHandler->sync(this); alt = 1; do { switch (alt) { case 1: { - setState(987); + setState(1053); identifier(); break; } @@ -8009,9 +8492,9 @@ HogQLParser::ColumnTypeCastExprContext* HogQLParser::columnTypeCastExpr() { default: throw NoViableAltException(this); } - setState(990); + setState(1056); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 129, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 138, _ctx); } while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER); break; } @@ -8019,7 +8502,7 @@ HogQLParser::ColumnTypeCastExprContext* HogQLParser::columnTypeCastExpr() { case 2: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 2); - setState(992); + setState(1058); identifier(); break; } @@ -8087,28 +8570,28 @@ HogQLParser::ColumnExprListContext* HogQLParser::columnExprList() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(995); + setState(1061); columnExpr(0); - setState(1000); + setState(1066); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 131, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 140, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(996); + setState(1062); match(HogQLParser::COMMA); - setState(997); + setState(1063); columnExpr(0); } - setState(1002); + setState(1068); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 131, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 140, _ctx); } - setState(1004); + setState(1070); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 132, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 141, _ctx)) { case 1: { - setState(1003); + setState(1069); match(HogQLParser::COMMA); break; } @@ -8177,28 +8660,28 @@ HogQLParser::SelectColumnExprListContext* HogQLParser::selectColumnExprList() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1006); + setState(1072); selectColumnExpr(); - setState(1011); + setState(1077); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 133, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 142, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1007); + setState(1073); match(HogQLParser::COMMA); - setState(1008); + setState(1074); selectColumnExpr(); } - setState(1013); + setState(1079); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 133, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 142, _ctx); } - setState(1015); + setState(1081); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::COMMA) { - setState(1014); + setState(1080); match(HogQLParser::COMMA); } @@ -8277,17 +8760,17 @@ HogQLParser::SelectColumnExprContext* HogQLParser::selectColumnExpr() { exitRule(); }); try { - setState(1022); + setState(1088); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 135, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 144, _ctx)) { case 1: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 1); - setState(1017); + setState(1083); identifier(); - setState(1018); + setState(1084); match(HogQLParser::COLON); - setState(1019); + setState(1085); columnExpr(0); break; } @@ -8295,7 +8778,7 @@ HogQLParser::SelectColumnExprContext* HogQLParser::selectColumnExpr() { case 2: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 2); - setState(1021); + setState(1087); columnExpr(0); break; } @@ -8454,6 +8937,10 @@ tree::TerminalNode* HogQLParser::ColumnExprArrayContext::RBRACKET() { return getToken(HogQLParser::RBRACKET, 0); } +tree::TerminalNode* HogQLParser::ColumnExprArrayContext::ARRAY() { + return getToken(HogQLParser::ARRAY, 0); +} + HogQLParser::ColumnExprListContext* HogQLParser::ColumnExprArrayContext::columnExprList() { return getRuleContext(0); } @@ -8723,6 +9210,18 @@ tree::TerminalNode* HogQLParser::ColumnExprWinFunctionTargetContext::RPAREN(size return getToken(HogQLParser::RPAREN, i); } +tree::TerminalNode* HogQLParser::ColumnExprWinFunctionTargetContext::FILTER() { + return getToken(HogQLParser::FILTER, 0); +} + +tree::TerminalNode* HogQLParser::ColumnExprWinFunctionTargetContext::WHERE() { + return getToken(HogQLParser::WHERE, 0); +} + +HogQLParser::ColumnExprContext* HogQLParser::ColumnExprWinFunctionTargetContext::columnExpr() { + return getRuleContext(0); +} + std::vector HogQLParser::ColumnExprWinFunctionTargetContext::columnExprList() { return getRuleContexts(); } @@ -8974,36 +9473,87 @@ std::any HogQLParser::ColumnExprAndContext::accept(tree::ParseTreeVisitor *visit else return visitor->visitChildren(this); } -//----------------- ColumnExprNotContext ------------------------------------------------------------------ +//----------------- ColumnExprColumnsQualifiedExcludeContext ------------------------------------------------------------------ -tree::TerminalNode* HogQLParser::ColumnExprNotContext::NOT() { - return getToken(HogQLParser::NOT, 0); +tree::TerminalNode* HogQLParser::ColumnExprColumnsQualifiedExcludeContext::COLUMNS() { + return getToken(HogQLParser::COLUMNS, 0); } -HogQLParser::ColumnExprContext* HogQLParser::ColumnExprNotContext::columnExpr() { - return getRuleContext(0); +std::vector HogQLParser::ColumnExprColumnsQualifiedExcludeContext::LPAREN() { + return getTokens(HogQLParser::LPAREN); } -HogQLParser::ColumnExprNotContext::ColumnExprNotContext(ColumnExprContext *ctx) { copyFrom(ctx); } - - -std::any HogQLParser::ColumnExprNotContext::accept(tree::ParseTreeVisitor *visitor) { - if (auto parserVisitor = dynamic_cast(visitor)) - return parserVisitor->visitColumnExprNot(this); - else - return visitor->visitChildren(this); +tree::TerminalNode* HogQLParser::ColumnExprColumnsQualifiedExcludeContext::LPAREN(size_t i) { + return getToken(HogQLParser::LPAREN, i); } -//----------------- ColumnExprFunctionContext ------------------------------------------------------------------ -HogQLParser::IdentifierContext* HogQLParser::ColumnExprFunctionContext::identifier() { +HogQLParser::IdentifierContext* HogQLParser::ColumnExprColumnsQualifiedExcludeContext::identifier() { return getRuleContext(0); } -std::vector HogQLParser::ColumnExprFunctionContext::LPAREN() { - return getTokens(HogQLParser::LPAREN); +tree::TerminalNode* HogQLParser::ColumnExprColumnsQualifiedExcludeContext::DOT() { + return getToken(HogQLParser::DOT, 0); } -tree::TerminalNode* HogQLParser::ColumnExprFunctionContext::LPAREN(size_t i) { +tree::TerminalNode* HogQLParser::ColumnExprColumnsQualifiedExcludeContext::ASTERISK() { + return getToken(HogQLParser::ASTERISK, 0); +} + +tree::TerminalNode* HogQLParser::ColumnExprColumnsQualifiedExcludeContext::EXCLUDE() { + return getToken(HogQLParser::EXCLUDE, 0); +} + +HogQLParser::IdentifierListContext* HogQLParser::ColumnExprColumnsQualifiedExcludeContext::identifierList() { + return getRuleContext(0); +} + +std::vector HogQLParser::ColumnExprColumnsQualifiedExcludeContext::RPAREN() { + return getTokens(HogQLParser::RPAREN); +} + +tree::TerminalNode* HogQLParser::ColumnExprColumnsQualifiedExcludeContext::RPAREN(size_t i) { + return getToken(HogQLParser::RPAREN, i); +} + +HogQLParser::ColumnExprColumnsQualifiedExcludeContext::ColumnExprColumnsQualifiedExcludeContext(ColumnExprContext *ctx) { copyFrom(ctx); } + + +std::any HogQLParser::ColumnExprColumnsQualifiedExcludeContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitColumnExprColumnsQualifiedExclude(this); + else + return visitor->visitChildren(this); +} +//----------------- ColumnExprNotContext ------------------------------------------------------------------ + +tree::TerminalNode* HogQLParser::ColumnExprNotContext::NOT() { + return getToken(HogQLParser::NOT, 0); +} + +HogQLParser::ColumnExprContext* HogQLParser::ColumnExprNotContext::columnExpr() { + return getRuleContext(0); +} + +HogQLParser::ColumnExprNotContext::ColumnExprNotContext(ColumnExprContext *ctx) { copyFrom(ctx); } + + +std::any HogQLParser::ColumnExprNotContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitColumnExprNot(this); + else + return visitor->visitChildren(this); +} +//----------------- ColumnExprFunctionContext ------------------------------------------------------------------ + +HogQLParser::IdentifierContext* HogQLParser::ColumnExprFunctionContext::identifier() { + return getRuleContext(0); +} + +std::vector HogQLParser::ColumnExprFunctionContext::LPAREN() { + return getTokens(HogQLParser::LPAREN); +} + +tree::TerminalNode* HogQLParser::ColumnExprFunctionContext::LPAREN(size_t i) { return getToken(HogQLParser::LPAREN, i); } @@ -9019,6 +9569,26 @@ tree::TerminalNode* HogQLParser::ColumnExprFunctionContext::DISTINCT() { return getToken(HogQLParser::DISTINCT, 0); } +tree::TerminalNode* HogQLParser::ColumnExprFunctionContext::ORDER() { + return getToken(HogQLParser::ORDER, 0); +} + +tree::TerminalNode* HogQLParser::ColumnExprFunctionContext::BY() { + return getToken(HogQLParser::BY, 0); +} + +HogQLParser::OrderExprListContext* HogQLParser::ColumnExprFunctionContext::orderExprList() { + return getRuleContext(0); +} + +tree::TerminalNode* HogQLParser::ColumnExprFunctionContext::FILTER() { + return getToken(HogQLParser::FILTER, 0); +} + +tree::TerminalNode* HogQLParser::ColumnExprFunctionContext::WHERE() { + return getToken(HogQLParser::WHERE, 0); +} + std::vector HogQLParser::ColumnExprFunctionContext::columnExprList() { return getRuleContexts(); } @@ -9027,6 +9597,10 @@ HogQLParser::ColumnExprListContext* HogQLParser::ColumnExprFunctionContext::colu return getRuleContext(i); } +HogQLParser::ColumnExprContext* HogQLParser::ColumnExprFunctionContext::columnExpr() { + return getRuleContext(0); +} + HogQLParser::ColumnExprFunctionContext::ColumnExprFunctionContext(ColumnExprContext *ctx) { copyFrom(ctx); } @@ -9187,6 +9761,57 @@ std::any HogQLParser::ColumnExprArraySliceContext::accept(tree::ParseTreeVisitor else return visitor->visitChildren(this); } +//----------------- ColumnExprColumnsQualifiedReplaceContext ------------------------------------------------------------------ + +tree::TerminalNode* HogQLParser::ColumnExprColumnsQualifiedReplaceContext::COLUMNS() { + return getToken(HogQLParser::COLUMNS, 0); +} + +std::vector HogQLParser::ColumnExprColumnsQualifiedReplaceContext::LPAREN() { + return getTokens(HogQLParser::LPAREN); +} + +tree::TerminalNode* HogQLParser::ColumnExprColumnsQualifiedReplaceContext::LPAREN(size_t i) { + return getToken(HogQLParser::LPAREN, i); +} + +HogQLParser::IdentifierContext* HogQLParser::ColumnExprColumnsQualifiedReplaceContext::identifier() { + return getRuleContext(0); +} + +tree::TerminalNode* HogQLParser::ColumnExprColumnsQualifiedReplaceContext::DOT() { + return getToken(HogQLParser::DOT, 0); +} + +tree::TerminalNode* HogQLParser::ColumnExprColumnsQualifiedReplaceContext::ASTERISK() { + return getToken(HogQLParser::ASTERISK, 0); +} + +tree::TerminalNode* HogQLParser::ColumnExprColumnsQualifiedReplaceContext::REPLACE() { + return getToken(HogQLParser::REPLACE, 0); +} + +HogQLParser::ColumnsReplaceListContext* HogQLParser::ColumnExprColumnsQualifiedReplaceContext::columnsReplaceList() { + return getRuleContext(0); +} + +std::vector HogQLParser::ColumnExprColumnsQualifiedReplaceContext::RPAREN() { + return getTokens(HogQLParser::RPAREN); +} + +tree::TerminalNode* HogQLParser::ColumnExprColumnsQualifiedReplaceContext::RPAREN(size_t i) { + return getToken(HogQLParser::RPAREN, i); +} + +HogQLParser::ColumnExprColumnsQualifiedReplaceContext::ColumnExprColumnsQualifiedReplaceContext(ColumnExprContext *ctx) { copyFrom(ctx); } + + +std::any HogQLParser::ColumnExprColumnsQualifiedReplaceContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitColumnExprColumnsQualifiedReplace(this); + else + return visitor->visitChildren(this); +} //----------------- ColumnExprNullTupleAccessContext ------------------------------------------------------------------ HogQLParser::ColumnExprContext* HogQLParser::ColumnExprNullTupleAccessContext::columnExpr() { @@ -9427,6 +10052,65 @@ std::any HogQLParser::ColumnExprColumnsExcludeReplaceContext::accept(tree::Parse else return visitor->visitChildren(this); } +//----------------- ColumnExprColumnsQualifiedExcludeReplaceContext ------------------------------------------------------------------ + +tree::TerminalNode* HogQLParser::ColumnExprColumnsQualifiedExcludeReplaceContext::COLUMNS() { + return getToken(HogQLParser::COLUMNS, 0); +} + +std::vector HogQLParser::ColumnExprColumnsQualifiedExcludeReplaceContext::LPAREN() { + return getTokens(HogQLParser::LPAREN); +} + +tree::TerminalNode* HogQLParser::ColumnExprColumnsQualifiedExcludeReplaceContext::LPAREN(size_t i) { + return getToken(HogQLParser::LPAREN, i); +} + +HogQLParser::IdentifierContext* HogQLParser::ColumnExprColumnsQualifiedExcludeReplaceContext::identifier() { + return getRuleContext(0); +} + +tree::TerminalNode* HogQLParser::ColumnExprColumnsQualifiedExcludeReplaceContext::DOT() { + return getToken(HogQLParser::DOT, 0); +} + +tree::TerminalNode* HogQLParser::ColumnExprColumnsQualifiedExcludeReplaceContext::ASTERISK() { + return getToken(HogQLParser::ASTERISK, 0); +} + +tree::TerminalNode* HogQLParser::ColumnExprColumnsQualifiedExcludeReplaceContext::EXCLUDE() { + return getToken(HogQLParser::EXCLUDE, 0); +} + +HogQLParser::IdentifierListContext* HogQLParser::ColumnExprColumnsQualifiedExcludeReplaceContext::identifierList() { + return getRuleContext(0); +} + +std::vector HogQLParser::ColumnExprColumnsQualifiedExcludeReplaceContext::RPAREN() { + return getTokens(HogQLParser::RPAREN); +} + +tree::TerminalNode* HogQLParser::ColumnExprColumnsQualifiedExcludeReplaceContext::RPAREN(size_t i) { + return getToken(HogQLParser::RPAREN, i); +} + +tree::TerminalNode* HogQLParser::ColumnExprColumnsQualifiedExcludeReplaceContext::REPLACE() { + return getToken(HogQLParser::REPLACE, 0); +} + +HogQLParser::ColumnsReplaceListContext* HogQLParser::ColumnExprColumnsQualifiedExcludeReplaceContext::columnsReplaceList() { + return getRuleContext(0); +} + +HogQLParser::ColumnExprColumnsQualifiedExcludeReplaceContext::ColumnExprColumnsQualifiedExcludeReplaceContext(ColumnExprContext *ctx) { copyFrom(ctx); } + + +std::any HogQLParser::ColumnExprColumnsQualifiedExcludeReplaceContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitColumnExprColumnsQualifiedExcludeReplace(this); + else + return visitor->visitChildren(this); +} //----------------- ColumnExprColumnsExcludeContext ------------------------------------------------------------------ tree::TerminalNode* HogQLParser::ColumnExprColumnsExcludeContext::COLUMNS() { @@ -9536,6 +10220,41 @@ std::any HogQLParser::ColumnExprCallSelectContext::accept(tree::ParseTreeVisitor else return visitor->visitChildren(this); } +//----------------- ColumnExprColumnsQualifiedAllContext ------------------------------------------------------------------ + +tree::TerminalNode* HogQLParser::ColumnExprColumnsQualifiedAllContext::COLUMNS() { + return getToken(HogQLParser::COLUMNS, 0); +} + +tree::TerminalNode* HogQLParser::ColumnExprColumnsQualifiedAllContext::LPAREN() { + return getToken(HogQLParser::LPAREN, 0); +} + +HogQLParser::IdentifierContext* HogQLParser::ColumnExprColumnsQualifiedAllContext::identifier() { + return getRuleContext(0); +} + +tree::TerminalNode* HogQLParser::ColumnExprColumnsQualifiedAllContext::DOT() { + return getToken(HogQLParser::DOT, 0); +} + +tree::TerminalNode* HogQLParser::ColumnExprColumnsQualifiedAllContext::ASTERISK() { + return getToken(HogQLParser::ASTERISK, 0); +} + +tree::TerminalNode* HogQLParser::ColumnExprColumnsQualifiedAllContext::RPAREN() { + return getToken(HogQLParser::RPAREN, 0); +} + +HogQLParser::ColumnExprColumnsQualifiedAllContext::ColumnExprColumnsQualifiedAllContext(ColumnExprContext *ctx) { copyFrom(ctx); } + + +std::any HogQLParser::ColumnExprColumnsQualifiedAllContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitColumnExprColumnsQualifiedAll(this); + else + return visitor->visitChildren(this); +} //----------------- ColumnExprTrimContext ------------------------------------------------------------------ tree::TerminalNode* HogQLParser::ColumnExprTrimContext::TRIM() { @@ -9811,6 +10530,29 @@ std::any HogQLParser::ColumnExprNullArrayAccessContext::accept(tree::ParseTreeVi else return visitor->visitChildren(this); } +//----------------- ColumnExprIgnoreNullsContext ------------------------------------------------------------------ + +HogQLParser::ColumnExprContext* HogQLParser::ColumnExprIgnoreNullsContext::columnExpr() { + return getRuleContext(0); +} + +tree::TerminalNode* HogQLParser::ColumnExprIgnoreNullsContext::IGNORE() { + return getToken(HogQLParser::IGNORE, 0); +} + +tree::TerminalNode* HogQLParser::ColumnExprIgnoreNullsContext::NULLS() { + return getToken(HogQLParser::NULLS, 0); +} + +HogQLParser::ColumnExprIgnoreNullsContext::ColumnExprIgnoreNullsContext(ColumnExprContext *ctx) { copyFrom(ctx); } + + +std::any HogQLParser::ColumnExprIgnoreNullsContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitColumnExprIgnoreNulls(this); + else + return visitor->visitChildren(this); +} //----------------- ColumnExprNullishContext ------------------------------------------------------------------ std::vector HogQLParser::ColumnExprNullishContext::columnExpr() { @@ -9953,6 +10695,18 @@ tree::TerminalNode* HogQLParser::ColumnExprWinFunctionContext::RPAREN(size_t i) return getToken(HogQLParser::RPAREN, i); } +tree::TerminalNode* HogQLParser::ColumnExprWinFunctionContext::FILTER() { + return getToken(HogQLParser::FILTER, 0); +} + +tree::TerminalNode* HogQLParser::ColumnExprWinFunctionContext::WHERE() { + return getToken(HogQLParser::WHERE, 0); +} + +HogQLParser::ColumnExprContext* HogQLParser::ColumnExprWinFunctionContext::columnExpr() { + return getRuleContext(0); +} + std::vector HogQLParser::ColumnExprWinFunctionContext::columnExprList() { return getRuleContexts(); } @@ -10069,22 +10823,22 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1298); + setState(1439); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 161, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 175, _ctx)) { case 1: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1025); + setState(1091); match(HogQLParser::CASE); - setState(1027); + setState(1093); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 136, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 145, _ctx)) { case 1: { - setState(1026); + setState(1092); antlrcpp::downCast(_localctx)->caseExpr = columnExpr(0); break; } @@ -10092,33 +10846,33 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { default: break; } - setState(1034); + setState(1100); _errHandler->sync(this); _la = _input->LA(1); do { - setState(1029); + setState(1095); match(HogQLParser::WHEN); - setState(1030); + setState(1096); antlrcpp::downCast(_localctx)->whenExpr = columnExpr(0); - setState(1031); + setState(1097); match(HogQLParser::THEN); - setState(1032); + setState(1098); antlrcpp::downCast(_localctx)->thenExpr = columnExpr(0); - setState(1036); + setState(1102); _errHandler->sync(this); _la = _input->LA(1); } while (_la == HogQLParser::WHEN); - setState(1040); + setState(1106); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::ELSE) { - setState(1038); + setState(1104); match(HogQLParser::ELSE); - setState(1039); + setState(1105); antlrcpp::downCast(_localctx)->elseExpr = columnExpr(0); } - setState(1042); + setState(1108); match(HogQLParser::END); break; } @@ -10127,17 +10881,17 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1044); + setState(1110); match(HogQLParser::CAST); - setState(1045); + setState(1111); match(HogQLParser::LPAREN); - setState(1046); + setState(1112); columnExpr(0); - setState(1047); + setState(1113); match(HogQLParser::AS); - setState(1048); - columnTypeExpr(); - setState(1049); + setState(1114); + columnTypeExpr(0); + setState(1115); match(HogQLParser::RPAREN); break; } @@ -10146,17 +10900,17 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1051); + setState(1117); match(HogQLParser::TRY_CAST); - setState(1052); + setState(1118); match(HogQLParser::LPAREN); - setState(1053); + setState(1119); columnExpr(0); - setState(1054); + setState(1120); match(HogQLParser::AS); - setState(1055); - columnTypeExpr(); - setState(1056); + setState(1121); + columnTypeExpr(0); + setState(1122); match(HogQLParser::RPAREN); break; } @@ -10165,9 +10919,9 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1058); + setState(1124); match(HogQLParser::DATE); - setState(1059); + setState(1125); match(HogQLParser::STRING_LITERAL); break; } @@ -10176,9 +10930,9 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1060); + setState(1126); match(HogQLParser::INTERVAL); - setState(1061); + setState(1127); match(HogQLParser::STRING_LITERAL); break; } @@ -10187,11 +10941,11 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1062); + setState(1128); match(HogQLParser::INTERVAL); - setState(1063); + setState(1129); columnExpr(0); - setState(1064); + setState(1130); interval(); break; } @@ -10200,27 +10954,27 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1066); + setState(1132); match(HogQLParser::SUBSTRING); - setState(1067); + setState(1133); match(HogQLParser::LPAREN); - setState(1068); + setState(1134); columnExpr(0); - setState(1069); + setState(1135); match(HogQLParser::FROM); - setState(1070); + setState(1136); columnExpr(0); - setState(1073); + setState(1139); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::FOR) { - setState(1071); + setState(1137); match(HogQLParser::FOR); - setState(1072); + setState(1138); columnExpr(0); } - setState(1075); + setState(1141); match(HogQLParser::RPAREN); break; } @@ -10229,9 +10983,9 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1077); + setState(1143); match(HogQLParser::TIMESTAMP); - setState(1078); + setState(1144); match(HogQLParser::STRING_LITERAL); break; } @@ -10240,11 +10994,11 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1079); + setState(1145); match(HogQLParser::TRIM); - setState(1080); + setState(1146); match(HogQLParser::LPAREN); - setState(1081); + setState(1147); _la = _input->LA(1); if (!(_la == HogQLParser::BOTH @@ -10255,13 +11009,13 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _errHandler->reportMatch(this); consume(); } - setState(1082); + setState(1148); string(); - setState(1083); + setState(1149); match(HogQLParser::FROM); - setState(1084); + setState(1150); columnExpr(0); - setState(1085); + setState(1151); match(HogQLParser::RPAREN); break; } @@ -10270,13 +11024,13 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1087); + setState(1153); match(HogQLParser::COLUMNS); - setState(1088); + setState(1154); match(HogQLParser::LPAREN); - setState(1089); + setState(1155); match(HogQLParser::STRING_LITERAL); - setState(1090); + setState(1156); match(HogQLParser::RPAREN); break; } @@ -10285,13 +11039,13 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1091); + setState(1157); match(HogQLParser::COLUMNS); - setState(1092); + setState(1158); match(HogQLParser::LPAREN); - setState(1093); + setState(1159); columnExprList(); - setState(1094); + setState(1160); match(HogQLParser::RPAREN); break; } @@ -10300,59 +11054,59 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1121); + setState(1187); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::COLUMNS: { - setState(1096); + setState(1162); match(HogQLParser::COLUMNS); - setState(1097); + setState(1163); match(HogQLParser::LPAREN); - setState(1098); + setState(1164); match(HogQLParser::ASTERISK); - setState(1099); + setState(1165); match(HogQLParser::EXCLUDE); - setState(1100); + setState(1166); match(HogQLParser::LPAREN); - setState(1101); + setState(1167); identifierList(); - setState(1102); + setState(1168); match(HogQLParser::RPAREN); - setState(1103); + setState(1169); match(HogQLParser::REPLACE); - setState(1104); + setState(1170); match(HogQLParser::LPAREN); - setState(1105); + setState(1171); columnsReplaceList(); - setState(1106); + setState(1172); match(HogQLParser::RPAREN); - setState(1107); + setState(1173); match(HogQLParser::RPAREN); break; } case HogQLParser::LPAREN: { - setState(1109); + setState(1175); match(HogQLParser::LPAREN); - setState(1110); + setState(1176); match(HogQLParser::ASTERISK); - setState(1111); + setState(1177); match(HogQLParser::EXCLUDE); - setState(1112); + setState(1178); match(HogQLParser::LPAREN); - setState(1113); + setState(1179); identifierList(); - setState(1114); + setState(1180); match(HogQLParser::RPAREN); - setState(1115); + setState(1181); match(HogQLParser::REPLACE); - setState(1116); + setState(1182); match(HogQLParser::LPAREN); - setState(1117); + setState(1183); columnsReplaceList(); - setState(1118); + setState(1184); match(HogQLParser::RPAREN); - setState(1119); + setState(1185); match(HogQLParser::RPAREN); break; } @@ -10367,21 +11121,21 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1123); + setState(1189); match(HogQLParser::COLUMNS); - setState(1124); + setState(1190); match(HogQLParser::LPAREN); - setState(1125); + setState(1191); match(HogQLParser::ASTERISK); - setState(1126); + setState(1192); match(HogQLParser::EXCLUDE); - setState(1127); + setState(1193); match(HogQLParser::LPAREN); - setState(1128); + setState(1194); identifierList(); - setState(1129); + setState(1195); match(HogQLParser::RPAREN); - setState(1130); + setState(1196); match(HogQLParser::RPAREN); break; } @@ -10390,43 +11144,43 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1149); + setState(1215); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::COLUMNS: { - setState(1132); + setState(1198); match(HogQLParser::COLUMNS); - setState(1133); + setState(1199); match(HogQLParser::LPAREN); - setState(1134); + setState(1200); match(HogQLParser::ASTERISK); - setState(1135); + setState(1201); match(HogQLParser::REPLACE); - setState(1136); + setState(1202); match(HogQLParser::LPAREN); - setState(1137); + setState(1203); columnsReplaceList(); - setState(1138); + setState(1204); match(HogQLParser::RPAREN); - setState(1139); + setState(1205); match(HogQLParser::RPAREN); break; } case HogQLParser::LPAREN: { - setState(1141); + setState(1207); match(HogQLParser::LPAREN); - setState(1142); + setState(1208); match(HogQLParser::ASTERISK); - setState(1143); + setState(1209); match(HogQLParser::REPLACE); - setState(1144); + setState(1210); match(HogQLParser::LPAREN); - setState(1145); + setState(1211); columnsReplaceList(); - setState(1146); + setState(1212); match(HogQLParser::RPAREN); - setState(1147); + setState(1213); match(HogQLParser::RPAREN); break; } @@ -10441,86 +11195,220 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1151); + setState(1217); match(HogQLParser::COLUMNS); - setState(1152); + setState(1218); match(HogQLParser::LPAREN); - setState(1153); + setState(1219); match(HogQLParser::ASTERISK); - setState(1154); + setState(1220); match(HogQLParser::RPAREN); break; } case 16: { - _localctx = _tracker.createInstance(_localctx); + _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1155); - match(HogQLParser::ASTERISK); - setState(1156); + setState(1221); match(HogQLParser::COLUMNS); - setState(1157); + setState(1222); match(HogQLParser::LPAREN); - setState(1158); - match(HogQLParser::STRING_LITERAL); - setState(1159); + setState(1223); + identifier(); + setState(1224); + match(HogQLParser::DOT); + setState(1225); + match(HogQLParser::ASTERISK); + setState(1226); + match(HogQLParser::EXCLUDE); + setState(1227); + match(HogQLParser::LPAREN); + setState(1228); + identifierList(); + setState(1229); + match(HogQLParser::RPAREN); + setState(1230); + match(HogQLParser::REPLACE); + setState(1231); + match(HogQLParser::LPAREN); + setState(1232); + columnsReplaceList(); + setState(1233); + match(HogQLParser::RPAREN); + setState(1234); match(HogQLParser::RPAREN); break; } case 17: { + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + setState(1236); + match(HogQLParser::COLUMNS); + setState(1237); + match(HogQLParser::LPAREN); + setState(1238); + identifier(); + setState(1239); + match(HogQLParser::DOT); + setState(1240); + match(HogQLParser::ASTERISK); + setState(1241); + match(HogQLParser::EXCLUDE); + setState(1242); + match(HogQLParser::LPAREN); + setState(1243); + identifierList(); + setState(1244); + match(HogQLParser::RPAREN); + setState(1245); + match(HogQLParser::RPAREN); + break; + } + + case 18: { + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + setState(1247); + match(HogQLParser::COLUMNS); + setState(1248); + match(HogQLParser::LPAREN); + setState(1249); + identifier(); + setState(1250); + match(HogQLParser::DOT); + setState(1251); + match(HogQLParser::ASTERISK); + setState(1252); + match(HogQLParser::REPLACE); + setState(1253); + match(HogQLParser::LPAREN); + setState(1254); + columnsReplaceList(); + setState(1255); + match(HogQLParser::RPAREN); + setState(1256); + match(HogQLParser::RPAREN); + break; + } + + case 19: { + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + setState(1258); + match(HogQLParser::COLUMNS); + setState(1259); + match(HogQLParser::LPAREN); + setState(1260); + identifier(); + setState(1261); + match(HogQLParser::DOT); + setState(1262); + match(HogQLParser::ASTERISK); + setState(1263); + match(HogQLParser::RPAREN); + break; + } + + case 20: { + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + setState(1265); + match(HogQLParser::ASTERISK); + setState(1266); + match(HogQLParser::COLUMNS); + setState(1267); + match(HogQLParser::LPAREN); + setState(1268); + match(HogQLParser::STRING_LITERAL); + setState(1269); + match(HogQLParser::RPAREN); + break; + } + + case 21: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1160); + setState(1270); match(HogQLParser::ASTERISK); - setState(1161); + setState(1271); match(HogQLParser::COLUMNS); - setState(1162); + setState(1272); match(HogQLParser::LPAREN); - setState(1163); + setState(1273); columnExprList(); - setState(1164); + setState(1274); match(HogQLParser::RPAREN); break; } - case 18: { + case 22: { + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + setState(1276); + identifier(); + setState(1277); + match(HogQLParser::LPAREN); + setState(1279); + _errHandler->sync(this); + + _la = _input->LA(1); + if ((((_la & ~ 0x3fULL) == 0) && + ((1ULL << _la) & -4620694360411881474) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 64)) & 6629016626756845565) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 128)) & 1237726691519) != 0)) { + setState(1278); + antlrcpp::downCast(_localctx)->columnExprs = columnExprList(); + } + setState(1281); + match(HogQLParser::RPAREN); + setState(1282); + withinGroupClause(); + break; + } + + case 23: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1166); + setState(1284); identifier(); - setState(1167); + setState(1285); match(HogQLParser::LPAREN); - setState(1169); + setState(1287); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & -5189273242136756226) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 64)) & -184651991358636033) != 0) || ((((_la - 129) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 129)) & 9669739777) != 0)) { - setState(1168); + ((1ULL << _la) & -4620694360411881474) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 64)) & 6629016626756845565) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 128)) & 1237726691519) != 0)) { + setState(1286); antlrcpp::downCast(_localctx)->columnExprs = columnExprList(); } - setState(1171); + setState(1289); match(HogQLParser::RPAREN); - setState(1181); + setState(1299); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::LPAREN) { - setState(1173); + setState(1291); match(HogQLParser::LPAREN); - setState(1175); + setState(1293); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 143, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 153, _ctx)) { case 1: { - setState(1174); + setState(1292); match(HogQLParser::DISTINCT); break; } @@ -10528,66 +11416,82 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { default: break; } - setState(1178); + setState(1296); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & -5189273242136756226) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 64)) & -184651991358636033) != 0) || ((((_la - 129) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 129)) & 9669739777) != 0)) { - setState(1177); + ((1ULL << _la) & -4620694360411881474) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 64)) & 6629016626756845565) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 128)) & 1237726691519) != 0)) { + setState(1295); antlrcpp::downCast(_localctx)->columnArgList = columnExprList(); } - setState(1180); + setState(1298); match(HogQLParser::RPAREN); } - setState(1183); + setState(1307); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == HogQLParser::FILTER) { + setState(1301); + match(HogQLParser::FILTER); + setState(1302); + match(HogQLParser::LPAREN); + setState(1303); + match(HogQLParser::WHERE); + setState(1304); + antlrcpp::downCast(_localctx)->filterExpr = columnExpr(0); + setState(1305); + match(HogQLParser::RPAREN); + } + setState(1309); match(HogQLParser::OVER); - setState(1184); + setState(1310); match(HogQLParser::LPAREN); - setState(1185); + setState(1311); windowExpr(); - setState(1186); + setState(1312); match(HogQLParser::RPAREN); break; } - case 19: { + case 24: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1188); + setState(1314); identifier(); - setState(1189); + setState(1315); match(HogQLParser::LPAREN); - setState(1191); + setState(1317); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & -5189273242136756226) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 64)) & -184651991358636033) != 0) || ((((_la - 129) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 129)) & 9669739777) != 0)) { - setState(1190); + ((1ULL << _la) & -4620694360411881474) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 64)) & 6629016626756845565) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 128)) & 1237726691519) != 0)) { + setState(1316); antlrcpp::downCast(_localctx)->columnExprs = columnExprList(); } - setState(1193); + setState(1319); match(HogQLParser::RPAREN); - setState(1203); + setState(1329); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::LPAREN) { - setState(1195); + setState(1321); match(HogQLParser::LPAREN); - setState(1197); + setState(1323); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 147, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 158, _ctx)) { case 1: { - setState(1196); + setState(1322); match(HogQLParser::DISTINCT); break; } @@ -10595,78 +11499,68 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { default: break; } - setState(1200); + setState(1326); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & -5189273242136756226) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 64)) & -184651991358636033) != 0) || ((((_la - 129) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 129)) & 9669739777) != 0)) { - setState(1199); + ((1ULL << _la) & -4620694360411881474) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 64)) & 6629016626756845565) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 128)) & 1237726691519) != 0)) { + setState(1325); antlrcpp::downCast(_localctx)->columnArgList = columnExprList(); } - setState(1202); + setState(1328); match(HogQLParser::RPAREN); } - setState(1205); - match(HogQLParser::OVER); - setState(1206); - identifier(); - break; - } - - case 20: { - _localctx = _tracker.createInstance(_localctx); - _ctx = _localctx; - previousContext = _localctx; - setState(1208); - identifier(); - setState(1209); - match(HogQLParser::LPAREN); - setState(1211); + setState(1337); _errHandler->sync(this); _la = _input->LA(1); - if ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & -5189273242136756226) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 64)) & -184651991358636033) != 0) || ((((_la - 129) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 129)) & 9669739777) != 0)) { - setState(1210); - antlrcpp::downCast(_localctx)->columnExprs = columnExprList(); + if (_la == HogQLParser::FILTER) { + setState(1331); + match(HogQLParser::FILTER); + setState(1332); + match(HogQLParser::LPAREN); + setState(1333); + match(HogQLParser::WHERE); + setState(1334); + antlrcpp::downCast(_localctx)->filterExpr = columnExpr(0); + setState(1335); + match(HogQLParser::RPAREN); } - setState(1213); - match(HogQLParser::RPAREN); - setState(1214); - withinGroupClause(); + setState(1339); + match(HogQLParser::OVER); + setState(1340); + identifier(); break; } - case 21: { + case 25: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1216); + setState(1342); identifier(); - setState(1222); + setState(1348); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 152, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 163, _ctx)) { case 1: { - setState(1217); + setState(1343); match(HogQLParser::LPAREN); - setState(1219); + setState(1345); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & -5189273242136756226) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 64)) & -184651991358636033) != 0) || ((((_la - 129) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 129)) & 9669739777) != 0)) { - setState(1218); + ((1ULL << _la) & -4620694360411881474) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 64)) & 6629016626756845565) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 128)) & 1237726691519) != 0)) { + setState(1344); antlrcpp::downCast(_localctx)->columnExprs = columnExprList(); } - setState(1221); + setState(1347); match(HogQLParser::RPAREN); break; } @@ -10674,14 +11568,14 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { default: break; } - setState(1224); + setState(1350); match(HogQLParser::LPAREN); - setState(1226); + setState(1352); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 153, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 164, _ctx)) { case 1: { - setState(1225); + setState(1351); match(HogQLParser::DISTINCT); break; } @@ -10689,101 +11583,136 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { default: break; } - setState(1229); + setState(1355); _errHandler->sync(this); - _la = _input->LA(1); - if ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & -5189273242136756226) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 64)) & -184651991358636033) != 0) || ((((_la - 129) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 129)) & 9669739777) != 0)) { - setState(1228); + switch (getInterpreter()->adaptivePredict(_input, 165, _ctx)) { + case 1: { + setState(1354); antlrcpp::downCast(_localctx)->columnArgList = columnExprList(); + break; } - setState(1231); + + default: + break; + } + setState(1360); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == HogQLParser::ORDER) { + setState(1357); + match(HogQLParser::ORDER); + setState(1358); + match(HogQLParser::BY); + setState(1359); + orderExprList(); + } + setState(1362); match(HogQLParser::RPAREN); + setState(1369); + _errHandler->sync(this); + + switch (getInterpreter()->adaptivePredict(_input, 167, _ctx)) { + case 1: { + setState(1363); + match(HogQLParser::FILTER); + setState(1364); + match(HogQLParser::LPAREN); + setState(1365); + match(HogQLParser::WHERE); + setState(1366); + antlrcpp::downCast(_localctx)->filterExpr = columnExpr(0); + setState(1367); + match(HogQLParser::RPAREN); + break; + } + + default: + break; + } break; } - case 22: { + case 26: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1233); + setState(1371); hogqlxTagElement(); break; } - case 23: { + case 27: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1234); + setState(1372); templateString(); break; } - case 24: { + case 28: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1235); + setState(1373); literal(); break; } - case 25: { + case 29: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1236); + setState(1374); match(HogQLParser::DASH); - setState(1237); - columnExpr(24); + setState(1375); + columnExpr(25); break; } - case 26: { + case 30: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1238); + setState(1376); match(HogQLParser::NOT); - setState(1239); + setState(1377); columnExpr(17); break; } - case 27: { + case 31: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1243); + setState(1381); _errHandler->sync(this); _la = _input->LA(1); - if ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & -5189554717113466882) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 64)) & 391808760944787435) != 0)) { - setState(1240); + if (((((_la - 1) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 1)) & -2311473080112783361) != 0) || ((((_la - 66) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 66)) & 6268940175116599215) != 0)) { + setState(1378); tableIdentifier(); - setState(1241); + setState(1379); match(HogQLParser::DOT); } - setState(1245); + setState(1383); match(HogQLParser::ASTERISK); - setState(1251); + setState(1389); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 156, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 169, _ctx)) { case 1: { - setState(1246); + setState(1384); match(HogQLParser::EXCLUDE); - setState(1247); + setState(1385); match(HogQLParser::LPAREN); - setState(1248); + setState(1386); identifierList(); - setState(1249); + setState(1387); match(HogQLParser::RPAREN); break; } @@ -10794,164 +11723,172 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { break; } - case 28: { + case 32: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1253); + setState(1391); match(HogQLParser::LAMBDA); - setState(1254); + setState(1392); identifier(); - setState(1259); + setState(1397); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 157, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 170, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1255); + setState(1393); match(HogQLParser::COMMA); - setState(1256); + setState(1394); identifier(); } - setState(1261); + setState(1399); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 157, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 170, _ctx); } - setState(1263); + setState(1401); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::COMMA) { - setState(1262); + setState(1400); match(HogQLParser::COMMA); } - setState(1265); + setState(1403); match(HogQLParser::COLON); - setState(1266); + setState(1404); columnExpr(10); break; } - case 29: { + case 33: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1268); + setState(1406); match(HogQLParser::LPAREN); - setState(1269); + setState(1407); selectSetStmt(); - setState(1270); + setState(1408); match(HogQLParser::RPAREN); break; } - case 30: { + case 34: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1272); + setState(1410); match(HogQLParser::LPAREN); - setState(1273); + setState(1411); columnExpr(0); - setState(1274); + setState(1412); match(HogQLParser::RPAREN); break; } - case 31: { + case 35: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1276); + setState(1414); match(HogQLParser::LPAREN); - setState(1277); + setState(1415); columnExprList(); - setState(1278); + setState(1416); match(HogQLParser::RPAREN); break; } - case 32: { + case 36: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1280); + setState(1419); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == HogQLParser::ARRAY) { + setState(1418); + match(HogQLParser::ARRAY); + } + setState(1421); match(HogQLParser::LBRACKET); - setState(1282); + setState(1423); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & -5189273242136756226) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 64)) & -184651991358636033) != 0) || ((((_la - 129) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 129)) & 9669739777) != 0)) { - setState(1281); + ((1ULL << _la) & -4620694360411881474) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 64)) & 6629016626756845565) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 128)) & 1237726691519) != 0)) { + setState(1422); columnExprList(); } - setState(1284); + setState(1425); match(HogQLParser::RBRACKET); break; } - case 33: { + case 37: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1285); + setState(1426); match(HogQLParser::LBRACE); - setState(1287); + setState(1428); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & -5189273242136756226) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 64)) & -184651991358636033) != 0) || ((((_la - 129) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 129)) & 9669739777) != 0)) { - setState(1286); + ((1ULL << _la) & -4620694360411881474) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 64)) & 6629016626756845565) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 128)) & 1237726691519) != 0)) { + setState(1427); kvPairList(); } - setState(1289); + setState(1430); match(HogQLParser::RBRACE); break; } - case 34: { + case 38: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1290); + setState(1431); columnLambdaExpr(); break; } - case 35: { + case 39: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1291); + setState(1432); identifier(); - setState(1292); + setState(1433); match(HogQLParser::COLONEQUALS); - setState(1293); + setState(1434); columnExpr(3); break; } - case 36: { + case 40: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1295); + setState(1436); match(HogQLParser::HASH); - setState(1296); + setState(1437); match(HogQLParser::DECIMAL_LITERAL); break; } - case 37: { + case 41: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1297); + setState(1438); columnIdentifier(); break; } @@ -10960,42 +11897,42 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { break; } _ctx->stop = _input->LT(-1); - setState(1436); + setState(1580); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 176, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 190, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { if (!_parseListeners.empty()) triggerExitRuleEvent(); previousContext = _localctx; - setState(1434); + setState(1578); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 175, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 189, _ctx)) { case 1: { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; newContext->left = previousContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(1300); + setState(1441); - if (!(precpred(_ctx, 23))) throw FailedPredicateException(this, "precpred(_ctx, 23)"); - setState(1304); + if (!(precpred(_ctx, 24))) throw FailedPredicateException(this, "precpred(_ctx, 24)"); + setState(1445); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::ASTERISK: { - setState(1301); + setState(1442); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::ASTERISK); break; } case HogQLParser::SLASH: { - setState(1302); + setState(1443); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::SLASH); break; } case HogQLParser::PERCENT: { - setState(1303); + setState(1444); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::PERCENT); break; } @@ -11003,8 +11940,8 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { default: throw NoViableAltException(this); } - setState(1306); - antlrcpp::downCast(_localctx)->right = columnExpr(24); + setState(1447); + antlrcpp::downCast(_localctx)->right = columnExpr(25); break; } @@ -11013,26 +11950,26 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = newContext; newContext->left = previousContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(1307); + setState(1448); - if (!(precpred(_ctx, 22))) throw FailedPredicateException(this, "precpred(_ctx, 22)"); - setState(1311); + if (!(precpred(_ctx, 23))) throw FailedPredicateException(this, "precpred(_ctx, 23)"); + setState(1452); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::PLUS: { - setState(1308); + setState(1449); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::PLUS); break; } case HogQLParser::DASH: { - setState(1309); + setState(1450); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::DASH); break; } case HogQLParser::CONCAT: { - setState(1310); + setState(1451); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::CONCAT); break; } @@ -11040,8 +11977,8 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { default: throw NoViableAltException(this); } - setState(1313); - antlrcpp::downCast(_localctx)->right = columnExpr(23); + setState(1454); + antlrcpp::downCast(_localctx)->right = columnExpr(24); break; } @@ -11050,71 +11987,71 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = newContext; newContext->left = previousContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(1314); + setState(1455); - if (!(precpred(_ctx, 21))) throw FailedPredicateException(this, "precpred(_ctx, 21)"); - setState(1339); + if (!(precpred(_ctx, 22))) throw FailedPredicateException(this, "precpred(_ctx, 22)"); + setState(1480); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 167, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 181, _ctx)) { case 1: { - setState(1315); + setState(1456); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::EQ_DOUBLE); break; } case 2: { - setState(1316); + setState(1457); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::EQ_SINGLE); break; } case 3: { - setState(1317); + setState(1458); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::NOT_EQ); break; } case 4: { - setState(1318); + setState(1459); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::LT_EQ); break; } case 5: { - setState(1319); + setState(1460); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::LT); break; } case 6: { - setState(1320); + setState(1461); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::GT_EQ); break; } case 7: { - setState(1321); + setState(1462); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::GT); break; } case 8: { - setState(1323); + setState(1464); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::NOT) { - setState(1322); + setState(1463); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::NOT); } - setState(1325); + setState(1466); match(HogQLParser::IN); - setState(1327); + setState(1468); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 165, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 179, _ctx)) { case 1: { - setState(1326); + setState(1467); match(HogQLParser::COHORT); break; } @@ -11126,15 +12063,15 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { } case 9: { - setState(1330); + setState(1471); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::NOT) { - setState(1329); + setState(1470); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::NOT); } - setState(1332); + setState(1473); _la = _input->LA(1); if (!(_la == HogQLParser::ILIKE @@ -11149,37 +12086,37 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { } case 10: { - setState(1333); + setState(1474); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::REGEX_SINGLE); break; } case 11: { - setState(1334); + setState(1475); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::REGEX_DOUBLE); break; } case 12: { - setState(1335); + setState(1476); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::NOT_REGEX); break; } case 13: { - setState(1336); + setState(1477); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::IREGEX_SINGLE); break; } case 14: { - setState(1337); + setState(1478); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::IREGEX_DOUBLE); break; } case 15: { - setState(1338); + setState(1479); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::NOT_IREGEX); break; } @@ -11187,8 +12124,8 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { default: break; } - setState(1341); - antlrcpp::downCast(_localctx)->right = columnExpr(22); + setState(1482); + antlrcpp::downCast(_localctx)->right = columnExpr(23); break; } @@ -11196,24 +12133,24 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(1342); + setState(1483); if (!(precpred(_ctx, 19))) throw FailedPredicateException(this, "precpred(_ctx, 19)"); - setState(1343); + setState(1484); match(HogQLParser::IS); - setState(1345); + setState(1486); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::NOT) { - setState(1344); + setState(1485); match(HogQLParser::NOT); } - setState(1347); + setState(1488); match(HogQLParser::DISTINCT); - setState(1348); + setState(1489); match(HogQLParser::FROM); - setState(1349); + setState(1490); columnExpr(20); break; } @@ -11222,12 +12159,12 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(1350); + setState(1491); if (!(precpred(_ctx, 18))) throw FailedPredicateException(this, "precpred(_ctx, 18)"); - setState(1351); + setState(1492); match(HogQLParser::NULLISH); - setState(1352); + setState(1493); columnExpr(19); break; } @@ -11236,12 +12173,12 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(1353); + setState(1494); if (!(precpred(_ctx, 16))) throw FailedPredicateException(this, "precpred(_ctx, 16)"); - setState(1354); + setState(1495); match(HogQLParser::AND); - setState(1355); + setState(1496); columnExpr(17); break; } @@ -11250,12 +12187,12 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(1356); + setState(1497); if (!(precpred(_ctx, 15))) throw FailedPredicateException(this, "precpred(_ctx, 15)"); - setState(1357); + setState(1498); match(HogQLParser::OR); - setState(1358); + setState(1499); columnExpr(16); break; } @@ -11264,24 +12201,24 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(1359); + setState(1500); if (!(precpred(_ctx, 14))) throw FailedPredicateException(this, "precpred(_ctx, 14)"); - setState(1361); + setState(1502); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::NOT) { - setState(1360); + setState(1501); match(HogQLParser::NOT); } - setState(1363); + setState(1504); match(HogQLParser::BETWEEN); - setState(1364); + setState(1505); columnExpr(0); - setState(1365); + setState(1506); match(HogQLParser::AND); - setState(1366); + setState(1507); columnExpr(15); break; } @@ -11290,16 +12227,16 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(1368); + setState(1509); if (!(precpred(_ctx, 13))) throw FailedPredicateException(this, "precpred(_ctx, 13)"); - setState(1369); + setState(1510); match(HogQLParser::QUERY); - setState(1370); + setState(1511); columnExpr(0); - setState(1371); + setState(1512); match(HogQLParser::COLON); - setState(1372); + setState(1513); columnExpr(13); break; } @@ -11308,14 +12245,14 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(1374); + setState(1515); - if (!(precpred(_ctx, 37))) throw FailedPredicateException(this, "precpred(_ctx, 37)"); - setState(1375); + if (!(precpred(_ctx, 38))) throw FailedPredicateException(this, "precpred(_ctx, 38)"); + setState(1516); match(HogQLParser::LPAREN); - setState(1376); + setState(1517); selectSetStmt(); - setState(1377); + setState(1518); match(HogQLParser::RPAREN); break; } @@ -11324,23 +12261,23 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(1379); + setState(1520); - if (!(precpred(_ctx, 36))) throw FailedPredicateException(this, "precpred(_ctx, 36)"); - setState(1380); + if (!(precpred(_ctx, 37))) throw FailedPredicateException(this, "precpred(_ctx, 37)"); + setState(1521); match(HogQLParser::LPAREN); - setState(1382); + setState(1523); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & -5189273242136756226) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 64)) & -184651991358636033) != 0) || ((((_la - 129) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 129)) & 9669739777) != 0)) { - setState(1381); + ((1ULL << _la) & -4620694360411881474) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 64)) & 6629016626756845565) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 128)) & 1237726691519) != 0)) { + setState(1522); columnExprList(); } - setState(1384); + setState(1525); match(HogQLParser::RPAREN); break; } @@ -11349,14 +12286,14 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(1385); + setState(1526); - if (!(precpred(_ctx, 32))) throw FailedPredicateException(this, "precpred(_ctx, 32)"); - setState(1386); + if (!(precpred(_ctx, 33))) throw FailedPredicateException(this, "precpred(_ctx, 33)"); + setState(1527); match(HogQLParser::LBRACKET); - setState(1387); + setState(1528); columnExpr(0); - setState(1388); + setState(1529); match(HogQLParser::RBRACKET); break; } @@ -11365,36 +12302,36 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(1390); + setState(1531); - if (!(precpred(_ctx, 31))) throw FailedPredicateException(this, "precpred(_ctx, 31)"); - setState(1391); + if (!(precpred(_ctx, 32))) throw FailedPredicateException(this, "precpred(_ctx, 32)"); + setState(1532); match(HogQLParser::LBRACKET); - setState(1393); + setState(1534); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & -5189273242136756226) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 64)) & -184651991358636033) != 0) || ((((_la - 129) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 129)) & 9669739777) != 0)) { - setState(1392); + ((1ULL << _la) & -4620694360411881474) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 64)) & 6629016626756845565) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 128)) & 1237726691519) != 0)) { + setState(1533); columnExpr(0); } - setState(1395); + setState(1536); match(HogQLParser::COLON); - setState(1397); + setState(1538); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & -5189273242136756226) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 64)) & -184651991358636033) != 0) || ((((_la - 129) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 129)) & 9669739777) != 0)) { - setState(1396); + ((1ULL << _la) & -4620694360411881474) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 64)) & 6629016626756845565) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 128)) & 1237726691519) != 0)) { + setState(1537); columnExpr(0); } - setState(1399); + setState(1540); match(HogQLParser::RBRACKET); break; } @@ -11403,12 +12340,12 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(1400); + setState(1541); - if (!(precpred(_ctx, 30))) throw FailedPredicateException(this, "precpred(_ctx, 30)"); - setState(1401); + if (!(precpred(_ctx, 31))) throw FailedPredicateException(this, "precpred(_ctx, 31)"); + setState(1542); match(HogQLParser::DOT); - setState(1402); + setState(1543); match(HogQLParser::DECIMAL_LITERAL); break; } @@ -11417,12 +12354,12 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(1403); + setState(1544); - if (!(precpred(_ctx, 29))) throw FailedPredicateException(this, "precpred(_ctx, 29)"); - setState(1404); + if (!(precpred(_ctx, 30))) throw FailedPredicateException(this, "precpred(_ctx, 30)"); + setState(1545); match(HogQLParser::DOT); - setState(1405); + setState(1546); identifier(); break; } @@ -11431,16 +12368,16 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(1406); + setState(1547); - if (!(precpred(_ctx, 28))) throw FailedPredicateException(this, "precpred(_ctx, 28)"); - setState(1407); + if (!(precpred(_ctx, 29))) throw FailedPredicateException(this, "precpred(_ctx, 29)"); + setState(1548); match(HogQLParser::NULL_PROPERTY); - setState(1408); + setState(1549); match(HogQLParser::LBRACKET); - setState(1409); + setState(1550); columnExpr(0); - setState(1410); + setState(1551); match(HogQLParser::RBRACKET); break; } @@ -11449,12 +12386,12 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(1412); + setState(1553); - if (!(precpred(_ctx, 27))) throw FailedPredicateException(this, "precpred(_ctx, 27)"); - setState(1413); + if (!(precpred(_ctx, 28))) throw FailedPredicateException(this, "precpred(_ctx, 28)"); + setState(1554); match(HogQLParser::NULL_PROPERTY); - setState(1414); + setState(1555); match(HogQLParser::DECIMAL_LITERAL); break; } @@ -11463,12 +12400,12 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(1415); + setState(1556); - if (!(precpred(_ctx, 26))) throw FailedPredicateException(this, "precpred(_ctx, 26)"); - setState(1416); + if (!(precpred(_ctx, 27))) throw FailedPredicateException(this, "precpred(_ctx, 27)"); + setState(1557); match(HogQLParser::NULL_PROPERTY); - setState(1417); + setState(1558); identifier(); break; } @@ -11477,60 +12414,74 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(1418); + setState(1559); - if (!(precpred(_ctx, 25))) throw FailedPredicateException(this, "precpred(_ctx, 25)"); - setState(1419); + if (!(precpred(_ctx, 26))) throw FailedPredicateException(this, "precpred(_ctx, 26)"); + setState(1560); match(HogQLParser::DOUBLECOLON); - setState(1420); + setState(1561); columnTypeCastExpr(); break; } case 20: { + auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); + _localctx = newContext; + pushNewRecursionContext(newContext, startState, RuleColumnExpr); + setState(1562); + + if (!(precpred(_ctx, 21))) throw FailedPredicateException(this, "precpred(_ctx, 21)"); + setState(1563); + match(HogQLParser::IGNORE); + setState(1564); + match(HogQLParser::NULLS); + break; + } + + case 21: { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(1421); + setState(1565); if (!(precpred(_ctx, 20))) throw FailedPredicateException(this, "precpred(_ctx, 20)"); - setState(1422); + setState(1566); match(HogQLParser::IS); - setState(1424); + setState(1568); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::NOT) { - setState(1423); + setState(1567); match(HogQLParser::NOT); } - setState(1426); + setState(1570); match(HogQLParser::NULL_SQL); break; } - case 21: { + case 22: { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(1427); + setState(1571); if (!(precpred(_ctx, 12))) throw FailedPredicateException(this, "precpred(_ctx, 12)"); - setState(1432); + setState(1576); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 174, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 188, _ctx)) { case 1: { - setState(1428); + setState(1572); match(HogQLParser::AS); - setState(1429); + setState(1573); identifier(); break; } case 2: { - setState(1430); + setState(1574); match(HogQLParser::AS); - setState(1431); + setState(1575); match(HogQLParser::STRING_LITERAL); break; } @@ -11545,9 +12496,9 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { break; } } - setState(1438); + setState(1582); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 176, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 190, _ctx); } } catch (RecognitionException &e) { @@ -11673,79 +12624,79 @@ HogQLParser::ColumnLambdaExprContext* HogQLParser::columnLambdaExpr() { }); try { size_t alt; - setState(1488); + setState(1632); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 185, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 199, _ctx)) { case 1: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 1); - setState(1466); + setState(1610); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 181, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 195, _ctx)) { case 1: { - setState(1439); + setState(1583); match(HogQLParser::LPAREN); - setState(1440); + setState(1584); identifier(); - setState(1445); + setState(1589); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 177, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 191, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1441); + setState(1585); match(HogQLParser::COMMA); - setState(1442); + setState(1586); identifier(); } - setState(1447); + setState(1591); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 177, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 191, _ctx); } - setState(1449); + setState(1593); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::COMMA) { - setState(1448); + setState(1592); match(HogQLParser::COMMA); } - setState(1451); + setState(1595); match(HogQLParser::RPAREN); break; } case 2: { - setState(1453); + setState(1597); identifier(); - setState(1458); + setState(1602); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 179, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 193, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1454); + setState(1598); match(HogQLParser::COMMA); - setState(1455); + setState(1599); identifier(); } - setState(1460); + setState(1604); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 179, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 193, _ctx); } - setState(1462); + setState(1606); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::COMMA) { - setState(1461); + setState(1605); match(HogQLParser::COMMA); } break; } case 3: { - setState(1464); + setState(1608); match(HogQLParser::LPAREN); - setState(1465); + setState(1609); match(HogQLParser::RPAREN); break; } @@ -11753,19 +12704,19 @@ HogQLParser::ColumnLambdaExprContext* HogQLParser::columnLambdaExpr() { default: break; } - setState(1468); + setState(1612); match(HogQLParser::ARROW); - setState(1471); + setState(1615); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 182, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 196, _ctx)) { case 1: { - setState(1469); + setState(1613); columnExpr(0); break; } case 2: { - setState(1470); + setState(1614); block(); break; } @@ -11779,35 +12730,35 @@ HogQLParser::ColumnLambdaExprContext* HogQLParser::columnLambdaExpr() { case 2: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 2); - setState(1473); + setState(1617); match(HogQLParser::LAMBDA); - setState(1474); + setState(1618); identifier(); - setState(1479); + setState(1623); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 183, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 197, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1475); + setState(1619); match(HogQLParser::COMMA); - setState(1476); + setState(1620); identifier(); } - setState(1481); + setState(1625); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 183, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 197, _ctx); } - setState(1483); + setState(1627); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::COMMA) { - setState(1482); + setState(1626); match(HogQLParser::COMMA); } - setState(1485); + setState(1629); match(HogQLParser::COLON); - setState(1486); + setState(1630); columnExpr(0); break; } @@ -11875,17 +12826,17 @@ HogQLParser::ColumnsReplaceListContext* HogQLParser::columnsReplaceList() { }); try { enterOuterAlt(_localctx, 1); - setState(1490); + setState(1634); columnsReplaceItem(); - setState(1495); + setState(1639); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(1491); + setState(1635); match(HogQLParser::COMMA); - setState(1492); + setState(1636); columnsReplaceItem(); - setState(1497); + setState(1641); _errHandler->sync(this); _la = _input->LA(1); } @@ -11944,11 +12895,11 @@ HogQLParser::ColumnsReplaceItemContext* HogQLParser::columnsReplaceItem() { }); try { enterOuterAlt(_localctx, 1); - setState(1498); + setState(1642); columnExpr(0); - setState(1499); + setState(1643); match(HogQLParser::AS); - setState(1500); + setState(1644); identifier(); } @@ -12012,30 +12963,30 @@ HogQLParser::HogqlxChildElementContext* HogQLParser::hogqlxChildElement() { exitRule(); }); try { - setState(1508); + setState(1652); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::LT: { enterOuterAlt(_localctx, 1); - setState(1502); + setState(1646); hogqlxTagElement(); break; } case HogQLParser::HOGQLX_TEXT_TEXT: { enterOuterAlt(_localctx, 2); - setState(1503); + setState(1647); hogqlxText(); break; } case HogQLParser::LBRACE: { enterOuterAlt(_localctx, 3); - setState(1504); + setState(1648); match(HogQLParser::LBRACE); - setState(1505); + setState(1649); columnExpr(0); - setState(1506); + setState(1650); match(HogQLParser::RBRACE); break; } @@ -12090,7 +13041,7 @@ HogQLParser::HogqlxTextContext* HogQLParser::hogqlxText() { }); try { enterOuterAlt(_localctx, 1); - setState(1510); + setState(1654); match(HogQLParser::HOGQLX_TEXT_TEXT); } @@ -12213,29 +13164,29 @@ HogQLParser::HogqlxTagElementContext* HogQLParser::hogqlxTagElement() { exitRule(); }); try { - setState(1541); + setState(1685); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 191, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 205, _ctx)) { case 1: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 1); - setState(1512); + setState(1656); match(HogQLParser::LT); - setState(1513); + setState(1657); identifier(); - setState(1517); + setState(1661); _errHandler->sync(this); _la = _input->LA(1); - while ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & -5189554717113466882) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 64)) & 391808760944787435) != 0)) { - setState(1514); + while (((((_la - 1) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 1)) & -2311473080112783361) != 0) || ((((_la - 66) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 66)) & 6268940175116599215) != 0)) { + setState(1658); hogqlxTagAttribute(); - setState(1519); + setState(1663); _errHandler->sync(this); _la = _input->LA(1); } - setState(1520); + setState(1664); match(HogQLParser::SLASH_GT); break; } @@ -12243,40 +13194,40 @@ HogQLParser::HogqlxTagElementContext* HogQLParser::hogqlxTagElement() { case 2: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 2); - setState(1522); + setState(1666); match(HogQLParser::LT); - setState(1523); + setState(1667); identifier(); - setState(1527); + setState(1671); _errHandler->sync(this); _la = _input->LA(1); - while ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & -5189554717113466882) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 64)) & 391808760944787435) != 0)) { - setState(1524); + while (((((_la - 1) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 1)) & -2311473080112783361) != 0) || ((((_la - 66) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 66)) & 6268940175116599215) != 0)) { + setState(1668); hogqlxTagAttribute(); - setState(1529); + setState(1673); _errHandler->sync(this); _la = _input->LA(1); } - setState(1530); + setState(1674); match(HogQLParser::GT); - setState(1534); + setState(1678); _errHandler->sync(this); _la = _input->LA(1); - while (((((_la - 147) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 147)) & 68719476753) != 0)) { - setState(1531); + while (((((_la - 153) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 153)) & 68719476753) != 0)) { + setState(1675); hogqlxChildElement(); - setState(1536); + setState(1680); _errHandler->sync(this); _la = _input->LA(1); } - setState(1537); + setState(1681); match(HogQLParser::LT_SLASH); - setState(1538); + setState(1682); identifier(); - setState(1539); + setState(1683); match(HogQLParser::GT); break; } @@ -12350,38 +13301,38 @@ HogQLParser::HogqlxTagAttributeContext* HogQLParser::hogqlxTagAttribute() { exitRule(); }); try { - setState(1554); + setState(1698); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 192, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 206, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(1543); + setState(1687); identifier(); - setState(1544); + setState(1688); match(HogQLParser::EQ_SINGLE); - setState(1545); + setState(1689); string(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(1547); + setState(1691); identifier(); - setState(1548); + setState(1692); match(HogQLParser::EQ_SINGLE); - setState(1549); + setState(1693); match(HogQLParser::LBRACE); - setState(1550); + setState(1694); columnExpr(0); - setState(1551); + setState(1695); match(HogQLParser::RBRACE); break; } case 3: { enterOuterAlt(_localctx, 3); - setState(1553); + setState(1697); identifier(); break; } @@ -12450,28 +13401,28 @@ HogQLParser::WithExprListContext* HogQLParser::withExprList() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1556); + setState(1700); withExpr(); - setState(1561); + setState(1705); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 193, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 207, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1557); + setState(1701); match(HogQLParser::COMMA); - setState(1558); + setState(1702); withExpr(); } - setState(1563); + setState(1707); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 193, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 207, _ctx); } - setState(1565); + setState(1709); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::COMMA) { - setState(1564); + setState(1708); match(HogQLParser::COMMA); } @@ -12591,59 +13542,59 @@ HogQLParser::WithExprContext* HogQLParser::withExpr() { exitRule(); }); try { - setState(1591); + setState(1735); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 199, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 213, _ctx)) { case 1: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 1); - setState(1567); + setState(1711); identifier(); - setState(1569); + setState(1713); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::LPAREN) { - setState(1568); + setState(1712); withExprColumnNameList(); } - setState(1574); + setState(1718); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::USING) { - setState(1571); + setState(1715); match(HogQLParser::USING); - setState(1572); + setState(1716); match(HogQLParser::KEY); - setState(1573); + setState(1717); withExprColumnNameList(); } - setState(1576); + setState(1720); match(HogQLParser::AS); - setState(1581); + setState(1725); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::MATERIALIZED || _la == HogQLParser::NOT) { - setState(1578); + setState(1722); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::NOT) { - setState(1577); + setState(1721); match(HogQLParser::NOT); } - setState(1580); + setState(1724); match(HogQLParser::MATERIALIZED); } - setState(1583); + setState(1727); match(HogQLParser::LPAREN); - setState(1584); + setState(1728); selectSetStmt(); - setState(1585); + setState(1729); match(HogQLParser::RPAREN); break; } @@ -12651,11 +13602,11 @@ HogQLParser::WithExprContext* HogQLParser::withExpr() { case 2: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 2); - setState(1587); + setState(1731); columnExpr(0); - setState(1588); + setState(1732); match(HogQLParser::AS); - setState(1589); + setState(1733); identifier(); break; } @@ -12731,23 +13682,23 @@ HogQLParser::WithExprColumnNameListContext* HogQLParser::withExprColumnNameList( }); try { enterOuterAlt(_localctx, 1); - setState(1593); + setState(1737); match(HogQLParser::LPAREN); - setState(1594); + setState(1738); identifier(); - setState(1599); + setState(1743); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(1595); + setState(1739); match(HogQLParser::COMMA); - setState(1596); + setState(1740); identifier(); - setState(1601); + setState(1745); _errHandler->sync(this); _la = _input->LA(1); } - setState(1602); + setState(1746); match(HogQLParser::RPAREN); } @@ -12807,12 +13758,12 @@ HogQLParser::ColumnIdentifierContext* HogQLParser::columnIdentifier() { exitRule(); }); try { - setState(1611); + setState(1755); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::LBRACE: { enterOuterAlt(_localctx, 1); - setState(1604); + setState(1748); placeholder(); break; } @@ -12846,6 +13797,7 @@ HogQLParser::ColumnIdentifierContext* HogQLParser::columnIdentifier() { case HogQLParser::EXCLUDE: case HogQLParser::EXTRACT: case HogQLParser::FINAL: + case HogQLParser::FILTER: case HogQLParser::FIRST: case HogQLParser::FOLLOWING: case HogQLParser::FOR: @@ -12858,6 +13810,8 @@ HogQLParser::ColumnIdentifierContext* HogQLParser::columnIdentifier() { case HogQLParser::ID: case HogQLParser::IF: case HogQLParser::ILIKE: + case HogQLParser::IGNORE: + case HogQLParser::INCLUDE: case HogQLParser::IN: case HogQLParser::INNER: case HogQLParser::INTERVAL: @@ -12873,6 +13827,7 @@ HogQLParser::ColumnIdentifierContext* HogQLParser::columnIdentifier() { case HogQLParser::MINUTE: case HogQLParser::MONTH: case HogQLParser::NAME: + case HogQLParser::NATURAL: case HogQLParser::NOT: case HogQLParser::NULLS: case HogQLParser::OFFSET: @@ -12882,6 +13837,8 @@ HogQLParser::ColumnIdentifierContext* HogQLParser::columnIdentifier() { case HogQLParser::OUTER: case HogQLParser::OVER: case HogQLParser::PARTITION: + case HogQLParser::PIVOT: + case HogQLParser::POSITIONAL: case HogQLParser::PRECEDING: case HogQLParser::PREWHERE: case HogQLParser::QUALIFY: @@ -12924,14 +13881,14 @@ HogQLParser::ColumnIdentifierContext* HogQLParser::columnIdentifier() { case HogQLParser::YEAR: case HogQLParser::IDENTIFIER: { enterOuterAlt(_localctx, 2); - setState(1608); + setState(1752); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 201, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 215, _ctx)) { case 1: { - setState(1605); + setState(1749); tableIdentifier(); - setState(1606); + setState(1750); match(HogQLParser::DOT); break; } @@ -12939,7 +13896,7 @@ HogQLParser::ColumnIdentifierContext* HogQLParser::columnIdentifier() { default: break; } - setState(1610); + setState(1754); nestedIdentifier(); break; } @@ -13007,21 +13964,21 @@ HogQLParser::NestedIdentifierContext* HogQLParser::nestedIdentifier() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1613); + setState(1757); identifier(); - setState(1618); + setState(1762); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 203, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 217, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1614); + setState(1758); match(HogQLParser::DOT); - setState(1615); + setState(1759); identifier(); } - setState(1620); + setState(1764); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 203, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 217, _ctx); } } @@ -13117,6 +14074,53 @@ std::any HogQLParser::TableExprSubqueryContext::accept(tree::ParseTreeVisitor *v else return visitor->visitChildren(this); } +//----------------- TableExprPivotContext ------------------------------------------------------------------ + +HogQLParser::TableExprContext* HogQLParser::TableExprPivotContext::tableExpr() { + return getRuleContext(0); +} + +tree::TerminalNode* HogQLParser::TableExprPivotContext::PIVOT() { + return getToken(HogQLParser::PIVOT, 0); +} + +tree::TerminalNode* HogQLParser::TableExprPivotContext::LPAREN() { + return getToken(HogQLParser::LPAREN, 0); +} + +std::vector HogQLParser::TableExprPivotContext::columnExprList() { + return getRuleContexts(); +} + +HogQLParser::ColumnExprListContext* HogQLParser::TableExprPivotContext::columnExprList(size_t i) { + return getRuleContext(i); +} + +HogQLParser::PivotColumnListContext* HogQLParser::TableExprPivotContext::pivotColumnList() { + return getRuleContext(0); +} + +tree::TerminalNode* HogQLParser::TableExprPivotContext::RPAREN() { + return getToken(HogQLParser::RPAREN, 0); +} + +tree::TerminalNode* HogQLParser::TableExprPivotContext::GROUP() { + return getToken(HogQLParser::GROUP, 0); +} + +tree::TerminalNode* HogQLParser::TableExprPivotContext::BY() { + return getToken(HogQLParser::BY, 0); +} + +HogQLParser::TableExprPivotContext::TableExprPivotContext(TableExprContext *ctx) { copyFrom(ctx); } + + +std::any HogQLParser::TableExprPivotContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitTableExprPivot(this); + else + return visitor->visitChildren(this); +} //----------------- TableExprValuesContext ------------------------------------------------------------------ tree::TerminalNode* HogQLParser::TableExprValuesContext::LPAREN() { @@ -13208,6 +14212,14 @@ tree::TerminalNode* HogQLParser::TableExprUnpivotContext::RPAREN() { return getToken(HogQLParser::RPAREN, 0); } +tree::TerminalNode* HogQLParser::TableExprUnpivotContext::INCLUDE() { + return getToken(HogQLParser::INCLUDE, 0); +} + +tree::TerminalNode* HogQLParser::TableExprUnpivotContext::NULLS() { + return getToken(HogQLParser::NULLS, 0); +} + HogQLParser::TableExprUnpivotContext::TableExprUnpivotContext(TableExprContext *ctx) { copyFrom(ctx); } @@ -13231,7 +14243,7 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { size_t startState = 168; enterRecursionRule(_localctx, 168, HogQLParser::RuleTableExpr, precedence); - + size_t _la = 0; #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -13243,15 +14255,15 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1634); + setState(1778); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 204, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 218, _ctx)) { case 1: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1622); + setState(1766); tableIdentifier(); break; } @@ -13260,7 +14272,7 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1623); + setState(1767); tableFunctionExpr(); break; } @@ -13269,11 +14281,11 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1624); + setState(1768); match(HogQLParser::LPAREN); - setState(1625); + setState(1769); selectSetStmt(); - setState(1626); + setState(1770); match(HogQLParser::RPAREN); break; } @@ -13282,11 +14294,11 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1628); + setState(1772); match(HogQLParser::LPAREN); - setState(1629); + setState(1773); valuesClause(); - setState(1630); + setState(1774); match(HogQLParser::RPAREN); break; } @@ -13295,7 +14307,7 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1632); + setState(1776); hogqlxTagElement(); break; } @@ -13304,7 +14316,7 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1633); + setState(1777); placeholder(); break; } @@ -13313,43 +14325,85 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { break; } _ctx->stop = _input->LT(-1); - setState(1653); + setState(1813); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 208, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 224, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { if (!_parseListeners.empty()) triggerExitRuleEvent(); previousContext = _localctx; - setState(1651); + setState(1811); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 207, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 223, _ctx)) { case 1: { + auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); + _localctx = newContext; + pushNewRecursionContext(newContext, startState, RuleTableExpr); + setState(1780); + + if (!(precpred(_ctx, 5))) throw FailedPredicateException(this, "precpred(_ctx, 5)"); + setState(1781); + match(HogQLParser::PIVOT); + setState(1782); + match(HogQLParser::LPAREN); + setState(1783); + columnExprList(); + setState(1784); + pivotColumnList(); + setState(1788); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == HogQLParser::GROUP) { + setState(1785); + match(HogQLParser::GROUP); + setState(1786); + match(HogQLParser::BY); + setState(1787); + columnExprList(); + } + setState(1790); + match(HogQLParser::RPAREN); + break; + } + + case 2: { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleTableExpr); - setState(1636); + setState(1792); if (!(precpred(_ctx, 4))) throw FailedPredicateException(this, "precpred(_ctx, 4)"); - setState(1637); + setState(1793); match(HogQLParser::UNPIVOT); - setState(1638); + setState(1796); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == HogQLParser::INCLUDE) { + setState(1794); + match(HogQLParser::INCLUDE); + setState(1795); + match(HogQLParser::NULLS); + } + setState(1798); match(HogQLParser::LPAREN); - setState(1639); + setState(1799); unpivotColumnList(); - setState(1640); + setState(1800); match(HogQLParser::RPAREN); break; } - case 2: { + case 3: { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleTableExpr); - setState(1642); + setState(1802); if (!(precpred(_ctx, 3))) throw FailedPredicateException(this, "precpred(_ctx, 3)"); - setState(1646); + setState(1806); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::DATE: @@ -13357,15 +14411,15 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { case HogQLParser::ID: case HogQLParser::KEY: case HogQLParser::IDENTIFIER: { - setState(1643); + setState(1803); alias(); break; } case HogQLParser::AS: { - setState(1644); + setState(1804); match(HogQLParser::AS); - setState(1645); + setState(1805); identifier(); break; } @@ -13373,12 +14427,12 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { default: throw NoViableAltException(this); } - setState(1649); + setState(1809); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 206, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 222, _ctx)) { case 1: { - setState(1648); + setState(1808); columnAliases(); break; } @@ -13393,9 +14447,9 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { break; } } - setState(1655); + setState(1815); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 208, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 224, _ctx); } } catch (RecognitionException &e) { @@ -13406,6 +14460,155 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { return _localctx; } +//----------------- PivotColumnListContext ------------------------------------------------------------------ + +HogQLParser::PivotColumnListContext::PivotColumnListContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* HogQLParser::PivotColumnListContext::FOR() { + return getToken(HogQLParser::FOR, 0); +} + +std::vector HogQLParser::PivotColumnListContext::pivotColumn() { + return getRuleContexts(); +} + +HogQLParser::PivotColumnContext* HogQLParser::PivotColumnListContext::pivotColumn(size_t i) { + return getRuleContext(i); +} + + +size_t HogQLParser::PivotColumnListContext::getRuleIndex() const { + return HogQLParser::RulePivotColumnList; +} + + +std::any HogQLParser::PivotColumnListContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitPivotColumnList(this); + else + return visitor->visitChildren(this); +} + +HogQLParser::PivotColumnListContext* HogQLParser::pivotColumnList() { + PivotColumnListContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 170, HogQLParser::RulePivotColumnList); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + size_t alt; + enterOuterAlt(_localctx, 1); + setState(1816); + match(HogQLParser::FOR); + setState(1818); + _errHandler->sync(this); + alt = 1; + do { + switch (alt) { + case 1: { + setState(1817); + pivotColumn(); + break; + } + + default: + throw NoViableAltException(this); + } + setState(1820); + _errHandler->sync(this); + alt = getInterpreter()->adaptivePredict(_input, 225, _ctx); + } while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- PivotColumnContext ------------------------------------------------------------------ + +HogQLParser::PivotColumnContext::PivotColumnContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +HogQLParser::ColumnExprTupleOrSingleContext* HogQLParser::PivotColumnContext::columnExprTupleOrSingle() { + return getRuleContext(0); +} + +tree::TerminalNode* HogQLParser::PivotColumnContext::IN() { + return getToken(HogQLParser::IN, 0); +} + +tree::TerminalNode* HogQLParser::PivotColumnContext::LPAREN() { + return getToken(HogQLParser::LPAREN, 0); +} + +HogQLParser::ColumnExprListContext* HogQLParser::PivotColumnContext::columnExprList() { + return getRuleContext(0); +} + +tree::TerminalNode* HogQLParser::PivotColumnContext::RPAREN() { + return getToken(HogQLParser::RPAREN, 0); +} + + +size_t HogQLParser::PivotColumnContext::getRuleIndex() const { + return HogQLParser::RulePivotColumn; +} + + +std::any HogQLParser::PivotColumnContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitPivotColumn(this); + else + return visitor->visitChildren(this); +} + +HogQLParser::PivotColumnContext* HogQLParser::pivotColumn() { + PivotColumnContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 172, HogQLParser::RulePivotColumn); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1822); + columnExprTupleOrSingle(); + setState(1823); + match(HogQLParser::IN); + setState(1824); + match(HogQLParser::LPAREN); + setState(1825); + columnExprList(); + setState(1826); + match(HogQLParser::RPAREN); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + //----------------- UnpivotColumnListContext ------------------------------------------------------------------ HogQLParser::UnpivotColumnListContext::UnpivotColumnListContext(ParserRuleContext *parent, size_t invokingState) @@ -13443,7 +14646,7 @@ std::any HogQLParser::UnpivotColumnListContext::accept(tree::ParseTreeVisitor *v HogQLParser::UnpivotColumnListContext* HogQLParser::unpivotColumnList() { UnpivotColumnListContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 170, HogQLParser::RuleUnpivotColumnList); + enterRule(_localctx, 174, HogQLParser::RuleUnpivotColumnList); size_t _la = 0; #if __cplusplus > 201703L @@ -13456,28 +14659,28 @@ HogQLParser::UnpivotColumnListContext* HogQLParser::unpivotColumnList() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1656); + setState(1828); unpivotColumn(); - setState(1661); + setState(1833); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 209, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 226, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1657); + setState(1829); match(HogQLParser::COMMA); - setState(1658); + setState(1830); unpivotColumn(); } - setState(1663); + setState(1835); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 209, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 226, _ctx); } - setState(1665); + setState(1837); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::COMMA) { - setState(1664); + setState(1836); match(HogQLParser::COMMA); } @@ -13509,20 +14712,36 @@ tree::TerminalNode* HogQLParser::UnpivotColumnContext::FOR() { return getToken(HogQLParser::FOR, 0); } -tree::TerminalNode* HogQLParser::UnpivotColumnContext::IN() { - return getToken(HogQLParser::IN, 0); +std::vector HogQLParser::UnpivotColumnContext::IN() { + return getTokens(HogQLParser::IN); } -tree::TerminalNode* HogQLParser::UnpivotColumnContext::LPAREN() { - return getToken(HogQLParser::LPAREN, 0); +tree::TerminalNode* HogQLParser::UnpivotColumnContext::IN(size_t i) { + return getToken(HogQLParser::IN, i); } -HogQLParser::ColumnExprListContext* HogQLParser::UnpivotColumnContext::columnExprList() { - return getRuleContext(0); +std::vector HogQLParser::UnpivotColumnContext::LPAREN() { + return getTokens(HogQLParser::LPAREN); } -tree::TerminalNode* HogQLParser::UnpivotColumnContext::RPAREN() { - return getToken(HogQLParser::RPAREN, 0); +tree::TerminalNode* HogQLParser::UnpivotColumnContext::LPAREN(size_t i) { + return getToken(HogQLParser::LPAREN, i); +} + +std::vector HogQLParser::UnpivotColumnContext::columnExprList() { + return getRuleContexts(); +} + +HogQLParser::ColumnExprListContext* HogQLParser::UnpivotColumnContext::columnExprList(size_t i) { + return getRuleContext(i); +} + +std::vector HogQLParser::UnpivotColumnContext::RPAREN() { + return getTokens(HogQLParser::RPAREN); +} + +tree::TerminalNode* HogQLParser::UnpivotColumnContext::RPAREN(size_t i) { + return getToken(HogQLParser::RPAREN, i); } @@ -13540,7 +14759,8 @@ std::any HogQLParser::UnpivotColumnContext::accept(tree::ParseTreeVisitor *visit HogQLParser::UnpivotColumnContext* HogQLParser::unpivotColumn() { UnpivotColumnContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 172, HogQLParser::RuleUnpivotColumn); + enterRule(_localctx, 176, HogQLParser::RuleUnpivotColumn); + size_t _la = 0; #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -13551,20 +14771,41 @@ HogQLParser::UnpivotColumnContext* HogQLParser::unpivotColumn() { }); try { enterOuterAlt(_localctx, 1); - setState(1667); + setState(1839); columnExprTupleOrSingle(); - setState(1668); + setState(1840); match(HogQLParser::FOR); - setState(1669); + setState(1841); columnExprTupleOrSingle(); - setState(1670); + setState(1842); match(HogQLParser::IN); - setState(1671); + setState(1843); match(HogQLParser::LPAREN); - setState(1672); + setState(1844); columnExprList(); - setState(1673); + setState(1845); match(HogQLParser::RPAREN); + setState(1854); + _errHandler->sync(this); + _la = _input->LA(1); + while ((((_la & ~ 0x3fULL) == 0) && + ((1ULL << _la) & -4620694360411881474) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 64)) & 6629016626756845565) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 128)) & 1237726691519) != 0)) { + setState(1846); + columnExprTupleOrSingle(); + setState(1847); + match(HogQLParser::IN); + setState(1848); + match(HogQLParser::LPAREN); + setState(1849); + columnExprList(); + setState(1850); + match(HogQLParser::RPAREN); + setState(1856); + _errHandler->sync(this); + _la = _input->LA(1); + } } catch (RecognitionException &e) { @@ -13613,7 +14854,7 @@ std::any HogQLParser::ColumnExprTupleOrSingleContext::accept(tree::ParseTreeVisi HogQLParser::ColumnExprTupleOrSingleContext* HogQLParser::columnExprTupleOrSingle() { ColumnExprTupleOrSingleContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 174, HogQLParser::RuleColumnExprTupleOrSingle); + enterRule(_localctx, 178, HogQLParser::RuleColumnExprTupleOrSingle); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -13623,23 +14864,23 @@ HogQLParser::ColumnExprTupleOrSingleContext* HogQLParser::columnExprTupleOrSingl exitRule(); }); try { - setState(1680); + setState(1862); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 211, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 229, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(1675); + setState(1857); match(HogQLParser::LPAREN); - setState(1676); + setState(1858); columnExprList(); - setState(1677); + setState(1859); match(HogQLParser::RPAREN); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(1679); + setState(1861); columnExpr(0); break; } @@ -13703,7 +14944,7 @@ std::any HogQLParser::ColumnAliasesContext::accept(tree::ParseTreeVisitor *visit HogQLParser::ColumnAliasesContext* HogQLParser::columnAliases() { ColumnAliasesContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 176, HogQLParser::RuleColumnAliases); + enterRule(_localctx, 180, HogQLParser::RuleColumnAliases); size_t _la = 0; #if __cplusplus > 201703L @@ -13715,23 +14956,23 @@ HogQLParser::ColumnAliasesContext* HogQLParser::columnAliases() { }); try { enterOuterAlt(_localctx, 1); - setState(1682); + setState(1864); match(HogQLParser::LPAREN); - setState(1683); + setState(1865); identifier(); - setState(1688); + setState(1870); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(1684); + setState(1866); match(HogQLParser::COMMA); - setState(1685); + setState(1867); identifier(); - setState(1690); + setState(1872); _errHandler->sync(this); _la = _input->LA(1); } - setState(1691); + setState(1873); match(HogQLParser::RPAREN); } @@ -13781,7 +15022,7 @@ std::any HogQLParser::TableFunctionExprContext::accept(tree::ParseTreeVisitor *v HogQLParser::TableFunctionExprContext* HogQLParser::tableFunctionExpr() { TableFunctionExprContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 178, HogQLParser::RuleTableFunctionExpr); + enterRule(_localctx, 182, HogQLParser::RuleTableFunctionExpr); size_t _la = 0; #if __cplusplus > 201703L @@ -13793,22 +15034,22 @@ HogQLParser::TableFunctionExprContext* HogQLParser::tableFunctionExpr() { }); try { enterOuterAlt(_localctx, 1); - setState(1693); + setState(1875); identifier(); - setState(1694); + setState(1876); match(HogQLParser::LPAREN); - setState(1696); + setState(1878); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & -5189273242136756226) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 64)) & -184651991358636033) != 0) || ((((_la - 129) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 129)) & 9669739777) != 0)) { - setState(1695); + ((1ULL << _la) & -4620694360411881474) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 64)) & 6629016626756845565) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 128)) & 1237726691519) != 0)) { + setState(1877); tableArgList(); } - setState(1698); + setState(1880); match(HogQLParser::RPAREN); } @@ -13854,7 +15095,7 @@ std::any HogQLParser::TableIdentifierContext::accept(tree::ParseTreeVisitor *vis HogQLParser::TableIdentifierContext* HogQLParser::tableIdentifier() { TableIdentifierContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 180, HogQLParser::RuleTableIdentifier); + enterRule(_localctx, 184, HogQLParser::RuleTableIdentifier); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -13865,14 +15106,14 @@ HogQLParser::TableIdentifierContext* HogQLParser::tableIdentifier() { }); try { enterOuterAlt(_localctx, 1); - setState(1703); + setState(1885); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 214, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 232, _ctx)) { case 1: { - setState(1700); + setState(1882); databaseIdentifier(); - setState(1701); + setState(1883); match(HogQLParser::DOT); break; } @@ -13880,7 +15121,7 @@ HogQLParser::TableIdentifierContext* HogQLParser::tableIdentifier() { default: break; } - setState(1705); + setState(1887); nestedIdentifier(); } @@ -13930,7 +15171,7 @@ std::any HogQLParser::TableArgListContext::accept(tree::ParseTreeVisitor *visito HogQLParser::TableArgListContext* HogQLParser::tableArgList() { TableArgListContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 182, HogQLParser::RuleTableArgList); + enterRule(_localctx, 186, HogQLParser::RuleTableArgList); size_t _la = 0; #if __cplusplus > 201703L @@ -13943,28 +15184,28 @@ HogQLParser::TableArgListContext* HogQLParser::tableArgList() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1707); + setState(1889); columnExpr(0); - setState(1712); + setState(1894); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 215, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 233, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1708); + setState(1890); match(HogQLParser::COMMA); - setState(1709); + setState(1891); columnExpr(0); } - setState(1714); + setState(1896); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 215, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 233, _ctx); } - setState(1716); + setState(1898); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::COMMA) { - setState(1715); + setState(1897); match(HogQLParser::COMMA); } @@ -14003,7 +15244,7 @@ std::any HogQLParser::DatabaseIdentifierContext::accept(tree::ParseTreeVisitor * HogQLParser::DatabaseIdentifierContext* HogQLParser::databaseIdentifier() { DatabaseIdentifierContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 184, HogQLParser::RuleDatabaseIdentifier); + enterRule(_localctx, 188, HogQLParser::RuleDatabaseIdentifier); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -14014,7 +15255,7 @@ HogQLParser::DatabaseIdentifierContext* HogQLParser::databaseIdentifier() { }); try { enterOuterAlt(_localctx, 1); - setState(1718); + setState(1900); identifier(); } @@ -14068,7 +15309,7 @@ std::any HogQLParser::FloatingLiteralContext::accept(tree::ParseTreeVisitor *vis HogQLParser::FloatingLiteralContext* HogQLParser::floatingLiteral() { FloatingLiteralContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 186, HogQLParser::RuleFloatingLiteral); + enterRule(_localctx, 190, HogQLParser::RuleFloatingLiteral); size_t _la = 0; #if __cplusplus > 201703L @@ -14079,21 +15320,21 @@ HogQLParser::FloatingLiteralContext* HogQLParser::floatingLiteral() { exitRule(); }); try { - setState(1728); + setState(1910); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::FLOATING_LITERAL: { enterOuterAlt(_localctx, 1); - setState(1720); + setState(1902); match(HogQLParser::FLOATING_LITERAL); break; } case HogQLParser::DOT: { enterOuterAlt(_localctx, 2); - setState(1721); + setState(1903); match(HogQLParser::DOT); - setState(1722); + setState(1904); _la = _input->LA(1); if (!(_la == HogQLParser::OCTAL_LITERAL @@ -14109,16 +15350,16 @@ HogQLParser::FloatingLiteralContext* HogQLParser::floatingLiteral() { case HogQLParser::DECIMAL_LITERAL: { enterOuterAlt(_localctx, 3); - setState(1723); + setState(1905); match(HogQLParser::DECIMAL_LITERAL); - setState(1724); + setState(1906); match(HogQLParser::DOT); - setState(1726); + setState(1908); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 217, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 235, _ctx)) { case 1: { - setState(1725); + setState(1907); _la = _input->LA(1); if (!(_la == HogQLParser::OCTAL_LITERAL @@ -14205,7 +15446,7 @@ std::any HogQLParser::NumberLiteralContext::accept(tree::ParseTreeVisitor *visit HogQLParser::NumberLiteralContext* HogQLParser::numberLiteral() { NumberLiteralContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 188, HogQLParser::RuleNumberLiteral); + enterRule(_localctx, 192, HogQLParser::RuleNumberLiteral); size_t _la = 0; #if __cplusplus > 201703L @@ -14217,14 +15458,14 @@ HogQLParser::NumberLiteralContext* HogQLParser::numberLiteral() { }); try { enterOuterAlt(_localctx, 1); - setState(1731); + setState(1913); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::DASH || _la == HogQLParser::PLUS) { - setState(1730); + setState(1912); _la = _input->LA(1); if (!(_la == HogQLParser::DASH @@ -14236,41 +15477,41 @@ HogQLParser::NumberLiteralContext* HogQLParser::numberLiteral() { consume(); } } - setState(1739); + setState(1921); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 220, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 238, _ctx)) { case 1: { - setState(1733); + setState(1915); floatingLiteral(); break; } case 2: { - setState(1734); + setState(1916); match(HogQLParser::OCTAL_LITERAL); break; } case 3: { - setState(1735); + setState(1917); match(HogQLParser::DECIMAL_LITERAL); break; } case 4: { - setState(1736); + setState(1918); match(HogQLParser::HEXADECIMAL_LITERAL); break; } case 5: { - setState(1737); + setState(1919); match(HogQLParser::INF); break; } case 6: { - setState(1738); + setState(1920); match(HogQLParser::NAN_SQL); break; } @@ -14322,7 +15563,7 @@ std::any HogQLParser::LiteralContext::accept(tree::ParseTreeVisitor *visitor) { HogQLParser::LiteralContext* HogQLParser::literal() { LiteralContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 190, HogQLParser::RuleLiteral); + enterRule(_localctx, 194, HogQLParser::RuleLiteral); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -14332,7 +15573,7 @@ HogQLParser::LiteralContext* HogQLParser::literal() { exitRule(); }); try { - setState(1744); + setState(1926); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::INF: @@ -14345,21 +15586,21 @@ HogQLParser::LiteralContext* HogQLParser::literal() { case HogQLParser::DOT: case HogQLParser::PLUS: { enterOuterAlt(_localctx, 1); - setState(1741); + setState(1923); numberLiteral(); break; } case HogQLParser::STRING_LITERAL: { enterOuterAlt(_localctx, 2); - setState(1742); + setState(1924); match(HogQLParser::STRING_LITERAL); break; } case HogQLParser::NULL_SQL: { enterOuterAlt(_localctx, 3); - setState(1743); + setState(1925); match(HogQLParser::NULL_SQL); break; } @@ -14431,7 +15672,7 @@ std::any HogQLParser::IntervalContext::accept(tree::ParseTreeVisitor *visitor) { HogQLParser::IntervalContext* HogQLParser::interval() { IntervalContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 192, HogQLParser::RuleInterval); + enterRule(_localctx, 196, HogQLParser::RuleInterval); size_t _la = 0; #if __cplusplus > 201703L @@ -14443,11 +15684,12 @@ HogQLParser::IntervalContext* HogQLParser::interval() { }); try { enterOuterAlt(_localctx, 1); - setState(1746); + setState(1928); _la = _input->LA(1); - if (!((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & -9223363240757559296) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 64)) & 72620544058523649) != 0))) { + if (!(_la == HogQLParser::DAY + + || _la == HogQLParser::HOUR || ((((_la - 66) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 66)) & 1161928704936378371) != 0))) { _errHandler->recoverInline(this); } else { @@ -14579,6 +15821,10 @@ tree::TerminalNode* HogQLParser::KeywordContext::EXTRACT() { return getToken(HogQLParser::EXTRACT, 0); } +tree::TerminalNode* HogQLParser::KeywordContext::FILTER() { + return getToken(HogQLParser::FILTER, 0); +} + tree::TerminalNode* HogQLParser::KeywordContext::FINAL() { return getToken(HogQLParser::FINAL, 0); } @@ -14627,10 +15873,18 @@ tree::TerminalNode* HogQLParser::KeywordContext::IF() { return getToken(HogQLParser::IF, 0); } +tree::TerminalNode* HogQLParser::KeywordContext::IGNORE() { + return getToken(HogQLParser::IGNORE, 0); +} + tree::TerminalNode* HogQLParser::KeywordContext::ILIKE() { return getToken(HogQLParser::ILIKE, 0); } +tree::TerminalNode* HogQLParser::KeywordContext::INCLUDE() { + return getToken(HogQLParser::INCLUDE, 0); +} + tree::TerminalNode* HogQLParser::KeywordContext::IN() { return getToken(HogQLParser::IN, 0); } @@ -14679,6 +15933,10 @@ tree::TerminalNode* HogQLParser::KeywordContext::NAME() { return getToken(HogQLParser::NAME, 0); } +tree::TerminalNode* HogQLParser::KeywordContext::NATURAL() { + return getToken(HogQLParser::NATURAL, 0); +} + tree::TerminalNode* HogQLParser::KeywordContext::NOT() { return getToken(HogQLParser::NOT, 0); } @@ -14715,6 +15973,14 @@ tree::TerminalNode* HogQLParser::KeywordContext::PARTITION() { return getToken(HogQLParser::PARTITION, 0); } +tree::TerminalNode* HogQLParser::KeywordContext::PIVOT() { + return getToken(HogQLParser::PIVOT, 0); +} + +tree::TerminalNode* HogQLParser::KeywordContext::POSITIONAL() { + return getToken(HogQLParser::POSITIONAL, 0); +} + tree::TerminalNode* HogQLParser::KeywordContext::PRECEDING() { return getToken(HogQLParser::PRECEDING, 0); } @@ -14874,7 +16140,7 @@ std::any HogQLParser::KeywordContext::accept(tree::ParseTreeVisitor *visitor) { HogQLParser::KeywordContext* HogQLParser::keyword() { KeywordContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 194, HogQLParser::RuleKeyword); + enterRule(_localctx, 198, HogQLParser::RuleKeyword); size_t _la = 0; #if __cplusplus > 201703L @@ -14886,11 +16152,11 @@ HogQLParser::KeywordContext* HogQLParser::keyword() { }); try { enterOuterAlt(_localctx, 1); - setState(1748); + setState(1930); _la = _input->LA(1); if (!((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & 4033808523644092414) != 0) || ((((_la - 65) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 65)) & 15478920367276021) != 0))) { + ((1ULL << _la) & -4622963752415805442) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 64)) & 1981301807011331761) != 0))) { _errHandler->recoverInline(this); } else { @@ -14945,7 +16211,7 @@ std::any HogQLParser::KeywordForAliasContext::accept(tree::ParseTreeVisitor *vis HogQLParser::KeywordForAliasContext* HogQLParser::keywordForAlias() { KeywordForAliasContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 196, HogQLParser::RuleKeywordForAlias); + enterRule(_localctx, 200, HogQLParser::RuleKeywordForAlias); size_t _la = 0; #if __cplusplus > 201703L @@ -14957,10 +16223,10 @@ HogQLParser::KeywordForAliasContext* HogQLParser::keywordForAlias() { }); try { enterOuterAlt(_localctx, 1); - setState(1750); + setState(1932); _la = _input->LA(1); if (!((((_la & ~ 0x3fULL) == 0) && - ((1ULL << _la) & 18031999287558144) != 0))) { + ((1ULL << _la) & 144150389629911040) != 0))) { _errHandler->recoverInline(this); } else { @@ -15007,7 +16273,7 @@ std::any HogQLParser::AliasContext::accept(tree::ParseTreeVisitor *visitor) { HogQLParser::AliasContext* HogQLParser::alias() { AliasContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 198, HogQLParser::RuleAlias); + enterRule(_localctx, 202, HogQLParser::RuleAlias); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -15017,12 +16283,12 @@ HogQLParser::AliasContext* HogQLParser::alias() { exitRule(); }); try { - setState(1754); + setState(1936); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::IDENTIFIER: { enterOuterAlt(_localctx, 1); - setState(1752); + setState(1934); match(HogQLParser::IDENTIFIER); break; } @@ -15032,7 +16298,7 @@ HogQLParser::AliasContext* HogQLParser::alias() { case HogQLParser::ID: case HogQLParser::KEY: { enterOuterAlt(_localctx, 2); - setState(1753); + setState(1935); keywordForAlias(); break; } @@ -15084,7 +16350,7 @@ std::any HogQLParser::IdentifierContext::accept(tree::ParseTreeVisitor *visitor) HogQLParser::IdentifierContext* HogQLParser::identifier() { IdentifierContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 200, HogQLParser::RuleIdentifier); + enterRule(_localctx, 204, HogQLParser::RuleIdentifier); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -15094,12 +16360,12 @@ HogQLParser::IdentifierContext* HogQLParser::identifier() { exitRule(); }); try { - setState(1759); + setState(1941); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::IDENTIFIER: { enterOuterAlt(_localctx, 1); - setState(1756); + setState(1938); match(HogQLParser::IDENTIFIER); break; } @@ -15113,7 +16379,7 @@ HogQLParser::IdentifierContext* HogQLParser::identifier() { case HogQLParser::WEEK: case HogQLParser::YEAR: { enterOuterAlt(_localctx, 2); - setState(1757); + setState(1939); interval(); break; } @@ -15146,6 +16412,7 @@ HogQLParser::IdentifierContext* HogQLParser::identifier() { case HogQLParser::EXCLUDE: case HogQLParser::EXTRACT: case HogQLParser::FINAL: + case HogQLParser::FILTER: case HogQLParser::FIRST: case HogQLParser::FOLLOWING: case HogQLParser::FOR: @@ -15157,6 +16424,8 @@ HogQLParser::IdentifierContext* HogQLParser::identifier() { case HogQLParser::ID: case HogQLParser::IF: case HogQLParser::ILIKE: + case HogQLParser::IGNORE: + case HogQLParser::INCLUDE: case HogQLParser::IN: case HogQLParser::INNER: case HogQLParser::INTERVAL: @@ -15170,6 +16439,7 @@ HogQLParser::IdentifierContext* HogQLParser::identifier() { case HogQLParser::LIKE: case HogQLParser::LIMIT: case HogQLParser::NAME: + case HogQLParser::NATURAL: case HogQLParser::NOT: case HogQLParser::NULLS: case HogQLParser::OFFSET: @@ -15179,6 +16449,8 @@ HogQLParser::IdentifierContext* HogQLParser::identifier() { case HogQLParser::OUTER: case HogQLParser::OVER: case HogQLParser::PARTITION: + case HogQLParser::PIVOT: + case HogQLParser::POSITIONAL: case HogQLParser::PRECEDING: case HogQLParser::PREWHERE: case HogQLParser::QUALIFY: @@ -15216,7 +16488,7 @@ HogQLParser::IdentifierContext* HogQLParser::identifier() { case HogQLParser::WINDOW: case HogQLParser::WITH: { enterOuterAlt(_localctx, 3); - setState(1758); + setState(1940); keyword(); break; } @@ -15268,7 +16540,7 @@ std::any HogQLParser::EnumValueContext::accept(tree::ParseTreeVisitor *visitor) HogQLParser::EnumValueContext* HogQLParser::enumValue() { EnumValueContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 202, HogQLParser::RuleEnumValue); + enterRule(_localctx, 206, HogQLParser::RuleEnumValue); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -15279,11 +16551,11 @@ HogQLParser::EnumValueContext* HogQLParser::enumValue() { }); try { enterOuterAlt(_localctx, 1); - setState(1761); + setState(1943); string(); - setState(1762); + setState(1944); match(HogQLParser::EQ_SINGLE); - setState(1763); + setState(1945); numberLiteral(); } @@ -15329,7 +16601,7 @@ std::any HogQLParser::PlaceholderContext::accept(tree::ParseTreeVisitor *visitor HogQLParser::PlaceholderContext* HogQLParser::placeholder() { PlaceholderContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 204, HogQLParser::RulePlaceholder); + enterRule(_localctx, 208, HogQLParser::RulePlaceholder); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -15340,11 +16612,11 @@ HogQLParser::PlaceholderContext* HogQLParser::placeholder() { }); try { enterOuterAlt(_localctx, 1); - setState(1765); + setState(1947); match(HogQLParser::LBRACE); - setState(1766); + setState(1948); columnExpr(0); - setState(1767); + setState(1949); match(HogQLParser::RBRACE); } @@ -15386,7 +16658,7 @@ std::any HogQLParser::StringContext::accept(tree::ParseTreeVisitor *visitor) { HogQLParser::StringContext* HogQLParser::string() { StringContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 206, HogQLParser::RuleString); + enterRule(_localctx, 210, HogQLParser::RuleString); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -15396,19 +16668,19 @@ HogQLParser::StringContext* HogQLParser::string() { exitRule(); }); try { - setState(1771); + setState(1953); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::STRING_LITERAL: { enterOuterAlt(_localctx, 1); - setState(1769); + setState(1951); match(HogQLParser::STRING_LITERAL); break; } case HogQLParser::QUOTE_SINGLE_TEMPLATE: { enterOuterAlt(_localctx, 2); - setState(1770); + setState(1952); templateString(); break; } @@ -15464,7 +16736,7 @@ std::any HogQLParser::TemplateStringContext::accept(tree::ParseTreeVisitor *visi HogQLParser::TemplateStringContext* HogQLParser::templateString() { TemplateStringContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 208, HogQLParser::RuleTemplateString); + enterRule(_localctx, 212, HogQLParser::RuleTemplateString); size_t _la = 0; #if __cplusplus > 201703L @@ -15476,21 +16748,21 @@ HogQLParser::TemplateStringContext* HogQLParser::templateString() { }); try { enterOuterAlt(_localctx, 1); - setState(1773); + setState(1955); match(HogQLParser::QUOTE_SINGLE_TEMPLATE); - setState(1777); + setState(1959); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::STRING_TEXT || _la == HogQLParser::STRING_ESCAPE_TRIGGER) { - setState(1774); + setState(1956); stringContents(); - setState(1779); + setState(1961); _errHandler->sync(this); _la = _input->LA(1); } - setState(1780); + setState(1962); match(HogQLParser::QUOTE_SINGLE); } @@ -15540,7 +16812,7 @@ std::any HogQLParser::StringContentsContext::accept(tree::ParseTreeVisitor *visi HogQLParser::StringContentsContext* HogQLParser::stringContents() { StringContentsContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 210, HogQLParser::RuleStringContents); + enterRule(_localctx, 214, HogQLParser::RuleStringContents); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -15550,23 +16822,23 @@ HogQLParser::StringContentsContext* HogQLParser::stringContents() { exitRule(); }); try { - setState(1787); + setState(1969); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::STRING_ESCAPE_TRIGGER: { enterOuterAlt(_localctx, 1); - setState(1782); + setState(1964); match(HogQLParser::STRING_ESCAPE_TRIGGER); - setState(1783); + setState(1965); columnExpr(0); - setState(1784); + setState(1966); match(HogQLParser::RBRACE); break; } case HogQLParser::STRING_TEXT: { enterOuterAlt(_localctx, 2); - setState(1786); + setState(1968); match(HogQLParser::STRING_TEXT); break; } @@ -15622,7 +16894,7 @@ std::any HogQLParser::FullTemplateStringContext::accept(tree::ParseTreeVisitor * HogQLParser::FullTemplateStringContext* HogQLParser::fullTemplateString() { FullTemplateStringContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 212, HogQLParser::RuleFullTemplateString); + enterRule(_localctx, 216, HogQLParser::RuleFullTemplateString); size_t _la = 0; #if __cplusplus > 201703L @@ -15634,21 +16906,21 @@ HogQLParser::FullTemplateStringContext* HogQLParser::fullTemplateString() { }); try { enterOuterAlt(_localctx, 1); - setState(1789); + setState(1971); match(HogQLParser::QUOTE_SINGLE_TEMPLATE_FULL); - setState(1793); + setState(1975); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::FULL_STRING_TEXT || _la == HogQLParser::FULL_STRING_ESCAPE_TRIGGER) { - setState(1790); + setState(1972); stringContentsFull(); - setState(1795); + setState(1977); _errHandler->sync(this); _la = _input->LA(1); } - setState(1796); + setState(1978); match(HogQLParser::EOF); } @@ -15698,7 +16970,7 @@ std::any HogQLParser::StringContentsFullContext::accept(tree::ParseTreeVisitor * HogQLParser::StringContentsFullContext* HogQLParser::stringContentsFull() { StringContentsFullContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 214, HogQLParser::RuleStringContentsFull); + enterRule(_localctx, 218, HogQLParser::RuleStringContentsFull); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -15708,23 +16980,23 @@ HogQLParser::StringContentsFullContext* HogQLParser::stringContentsFull() { exitRule(); }); try { - setState(1803); + setState(1985); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::FULL_STRING_ESCAPE_TRIGGER: { enterOuterAlt(_localctx, 1); - setState(1798); + setState(1980); match(HogQLParser::FULL_STRING_ESCAPE_TRIGGER); - setState(1799); + setState(1981); columnExpr(0); - setState(1800); + setState(1982); match(HogQLParser::RBRACE); break; } case HogQLParser::FULL_STRING_TEXT: { enterOuterAlt(_localctx, 2); - setState(1802); + setState(1984); match(HogQLParser::FULL_STRING_TEXT); break; } @@ -15746,6 +17018,7 @@ HogQLParser::StringContentsFullContext* HogQLParser::stringContentsFull() { bool HogQLParser::sempred(RuleContext *context, size_t ruleIndex, size_t predicateIndex) { switch (ruleIndex) { case 47: return joinExprSempred(antlrcpp::downCast(context), predicateIndex); + case 66: return columnTypeExprSempred(antlrcpp::downCast(context), predicateIndex); case 71: return columnExprSempred(antlrcpp::downCast(context), predicateIndex); case 84: return tableExprSempred(antlrcpp::downCast(context), predicateIndex); @@ -15757,8 +17030,21 @@ bool HogQLParser::sempred(RuleContext *context, size_t ruleIndex, size_t predica bool HogQLParser::joinExprSempred(JoinExprContext *_localctx, size_t predicateIndex) { switch (predicateIndex) { - case 0: return precpred(_ctx, 3); - case 1: return precpred(_ctx, 4); + case 0: return precpred(_ctx, 5); + case 1: return precpred(_ctx, 7); + case 2: return precpred(_ctx, 6); + case 3: return precpred(_ctx, 4); + case 4: return precpred(_ctx, 3); + + default: + break; + } + return true; +} + +bool HogQLParser::columnTypeExprSempred(ColumnTypeExprContext *_localctx, size_t predicateIndex) { + switch (predicateIndex) { + case 5: return precpred(_ctx, 7); default: break; @@ -15768,27 +17054,28 @@ bool HogQLParser::joinExprSempred(JoinExprContext *_localctx, size_t predicateIn bool HogQLParser::columnExprSempred(ColumnExprContext *_localctx, size_t predicateIndex) { switch (predicateIndex) { - case 2: return precpred(_ctx, 23); - case 3: return precpred(_ctx, 22); - case 4: return precpred(_ctx, 21); - case 5: return precpred(_ctx, 19); - case 6: return precpred(_ctx, 18); - case 7: return precpred(_ctx, 16); - case 8: return precpred(_ctx, 15); - case 9: return precpred(_ctx, 14); - case 10: return precpred(_ctx, 13); - case 11: return precpred(_ctx, 37); - case 12: return precpred(_ctx, 36); - case 13: return precpred(_ctx, 32); - case 14: return precpred(_ctx, 31); - case 15: return precpred(_ctx, 30); - case 16: return precpred(_ctx, 29); - case 17: return precpred(_ctx, 28); - case 18: return precpred(_ctx, 27); - case 19: return precpred(_ctx, 26); - case 20: return precpred(_ctx, 25); - case 21: return precpred(_ctx, 20); - case 22: return precpred(_ctx, 12); + case 6: return precpred(_ctx, 24); + case 7: return precpred(_ctx, 23); + case 8: return precpred(_ctx, 22); + case 9: return precpred(_ctx, 19); + case 10: return precpred(_ctx, 18); + case 11: return precpred(_ctx, 16); + case 12: return precpred(_ctx, 15); + case 13: return precpred(_ctx, 14); + case 14: return precpred(_ctx, 13); + case 15: return precpred(_ctx, 38); + case 16: return precpred(_ctx, 37); + case 17: return precpred(_ctx, 33); + case 18: return precpred(_ctx, 32); + case 19: return precpred(_ctx, 31); + case 20: return precpred(_ctx, 30); + case 21: return precpred(_ctx, 29); + case 22: return precpred(_ctx, 28); + case 23: return precpred(_ctx, 27); + case 24: return precpred(_ctx, 26); + case 25: return precpred(_ctx, 21); + case 26: return precpred(_ctx, 20); + case 27: return precpred(_ctx, 12); default: break; @@ -15798,8 +17085,9 @@ bool HogQLParser::columnExprSempred(ColumnExprContext *_localctx, size_t predica bool HogQLParser::tableExprSempred(TableExprContext *_localctx, size_t predicateIndex) { switch (predicateIndex) { - case 23: return precpred(_ctx, 4); - case 24: return precpred(_ctx, 3); + case 28: return precpred(_ctx, 5); + case 29: return precpred(_ctx, 4); + case 30: return precpred(_ctx, 3); default: break; diff --git a/common/hogql_parser/HogQLParser.h b/common/hogql_parser/HogQLParser.h index 7bd581de3c65..586a93f59eba 100644 --- a/common/hogql_parser/HogQLParser.h +++ b/common/hogql_parser/HogQLParser.h @@ -16,37 +16,39 @@ class HogQLParser : public antlr4::Parser { ASOF = 8, BETWEEN = 9, BOTH = 10, BY = 11, CASE = 12, CAST = 13, CATCH = 14, COHORT = 15, COLLATE = 16, COLUMNS = 17, CROSS = 18, CUBE = 19, CURRENT = 20, DATE = 21, DAY = 22, DESC = 23, DESCENDING = 24, DISTINCT = 25, ELSE = 26, - END = 27, EXCEPT = 28, EXCLUDE = 29, EXTRACT = 30, FINAL = 31, FINALLY = 32, - FIRST = 33, FN = 34, FOLLOWING = 35, FOR = 36, FROM = 37, FULL = 38, - FUN = 39, GROUP = 40, GROUPING = 41, HAVING = 42, HOUR = 43, ID = 44, - IF = 45, ILIKE = 46, IN = 47, INF = 48, INNER = 49, INTERSECT = 50, - INTERVAL = 51, IS = 52, JOIN = 53, KEY = 54, LAMBDA = 55, LAST = 56, - LEADING = 57, LEFT = 58, LET = 59, LIKE = 60, LIMIT = 61, MATERIALIZED = 62, - MINUTE = 63, MONTH = 64, NAME = 65, NAN_SQL = 66, NOT = 67, NULL_SQL = 68, - NULLS = 69, OFFSET = 70, ON = 71, OR = 72, ORDER = 73, OUTER = 74, OVER = 75, - PARTITION = 76, PRECEDING = 77, PREWHERE = 78, QUALIFY = 79, QUARTER = 80, - RANGE = 81, RECURSIVE = 82, REPLACE = 83, RETURN = 84, RIGHT = 85, ROLLUP = 86, - ROW = 87, ROWS = 88, SAMPLE = 89, SECOND = 90, SELECT = 91, SEMI = 92, - SETS = 93, SETTINGS = 94, SUBSTRING = 95, THEN = 96, THROW = 97, TIES = 98, - TIMESTAMP = 99, TO = 100, TOP = 101, TOTALS = 102, TRAILING = 103, TRIM = 104, - TRUNCATE = 105, TRY = 106, TRY_CAST = 107, UNBOUNDED = 108, UNION = 109, - UNPIVOT = 110, USING = 111, VALUES = 112, WEEK = 113, WHEN = 114, WHERE = 115, - WHILE = 116, WINDOW = 117, WITH = 118, WITHIN = 119, YEAR = 120, ESCAPE_CHAR_COMMON = 121, - IDENTIFIER = 122, FLOATING_LITERAL = 123, OCTAL_LITERAL = 124, DECIMAL_LITERAL = 125, - HEXADECIMAL_LITERAL = 126, STRING_LITERAL = 127, ARROW = 128, ASTERISK = 129, - BACKQUOTE = 130, BACKSLASH = 131, DOUBLECOLON = 132, COLONEQUALS = 133, - COLON = 134, COMMA = 135, CONCAT = 136, DASH = 137, DOLLAR = 138, DOT = 139, - EQ_DOUBLE = 140, EQ_SINGLE = 141, GT_EQ = 142, GT = 143, HASH = 144, - IREGEX_SINGLE = 145, IREGEX_DOUBLE = 146, LBRACE = 147, LBRACKET = 148, - LPAREN = 149, LT_EQ = 150, LT = 151, LT_SLASH = 152, NOT_EQ = 153, NOT_IREGEX = 154, - NOT_REGEX = 155, NULL_PROPERTY = 156, NULLISH = 157, PERCENT = 158, - PLUS = 159, QUERY = 160, QUOTE_DOUBLE = 161, QUOTE_SINGLE_TEMPLATE = 162, - QUOTE_SINGLE_TEMPLATE_FULL = 163, QUOTE_SINGLE = 164, REGEX_SINGLE = 165, - REGEX_DOUBLE = 166, RBRACE = 167, RBRACKET = 168, RPAREN = 169, SEMICOLON = 170, - SLASH = 171, SLASH_GT = 172, UNDERSCORE = 173, MULTI_LINE_COMMENT = 174, - SINGLE_LINE_COMMENT = 175, WHITESPACE = 176, STRING_TEXT = 177, STRING_ESCAPE_TRIGGER = 178, - FULL_STRING_TEXT = 179, FULL_STRING_ESCAPE_TRIGGER = 180, TAG_WS = 181, - TAGC_WS = 182, HOGQLX_TEXT_TEXT = 183, HOGQLX_TEXT_WS = 184 + END = 27, EXCEPT = 28, EXCLUDE = 29, EXTRACT = 30, FINAL = 31, FILTER = 32, + FINALLY = 33, FIRST = 34, FN = 35, FOLLOWING = 36, FOR = 37, FROM = 38, + FULL = 39, FUN = 40, GROUP = 41, GROUPING = 42, HAVING = 43, HOUR = 44, + ID = 45, IF = 46, ILIKE = 47, IGNORE = 48, INCLUDE = 49, IN = 50, INF = 51, + INNER = 52, INTERSECT = 53, INTERVAL = 54, IS = 55, JOIN = 56, KEY = 57, + LAMBDA = 58, LAST = 59, LEADING = 60, LEFT = 61, LET = 62, LIKE = 63, + LIMIT = 64, MATERIALIZED = 65, MINUTE = 66, MONTH = 67, NAME = 68, NATURAL = 69, + NAN_SQL = 70, NOT = 71, NULL_SQL = 72, NULLS = 73, OFFSET = 74, ON = 75, + OR = 76, ORDER = 77, OUTER = 78, OVER = 79, PARTITION = 80, PIVOT = 81, + POSITIONAL = 82, PRECEDING = 83, PREWHERE = 84, QUALIFY = 85, QUARTER = 86, + RANGE = 87, RECURSIVE = 88, REPLACE = 89, RETURN = 90, RIGHT = 91, ROLLUP = 92, + ROW = 93, ROWS = 94, SAMPLE = 95, SECOND = 96, SELECT = 97, SEMI = 98, + SETS = 99, SETTINGS = 100, SUBSTRING = 101, THEN = 102, THROW = 103, + TIES = 104, TIMESTAMP = 105, TO = 106, TOP = 107, TOTALS = 108, TRAILING = 109, + TRIM = 110, TRUNCATE = 111, TRY = 112, TRY_CAST = 113, UNBOUNDED = 114, + UNION = 115, UNPIVOT = 116, USING = 117, VALUES = 118, WEEK = 119, WHEN = 120, + WHERE = 121, WHILE = 122, WINDOW = 123, WITH = 124, WITHIN = 125, YEAR = 126, + ESCAPE_CHAR_COMMON = 127, IDENTIFIER = 128, FLOATING_LITERAL = 129, + OCTAL_LITERAL = 130, DECIMAL_LITERAL = 131, HEXADECIMAL_LITERAL = 132, + STRING_LITERAL = 133, ARROW = 134, ASTERISK = 135, BACKQUOTE = 136, + BACKSLASH = 137, DOUBLECOLON = 138, COLONEQUALS = 139, COLON = 140, + COMMA = 141, CONCAT = 142, DASH = 143, DOLLAR = 144, DOT = 145, EQ_DOUBLE = 146, + EQ_SINGLE = 147, GT_EQ = 148, GT = 149, HASH = 150, IREGEX_SINGLE = 151, + IREGEX_DOUBLE = 152, LBRACE = 153, LBRACKET = 154, LPAREN = 155, LT_EQ = 156, + LT = 157, LT_SLASH = 158, NOT_EQ = 159, NOT_IREGEX = 160, NOT_REGEX = 161, + NULL_PROPERTY = 162, NULLISH = 163, PERCENT = 164, PLUS = 165, QUERY = 166, + QUOTE_DOUBLE = 167, QUOTE_SINGLE_TEMPLATE = 168, QUOTE_SINGLE_TEMPLATE_FULL = 169, + QUOTE_SINGLE = 170, REGEX_SINGLE = 171, REGEX_DOUBLE = 172, RBRACE = 173, + RBRACKET = 174, RPAREN = 175, SEMICOLON = 176, SLASH = 177, SLASH_GT = 178, + UNDERSCORE = 179, MULTI_LINE_COMMENT = 180, SINGLE_LINE_COMMENT = 181, + WHITESPACE = 182, STRING_TEXT = 183, STRING_ESCAPE_TRIGGER = 184, FULL_STRING_TEXT = 185, + FULL_STRING_ESCAPE_TRIGGER = 186, TAG_WS = 187, TAGC_WS = 188, HOGQLX_TEXT_TEXT = 189, + HOGQLX_TEXT_WS = 190 }; enum { @@ -75,14 +77,15 @@ class HogQLParser : public antlr4::Parser { RuleColumnsReplaceItem = 74, RuleHogqlxChildElement = 75, RuleHogqlxText = 76, RuleHogqlxTagElement = 77, RuleHogqlxTagAttribute = 78, RuleWithExprList = 79, RuleWithExpr = 80, RuleWithExprColumnNameList = 81, RuleColumnIdentifier = 82, - RuleNestedIdentifier = 83, RuleTableExpr = 84, RuleUnpivotColumnList = 85, - RuleUnpivotColumn = 86, RuleColumnExprTupleOrSingle = 87, RuleColumnAliases = 88, - RuleTableFunctionExpr = 89, RuleTableIdentifier = 90, RuleTableArgList = 91, - RuleDatabaseIdentifier = 92, RuleFloatingLiteral = 93, RuleNumberLiteral = 94, - RuleLiteral = 95, RuleInterval = 96, RuleKeyword = 97, RuleKeywordForAlias = 98, - RuleAlias = 99, RuleIdentifier = 100, RuleEnumValue = 101, RulePlaceholder = 102, - RuleString = 103, RuleTemplateString = 104, RuleStringContents = 105, - RuleFullTemplateString = 106, RuleStringContentsFull = 107 + RuleNestedIdentifier = 83, RuleTableExpr = 84, RulePivotColumnList = 85, + RulePivotColumn = 86, RuleUnpivotColumnList = 87, RuleUnpivotColumn = 88, + RuleColumnExprTupleOrSingle = 89, RuleColumnAliases = 90, RuleTableFunctionExpr = 91, + RuleTableIdentifier = 92, RuleTableArgList = 93, RuleDatabaseIdentifier = 94, + RuleFloatingLiteral = 95, RuleNumberLiteral = 96, RuleLiteral = 97, + RuleInterval = 98, RuleKeyword = 99, RuleKeywordForAlias = 100, RuleAlias = 101, + RuleIdentifier = 102, RuleEnumValue = 103, RulePlaceholder = 104, RuleString = 105, + RuleTemplateString = 106, RuleStringContents = 107, RuleFullTemplateString = 108, + RuleStringContentsFull = 109 }; explicit HogQLParser(antlr4::TokenStream *input); @@ -187,6 +190,8 @@ class HogQLParser : public antlr4::Parser { class ColumnIdentifierContext; class NestedIdentifierContext; class TableExprContext; + class PivotColumnListContext; + class PivotColumnContext; class UnpivotColumnListContext; class UnpivotColumnContext; class ColumnExprTupleOrSingleContext; @@ -602,6 +607,7 @@ class HogQLParser : public antlr4::Parser { SelectStmtWithParensContext(antlr4::ParserRuleContext *parent, size_t invokingState); virtual size_t getRuleIndex() const override; SelectStmtContext *selectStmt(); + WithClauseContext *withClause(); antlr4::tree::TerminalNode *LPAREN(); SelectSetStmtContext *selectSetStmt(); antlr4::tree::TerminalNode *RPAREN(); @@ -641,6 +647,7 @@ class HogQLParser : public antlr4::Parser { SelectStmtWithParensContext *selectStmtWithParens(); std::vector subsequentSelectSetClause(); SubsequentSelectSetClauseContext* subsequentSelectSetClause(size_t i); + OrderByClauseContext *orderByClause(); LimitAndOffsetClauseOptionalContext *limitAndOffsetClauseOptional(); @@ -834,6 +841,7 @@ class HogQLParser : public antlr4::Parser { virtual size_t getRuleIndex() const override; antlr4::tree::TerminalNode *GROUP(); antlr4::tree::TerminalNode *BY(); + antlr4::tree::TerminalNode *ALL(); antlr4::tree::TerminalNode *LPAREN(); ColumnExprListContext *columnExprList(); antlr4::tree::TerminalNode *RPAREN(); @@ -1051,6 +1059,19 @@ class HogQLParser : public antlr4::Parser { }; + class JoinExprPositionalContext : public JoinExprContext { + public: + JoinExprPositionalContext(JoinExprContext *ctx); + + std::vector joinExpr(); + JoinExprContext* joinExpr(size_t i); + antlr4::tree::TerminalNode *POSITIONAL(); + antlr4::tree::TerminalNode *JOIN(); + JoinConstraintClauseContext *joinConstraintClause(); + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + class JoinExprOpContext : public JoinExprContext { public: JoinExprOpContext(JoinExprContext *ctx); @@ -1058,8 +1079,9 @@ class HogQLParser : public antlr4::Parser { std::vector joinExpr(); JoinExprContext* joinExpr(size_t i); antlr4::tree::TerminalNode *JOIN(); - JoinConstraintClauseContext *joinConstraintClause(); + antlr4::tree::TerminalNode *NATURAL(); JoinOpContext *joinOp(); + JoinConstraintClauseContext *joinConstraintClause(); virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1075,6 +1097,21 @@ class HogQLParser : public antlr4::Parser { virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; + class JoinExprUnpivotContext : public JoinExprContext { + public: + JoinExprUnpivotContext(JoinExprContext *ctx); + + JoinExprContext *joinExpr(); + antlr4::tree::TerminalNode *UNPIVOT(); + antlr4::tree::TerminalNode *LPAREN(); + UnpivotColumnListContext *unpivotColumnList(); + antlr4::tree::TerminalNode *RPAREN(); + antlr4::tree::TerminalNode *INCLUDE(); + antlr4::tree::TerminalNode *NULLS(); + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + class JoinExprParensContext : public JoinExprContext { public: JoinExprParensContext(JoinExprContext *ctx); @@ -1097,6 +1134,23 @@ class HogQLParser : public antlr4::Parser { virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; + class JoinExprPivotContext : public JoinExprContext { + public: + JoinExprPivotContext(JoinExprContext *ctx); + + JoinExprContext *joinExpr(); + antlr4::tree::TerminalNode *PIVOT(); + antlr4::tree::TerminalNode *LPAREN(); + std::vector columnExprList(); + ColumnExprListContext* columnExprList(size_t i); + PivotColumnListContext *pivotColumnList(); + antlr4::tree::TerminalNode *RPAREN(); + antlr4::tree::TerminalNode *GROUP(); + antlr4::tree::TerminalNode *BY(); + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + JoinExprContext* joinExpr(); JoinExprContext* joinExpr(int precedence); class JoinOpContext : public antlr4::ParserRuleContext { @@ -1120,6 +1174,7 @@ class HogQLParser : public antlr4::Parser { antlr4::tree::TerminalNode *OUTER(); antlr4::tree::TerminalNode *ALL(); antlr4::tree::TerminalNode *ANY(); + antlr4::tree::TerminalNode *ASOF(); virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1131,9 +1186,9 @@ class HogQLParser : public antlr4::Parser { antlr4::tree::TerminalNode *INNER(); antlr4::tree::TerminalNode *ANTI(); antlr4::tree::TerminalNode *SEMI(); + antlr4::tree::TerminalNode *ASOF(); antlr4::tree::TerminalNode *ALL(); antlr4::tree::TerminalNode *ANY(); - antlr4::tree::TerminalNode *ASOF(); virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1142,14 +1197,14 @@ class HogQLParser : public antlr4::Parser { public: JoinOpLeftRightContext(JoinOpContext *ctx); + antlr4::tree::TerminalNode *ASOF(); antlr4::tree::TerminalNode *LEFT(); antlr4::tree::TerminalNode *RIGHT(); - antlr4::tree::TerminalNode *OUTER(); + antlr4::tree::TerminalNode *ANTI(); antlr4::tree::TerminalNode *SEMI(); + antlr4::tree::TerminalNode *OUTER(); antlr4::tree::TerminalNode *ALL(); - antlr4::tree::TerminalNode *ANTI(); antlr4::tree::TerminalNode *ANY(); - antlr4::tree::TerminalNode *ASOF(); virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1494,6 +1549,18 @@ class HogQLParser : public antlr4::Parser { virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; + class ColumnTypeExprArrayContext : public ColumnTypeExprContext { + public: + ColumnTypeExprArrayContext(ColumnTypeExprContext *ctx); + + ColumnTypeExprContext *columnTypeExpr(); + antlr4::tree::TerminalNode *LBRACKET(); + antlr4::tree::TerminalNode *RBRACKET(); + antlr4::tree::TerminalNode *DECIMAL_LITERAL(); + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + class ColumnTypeExprComplexContext : public ColumnTypeExprContext { public: ColumnTypeExprComplexContext(ColumnTypeExprContext *ctx); @@ -1544,7 +1611,7 @@ class HogQLParser : public antlr4::Parser { }; ColumnTypeExprContext* columnTypeExpr(); - + ColumnTypeExprContext* columnTypeExpr(int precedence); class ColumnTypeCastExprContext : public antlr4::ParserRuleContext { public: ColumnTypeCastExprContext(antlr4::ParserRuleContext *parent, size_t invokingState); @@ -1720,6 +1787,7 @@ class HogQLParser : public antlr4::Parser { antlr4::tree::TerminalNode *LBRACKET(); antlr4::tree::TerminalNode *RBRACKET(); + antlr4::tree::TerminalNode *ARRAY(); ColumnExprListContext *columnExprList(); virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; @@ -1828,6 +1896,7 @@ class HogQLParser : public antlr4::Parser { HogQLParser::ColumnExprListContext *columnExprs = nullptr; HogQLParser::ColumnExprListContext *columnArgList = nullptr; + HogQLParser::ColumnExprContext *filterExpr = nullptr; std::vector identifier(); IdentifierContext* identifier(size_t i); antlr4::tree::TerminalNode *OVER(); @@ -1835,6 +1904,9 @@ class HogQLParser : public antlr4::Parser { antlr4::tree::TerminalNode* LPAREN(size_t i); std::vector RPAREN(); antlr4::tree::TerminalNode* RPAREN(size_t i); + antlr4::tree::TerminalNode *FILTER(); + antlr4::tree::TerminalNode *WHERE(); + ColumnExprContext *columnExpr(); std::vector columnExprList(); ColumnExprListContext* columnExprList(size_t i); antlr4::tree::TerminalNode *DISTINCT(); @@ -1952,6 +2024,24 @@ class HogQLParser : public antlr4::Parser { virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; + class ColumnExprColumnsQualifiedExcludeContext : public ColumnExprContext { + public: + ColumnExprColumnsQualifiedExcludeContext(ColumnExprContext *ctx); + + antlr4::tree::TerminalNode *COLUMNS(); + std::vector LPAREN(); + antlr4::tree::TerminalNode* LPAREN(size_t i); + IdentifierContext *identifier(); + antlr4::tree::TerminalNode *DOT(); + antlr4::tree::TerminalNode *ASTERISK(); + antlr4::tree::TerminalNode *EXCLUDE(); + IdentifierListContext *identifierList(); + std::vector RPAREN(); + antlr4::tree::TerminalNode* RPAREN(size_t i); + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + class ColumnExprNotContext : public ColumnExprContext { public: ColumnExprNotContext(ColumnExprContext *ctx); @@ -1968,14 +2058,21 @@ class HogQLParser : public antlr4::Parser { HogQLParser::ColumnExprListContext *columnExprs = nullptr; HogQLParser::ColumnExprListContext *columnArgList = nullptr; + HogQLParser::ColumnExprContext *filterExpr = nullptr; IdentifierContext *identifier(); std::vector LPAREN(); antlr4::tree::TerminalNode* LPAREN(size_t i); std::vector RPAREN(); antlr4::tree::TerminalNode* RPAREN(size_t i); antlr4::tree::TerminalNode *DISTINCT(); + antlr4::tree::TerminalNode *ORDER(); + antlr4::tree::TerminalNode *BY(); + OrderExprListContext *orderExprList(); + antlr4::tree::TerminalNode *FILTER(); + antlr4::tree::TerminalNode *WHERE(); std::vector columnExprList(); ColumnExprListContext* columnExprList(size_t i); + ColumnExprContext *columnExpr(); virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -2044,6 +2141,24 @@ class HogQLParser : public antlr4::Parser { virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; + class ColumnExprColumnsQualifiedReplaceContext : public ColumnExprContext { + public: + ColumnExprColumnsQualifiedReplaceContext(ColumnExprContext *ctx); + + antlr4::tree::TerminalNode *COLUMNS(); + std::vector LPAREN(); + antlr4::tree::TerminalNode* LPAREN(size_t i); + IdentifierContext *identifier(); + antlr4::tree::TerminalNode *DOT(); + antlr4::tree::TerminalNode *ASTERISK(); + antlr4::tree::TerminalNode *REPLACE(); + ColumnsReplaceListContext *columnsReplaceList(); + std::vector RPAREN(); + antlr4::tree::TerminalNode* RPAREN(size_t i); + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + class ColumnExprNullTupleAccessContext : public ColumnExprContext { public: ColumnExprNullTupleAccessContext(ColumnExprContext *ctx); @@ -2147,6 +2262,26 @@ class HogQLParser : public antlr4::Parser { virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; + class ColumnExprColumnsQualifiedExcludeReplaceContext : public ColumnExprContext { + public: + ColumnExprColumnsQualifiedExcludeReplaceContext(ColumnExprContext *ctx); + + antlr4::tree::TerminalNode *COLUMNS(); + std::vector LPAREN(); + antlr4::tree::TerminalNode* LPAREN(size_t i); + IdentifierContext *identifier(); + antlr4::tree::TerminalNode *DOT(); + antlr4::tree::TerminalNode *ASTERISK(); + antlr4::tree::TerminalNode *EXCLUDE(); + IdentifierListContext *identifierList(); + std::vector RPAREN(); + antlr4::tree::TerminalNode* RPAREN(size_t i); + antlr4::tree::TerminalNode *REPLACE(); + ColumnsReplaceListContext *columnsReplaceList(); + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + class ColumnExprColumnsExcludeContext : public ColumnExprContext { public: ColumnExprColumnsExcludeContext(ColumnExprContext *ctx); @@ -2190,6 +2325,20 @@ class HogQLParser : public antlr4::Parser { virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; + class ColumnExprColumnsQualifiedAllContext : public ColumnExprContext { + public: + ColumnExprColumnsQualifiedAllContext(ColumnExprContext *ctx); + + antlr4::tree::TerminalNode *COLUMNS(); + antlr4::tree::TerminalNode *LPAREN(); + IdentifierContext *identifier(); + antlr4::tree::TerminalNode *DOT(); + antlr4::tree::TerminalNode *ASTERISK(); + antlr4::tree::TerminalNode *RPAREN(); + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + class ColumnExprTrimContext : public ColumnExprContext { public: ColumnExprTrimContext(ColumnExprContext *ctx); @@ -2306,6 +2455,17 @@ class HogQLParser : public antlr4::Parser { virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; + class ColumnExprIgnoreNullsContext : public ColumnExprContext { + public: + ColumnExprIgnoreNullsContext(ColumnExprContext *ctx); + + ColumnExprContext *columnExpr(); + antlr4::tree::TerminalNode *IGNORE(); + antlr4::tree::TerminalNode *NULLS(); + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + class ColumnExprNullishContext : public ColumnExprContext { public: ColumnExprNullishContext(ColumnExprContext *ctx); @@ -2365,6 +2525,7 @@ class HogQLParser : public antlr4::Parser { HogQLParser::ColumnExprListContext *columnExprs = nullptr; HogQLParser::ColumnExprListContext *columnArgList = nullptr; + HogQLParser::ColumnExprContext *filterExpr = nullptr; IdentifierContext *identifier(); antlr4::tree::TerminalNode *OVER(); std::vector LPAREN(); @@ -2372,6 +2533,9 @@ class HogQLParser : public antlr4::Parser { WindowExprContext *windowExpr(); std::vector RPAREN(); antlr4::tree::TerminalNode* RPAREN(size_t i); + antlr4::tree::TerminalNode *FILTER(); + antlr4::tree::TerminalNode *WHERE(); + ColumnExprContext *columnExpr(); std::vector columnExprList(); ColumnExprListContext* columnExprList(size_t i); antlr4::tree::TerminalNode *DISTINCT(); @@ -2748,6 +2912,23 @@ class HogQLParser : public antlr4::Parser { virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; + class TableExprPivotContext : public TableExprContext { + public: + TableExprPivotContext(TableExprContext *ctx); + + TableExprContext *tableExpr(); + antlr4::tree::TerminalNode *PIVOT(); + antlr4::tree::TerminalNode *LPAREN(); + std::vector columnExprList(); + ColumnExprListContext* columnExprList(size_t i); + PivotColumnListContext *pivotColumnList(); + antlr4::tree::TerminalNode *RPAREN(); + antlr4::tree::TerminalNode *GROUP(); + antlr4::tree::TerminalNode *BY(); + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + class TableExprValuesContext : public TableExprContext { public: TableExprValuesContext(TableExprContext *ctx); @@ -2790,12 +2971,46 @@ class HogQLParser : public antlr4::Parser { antlr4::tree::TerminalNode *LPAREN(); UnpivotColumnListContext *unpivotColumnList(); antlr4::tree::TerminalNode *RPAREN(); + antlr4::tree::TerminalNode *INCLUDE(); + antlr4::tree::TerminalNode *NULLS(); virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; TableExprContext* tableExpr(); TableExprContext* tableExpr(int precedence); + class PivotColumnListContext : public antlr4::ParserRuleContext { + public: + PivotColumnListContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *FOR(); + std::vector pivotColumn(); + PivotColumnContext* pivotColumn(size_t i); + + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + PivotColumnListContext* pivotColumnList(); + + class PivotColumnContext : public antlr4::ParserRuleContext { + public: + PivotColumnContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + ColumnExprTupleOrSingleContext *columnExprTupleOrSingle(); + antlr4::tree::TerminalNode *IN(); + antlr4::tree::TerminalNode *LPAREN(); + ColumnExprListContext *columnExprList(); + antlr4::tree::TerminalNode *RPAREN(); + + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + PivotColumnContext* pivotColumn(); + class UnpivotColumnListContext : public antlr4::ParserRuleContext { public: UnpivotColumnListContext(antlr4::ParserRuleContext *parent, size_t invokingState); @@ -2819,10 +3034,14 @@ class HogQLParser : public antlr4::Parser { std::vector columnExprTupleOrSingle(); ColumnExprTupleOrSingleContext* columnExprTupleOrSingle(size_t i); antlr4::tree::TerminalNode *FOR(); - antlr4::tree::TerminalNode *IN(); - antlr4::tree::TerminalNode *LPAREN(); - ColumnExprListContext *columnExprList(); - antlr4::tree::TerminalNode *RPAREN(); + std::vector IN(); + antlr4::tree::TerminalNode* IN(size_t i); + std::vector LPAREN(); + antlr4::tree::TerminalNode* LPAREN(size_t i); + std::vector columnExprList(); + ColumnExprListContext* columnExprList(size_t i); + std::vector RPAREN(); + antlr4::tree::TerminalNode* RPAREN(size_t i); virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; @@ -3028,6 +3247,7 @@ class HogQLParser : public antlr4::Parser { antlr4::tree::TerminalNode *END(); antlr4::tree::TerminalNode *EXCLUDE(); antlr4::tree::TerminalNode *EXTRACT(); + antlr4::tree::TerminalNode *FILTER(); antlr4::tree::TerminalNode *FINAL(); antlr4::tree::TerminalNode *FIRST(); antlr4::tree::TerminalNode *FOR(); @@ -3040,7 +3260,9 @@ class HogQLParser : public antlr4::Parser { antlr4::tree::TerminalNode *IS(); antlr4::tree::TerminalNode *GROUPING(); antlr4::tree::TerminalNode *IF(); + antlr4::tree::TerminalNode *IGNORE(); antlr4::tree::TerminalNode *ILIKE(); + antlr4::tree::TerminalNode *INCLUDE(); antlr4::tree::TerminalNode *IN(); antlr4::tree::TerminalNode *INNER(); antlr4::tree::TerminalNode *INTERVAL(); @@ -3053,6 +3275,7 @@ class HogQLParser : public antlr4::Parser { antlr4::tree::TerminalNode *LIKE(); antlr4::tree::TerminalNode *LIMIT(); antlr4::tree::TerminalNode *NAME(); + antlr4::tree::TerminalNode *NATURAL(); antlr4::tree::TerminalNode *NOT(); antlr4::tree::TerminalNode *NULLS(); antlr4::tree::TerminalNode *OFFSET(); @@ -3062,6 +3285,8 @@ class HogQLParser : public antlr4::Parser { antlr4::tree::TerminalNode *OUTER(); antlr4::tree::TerminalNode *OVER(); antlr4::tree::TerminalNode *PARTITION(); + antlr4::tree::TerminalNode *PIVOT(); + antlr4::tree::TerminalNode *POSITIONAL(); antlr4::tree::TerminalNode *PRECEDING(); antlr4::tree::TerminalNode *PREWHERE(); antlr4::tree::TerminalNode *QUALIFY(); @@ -3263,6 +3488,7 @@ class HogQLParser : public antlr4::Parser { bool sempred(antlr4::RuleContext *_localctx, size_t ruleIndex, size_t predicateIndex) override; bool joinExprSempred(JoinExprContext *_localctx, size_t predicateIndex); + bool columnTypeExprSempred(ColumnTypeExprContext *_localctx, size_t predicateIndex); bool columnExprSempred(ColumnExprContext *_localctx, size_t predicateIndex); bool tableExprSempred(TableExprContext *_localctx, size_t predicateIndex); diff --git a/common/hogql_parser/HogQLParser.interp b/common/hogql_parser/HogQLParser.interp index a1cfc00df4af..e0841fd0f375 100644 --- a/common/hogql_parser/HogQLParser.interp +++ b/common/hogql_parser/HogQLParser.interp @@ -127,6 +127,12 @@ null null null null +null +null +null +null +null +null '->' '*' '`' @@ -218,6 +224,7 @@ EXCEPT EXCLUDE EXTRACT FINAL +FILTER FINALLY FIRST FN @@ -233,6 +240,8 @@ HOUR ID IF ILIKE +IGNORE +INCLUDE IN INF INNER @@ -252,6 +261,7 @@ MATERIALIZED MINUTE MONTH NAME +NATURAL NAN_SQL NOT NULL_SQL @@ -263,6 +273,8 @@ ORDER OUTER OVER PARTITION +PIVOT +POSITIONAL PRECEDING PREWHERE QUALIFY @@ -458,6 +470,8 @@ withExprColumnNameList columnIdentifier nestedIdentifier tableExpr +pivotColumnList +pivotColumn unpivotColumnList unpivotColumn columnExprTupleOrSingle @@ -484,4 +498,4 @@ stringContentsFull atn: -[4, 1, 184, 1806, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 1, 0, 5, 0, 218, 8, 0, 10, 0, 12, 0, 221, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 227, 8, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 235, 8, 3, 1, 4, 1, 4, 1, 4, 5, 4, 240, 8, 4, 10, 4, 12, 4, 243, 9, 4, 1, 4, 3, 4, 246, 8, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 260, 8, 5, 1, 6, 1, 6, 3, 6, 264, 8, 6, 1, 6, 3, 6, 267, 8, 6, 1, 7, 1, 7, 3, 7, 271, 8, 7, 1, 7, 3, 7, 274, 8, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 281, 8, 8, 1, 8, 1, 8, 3, 8, 285, 8, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 5, 9, 292, 8, 9, 10, 9, 12, 9, 295, 9, 9, 1, 9, 1, 9, 3, 9, 299, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 308, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 316, 8, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 323, 8, 12, 1, 12, 1, 12, 3, 12, 327, 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 333, 8, 12, 1, 12, 1, 12, 1, 12, 3, 12, 338, 8, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 346, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 353, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 359, 8, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 3, 16, 370, 8, 16, 1, 17, 1, 17, 1, 18, 1, 18, 5, 18, 376, 8, 18, 10, 18, 12, 18, 379, 9, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 5, 20, 390, 8, 20, 10, 20, 12, 20, 393, 9, 20, 1, 20, 3, 20, 396, 8, 20, 1, 21, 1, 21, 1, 21, 3, 21, 401, 8, 21, 1, 21, 3, 21, 404, 8, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 414, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 420, 8, 23, 1, 23, 1, 23, 1, 23, 3, 23, 425, 8, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 431, 8, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 437, 8, 23, 1, 23, 1, 23, 1, 23, 3, 23, 442, 8, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 448, 8, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 454, 8, 23, 1, 23, 1, 23, 1, 23, 3, 23, 459, 8, 23, 3, 23, 461, 8, 23, 1, 23, 1, 23, 1, 24, 1, 24, 5, 24, 467, 8, 24, 10, 24, 12, 24, 470, 9, 24, 1, 24, 3, 24, 473, 8, 24, 1, 25, 1, 25, 1, 25, 3, 25, 478, 8, 25, 1, 25, 1, 25, 3, 25, 482, 8, 25, 1, 25, 1, 25, 3, 25, 486, 8, 25, 1, 25, 1, 25, 1, 25, 3, 25, 491, 8, 25, 1, 25, 1, 25, 3, 25, 495, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 502, 8, 25, 1, 26, 3, 26, 505, 8, 26, 1, 26, 1, 26, 3, 26, 509, 8, 26, 1, 26, 3, 26, 512, 8, 26, 1, 26, 1, 26, 3, 26, 516, 8, 26, 1, 26, 3, 26, 519, 8, 26, 1, 26, 3, 26, 522, 8, 26, 1, 26, 3, 26, 525, 8, 26, 1, 26, 3, 26, 528, 8, 26, 1, 26, 3, 26, 531, 8, 26, 1, 26, 3, 26, 534, 8, 26, 1, 26, 1, 26, 3, 26, 538, 8, 26, 1, 26, 1, 26, 3, 26, 542, 8, 26, 1, 26, 3, 26, 545, 8, 26, 1, 26, 3, 26, 548, 8, 26, 1, 26, 1, 26, 3, 26, 552, 8, 26, 1, 26, 3, 26, 555, 8, 26, 1, 26, 3, 26, 558, 8, 26, 1, 26, 3, 26, 561, 8, 26, 1, 26, 1, 26, 3, 26, 565, 8, 26, 1, 26, 3, 26, 568, 8, 26, 1, 27, 1, 27, 3, 27, 572, 8, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 580, 8, 28, 1, 29, 1, 29, 1, 29, 1, 30, 3, 30, 586, 8, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 5, 31, 605, 8, 31, 10, 31, 12, 31, 608, 9, 31, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 630, 8, 34, 1, 35, 1, 35, 1, 35, 5, 35, 635, 8, 35, 10, 35, 12, 35, 638, 9, 35, 1, 36, 1, 36, 3, 36, 642, 8, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 3, 42, 668, 8, 42, 1, 42, 1, 42, 3, 42, 672, 8, 42, 1, 42, 1, 42, 3, 42, 676, 8, 42, 1, 42, 1, 42, 1, 42, 3, 42, 681, 8, 42, 1, 42, 1, 42, 3, 42, 685, 8, 42, 1, 42, 1, 42, 1, 42, 3, 42, 690, 8, 42, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 5, 45, 702, 8, 45, 10, 45, 12, 45, 705, 9, 45, 1, 46, 1, 46, 1, 46, 1, 46, 5, 46, 711, 8, 46, 10, 46, 12, 46, 714, 9, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 3, 47, 721, 8, 47, 1, 47, 3, 47, 724, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 730, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 738, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 5, 47, 744, 8, 47, 10, 47, 12, 47, 747, 9, 47, 1, 48, 3, 48, 750, 8, 48, 1, 48, 1, 48, 1, 48, 3, 48, 755, 8, 48, 1, 48, 1, 48, 1, 48, 3, 48, 760, 8, 48, 1, 48, 3, 48, 763, 8, 48, 1, 48, 1, 48, 3, 48, 767, 8, 48, 1, 48, 1, 48, 3, 48, 771, 8, 48, 1, 48, 3, 48, 774, 8, 48, 3, 48, 776, 8, 48, 1, 48, 3, 48, 779, 8, 48, 1, 48, 1, 48, 3, 48, 783, 8, 48, 1, 48, 1, 48, 3, 48, 787, 8, 48, 1, 48, 3, 48, 790, 8, 48, 3, 48, 792, 8, 48, 3, 48, 794, 8, 48, 1, 49, 1, 49, 1, 49, 3, 49, 799, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 810, 8, 50, 1, 51, 1, 51, 1, 51, 3, 51, 815, 8, 51, 1, 51, 1, 51, 3, 51, 819, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 825, 8, 51, 1, 52, 1, 52, 1, 52, 3, 52, 830, 8, 52, 1, 53, 1, 53, 1, 53, 5, 53, 835, 8, 53, 10, 53, 12, 53, 838, 9, 53, 1, 54, 1, 54, 3, 54, 842, 8, 54, 1, 54, 1, 54, 3, 54, 846, 8, 54, 1, 54, 1, 54, 3, 54, 850, 8, 54, 1, 55, 1, 55, 1, 55, 1, 55, 3, 55, 856, 8, 55, 3, 55, 858, 8, 55, 1, 56, 1, 56, 1, 56, 5, 56, 863, 8, 56, 10, 56, 12, 56, 866, 9, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 3, 58, 873, 8, 58, 1, 58, 3, 58, 876, 8, 58, 1, 58, 3, 58, 879, 8, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 904, 8, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 3, 64, 918, 8, 64, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 5, 66, 931, 8, 66, 10, 66, 12, 66, 934, 9, 66, 1, 66, 3, 66, 937, 8, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 5, 66, 946, 8, 66, 10, 66, 12, 66, 949, 9, 66, 1, 66, 3, 66, 952, 8, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 5, 66, 961, 8, 66, 10, 66, 12, 66, 964, 9, 66, 1, 66, 3, 66, 967, 8, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 974, 8, 66, 1, 66, 1, 66, 1, 66, 1, 66, 4, 66, 980, 8, 66, 11, 66, 12, 66, 981, 1, 66, 3, 66, 985, 8, 66, 1, 67, 1, 67, 4, 67, 989, 8, 67, 11, 67, 12, 67, 990, 1, 67, 3, 67, 994, 8, 67, 1, 68, 1, 68, 1, 68, 5, 68, 999, 8, 68, 10, 68, 12, 68, 1002, 9, 68, 1, 68, 3, 68, 1005, 8, 68, 1, 69, 1, 69, 1, 69, 5, 69, 1010, 8, 69, 10, 69, 12, 69, 1013, 9, 69, 1, 69, 3, 69, 1016, 8, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 3, 70, 1023, 8, 70, 1, 71, 1, 71, 1, 71, 3, 71, 1028, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 4, 71, 1035, 8, 71, 11, 71, 12, 71, 1036, 1, 71, 1, 71, 3, 71, 1041, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1074, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1122, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1150, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1170, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1176, 8, 71, 1, 71, 3, 71, 1179, 8, 71, 1, 71, 3, 71, 1182, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1192, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1198, 8, 71, 1, 71, 3, 71, 1201, 8, 71, 1, 71, 3, 71, 1204, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1212, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1220, 8, 71, 1, 71, 3, 71, 1223, 8, 71, 1, 71, 1, 71, 3, 71, 1227, 8, 71, 1, 71, 3, 71, 1230, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1244, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1252, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 5, 71, 1258, 8, 71, 10, 71, 12, 71, 1261, 9, 71, 1, 71, 3, 71, 1264, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1283, 8, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1288, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1299, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1305, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1312, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1324, 8, 71, 1, 71, 1, 71, 3, 71, 1328, 8, 71, 1, 71, 3, 71, 1331, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1340, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1346, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1362, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1383, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1394, 8, 71, 1, 71, 1, 71, 3, 71, 1398, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1425, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1433, 8, 71, 5, 71, 1435, 8, 71, 10, 71, 12, 71, 1438, 9, 71, 1, 72, 1, 72, 1, 72, 1, 72, 5, 72, 1444, 8, 72, 10, 72, 12, 72, 1447, 9, 72, 1, 72, 3, 72, 1450, 8, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 5, 72, 1457, 8, 72, 10, 72, 12, 72, 1460, 9, 72, 1, 72, 3, 72, 1463, 8, 72, 1, 72, 1, 72, 3, 72, 1467, 8, 72, 1, 72, 1, 72, 1, 72, 3, 72, 1472, 8, 72, 1, 72, 1, 72, 1, 72, 1, 72, 5, 72, 1478, 8, 72, 10, 72, 12, 72, 1481, 9, 72, 1, 72, 3, 72, 1484, 8, 72, 1, 72, 1, 72, 1, 72, 3, 72, 1489, 8, 72, 1, 73, 1, 73, 1, 73, 5, 73, 1494, 8, 73, 10, 73, 12, 73, 1497, 9, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 3, 75, 1509, 8, 75, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 5, 77, 1516, 8, 77, 10, 77, 12, 77, 1519, 9, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 5, 77, 1526, 8, 77, 10, 77, 12, 77, 1529, 9, 77, 1, 77, 1, 77, 5, 77, 1533, 8, 77, 10, 77, 12, 77, 1536, 9, 77, 1, 77, 1, 77, 1, 77, 1, 77, 3, 77, 1542, 8, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1555, 8, 78, 1, 79, 1, 79, 1, 79, 5, 79, 1560, 8, 79, 10, 79, 12, 79, 1563, 9, 79, 1, 79, 3, 79, 1566, 8, 79, 1, 80, 1, 80, 3, 80, 1570, 8, 80, 1, 80, 1, 80, 1, 80, 3, 80, 1575, 8, 80, 1, 80, 1, 80, 3, 80, 1579, 8, 80, 1, 80, 3, 80, 1582, 8, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 3, 80, 1592, 8, 80, 1, 81, 1, 81, 1, 81, 1, 81, 5, 81, 1598, 8, 81, 10, 81, 12, 81, 1601, 9, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 3, 82, 1609, 8, 82, 1, 82, 3, 82, 1612, 8, 82, 1, 83, 1, 83, 1, 83, 5, 83, 1617, 8, 83, 10, 83, 12, 83, 1620, 9, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 3, 84, 1635, 8, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 3, 84, 1647, 8, 84, 1, 84, 3, 84, 1650, 8, 84, 5, 84, 1652, 8, 84, 10, 84, 12, 84, 1655, 9, 84, 1, 85, 1, 85, 1, 85, 5, 85, 1660, 8, 85, 10, 85, 12, 85, 1663, 9, 85, 1, 85, 3, 85, 1666, 8, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 3, 87, 1681, 8, 87, 1, 88, 1, 88, 1, 88, 1, 88, 5, 88, 1687, 8, 88, 10, 88, 12, 88, 1690, 9, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 3, 89, 1697, 8, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 3, 90, 1704, 8, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 5, 91, 1711, 8, 91, 10, 91, 12, 91, 1714, 9, 91, 1, 91, 3, 91, 1717, 8, 91, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 3, 93, 1727, 8, 93, 3, 93, 1729, 8, 93, 1, 94, 3, 94, 1732, 8, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 3, 94, 1740, 8, 94, 1, 95, 1, 95, 1, 95, 3, 95, 1745, 8, 95, 1, 96, 1, 96, 1, 97, 1, 97, 1, 98, 1, 98, 1, 99, 1, 99, 3, 99, 1755, 8, 99, 1, 100, 1, 100, 1, 100, 3, 100, 1760, 8, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 3, 103, 1772, 8, 103, 1, 104, 1, 104, 5, 104, 1776, 8, 104, 10, 104, 12, 104, 1779, 9, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 3, 105, 1788, 8, 105, 1, 106, 1, 106, 5, 106, 1792, 8, 106, 10, 106, 12, 106, 1795, 9, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 3, 107, 1804, 8, 107, 1, 107, 0, 3, 94, 142, 168, 108, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 0, 18, 2, 0, 34, 34, 39, 39, 2, 0, 19, 19, 86, 86, 2, 0, 49, 49, 58, 58, 3, 0, 1, 1, 4, 4, 8, 8, 4, 0, 1, 1, 3, 4, 8, 8, 92, 92, 2, 0, 58, 58, 85, 85, 2, 0, 1, 1, 4, 4, 2, 0, 70, 70, 135, 135, 2, 0, 7, 7, 23, 24, 2, 0, 33, 33, 56, 56, 2, 0, 81, 81, 88, 88, 3, 0, 10, 10, 57, 57, 103, 103, 2, 0, 46, 46, 60, 60, 1, 0, 124, 125, 2, 0, 137, 137, 159, 159, 7, 0, 22, 22, 43, 43, 63, 64, 80, 80, 90, 90, 113, 113, 120, 120, 20, 0, 1, 13, 15, 21, 23, 27, 29, 31, 33, 33, 35, 38, 40, 42, 44, 47, 49, 49, 51, 58, 60, 61, 65, 65, 67, 67, 69, 79, 81, 89, 91, 96, 98, 105, 107, 112, 114, 115, 117, 118, 4, 0, 21, 21, 33, 33, 44, 44, 54, 54, 2046, 0, 219, 1, 0, 0, 0, 2, 226, 1, 0, 0, 0, 4, 228, 1, 0, 0, 0, 6, 230, 1, 0, 0, 0, 8, 236, 1, 0, 0, 0, 10, 259, 1, 0, 0, 0, 12, 261, 1, 0, 0, 0, 14, 268, 1, 0, 0, 0, 16, 275, 1, 0, 0, 0, 18, 288, 1, 0, 0, 0, 20, 300, 1, 0, 0, 0, 22, 309, 1, 0, 0, 0, 24, 317, 1, 0, 0, 0, 26, 339, 1, 0, 0, 0, 28, 354, 1, 0, 0, 0, 30, 363, 1, 0, 0, 0, 32, 367, 1, 0, 0, 0, 34, 371, 1, 0, 0, 0, 36, 373, 1, 0, 0, 0, 38, 382, 1, 0, 0, 0, 40, 386, 1, 0, 0, 0, 42, 400, 1, 0, 0, 0, 44, 413, 1, 0, 0, 0, 46, 460, 1, 0, 0, 0, 48, 464, 1, 0, 0, 0, 50, 501, 1, 0, 0, 0, 52, 504, 1, 0, 0, 0, 54, 569, 1, 0, 0, 0, 56, 575, 1, 0, 0, 0, 58, 581, 1, 0, 0, 0, 60, 585, 1, 0, 0, 0, 62, 591, 1, 0, 0, 0, 64, 609, 1, 0, 0, 0, 66, 612, 1, 0, 0, 0, 68, 615, 1, 0, 0, 0, 70, 631, 1, 0, 0, 0, 72, 639, 1, 0, 0, 0, 74, 645, 1, 0, 0, 0, 76, 648, 1, 0, 0, 0, 78, 651, 1, 0, 0, 0, 80, 655, 1, 0, 0, 0, 82, 659, 1, 0, 0, 0, 84, 689, 1, 0, 0, 0, 86, 691, 1, 0, 0, 0, 88, 694, 1, 0, 0, 0, 90, 697, 1, 0, 0, 0, 92, 706, 1, 0, 0, 0, 94, 729, 1, 0, 0, 0, 96, 793, 1, 0, 0, 0, 98, 798, 1, 0, 0, 0, 100, 809, 1, 0, 0, 0, 102, 811, 1, 0, 0, 0, 104, 826, 1, 0, 0, 0, 106, 831, 1, 0, 0, 0, 108, 839, 1, 0, 0, 0, 110, 857, 1, 0, 0, 0, 112, 859, 1, 0, 0, 0, 114, 867, 1, 0, 0, 0, 116, 872, 1, 0, 0, 0, 118, 880, 1, 0, 0, 0, 120, 884, 1, 0, 0, 0, 122, 888, 1, 0, 0, 0, 124, 894, 1, 0, 0, 0, 126, 903, 1, 0, 0, 0, 128, 917, 1, 0, 0, 0, 130, 919, 1, 0, 0, 0, 132, 984, 1, 0, 0, 0, 134, 993, 1, 0, 0, 0, 136, 995, 1, 0, 0, 0, 138, 1006, 1, 0, 0, 0, 140, 1022, 1, 0, 0, 0, 142, 1298, 1, 0, 0, 0, 144, 1488, 1, 0, 0, 0, 146, 1490, 1, 0, 0, 0, 148, 1498, 1, 0, 0, 0, 150, 1508, 1, 0, 0, 0, 152, 1510, 1, 0, 0, 0, 154, 1541, 1, 0, 0, 0, 156, 1554, 1, 0, 0, 0, 158, 1556, 1, 0, 0, 0, 160, 1591, 1, 0, 0, 0, 162, 1593, 1, 0, 0, 0, 164, 1611, 1, 0, 0, 0, 166, 1613, 1, 0, 0, 0, 168, 1634, 1, 0, 0, 0, 170, 1656, 1, 0, 0, 0, 172, 1667, 1, 0, 0, 0, 174, 1680, 1, 0, 0, 0, 176, 1682, 1, 0, 0, 0, 178, 1693, 1, 0, 0, 0, 180, 1703, 1, 0, 0, 0, 182, 1707, 1, 0, 0, 0, 184, 1718, 1, 0, 0, 0, 186, 1728, 1, 0, 0, 0, 188, 1731, 1, 0, 0, 0, 190, 1744, 1, 0, 0, 0, 192, 1746, 1, 0, 0, 0, 194, 1748, 1, 0, 0, 0, 196, 1750, 1, 0, 0, 0, 198, 1754, 1, 0, 0, 0, 200, 1759, 1, 0, 0, 0, 202, 1761, 1, 0, 0, 0, 204, 1765, 1, 0, 0, 0, 206, 1771, 1, 0, 0, 0, 208, 1773, 1, 0, 0, 0, 210, 1787, 1, 0, 0, 0, 212, 1789, 1, 0, 0, 0, 214, 1803, 1, 0, 0, 0, 216, 218, 3, 2, 1, 0, 217, 216, 1, 0, 0, 0, 218, 221, 1, 0, 0, 0, 219, 217, 1, 0, 0, 0, 219, 220, 1, 0, 0, 0, 220, 222, 1, 0, 0, 0, 221, 219, 1, 0, 0, 0, 222, 223, 5, 0, 0, 1, 223, 1, 1, 0, 0, 0, 224, 227, 3, 6, 3, 0, 225, 227, 3, 10, 5, 0, 226, 224, 1, 0, 0, 0, 226, 225, 1, 0, 0, 0, 227, 3, 1, 0, 0, 0, 228, 229, 3, 142, 71, 0, 229, 5, 1, 0, 0, 0, 230, 231, 5, 59, 0, 0, 231, 234, 3, 200, 100, 0, 232, 233, 5, 133, 0, 0, 233, 235, 3, 4, 2, 0, 234, 232, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 7, 1, 0, 0, 0, 236, 241, 3, 166, 83, 0, 237, 238, 5, 135, 0, 0, 238, 240, 3, 166, 83, 0, 239, 237, 1, 0, 0, 0, 240, 243, 1, 0, 0, 0, 241, 239, 1, 0, 0, 0, 241, 242, 1, 0, 0, 0, 242, 245, 1, 0, 0, 0, 243, 241, 1, 0, 0, 0, 244, 246, 5, 135, 0, 0, 245, 244, 1, 0, 0, 0, 245, 246, 1, 0, 0, 0, 246, 9, 1, 0, 0, 0, 247, 260, 3, 12, 6, 0, 248, 260, 3, 14, 7, 0, 249, 260, 3, 18, 9, 0, 250, 260, 3, 20, 10, 0, 251, 260, 3, 22, 11, 0, 252, 260, 3, 26, 13, 0, 253, 260, 3, 24, 12, 0, 254, 260, 3, 28, 14, 0, 255, 260, 3, 30, 15, 0, 256, 260, 3, 36, 18, 0, 257, 260, 3, 32, 16, 0, 258, 260, 3, 34, 17, 0, 259, 247, 1, 0, 0, 0, 259, 248, 1, 0, 0, 0, 259, 249, 1, 0, 0, 0, 259, 250, 1, 0, 0, 0, 259, 251, 1, 0, 0, 0, 259, 252, 1, 0, 0, 0, 259, 253, 1, 0, 0, 0, 259, 254, 1, 0, 0, 0, 259, 255, 1, 0, 0, 0, 259, 256, 1, 0, 0, 0, 259, 257, 1, 0, 0, 0, 259, 258, 1, 0, 0, 0, 260, 11, 1, 0, 0, 0, 261, 263, 5, 84, 0, 0, 262, 264, 3, 4, 2, 0, 263, 262, 1, 0, 0, 0, 263, 264, 1, 0, 0, 0, 264, 266, 1, 0, 0, 0, 265, 267, 5, 170, 0, 0, 266, 265, 1, 0, 0, 0, 266, 267, 1, 0, 0, 0, 267, 13, 1, 0, 0, 0, 268, 270, 5, 97, 0, 0, 269, 271, 3, 4, 2, 0, 270, 269, 1, 0, 0, 0, 270, 271, 1, 0, 0, 0, 271, 273, 1, 0, 0, 0, 272, 274, 5, 170, 0, 0, 273, 272, 1, 0, 0, 0, 273, 274, 1, 0, 0, 0, 274, 15, 1, 0, 0, 0, 275, 284, 5, 14, 0, 0, 276, 277, 5, 149, 0, 0, 277, 280, 3, 200, 100, 0, 278, 279, 5, 134, 0, 0, 279, 281, 3, 200, 100, 0, 280, 278, 1, 0, 0, 0, 280, 281, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 283, 5, 169, 0, 0, 283, 285, 1, 0, 0, 0, 284, 276, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 286, 1, 0, 0, 0, 286, 287, 3, 36, 18, 0, 287, 17, 1, 0, 0, 0, 288, 289, 5, 106, 0, 0, 289, 293, 3, 36, 18, 0, 290, 292, 3, 16, 8, 0, 291, 290, 1, 0, 0, 0, 292, 295, 1, 0, 0, 0, 293, 291, 1, 0, 0, 0, 293, 294, 1, 0, 0, 0, 294, 298, 1, 0, 0, 0, 295, 293, 1, 0, 0, 0, 296, 297, 5, 32, 0, 0, 297, 299, 3, 36, 18, 0, 298, 296, 1, 0, 0, 0, 298, 299, 1, 0, 0, 0, 299, 19, 1, 0, 0, 0, 300, 301, 5, 45, 0, 0, 301, 302, 5, 149, 0, 0, 302, 303, 3, 4, 2, 0, 303, 304, 5, 169, 0, 0, 304, 307, 3, 10, 5, 0, 305, 306, 5, 26, 0, 0, 306, 308, 3, 10, 5, 0, 307, 305, 1, 0, 0, 0, 307, 308, 1, 0, 0, 0, 308, 21, 1, 0, 0, 0, 309, 310, 5, 116, 0, 0, 310, 311, 5, 149, 0, 0, 311, 312, 3, 4, 2, 0, 312, 313, 5, 169, 0, 0, 313, 315, 3, 10, 5, 0, 314, 316, 5, 170, 0, 0, 315, 314, 1, 0, 0, 0, 315, 316, 1, 0, 0, 0, 316, 23, 1, 0, 0, 0, 317, 318, 5, 36, 0, 0, 318, 322, 5, 149, 0, 0, 319, 323, 3, 6, 3, 0, 320, 323, 3, 30, 15, 0, 321, 323, 3, 4, 2, 0, 322, 319, 1, 0, 0, 0, 322, 320, 1, 0, 0, 0, 322, 321, 1, 0, 0, 0, 322, 323, 1, 0, 0, 0, 323, 324, 1, 0, 0, 0, 324, 326, 5, 170, 0, 0, 325, 327, 3, 4, 2, 0, 326, 325, 1, 0, 0, 0, 326, 327, 1, 0, 0, 0, 327, 328, 1, 0, 0, 0, 328, 332, 5, 170, 0, 0, 329, 333, 3, 6, 3, 0, 330, 333, 3, 30, 15, 0, 331, 333, 3, 4, 2, 0, 332, 329, 1, 0, 0, 0, 332, 330, 1, 0, 0, 0, 332, 331, 1, 0, 0, 0, 332, 333, 1, 0, 0, 0, 333, 334, 1, 0, 0, 0, 334, 335, 5, 169, 0, 0, 335, 337, 3, 10, 5, 0, 336, 338, 5, 170, 0, 0, 337, 336, 1, 0, 0, 0, 337, 338, 1, 0, 0, 0, 338, 25, 1, 0, 0, 0, 339, 340, 5, 36, 0, 0, 340, 341, 5, 149, 0, 0, 341, 342, 5, 59, 0, 0, 342, 345, 3, 200, 100, 0, 343, 344, 5, 135, 0, 0, 344, 346, 3, 200, 100, 0, 345, 343, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 347, 1, 0, 0, 0, 347, 348, 5, 47, 0, 0, 348, 349, 3, 4, 2, 0, 349, 350, 5, 169, 0, 0, 350, 352, 3, 10, 5, 0, 351, 353, 5, 170, 0, 0, 352, 351, 1, 0, 0, 0, 352, 353, 1, 0, 0, 0, 353, 27, 1, 0, 0, 0, 354, 355, 7, 0, 0, 0, 355, 356, 3, 200, 100, 0, 356, 358, 5, 149, 0, 0, 357, 359, 3, 8, 4, 0, 358, 357, 1, 0, 0, 0, 358, 359, 1, 0, 0, 0, 359, 360, 1, 0, 0, 0, 360, 361, 5, 169, 0, 0, 361, 362, 3, 36, 18, 0, 362, 29, 1, 0, 0, 0, 363, 364, 3, 4, 2, 0, 364, 365, 5, 133, 0, 0, 365, 366, 3, 4, 2, 0, 366, 31, 1, 0, 0, 0, 367, 369, 3, 4, 2, 0, 368, 370, 5, 170, 0, 0, 369, 368, 1, 0, 0, 0, 369, 370, 1, 0, 0, 0, 370, 33, 1, 0, 0, 0, 371, 372, 5, 170, 0, 0, 372, 35, 1, 0, 0, 0, 373, 377, 5, 147, 0, 0, 374, 376, 3, 2, 1, 0, 375, 374, 1, 0, 0, 0, 376, 379, 1, 0, 0, 0, 377, 375, 1, 0, 0, 0, 377, 378, 1, 0, 0, 0, 378, 380, 1, 0, 0, 0, 379, 377, 1, 0, 0, 0, 380, 381, 5, 167, 0, 0, 381, 37, 1, 0, 0, 0, 382, 383, 3, 4, 2, 0, 383, 384, 5, 134, 0, 0, 384, 385, 3, 4, 2, 0, 385, 39, 1, 0, 0, 0, 386, 391, 3, 38, 19, 0, 387, 388, 5, 135, 0, 0, 388, 390, 3, 38, 19, 0, 389, 387, 1, 0, 0, 0, 390, 393, 1, 0, 0, 0, 391, 389, 1, 0, 0, 0, 391, 392, 1, 0, 0, 0, 392, 395, 1, 0, 0, 0, 393, 391, 1, 0, 0, 0, 394, 396, 5, 135, 0, 0, 395, 394, 1, 0, 0, 0, 395, 396, 1, 0, 0, 0, 396, 41, 1, 0, 0, 0, 397, 401, 3, 48, 24, 0, 398, 401, 3, 52, 26, 0, 399, 401, 3, 154, 77, 0, 400, 397, 1, 0, 0, 0, 400, 398, 1, 0, 0, 0, 400, 399, 1, 0, 0, 0, 401, 403, 1, 0, 0, 0, 402, 404, 5, 170, 0, 0, 403, 402, 1, 0, 0, 0, 403, 404, 1, 0, 0, 0, 404, 405, 1, 0, 0, 0, 405, 406, 5, 0, 0, 1, 406, 43, 1, 0, 0, 0, 407, 414, 3, 52, 26, 0, 408, 409, 5, 149, 0, 0, 409, 410, 3, 48, 24, 0, 410, 411, 5, 169, 0, 0, 411, 414, 1, 0, 0, 0, 412, 414, 3, 204, 102, 0, 413, 407, 1, 0, 0, 0, 413, 408, 1, 0, 0, 0, 413, 412, 1, 0, 0, 0, 414, 45, 1, 0, 0, 0, 415, 416, 5, 28, 0, 0, 416, 419, 5, 1, 0, 0, 417, 418, 5, 11, 0, 0, 418, 420, 5, 65, 0, 0, 419, 417, 1, 0, 0, 0, 419, 420, 1, 0, 0, 0, 420, 461, 1, 0, 0, 0, 421, 424, 5, 28, 0, 0, 422, 423, 5, 11, 0, 0, 423, 425, 5, 65, 0, 0, 424, 422, 1, 0, 0, 0, 424, 425, 1, 0, 0, 0, 425, 461, 1, 0, 0, 0, 426, 427, 5, 109, 0, 0, 427, 430, 5, 1, 0, 0, 428, 429, 5, 11, 0, 0, 429, 431, 5, 65, 0, 0, 430, 428, 1, 0, 0, 0, 430, 431, 1, 0, 0, 0, 431, 461, 1, 0, 0, 0, 432, 433, 5, 109, 0, 0, 433, 436, 5, 25, 0, 0, 434, 435, 5, 11, 0, 0, 435, 437, 5, 65, 0, 0, 436, 434, 1, 0, 0, 0, 436, 437, 1, 0, 0, 0, 437, 461, 1, 0, 0, 0, 438, 441, 5, 109, 0, 0, 439, 440, 5, 11, 0, 0, 440, 442, 5, 65, 0, 0, 441, 439, 1, 0, 0, 0, 441, 442, 1, 0, 0, 0, 442, 461, 1, 0, 0, 0, 443, 444, 5, 50, 0, 0, 444, 447, 5, 1, 0, 0, 445, 446, 5, 11, 0, 0, 446, 448, 5, 65, 0, 0, 447, 445, 1, 0, 0, 0, 447, 448, 1, 0, 0, 0, 448, 461, 1, 0, 0, 0, 449, 450, 5, 50, 0, 0, 450, 453, 5, 25, 0, 0, 451, 452, 5, 11, 0, 0, 452, 454, 5, 65, 0, 0, 453, 451, 1, 0, 0, 0, 453, 454, 1, 0, 0, 0, 454, 461, 1, 0, 0, 0, 455, 458, 5, 50, 0, 0, 456, 457, 5, 11, 0, 0, 457, 459, 5, 65, 0, 0, 458, 456, 1, 0, 0, 0, 458, 459, 1, 0, 0, 0, 459, 461, 1, 0, 0, 0, 460, 415, 1, 0, 0, 0, 460, 421, 1, 0, 0, 0, 460, 426, 1, 0, 0, 0, 460, 432, 1, 0, 0, 0, 460, 438, 1, 0, 0, 0, 460, 443, 1, 0, 0, 0, 460, 449, 1, 0, 0, 0, 460, 455, 1, 0, 0, 0, 461, 462, 1, 0, 0, 0, 462, 463, 3, 44, 22, 0, 463, 47, 1, 0, 0, 0, 464, 468, 3, 44, 22, 0, 465, 467, 3, 46, 23, 0, 466, 465, 1, 0, 0, 0, 467, 470, 1, 0, 0, 0, 468, 466, 1, 0, 0, 0, 468, 469, 1, 0, 0, 0, 469, 472, 1, 0, 0, 0, 470, 468, 1, 0, 0, 0, 471, 473, 3, 50, 25, 0, 472, 471, 1, 0, 0, 0, 472, 473, 1, 0, 0, 0, 473, 49, 1, 0, 0, 0, 474, 475, 5, 61, 0, 0, 475, 477, 3, 142, 71, 0, 476, 478, 5, 158, 0, 0, 477, 476, 1, 0, 0, 0, 477, 478, 1, 0, 0, 0, 478, 481, 1, 0, 0, 0, 479, 480, 5, 135, 0, 0, 480, 482, 3, 142, 71, 0, 481, 479, 1, 0, 0, 0, 481, 482, 1, 0, 0, 0, 482, 485, 1, 0, 0, 0, 483, 484, 5, 118, 0, 0, 484, 486, 5, 98, 0, 0, 485, 483, 1, 0, 0, 0, 485, 486, 1, 0, 0, 0, 486, 502, 1, 0, 0, 0, 487, 488, 5, 61, 0, 0, 488, 490, 3, 142, 71, 0, 489, 491, 5, 158, 0, 0, 490, 489, 1, 0, 0, 0, 490, 491, 1, 0, 0, 0, 491, 494, 1, 0, 0, 0, 492, 493, 5, 118, 0, 0, 493, 495, 5, 98, 0, 0, 494, 492, 1, 0, 0, 0, 494, 495, 1, 0, 0, 0, 495, 496, 1, 0, 0, 0, 496, 497, 5, 70, 0, 0, 497, 498, 3, 142, 71, 0, 498, 502, 1, 0, 0, 0, 499, 500, 5, 70, 0, 0, 500, 502, 3, 142, 71, 0, 501, 474, 1, 0, 0, 0, 501, 487, 1, 0, 0, 0, 501, 499, 1, 0, 0, 0, 502, 51, 1, 0, 0, 0, 503, 505, 3, 54, 27, 0, 504, 503, 1, 0, 0, 0, 504, 505, 1, 0, 0, 0, 505, 506, 1, 0, 0, 0, 506, 508, 5, 91, 0, 0, 507, 509, 5, 25, 0, 0, 508, 507, 1, 0, 0, 0, 508, 509, 1, 0, 0, 0, 509, 511, 1, 0, 0, 0, 510, 512, 3, 56, 28, 0, 511, 510, 1, 0, 0, 0, 511, 512, 1, 0, 0, 0, 512, 513, 1, 0, 0, 0, 513, 515, 3, 138, 69, 0, 514, 516, 3, 58, 29, 0, 515, 514, 1, 0, 0, 0, 515, 516, 1, 0, 0, 0, 516, 518, 1, 0, 0, 0, 517, 519, 3, 60, 30, 0, 518, 517, 1, 0, 0, 0, 518, 519, 1, 0, 0, 0, 519, 521, 1, 0, 0, 0, 520, 522, 3, 64, 32, 0, 521, 520, 1, 0, 0, 0, 521, 522, 1, 0, 0, 0, 522, 524, 1, 0, 0, 0, 523, 525, 3, 66, 33, 0, 524, 523, 1, 0, 0, 0, 524, 525, 1, 0, 0, 0, 525, 530, 1, 0, 0, 0, 526, 528, 5, 111, 0, 0, 527, 526, 1, 0, 0, 0, 527, 528, 1, 0, 0, 0, 528, 529, 1, 0, 0, 0, 529, 531, 3, 102, 51, 0, 530, 527, 1, 0, 0, 0, 530, 531, 1, 0, 0, 0, 531, 533, 1, 0, 0, 0, 532, 534, 3, 68, 34, 0, 533, 532, 1, 0, 0, 0, 533, 534, 1, 0, 0, 0, 534, 537, 1, 0, 0, 0, 535, 536, 5, 118, 0, 0, 536, 538, 7, 1, 0, 0, 537, 535, 1, 0, 0, 0, 537, 538, 1, 0, 0, 0, 538, 541, 1, 0, 0, 0, 539, 540, 5, 118, 0, 0, 540, 542, 5, 102, 0, 0, 541, 539, 1, 0, 0, 0, 541, 542, 1, 0, 0, 0, 542, 544, 1, 0, 0, 0, 543, 545, 3, 74, 37, 0, 544, 543, 1, 0, 0, 0, 544, 545, 1, 0, 0, 0, 545, 547, 1, 0, 0, 0, 546, 548, 3, 76, 38, 0, 547, 546, 1, 0, 0, 0, 547, 548, 1, 0, 0, 0, 548, 551, 1, 0, 0, 0, 549, 550, 5, 111, 0, 0, 550, 552, 3, 102, 51, 0, 551, 549, 1, 0, 0, 0, 551, 552, 1, 0, 0, 0, 552, 554, 1, 0, 0, 0, 553, 555, 3, 62, 31, 0, 554, 553, 1, 0, 0, 0, 554, 555, 1, 0, 0, 0, 555, 557, 1, 0, 0, 0, 556, 558, 3, 78, 39, 0, 557, 556, 1, 0, 0, 0, 557, 558, 1, 0, 0, 0, 558, 560, 1, 0, 0, 0, 559, 561, 3, 82, 41, 0, 560, 559, 1, 0, 0, 0, 560, 561, 1, 0, 0, 0, 561, 564, 1, 0, 0, 0, 562, 565, 3, 84, 42, 0, 563, 565, 3, 86, 43, 0, 564, 562, 1, 0, 0, 0, 564, 563, 1, 0, 0, 0, 564, 565, 1, 0, 0, 0, 565, 567, 1, 0, 0, 0, 566, 568, 3, 88, 44, 0, 567, 566, 1, 0, 0, 0, 567, 568, 1, 0, 0, 0, 568, 53, 1, 0, 0, 0, 569, 571, 5, 118, 0, 0, 570, 572, 5, 82, 0, 0, 571, 570, 1, 0, 0, 0, 571, 572, 1, 0, 0, 0, 572, 573, 1, 0, 0, 0, 573, 574, 3, 158, 79, 0, 574, 55, 1, 0, 0, 0, 575, 576, 5, 101, 0, 0, 576, 579, 5, 125, 0, 0, 577, 578, 5, 118, 0, 0, 578, 580, 5, 98, 0, 0, 579, 577, 1, 0, 0, 0, 579, 580, 1, 0, 0, 0, 580, 57, 1, 0, 0, 0, 581, 582, 5, 37, 0, 0, 582, 583, 3, 94, 47, 0, 583, 59, 1, 0, 0, 0, 584, 586, 7, 2, 0, 0, 585, 584, 1, 0, 0, 0, 585, 586, 1, 0, 0, 0, 586, 587, 1, 0, 0, 0, 587, 588, 5, 5, 0, 0, 588, 589, 5, 53, 0, 0, 589, 590, 3, 136, 68, 0, 590, 61, 1, 0, 0, 0, 591, 592, 5, 117, 0, 0, 592, 593, 3, 200, 100, 0, 593, 594, 5, 6, 0, 0, 594, 595, 5, 149, 0, 0, 595, 596, 3, 116, 58, 0, 596, 606, 5, 169, 0, 0, 597, 598, 5, 135, 0, 0, 598, 599, 3, 200, 100, 0, 599, 600, 5, 6, 0, 0, 600, 601, 5, 149, 0, 0, 601, 602, 3, 116, 58, 0, 602, 603, 5, 169, 0, 0, 603, 605, 1, 0, 0, 0, 604, 597, 1, 0, 0, 0, 605, 608, 1, 0, 0, 0, 606, 604, 1, 0, 0, 0, 606, 607, 1, 0, 0, 0, 607, 63, 1, 0, 0, 0, 608, 606, 1, 0, 0, 0, 609, 610, 5, 78, 0, 0, 610, 611, 3, 142, 71, 0, 611, 65, 1, 0, 0, 0, 612, 613, 5, 115, 0, 0, 613, 614, 3, 142, 71, 0, 614, 67, 1, 0, 0, 0, 615, 616, 5, 40, 0, 0, 616, 629, 5, 11, 0, 0, 617, 618, 7, 1, 0, 0, 618, 619, 5, 149, 0, 0, 619, 620, 3, 136, 68, 0, 620, 621, 5, 169, 0, 0, 621, 630, 1, 0, 0, 0, 622, 623, 5, 41, 0, 0, 623, 624, 5, 93, 0, 0, 624, 625, 5, 149, 0, 0, 625, 626, 3, 70, 35, 0, 626, 627, 5, 169, 0, 0, 627, 630, 1, 0, 0, 0, 628, 630, 3, 136, 68, 0, 629, 617, 1, 0, 0, 0, 629, 622, 1, 0, 0, 0, 629, 628, 1, 0, 0, 0, 630, 69, 1, 0, 0, 0, 631, 636, 3, 72, 36, 0, 632, 633, 5, 135, 0, 0, 633, 635, 3, 72, 36, 0, 634, 632, 1, 0, 0, 0, 635, 638, 1, 0, 0, 0, 636, 634, 1, 0, 0, 0, 636, 637, 1, 0, 0, 0, 637, 71, 1, 0, 0, 0, 638, 636, 1, 0, 0, 0, 639, 641, 5, 149, 0, 0, 640, 642, 3, 136, 68, 0, 641, 640, 1, 0, 0, 0, 641, 642, 1, 0, 0, 0, 642, 643, 1, 0, 0, 0, 643, 644, 5, 169, 0, 0, 644, 73, 1, 0, 0, 0, 645, 646, 5, 42, 0, 0, 646, 647, 3, 142, 71, 0, 647, 75, 1, 0, 0, 0, 648, 649, 5, 79, 0, 0, 649, 650, 3, 142, 71, 0, 650, 77, 1, 0, 0, 0, 651, 652, 5, 73, 0, 0, 652, 653, 5, 11, 0, 0, 653, 654, 3, 106, 53, 0, 654, 79, 1, 0, 0, 0, 655, 656, 5, 73, 0, 0, 656, 657, 5, 11, 0, 0, 657, 658, 3, 136, 68, 0, 658, 81, 1, 0, 0, 0, 659, 660, 5, 61, 0, 0, 660, 661, 3, 104, 52, 0, 661, 662, 5, 11, 0, 0, 662, 663, 3, 136, 68, 0, 663, 83, 1, 0, 0, 0, 664, 665, 5, 61, 0, 0, 665, 667, 3, 142, 71, 0, 666, 668, 5, 158, 0, 0, 667, 666, 1, 0, 0, 0, 667, 668, 1, 0, 0, 0, 668, 671, 1, 0, 0, 0, 669, 670, 5, 135, 0, 0, 670, 672, 3, 142, 71, 0, 671, 669, 1, 0, 0, 0, 671, 672, 1, 0, 0, 0, 672, 675, 1, 0, 0, 0, 673, 674, 5, 118, 0, 0, 674, 676, 5, 98, 0, 0, 675, 673, 1, 0, 0, 0, 675, 676, 1, 0, 0, 0, 676, 690, 1, 0, 0, 0, 677, 678, 5, 61, 0, 0, 678, 680, 3, 142, 71, 0, 679, 681, 5, 158, 0, 0, 680, 679, 1, 0, 0, 0, 680, 681, 1, 0, 0, 0, 681, 684, 1, 0, 0, 0, 682, 683, 5, 118, 0, 0, 683, 685, 5, 98, 0, 0, 684, 682, 1, 0, 0, 0, 684, 685, 1, 0, 0, 0, 685, 686, 1, 0, 0, 0, 686, 687, 5, 70, 0, 0, 687, 688, 3, 142, 71, 0, 688, 690, 1, 0, 0, 0, 689, 664, 1, 0, 0, 0, 689, 677, 1, 0, 0, 0, 690, 85, 1, 0, 0, 0, 691, 692, 5, 70, 0, 0, 692, 693, 3, 142, 71, 0, 693, 87, 1, 0, 0, 0, 694, 695, 5, 94, 0, 0, 695, 696, 3, 112, 56, 0, 696, 89, 1, 0, 0, 0, 697, 698, 5, 112, 0, 0, 698, 703, 3, 92, 46, 0, 699, 700, 5, 135, 0, 0, 700, 702, 3, 92, 46, 0, 701, 699, 1, 0, 0, 0, 702, 705, 1, 0, 0, 0, 703, 701, 1, 0, 0, 0, 703, 704, 1, 0, 0, 0, 704, 91, 1, 0, 0, 0, 705, 703, 1, 0, 0, 0, 706, 707, 5, 149, 0, 0, 707, 712, 3, 142, 71, 0, 708, 709, 5, 135, 0, 0, 709, 711, 3, 142, 71, 0, 710, 708, 1, 0, 0, 0, 711, 714, 1, 0, 0, 0, 712, 710, 1, 0, 0, 0, 712, 713, 1, 0, 0, 0, 713, 715, 1, 0, 0, 0, 714, 712, 1, 0, 0, 0, 715, 716, 5, 169, 0, 0, 716, 93, 1, 0, 0, 0, 717, 718, 6, 47, -1, 0, 718, 720, 3, 168, 84, 0, 719, 721, 5, 31, 0, 0, 720, 719, 1, 0, 0, 0, 720, 721, 1, 0, 0, 0, 721, 723, 1, 0, 0, 0, 722, 724, 3, 102, 51, 0, 723, 722, 1, 0, 0, 0, 723, 724, 1, 0, 0, 0, 724, 730, 1, 0, 0, 0, 725, 726, 5, 149, 0, 0, 726, 727, 3, 94, 47, 0, 727, 728, 5, 169, 0, 0, 728, 730, 1, 0, 0, 0, 729, 717, 1, 0, 0, 0, 729, 725, 1, 0, 0, 0, 730, 745, 1, 0, 0, 0, 731, 732, 10, 3, 0, 0, 732, 733, 3, 98, 49, 0, 733, 734, 3, 94, 47, 4, 734, 744, 1, 0, 0, 0, 735, 737, 10, 4, 0, 0, 736, 738, 3, 96, 48, 0, 737, 736, 1, 0, 0, 0, 737, 738, 1, 0, 0, 0, 738, 739, 1, 0, 0, 0, 739, 740, 5, 53, 0, 0, 740, 741, 3, 94, 47, 0, 741, 742, 3, 100, 50, 0, 742, 744, 1, 0, 0, 0, 743, 731, 1, 0, 0, 0, 743, 735, 1, 0, 0, 0, 744, 747, 1, 0, 0, 0, 745, 743, 1, 0, 0, 0, 745, 746, 1, 0, 0, 0, 746, 95, 1, 0, 0, 0, 747, 745, 1, 0, 0, 0, 748, 750, 7, 3, 0, 0, 749, 748, 1, 0, 0, 0, 749, 750, 1, 0, 0, 0, 750, 751, 1, 0, 0, 0, 751, 760, 5, 49, 0, 0, 752, 754, 5, 49, 0, 0, 753, 755, 7, 3, 0, 0, 754, 753, 1, 0, 0, 0, 754, 755, 1, 0, 0, 0, 755, 760, 1, 0, 0, 0, 756, 760, 7, 3, 0, 0, 757, 760, 5, 3, 0, 0, 758, 760, 5, 92, 0, 0, 759, 749, 1, 0, 0, 0, 759, 752, 1, 0, 0, 0, 759, 756, 1, 0, 0, 0, 759, 757, 1, 0, 0, 0, 759, 758, 1, 0, 0, 0, 760, 794, 1, 0, 0, 0, 761, 763, 7, 4, 0, 0, 762, 761, 1, 0, 0, 0, 762, 763, 1, 0, 0, 0, 763, 764, 1, 0, 0, 0, 764, 766, 7, 5, 0, 0, 765, 767, 5, 74, 0, 0, 766, 765, 1, 0, 0, 0, 766, 767, 1, 0, 0, 0, 767, 776, 1, 0, 0, 0, 768, 770, 7, 5, 0, 0, 769, 771, 5, 74, 0, 0, 770, 769, 1, 0, 0, 0, 770, 771, 1, 0, 0, 0, 771, 773, 1, 0, 0, 0, 772, 774, 7, 4, 0, 0, 773, 772, 1, 0, 0, 0, 773, 774, 1, 0, 0, 0, 774, 776, 1, 0, 0, 0, 775, 762, 1, 0, 0, 0, 775, 768, 1, 0, 0, 0, 776, 794, 1, 0, 0, 0, 777, 779, 7, 6, 0, 0, 778, 777, 1, 0, 0, 0, 778, 779, 1, 0, 0, 0, 779, 780, 1, 0, 0, 0, 780, 782, 5, 38, 0, 0, 781, 783, 5, 74, 0, 0, 782, 781, 1, 0, 0, 0, 782, 783, 1, 0, 0, 0, 783, 792, 1, 0, 0, 0, 784, 786, 5, 38, 0, 0, 785, 787, 5, 74, 0, 0, 786, 785, 1, 0, 0, 0, 786, 787, 1, 0, 0, 0, 787, 789, 1, 0, 0, 0, 788, 790, 7, 6, 0, 0, 789, 788, 1, 0, 0, 0, 789, 790, 1, 0, 0, 0, 790, 792, 1, 0, 0, 0, 791, 778, 1, 0, 0, 0, 791, 784, 1, 0, 0, 0, 792, 794, 1, 0, 0, 0, 793, 759, 1, 0, 0, 0, 793, 775, 1, 0, 0, 0, 793, 791, 1, 0, 0, 0, 794, 97, 1, 0, 0, 0, 795, 796, 5, 18, 0, 0, 796, 799, 5, 53, 0, 0, 797, 799, 5, 135, 0, 0, 798, 795, 1, 0, 0, 0, 798, 797, 1, 0, 0, 0, 799, 99, 1, 0, 0, 0, 800, 801, 5, 71, 0, 0, 801, 810, 3, 136, 68, 0, 802, 803, 5, 111, 0, 0, 803, 804, 5, 149, 0, 0, 804, 805, 3, 136, 68, 0, 805, 806, 5, 169, 0, 0, 806, 810, 1, 0, 0, 0, 807, 808, 5, 111, 0, 0, 808, 810, 3, 136, 68, 0, 809, 800, 1, 0, 0, 0, 809, 802, 1, 0, 0, 0, 809, 807, 1, 0, 0, 0, 810, 101, 1, 0, 0, 0, 811, 812, 5, 89, 0, 0, 812, 814, 3, 110, 55, 0, 813, 815, 5, 158, 0, 0, 814, 813, 1, 0, 0, 0, 814, 815, 1, 0, 0, 0, 815, 818, 1, 0, 0, 0, 816, 817, 5, 70, 0, 0, 817, 819, 3, 110, 55, 0, 818, 816, 1, 0, 0, 0, 818, 819, 1, 0, 0, 0, 819, 824, 1, 0, 0, 0, 820, 821, 5, 149, 0, 0, 821, 822, 3, 200, 100, 0, 822, 823, 5, 169, 0, 0, 823, 825, 1, 0, 0, 0, 824, 820, 1, 0, 0, 0, 824, 825, 1, 0, 0, 0, 825, 103, 1, 0, 0, 0, 826, 829, 3, 142, 71, 0, 827, 828, 7, 7, 0, 0, 828, 830, 3, 142, 71, 0, 829, 827, 1, 0, 0, 0, 829, 830, 1, 0, 0, 0, 830, 105, 1, 0, 0, 0, 831, 836, 3, 108, 54, 0, 832, 833, 5, 135, 0, 0, 833, 835, 3, 108, 54, 0, 834, 832, 1, 0, 0, 0, 835, 838, 1, 0, 0, 0, 836, 834, 1, 0, 0, 0, 836, 837, 1, 0, 0, 0, 837, 107, 1, 0, 0, 0, 838, 836, 1, 0, 0, 0, 839, 841, 3, 142, 71, 0, 840, 842, 7, 8, 0, 0, 841, 840, 1, 0, 0, 0, 841, 842, 1, 0, 0, 0, 842, 845, 1, 0, 0, 0, 843, 844, 5, 69, 0, 0, 844, 846, 7, 9, 0, 0, 845, 843, 1, 0, 0, 0, 845, 846, 1, 0, 0, 0, 846, 849, 1, 0, 0, 0, 847, 848, 5, 16, 0, 0, 848, 850, 5, 127, 0, 0, 849, 847, 1, 0, 0, 0, 849, 850, 1, 0, 0, 0, 850, 109, 1, 0, 0, 0, 851, 858, 3, 204, 102, 0, 852, 855, 3, 188, 94, 0, 853, 854, 5, 171, 0, 0, 854, 856, 3, 188, 94, 0, 855, 853, 1, 0, 0, 0, 855, 856, 1, 0, 0, 0, 856, 858, 1, 0, 0, 0, 857, 851, 1, 0, 0, 0, 857, 852, 1, 0, 0, 0, 858, 111, 1, 0, 0, 0, 859, 864, 3, 114, 57, 0, 860, 861, 5, 135, 0, 0, 861, 863, 3, 114, 57, 0, 862, 860, 1, 0, 0, 0, 863, 866, 1, 0, 0, 0, 864, 862, 1, 0, 0, 0, 864, 865, 1, 0, 0, 0, 865, 113, 1, 0, 0, 0, 866, 864, 1, 0, 0, 0, 867, 868, 3, 200, 100, 0, 868, 869, 5, 141, 0, 0, 869, 870, 3, 190, 95, 0, 870, 115, 1, 0, 0, 0, 871, 873, 3, 118, 59, 0, 872, 871, 1, 0, 0, 0, 872, 873, 1, 0, 0, 0, 873, 875, 1, 0, 0, 0, 874, 876, 3, 120, 60, 0, 875, 874, 1, 0, 0, 0, 875, 876, 1, 0, 0, 0, 876, 878, 1, 0, 0, 0, 877, 879, 3, 124, 62, 0, 878, 877, 1, 0, 0, 0, 878, 879, 1, 0, 0, 0, 879, 117, 1, 0, 0, 0, 880, 881, 5, 76, 0, 0, 881, 882, 5, 11, 0, 0, 882, 883, 3, 136, 68, 0, 883, 119, 1, 0, 0, 0, 884, 885, 5, 73, 0, 0, 885, 886, 5, 11, 0, 0, 886, 887, 3, 106, 53, 0, 887, 121, 1, 0, 0, 0, 888, 889, 5, 119, 0, 0, 889, 890, 5, 40, 0, 0, 890, 891, 5, 149, 0, 0, 891, 892, 3, 78, 39, 0, 892, 893, 5, 169, 0, 0, 893, 123, 1, 0, 0, 0, 894, 895, 7, 10, 0, 0, 895, 896, 3, 126, 63, 0, 896, 125, 1, 0, 0, 0, 897, 904, 3, 128, 64, 0, 898, 899, 5, 9, 0, 0, 899, 900, 3, 128, 64, 0, 900, 901, 5, 2, 0, 0, 901, 902, 3, 128, 64, 0, 902, 904, 1, 0, 0, 0, 903, 897, 1, 0, 0, 0, 903, 898, 1, 0, 0, 0, 904, 127, 1, 0, 0, 0, 905, 906, 5, 20, 0, 0, 906, 918, 5, 87, 0, 0, 907, 908, 5, 108, 0, 0, 908, 918, 5, 77, 0, 0, 909, 910, 5, 108, 0, 0, 910, 918, 5, 35, 0, 0, 911, 912, 3, 142, 71, 0, 912, 913, 5, 77, 0, 0, 913, 918, 1, 0, 0, 0, 914, 915, 3, 142, 71, 0, 915, 916, 5, 35, 0, 0, 916, 918, 1, 0, 0, 0, 917, 905, 1, 0, 0, 0, 917, 907, 1, 0, 0, 0, 917, 909, 1, 0, 0, 0, 917, 911, 1, 0, 0, 0, 917, 914, 1, 0, 0, 0, 918, 129, 1, 0, 0, 0, 919, 920, 3, 142, 71, 0, 920, 921, 5, 0, 0, 1, 921, 131, 1, 0, 0, 0, 922, 923, 3, 200, 100, 0, 923, 924, 5, 149, 0, 0, 924, 925, 3, 200, 100, 0, 925, 932, 3, 132, 66, 0, 926, 927, 5, 135, 0, 0, 927, 928, 3, 200, 100, 0, 928, 929, 3, 132, 66, 0, 929, 931, 1, 0, 0, 0, 930, 926, 1, 0, 0, 0, 931, 934, 1, 0, 0, 0, 932, 930, 1, 0, 0, 0, 932, 933, 1, 0, 0, 0, 933, 936, 1, 0, 0, 0, 934, 932, 1, 0, 0, 0, 935, 937, 5, 135, 0, 0, 936, 935, 1, 0, 0, 0, 936, 937, 1, 0, 0, 0, 937, 938, 1, 0, 0, 0, 938, 939, 5, 169, 0, 0, 939, 985, 1, 0, 0, 0, 940, 941, 3, 200, 100, 0, 941, 942, 5, 149, 0, 0, 942, 947, 3, 202, 101, 0, 943, 944, 5, 135, 0, 0, 944, 946, 3, 202, 101, 0, 945, 943, 1, 0, 0, 0, 946, 949, 1, 0, 0, 0, 947, 945, 1, 0, 0, 0, 947, 948, 1, 0, 0, 0, 948, 951, 1, 0, 0, 0, 949, 947, 1, 0, 0, 0, 950, 952, 5, 135, 0, 0, 951, 950, 1, 0, 0, 0, 951, 952, 1, 0, 0, 0, 952, 953, 1, 0, 0, 0, 953, 954, 5, 169, 0, 0, 954, 985, 1, 0, 0, 0, 955, 956, 3, 200, 100, 0, 956, 957, 5, 149, 0, 0, 957, 962, 3, 132, 66, 0, 958, 959, 5, 135, 0, 0, 959, 961, 3, 132, 66, 0, 960, 958, 1, 0, 0, 0, 961, 964, 1, 0, 0, 0, 962, 960, 1, 0, 0, 0, 962, 963, 1, 0, 0, 0, 963, 966, 1, 0, 0, 0, 964, 962, 1, 0, 0, 0, 965, 967, 5, 135, 0, 0, 966, 965, 1, 0, 0, 0, 966, 967, 1, 0, 0, 0, 967, 968, 1, 0, 0, 0, 968, 969, 5, 169, 0, 0, 969, 985, 1, 0, 0, 0, 970, 971, 3, 200, 100, 0, 971, 973, 5, 149, 0, 0, 972, 974, 3, 136, 68, 0, 973, 972, 1, 0, 0, 0, 973, 974, 1, 0, 0, 0, 974, 975, 1, 0, 0, 0, 975, 976, 5, 169, 0, 0, 976, 985, 1, 0, 0, 0, 977, 979, 3, 200, 100, 0, 978, 980, 3, 200, 100, 0, 979, 978, 1, 0, 0, 0, 980, 981, 1, 0, 0, 0, 981, 979, 1, 0, 0, 0, 981, 982, 1, 0, 0, 0, 982, 985, 1, 0, 0, 0, 983, 985, 3, 200, 100, 0, 984, 922, 1, 0, 0, 0, 984, 940, 1, 0, 0, 0, 984, 955, 1, 0, 0, 0, 984, 970, 1, 0, 0, 0, 984, 977, 1, 0, 0, 0, 984, 983, 1, 0, 0, 0, 985, 133, 1, 0, 0, 0, 986, 988, 3, 200, 100, 0, 987, 989, 3, 200, 100, 0, 988, 987, 1, 0, 0, 0, 989, 990, 1, 0, 0, 0, 990, 988, 1, 0, 0, 0, 990, 991, 1, 0, 0, 0, 991, 994, 1, 0, 0, 0, 992, 994, 3, 200, 100, 0, 993, 986, 1, 0, 0, 0, 993, 992, 1, 0, 0, 0, 994, 135, 1, 0, 0, 0, 995, 1000, 3, 142, 71, 0, 996, 997, 5, 135, 0, 0, 997, 999, 3, 142, 71, 0, 998, 996, 1, 0, 0, 0, 999, 1002, 1, 0, 0, 0, 1000, 998, 1, 0, 0, 0, 1000, 1001, 1, 0, 0, 0, 1001, 1004, 1, 0, 0, 0, 1002, 1000, 1, 0, 0, 0, 1003, 1005, 5, 135, 0, 0, 1004, 1003, 1, 0, 0, 0, 1004, 1005, 1, 0, 0, 0, 1005, 137, 1, 0, 0, 0, 1006, 1011, 3, 140, 70, 0, 1007, 1008, 5, 135, 0, 0, 1008, 1010, 3, 140, 70, 0, 1009, 1007, 1, 0, 0, 0, 1010, 1013, 1, 0, 0, 0, 1011, 1009, 1, 0, 0, 0, 1011, 1012, 1, 0, 0, 0, 1012, 1015, 1, 0, 0, 0, 1013, 1011, 1, 0, 0, 0, 1014, 1016, 5, 135, 0, 0, 1015, 1014, 1, 0, 0, 0, 1015, 1016, 1, 0, 0, 0, 1016, 139, 1, 0, 0, 0, 1017, 1018, 3, 200, 100, 0, 1018, 1019, 5, 134, 0, 0, 1019, 1020, 3, 142, 71, 0, 1020, 1023, 1, 0, 0, 0, 1021, 1023, 3, 142, 71, 0, 1022, 1017, 1, 0, 0, 0, 1022, 1021, 1, 0, 0, 0, 1023, 141, 1, 0, 0, 0, 1024, 1025, 6, 71, -1, 0, 1025, 1027, 5, 12, 0, 0, 1026, 1028, 3, 142, 71, 0, 1027, 1026, 1, 0, 0, 0, 1027, 1028, 1, 0, 0, 0, 1028, 1034, 1, 0, 0, 0, 1029, 1030, 5, 114, 0, 0, 1030, 1031, 3, 142, 71, 0, 1031, 1032, 5, 96, 0, 0, 1032, 1033, 3, 142, 71, 0, 1033, 1035, 1, 0, 0, 0, 1034, 1029, 1, 0, 0, 0, 1035, 1036, 1, 0, 0, 0, 1036, 1034, 1, 0, 0, 0, 1036, 1037, 1, 0, 0, 0, 1037, 1040, 1, 0, 0, 0, 1038, 1039, 5, 26, 0, 0, 1039, 1041, 3, 142, 71, 0, 1040, 1038, 1, 0, 0, 0, 1040, 1041, 1, 0, 0, 0, 1041, 1042, 1, 0, 0, 0, 1042, 1043, 5, 27, 0, 0, 1043, 1299, 1, 0, 0, 0, 1044, 1045, 5, 13, 0, 0, 1045, 1046, 5, 149, 0, 0, 1046, 1047, 3, 142, 71, 0, 1047, 1048, 5, 6, 0, 0, 1048, 1049, 3, 132, 66, 0, 1049, 1050, 5, 169, 0, 0, 1050, 1299, 1, 0, 0, 0, 1051, 1052, 5, 107, 0, 0, 1052, 1053, 5, 149, 0, 0, 1053, 1054, 3, 142, 71, 0, 1054, 1055, 5, 6, 0, 0, 1055, 1056, 3, 132, 66, 0, 1056, 1057, 5, 169, 0, 0, 1057, 1299, 1, 0, 0, 0, 1058, 1059, 5, 21, 0, 0, 1059, 1299, 5, 127, 0, 0, 1060, 1061, 5, 51, 0, 0, 1061, 1299, 5, 127, 0, 0, 1062, 1063, 5, 51, 0, 0, 1063, 1064, 3, 142, 71, 0, 1064, 1065, 3, 192, 96, 0, 1065, 1299, 1, 0, 0, 0, 1066, 1067, 5, 95, 0, 0, 1067, 1068, 5, 149, 0, 0, 1068, 1069, 3, 142, 71, 0, 1069, 1070, 5, 37, 0, 0, 1070, 1073, 3, 142, 71, 0, 1071, 1072, 5, 36, 0, 0, 1072, 1074, 3, 142, 71, 0, 1073, 1071, 1, 0, 0, 0, 1073, 1074, 1, 0, 0, 0, 1074, 1075, 1, 0, 0, 0, 1075, 1076, 5, 169, 0, 0, 1076, 1299, 1, 0, 0, 0, 1077, 1078, 5, 99, 0, 0, 1078, 1299, 5, 127, 0, 0, 1079, 1080, 5, 104, 0, 0, 1080, 1081, 5, 149, 0, 0, 1081, 1082, 7, 11, 0, 0, 1082, 1083, 3, 206, 103, 0, 1083, 1084, 5, 37, 0, 0, 1084, 1085, 3, 142, 71, 0, 1085, 1086, 5, 169, 0, 0, 1086, 1299, 1, 0, 0, 0, 1087, 1088, 5, 17, 0, 0, 1088, 1089, 5, 149, 0, 0, 1089, 1090, 5, 127, 0, 0, 1090, 1299, 5, 169, 0, 0, 1091, 1092, 5, 17, 0, 0, 1092, 1093, 5, 149, 0, 0, 1093, 1094, 3, 136, 68, 0, 1094, 1095, 5, 169, 0, 0, 1095, 1299, 1, 0, 0, 0, 1096, 1097, 5, 17, 0, 0, 1097, 1098, 5, 149, 0, 0, 1098, 1099, 5, 129, 0, 0, 1099, 1100, 5, 29, 0, 0, 1100, 1101, 5, 149, 0, 0, 1101, 1102, 3, 8, 4, 0, 1102, 1103, 5, 169, 0, 0, 1103, 1104, 5, 83, 0, 0, 1104, 1105, 5, 149, 0, 0, 1105, 1106, 3, 146, 73, 0, 1106, 1107, 5, 169, 0, 0, 1107, 1108, 5, 169, 0, 0, 1108, 1122, 1, 0, 0, 0, 1109, 1110, 5, 149, 0, 0, 1110, 1111, 5, 129, 0, 0, 1111, 1112, 5, 29, 0, 0, 1112, 1113, 5, 149, 0, 0, 1113, 1114, 3, 8, 4, 0, 1114, 1115, 5, 169, 0, 0, 1115, 1116, 5, 83, 0, 0, 1116, 1117, 5, 149, 0, 0, 1117, 1118, 3, 146, 73, 0, 1118, 1119, 5, 169, 0, 0, 1119, 1120, 5, 169, 0, 0, 1120, 1122, 1, 0, 0, 0, 1121, 1096, 1, 0, 0, 0, 1121, 1109, 1, 0, 0, 0, 1122, 1299, 1, 0, 0, 0, 1123, 1124, 5, 17, 0, 0, 1124, 1125, 5, 149, 0, 0, 1125, 1126, 5, 129, 0, 0, 1126, 1127, 5, 29, 0, 0, 1127, 1128, 5, 149, 0, 0, 1128, 1129, 3, 8, 4, 0, 1129, 1130, 5, 169, 0, 0, 1130, 1131, 5, 169, 0, 0, 1131, 1299, 1, 0, 0, 0, 1132, 1133, 5, 17, 0, 0, 1133, 1134, 5, 149, 0, 0, 1134, 1135, 5, 129, 0, 0, 1135, 1136, 5, 83, 0, 0, 1136, 1137, 5, 149, 0, 0, 1137, 1138, 3, 146, 73, 0, 1138, 1139, 5, 169, 0, 0, 1139, 1140, 5, 169, 0, 0, 1140, 1150, 1, 0, 0, 0, 1141, 1142, 5, 149, 0, 0, 1142, 1143, 5, 129, 0, 0, 1143, 1144, 5, 83, 0, 0, 1144, 1145, 5, 149, 0, 0, 1145, 1146, 3, 146, 73, 0, 1146, 1147, 5, 169, 0, 0, 1147, 1148, 5, 169, 0, 0, 1148, 1150, 1, 0, 0, 0, 1149, 1132, 1, 0, 0, 0, 1149, 1141, 1, 0, 0, 0, 1150, 1299, 1, 0, 0, 0, 1151, 1152, 5, 17, 0, 0, 1152, 1153, 5, 149, 0, 0, 1153, 1154, 5, 129, 0, 0, 1154, 1299, 5, 169, 0, 0, 1155, 1156, 5, 129, 0, 0, 1156, 1157, 5, 17, 0, 0, 1157, 1158, 5, 149, 0, 0, 1158, 1159, 5, 127, 0, 0, 1159, 1299, 5, 169, 0, 0, 1160, 1161, 5, 129, 0, 0, 1161, 1162, 5, 17, 0, 0, 1162, 1163, 5, 149, 0, 0, 1163, 1164, 3, 136, 68, 0, 1164, 1165, 5, 169, 0, 0, 1165, 1299, 1, 0, 0, 0, 1166, 1167, 3, 200, 100, 0, 1167, 1169, 5, 149, 0, 0, 1168, 1170, 3, 136, 68, 0, 1169, 1168, 1, 0, 0, 0, 1169, 1170, 1, 0, 0, 0, 1170, 1171, 1, 0, 0, 0, 1171, 1172, 5, 169, 0, 0, 1172, 1181, 1, 0, 0, 0, 1173, 1175, 5, 149, 0, 0, 1174, 1176, 5, 25, 0, 0, 1175, 1174, 1, 0, 0, 0, 1175, 1176, 1, 0, 0, 0, 1176, 1178, 1, 0, 0, 0, 1177, 1179, 3, 136, 68, 0, 1178, 1177, 1, 0, 0, 0, 1178, 1179, 1, 0, 0, 0, 1179, 1180, 1, 0, 0, 0, 1180, 1182, 5, 169, 0, 0, 1181, 1173, 1, 0, 0, 0, 1181, 1182, 1, 0, 0, 0, 1182, 1183, 1, 0, 0, 0, 1183, 1184, 5, 75, 0, 0, 1184, 1185, 5, 149, 0, 0, 1185, 1186, 3, 116, 58, 0, 1186, 1187, 5, 169, 0, 0, 1187, 1299, 1, 0, 0, 0, 1188, 1189, 3, 200, 100, 0, 1189, 1191, 5, 149, 0, 0, 1190, 1192, 3, 136, 68, 0, 1191, 1190, 1, 0, 0, 0, 1191, 1192, 1, 0, 0, 0, 1192, 1193, 1, 0, 0, 0, 1193, 1194, 5, 169, 0, 0, 1194, 1203, 1, 0, 0, 0, 1195, 1197, 5, 149, 0, 0, 1196, 1198, 5, 25, 0, 0, 1197, 1196, 1, 0, 0, 0, 1197, 1198, 1, 0, 0, 0, 1198, 1200, 1, 0, 0, 0, 1199, 1201, 3, 136, 68, 0, 1200, 1199, 1, 0, 0, 0, 1200, 1201, 1, 0, 0, 0, 1201, 1202, 1, 0, 0, 0, 1202, 1204, 5, 169, 0, 0, 1203, 1195, 1, 0, 0, 0, 1203, 1204, 1, 0, 0, 0, 1204, 1205, 1, 0, 0, 0, 1205, 1206, 5, 75, 0, 0, 1206, 1207, 3, 200, 100, 0, 1207, 1299, 1, 0, 0, 0, 1208, 1209, 3, 200, 100, 0, 1209, 1211, 5, 149, 0, 0, 1210, 1212, 3, 136, 68, 0, 1211, 1210, 1, 0, 0, 0, 1211, 1212, 1, 0, 0, 0, 1212, 1213, 1, 0, 0, 0, 1213, 1214, 5, 169, 0, 0, 1214, 1215, 3, 122, 61, 0, 1215, 1299, 1, 0, 0, 0, 1216, 1222, 3, 200, 100, 0, 1217, 1219, 5, 149, 0, 0, 1218, 1220, 3, 136, 68, 0, 1219, 1218, 1, 0, 0, 0, 1219, 1220, 1, 0, 0, 0, 1220, 1221, 1, 0, 0, 0, 1221, 1223, 5, 169, 0, 0, 1222, 1217, 1, 0, 0, 0, 1222, 1223, 1, 0, 0, 0, 1223, 1224, 1, 0, 0, 0, 1224, 1226, 5, 149, 0, 0, 1225, 1227, 5, 25, 0, 0, 1226, 1225, 1, 0, 0, 0, 1226, 1227, 1, 0, 0, 0, 1227, 1229, 1, 0, 0, 0, 1228, 1230, 3, 136, 68, 0, 1229, 1228, 1, 0, 0, 0, 1229, 1230, 1, 0, 0, 0, 1230, 1231, 1, 0, 0, 0, 1231, 1232, 5, 169, 0, 0, 1232, 1299, 1, 0, 0, 0, 1233, 1299, 3, 154, 77, 0, 1234, 1299, 3, 208, 104, 0, 1235, 1299, 3, 190, 95, 0, 1236, 1237, 5, 137, 0, 0, 1237, 1299, 3, 142, 71, 24, 1238, 1239, 5, 67, 0, 0, 1239, 1299, 3, 142, 71, 17, 1240, 1241, 3, 180, 90, 0, 1241, 1242, 5, 139, 0, 0, 1242, 1244, 1, 0, 0, 0, 1243, 1240, 1, 0, 0, 0, 1243, 1244, 1, 0, 0, 0, 1244, 1245, 1, 0, 0, 0, 1245, 1251, 5, 129, 0, 0, 1246, 1247, 5, 29, 0, 0, 1247, 1248, 5, 149, 0, 0, 1248, 1249, 3, 8, 4, 0, 1249, 1250, 5, 169, 0, 0, 1250, 1252, 1, 0, 0, 0, 1251, 1246, 1, 0, 0, 0, 1251, 1252, 1, 0, 0, 0, 1252, 1299, 1, 0, 0, 0, 1253, 1254, 5, 55, 0, 0, 1254, 1259, 3, 200, 100, 0, 1255, 1256, 5, 135, 0, 0, 1256, 1258, 3, 200, 100, 0, 1257, 1255, 1, 0, 0, 0, 1258, 1261, 1, 0, 0, 0, 1259, 1257, 1, 0, 0, 0, 1259, 1260, 1, 0, 0, 0, 1260, 1263, 1, 0, 0, 0, 1261, 1259, 1, 0, 0, 0, 1262, 1264, 5, 135, 0, 0, 1263, 1262, 1, 0, 0, 0, 1263, 1264, 1, 0, 0, 0, 1264, 1265, 1, 0, 0, 0, 1265, 1266, 5, 134, 0, 0, 1266, 1267, 3, 142, 71, 10, 1267, 1299, 1, 0, 0, 0, 1268, 1269, 5, 149, 0, 0, 1269, 1270, 3, 48, 24, 0, 1270, 1271, 5, 169, 0, 0, 1271, 1299, 1, 0, 0, 0, 1272, 1273, 5, 149, 0, 0, 1273, 1274, 3, 142, 71, 0, 1274, 1275, 5, 169, 0, 0, 1275, 1299, 1, 0, 0, 0, 1276, 1277, 5, 149, 0, 0, 1277, 1278, 3, 136, 68, 0, 1278, 1279, 5, 169, 0, 0, 1279, 1299, 1, 0, 0, 0, 1280, 1282, 5, 148, 0, 0, 1281, 1283, 3, 136, 68, 0, 1282, 1281, 1, 0, 0, 0, 1282, 1283, 1, 0, 0, 0, 1283, 1284, 1, 0, 0, 0, 1284, 1299, 5, 168, 0, 0, 1285, 1287, 5, 147, 0, 0, 1286, 1288, 3, 40, 20, 0, 1287, 1286, 1, 0, 0, 0, 1287, 1288, 1, 0, 0, 0, 1288, 1289, 1, 0, 0, 0, 1289, 1299, 5, 167, 0, 0, 1290, 1299, 3, 144, 72, 0, 1291, 1292, 3, 200, 100, 0, 1292, 1293, 5, 133, 0, 0, 1293, 1294, 3, 142, 71, 3, 1294, 1299, 1, 0, 0, 0, 1295, 1296, 5, 144, 0, 0, 1296, 1299, 5, 125, 0, 0, 1297, 1299, 3, 164, 82, 0, 1298, 1024, 1, 0, 0, 0, 1298, 1044, 1, 0, 0, 0, 1298, 1051, 1, 0, 0, 0, 1298, 1058, 1, 0, 0, 0, 1298, 1060, 1, 0, 0, 0, 1298, 1062, 1, 0, 0, 0, 1298, 1066, 1, 0, 0, 0, 1298, 1077, 1, 0, 0, 0, 1298, 1079, 1, 0, 0, 0, 1298, 1087, 1, 0, 0, 0, 1298, 1091, 1, 0, 0, 0, 1298, 1121, 1, 0, 0, 0, 1298, 1123, 1, 0, 0, 0, 1298, 1149, 1, 0, 0, 0, 1298, 1151, 1, 0, 0, 0, 1298, 1155, 1, 0, 0, 0, 1298, 1160, 1, 0, 0, 0, 1298, 1166, 1, 0, 0, 0, 1298, 1188, 1, 0, 0, 0, 1298, 1208, 1, 0, 0, 0, 1298, 1216, 1, 0, 0, 0, 1298, 1233, 1, 0, 0, 0, 1298, 1234, 1, 0, 0, 0, 1298, 1235, 1, 0, 0, 0, 1298, 1236, 1, 0, 0, 0, 1298, 1238, 1, 0, 0, 0, 1298, 1243, 1, 0, 0, 0, 1298, 1253, 1, 0, 0, 0, 1298, 1268, 1, 0, 0, 0, 1298, 1272, 1, 0, 0, 0, 1298, 1276, 1, 0, 0, 0, 1298, 1280, 1, 0, 0, 0, 1298, 1285, 1, 0, 0, 0, 1298, 1290, 1, 0, 0, 0, 1298, 1291, 1, 0, 0, 0, 1298, 1295, 1, 0, 0, 0, 1298, 1297, 1, 0, 0, 0, 1299, 1436, 1, 0, 0, 0, 1300, 1304, 10, 23, 0, 0, 1301, 1305, 5, 129, 0, 0, 1302, 1305, 5, 171, 0, 0, 1303, 1305, 5, 158, 0, 0, 1304, 1301, 1, 0, 0, 0, 1304, 1302, 1, 0, 0, 0, 1304, 1303, 1, 0, 0, 0, 1305, 1306, 1, 0, 0, 0, 1306, 1435, 3, 142, 71, 24, 1307, 1311, 10, 22, 0, 0, 1308, 1312, 5, 159, 0, 0, 1309, 1312, 5, 137, 0, 0, 1310, 1312, 5, 136, 0, 0, 1311, 1308, 1, 0, 0, 0, 1311, 1309, 1, 0, 0, 0, 1311, 1310, 1, 0, 0, 0, 1312, 1313, 1, 0, 0, 0, 1313, 1435, 3, 142, 71, 23, 1314, 1339, 10, 21, 0, 0, 1315, 1340, 5, 140, 0, 0, 1316, 1340, 5, 141, 0, 0, 1317, 1340, 5, 153, 0, 0, 1318, 1340, 5, 150, 0, 0, 1319, 1340, 5, 151, 0, 0, 1320, 1340, 5, 142, 0, 0, 1321, 1340, 5, 143, 0, 0, 1322, 1324, 5, 67, 0, 0, 1323, 1322, 1, 0, 0, 0, 1323, 1324, 1, 0, 0, 0, 1324, 1325, 1, 0, 0, 0, 1325, 1327, 5, 47, 0, 0, 1326, 1328, 5, 15, 0, 0, 1327, 1326, 1, 0, 0, 0, 1327, 1328, 1, 0, 0, 0, 1328, 1340, 1, 0, 0, 0, 1329, 1331, 5, 67, 0, 0, 1330, 1329, 1, 0, 0, 0, 1330, 1331, 1, 0, 0, 0, 1331, 1332, 1, 0, 0, 0, 1332, 1340, 7, 12, 0, 0, 1333, 1340, 5, 165, 0, 0, 1334, 1340, 5, 166, 0, 0, 1335, 1340, 5, 155, 0, 0, 1336, 1340, 5, 145, 0, 0, 1337, 1340, 5, 146, 0, 0, 1338, 1340, 5, 154, 0, 0, 1339, 1315, 1, 0, 0, 0, 1339, 1316, 1, 0, 0, 0, 1339, 1317, 1, 0, 0, 0, 1339, 1318, 1, 0, 0, 0, 1339, 1319, 1, 0, 0, 0, 1339, 1320, 1, 0, 0, 0, 1339, 1321, 1, 0, 0, 0, 1339, 1323, 1, 0, 0, 0, 1339, 1330, 1, 0, 0, 0, 1339, 1333, 1, 0, 0, 0, 1339, 1334, 1, 0, 0, 0, 1339, 1335, 1, 0, 0, 0, 1339, 1336, 1, 0, 0, 0, 1339, 1337, 1, 0, 0, 0, 1339, 1338, 1, 0, 0, 0, 1340, 1341, 1, 0, 0, 0, 1341, 1435, 3, 142, 71, 22, 1342, 1343, 10, 19, 0, 0, 1343, 1345, 5, 52, 0, 0, 1344, 1346, 5, 67, 0, 0, 1345, 1344, 1, 0, 0, 0, 1345, 1346, 1, 0, 0, 0, 1346, 1347, 1, 0, 0, 0, 1347, 1348, 5, 25, 0, 0, 1348, 1349, 5, 37, 0, 0, 1349, 1435, 3, 142, 71, 20, 1350, 1351, 10, 18, 0, 0, 1351, 1352, 5, 157, 0, 0, 1352, 1435, 3, 142, 71, 19, 1353, 1354, 10, 16, 0, 0, 1354, 1355, 5, 2, 0, 0, 1355, 1435, 3, 142, 71, 17, 1356, 1357, 10, 15, 0, 0, 1357, 1358, 5, 72, 0, 0, 1358, 1435, 3, 142, 71, 16, 1359, 1361, 10, 14, 0, 0, 1360, 1362, 5, 67, 0, 0, 1361, 1360, 1, 0, 0, 0, 1361, 1362, 1, 0, 0, 0, 1362, 1363, 1, 0, 0, 0, 1363, 1364, 5, 9, 0, 0, 1364, 1365, 3, 142, 71, 0, 1365, 1366, 5, 2, 0, 0, 1366, 1367, 3, 142, 71, 15, 1367, 1435, 1, 0, 0, 0, 1368, 1369, 10, 13, 0, 0, 1369, 1370, 5, 160, 0, 0, 1370, 1371, 3, 142, 71, 0, 1371, 1372, 5, 134, 0, 0, 1372, 1373, 3, 142, 71, 13, 1373, 1435, 1, 0, 0, 0, 1374, 1375, 10, 37, 0, 0, 1375, 1376, 5, 149, 0, 0, 1376, 1377, 3, 48, 24, 0, 1377, 1378, 5, 169, 0, 0, 1378, 1435, 1, 0, 0, 0, 1379, 1380, 10, 36, 0, 0, 1380, 1382, 5, 149, 0, 0, 1381, 1383, 3, 136, 68, 0, 1382, 1381, 1, 0, 0, 0, 1382, 1383, 1, 0, 0, 0, 1383, 1384, 1, 0, 0, 0, 1384, 1435, 5, 169, 0, 0, 1385, 1386, 10, 32, 0, 0, 1386, 1387, 5, 148, 0, 0, 1387, 1388, 3, 142, 71, 0, 1388, 1389, 5, 168, 0, 0, 1389, 1435, 1, 0, 0, 0, 1390, 1391, 10, 31, 0, 0, 1391, 1393, 5, 148, 0, 0, 1392, 1394, 3, 142, 71, 0, 1393, 1392, 1, 0, 0, 0, 1393, 1394, 1, 0, 0, 0, 1394, 1395, 1, 0, 0, 0, 1395, 1397, 5, 134, 0, 0, 1396, 1398, 3, 142, 71, 0, 1397, 1396, 1, 0, 0, 0, 1397, 1398, 1, 0, 0, 0, 1398, 1399, 1, 0, 0, 0, 1399, 1435, 5, 168, 0, 0, 1400, 1401, 10, 30, 0, 0, 1401, 1402, 5, 139, 0, 0, 1402, 1435, 5, 125, 0, 0, 1403, 1404, 10, 29, 0, 0, 1404, 1405, 5, 139, 0, 0, 1405, 1435, 3, 200, 100, 0, 1406, 1407, 10, 28, 0, 0, 1407, 1408, 5, 156, 0, 0, 1408, 1409, 5, 148, 0, 0, 1409, 1410, 3, 142, 71, 0, 1410, 1411, 5, 168, 0, 0, 1411, 1435, 1, 0, 0, 0, 1412, 1413, 10, 27, 0, 0, 1413, 1414, 5, 156, 0, 0, 1414, 1435, 5, 125, 0, 0, 1415, 1416, 10, 26, 0, 0, 1416, 1417, 5, 156, 0, 0, 1417, 1435, 3, 200, 100, 0, 1418, 1419, 10, 25, 0, 0, 1419, 1420, 5, 132, 0, 0, 1420, 1435, 3, 134, 67, 0, 1421, 1422, 10, 20, 0, 0, 1422, 1424, 5, 52, 0, 0, 1423, 1425, 5, 67, 0, 0, 1424, 1423, 1, 0, 0, 0, 1424, 1425, 1, 0, 0, 0, 1425, 1426, 1, 0, 0, 0, 1426, 1435, 5, 68, 0, 0, 1427, 1432, 10, 12, 0, 0, 1428, 1429, 5, 6, 0, 0, 1429, 1433, 3, 200, 100, 0, 1430, 1431, 5, 6, 0, 0, 1431, 1433, 5, 127, 0, 0, 1432, 1428, 1, 0, 0, 0, 1432, 1430, 1, 0, 0, 0, 1433, 1435, 1, 0, 0, 0, 1434, 1300, 1, 0, 0, 0, 1434, 1307, 1, 0, 0, 0, 1434, 1314, 1, 0, 0, 0, 1434, 1342, 1, 0, 0, 0, 1434, 1350, 1, 0, 0, 0, 1434, 1353, 1, 0, 0, 0, 1434, 1356, 1, 0, 0, 0, 1434, 1359, 1, 0, 0, 0, 1434, 1368, 1, 0, 0, 0, 1434, 1374, 1, 0, 0, 0, 1434, 1379, 1, 0, 0, 0, 1434, 1385, 1, 0, 0, 0, 1434, 1390, 1, 0, 0, 0, 1434, 1400, 1, 0, 0, 0, 1434, 1403, 1, 0, 0, 0, 1434, 1406, 1, 0, 0, 0, 1434, 1412, 1, 0, 0, 0, 1434, 1415, 1, 0, 0, 0, 1434, 1418, 1, 0, 0, 0, 1434, 1421, 1, 0, 0, 0, 1434, 1427, 1, 0, 0, 0, 1435, 1438, 1, 0, 0, 0, 1436, 1434, 1, 0, 0, 0, 1436, 1437, 1, 0, 0, 0, 1437, 143, 1, 0, 0, 0, 1438, 1436, 1, 0, 0, 0, 1439, 1440, 5, 149, 0, 0, 1440, 1445, 3, 200, 100, 0, 1441, 1442, 5, 135, 0, 0, 1442, 1444, 3, 200, 100, 0, 1443, 1441, 1, 0, 0, 0, 1444, 1447, 1, 0, 0, 0, 1445, 1443, 1, 0, 0, 0, 1445, 1446, 1, 0, 0, 0, 1446, 1449, 1, 0, 0, 0, 1447, 1445, 1, 0, 0, 0, 1448, 1450, 5, 135, 0, 0, 1449, 1448, 1, 0, 0, 0, 1449, 1450, 1, 0, 0, 0, 1450, 1451, 1, 0, 0, 0, 1451, 1452, 5, 169, 0, 0, 1452, 1467, 1, 0, 0, 0, 1453, 1458, 3, 200, 100, 0, 1454, 1455, 5, 135, 0, 0, 1455, 1457, 3, 200, 100, 0, 1456, 1454, 1, 0, 0, 0, 1457, 1460, 1, 0, 0, 0, 1458, 1456, 1, 0, 0, 0, 1458, 1459, 1, 0, 0, 0, 1459, 1462, 1, 0, 0, 0, 1460, 1458, 1, 0, 0, 0, 1461, 1463, 5, 135, 0, 0, 1462, 1461, 1, 0, 0, 0, 1462, 1463, 1, 0, 0, 0, 1463, 1467, 1, 0, 0, 0, 1464, 1465, 5, 149, 0, 0, 1465, 1467, 5, 169, 0, 0, 1466, 1439, 1, 0, 0, 0, 1466, 1453, 1, 0, 0, 0, 1466, 1464, 1, 0, 0, 0, 1467, 1468, 1, 0, 0, 0, 1468, 1471, 5, 128, 0, 0, 1469, 1472, 3, 142, 71, 0, 1470, 1472, 3, 36, 18, 0, 1471, 1469, 1, 0, 0, 0, 1471, 1470, 1, 0, 0, 0, 1472, 1489, 1, 0, 0, 0, 1473, 1474, 5, 55, 0, 0, 1474, 1479, 3, 200, 100, 0, 1475, 1476, 5, 135, 0, 0, 1476, 1478, 3, 200, 100, 0, 1477, 1475, 1, 0, 0, 0, 1478, 1481, 1, 0, 0, 0, 1479, 1477, 1, 0, 0, 0, 1479, 1480, 1, 0, 0, 0, 1480, 1483, 1, 0, 0, 0, 1481, 1479, 1, 0, 0, 0, 1482, 1484, 5, 135, 0, 0, 1483, 1482, 1, 0, 0, 0, 1483, 1484, 1, 0, 0, 0, 1484, 1485, 1, 0, 0, 0, 1485, 1486, 5, 134, 0, 0, 1486, 1487, 3, 142, 71, 0, 1487, 1489, 1, 0, 0, 0, 1488, 1466, 1, 0, 0, 0, 1488, 1473, 1, 0, 0, 0, 1489, 145, 1, 0, 0, 0, 1490, 1495, 3, 148, 74, 0, 1491, 1492, 5, 135, 0, 0, 1492, 1494, 3, 148, 74, 0, 1493, 1491, 1, 0, 0, 0, 1494, 1497, 1, 0, 0, 0, 1495, 1493, 1, 0, 0, 0, 1495, 1496, 1, 0, 0, 0, 1496, 147, 1, 0, 0, 0, 1497, 1495, 1, 0, 0, 0, 1498, 1499, 3, 142, 71, 0, 1499, 1500, 5, 6, 0, 0, 1500, 1501, 3, 200, 100, 0, 1501, 149, 1, 0, 0, 0, 1502, 1509, 3, 154, 77, 0, 1503, 1509, 3, 152, 76, 0, 1504, 1505, 5, 147, 0, 0, 1505, 1506, 3, 142, 71, 0, 1506, 1507, 5, 167, 0, 0, 1507, 1509, 1, 0, 0, 0, 1508, 1502, 1, 0, 0, 0, 1508, 1503, 1, 0, 0, 0, 1508, 1504, 1, 0, 0, 0, 1509, 151, 1, 0, 0, 0, 1510, 1511, 5, 183, 0, 0, 1511, 153, 1, 0, 0, 0, 1512, 1513, 5, 151, 0, 0, 1513, 1517, 3, 200, 100, 0, 1514, 1516, 3, 156, 78, 0, 1515, 1514, 1, 0, 0, 0, 1516, 1519, 1, 0, 0, 0, 1517, 1515, 1, 0, 0, 0, 1517, 1518, 1, 0, 0, 0, 1518, 1520, 1, 0, 0, 0, 1519, 1517, 1, 0, 0, 0, 1520, 1521, 5, 172, 0, 0, 1521, 1542, 1, 0, 0, 0, 1522, 1523, 5, 151, 0, 0, 1523, 1527, 3, 200, 100, 0, 1524, 1526, 3, 156, 78, 0, 1525, 1524, 1, 0, 0, 0, 1526, 1529, 1, 0, 0, 0, 1527, 1525, 1, 0, 0, 0, 1527, 1528, 1, 0, 0, 0, 1528, 1530, 1, 0, 0, 0, 1529, 1527, 1, 0, 0, 0, 1530, 1534, 5, 143, 0, 0, 1531, 1533, 3, 150, 75, 0, 1532, 1531, 1, 0, 0, 0, 1533, 1536, 1, 0, 0, 0, 1534, 1532, 1, 0, 0, 0, 1534, 1535, 1, 0, 0, 0, 1535, 1537, 1, 0, 0, 0, 1536, 1534, 1, 0, 0, 0, 1537, 1538, 5, 152, 0, 0, 1538, 1539, 3, 200, 100, 0, 1539, 1540, 5, 143, 0, 0, 1540, 1542, 1, 0, 0, 0, 1541, 1512, 1, 0, 0, 0, 1541, 1522, 1, 0, 0, 0, 1542, 155, 1, 0, 0, 0, 1543, 1544, 3, 200, 100, 0, 1544, 1545, 5, 141, 0, 0, 1545, 1546, 3, 206, 103, 0, 1546, 1555, 1, 0, 0, 0, 1547, 1548, 3, 200, 100, 0, 1548, 1549, 5, 141, 0, 0, 1549, 1550, 5, 147, 0, 0, 1550, 1551, 3, 142, 71, 0, 1551, 1552, 5, 167, 0, 0, 1552, 1555, 1, 0, 0, 0, 1553, 1555, 3, 200, 100, 0, 1554, 1543, 1, 0, 0, 0, 1554, 1547, 1, 0, 0, 0, 1554, 1553, 1, 0, 0, 0, 1555, 157, 1, 0, 0, 0, 1556, 1561, 3, 160, 80, 0, 1557, 1558, 5, 135, 0, 0, 1558, 1560, 3, 160, 80, 0, 1559, 1557, 1, 0, 0, 0, 1560, 1563, 1, 0, 0, 0, 1561, 1559, 1, 0, 0, 0, 1561, 1562, 1, 0, 0, 0, 1562, 1565, 1, 0, 0, 0, 1563, 1561, 1, 0, 0, 0, 1564, 1566, 5, 135, 0, 0, 1565, 1564, 1, 0, 0, 0, 1565, 1566, 1, 0, 0, 0, 1566, 159, 1, 0, 0, 0, 1567, 1569, 3, 200, 100, 0, 1568, 1570, 3, 162, 81, 0, 1569, 1568, 1, 0, 0, 0, 1569, 1570, 1, 0, 0, 0, 1570, 1574, 1, 0, 0, 0, 1571, 1572, 5, 111, 0, 0, 1572, 1573, 5, 54, 0, 0, 1573, 1575, 3, 162, 81, 0, 1574, 1571, 1, 0, 0, 0, 1574, 1575, 1, 0, 0, 0, 1575, 1576, 1, 0, 0, 0, 1576, 1581, 5, 6, 0, 0, 1577, 1579, 5, 67, 0, 0, 1578, 1577, 1, 0, 0, 0, 1578, 1579, 1, 0, 0, 0, 1579, 1580, 1, 0, 0, 0, 1580, 1582, 5, 62, 0, 0, 1581, 1578, 1, 0, 0, 0, 1581, 1582, 1, 0, 0, 0, 1582, 1583, 1, 0, 0, 0, 1583, 1584, 5, 149, 0, 0, 1584, 1585, 3, 48, 24, 0, 1585, 1586, 5, 169, 0, 0, 1586, 1592, 1, 0, 0, 0, 1587, 1588, 3, 142, 71, 0, 1588, 1589, 5, 6, 0, 0, 1589, 1590, 3, 200, 100, 0, 1590, 1592, 1, 0, 0, 0, 1591, 1567, 1, 0, 0, 0, 1591, 1587, 1, 0, 0, 0, 1592, 161, 1, 0, 0, 0, 1593, 1594, 5, 149, 0, 0, 1594, 1599, 3, 200, 100, 0, 1595, 1596, 5, 135, 0, 0, 1596, 1598, 3, 200, 100, 0, 1597, 1595, 1, 0, 0, 0, 1598, 1601, 1, 0, 0, 0, 1599, 1597, 1, 0, 0, 0, 1599, 1600, 1, 0, 0, 0, 1600, 1602, 1, 0, 0, 0, 1601, 1599, 1, 0, 0, 0, 1602, 1603, 5, 169, 0, 0, 1603, 163, 1, 0, 0, 0, 1604, 1612, 3, 204, 102, 0, 1605, 1606, 3, 180, 90, 0, 1606, 1607, 5, 139, 0, 0, 1607, 1609, 1, 0, 0, 0, 1608, 1605, 1, 0, 0, 0, 1608, 1609, 1, 0, 0, 0, 1609, 1610, 1, 0, 0, 0, 1610, 1612, 3, 166, 83, 0, 1611, 1604, 1, 0, 0, 0, 1611, 1608, 1, 0, 0, 0, 1612, 165, 1, 0, 0, 0, 1613, 1618, 3, 200, 100, 0, 1614, 1615, 5, 139, 0, 0, 1615, 1617, 3, 200, 100, 0, 1616, 1614, 1, 0, 0, 0, 1617, 1620, 1, 0, 0, 0, 1618, 1616, 1, 0, 0, 0, 1618, 1619, 1, 0, 0, 0, 1619, 167, 1, 0, 0, 0, 1620, 1618, 1, 0, 0, 0, 1621, 1622, 6, 84, -1, 0, 1622, 1635, 3, 180, 90, 0, 1623, 1635, 3, 178, 89, 0, 1624, 1625, 5, 149, 0, 0, 1625, 1626, 3, 48, 24, 0, 1626, 1627, 5, 169, 0, 0, 1627, 1635, 1, 0, 0, 0, 1628, 1629, 5, 149, 0, 0, 1629, 1630, 3, 90, 45, 0, 1630, 1631, 5, 169, 0, 0, 1631, 1635, 1, 0, 0, 0, 1632, 1635, 3, 154, 77, 0, 1633, 1635, 3, 204, 102, 0, 1634, 1621, 1, 0, 0, 0, 1634, 1623, 1, 0, 0, 0, 1634, 1624, 1, 0, 0, 0, 1634, 1628, 1, 0, 0, 0, 1634, 1632, 1, 0, 0, 0, 1634, 1633, 1, 0, 0, 0, 1635, 1653, 1, 0, 0, 0, 1636, 1637, 10, 4, 0, 0, 1637, 1638, 5, 110, 0, 0, 1638, 1639, 5, 149, 0, 0, 1639, 1640, 3, 170, 85, 0, 1640, 1641, 5, 169, 0, 0, 1641, 1652, 1, 0, 0, 0, 1642, 1646, 10, 3, 0, 0, 1643, 1647, 3, 198, 99, 0, 1644, 1645, 5, 6, 0, 0, 1645, 1647, 3, 200, 100, 0, 1646, 1643, 1, 0, 0, 0, 1646, 1644, 1, 0, 0, 0, 1647, 1649, 1, 0, 0, 0, 1648, 1650, 3, 176, 88, 0, 1649, 1648, 1, 0, 0, 0, 1649, 1650, 1, 0, 0, 0, 1650, 1652, 1, 0, 0, 0, 1651, 1636, 1, 0, 0, 0, 1651, 1642, 1, 0, 0, 0, 1652, 1655, 1, 0, 0, 0, 1653, 1651, 1, 0, 0, 0, 1653, 1654, 1, 0, 0, 0, 1654, 169, 1, 0, 0, 0, 1655, 1653, 1, 0, 0, 0, 1656, 1661, 3, 172, 86, 0, 1657, 1658, 5, 135, 0, 0, 1658, 1660, 3, 172, 86, 0, 1659, 1657, 1, 0, 0, 0, 1660, 1663, 1, 0, 0, 0, 1661, 1659, 1, 0, 0, 0, 1661, 1662, 1, 0, 0, 0, 1662, 1665, 1, 0, 0, 0, 1663, 1661, 1, 0, 0, 0, 1664, 1666, 5, 135, 0, 0, 1665, 1664, 1, 0, 0, 0, 1665, 1666, 1, 0, 0, 0, 1666, 171, 1, 0, 0, 0, 1667, 1668, 3, 174, 87, 0, 1668, 1669, 5, 36, 0, 0, 1669, 1670, 3, 174, 87, 0, 1670, 1671, 5, 47, 0, 0, 1671, 1672, 5, 149, 0, 0, 1672, 1673, 3, 136, 68, 0, 1673, 1674, 5, 169, 0, 0, 1674, 173, 1, 0, 0, 0, 1675, 1676, 5, 149, 0, 0, 1676, 1677, 3, 136, 68, 0, 1677, 1678, 5, 169, 0, 0, 1678, 1681, 1, 0, 0, 0, 1679, 1681, 3, 142, 71, 0, 1680, 1675, 1, 0, 0, 0, 1680, 1679, 1, 0, 0, 0, 1681, 175, 1, 0, 0, 0, 1682, 1683, 5, 149, 0, 0, 1683, 1688, 3, 200, 100, 0, 1684, 1685, 5, 135, 0, 0, 1685, 1687, 3, 200, 100, 0, 1686, 1684, 1, 0, 0, 0, 1687, 1690, 1, 0, 0, 0, 1688, 1686, 1, 0, 0, 0, 1688, 1689, 1, 0, 0, 0, 1689, 1691, 1, 0, 0, 0, 1690, 1688, 1, 0, 0, 0, 1691, 1692, 5, 169, 0, 0, 1692, 177, 1, 0, 0, 0, 1693, 1694, 3, 200, 100, 0, 1694, 1696, 5, 149, 0, 0, 1695, 1697, 3, 182, 91, 0, 1696, 1695, 1, 0, 0, 0, 1696, 1697, 1, 0, 0, 0, 1697, 1698, 1, 0, 0, 0, 1698, 1699, 5, 169, 0, 0, 1699, 179, 1, 0, 0, 0, 1700, 1701, 3, 184, 92, 0, 1701, 1702, 5, 139, 0, 0, 1702, 1704, 1, 0, 0, 0, 1703, 1700, 1, 0, 0, 0, 1703, 1704, 1, 0, 0, 0, 1704, 1705, 1, 0, 0, 0, 1705, 1706, 3, 166, 83, 0, 1706, 181, 1, 0, 0, 0, 1707, 1712, 3, 142, 71, 0, 1708, 1709, 5, 135, 0, 0, 1709, 1711, 3, 142, 71, 0, 1710, 1708, 1, 0, 0, 0, 1711, 1714, 1, 0, 0, 0, 1712, 1710, 1, 0, 0, 0, 1712, 1713, 1, 0, 0, 0, 1713, 1716, 1, 0, 0, 0, 1714, 1712, 1, 0, 0, 0, 1715, 1717, 5, 135, 0, 0, 1716, 1715, 1, 0, 0, 0, 1716, 1717, 1, 0, 0, 0, 1717, 183, 1, 0, 0, 0, 1718, 1719, 3, 200, 100, 0, 1719, 185, 1, 0, 0, 0, 1720, 1729, 5, 123, 0, 0, 1721, 1722, 5, 139, 0, 0, 1722, 1729, 7, 13, 0, 0, 1723, 1724, 5, 125, 0, 0, 1724, 1726, 5, 139, 0, 0, 1725, 1727, 7, 13, 0, 0, 1726, 1725, 1, 0, 0, 0, 1726, 1727, 1, 0, 0, 0, 1727, 1729, 1, 0, 0, 0, 1728, 1720, 1, 0, 0, 0, 1728, 1721, 1, 0, 0, 0, 1728, 1723, 1, 0, 0, 0, 1729, 187, 1, 0, 0, 0, 1730, 1732, 7, 14, 0, 0, 1731, 1730, 1, 0, 0, 0, 1731, 1732, 1, 0, 0, 0, 1732, 1739, 1, 0, 0, 0, 1733, 1740, 3, 186, 93, 0, 1734, 1740, 5, 124, 0, 0, 1735, 1740, 5, 125, 0, 0, 1736, 1740, 5, 126, 0, 0, 1737, 1740, 5, 48, 0, 0, 1738, 1740, 5, 66, 0, 0, 1739, 1733, 1, 0, 0, 0, 1739, 1734, 1, 0, 0, 0, 1739, 1735, 1, 0, 0, 0, 1739, 1736, 1, 0, 0, 0, 1739, 1737, 1, 0, 0, 0, 1739, 1738, 1, 0, 0, 0, 1740, 189, 1, 0, 0, 0, 1741, 1745, 3, 188, 94, 0, 1742, 1745, 5, 127, 0, 0, 1743, 1745, 5, 68, 0, 0, 1744, 1741, 1, 0, 0, 0, 1744, 1742, 1, 0, 0, 0, 1744, 1743, 1, 0, 0, 0, 1745, 191, 1, 0, 0, 0, 1746, 1747, 7, 15, 0, 0, 1747, 193, 1, 0, 0, 0, 1748, 1749, 7, 16, 0, 0, 1749, 195, 1, 0, 0, 0, 1750, 1751, 7, 17, 0, 0, 1751, 197, 1, 0, 0, 0, 1752, 1755, 5, 122, 0, 0, 1753, 1755, 3, 196, 98, 0, 1754, 1752, 1, 0, 0, 0, 1754, 1753, 1, 0, 0, 0, 1755, 199, 1, 0, 0, 0, 1756, 1760, 5, 122, 0, 0, 1757, 1760, 3, 192, 96, 0, 1758, 1760, 3, 194, 97, 0, 1759, 1756, 1, 0, 0, 0, 1759, 1757, 1, 0, 0, 0, 1759, 1758, 1, 0, 0, 0, 1760, 201, 1, 0, 0, 0, 1761, 1762, 3, 206, 103, 0, 1762, 1763, 5, 141, 0, 0, 1763, 1764, 3, 188, 94, 0, 1764, 203, 1, 0, 0, 0, 1765, 1766, 5, 147, 0, 0, 1766, 1767, 3, 142, 71, 0, 1767, 1768, 5, 167, 0, 0, 1768, 205, 1, 0, 0, 0, 1769, 1772, 5, 127, 0, 0, 1770, 1772, 3, 208, 104, 0, 1771, 1769, 1, 0, 0, 0, 1771, 1770, 1, 0, 0, 0, 1772, 207, 1, 0, 0, 0, 1773, 1777, 5, 162, 0, 0, 1774, 1776, 3, 210, 105, 0, 1775, 1774, 1, 0, 0, 0, 1776, 1779, 1, 0, 0, 0, 1777, 1775, 1, 0, 0, 0, 1777, 1778, 1, 0, 0, 0, 1778, 1780, 1, 0, 0, 0, 1779, 1777, 1, 0, 0, 0, 1780, 1781, 5, 164, 0, 0, 1781, 209, 1, 0, 0, 0, 1782, 1783, 5, 178, 0, 0, 1783, 1784, 3, 142, 71, 0, 1784, 1785, 5, 167, 0, 0, 1785, 1788, 1, 0, 0, 0, 1786, 1788, 5, 177, 0, 0, 1787, 1782, 1, 0, 0, 0, 1787, 1786, 1, 0, 0, 0, 1788, 211, 1, 0, 0, 0, 1789, 1793, 5, 163, 0, 0, 1790, 1792, 3, 214, 107, 0, 1791, 1790, 1, 0, 0, 0, 1792, 1795, 1, 0, 0, 0, 1793, 1791, 1, 0, 0, 0, 1793, 1794, 1, 0, 0, 0, 1794, 1796, 1, 0, 0, 0, 1795, 1793, 1, 0, 0, 0, 1796, 1797, 5, 0, 0, 1, 1797, 213, 1, 0, 0, 0, 1798, 1799, 5, 180, 0, 0, 1799, 1800, 3, 142, 71, 0, 1800, 1801, 5, 167, 0, 0, 1801, 1804, 1, 0, 0, 0, 1802, 1804, 5, 179, 0, 0, 1803, 1798, 1, 0, 0, 0, 1803, 1802, 1, 0, 0, 0, 1804, 215, 1, 0, 0, 0, 229, 219, 226, 234, 241, 245, 259, 263, 266, 270, 273, 280, 284, 293, 298, 307, 315, 322, 326, 332, 337, 345, 352, 358, 369, 377, 391, 395, 400, 403, 413, 419, 424, 430, 436, 441, 447, 453, 458, 460, 468, 472, 477, 481, 485, 490, 494, 501, 504, 508, 511, 515, 518, 521, 524, 527, 530, 533, 537, 541, 544, 547, 551, 554, 557, 560, 564, 567, 571, 579, 585, 606, 629, 636, 641, 667, 671, 675, 680, 684, 689, 703, 712, 720, 723, 729, 737, 743, 745, 749, 754, 759, 762, 766, 770, 773, 775, 778, 782, 786, 789, 791, 793, 798, 809, 814, 818, 824, 829, 836, 841, 845, 849, 855, 857, 864, 872, 875, 878, 903, 917, 932, 936, 947, 951, 962, 966, 973, 981, 984, 990, 993, 1000, 1004, 1011, 1015, 1022, 1027, 1036, 1040, 1073, 1121, 1149, 1169, 1175, 1178, 1181, 1191, 1197, 1200, 1203, 1211, 1219, 1222, 1226, 1229, 1243, 1251, 1259, 1263, 1282, 1287, 1298, 1304, 1311, 1323, 1327, 1330, 1339, 1345, 1361, 1382, 1393, 1397, 1424, 1432, 1434, 1436, 1445, 1449, 1458, 1462, 1466, 1471, 1479, 1483, 1488, 1495, 1508, 1517, 1527, 1534, 1541, 1554, 1561, 1565, 1569, 1574, 1578, 1581, 1591, 1599, 1608, 1611, 1618, 1634, 1646, 1649, 1651, 1653, 1661, 1665, 1680, 1688, 1696, 1703, 1712, 1716, 1726, 1728, 1731, 1739, 1744, 1754, 1759, 1771, 1777, 1787, 1793, 1803] \ No newline at end of file +[4, 1, 190, 1988, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 1, 0, 5, 0, 222, 8, 0, 10, 0, 12, 0, 225, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 231, 8, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 239, 8, 3, 1, 4, 1, 4, 1, 4, 5, 4, 244, 8, 4, 10, 4, 12, 4, 247, 9, 4, 1, 4, 3, 4, 250, 8, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 264, 8, 5, 1, 6, 1, 6, 3, 6, 268, 8, 6, 1, 6, 3, 6, 271, 8, 6, 1, 7, 1, 7, 3, 7, 275, 8, 7, 1, 7, 3, 7, 278, 8, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 285, 8, 8, 1, 8, 1, 8, 3, 8, 289, 8, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 5, 9, 296, 8, 9, 10, 9, 12, 9, 299, 9, 9, 1, 9, 1, 9, 3, 9, 303, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 312, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 320, 8, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 327, 8, 12, 1, 12, 1, 12, 3, 12, 331, 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 337, 8, 12, 1, 12, 1, 12, 1, 12, 3, 12, 342, 8, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 350, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 357, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 363, 8, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 3, 16, 374, 8, 16, 1, 17, 1, 17, 1, 18, 1, 18, 5, 18, 380, 8, 18, 10, 18, 12, 18, 383, 9, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 5, 20, 394, 8, 20, 10, 20, 12, 20, 397, 9, 20, 1, 20, 3, 20, 400, 8, 20, 1, 21, 1, 21, 1, 21, 3, 21, 405, 8, 21, 1, 21, 3, 21, 408, 8, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 423, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 429, 8, 23, 1, 23, 1, 23, 1, 23, 3, 23, 434, 8, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 440, 8, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 446, 8, 23, 1, 23, 1, 23, 1, 23, 3, 23, 451, 8, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 457, 8, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 463, 8, 23, 1, 23, 1, 23, 1, 23, 3, 23, 468, 8, 23, 3, 23, 470, 8, 23, 1, 23, 1, 23, 1, 24, 1, 24, 5, 24, 476, 8, 24, 10, 24, 12, 24, 479, 9, 24, 1, 24, 3, 24, 482, 8, 24, 1, 24, 3, 24, 485, 8, 24, 1, 25, 1, 25, 1, 25, 3, 25, 490, 8, 25, 1, 25, 1, 25, 3, 25, 494, 8, 25, 1, 25, 1, 25, 3, 25, 498, 8, 25, 1, 25, 1, 25, 1, 25, 3, 25, 503, 8, 25, 1, 25, 1, 25, 3, 25, 507, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 514, 8, 25, 1, 26, 3, 26, 517, 8, 26, 1, 26, 1, 26, 3, 26, 521, 8, 26, 1, 26, 3, 26, 524, 8, 26, 1, 26, 1, 26, 3, 26, 528, 8, 26, 1, 26, 3, 26, 531, 8, 26, 1, 26, 3, 26, 534, 8, 26, 1, 26, 3, 26, 537, 8, 26, 1, 26, 3, 26, 540, 8, 26, 1, 26, 3, 26, 543, 8, 26, 1, 26, 3, 26, 546, 8, 26, 1, 26, 1, 26, 3, 26, 550, 8, 26, 1, 26, 1, 26, 3, 26, 554, 8, 26, 1, 26, 3, 26, 557, 8, 26, 1, 26, 3, 26, 560, 8, 26, 1, 26, 1, 26, 3, 26, 564, 8, 26, 1, 26, 3, 26, 567, 8, 26, 1, 26, 3, 26, 570, 8, 26, 1, 26, 3, 26, 573, 8, 26, 1, 26, 1, 26, 3, 26, 577, 8, 26, 1, 26, 3, 26, 580, 8, 26, 1, 27, 1, 27, 3, 27, 584, 8, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 592, 8, 28, 1, 29, 1, 29, 1, 29, 1, 30, 3, 30, 598, 8, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 5, 31, 617, 8, 31, 10, 31, 12, 31, 620, 9, 31, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 643, 8, 34, 1, 35, 1, 35, 1, 35, 5, 35, 648, 8, 35, 10, 35, 12, 35, 651, 9, 35, 1, 36, 1, 36, 3, 36, 655, 8, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 3, 42, 681, 8, 42, 1, 42, 1, 42, 3, 42, 685, 8, 42, 1, 42, 1, 42, 3, 42, 689, 8, 42, 1, 42, 1, 42, 1, 42, 3, 42, 694, 8, 42, 1, 42, 1, 42, 3, 42, 698, 8, 42, 1, 42, 1, 42, 1, 42, 3, 42, 703, 8, 42, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 5, 45, 715, 8, 45, 10, 45, 12, 45, 718, 9, 45, 1, 46, 1, 46, 1, 46, 1, 46, 5, 46, 724, 8, 46, 10, 46, 12, 46, 727, 9, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 3, 47, 734, 8, 47, 1, 47, 3, 47, 737, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 743, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 751, 8, 47, 1, 47, 3, 47, 754, 8, 47, 1, 47, 1, 47, 1, 47, 3, 47, 759, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 766, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 776, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 784, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 5, 47, 790, 8, 47, 10, 47, 12, 47, 793, 9, 47, 1, 48, 3, 48, 796, 8, 48, 1, 48, 1, 48, 1, 48, 3, 48, 801, 8, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 3, 48, 808, 8, 48, 1, 48, 3, 48, 811, 8, 48, 1, 48, 1, 48, 3, 48, 815, 8, 48, 1, 48, 1, 48, 3, 48, 819, 8, 48, 1, 48, 3, 48, 822, 8, 48, 1, 48, 1, 48, 1, 48, 1, 48, 3, 48, 828, 8, 48, 3, 48, 830, 8, 48, 1, 48, 3, 48, 833, 8, 48, 1, 48, 1, 48, 3, 48, 837, 8, 48, 1, 48, 1, 48, 3, 48, 841, 8, 48, 1, 48, 3, 48, 844, 8, 48, 3, 48, 846, 8, 48, 3, 48, 848, 8, 48, 1, 49, 1, 49, 1, 49, 3, 49, 853, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 864, 8, 50, 1, 51, 1, 51, 1, 51, 3, 51, 869, 8, 51, 1, 51, 1, 51, 3, 51, 873, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 879, 8, 51, 1, 52, 1, 52, 1, 52, 3, 52, 884, 8, 52, 1, 53, 1, 53, 1, 53, 5, 53, 889, 8, 53, 10, 53, 12, 53, 892, 9, 53, 1, 54, 1, 54, 3, 54, 896, 8, 54, 1, 54, 1, 54, 3, 54, 900, 8, 54, 1, 54, 1, 54, 3, 54, 904, 8, 54, 1, 55, 1, 55, 1, 55, 1, 55, 3, 55, 910, 8, 55, 3, 55, 912, 8, 55, 1, 56, 1, 56, 1, 56, 5, 56, 917, 8, 56, 10, 56, 12, 56, 920, 9, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 3, 58, 927, 8, 58, 1, 58, 3, 58, 930, 8, 58, 1, 58, 3, 58, 933, 8, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 958, 8, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 3, 64, 972, 8, 64, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 5, 66, 986, 8, 66, 10, 66, 12, 66, 989, 9, 66, 1, 66, 3, 66, 992, 8, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 5, 66, 1001, 8, 66, 10, 66, 12, 66, 1004, 9, 66, 1, 66, 3, 66, 1007, 8, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 5, 66, 1016, 8, 66, 10, 66, 12, 66, 1019, 9, 66, 1, 66, 3, 66, 1022, 8, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 1029, 8, 66, 1, 66, 1, 66, 1, 66, 1, 66, 4, 66, 1035, 8, 66, 11, 66, 12, 66, 1036, 1, 66, 3, 66, 1040, 8, 66, 1, 66, 1, 66, 1, 66, 3, 66, 1045, 8, 66, 1, 66, 5, 66, 1048, 8, 66, 10, 66, 12, 66, 1051, 9, 66, 1, 67, 1, 67, 4, 67, 1055, 8, 67, 11, 67, 12, 67, 1056, 1, 67, 3, 67, 1060, 8, 67, 1, 68, 1, 68, 1, 68, 5, 68, 1065, 8, 68, 10, 68, 12, 68, 1068, 9, 68, 1, 68, 3, 68, 1071, 8, 68, 1, 69, 1, 69, 1, 69, 5, 69, 1076, 8, 69, 10, 69, 12, 69, 1079, 9, 69, 1, 69, 3, 69, 1082, 8, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 3, 70, 1089, 8, 70, 1, 71, 1, 71, 1, 71, 3, 71, 1094, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 4, 71, 1101, 8, 71, 11, 71, 12, 71, 1102, 1, 71, 1, 71, 3, 71, 1107, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1140, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1188, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1216, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1280, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1288, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1294, 8, 71, 1, 71, 3, 71, 1297, 8, 71, 1, 71, 3, 71, 1300, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1308, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1318, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1324, 8, 71, 1, 71, 3, 71, 1327, 8, 71, 1, 71, 3, 71, 1330, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1338, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1346, 8, 71, 1, 71, 3, 71, 1349, 8, 71, 1, 71, 1, 71, 3, 71, 1353, 8, 71, 1, 71, 3, 71, 1356, 8, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1361, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1370, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1382, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1390, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 5, 71, 1396, 8, 71, 10, 71, 12, 71, 1399, 9, 71, 1, 71, 3, 71, 1402, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1420, 8, 71, 1, 71, 1, 71, 3, 71, 1424, 8, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1429, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1440, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1446, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1453, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1465, 8, 71, 1, 71, 1, 71, 3, 71, 1469, 8, 71, 1, 71, 3, 71, 1472, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1481, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1487, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1503, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1524, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1535, 8, 71, 1, 71, 1, 71, 3, 71, 1539, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1569, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1577, 8, 71, 5, 71, 1579, 8, 71, 10, 71, 12, 71, 1582, 9, 71, 1, 72, 1, 72, 1, 72, 1, 72, 5, 72, 1588, 8, 72, 10, 72, 12, 72, 1591, 9, 72, 1, 72, 3, 72, 1594, 8, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 5, 72, 1601, 8, 72, 10, 72, 12, 72, 1604, 9, 72, 1, 72, 3, 72, 1607, 8, 72, 1, 72, 1, 72, 3, 72, 1611, 8, 72, 1, 72, 1, 72, 1, 72, 3, 72, 1616, 8, 72, 1, 72, 1, 72, 1, 72, 1, 72, 5, 72, 1622, 8, 72, 10, 72, 12, 72, 1625, 9, 72, 1, 72, 3, 72, 1628, 8, 72, 1, 72, 1, 72, 1, 72, 3, 72, 1633, 8, 72, 1, 73, 1, 73, 1, 73, 5, 73, 1638, 8, 73, 10, 73, 12, 73, 1641, 9, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 3, 75, 1653, 8, 75, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 5, 77, 1660, 8, 77, 10, 77, 12, 77, 1663, 9, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 5, 77, 1670, 8, 77, 10, 77, 12, 77, 1673, 9, 77, 1, 77, 1, 77, 5, 77, 1677, 8, 77, 10, 77, 12, 77, 1680, 9, 77, 1, 77, 1, 77, 1, 77, 1, 77, 3, 77, 1686, 8, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1699, 8, 78, 1, 79, 1, 79, 1, 79, 5, 79, 1704, 8, 79, 10, 79, 12, 79, 1707, 9, 79, 1, 79, 3, 79, 1710, 8, 79, 1, 80, 1, 80, 3, 80, 1714, 8, 80, 1, 80, 1, 80, 1, 80, 3, 80, 1719, 8, 80, 1, 80, 1, 80, 3, 80, 1723, 8, 80, 1, 80, 3, 80, 1726, 8, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 3, 80, 1736, 8, 80, 1, 81, 1, 81, 1, 81, 1, 81, 5, 81, 1742, 8, 81, 10, 81, 12, 81, 1745, 9, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 3, 82, 1753, 8, 82, 1, 82, 3, 82, 1756, 8, 82, 1, 83, 1, 83, 1, 83, 5, 83, 1761, 8, 83, 10, 83, 12, 83, 1764, 9, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 3, 84, 1779, 8, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 3, 84, 1789, 8, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 3, 84, 1797, 8, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 3, 84, 1807, 8, 84, 1, 84, 3, 84, 1810, 8, 84, 5, 84, 1812, 8, 84, 10, 84, 12, 84, 1815, 9, 84, 1, 85, 1, 85, 4, 85, 1819, 8, 85, 11, 85, 12, 85, 1820, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 5, 87, 1832, 8, 87, 10, 87, 12, 87, 1835, 9, 87, 1, 87, 3, 87, 1838, 8, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 5, 88, 1853, 8, 88, 10, 88, 12, 88, 1856, 9, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 3, 89, 1863, 8, 89, 1, 90, 1, 90, 1, 90, 1, 90, 5, 90, 1869, 8, 90, 10, 90, 12, 90, 1872, 9, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 3, 91, 1879, 8, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 3, 92, 1886, 8, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 5, 93, 1893, 8, 93, 10, 93, 12, 93, 1896, 9, 93, 1, 93, 3, 93, 1899, 8, 93, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 3, 95, 1909, 8, 95, 3, 95, 1911, 8, 95, 1, 96, 3, 96, 1914, 8, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 3, 96, 1922, 8, 96, 1, 97, 1, 97, 1, 97, 3, 97, 1927, 8, 97, 1, 98, 1, 98, 1, 99, 1, 99, 1, 100, 1, 100, 1, 101, 1, 101, 3, 101, 1937, 8, 101, 1, 102, 1, 102, 1, 102, 3, 102, 1942, 8, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 3, 105, 1954, 8, 105, 1, 106, 1, 106, 5, 106, 1958, 8, 106, 10, 106, 12, 106, 1961, 9, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 3, 107, 1970, 8, 107, 1, 108, 1, 108, 5, 108, 1974, 8, 108, 10, 108, 12, 108, 1977, 9, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 3, 109, 1986, 8, 109, 1, 109, 0, 4, 94, 132, 142, 168, 110, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 0, 18, 2, 0, 35, 35, 40, 40, 2, 0, 19, 19, 92, 92, 2, 0, 52, 52, 61, 61, 3, 0, 1, 1, 4, 4, 8, 8, 2, 0, 3, 3, 98, 98, 4, 0, 1, 1, 3, 4, 8, 8, 98, 98, 2, 0, 61, 61, 91, 91, 2, 0, 74, 74, 141, 141, 2, 0, 7, 7, 23, 24, 2, 0, 34, 34, 59, 59, 2, 0, 87, 87, 94, 94, 3, 0, 10, 10, 60, 60, 109, 109, 2, 0, 47, 47, 63, 63, 1, 0, 130, 131, 2, 0, 143, 143, 165, 165, 7, 0, 22, 22, 44, 44, 66, 67, 86, 86, 96, 96, 119, 119, 126, 126, 20, 0, 1, 13, 15, 21, 23, 27, 29, 32, 34, 34, 36, 39, 41, 43, 45, 50, 52, 52, 54, 61, 63, 64, 68, 69, 71, 71, 73, 85, 87, 95, 97, 102, 104, 111, 113, 118, 120, 121, 123, 124, 4, 0, 21, 21, 34, 34, 45, 45, 57, 57, 2257, 0, 223, 1, 0, 0, 0, 2, 230, 1, 0, 0, 0, 4, 232, 1, 0, 0, 0, 6, 234, 1, 0, 0, 0, 8, 240, 1, 0, 0, 0, 10, 263, 1, 0, 0, 0, 12, 265, 1, 0, 0, 0, 14, 272, 1, 0, 0, 0, 16, 279, 1, 0, 0, 0, 18, 292, 1, 0, 0, 0, 20, 304, 1, 0, 0, 0, 22, 313, 1, 0, 0, 0, 24, 321, 1, 0, 0, 0, 26, 343, 1, 0, 0, 0, 28, 358, 1, 0, 0, 0, 30, 367, 1, 0, 0, 0, 32, 371, 1, 0, 0, 0, 34, 375, 1, 0, 0, 0, 36, 377, 1, 0, 0, 0, 38, 386, 1, 0, 0, 0, 40, 390, 1, 0, 0, 0, 42, 404, 1, 0, 0, 0, 44, 422, 1, 0, 0, 0, 46, 469, 1, 0, 0, 0, 48, 473, 1, 0, 0, 0, 50, 513, 1, 0, 0, 0, 52, 516, 1, 0, 0, 0, 54, 581, 1, 0, 0, 0, 56, 587, 1, 0, 0, 0, 58, 593, 1, 0, 0, 0, 60, 597, 1, 0, 0, 0, 62, 603, 1, 0, 0, 0, 64, 621, 1, 0, 0, 0, 66, 624, 1, 0, 0, 0, 68, 627, 1, 0, 0, 0, 70, 644, 1, 0, 0, 0, 72, 652, 1, 0, 0, 0, 74, 658, 1, 0, 0, 0, 76, 661, 1, 0, 0, 0, 78, 664, 1, 0, 0, 0, 80, 668, 1, 0, 0, 0, 82, 672, 1, 0, 0, 0, 84, 702, 1, 0, 0, 0, 86, 704, 1, 0, 0, 0, 88, 707, 1, 0, 0, 0, 90, 710, 1, 0, 0, 0, 92, 719, 1, 0, 0, 0, 94, 742, 1, 0, 0, 0, 96, 847, 1, 0, 0, 0, 98, 852, 1, 0, 0, 0, 100, 863, 1, 0, 0, 0, 102, 865, 1, 0, 0, 0, 104, 880, 1, 0, 0, 0, 106, 885, 1, 0, 0, 0, 108, 893, 1, 0, 0, 0, 110, 911, 1, 0, 0, 0, 112, 913, 1, 0, 0, 0, 114, 921, 1, 0, 0, 0, 116, 926, 1, 0, 0, 0, 118, 934, 1, 0, 0, 0, 120, 938, 1, 0, 0, 0, 122, 942, 1, 0, 0, 0, 124, 948, 1, 0, 0, 0, 126, 957, 1, 0, 0, 0, 128, 971, 1, 0, 0, 0, 130, 973, 1, 0, 0, 0, 132, 1039, 1, 0, 0, 0, 134, 1059, 1, 0, 0, 0, 136, 1061, 1, 0, 0, 0, 138, 1072, 1, 0, 0, 0, 140, 1088, 1, 0, 0, 0, 142, 1439, 1, 0, 0, 0, 144, 1632, 1, 0, 0, 0, 146, 1634, 1, 0, 0, 0, 148, 1642, 1, 0, 0, 0, 150, 1652, 1, 0, 0, 0, 152, 1654, 1, 0, 0, 0, 154, 1685, 1, 0, 0, 0, 156, 1698, 1, 0, 0, 0, 158, 1700, 1, 0, 0, 0, 160, 1735, 1, 0, 0, 0, 162, 1737, 1, 0, 0, 0, 164, 1755, 1, 0, 0, 0, 166, 1757, 1, 0, 0, 0, 168, 1778, 1, 0, 0, 0, 170, 1816, 1, 0, 0, 0, 172, 1822, 1, 0, 0, 0, 174, 1828, 1, 0, 0, 0, 176, 1839, 1, 0, 0, 0, 178, 1862, 1, 0, 0, 0, 180, 1864, 1, 0, 0, 0, 182, 1875, 1, 0, 0, 0, 184, 1885, 1, 0, 0, 0, 186, 1889, 1, 0, 0, 0, 188, 1900, 1, 0, 0, 0, 190, 1910, 1, 0, 0, 0, 192, 1913, 1, 0, 0, 0, 194, 1926, 1, 0, 0, 0, 196, 1928, 1, 0, 0, 0, 198, 1930, 1, 0, 0, 0, 200, 1932, 1, 0, 0, 0, 202, 1936, 1, 0, 0, 0, 204, 1941, 1, 0, 0, 0, 206, 1943, 1, 0, 0, 0, 208, 1947, 1, 0, 0, 0, 210, 1953, 1, 0, 0, 0, 212, 1955, 1, 0, 0, 0, 214, 1969, 1, 0, 0, 0, 216, 1971, 1, 0, 0, 0, 218, 1985, 1, 0, 0, 0, 220, 222, 3, 2, 1, 0, 221, 220, 1, 0, 0, 0, 222, 225, 1, 0, 0, 0, 223, 221, 1, 0, 0, 0, 223, 224, 1, 0, 0, 0, 224, 226, 1, 0, 0, 0, 225, 223, 1, 0, 0, 0, 226, 227, 5, 0, 0, 1, 227, 1, 1, 0, 0, 0, 228, 231, 3, 6, 3, 0, 229, 231, 3, 10, 5, 0, 230, 228, 1, 0, 0, 0, 230, 229, 1, 0, 0, 0, 231, 3, 1, 0, 0, 0, 232, 233, 3, 142, 71, 0, 233, 5, 1, 0, 0, 0, 234, 235, 5, 62, 0, 0, 235, 238, 3, 204, 102, 0, 236, 237, 5, 139, 0, 0, 237, 239, 3, 4, 2, 0, 238, 236, 1, 0, 0, 0, 238, 239, 1, 0, 0, 0, 239, 7, 1, 0, 0, 0, 240, 245, 3, 166, 83, 0, 241, 242, 5, 141, 0, 0, 242, 244, 3, 166, 83, 0, 243, 241, 1, 0, 0, 0, 244, 247, 1, 0, 0, 0, 245, 243, 1, 0, 0, 0, 245, 246, 1, 0, 0, 0, 246, 249, 1, 0, 0, 0, 247, 245, 1, 0, 0, 0, 248, 250, 5, 141, 0, 0, 249, 248, 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, 9, 1, 0, 0, 0, 251, 264, 3, 12, 6, 0, 252, 264, 3, 14, 7, 0, 253, 264, 3, 18, 9, 0, 254, 264, 3, 20, 10, 0, 255, 264, 3, 22, 11, 0, 256, 264, 3, 26, 13, 0, 257, 264, 3, 24, 12, 0, 258, 264, 3, 28, 14, 0, 259, 264, 3, 30, 15, 0, 260, 264, 3, 36, 18, 0, 261, 264, 3, 32, 16, 0, 262, 264, 3, 34, 17, 0, 263, 251, 1, 0, 0, 0, 263, 252, 1, 0, 0, 0, 263, 253, 1, 0, 0, 0, 263, 254, 1, 0, 0, 0, 263, 255, 1, 0, 0, 0, 263, 256, 1, 0, 0, 0, 263, 257, 1, 0, 0, 0, 263, 258, 1, 0, 0, 0, 263, 259, 1, 0, 0, 0, 263, 260, 1, 0, 0, 0, 263, 261, 1, 0, 0, 0, 263, 262, 1, 0, 0, 0, 264, 11, 1, 0, 0, 0, 265, 267, 5, 90, 0, 0, 266, 268, 3, 4, 2, 0, 267, 266, 1, 0, 0, 0, 267, 268, 1, 0, 0, 0, 268, 270, 1, 0, 0, 0, 269, 271, 5, 176, 0, 0, 270, 269, 1, 0, 0, 0, 270, 271, 1, 0, 0, 0, 271, 13, 1, 0, 0, 0, 272, 274, 5, 103, 0, 0, 273, 275, 3, 4, 2, 0, 274, 273, 1, 0, 0, 0, 274, 275, 1, 0, 0, 0, 275, 277, 1, 0, 0, 0, 276, 278, 5, 176, 0, 0, 277, 276, 1, 0, 0, 0, 277, 278, 1, 0, 0, 0, 278, 15, 1, 0, 0, 0, 279, 288, 5, 14, 0, 0, 280, 281, 5, 155, 0, 0, 281, 284, 3, 204, 102, 0, 282, 283, 5, 140, 0, 0, 283, 285, 3, 204, 102, 0, 284, 282, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 286, 1, 0, 0, 0, 286, 287, 5, 175, 0, 0, 287, 289, 1, 0, 0, 0, 288, 280, 1, 0, 0, 0, 288, 289, 1, 0, 0, 0, 289, 290, 1, 0, 0, 0, 290, 291, 3, 36, 18, 0, 291, 17, 1, 0, 0, 0, 292, 293, 5, 112, 0, 0, 293, 297, 3, 36, 18, 0, 294, 296, 3, 16, 8, 0, 295, 294, 1, 0, 0, 0, 296, 299, 1, 0, 0, 0, 297, 295, 1, 0, 0, 0, 297, 298, 1, 0, 0, 0, 298, 302, 1, 0, 0, 0, 299, 297, 1, 0, 0, 0, 300, 301, 5, 33, 0, 0, 301, 303, 3, 36, 18, 0, 302, 300, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 19, 1, 0, 0, 0, 304, 305, 5, 46, 0, 0, 305, 306, 5, 155, 0, 0, 306, 307, 3, 4, 2, 0, 307, 308, 5, 175, 0, 0, 308, 311, 3, 10, 5, 0, 309, 310, 5, 26, 0, 0, 310, 312, 3, 10, 5, 0, 311, 309, 1, 0, 0, 0, 311, 312, 1, 0, 0, 0, 312, 21, 1, 0, 0, 0, 313, 314, 5, 122, 0, 0, 314, 315, 5, 155, 0, 0, 315, 316, 3, 4, 2, 0, 316, 317, 5, 175, 0, 0, 317, 319, 3, 10, 5, 0, 318, 320, 5, 176, 0, 0, 319, 318, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 23, 1, 0, 0, 0, 321, 322, 5, 37, 0, 0, 322, 326, 5, 155, 0, 0, 323, 327, 3, 6, 3, 0, 324, 327, 3, 30, 15, 0, 325, 327, 3, 4, 2, 0, 326, 323, 1, 0, 0, 0, 326, 324, 1, 0, 0, 0, 326, 325, 1, 0, 0, 0, 326, 327, 1, 0, 0, 0, 327, 328, 1, 0, 0, 0, 328, 330, 5, 176, 0, 0, 329, 331, 3, 4, 2, 0, 330, 329, 1, 0, 0, 0, 330, 331, 1, 0, 0, 0, 331, 332, 1, 0, 0, 0, 332, 336, 5, 176, 0, 0, 333, 337, 3, 6, 3, 0, 334, 337, 3, 30, 15, 0, 335, 337, 3, 4, 2, 0, 336, 333, 1, 0, 0, 0, 336, 334, 1, 0, 0, 0, 336, 335, 1, 0, 0, 0, 336, 337, 1, 0, 0, 0, 337, 338, 1, 0, 0, 0, 338, 339, 5, 175, 0, 0, 339, 341, 3, 10, 5, 0, 340, 342, 5, 176, 0, 0, 341, 340, 1, 0, 0, 0, 341, 342, 1, 0, 0, 0, 342, 25, 1, 0, 0, 0, 343, 344, 5, 37, 0, 0, 344, 345, 5, 155, 0, 0, 345, 346, 5, 62, 0, 0, 346, 349, 3, 204, 102, 0, 347, 348, 5, 141, 0, 0, 348, 350, 3, 204, 102, 0, 349, 347, 1, 0, 0, 0, 349, 350, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 352, 5, 50, 0, 0, 352, 353, 3, 4, 2, 0, 353, 354, 5, 175, 0, 0, 354, 356, 3, 10, 5, 0, 355, 357, 5, 176, 0, 0, 356, 355, 1, 0, 0, 0, 356, 357, 1, 0, 0, 0, 357, 27, 1, 0, 0, 0, 358, 359, 7, 0, 0, 0, 359, 360, 3, 204, 102, 0, 360, 362, 5, 155, 0, 0, 361, 363, 3, 8, 4, 0, 362, 361, 1, 0, 0, 0, 362, 363, 1, 0, 0, 0, 363, 364, 1, 0, 0, 0, 364, 365, 5, 175, 0, 0, 365, 366, 3, 36, 18, 0, 366, 29, 1, 0, 0, 0, 367, 368, 3, 4, 2, 0, 368, 369, 5, 139, 0, 0, 369, 370, 3, 4, 2, 0, 370, 31, 1, 0, 0, 0, 371, 373, 3, 4, 2, 0, 372, 374, 5, 176, 0, 0, 373, 372, 1, 0, 0, 0, 373, 374, 1, 0, 0, 0, 374, 33, 1, 0, 0, 0, 375, 376, 5, 176, 0, 0, 376, 35, 1, 0, 0, 0, 377, 381, 5, 153, 0, 0, 378, 380, 3, 2, 1, 0, 379, 378, 1, 0, 0, 0, 380, 383, 1, 0, 0, 0, 381, 379, 1, 0, 0, 0, 381, 382, 1, 0, 0, 0, 382, 384, 1, 0, 0, 0, 383, 381, 1, 0, 0, 0, 384, 385, 5, 173, 0, 0, 385, 37, 1, 0, 0, 0, 386, 387, 3, 4, 2, 0, 387, 388, 5, 140, 0, 0, 388, 389, 3, 4, 2, 0, 389, 39, 1, 0, 0, 0, 390, 395, 3, 38, 19, 0, 391, 392, 5, 141, 0, 0, 392, 394, 3, 38, 19, 0, 393, 391, 1, 0, 0, 0, 394, 397, 1, 0, 0, 0, 395, 393, 1, 0, 0, 0, 395, 396, 1, 0, 0, 0, 396, 399, 1, 0, 0, 0, 397, 395, 1, 0, 0, 0, 398, 400, 5, 141, 0, 0, 399, 398, 1, 0, 0, 0, 399, 400, 1, 0, 0, 0, 400, 41, 1, 0, 0, 0, 401, 405, 3, 48, 24, 0, 402, 405, 3, 52, 26, 0, 403, 405, 3, 154, 77, 0, 404, 401, 1, 0, 0, 0, 404, 402, 1, 0, 0, 0, 404, 403, 1, 0, 0, 0, 405, 407, 1, 0, 0, 0, 406, 408, 5, 176, 0, 0, 407, 406, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 409, 1, 0, 0, 0, 409, 410, 5, 0, 0, 1, 410, 43, 1, 0, 0, 0, 411, 423, 3, 52, 26, 0, 412, 413, 3, 54, 27, 0, 413, 414, 5, 155, 0, 0, 414, 415, 3, 48, 24, 0, 415, 416, 5, 175, 0, 0, 416, 423, 1, 0, 0, 0, 417, 418, 5, 155, 0, 0, 418, 419, 3, 48, 24, 0, 419, 420, 5, 175, 0, 0, 420, 423, 1, 0, 0, 0, 421, 423, 3, 208, 104, 0, 422, 411, 1, 0, 0, 0, 422, 412, 1, 0, 0, 0, 422, 417, 1, 0, 0, 0, 422, 421, 1, 0, 0, 0, 423, 45, 1, 0, 0, 0, 424, 425, 5, 28, 0, 0, 425, 428, 5, 1, 0, 0, 426, 427, 5, 11, 0, 0, 427, 429, 5, 68, 0, 0, 428, 426, 1, 0, 0, 0, 428, 429, 1, 0, 0, 0, 429, 470, 1, 0, 0, 0, 430, 433, 5, 28, 0, 0, 431, 432, 5, 11, 0, 0, 432, 434, 5, 68, 0, 0, 433, 431, 1, 0, 0, 0, 433, 434, 1, 0, 0, 0, 434, 470, 1, 0, 0, 0, 435, 436, 5, 115, 0, 0, 436, 439, 5, 1, 0, 0, 437, 438, 5, 11, 0, 0, 438, 440, 5, 68, 0, 0, 439, 437, 1, 0, 0, 0, 439, 440, 1, 0, 0, 0, 440, 470, 1, 0, 0, 0, 441, 442, 5, 115, 0, 0, 442, 445, 5, 25, 0, 0, 443, 444, 5, 11, 0, 0, 444, 446, 5, 68, 0, 0, 445, 443, 1, 0, 0, 0, 445, 446, 1, 0, 0, 0, 446, 470, 1, 0, 0, 0, 447, 450, 5, 115, 0, 0, 448, 449, 5, 11, 0, 0, 449, 451, 5, 68, 0, 0, 450, 448, 1, 0, 0, 0, 450, 451, 1, 0, 0, 0, 451, 470, 1, 0, 0, 0, 452, 453, 5, 53, 0, 0, 453, 456, 5, 1, 0, 0, 454, 455, 5, 11, 0, 0, 455, 457, 5, 68, 0, 0, 456, 454, 1, 0, 0, 0, 456, 457, 1, 0, 0, 0, 457, 470, 1, 0, 0, 0, 458, 459, 5, 53, 0, 0, 459, 462, 5, 25, 0, 0, 460, 461, 5, 11, 0, 0, 461, 463, 5, 68, 0, 0, 462, 460, 1, 0, 0, 0, 462, 463, 1, 0, 0, 0, 463, 470, 1, 0, 0, 0, 464, 467, 5, 53, 0, 0, 465, 466, 5, 11, 0, 0, 466, 468, 5, 68, 0, 0, 467, 465, 1, 0, 0, 0, 467, 468, 1, 0, 0, 0, 468, 470, 1, 0, 0, 0, 469, 424, 1, 0, 0, 0, 469, 430, 1, 0, 0, 0, 469, 435, 1, 0, 0, 0, 469, 441, 1, 0, 0, 0, 469, 447, 1, 0, 0, 0, 469, 452, 1, 0, 0, 0, 469, 458, 1, 0, 0, 0, 469, 464, 1, 0, 0, 0, 470, 471, 1, 0, 0, 0, 471, 472, 3, 44, 22, 0, 472, 47, 1, 0, 0, 0, 473, 477, 3, 44, 22, 0, 474, 476, 3, 46, 23, 0, 475, 474, 1, 0, 0, 0, 476, 479, 1, 0, 0, 0, 477, 475, 1, 0, 0, 0, 477, 478, 1, 0, 0, 0, 478, 481, 1, 0, 0, 0, 479, 477, 1, 0, 0, 0, 480, 482, 3, 78, 39, 0, 481, 480, 1, 0, 0, 0, 481, 482, 1, 0, 0, 0, 482, 484, 1, 0, 0, 0, 483, 485, 3, 50, 25, 0, 484, 483, 1, 0, 0, 0, 484, 485, 1, 0, 0, 0, 485, 49, 1, 0, 0, 0, 486, 487, 5, 64, 0, 0, 487, 489, 3, 142, 71, 0, 488, 490, 5, 164, 0, 0, 489, 488, 1, 0, 0, 0, 489, 490, 1, 0, 0, 0, 490, 493, 1, 0, 0, 0, 491, 492, 5, 141, 0, 0, 492, 494, 3, 142, 71, 0, 493, 491, 1, 0, 0, 0, 493, 494, 1, 0, 0, 0, 494, 497, 1, 0, 0, 0, 495, 496, 5, 124, 0, 0, 496, 498, 5, 104, 0, 0, 497, 495, 1, 0, 0, 0, 497, 498, 1, 0, 0, 0, 498, 514, 1, 0, 0, 0, 499, 500, 5, 64, 0, 0, 500, 502, 3, 142, 71, 0, 501, 503, 5, 164, 0, 0, 502, 501, 1, 0, 0, 0, 502, 503, 1, 0, 0, 0, 503, 506, 1, 0, 0, 0, 504, 505, 5, 124, 0, 0, 505, 507, 5, 104, 0, 0, 506, 504, 1, 0, 0, 0, 506, 507, 1, 0, 0, 0, 507, 508, 1, 0, 0, 0, 508, 509, 5, 74, 0, 0, 509, 510, 3, 142, 71, 0, 510, 514, 1, 0, 0, 0, 511, 512, 5, 74, 0, 0, 512, 514, 3, 142, 71, 0, 513, 486, 1, 0, 0, 0, 513, 499, 1, 0, 0, 0, 513, 511, 1, 0, 0, 0, 514, 51, 1, 0, 0, 0, 515, 517, 3, 54, 27, 0, 516, 515, 1, 0, 0, 0, 516, 517, 1, 0, 0, 0, 517, 518, 1, 0, 0, 0, 518, 520, 5, 97, 0, 0, 519, 521, 5, 25, 0, 0, 520, 519, 1, 0, 0, 0, 520, 521, 1, 0, 0, 0, 521, 523, 1, 0, 0, 0, 522, 524, 3, 56, 28, 0, 523, 522, 1, 0, 0, 0, 523, 524, 1, 0, 0, 0, 524, 525, 1, 0, 0, 0, 525, 527, 3, 138, 69, 0, 526, 528, 3, 58, 29, 0, 527, 526, 1, 0, 0, 0, 527, 528, 1, 0, 0, 0, 528, 530, 1, 0, 0, 0, 529, 531, 3, 60, 30, 0, 530, 529, 1, 0, 0, 0, 530, 531, 1, 0, 0, 0, 531, 533, 1, 0, 0, 0, 532, 534, 3, 64, 32, 0, 533, 532, 1, 0, 0, 0, 533, 534, 1, 0, 0, 0, 534, 536, 1, 0, 0, 0, 535, 537, 3, 66, 33, 0, 536, 535, 1, 0, 0, 0, 536, 537, 1, 0, 0, 0, 537, 542, 1, 0, 0, 0, 538, 540, 5, 117, 0, 0, 539, 538, 1, 0, 0, 0, 539, 540, 1, 0, 0, 0, 540, 541, 1, 0, 0, 0, 541, 543, 3, 102, 51, 0, 542, 539, 1, 0, 0, 0, 542, 543, 1, 0, 0, 0, 543, 545, 1, 0, 0, 0, 544, 546, 3, 68, 34, 0, 545, 544, 1, 0, 0, 0, 545, 546, 1, 0, 0, 0, 546, 549, 1, 0, 0, 0, 547, 548, 5, 124, 0, 0, 548, 550, 7, 1, 0, 0, 549, 547, 1, 0, 0, 0, 549, 550, 1, 0, 0, 0, 550, 553, 1, 0, 0, 0, 551, 552, 5, 124, 0, 0, 552, 554, 5, 108, 0, 0, 553, 551, 1, 0, 0, 0, 553, 554, 1, 0, 0, 0, 554, 556, 1, 0, 0, 0, 555, 557, 3, 74, 37, 0, 556, 555, 1, 0, 0, 0, 556, 557, 1, 0, 0, 0, 557, 559, 1, 0, 0, 0, 558, 560, 3, 76, 38, 0, 559, 558, 1, 0, 0, 0, 559, 560, 1, 0, 0, 0, 560, 563, 1, 0, 0, 0, 561, 562, 5, 117, 0, 0, 562, 564, 3, 102, 51, 0, 563, 561, 1, 0, 0, 0, 563, 564, 1, 0, 0, 0, 564, 566, 1, 0, 0, 0, 565, 567, 3, 62, 31, 0, 566, 565, 1, 0, 0, 0, 566, 567, 1, 0, 0, 0, 567, 569, 1, 0, 0, 0, 568, 570, 3, 78, 39, 0, 569, 568, 1, 0, 0, 0, 569, 570, 1, 0, 0, 0, 570, 572, 1, 0, 0, 0, 571, 573, 3, 82, 41, 0, 572, 571, 1, 0, 0, 0, 572, 573, 1, 0, 0, 0, 573, 576, 1, 0, 0, 0, 574, 577, 3, 84, 42, 0, 575, 577, 3, 86, 43, 0, 576, 574, 1, 0, 0, 0, 576, 575, 1, 0, 0, 0, 576, 577, 1, 0, 0, 0, 577, 579, 1, 0, 0, 0, 578, 580, 3, 88, 44, 0, 579, 578, 1, 0, 0, 0, 579, 580, 1, 0, 0, 0, 580, 53, 1, 0, 0, 0, 581, 583, 5, 124, 0, 0, 582, 584, 5, 88, 0, 0, 583, 582, 1, 0, 0, 0, 583, 584, 1, 0, 0, 0, 584, 585, 1, 0, 0, 0, 585, 586, 3, 158, 79, 0, 586, 55, 1, 0, 0, 0, 587, 588, 5, 107, 0, 0, 588, 591, 5, 131, 0, 0, 589, 590, 5, 124, 0, 0, 590, 592, 5, 104, 0, 0, 591, 589, 1, 0, 0, 0, 591, 592, 1, 0, 0, 0, 592, 57, 1, 0, 0, 0, 593, 594, 5, 38, 0, 0, 594, 595, 3, 94, 47, 0, 595, 59, 1, 0, 0, 0, 596, 598, 7, 2, 0, 0, 597, 596, 1, 0, 0, 0, 597, 598, 1, 0, 0, 0, 598, 599, 1, 0, 0, 0, 599, 600, 5, 5, 0, 0, 600, 601, 5, 56, 0, 0, 601, 602, 3, 136, 68, 0, 602, 61, 1, 0, 0, 0, 603, 604, 5, 123, 0, 0, 604, 605, 3, 204, 102, 0, 605, 606, 5, 6, 0, 0, 606, 607, 5, 155, 0, 0, 607, 608, 3, 116, 58, 0, 608, 618, 5, 175, 0, 0, 609, 610, 5, 141, 0, 0, 610, 611, 3, 204, 102, 0, 611, 612, 5, 6, 0, 0, 612, 613, 5, 155, 0, 0, 613, 614, 3, 116, 58, 0, 614, 615, 5, 175, 0, 0, 615, 617, 1, 0, 0, 0, 616, 609, 1, 0, 0, 0, 617, 620, 1, 0, 0, 0, 618, 616, 1, 0, 0, 0, 618, 619, 1, 0, 0, 0, 619, 63, 1, 0, 0, 0, 620, 618, 1, 0, 0, 0, 621, 622, 5, 84, 0, 0, 622, 623, 3, 142, 71, 0, 623, 65, 1, 0, 0, 0, 624, 625, 5, 121, 0, 0, 625, 626, 3, 142, 71, 0, 626, 67, 1, 0, 0, 0, 627, 628, 5, 41, 0, 0, 628, 642, 5, 11, 0, 0, 629, 643, 5, 1, 0, 0, 630, 631, 7, 1, 0, 0, 631, 632, 5, 155, 0, 0, 632, 633, 3, 136, 68, 0, 633, 634, 5, 175, 0, 0, 634, 643, 1, 0, 0, 0, 635, 636, 5, 42, 0, 0, 636, 637, 5, 99, 0, 0, 637, 638, 5, 155, 0, 0, 638, 639, 3, 70, 35, 0, 639, 640, 5, 175, 0, 0, 640, 643, 1, 0, 0, 0, 641, 643, 3, 136, 68, 0, 642, 629, 1, 0, 0, 0, 642, 630, 1, 0, 0, 0, 642, 635, 1, 0, 0, 0, 642, 641, 1, 0, 0, 0, 643, 69, 1, 0, 0, 0, 644, 649, 3, 72, 36, 0, 645, 646, 5, 141, 0, 0, 646, 648, 3, 72, 36, 0, 647, 645, 1, 0, 0, 0, 648, 651, 1, 0, 0, 0, 649, 647, 1, 0, 0, 0, 649, 650, 1, 0, 0, 0, 650, 71, 1, 0, 0, 0, 651, 649, 1, 0, 0, 0, 652, 654, 5, 155, 0, 0, 653, 655, 3, 136, 68, 0, 654, 653, 1, 0, 0, 0, 654, 655, 1, 0, 0, 0, 655, 656, 1, 0, 0, 0, 656, 657, 5, 175, 0, 0, 657, 73, 1, 0, 0, 0, 658, 659, 5, 43, 0, 0, 659, 660, 3, 142, 71, 0, 660, 75, 1, 0, 0, 0, 661, 662, 5, 85, 0, 0, 662, 663, 3, 142, 71, 0, 663, 77, 1, 0, 0, 0, 664, 665, 5, 77, 0, 0, 665, 666, 5, 11, 0, 0, 666, 667, 3, 106, 53, 0, 667, 79, 1, 0, 0, 0, 668, 669, 5, 77, 0, 0, 669, 670, 5, 11, 0, 0, 670, 671, 3, 136, 68, 0, 671, 81, 1, 0, 0, 0, 672, 673, 5, 64, 0, 0, 673, 674, 3, 104, 52, 0, 674, 675, 5, 11, 0, 0, 675, 676, 3, 136, 68, 0, 676, 83, 1, 0, 0, 0, 677, 678, 5, 64, 0, 0, 678, 680, 3, 142, 71, 0, 679, 681, 5, 164, 0, 0, 680, 679, 1, 0, 0, 0, 680, 681, 1, 0, 0, 0, 681, 684, 1, 0, 0, 0, 682, 683, 5, 141, 0, 0, 683, 685, 3, 142, 71, 0, 684, 682, 1, 0, 0, 0, 684, 685, 1, 0, 0, 0, 685, 688, 1, 0, 0, 0, 686, 687, 5, 124, 0, 0, 687, 689, 5, 104, 0, 0, 688, 686, 1, 0, 0, 0, 688, 689, 1, 0, 0, 0, 689, 703, 1, 0, 0, 0, 690, 691, 5, 64, 0, 0, 691, 693, 3, 142, 71, 0, 692, 694, 5, 164, 0, 0, 693, 692, 1, 0, 0, 0, 693, 694, 1, 0, 0, 0, 694, 697, 1, 0, 0, 0, 695, 696, 5, 124, 0, 0, 696, 698, 5, 104, 0, 0, 697, 695, 1, 0, 0, 0, 697, 698, 1, 0, 0, 0, 698, 699, 1, 0, 0, 0, 699, 700, 5, 74, 0, 0, 700, 701, 3, 142, 71, 0, 701, 703, 1, 0, 0, 0, 702, 677, 1, 0, 0, 0, 702, 690, 1, 0, 0, 0, 703, 85, 1, 0, 0, 0, 704, 705, 5, 74, 0, 0, 705, 706, 3, 142, 71, 0, 706, 87, 1, 0, 0, 0, 707, 708, 5, 100, 0, 0, 708, 709, 3, 112, 56, 0, 709, 89, 1, 0, 0, 0, 710, 711, 5, 118, 0, 0, 711, 716, 3, 92, 46, 0, 712, 713, 5, 141, 0, 0, 713, 715, 3, 92, 46, 0, 714, 712, 1, 0, 0, 0, 715, 718, 1, 0, 0, 0, 716, 714, 1, 0, 0, 0, 716, 717, 1, 0, 0, 0, 717, 91, 1, 0, 0, 0, 718, 716, 1, 0, 0, 0, 719, 720, 5, 155, 0, 0, 720, 725, 3, 142, 71, 0, 721, 722, 5, 141, 0, 0, 722, 724, 3, 142, 71, 0, 723, 721, 1, 0, 0, 0, 724, 727, 1, 0, 0, 0, 725, 723, 1, 0, 0, 0, 725, 726, 1, 0, 0, 0, 726, 728, 1, 0, 0, 0, 727, 725, 1, 0, 0, 0, 728, 729, 5, 175, 0, 0, 729, 93, 1, 0, 0, 0, 730, 731, 6, 47, -1, 0, 731, 733, 3, 168, 84, 0, 732, 734, 5, 31, 0, 0, 733, 732, 1, 0, 0, 0, 733, 734, 1, 0, 0, 0, 734, 736, 1, 0, 0, 0, 735, 737, 3, 102, 51, 0, 736, 735, 1, 0, 0, 0, 736, 737, 1, 0, 0, 0, 737, 743, 1, 0, 0, 0, 738, 739, 5, 155, 0, 0, 739, 740, 3, 94, 47, 0, 740, 741, 5, 175, 0, 0, 741, 743, 1, 0, 0, 0, 742, 730, 1, 0, 0, 0, 742, 738, 1, 0, 0, 0, 743, 791, 1, 0, 0, 0, 744, 745, 10, 5, 0, 0, 745, 746, 3, 98, 49, 0, 746, 747, 3, 94, 47, 6, 747, 790, 1, 0, 0, 0, 748, 750, 10, 7, 0, 0, 749, 751, 5, 69, 0, 0, 750, 749, 1, 0, 0, 0, 750, 751, 1, 0, 0, 0, 751, 753, 1, 0, 0, 0, 752, 754, 3, 96, 48, 0, 753, 752, 1, 0, 0, 0, 753, 754, 1, 0, 0, 0, 754, 755, 1, 0, 0, 0, 755, 756, 5, 56, 0, 0, 756, 758, 3, 94, 47, 0, 757, 759, 3, 100, 50, 0, 758, 757, 1, 0, 0, 0, 758, 759, 1, 0, 0, 0, 759, 790, 1, 0, 0, 0, 760, 761, 10, 6, 0, 0, 761, 762, 5, 82, 0, 0, 762, 763, 5, 56, 0, 0, 763, 765, 3, 94, 47, 0, 764, 766, 3, 100, 50, 0, 765, 764, 1, 0, 0, 0, 765, 766, 1, 0, 0, 0, 766, 790, 1, 0, 0, 0, 767, 768, 10, 4, 0, 0, 768, 769, 5, 81, 0, 0, 769, 770, 5, 155, 0, 0, 770, 771, 3, 136, 68, 0, 771, 775, 3, 170, 85, 0, 772, 773, 5, 41, 0, 0, 773, 774, 5, 11, 0, 0, 774, 776, 3, 136, 68, 0, 775, 772, 1, 0, 0, 0, 775, 776, 1, 0, 0, 0, 776, 777, 1, 0, 0, 0, 777, 778, 5, 175, 0, 0, 778, 790, 1, 0, 0, 0, 779, 780, 10, 3, 0, 0, 780, 783, 5, 116, 0, 0, 781, 782, 5, 49, 0, 0, 782, 784, 5, 73, 0, 0, 783, 781, 1, 0, 0, 0, 783, 784, 1, 0, 0, 0, 784, 785, 1, 0, 0, 0, 785, 786, 5, 155, 0, 0, 786, 787, 3, 174, 87, 0, 787, 788, 5, 175, 0, 0, 788, 790, 1, 0, 0, 0, 789, 744, 1, 0, 0, 0, 789, 748, 1, 0, 0, 0, 789, 760, 1, 0, 0, 0, 789, 767, 1, 0, 0, 0, 789, 779, 1, 0, 0, 0, 790, 793, 1, 0, 0, 0, 791, 789, 1, 0, 0, 0, 791, 792, 1, 0, 0, 0, 792, 95, 1, 0, 0, 0, 793, 791, 1, 0, 0, 0, 794, 796, 7, 3, 0, 0, 795, 794, 1, 0, 0, 0, 795, 796, 1, 0, 0, 0, 796, 797, 1, 0, 0, 0, 797, 808, 5, 52, 0, 0, 798, 800, 5, 52, 0, 0, 799, 801, 7, 3, 0, 0, 800, 799, 1, 0, 0, 0, 800, 801, 1, 0, 0, 0, 801, 808, 1, 0, 0, 0, 802, 808, 7, 3, 0, 0, 803, 808, 5, 3, 0, 0, 804, 808, 5, 98, 0, 0, 805, 806, 5, 8, 0, 0, 806, 808, 7, 4, 0, 0, 807, 795, 1, 0, 0, 0, 807, 798, 1, 0, 0, 0, 807, 802, 1, 0, 0, 0, 807, 803, 1, 0, 0, 0, 807, 804, 1, 0, 0, 0, 807, 805, 1, 0, 0, 0, 808, 848, 1, 0, 0, 0, 809, 811, 7, 5, 0, 0, 810, 809, 1, 0, 0, 0, 810, 811, 1, 0, 0, 0, 811, 812, 1, 0, 0, 0, 812, 814, 7, 6, 0, 0, 813, 815, 5, 78, 0, 0, 814, 813, 1, 0, 0, 0, 814, 815, 1, 0, 0, 0, 815, 830, 1, 0, 0, 0, 816, 818, 7, 6, 0, 0, 817, 819, 5, 78, 0, 0, 818, 817, 1, 0, 0, 0, 818, 819, 1, 0, 0, 0, 819, 821, 1, 0, 0, 0, 820, 822, 7, 5, 0, 0, 821, 820, 1, 0, 0, 0, 821, 822, 1, 0, 0, 0, 822, 830, 1, 0, 0, 0, 823, 824, 5, 8, 0, 0, 824, 825, 7, 4, 0, 0, 825, 827, 7, 6, 0, 0, 826, 828, 5, 78, 0, 0, 827, 826, 1, 0, 0, 0, 827, 828, 1, 0, 0, 0, 828, 830, 1, 0, 0, 0, 829, 810, 1, 0, 0, 0, 829, 816, 1, 0, 0, 0, 829, 823, 1, 0, 0, 0, 830, 848, 1, 0, 0, 0, 831, 833, 7, 3, 0, 0, 832, 831, 1, 0, 0, 0, 832, 833, 1, 0, 0, 0, 833, 834, 1, 0, 0, 0, 834, 836, 5, 39, 0, 0, 835, 837, 5, 78, 0, 0, 836, 835, 1, 0, 0, 0, 836, 837, 1, 0, 0, 0, 837, 846, 1, 0, 0, 0, 838, 840, 5, 39, 0, 0, 839, 841, 5, 78, 0, 0, 840, 839, 1, 0, 0, 0, 840, 841, 1, 0, 0, 0, 841, 843, 1, 0, 0, 0, 842, 844, 7, 3, 0, 0, 843, 842, 1, 0, 0, 0, 843, 844, 1, 0, 0, 0, 844, 846, 1, 0, 0, 0, 845, 832, 1, 0, 0, 0, 845, 838, 1, 0, 0, 0, 846, 848, 1, 0, 0, 0, 847, 807, 1, 0, 0, 0, 847, 829, 1, 0, 0, 0, 847, 845, 1, 0, 0, 0, 848, 97, 1, 0, 0, 0, 849, 850, 5, 18, 0, 0, 850, 853, 5, 56, 0, 0, 851, 853, 5, 141, 0, 0, 852, 849, 1, 0, 0, 0, 852, 851, 1, 0, 0, 0, 853, 99, 1, 0, 0, 0, 854, 855, 5, 75, 0, 0, 855, 864, 3, 136, 68, 0, 856, 857, 5, 117, 0, 0, 857, 858, 5, 155, 0, 0, 858, 859, 3, 136, 68, 0, 859, 860, 5, 175, 0, 0, 860, 864, 1, 0, 0, 0, 861, 862, 5, 117, 0, 0, 862, 864, 3, 136, 68, 0, 863, 854, 1, 0, 0, 0, 863, 856, 1, 0, 0, 0, 863, 861, 1, 0, 0, 0, 864, 101, 1, 0, 0, 0, 865, 866, 5, 95, 0, 0, 866, 868, 3, 110, 55, 0, 867, 869, 5, 164, 0, 0, 868, 867, 1, 0, 0, 0, 868, 869, 1, 0, 0, 0, 869, 872, 1, 0, 0, 0, 870, 871, 5, 74, 0, 0, 871, 873, 3, 110, 55, 0, 872, 870, 1, 0, 0, 0, 872, 873, 1, 0, 0, 0, 873, 878, 1, 0, 0, 0, 874, 875, 5, 155, 0, 0, 875, 876, 3, 204, 102, 0, 876, 877, 5, 175, 0, 0, 877, 879, 1, 0, 0, 0, 878, 874, 1, 0, 0, 0, 878, 879, 1, 0, 0, 0, 879, 103, 1, 0, 0, 0, 880, 883, 3, 142, 71, 0, 881, 882, 7, 7, 0, 0, 882, 884, 3, 142, 71, 0, 883, 881, 1, 0, 0, 0, 883, 884, 1, 0, 0, 0, 884, 105, 1, 0, 0, 0, 885, 890, 3, 108, 54, 0, 886, 887, 5, 141, 0, 0, 887, 889, 3, 108, 54, 0, 888, 886, 1, 0, 0, 0, 889, 892, 1, 0, 0, 0, 890, 888, 1, 0, 0, 0, 890, 891, 1, 0, 0, 0, 891, 107, 1, 0, 0, 0, 892, 890, 1, 0, 0, 0, 893, 895, 3, 142, 71, 0, 894, 896, 7, 8, 0, 0, 895, 894, 1, 0, 0, 0, 895, 896, 1, 0, 0, 0, 896, 899, 1, 0, 0, 0, 897, 898, 5, 73, 0, 0, 898, 900, 7, 9, 0, 0, 899, 897, 1, 0, 0, 0, 899, 900, 1, 0, 0, 0, 900, 903, 1, 0, 0, 0, 901, 902, 5, 16, 0, 0, 902, 904, 5, 133, 0, 0, 903, 901, 1, 0, 0, 0, 903, 904, 1, 0, 0, 0, 904, 109, 1, 0, 0, 0, 905, 912, 3, 208, 104, 0, 906, 909, 3, 192, 96, 0, 907, 908, 5, 177, 0, 0, 908, 910, 3, 192, 96, 0, 909, 907, 1, 0, 0, 0, 909, 910, 1, 0, 0, 0, 910, 912, 1, 0, 0, 0, 911, 905, 1, 0, 0, 0, 911, 906, 1, 0, 0, 0, 912, 111, 1, 0, 0, 0, 913, 918, 3, 114, 57, 0, 914, 915, 5, 141, 0, 0, 915, 917, 3, 114, 57, 0, 916, 914, 1, 0, 0, 0, 917, 920, 1, 0, 0, 0, 918, 916, 1, 0, 0, 0, 918, 919, 1, 0, 0, 0, 919, 113, 1, 0, 0, 0, 920, 918, 1, 0, 0, 0, 921, 922, 3, 204, 102, 0, 922, 923, 5, 147, 0, 0, 923, 924, 3, 194, 97, 0, 924, 115, 1, 0, 0, 0, 925, 927, 3, 118, 59, 0, 926, 925, 1, 0, 0, 0, 926, 927, 1, 0, 0, 0, 927, 929, 1, 0, 0, 0, 928, 930, 3, 120, 60, 0, 929, 928, 1, 0, 0, 0, 929, 930, 1, 0, 0, 0, 930, 932, 1, 0, 0, 0, 931, 933, 3, 124, 62, 0, 932, 931, 1, 0, 0, 0, 932, 933, 1, 0, 0, 0, 933, 117, 1, 0, 0, 0, 934, 935, 5, 80, 0, 0, 935, 936, 5, 11, 0, 0, 936, 937, 3, 136, 68, 0, 937, 119, 1, 0, 0, 0, 938, 939, 5, 77, 0, 0, 939, 940, 5, 11, 0, 0, 940, 941, 3, 106, 53, 0, 941, 121, 1, 0, 0, 0, 942, 943, 5, 125, 0, 0, 943, 944, 5, 41, 0, 0, 944, 945, 5, 155, 0, 0, 945, 946, 3, 78, 39, 0, 946, 947, 5, 175, 0, 0, 947, 123, 1, 0, 0, 0, 948, 949, 7, 10, 0, 0, 949, 950, 3, 126, 63, 0, 950, 125, 1, 0, 0, 0, 951, 958, 3, 128, 64, 0, 952, 953, 5, 9, 0, 0, 953, 954, 3, 128, 64, 0, 954, 955, 5, 2, 0, 0, 955, 956, 3, 128, 64, 0, 956, 958, 1, 0, 0, 0, 957, 951, 1, 0, 0, 0, 957, 952, 1, 0, 0, 0, 958, 127, 1, 0, 0, 0, 959, 960, 5, 20, 0, 0, 960, 972, 5, 93, 0, 0, 961, 962, 5, 114, 0, 0, 962, 972, 5, 83, 0, 0, 963, 964, 5, 114, 0, 0, 964, 972, 5, 36, 0, 0, 965, 966, 3, 142, 71, 0, 966, 967, 5, 83, 0, 0, 967, 972, 1, 0, 0, 0, 968, 969, 3, 142, 71, 0, 969, 970, 5, 36, 0, 0, 970, 972, 1, 0, 0, 0, 971, 959, 1, 0, 0, 0, 971, 961, 1, 0, 0, 0, 971, 963, 1, 0, 0, 0, 971, 965, 1, 0, 0, 0, 971, 968, 1, 0, 0, 0, 972, 129, 1, 0, 0, 0, 973, 974, 3, 142, 71, 0, 974, 975, 5, 0, 0, 1, 975, 131, 1, 0, 0, 0, 976, 977, 6, 66, -1, 0, 977, 978, 3, 204, 102, 0, 978, 979, 5, 155, 0, 0, 979, 980, 3, 204, 102, 0, 980, 987, 3, 132, 66, 0, 981, 982, 5, 141, 0, 0, 982, 983, 3, 204, 102, 0, 983, 984, 3, 132, 66, 0, 984, 986, 1, 0, 0, 0, 985, 981, 1, 0, 0, 0, 986, 989, 1, 0, 0, 0, 987, 985, 1, 0, 0, 0, 987, 988, 1, 0, 0, 0, 988, 991, 1, 0, 0, 0, 989, 987, 1, 0, 0, 0, 990, 992, 5, 141, 0, 0, 991, 990, 1, 0, 0, 0, 991, 992, 1, 0, 0, 0, 992, 993, 1, 0, 0, 0, 993, 994, 5, 175, 0, 0, 994, 1040, 1, 0, 0, 0, 995, 996, 3, 204, 102, 0, 996, 997, 5, 155, 0, 0, 997, 1002, 3, 206, 103, 0, 998, 999, 5, 141, 0, 0, 999, 1001, 3, 206, 103, 0, 1000, 998, 1, 0, 0, 0, 1001, 1004, 1, 0, 0, 0, 1002, 1000, 1, 0, 0, 0, 1002, 1003, 1, 0, 0, 0, 1003, 1006, 1, 0, 0, 0, 1004, 1002, 1, 0, 0, 0, 1005, 1007, 5, 141, 0, 0, 1006, 1005, 1, 0, 0, 0, 1006, 1007, 1, 0, 0, 0, 1007, 1008, 1, 0, 0, 0, 1008, 1009, 5, 175, 0, 0, 1009, 1040, 1, 0, 0, 0, 1010, 1011, 3, 204, 102, 0, 1011, 1012, 5, 155, 0, 0, 1012, 1017, 3, 132, 66, 0, 1013, 1014, 5, 141, 0, 0, 1014, 1016, 3, 132, 66, 0, 1015, 1013, 1, 0, 0, 0, 1016, 1019, 1, 0, 0, 0, 1017, 1015, 1, 0, 0, 0, 1017, 1018, 1, 0, 0, 0, 1018, 1021, 1, 0, 0, 0, 1019, 1017, 1, 0, 0, 0, 1020, 1022, 5, 141, 0, 0, 1021, 1020, 1, 0, 0, 0, 1021, 1022, 1, 0, 0, 0, 1022, 1023, 1, 0, 0, 0, 1023, 1024, 5, 175, 0, 0, 1024, 1040, 1, 0, 0, 0, 1025, 1026, 3, 204, 102, 0, 1026, 1028, 5, 155, 0, 0, 1027, 1029, 3, 136, 68, 0, 1028, 1027, 1, 0, 0, 0, 1028, 1029, 1, 0, 0, 0, 1029, 1030, 1, 0, 0, 0, 1030, 1031, 5, 175, 0, 0, 1031, 1040, 1, 0, 0, 0, 1032, 1034, 3, 204, 102, 0, 1033, 1035, 3, 204, 102, 0, 1034, 1033, 1, 0, 0, 0, 1035, 1036, 1, 0, 0, 0, 1036, 1034, 1, 0, 0, 0, 1036, 1037, 1, 0, 0, 0, 1037, 1040, 1, 0, 0, 0, 1038, 1040, 3, 204, 102, 0, 1039, 976, 1, 0, 0, 0, 1039, 995, 1, 0, 0, 0, 1039, 1010, 1, 0, 0, 0, 1039, 1025, 1, 0, 0, 0, 1039, 1032, 1, 0, 0, 0, 1039, 1038, 1, 0, 0, 0, 1040, 1049, 1, 0, 0, 0, 1041, 1042, 10, 7, 0, 0, 1042, 1044, 5, 154, 0, 0, 1043, 1045, 5, 131, 0, 0, 1044, 1043, 1, 0, 0, 0, 1044, 1045, 1, 0, 0, 0, 1045, 1046, 1, 0, 0, 0, 1046, 1048, 5, 174, 0, 0, 1047, 1041, 1, 0, 0, 0, 1048, 1051, 1, 0, 0, 0, 1049, 1047, 1, 0, 0, 0, 1049, 1050, 1, 0, 0, 0, 1050, 133, 1, 0, 0, 0, 1051, 1049, 1, 0, 0, 0, 1052, 1054, 3, 204, 102, 0, 1053, 1055, 3, 204, 102, 0, 1054, 1053, 1, 0, 0, 0, 1055, 1056, 1, 0, 0, 0, 1056, 1054, 1, 0, 0, 0, 1056, 1057, 1, 0, 0, 0, 1057, 1060, 1, 0, 0, 0, 1058, 1060, 3, 204, 102, 0, 1059, 1052, 1, 0, 0, 0, 1059, 1058, 1, 0, 0, 0, 1060, 135, 1, 0, 0, 0, 1061, 1066, 3, 142, 71, 0, 1062, 1063, 5, 141, 0, 0, 1063, 1065, 3, 142, 71, 0, 1064, 1062, 1, 0, 0, 0, 1065, 1068, 1, 0, 0, 0, 1066, 1064, 1, 0, 0, 0, 1066, 1067, 1, 0, 0, 0, 1067, 1070, 1, 0, 0, 0, 1068, 1066, 1, 0, 0, 0, 1069, 1071, 5, 141, 0, 0, 1070, 1069, 1, 0, 0, 0, 1070, 1071, 1, 0, 0, 0, 1071, 137, 1, 0, 0, 0, 1072, 1077, 3, 140, 70, 0, 1073, 1074, 5, 141, 0, 0, 1074, 1076, 3, 140, 70, 0, 1075, 1073, 1, 0, 0, 0, 1076, 1079, 1, 0, 0, 0, 1077, 1075, 1, 0, 0, 0, 1077, 1078, 1, 0, 0, 0, 1078, 1081, 1, 0, 0, 0, 1079, 1077, 1, 0, 0, 0, 1080, 1082, 5, 141, 0, 0, 1081, 1080, 1, 0, 0, 0, 1081, 1082, 1, 0, 0, 0, 1082, 139, 1, 0, 0, 0, 1083, 1084, 3, 204, 102, 0, 1084, 1085, 5, 140, 0, 0, 1085, 1086, 3, 142, 71, 0, 1086, 1089, 1, 0, 0, 0, 1087, 1089, 3, 142, 71, 0, 1088, 1083, 1, 0, 0, 0, 1088, 1087, 1, 0, 0, 0, 1089, 141, 1, 0, 0, 0, 1090, 1091, 6, 71, -1, 0, 1091, 1093, 5, 12, 0, 0, 1092, 1094, 3, 142, 71, 0, 1093, 1092, 1, 0, 0, 0, 1093, 1094, 1, 0, 0, 0, 1094, 1100, 1, 0, 0, 0, 1095, 1096, 5, 120, 0, 0, 1096, 1097, 3, 142, 71, 0, 1097, 1098, 5, 102, 0, 0, 1098, 1099, 3, 142, 71, 0, 1099, 1101, 1, 0, 0, 0, 1100, 1095, 1, 0, 0, 0, 1101, 1102, 1, 0, 0, 0, 1102, 1100, 1, 0, 0, 0, 1102, 1103, 1, 0, 0, 0, 1103, 1106, 1, 0, 0, 0, 1104, 1105, 5, 26, 0, 0, 1105, 1107, 3, 142, 71, 0, 1106, 1104, 1, 0, 0, 0, 1106, 1107, 1, 0, 0, 0, 1107, 1108, 1, 0, 0, 0, 1108, 1109, 5, 27, 0, 0, 1109, 1440, 1, 0, 0, 0, 1110, 1111, 5, 13, 0, 0, 1111, 1112, 5, 155, 0, 0, 1112, 1113, 3, 142, 71, 0, 1113, 1114, 5, 6, 0, 0, 1114, 1115, 3, 132, 66, 0, 1115, 1116, 5, 175, 0, 0, 1116, 1440, 1, 0, 0, 0, 1117, 1118, 5, 113, 0, 0, 1118, 1119, 5, 155, 0, 0, 1119, 1120, 3, 142, 71, 0, 1120, 1121, 5, 6, 0, 0, 1121, 1122, 3, 132, 66, 0, 1122, 1123, 5, 175, 0, 0, 1123, 1440, 1, 0, 0, 0, 1124, 1125, 5, 21, 0, 0, 1125, 1440, 5, 133, 0, 0, 1126, 1127, 5, 54, 0, 0, 1127, 1440, 5, 133, 0, 0, 1128, 1129, 5, 54, 0, 0, 1129, 1130, 3, 142, 71, 0, 1130, 1131, 3, 196, 98, 0, 1131, 1440, 1, 0, 0, 0, 1132, 1133, 5, 101, 0, 0, 1133, 1134, 5, 155, 0, 0, 1134, 1135, 3, 142, 71, 0, 1135, 1136, 5, 38, 0, 0, 1136, 1139, 3, 142, 71, 0, 1137, 1138, 5, 37, 0, 0, 1138, 1140, 3, 142, 71, 0, 1139, 1137, 1, 0, 0, 0, 1139, 1140, 1, 0, 0, 0, 1140, 1141, 1, 0, 0, 0, 1141, 1142, 5, 175, 0, 0, 1142, 1440, 1, 0, 0, 0, 1143, 1144, 5, 105, 0, 0, 1144, 1440, 5, 133, 0, 0, 1145, 1146, 5, 110, 0, 0, 1146, 1147, 5, 155, 0, 0, 1147, 1148, 7, 11, 0, 0, 1148, 1149, 3, 210, 105, 0, 1149, 1150, 5, 38, 0, 0, 1150, 1151, 3, 142, 71, 0, 1151, 1152, 5, 175, 0, 0, 1152, 1440, 1, 0, 0, 0, 1153, 1154, 5, 17, 0, 0, 1154, 1155, 5, 155, 0, 0, 1155, 1156, 5, 133, 0, 0, 1156, 1440, 5, 175, 0, 0, 1157, 1158, 5, 17, 0, 0, 1158, 1159, 5, 155, 0, 0, 1159, 1160, 3, 136, 68, 0, 1160, 1161, 5, 175, 0, 0, 1161, 1440, 1, 0, 0, 0, 1162, 1163, 5, 17, 0, 0, 1163, 1164, 5, 155, 0, 0, 1164, 1165, 5, 135, 0, 0, 1165, 1166, 5, 29, 0, 0, 1166, 1167, 5, 155, 0, 0, 1167, 1168, 3, 8, 4, 0, 1168, 1169, 5, 175, 0, 0, 1169, 1170, 5, 89, 0, 0, 1170, 1171, 5, 155, 0, 0, 1171, 1172, 3, 146, 73, 0, 1172, 1173, 5, 175, 0, 0, 1173, 1174, 5, 175, 0, 0, 1174, 1188, 1, 0, 0, 0, 1175, 1176, 5, 155, 0, 0, 1176, 1177, 5, 135, 0, 0, 1177, 1178, 5, 29, 0, 0, 1178, 1179, 5, 155, 0, 0, 1179, 1180, 3, 8, 4, 0, 1180, 1181, 5, 175, 0, 0, 1181, 1182, 5, 89, 0, 0, 1182, 1183, 5, 155, 0, 0, 1183, 1184, 3, 146, 73, 0, 1184, 1185, 5, 175, 0, 0, 1185, 1186, 5, 175, 0, 0, 1186, 1188, 1, 0, 0, 0, 1187, 1162, 1, 0, 0, 0, 1187, 1175, 1, 0, 0, 0, 1188, 1440, 1, 0, 0, 0, 1189, 1190, 5, 17, 0, 0, 1190, 1191, 5, 155, 0, 0, 1191, 1192, 5, 135, 0, 0, 1192, 1193, 5, 29, 0, 0, 1193, 1194, 5, 155, 0, 0, 1194, 1195, 3, 8, 4, 0, 1195, 1196, 5, 175, 0, 0, 1196, 1197, 5, 175, 0, 0, 1197, 1440, 1, 0, 0, 0, 1198, 1199, 5, 17, 0, 0, 1199, 1200, 5, 155, 0, 0, 1200, 1201, 5, 135, 0, 0, 1201, 1202, 5, 89, 0, 0, 1202, 1203, 5, 155, 0, 0, 1203, 1204, 3, 146, 73, 0, 1204, 1205, 5, 175, 0, 0, 1205, 1206, 5, 175, 0, 0, 1206, 1216, 1, 0, 0, 0, 1207, 1208, 5, 155, 0, 0, 1208, 1209, 5, 135, 0, 0, 1209, 1210, 5, 89, 0, 0, 1210, 1211, 5, 155, 0, 0, 1211, 1212, 3, 146, 73, 0, 1212, 1213, 5, 175, 0, 0, 1213, 1214, 5, 175, 0, 0, 1214, 1216, 1, 0, 0, 0, 1215, 1198, 1, 0, 0, 0, 1215, 1207, 1, 0, 0, 0, 1216, 1440, 1, 0, 0, 0, 1217, 1218, 5, 17, 0, 0, 1218, 1219, 5, 155, 0, 0, 1219, 1220, 5, 135, 0, 0, 1220, 1440, 5, 175, 0, 0, 1221, 1222, 5, 17, 0, 0, 1222, 1223, 5, 155, 0, 0, 1223, 1224, 3, 204, 102, 0, 1224, 1225, 5, 145, 0, 0, 1225, 1226, 5, 135, 0, 0, 1226, 1227, 5, 29, 0, 0, 1227, 1228, 5, 155, 0, 0, 1228, 1229, 3, 8, 4, 0, 1229, 1230, 5, 175, 0, 0, 1230, 1231, 5, 89, 0, 0, 1231, 1232, 5, 155, 0, 0, 1232, 1233, 3, 146, 73, 0, 1233, 1234, 5, 175, 0, 0, 1234, 1235, 5, 175, 0, 0, 1235, 1440, 1, 0, 0, 0, 1236, 1237, 5, 17, 0, 0, 1237, 1238, 5, 155, 0, 0, 1238, 1239, 3, 204, 102, 0, 1239, 1240, 5, 145, 0, 0, 1240, 1241, 5, 135, 0, 0, 1241, 1242, 5, 29, 0, 0, 1242, 1243, 5, 155, 0, 0, 1243, 1244, 3, 8, 4, 0, 1244, 1245, 5, 175, 0, 0, 1245, 1246, 5, 175, 0, 0, 1246, 1440, 1, 0, 0, 0, 1247, 1248, 5, 17, 0, 0, 1248, 1249, 5, 155, 0, 0, 1249, 1250, 3, 204, 102, 0, 1250, 1251, 5, 145, 0, 0, 1251, 1252, 5, 135, 0, 0, 1252, 1253, 5, 89, 0, 0, 1253, 1254, 5, 155, 0, 0, 1254, 1255, 3, 146, 73, 0, 1255, 1256, 5, 175, 0, 0, 1256, 1257, 5, 175, 0, 0, 1257, 1440, 1, 0, 0, 0, 1258, 1259, 5, 17, 0, 0, 1259, 1260, 5, 155, 0, 0, 1260, 1261, 3, 204, 102, 0, 1261, 1262, 5, 145, 0, 0, 1262, 1263, 5, 135, 0, 0, 1263, 1264, 5, 175, 0, 0, 1264, 1440, 1, 0, 0, 0, 1265, 1266, 5, 135, 0, 0, 1266, 1267, 5, 17, 0, 0, 1267, 1268, 5, 155, 0, 0, 1268, 1269, 5, 133, 0, 0, 1269, 1440, 5, 175, 0, 0, 1270, 1271, 5, 135, 0, 0, 1271, 1272, 5, 17, 0, 0, 1272, 1273, 5, 155, 0, 0, 1273, 1274, 3, 136, 68, 0, 1274, 1275, 5, 175, 0, 0, 1275, 1440, 1, 0, 0, 0, 1276, 1277, 3, 204, 102, 0, 1277, 1279, 5, 155, 0, 0, 1278, 1280, 3, 136, 68, 0, 1279, 1278, 1, 0, 0, 0, 1279, 1280, 1, 0, 0, 0, 1280, 1281, 1, 0, 0, 0, 1281, 1282, 5, 175, 0, 0, 1282, 1283, 3, 122, 61, 0, 1283, 1440, 1, 0, 0, 0, 1284, 1285, 3, 204, 102, 0, 1285, 1287, 5, 155, 0, 0, 1286, 1288, 3, 136, 68, 0, 1287, 1286, 1, 0, 0, 0, 1287, 1288, 1, 0, 0, 0, 1288, 1289, 1, 0, 0, 0, 1289, 1290, 5, 175, 0, 0, 1290, 1299, 1, 0, 0, 0, 1291, 1293, 5, 155, 0, 0, 1292, 1294, 5, 25, 0, 0, 1293, 1292, 1, 0, 0, 0, 1293, 1294, 1, 0, 0, 0, 1294, 1296, 1, 0, 0, 0, 1295, 1297, 3, 136, 68, 0, 1296, 1295, 1, 0, 0, 0, 1296, 1297, 1, 0, 0, 0, 1297, 1298, 1, 0, 0, 0, 1298, 1300, 5, 175, 0, 0, 1299, 1291, 1, 0, 0, 0, 1299, 1300, 1, 0, 0, 0, 1300, 1307, 1, 0, 0, 0, 1301, 1302, 5, 32, 0, 0, 1302, 1303, 5, 155, 0, 0, 1303, 1304, 5, 121, 0, 0, 1304, 1305, 3, 142, 71, 0, 1305, 1306, 5, 175, 0, 0, 1306, 1308, 1, 0, 0, 0, 1307, 1301, 1, 0, 0, 0, 1307, 1308, 1, 0, 0, 0, 1308, 1309, 1, 0, 0, 0, 1309, 1310, 5, 79, 0, 0, 1310, 1311, 5, 155, 0, 0, 1311, 1312, 3, 116, 58, 0, 1312, 1313, 5, 175, 0, 0, 1313, 1440, 1, 0, 0, 0, 1314, 1315, 3, 204, 102, 0, 1315, 1317, 5, 155, 0, 0, 1316, 1318, 3, 136, 68, 0, 1317, 1316, 1, 0, 0, 0, 1317, 1318, 1, 0, 0, 0, 1318, 1319, 1, 0, 0, 0, 1319, 1320, 5, 175, 0, 0, 1320, 1329, 1, 0, 0, 0, 1321, 1323, 5, 155, 0, 0, 1322, 1324, 5, 25, 0, 0, 1323, 1322, 1, 0, 0, 0, 1323, 1324, 1, 0, 0, 0, 1324, 1326, 1, 0, 0, 0, 1325, 1327, 3, 136, 68, 0, 1326, 1325, 1, 0, 0, 0, 1326, 1327, 1, 0, 0, 0, 1327, 1328, 1, 0, 0, 0, 1328, 1330, 5, 175, 0, 0, 1329, 1321, 1, 0, 0, 0, 1329, 1330, 1, 0, 0, 0, 1330, 1337, 1, 0, 0, 0, 1331, 1332, 5, 32, 0, 0, 1332, 1333, 5, 155, 0, 0, 1333, 1334, 5, 121, 0, 0, 1334, 1335, 3, 142, 71, 0, 1335, 1336, 5, 175, 0, 0, 1336, 1338, 1, 0, 0, 0, 1337, 1331, 1, 0, 0, 0, 1337, 1338, 1, 0, 0, 0, 1338, 1339, 1, 0, 0, 0, 1339, 1340, 5, 79, 0, 0, 1340, 1341, 3, 204, 102, 0, 1341, 1440, 1, 0, 0, 0, 1342, 1348, 3, 204, 102, 0, 1343, 1345, 5, 155, 0, 0, 1344, 1346, 3, 136, 68, 0, 1345, 1344, 1, 0, 0, 0, 1345, 1346, 1, 0, 0, 0, 1346, 1347, 1, 0, 0, 0, 1347, 1349, 5, 175, 0, 0, 1348, 1343, 1, 0, 0, 0, 1348, 1349, 1, 0, 0, 0, 1349, 1350, 1, 0, 0, 0, 1350, 1352, 5, 155, 0, 0, 1351, 1353, 5, 25, 0, 0, 1352, 1351, 1, 0, 0, 0, 1352, 1353, 1, 0, 0, 0, 1353, 1355, 1, 0, 0, 0, 1354, 1356, 3, 136, 68, 0, 1355, 1354, 1, 0, 0, 0, 1355, 1356, 1, 0, 0, 0, 1356, 1360, 1, 0, 0, 0, 1357, 1358, 5, 77, 0, 0, 1358, 1359, 5, 11, 0, 0, 1359, 1361, 3, 106, 53, 0, 1360, 1357, 1, 0, 0, 0, 1360, 1361, 1, 0, 0, 0, 1361, 1362, 1, 0, 0, 0, 1362, 1369, 5, 175, 0, 0, 1363, 1364, 5, 32, 0, 0, 1364, 1365, 5, 155, 0, 0, 1365, 1366, 5, 121, 0, 0, 1366, 1367, 3, 142, 71, 0, 1367, 1368, 5, 175, 0, 0, 1368, 1370, 1, 0, 0, 0, 1369, 1363, 1, 0, 0, 0, 1369, 1370, 1, 0, 0, 0, 1370, 1440, 1, 0, 0, 0, 1371, 1440, 3, 154, 77, 0, 1372, 1440, 3, 212, 106, 0, 1373, 1440, 3, 194, 97, 0, 1374, 1375, 5, 143, 0, 0, 1375, 1440, 3, 142, 71, 25, 1376, 1377, 5, 71, 0, 0, 1377, 1440, 3, 142, 71, 17, 1378, 1379, 3, 184, 92, 0, 1379, 1380, 5, 145, 0, 0, 1380, 1382, 1, 0, 0, 0, 1381, 1378, 1, 0, 0, 0, 1381, 1382, 1, 0, 0, 0, 1382, 1383, 1, 0, 0, 0, 1383, 1389, 5, 135, 0, 0, 1384, 1385, 5, 29, 0, 0, 1385, 1386, 5, 155, 0, 0, 1386, 1387, 3, 8, 4, 0, 1387, 1388, 5, 175, 0, 0, 1388, 1390, 1, 0, 0, 0, 1389, 1384, 1, 0, 0, 0, 1389, 1390, 1, 0, 0, 0, 1390, 1440, 1, 0, 0, 0, 1391, 1392, 5, 58, 0, 0, 1392, 1397, 3, 204, 102, 0, 1393, 1394, 5, 141, 0, 0, 1394, 1396, 3, 204, 102, 0, 1395, 1393, 1, 0, 0, 0, 1396, 1399, 1, 0, 0, 0, 1397, 1395, 1, 0, 0, 0, 1397, 1398, 1, 0, 0, 0, 1398, 1401, 1, 0, 0, 0, 1399, 1397, 1, 0, 0, 0, 1400, 1402, 5, 141, 0, 0, 1401, 1400, 1, 0, 0, 0, 1401, 1402, 1, 0, 0, 0, 1402, 1403, 1, 0, 0, 0, 1403, 1404, 5, 140, 0, 0, 1404, 1405, 3, 142, 71, 10, 1405, 1440, 1, 0, 0, 0, 1406, 1407, 5, 155, 0, 0, 1407, 1408, 3, 48, 24, 0, 1408, 1409, 5, 175, 0, 0, 1409, 1440, 1, 0, 0, 0, 1410, 1411, 5, 155, 0, 0, 1411, 1412, 3, 142, 71, 0, 1412, 1413, 5, 175, 0, 0, 1413, 1440, 1, 0, 0, 0, 1414, 1415, 5, 155, 0, 0, 1415, 1416, 3, 136, 68, 0, 1416, 1417, 5, 175, 0, 0, 1417, 1440, 1, 0, 0, 0, 1418, 1420, 5, 5, 0, 0, 1419, 1418, 1, 0, 0, 0, 1419, 1420, 1, 0, 0, 0, 1420, 1421, 1, 0, 0, 0, 1421, 1423, 5, 154, 0, 0, 1422, 1424, 3, 136, 68, 0, 1423, 1422, 1, 0, 0, 0, 1423, 1424, 1, 0, 0, 0, 1424, 1425, 1, 0, 0, 0, 1425, 1440, 5, 174, 0, 0, 1426, 1428, 5, 153, 0, 0, 1427, 1429, 3, 40, 20, 0, 1428, 1427, 1, 0, 0, 0, 1428, 1429, 1, 0, 0, 0, 1429, 1430, 1, 0, 0, 0, 1430, 1440, 5, 173, 0, 0, 1431, 1440, 3, 144, 72, 0, 1432, 1433, 3, 204, 102, 0, 1433, 1434, 5, 139, 0, 0, 1434, 1435, 3, 142, 71, 3, 1435, 1440, 1, 0, 0, 0, 1436, 1437, 5, 150, 0, 0, 1437, 1440, 5, 131, 0, 0, 1438, 1440, 3, 164, 82, 0, 1439, 1090, 1, 0, 0, 0, 1439, 1110, 1, 0, 0, 0, 1439, 1117, 1, 0, 0, 0, 1439, 1124, 1, 0, 0, 0, 1439, 1126, 1, 0, 0, 0, 1439, 1128, 1, 0, 0, 0, 1439, 1132, 1, 0, 0, 0, 1439, 1143, 1, 0, 0, 0, 1439, 1145, 1, 0, 0, 0, 1439, 1153, 1, 0, 0, 0, 1439, 1157, 1, 0, 0, 0, 1439, 1187, 1, 0, 0, 0, 1439, 1189, 1, 0, 0, 0, 1439, 1215, 1, 0, 0, 0, 1439, 1217, 1, 0, 0, 0, 1439, 1221, 1, 0, 0, 0, 1439, 1236, 1, 0, 0, 0, 1439, 1247, 1, 0, 0, 0, 1439, 1258, 1, 0, 0, 0, 1439, 1265, 1, 0, 0, 0, 1439, 1270, 1, 0, 0, 0, 1439, 1276, 1, 0, 0, 0, 1439, 1284, 1, 0, 0, 0, 1439, 1314, 1, 0, 0, 0, 1439, 1342, 1, 0, 0, 0, 1439, 1371, 1, 0, 0, 0, 1439, 1372, 1, 0, 0, 0, 1439, 1373, 1, 0, 0, 0, 1439, 1374, 1, 0, 0, 0, 1439, 1376, 1, 0, 0, 0, 1439, 1381, 1, 0, 0, 0, 1439, 1391, 1, 0, 0, 0, 1439, 1406, 1, 0, 0, 0, 1439, 1410, 1, 0, 0, 0, 1439, 1414, 1, 0, 0, 0, 1439, 1419, 1, 0, 0, 0, 1439, 1426, 1, 0, 0, 0, 1439, 1431, 1, 0, 0, 0, 1439, 1432, 1, 0, 0, 0, 1439, 1436, 1, 0, 0, 0, 1439, 1438, 1, 0, 0, 0, 1440, 1580, 1, 0, 0, 0, 1441, 1445, 10, 24, 0, 0, 1442, 1446, 5, 135, 0, 0, 1443, 1446, 5, 177, 0, 0, 1444, 1446, 5, 164, 0, 0, 1445, 1442, 1, 0, 0, 0, 1445, 1443, 1, 0, 0, 0, 1445, 1444, 1, 0, 0, 0, 1446, 1447, 1, 0, 0, 0, 1447, 1579, 3, 142, 71, 25, 1448, 1452, 10, 23, 0, 0, 1449, 1453, 5, 165, 0, 0, 1450, 1453, 5, 143, 0, 0, 1451, 1453, 5, 142, 0, 0, 1452, 1449, 1, 0, 0, 0, 1452, 1450, 1, 0, 0, 0, 1452, 1451, 1, 0, 0, 0, 1453, 1454, 1, 0, 0, 0, 1454, 1579, 3, 142, 71, 24, 1455, 1480, 10, 22, 0, 0, 1456, 1481, 5, 146, 0, 0, 1457, 1481, 5, 147, 0, 0, 1458, 1481, 5, 159, 0, 0, 1459, 1481, 5, 156, 0, 0, 1460, 1481, 5, 157, 0, 0, 1461, 1481, 5, 148, 0, 0, 1462, 1481, 5, 149, 0, 0, 1463, 1465, 5, 71, 0, 0, 1464, 1463, 1, 0, 0, 0, 1464, 1465, 1, 0, 0, 0, 1465, 1466, 1, 0, 0, 0, 1466, 1468, 5, 50, 0, 0, 1467, 1469, 5, 15, 0, 0, 1468, 1467, 1, 0, 0, 0, 1468, 1469, 1, 0, 0, 0, 1469, 1481, 1, 0, 0, 0, 1470, 1472, 5, 71, 0, 0, 1471, 1470, 1, 0, 0, 0, 1471, 1472, 1, 0, 0, 0, 1472, 1473, 1, 0, 0, 0, 1473, 1481, 7, 12, 0, 0, 1474, 1481, 5, 171, 0, 0, 1475, 1481, 5, 172, 0, 0, 1476, 1481, 5, 161, 0, 0, 1477, 1481, 5, 151, 0, 0, 1478, 1481, 5, 152, 0, 0, 1479, 1481, 5, 160, 0, 0, 1480, 1456, 1, 0, 0, 0, 1480, 1457, 1, 0, 0, 0, 1480, 1458, 1, 0, 0, 0, 1480, 1459, 1, 0, 0, 0, 1480, 1460, 1, 0, 0, 0, 1480, 1461, 1, 0, 0, 0, 1480, 1462, 1, 0, 0, 0, 1480, 1464, 1, 0, 0, 0, 1480, 1471, 1, 0, 0, 0, 1480, 1474, 1, 0, 0, 0, 1480, 1475, 1, 0, 0, 0, 1480, 1476, 1, 0, 0, 0, 1480, 1477, 1, 0, 0, 0, 1480, 1478, 1, 0, 0, 0, 1480, 1479, 1, 0, 0, 0, 1481, 1482, 1, 0, 0, 0, 1482, 1579, 3, 142, 71, 23, 1483, 1484, 10, 19, 0, 0, 1484, 1486, 5, 55, 0, 0, 1485, 1487, 5, 71, 0, 0, 1486, 1485, 1, 0, 0, 0, 1486, 1487, 1, 0, 0, 0, 1487, 1488, 1, 0, 0, 0, 1488, 1489, 5, 25, 0, 0, 1489, 1490, 5, 38, 0, 0, 1490, 1579, 3, 142, 71, 20, 1491, 1492, 10, 18, 0, 0, 1492, 1493, 5, 163, 0, 0, 1493, 1579, 3, 142, 71, 19, 1494, 1495, 10, 16, 0, 0, 1495, 1496, 5, 2, 0, 0, 1496, 1579, 3, 142, 71, 17, 1497, 1498, 10, 15, 0, 0, 1498, 1499, 5, 76, 0, 0, 1499, 1579, 3, 142, 71, 16, 1500, 1502, 10, 14, 0, 0, 1501, 1503, 5, 71, 0, 0, 1502, 1501, 1, 0, 0, 0, 1502, 1503, 1, 0, 0, 0, 1503, 1504, 1, 0, 0, 0, 1504, 1505, 5, 9, 0, 0, 1505, 1506, 3, 142, 71, 0, 1506, 1507, 5, 2, 0, 0, 1507, 1508, 3, 142, 71, 15, 1508, 1579, 1, 0, 0, 0, 1509, 1510, 10, 13, 0, 0, 1510, 1511, 5, 166, 0, 0, 1511, 1512, 3, 142, 71, 0, 1512, 1513, 5, 140, 0, 0, 1513, 1514, 3, 142, 71, 13, 1514, 1579, 1, 0, 0, 0, 1515, 1516, 10, 38, 0, 0, 1516, 1517, 5, 155, 0, 0, 1517, 1518, 3, 48, 24, 0, 1518, 1519, 5, 175, 0, 0, 1519, 1579, 1, 0, 0, 0, 1520, 1521, 10, 37, 0, 0, 1521, 1523, 5, 155, 0, 0, 1522, 1524, 3, 136, 68, 0, 1523, 1522, 1, 0, 0, 0, 1523, 1524, 1, 0, 0, 0, 1524, 1525, 1, 0, 0, 0, 1525, 1579, 5, 175, 0, 0, 1526, 1527, 10, 33, 0, 0, 1527, 1528, 5, 154, 0, 0, 1528, 1529, 3, 142, 71, 0, 1529, 1530, 5, 174, 0, 0, 1530, 1579, 1, 0, 0, 0, 1531, 1532, 10, 32, 0, 0, 1532, 1534, 5, 154, 0, 0, 1533, 1535, 3, 142, 71, 0, 1534, 1533, 1, 0, 0, 0, 1534, 1535, 1, 0, 0, 0, 1535, 1536, 1, 0, 0, 0, 1536, 1538, 5, 140, 0, 0, 1537, 1539, 3, 142, 71, 0, 1538, 1537, 1, 0, 0, 0, 1538, 1539, 1, 0, 0, 0, 1539, 1540, 1, 0, 0, 0, 1540, 1579, 5, 174, 0, 0, 1541, 1542, 10, 31, 0, 0, 1542, 1543, 5, 145, 0, 0, 1543, 1579, 5, 131, 0, 0, 1544, 1545, 10, 30, 0, 0, 1545, 1546, 5, 145, 0, 0, 1546, 1579, 3, 204, 102, 0, 1547, 1548, 10, 29, 0, 0, 1548, 1549, 5, 162, 0, 0, 1549, 1550, 5, 154, 0, 0, 1550, 1551, 3, 142, 71, 0, 1551, 1552, 5, 174, 0, 0, 1552, 1579, 1, 0, 0, 0, 1553, 1554, 10, 28, 0, 0, 1554, 1555, 5, 162, 0, 0, 1555, 1579, 5, 131, 0, 0, 1556, 1557, 10, 27, 0, 0, 1557, 1558, 5, 162, 0, 0, 1558, 1579, 3, 204, 102, 0, 1559, 1560, 10, 26, 0, 0, 1560, 1561, 5, 138, 0, 0, 1561, 1579, 3, 134, 67, 0, 1562, 1563, 10, 21, 0, 0, 1563, 1564, 5, 48, 0, 0, 1564, 1579, 5, 73, 0, 0, 1565, 1566, 10, 20, 0, 0, 1566, 1568, 5, 55, 0, 0, 1567, 1569, 5, 71, 0, 0, 1568, 1567, 1, 0, 0, 0, 1568, 1569, 1, 0, 0, 0, 1569, 1570, 1, 0, 0, 0, 1570, 1579, 5, 72, 0, 0, 1571, 1576, 10, 12, 0, 0, 1572, 1573, 5, 6, 0, 0, 1573, 1577, 3, 204, 102, 0, 1574, 1575, 5, 6, 0, 0, 1575, 1577, 5, 133, 0, 0, 1576, 1572, 1, 0, 0, 0, 1576, 1574, 1, 0, 0, 0, 1577, 1579, 1, 0, 0, 0, 1578, 1441, 1, 0, 0, 0, 1578, 1448, 1, 0, 0, 0, 1578, 1455, 1, 0, 0, 0, 1578, 1483, 1, 0, 0, 0, 1578, 1491, 1, 0, 0, 0, 1578, 1494, 1, 0, 0, 0, 1578, 1497, 1, 0, 0, 0, 1578, 1500, 1, 0, 0, 0, 1578, 1509, 1, 0, 0, 0, 1578, 1515, 1, 0, 0, 0, 1578, 1520, 1, 0, 0, 0, 1578, 1526, 1, 0, 0, 0, 1578, 1531, 1, 0, 0, 0, 1578, 1541, 1, 0, 0, 0, 1578, 1544, 1, 0, 0, 0, 1578, 1547, 1, 0, 0, 0, 1578, 1553, 1, 0, 0, 0, 1578, 1556, 1, 0, 0, 0, 1578, 1559, 1, 0, 0, 0, 1578, 1562, 1, 0, 0, 0, 1578, 1565, 1, 0, 0, 0, 1578, 1571, 1, 0, 0, 0, 1579, 1582, 1, 0, 0, 0, 1580, 1578, 1, 0, 0, 0, 1580, 1581, 1, 0, 0, 0, 1581, 143, 1, 0, 0, 0, 1582, 1580, 1, 0, 0, 0, 1583, 1584, 5, 155, 0, 0, 1584, 1589, 3, 204, 102, 0, 1585, 1586, 5, 141, 0, 0, 1586, 1588, 3, 204, 102, 0, 1587, 1585, 1, 0, 0, 0, 1588, 1591, 1, 0, 0, 0, 1589, 1587, 1, 0, 0, 0, 1589, 1590, 1, 0, 0, 0, 1590, 1593, 1, 0, 0, 0, 1591, 1589, 1, 0, 0, 0, 1592, 1594, 5, 141, 0, 0, 1593, 1592, 1, 0, 0, 0, 1593, 1594, 1, 0, 0, 0, 1594, 1595, 1, 0, 0, 0, 1595, 1596, 5, 175, 0, 0, 1596, 1611, 1, 0, 0, 0, 1597, 1602, 3, 204, 102, 0, 1598, 1599, 5, 141, 0, 0, 1599, 1601, 3, 204, 102, 0, 1600, 1598, 1, 0, 0, 0, 1601, 1604, 1, 0, 0, 0, 1602, 1600, 1, 0, 0, 0, 1602, 1603, 1, 0, 0, 0, 1603, 1606, 1, 0, 0, 0, 1604, 1602, 1, 0, 0, 0, 1605, 1607, 5, 141, 0, 0, 1606, 1605, 1, 0, 0, 0, 1606, 1607, 1, 0, 0, 0, 1607, 1611, 1, 0, 0, 0, 1608, 1609, 5, 155, 0, 0, 1609, 1611, 5, 175, 0, 0, 1610, 1583, 1, 0, 0, 0, 1610, 1597, 1, 0, 0, 0, 1610, 1608, 1, 0, 0, 0, 1611, 1612, 1, 0, 0, 0, 1612, 1615, 5, 134, 0, 0, 1613, 1616, 3, 142, 71, 0, 1614, 1616, 3, 36, 18, 0, 1615, 1613, 1, 0, 0, 0, 1615, 1614, 1, 0, 0, 0, 1616, 1633, 1, 0, 0, 0, 1617, 1618, 5, 58, 0, 0, 1618, 1623, 3, 204, 102, 0, 1619, 1620, 5, 141, 0, 0, 1620, 1622, 3, 204, 102, 0, 1621, 1619, 1, 0, 0, 0, 1622, 1625, 1, 0, 0, 0, 1623, 1621, 1, 0, 0, 0, 1623, 1624, 1, 0, 0, 0, 1624, 1627, 1, 0, 0, 0, 1625, 1623, 1, 0, 0, 0, 1626, 1628, 5, 141, 0, 0, 1627, 1626, 1, 0, 0, 0, 1627, 1628, 1, 0, 0, 0, 1628, 1629, 1, 0, 0, 0, 1629, 1630, 5, 140, 0, 0, 1630, 1631, 3, 142, 71, 0, 1631, 1633, 1, 0, 0, 0, 1632, 1610, 1, 0, 0, 0, 1632, 1617, 1, 0, 0, 0, 1633, 145, 1, 0, 0, 0, 1634, 1639, 3, 148, 74, 0, 1635, 1636, 5, 141, 0, 0, 1636, 1638, 3, 148, 74, 0, 1637, 1635, 1, 0, 0, 0, 1638, 1641, 1, 0, 0, 0, 1639, 1637, 1, 0, 0, 0, 1639, 1640, 1, 0, 0, 0, 1640, 147, 1, 0, 0, 0, 1641, 1639, 1, 0, 0, 0, 1642, 1643, 3, 142, 71, 0, 1643, 1644, 5, 6, 0, 0, 1644, 1645, 3, 204, 102, 0, 1645, 149, 1, 0, 0, 0, 1646, 1653, 3, 154, 77, 0, 1647, 1653, 3, 152, 76, 0, 1648, 1649, 5, 153, 0, 0, 1649, 1650, 3, 142, 71, 0, 1650, 1651, 5, 173, 0, 0, 1651, 1653, 1, 0, 0, 0, 1652, 1646, 1, 0, 0, 0, 1652, 1647, 1, 0, 0, 0, 1652, 1648, 1, 0, 0, 0, 1653, 151, 1, 0, 0, 0, 1654, 1655, 5, 189, 0, 0, 1655, 153, 1, 0, 0, 0, 1656, 1657, 5, 157, 0, 0, 1657, 1661, 3, 204, 102, 0, 1658, 1660, 3, 156, 78, 0, 1659, 1658, 1, 0, 0, 0, 1660, 1663, 1, 0, 0, 0, 1661, 1659, 1, 0, 0, 0, 1661, 1662, 1, 0, 0, 0, 1662, 1664, 1, 0, 0, 0, 1663, 1661, 1, 0, 0, 0, 1664, 1665, 5, 178, 0, 0, 1665, 1686, 1, 0, 0, 0, 1666, 1667, 5, 157, 0, 0, 1667, 1671, 3, 204, 102, 0, 1668, 1670, 3, 156, 78, 0, 1669, 1668, 1, 0, 0, 0, 1670, 1673, 1, 0, 0, 0, 1671, 1669, 1, 0, 0, 0, 1671, 1672, 1, 0, 0, 0, 1672, 1674, 1, 0, 0, 0, 1673, 1671, 1, 0, 0, 0, 1674, 1678, 5, 149, 0, 0, 1675, 1677, 3, 150, 75, 0, 1676, 1675, 1, 0, 0, 0, 1677, 1680, 1, 0, 0, 0, 1678, 1676, 1, 0, 0, 0, 1678, 1679, 1, 0, 0, 0, 1679, 1681, 1, 0, 0, 0, 1680, 1678, 1, 0, 0, 0, 1681, 1682, 5, 158, 0, 0, 1682, 1683, 3, 204, 102, 0, 1683, 1684, 5, 149, 0, 0, 1684, 1686, 1, 0, 0, 0, 1685, 1656, 1, 0, 0, 0, 1685, 1666, 1, 0, 0, 0, 1686, 155, 1, 0, 0, 0, 1687, 1688, 3, 204, 102, 0, 1688, 1689, 5, 147, 0, 0, 1689, 1690, 3, 210, 105, 0, 1690, 1699, 1, 0, 0, 0, 1691, 1692, 3, 204, 102, 0, 1692, 1693, 5, 147, 0, 0, 1693, 1694, 5, 153, 0, 0, 1694, 1695, 3, 142, 71, 0, 1695, 1696, 5, 173, 0, 0, 1696, 1699, 1, 0, 0, 0, 1697, 1699, 3, 204, 102, 0, 1698, 1687, 1, 0, 0, 0, 1698, 1691, 1, 0, 0, 0, 1698, 1697, 1, 0, 0, 0, 1699, 157, 1, 0, 0, 0, 1700, 1705, 3, 160, 80, 0, 1701, 1702, 5, 141, 0, 0, 1702, 1704, 3, 160, 80, 0, 1703, 1701, 1, 0, 0, 0, 1704, 1707, 1, 0, 0, 0, 1705, 1703, 1, 0, 0, 0, 1705, 1706, 1, 0, 0, 0, 1706, 1709, 1, 0, 0, 0, 1707, 1705, 1, 0, 0, 0, 1708, 1710, 5, 141, 0, 0, 1709, 1708, 1, 0, 0, 0, 1709, 1710, 1, 0, 0, 0, 1710, 159, 1, 0, 0, 0, 1711, 1713, 3, 204, 102, 0, 1712, 1714, 3, 162, 81, 0, 1713, 1712, 1, 0, 0, 0, 1713, 1714, 1, 0, 0, 0, 1714, 1718, 1, 0, 0, 0, 1715, 1716, 5, 117, 0, 0, 1716, 1717, 5, 57, 0, 0, 1717, 1719, 3, 162, 81, 0, 1718, 1715, 1, 0, 0, 0, 1718, 1719, 1, 0, 0, 0, 1719, 1720, 1, 0, 0, 0, 1720, 1725, 5, 6, 0, 0, 1721, 1723, 5, 71, 0, 0, 1722, 1721, 1, 0, 0, 0, 1722, 1723, 1, 0, 0, 0, 1723, 1724, 1, 0, 0, 0, 1724, 1726, 5, 65, 0, 0, 1725, 1722, 1, 0, 0, 0, 1725, 1726, 1, 0, 0, 0, 1726, 1727, 1, 0, 0, 0, 1727, 1728, 5, 155, 0, 0, 1728, 1729, 3, 48, 24, 0, 1729, 1730, 5, 175, 0, 0, 1730, 1736, 1, 0, 0, 0, 1731, 1732, 3, 142, 71, 0, 1732, 1733, 5, 6, 0, 0, 1733, 1734, 3, 204, 102, 0, 1734, 1736, 1, 0, 0, 0, 1735, 1711, 1, 0, 0, 0, 1735, 1731, 1, 0, 0, 0, 1736, 161, 1, 0, 0, 0, 1737, 1738, 5, 155, 0, 0, 1738, 1743, 3, 204, 102, 0, 1739, 1740, 5, 141, 0, 0, 1740, 1742, 3, 204, 102, 0, 1741, 1739, 1, 0, 0, 0, 1742, 1745, 1, 0, 0, 0, 1743, 1741, 1, 0, 0, 0, 1743, 1744, 1, 0, 0, 0, 1744, 1746, 1, 0, 0, 0, 1745, 1743, 1, 0, 0, 0, 1746, 1747, 5, 175, 0, 0, 1747, 163, 1, 0, 0, 0, 1748, 1756, 3, 208, 104, 0, 1749, 1750, 3, 184, 92, 0, 1750, 1751, 5, 145, 0, 0, 1751, 1753, 1, 0, 0, 0, 1752, 1749, 1, 0, 0, 0, 1752, 1753, 1, 0, 0, 0, 1753, 1754, 1, 0, 0, 0, 1754, 1756, 3, 166, 83, 0, 1755, 1748, 1, 0, 0, 0, 1755, 1752, 1, 0, 0, 0, 1756, 165, 1, 0, 0, 0, 1757, 1762, 3, 204, 102, 0, 1758, 1759, 5, 145, 0, 0, 1759, 1761, 3, 204, 102, 0, 1760, 1758, 1, 0, 0, 0, 1761, 1764, 1, 0, 0, 0, 1762, 1760, 1, 0, 0, 0, 1762, 1763, 1, 0, 0, 0, 1763, 167, 1, 0, 0, 0, 1764, 1762, 1, 0, 0, 0, 1765, 1766, 6, 84, -1, 0, 1766, 1779, 3, 184, 92, 0, 1767, 1779, 3, 182, 91, 0, 1768, 1769, 5, 155, 0, 0, 1769, 1770, 3, 48, 24, 0, 1770, 1771, 5, 175, 0, 0, 1771, 1779, 1, 0, 0, 0, 1772, 1773, 5, 155, 0, 0, 1773, 1774, 3, 90, 45, 0, 1774, 1775, 5, 175, 0, 0, 1775, 1779, 1, 0, 0, 0, 1776, 1779, 3, 154, 77, 0, 1777, 1779, 3, 208, 104, 0, 1778, 1765, 1, 0, 0, 0, 1778, 1767, 1, 0, 0, 0, 1778, 1768, 1, 0, 0, 0, 1778, 1772, 1, 0, 0, 0, 1778, 1776, 1, 0, 0, 0, 1778, 1777, 1, 0, 0, 0, 1779, 1813, 1, 0, 0, 0, 1780, 1781, 10, 5, 0, 0, 1781, 1782, 5, 81, 0, 0, 1782, 1783, 5, 155, 0, 0, 1783, 1784, 3, 136, 68, 0, 1784, 1788, 3, 170, 85, 0, 1785, 1786, 5, 41, 0, 0, 1786, 1787, 5, 11, 0, 0, 1787, 1789, 3, 136, 68, 0, 1788, 1785, 1, 0, 0, 0, 1788, 1789, 1, 0, 0, 0, 1789, 1790, 1, 0, 0, 0, 1790, 1791, 5, 175, 0, 0, 1791, 1812, 1, 0, 0, 0, 1792, 1793, 10, 4, 0, 0, 1793, 1796, 5, 116, 0, 0, 1794, 1795, 5, 49, 0, 0, 1795, 1797, 5, 73, 0, 0, 1796, 1794, 1, 0, 0, 0, 1796, 1797, 1, 0, 0, 0, 1797, 1798, 1, 0, 0, 0, 1798, 1799, 5, 155, 0, 0, 1799, 1800, 3, 174, 87, 0, 1800, 1801, 5, 175, 0, 0, 1801, 1812, 1, 0, 0, 0, 1802, 1806, 10, 3, 0, 0, 1803, 1807, 3, 202, 101, 0, 1804, 1805, 5, 6, 0, 0, 1805, 1807, 3, 204, 102, 0, 1806, 1803, 1, 0, 0, 0, 1806, 1804, 1, 0, 0, 0, 1807, 1809, 1, 0, 0, 0, 1808, 1810, 3, 180, 90, 0, 1809, 1808, 1, 0, 0, 0, 1809, 1810, 1, 0, 0, 0, 1810, 1812, 1, 0, 0, 0, 1811, 1780, 1, 0, 0, 0, 1811, 1792, 1, 0, 0, 0, 1811, 1802, 1, 0, 0, 0, 1812, 1815, 1, 0, 0, 0, 1813, 1811, 1, 0, 0, 0, 1813, 1814, 1, 0, 0, 0, 1814, 169, 1, 0, 0, 0, 1815, 1813, 1, 0, 0, 0, 1816, 1818, 5, 37, 0, 0, 1817, 1819, 3, 172, 86, 0, 1818, 1817, 1, 0, 0, 0, 1819, 1820, 1, 0, 0, 0, 1820, 1818, 1, 0, 0, 0, 1820, 1821, 1, 0, 0, 0, 1821, 171, 1, 0, 0, 0, 1822, 1823, 3, 178, 89, 0, 1823, 1824, 5, 50, 0, 0, 1824, 1825, 5, 155, 0, 0, 1825, 1826, 3, 136, 68, 0, 1826, 1827, 5, 175, 0, 0, 1827, 173, 1, 0, 0, 0, 1828, 1833, 3, 176, 88, 0, 1829, 1830, 5, 141, 0, 0, 1830, 1832, 3, 176, 88, 0, 1831, 1829, 1, 0, 0, 0, 1832, 1835, 1, 0, 0, 0, 1833, 1831, 1, 0, 0, 0, 1833, 1834, 1, 0, 0, 0, 1834, 1837, 1, 0, 0, 0, 1835, 1833, 1, 0, 0, 0, 1836, 1838, 5, 141, 0, 0, 1837, 1836, 1, 0, 0, 0, 1837, 1838, 1, 0, 0, 0, 1838, 175, 1, 0, 0, 0, 1839, 1840, 3, 178, 89, 0, 1840, 1841, 5, 37, 0, 0, 1841, 1842, 3, 178, 89, 0, 1842, 1843, 5, 50, 0, 0, 1843, 1844, 5, 155, 0, 0, 1844, 1845, 3, 136, 68, 0, 1845, 1854, 5, 175, 0, 0, 1846, 1847, 3, 178, 89, 0, 1847, 1848, 5, 50, 0, 0, 1848, 1849, 5, 155, 0, 0, 1849, 1850, 3, 136, 68, 0, 1850, 1851, 5, 175, 0, 0, 1851, 1853, 1, 0, 0, 0, 1852, 1846, 1, 0, 0, 0, 1853, 1856, 1, 0, 0, 0, 1854, 1852, 1, 0, 0, 0, 1854, 1855, 1, 0, 0, 0, 1855, 177, 1, 0, 0, 0, 1856, 1854, 1, 0, 0, 0, 1857, 1858, 5, 155, 0, 0, 1858, 1859, 3, 136, 68, 0, 1859, 1860, 5, 175, 0, 0, 1860, 1863, 1, 0, 0, 0, 1861, 1863, 3, 142, 71, 0, 1862, 1857, 1, 0, 0, 0, 1862, 1861, 1, 0, 0, 0, 1863, 179, 1, 0, 0, 0, 1864, 1865, 5, 155, 0, 0, 1865, 1870, 3, 204, 102, 0, 1866, 1867, 5, 141, 0, 0, 1867, 1869, 3, 204, 102, 0, 1868, 1866, 1, 0, 0, 0, 1869, 1872, 1, 0, 0, 0, 1870, 1868, 1, 0, 0, 0, 1870, 1871, 1, 0, 0, 0, 1871, 1873, 1, 0, 0, 0, 1872, 1870, 1, 0, 0, 0, 1873, 1874, 5, 175, 0, 0, 1874, 181, 1, 0, 0, 0, 1875, 1876, 3, 204, 102, 0, 1876, 1878, 5, 155, 0, 0, 1877, 1879, 3, 186, 93, 0, 1878, 1877, 1, 0, 0, 0, 1878, 1879, 1, 0, 0, 0, 1879, 1880, 1, 0, 0, 0, 1880, 1881, 5, 175, 0, 0, 1881, 183, 1, 0, 0, 0, 1882, 1883, 3, 188, 94, 0, 1883, 1884, 5, 145, 0, 0, 1884, 1886, 1, 0, 0, 0, 1885, 1882, 1, 0, 0, 0, 1885, 1886, 1, 0, 0, 0, 1886, 1887, 1, 0, 0, 0, 1887, 1888, 3, 166, 83, 0, 1888, 185, 1, 0, 0, 0, 1889, 1894, 3, 142, 71, 0, 1890, 1891, 5, 141, 0, 0, 1891, 1893, 3, 142, 71, 0, 1892, 1890, 1, 0, 0, 0, 1893, 1896, 1, 0, 0, 0, 1894, 1892, 1, 0, 0, 0, 1894, 1895, 1, 0, 0, 0, 1895, 1898, 1, 0, 0, 0, 1896, 1894, 1, 0, 0, 0, 1897, 1899, 5, 141, 0, 0, 1898, 1897, 1, 0, 0, 0, 1898, 1899, 1, 0, 0, 0, 1899, 187, 1, 0, 0, 0, 1900, 1901, 3, 204, 102, 0, 1901, 189, 1, 0, 0, 0, 1902, 1911, 5, 129, 0, 0, 1903, 1904, 5, 145, 0, 0, 1904, 1911, 7, 13, 0, 0, 1905, 1906, 5, 131, 0, 0, 1906, 1908, 5, 145, 0, 0, 1907, 1909, 7, 13, 0, 0, 1908, 1907, 1, 0, 0, 0, 1908, 1909, 1, 0, 0, 0, 1909, 1911, 1, 0, 0, 0, 1910, 1902, 1, 0, 0, 0, 1910, 1903, 1, 0, 0, 0, 1910, 1905, 1, 0, 0, 0, 1911, 191, 1, 0, 0, 0, 1912, 1914, 7, 14, 0, 0, 1913, 1912, 1, 0, 0, 0, 1913, 1914, 1, 0, 0, 0, 1914, 1921, 1, 0, 0, 0, 1915, 1922, 3, 190, 95, 0, 1916, 1922, 5, 130, 0, 0, 1917, 1922, 5, 131, 0, 0, 1918, 1922, 5, 132, 0, 0, 1919, 1922, 5, 51, 0, 0, 1920, 1922, 5, 70, 0, 0, 1921, 1915, 1, 0, 0, 0, 1921, 1916, 1, 0, 0, 0, 1921, 1917, 1, 0, 0, 0, 1921, 1918, 1, 0, 0, 0, 1921, 1919, 1, 0, 0, 0, 1921, 1920, 1, 0, 0, 0, 1922, 193, 1, 0, 0, 0, 1923, 1927, 3, 192, 96, 0, 1924, 1927, 5, 133, 0, 0, 1925, 1927, 5, 72, 0, 0, 1926, 1923, 1, 0, 0, 0, 1926, 1924, 1, 0, 0, 0, 1926, 1925, 1, 0, 0, 0, 1927, 195, 1, 0, 0, 0, 1928, 1929, 7, 15, 0, 0, 1929, 197, 1, 0, 0, 0, 1930, 1931, 7, 16, 0, 0, 1931, 199, 1, 0, 0, 0, 1932, 1933, 7, 17, 0, 0, 1933, 201, 1, 0, 0, 0, 1934, 1937, 5, 128, 0, 0, 1935, 1937, 3, 200, 100, 0, 1936, 1934, 1, 0, 0, 0, 1936, 1935, 1, 0, 0, 0, 1937, 203, 1, 0, 0, 0, 1938, 1942, 5, 128, 0, 0, 1939, 1942, 3, 196, 98, 0, 1940, 1942, 3, 198, 99, 0, 1941, 1938, 1, 0, 0, 0, 1941, 1939, 1, 0, 0, 0, 1941, 1940, 1, 0, 0, 0, 1942, 205, 1, 0, 0, 0, 1943, 1944, 3, 210, 105, 0, 1944, 1945, 5, 147, 0, 0, 1945, 1946, 3, 192, 96, 0, 1946, 207, 1, 0, 0, 0, 1947, 1948, 5, 153, 0, 0, 1948, 1949, 3, 142, 71, 0, 1949, 1950, 5, 173, 0, 0, 1950, 209, 1, 0, 0, 0, 1951, 1954, 5, 133, 0, 0, 1952, 1954, 3, 212, 106, 0, 1953, 1951, 1, 0, 0, 0, 1953, 1952, 1, 0, 0, 0, 1954, 211, 1, 0, 0, 0, 1955, 1959, 5, 168, 0, 0, 1956, 1958, 3, 214, 107, 0, 1957, 1956, 1, 0, 0, 0, 1958, 1961, 1, 0, 0, 0, 1959, 1957, 1, 0, 0, 0, 1959, 1960, 1, 0, 0, 0, 1960, 1962, 1, 0, 0, 0, 1961, 1959, 1, 0, 0, 0, 1962, 1963, 5, 170, 0, 0, 1963, 213, 1, 0, 0, 0, 1964, 1965, 5, 184, 0, 0, 1965, 1966, 3, 142, 71, 0, 1966, 1967, 5, 173, 0, 0, 1967, 1970, 1, 0, 0, 0, 1968, 1970, 5, 183, 0, 0, 1969, 1964, 1, 0, 0, 0, 1969, 1968, 1, 0, 0, 0, 1970, 215, 1, 0, 0, 0, 1971, 1975, 5, 169, 0, 0, 1972, 1974, 3, 218, 109, 0, 1973, 1972, 1, 0, 0, 0, 1974, 1977, 1, 0, 0, 0, 1975, 1973, 1, 0, 0, 0, 1975, 1976, 1, 0, 0, 0, 1976, 1978, 1, 0, 0, 0, 1977, 1975, 1, 0, 0, 0, 1978, 1979, 5, 0, 0, 1, 1979, 217, 1, 0, 0, 0, 1980, 1981, 5, 186, 0, 0, 1981, 1982, 3, 142, 71, 0, 1982, 1983, 5, 173, 0, 0, 1983, 1986, 1, 0, 0, 0, 1984, 1986, 5, 185, 0, 0, 1985, 1980, 1, 0, 0, 0, 1985, 1984, 1, 0, 0, 0, 1986, 219, 1, 0, 0, 0, 247, 223, 230, 238, 245, 249, 263, 267, 270, 274, 277, 284, 288, 297, 302, 311, 319, 326, 330, 336, 341, 349, 356, 362, 373, 381, 395, 399, 404, 407, 422, 428, 433, 439, 445, 450, 456, 462, 467, 469, 477, 481, 484, 489, 493, 497, 502, 506, 513, 516, 520, 523, 527, 530, 533, 536, 539, 542, 545, 549, 553, 556, 559, 563, 566, 569, 572, 576, 579, 583, 591, 597, 618, 642, 649, 654, 680, 684, 688, 693, 697, 702, 716, 725, 733, 736, 742, 750, 753, 758, 765, 775, 783, 789, 791, 795, 800, 807, 810, 814, 818, 821, 827, 829, 832, 836, 840, 843, 845, 847, 852, 863, 868, 872, 878, 883, 890, 895, 899, 903, 909, 911, 918, 926, 929, 932, 957, 971, 987, 991, 1002, 1006, 1017, 1021, 1028, 1036, 1039, 1044, 1049, 1056, 1059, 1066, 1070, 1077, 1081, 1088, 1093, 1102, 1106, 1139, 1187, 1215, 1279, 1287, 1293, 1296, 1299, 1307, 1317, 1323, 1326, 1329, 1337, 1345, 1348, 1352, 1355, 1360, 1369, 1381, 1389, 1397, 1401, 1419, 1423, 1428, 1439, 1445, 1452, 1464, 1468, 1471, 1480, 1486, 1502, 1523, 1534, 1538, 1568, 1576, 1578, 1580, 1589, 1593, 1602, 1606, 1610, 1615, 1623, 1627, 1632, 1639, 1652, 1661, 1671, 1678, 1685, 1698, 1705, 1709, 1713, 1718, 1722, 1725, 1735, 1743, 1752, 1755, 1762, 1778, 1788, 1796, 1806, 1809, 1811, 1813, 1820, 1833, 1837, 1854, 1862, 1870, 1878, 1885, 1894, 1898, 1908, 1910, 1913, 1921, 1926, 1936, 1941, 1953, 1959, 1969, 1975, 1985] \ No newline at end of file diff --git a/common/hogql_parser/HogQLParser.tokens b/common/hogql_parser/HogQLParser.tokens index ff4c37fb8c46..83760b967113 100644 --- a/common/hogql_parser/HogQLParser.tokens +++ b/common/hogql_parser/HogQLParser.tokens @@ -29,198 +29,204 @@ EXCEPT=28 EXCLUDE=29 EXTRACT=30 FINAL=31 -FINALLY=32 -FIRST=33 -FN=34 -FOLLOWING=35 -FOR=36 -FROM=37 -FULL=38 -FUN=39 -GROUP=40 -GROUPING=41 -HAVING=42 -HOUR=43 -ID=44 -IF=45 -ILIKE=46 -IN=47 -INF=48 -INNER=49 -INTERSECT=50 -INTERVAL=51 -IS=52 -JOIN=53 -KEY=54 -LAMBDA=55 -LAST=56 -LEADING=57 -LEFT=58 -LET=59 -LIKE=60 -LIMIT=61 -MATERIALIZED=62 -MINUTE=63 -MONTH=64 -NAME=65 -NAN_SQL=66 -NOT=67 -NULL_SQL=68 -NULLS=69 -OFFSET=70 -ON=71 -OR=72 -ORDER=73 -OUTER=74 -OVER=75 -PARTITION=76 -PRECEDING=77 -PREWHERE=78 -QUALIFY=79 -QUARTER=80 -RANGE=81 -RECURSIVE=82 -REPLACE=83 -RETURN=84 -RIGHT=85 -ROLLUP=86 -ROW=87 -ROWS=88 -SAMPLE=89 -SECOND=90 -SELECT=91 -SEMI=92 -SETS=93 -SETTINGS=94 -SUBSTRING=95 -THEN=96 -THROW=97 -TIES=98 -TIMESTAMP=99 -TO=100 -TOP=101 -TOTALS=102 -TRAILING=103 -TRIM=104 -TRUNCATE=105 -TRY=106 -TRY_CAST=107 -UNBOUNDED=108 -UNION=109 -UNPIVOT=110 -USING=111 -VALUES=112 -WEEK=113 -WHEN=114 -WHERE=115 -WHILE=116 -WINDOW=117 -WITH=118 -WITHIN=119 -YEAR=120 -ESCAPE_CHAR_COMMON=121 -IDENTIFIER=122 -FLOATING_LITERAL=123 -OCTAL_LITERAL=124 -DECIMAL_LITERAL=125 -HEXADECIMAL_LITERAL=126 -STRING_LITERAL=127 -ARROW=128 -ASTERISK=129 -BACKQUOTE=130 -BACKSLASH=131 -DOUBLECOLON=132 -COLONEQUALS=133 -COLON=134 -COMMA=135 -CONCAT=136 -DASH=137 -DOLLAR=138 -DOT=139 -EQ_DOUBLE=140 -EQ_SINGLE=141 -GT_EQ=142 -GT=143 -HASH=144 -IREGEX_SINGLE=145 -IREGEX_DOUBLE=146 -LBRACE=147 -LBRACKET=148 -LPAREN=149 -LT_EQ=150 -LT=151 -LT_SLASH=152 -NOT_EQ=153 -NOT_IREGEX=154 -NOT_REGEX=155 -NULL_PROPERTY=156 -NULLISH=157 -PERCENT=158 -PLUS=159 -QUERY=160 -QUOTE_DOUBLE=161 -QUOTE_SINGLE_TEMPLATE=162 -QUOTE_SINGLE_TEMPLATE_FULL=163 -QUOTE_SINGLE=164 -REGEX_SINGLE=165 -REGEX_DOUBLE=166 -RBRACE=167 -RBRACKET=168 -RPAREN=169 -SEMICOLON=170 -SLASH=171 -SLASH_GT=172 -UNDERSCORE=173 -MULTI_LINE_COMMENT=174 -SINGLE_LINE_COMMENT=175 -WHITESPACE=176 -STRING_TEXT=177 -STRING_ESCAPE_TRIGGER=178 -FULL_STRING_TEXT=179 -FULL_STRING_ESCAPE_TRIGGER=180 -TAG_WS=181 -TAGC_WS=182 -HOGQLX_TEXT_TEXT=183 -HOGQLX_TEXT_WS=184 -'->'=128 -'*'=129 -'`'=130 -'\\'=131 -'::'=132 -':='=133 -':'=134 -','=135 -'||'=136 -'-'=137 -'$'=138 -'.'=139 -'=='=140 -'>='=142 -'#'=144 -'~*'=145 -'=~*'=146 -'{'=147 -'['=148 -'('=149 -'<='=150 -'<'=151 -''=134 +'*'=135 +'`'=136 +'\\'=137 +'::'=138 +':='=139 +':'=140 +','=141 +'||'=142 +'-'=143 +'$'=144 +'.'=145 +'=='=146 +'>='=148 +'#'=150 +'~*'=151 +'=~*'=152 +'{'=153 +'['=154 +'('=155 +'<='=156 +'<'=157 +' #include #include #include @@ -218,6 +219,11 @@ std::string Json::dumpImpl(int indent, int currentIndent) const { } else if constexpr (std::is_same_v) { return std::to_string(v); } else if constexpr (std::is_same_v) { + if (std::isinf(v)) { + return v < 0 ? "\"-Infinity\"" : "\"Infinity\""; + } else if (std::isnan(v)) { + return "\"NaN\""; + } std::ostringstream oss; oss << std::setprecision(17) << v; std::string result = oss.str(); diff --git a/common/hogql_parser/package.json b/common/hogql_parser/package.json index f1765e0b847e..bf57418d81aa 100644 --- a/common/hogql_parser/package.json +++ b/common/hogql_parser/package.json @@ -1,6 +1,6 @@ { "name": "@posthog/hogql-parser", - "version": "1.3.31", + "version": "1.3.32", "description": "WebAssembly HogQL Parser - Parse HogQL queries in JavaScript/TypeScript", "keywords": [ "antlr4", diff --git a/common/hogql_parser/parser_json.cpp b/common/hogql_parser/parser_json.cpp index d66271e16c5a..d02451a45d9b 100644 --- a/common/hogql_parser/parser_json.cpp +++ b/common/hogql_parser/parser_json.cpp @@ -186,7 +186,7 @@ class HogQLParseTreeJSONConverter : public HogQLParserBaseVisitor { try { return visitAsJSON(tree); } catch (const bad_any_cast& e) { - cout << tree->toStringTree(true) << endl; + // cout << tree->toStringTree(true) << endl; throw ParsingError("Failed to cast parse tree node to JSON"); } } @@ -571,6 +571,30 @@ class HogQLParseTreeJSONConverter : public HogQLParserBaseVisitor { } VISIT(SelectStmtWithParens) { + if (const auto with_clause_ctx = ctx->withClause()) { + Json inner = visitAsJSON(ctx->selectSetStmt()); + Json ctes = visitAsJSON(with_clause_ctx); + + Json* target = &inner; + while (target->isObject() && target->getObject().count("node") && + (*target)["node"].getString() == "SelectSetQuery") { + target = &(*target)["initial_select_query"]; + } + + if (target->isObject() && target->getObject().count("node") && + (*target)["node"].getString() == "SelectQuery") { + if ((*target).getObject().count("ctes") && !(*target)["ctes"].isNull()) { + for (const auto& cte : ctes.getArray()) { + (*target)["ctes"].pushBack(cte); + } + } else { + (*target)["ctes"] = ctes; + } + } + + return inner; + } + if (const auto select_stmt_ctx = ctx->selectStmt()) { return visit(select_stmt_ctx); } @@ -697,7 +721,9 @@ class HogQLParseTreeJSONConverter : public HogQLParserBaseVisitor { json["qualify"] = visitAsJSONOrNull(ctx->qualifyClause()); json["group_by"] = visitAsJSONOrNull(ctx->groupByClause()); if (const auto group_by_ctx = ctx->groupByClause()) { - if (group_by_ctx->GROUPING()) { + if (group_by_ctx->ALL()) { + json["group_by_mode"] = "all"; + } else if (group_by_ctx->GROUPING()) { json["group_by_mode"] = "grouping_sets"; } else if (group_by_ctx->CUBE()) { json["group_by_mode"] = "cube"; @@ -822,6 +848,9 @@ class HogQLParseTreeJSONConverter : public HogQLParserBaseVisitor { VISIT(WhereClause) { return visit(ctx->columnExpr()); } VISIT(GroupByClause) { + if (ctx->ALL()) { + return Json(nullptr); + } if (ctx->GROUPING()) { return visit(ctx->groupingSetList()); } @@ -964,7 +993,8 @@ class HogQLParseTreeJSONConverter : public HogQLParserBaseVisitor { Json join2_json = visitAsJSON(ctx->joinExpr(1)); join2_json["join_type"] = join_op; - join2_json["constraint"] = visitAsJSON(ctx->joinConstraintClause()); + auto constraint_ctx = ctx->joinConstraintClause(); + join2_json["constraint"] = constraint_ctx ? visitAsJSON(constraint_ctx) : Json(); Json join1_json = visitAsJSON(ctx->joinExpr(0)); return chainJoinExprs(join1_json, join2_json); } @@ -1005,6 +1035,97 @@ class HogQLParseTreeJSONConverter : public HogQLParserBaseVisitor { return chainJoinExprs(join1_json, join2_json); } + VISIT(JoinExprPivot) { + Json pivot_json = Json::object(); + pivot_json["node"] = "PivotExpr"; + if (!is_internal) addPositionInfo(pivot_json, ctx); + pivot_json["table"] = visitAsJSON(ctx->joinExpr()); + auto expr_lists = ctx->columnExprList(); + pivot_json["aggregates"] = visitAsJSON(expr_lists[0]); + Json columns = Json::array(); + for (auto pivot_col : ctx->pivotColumnList()->pivotColumn()) { + Json col_json = Json::object(); + col_json["node"] = "PivotColumn"; + auto tuple_or_single = pivot_col->columnExprTupleOrSingle(); + if (tuple_or_single->columnExprList()) { + Json tuple_json = Json::object(); + tuple_json["node"] = "Tuple"; + tuple_json["exprs"] = visitAsJSON(tuple_or_single->columnExprList()); + col_json["column"] = std::move(tuple_json); + } else { + col_json["column"] = visitAsJSON(tuple_or_single->columnExpr()); + } + col_json["values"] = visitAsJSON(pivot_col->columnExprList()); + columns.pushBack(std::move(col_json)); + } + pivot_json["columns"] = std::move(columns); + if (expr_lists.size() > 1) { + pivot_json["group_by"] = visitAsJSON(expr_lists[1]); + } + Json json = Json::object(); + json["node"] = "JoinExpr"; + if (!is_internal) addPositionInfo(json, ctx); + json["table"] = std::move(pivot_json); + json["table_final"] = Json(nullptr); + json["sample"] = Json(nullptr); + json["next_join"] = Json(nullptr); + json["alias"] = Json(nullptr); + return json; + } + + VISIT(JoinExprUnpivot) { + Json unpivot_json = Json::object(); + unpivot_json["node"] = "UnpivotExpr"; + if (!is_internal) addPositionInfo(unpivot_json, ctx); + unpivot_json["table"] = visitAsJSON(ctx->joinExpr()); + Json columns = Json::array(); + for (auto unpivot_col : ctx->unpivotColumnList()->unpivotColumn()) { + Json col_json = Json::object(); + col_json["node"] = "UnpivotColumn"; + auto tuple_or_singles = unpivot_col->columnExprTupleOrSingle(); + auto val_ctx = tuple_or_singles[0]; + if (val_ctx->columnExprList()) { + Json tuple_json = Json::object(); + tuple_json["node"] = "Tuple"; + tuple_json["exprs"] = visitAsJSON(val_ctx->columnExprList()); + col_json["value_columns"] = std::move(tuple_json); + } else { + col_json["value_columns"] = visitAsJSON(val_ctx->columnExpr()); + } + auto name_ctx = tuple_or_singles[1]; + if (name_ctx->columnExprList()) { + Json tuple_json = Json::object(); + tuple_json["node"] = "Tuple"; + tuple_json["exprs"] = visitAsJSON(name_ctx->columnExprList()); + col_json["name_columns"] = std::move(tuple_json); + } else { + col_json["name_columns"] = visitAsJSON(name_ctx->columnExpr()); + } + col_json["unpivot_values"] = visitAsJSON(unpivot_col->columnExprList()[0]); + columns.pushBack(std::move(col_json)); + } + unpivot_json["columns"] = std::move(columns); + unpivot_json["include_nulls"] = ctx->INCLUDE() != nullptr; + Json json = Json::object(); + json["node"] = "JoinExpr"; + if (!is_internal) addPositionInfo(json, ctx); + json["table"] = std::move(unpivot_json); + json["table_final"] = Json(nullptr); + json["sample"] = Json(nullptr); + json["next_join"] = Json(nullptr); + json["alias"] = Json(nullptr); + return json; + } + + VISIT(JoinExprPositional) { + Json join2_json = visitAsJSON(ctx->joinExpr(1)); + Json join1_json = visitAsJSON(ctx->joinExpr(0)); + join2_json["join_type"] = "POSITIONAL JOIN"; + auto constraint_ctx = ctx->joinConstraintClause(); + join2_json["constraint"] = constraint_ctx ? visitAsJSON(constraint_ctx) : Json(); + return chainJoinExprs(join1_json, join2_json); + } + VISIT(JoinOpInner) { vector tokens; if (ctx->ALL()) { @@ -1071,6 +1192,9 @@ class HogQLParseTreeJSONConverter : public HogQLParserBaseVisitor { if (ctx->ANY()) { tokens.push_back("ANY"); } + if (ctx->ASOF()) { + tokens.push_back("ASOF"); + } return join(tokens, " "); } @@ -1248,6 +1372,15 @@ class HogQLParseTreeJSONConverter : public HogQLParserBaseVisitor { VISIT(Expr) { return visit(ctx->columnExpr()); } + VISIT(ColumnTypeExprArray) { + string base_type = any_cast(visit(ctx->columnTypeExpr())).getString(); + auto size_token = ctx->DECIMAL_LITERAL(); + if (size_token) { + return Json(base_type + "[" + size_token->getText() + "]"); + } + return Json(base_type + "[]"); + } + VISIT(ColumnTypeExprCompound) { string result; for (auto ident : ctx->identifier()) { @@ -1277,7 +1410,17 @@ class HogQLParseTreeJSONConverter : public HogQLParserBaseVisitor { VISIT_UNSUPPORTED(ColumnTypeExprEnum) - VISIT_UNSUPPORTED(ColumnTypeExprComplex) + VISIT(ColumnTypeExprComplex) { + string name = to_lower_copy(visitAsString(ctx->identifier())); + string inner; + bool first = true; + for (auto type_expr : ctx->columnTypeExpr()) { + if (!first) inner += ", "; + inner += any_cast(visit(type_expr)).getString(); + first = false; + } + return Json(name + "(" + inner + ")"); + } VISIT(ColumnTypeExprParam) { string name = to_lower_copy(visitAsString(ctx->identifier())); @@ -1614,6 +1757,8 @@ class HogQLParseTreeJSONConverter : public HogQLParserBaseVisitor { return json; } + VISIT(ColumnExprIgnoreNulls) { return visitAsJSON(ctx->columnExpr()); } + VISIT(ColumnExprIsNull) { Json json = Json::object(); json["node"] = "CompareOperation"; @@ -1978,8 +2123,10 @@ class HogQLParseTreeJSONConverter : public HogQLParserBaseVisitor { string name = visitAsString(ctx->identifier()); // if two LPARENs ()(), make sure the first one is at least an empty list + // FILTER adds an extra LPAREN, so account for it when detecting parametric calls + int lparen_threshold = ctx->FILTER() ? 2 : 1; Json params_json; - if (ctx->LPAREN(1)) { + if (ctx->LPAREN(lparen_threshold)) { params_json = visitAsJSONOrEmptyArray(ctx->columnExprs); } else { params_json = visitAsJSONOrNull(ctx->columnExprs); @@ -1994,6 +2141,17 @@ class HogQLParseTreeJSONConverter : public HogQLParserBaseVisitor { json["params"] = params_json; json["args"] = args_json; json["distinct"] = ctx->DISTINCT() != nullptr; + auto order_expr_list_ctx = ctx->orderExprList(); + if (order_expr_list_ctx) { + json["order_by"] = visitAsJSON(order_expr_list_ctx); + } else { + json["order_by"] = Json(); + } + if (ctx->filterExpr) { + json["filter_expr"] = visitAsJSON(ctx->filterExpr); + } else { + json["filter_expr"] = Json(); + } return json; } @@ -2111,6 +2269,52 @@ class HogQLParseTreeJSONConverter : public HogQLParserBaseVisitor { return json; } + VISIT(ColumnExprColumnsQualifiedAll) { + Json json = Json::object(); + json["node"] = "ColumnsExpr"; + if (!is_internal) addPositionInfo(json, ctx); + json["all_columns"] = true; + return json; + } + + VISIT(ColumnExprColumnsQualifiedExclude) { + Json json = Json::object(); + json["node"] = "ColumnsExpr"; + if (!is_internal) addPositionInfo(json, ctx); + json["all_columns"] = true; + Json exclude = Json::array(); + vector identifiers = any_cast>(visit(ctx->identifierList())); + for (const auto& ident : identifiers) { + exclude.pushBack(ident); + } + json["exclude"] = std::move(exclude); + return json; + } + + VISIT(ColumnExprColumnsQualifiedReplace) { + Json json = Json::object(); + json["node"] = "ColumnsExpr"; + if (!is_internal) addPositionInfo(json, ctx); + json["all_columns"] = true; + json["replace"] = buildColumnsReplaceJson(ctx->columnsReplaceList()); + return json; + } + + VISIT(ColumnExprColumnsQualifiedExcludeReplace) { + Json json = Json::object(); + json["node"] = "ColumnsExpr"; + if (!is_internal) addPositionInfo(json, ctx); + json["all_columns"] = true; + Json exclude = Json::array(); + vector identifiers = any_cast>(visit(ctx->identifierList())); + for (const auto& ident : identifiers) { + exclude.pushBack(ident); + } + json["exclude"] = std::move(exclude); + json["replace"] = buildColumnsReplaceJson(ctx->columnsReplaceList()); + return json; + } + VISIT(ColumnExprSpreadColumnsRegex) { Json json = Json::object(); json["node"] = "SpreadExpr"; @@ -2361,6 +2565,45 @@ class HogQLParseTreeJSONConverter : public HogQLParserBaseVisitor { VISIT(TableExprPlaceholder) { return visitAsJSON(ctx->placeholder()); } + VISIT(TableExprPivot) { + Json json = Json::object(); + json["node"] = "PivotExpr"; + if (!is_internal) addPositionInfo(json, ctx); + json["table"] = visitAsJSON(ctx->tableExpr()); + + // First columnExprList is the aggregates + auto expr_lists = ctx->columnExprList(); + json["aggregates"] = visitAsJSON(expr_lists[0]); + + // Pivot columns + Json columns = Json::array(); + for (auto pivot_col : ctx->pivotColumnList()->pivotColumn()) { + Json col_json = Json::object(); + col_json["node"] = "PivotColumn"; + + auto tuple_or_single = pivot_col->columnExprTupleOrSingle(); + if (tuple_or_single->columnExprList()) { + Json tuple_json = Json::object(); + tuple_json["node"] = "Tuple"; + tuple_json["exprs"] = visitAsJSON(tuple_or_single->columnExprList()); + col_json["column"] = std::move(tuple_json); + } else { + col_json["column"] = visitAsJSON(tuple_or_single->columnExpr()); + } + + col_json["values"] = visitAsJSON(pivot_col->columnExprList()); + columns.pushBack(std::move(col_json)); + } + json["columns"] = std::move(columns); + + // Optional GROUP BY (second columnExprList) + if (expr_lists.size() > 1) { + json["group_by"] = visitAsJSON(expr_lists[1]); + } + + return json; + } + VISIT(TableExprUnpivot) { Json json = Json::object(); json["node"] = "UnpivotExpr"; @@ -2393,11 +2636,12 @@ class HogQLParseTreeJSONConverter : public HogQLParserBaseVisitor { } else { col_json["name_columns"] = visitAsJSON(name_ctx->columnExpr()); } - // unpivot_values - col_json["unpivot_values"] = visitAsJSON(unpivot_col->columnExprList()); + // unpivot_values (use only the first IN list; additional groups from DuckDB multi-column syntax are dropped) + col_json["unpivot_values"] = visitAsJSON(unpivot_col->columnExprList()[0]); columns.pushBack(std::move(col_json)); } json["columns"] = std::move(columns); + json["include_nulls"] = ctx->INCLUDE() != nullptr; return json; } @@ -2508,13 +2752,23 @@ class HogQLParseTreeJSONConverter : public HogQLParserBaseVisitor { } json["value_type"] = "number"; } else if (text.find(".") != string::npos || text.find("e") != string::npos) { - json["value"] = Json(stod(text)); // Float + try { + json["value"] = Json(stod(text)); // Float + } catch (const std::out_of_range&) { + json["value"] = (text[0] == '-') ? "-Infinity" : "Infinity"; + json["value_type"] = "number"; + } return json; } else { try { json["value"] = static_cast(stoll(text)); // Integer } catch (const std::out_of_range&) { - json["value"] = Json(stod(text)); // Too large for int64, use float + try { + json["value"] = Json(stod(text)); // Too large for int64, use float + } catch (const std::out_of_range&) { + json["value"] = (text[0] == '-') ? "-Infinity" : "Infinity"; + json["value_type"] = "number"; + } } return json; } diff --git a/common/hogql_parser/parser_json_python.cpp b/common/hogql_parser/parser_json_python.cpp index e31ad4ebd806..2493c6e42f69 100644 --- a/common/hogql_parser/parser_json_python.cpp +++ b/common/hogql_parser/parser_json_python.cpp @@ -11,18 +11,21 @@ #define METHOD_PARSE_NODE_JSON(PASCAL_CASE, CAMEL_CASE, SNAKE_CASE) \ static PyObject* method_parse_##SNAKE_CASE##_json(PyObject* self, PyObject* args, PyObject* kwargs) { \ parser_state* state = get_module_state(self); \ - const char* str; \ + PyObject* str_obj; \ int internal = 0; \ static const char* kwlist[] = {"input", "is_internal", NULL}; \ - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|p", (char**)kwlist, &str, &internal)) { \ + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|p", (char**)kwlist, &str_obj, &internal)) { \ return NULL; \ } \ - auto input_stream = new antlr4::ANTLRInputStream(str, strnlen(str, 65536)); \ + Py_ssize_t str_len; \ + const char* str = PyUnicode_AsUTF8AndSize(str_obj, &str_len); \ + if (!str) return NULL; \ + auto input_stream = new antlr4::ANTLRInputStream(str, (size_t)str_len); \ auto lexer = new HogQLLexer(input_stream); \ auto stream = new antlr4::CommonTokenStream(lexer); \ auto parser = new HogQLParser(stream); \ parser->removeErrorListeners(); \ - auto error_listener = new HogQLErrorListener(str); \ + auto error_listener = new HogQLErrorListener(string(str, (size_t)str_len)); \ parser->addErrorListener(error_listener); \ HogQLParser::PASCAL_CASE##Context* parse_tree; \ try { \ diff --git a/common/hogql_parser/setup.py b/common/hogql_parser/setup.py index 17a5d0ccab6f..3822438e414e 100644 --- a/common/hogql_parser/setup.py +++ b/common/hogql_parser/setup.py @@ -36,7 +36,7 @@ setup( name="hogql_parser", - version="1.3.31", + version="1.3.32", url="https://github.com/PostHog/posthog/tree/master/common/hogql_parser", description="HogQL parser for internal PostHog use", author="PostHog Inc.", diff --git a/frontend/package.json b/frontend/package.json index ecfeebd89bcd..6114455ece5a 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -64,7 +64,7 @@ "@posthog/docs-onboarding": "workspace:*", "@posthog/esbuilder": "workspace:*", "@posthog/hedgehog-mode": "^0.0.48", - "@posthog/hogql-parser": "1.3.31", + "@posthog/hogql-parser": "1.3.32", "@posthog/hogvm": "workspace:*", "@posthog/icons": "^0.36.6", "@posthog/mosaic": "workspace:*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3fbb229f6d56..bde02eaf2942 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -268,7 +268,7 @@ importers: version: 3.12.1 jest: specifier: 'catalog:' - version: 29.7.0(@types/node@22.18.8)(ts-node@10.9.1(@swc/core@1.11.4)(@types/node@22.18.8)(typescript@5.5.4)) + version: 29.7.0(@types/node@22.18.8)(ts-node@10.9.1(@swc/core@1.15.18)(@types/node@22.18.8)(typescript@5.5.4)) oxfmt: specifier: 'catalog:' version: 0.35.0 @@ -584,8 +584,8 @@ importers: specifier: ^0.0.48 version: 0.0.48(prop-types@15.8.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@posthog/hogql-parser': - specifier: 1.3.31 - version: 1.3.31 + specifier: 1.3.32 + version: 1.3.32 '@posthog/hogvm': specifier: workspace:* version: link:../common/hogvm/typescript @@ -8103,8 +8103,8 @@ packages: react: 18.3.1 react-dom: 18.3.1 - '@posthog/hogql-parser@1.3.31': - resolution: {integrity: sha512-ht1gjGEAs09N2knjXdgOEla5kqKtBjaYS/JNcB0P5JxB9828U7nhoVEvOtm92gDX4IHatVNJXM+KpABIbTwCgQ==} + '@posthog/hogql-parser@1.3.32': + resolution: {integrity: sha512-vE0ppfD9DkJtIQmfMZM6Rkl2GevQSUBg8X8tsqGOGuYXdMTTY34GFYx0Y6HgNYJcBUGC4DqgxiypChN+osRkjw==} '@posthog/icons@0.36.4': resolution: {integrity: sha512-xnusbGNz/5vSMUWdEViWuai7D/gxiMZSDDnP6s/acndMqzN+W4asPUgUNnTUps7OyAS1IKaO9zxhdikFrtooJA==} @@ -26707,41 +26707,6 @@ snapshots: - ts-node - utf-8-validate - '@jest/core@29.7.0(ts-node@10.9.1(@swc/core@1.11.4)(@types/node@22.18.8)(typescript@5.5.4))': - dependencies: - '@jest/console': 29.7.0 - '@jest/reporters': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.18.8 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - ci-info: 3.8.0 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.18.8)(ts-node@10.9.1(@swc/core@1.11.4)(@types/node@22.18.8)(typescript@5.5.4)) - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-resolve-dependencies: 29.7.0 - jest-runner: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - jest-watcher: 29.7.0 - micromatch: 4.0.8 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - ts-node - '@jest/core@29.7.0(ts-node@10.9.1(@swc/core@1.15.18)(@types/node@22.18.8)(typescript@5.5.4))': dependencies: '@jest/console': 29.7.0 @@ -29433,7 +29398,7 @@ snapshots: transitivePeerDependencies: - prop-types - '@posthog/hogql-parser@1.3.31': {} + '@posthog/hogql-parser@1.3.32': {} '@posthog/icons@0.36.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: @@ -35623,21 +35588,6 @@ snapshots: safe-buffer: 5.2.1 sha.js: 2.4.12 - create-jest@29.7.0(@types/node@22.18.8)(ts-node@10.9.1(@swc/core@1.11.4)(@types/node@22.18.8)(typescript@5.5.4)): - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.18.8)(ts-node@10.9.1(@swc/core@1.11.4)(@types/node@22.18.8)(typescript@5.5.4)) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - create-jest@29.7.0(@types/node@22.18.8)(ts-node@10.9.1(@swc/core@1.15.18)(@types/node@22.18.8)(typescript@5.5.4)): dependencies: '@jest/types': 29.6.3 @@ -39060,25 +39010,6 @@ snapshots: - ts-node - utf-8-validate - jest-cli@29.7.0(@types/node@22.18.8)(ts-node@10.9.1(@swc/core@1.11.4)(@types/node@22.18.8)(typescript@5.5.4)): - dependencies: - '@jest/core': 29.7.0(ts-node@10.9.1(@swc/core@1.11.4)(@types/node@22.18.8)(typescript@5.5.4)) - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.18.8)(ts-node@10.9.1(@swc/core@1.11.4)(@types/node@22.18.8)(typescript@5.5.4)) - exit: 0.1.2 - import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.18.8)(ts-node@10.9.1(@swc/core@1.11.4)(@types/node@22.18.8)(typescript@5.5.4)) - jest-util: 29.7.0 - jest-validate: 29.7.0 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - jest-cli@29.7.0(@types/node@22.18.8)(ts-node@10.9.1(@swc/core@1.15.18)(@types/node@22.18.8)(typescript@5.5.4)): dependencies: '@jest/core': 29.7.0(ts-node@10.9.1(@swc/core@1.15.18)(@types/node@22.18.8)(typescript@5.5.4)) @@ -39151,37 +39082,6 @@ snapshots: - supports-color - utf-8-validate - jest-config@29.7.0(@types/node@22.18.8)(ts-node@10.9.1(@swc/core@1.11.4)(@types/node@22.18.8)(typescript@5.5.4)): - dependencies: - '@babel/core': 7.28.0 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.28.0) - chalk: 4.1.2 - ci-info: 3.8.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 29.7.0 - jest-environment-node: 29.7.0 - jest-get-type: 29.6.3 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-runner: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - micromatch: 4.0.8 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 22.18.8 - ts-node: 10.9.1(@swc/core@1.11.4)(@types/node@22.18.8)(typescript@5.5.4) - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - jest-config@29.7.0(@types/node@22.18.8)(ts-node@10.9.1(@swc/core@1.15.18)(@types/node@22.18.8)(typescript@5.5.4)): dependencies: '@babel/core': 7.28.0 @@ -40088,18 +39988,6 @@ snapshots: - ts-node - utf-8-validate - jest@29.7.0(@types/node@22.18.8)(ts-node@10.9.1(@swc/core@1.11.4)(@types/node@22.18.8)(typescript@5.5.4)): - dependencies: - '@jest/core': 29.7.0(ts-node@10.9.1(@swc/core@1.11.4)(@types/node@22.18.8)(typescript@5.5.4)) - '@jest/types': 29.6.3 - import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.18.8)(ts-node@10.9.1(@swc/core@1.11.4)(@types/node@22.18.8)(typescript@5.5.4)) - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - jest@29.7.0(@types/node@22.18.8)(ts-node@10.9.1(@swc/core@1.15.18)(@types/node@22.18.8)(typescript@5.5.4)): dependencies: '@jest/core': 29.7.0(ts-node@10.9.1(@swc/core@1.15.18)(@types/node@22.18.8)(typescript@5.5.4)) @@ -46177,27 +46065,6 @@ snapshots: tslib: 2.8.1 typescript: 5.5.4 - ts-node@10.9.1(@swc/core@1.11.4)(@types/node@22.18.8)(typescript@5.5.4): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.3 - '@types/node': 22.18.8 - acorn: 8.15.0 - acorn-walk: 8.3.2 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.5.4 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - optionalDependencies: - '@swc/core': 1.11.4 - optional: true - ts-node@10.9.1(@swc/core@1.15.18)(@types/node@22.18.8)(typescript@5.5.4): dependencies: '@cspotcode/source-map-support': 0.8.1 diff --git a/posthog/hogql/ast.py b/posthog/hogql/ast.py index 3aa96c1d0fb7..d253b32d046a 100644 --- a/posthog/hogql/ast.py +++ b/posthog/hogql/ast.py @@ -57,7 +57,17 @@ "RIGHT ASOF JOIN", "FULL ANY JOIN", "FULL ALL JOIN", + "FULL ASOF JOIN", + "ASOF FULL JOIN", "ASOF LEFT JOIN", + "ASOF RIGHT JOIN", + "ASOF ANTI JOIN", + "ASOF SEMI JOIN", + "ASOF ANTI LEFT JOIN", + "ASOF ANTI RIGHT JOIN", + "ASOF SEMI LEFT JOIN", + "ASOF SEMI RIGHT JOIN", + "POSITIONAL JOIN", "ANTI JOIN", "SEMI JOIN", } @@ -915,6 +925,8 @@ class Call(Expr): """ distinct: bool = False within_group: Optional[list["OrderExpr"]] = None + order_by: Optional[list["OrderExpr"]] = None + filter_expr: Optional[Expr] = None @dataclass(kw_only=True) @@ -944,6 +956,21 @@ class UnpivotColumn(Expr): class UnpivotExpr(Expr): table: Expr columns: list[UnpivotColumn] + include_nulls: bool = False + + +@dataclass(kw_only=True) +class PivotColumn(Expr): + column: Expr + values: list[Expr] + + +@dataclass(kw_only=True) +class PivotExpr(Expr): + table: Expr + aggregates: list[Expr] + columns: list[PivotColumn] + group_by: Optional[list[Expr]] = None @dataclass(kw_only=True) @@ -953,7 +980,16 @@ class JoinExpr(Expr): join_type: Optional[str] = None table: Optional[ - Union["SelectQuery", "SelectSetQuery", "ValuesQuery", "UnpivotExpr", "Placeholder", "HogQLXTag", "Field"] + Union[ + "SelectQuery", + "SelectSetQuery", + "ValuesQuery", + "UnpivotExpr", + "PivotExpr", + "Placeholder", + "HogQLXTag", + "Field", + ] ] = None table_args: Optional[list[Expr]] = None alias: Optional[str] = None @@ -1026,7 +1062,7 @@ class SelectQuery(Expr): having: Optional[Expr] = None qualify: Optional[Expr] = None group_by: Optional[list[Expr]] = None - group_by_mode: Optional[str] = None # None, "grouping_sets", "cube", "rollup" + group_by_mode: Optional[str] = None # None, "all", "grouping_sets", "cube", "rollup" order_by: Optional[list[OrderExpr]] = None limit: Optional[Expr] = None limit_by: Optional[LimitByExpr] = None diff --git a/posthog/hogql/compiler/test/test_javascript.py b/posthog/hogql/compiler/test/test_javascript.py index 4712121998c0..98d7d001a1d5 100644 --- a/posthog/hogql/compiler/test/test_javascript.py +++ b/posthog/hogql/compiler/test/test_javascript.py @@ -205,8 +205,8 @@ def test_not_i_regex(self): self.assertEqual(code, '!__imatch("hello", "H.*O")') def test_array_access(self): - code = to_js_expr("array[2]") - self.assertEqual(code, '__getProperty(__getGlobal("array"), 2, false)') + code = to_js_expr("arr[2]") + self.assertEqual(code, '__getProperty(__getGlobal("arr"), 2, false)') def test_tuple_access(self): code = to_js_expr("(1, 2, 3).2") diff --git a/posthog/hogql/grammar/HogQLLexer.common.g4 b/posthog/hogql/grammar/HogQLLexer.common.g4 index e35666fc61f3..f8f1a9a3291e 100644 --- a/posthog/hogql/grammar/HogQLLexer.common.g4 +++ b/posthog/hogql/grammar/HogQLLexer.common.g4 @@ -37,6 +37,7 @@ EXCEPT: E X C E P T; EXCLUDE: E X C L U D E; EXTRACT: E X T R A C T; FINAL: F I N A L; +FILTER: F I L T E R; FINALLY: F I N A L L Y; FIRST: F I R S T; FN: F N; @@ -52,6 +53,8 @@ HOUR: H O U R; ID: I D; IF: I F; ILIKE: I L I K E; +IGNORE: I G N O R E; +INCLUDE: I N C L U D E; IN: I N; INF: I N F | I N F I N I T Y; INNER: I N N E R; @@ -71,6 +74,7 @@ MATERIALIZED: M A T E R I A L I Z E D; MINUTE: M I N U T E; MONTH: M O N T H; NAME: N A M E; +NATURAL: N A T U R A L; NAN_SQL: N A N; // conflicts with macro NAN NOT: N O T; NULL_SQL: N U L L; // conflicts with macro NULL @@ -82,6 +86,8 @@ ORDER: O R D E R; OUTER: O U T E R; OVER: O V E R; PARTITION: P A R T I T I O N; +PIVOT: P I V O T; +POSITIONAL: P O S I T I O N A L; PRECEDING: P R E C E D I N G; PREWHERE: P R E W H E R E; QUALIFY: Q U A L I F Y; @@ -139,7 +145,8 @@ ESCAPE_CHAR_COMMON | BACKSLASH '0' | BACKSLASH A | BACKSLASH V - | BACKSLASH BACKSLASH; + | BACKSLASH BACKSLASH + | BACKSLASH X HEX_DIGIT HEX_DIGIT; IDENTIFIER : (LETTER | UNDERSCORE | DOLLAR) (LETTER | UNDERSCORE | DEC_DIGIT | DOLLAR)* diff --git a/posthog/hogql/grammar/HogQLLexer.interp b/posthog/hogql/grammar/HogQLLexer.interp index 763a5a08bccb..6225a0cf04ab 100644 --- a/posthog/hogql/grammar/HogQLLexer.interp +++ b/posthog/hogql/grammar/HogQLLexer.interp @@ -127,6 +127,12 @@ null null null null +null +null +null +null +null +null '->' '*' '`' @@ -218,6 +224,7 @@ EXCEPT EXCLUDE EXTRACT FINAL +FILTER FINALLY FIRST FN @@ -233,6 +240,8 @@ HOUR ID IF ILIKE +IGNORE +INCLUDE IN INF INNER @@ -252,6 +261,7 @@ MATERIALIZED MINUTE MONTH NAME +NATURAL NAN_SQL NOT NULL_SQL @@ -263,6 +273,8 @@ ORDER OUTER OVER PARTITION +PIVOT +POSITIONAL PRECEDING PREWHERE QUALIFY @@ -404,6 +416,7 @@ EXCEPT EXCLUDE EXTRACT FINAL +FILTER FINALLY FIRST FN @@ -419,6 +432,8 @@ HOUR ID IF ILIKE +IGNORE +INCLUDE IN INF INNER @@ -438,6 +453,7 @@ MATERIALIZED MINUTE MONTH NAME +NATURAL NAN_SQL NOT NULL_SQL @@ -449,6 +465,8 @@ ORDER OUTER OVER PARTITION +PIVOT +POSITIONAL PRECEDING PREWHERE QUALIFY @@ -615,4 +633,4 @@ HOGQLX_TAG_CLOSE HOGQLX_TEXT atn: -[4, 0, 184, 1776, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 2, 201, 7, 201, 2, 202, 7, 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 503, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 756, 8, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 3, 119, 1227, 8, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 3, 120, 1256, 8, 120, 1, 121, 1, 121, 1, 121, 3, 121, 1261, 8, 121, 1, 121, 1, 121, 1, 121, 1, 121, 5, 121, 1267, 8, 121, 10, 121, 12, 121, 1270, 9, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 5, 121, 1281, 8, 121, 10, 121, 12, 121, 1284, 9, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 5, 121, 1297, 8, 121, 10, 121, 12, 121, 1300, 9, 121, 1, 121, 1, 121, 3, 121, 1304, 8, 121, 1, 122, 1, 122, 1, 122, 5, 122, 1309, 8, 122, 10, 122, 12, 122, 1312, 9, 122, 1, 122, 1, 122, 3, 122, 1316, 8, 122, 1, 122, 1, 122, 3, 122, 1320, 8, 122, 1, 122, 4, 122, 1323, 8, 122, 11, 122, 12, 122, 1324, 1, 122, 1, 122, 1, 122, 3, 122, 1330, 8, 122, 1, 122, 1, 122, 3, 122, 1334, 8, 122, 1, 122, 4, 122, 1337, 8, 122, 11, 122, 12, 122, 1338, 1, 122, 1, 122, 1, 122, 5, 122, 1344, 8, 122, 10, 122, 12, 122, 1347, 9, 122, 1, 122, 1, 122, 1, 122, 3, 122, 1352, 8, 122, 1, 122, 4, 122, 1355, 8, 122, 11, 122, 12, 122, 1356, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 3, 122, 1364, 8, 122, 1, 122, 4, 122, 1367, 8, 122, 11, 122, 12, 122, 1368, 1, 122, 1, 122, 1, 122, 1, 122, 3, 122, 1375, 8, 122, 1, 122, 4, 122, 1378, 8, 122, 11, 122, 12, 122, 1379, 3, 122, 1382, 8, 122, 1, 123, 1, 123, 4, 123, 1386, 8, 123, 11, 123, 12, 123, 1387, 1, 124, 4, 124, 1391, 8, 124, 11, 124, 12, 124, 1392, 1, 125, 1, 125, 1, 125, 4, 125, 1398, 8, 125, 11, 125, 12, 125, 1399, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 5, 126, 1411, 8, 126, 10, 126, 12, 126, 1414, 9, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 128, 1, 128, 1, 129, 1, 129, 1, 130, 1, 130, 1, 131, 1, 131, 1, 132, 1, 132, 1, 133, 1, 133, 1, 134, 1, 134, 1, 135, 1, 135, 1, 136, 1, 136, 1, 137, 1, 137, 1, 138, 1, 138, 1, 139, 1, 139, 1, 140, 1, 140, 1, 141, 1, 141, 1, 142, 1, 142, 1, 143, 1, 143, 1, 144, 1, 144, 1, 145, 1, 145, 1, 146, 1, 146, 1, 147, 1, 147, 1, 148, 1, 148, 1, 149, 1, 149, 1, 150, 1, 150, 1, 151, 1, 151, 1, 152, 1, 152, 1, 153, 1, 153, 1, 154, 1, 154, 1, 155, 1, 155, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 159, 1, 159, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 163, 1, 163, 1, 164, 1, 164, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 1, 167, 1, 167, 1, 168, 1, 168, 1, 169, 1, 169, 1, 169, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 172, 1, 172, 1, 173, 1, 173, 1, 174, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 176, 1, 176, 1, 177, 1, 177, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 182, 1, 182, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 1, 184, 3, 184, 1557, 8, 184, 1, 185, 1, 185, 1, 185, 1, 185, 1, 186, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 188, 1, 188, 1, 188, 1, 189, 1, 189, 1, 190, 1, 190, 1, 191, 1, 191, 1, 192, 1, 192, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 195, 1, 195, 1, 196, 1, 196, 1, 197, 1, 197, 1, 197, 1, 198, 1, 198, 1, 198, 1, 198, 1, 199, 1, 199, 1, 200, 1, 200, 1, 201, 1, 201, 1, 202, 1, 202, 1, 203, 1, 203, 1, 203, 1, 204, 1, 204, 1, 205, 1, 205, 1, 205, 1, 205, 5, 205, 1618, 8, 205, 10, 205, 12, 205, 1621, 9, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 206, 1, 206, 1, 206, 1, 206, 3, 206, 1632, 8, 206, 1, 206, 5, 206, 1635, 8, 206, 10, 206, 12, 206, 1638, 9, 206, 1, 206, 3, 206, 1641, 8, 206, 1, 206, 1, 206, 1, 207, 1, 207, 1, 207, 1, 207, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 4, 208, 1660, 8, 208, 11, 208, 12, 208, 1661, 1, 209, 1, 209, 1, 209, 1, 209, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 4, 211, 1678, 8, 211, 11, 211, 12, 211, 1679, 1, 212, 1, 212, 1, 212, 1, 212, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 215, 1, 215, 5, 215, 1700, 8, 215, 10, 215, 12, 215, 1703, 9, 215, 1, 215, 1, 215, 1, 216, 1, 216, 1, 216, 1, 216, 1, 217, 1, 217, 1, 217, 1, 217, 1, 218, 4, 218, 1716, 8, 218, 11, 218, 12, 218, 1717, 1, 218, 1, 218, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 221, 1, 221, 5, 221, 1734, 8, 221, 10, 221, 12, 221, 1737, 9, 221, 1, 221, 1, 221, 1, 222, 4, 222, 1742, 8, 222, 11, 222, 12, 222, 1743, 1, 222, 1, 222, 1, 223, 4, 223, 1749, 8, 223, 11, 223, 12, 223, 1750, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 227, 4, 227, 1771, 8, 227, 11, 227, 12, 227, 1772, 1, 227, 1, 227, 1, 1619, 0, 228, 6, 1, 8, 2, 10, 3, 12, 4, 14, 5, 16, 6, 18, 7, 20, 8, 22, 9, 24, 10, 26, 11, 28, 12, 30, 13, 32, 14, 34, 15, 36, 16, 38, 17, 40, 18, 42, 19, 44, 20, 46, 21, 48, 22, 50, 23, 52, 24, 54, 25, 56, 26, 58, 27, 60, 28, 62, 29, 64, 30, 66, 31, 68, 32, 70, 33, 72, 34, 74, 35, 76, 36, 78, 37, 80, 38, 82, 39, 84, 40, 86, 41, 88, 42, 90, 43, 92, 44, 94, 45, 96, 46, 98, 47, 100, 48, 102, 49, 104, 50, 106, 51, 108, 52, 110, 53, 112, 54, 114, 55, 116, 56, 118, 57, 120, 58, 122, 59, 124, 60, 126, 61, 128, 62, 130, 63, 132, 64, 134, 65, 136, 66, 138, 67, 140, 68, 142, 69, 144, 70, 146, 71, 148, 72, 150, 73, 152, 74, 154, 75, 156, 76, 158, 77, 160, 78, 162, 79, 164, 80, 166, 81, 168, 82, 170, 83, 172, 84, 174, 85, 176, 86, 178, 87, 180, 88, 182, 89, 184, 90, 186, 91, 188, 92, 190, 93, 192, 94, 194, 95, 196, 96, 198, 97, 200, 98, 202, 99, 204, 100, 206, 101, 208, 102, 210, 103, 212, 104, 214, 105, 216, 106, 218, 107, 220, 108, 222, 109, 224, 110, 226, 111, 228, 112, 230, 113, 232, 114, 234, 115, 236, 116, 238, 117, 240, 118, 242, 119, 244, 120, 246, 121, 248, 122, 250, 123, 252, 124, 254, 125, 256, 126, 258, 127, 260, 0, 262, 0, 264, 0, 266, 0, 268, 0, 270, 0, 272, 0, 274, 0, 276, 0, 278, 0, 280, 0, 282, 0, 284, 0, 286, 0, 288, 0, 290, 0, 292, 0, 294, 0, 296, 0, 298, 0, 300, 0, 302, 0, 304, 0, 306, 0, 308, 0, 310, 0, 312, 0, 314, 0, 316, 0, 318, 0, 320, 128, 322, 129, 324, 130, 326, 131, 328, 132, 330, 133, 332, 134, 334, 135, 336, 136, 338, 137, 340, 138, 342, 139, 344, 140, 346, 141, 348, 142, 350, 143, 352, 144, 354, 145, 356, 146, 358, 147, 360, 148, 362, 149, 364, 150, 366, 0, 368, 0, 370, 151, 372, 152, 374, 153, 376, 154, 378, 155, 380, 156, 382, 157, 384, 158, 386, 159, 388, 160, 390, 161, 392, 162, 394, 163, 396, 164, 398, 165, 400, 166, 402, 167, 404, 168, 406, 169, 408, 170, 410, 171, 412, 172, 414, 173, 416, 174, 418, 175, 420, 176, 422, 177, 424, 178, 426, 0, 428, 179, 430, 180, 432, 0, 434, 0, 436, 0, 438, 0, 440, 0, 442, 181, 444, 0, 446, 0, 448, 0, 450, 182, 452, 183, 454, 0, 456, 0, 458, 0, 460, 184, 6, 0, 1, 2, 3, 4, 5, 42, 2, 0, 92, 92, 96, 96, 2, 0, 34, 34, 92, 92, 2, 0, 39, 39, 92, 92, 2, 0, 65, 65, 97, 97, 2, 0, 66, 66, 98, 98, 2, 0, 67, 67, 99, 99, 2, 0, 68, 68, 100, 100, 2, 0, 69, 69, 101, 101, 2, 0, 70, 70, 102, 102, 2, 0, 71, 71, 103, 103, 2, 0, 72, 72, 104, 104, 2, 0, 73, 73, 105, 105, 2, 0, 74, 74, 106, 106, 2, 0, 75, 75, 107, 107, 2, 0, 76, 76, 108, 108, 2, 0, 77, 77, 109, 109, 2, 0, 78, 78, 110, 110, 2, 0, 79, 79, 111, 111, 2, 0, 80, 80, 112, 112, 2, 0, 81, 81, 113, 113, 2, 0, 82, 82, 114, 114, 2, 0, 83, 83, 115, 115, 2, 0, 84, 84, 116, 116, 2, 0, 85, 85, 117, 117, 2, 0, 86, 86, 118, 118, 2, 0, 87, 87, 119, 119, 2, 0, 88, 88, 120, 120, 2, 0, 89, 89, 121, 121, 2, 0, 90, 90, 122, 122, 2, 0, 65, 90, 97, 122, 1, 0, 48, 55, 1, 0, 48, 57, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, 10, 10, 13, 13, 2, 1, 10, 10, 13, 13, 2, 0, 9, 13, 32, 32, 3, 0, 39, 39, 92, 92, 123, 123, 1, 0, 123, 123, 3, 0, 65, 90, 95, 95, 97, 122, 5, 0, 45, 45, 48, 57, 65, 90, 95, 95, 97, 122, 3, 0, 9, 10, 13, 13, 32, 32, 2, 0, 60, 60, 123, 123, 1815, 0, 6, 1, 0, 0, 0, 0, 8, 1, 0, 0, 0, 0, 10, 1, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 14, 1, 0, 0, 0, 0, 16, 1, 0, 0, 0, 0, 18, 1, 0, 0, 0, 0, 20, 1, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 24, 1, 0, 0, 0, 0, 26, 1, 0, 0, 0, 0, 28, 1, 0, 0, 0, 0, 30, 1, 0, 0, 0, 0, 32, 1, 0, 0, 0, 0, 34, 1, 0, 0, 0, 0, 36, 1, 0, 0, 0, 0, 38, 1, 0, 0, 0, 0, 40, 1, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 44, 1, 0, 0, 0, 0, 46, 1, 0, 0, 0, 0, 48, 1, 0, 0, 0, 0, 50, 1, 0, 0, 0, 0, 52, 1, 0, 0, 0, 0, 54, 1, 0, 0, 0, 0, 56, 1, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 60, 1, 0, 0, 0, 0, 62, 1, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 66, 1, 0, 0, 0, 0, 68, 1, 0, 0, 0, 0, 70, 1, 0, 0, 0, 0, 72, 1, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, 78, 1, 0, 0, 0, 0, 80, 1, 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 84, 1, 0, 0, 0, 0, 86, 1, 0, 0, 0, 0, 88, 1, 0, 0, 0, 0, 90, 1, 0, 0, 0, 0, 92, 1, 0, 0, 0, 0, 94, 1, 0, 0, 0, 0, 96, 1, 0, 0, 0, 0, 98, 1, 0, 0, 0, 0, 100, 1, 0, 0, 0, 0, 102, 1, 0, 0, 0, 0, 104, 1, 0, 0, 0, 0, 106, 1, 0, 0, 0, 0, 108, 1, 0, 0, 0, 0, 110, 1, 0, 0, 0, 0, 112, 1, 0, 0, 0, 0, 114, 1, 0, 0, 0, 0, 116, 1, 0, 0, 0, 0, 118, 1, 0, 0, 0, 0, 120, 1, 0, 0, 0, 0, 122, 1, 0, 0, 0, 0, 124, 1, 0, 0, 0, 0, 126, 1, 0, 0, 0, 0, 128, 1, 0, 0, 0, 0, 130, 1, 0, 0, 0, 0, 132, 1, 0, 0, 0, 0, 134, 1, 0, 0, 0, 0, 136, 1, 0, 0, 0, 0, 138, 1, 0, 0, 0, 0, 140, 1, 0, 0, 0, 0, 142, 1, 0, 0, 0, 0, 144, 1, 0, 0, 0, 0, 146, 1, 0, 0, 0, 0, 148, 1, 0, 0, 0, 0, 150, 1, 0, 0, 0, 0, 152, 1, 0, 0, 0, 0, 154, 1, 0, 0, 0, 0, 156, 1, 0, 0, 0, 0, 158, 1, 0, 0, 0, 0, 160, 1, 0, 0, 0, 0, 162, 1, 0, 0, 0, 0, 164, 1, 0, 0, 0, 0, 166, 1, 0, 0, 0, 0, 168, 1, 0, 0, 0, 0, 170, 1, 0, 0, 0, 0, 172, 1, 0, 0, 0, 0, 174, 1, 0, 0, 0, 0, 176, 1, 0, 0, 0, 0, 178, 1, 0, 0, 0, 0, 180, 1, 0, 0, 0, 0, 182, 1, 0, 0, 0, 0, 184, 1, 0, 0, 0, 0, 186, 1, 0, 0, 0, 0, 188, 1, 0, 0, 0, 0, 190, 1, 0, 0, 0, 0, 192, 1, 0, 0, 0, 0, 194, 1, 0, 0, 0, 0, 196, 1, 0, 0, 0, 0, 198, 1, 0, 0, 0, 0, 200, 1, 0, 0, 0, 0, 202, 1, 0, 0, 0, 0, 204, 1, 0, 0, 0, 0, 206, 1, 0, 0, 0, 0, 208, 1, 0, 0, 0, 0, 210, 1, 0, 0, 0, 0, 212, 1, 0, 0, 0, 0, 214, 1, 0, 0, 0, 0, 216, 1, 0, 0, 0, 0, 218, 1, 0, 0, 0, 0, 220, 1, 0, 0, 0, 0, 222, 1, 0, 0, 0, 0, 224, 1, 0, 0, 0, 0, 226, 1, 0, 0, 0, 0, 228, 1, 0, 0, 0, 0, 230, 1, 0, 0, 0, 0, 232, 1, 0, 0, 0, 0, 234, 1, 0, 0, 0, 0, 236, 1, 0, 0, 0, 0, 238, 1, 0, 0, 0, 0, 240, 1, 0, 0, 0, 0, 242, 1, 0, 0, 0, 0, 244, 1, 0, 0, 0, 0, 246, 1, 0, 0, 0, 0, 248, 1, 0, 0, 0, 0, 250, 1, 0, 0, 0, 0, 252, 1, 0, 0, 0, 0, 254, 1, 0, 0, 0, 0, 256, 1, 0, 0, 0, 0, 258, 1, 0, 0, 0, 0, 320, 1, 0, 0, 0, 0, 322, 1, 0, 0, 0, 0, 324, 1, 0, 0, 0, 0, 326, 1, 0, 0, 0, 0, 328, 1, 0, 0, 0, 0, 330, 1, 0, 0, 0, 0, 332, 1, 0, 0, 0, 0, 334, 1, 0, 0, 0, 0, 336, 1, 0, 0, 0, 0, 338, 1, 0, 0, 0, 0, 340, 1, 0, 0, 0, 0, 342, 1, 0, 0, 0, 0, 344, 1, 0, 0, 0, 0, 346, 1, 0, 0, 0, 0, 348, 1, 0, 0, 0, 0, 350, 1, 0, 0, 0, 0, 352, 1, 0, 0, 0, 0, 354, 1, 0, 0, 0, 0, 356, 1, 0, 0, 0, 0, 358, 1, 0, 0, 0, 0, 360, 1, 0, 0, 0, 0, 362, 1, 0, 0, 0, 0, 364, 1, 0, 0, 0, 0, 366, 1, 0, 0, 0, 0, 368, 1, 0, 0, 0, 0, 370, 1, 0, 0, 0, 0, 372, 1, 0, 0, 0, 0, 374, 1, 0, 0, 0, 0, 376, 1, 0, 0, 0, 0, 378, 1, 0, 0, 0, 0, 380, 1, 0, 0, 0, 0, 382, 1, 0, 0, 0, 0, 384, 1, 0, 0, 0, 0, 386, 1, 0, 0, 0, 0, 388, 1, 0, 0, 0, 0, 390, 1, 0, 0, 0, 0, 392, 1, 0, 0, 0, 0, 394, 1, 0, 0, 0, 0, 396, 1, 0, 0, 0, 0, 398, 1, 0, 0, 0, 0, 400, 1, 0, 0, 0, 0, 402, 1, 0, 0, 0, 0, 404, 1, 0, 0, 0, 0, 406, 1, 0, 0, 0, 0, 408, 1, 0, 0, 0, 0, 410, 1, 0, 0, 0, 0, 412, 1, 0, 0, 0, 0, 414, 1, 0, 0, 0, 0, 416, 1, 0, 0, 0, 0, 418, 1, 0, 0, 0, 0, 420, 1, 0, 0, 0, 1, 422, 1, 0, 0, 0, 1, 424, 1, 0, 0, 0, 1, 426, 1, 0, 0, 0, 2, 428, 1, 0, 0, 0, 2, 430, 1, 0, 0, 0, 3, 432, 1, 0, 0, 0, 3, 434, 1, 0, 0, 0, 3, 436, 1, 0, 0, 0, 3, 438, 1, 0, 0, 0, 3, 440, 1, 0, 0, 0, 3, 442, 1, 0, 0, 0, 3, 444, 1, 0, 0, 0, 4, 446, 1, 0, 0, 0, 4, 448, 1, 0, 0, 0, 4, 450, 1, 0, 0, 0, 5, 452, 1, 0, 0, 0, 5, 454, 1, 0, 0, 0, 5, 456, 1, 0, 0, 0, 5, 458, 1, 0, 0, 0, 5, 460, 1, 0, 0, 0, 6, 462, 1, 0, 0, 0, 8, 466, 1, 0, 0, 0, 10, 470, 1, 0, 0, 0, 12, 475, 1, 0, 0, 0, 14, 479, 1, 0, 0, 0, 16, 485, 1, 0, 0, 0, 18, 502, 1, 0, 0, 0, 20, 504, 1, 0, 0, 0, 22, 509, 1, 0, 0, 0, 24, 517, 1, 0, 0, 0, 26, 522, 1, 0, 0, 0, 28, 525, 1, 0, 0, 0, 30, 530, 1, 0, 0, 0, 32, 535, 1, 0, 0, 0, 34, 541, 1, 0, 0, 0, 36, 548, 1, 0, 0, 0, 38, 556, 1, 0, 0, 0, 40, 564, 1, 0, 0, 0, 42, 570, 1, 0, 0, 0, 44, 575, 1, 0, 0, 0, 46, 583, 1, 0, 0, 0, 48, 588, 1, 0, 0, 0, 50, 592, 1, 0, 0, 0, 52, 597, 1, 0, 0, 0, 54, 608, 1, 0, 0, 0, 56, 617, 1, 0, 0, 0, 58, 622, 1, 0, 0, 0, 60, 626, 1, 0, 0, 0, 62, 633, 1, 0, 0, 0, 64, 641, 1, 0, 0, 0, 66, 649, 1, 0, 0, 0, 68, 655, 1, 0, 0, 0, 70, 663, 1, 0, 0, 0, 72, 669, 1, 0, 0, 0, 74, 672, 1, 0, 0, 0, 76, 682, 1, 0, 0, 0, 78, 686, 1, 0, 0, 0, 80, 691, 1, 0, 0, 0, 82, 696, 1, 0, 0, 0, 84, 700, 1, 0, 0, 0, 86, 706, 1, 0, 0, 0, 88, 715, 1, 0, 0, 0, 90, 722, 1, 0, 0, 0, 92, 727, 1, 0, 0, 0, 94, 730, 1, 0, 0, 0, 96, 733, 1, 0, 0, 0, 98, 739, 1, 0, 0, 0, 100, 755, 1, 0, 0, 0, 102, 757, 1, 0, 0, 0, 104, 763, 1, 0, 0, 0, 106, 773, 1, 0, 0, 0, 108, 782, 1, 0, 0, 0, 110, 785, 1, 0, 0, 0, 112, 790, 1, 0, 0, 0, 114, 794, 1, 0, 0, 0, 116, 801, 1, 0, 0, 0, 118, 806, 1, 0, 0, 0, 120, 814, 1, 0, 0, 0, 122, 819, 1, 0, 0, 0, 124, 823, 1, 0, 0, 0, 126, 828, 1, 0, 0, 0, 128, 834, 1, 0, 0, 0, 130, 847, 1, 0, 0, 0, 132, 854, 1, 0, 0, 0, 134, 860, 1, 0, 0, 0, 136, 865, 1, 0, 0, 0, 138, 869, 1, 0, 0, 0, 140, 873, 1, 0, 0, 0, 142, 878, 1, 0, 0, 0, 144, 884, 1, 0, 0, 0, 146, 891, 1, 0, 0, 0, 148, 894, 1, 0, 0, 0, 150, 897, 1, 0, 0, 0, 152, 903, 1, 0, 0, 0, 154, 909, 1, 0, 0, 0, 156, 914, 1, 0, 0, 0, 158, 924, 1, 0, 0, 0, 160, 934, 1, 0, 0, 0, 162, 943, 1, 0, 0, 0, 164, 951, 1, 0, 0, 0, 166, 959, 1, 0, 0, 0, 168, 965, 1, 0, 0, 0, 170, 975, 1, 0, 0, 0, 172, 983, 1, 0, 0, 0, 174, 990, 1, 0, 0, 0, 176, 996, 1, 0, 0, 0, 178, 1003, 1, 0, 0, 0, 180, 1007, 1, 0, 0, 0, 182, 1012, 1, 0, 0, 0, 184, 1019, 1, 0, 0, 0, 186, 1026, 1, 0, 0, 0, 188, 1033, 1, 0, 0, 0, 190, 1038, 1, 0, 0, 0, 192, 1043, 1, 0, 0, 0, 194, 1052, 1, 0, 0, 0, 196, 1062, 1, 0, 0, 0, 198, 1067, 1, 0, 0, 0, 200, 1073, 1, 0, 0, 0, 202, 1078, 1, 0, 0, 0, 204, 1088, 1, 0, 0, 0, 206, 1091, 1, 0, 0, 0, 208, 1095, 1, 0, 0, 0, 210, 1102, 1, 0, 0, 0, 212, 1111, 1, 0, 0, 0, 214, 1116, 1, 0, 0, 0, 216, 1125, 1, 0, 0, 0, 218, 1129, 1, 0, 0, 0, 220, 1138, 1, 0, 0, 0, 222, 1148, 1, 0, 0, 0, 224, 1154, 1, 0, 0, 0, 226, 1162, 1, 0, 0, 0, 228, 1168, 1, 0, 0, 0, 230, 1175, 1, 0, 0, 0, 232, 1180, 1, 0, 0, 0, 234, 1185, 1, 0, 0, 0, 236, 1191, 1, 0, 0, 0, 238, 1197, 1, 0, 0, 0, 240, 1204, 1, 0, 0, 0, 242, 1209, 1, 0, 0, 0, 244, 1226, 1, 0, 0, 0, 246, 1255, 1, 0, 0, 0, 248, 1303, 1, 0, 0, 0, 250, 1381, 1, 0, 0, 0, 252, 1383, 1, 0, 0, 0, 254, 1390, 1, 0, 0, 0, 256, 1394, 1, 0, 0, 0, 258, 1401, 1, 0, 0, 0, 260, 1417, 1, 0, 0, 0, 262, 1419, 1, 0, 0, 0, 264, 1421, 1, 0, 0, 0, 266, 1423, 1, 0, 0, 0, 268, 1425, 1, 0, 0, 0, 270, 1427, 1, 0, 0, 0, 272, 1429, 1, 0, 0, 0, 274, 1431, 1, 0, 0, 0, 276, 1433, 1, 0, 0, 0, 278, 1435, 1, 0, 0, 0, 280, 1437, 1, 0, 0, 0, 282, 1439, 1, 0, 0, 0, 284, 1441, 1, 0, 0, 0, 286, 1443, 1, 0, 0, 0, 288, 1445, 1, 0, 0, 0, 290, 1447, 1, 0, 0, 0, 292, 1449, 1, 0, 0, 0, 294, 1451, 1, 0, 0, 0, 296, 1453, 1, 0, 0, 0, 298, 1455, 1, 0, 0, 0, 300, 1457, 1, 0, 0, 0, 302, 1459, 1, 0, 0, 0, 304, 1461, 1, 0, 0, 0, 306, 1463, 1, 0, 0, 0, 308, 1465, 1, 0, 0, 0, 310, 1467, 1, 0, 0, 0, 312, 1469, 1, 0, 0, 0, 314, 1471, 1, 0, 0, 0, 316, 1473, 1, 0, 0, 0, 318, 1475, 1, 0, 0, 0, 320, 1477, 1, 0, 0, 0, 322, 1480, 1, 0, 0, 0, 324, 1482, 1, 0, 0, 0, 326, 1484, 1, 0, 0, 0, 328, 1486, 1, 0, 0, 0, 330, 1489, 1, 0, 0, 0, 332, 1492, 1, 0, 0, 0, 334, 1494, 1, 0, 0, 0, 336, 1496, 1, 0, 0, 0, 338, 1499, 1, 0, 0, 0, 340, 1501, 1, 0, 0, 0, 342, 1503, 1, 0, 0, 0, 344, 1505, 1, 0, 0, 0, 346, 1508, 1, 0, 0, 0, 348, 1510, 1, 0, 0, 0, 350, 1513, 1, 0, 0, 0, 352, 1515, 1, 0, 0, 0, 354, 1517, 1, 0, 0, 0, 356, 1520, 1, 0, 0, 0, 358, 1524, 1, 0, 0, 0, 360, 1528, 1, 0, 0, 0, 362, 1530, 1, 0, 0, 0, 364, 1532, 1, 0, 0, 0, 366, 1535, 1, 0, 0, 0, 368, 1541, 1, 0, 0, 0, 370, 1547, 1, 0, 0, 0, 372, 1549, 1, 0, 0, 0, 374, 1556, 1, 0, 0, 0, 376, 1558, 1, 0, 0, 0, 378, 1562, 1, 0, 0, 0, 380, 1565, 1, 0, 0, 0, 382, 1568, 1, 0, 0, 0, 384, 1571, 1, 0, 0, 0, 386, 1573, 1, 0, 0, 0, 388, 1575, 1, 0, 0, 0, 390, 1577, 1, 0, 0, 0, 392, 1579, 1, 0, 0, 0, 394, 1584, 1, 0, 0, 0, 396, 1589, 1, 0, 0, 0, 398, 1591, 1, 0, 0, 0, 400, 1593, 1, 0, 0, 0, 402, 1596, 1, 0, 0, 0, 404, 1600, 1, 0, 0, 0, 406, 1602, 1, 0, 0, 0, 408, 1604, 1, 0, 0, 0, 410, 1606, 1, 0, 0, 0, 412, 1608, 1, 0, 0, 0, 414, 1611, 1, 0, 0, 0, 416, 1613, 1, 0, 0, 0, 418, 1631, 1, 0, 0, 0, 420, 1644, 1, 0, 0, 0, 422, 1659, 1, 0, 0, 0, 424, 1663, 1, 0, 0, 0, 426, 1667, 1, 0, 0, 0, 428, 1677, 1, 0, 0, 0, 430, 1681, 1, 0, 0, 0, 432, 1685, 1, 0, 0, 0, 434, 1691, 1, 0, 0, 0, 436, 1697, 1, 0, 0, 0, 438, 1706, 1, 0, 0, 0, 440, 1710, 1, 0, 0, 0, 442, 1715, 1, 0, 0, 0, 444, 1721, 1, 0, 0, 0, 446, 1726, 1, 0, 0, 0, 448, 1731, 1, 0, 0, 0, 450, 1741, 1, 0, 0, 0, 452, 1748, 1, 0, 0, 0, 454, 1752, 1, 0, 0, 0, 456, 1757, 1, 0, 0, 0, 458, 1764, 1, 0, 0, 0, 460, 1770, 1, 0, 0, 0, 462, 463, 3, 260, 127, 0, 463, 464, 3, 282, 138, 0, 464, 465, 3, 282, 138, 0, 465, 7, 1, 0, 0, 0, 466, 467, 3, 260, 127, 0, 467, 468, 3, 286, 140, 0, 468, 469, 3, 266, 130, 0, 469, 9, 1, 0, 0, 0, 470, 471, 3, 260, 127, 0, 471, 472, 3, 286, 140, 0, 472, 473, 3, 298, 146, 0, 473, 474, 3, 276, 135, 0, 474, 11, 1, 0, 0, 0, 475, 476, 3, 260, 127, 0, 476, 477, 3, 286, 140, 0, 477, 478, 3, 308, 151, 0, 478, 13, 1, 0, 0, 0, 479, 480, 3, 260, 127, 0, 480, 481, 3, 294, 144, 0, 481, 482, 3, 294, 144, 0, 482, 483, 3, 260, 127, 0, 483, 484, 3, 308, 151, 0, 484, 15, 1, 0, 0, 0, 485, 486, 3, 260, 127, 0, 486, 487, 3, 296, 145, 0, 487, 17, 1, 0, 0, 0, 488, 489, 3, 260, 127, 0, 489, 490, 3, 296, 145, 0, 490, 491, 3, 264, 129, 0, 491, 503, 1, 0, 0, 0, 492, 493, 3, 260, 127, 0, 493, 494, 3, 296, 145, 0, 494, 495, 3, 264, 129, 0, 495, 496, 3, 268, 131, 0, 496, 497, 3, 286, 140, 0, 497, 498, 3, 266, 130, 0, 498, 499, 3, 276, 135, 0, 499, 500, 3, 286, 140, 0, 500, 501, 3, 272, 133, 0, 501, 503, 1, 0, 0, 0, 502, 488, 1, 0, 0, 0, 502, 492, 1, 0, 0, 0, 503, 19, 1, 0, 0, 0, 504, 505, 3, 260, 127, 0, 505, 506, 3, 296, 145, 0, 506, 507, 3, 288, 141, 0, 507, 508, 3, 270, 132, 0, 508, 21, 1, 0, 0, 0, 509, 510, 3, 262, 128, 0, 510, 511, 3, 268, 131, 0, 511, 512, 3, 298, 146, 0, 512, 513, 3, 304, 149, 0, 513, 514, 3, 268, 131, 0, 514, 515, 3, 268, 131, 0, 515, 516, 3, 286, 140, 0, 516, 23, 1, 0, 0, 0, 517, 518, 3, 262, 128, 0, 518, 519, 3, 288, 141, 0, 519, 520, 3, 298, 146, 0, 520, 521, 3, 274, 134, 0, 521, 25, 1, 0, 0, 0, 522, 523, 3, 262, 128, 0, 523, 524, 3, 308, 151, 0, 524, 27, 1, 0, 0, 0, 525, 526, 3, 264, 129, 0, 526, 527, 3, 260, 127, 0, 527, 528, 3, 296, 145, 0, 528, 529, 3, 268, 131, 0, 529, 29, 1, 0, 0, 0, 530, 531, 3, 264, 129, 0, 531, 532, 3, 260, 127, 0, 532, 533, 3, 296, 145, 0, 533, 534, 3, 298, 146, 0, 534, 31, 1, 0, 0, 0, 535, 536, 3, 264, 129, 0, 536, 537, 3, 260, 127, 0, 537, 538, 3, 298, 146, 0, 538, 539, 3, 264, 129, 0, 539, 540, 3, 274, 134, 0, 540, 33, 1, 0, 0, 0, 541, 542, 3, 264, 129, 0, 542, 543, 3, 288, 141, 0, 543, 544, 3, 274, 134, 0, 544, 545, 3, 288, 141, 0, 545, 546, 3, 294, 144, 0, 546, 547, 3, 298, 146, 0, 547, 35, 1, 0, 0, 0, 548, 549, 3, 264, 129, 0, 549, 550, 3, 288, 141, 0, 550, 551, 3, 282, 138, 0, 551, 552, 3, 282, 138, 0, 552, 553, 3, 260, 127, 0, 553, 554, 3, 298, 146, 0, 554, 555, 3, 268, 131, 0, 555, 37, 1, 0, 0, 0, 556, 557, 3, 264, 129, 0, 557, 558, 3, 288, 141, 0, 558, 559, 3, 282, 138, 0, 559, 560, 3, 300, 147, 0, 560, 561, 3, 284, 139, 0, 561, 562, 3, 286, 140, 0, 562, 563, 3, 296, 145, 0, 563, 39, 1, 0, 0, 0, 564, 565, 3, 264, 129, 0, 565, 566, 3, 294, 144, 0, 566, 567, 3, 288, 141, 0, 567, 568, 3, 296, 145, 0, 568, 569, 3, 296, 145, 0, 569, 41, 1, 0, 0, 0, 570, 571, 3, 264, 129, 0, 571, 572, 3, 300, 147, 0, 572, 573, 3, 262, 128, 0, 573, 574, 3, 268, 131, 0, 574, 43, 1, 0, 0, 0, 575, 576, 3, 264, 129, 0, 576, 577, 3, 300, 147, 0, 577, 578, 3, 294, 144, 0, 578, 579, 3, 294, 144, 0, 579, 580, 3, 268, 131, 0, 580, 581, 3, 286, 140, 0, 581, 582, 3, 298, 146, 0, 582, 45, 1, 0, 0, 0, 583, 584, 3, 266, 130, 0, 584, 585, 3, 260, 127, 0, 585, 586, 3, 298, 146, 0, 586, 587, 3, 268, 131, 0, 587, 47, 1, 0, 0, 0, 588, 589, 3, 266, 130, 0, 589, 590, 3, 260, 127, 0, 590, 591, 3, 308, 151, 0, 591, 49, 1, 0, 0, 0, 592, 593, 3, 266, 130, 0, 593, 594, 3, 268, 131, 0, 594, 595, 3, 296, 145, 0, 595, 596, 3, 264, 129, 0, 596, 51, 1, 0, 0, 0, 597, 598, 3, 266, 130, 0, 598, 599, 3, 268, 131, 0, 599, 600, 3, 296, 145, 0, 600, 601, 3, 264, 129, 0, 601, 602, 3, 268, 131, 0, 602, 603, 3, 286, 140, 0, 603, 604, 3, 266, 130, 0, 604, 605, 3, 276, 135, 0, 605, 606, 3, 286, 140, 0, 606, 607, 3, 272, 133, 0, 607, 53, 1, 0, 0, 0, 608, 609, 3, 266, 130, 0, 609, 610, 3, 276, 135, 0, 610, 611, 3, 296, 145, 0, 611, 612, 3, 298, 146, 0, 612, 613, 3, 276, 135, 0, 613, 614, 3, 286, 140, 0, 614, 615, 3, 264, 129, 0, 615, 616, 3, 298, 146, 0, 616, 55, 1, 0, 0, 0, 617, 618, 3, 268, 131, 0, 618, 619, 3, 282, 138, 0, 619, 620, 3, 296, 145, 0, 620, 621, 3, 268, 131, 0, 621, 57, 1, 0, 0, 0, 622, 623, 3, 268, 131, 0, 623, 624, 3, 286, 140, 0, 624, 625, 3, 266, 130, 0, 625, 59, 1, 0, 0, 0, 626, 627, 3, 268, 131, 0, 627, 628, 3, 306, 150, 0, 628, 629, 3, 264, 129, 0, 629, 630, 3, 268, 131, 0, 630, 631, 3, 290, 142, 0, 631, 632, 3, 298, 146, 0, 632, 61, 1, 0, 0, 0, 633, 634, 3, 268, 131, 0, 634, 635, 3, 306, 150, 0, 635, 636, 3, 264, 129, 0, 636, 637, 3, 282, 138, 0, 637, 638, 3, 300, 147, 0, 638, 639, 3, 266, 130, 0, 639, 640, 3, 268, 131, 0, 640, 63, 1, 0, 0, 0, 641, 642, 3, 268, 131, 0, 642, 643, 3, 306, 150, 0, 643, 644, 3, 298, 146, 0, 644, 645, 3, 294, 144, 0, 645, 646, 3, 260, 127, 0, 646, 647, 3, 264, 129, 0, 647, 648, 3, 298, 146, 0, 648, 65, 1, 0, 0, 0, 649, 650, 3, 270, 132, 0, 650, 651, 3, 276, 135, 0, 651, 652, 3, 286, 140, 0, 652, 653, 3, 260, 127, 0, 653, 654, 3, 282, 138, 0, 654, 67, 1, 0, 0, 0, 655, 656, 3, 270, 132, 0, 656, 657, 3, 276, 135, 0, 657, 658, 3, 286, 140, 0, 658, 659, 3, 260, 127, 0, 659, 660, 3, 282, 138, 0, 660, 661, 3, 282, 138, 0, 661, 662, 3, 308, 151, 0, 662, 69, 1, 0, 0, 0, 663, 664, 3, 270, 132, 0, 664, 665, 3, 276, 135, 0, 665, 666, 3, 294, 144, 0, 666, 667, 3, 296, 145, 0, 667, 668, 3, 298, 146, 0, 668, 71, 1, 0, 0, 0, 669, 670, 3, 270, 132, 0, 670, 671, 3, 286, 140, 0, 671, 73, 1, 0, 0, 0, 672, 673, 3, 270, 132, 0, 673, 674, 3, 288, 141, 0, 674, 675, 3, 282, 138, 0, 675, 676, 3, 282, 138, 0, 676, 677, 3, 288, 141, 0, 677, 678, 3, 304, 149, 0, 678, 679, 3, 276, 135, 0, 679, 680, 3, 286, 140, 0, 680, 681, 3, 272, 133, 0, 681, 75, 1, 0, 0, 0, 682, 683, 3, 270, 132, 0, 683, 684, 3, 288, 141, 0, 684, 685, 3, 294, 144, 0, 685, 77, 1, 0, 0, 0, 686, 687, 3, 270, 132, 0, 687, 688, 3, 294, 144, 0, 688, 689, 3, 288, 141, 0, 689, 690, 3, 284, 139, 0, 690, 79, 1, 0, 0, 0, 691, 692, 3, 270, 132, 0, 692, 693, 3, 300, 147, 0, 693, 694, 3, 282, 138, 0, 694, 695, 3, 282, 138, 0, 695, 81, 1, 0, 0, 0, 696, 697, 3, 270, 132, 0, 697, 698, 3, 300, 147, 0, 698, 699, 3, 286, 140, 0, 699, 83, 1, 0, 0, 0, 700, 701, 3, 272, 133, 0, 701, 702, 3, 294, 144, 0, 702, 703, 3, 288, 141, 0, 703, 704, 3, 300, 147, 0, 704, 705, 3, 290, 142, 0, 705, 85, 1, 0, 0, 0, 706, 707, 3, 272, 133, 0, 707, 708, 3, 294, 144, 0, 708, 709, 3, 288, 141, 0, 709, 710, 3, 300, 147, 0, 710, 711, 3, 290, 142, 0, 711, 712, 3, 276, 135, 0, 712, 713, 3, 286, 140, 0, 713, 714, 3, 272, 133, 0, 714, 87, 1, 0, 0, 0, 715, 716, 3, 274, 134, 0, 716, 717, 3, 260, 127, 0, 717, 718, 3, 302, 148, 0, 718, 719, 3, 276, 135, 0, 719, 720, 3, 286, 140, 0, 720, 721, 3, 272, 133, 0, 721, 89, 1, 0, 0, 0, 722, 723, 3, 274, 134, 0, 723, 724, 3, 288, 141, 0, 724, 725, 3, 300, 147, 0, 725, 726, 3, 294, 144, 0, 726, 91, 1, 0, 0, 0, 727, 728, 3, 276, 135, 0, 728, 729, 3, 266, 130, 0, 729, 93, 1, 0, 0, 0, 730, 731, 3, 276, 135, 0, 731, 732, 3, 270, 132, 0, 732, 95, 1, 0, 0, 0, 733, 734, 3, 276, 135, 0, 734, 735, 3, 282, 138, 0, 735, 736, 3, 276, 135, 0, 736, 737, 3, 280, 137, 0, 737, 738, 3, 268, 131, 0, 738, 97, 1, 0, 0, 0, 739, 740, 3, 276, 135, 0, 740, 741, 3, 286, 140, 0, 741, 99, 1, 0, 0, 0, 742, 743, 3, 276, 135, 0, 743, 744, 3, 286, 140, 0, 744, 745, 3, 270, 132, 0, 745, 756, 1, 0, 0, 0, 746, 747, 3, 276, 135, 0, 747, 748, 3, 286, 140, 0, 748, 749, 3, 270, 132, 0, 749, 750, 3, 276, 135, 0, 750, 751, 3, 286, 140, 0, 751, 752, 3, 276, 135, 0, 752, 753, 3, 298, 146, 0, 753, 754, 3, 308, 151, 0, 754, 756, 1, 0, 0, 0, 755, 742, 1, 0, 0, 0, 755, 746, 1, 0, 0, 0, 756, 101, 1, 0, 0, 0, 757, 758, 3, 276, 135, 0, 758, 759, 3, 286, 140, 0, 759, 760, 3, 286, 140, 0, 760, 761, 3, 268, 131, 0, 761, 762, 3, 294, 144, 0, 762, 103, 1, 0, 0, 0, 763, 764, 3, 276, 135, 0, 764, 765, 3, 286, 140, 0, 765, 766, 3, 298, 146, 0, 766, 767, 3, 268, 131, 0, 767, 768, 3, 294, 144, 0, 768, 769, 3, 296, 145, 0, 769, 770, 3, 268, 131, 0, 770, 771, 3, 264, 129, 0, 771, 772, 3, 298, 146, 0, 772, 105, 1, 0, 0, 0, 773, 774, 3, 276, 135, 0, 774, 775, 3, 286, 140, 0, 775, 776, 3, 298, 146, 0, 776, 777, 3, 268, 131, 0, 777, 778, 3, 294, 144, 0, 778, 779, 3, 302, 148, 0, 779, 780, 3, 260, 127, 0, 780, 781, 3, 282, 138, 0, 781, 107, 1, 0, 0, 0, 782, 783, 3, 276, 135, 0, 783, 784, 3, 296, 145, 0, 784, 109, 1, 0, 0, 0, 785, 786, 3, 278, 136, 0, 786, 787, 3, 288, 141, 0, 787, 788, 3, 276, 135, 0, 788, 789, 3, 286, 140, 0, 789, 111, 1, 0, 0, 0, 790, 791, 3, 280, 137, 0, 791, 792, 3, 268, 131, 0, 792, 793, 3, 308, 151, 0, 793, 113, 1, 0, 0, 0, 794, 795, 3, 282, 138, 0, 795, 796, 3, 260, 127, 0, 796, 797, 3, 284, 139, 0, 797, 798, 3, 262, 128, 0, 798, 799, 3, 266, 130, 0, 799, 800, 3, 260, 127, 0, 800, 115, 1, 0, 0, 0, 801, 802, 3, 282, 138, 0, 802, 803, 3, 260, 127, 0, 803, 804, 3, 296, 145, 0, 804, 805, 3, 298, 146, 0, 805, 117, 1, 0, 0, 0, 806, 807, 3, 282, 138, 0, 807, 808, 3, 268, 131, 0, 808, 809, 3, 260, 127, 0, 809, 810, 3, 266, 130, 0, 810, 811, 3, 276, 135, 0, 811, 812, 3, 286, 140, 0, 812, 813, 3, 272, 133, 0, 813, 119, 1, 0, 0, 0, 814, 815, 3, 282, 138, 0, 815, 816, 3, 268, 131, 0, 816, 817, 3, 270, 132, 0, 817, 818, 3, 298, 146, 0, 818, 121, 1, 0, 0, 0, 819, 820, 3, 282, 138, 0, 820, 821, 3, 268, 131, 0, 821, 822, 3, 298, 146, 0, 822, 123, 1, 0, 0, 0, 823, 824, 3, 282, 138, 0, 824, 825, 3, 276, 135, 0, 825, 826, 3, 280, 137, 0, 826, 827, 3, 268, 131, 0, 827, 125, 1, 0, 0, 0, 828, 829, 3, 282, 138, 0, 829, 830, 3, 276, 135, 0, 830, 831, 3, 284, 139, 0, 831, 832, 3, 276, 135, 0, 832, 833, 3, 298, 146, 0, 833, 127, 1, 0, 0, 0, 834, 835, 3, 284, 139, 0, 835, 836, 3, 260, 127, 0, 836, 837, 3, 298, 146, 0, 837, 838, 3, 268, 131, 0, 838, 839, 3, 294, 144, 0, 839, 840, 3, 276, 135, 0, 840, 841, 3, 260, 127, 0, 841, 842, 3, 282, 138, 0, 842, 843, 3, 276, 135, 0, 843, 844, 3, 310, 152, 0, 844, 845, 3, 268, 131, 0, 845, 846, 3, 266, 130, 0, 846, 129, 1, 0, 0, 0, 847, 848, 3, 284, 139, 0, 848, 849, 3, 276, 135, 0, 849, 850, 3, 286, 140, 0, 850, 851, 3, 300, 147, 0, 851, 852, 3, 298, 146, 0, 852, 853, 3, 268, 131, 0, 853, 131, 1, 0, 0, 0, 854, 855, 3, 284, 139, 0, 855, 856, 3, 288, 141, 0, 856, 857, 3, 286, 140, 0, 857, 858, 3, 298, 146, 0, 858, 859, 3, 274, 134, 0, 859, 133, 1, 0, 0, 0, 860, 861, 3, 286, 140, 0, 861, 862, 3, 260, 127, 0, 862, 863, 3, 284, 139, 0, 863, 864, 3, 268, 131, 0, 864, 135, 1, 0, 0, 0, 865, 866, 3, 286, 140, 0, 866, 867, 3, 260, 127, 0, 867, 868, 3, 286, 140, 0, 868, 137, 1, 0, 0, 0, 869, 870, 3, 286, 140, 0, 870, 871, 3, 288, 141, 0, 871, 872, 3, 298, 146, 0, 872, 139, 1, 0, 0, 0, 873, 874, 3, 286, 140, 0, 874, 875, 3, 300, 147, 0, 875, 876, 3, 282, 138, 0, 876, 877, 3, 282, 138, 0, 877, 141, 1, 0, 0, 0, 878, 879, 3, 286, 140, 0, 879, 880, 3, 300, 147, 0, 880, 881, 3, 282, 138, 0, 881, 882, 3, 282, 138, 0, 882, 883, 3, 296, 145, 0, 883, 143, 1, 0, 0, 0, 884, 885, 3, 288, 141, 0, 885, 886, 3, 270, 132, 0, 886, 887, 3, 270, 132, 0, 887, 888, 3, 296, 145, 0, 888, 889, 3, 268, 131, 0, 889, 890, 3, 298, 146, 0, 890, 145, 1, 0, 0, 0, 891, 892, 3, 288, 141, 0, 892, 893, 3, 286, 140, 0, 893, 147, 1, 0, 0, 0, 894, 895, 3, 288, 141, 0, 895, 896, 3, 294, 144, 0, 896, 149, 1, 0, 0, 0, 897, 898, 3, 288, 141, 0, 898, 899, 3, 294, 144, 0, 899, 900, 3, 266, 130, 0, 900, 901, 3, 268, 131, 0, 901, 902, 3, 294, 144, 0, 902, 151, 1, 0, 0, 0, 903, 904, 3, 288, 141, 0, 904, 905, 3, 300, 147, 0, 905, 906, 3, 298, 146, 0, 906, 907, 3, 268, 131, 0, 907, 908, 3, 294, 144, 0, 908, 153, 1, 0, 0, 0, 909, 910, 3, 288, 141, 0, 910, 911, 3, 302, 148, 0, 911, 912, 3, 268, 131, 0, 912, 913, 3, 294, 144, 0, 913, 155, 1, 0, 0, 0, 914, 915, 3, 290, 142, 0, 915, 916, 3, 260, 127, 0, 916, 917, 3, 294, 144, 0, 917, 918, 3, 298, 146, 0, 918, 919, 3, 276, 135, 0, 919, 920, 3, 298, 146, 0, 920, 921, 3, 276, 135, 0, 921, 922, 3, 288, 141, 0, 922, 923, 3, 286, 140, 0, 923, 157, 1, 0, 0, 0, 924, 925, 3, 290, 142, 0, 925, 926, 3, 294, 144, 0, 926, 927, 3, 268, 131, 0, 927, 928, 3, 264, 129, 0, 928, 929, 3, 268, 131, 0, 929, 930, 3, 266, 130, 0, 930, 931, 3, 276, 135, 0, 931, 932, 3, 286, 140, 0, 932, 933, 3, 272, 133, 0, 933, 159, 1, 0, 0, 0, 934, 935, 3, 290, 142, 0, 935, 936, 3, 294, 144, 0, 936, 937, 3, 268, 131, 0, 937, 938, 3, 304, 149, 0, 938, 939, 3, 274, 134, 0, 939, 940, 3, 268, 131, 0, 940, 941, 3, 294, 144, 0, 941, 942, 3, 268, 131, 0, 942, 161, 1, 0, 0, 0, 943, 944, 3, 292, 143, 0, 944, 945, 3, 300, 147, 0, 945, 946, 3, 260, 127, 0, 946, 947, 3, 282, 138, 0, 947, 948, 3, 276, 135, 0, 948, 949, 3, 270, 132, 0, 949, 950, 3, 308, 151, 0, 950, 163, 1, 0, 0, 0, 951, 952, 3, 292, 143, 0, 952, 953, 3, 300, 147, 0, 953, 954, 3, 260, 127, 0, 954, 955, 3, 294, 144, 0, 955, 956, 3, 298, 146, 0, 956, 957, 3, 268, 131, 0, 957, 958, 3, 294, 144, 0, 958, 165, 1, 0, 0, 0, 959, 960, 3, 294, 144, 0, 960, 961, 3, 260, 127, 0, 961, 962, 3, 286, 140, 0, 962, 963, 3, 272, 133, 0, 963, 964, 3, 268, 131, 0, 964, 167, 1, 0, 0, 0, 965, 966, 3, 294, 144, 0, 966, 967, 3, 268, 131, 0, 967, 968, 3, 264, 129, 0, 968, 969, 3, 300, 147, 0, 969, 970, 3, 294, 144, 0, 970, 971, 3, 296, 145, 0, 971, 972, 3, 276, 135, 0, 972, 973, 3, 302, 148, 0, 973, 974, 3, 268, 131, 0, 974, 169, 1, 0, 0, 0, 975, 976, 3, 294, 144, 0, 976, 977, 3, 268, 131, 0, 977, 978, 3, 290, 142, 0, 978, 979, 3, 282, 138, 0, 979, 980, 3, 260, 127, 0, 980, 981, 3, 264, 129, 0, 981, 982, 3, 268, 131, 0, 982, 171, 1, 0, 0, 0, 983, 984, 3, 294, 144, 0, 984, 985, 3, 268, 131, 0, 985, 986, 3, 298, 146, 0, 986, 987, 3, 300, 147, 0, 987, 988, 3, 294, 144, 0, 988, 989, 3, 286, 140, 0, 989, 173, 1, 0, 0, 0, 990, 991, 3, 294, 144, 0, 991, 992, 3, 276, 135, 0, 992, 993, 3, 272, 133, 0, 993, 994, 3, 274, 134, 0, 994, 995, 3, 298, 146, 0, 995, 175, 1, 0, 0, 0, 996, 997, 3, 294, 144, 0, 997, 998, 3, 288, 141, 0, 998, 999, 3, 282, 138, 0, 999, 1000, 3, 282, 138, 0, 1000, 1001, 3, 300, 147, 0, 1001, 1002, 3, 290, 142, 0, 1002, 177, 1, 0, 0, 0, 1003, 1004, 3, 294, 144, 0, 1004, 1005, 3, 288, 141, 0, 1005, 1006, 3, 304, 149, 0, 1006, 179, 1, 0, 0, 0, 1007, 1008, 3, 294, 144, 0, 1008, 1009, 3, 288, 141, 0, 1009, 1010, 3, 304, 149, 0, 1010, 1011, 3, 296, 145, 0, 1011, 181, 1, 0, 0, 0, 1012, 1013, 3, 296, 145, 0, 1013, 1014, 3, 260, 127, 0, 1014, 1015, 3, 284, 139, 0, 1015, 1016, 3, 290, 142, 0, 1016, 1017, 3, 282, 138, 0, 1017, 1018, 3, 268, 131, 0, 1018, 183, 1, 0, 0, 0, 1019, 1020, 3, 296, 145, 0, 1020, 1021, 3, 268, 131, 0, 1021, 1022, 3, 264, 129, 0, 1022, 1023, 3, 288, 141, 0, 1023, 1024, 3, 286, 140, 0, 1024, 1025, 3, 266, 130, 0, 1025, 185, 1, 0, 0, 0, 1026, 1027, 3, 296, 145, 0, 1027, 1028, 3, 268, 131, 0, 1028, 1029, 3, 282, 138, 0, 1029, 1030, 3, 268, 131, 0, 1030, 1031, 3, 264, 129, 0, 1031, 1032, 3, 298, 146, 0, 1032, 187, 1, 0, 0, 0, 1033, 1034, 3, 296, 145, 0, 1034, 1035, 3, 268, 131, 0, 1035, 1036, 3, 284, 139, 0, 1036, 1037, 3, 276, 135, 0, 1037, 189, 1, 0, 0, 0, 1038, 1039, 3, 296, 145, 0, 1039, 1040, 3, 268, 131, 0, 1040, 1041, 3, 298, 146, 0, 1041, 1042, 3, 296, 145, 0, 1042, 191, 1, 0, 0, 0, 1043, 1044, 3, 296, 145, 0, 1044, 1045, 3, 268, 131, 0, 1045, 1046, 3, 298, 146, 0, 1046, 1047, 3, 298, 146, 0, 1047, 1048, 3, 276, 135, 0, 1048, 1049, 3, 286, 140, 0, 1049, 1050, 3, 272, 133, 0, 1050, 1051, 3, 296, 145, 0, 1051, 193, 1, 0, 0, 0, 1052, 1053, 3, 296, 145, 0, 1053, 1054, 3, 300, 147, 0, 1054, 1055, 3, 262, 128, 0, 1055, 1056, 3, 296, 145, 0, 1056, 1057, 3, 298, 146, 0, 1057, 1058, 3, 294, 144, 0, 1058, 1059, 3, 276, 135, 0, 1059, 1060, 3, 286, 140, 0, 1060, 1061, 3, 272, 133, 0, 1061, 195, 1, 0, 0, 0, 1062, 1063, 3, 298, 146, 0, 1063, 1064, 3, 274, 134, 0, 1064, 1065, 3, 268, 131, 0, 1065, 1066, 3, 286, 140, 0, 1066, 197, 1, 0, 0, 0, 1067, 1068, 3, 298, 146, 0, 1068, 1069, 3, 274, 134, 0, 1069, 1070, 3, 294, 144, 0, 1070, 1071, 3, 288, 141, 0, 1071, 1072, 3, 304, 149, 0, 1072, 199, 1, 0, 0, 0, 1073, 1074, 3, 298, 146, 0, 1074, 1075, 3, 276, 135, 0, 1075, 1076, 3, 268, 131, 0, 1076, 1077, 3, 296, 145, 0, 1077, 201, 1, 0, 0, 0, 1078, 1079, 3, 298, 146, 0, 1079, 1080, 3, 276, 135, 0, 1080, 1081, 3, 284, 139, 0, 1081, 1082, 3, 268, 131, 0, 1082, 1083, 3, 296, 145, 0, 1083, 1084, 3, 298, 146, 0, 1084, 1085, 3, 260, 127, 0, 1085, 1086, 3, 284, 139, 0, 1086, 1087, 3, 290, 142, 0, 1087, 203, 1, 0, 0, 0, 1088, 1089, 3, 298, 146, 0, 1089, 1090, 3, 288, 141, 0, 1090, 205, 1, 0, 0, 0, 1091, 1092, 3, 298, 146, 0, 1092, 1093, 3, 288, 141, 0, 1093, 1094, 3, 290, 142, 0, 1094, 207, 1, 0, 0, 0, 1095, 1096, 3, 298, 146, 0, 1096, 1097, 3, 288, 141, 0, 1097, 1098, 3, 298, 146, 0, 1098, 1099, 3, 260, 127, 0, 1099, 1100, 3, 282, 138, 0, 1100, 1101, 3, 296, 145, 0, 1101, 209, 1, 0, 0, 0, 1102, 1103, 3, 298, 146, 0, 1103, 1104, 3, 294, 144, 0, 1104, 1105, 3, 260, 127, 0, 1105, 1106, 3, 276, 135, 0, 1106, 1107, 3, 282, 138, 0, 1107, 1108, 3, 276, 135, 0, 1108, 1109, 3, 286, 140, 0, 1109, 1110, 3, 272, 133, 0, 1110, 211, 1, 0, 0, 0, 1111, 1112, 3, 298, 146, 0, 1112, 1113, 3, 294, 144, 0, 1113, 1114, 3, 276, 135, 0, 1114, 1115, 3, 284, 139, 0, 1115, 213, 1, 0, 0, 0, 1116, 1117, 3, 298, 146, 0, 1117, 1118, 3, 294, 144, 0, 1118, 1119, 3, 300, 147, 0, 1119, 1120, 3, 286, 140, 0, 1120, 1121, 3, 264, 129, 0, 1121, 1122, 3, 260, 127, 0, 1122, 1123, 3, 298, 146, 0, 1123, 1124, 3, 268, 131, 0, 1124, 215, 1, 0, 0, 0, 1125, 1126, 3, 298, 146, 0, 1126, 1127, 3, 294, 144, 0, 1127, 1128, 3, 308, 151, 0, 1128, 217, 1, 0, 0, 0, 1129, 1130, 3, 298, 146, 0, 1130, 1131, 3, 294, 144, 0, 1131, 1132, 3, 308, 151, 0, 1132, 1133, 5, 95, 0, 0, 1133, 1134, 3, 264, 129, 0, 1134, 1135, 3, 260, 127, 0, 1135, 1136, 3, 296, 145, 0, 1136, 1137, 3, 298, 146, 0, 1137, 219, 1, 0, 0, 0, 1138, 1139, 3, 300, 147, 0, 1139, 1140, 3, 286, 140, 0, 1140, 1141, 3, 262, 128, 0, 1141, 1142, 3, 288, 141, 0, 1142, 1143, 3, 300, 147, 0, 1143, 1144, 3, 286, 140, 0, 1144, 1145, 3, 266, 130, 0, 1145, 1146, 3, 268, 131, 0, 1146, 1147, 3, 266, 130, 0, 1147, 221, 1, 0, 0, 0, 1148, 1149, 3, 300, 147, 0, 1149, 1150, 3, 286, 140, 0, 1150, 1151, 3, 276, 135, 0, 1151, 1152, 3, 288, 141, 0, 1152, 1153, 3, 286, 140, 0, 1153, 223, 1, 0, 0, 0, 1154, 1155, 3, 300, 147, 0, 1155, 1156, 3, 286, 140, 0, 1156, 1157, 3, 290, 142, 0, 1157, 1158, 3, 276, 135, 0, 1158, 1159, 3, 302, 148, 0, 1159, 1160, 3, 288, 141, 0, 1160, 1161, 3, 298, 146, 0, 1161, 225, 1, 0, 0, 0, 1162, 1163, 3, 300, 147, 0, 1163, 1164, 3, 296, 145, 0, 1164, 1165, 3, 276, 135, 0, 1165, 1166, 3, 286, 140, 0, 1166, 1167, 3, 272, 133, 0, 1167, 227, 1, 0, 0, 0, 1168, 1169, 3, 302, 148, 0, 1169, 1170, 3, 260, 127, 0, 1170, 1171, 3, 282, 138, 0, 1171, 1172, 3, 300, 147, 0, 1172, 1173, 3, 268, 131, 0, 1173, 1174, 3, 296, 145, 0, 1174, 229, 1, 0, 0, 0, 1175, 1176, 3, 304, 149, 0, 1176, 1177, 3, 268, 131, 0, 1177, 1178, 3, 268, 131, 0, 1178, 1179, 3, 280, 137, 0, 1179, 231, 1, 0, 0, 0, 1180, 1181, 3, 304, 149, 0, 1181, 1182, 3, 274, 134, 0, 1182, 1183, 3, 268, 131, 0, 1183, 1184, 3, 286, 140, 0, 1184, 233, 1, 0, 0, 0, 1185, 1186, 3, 304, 149, 0, 1186, 1187, 3, 274, 134, 0, 1187, 1188, 3, 268, 131, 0, 1188, 1189, 3, 294, 144, 0, 1189, 1190, 3, 268, 131, 0, 1190, 235, 1, 0, 0, 0, 1191, 1192, 3, 304, 149, 0, 1192, 1193, 3, 274, 134, 0, 1193, 1194, 3, 276, 135, 0, 1194, 1195, 3, 282, 138, 0, 1195, 1196, 3, 268, 131, 0, 1196, 237, 1, 0, 0, 0, 1197, 1198, 3, 304, 149, 0, 1198, 1199, 3, 276, 135, 0, 1199, 1200, 3, 286, 140, 0, 1200, 1201, 3, 266, 130, 0, 1201, 1202, 3, 288, 141, 0, 1202, 1203, 3, 304, 149, 0, 1203, 239, 1, 0, 0, 0, 1204, 1205, 3, 304, 149, 0, 1205, 1206, 3, 276, 135, 0, 1206, 1207, 3, 298, 146, 0, 1207, 1208, 3, 274, 134, 0, 1208, 241, 1, 0, 0, 0, 1209, 1210, 3, 304, 149, 0, 1210, 1211, 3, 276, 135, 0, 1211, 1212, 3, 298, 146, 0, 1212, 1213, 3, 274, 134, 0, 1213, 1214, 3, 276, 135, 0, 1214, 1215, 3, 286, 140, 0, 1215, 243, 1, 0, 0, 0, 1216, 1217, 3, 308, 151, 0, 1217, 1218, 3, 268, 131, 0, 1218, 1219, 3, 260, 127, 0, 1219, 1220, 3, 294, 144, 0, 1220, 1227, 1, 0, 0, 0, 1221, 1222, 3, 308, 151, 0, 1222, 1223, 3, 308, 151, 0, 1223, 1224, 3, 308, 151, 0, 1224, 1225, 3, 308, 151, 0, 1225, 1227, 1, 0, 0, 0, 1226, 1216, 1, 0, 0, 0, 1226, 1221, 1, 0, 0, 0, 1227, 245, 1, 0, 0, 0, 1228, 1229, 3, 326, 160, 0, 1229, 1230, 3, 262, 128, 0, 1230, 1256, 1, 0, 0, 0, 1231, 1232, 3, 326, 160, 0, 1232, 1233, 3, 270, 132, 0, 1233, 1256, 1, 0, 0, 0, 1234, 1235, 3, 326, 160, 0, 1235, 1236, 3, 294, 144, 0, 1236, 1256, 1, 0, 0, 0, 1237, 1238, 3, 326, 160, 0, 1238, 1239, 3, 286, 140, 0, 1239, 1256, 1, 0, 0, 0, 1240, 1241, 3, 326, 160, 0, 1241, 1242, 3, 298, 146, 0, 1242, 1256, 1, 0, 0, 0, 1243, 1244, 3, 326, 160, 0, 1244, 1245, 5, 48, 0, 0, 1245, 1256, 1, 0, 0, 0, 1246, 1247, 3, 326, 160, 0, 1247, 1248, 3, 260, 127, 0, 1248, 1256, 1, 0, 0, 0, 1249, 1250, 3, 326, 160, 0, 1250, 1251, 3, 302, 148, 0, 1251, 1256, 1, 0, 0, 0, 1252, 1253, 3, 326, 160, 0, 1253, 1254, 3, 326, 160, 0, 1254, 1256, 1, 0, 0, 0, 1255, 1228, 1, 0, 0, 0, 1255, 1231, 1, 0, 0, 0, 1255, 1234, 1, 0, 0, 0, 1255, 1237, 1, 0, 0, 0, 1255, 1240, 1, 0, 0, 0, 1255, 1243, 1, 0, 0, 0, 1255, 1246, 1, 0, 0, 0, 1255, 1249, 1, 0, 0, 0, 1255, 1252, 1, 0, 0, 0, 1256, 247, 1, 0, 0, 0, 1257, 1261, 3, 312, 153, 0, 1258, 1261, 3, 414, 204, 0, 1259, 1261, 3, 340, 167, 0, 1260, 1257, 1, 0, 0, 0, 1260, 1258, 1, 0, 0, 0, 1260, 1259, 1, 0, 0, 0, 1261, 1268, 1, 0, 0, 0, 1262, 1267, 3, 312, 153, 0, 1263, 1267, 3, 414, 204, 0, 1264, 1267, 3, 316, 155, 0, 1265, 1267, 3, 340, 167, 0, 1266, 1262, 1, 0, 0, 0, 1266, 1263, 1, 0, 0, 0, 1266, 1264, 1, 0, 0, 0, 1266, 1265, 1, 0, 0, 0, 1267, 1270, 1, 0, 0, 0, 1268, 1266, 1, 0, 0, 0, 1268, 1269, 1, 0, 0, 0, 1269, 1304, 1, 0, 0, 0, 1270, 1268, 1, 0, 0, 0, 1271, 1282, 3, 324, 159, 0, 1272, 1281, 8, 0, 0, 0, 1273, 1281, 3, 246, 120, 0, 1274, 1275, 3, 326, 160, 0, 1275, 1276, 3, 396, 195, 0, 1276, 1281, 1, 0, 0, 0, 1277, 1278, 3, 324, 159, 0, 1278, 1279, 3, 324, 159, 0, 1279, 1281, 1, 0, 0, 0, 1280, 1272, 1, 0, 0, 0, 1280, 1273, 1, 0, 0, 0, 1280, 1274, 1, 0, 0, 0, 1280, 1277, 1, 0, 0, 0, 1281, 1284, 1, 0, 0, 0, 1282, 1280, 1, 0, 0, 0, 1282, 1283, 1, 0, 0, 0, 1283, 1285, 1, 0, 0, 0, 1284, 1282, 1, 0, 0, 0, 1285, 1286, 3, 324, 159, 0, 1286, 1304, 1, 0, 0, 0, 1287, 1298, 3, 390, 192, 0, 1288, 1297, 8, 1, 0, 0, 1289, 1297, 3, 246, 120, 0, 1290, 1291, 3, 326, 160, 0, 1291, 1292, 3, 390, 192, 0, 1292, 1297, 1, 0, 0, 0, 1293, 1294, 3, 390, 192, 0, 1294, 1295, 3, 390, 192, 0, 1295, 1297, 1, 0, 0, 0, 1296, 1288, 1, 0, 0, 0, 1296, 1289, 1, 0, 0, 0, 1296, 1290, 1, 0, 0, 0, 1296, 1293, 1, 0, 0, 0, 1297, 1300, 1, 0, 0, 0, 1298, 1296, 1, 0, 0, 0, 1298, 1299, 1, 0, 0, 0, 1299, 1301, 1, 0, 0, 0, 1300, 1298, 1, 0, 0, 0, 1301, 1302, 3, 390, 192, 0, 1302, 1304, 1, 0, 0, 0, 1303, 1260, 1, 0, 0, 0, 1303, 1271, 1, 0, 0, 0, 1303, 1287, 1, 0, 0, 0, 1304, 249, 1, 0, 0, 0, 1305, 1306, 3, 256, 125, 0, 1306, 1310, 3, 342, 168, 0, 1307, 1309, 3, 318, 156, 0, 1308, 1307, 1, 0, 0, 0, 1309, 1312, 1, 0, 0, 0, 1310, 1308, 1, 0, 0, 0, 1310, 1311, 1, 0, 0, 0, 1311, 1315, 1, 0, 0, 0, 1312, 1310, 1, 0, 0, 0, 1313, 1316, 3, 290, 142, 0, 1314, 1316, 3, 268, 131, 0, 1315, 1313, 1, 0, 0, 0, 1315, 1314, 1, 0, 0, 0, 1316, 1319, 1, 0, 0, 0, 1317, 1320, 3, 386, 190, 0, 1318, 1320, 3, 338, 166, 0, 1319, 1317, 1, 0, 0, 0, 1319, 1318, 1, 0, 0, 0, 1319, 1320, 1, 0, 0, 0, 1320, 1322, 1, 0, 0, 0, 1321, 1323, 3, 316, 155, 0, 1322, 1321, 1, 0, 0, 0, 1323, 1324, 1, 0, 0, 0, 1324, 1322, 1, 0, 0, 0, 1324, 1325, 1, 0, 0, 0, 1325, 1382, 1, 0, 0, 0, 1326, 1329, 3, 256, 125, 0, 1327, 1330, 3, 290, 142, 0, 1328, 1330, 3, 268, 131, 0, 1329, 1327, 1, 0, 0, 0, 1329, 1328, 1, 0, 0, 0, 1330, 1333, 1, 0, 0, 0, 1331, 1334, 3, 386, 190, 0, 1332, 1334, 3, 338, 166, 0, 1333, 1331, 1, 0, 0, 0, 1333, 1332, 1, 0, 0, 0, 1333, 1334, 1, 0, 0, 0, 1334, 1336, 1, 0, 0, 0, 1335, 1337, 3, 316, 155, 0, 1336, 1335, 1, 0, 0, 0, 1337, 1338, 1, 0, 0, 0, 1338, 1336, 1, 0, 0, 0, 1338, 1339, 1, 0, 0, 0, 1339, 1382, 1, 0, 0, 0, 1340, 1341, 3, 254, 124, 0, 1341, 1345, 3, 342, 168, 0, 1342, 1344, 3, 316, 155, 0, 1343, 1342, 1, 0, 0, 0, 1344, 1347, 1, 0, 0, 0, 1345, 1343, 1, 0, 0, 0, 1345, 1346, 1, 0, 0, 0, 1346, 1348, 1, 0, 0, 0, 1347, 1345, 1, 0, 0, 0, 1348, 1351, 3, 268, 131, 0, 1349, 1352, 3, 386, 190, 0, 1350, 1352, 3, 338, 166, 0, 1351, 1349, 1, 0, 0, 0, 1351, 1350, 1, 0, 0, 0, 1351, 1352, 1, 0, 0, 0, 1352, 1354, 1, 0, 0, 0, 1353, 1355, 3, 316, 155, 0, 1354, 1353, 1, 0, 0, 0, 1355, 1356, 1, 0, 0, 0, 1356, 1354, 1, 0, 0, 0, 1356, 1357, 1, 0, 0, 0, 1357, 1382, 1, 0, 0, 0, 1358, 1359, 3, 342, 168, 0, 1359, 1360, 3, 254, 124, 0, 1360, 1363, 3, 268, 131, 0, 1361, 1364, 3, 386, 190, 0, 1362, 1364, 3, 338, 166, 0, 1363, 1361, 1, 0, 0, 0, 1363, 1362, 1, 0, 0, 0, 1363, 1364, 1, 0, 0, 0, 1364, 1366, 1, 0, 0, 0, 1365, 1367, 3, 316, 155, 0, 1366, 1365, 1, 0, 0, 0, 1367, 1368, 1, 0, 0, 0, 1368, 1366, 1, 0, 0, 0, 1368, 1369, 1, 0, 0, 0, 1369, 1382, 1, 0, 0, 0, 1370, 1371, 3, 254, 124, 0, 1371, 1374, 3, 268, 131, 0, 1372, 1375, 3, 386, 190, 0, 1373, 1375, 3, 338, 166, 0, 1374, 1372, 1, 0, 0, 0, 1374, 1373, 1, 0, 0, 0, 1374, 1375, 1, 0, 0, 0, 1375, 1377, 1, 0, 0, 0, 1376, 1378, 3, 316, 155, 0, 1377, 1376, 1, 0, 0, 0, 1378, 1379, 1, 0, 0, 0, 1379, 1377, 1, 0, 0, 0, 1379, 1380, 1, 0, 0, 0, 1380, 1382, 1, 0, 0, 0, 1381, 1305, 1, 0, 0, 0, 1381, 1326, 1, 0, 0, 0, 1381, 1340, 1, 0, 0, 0, 1381, 1358, 1, 0, 0, 0, 1381, 1370, 1, 0, 0, 0, 1382, 251, 1, 0, 0, 0, 1383, 1385, 5, 48, 0, 0, 1384, 1386, 3, 314, 154, 0, 1385, 1384, 1, 0, 0, 0, 1386, 1387, 1, 0, 0, 0, 1387, 1385, 1, 0, 0, 0, 1387, 1388, 1, 0, 0, 0, 1388, 253, 1, 0, 0, 0, 1389, 1391, 3, 316, 155, 0, 1390, 1389, 1, 0, 0, 0, 1391, 1392, 1, 0, 0, 0, 1392, 1390, 1, 0, 0, 0, 1392, 1393, 1, 0, 0, 0, 1393, 255, 1, 0, 0, 0, 1394, 1395, 5, 48, 0, 0, 1395, 1397, 3, 306, 150, 0, 1396, 1398, 3, 318, 156, 0, 1397, 1396, 1, 0, 0, 0, 1398, 1399, 1, 0, 0, 0, 1399, 1397, 1, 0, 0, 0, 1399, 1400, 1, 0, 0, 0, 1400, 257, 1, 0, 0, 0, 1401, 1412, 3, 396, 195, 0, 1402, 1411, 8, 2, 0, 0, 1403, 1411, 3, 246, 120, 0, 1404, 1405, 3, 326, 160, 0, 1405, 1406, 3, 396, 195, 0, 1406, 1411, 1, 0, 0, 0, 1407, 1408, 3, 396, 195, 0, 1408, 1409, 3, 396, 195, 0, 1409, 1411, 1, 0, 0, 0, 1410, 1402, 1, 0, 0, 0, 1410, 1403, 1, 0, 0, 0, 1410, 1404, 1, 0, 0, 0, 1410, 1407, 1, 0, 0, 0, 1411, 1414, 1, 0, 0, 0, 1412, 1410, 1, 0, 0, 0, 1412, 1413, 1, 0, 0, 0, 1413, 1415, 1, 0, 0, 0, 1414, 1412, 1, 0, 0, 0, 1415, 1416, 3, 396, 195, 0, 1416, 259, 1, 0, 0, 0, 1417, 1418, 7, 3, 0, 0, 1418, 261, 1, 0, 0, 0, 1419, 1420, 7, 4, 0, 0, 1420, 263, 1, 0, 0, 0, 1421, 1422, 7, 5, 0, 0, 1422, 265, 1, 0, 0, 0, 1423, 1424, 7, 6, 0, 0, 1424, 267, 1, 0, 0, 0, 1425, 1426, 7, 7, 0, 0, 1426, 269, 1, 0, 0, 0, 1427, 1428, 7, 8, 0, 0, 1428, 271, 1, 0, 0, 0, 1429, 1430, 7, 9, 0, 0, 1430, 273, 1, 0, 0, 0, 1431, 1432, 7, 10, 0, 0, 1432, 275, 1, 0, 0, 0, 1433, 1434, 7, 11, 0, 0, 1434, 277, 1, 0, 0, 0, 1435, 1436, 7, 12, 0, 0, 1436, 279, 1, 0, 0, 0, 1437, 1438, 7, 13, 0, 0, 1438, 281, 1, 0, 0, 0, 1439, 1440, 7, 14, 0, 0, 1440, 283, 1, 0, 0, 0, 1441, 1442, 7, 15, 0, 0, 1442, 285, 1, 0, 0, 0, 1443, 1444, 7, 16, 0, 0, 1444, 287, 1, 0, 0, 0, 1445, 1446, 7, 17, 0, 0, 1446, 289, 1, 0, 0, 0, 1447, 1448, 7, 18, 0, 0, 1448, 291, 1, 0, 0, 0, 1449, 1450, 7, 19, 0, 0, 1450, 293, 1, 0, 0, 0, 1451, 1452, 7, 20, 0, 0, 1452, 295, 1, 0, 0, 0, 1453, 1454, 7, 21, 0, 0, 1454, 297, 1, 0, 0, 0, 1455, 1456, 7, 22, 0, 0, 1456, 299, 1, 0, 0, 0, 1457, 1458, 7, 23, 0, 0, 1458, 301, 1, 0, 0, 0, 1459, 1460, 7, 24, 0, 0, 1460, 303, 1, 0, 0, 0, 1461, 1462, 7, 25, 0, 0, 1462, 305, 1, 0, 0, 0, 1463, 1464, 7, 26, 0, 0, 1464, 307, 1, 0, 0, 0, 1465, 1466, 7, 27, 0, 0, 1466, 309, 1, 0, 0, 0, 1467, 1468, 7, 28, 0, 0, 1468, 311, 1, 0, 0, 0, 1469, 1470, 7, 29, 0, 0, 1470, 313, 1, 0, 0, 0, 1471, 1472, 7, 30, 0, 0, 1472, 315, 1, 0, 0, 0, 1473, 1474, 7, 31, 0, 0, 1474, 317, 1, 0, 0, 0, 1475, 1476, 7, 32, 0, 0, 1476, 319, 1, 0, 0, 0, 1477, 1478, 5, 45, 0, 0, 1478, 1479, 5, 62, 0, 0, 1479, 321, 1, 0, 0, 0, 1480, 1481, 5, 42, 0, 0, 1481, 323, 1, 0, 0, 0, 1482, 1483, 5, 96, 0, 0, 1483, 325, 1, 0, 0, 0, 1484, 1485, 5, 92, 0, 0, 1485, 327, 1, 0, 0, 0, 1486, 1487, 5, 58, 0, 0, 1487, 1488, 5, 58, 0, 0, 1488, 329, 1, 0, 0, 0, 1489, 1490, 5, 58, 0, 0, 1490, 1491, 5, 61, 0, 0, 1491, 331, 1, 0, 0, 0, 1492, 1493, 5, 58, 0, 0, 1493, 333, 1, 0, 0, 0, 1494, 1495, 5, 44, 0, 0, 1495, 335, 1, 0, 0, 0, 1496, 1497, 5, 124, 0, 0, 1497, 1498, 5, 124, 0, 0, 1498, 337, 1, 0, 0, 0, 1499, 1500, 5, 45, 0, 0, 1500, 339, 1, 0, 0, 0, 1501, 1502, 5, 36, 0, 0, 1502, 341, 1, 0, 0, 0, 1503, 1504, 5, 46, 0, 0, 1504, 343, 1, 0, 0, 0, 1505, 1506, 5, 61, 0, 0, 1506, 1507, 5, 61, 0, 0, 1507, 345, 1, 0, 0, 0, 1508, 1509, 5, 61, 0, 0, 1509, 347, 1, 0, 0, 0, 1510, 1511, 5, 62, 0, 0, 1511, 1512, 5, 61, 0, 0, 1512, 349, 1, 0, 0, 0, 1513, 1514, 5, 62, 0, 0, 1514, 351, 1, 0, 0, 0, 1515, 1516, 5, 35, 0, 0, 1516, 353, 1, 0, 0, 0, 1517, 1518, 5, 126, 0, 0, 1518, 1519, 5, 42, 0, 0, 1519, 355, 1, 0, 0, 0, 1520, 1521, 5, 61, 0, 0, 1521, 1522, 5, 126, 0, 0, 1522, 1523, 5, 42, 0, 0, 1523, 357, 1, 0, 0, 0, 1524, 1525, 5, 123, 0, 0, 1525, 1526, 1, 0, 0, 0, 1526, 1527, 6, 176, 0, 0, 1527, 359, 1, 0, 0, 0, 1528, 1529, 5, 91, 0, 0, 1529, 361, 1, 0, 0, 0, 1530, 1531, 5, 40, 0, 0, 1531, 363, 1, 0, 0, 0, 1532, 1533, 5, 60, 0, 0, 1533, 1534, 5, 61, 0, 0, 1534, 365, 1, 0, 0, 0, 1535, 1536, 5, 60, 0, 0, 1536, 1537, 5, 47, 0, 0, 1537, 1538, 1, 0, 0, 0, 1538, 1539, 6, 180, 1, 0, 1539, 1540, 6, 180, 2, 0, 1540, 367, 1, 0, 0, 0, 1541, 1542, 5, 60, 0, 0, 1542, 1543, 4, 181, 0, 0, 1543, 1544, 1, 0, 0, 0, 1544, 1545, 6, 181, 3, 0, 1545, 1546, 6, 181, 4, 0, 1546, 369, 1, 0, 0, 0, 1547, 1548, 5, 60, 0, 0, 1548, 371, 1, 0, 0, 0, 1549, 1550, 5, 60, 0, 0, 1550, 1551, 5, 47, 0, 0, 1551, 373, 1, 0, 0, 0, 1552, 1553, 5, 33, 0, 0, 1553, 1557, 5, 61, 0, 0, 1554, 1555, 5, 60, 0, 0, 1555, 1557, 5, 62, 0, 0, 1556, 1552, 1, 0, 0, 0, 1556, 1554, 1, 0, 0, 0, 1557, 375, 1, 0, 0, 0, 1558, 1559, 5, 33, 0, 0, 1559, 1560, 5, 126, 0, 0, 1560, 1561, 5, 42, 0, 0, 1561, 377, 1, 0, 0, 0, 1562, 1563, 5, 33, 0, 0, 1563, 1564, 5, 126, 0, 0, 1564, 379, 1, 0, 0, 0, 1565, 1566, 5, 63, 0, 0, 1566, 1567, 5, 46, 0, 0, 1567, 381, 1, 0, 0, 0, 1568, 1569, 5, 63, 0, 0, 1569, 1570, 5, 63, 0, 0, 1570, 383, 1, 0, 0, 0, 1571, 1572, 5, 37, 0, 0, 1572, 385, 1, 0, 0, 0, 1573, 1574, 5, 43, 0, 0, 1574, 387, 1, 0, 0, 0, 1575, 1576, 5, 63, 0, 0, 1576, 389, 1, 0, 0, 0, 1577, 1578, 5, 34, 0, 0, 1578, 391, 1, 0, 0, 0, 1579, 1580, 5, 102, 0, 0, 1580, 1581, 5, 39, 0, 0, 1581, 1582, 1, 0, 0, 0, 1582, 1583, 6, 193, 5, 0, 1583, 393, 1, 0, 0, 0, 1584, 1585, 5, 70, 0, 0, 1585, 1586, 5, 39, 0, 0, 1586, 1587, 1, 0, 0, 0, 1587, 1588, 6, 194, 6, 0, 1588, 395, 1, 0, 0, 0, 1589, 1590, 5, 39, 0, 0, 1590, 397, 1, 0, 0, 0, 1591, 1592, 5, 126, 0, 0, 1592, 399, 1, 0, 0, 0, 1593, 1594, 5, 61, 0, 0, 1594, 1595, 5, 126, 0, 0, 1595, 401, 1, 0, 0, 0, 1596, 1597, 5, 125, 0, 0, 1597, 1598, 1, 0, 0, 0, 1598, 1599, 6, 198, 7, 0, 1599, 403, 1, 0, 0, 0, 1600, 1601, 5, 93, 0, 0, 1601, 405, 1, 0, 0, 0, 1602, 1603, 5, 41, 0, 0, 1603, 407, 1, 0, 0, 0, 1604, 1605, 5, 59, 0, 0, 1605, 409, 1, 0, 0, 0, 1606, 1607, 5, 47, 0, 0, 1607, 411, 1, 0, 0, 0, 1608, 1609, 5, 47, 0, 0, 1609, 1610, 5, 62, 0, 0, 1610, 413, 1, 0, 0, 0, 1611, 1612, 5, 95, 0, 0, 1612, 415, 1, 0, 0, 0, 1613, 1614, 5, 47, 0, 0, 1614, 1615, 5, 42, 0, 0, 1615, 1619, 1, 0, 0, 0, 1616, 1618, 9, 0, 0, 0, 1617, 1616, 1, 0, 0, 0, 1618, 1621, 1, 0, 0, 0, 1619, 1620, 1, 0, 0, 0, 1619, 1617, 1, 0, 0, 0, 1620, 1622, 1, 0, 0, 0, 1621, 1619, 1, 0, 0, 0, 1622, 1623, 5, 42, 0, 0, 1623, 1624, 5, 47, 0, 0, 1624, 1625, 1, 0, 0, 0, 1625, 1626, 6, 205, 8, 0, 1626, 417, 1, 0, 0, 0, 1627, 1628, 5, 45, 0, 0, 1628, 1632, 5, 45, 0, 0, 1629, 1630, 5, 47, 0, 0, 1630, 1632, 5, 47, 0, 0, 1631, 1627, 1, 0, 0, 0, 1631, 1629, 1, 0, 0, 0, 1632, 1636, 1, 0, 0, 0, 1633, 1635, 8, 33, 0, 0, 1634, 1633, 1, 0, 0, 0, 1635, 1638, 1, 0, 0, 0, 1636, 1634, 1, 0, 0, 0, 1636, 1637, 1, 0, 0, 0, 1637, 1640, 1, 0, 0, 0, 1638, 1636, 1, 0, 0, 0, 1639, 1641, 7, 34, 0, 0, 1640, 1639, 1, 0, 0, 0, 1641, 1642, 1, 0, 0, 0, 1642, 1643, 6, 206, 8, 0, 1643, 419, 1, 0, 0, 0, 1644, 1645, 7, 35, 0, 0, 1645, 1646, 1, 0, 0, 0, 1646, 1647, 6, 207, 9, 0, 1647, 421, 1, 0, 0, 0, 1648, 1660, 8, 36, 0, 0, 1649, 1660, 3, 246, 120, 0, 1650, 1651, 3, 326, 160, 0, 1651, 1652, 3, 396, 195, 0, 1652, 1660, 1, 0, 0, 0, 1653, 1654, 3, 326, 160, 0, 1654, 1655, 3, 358, 176, 0, 1655, 1660, 1, 0, 0, 0, 1656, 1657, 3, 396, 195, 0, 1657, 1658, 3, 396, 195, 0, 1658, 1660, 1, 0, 0, 0, 1659, 1648, 1, 0, 0, 0, 1659, 1649, 1, 0, 0, 0, 1659, 1650, 1, 0, 0, 0, 1659, 1653, 1, 0, 0, 0, 1659, 1656, 1, 0, 0, 0, 1660, 1661, 1, 0, 0, 0, 1661, 1659, 1, 0, 0, 0, 1661, 1662, 1, 0, 0, 0, 1662, 423, 1, 0, 0, 0, 1663, 1664, 3, 358, 176, 0, 1664, 1665, 1, 0, 0, 0, 1665, 1666, 6, 209, 0, 0, 1666, 425, 1, 0, 0, 0, 1667, 1668, 3, 396, 195, 0, 1668, 1669, 1, 0, 0, 0, 1669, 1670, 6, 210, 10, 0, 1670, 1671, 6, 210, 7, 0, 1671, 427, 1, 0, 0, 0, 1672, 1678, 8, 37, 0, 0, 1673, 1678, 3, 246, 120, 0, 1674, 1675, 3, 326, 160, 0, 1675, 1676, 3, 358, 176, 0, 1676, 1678, 1, 0, 0, 0, 1677, 1672, 1, 0, 0, 0, 1677, 1673, 1, 0, 0, 0, 1677, 1674, 1, 0, 0, 0, 1678, 1679, 1, 0, 0, 0, 1679, 1677, 1, 0, 0, 0, 1679, 1680, 1, 0, 0, 0, 1680, 429, 1, 0, 0, 0, 1681, 1682, 3, 358, 176, 0, 1682, 1683, 1, 0, 0, 0, 1683, 1684, 6, 212, 0, 0, 1684, 431, 1, 0, 0, 0, 1685, 1686, 5, 47, 0, 0, 1686, 1687, 5, 62, 0, 0, 1687, 1688, 1, 0, 0, 0, 1688, 1689, 6, 213, 11, 0, 1689, 1690, 6, 213, 7, 0, 1690, 433, 1, 0, 0, 0, 1691, 1692, 5, 62, 0, 0, 1692, 1693, 1, 0, 0, 0, 1693, 1694, 6, 214, 12, 0, 1694, 1695, 6, 214, 7, 0, 1695, 1696, 6, 214, 13, 0, 1696, 435, 1, 0, 0, 0, 1697, 1701, 7, 38, 0, 0, 1698, 1700, 7, 39, 0, 0, 1699, 1698, 1, 0, 0, 0, 1700, 1703, 1, 0, 0, 0, 1701, 1699, 1, 0, 0, 0, 1701, 1702, 1, 0, 0, 0, 1702, 1704, 1, 0, 0, 0, 1703, 1701, 1, 0, 0, 0, 1704, 1705, 6, 215, 14, 0, 1705, 437, 1, 0, 0, 0, 1706, 1707, 5, 61, 0, 0, 1707, 1708, 1, 0, 0, 0, 1708, 1709, 6, 216, 15, 0, 1709, 439, 1, 0, 0, 0, 1710, 1711, 3, 258, 126, 0, 1711, 1712, 1, 0, 0, 0, 1712, 1713, 6, 217, 16, 0, 1713, 441, 1, 0, 0, 0, 1714, 1716, 7, 40, 0, 0, 1715, 1714, 1, 0, 0, 0, 1716, 1717, 1, 0, 0, 0, 1717, 1715, 1, 0, 0, 0, 1717, 1718, 1, 0, 0, 0, 1718, 1719, 1, 0, 0, 0, 1719, 1720, 6, 218, 9, 0, 1720, 443, 1, 0, 0, 0, 1721, 1722, 5, 123, 0, 0, 1722, 1723, 1, 0, 0, 0, 1723, 1724, 6, 219, 17, 0, 1724, 1725, 6, 219, 0, 0, 1725, 445, 1, 0, 0, 0, 1726, 1727, 5, 62, 0, 0, 1727, 1728, 1, 0, 0, 0, 1728, 1729, 6, 220, 12, 0, 1729, 1730, 6, 220, 7, 0, 1730, 447, 1, 0, 0, 0, 1731, 1735, 7, 38, 0, 0, 1732, 1734, 7, 39, 0, 0, 1733, 1732, 1, 0, 0, 0, 1734, 1737, 1, 0, 0, 0, 1735, 1733, 1, 0, 0, 0, 1735, 1736, 1, 0, 0, 0, 1736, 1738, 1, 0, 0, 0, 1737, 1735, 1, 0, 0, 0, 1738, 1739, 6, 221, 14, 0, 1739, 449, 1, 0, 0, 0, 1740, 1742, 7, 40, 0, 0, 1741, 1740, 1, 0, 0, 0, 1742, 1743, 1, 0, 0, 0, 1743, 1741, 1, 0, 0, 0, 1743, 1744, 1, 0, 0, 0, 1744, 1745, 1, 0, 0, 0, 1745, 1746, 6, 222, 9, 0, 1746, 451, 1, 0, 0, 0, 1747, 1749, 8, 41, 0, 0, 1748, 1747, 1, 0, 0, 0, 1749, 1750, 1, 0, 0, 0, 1750, 1748, 1, 0, 0, 0, 1750, 1751, 1, 0, 0, 0, 1751, 453, 1, 0, 0, 0, 1752, 1753, 5, 123, 0, 0, 1753, 1754, 1, 0, 0, 0, 1754, 1755, 6, 224, 17, 0, 1755, 1756, 6, 224, 0, 0, 1756, 455, 1, 0, 0, 0, 1757, 1758, 5, 60, 0, 0, 1758, 1759, 5, 47, 0, 0, 1759, 1760, 1, 0, 0, 0, 1760, 1761, 6, 225, 1, 0, 1761, 1762, 6, 225, 7, 0, 1762, 1763, 6, 225, 2, 0, 1763, 457, 1, 0, 0, 0, 1764, 1765, 5, 60, 0, 0, 1765, 1766, 1, 0, 0, 0, 1766, 1767, 6, 226, 3, 0, 1767, 1768, 6, 226, 4, 0, 1768, 459, 1, 0, 0, 0, 1769, 1771, 7, 40, 0, 0, 1770, 1769, 1, 0, 0, 0, 1771, 1772, 1, 0, 0, 0, 1772, 1770, 1, 0, 0, 0, 1772, 1773, 1, 0, 0, 0, 1773, 1774, 1, 0, 0, 0, 1774, 1775, 6, 227, 9, 0, 1775, 461, 1, 0, 0, 0, 53, 0, 1, 2, 3, 4, 5, 502, 755, 1226, 1255, 1260, 1266, 1268, 1280, 1282, 1296, 1298, 1303, 1310, 1315, 1319, 1324, 1329, 1333, 1338, 1345, 1351, 1356, 1363, 1368, 1374, 1379, 1381, 1387, 1392, 1399, 1410, 1412, 1556, 1619, 1631, 1636, 1640, 1659, 1661, 1677, 1679, 1701, 1717, 1735, 1743, 1750, 1772, 18, 5, 0, 0, 7, 152, 0, 5, 4, 0, 7, 151, 0, 5, 3, 0, 5, 1, 0, 5, 2, 0, 4, 0, 0, 6, 0, 0, 0, 1, 0, 7, 164, 0, 7, 172, 0, 7, 143, 0, 5, 5, 0, 7, 122, 0, 7, 141, 0, 7, 127, 0, 7, 147, 0] \ No newline at end of file +[4, 0, 190, 1840, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 2, 201, 7, 201, 2, 202, 7, 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 2, 228, 7, 228, 2, 229, 7, 229, 2, 230, 7, 230, 2, 231, 7, 231, 2, 232, 7, 232, 2, 233, 7, 233, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 515, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 790, 8, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 3, 125, 1286, 8, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 3, 126, 1320, 8, 126, 1, 127, 1, 127, 1, 127, 3, 127, 1325, 8, 127, 1, 127, 1, 127, 1, 127, 1, 127, 5, 127, 1331, 8, 127, 10, 127, 12, 127, 1334, 9, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 5, 127, 1345, 8, 127, 10, 127, 12, 127, 1348, 9, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 5, 127, 1361, 8, 127, 10, 127, 12, 127, 1364, 9, 127, 1, 127, 1, 127, 3, 127, 1368, 8, 127, 1, 128, 1, 128, 1, 128, 5, 128, 1373, 8, 128, 10, 128, 12, 128, 1376, 9, 128, 1, 128, 1, 128, 3, 128, 1380, 8, 128, 1, 128, 1, 128, 3, 128, 1384, 8, 128, 1, 128, 4, 128, 1387, 8, 128, 11, 128, 12, 128, 1388, 1, 128, 1, 128, 1, 128, 3, 128, 1394, 8, 128, 1, 128, 1, 128, 3, 128, 1398, 8, 128, 1, 128, 4, 128, 1401, 8, 128, 11, 128, 12, 128, 1402, 1, 128, 1, 128, 1, 128, 5, 128, 1408, 8, 128, 10, 128, 12, 128, 1411, 9, 128, 1, 128, 1, 128, 1, 128, 3, 128, 1416, 8, 128, 1, 128, 4, 128, 1419, 8, 128, 11, 128, 12, 128, 1420, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 3, 128, 1428, 8, 128, 1, 128, 4, 128, 1431, 8, 128, 11, 128, 12, 128, 1432, 1, 128, 1, 128, 1, 128, 1, 128, 3, 128, 1439, 8, 128, 1, 128, 4, 128, 1442, 8, 128, 11, 128, 12, 128, 1443, 3, 128, 1446, 8, 128, 1, 129, 1, 129, 4, 129, 1450, 8, 129, 11, 129, 12, 129, 1451, 1, 130, 4, 130, 1455, 8, 130, 11, 130, 12, 130, 1456, 1, 131, 1, 131, 1, 131, 4, 131, 1462, 8, 131, 11, 131, 12, 131, 1463, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 5, 132, 1475, 8, 132, 10, 132, 12, 132, 1478, 9, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 134, 1, 134, 1, 135, 1, 135, 1, 136, 1, 136, 1, 137, 1, 137, 1, 138, 1, 138, 1, 139, 1, 139, 1, 140, 1, 140, 1, 141, 1, 141, 1, 142, 1, 142, 1, 143, 1, 143, 1, 144, 1, 144, 1, 145, 1, 145, 1, 146, 1, 146, 1, 147, 1, 147, 1, 148, 1, 148, 1, 149, 1, 149, 1, 150, 1, 150, 1, 151, 1, 151, 1, 152, 1, 152, 1, 153, 1, 153, 1, 154, 1, 154, 1, 155, 1, 155, 1, 156, 1, 156, 1, 157, 1, 157, 1, 158, 1, 158, 1, 159, 1, 159, 1, 160, 1, 160, 1, 161, 1, 161, 1, 162, 1, 162, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 165, 1, 165, 1, 166, 1, 166, 1, 167, 1, 167, 1, 167, 1, 168, 1, 168, 1, 168, 1, 169, 1, 169, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 172, 1, 172, 1, 173, 1, 173, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 1, 178, 1, 178, 1, 179, 1, 179, 1, 180, 1, 180, 1, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 182, 1, 182, 1, 182, 1, 182, 1, 183, 1, 183, 1, 184, 1, 184, 1, 185, 1, 185, 1, 185, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 188, 1, 188, 1, 189, 1, 189, 1, 189, 1, 190, 1, 190, 1, 190, 1, 190, 3, 190, 1621, 8, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 192, 1, 192, 1, 192, 1, 193, 1, 193, 1, 193, 1, 194, 1, 194, 1, 194, 1, 195, 1, 195, 1, 196, 1, 196, 1, 197, 1, 197, 1, 198, 1, 198, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 201, 1, 201, 1, 202, 1, 202, 1, 203, 1, 203, 1, 203, 1, 204, 1, 204, 1, 204, 1, 204, 1, 205, 1, 205, 1, 206, 1, 206, 1, 207, 1, 207, 1, 208, 1, 208, 1, 209, 1, 209, 1, 209, 1, 210, 1, 210, 1, 211, 1, 211, 1, 211, 1, 211, 5, 211, 1682, 8, 211, 10, 211, 12, 211, 1685, 9, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 212, 1, 212, 1, 212, 1, 212, 3, 212, 1696, 8, 212, 1, 212, 5, 212, 1699, 8, 212, 10, 212, 12, 212, 1702, 9, 212, 1, 212, 3, 212, 1705, 8, 212, 1, 212, 1, 212, 1, 213, 1, 213, 1, 213, 1, 213, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 4, 214, 1724, 8, 214, 11, 214, 12, 214, 1725, 1, 215, 1, 215, 1, 215, 1, 215, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 4, 217, 1742, 8, 217, 11, 217, 12, 217, 1743, 1, 218, 1, 218, 1, 218, 1, 218, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 221, 1, 221, 5, 221, 1764, 8, 221, 10, 221, 12, 221, 1767, 9, 221, 1, 221, 1, 221, 1, 222, 1, 222, 1, 222, 1, 222, 1, 223, 1, 223, 1, 223, 1, 223, 1, 224, 4, 224, 1780, 8, 224, 11, 224, 12, 224, 1781, 1, 224, 1, 224, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 227, 1, 227, 5, 227, 1798, 8, 227, 10, 227, 12, 227, 1801, 9, 227, 1, 227, 1, 227, 1, 228, 4, 228, 1806, 8, 228, 11, 228, 12, 228, 1807, 1, 228, 1, 228, 1, 229, 4, 229, 1813, 8, 229, 11, 229, 12, 229, 1814, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 233, 4, 233, 1835, 8, 233, 11, 233, 12, 233, 1836, 1, 233, 1, 233, 1, 1683, 0, 234, 6, 1, 8, 2, 10, 3, 12, 4, 14, 5, 16, 6, 18, 7, 20, 8, 22, 9, 24, 10, 26, 11, 28, 12, 30, 13, 32, 14, 34, 15, 36, 16, 38, 17, 40, 18, 42, 19, 44, 20, 46, 21, 48, 22, 50, 23, 52, 24, 54, 25, 56, 26, 58, 27, 60, 28, 62, 29, 64, 30, 66, 31, 68, 32, 70, 33, 72, 34, 74, 35, 76, 36, 78, 37, 80, 38, 82, 39, 84, 40, 86, 41, 88, 42, 90, 43, 92, 44, 94, 45, 96, 46, 98, 47, 100, 48, 102, 49, 104, 50, 106, 51, 108, 52, 110, 53, 112, 54, 114, 55, 116, 56, 118, 57, 120, 58, 122, 59, 124, 60, 126, 61, 128, 62, 130, 63, 132, 64, 134, 65, 136, 66, 138, 67, 140, 68, 142, 69, 144, 70, 146, 71, 148, 72, 150, 73, 152, 74, 154, 75, 156, 76, 158, 77, 160, 78, 162, 79, 164, 80, 166, 81, 168, 82, 170, 83, 172, 84, 174, 85, 176, 86, 178, 87, 180, 88, 182, 89, 184, 90, 186, 91, 188, 92, 190, 93, 192, 94, 194, 95, 196, 96, 198, 97, 200, 98, 202, 99, 204, 100, 206, 101, 208, 102, 210, 103, 212, 104, 214, 105, 216, 106, 218, 107, 220, 108, 222, 109, 224, 110, 226, 111, 228, 112, 230, 113, 232, 114, 234, 115, 236, 116, 238, 117, 240, 118, 242, 119, 244, 120, 246, 121, 248, 122, 250, 123, 252, 124, 254, 125, 256, 126, 258, 127, 260, 128, 262, 129, 264, 130, 266, 131, 268, 132, 270, 133, 272, 0, 274, 0, 276, 0, 278, 0, 280, 0, 282, 0, 284, 0, 286, 0, 288, 0, 290, 0, 292, 0, 294, 0, 296, 0, 298, 0, 300, 0, 302, 0, 304, 0, 306, 0, 308, 0, 310, 0, 312, 0, 314, 0, 316, 0, 318, 0, 320, 0, 322, 0, 324, 0, 326, 0, 328, 0, 330, 0, 332, 134, 334, 135, 336, 136, 338, 137, 340, 138, 342, 139, 344, 140, 346, 141, 348, 142, 350, 143, 352, 144, 354, 145, 356, 146, 358, 147, 360, 148, 362, 149, 364, 150, 366, 151, 368, 152, 370, 153, 372, 154, 374, 155, 376, 156, 378, 0, 380, 0, 382, 157, 384, 158, 386, 159, 388, 160, 390, 161, 392, 162, 394, 163, 396, 164, 398, 165, 400, 166, 402, 167, 404, 168, 406, 169, 408, 170, 410, 171, 412, 172, 414, 173, 416, 174, 418, 175, 420, 176, 422, 177, 424, 178, 426, 179, 428, 180, 430, 181, 432, 182, 434, 183, 436, 184, 438, 0, 440, 185, 442, 186, 444, 0, 446, 0, 448, 0, 450, 0, 452, 0, 454, 187, 456, 0, 458, 0, 460, 0, 462, 188, 464, 189, 466, 0, 468, 0, 470, 0, 472, 190, 6, 0, 1, 2, 3, 4, 5, 42, 2, 0, 92, 92, 96, 96, 2, 0, 34, 34, 92, 92, 2, 0, 39, 39, 92, 92, 2, 0, 65, 65, 97, 97, 2, 0, 66, 66, 98, 98, 2, 0, 67, 67, 99, 99, 2, 0, 68, 68, 100, 100, 2, 0, 69, 69, 101, 101, 2, 0, 70, 70, 102, 102, 2, 0, 71, 71, 103, 103, 2, 0, 72, 72, 104, 104, 2, 0, 73, 73, 105, 105, 2, 0, 74, 74, 106, 106, 2, 0, 75, 75, 107, 107, 2, 0, 76, 76, 108, 108, 2, 0, 77, 77, 109, 109, 2, 0, 78, 78, 110, 110, 2, 0, 79, 79, 111, 111, 2, 0, 80, 80, 112, 112, 2, 0, 81, 81, 113, 113, 2, 0, 82, 82, 114, 114, 2, 0, 83, 83, 115, 115, 2, 0, 84, 84, 116, 116, 2, 0, 85, 85, 117, 117, 2, 0, 86, 86, 118, 118, 2, 0, 87, 87, 119, 119, 2, 0, 88, 88, 120, 120, 2, 0, 89, 89, 121, 121, 2, 0, 90, 90, 122, 122, 2, 0, 65, 90, 97, 122, 1, 0, 48, 55, 1, 0, 48, 57, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, 10, 10, 13, 13, 2, 1, 10, 10, 13, 13, 2, 0, 9, 13, 32, 32, 3, 0, 39, 39, 92, 92, 123, 123, 1, 0, 123, 123, 3, 0, 65, 90, 95, 95, 97, 122, 5, 0, 45, 45, 48, 57, 65, 90, 95, 95, 97, 122, 3, 0, 9, 10, 13, 13, 32, 32, 2, 0, 60, 60, 123, 123, 1880, 0, 6, 1, 0, 0, 0, 0, 8, 1, 0, 0, 0, 0, 10, 1, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 14, 1, 0, 0, 0, 0, 16, 1, 0, 0, 0, 0, 18, 1, 0, 0, 0, 0, 20, 1, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 24, 1, 0, 0, 0, 0, 26, 1, 0, 0, 0, 0, 28, 1, 0, 0, 0, 0, 30, 1, 0, 0, 0, 0, 32, 1, 0, 0, 0, 0, 34, 1, 0, 0, 0, 0, 36, 1, 0, 0, 0, 0, 38, 1, 0, 0, 0, 0, 40, 1, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 44, 1, 0, 0, 0, 0, 46, 1, 0, 0, 0, 0, 48, 1, 0, 0, 0, 0, 50, 1, 0, 0, 0, 0, 52, 1, 0, 0, 0, 0, 54, 1, 0, 0, 0, 0, 56, 1, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 60, 1, 0, 0, 0, 0, 62, 1, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 66, 1, 0, 0, 0, 0, 68, 1, 0, 0, 0, 0, 70, 1, 0, 0, 0, 0, 72, 1, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, 78, 1, 0, 0, 0, 0, 80, 1, 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 84, 1, 0, 0, 0, 0, 86, 1, 0, 0, 0, 0, 88, 1, 0, 0, 0, 0, 90, 1, 0, 0, 0, 0, 92, 1, 0, 0, 0, 0, 94, 1, 0, 0, 0, 0, 96, 1, 0, 0, 0, 0, 98, 1, 0, 0, 0, 0, 100, 1, 0, 0, 0, 0, 102, 1, 0, 0, 0, 0, 104, 1, 0, 0, 0, 0, 106, 1, 0, 0, 0, 0, 108, 1, 0, 0, 0, 0, 110, 1, 0, 0, 0, 0, 112, 1, 0, 0, 0, 0, 114, 1, 0, 0, 0, 0, 116, 1, 0, 0, 0, 0, 118, 1, 0, 0, 0, 0, 120, 1, 0, 0, 0, 0, 122, 1, 0, 0, 0, 0, 124, 1, 0, 0, 0, 0, 126, 1, 0, 0, 0, 0, 128, 1, 0, 0, 0, 0, 130, 1, 0, 0, 0, 0, 132, 1, 0, 0, 0, 0, 134, 1, 0, 0, 0, 0, 136, 1, 0, 0, 0, 0, 138, 1, 0, 0, 0, 0, 140, 1, 0, 0, 0, 0, 142, 1, 0, 0, 0, 0, 144, 1, 0, 0, 0, 0, 146, 1, 0, 0, 0, 0, 148, 1, 0, 0, 0, 0, 150, 1, 0, 0, 0, 0, 152, 1, 0, 0, 0, 0, 154, 1, 0, 0, 0, 0, 156, 1, 0, 0, 0, 0, 158, 1, 0, 0, 0, 0, 160, 1, 0, 0, 0, 0, 162, 1, 0, 0, 0, 0, 164, 1, 0, 0, 0, 0, 166, 1, 0, 0, 0, 0, 168, 1, 0, 0, 0, 0, 170, 1, 0, 0, 0, 0, 172, 1, 0, 0, 0, 0, 174, 1, 0, 0, 0, 0, 176, 1, 0, 0, 0, 0, 178, 1, 0, 0, 0, 0, 180, 1, 0, 0, 0, 0, 182, 1, 0, 0, 0, 0, 184, 1, 0, 0, 0, 0, 186, 1, 0, 0, 0, 0, 188, 1, 0, 0, 0, 0, 190, 1, 0, 0, 0, 0, 192, 1, 0, 0, 0, 0, 194, 1, 0, 0, 0, 0, 196, 1, 0, 0, 0, 0, 198, 1, 0, 0, 0, 0, 200, 1, 0, 0, 0, 0, 202, 1, 0, 0, 0, 0, 204, 1, 0, 0, 0, 0, 206, 1, 0, 0, 0, 0, 208, 1, 0, 0, 0, 0, 210, 1, 0, 0, 0, 0, 212, 1, 0, 0, 0, 0, 214, 1, 0, 0, 0, 0, 216, 1, 0, 0, 0, 0, 218, 1, 0, 0, 0, 0, 220, 1, 0, 0, 0, 0, 222, 1, 0, 0, 0, 0, 224, 1, 0, 0, 0, 0, 226, 1, 0, 0, 0, 0, 228, 1, 0, 0, 0, 0, 230, 1, 0, 0, 0, 0, 232, 1, 0, 0, 0, 0, 234, 1, 0, 0, 0, 0, 236, 1, 0, 0, 0, 0, 238, 1, 0, 0, 0, 0, 240, 1, 0, 0, 0, 0, 242, 1, 0, 0, 0, 0, 244, 1, 0, 0, 0, 0, 246, 1, 0, 0, 0, 0, 248, 1, 0, 0, 0, 0, 250, 1, 0, 0, 0, 0, 252, 1, 0, 0, 0, 0, 254, 1, 0, 0, 0, 0, 256, 1, 0, 0, 0, 0, 258, 1, 0, 0, 0, 0, 260, 1, 0, 0, 0, 0, 262, 1, 0, 0, 0, 0, 264, 1, 0, 0, 0, 0, 266, 1, 0, 0, 0, 0, 268, 1, 0, 0, 0, 0, 270, 1, 0, 0, 0, 0, 332, 1, 0, 0, 0, 0, 334, 1, 0, 0, 0, 0, 336, 1, 0, 0, 0, 0, 338, 1, 0, 0, 0, 0, 340, 1, 0, 0, 0, 0, 342, 1, 0, 0, 0, 0, 344, 1, 0, 0, 0, 0, 346, 1, 0, 0, 0, 0, 348, 1, 0, 0, 0, 0, 350, 1, 0, 0, 0, 0, 352, 1, 0, 0, 0, 0, 354, 1, 0, 0, 0, 0, 356, 1, 0, 0, 0, 0, 358, 1, 0, 0, 0, 0, 360, 1, 0, 0, 0, 0, 362, 1, 0, 0, 0, 0, 364, 1, 0, 0, 0, 0, 366, 1, 0, 0, 0, 0, 368, 1, 0, 0, 0, 0, 370, 1, 0, 0, 0, 0, 372, 1, 0, 0, 0, 0, 374, 1, 0, 0, 0, 0, 376, 1, 0, 0, 0, 0, 378, 1, 0, 0, 0, 0, 380, 1, 0, 0, 0, 0, 382, 1, 0, 0, 0, 0, 384, 1, 0, 0, 0, 0, 386, 1, 0, 0, 0, 0, 388, 1, 0, 0, 0, 0, 390, 1, 0, 0, 0, 0, 392, 1, 0, 0, 0, 0, 394, 1, 0, 0, 0, 0, 396, 1, 0, 0, 0, 0, 398, 1, 0, 0, 0, 0, 400, 1, 0, 0, 0, 0, 402, 1, 0, 0, 0, 0, 404, 1, 0, 0, 0, 0, 406, 1, 0, 0, 0, 0, 408, 1, 0, 0, 0, 0, 410, 1, 0, 0, 0, 0, 412, 1, 0, 0, 0, 0, 414, 1, 0, 0, 0, 0, 416, 1, 0, 0, 0, 0, 418, 1, 0, 0, 0, 0, 420, 1, 0, 0, 0, 0, 422, 1, 0, 0, 0, 0, 424, 1, 0, 0, 0, 0, 426, 1, 0, 0, 0, 0, 428, 1, 0, 0, 0, 0, 430, 1, 0, 0, 0, 0, 432, 1, 0, 0, 0, 1, 434, 1, 0, 0, 0, 1, 436, 1, 0, 0, 0, 1, 438, 1, 0, 0, 0, 2, 440, 1, 0, 0, 0, 2, 442, 1, 0, 0, 0, 3, 444, 1, 0, 0, 0, 3, 446, 1, 0, 0, 0, 3, 448, 1, 0, 0, 0, 3, 450, 1, 0, 0, 0, 3, 452, 1, 0, 0, 0, 3, 454, 1, 0, 0, 0, 3, 456, 1, 0, 0, 0, 4, 458, 1, 0, 0, 0, 4, 460, 1, 0, 0, 0, 4, 462, 1, 0, 0, 0, 5, 464, 1, 0, 0, 0, 5, 466, 1, 0, 0, 0, 5, 468, 1, 0, 0, 0, 5, 470, 1, 0, 0, 0, 5, 472, 1, 0, 0, 0, 6, 474, 1, 0, 0, 0, 8, 478, 1, 0, 0, 0, 10, 482, 1, 0, 0, 0, 12, 487, 1, 0, 0, 0, 14, 491, 1, 0, 0, 0, 16, 497, 1, 0, 0, 0, 18, 514, 1, 0, 0, 0, 20, 516, 1, 0, 0, 0, 22, 521, 1, 0, 0, 0, 24, 529, 1, 0, 0, 0, 26, 534, 1, 0, 0, 0, 28, 537, 1, 0, 0, 0, 30, 542, 1, 0, 0, 0, 32, 547, 1, 0, 0, 0, 34, 553, 1, 0, 0, 0, 36, 560, 1, 0, 0, 0, 38, 568, 1, 0, 0, 0, 40, 576, 1, 0, 0, 0, 42, 582, 1, 0, 0, 0, 44, 587, 1, 0, 0, 0, 46, 595, 1, 0, 0, 0, 48, 600, 1, 0, 0, 0, 50, 604, 1, 0, 0, 0, 52, 609, 1, 0, 0, 0, 54, 620, 1, 0, 0, 0, 56, 629, 1, 0, 0, 0, 58, 634, 1, 0, 0, 0, 60, 638, 1, 0, 0, 0, 62, 645, 1, 0, 0, 0, 64, 653, 1, 0, 0, 0, 66, 661, 1, 0, 0, 0, 68, 667, 1, 0, 0, 0, 70, 674, 1, 0, 0, 0, 72, 682, 1, 0, 0, 0, 74, 688, 1, 0, 0, 0, 76, 691, 1, 0, 0, 0, 78, 701, 1, 0, 0, 0, 80, 705, 1, 0, 0, 0, 82, 710, 1, 0, 0, 0, 84, 715, 1, 0, 0, 0, 86, 719, 1, 0, 0, 0, 88, 725, 1, 0, 0, 0, 90, 734, 1, 0, 0, 0, 92, 741, 1, 0, 0, 0, 94, 746, 1, 0, 0, 0, 96, 749, 1, 0, 0, 0, 98, 752, 1, 0, 0, 0, 100, 758, 1, 0, 0, 0, 102, 765, 1, 0, 0, 0, 104, 773, 1, 0, 0, 0, 106, 789, 1, 0, 0, 0, 108, 791, 1, 0, 0, 0, 110, 797, 1, 0, 0, 0, 112, 807, 1, 0, 0, 0, 114, 816, 1, 0, 0, 0, 116, 819, 1, 0, 0, 0, 118, 824, 1, 0, 0, 0, 120, 828, 1, 0, 0, 0, 122, 835, 1, 0, 0, 0, 124, 840, 1, 0, 0, 0, 126, 848, 1, 0, 0, 0, 128, 853, 1, 0, 0, 0, 130, 857, 1, 0, 0, 0, 132, 862, 1, 0, 0, 0, 134, 868, 1, 0, 0, 0, 136, 881, 1, 0, 0, 0, 138, 888, 1, 0, 0, 0, 140, 894, 1, 0, 0, 0, 142, 899, 1, 0, 0, 0, 144, 907, 1, 0, 0, 0, 146, 911, 1, 0, 0, 0, 148, 915, 1, 0, 0, 0, 150, 920, 1, 0, 0, 0, 152, 926, 1, 0, 0, 0, 154, 933, 1, 0, 0, 0, 156, 936, 1, 0, 0, 0, 158, 939, 1, 0, 0, 0, 160, 945, 1, 0, 0, 0, 162, 951, 1, 0, 0, 0, 164, 956, 1, 0, 0, 0, 166, 966, 1, 0, 0, 0, 168, 972, 1, 0, 0, 0, 170, 983, 1, 0, 0, 0, 172, 993, 1, 0, 0, 0, 174, 1002, 1, 0, 0, 0, 176, 1010, 1, 0, 0, 0, 178, 1018, 1, 0, 0, 0, 180, 1024, 1, 0, 0, 0, 182, 1034, 1, 0, 0, 0, 184, 1042, 1, 0, 0, 0, 186, 1049, 1, 0, 0, 0, 188, 1055, 1, 0, 0, 0, 190, 1062, 1, 0, 0, 0, 192, 1066, 1, 0, 0, 0, 194, 1071, 1, 0, 0, 0, 196, 1078, 1, 0, 0, 0, 198, 1085, 1, 0, 0, 0, 200, 1092, 1, 0, 0, 0, 202, 1097, 1, 0, 0, 0, 204, 1102, 1, 0, 0, 0, 206, 1111, 1, 0, 0, 0, 208, 1121, 1, 0, 0, 0, 210, 1126, 1, 0, 0, 0, 212, 1132, 1, 0, 0, 0, 214, 1137, 1, 0, 0, 0, 216, 1147, 1, 0, 0, 0, 218, 1150, 1, 0, 0, 0, 220, 1154, 1, 0, 0, 0, 222, 1161, 1, 0, 0, 0, 224, 1170, 1, 0, 0, 0, 226, 1175, 1, 0, 0, 0, 228, 1184, 1, 0, 0, 0, 230, 1188, 1, 0, 0, 0, 232, 1197, 1, 0, 0, 0, 234, 1207, 1, 0, 0, 0, 236, 1213, 1, 0, 0, 0, 238, 1221, 1, 0, 0, 0, 240, 1227, 1, 0, 0, 0, 242, 1234, 1, 0, 0, 0, 244, 1239, 1, 0, 0, 0, 246, 1244, 1, 0, 0, 0, 248, 1250, 1, 0, 0, 0, 250, 1256, 1, 0, 0, 0, 252, 1263, 1, 0, 0, 0, 254, 1268, 1, 0, 0, 0, 256, 1285, 1, 0, 0, 0, 258, 1319, 1, 0, 0, 0, 260, 1367, 1, 0, 0, 0, 262, 1445, 1, 0, 0, 0, 264, 1447, 1, 0, 0, 0, 266, 1454, 1, 0, 0, 0, 268, 1458, 1, 0, 0, 0, 270, 1465, 1, 0, 0, 0, 272, 1481, 1, 0, 0, 0, 274, 1483, 1, 0, 0, 0, 276, 1485, 1, 0, 0, 0, 278, 1487, 1, 0, 0, 0, 280, 1489, 1, 0, 0, 0, 282, 1491, 1, 0, 0, 0, 284, 1493, 1, 0, 0, 0, 286, 1495, 1, 0, 0, 0, 288, 1497, 1, 0, 0, 0, 290, 1499, 1, 0, 0, 0, 292, 1501, 1, 0, 0, 0, 294, 1503, 1, 0, 0, 0, 296, 1505, 1, 0, 0, 0, 298, 1507, 1, 0, 0, 0, 300, 1509, 1, 0, 0, 0, 302, 1511, 1, 0, 0, 0, 304, 1513, 1, 0, 0, 0, 306, 1515, 1, 0, 0, 0, 308, 1517, 1, 0, 0, 0, 310, 1519, 1, 0, 0, 0, 312, 1521, 1, 0, 0, 0, 314, 1523, 1, 0, 0, 0, 316, 1525, 1, 0, 0, 0, 318, 1527, 1, 0, 0, 0, 320, 1529, 1, 0, 0, 0, 322, 1531, 1, 0, 0, 0, 324, 1533, 1, 0, 0, 0, 326, 1535, 1, 0, 0, 0, 328, 1537, 1, 0, 0, 0, 330, 1539, 1, 0, 0, 0, 332, 1541, 1, 0, 0, 0, 334, 1544, 1, 0, 0, 0, 336, 1546, 1, 0, 0, 0, 338, 1548, 1, 0, 0, 0, 340, 1550, 1, 0, 0, 0, 342, 1553, 1, 0, 0, 0, 344, 1556, 1, 0, 0, 0, 346, 1558, 1, 0, 0, 0, 348, 1560, 1, 0, 0, 0, 350, 1563, 1, 0, 0, 0, 352, 1565, 1, 0, 0, 0, 354, 1567, 1, 0, 0, 0, 356, 1569, 1, 0, 0, 0, 358, 1572, 1, 0, 0, 0, 360, 1574, 1, 0, 0, 0, 362, 1577, 1, 0, 0, 0, 364, 1579, 1, 0, 0, 0, 366, 1581, 1, 0, 0, 0, 368, 1584, 1, 0, 0, 0, 370, 1588, 1, 0, 0, 0, 372, 1592, 1, 0, 0, 0, 374, 1594, 1, 0, 0, 0, 376, 1596, 1, 0, 0, 0, 378, 1599, 1, 0, 0, 0, 380, 1605, 1, 0, 0, 0, 382, 1611, 1, 0, 0, 0, 384, 1613, 1, 0, 0, 0, 386, 1620, 1, 0, 0, 0, 388, 1622, 1, 0, 0, 0, 390, 1626, 1, 0, 0, 0, 392, 1629, 1, 0, 0, 0, 394, 1632, 1, 0, 0, 0, 396, 1635, 1, 0, 0, 0, 398, 1637, 1, 0, 0, 0, 400, 1639, 1, 0, 0, 0, 402, 1641, 1, 0, 0, 0, 404, 1643, 1, 0, 0, 0, 406, 1648, 1, 0, 0, 0, 408, 1653, 1, 0, 0, 0, 410, 1655, 1, 0, 0, 0, 412, 1657, 1, 0, 0, 0, 414, 1660, 1, 0, 0, 0, 416, 1664, 1, 0, 0, 0, 418, 1666, 1, 0, 0, 0, 420, 1668, 1, 0, 0, 0, 422, 1670, 1, 0, 0, 0, 424, 1672, 1, 0, 0, 0, 426, 1675, 1, 0, 0, 0, 428, 1677, 1, 0, 0, 0, 430, 1695, 1, 0, 0, 0, 432, 1708, 1, 0, 0, 0, 434, 1723, 1, 0, 0, 0, 436, 1727, 1, 0, 0, 0, 438, 1731, 1, 0, 0, 0, 440, 1741, 1, 0, 0, 0, 442, 1745, 1, 0, 0, 0, 444, 1749, 1, 0, 0, 0, 446, 1755, 1, 0, 0, 0, 448, 1761, 1, 0, 0, 0, 450, 1770, 1, 0, 0, 0, 452, 1774, 1, 0, 0, 0, 454, 1779, 1, 0, 0, 0, 456, 1785, 1, 0, 0, 0, 458, 1790, 1, 0, 0, 0, 460, 1795, 1, 0, 0, 0, 462, 1805, 1, 0, 0, 0, 464, 1812, 1, 0, 0, 0, 466, 1816, 1, 0, 0, 0, 468, 1821, 1, 0, 0, 0, 470, 1828, 1, 0, 0, 0, 472, 1834, 1, 0, 0, 0, 474, 475, 3, 272, 133, 0, 475, 476, 3, 294, 144, 0, 476, 477, 3, 294, 144, 0, 477, 7, 1, 0, 0, 0, 478, 479, 3, 272, 133, 0, 479, 480, 3, 298, 146, 0, 480, 481, 3, 278, 136, 0, 481, 9, 1, 0, 0, 0, 482, 483, 3, 272, 133, 0, 483, 484, 3, 298, 146, 0, 484, 485, 3, 310, 152, 0, 485, 486, 3, 288, 141, 0, 486, 11, 1, 0, 0, 0, 487, 488, 3, 272, 133, 0, 488, 489, 3, 298, 146, 0, 489, 490, 3, 320, 157, 0, 490, 13, 1, 0, 0, 0, 491, 492, 3, 272, 133, 0, 492, 493, 3, 306, 150, 0, 493, 494, 3, 306, 150, 0, 494, 495, 3, 272, 133, 0, 495, 496, 3, 320, 157, 0, 496, 15, 1, 0, 0, 0, 497, 498, 3, 272, 133, 0, 498, 499, 3, 308, 151, 0, 499, 17, 1, 0, 0, 0, 500, 501, 3, 272, 133, 0, 501, 502, 3, 308, 151, 0, 502, 503, 3, 276, 135, 0, 503, 515, 1, 0, 0, 0, 504, 505, 3, 272, 133, 0, 505, 506, 3, 308, 151, 0, 506, 507, 3, 276, 135, 0, 507, 508, 3, 280, 137, 0, 508, 509, 3, 298, 146, 0, 509, 510, 3, 278, 136, 0, 510, 511, 3, 288, 141, 0, 511, 512, 3, 298, 146, 0, 512, 513, 3, 284, 139, 0, 513, 515, 1, 0, 0, 0, 514, 500, 1, 0, 0, 0, 514, 504, 1, 0, 0, 0, 515, 19, 1, 0, 0, 0, 516, 517, 3, 272, 133, 0, 517, 518, 3, 308, 151, 0, 518, 519, 3, 300, 147, 0, 519, 520, 3, 282, 138, 0, 520, 21, 1, 0, 0, 0, 521, 522, 3, 274, 134, 0, 522, 523, 3, 280, 137, 0, 523, 524, 3, 310, 152, 0, 524, 525, 3, 316, 155, 0, 525, 526, 3, 280, 137, 0, 526, 527, 3, 280, 137, 0, 527, 528, 3, 298, 146, 0, 528, 23, 1, 0, 0, 0, 529, 530, 3, 274, 134, 0, 530, 531, 3, 300, 147, 0, 531, 532, 3, 310, 152, 0, 532, 533, 3, 286, 140, 0, 533, 25, 1, 0, 0, 0, 534, 535, 3, 274, 134, 0, 535, 536, 3, 320, 157, 0, 536, 27, 1, 0, 0, 0, 537, 538, 3, 276, 135, 0, 538, 539, 3, 272, 133, 0, 539, 540, 3, 308, 151, 0, 540, 541, 3, 280, 137, 0, 541, 29, 1, 0, 0, 0, 542, 543, 3, 276, 135, 0, 543, 544, 3, 272, 133, 0, 544, 545, 3, 308, 151, 0, 545, 546, 3, 310, 152, 0, 546, 31, 1, 0, 0, 0, 547, 548, 3, 276, 135, 0, 548, 549, 3, 272, 133, 0, 549, 550, 3, 310, 152, 0, 550, 551, 3, 276, 135, 0, 551, 552, 3, 286, 140, 0, 552, 33, 1, 0, 0, 0, 553, 554, 3, 276, 135, 0, 554, 555, 3, 300, 147, 0, 555, 556, 3, 286, 140, 0, 556, 557, 3, 300, 147, 0, 557, 558, 3, 306, 150, 0, 558, 559, 3, 310, 152, 0, 559, 35, 1, 0, 0, 0, 560, 561, 3, 276, 135, 0, 561, 562, 3, 300, 147, 0, 562, 563, 3, 294, 144, 0, 563, 564, 3, 294, 144, 0, 564, 565, 3, 272, 133, 0, 565, 566, 3, 310, 152, 0, 566, 567, 3, 280, 137, 0, 567, 37, 1, 0, 0, 0, 568, 569, 3, 276, 135, 0, 569, 570, 3, 300, 147, 0, 570, 571, 3, 294, 144, 0, 571, 572, 3, 312, 153, 0, 572, 573, 3, 296, 145, 0, 573, 574, 3, 298, 146, 0, 574, 575, 3, 308, 151, 0, 575, 39, 1, 0, 0, 0, 576, 577, 3, 276, 135, 0, 577, 578, 3, 306, 150, 0, 578, 579, 3, 300, 147, 0, 579, 580, 3, 308, 151, 0, 580, 581, 3, 308, 151, 0, 581, 41, 1, 0, 0, 0, 582, 583, 3, 276, 135, 0, 583, 584, 3, 312, 153, 0, 584, 585, 3, 274, 134, 0, 585, 586, 3, 280, 137, 0, 586, 43, 1, 0, 0, 0, 587, 588, 3, 276, 135, 0, 588, 589, 3, 312, 153, 0, 589, 590, 3, 306, 150, 0, 590, 591, 3, 306, 150, 0, 591, 592, 3, 280, 137, 0, 592, 593, 3, 298, 146, 0, 593, 594, 3, 310, 152, 0, 594, 45, 1, 0, 0, 0, 595, 596, 3, 278, 136, 0, 596, 597, 3, 272, 133, 0, 597, 598, 3, 310, 152, 0, 598, 599, 3, 280, 137, 0, 599, 47, 1, 0, 0, 0, 600, 601, 3, 278, 136, 0, 601, 602, 3, 272, 133, 0, 602, 603, 3, 320, 157, 0, 603, 49, 1, 0, 0, 0, 604, 605, 3, 278, 136, 0, 605, 606, 3, 280, 137, 0, 606, 607, 3, 308, 151, 0, 607, 608, 3, 276, 135, 0, 608, 51, 1, 0, 0, 0, 609, 610, 3, 278, 136, 0, 610, 611, 3, 280, 137, 0, 611, 612, 3, 308, 151, 0, 612, 613, 3, 276, 135, 0, 613, 614, 3, 280, 137, 0, 614, 615, 3, 298, 146, 0, 615, 616, 3, 278, 136, 0, 616, 617, 3, 288, 141, 0, 617, 618, 3, 298, 146, 0, 618, 619, 3, 284, 139, 0, 619, 53, 1, 0, 0, 0, 620, 621, 3, 278, 136, 0, 621, 622, 3, 288, 141, 0, 622, 623, 3, 308, 151, 0, 623, 624, 3, 310, 152, 0, 624, 625, 3, 288, 141, 0, 625, 626, 3, 298, 146, 0, 626, 627, 3, 276, 135, 0, 627, 628, 3, 310, 152, 0, 628, 55, 1, 0, 0, 0, 629, 630, 3, 280, 137, 0, 630, 631, 3, 294, 144, 0, 631, 632, 3, 308, 151, 0, 632, 633, 3, 280, 137, 0, 633, 57, 1, 0, 0, 0, 634, 635, 3, 280, 137, 0, 635, 636, 3, 298, 146, 0, 636, 637, 3, 278, 136, 0, 637, 59, 1, 0, 0, 0, 638, 639, 3, 280, 137, 0, 639, 640, 3, 318, 156, 0, 640, 641, 3, 276, 135, 0, 641, 642, 3, 280, 137, 0, 642, 643, 3, 302, 148, 0, 643, 644, 3, 310, 152, 0, 644, 61, 1, 0, 0, 0, 645, 646, 3, 280, 137, 0, 646, 647, 3, 318, 156, 0, 647, 648, 3, 276, 135, 0, 648, 649, 3, 294, 144, 0, 649, 650, 3, 312, 153, 0, 650, 651, 3, 278, 136, 0, 651, 652, 3, 280, 137, 0, 652, 63, 1, 0, 0, 0, 653, 654, 3, 280, 137, 0, 654, 655, 3, 318, 156, 0, 655, 656, 3, 310, 152, 0, 656, 657, 3, 306, 150, 0, 657, 658, 3, 272, 133, 0, 658, 659, 3, 276, 135, 0, 659, 660, 3, 310, 152, 0, 660, 65, 1, 0, 0, 0, 661, 662, 3, 282, 138, 0, 662, 663, 3, 288, 141, 0, 663, 664, 3, 298, 146, 0, 664, 665, 3, 272, 133, 0, 665, 666, 3, 294, 144, 0, 666, 67, 1, 0, 0, 0, 667, 668, 3, 282, 138, 0, 668, 669, 3, 288, 141, 0, 669, 670, 3, 294, 144, 0, 670, 671, 3, 310, 152, 0, 671, 672, 3, 280, 137, 0, 672, 673, 3, 306, 150, 0, 673, 69, 1, 0, 0, 0, 674, 675, 3, 282, 138, 0, 675, 676, 3, 288, 141, 0, 676, 677, 3, 298, 146, 0, 677, 678, 3, 272, 133, 0, 678, 679, 3, 294, 144, 0, 679, 680, 3, 294, 144, 0, 680, 681, 3, 320, 157, 0, 681, 71, 1, 0, 0, 0, 682, 683, 3, 282, 138, 0, 683, 684, 3, 288, 141, 0, 684, 685, 3, 306, 150, 0, 685, 686, 3, 308, 151, 0, 686, 687, 3, 310, 152, 0, 687, 73, 1, 0, 0, 0, 688, 689, 3, 282, 138, 0, 689, 690, 3, 298, 146, 0, 690, 75, 1, 0, 0, 0, 691, 692, 3, 282, 138, 0, 692, 693, 3, 300, 147, 0, 693, 694, 3, 294, 144, 0, 694, 695, 3, 294, 144, 0, 695, 696, 3, 300, 147, 0, 696, 697, 3, 316, 155, 0, 697, 698, 3, 288, 141, 0, 698, 699, 3, 298, 146, 0, 699, 700, 3, 284, 139, 0, 700, 77, 1, 0, 0, 0, 701, 702, 3, 282, 138, 0, 702, 703, 3, 300, 147, 0, 703, 704, 3, 306, 150, 0, 704, 79, 1, 0, 0, 0, 705, 706, 3, 282, 138, 0, 706, 707, 3, 306, 150, 0, 707, 708, 3, 300, 147, 0, 708, 709, 3, 296, 145, 0, 709, 81, 1, 0, 0, 0, 710, 711, 3, 282, 138, 0, 711, 712, 3, 312, 153, 0, 712, 713, 3, 294, 144, 0, 713, 714, 3, 294, 144, 0, 714, 83, 1, 0, 0, 0, 715, 716, 3, 282, 138, 0, 716, 717, 3, 312, 153, 0, 717, 718, 3, 298, 146, 0, 718, 85, 1, 0, 0, 0, 719, 720, 3, 284, 139, 0, 720, 721, 3, 306, 150, 0, 721, 722, 3, 300, 147, 0, 722, 723, 3, 312, 153, 0, 723, 724, 3, 302, 148, 0, 724, 87, 1, 0, 0, 0, 725, 726, 3, 284, 139, 0, 726, 727, 3, 306, 150, 0, 727, 728, 3, 300, 147, 0, 728, 729, 3, 312, 153, 0, 729, 730, 3, 302, 148, 0, 730, 731, 3, 288, 141, 0, 731, 732, 3, 298, 146, 0, 732, 733, 3, 284, 139, 0, 733, 89, 1, 0, 0, 0, 734, 735, 3, 286, 140, 0, 735, 736, 3, 272, 133, 0, 736, 737, 3, 314, 154, 0, 737, 738, 3, 288, 141, 0, 738, 739, 3, 298, 146, 0, 739, 740, 3, 284, 139, 0, 740, 91, 1, 0, 0, 0, 741, 742, 3, 286, 140, 0, 742, 743, 3, 300, 147, 0, 743, 744, 3, 312, 153, 0, 744, 745, 3, 306, 150, 0, 745, 93, 1, 0, 0, 0, 746, 747, 3, 288, 141, 0, 747, 748, 3, 278, 136, 0, 748, 95, 1, 0, 0, 0, 749, 750, 3, 288, 141, 0, 750, 751, 3, 282, 138, 0, 751, 97, 1, 0, 0, 0, 752, 753, 3, 288, 141, 0, 753, 754, 3, 294, 144, 0, 754, 755, 3, 288, 141, 0, 755, 756, 3, 292, 143, 0, 756, 757, 3, 280, 137, 0, 757, 99, 1, 0, 0, 0, 758, 759, 3, 288, 141, 0, 759, 760, 3, 284, 139, 0, 760, 761, 3, 298, 146, 0, 761, 762, 3, 300, 147, 0, 762, 763, 3, 306, 150, 0, 763, 764, 3, 280, 137, 0, 764, 101, 1, 0, 0, 0, 765, 766, 3, 288, 141, 0, 766, 767, 3, 298, 146, 0, 767, 768, 3, 276, 135, 0, 768, 769, 3, 294, 144, 0, 769, 770, 3, 312, 153, 0, 770, 771, 3, 278, 136, 0, 771, 772, 3, 280, 137, 0, 772, 103, 1, 0, 0, 0, 773, 774, 3, 288, 141, 0, 774, 775, 3, 298, 146, 0, 775, 105, 1, 0, 0, 0, 776, 777, 3, 288, 141, 0, 777, 778, 3, 298, 146, 0, 778, 779, 3, 282, 138, 0, 779, 790, 1, 0, 0, 0, 780, 781, 3, 288, 141, 0, 781, 782, 3, 298, 146, 0, 782, 783, 3, 282, 138, 0, 783, 784, 3, 288, 141, 0, 784, 785, 3, 298, 146, 0, 785, 786, 3, 288, 141, 0, 786, 787, 3, 310, 152, 0, 787, 788, 3, 320, 157, 0, 788, 790, 1, 0, 0, 0, 789, 776, 1, 0, 0, 0, 789, 780, 1, 0, 0, 0, 790, 107, 1, 0, 0, 0, 791, 792, 3, 288, 141, 0, 792, 793, 3, 298, 146, 0, 793, 794, 3, 298, 146, 0, 794, 795, 3, 280, 137, 0, 795, 796, 3, 306, 150, 0, 796, 109, 1, 0, 0, 0, 797, 798, 3, 288, 141, 0, 798, 799, 3, 298, 146, 0, 799, 800, 3, 310, 152, 0, 800, 801, 3, 280, 137, 0, 801, 802, 3, 306, 150, 0, 802, 803, 3, 308, 151, 0, 803, 804, 3, 280, 137, 0, 804, 805, 3, 276, 135, 0, 805, 806, 3, 310, 152, 0, 806, 111, 1, 0, 0, 0, 807, 808, 3, 288, 141, 0, 808, 809, 3, 298, 146, 0, 809, 810, 3, 310, 152, 0, 810, 811, 3, 280, 137, 0, 811, 812, 3, 306, 150, 0, 812, 813, 3, 314, 154, 0, 813, 814, 3, 272, 133, 0, 814, 815, 3, 294, 144, 0, 815, 113, 1, 0, 0, 0, 816, 817, 3, 288, 141, 0, 817, 818, 3, 308, 151, 0, 818, 115, 1, 0, 0, 0, 819, 820, 3, 290, 142, 0, 820, 821, 3, 300, 147, 0, 821, 822, 3, 288, 141, 0, 822, 823, 3, 298, 146, 0, 823, 117, 1, 0, 0, 0, 824, 825, 3, 292, 143, 0, 825, 826, 3, 280, 137, 0, 826, 827, 3, 320, 157, 0, 827, 119, 1, 0, 0, 0, 828, 829, 3, 294, 144, 0, 829, 830, 3, 272, 133, 0, 830, 831, 3, 296, 145, 0, 831, 832, 3, 274, 134, 0, 832, 833, 3, 278, 136, 0, 833, 834, 3, 272, 133, 0, 834, 121, 1, 0, 0, 0, 835, 836, 3, 294, 144, 0, 836, 837, 3, 272, 133, 0, 837, 838, 3, 308, 151, 0, 838, 839, 3, 310, 152, 0, 839, 123, 1, 0, 0, 0, 840, 841, 3, 294, 144, 0, 841, 842, 3, 280, 137, 0, 842, 843, 3, 272, 133, 0, 843, 844, 3, 278, 136, 0, 844, 845, 3, 288, 141, 0, 845, 846, 3, 298, 146, 0, 846, 847, 3, 284, 139, 0, 847, 125, 1, 0, 0, 0, 848, 849, 3, 294, 144, 0, 849, 850, 3, 280, 137, 0, 850, 851, 3, 282, 138, 0, 851, 852, 3, 310, 152, 0, 852, 127, 1, 0, 0, 0, 853, 854, 3, 294, 144, 0, 854, 855, 3, 280, 137, 0, 855, 856, 3, 310, 152, 0, 856, 129, 1, 0, 0, 0, 857, 858, 3, 294, 144, 0, 858, 859, 3, 288, 141, 0, 859, 860, 3, 292, 143, 0, 860, 861, 3, 280, 137, 0, 861, 131, 1, 0, 0, 0, 862, 863, 3, 294, 144, 0, 863, 864, 3, 288, 141, 0, 864, 865, 3, 296, 145, 0, 865, 866, 3, 288, 141, 0, 866, 867, 3, 310, 152, 0, 867, 133, 1, 0, 0, 0, 868, 869, 3, 296, 145, 0, 869, 870, 3, 272, 133, 0, 870, 871, 3, 310, 152, 0, 871, 872, 3, 280, 137, 0, 872, 873, 3, 306, 150, 0, 873, 874, 3, 288, 141, 0, 874, 875, 3, 272, 133, 0, 875, 876, 3, 294, 144, 0, 876, 877, 3, 288, 141, 0, 877, 878, 3, 322, 158, 0, 878, 879, 3, 280, 137, 0, 879, 880, 3, 278, 136, 0, 880, 135, 1, 0, 0, 0, 881, 882, 3, 296, 145, 0, 882, 883, 3, 288, 141, 0, 883, 884, 3, 298, 146, 0, 884, 885, 3, 312, 153, 0, 885, 886, 3, 310, 152, 0, 886, 887, 3, 280, 137, 0, 887, 137, 1, 0, 0, 0, 888, 889, 3, 296, 145, 0, 889, 890, 3, 300, 147, 0, 890, 891, 3, 298, 146, 0, 891, 892, 3, 310, 152, 0, 892, 893, 3, 286, 140, 0, 893, 139, 1, 0, 0, 0, 894, 895, 3, 298, 146, 0, 895, 896, 3, 272, 133, 0, 896, 897, 3, 296, 145, 0, 897, 898, 3, 280, 137, 0, 898, 141, 1, 0, 0, 0, 899, 900, 3, 298, 146, 0, 900, 901, 3, 272, 133, 0, 901, 902, 3, 310, 152, 0, 902, 903, 3, 312, 153, 0, 903, 904, 3, 306, 150, 0, 904, 905, 3, 272, 133, 0, 905, 906, 3, 294, 144, 0, 906, 143, 1, 0, 0, 0, 907, 908, 3, 298, 146, 0, 908, 909, 3, 272, 133, 0, 909, 910, 3, 298, 146, 0, 910, 145, 1, 0, 0, 0, 911, 912, 3, 298, 146, 0, 912, 913, 3, 300, 147, 0, 913, 914, 3, 310, 152, 0, 914, 147, 1, 0, 0, 0, 915, 916, 3, 298, 146, 0, 916, 917, 3, 312, 153, 0, 917, 918, 3, 294, 144, 0, 918, 919, 3, 294, 144, 0, 919, 149, 1, 0, 0, 0, 920, 921, 3, 298, 146, 0, 921, 922, 3, 312, 153, 0, 922, 923, 3, 294, 144, 0, 923, 924, 3, 294, 144, 0, 924, 925, 3, 308, 151, 0, 925, 151, 1, 0, 0, 0, 926, 927, 3, 300, 147, 0, 927, 928, 3, 282, 138, 0, 928, 929, 3, 282, 138, 0, 929, 930, 3, 308, 151, 0, 930, 931, 3, 280, 137, 0, 931, 932, 3, 310, 152, 0, 932, 153, 1, 0, 0, 0, 933, 934, 3, 300, 147, 0, 934, 935, 3, 298, 146, 0, 935, 155, 1, 0, 0, 0, 936, 937, 3, 300, 147, 0, 937, 938, 3, 306, 150, 0, 938, 157, 1, 0, 0, 0, 939, 940, 3, 300, 147, 0, 940, 941, 3, 306, 150, 0, 941, 942, 3, 278, 136, 0, 942, 943, 3, 280, 137, 0, 943, 944, 3, 306, 150, 0, 944, 159, 1, 0, 0, 0, 945, 946, 3, 300, 147, 0, 946, 947, 3, 312, 153, 0, 947, 948, 3, 310, 152, 0, 948, 949, 3, 280, 137, 0, 949, 950, 3, 306, 150, 0, 950, 161, 1, 0, 0, 0, 951, 952, 3, 300, 147, 0, 952, 953, 3, 314, 154, 0, 953, 954, 3, 280, 137, 0, 954, 955, 3, 306, 150, 0, 955, 163, 1, 0, 0, 0, 956, 957, 3, 302, 148, 0, 957, 958, 3, 272, 133, 0, 958, 959, 3, 306, 150, 0, 959, 960, 3, 310, 152, 0, 960, 961, 3, 288, 141, 0, 961, 962, 3, 310, 152, 0, 962, 963, 3, 288, 141, 0, 963, 964, 3, 300, 147, 0, 964, 965, 3, 298, 146, 0, 965, 165, 1, 0, 0, 0, 966, 967, 3, 302, 148, 0, 967, 968, 3, 288, 141, 0, 968, 969, 3, 314, 154, 0, 969, 970, 3, 300, 147, 0, 970, 971, 3, 310, 152, 0, 971, 167, 1, 0, 0, 0, 972, 973, 3, 302, 148, 0, 973, 974, 3, 300, 147, 0, 974, 975, 3, 308, 151, 0, 975, 976, 3, 288, 141, 0, 976, 977, 3, 310, 152, 0, 977, 978, 3, 288, 141, 0, 978, 979, 3, 300, 147, 0, 979, 980, 3, 298, 146, 0, 980, 981, 3, 272, 133, 0, 981, 982, 3, 294, 144, 0, 982, 169, 1, 0, 0, 0, 983, 984, 3, 302, 148, 0, 984, 985, 3, 306, 150, 0, 985, 986, 3, 280, 137, 0, 986, 987, 3, 276, 135, 0, 987, 988, 3, 280, 137, 0, 988, 989, 3, 278, 136, 0, 989, 990, 3, 288, 141, 0, 990, 991, 3, 298, 146, 0, 991, 992, 3, 284, 139, 0, 992, 171, 1, 0, 0, 0, 993, 994, 3, 302, 148, 0, 994, 995, 3, 306, 150, 0, 995, 996, 3, 280, 137, 0, 996, 997, 3, 316, 155, 0, 997, 998, 3, 286, 140, 0, 998, 999, 3, 280, 137, 0, 999, 1000, 3, 306, 150, 0, 1000, 1001, 3, 280, 137, 0, 1001, 173, 1, 0, 0, 0, 1002, 1003, 3, 304, 149, 0, 1003, 1004, 3, 312, 153, 0, 1004, 1005, 3, 272, 133, 0, 1005, 1006, 3, 294, 144, 0, 1006, 1007, 3, 288, 141, 0, 1007, 1008, 3, 282, 138, 0, 1008, 1009, 3, 320, 157, 0, 1009, 175, 1, 0, 0, 0, 1010, 1011, 3, 304, 149, 0, 1011, 1012, 3, 312, 153, 0, 1012, 1013, 3, 272, 133, 0, 1013, 1014, 3, 306, 150, 0, 1014, 1015, 3, 310, 152, 0, 1015, 1016, 3, 280, 137, 0, 1016, 1017, 3, 306, 150, 0, 1017, 177, 1, 0, 0, 0, 1018, 1019, 3, 306, 150, 0, 1019, 1020, 3, 272, 133, 0, 1020, 1021, 3, 298, 146, 0, 1021, 1022, 3, 284, 139, 0, 1022, 1023, 3, 280, 137, 0, 1023, 179, 1, 0, 0, 0, 1024, 1025, 3, 306, 150, 0, 1025, 1026, 3, 280, 137, 0, 1026, 1027, 3, 276, 135, 0, 1027, 1028, 3, 312, 153, 0, 1028, 1029, 3, 306, 150, 0, 1029, 1030, 3, 308, 151, 0, 1030, 1031, 3, 288, 141, 0, 1031, 1032, 3, 314, 154, 0, 1032, 1033, 3, 280, 137, 0, 1033, 181, 1, 0, 0, 0, 1034, 1035, 3, 306, 150, 0, 1035, 1036, 3, 280, 137, 0, 1036, 1037, 3, 302, 148, 0, 1037, 1038, 3, 294, 144, 0, 1038, 1039, 3, 272, 133, 0, 1039, 1040, 3, 276, 135, 0, 1040, 1041, 3, 280, 137, 0, 1041, 183, 1, 0, 0, 0, 1042, 1043, 3, 306, 150, 0, 1043, 1044, 3, 280, 137, 0, 1044, 1045, 3, 310, 152, 0, 1045, 1046, 3, 312, 153, 0, 1046, 1047, 3, 306, 150, 0, 1047, 1048, 3, 298, 146, 0, 1048, 185, 1, 0, 0, 0, 1049, 1050, 3, 306, 150, 0, 1050, 1051, 3, 288, 141, 0, 1051, 1052, 3, 284, 139, 0, 1052, 1053, 3, 286, 140, 0, 1053, 1054, 3, 310, 152, 0, 1054, 187, 1, 0, 0, 0, 1055, 1056, 3, 306, 150, 0, 1056, 1057, 3, 300, 147, 0, 1057, 1058, 3, 294, 144, 0, 1058, 1059, 3, 294, 144, 0, 1059, 1060, 3, 312, 153, 0, 1060, 1061, 3, 302, 148, 0, 1061, 189, 1, 0, 0, 0, 1062, 1063, 3, 306, 150, 0, 1063, 1064, 3, 300, 147, 0, 1064, 1065, 3, 316, 155, 0, 1065, 191, 1, 0, 0, 0, 1066, 1067, 3, 306, 150, 0, 1067, 1068, 3, 300, 147, 0, 1068, 1069, 3, 316, 155, 0, 1069, 1070, 3, 308, 151, 0, 1070, 193, 1, 0, 0, 0, 1071, 1072, 3, 308, 151, 0, 1072, 1073, 3, 272, 133, 0, 1073, 1074, 3, 296, 145, 0, 1074, 1075, 3, 302, 148, 0, 1075, 1076, 3, 294, 144, 0, 1076, 1077, 3, 280, 137, 0, 1077, 195, 1, 0, 0, 0, 1078, 1079, 3, 308, 151, 0, 1079, 1080, 3, 280, 137, 0, 1080, 1081, 3, 276, 135, 0, 1081, 1082, 3, 300, 147, 0, 1082, 1083, 3, 298, 146, 0, 1083, 1084, 3, 278, 136, 0, 1084, 197, 1, 0, 0, 0, 1085, 1086, 3, 308, 151, 0, 1086, 1087, 3, 280, 137, 0, 1087, 1088, 3, 294, 144, 0, 1088, 1089, 3, 280, 137, 0, 1089, 1090, 3, 276, 135, 0, 1090, 1091, 3, 310, 152, 0, 1091, 199, 1, 0, 0, 0, 1092, 1093, 3, 308, 151, 0, 1093, 1094, 3, 280, 137, 0, 1094, 1095, 3, 296, 145, 0, 1095, 1096, 3, 288, 141, 0, 1096, 201, 1, 0, 0, 0, 1097, 1098, 3, 308, 151, 0, 1098, 1099, 3, 280, 137, 0, 1099, 1100, 3, 310, 152, 0, 1100, 1101, 3, 308, 151, 0, 1101, 203, 1, 0, 0, 0, 1102, 1103, 3, 308, 151, 0, 1103, 1104, 3, 280, 137, 0, 1104, 1105, 3, 310, 152, 0, 1105, 1106, 3, 310, 152, 0, 1106, 1107, 3, 288, 141, 0, 1107, 1108, 3, 298, 146, 0, 1108, 1109, 3, 284, 139, 0, 1109, 1110, 3, 308, 151, 0, 1110, 205, 1, 0, 0, 0, 1111, 1112, 3, 308, 151, 0, 1112, 1113, 3, 312, 153, 0, 1113, 1114, 3, 274, 134, 0, 1114, 1115, 3, 308, 151, 0, 1115, 1116, 3, 310, 152, 0, 1116, 1117, 3, 306, 150, 0, 1117, 1118, 3, 288, 141, 0, 1118, 1119, 3, 298, 146, 0, 1119, 1120, 3, 284, 139, 0, 1120, 207, 1, 0, 0, 0, 1121, 1122, 3, 310, 152, 0, 1122, 1123, 3, 286, 140, 0, 1123, 1124, 3, 280, 137, 0, 1124, 1125, 3, 298, 146, 0, 1125, 209, 1, 0, 0, 0, 1126, 1127, 3, 310, 152, 0, 1127, 1128, 3, 286, 140, 0, 1128, 1129, 3, 306, 150, 0, 1129, 1130, 3, 300, 147, 0, 1130, 1131, 3, 316, 155, 0, 1131, 211, 1, 0, 0, 0, 1132, 1133, 3, 310, 152, 0, 1133, 1134, 3, 288, 141, 0, 1134, 1135, 3, 280, 137, 0, 1135, 1136, 3, 308, 151, 0, 1136, 213, 1, 0, 0, 0, 1137, 1138, 3, 310, 152, 0, 1138, 1139, 3, 288, 141, 0, 1139, 1140, 3, 296, 145, 0, 1140, 1141, 3, 280, 137, 0, 1141, 1142, 3, 308, 151, 0, 1142, 1143, 3, 310, 152, 0, 1143, 1144, 3, 272, 133, 0, 1144, 1145, 3, 296, 145, 0, 1145, 1146, 3, 302, 148, 0, 1146, 215, 1, 0, 0, 0, 1147, 1148, 3, 310, 152, 0, 1148, 1149, 3, 300, 147, 0, 1149, 217, 1, 0, 0, 0, 1150, 1151, 3, 310, 152, 0, 1151, 1152, 3, 300, 147, 0, 1152, 1153, 3, 302, 148, 0, 1153, 219, 1, 0, 0, 0, 1154, 1155, 3, 310, 152, 0, 1155, 1156, 3, 300, 147, 0, 1156, 1157, 3, 310, 152, 0, 1157, 1158, 3, 272, 133, 0, 1158, 1159, 3, 294, 144, 0, 1159, 1160, 3, 308, 151, 0, 1160, 221, 1, 0, 0, 0, 1161, 1162, 3, 310, 152, 0, 1162, 1163, 3, 306, 150, 0, 1163, 1164, 3, 272, 133, 0, 1164, 1165, 3, 288, 141, 0, 1165, 1166, 3, 294, 144, 0, 1166, 1167, 3, 288, 141, 0, 1167, 1168, 3, 298, 146, 0, 1168, 1169, 3, 284, 139, 0, 1169, 223, 1, 0, 0, 0, 1170, 1171, 3, 310, 152, 0, 1171, 1172, 3, 306, 150, 0, 1172, 1173, 3, 288, 141, 0, 1173, 1174, 3, 296, 145, 0, 1174, 225, 1, 0, 0, 0, 1175, 1176, 3, 310, 152, 0, 1176, 1177, 3, 306, 150, 0, 1177, 1178, 3, 312, 153, 0, 1178, 1179, 3, 298, 146, 0, 1179, 1180, 3, 276, 135, 0, 1180, 1181, 3, 272, 133, 0, 1181, 1182, 3, 310, 152, 0, 1182, 1183, 3, 280, 137, 0, 1183, 227, 1, 0, 0, 0, 1184, 1185, 3, 310, 152, 0, 1185, 1186, 3, 306, 150, 0, 1186, 1187, 3, 320, 157, 0, 1187, 229, 1, 0, 0, 0, 1188, 1189, 3, 310, 152, 0, 1189, 1190, 3, 306, 150, 0, 1190, 1191, 3, 320, 157, 0, 1191, 1192, 5, 95, 0, 0, 1192, 1193, 3, 276, 135, 0, 1193, 1194, 3, 272, 133, 0, 1194, 1195, 3, 308, 151, 0, 1195, 1196, 3, 310, 152, 0, 1196, 231, 1, 0, 0, 0, 1197, 1198, 3, 312, 153, 0, 1198, 1199, 3, 298, 146, 0, 1199, 1200, 3, 274, 134, 0, 1200, 1201, 3, 300, 147, 0, 1201, 1202, 3, 312, 153, 0, 1202, 1203, 3, 298, 146, 0, 1203, 1204, 3, 278, 136, 0, 1204, 1205, 3, 280, 137, 0, 1205, 1206, 3, 278, 136, 0, 1206, 233, 1, 0, 0, 0, 1207, 1208, 3, 312, 153, 0, 1208, 1209, 3, 298, 146, 0, 1209, 1210, 3, 288, 141, 0, 1210, 1211, 3, 300, 147, 0, 1211, 1212, 3, 298, 146, 0, 1212, 235, 1, 0, 0, 0, 1213, 1214, 3, 312, 153, 0, 1214, 1215, 3, 298, 146, 0, 1215, 1216, 3, 302, 148, 0, 1216, 1217, 3, 288, 141, 0, 1217, 1218, 3, 314, 154, 0, 1218, 1219, 3, 300, 147, 0, 1219, 1220, 3, 310, 152, 0, 1220, 237, 1, 0, 0, 0, 1221, 1222, 3, 312, 153, 0, 1222, 1223, 3, 308, 151, 0, 1223, 1224, 3, 288, 141, 0, 1224, 1225, 3, 298, 146, 0, 1225, 1226, 3, 284, 139, 0, 1226, 239, 1, 0, 0, 0, 1227, 1228, 3, 314, 154, 0, 1228, 1229, 3, 272, 133, 0, 1229, 1230, 3, 294, 144, 0, 1230, 1231, 3, 312, 153, 0, 1231, 1232, 3, 280, 137, 0, 1232, 1233, 3, 308, 151, 0, 1233, 241, 1, 0, 0, 0, 1234, 1235, 3, 316, 155, 0, 1235, 1236, 3, 280, 137, 0, 1236, 1237, 3, 280, 137, 0, 1237, 1238, 3, 292, 143, 0, 1238, 243, 1, 0, 0, 0, 1239, 1240, 3, 316, 155, 0, 1240, 1241, 3, 286, 140, 0, 1241, 1242, 3, 280, 137, 0, 1242, 1243, 3, 298, 146, 0, 1243, 245, 1, 0, 0, 0, 1244, 1245, 3, 316, 155, 0, 1245, 1246, 3, 286, 140, 0, 1246, 1247, 3, 280, 137, 0, 1247, 1248, 3, 306, 150, 0, 1248, 1249, 3, 280, 137, 0, 1249, 247, 1, 0, 0, 0, 1250, 1251, 3, 316, 155, 0, 1251, 1252, 3, 286, 140, 0, 1252, 1253, 3, 288, 141, 0, 1253, 1254, 3, 294, 144, 0, 1254, 1255, 3, 280, 137, 0, 1255, 249, 1, 0, 0, 0, 1256, 1257, 3, 316, 155, 0, 1257, 1258, 3, 288, 141, 0, 1258, 1259, 3, 298, 146, 0, 1259, 1260, 3, 278, 136, 0, 1260, 1261, 3, 300, 147, 0, 1261, 1262, 3, 316, 155, 0, 1262, 251, 1, 0, 0, 0, 1263, 1264, 3, 316, 155, 0, 1264, 1265, 3, 288, 141, 0, 1265, 1266, 3, 310, 152, 0, 1266, 1267, 3, 286, 140, 0, 1267, 253, 1, 0, 0, 0, 1268, 1269, 3, 316, 155, 0, 1269, 1270, 3, 288, 141, 0, 1270, 1271, 3, 310, 152, 0, 1271, 1272, 3, 286, 140, 0, 1272, 1273, 3, 288, 141, 0, 1273, 1274, 3, 298, 146, 0, 1274, 255, 1, 0, 0, 0, 1275, 1276, 3, 320, 157, 0, 1276, 1277, 3, 280, 137, 0, 1277, 1278, 3, 272, 133, 0, 1278, 1279, 3, 306, 150, 0, 1279, 1286, 1, 0, 0, 0, 1280, 1281, 3, 320, 157, 0, 1281, 1282, 3, 320, 157, 0, 1282, 1283, 3, 320, 157, 0, 1283, 1284, 3, 320, 157, 0, 1284, 1286, 1, 0, 0, 0, 1285, 1275, 1, 0, 0, 0, 1285, 1280, 1, 0, 0, 0, 1286, 257, 1, 0, 0, 0, 1287, 1288, 3, 338, 166, 0, 1288, 1289, 3, 274, 134, 0, 1289, 1320, 1, 0, 0, 0, 1290, 1291, 3, 338, 166, 0, 1291, 1292, 3, 282, 138, 0, 1292, 1320, 1, 0, 0, 0, 1293, 1294, 3, 338, 166, 0, 1294, 1295, 3, 306, 150, 0, 1295, 1320, 1, 0, 0, 0, 1296, 1297, 3, 338, 166, 0, 1297, 1298, 3, 298, 146, 0, 1298, 1320, 1, 0, 0, 0, 1299, 1300, 3, 338, 166, 0, 1300, 1301, 3, 310, 152, 0, 1301, 1320, 1, 0, 0, 0, 1302, 1303, 3, 338, 166, 0, 1303, 1304, 5, 48, 0, 0, 1304, 1320, 1, 0, 0, 0, 1305, 1306, 3, 338, 166, 0, 1306, 1307, 3, 272, 133, 0, 1307, 1320, 1, 0, 0, 0, 1308, 1309, 3, 338, 166, 0, 1309, 1310, 3, 314, 154, 0, 1310, 1320, 1, 0, 0, 0, 1311, 1312, 3, 338, 166, 0, 1312, 1313, 3, 338, 166, 0, 1313, 1320, 1, 0, 0, 0, 1314, 1315, 3, 338, 166, 0, 1315, 1316, 3, 318, 156, 0, 1316, 1317, 3, 330, 162, 0, 1317, 1318, 3, 330, 162, 0, 1318, 1320, 1, 0, 0, 0, 1319, 1287, 1, 0, 0, 0, 1319, 1290, 1, 0, 0, 0, 1319, 1293, 1, 0, 0, 0, 1319, 1296, 1, 0, 0, 0, 1319, 1299, 1, 0, 0, 0, 1319, 1302, 1, 0, 0, 0, 1319, 1305, 1, 0, 0, 0, 1319, 1308, 1, 0, 0, 0, 1319, 1311, 1, 0, 0, 0, 1319, 1314, 1, 0, 0, 0, 1320, 259, 1, 0, 0, 0, 1321, 1325, 3, 324, 159, 0, 1322, 1325, 3, 426, 210, 0, 1323, 1325, 3, 352, 173, 0, 1324, 1321, 1, 0, 0, 0, 1324, 1322, 1, 0, 0, 0, 1324, 1323, 1, 0, 0, 0, 1325, 1332, 1, 0, 0, 0, 1326, 1331, 3, 324, 159, 0, 1327, 1331, 3, 426, 210, 0, 1328, 1331, 3, 328, 161, 0, 1329, 1331, 3, 352, 173, 0, 1330, 1326, 1, 0, 0, 0, 1330, 1327, 1, 0, 0, 0, 1330, 1328, 1, 0, 0, 0, 1330, 1329, 1, 0, 0, 0, 1331, 1334, 1, 0, 0, 0, 1332, 1330, 1, 0, 0, 0, 1332, 1333, 1, 0, 0, 0, 1333, 1368, 1, 0, 0, 0, 1334, 1332, 1, 0, 0, 0, 1335, 1346, 3, 336, 165, 0, 1336, 1345, 8, 0, 0, 0, 1337, 1345, 3, 258, 126, 0, 1338, 1339, 3, 338, 166, 0, 1339, 1340, 3, 408, 201, 0, 1340, 1345, 1, 0, 0, 0, 1341, 1342, 3, 336, 165, 0, 1342, 1343, 3, 336, 165, 0, 1343, 1345, 1, 0, 0, 0, 1344, 1336, 1, 0, 0, 0, 1344, 1337, 1, 0, 0, 0, 1344, 1338, 1, 0, 0, 0, 1344, 1341, 1, 0, 0, 0, 1345, 1348, 1, 0, 0, 0, 1346, 1344, 1, 0, 0, 0, 1346, 1347, 1, 0, 0, 0, 1347, 1349, 1, 0, 0, 0, 1348, 1346, 1, 0, 0, 0, 1349, 1350, 3, 336, 165, 0, 1350, 1368, 1, 0, 0, 0, 1351, 1362, 3, 402, 198, 0, 1352, 1361, 8, 1, 0, 0, 1353, 1361, 3, 258, 126, 0, 1354, 1355, 3, 338, 166, 0, 1355, 1356, 3, 402, 198, 0, 1356, 1361, 1, 0, 0, 0, 1357, 1358, 3, 402, 198, 0, 1358, 1359, 3, 402, 198, 0, 1359, 1361, 1, 0, 0, 0, 1360, 1352, 1, 0, 0, 0, 1360, 1353, 1, 0, 0, 0, 1360, 1354, 1, 0, 0, 0, 1360, 1357, 1, 0, 0, 0, 1361, 1364, 1, 0, 0, 0, 1362, 1360, 1, 0, 0, 0, 1362, 1363, 1, 0, 0, 0, 1363, 1365, 1, 0, 0, 0, 1364, 1362, 1, 0, 0, 0, 1365, 1366, 3, 402, 198, 0, 1366, 1368, 1, 0, 0, 0, 1367, 1324, 1, 0, 0, 0, 1367, 1335, 1, 0, 0, 0, 1367, 1351, 1, 0, 0, 0, 1368, 261, 1, 0, 0, 0, 1369, 1370, 3, 268, 131, 0, 1370, 1374, 3, 354, 174, 0, 1371, 1373, 3, 330, 162, 0, 1372, 1371, 1, 0, 0, 0, 1373, 1376, 1, 0, 0, 0, 1374, 1372, 1, 0, 0, 0, 1374, 1375, 1, 0, 0, 0, 1375, 1379, 1, 0, 0, 0, 1376, 1374, 1, 0, 0, 0, 1377, 1380, 3, 302, 148, 0, 1378, 1380, 3, 280, 137, 0, 1379, 1377, 1, 0, 0, 0, 1379, 1378, 1, 0, 0, 0, 1380, 1383, 1, 0, 0, 0, 1381, 1384, 3, 398, 196, 0, 1382, 1384, 3, 350, 172, 0, 1383, 1381, 1, 0, 0, 0, 1383, 1382, 1, 0, 0, 0, 1383, 1384, 1, 0, 0, 0, 1384, 1386, 1, 0, 0, 0, 1385, 1387, 3, 328, 161, 0, 1386, 1385, 1, 0, 0, 0, 1387, 1388, 1, 0, 0, 0, 1388, 1386, 1, 0, 0, 0, 1388, 1389, 1, 0, 0, 0, 1389, 1446, 1, 0, 0, 0, 1390, 1393, 3, 268, 131, 0, 1391, 1394, 3, 302, 148, 0, 1392, 1394, 3, 280, 137, 0, 1393, 1391, 1, 0, 0, 0, 1393, 1392, 1, 0, 0, 0, 1394, 1397, 1, 0, 0, 0, 1395, 1398, 3, 398, 196, 0, 1396, 1398, 3, 350, 172, 0, 1397, 1395, 1, 0, 0, 0, 1397, 1396, 1, 0, 0, 0, 1397, 1398, 1, 0, 0, 0, 1398, 1400, 1, 0, 0, 0, 1399, 1401, 3, 328, 161, 0, 1400, 1399, 1, 0, 0, 0, 1401, 1402, 1, 0, 0, 0, 1402, 1400, 1, 0, 0, 0, 1402, 1403, 1, 0, 0, 0, 1403, 1446, 1, 0, 0, 0, 1404, 1405, 3, 266, 130, 0, 1405, 1409, 3, 354, 174, 0, 1406, 1408, 3, 328, 161, 0, 1407, 1406, 1, 0, 0, 0, 1408, 1411, 1, 0, 0, 0, 1409, 1407, 1, 0, 0, 0, 1409, 1410, 1, 0, 0, 0, 1410, 1412, 1, 0, 0, 0, 1411, 1409, 1, 0, 0, 0, 1412, 1415, 3, 280, 137, 0, 1413, 1416, 3, 398, 196, 0, 1414, 1416, 3, 350, 172, 0, 1415, 1413, 1, 0, 0, 0, 1415, 1414, 1, 0, 0, 0, 1415, 1416, 1, 0, 0, 0, 1416, 1418, 1, 0, 0, 0, 1417, 1419, 3, 328, 161, 0, 1418, 1417, 1, 0, 0, 0, 1419, 1420, 1, 0, 0, 0, 1420, 1418, 1, 0, 0, 0, 1420, 1421, 1, 0, 0, 0, 1421, 1446, 1, 0, 0, 0, 1422, 1423, 3, 354, 174, 0, 1423, 1424, 3, 266, 130, 0, 1424, 1427, 3, 280, 137, 0, 1425, 1428, 3, 398, 196, 0, 1426, 1428, 3, 350, 172, 0, 1427, 1425, 1, 0, 0, 0, 1427, 1426, 1, 0, 0, 0, 1427, 1428, 1, 0, 0, 0, 1428, 1430, 1, 0, 0, 0, 1429, 1431, 3, 328, 161, 0, 1430, 1429, 1, 0, 0, 0, 1431, 1432, 1, 0, 0, 0, 1432, 1430, 1, 0, 0, 0, 1432, 1433, 1, 0, 0, 0, 1433, 1446, 1, 0, 0, 0, 1434, 1435, 3, 266, 130, 0, 1435, 1438, 3, 280, 137, 0, 1436, 1439, 3, 398, 196, 0, 1437, 1439, 3, 350, 172, 0, 1438, 1436, 1, 0, 0, 0, 1438, 1437, 1, 0, 0, 0, 1438, 1439, 1, 0, 0, 0, 1439, 1441, 1, 0, 0, 0, 1440, 1442, 3, 328, 161, 0, 1441, 1440, 1, 0, 0, 0, 1442, 1443, 1, 0, 0, 0, 1443, 1441, 1, 0, 0, 0, 1443, 1444, 1, 0, 0, 0, 1444, 1446, 1, 0, 0, 0, 1445, 1369, 1, 0, 0, 0, 1445, 1390, 1, 0, 0, 0, 1445, 1404, 1, 0, 0, 0, 1445, 1422, 1, 0, 0, 0, 1445, 1434, 1, 0, 0, 0, 1446, 263, 1, 0, 0, 0, 1447, 1449, 5, 48, 0, 0, 1448, 1450, 3, 326, 160, 0, 1449, 1448, 1, 0, 0, 0, 1450, 1451, 1, 0, 0, 0, 1451, 1449, 1, 0, 0, 0, 1451, 1452, 1, 0, 0, 0, 1452, 265, 1, 0, 0, 0, 1453, 1455, 3, 328, 161, 0, 1454, 1453, 1, 0, 0, 0, 1455, 1456, 1, 0, 0, 0, 1456, 1454, 1, 0, 0, 0, 1456, 1457, 1, 0, 0, 0, 1457, 267, 1, 0, 0, 0, 1458, 1459, 5, 48, 0, 0, 1459, 1461, 3, 318, 156, 0, 1460, 1462, 3, 330, 162, 0, 1461, 1460, 1, 0, 0, 0, 1462, 1463, 1, 0, 0, 0, 1463, 1461, 1, 0, 0, 0, 1463, 1464, 1, 0, 0, 0, 1464, 269, 1, 0, 0, 0, 1465, 1476, 3, 408, 201, 0, 1466, 1475, 8, 2, 0, 0, 1467, 1475, 3, 258, 126, 0, 1468, 1469, 3, 338, 166, 0, 1469, 1470, 3, 408, 201, 0, 1470, 1475, 1, 0, 0, 0, 1471, 1472, 3, 408, 201, 0, 1472, 1473, 3, 408, 201, 0, 1473, 1475, 1, 0, 0, 0, 1474, 1466, 1, 0, 0, 0, 1474, 1467, 1, 0, 0, 0, 1474, 1468, 1, 0, 0, 0, 1474, 1471, 1, 0, 0, 0, 1475, 1478, 1, 0, 0, 0, 1476, 1474, 1, 0, 0, 0, 1476, 1477, 1, 0, 0, 0, 1477, 1479, 1, 0, 0, 0, 1478, 1476, 1, 0, 0, 0, 1479, 1480, 3, 408, 201, 0, 1480, 271, 1, 0, 0, 0, 1481, 1482, 7, 3, 0, 0, 1482, 273, 1, 0, 0, 0, 1483, 1484, 7, 4, 0, 0, 1484, 275, 1, 0, 0, 0, 1485, 1486, 7, 5, 0, 0, 1486, 277, 1, 0, 0, 0, 1487, 1488, 7, 6, 0, 0, 1488, 279, 1, 0, 0, 0, 1489, 1490, 7, 7, 0, 0, 1490, 281, 1, 0, 0, 0, 1491, 1492, 7, 8, 0, 0, 1492, 283, 1, 0, 0, 0, 1493, 1494, 7, 9, 0, 0, 1494, 285, 1, 0, 0, 0, 1495, 1496, 7, 10, 0, 0, 1496, 287, 1, 0, 0, 0, 1497, 1498, 7, 11, 0, 0, 1498, 289, 1, 0, 0, 0, 1499, 1500, 7, 12, 0, 0, 1500, 291, 1, 0, 0, 0, 1501, 1502, 7, 13, 0, 0, 1502, 293, 1, 0, 0, 0, 1503, 1504, 7, 14, 0, 0, 1504, 295, 1, 0, 0, 0, 1505, 1506, 7, 15, 0, 0, 1506, 297, 1, 0, 0, 0, 1507, 1508, 7, 16, 0, 0, 1508, 299, 1, 0, 0, 0, 1509, 1510, 7, 17, 0, 0, 1510, 301, 1, 0, 0, 0, 1511, 1512, 7, 18, 0, 0, 1512, 303, 1, 0, 0, 0, 1513, 1514, 7, 19, 0, 0, 1514, 305, 1, 0, 0, 0, 1515, 1516, 7, 20, 0, 0, 1516, 307, 1, 0, 0, 0, 1517, 1518, 7, 21, 0, 0, 1518, 309, 1, 0, 0, 0, 1519, 1520, 7, 22, 0, 0, 1520, 311, 1, 0, 0, 0, 1521, 1522, 7, 23, 0, 0, 1522, 313, 1, 0, 0, 0, 1523, 1524, 7, 24, 0, 0, 1524, 315, 1, 0, 0, 0, 1525, 1526, 7, 25, 0, 0, 1526, 317, 1, 0, 0, 0, 1527, 1528, 7, 26, 0, 0, 1528, 319, 1, 0, 0, 0, 1529, 1530, 7, 27, 0, 0, 1530, 321, 1, 0, 0, 0, 1531, 1532, 7, 28, 0, 0, 1532, 323, 1, 0, 0, 0, 1533, 1534, 7, 29, 0, 0, 1534, 325, 1, 0, 0, 0, 1535, 1536, 7, 30, 0, 0, 1536, 327, 1, 0, 0, 0, 1537, 1538, 7, 31, 0, 0, 1538, 329, 1, 0, 0, 0, 1539, 1540, 7, 32, 0, 0, 1540, 331, 1, 0, 0, 0, 1541, 1542, 5, 45, 0, 0, 1542, 1543, 5, 62, 0, 0, 1543, 333, 1, 0, 0, 0, 1544, 1545, 5, 42, 0, 0, 1545, 335, 1, 0, 0, 0, 1546, 1547, 5, 96, 0, 0, 1547, 337, 1, 0, 0, 0, 1548, 1549, 5, 92, 0, 0, 1549, 339, 1, 0, 0, 0, 1550, 1551, 5, 58, 0, 0, 1551, 1552, 5, 58, 0, 0, 1552, 341, 1, 0, 0, 0, 1553, 1554, 5, 58, 0, 0, 1554, 1555, 5, 61, 0, 0, 1555, 343, 1, 0, 0, 0, 1556, 1557, 5, 58, 0, 0, 1557, 345, 1, 0, 0, 0, 1558, 1559, 5, 44, 0, 0, 1559, 347, 1, 0, 0, 0, 1560, 1561, 5, 124, 0, 0, 1561, 1562, 5, 124, 0, 0, 1562, 349, 1, 0, 0, 0, 1563, 1564, 5, 45, 0, 0, 1564, 351, 1, 0, 0, 0, 1565, 1566, 5, 36, 0, 0, 1566, 353, 1, 0, 0, 0, 1567, 1568, 5, 46, 0, 0, 1568, 355, 1, 0, 0, 0, 1569, 1570, 5, 61, 0, 0, 1570, 1571, 5, 61, 0, 0, 1571, 357, 1, 0, 0, 0, 1572, 1573, 5, 61, 0, 0, 1573, 359, 1, 0, 0, 0, 1574, 1575, 5, 62, 0, 0, 1575, 1576, 5, 61, 0, 0, 1576, 361, 1, 0, 0, 0, 1577, 1578, 5, 62, 0, 0, 1578, 363, 1, 0, 0, 0, 1579, 1580, 5, 35, 0, 0, 1580, 365, 1, 0, 0, 0, 1581, 1582, 5, 126, 0, 0, 1582, 1583, 5, 42, 0, 0, 1583, 367, 1, 0, 0, 0, 1584, 1585, 5, 61, 0, 0, 1585, 1586, 5, 126, 0, 0, 1586, 1587, 5, 42, 0, 0, 1587, 369, 1, 0, 0, 0, 1588, 1589, 5, 123, 0, 0, 1589, 1590, 1, 0, 0, 0, 1590, 1591, 6, 182, 0, 0, 1591, 371, 1, 0, 0, 0, 1592, 1593, 5, 91, 0, 0, 1593, 373, 1, 0, 0, 0, 1594, 1595, 5, 40, 0, 0, 1595, 375, 1, 0, 0, 0, 1596, 1597, 5, 60, 0, 0, 1597, 1598, 5, 61, 0, 0, 1598, 377, 1, 0, 0, 0, 1599, 1600, 5, 60, 0, 0, 1600, 1601, 5, 47, 0, 0, 1601, 1602, 1, 0, 0, 0, 1602, 1603, 6, 186, 1, 0, 1603, 1604, 6, 186, 2, 0, 1604, 379, 1, 0, 0, 0, 1605, 1606, 5, 60, 0, 0, 1606, 1607, 4, 187, 0, 0, 1607, 1608, 1, 0, 0, 0, 1608, 1609, 6, 187, 3, 0, 1609, 1610, 6, 187, 4, 0, 1610, 381, 1, 0, 0, 0, 1611, 1612, 5, 60, 0, 0, 1612, 383, 1, 0, 0, 0, 1613, 1614, 5, 60, 0, 0, 1614, 1615, 5, 47, 0, 0, 1615, 385, 1, 0, 0, 0, 1616, 1617, 5, 33, 0, 0, 1617, 1621, 5, 61, 0, 0, 1618, 1619, 5, 60, 0, 0, 1619, 1621, 5, 62, 0, 0, 1620, 1616, 1, 0, 0, 0, 1620, 1618, 1, 0, 0, 0, 1621, 387, 1, 0, 0, 0, 1622, 1623, 5, 33, 0, 0, 1623, 1624, 5, 126, 0, 0, 1624, 1625, 5, 42, 0, 0, 1625, 389, 1, 0, 0, 0, 1626, 1627, 5, 33, 0, 0, 1627, 1628, 5, 126, 0, 0, 1628, 391, 1, 0, 0, 0, 1629, 1630, 5, 63, 0, 0, 1630, 1631, 5, 46, 0, 0, 1631, 393, 1, 0, 0, 0, 1632, 1633, 5, 63, 0, 0, 1633, 1634, 5, 63, 0, 0, 1634, 395, 1, 0, 0, 0, 1635, 1636, 5, 37, 0, 0, 1636, 397, 1, 0, 0, 0, 1637, 1638, 5, 43, 0, 0, 1638, 399, 1, 0, 0, 0, 1639, 1640, 5, 63, 0, 0, 1640, 401, 1, 0, 0, 0, 1641, 1642, 5, 34, 0, 0, 1642, 403, 1, 0, 0, 0, 1643, 1644, 5, 102, 0, 0, 1644, 1645, 5, 39, 0, 0, 1645, 1646, 1, 0, 0, 0, 1646, 1647, 6, 199, 5, 0, 1647, 405, 1, 0, 0, 0, 1648, 1649, 5, 70, 0, 0, 1649, 1650, 5, 39, 0, 0, 1650, 1651, 1, 0, 0, 0, 1651, 1652, 6, 200, 6, 0, 1652, 407, 1, 0, 0, 0, 1653, 1654, 5, 39, 0, 0, 1654, 409, 1, 0, 0, 0, 1655, 1656, 5, 126, 0, 0, 1656, 411, 1, 0, 0, 0, 1657, 1658, 5, 61, 0, 0, 1658, 1659, 5, 126, 0, 0, 1659, 413, 1, 0, 0, 0, 1660, 1661, 5, 125, 0, 0, 1661, 1662, 1, 0, 0, 0, 1662, 1663, 6, 204, 7, 0, 1663, 415, 1, 0, 0, 0, 1664, 1665, 5, 93, 0, 0, 1665, 417, 1, 0, 0, 0, 1666, 1667, 5, 41, 0, 0, 1667, 419, 1, 0, 0, 0, 1668, 1669, 5, 59, 0, 0, 1669, 421, 1, 0, 0, 0, 1670, 1671, 5, 47, 0, 0, 1671, 423, 1, 0, 0, 0, 1672, 1673, 5, 47, 0, 0, 1673, 1674, 5, 62, 0, 0, 1674, 425, 1, 0, 0, 0, 1675, 1676, 5, 95, 0, 0, 1676, 427, 1, 0, 0, 0, 1677, 1678, 5, 47, 0, 0, 1678, 1679, 5, 42, 0, 0, 1679, 1683, 1, 0, 0, 0, 1680, 1682, 9, 0, 0, 0, 1681, 1680, 1, 0, 0, 0, 1682, 1685, 1, 0, 0, 0, 1683, 1684, 1, 0, 0, 0, 1683, 1681, 1, 0, 0, 0, 1684, 1686, 1, 0, 0, 0, 1685, 1683, 1, 0, 0, 0, 1686, 1687, 5, 42, 0, 0, 1687, 1688, 5, 47, 0, 0, 1688, 1689, 1, 0, 0, 0, 1689, 1690, 6, 211, 8, 0, 1690, 429, 1, 0, 0, 0, 1691, 1692, 5, 45, 0, 0, 1692, 1696, 5, 45, 0, 0, 1693, 1694, 5, 47, 0, 0, 1694, 1696, 5, 47, 0, 0, 1695, 1691, 1, 0, 0, 0, 1695, 1693, 1, 0, 0, 0, 1696, 1700, 1, 0, 0, 0, 1697, 1699, 8, 33, 0, 0, 1698, 1697, 1, 0, 0, 0, 1699, 1702, 1, 0, 0, 0, 1700, 1698, 1, 0, 0, 0, 1700, 1701, 1, 0, 0, 0, 1701, 1704, 1, 0, 0, 0, 1702, 1700, 1, 0, 0, 0, 1703, 1705, 7, 34, 0, 0, 1704, 1703, 1, 0, 0, 0, 1705, 1706, 1, 0, 0, 0, 1706, 1707, 6, 212, 8, 0, 1707, 431, 1, 0, 0, 0, 1708, 1709, 7, 35, 0, 0, 1709, 1710, 1, 0, 0, 0, 1710, 1711, 6, 213, 9, 0, 1711, 433, 1, 0, 0, 0, 1712, 1724, 8, 36, 0, 0, 1713, 1724, 3, 258, 126, 0, 1714, 1715, 3, 338, 166, 0, 1715, 1716, 3, 408, 201, 0, 1716, 1724, 1, 0, 0, 0, 1717, 1718, 3, 338, 166, 0, 1718, 1719, 3, 370, 182, 0, 1719, 1724, 1, 0, 0, 0, 1720, 1721, 3, 408, 201, 0, 1721, 1722, 3, 408, 201, 0, 1722, 1724, 1, 0, 0, 0, 1723, 1712, 1, 0, 0, 0, 1723, 1713, 1, 0, 0, 0, 1723, 1714, 1, 0, 0, 0, 1723, 1717, 1, 0, 0, 0, 1723, 1720, 1, 0, 0, 0, 1724, 1725, 1, 0, 0, 0, 1725, 1723, 1, 0, 0, 0, 1725, 1726, 1, 0, 0, 0, 1726, 435, 1, 0, 0, 0, 1727, 1728, 3, 370, 182, 0, 1728, 1729, 1, 0, 0, 0, 1729, 1730, 6, 215, 0, 0, 1730, 437, 1, 0, 0, 0, 1731, 1732, 3, 408, 201, 0, 1732, 1733, 1, 0, 0, 0, 1733, 1734, 6, 216, 10, 0, 1734, 1735, 6, 216, 7, 0, 1735, 439, 1, 0, 0, 0, 1736, 1742, 8, 37, 0, 0, 1737, 1742, 3, 258, 126, 0, 1738, 1739, 3, 338, 166, 0, 1739, 1740, 3, 370, 182, 0, 1740, 1742, 1, 0, 0, 0, 1741, 1736, 1, 0, 0, 0, 1741, 1737, 1, 0, 0, 0, 1741, 1738, 1, 0, 0, 0, 1742, 1743, 1, 0, 0, 0, 1743, 1741, 1, 0, 0, 0, 1743, 1744, 1, 0, 0, 0, 1744, 441, 1, 0, 0, 0, 1745, 1746, 3, 370, 182, 0, 1746, 1747, 1, 0, 0, 0, 1747, 1748, 6, 218, 0, 0, 1748, 443, 1, 0, 0, 0, 1749, 1750, 5, 47, 0, 0, 1750, 1751, 5, 62, 0, 0, 1751, 1752, 1, 0, 0, 0, 1752, 1753, 6, 219, 11, 0, 1753, 1754, 6, 219, 7, 0, 1754, 445, 1, 0, 0, 0, 1755, 1756, 5, 62, 0, 0, 1756, 1757, 1, 0, 0, 0, 1757, 1758, 6, 220, 12, 0, 1758, 1759, 6, 220, 7, 0, 1759, 1760, 6, 220, 13, 0, 1760, 447, 1, 0, 0, 0, 1761, 1765, 7, 38, 0, 0, 1762, 1764, 7, 39, 0, 0, 1763, 1762, 1, 0, 0, 0, 1764, 1767, 1, 0, 0, 0, 1765, 1763, 1, 0, 0, 0, 1765, 1766, 1, 0, 0, 0, 1766, 1768, 1, 0, 0, 0, 1767, 1765, 1, 0, 0, 0, 1768, 1769, 6, 221, 14, 0, 1769, 449, 1, 0, 0, 0, 1770, 1771, 5, 61, 0, 0, 1771, 1772, 1, 0, 0, 0, 1772, 1773, 6, 222, 15, 0, 1773, 451, 1, 0, 0, 0, 1774, 1775, 3, 270, 132, 0, 1775, 1776, 1, 0, 0, 0, 1776, 1777, 6, 223, 16, 0, 1777, 453, 1, 0, 0, 0, 1778, 1780, 7, 40, 0, 0, 1779, 1778, 1, 0, 0, 0, 1780, 1781, 1, 0, 0, 0, 1781, 1779, 1, 0, 0, 0, 1781, 1782, 1, 0, 0, 0, 1782, 1783, 1, 0, 0, 0, 1783, 1784, 6, 224, 9, 0, 1784, 455, 1, 0, 0, 0, 1785, 1786, 5, 123, 0, 0, 1786, 1787, 1, 0, 0, 0, 1787, 1788, 6, 225, 17, 0, 1788, 1789, 6, 225, 0, 0, 1789, 457, 1, 0, 0, 0, 1790, 1791, 5, 62, 0, 0, 1791, 1792, 1, 0, 0, 0, 1792, 1793, 6, 226, 12, 0, 1793, 1794, 6, 226, 7, 0, 1794, 459, 1, 0, 0, 0, 1795, 1799, 7, 38, 0, 0, 1796, 1798, 7, 39, 0, 0, 1797, 1796, 1, 0, 0, 0, 1798, 1801, 1, 0, 0, 0, 1799, 1797, 1, 0, 0, 0, 1799, 1800, 1, 0, 0, 0, 1800, 1802, 1, 0, 0, 0, 1801, 1799, 1, 0, 0, 0, 1802, 1803, 6, 227, 14, 0, 1803, 461, 1, 0, 0, 0, 1804, 1806, 7, 40, 0, 0, 1805, 1804, 1, 0, 0, 0, 1806, 1807, 1, 0, 0, 0, 1807, 1805, 1, 0, 0, 0, 1807, 1808, 1, 0, 0, 0, 1808, 1809, 1, 0, 0, 0, 1809, 1810, 6, 228, 9, 0, 1810, 463, 1, 0, 0, 0, 1811, 1813, 8, 41, 0, 0, 1812, 1811, 1, 0, 0, 0, 1813, 1814, 1, 0, 0, 0, 1814, 1812, 1, 0, 0, 0, 1814, 1815, 1, 0, 0, 0, 1815, 465, 1, 0, 0, 0, 1816, 1817, 5, 123, 0, 0, 1817, 1818, 1, 0, 0, 0, 1818, 1819, 6, 230, 17, 0, 1819, 1820, 6, 230, 0, 0, 1820, 467, 1, 0, 0, 0, 1821, 1822, 5, 60, 0, 0, 1822, 1823, 5, 47, 0, 0, 1823, 1824, 1, 0, 0, 0, 1824, 1825, 6, 231, 1, 0, 1825, 1826, 6, 231, 7, 0, 1826, 1827, 6, 231, 2, 0, 1827, 469, 1, 0, 0, 0, 1828, 1829, 5, 60, 0, 0, 1829, 1830, 1, 0, 0, 0, 1830, 1831, 6, 232, 3, 0, 1831, 1832, 6, 232, 4, 0, 1832, 471, 1, 0, 0, 0, 1833, 1835, 7, 40, 0, 0, 1834, 1833, 1, 0, 0, 0, 1835, 1836, 1, 0, 0, 0, 1836, 1834, 1, 0, 0, 0, 1836, 1837, 1, 0, 0, 0, 1837, 1838, 1, 0, 0, 0, 1838, 1839, 6, 233, 9, 0, 1839, 473, 1, 0, 0, 0, 53, 0, 1, 2, 3, 4, 5, 514, 789, 1285, 1319, 1324, 1330, 1332, 1344, 1346, 1360, 1362, 1367, 1374, 1379, 1383, 1388, 1393, 1397, 1402, 1409, 1415, 1420, 1427, 1432, 1438, 1443, 1445, 1451, 1456, 1463, 1474, 1476, 1620, 1683, 1695, 1700, 1704, 1723, 1725, 1741, 1743, 1765, 1781, 1799, 1807, 1814, 1836, 18, 5, 0, 0, 7, 158, 0, 5, 4, 0, 7, 157, 0, 5, 3, 0, 5, 1, 0, 5, 2, 0, 4, 0, 0, 6, 0, 0, 0, 1, 0, 7, 170, 0, 7, 178, 0, 7, 149, 0, 5, 5, 0, 7, 128, 0, 7, 147, 0, 7, 133, 0, 7, 153, 0] \ No newline at end of file diff --git a/posthog/hogql/grammar/HogQLLexer.py b/posthog/hogql/grammar/HogQLLexer.py index 6864d30fc69c..f12dd98abd67 100644 --- a/posthog/hogql/grammar/HogQLLexer.py +++ b/posthog/hogql/grammar/HogQLLexer.py @@ -16,7 +16,7 @@ def serializedATN(): return [ - 4,0,184,1776,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,2,0,7,0,2,1,7,1,2,2,7, + 4,0,190,1840,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,2,0,7,0,2,1,7,1,2,2,7, 2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7, 10,2,11,7,11,2,12,7,12,2,13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2, 17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7, @@ -55,674 +55,700 @@ def serializedATN(): 7,211,2,212,7,212,2,213,7,213,2,214,7,214,2,215,7,215,2,216,7,216, 2,217,7,217,2,218,7,218,2,219,7,219,2,220,7,220,2,221,7,221,2,222, 7,222,2,223,7,223,2,224,7,224,2,225,7,225,2,226,7,226,2,227,7,227, - 1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,2,1,2,1,3,1,3,1,3, - 1,3,1,4,1,4,1,4,1,4,1,4,1,4,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,6, - 1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,3,6,503,8,6,1,7,1,7,1,7,1,7,1,7, - 1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,9,1,9,1,10,1,10,1, - 10,1,11,1,11,1,11,1,11,1,11,1,12,1,12,1,12,1,12,1,12,1,13,1,13,1, - 13,1,13,1,13,1,13,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,15,1,15,1, - 15,1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1, - 16,1,17,1,17,1,17,1,17,1,17,1,17,1,18,1,18,1,18,1,18,1,18,1,19,1, - 19,1,19,1,19,1,19,1,19,1,19,1,19,1,20,1,20,1,20,1,20,1,20,1,21,1, - 21,1,21,1,21,1,22,1,22,1,22,1,22,1,22,1,23,1,23,1,23,1,23,1,23,1, - 23,1,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, - 24,1,24,1,25,1,25,1,25,1,25,1,25,1,26,1,26,1,26,1,26,1,27,1,27,1, - 27,1,27,1,27,1,27,1,27,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1, - 29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,30,1,30,1, - 30,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,32,1,32,1,32,1,32,1, - 32,1,32,1,33,1,33,1,33,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1, - 34,1,34,1,35,1,35,1,35,1,35,1,36,1,36,1,36,1,36,1,36,1,37,1,37,1, - 37,1,37,1,37,1,38,1,38,1,38,1,38,1,39,1,39,1,39,1,39,1,39,1,39,1, - 40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,41,1,41,1,41,1,41,1, - 41,1,41,1,41,1,42,1,42,1,42,1,42,1,42,1,43,1,43,1,43,1,44,1,44,1, - 44,1,45,1,45,1,45,1,45,1,45,1,45,1,46,1,46,1,46,1,47,1,47,1,47,1, - 47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,3,47,756,8,47,1, - 48,1,48,1,48,1,48,1,48,1,48,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1, - 49,1,49,1,49,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,51,1, - 51,1,51,1,52,1,52,1,52,1,52,1,52,1,53,1,53,1,53,1,53,1,54,1,54,1, - 54,1,54,1,54,1,54,1,54,1,55,1,55,1,55,1,55,1,55,1,56,1,56,1,56,1, - 56,1,56,1,56,1,56,1,56,1,57,1,57,1,57,1,57,1,57,1,58,1,58,1,58,1, - 58,1,59,1,59,1,59,1,59,1,59,1,60,1,60,1,60,1,60,1,60,1,60,1,61,1, - 61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,62,1, - 62,1,62,1,62,1,62,1,62,1,62,1,63,1,63,1,63,1,63,1,63,1,63,1,64,1, - 64,1,64,1,64,1,64,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66,1,67,1, - 67,1,67,1,67,1,67,1,68,1,68,1,68,1,68,1,68,1,68,1,69,1,69,1,69,1, - 69,1,69,1,69,1,69,1,70,1,70,1,70,1,71,1,71,1,71,1,72,1,72,1,72,1, - 72,1,72,1,72,1,73,1,73,1,73,1,73,1,73,1,73,1,74,1,74,1,74,1,74,1, - 74,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,76,1,76,1, - 76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,77,1,77,1,77,1,77,1,77,1, - 77,1,77,1,77,1,77,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,79,1, - 79,1,79,1,79,1,79,1,79,1,79,1,79,1,80,1,80,1,80,1,80,1,80,1,80,1, - 81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,82,1,82,1,82,1, - 82,1,82,1,82,1,82,1,82,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,84,1, - 84,1,84,1,84,1,84,1,84,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,86,1, - 86,1,86,1,86,1,87,1,87,1,87,1,87,1,87,1,88,1,88,1,88,1,88,1,88,1, - 88,1,88,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,90,1,90,1,90,1,90,1, - 90,1,90,1,90,1,91,1,91,1,91,1,91,1,91,1,92,1,92,1,92,1,92,1,92,1, - 93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,94,1,94,1,94,1,94,1, - 94,1,94,1,94,1,94,1,94,1,94,1,95,1,95,1,95,1,95,1,95,1,96,1,96,1, - 96,1,96,1,96,1,96,1,97,1,97,1,97,1,97,1,97,1,98,1,98,1,98,1,98,1, - 98,1,98,1,98,1,98,1,98,1,98,1,99,1,99,1,99,1,100,1,100,1,100,1,100, - 1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,102,1,102,1,102,1,102, - 1,102,1,102,1,102,1,102,1,102,1,103,1,103,1,103,1,103,1,103,1,104, - 1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,105,1,105,1,105, - 1,105,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,107, - 1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,108,1,108, - 1,108,1,108,1,108,1,108,1,109,1,109,1,109,1,109,1,109,1,109,1,109, - 1,109,1,110,1,110,1,110,1,110,1,110,1,110,1,111,1,111,1,111,1,111, - 1,111,1,111,1,111,1,112,1,112,1,112,1,112,1,112,1,113,1,113,1,113, - 1,113,1,113,1,114,1,114,1,114,1,114,1,114,1,114,1,115,1,115,1,115, - 1,115,1,115,1,115,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,117, - 1,117,1,117,1,117,1,117,1,118,1,118,1,118,1,118,1,118,1,118,1,118, - 1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,3,119, - 1227,8,119,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120, - 1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120, - 1,120,1,120,1,120,1,120,1,120,1,120,1,120,3,120,1256,8,120,1,121, - 1,121,1,121,3,121,1261,8,121,1,121,1,121,1,121,1,121,5,121,1267, - 8,121,10,121,12,121,1270,9,121,1,121,1,121,1,121,1,121,1,121,1,121, - 1,121,1,121,1,121,5,121,1281,8,121,10,121,12,121,1284,9,121,1,121, - 1,121,1,121,1,121,1,121,1,121,1,121,1,121,1,121,1,121,1,121,5,121, - 1297,8,121,10,121,12,121,1300,9,121,1,121,1,121,3,121,1304,8,121, - 1,122,1,122,1,122,5,122,1309,8,122,10,122,12,122,1312,9,122,1,122, - 1,122,3,122,1316,8,122,1,122,1,122,3,122,1320,8,122,1,122,4,122, - 1323,8,122,11,122,12,122,1324,1,122,1,122,1,122,3,122,1330,8,122, - 1,122,1,122,3,122,1334,8,122,1,122,4,122,1337,8,122,11,122,12,122, - 1338,1,122,1,122,1,122,5,122,1344,8,122,10,122,12,122,1347,9,122, - 1,122,1,122,1,122,3,122,1352,8,122,1,122,4,122,1355,8,122,11,122, - 12,122,1356,1,122,1,122,1,122,1,122,1,122,3,122,1364,8,122,1,122, - 4,122,1367,8,122,11,122,12,122,1368,1,122,1,122,1,122,1,122,3,122, - 1375,8,122,1,122,4,122,1378,8,122,11,122,12,122,1379,3,122,1382, - 8,122,1,123,1,123,4,123,1386,8,123,11,123,12,123,1387,1,124,4,124, - 1391,8,124,11,124,12,124,1392,1,125,1,125,1,125,4,125,1398,8,125, - 11,125,12,125,1399,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126, - 1,126,5,126,1411,8,126,10,126,12,126,1414,9,126,1,126,1,126,1,127, - 1,127,1,128,1,128,1,129,1,129,1,130,1,130,1,131,1,131,1,132,1,132, - 1,133,1,133,1,134,1,134,1,135,1,135,1,136,1,136,1,137,1,137,1,138, - 1,138,1,139,1,139,1,140,1,140,1,141,1,141,1,142,1,142,1,143,1,143, - 1,144,1,144,1,145,1,145,1,146,1,146,1,147,1,147,1,148,1,148,1,149, - 1,149,1,150,1,150,1,151,1,151,1,152,1,152,1,153,1,153,1,154,1,154, - 1,155,1,155,1,156,1,156,1,157,1,157,1,157,1,158,1,158,1,159,1,159, - 1,160,1,160,1,161,1,161,1,161,1,162,1,162,1,162,1,163,1,163,1,164, - 1,164,1,165,1,165,1,165,1,166,1,166,1,167,1,167,1,168,1,168,1,169, - 1,169,1,169,1,170,1,170,1,171,1,171,1,171,1,172,1,172,1,173,1,173, - 1,174,1,174,1,174,1,175,1,175,1,175,1,175,1,176,1,176,1,176,1,176, - 1,177,1,177,1,178,1,178,1,179,1,179,1,179,1,180,1,180,1,180,1,180, - 1,180,1,180,1,181,1,181,1,181,1,181,1,181,1,181,1,182,1,182,1,183, - 1,183,1,183,1,184,1,184,1,184,1,184,3,184,1557,8,184,1,185,1,185, - 1,185,1,185,1,186,1,186,1,186,1,187,1,187,1,187,1,188,1,188,1,188, - 1,189,1,189,1,190,1,190,1,191,1,191,1,192,1,192,1,193,1,193,1,193, - 1,193,1,193,1,194,1,194,1,194,1,194,1,194,1,195,1,195,1,196,1,196, - 1,197,1,197,1,197,1,198,1,198,1,198,1,198,1,199,1,199,1,200,1,200, - 1,201,1,201,1,202,1,202,1,203,1,203,1,203,1,204,1,204,1,205,1,205, - 1,205,1,205,5,205,1618,8,205,10,205,12,205,1621,9,205,1,205,1,205, - 1,205,1,205,1,205,1,206,1,206,1,206,1,206,3,206,1632,8,206,1,206, - 5,206,1635,8,206,10,206,12,206,1638,9,206,1,206,3,206,1641,8,206, - 1,206,1,206,1,207,1,207,1,207,1,207,1,208,1,208,1,208,1,208,1,208, - 1,208,1,208,1,208,1,208,1,208,1,208,4,208,1660,8,208,11,208,12,208, - 1661,1,209,1,209,1,209,1,209,1,210,1,210,1,210,1,210,1,210,1,211, - 1,211,1,211,1,211,1,211,4,211,1678,8,211,11,211,12,211,1679,1,212, - 1,212,1,212,1,212,1,213,1,213,1,213,1,213,1,213,1,213,1,214,1,214, - 1,214,1,214,1,214,1,214,1,215,1,215,5,215,1700,8,215,10,215,12,215, - 1703,9,215,1,215,1,215,1,216,1,216,1,216,1,216,1,217,1,217,1,217, - 1,217,1,218,4,218,1716,8,218,11,218,12,218,1717,1,218,1,218,1,219, - 1,219,1,219,1,219,1,219,1,220,1,220,1,220,1,220,1,220,1,221,1,221, - 5,221,1734,8,221,10,221,12,221,1737,9,221,1,221,1,221,1,222,4,222, - 1742,8,222,11,222,12,222,1743,1,222,1,222,1,223,4,223,1749,8,223, - 11,223,12,223,1750,1,224,1,224,1,224,1,224,1,224,1,225,1,225,1,225, - 1,225,1,225,1,225,1,225,1,226,1,226,1,226,1,226,1,226,1,227,4,227, - 1771,8,227,11,227,12,227,1772,1,227,1,227,1,1619,0,228,6,1,8,2,10, - 3,12,4,14,5,16,6,18,7,20,8,22,9,24,10,26,11,28,12,30,13,32,14,34, - 15,36,16,38,17,40,18,42,19,44,20,46,21,48,22,50,23,52,24,54,25,56, - 26,58,27,60,28,62,29,64,30,66,31,68,32,70,33,72,34,74,35,76,36,78, - 37,80,38,82,39,84,40,86,41,88,42,90,43,92,44,94,45,96,46,98,47,100, - 48,102,49,104,50,106,51,108,52,110,53,112,54,114,55,116,56,118,57, - 120,58,122,59,124,60,126,61,128,62,130,63,132,64,134,65,136,66,138, - 67,140,68,142,69,144,70,146,71,148,72,150,73,152,74,154,75,156,76, - 158,77,160,78,162,79,164,80,166,81,168,82,170,83,172,84,174,85,176, - 86,178,87,180,88,182,89,184,90,186,91,188,92,190,93,192,94,194,95, - 196,96,198,97,200,98,202,99,204,100,206,101,208,102,210,103,212, - 104,214,105,216,106,218,107,220,108,222,109,224,110,226,111,228, - 112,230,113,232,114,234,115,236,116,238,117,240,118,242,119,244, - 120,246,121,248,122,250,123,252,124,254,125,256,126,258,127,260, - 0,262,0,264,0,266,0,268,0,270,0,272,0,274,0,276,0,278,0,280,0,282, - 0,284,0,286,0,288,0,290,0,292,0,294,0,296,0,298,0,300,0,302,0,304, - 0,306,0,308,0,310,0,312,0,314,0,316,0,318,0,320,128,322,129,324, - 130,326,131,328,132,330,133,332,134,334,135,336,136,338,137,340, - 138,342,139,344,140,346,141,348,142,350,143,352,144,354,145,356, - 146,358,147,360,148,362,149,364,150,366,0,368,0,370,151,372,152, - 374,153,376,154,378,155,380,156,382,157,384,158,386,159,388,160, - 390,161,392,162,394,163,396,164,398,165,400,166,402,167,404,168, - 406,169,408,170,410,171,412,172,414,173,416,174,418,175,420,176, - 422,177,424,178,426,0,428,179,430,180,432,0,434,0,436,0,438,0,440, - 0,442,181,444,0,446,0,448,0,450,182,452,183,454,0,456,0,458,0,460, - 184,6,0,1,2,3,4,5,42,2,0,92,92,96,96,2,0,34,34,92,92,2,0,39,39,92, - 92,2,0,65,65,97,97,2,0,66,66,98,98,2,0,67,67,99,99,2,0,68,68,100, - 100,2,0,69,69,101,101,2,0,70,70,102,102,2,0,71,71,103,103,2,0,72, - 72,104,104,2,0,73,73,105,105,2,0,74,74,106,106,2,0,75,75,107,107, - 2,0,76,76,108,108,2,0,77,77,109,109,2,0,78,78,110,110,2,0,79,79, - 111,111,2,0,80,80,112,112,2,0,81,81,113,113,2,0,82,82,114,114,2, - 0,83,83,115,115,2,0,84,84,116,116,2,0,85,85,117,117,2,0,86,86,118, - 118,2,0,87,87,119,119,2,0,88,88,120,120,2,0,89,89,121,121,2,0,90, - 90,122,122,2,0,65,90,97,122,1,0,48,55,1,0,48,57,3,0,48,57,65,70, - 97,102,2,0,10,10,13,13,2,1,10,10,13,13,2,0,9,13,32,32,3,0,39,39, - 92,92,123,123,1,0,123,123,3,0,65,90,95,95,97,122,5,0,45,45,48,57, - 65,90,95,95,97,122,3,0,9,10,13,13,32,32,2,0,60,60,123,123,1815,0, - 6,1,0,0,0,0,8,1,0,0,0,0,10,1,0,0,0,0,12,1,0,0,0,0,14,1,0,0,0,0,16, - 1,0,0,0,0,18,1,0,0,0,0,20,1,0,0,0,0,22,1,0,0,0,0,24,1,0,0,0,0,26, - 1,0,0,0,0,28,1,0,0,0,0,30,1,0,0,0,0,32,1,0,0,0,0,34,1,0,0,0,0,36, - 1,0,0,0,0,38,1,0,0,0,0,40,1,0,0,0,0,42,1,0,0,0,0,44,1,0,0,0,0,46, - 1,0,0,0,0,48,1,0,0,0,0,50,1,0,0,0,0,52,1,0,0,0,0,54,1,0,0,0,0,56, - 1,0,0,0,0,58,1,0,0,0,0,60,1,0,0,0,0,62,1,0,0,0,0,64,1,0,0,0,0,66, - 1,0,0,0,0,68,1,0,0,0,0,70,1,0,0,0,0,72,1,0,0,0,0,74,1,0,0,0,0,76, - 1,0,0,0,0,78,1,0,0,0,0,80,1,0,0,0,0,82,1,0,0,0,0,84,1,0,0,0,0,86, - 1,0,0,0,0,88,1,0,0,0,0,90,1,0,0,0,0,92,1,0,0,0,0,94,1,0,0,0,0,96, - 1,0,0,0,0,98,1,0,0,0,0,100,1,0,0,0,0,102,1,0,0,0,0,104,1,0,0,0,0, - 106,1,0,0,0,0,108,1,0,0,0,0,110,1,0,0,0,0,112,1,0,0,0,0,114,1,0, - 0,0,0,116,1,0,0,0,0,118,1,0,0,0,0,120,1,0,0,0,0,122,1,0,0,0,0,124, - 1,0,0,0,0,126,1,0,0,0,0,128,1,0,0,0,0,130,1,0,0,0,0,132,1,0,0,0, - 0,134,1,0,0,0,0,136,1,0,0,0,0,138,1,0,0,0,0,140,1,0,0,0,0,142,1, - 0,0,0,0,144,1,0,0,0,0,146,1,0,0,0,0,148,1,0,0,0,0,150,1,0,0,0,0, - 152,1,0,0,0,0,154,1,0,0,0,0,156,1,0,0,0,0,158,1,0,0,0,0,160,1,0, - 0,0,0,162,1,0,0,0,0,164,1,0,0,0,0,166,1,0,0,0,0,168,1,0,0,0,0,170, - 1,0,0,0,0,172,1,0,0,0,0,174,1,0,0,0,0,176,1,0,0,0,0,178,1,0,0,0, - 0,180,1,0,0,0,0,182,1,0,0,0,0,184,1,0,0,0,0,186,1,0,0,0,0,188,1, - 0,0,0,0,190,1,0,0,0,0,192,1,0,0,0,0,194,1,0,0,0,0,196,1,0,0,0,0, - 198,1,0,0,0,0,200,1,0,0,0,0,202,1,0,0,0,0,204,1,0,0,0,0,206,1,0, - 0,0,0,208,1,0,0,0,0,210,1,0,0,0,0,212,1,0,0,0,0,214,1,0,0,0,0,216, - 1,0,0,0,0,218,1,0,0,0,0,220,1,0,0,0,0,222,1,0,0,0,0,224,1,0,0,0, - 0,226,1,0,0,0,0,228,1,0,0,0,0,230,1,0,0,0,0,232,1,0,0,0,0,234,1, - 0,0,0,0,236,1,0,0,0,0,238,1,0,0,0,0,240,1,0,0,0,0,242,1,0,0,0,0, - 244,1,0,0,0,0,246,1,0,0,0,0,248,1,0,0,0,0,250,1,0,0,0,0,252,1,0, - 0,0,0,254,1,0,0,0,0,256,1,0,0,0,0,258,1,0,0,0,0,320,1,0,0,0,0,322, - 1,0,0,0,0,324,1,0,0,0,0,326,1,0,0,0,0,328,1,0,0,0,0,330,1,0,0,0, - 0,332,1,0,0,0,0,334,1,0,0,0,0,336,1,0,0,0,0,338,1,0,0,0,0,340,1, - 0,0,0,0,342,1,0,0,0,0,344,1,0,0,0,0,346,1,0,0,0,0,348,1,0,0,0,0, - 350,1,0,0,0,0,352,1,0,0,0,0,354,1,0,0,0,0,356,1,0,0,0,0,358,1,0, - 0,0,0,360,1,0,0,0,0,362,1,0,0,0,0,364,1,0,0,0,0,366,1,0,0,0,0,368, - 1,0,0,0,0,370,1,0,0,0,0,372,1,0,0,0,0,374,1,0,0,0,0,376,1,0,0,0, - 0,378,1,0,0,0,0,380,1,0,0,0,0,382,1,0,0,0,0,384,1,0,0,0,0,386,1, - 0,0,0,0,388,1,0,0,0,0,390,1,0,0,0,0,392,1,0,0,0,0,394,1,0,0,0,0, - 396,1,0,0,0,0,398,1,0,0,0,0,400,1,0,0,0,0,402,1,0,0,0,0,404,1,0, - 0,0,0,406,1,0,0,0,0,408,1,0,0,0,0,410,1,0,0,0,0,412,1,0,0,0,0,414, - 1,0,0,0,0,416,1,0,0,0,0,418,1,0,0,0,0,420,1,0,0,0,1,422,1,0,0,0, - 1,424,1,0,0,0,1,426,1,0,0,0,2,428,1,0,0,0,2,430,1,0,0,0,3,432,1, - 0,0,0,3,434,1,0,0,0,3,436,1,0,0,0,3,438,1,0,0,0,3,440,1,0,0,0,3, - 442,1,0,0,0,3,444,1,0,0,0,4,446,1,0,0,0,4,448,1,0,0,0,4,450,1,0, - 0,0,5,452,1,0,0,0,5,454,1,0,0,0,5,456,1,0,0,0,5,458,1,0,0,0,5,460, - 1,0,0,0,6,462,1,0,0,0,8,466,1,0,0,0,10,470,1,0,0,0,12,475,1,0,0, - 0,14,479,1,0,0,0,16,485,1,0,0,0,18,502,1,0,0,0,20,504,1,0,0,0,22, - 509,1,0,0,0,24,517,1,0,0,0,26,522,1,0,0,0,28,525,1,0,0,0,30,530, - 1,0,0,0,32,535,1,0,0,0,34,541,1,0,0,0,36,548,1,0,0,0,38,556,1,0, - 0,0,40,564,1,0,0,0,42,570,1,0,0,0,44,575,1,0,0,0,46,583,1,0,0,0, - 48,588,1,0,0,0,50,592,1,0,0,0,52,597,1,0,0,0,54,608,1,0,0,0,56,617, - 1,0,0,0,58,622,1,0,0,0,60,626,1,0,0,0,62,633,1,0,0,0,64,641,1,0, - 0,0,66,649,1,0,0,0,68,655,1,0,0,0,70,663,1,0,0,0,72,669,1,0,0,0, - 74,672,1,0,0,0,76,682,1,0,0,0,78,686,1,0,0,0,80,691,1,0,0,0,82,696, - 1,0,0,0,84,700,1,0,0,0,86,706,1,0,0,0,88,715,1,0,0,0,90,722,1,0, - 0,0,92,727,1,0,0,0,94,730,1,0,0,0,96,733,1,0,0,0,98,739,1,0,0,0, - 100,755,1,0,0,0,102,757,1,0,0,0,104,763,1,0,0,0,106,773,1,0,0,0, - 108,782,1,0,0,0,110,785,1,0,0,0,112,790,1,0,0,0,114,794,1,0,0,0, - 116,801,1,0,0,0,118,806,1,0,0,0,120,814,1,0,0,0,122,819,1,0,0,0, - 124,823,1,0,0,0,126,828,1,0,0,0,128,834,1,0,0,0,130,847,1,0,0,0, - 132,854,1,0,0,0,134,860,1,0,0,0,136,865,1,0,0,0,138,869,1,0,0,0, - 140,873,1,0,0,0,142,878,1,0,0,0,144,884,1,0,0,0,146,891,1,0,0,0, - 148,894,1,0,0,0,150,897,1,0,0,0,152,903,1,0,0,0,154,909,1,0,0,0, - 156,914,1,0,0,0,158,924,1,0,0,0,160,934,1,0,0,0,162,943,1,0,0,0, - 164,951,1,0,0,0,166,959,1,0,0,0,168,965,1,0,0,0,170,975,1,0,0,0, - 172,983,1,0,0,0,174,990,1,0,0,0,176,996,1,0,0,0,178,1003,1,0,0,0, - 180,1007,1,0,0,0,182,1012,1,0,0,0,184,1019,1,0,0,0,186,1026,1,0, - 0,0,188,1033,1,0,0,0,190,1038,1,0,0,0,192,1043,1,0,0,0,194,1052, - 1,0,0,0,196,1062,1,0,0,0,198,1067,1,0,0,0,200,1073,1,0,0,0,202,1078, - 1,0,0,0,204,1088,1,0,0,0,206,1091,1,0,0,0,208,1095,1,0,0,0,210,1102, - 1,0,0,0,212,1111,1,0,0,0,214,1116,1,0,0,0,216,1125,1,0,0,0,218,1129, - 1,0,0,0,220,1138,1,0,0,0,222,1148,1,0,0,0,224,1154,1,0,0,0,226,1162, - 1,0,0,0,228,1168,1,0,0,0,230,1175,1,0,0,0,232,1180,1,0,0,0,234,1185, - 1,0,0,0,236,1191,1,0,0,0,238,1197,1,0,0,0,240,1204,1,0,0,0,242,1209, - 1,0,0,0,244,1226,1,0,0,0,246,1255,1,0,0,0,248,1303,1,0,0,0,250,1381, - 1,0,0,0,252,1383,1,0,0,0,254,1390,1,0,0,0,256,1394,1,0,0,0,258,1401, - 1,0,0,0,260,1417,1,0,0,0,262,1419,1,0,0,0,264,1421,1,0,0,0,266,1423, - 1,0,0,0,268,1425,1,0,0,0,270,1427,1,0,0,0,272,1429,1,0,0,0,274,1431, - 1,0,0,0,276,1433,1,0,0,0,278,1435,1,0,0,0,280,1437,1,0,0,0,282,1439, - 1,0,0,0,284,1441,1,0,0,0,286,1443,1,0,0,0,288,1445,1,0,0,0,290,1447, - 1,0,0,0,292,1449,1,0,0,0,294,1451,1,0,0,0,296,1453,1,0,0,0,298,1455, - 1,0,0,0,300,1457,1,0,0,0,302,1459,1,0,0,0,304,1461,1,0,0,0,306,1463, - 1,0,0,0,308,1465,1,0,0,0,310,1467,1,0,0,0,312,1469,1,0,0,0,314,1471, - 1,0,0,0,316,1473,1,0,0,0,318,1475,1,0,0,0,320,1477,1,0,0,0,322,1480, - 1,0,0,0,324,1482,1,0,0,0,326,1484,1,0,0,0,328,1486,1,0,0,0,330,1489, - 1,0,0,0,332,1492,1,0,0,0,334,1494,1,0,0,0,336,1496,1,0,0,0,338,1499, - 1,0,0,0,340,1501,1,0,0,0,342,1503,1,0,0,0,344,1505,1,0,0,0,346,1508, - 1,0,0,0,348,1510,1,0,0,0,350,1513,1,0,0,0,352,1515,1,0,0,0,354,1517, - 1,0,0,0,356,1520,1,0,0,0,358,1524,1,0,0,0,360,1528,1,0,0,0,362,1530, - 1,0,0,0,364,1532,1,0,0,0,366,1535,1,0,0,0,368,1541,1,0,0,0,370,1547, - 1,0,0,0,372,1549,1,0,0,0,374,1556,1,0,0,0,376,1558,1,0,0,0,378,1562, - 1,0,0,0,380,1565,1,0,0,0,382,1568,1,0,0,0,384,1571,1,0,0,0,386,1573, - 1,0,0,0,388,1575,1,0,0,0,390,1577,1,0,0,0,392,1579,1,0,0,0,394,1584, - 1,0,0,0,396,1589,1,0,0,0,398,1591,1,0,0,0,400,1593,1,0,0,0,402,1596, - 1,0,0,0,404,1600,1,0,0,0,406,1602,1,0,0,0,408,1604,1,0,0,0,410,1606, - 1,0,0,0,412,1608,1,0,0,0,414,1611,1,0,0,0,416,1613,1,0,0,0,418,1631, - 1,0,0,0,420,1644,1,0,0,0,422,1659,1,0,0,0,424,1663,1,0,0,0,426,1667, - 1,0,0,0,428,1677,1,0,0,0,430,1681,1,0,0,0,432,1685,1,0,0,0,434,1691, - 1,0,0,0,436,1697,1,0,0,0,438,1706,1,0,0,0,440,1710,1,0,0,0,442,1715, - 1,0,0,0,444,1721,1,0,0,0,446,1726,1,0,0,0,448,1731,1,0,0,0,450,1741, - 1,0,0,0,452,1748,1,0,0,0,454,1752,1,0,0,0,456,1757,1,0,0,0,458,1764, - 1,0,0,0,460,1770,1,0,0,0,462,463,3,260,127,0,463,464,3,282,138,0, - 464,465,3,282,138,0,465,7,1,0,0,0,466,467,3,260,127,0,467,468,3, - 286,140,0,468,469,3,266,130,0,469,9,1,0,0,0,470,471,3,260,127,0, - 471,472,3,286,140,0,472,473,3,298,146,0,473,474,3,276,135,0,474, - 11,1,0,0,0,475,476,3,260,127,0,476,477,3,286,140,0,477,478,3,308, - 151,0,478,13,1,0,0,0,479,480,3,260,127,0,480,481,3,294,144,0,481, - 482,3,294,144,0,482,483,3,260,127,0,483,484,3,308,151,0,484,15,1, - 0,0,0,485,486,3,260,127,0,486,487,3,296,145,0,487,17,1,0,0,0,488, - 489,3,260,127,0,489,490,3,296,145,0,490,491,3,264,129,0,491,503, - 1,0,0,0,492,493,3,260,127,0,493,494,3,296,145,0,494,495,3,264,129, - 0,495,496,3,268,131,0,496,497,3,286,140,0,497,498,3,266,130,0,498, - 499,3,276,135,0,499,500,3,286,140,0,500,501,3,272,133,0,501,503, - 1,0,0,0,502,488,1,0,0,0,502,492,1,0,0,0,503,19,1,0,0,0,504,505,3, - 260,127,0,505,506,3,296,145,0,506,507,3,288,141,0,507,508,3,270, - 132,0,508,21,1,0,0,0,509,510,3,262,128,0,510,511,3,268,131,0,511, - 512,3,298,146,0,512,513,3,304,149,0,513,514,3,268,131,0,514,515, - 3,268,131,0,515,516,3,286,140,0,516,23,1,0,0,0,517,518,3,262,128, - 0,518,519,3,288,141,0,519,520,3,298,146,0,520,521,3,274,134,0,521, - 25,1,0,0,0,522,523,3,262,128,0,523,524,3,308,151,0,524,27,1,0,0, - 0,525,526,3,264,129,0,526,527,3,260,127,0,527,528,3,296,145,0,528, - 529,3,268,131,0,529,29,1,0,0,0,530,531,3,264,129,0,531,532,3,260, - 127,0,532,533,3,296,145,0,533,534,3,298,146,0,534,31,1,0,0,0,535, - 536,3,264,129,0,536,537,3,260,127,0,537,538,3,298,146,0,538,539, - 3,264,129,0,539,540,3,274,134,0,540,33,1,0,0,0,541,542,3,264,129, - 0,542,543,3,288,141,0,543,544,3,274,134,0,544,545,3,288,141,0,545, - 546,3,294,144,0,546,547,3,298,146,0,547,35,1,0,0,0,548,549,3,264, - 129,0,549,550,3,288,141,0,550,551,3,282,138,0,551,552,3,282,138, - 0,552,553,3,260,127,0,553,554,3,298,146,0,554,555,3,268,131,0,555, - 37,1,0,0,0,556,557,3,264,129,0,557,558,3,288,141,0,558,559,3,282, - 138,0,559,560,3,300,147,0,560,561,3,284,139,0,561,562,3,286,140, - 0,562,563,3,296,145,0,563,39,1,0,0,0,564,565,3,264,129,0,565,566, - 3,294,144,0,566,567,3,288,141,0,567,568,3,296,145,0,568,569,3,296, - 145,0,569,41,1,0,0,0,570,571,3,264,129,0,571,572,3,300,147,0,572, - 573,3,262,128,0,573,574,3,268,131,0,574,43,1,0,0,0,575,576,3,264, - 129,0,576,577,3,300,147,0,577,578,3,294,144,0,578,579,3,294,144, - 0,579,580,3,268,131,0,580,581,3,286,140,0,581,582,3,298,146,0,582, - 45,1,0,0,0,583,584,3,266,130,0,584,585,3,260,127,0,585,586,3,298, - 146,0,586,587,3,268,131,0,587,47,1,0,0,0,588,589,3,266,130,0,589, - 590,3,260,127,0,590,591,3,308,151,0,591,49,1,0,0,0,592,593,3,266, - 130,0,593,594,3,268,131,0,594,595,3,296,145,0,595,596,3,264,129, - 0,596,51,1,0,0,0,597,598,3,266,130,0,598,599,3,268,131,0,599,600, - 3,296,145,0,600,601,3,264,129,0,601,602,3,268,131,0,602,603,3,286, - 140,0,603,604,3,266,130,0,604,605,3,276,135,0,605,606,3,286,140, - 0,606,607,3,272,133,0,607,53,1,0,0,0,608,609,3,266,130,0,609,610, - 3,276,135,0,610,611,3,296,145,0,611,612,3,298,146,0,612,613,3,276, - 135,0,613,614,3,286,140,0,614,615,3,264,129,0,615,616,3,298,146, - 0,616,55,1,0,0,0,617,618,3,268,131,0,618,619,3,282,138,0,619,620, - 3,296,145,0,620,621,3,268,131,0,621,57,1,0,0,0,622,623,3,268,131, - 0,623,624,3,286,140,0,624,625,3,266,130,0,625,59,1,0,0,0,626,627, - 3,268,131,0,627,628,3,306,150,0,628,629,3,264,129,0,629,630,3,268, - 131,0,630,631,3,290,142,0,631,632,3,298,146,0,632,61,1,0,0,0,633, - 634,3,268,131,0,634,635,3,306,150,0,635,636,3,264,129,0,636,637, - 3,282,138,0,637,638,3,300,147,0,638,639,3,266,130,0,639,640,3,268, - 131,0,640,63,1,0,0,0,641,642,3,268,131,0,642,643,3,306,150,0,643, - 644,3,298,146,0,644,645,3,294,144,0,645,646,3,260,127,0,646,647, - 3,264,129,0,647,648,3,298,146,0,648,65,1,0,0,0,649,650,3,270,132, - 0,650,651,3,276,135,0,651,652,3,286,140,0,652,653,3,260,127,0,653, - 654,3,282,138,0,654,67,1,0,0,0,655,656,3,270,132,0,656,657,3,276, - 135,0,657,658,3,286,140,0,658,659,3,260,127,0,659,660,3,282,138, - 0,660,661,3,282,138,0,661,662,3,308,151,0,662,69,1,0,0,0,663,664, - 3,270,132,0,664,665,3,276,135,0,665,666,3,294,144,0,666,667,3,296, - 145,0,667,668,3,298,146,0,668,71,1,0,0,0,669,670,3,270,132,0,670, - 671,3,286,140,0,671,73,1,0,0,0,672,673,3,270,132,0,673,674,3,288, - 141,0,674,675,3,282,138,0,675,676,3,282,138,0,676,677,3,288,141, - 0,677,678,3,304,149,0,678,679,3,276,135,0,679,680,3,286,140,0,680, - 681,3,272,133,0,681,75,1,0,0,0,682,683,3,270,132,0,683,684,3,288, - 141,0,684,685,3,294,144,0,685,77,1,0,0,0,686,687,3,270,132,0,687, - 688,3,294,144,0,688,689,3,288,141,0,689,690,3,284,139,0,690,79,1, - 0,0,0,691,692,3,270,132,0,692,693,3,300,147,0,693,694,3,282,138, - 0,694,695,3,282,138,0,695,81,1,0,0,0,696,697,3,270,132,0,697,698, - 3,300,147,0,698,699,3,286,140,0,699,83,1,0,0,0,700,701,3,272,133, - 0,701,702,3,294,144,0,702,703,3,288,141,0,703,704,3,300,147,0,704, - 705,3,290,142,0,705,85,1,0,0,0,706,707,3,272,133,0,707,708,3,294, - 144,0,708,709,3,288,141,0,709,710,3,300,147,0,710,711,3,290,142, - 0,711,712,3,276,135,0,712,713,3,286,140,0,713,714,3,272,133,0,714, - 87,1,0,0,0,715,716,3,274,134,0,716,717,3,260,127,0,717,718,3,302, - 148,0,718,719,3,276,135,0,719,720,3,286,140,0,720,721,3,272,133, - 0,721,89,1,0,0,0,722,723,3,274,134,0,723,724,3,288,141,0,724,725, - 3,300,147,0,725,726,3,294,144,0,726,91,1,0,0,0,727,728,3,276,135, - 0,728,729,3,266,130,0,729,93,1,0,0,0,730,731,3,276,135,0,731,732, - 3,270,132,0,732,95,1,0,0,0,733,734,3,276,135,0,734,735,3,282,138, - 0,735,736,3,276,135,0,736,737,3,280,137,0,737,738,3,268,131,0,738, - 97,1,0,0,0,739,740,3,276,135,0,740,741,3,286,140,0,741,99,1,0,0, - 0,742,743,3,276,135,0,743,744,3,286,140,0,744,745,3,270,132,0,745, - 756,1,0,0,0,746,747,3,276,135,0,747,748,3,286,140,0,748,749,3,270, - 132,0,749,750,3,276,135,0,750,751,3,286,140,0,751,752,3,276,135, - 0,752,753,3,298,146,0,753,754,3,308,151,0,754,756,1,0,0,0,755,742, - 1,0,0,0,755,746,1,0,0,0,756,101,1,0,0,0,757,758,3,276,135,0,758, - 759,3,286,140,0,759,760,3,286,140,0,760,761,3,268,131,0,761,762, - 3,294,144,0,762,103,1,0,0,0,763,764,3,276,135,0,764,765,3,286,140, - 0,765,766,3,298,146,0,766,767,3,268,131,0,767,768,3,294,144,0,768, - 769,3,296,145,0,769,770,3,268,131,0,770,771,3,264,129,0,771,772, - 3,298,146,0,772,105,1,0,0,0,773,774,3,276,135,0,774,775,3,286,140, - 0,775,776,3,298,146,0,776,777,3,268,131,0,777,778,3,294,144,0,778, - 779,3,302,148,0,779,780,3,260,127,0,780,781,3,282,138,0,781,107, - 1,0,0,0,782,783,3,276,135,0,783,784,3,296,145,0,784,109,1,0,0,0, - 785,786,3,278,136,0,786,787,3,288,141,0,787,788,3,276,135,0,788, - 789,3,286,140,0,789,111,1,0,0,0,790,791,3,280,137,0,791,792,3,268, - 131,0,792,793,3,308,151,0,793,113,1,0,0,0,794,795,3,282,138,0,795, - 796,3,260,127,0,796,797,3,284,139,0,797,798,3,262,128,0,798,799, - 3,266,130,0,799,800,3,260,127,0,800,115,1,0,0,0,801,802,3,282,138, - 0,802,803,3,260,127,0,803,804,3,296,145,0,804,805,3,298,146,0,805, - 117,1,0,0,0,806,807,3,282,138,0,807,808,3,268,131,0,808,809,3,260, - 127,0,809,810,3,266,130,0,810,811,3,276,135,0,811,812,3,286,140, - 0,812,813,3,272,133,0,813,119,1,0,0,0,814,815,3,282,138,0,815,816, - 3,268,131,0,816,817,3,270,132,0,817,818,3,298,146,0,818,121,1,0, - 0,0,819,820,3,282,138,0,820,821,3,268,131,0,821,822,3,298,146,0, - 822,123,1,0,0,0,823,824,3,282,138,0,824,825,3,276,135,0,825,826, - 3,280,137,0,826,827,3,268,131,0,827,125,1,0,0,0,828,829,3,282,138, - 0,829,830,3,276,135,0,830,831,3,284,139,0,831,832,3,276,135,0,832, - 833,3,298,146,0,833,127,1,0,0,0,834,835,3,284,139,0,835,836,3,260, - 127,0,836,837,3,298,146,0,837,838,3,268,131,0,838,839,3,294,144, - 0,839,840,3,276,135,0,840,841,3,260,127,0,841,842,3,282,138,0,842, - 843,3,276,135,0,843,844,3,310,152,0,844,845,3,268,131,0,845,846, - 3,266,130,0,846,129,1,0,0,0,847,848,3,284,139,0,848,849,3,276,135, - 0,849,850,3,286,140,0,850,851,3,300,147,0,851,852,3,298,146,0,852, - 853,3,268,131,0,853,131,1,0,0,0,854,855,3,284,139,0,855,856,3,288, - 141,0,856,857,3,286,140,0,857,858,3,298,146,0,858,859,3,274,134, - 0,859,133,1,0,0,0,860,861,3,286,140,0,861,862,3,260,127,0,862,863, - 3,284,139,0,863,864,3,268,131,0,864,135,1,0,0,0,865,866,3,286,140, - 0,866,867,3,260,127,0,867,868,3,286,140,0,868,137,1,0,0,0,869,870, - 3,286,140,0,870,871,3,288,141,0,871,872,3,298,146,0,872,139,1,0, - 0,0,873,874,3,286,140,0,874,875,3,300,147,0,875,876,3,282,138,0, - 876,877,3,282,138,0,877,141,1,0,0,0,878,879,3,286,140,0,879,880, - 3,300,147,0,880,881,3,282,138,0,881,882,3,282,138,0,882,883,3,296, - 145,0,883,143,1,0,0,0,884,885,3,288,141,0,885,886,3,270,132,0,886, - 887,3,270,132,0,887,888,3,296,145,0,888,889,3,268,131,0,889,890, - 3,298,146,0,890,145,1,0,0,0,891,892,3,288,141,0,892,893,3,286,140, - 0,893,147,1,0,0,0,894,895,3,288,141,0,895,896,3,294,144,0,896,149, - 1,0,0,0,897,898,3,288,141,0,898,899,3,294,144,0,899,900,3,266,130, - 0,900,901,3,268,131,0,901,902,3,294,144,0,902,151,1,0,0,0,903,904, - 3,288,141,0,904,905,3,300,147,0,905,906,3,298,146,0,906,907,3,268, - 131,0,907,908,3,294,144,0,908,153,1,0,0,0,909,910,3,288,141,0,910, - 911,3,302,148,0,911,912,3,268,131,0,912,913,3,294,144,0,913,155, - 1,0,0,0,914,915,3,290,142,0,915,916,3,260,127,0,916,917,3,294,144, - 0,917,918,3,298,146,0,918,919,3,276,135,0,919,920,3,298,146,0,920, - 921,3,276,135,0,921,922,3,288,141,0,922,923,3,286,140,0,923,157, - 1,0,0,0,924,925,3,290,142,0,925,926,3,294,144,0,926,927,3,268,131, - 0,927,928,3,264,129,0,928,929,3,268,131,0,929,930,3,266,130,0,930, - 931,3,276,135,0,931,932,3,286,140,0,932,933,3,272,133,0,933,159, - 1,0,0,0,934,935,3,290,142,0,935,936,3,294,144,0,936,937,3,268,131, - 0,937,938,3,304,149,0,938,939,3,274,134,0,939,940,3,268,131,0,940, - 941,3,294,144,0,941,942,3,268,131,0,942,161,1,0,0,0,943,944,3,292, - 143,0,944,945,3,300,147,0,945,946,3,260,127,0,946,947,3,282,138, - 0,947,948,3,276,135,0,948,949,3,270,132,0,949,950,3,308,151,0,950, - 163,1,0,0,0,951,952,3,292,143,0,952,953,3,300,147,0,953,954,3,260, - 127,0,954,955,3,294,144,0,955,956,3,298,146,0,956,957,3,268,131, - 0,957,958,3,294,144,0,958,165,1,0,0,0,959,960,3,294,144,0,960,961, - 3,260,127,0,961,962,3,286,140,0,962,963,3,272,133,0,963,964,3,268, - 131,0,964,167,1,0,0,0,965,966,3,294,144,0,966,967,3,268,131,0,967, - 968,3,264,129,0,968,969,3,300,147,0,969,970,3,294,144,0,970,971, - 3,296,145,0,971,972,3,276,135,0,972,973,3,302,148,0,973,974,3,268, - 131,0,974,169,1,0,0,0,975,976,3,294,144,0,976,977,3,268,131,0,977, - 978,3,290,142,0,978,979,3,282,138,0,979,980,3,260,127,0,980,981, - 3,264,129,0,981,982,3,268,131,0,982,171,1,0,0,0,983,984,3,294,144, - 0,984,985,3,268,131,0,985,986,3,298,146,0,986,987,3,300,147,0,987, - 988,3,294,144,0,988,989,3,286,140,0,989,173,1,0,0,0,990,991,3,294, - 144,0,991,992,3,276,135,0,992,993,3,272,133,0,993,994,3,274,134, - 0,994,995,3,298,146,0,995,175,1,0,0,0,996,997,3,294,144,0,997,998, - 3,288,141,0,998,999,3,282,138,0,999,1000,3,282,138,0,1000,1001,3, - 300,147,0,1001,1002,3,290,142,0,1002,177,1,0,0,0,1003,1004,3,294, - 144,0,1004,1005,3,288,141,0,1005,1006,3,304,149,0,1006,179,1,0,0, - 0,1007,1008,3,294,144,0,1008,1009,3,288,141,0,1009,1010,3,304,149, - 0,1010,1011,3,296,145,0,1011,181,1,0,0,0,1012,1013,3,296,145,0,1013, - 1014,3,260,127,0,1014,1015,3,284,139,0,1015,1016,3,290,142,0,1016, - 1017,3,282,138,0,1017,1018,3,268,131,0,1018,183,1,0,0,0,1019,1020, - 3,296,145,0,1020,1021,3,268,131,0,1021,1022,3,264,129,0,1022,1023, - 3,288,141,0,1023,1024,3,286,140,0,1024,1025,3,266,130,0,1025,185, - 1,0,0,0,1026,1027,3,296,145,0,1027,1028,3,268,131,0,1028,1029,3, - 282,138,0,1029,1030,3,268,131,0,1030,1031,3,264,129,0,1031,1032, - 3,298,146,0,1032,187,1,0,0,0,1033,1034,3,296,145,0,1034,1035,3,268, - 131,0,1035,1036,3,284,139,0,1036,1037,3,276,135,0,1037,189,1,0,0, - 0,1038,1039,3,296,145,0,1039,1040,3,268,131,0,1040,1041,3,298,146, - 0,1041,1042,3,296,145,0,1042,191,1,0,0,0,1043,1044,3,296,145,0,1044, - 1045,3,268,131,0,1045,1046,3,298,146,0,1046,1047,3,298,146,0,1047, - 1048,3,276,135,0,1048,1049,3,286,140,0,1049,1050,3,272,133,0,1050, - 1051,3,296,145,0,1051,193,1,0,0,0,1052,1053,3,296,145,0,1053,1054, - 3,300,147,0,1054,1055,3,262,128,0,1055,1056,3,296,145,0,1056,1057, - 3,298,146,0,1057,1058,3,294,144,0,1058,1059,3,276,135,0,1059,1060, - 3,286,140,0,1060,1061,3,272,133,0,1061,195,1,0,0,0,1062,1063,3,298, - 146,0,1063,1064,3,274,134,0,1064,1065,3,268,131,0,1065,1066,3,286, - 140,0,1066,197,1,0,0,0,1067,1068,3,298,146,0,1068,1069,3,274,134, - 0,1069,1070,3,294,144,0,1070,1071,3,288,141,0,1071,1072,3,304,149, - 0,1072,199,1,0,0,0,1073,1074,3,298,146,0,1074,1075,3,276,135,0,1075, - 1076,3,268,131,0,1076,1077,3,296,145,0,1077,201,1,0,0,0,1078,1079, - 3,298,146,0,1079,1080,3,276,135,0,1080,1081,3,284,139,0,1081,1082, - 3,268,131,0,1082,1083,3,296,145,0,1083,1084,3,298,146,0,1084,1085, - 3,260,127,0,1085,1086,3,284,139,0,1086,1087,3,290,142,0,1087,203, - 1,0,0,0,1088,1089,3,298,146,0,1089,1090,3,288,141,0,1090,205,1,0, - 0,0,1091,1092,3,298,146,0,1092,1093,3,288,141,0,1093,1094,3,290, - 142,0,1094,207,1,0,0,0,1095,1096,3,298,146,0,1096,1097,3,288,141, - 0,1097,1098,3,298,146,0,1098,1099,3,260,127,0,1099,1100,3,282,138, - 0,1100,1101,3,296,145,0,1101,209,1,0,0,0,1102,1103,3,298,146,0,1103, - 1104,3,294,144,0,1104,1105,3,260,127,0,1105,1106,3,276,135,0,1106, - 1107,3,282,138,0,1107,1108,3,276,135,0,1108,1109,3,286,140,0,1109, - 1110,3,272,133,0,1110,211,1,0,0,0,1111,1112,3,298,146,0,1112,1113, - 3,294,144,0,1113,1114,3,276,135,0,1114,1115,3,284,139,0,1115,213, - 1,0,0,0,1116,1117,3,298,146,0,1117,1118,3,294,144,0,1118,1119,3, - 300,147,0,1119,1120,3,286,140,0,1120,1121,3,264,129,0,1121,1122, - 3,260,127,0,1122,1123,3,298,146,0,1123,1124,3,268,131,0,1124,215, - 1,0,0,0,1125,1126,3,298,146,0,1126,1127,3,294,144,0,1127,1128,3, - 308,151,0,1128,217,1,0,0,0,1129,1130,3,298,146,0,1130,1131,3,294, - 144,0,1131,1132,3,308,151,0,1132,1133,5,95,0,0,1133,1134,3,264,129, - 0,1134,1135,3,260,127,0,1135,1136,3,296,145,0,1136,1137,3,298,146, - 0,1137,219,1,0,0,0,1138,1139,3,300,147,0,1139,1140,3,286,140,0,1140, - 1141,3,262,128,0,1141,1142,3,288,141,0,1142,1143,3,300,147,0,1143, - 1144,3,286,140,0,1144,1145,3,266,130,0,1145,1146,3,268,131,0,1146, - 1147,3,266,130,0,1147,221,1,0,0,0,1148,1149,3,300,147,0,1149,1150, - 3,286,140,0,1150,1151,3,276,135,0,1151,1152,3,288,141,0,1152,1153, - 3,286,140,0,1153,223,1,0,0,0,1154,1155,3,300,147,0,1155,1156,3,286, - 140,0,1156,1157,3,290,142,0,1157,1158,3,276,135,0,1158,1159,3,302, - 148,0,1159,1160,3,288,141,0,1160,1161,3,298,146,0,1161,225,1,0,0, - 0,1162,1163,3,300,147,0,1163,1164,3,296,145,0,1164,1165,3,276,135, - 0,1165,1166,3,286,140,0,1166,1167,3,272,133,0,1167,227,1,0,0,0,1168, - 1169,3,302,148,0,1169,1170,3,260,127,0,1170,1171,3,282,138,0,1171, - 1172,3,300,147,0,1172,1173,3,268,131,0,1173,1174,3,296,145,0,1174, - 229,1,0,0,0,1175,1176,3,304,149,0,1176,1177,3,268,131,0,1177,1178, - 3,268,131,0,1178,1179,3,280,137,0,1179,231,1,0,0,0,1180,1181,3,304, - 149,0,1181,1182,3,274,134,0,1182,1183,3,268,131,0,1183,1184,3,286, - 140,0,1184,233,1,0,0,0,1185,1186,3,304,149,0,1186,1187,3,274,134, - 0,1187,1188,3,268,131,0,1188,1189,3,294,144,0,1189,1190,3,268,131, - 0,1190,235,1,0,0,0,1191,1192,3,304,149,0,1192,1193,3,274,134,0,1193, - 1194,3,276,135,0,1194,1195,3,282,138,0,1195,1196,3,268,131,0,1196, - 237,1,0,0,0,1197,1198,3,304,149,0,1198,1199,3,276,135,0,1199,1200, - 3,286,140,0,1200,1201,3,266,130,0,1201,1202,3,288,141,0,1202,1203, - 3,304,149,0,1203,239,1,0,0,0,1204,1205,3,304,149,0,1205,1206,3,276, - 135,0,1206,1207,3,298,146,0,1207,1208,3,274,134,0,1208,241,1,0,0, - 0,1209,1210,3,304,149,0,1210,1211,3,276,135,0,1211,1212,3,298,146, - 0,1212,1213,3,274,134,0,1213,1214,3,276,135,0,1214,1215,3,286,140, - 0,1215,243,1,0,0,0,1216,1217,3,308,151,0,1217,1218,3,268,131,0,1218, - 1219,3,260,127,0,1219,1220,3,294,144,0,1220,1227,1,0,0,0,1221,1222, - 3,308,151,0,1222,1223,3,308,151,0,1223,1224,3,308,151,0,1224,1225, - 3,308,151,0,1225,1227,1,0,0,0,1226,1216,1,0,0,0,1226,1221,1,0,0, - 0,1227,245,1,0,0,0,1228,1229,3,326,160,0,1229,1230,3,262,128,0,1230, - 1256,1,0,0,0,1231,1232,3,326,160,0,1232,1233,3,270,132,0,1233,1256, - 1,0,0,0,1234,1235,3,326,160,0,1235,1236,3,294,144,0,1236,1256,1, - 0,0,0,1237,1238,3,326,160,0,1238,1239,3,286,140,0,1239,1256,1,0, - 0,0,1240,1241,3,326,160,0,1241,1242,3,298,146,0,1242,1256,1,0,0, - 0,1243,1244,3,326,160,0,1244,1245,5,48,0,0,1245,1256,1,0,0,0,1246, - 1247,3,326,160,0,1247,1248,3,260,127,0,1248,1256,1,0,0,0,1249,1250, - 3,326,160,0,1250,1251,3,302,148,0,1251,1256,1,0,0,0,1252,1253,3, - 326,160,0,1253,1254,3,326,160,0,1254,1256,1,0,0,0,1255,1228,1,0, - 0,0,1255,1231,1,0,0,0,1255,1234,1,0,0,0,1255,1237,1,0,0,0,1255,1240, - 1,0,0,0,1255,1243,1,0,0,0,1255,1246,1,0,0,0,1255,1249,1,0,0,0,1255, - 1252,1,0,0,0,1256,247,1,0,0,0,1257,1261,3,312,153,0,1258,1261,3, - 414,204,0,1259,1261,3,340,167,0,1260,1257,1,0,0,0,1260,1258,1,0, - 0,0,1260,1259,1,0,0,0,1261,1268,1,0,0,0,1262,1267,3,312,153,0,1263, - 1267,3,414,204,0,1264,1267,3,316,155,0,1265,1267,3,340,167,0,1266, - 1262,1,0,0,0,1266,1263,1,0,0,0,1266,1264,1,0,0,0,1266,1265,1,0,0, - 0,1267,1270,1,0,0,0,1268,1266,1,0,0,0,1268,1269,1,0,0,0,1269,1304, - 1,0,0,0,1270,1268,1,0,0,0,1271,1282,3,324,159,0,1272,1281,8,0,0, - 0,1273,1281,3,246,120,0,1274,1275,3,326,160,0,1275,1276,3,396,195, - 0,1276,1281,1,0,0,0,1277,1278,3,324,159,0,1278,1279,3,324,159,0, - 1279,1281,1,0,0,0,1280,1272,1,0,0,0,1280,1273,1,0,0,0,1280,1274, - 1,0,0,0,1280,1277,1,0,0,0,1281,1284,1,0,0,0,1282,1280,1,0,0,0,1282, - 1283,1,0,0,0,1283,1285,1,0,0,0,1284,1282,1,0,0,0,1285,1286,3,324, - 159,0,1286,1304,1,0,0,0,1287,1298,3,390,192,0,1288,1297,8,1,0,0, - 1289,1297,3,246,120,0,1290,1291,3,326,160,0,1291,1292,3,390,192, - 0,1292,1297,1,0,0,0,1293,1294,3,390,192,0,1294,1295,3,390,192,0, - 1295,1297,1,0,0,0,1296,1288,1,0,0,0,1296,1289,1,0,0,0,1296,1290, - 1,0,0,0,1296,1293,1,0,0,0,1297,1300,1,0,0,0,1298,1296,1,0,0,0,1298, - 1299,1,0,0,0,1299,1301,1,0,0,0,1300,1298,1,0,0,0,1301,1302,3,390, - 192,0,1302,1304,1,0,0,0,1303,1260,1,0,0,0,1303,1271,1,0,0,0,1303, - 1287,1,0,0,0,1304,249,1,0,0,0,1305,1306,3,256,125,0,1306,1310,3, - 342,168,0,1307,1309,3,318,156,0,1308,1307,1,0,0,0,1309,1312,1,0, - 0,0,1310,1308,1,0,0,0,1310,1311,1,0,0,0,1311,1315,1,0,0,0,1312,1310, - 1,0,0,0,1313,1316,3,290,142,0,1314,1316,3,268,131,0,1315,1313,1, - 0,0,0,1315,1314,1,0,0,0,1316,1319,1,0,0,0,1317,1320,3,386,190,0, - 1318,1320,3,338,166,0,1319,1317,1,0,0,0,1319,1318,1,0,0,0,1319,1320, - 1,0,0,0,1320,1322,1,0,0,0,1321,1323,3,316,155,0,1322,1321,1,0,0, - 0,1323,1324,1,0,0,0,1324,1322,1,0,0,0,1324,1325,1,0,0,0,1325,1382, - 1,0,0,0,1326,1329,3,256,125,0,1327,1330,3,290,142,0,1328,1330,3, - 268,131,0,1329,1327,1,0,0,0,1329,1328,1,0,0,0,1330,1333,1,0,0,0, - 1331,1334,3,386,190,0,1332,1334,3,338,166,0,1333,1331,1,0,0,0,1333, - 1332,1,0,0,0,1333,1334,1,0,0,0,1334,1336,1,0,0,0,1335,1337,3,316, - 155,0,1336,1335,1,0,0,0,1337,1338,1,0,0,0,1338,1336,1,0,0,0,1338, - 1339,1,0,0,0,1339,1382,1,0,0,0,1340,1341,3,254,124,0,1341,1345,3, - 342,168,0,1342,1344,3,316,155,0,1343,1342,1,0,0,0,1344,1347,1,0, - 0,0,1345,1343,1,0,0,0,1345,1346,1,0,0,0,1346,1348,1,0,0,0,1347,1345, - 1,0,0,0,1348,1351,3,268,131,0,1349,1352,3,386,190,0,1350,1352,3, - 338,166,0,1351,1349,1,0,0,0,1351,1350,1,0,0,0,1351,1352,1,0,0,0, - 1352,1354,1,0,0,0,1353,1355,3,316,155,0,1354,1353,1,0,0,0,1355,1356, - 1,0,0,0,1356,1354,1,0,0,0,1356,1357,1,0,0,0,1357,1382,1,0,0,0,1358, - 1359,3,342,168,0,1359,1360,3,254,124,0,1360,1363,3,268,131,0,1361, - 1364,3,386,190,0,1362,1364,3,338,166,0,1363,1361,1,0,0,0,1363,1362, - 1,0,0,0,1363,1364,1,0,0,0,1364,1366,1,0,0,0,1365,1367,3,316,155, - 0,1366,1365,1,0,0,0,1367,1368,1,0,0,0,1368,1366,1,0,0,0,1368,1369, - 1,0,0,0,1369,1382,1,0,0,0,1370,1371,3,254,124,0,1371,1374,3,268, - 131,0,1372,1375,3,386,190,0,1373,1375,3,338,166,0,1374,1372,1,0, - 0,0,1374,1373,1,0,0,0,1374,1375,1,0,0,0,1375,1377,1,0,0,0,1376,1378, - 3,316,155,0,1377,1376,1,0,0,0,1378,1379,1,0,0,0,1379,1377,1,0,0, - 0,1379,1380,1,0,0,0,1380,1382,1,0,0,0,1381,1305,1,0,0,0,1381,1326, - 1,0,0,0,1381,1340,1,0,0,0,1381,1358,1,0,0,0,1381,1370,1,0,0,0,1382, - 251,1,0,0,0,1383,1385,5,48,0,0,1384,1386,3,314,154,0,1385,1384,1, - 0,0,0,1386,1387,1,0,0,0,1387,1385,1,0,0,0,1387,1388,1,0,0,0,1388, - 253,1,0,0,0,1389,1391,3,316,155,0,1390,1389,1,0,0,0,1391,1392,1, - 0,0,0,1392,1390,1,0,0,0,1392,1393,1,0,0,0,1393,255,1,0,0,0,1394, - 1395,5,48,0,0,1395,1397,3,306,150,0,1396,1398,3,318,156,0,1397,1396, - 1,0,0,0,1398,1399,1,0,0,0,1399,1397,1,0,0,0,1399,1400,1,0,0,0,1400, - 257,1,0,0,0,1401,1412,3,396,195,0,1402,1411,8,2,0,0,1403,1411,3, - 246,120,0,1404,1405,3,326,160,0,1405,1406,3,396,195,0,1406,1411, - 1,0,0,0,1407,1408,3,396,195,0,1408,1409,3,396,195,0,1409,1411,1, - 0,0,0,1410,1402,1,0,0,0,1410,1403,1,0,0,0,1410,1404,1,0,0,0,1410, - 1407,1,0,0,0,1411,1414,1,0,0,0,1412,1410,1,0,0,0,1412,1413,1,0,0, - 0,1413,1415,1,0,0,0,1414,1412,1,0,0,0,1415,1416,3,396,195,0,1416, - 259,1,0,0,0,1417,1418,7,3,0,0,1418,261,1,0,0,0,1419,1420,7,4,0,0, - 1420,263,1,0,0,0,1421,1422,7,5,0,0,1422,265,1,0,0,0,1423,1424,7, - 6,0,0,1424,267,1,0,0,0,1425,1426,7,7,0,0,1426,269,1,0,0,0,1427,1428, - 7,8,0,0,1428,271,1,0,0,0,1429,1430,7,9,0,0,1430,273,1,0,0,0,1431, - 1432,7,10,0,0,1432,275,1,0,0,0,1433,1434,7,11,0,0,1434,277,1,0,0, - 0,1435,1436,7,12,0,0,1436,279,1,0,0,0,1437,1438,7,13,0,0,1438,281, - 1,0,0,0,1439,1440,7,14,0,0,1440,283,1,0,0,0,1441,1442,7,15,0,0,1442, - 285,1,0,0,0,1443,1444,7,16,0,0,1444,287,1,0,0,0,1445,1446,7,17,0, - 0,1446,289,1,0,0,0,1447,1448,7,18,0,0,1448,291,1,0,0,0,1449,1450, - 7,19,0,0,1450,293,1,0,0,0,1451,1452,7,20,0,0,1452,295,1,0,0,0,1453, - 1454,7,21,0,0,1454,297,1,0,0,0,1455,1456,7,22,0,0,1456,299,1,0,0, - 0,1457,1458,7,23,0,0,1458,301,1,0,0,0,1459,1460,7,24,0,0,1460,303, - 1,0,0,0,1461,1462,7,25,0,0,1462,305,1,0,0,0,1463,1464,7,26,0,0,1464, - 307,1,0,0,0,1465,1466,7,27,0,0,1466,309,1,0,0,0,1467,1468,7,28,0, - 0,1468,311,1,0,0,0,1469,1470,7,29,0,0,1470,313,1,0,0,0,1471,1472, - 7,30,0,0,1472,315,1,0,0,0,1473,1474,7,31,0,0,1474,317,1,0,0,0,1475, - 1476,7,32,0,0,1476,319,1,0,0,0,1477,1478,5,45,0,0,1478,1479,5,62, - 0,0,1479,321,1,0,0,0,1480,1481,5,42,0,0,1481,323,1,0,0,0,1482,1483, - 5,96,0,0,1483,325,1,0,0,0,1484,1485,5,92,0,0,1485,327,1,0,0,0,1486, - 1487,5,58,0,0,1487,1488,5,58,0,0,1488,329,1,0,0,0,1489,1490,5,58, - 0,0,1490,1491,5,61,0,0,1491,331,1,0,0,0,1492,1493,5,58,0,0,1493, - 333,1,0,0,0,1494,1495,5,44,0,0,1495,335,1,0,0,0,1496,1497,5,124, - 0,0,1497,1498,5,124,0,0,1498,337,1,0,0,0,1499,1500,5,45,0,0,1500, - 339,1,0,0,0,1501,1502,5,36,0,0,1502,341,1,0,0,0,1503,1504,5,46,0, - 0,1504,343,1,0,0,0,1505,1506,5,61,0,0,1506,1507,5,61,0,0,1507,345, - 1,0,0,0,1508,1509,5,61,0,0,1509,347,1,0,0,0,1510,1511,5,62,0,0,1511, - 1512,5,61,0,0,1512,349,1,0,0,0,1513,1514,5,62,0,0,1514,351,1,0,0, - 0,1515,1516,5,35,0,0,1516,353,1,0,0,0,1517,1518,5,126,0,0,1518,1519, - 5,42,0,0,1519,355,1,0,0,0,1520,1521,5,61,0,0,1521,1522,5,126,0,0, - 1522,1523,5,42,0,0,1523,357,1,0,0,0,1524,1525,5,123,0,0,1525,1526, - 1,0,0,0,1526,1527,6,176,0,0,1527,359,1,0,0,0,1528,1529,5,91,0,0, - 1529,361,1,0,0,0,1530,1531,5,40,0,0,1531,363,1,0,0,0,1532,1533,5, - 60,0,0,1533,1534,5,61,0,0,1534,365,1,0,0,0,1535,1536,5,60,0,0,1536, - 1537,5,47,0,0,1537,1538,1,0,0,0,1538,1539,6,180,1,0,1539,1540,6, - 180,2,0,1540,367,1,0,0,0,1541,1542,5,60,0,0,1542,1543,4,181,0,0, - 1543,1544,1,0,0,0,1544,1545,6,181,3,0,1545,1546,6,181,4,0,1546,369, - 1,0,0,0,1547,1548,5,60,0,0,1548,371,1,0,0,0,1549,1550,5,60,0,0,1550, - 1551,5,47,0,0,1551,373,1,0,0,0,1552,1553,5,33,0,0,1553,1557,5,61, - 0,0,1554,1555,5,60,0,0,1555,1557,5,62,0,0,1556,1552,1,0,0,0,1556, - 1554,1,0,0,0,1557,375,1,0,0,0,1558,1559,5,33,0,0,1559,1560,5,126, - 0,0,1560,1561,5,42,0,0,1561,377,1,0,0,0,1562,1563,5,33,0,0,1563, - 1564,5,126,0,0,1564,379,1,0,0,0,1565,1566,5,63,0,0,1566,1567,5,46, - 0,0,1567,381,1,0,0,0,1568,1569,5,63,0,0,1569,1570,5,63,0,0,1570, - 383,1,0,0,0,1571,1572,5,37,0,0,1572,385,1,0,0,0,1573,1574,5,43,0, - 0,1574,387,1,0,0,0,1575,1576,5,63,0,0,1576,389,1,0,0,0,1577,1578, - 5,34,0,0,1578,391,1,0,0,0,1579,1580,5,102,0,0,1580,1581,5,39,0,0, - 1581,1582,1,0,0,0,1582,1583,6,193,5,0,1583,393,1,0,0,0,1584,1585, - 5,70,0,0,1585,1586,5,39,0,0,1586,1587,1,0,0,0,1587,1588,6,194,6, - 0,1588,395,1,0,0,0,1589,1590,5,39,0,0,1590,397,1,0,0,0,1591,1592, - 5,126,0,0,1592,399,1,0,0,0,1593,1594,5,61,0,0,1594,1595,5,126,0, - 0,1595,401,1,0,0,0,1596,1597,5,125,0,0,1597,1598,1,0,0,0,1598,1599, - 6,198,7,0,1599,403,1,0,0,0,1600,1601,5,93,0,0,1601,405,1,0,0,0,1602, - 1603,5,41,0,0,1603,407,1,0,0,0,1604,1605,5,59,0,0,1605,409,1,0,0, - 0,1606,1607,5,47,0,0,1607,411,1,0,0,0,1608,1609,5,47,0,0,1609,1610, - 5,62,0,0,1610,413,1,0,0,0,1611,1612,5,95,0,0,1612,415,1,0,0,0,1613, - 1614,5,47,0,0,1614,1615,5,42,0,0,1615,1619,1,0,0,0,1616,1618,9,0, - 0,0,1617,1616,1,0,0,0,1618,1621,1,0,0,0,1619,1620,1,0,0,0,1619,1617, - 1,0,0,0,1620,1622,1,0,0,0,1621,1619,1,0,0,0,1622,1623,5,42,0,0,1623, - 1624,5,47,0,0,1624,1625,1,0,0,0,1625,1626,6,205,8,0,1626,417,1,0, - 0,0,1627,1628,5,45,0,0,1628,1632,5,45,0,0,1629,1630,5,47,0,0,1630, - 1632,5,47,0,0,1631,1627,1,0,0,0,1631,1629,1,0,0,0,1632,1636,1,0, - 0,0,1633,1635,8,33,0,0,1634,1633,1,0,0,0,1635,1638,1,0,0,0,1636, - 1634,1,0,0,0,1636,1637,1,0,0,0,1637,1640,1,0,0,0,1638,1636,1,0,0, - 0,1639,1641,7,34,0,0,1640,1639,1,0,0,0,1641,1642,1,0,0,0,1642,1643, - 6,206,8,0,1643,419,1,0,0,0,1644,1645,7,35,0,0,1645,1646,1,0,0,0, - 1646,1647,6,207,9,0,1647,421,1,0,0,0,1648,1660,8,36,0,0,1649,1660, - 3,246,120,0,1650,1651,3,326,160,0,1651,1652,3,396,195,0,1652,1660, - 1,0,0,0,1653,1654,3,326,160,0,1654,1655,3,358,176,0,1655,1660,1, - 0,0,0,1656,1657,3,396,195,0,1657,1658,3,396,195,0,1658,1660,1,0, - 0,0,1659,1648,1,0,0,0,1659,1649,1,0,0,0,1659,1650,1,0,0,0,1659,1653, - 1,0,0,0,1659,1656,1,0,0,0,1660,1661,1,0,0,0,1661,1659,1,0,0,0,1661, - 1662,1,0,0,0,1662,423,1,0,0,0,1663,1664,3,358,176,0,1664,1665,1, - 0,0,0,1665,1666,6,209,0,0,1666,425,1,0,0,0,1667,1668,3,396,195,0, - 1668,1669,1,0,0,0,1669,1670,6,210,10,0,1670,1671,6,210,7,0,1671, - 427,1,0,0,0,1672,1678,8,37,0,0,1673,1678,3,246,120,0,1674,1675,3, - 326,160,0,1675,1676,3,358,176,0,1676,1678,1,0,0,0,1677,1672,1,0, - 0,0,1677,1673,1,0,0,0,1677,1674,1,0,0,0,1678,1679,1,0,0,0,1679,1677, - 1,0,0,0,1679,1680,1,0,0,0,1680,429,1,0,0,0,1681,1682,3,358,176,0, - 1682,1683,1,0,0,0,1683,1684,6,212,0,0,1684,431,1,0,0,0,1685,1686, - 5,47,0,0,1686,1687,5,62,0,0,1687,1688,1,0,0,0,1688,1689,6,213,11, - 0,1689,1690,6,213,7,0,1690,433,1,0,0,0,1691,1692,5,62,0,0,1692,1693, - 1,0,0,0,1693,1694,6,214,12,0,1694,1695,6,214,7,0,1695,1696,6,214, - 13,0,1696,435,1,0,0,0,1697,1701,7,38,0,0,1698,1700,7,39,0,0,1699, - 1698,1,0,0,0,1700,1703,1,0,0,0,1701,1699,1,0,0,0,1701,1702,1,0,0, - 0,1702,1704,1,0,0,0,1703,1701,1,0,0,0,1704,1705,6,215,14,0,1705, - 437,1,0,0,0,1706,1707,5,61,0,0,1707,1708,1,0,0,0,1708,1709,6,216, - 15,0,1709,439,1,0,0,0,1710,1711,3,258,126,0,1711,1712,1,0,0,0,1712, - 1713,6,217,16,0,1713,441,1,0,0,0,1714,1716,7,40,0,0,1715,1714,1, - 0,0,0,1716,1717,1,0,0,0,1717,1715,1,0,0,0,1717,1718,1,0,0,0,1718, - 1719,1,0,0,0,1719,1720,6,218,9,0,1720,443,1,0,0,0,1721,1722,5,123, - 0,0,1722,1723,1,0,0,0,1723,1724,6,219,17,0,1724,1725,6,219,0,0,1725, - 445,1,0,0,0,1726,1727,5,62,0,0,1727,1728,1,0,0,0,1728,1729,6,220, - 12,0,1729,1730,6,220,7,0,1730,447,1,0,0,0,1731,1735,7,38,0,0,1732, - 1734,7,39,0,0,1733,1732,1,0,0,0,1734,1737,1,0,0,0,1735,1733,1,0, - 0,0,1735,1736,1,0,0,0,1736,1738,1,0,0,0,1737,1735,1,0,0,0,1738,1739, - 6,221,14,0,1739,449,1,0,0,0,1740,1742,7,40,0,0,1741,1740,1,0,0,0, - 1742,1743,1,0,0,0,1743,1741,1,0,0,0,1743,1744,1,0,0,0,1744,1745, - 1,0,0,0,1745,1746,6,222,9,0,1746,451,1,0,0,0,1747,1749,8,41,0,0, - 1748,1747,1,0,0,0,1749,1750,1,0,0,0,1750,1748,1,0,0,0,1750,1751, - 1,0,0,0,1751,453,1,0,0,0,1752,1753,5,123,0,0,1753,1754,1,0,0,0,1754, - 1755,6,224,17,0,1755,1756,6,224,0,0,1756,455,1,0,0,0,1757,1758,5, - 60,0,0,1758,1759,5,47,0,0,1759,1760,1,0,0,0,1760,1761,6,225,1,0, - 1761,1762,6,225,7,0,1762,1763,6,225,2,0,1763,457,1,0,0,0,1764,1765, - 5,60,0,0,1765,1766,1,0,0,0,1766,1767,6,226,3,0,1767,1768,6,226,4, - 0,1768,459,1,0,0,0,1769,1771,7,40,0,0,1770,1769,1,0,0,0,1771,1772, - 1,0,0,0,1772,1770,1,0,0,0,1772,1773,1,0,0,0,1773,1774,1,0,0,0,1774, - 1775,6,227,9,0,1775,461,1,0,0,0,53,0,1,2,3,4,5,502,755,1226,1255, - 1260,1266,1268,1280,1282,1296,1298,1303,1310,1315,1319,1324,1329, - 1333,1338,1345,1351,1356,1363,1368,1374,1379,1381,1387,1392,1399, - 1410,1412,1556,1619,1631,1636,1640,1659,1661,1677,1679,1701,1717, - 1735,1743,1750,1772,18,5,0,0,7,152,0,5,4,0,7,151,0,5,3,0,5,1,0,5, - 2,0,4,0,0,6,0,0,0,1,0,7,164,0,7,172,0,7,143,0,5,5,0,7,122,0,7,141, - 0,7,127,0,7,147,0 + 2,228,7,228,2,229,7,229,2,230,7,230,2,231,7,231,2,232,7,232,2,233, + 7,233,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,2,1,2,1,3,1, + 3,1,3,1,3,1,4,1,4,1,4,1,4,1,4,1,4,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1, + 6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,3,6,515,8,6,1,7,1,7,1,7,1, + 7,1,7,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,9,1,9,1,10,1, + 10,1,10,1,11,1,11,1,11,1,11,1,11,1,12,1,12,1,12,1,12,1,12,1,13,1, + 13,1,13,1,13,1,13,1,13,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,15,1, + 15,1,15,1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1,16,1,16,1,16,1, + 16,1,16,1,17,1,17,1,17,1,17,1,17,1,17,1,18,1,18,1,18,1,18,1,18,1, + 19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,20,1,20,1,20,1,20,1,20,1, + 21,1,21,1,21,1,21,1,22,1,22,1,22,1,22,1,22,1,23,1,23,1,23,1,23,1, + 23,1,23,1,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,25,1,25,1,25,1,25,1,25,1,26,1,26,1,26,1,26,1,27,1, + 27,1,27,1,27,1,27,1,27,1,27,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1, + 28,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,30,1, + 30,1,30,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,32,1,32,1,32,1,32,1, + 32,1,32,1,32,1,32,1,33,1,33,1,33,1,33,1,33,1,33,1,34,1,34,1,34,1, + 35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,36,1,36,1,36,1, + 36,1,37,1,37,1,37,1,37,1,37,1,38,1,38,1,38,1,38,1,38,1,39,1,39,1, + 39,1,39,1,40,1,40,1,40,1,40,1,40,1,40,1,41,1,41,1,41,1,41,1,41,1, + 41,1,41,1,41,1,41,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,43,1,43,1, + 43,1,43,1,43,1,44,1,44,1,44,1,45,1,45,1,45,1,46,1,46,1,46,1,46,1, + 46,1,46,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,48,1,48,1,48,1,48,1, + 48,1,48,1,48,1,48,1,49,1,49,1,49,1,50,1,50,1,50,1,50,1,50,1,50,1, + 50,1,50,1,50,1,50,1,50,1,50,1,50,3,50,790,8,50,1,51,1,51,1,51,1, + 51,1,51,1,51,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1, + 53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,54,1,54,1,54,1,55,1, + 55,1,55,1,55,1,55,1,56,1,56,1,56,1,56,1,57,1,57,1,57,1,57,1,57,1, + 57,1,57,1,58,1,58,1,58,1,58,1,58,1,59,1,59,1,59,1,59,1,59,1,59,1, + 59,1,59,1,60,1,60,1,60,1,60,1,60,1,61,1,61,1,61,1,61,1,62,1,62,1, + 62,1,62,1,62,1,63,1,63,1,63,1,63,1,63,1,63,1,64,1,64,1,64,1,64,1, + 64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,65,1,65,1,65,1,65,1, + 65,1,65,1,65,1,66,1,66,1,66,1,66,1,66,1,66,1,67,1,67,1,67,1,67,1, + 67,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,69,1,69,1,69,1,69,1, + 70,1,70,1,70,1,70,1,71,1,71,1,71,1,71,1,71,1,72,1,72,1,72,1,72,1, + 72,1,72,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,74,1,74,1,74,1,75,1, + 75,1,75,1,76,1,76,1,76,1,76,1,76,1,76,1,77,1,77,1,77,1,77,1,77,1, + 77,1,78,1,78,1,78,1,78,1,78,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1, + 79,1,79,1,79,1,80,1,80,1,80,1,80,1,80,1,80,1,81,1,81,1,81,1,81,1, + 81,1,81,1,81,1,81,1,81,1,81,1,81,1,82,1,82,1,82,1,82,1,82,1,82,1, + 82,1,82,1,82,1,82,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1, + 84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,85,1,85,1,85,1,85,1,85,1, + 85,1,85,1,85,1,86,1,86,1,86,1,86,1,86,1,86,1,87,1,87,1,87,1,87,1, + 87,1,87,1,87,1,87,1,87,1,87,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1, + 88,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,90,1,90,1,90,1,90,1,90,1, + 90,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,92,1,92,1,92,1,92,1,93,1, + 93,1,93,1,93,1,93,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,95,1,95,1, + 95,1,95,1,95,1,95,1,95,1,96,1,96,1,96,1,96,1,96,1,96,1,96,1,97,1, + 97,1,97,1,97,1,97,1,98,1,98,1,98,1,98,1,98,1,99,1,99,1,99,1,99,1, + 99,1,99,1,99,1,99,1,99,1,100,1,100,1,100,1,100,1,100,1,100,1,100, + 1,100,1,100,1,100,1,101,1,101,1,101,1,101,1,101,1,102,1,102,1,102, + 1,102,1,102,1,102,1,103,1,103,1,103,1,103,1,103,1,104,1,104,1,104, + 1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,105,1,105,1,105,1,106, + 1,106,1,106,1,106,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,108, + 1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,109,1,109,1,109, + 1,109,1,109,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110, + 1,111,1,111,1,111,1,111,1,112,1,112,1,112,1,112,1,112,1,112,1,112, + 1,112,1,112,1,113,1,113,1,113,1,113,1,113,1,113,1,113,1,113,1,113, + 1,113,1,114,1,114,1,114,1,114,1,114,1,114,1,115,1,115,1,115,1,115, + 1,115,1,115,1,115,1,115,1,116,1,116,1,116,1,116,1,116,1,116,1,117, + 1,117,1,117,1,117,1,117,1,117,1,117,1,118,1,118,1,118,1,118,1,118, + 1,119,1,119,1,119,1,119,1,119,1,120,1,120,1,120,1,120,1,120,1,120, + 1,121,1,121,1,121,1,121,1,121,1,121,1,122,1,122,1,122,1,122,1,122, + 1,122,1,122,1,123,1,123,1,123,1,123,1,123,1,124,1,124,1,124,1,124, + 1,124,1,124,1,124,1,125,1,125,1,125,1,125,1,125,1,125,1,125,1,125, + 1,125,1,125,3,125,1286,8,125,1,126,1,126,1,126,1,126,1,126,1,126, + 1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126, + 1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126, + 1,126,1,126,1,126,1,126,3,126,1320,8,126,1,127,1,127,1,127,3,127, + 1325,8,127,1,127,1,127,1,127,1,127,5,127,1331,8,127,10,127,12,127, + 1334,9,127,1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,127, + 5,127,1345,8,127,10,127,12,127,1348,9,127,1,127,1,127,1,127,1,127, + 1,127,1,127,1,127,1,127,1,127,1,127,1,127,5,127,1361,8,127,10,127, + 12,127,1364,9,127,1,127,1,127,3,127,1368,8,127,1,128,1,128,1,128, + 5,128,1373,8,128,10,128,12,128,1376,9,128,1,128,1,128,3,128,1380, + 8,128,1,128,1,128,3,128,1384,8,128,1,128,4,128,1387,8,128,11,128, + 12,128,1388,1,128,1,128,1,128,3,128,1394,8,128,1,128,1,128,3,128, + 1398,8,128,1,128,4,128,1401,8,128,11,128,12,128,1402,1,128,1,128, + 1,128,5,128,1408,8,128,10,128,12,128,1411,9,128,1,128,1,128,1,128, + 3,128,1416,8,128,1,128,4,128,1419,8,128,11,128,12,128,1420,1,128, + 1,128,1,128,1,128,1,128,3,128,1428,8,128,1,128,4,128,1431,8,128, + 11,128,12,128,1432,1,128,1,128,1,128,1,128,3,128,1439,8,128,1,128, + 4,128,1442,8,128,11,128,12,128,1443,3,128,1446,8,128,1,129,1,129, + 4,129,1450,8,129,11,129,12,129,1451,1,130,4,130,1455,8,130,11,130, + 12,130,1456,1,131,1,131,1,131,4,131,1462,8,131,11,131,12,131,1463, + 1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,5,132,1475, + 8,132,10,132,12,132,1478,9,132,1,132,1,132,1,133,1,133,1,134,1,134, + 1,135,1,135,1,136,1,136,1,137,1,137,1,138,1,138,1,139,1,139,1,140, + 1,140,1,141,1,141,1,142,1,142,1,143,1,143,1,144,1,144,1,145,1,145, + 1,146,1,146,1,147,1,147,1,148,1,148,1,149,1,149,1,150,1,150,1,151, + 1,151,1,152,1,152,1,153,1,153,1,154,1,154,1,155,1,155,1,156,1,156, + 1,157,1,157,1,158,1,158,1,159,1,159,1,160,1,160,1,161,1,161,1,162, + 1,162,1,163,1,163,1,163,1,164,1,164,1,165,1,165,1,166,1,166,1,167, + 1,167,1,167,1,168,1,168,1,168,1,169,1,169,1,170,1,170,1,171,1,171, + 1,171,1,172,1,172,1,173,1,173,1,174,1,174,1,175,1,175,1,175,1,176, + 1,176,1,177,1,177,1,177,1,178,1,178,1,179,1,179,1,180,1,180,1,180, + 1,181,1,181,1,181,1,181,1,182,1,182,1,182,1,182,1,183,1,183,1,184, + 1,184,1,185,1,185,1,185,1,186,1,186,1,186,1,186,1,186,1,186,1,187, + 1,187,1,187,1,187,1,187,1,187,1,188,1,188,1,189,1,189,1,189,1,190, + 1,190,1,190,1,190,3,190,1621,8,190,1,191,1,191,1,191,1,191,1,192, + 1,192,1,192,1,193,1,193,1,193,1,194,1,194,1,194,1,195,1,195,1,196, + 1,196,1,197,1,197,1,198,1,198,1,199,1,199,1,199,1,199,1,199,1,200, + 1,200,1,200,1,200,1,200,1,201,1,201,1,202,1,202,1,203,1,203,1,203, + 1,204,1,204,1,204,1,204,1,205,1,205,1,206,1,206,1,207,1,207,1,208, + 1,208,1,209,1,209,1,209,1,210,1,210,1,211,1,211,1,211,1,211,5,211, + 1682,8,211,10,211,12,211,1685,9,211,1,211,1,211,1,211,1,211,1,211, + 1,212,1,212,1,212,1,212,3,212,1696,8,212,1,212,5,212,1699,8,212, + 10,212,12,212,1702,9,212,1,212,3,212,1705,8,212,1,212,1,212,1,213, + 1,213,1,213,1,213,1,214,1,214,1,214,1,214,1,214,1,214,1,214,1,214, + 1,214,1,214,1,214,4,214,1724,8,214,11,214,12,214,1725,1,215,1,215, + 1,215,1,215,1,216,1,216,1,216,1,216,1,216,1,217,1,217,1,217,1,217, + 1,217,4,217,1742,8,217,11,217,12,217,1743,1,218,1,218,1,218,1,218, + 1,219,1,219,1,219,1,219,1,219,1,219,1,220,1,220,1,220,1,220,1,220, + 1,220,1,221,1,221,5,221,1764,8,221,10,221,12,221,1767,9,221,1,221, + 1,221,1,222,1,222,1,222,1,222,1,223,1,223,1,223,1,223,1,224,4,224, + 1780,8,224,11,224,12,224,1781,1,224,1,224,1,225,1,225,1,225,1,225, + 1,225,1,226,1,226,1,226,1,226,1,226,1,227,1,227,5,227,1798,8,227, + 10,227,12,227,1801,9,227,1,227,1,227,1,228,4,228,1806,8,228,11,228, + 12,228,1807,1,228,1,228,1,229,4,229,1813,8,229,11,229,12,229,1814, + 1,230,1,230,1,230,1,230,1,230,1,231,1,231,1,231,1,231,1,231,1,231, + 1,231,1,232,1,232,1,232,1,232,1,232,1,233,4,233,1835,8,233,11,233, + 12,233,1836,1,233,1,233,1,1683,0,234,6,1,8,2,10,3,12,4,14,5,16,6, + 18,7,20,8,22,9,24,10,26,11,28,12,30,13,32,14,34,15,36,16,38,17,40, + 18,42,19,44,20,46,21,48,22,50,23,52,24,54,25,56,26,58,27,60,28,62, + 29,64,30,66,31,68,32,70,33,72,34,74,35,76,36,78,37,80,38,82,39,84, + 40,86,41,88,42,90,43,92,44,94,45,96,46,98,47,100,48,102,49,104,50, + 106,51,108,52,110,53,112,54,114,55,116,56,118,57,120,58,122,59,124, + 60,126,61,128,62,130,63,132,64,134,65,136,66,138,67,140,68,142,69, + 144,70,146,71,148,72,150,73,152,74,154,75,156,76,158,77,160,78,162, + 79,164,80,166,81,168,82,170,83,172,84,174,85,176,86,178,87,180,88, + 182,89,184,90,186,91,188,92,190,93,192,94,194,95,196,96,198,97,200, + 98,202,99,204,100,206,101,208,102,210,103,212,104,214,105,216,106, + 218,107,220,108,222,109,224,110,226,111,228,112,230,113,232,114, + 234,115,236,116,238,117,240,118,242,119,244,120,246,121,248,122, + 250,123,252,124,254,125,256,126,258,127,260,128,262,129,264,130, + 266,131,268,132,270,133,272,0,274,0,276,0,278,0,280,0,282,0,284, + 0,286,0,288,0,290,0,292,0,294,0,296,0,298,0,300,0,302,0,304,0,306, + 0,308,0,310,0,312,0,314,0,316,0,318,0,320,0,322,0,324,0,326,0,328, + 0,330,0,332,134,334,135,336,136,338,137,340,138,342,139,344,140, + 346,141,348,142,350,143,352,144,354,145,356,146,358,147,360,148, + 362,149,364,150,366,151,368,152,370,153,372,154,374,155,376,156, + 378,0,380,0,382,157,384,158,386,159,388,160,390,161,392,162,394, + 163,396,164,398,165,400,166,402,167,404,168,406,169,408,170,410, + 171,412,172,414,173,416,174,418,175,420,176,422,177,424,178,426, + 179,428,180,430,181,432,182,434,183,436,184,438,0,440,185,442,186, + 444,0,446,0,448,0,450,0,452,0,454,187,456,0,458,0,460,0,462,188, + 464,189,466,0,468,0,470,0,472,190,6,0,1,2,3,4,5,42,2,0,92,92,96, + 96,2,0,34,34,92,92,2,0,39,39,92,92,2,0,65,65,97,97,2,0,66,66,98, + 98,2,0,67,67,99,99,2,0,68,68,100,100,2,0,69,69,101,101,2,0,70,70, + 102,102,2,0,71,71,103,103,2,0,72,72,104,104,2,0,73,73,105,105,2, + 0,74,74,106,106,2,0,75,75,107,107,2,0,76,76,108,108,2,0,77,77,109, + 109,2,0,78,78,110,110,2,0,79,79,111,111,2,0,80,80,112,112,2,0,81, + 81,113,113,2,0,82,82,114,114,2,0,83,83,115,115,2,0,84,84,116,116, + 2,0,85,85,117,117,2,0,86,86,118,118,2,0,87,87,119,119,2,0,88,88, + 120,120,2,0,89,89,121,121,2,0,90,90,122,122,2,0,65,90,97,122,1,0, + 48,55,1,0,48,57,3,0,48,57,65,70,97,102,2,0,10,10,13,13,2,1,10,10, + 13,13,2,0,9,13,32,32,3,0,39,39,92,92,123,123,1,0,123,123,3,0,65, + 90,95,95,97,122,5,0,45,45,48,57,65,90,95,95,97,122,3,0,9,10,13,13, + 32,32,2,0,60,60,123,123,1880,0,6,1,0,0,0,0,8,1,0,0,0,0,10,1,0,0, + 0,0,12,1,0,0,0,0,14,1,0,0,0,0,16,1,0,0,0,0,18,1,0,0,0,0,20,1,0,0, + 0,0,22,1,0,0,0,0,24,1,0,0,0,0,26,1,0,0,0,0,28,1,0,0,0,0,30,1,0,0, + 0,0,32,1,0,0,0,0,34,1,0,0,0,0,36,1,0,0,0,0,38,1,0,0,0,0,40,1,0,0, + 0,0,42,1,0,0,0,0,44,1,0,0,0,0,46,1,0,0,0,0,48,1,0,0,0,0,50,1,0,0, + 0,0,52,1,0,0,0,0,54,1,0,0,0,0,56,1,0,0,0,0,58,1,0,0,0,0,60,1,0,0, + 0,0,62,1,0,0,0,0,64,1,0,0,0,0,66,1,0,0,0,0,68,1,0,0,0,0,70,1,0,0, + 0,0,72,1,0,0,0,0,74,1,0,0,0,0,76,1,0,0,0,0,78,1,0,0,0,0,80,1,0,0, + 0,0,82,1,0,0,0,0,84,1,0,0,0,0,86,1,0,0,0,0,88,1,0,0,0,0,90,1,0,0, + 0,0,92,1,0,0,0,0,94,1,0,0,0,0,96,1,0,0,0,0,98,1,0,0,0,0,100,1,0, + 0,0,0,102,1,0,0,0,0,104,1,0,0,0,0,106,1,0,0,0,0,108,1,0,0,0,0,110, + 1,0,0,0,0,112,1,0,0,0,0,114,1,0,0,0,0,116,1,0,0,0,0,118,1,0,0,0, + 0,120,1,0,0,0,0,122,1,0,0,0,0,124,1,0,0,0,0,126,1,0,0,0,0,128,1, + 0,0,0,0,130,1,0,0,0,0,132,1,0,0,0,0,134,1,0,0,0,0,136,1,0,0,0,0, + 138,1,0,0,0,0,140,1,0,0,0,0,142,1,0,0,0,0,144,1,0,0,0,0,146,1,0, + 0,0,0,148,1,0,0,0,0,150,1,0,0,0,0,152,1,0,0,0,0,154,1,0,0,0,0,156, + 1,0,0,0,0,158,1,0,0,0,0,160,1,0,0,0,0,162,1,0,0,0,0,164,1,0,0,0, + 0,166,1,0,0,0,0,168,1,0,0,0,0,170,1,0,0,0,0,172,1,0,0,0,0,174,1, + 0,0,0,0,176,1,0,0,0,0,178,1,0,0,0,0,180,1,0,0,0,0,182,1,0,0,0,0, + 184,1,0,0,0,0,186,1,0,0,0,0,188,1,0,0,0,0,190,1,0,0,0,0,192,1,0, + 0,0,0,194,1,0,0,0,0,196,1,0,0,0,0,198,1,0,0,0,0,200,1,0,0,0,0,202, + 1,0,0,0,0,204,1,0,0,0,0,206,1,0,0,0,0,208,1,0,0,0,0,210,1,0,0,0, + 0,212,1,0,0,0,0,214,1,0,0,0,0,216,1,0,0,0,0,218,1,0,0,0,0,220,1, + 0,0,0,0,222,1,0,0,0,0,224,1,0,0,0,0,226,1,0,0,0,0,228,1,0,0,0,0, + 230,1,0,0,0,0,232,1,0,0,0,0,234,1,0,0,0,0,236,1,0,0,0,0,238,1,0, + 0,0,0,240,1,0,0,0,0,242,1,0,0,0,0,244,1,0,0,0,0,246,1,0,0,0,0,248, + 1,0,0,0,0,250,1,0,0,0,0,252,1,0,0,0,0,254,1,0,0,0,0,256,1,0,0,0, + 0,258,1,0,0,0,0,260,1,0,0,0,0,262,1,0,0,0,0,264,1,0,0,0,0,266,1, + 0,0,0,0,268,1,0,0,0,0,270,1,0,0,0,0,332,1,0,0,0,0,334,1,0,0,0,0, + 336,1,0,0,0,0,338,1,0,0,0,0,340,1,0,0,0,0,342,1,0,0,0,0,344,1,0, + 0,0,0,346,1,0,0,0,0,348,1,0,0,0,0,350,1,0,0,0,0,352,1,0,0,0,0,354, + 1,0,0,0,0,356,1,0,0,0,0,358,1,0,0,0,0,360,1,0,0,0,0,362,1,0,0,0, + 0,364,1,0,0,0,0,366,1,0,0,0,0,368,1,0,0,0,0,370,1,0,0,0,0,372,1, + 0,0,0,0,374,1,0,0,0,0,376,1,0,0,0,0,378,1,0,0,0,0,380,1,0,0,0,0, + 382,1,0,0,0,0,384,1,0,0,0,0,386,1,0,0,0,0,388,1,0,0,0,0,390,1,0, + 0,0,0,392,1,0,0,0,0,394,1,0,0,0,0,396,1,0,0,0,0,398,1,0,0,0,0,400, + 1,0,0,0,0,402,1,0,0,0,0,404,1,0,0,0,0,406,1,0,0,0,0,408,1,0,0,0, + 0,410,1,0,0,0,0,412,1,0,0,0,0,414,1,0,0,0,0,416,1,0,0,0,0,418,1, + 0,0,0,0,420,1,0,0,0,0,422,1,0,0,0,0,424,1,0,0,0,0,426,1,0,0,0,0, + 428,1,0,0,0,0,430,1,0,0,0,0,432,1,0,0,0,1,434,1,0,0,0,1,436,1,0, + 0,0,1,438,1,0,0,0,2,440,1,0,0,0,2,442,1,0,0,0,3,444,1,0,0,0,3,446, + 1,0,0,0,3,448,1,0,0,0,3,450,1,0,0,0,3,452,1,0,0,0,3,454,1,0,0,0, + 3,456,1,0,0,0,4,458,1,0,0,0,4,460,1,0,0,0,4,462,1,0,0,0,5,464,1, + 0,0,0,5,466,1,0,0,0,5,468,1,0,0,0,5,470,1,0,0,0,5,472,1,0,0,0,6, + 474,1,0,0,0,8,478,1,0,0,0,10,482,1,0,0,0,12,487,1,0,0,0,14,491,1, + 0,0,0,16,497,1,0,0,0,18,514,1,0,0,0,20,516,1,0,0,0,22,521,1,0,0, + 0,24,529,1,0,0,0,26,534,1,0,0,0,28,537,1,0,0,0,30,542,1,0,0,0,32, + 547,1,0,0,0,34,553,1,0,0,0,36,560,1,0,0,0,38,568,1,0,0,0,40,576, + 1,0,0,0,42,582,1,0,0,0,44,587,1,0,0,0,46,595,1,0,0,0,48,600,1,0, + 0,0,50,604,1,0,0,0,52,609,1,0,0,0,54,620,1,0,0,0,56,629,1,0,0,0, + 58,634,1,0,0,0,60,638,1,0,0,0,62,645,1,0,0,0,64,653,1,0,0,0,66,661, + 1,0,0,0,68,667,1,0,0,0,70,674,1,0,0,0,72,682,1,0,0,0,74,688,1,0, + 0,0,76,691,1,0,0,0,78,701,1,0,0,0,80,705,1,0,0,0,82,710,1,0,0,0, + 84,715,1,0,0,0,86,719,1,0,0,0,88,725,1,0,0,0,90,734,1,0,0,0,92,741, + 1,0,0,0,94,746,1,0,0,0,96,749,1,0,0,0,98,752,1,0,0,0,100,758,1,0, + 0,0,102,765,1,0,0,0,104,773,1,0,0,0,106,789,1,0,0,0,108,791,1,0, + 0,0,110,797,1,0,0,0,112,807,1,0,0,0,114,816,1,0,0,0,116,819,1,0, + 0,0,118,824,1,0,0,0,120,828,1,0,0,0,122,835,1,0,0,0,124,840,1,0, + 0,0,126,848,1,0,0,0,128,853,1,0,0,0,130,857,1,0,0,0,132,862,1,0, + 0,0,134,868,1,0,0,0,136,881,1,0,0,0,138,888,1,0,0,0,140,894,1,0, + 0,0,142,899,1,0,0,0,144,907,1,0,0,0,146,911,1,0,0,0,148,915,1,0, + 0,0,150,920,1,0,0,0,152,926,1,0,0,0,154,933,1,0,0,0,156,936,1,0, + 0,0,158,939,1,0,0,0,160,945,1,0,0,0,162,951,1,0,0,0,164,956,1,0, + 0,0,166,966,1,0,0,0,168,972,1,0,0,0,170,983,1,0,0,0,172,993,1,0, + 0,0,174,1002,1,0,0,0,176,1010,1,0,0,0,178,1018,1,0,0,0,180,1024, + 1,0,0,0,182,1034,1,0,0,0,184,1042,1,0,0,0,186,1049,1,0,0,0,188,1055, + 1,0,0,0,190,1062,1,0,0,0,192,1066,1,0,0,0,194,1071,1,0,0,0,196,1078, + 1,0,0,0,198,1085,1,0,0,0,200,1092,1,0,0,0,202,1097,1,0,0,0,204,1102, + 1,0,0,0,206,1111,1,0,0,0,208,1121,1,0,0,0,210,1126,1,0,0,0,212,1132, + 1,0,0,0,214,1137,1,0,0,0,216,1147,1,0,0,0,218,1150,1,0,0,0,220,1154, + 1,0,0,0,222,1161,1,0,0,0,224,1170,1,0,0,0,226,1175,1,0,0,0,228,1184, + 1,0,0,0,230,1188,1,0,0,0,232,1197,1,0,0,0,234,1207,1,0,0,0,236,1213, + 1,0,0,0,238,1221,1,0,0,0,240,1227,1,0,0,0,242,1234,1,0,0,0,244,1239, + 1,0,0,0,246,1244,1,0,0,0,248,1250,1,0,0,0,250,1256,1,0,0,0,252,1263, + 1,0,0,0,254,1268,1,0,0,0,256,1285,1,0,0,0,258,1319,1,0,0,0,260,1367, + 1,0,0,0,262,1445,1,0,0,0,264,1447,1,0,0,0,266,1454,1,0,0,0,268,1458, + 1,0,0,0,270,1465,1,0,0,0,272,1481,1,0,0,0,274,1483,1,0,0,0,276,1485, + 1,0,0,0,278,1487,1,0,0,0,280,1489,1,0,0,0,282,1491,1,0,0,0,284,1493, + 1,0,0,0,286,1495,1,0,0,0,288,1497,1,0,0,0,290,1499,1,0,0,0,292,1501, + 1,0,0,0,294,1503,1,0,0,0,296,1505,1,0,0,0,298,1507,1,0,0,0,300,1509, + 1,0,0,0,302,1511,1,0,0,0,304,1513,1,0,0,0,306,1515,1,0,0,0,308,1517, + 1,0,0,0,310,1519,1,0,0,0,312,1521,1,0,0,0,314,1523,1,0,0,0,316,1525, + 1,0,0,0,318,1527,1,0,0,0,320,1529,1,0,0,0,322,1531,1,0,0,0,324,1533, + 1,0,0,0,326,1535,1,0,0,0,328,1537,1,0,0,0,330,1539,1,0,0,0,332,1541, + 1,0,0,0,334,1544,1,0,0,0,336,1546,1,0,0,0,338,1548,1,0,0,0,340,1550, + 1,0,0,0,342,1553,1,0,0,0,344,1556,1,0,0,0,346,1558,1,0,0,0,348,1560, + 1,0,0,0,350,1563,1,0,0,0,352,1565,1,0,0,0,354,1567,1,0,0,0,356,1569, + 1,0,0,0,358,1572,1,0,0,0,360,1574,1,0,0,0,362,1577,1,0,0,0,364,1579, + 1,0,0,0,366,1581,1,0,0,0,368,1584,1,0,0,0,370,1588,1,0,0,0,372,1592, + 1,0,0,0,374,1594,1,0,0,0,376,1596,1,0,0,0,378,1599,1,0,0,0,380,1605, + 1,0,0,0,382,1611,1,0,0,0,384,1613,1,0,0,0,386,1620,1,0,0,0,388,1622, + 1,0,0,0,390,1626,1,0,0,0,392,1629,1,0,0,0,394,1632,1,0,0,0,396,1635, + 1,0,0,0,398,1637,1,0,0,0,400,1639,1,0,0,0,402,1641,1,0,0,0,404,1643, + 1,0,0,0,406,1648,1,0,0,0,408,1653,1,0,0,0,410,1655,1,0,0,0,412,1657, + 1,0,0,0,414,1660,1,0,0,0,416,1664,1,0,0,0,418,1666,1,0,0,0,420,1668, + 1,0,0,0,422,1670,1,0,0,0,424,1672,1,0,0,0,426,1675,1,0,0,0,428,1677, + 1,0,0,0,430,1695,1,0,0,0,432,1708,1,0,0,0,434,1723,1,0,0,0,436,1727, + 1,0,0,0,438,1731,1,0,0,0,440,1741,1,0,0,0,442,1745,1,0,0,0,444,1749, + 1,0,0,0,446,1755,1,0,0,0,448,1761,1,0,0,0,450,1770,1,0,0,0,452,1774, + 1,0,0,0,454,1779,1,0,0,0,456,1785,1,0,0,0,458,1790,1,0,0,0,460,1795, + 1,0,0,0,462,1805,1,0,0,0,464,1812,1,0,0,0,466,1816,1,0,0,0,468,1821, + 1,0,0,0,470,1828,1,0,0,0,472,1834,1,0,0,0,474,475,3,272,133,0,475, + 476,3,294,144,0,476,477,3,294,144,0,477,7,1,0,0,0,478,479,3,272, + 133,0,479,480,3,298,146,0,480,481,3,278,136,0,481,9,1,0,0,0,482, + 483,3,272,133,0,483,484,3,298,146,0,484,485,3,310,152,0,485,486, + 3,288,141,0,486,11,1,0,0,0,487,488,3,272,133,0,488,489,3,298,146, + 0,489,490,3,320,157,0,490,13,1,0,0,0,491,492,3,272,133,0,492,493, + 3,306,150,0,493,494,3,306,150,0,494,495,3,272,133,0,495,496,3,320, + 157,0,496,15,1,0,0,0,497,498,3,272,133,0,498,499,3,308,151,0,499, + 17,1,0,0,0,500,501,3,272,133,0,501,502,3,308,151,0,502,503,3,276, + 135,0,503,515,1,0,0,0,504,505,3,272,133,0,505,506,3,308,151,0,506, + 507,3,276,135,0,507,508,3,280,137,0,508,509,3,298,146,0,509,510, + 3,278,136,0,510,511,3,288,141,0,511,512,3,298,146,0,512,513,3,284, + 139,0,513,515,1,0,0,0,514,500,1,0,0,0,514,504,1,0,0,0,515,19,1,0, + 0,0,516,517,3,272,133,0,517,518,3,308,151,0,518,519,3,300,147,0, + 519,520,3,282,138,0,520,21,1,0,0,0,521,522,3,274,134,0,522,523,3, + 280,137,0,523,524,3,310,152,0,524,525,3,316,155,0,525,526,3,280, + 137,0,526,527,3,280,137,0,527,528,3,298,146,0,528,23,1,0,0,0,529, + 530,3,274,134,0,530,531,3,300,147,0,531,532,3,310,152,0,532,533, + 3,286,140,0,533,25,1,0,0,0,534,535,3,274,134,0,535,536,3,320,157, + 0,536,27,1,0,0,0,537,538,3,276,135,0,538,539,3,272,133,0,539,540, + 3,308,151,0,540,541,3,280,137,0,541,29,1,0,0,0,542,543,3,276,135, + 0,543,544,3,272,133,0,544,545,3,308,151,0,545,546,3,310,152,0,546, + 31,1,0,0,0,547,548,3,276,135,0,548,549,3,272,133,0,549,550,3,310, + 152,0,550,551,3,276,135,0,551,552,3,286,140,0,552,33,1,0,0,0,553, + 554,3,276,135,0,554,555,3,300,147,0,555,556,3,286,140,0,556,557, + 3,300,147,0,557,558,3,306,150,0,558,559,3,310,152,0,559,35,1,0,0, + 0,560,561,3,276,135,0,561,562,3,300,147,0,562,563,3,294,144,0,563, + 564,3,294,144,0,564,565,3,272,133,0,565,566,3,310,152,0,566,567, + 3,280,137,0,567,37,1,0,0,0,568,569,3,276,135,0,569,570,3,300,147, + 0,570,571,3,294,144,0,571,572,3,312,153,0,572,573,3,296,145,0,573, + 574,3,298,146,0,574,575,3,308,151,0,575,39,1,0,0,0,576,577,3,276, + 135,0,577,578,3,306,150,0,578,579,3,300,147,0,579,580,3,308,151, + 0,580,581,3,308,151,0,581,41,1,0,0,0,582,583,3,276,135,0,583,584, + 3,312,153,0,584,585,3,274,134,0,585,586,3,280,137,0,586,43,1,0,0, + 0,587,588,3,276,135,0,588,589,3,312,153,0,589,590,3,306,150,0,590, + 591,3,306,150,0,591,592,3,280,137,0,592,593,3,298,146,0,593,594, + 3,310,152,0,594,45,1,0,0,0,595,596,3,278,136,0,596,597,3,272,133, + 0,597,598,3,310,152,0,598,599,3,280,137,0,599,47,1,0,0,0,600,601, + 3,278,136,0,601,602,3,272,133,0,602,603,3,320,157,0,603,49,1,0,0, + 0,604,605,3,278,136,0,605,606,3,280,137,0,606,607,3,308,151,0,607, + 608,3,276,135,0,608,51,1,0,0,0,609,610,3,278,136,0,610,611,3,280, + 137,0,611,612,3,308,151,0,612,613,3,276,135,0,613,614,3,280,137, + 0,614,615,3,298,146,0,615,616,3,278,136,0,616,617,3,288,141,0,617, + 618,3,298,146,0,618,619,3,284,139,0,619,53,1,0,0,0,620,621,3,278, + 136,0,621,622,3,288,141,0,622,623,3,308,151,0,623,624,3,310,152, + 0,624,625,3,288,141,0,625,626,3,298,146,0,626,627,3,276,135,0,627, + 628,3,310,152,0,628,55,1,0,0,0,629,630,3,280,137,0,630,631,3,294, + 144,0,631,632,3,308,151,0,632,633,3,280,137,0,633,57,1,0,0,0,634, + 635,3,280,137,0,635,636,3,298,146,0,636,637,3,278,136,0,637,59,1, + 0,0,0,638,639,3,280,137,0,639,640,3,318,156,0,640,641,3,276,135, + 0,641,642,3,280,137,0,642,643,3,302,148,0,643,644,3,310,152,0,644, + 61,1,0,0,0,645,646,3,280,137,0,646,647,3,318,156,0,647,648,3,276, + 135,0,648,649,3,294,144,0,649,650,3,312,153,0,650,651,3,278,136, + 0,651,652,3,280,137,0,652,63,1,0,0,0,653,654,3,280,137,0,654,655, + 3,318,156,0,655,656,3,310,152,0,656,657,3,306,150,0,657,658,3,272, + 133,0,658,659,3,276,135,0,659,660,3,310,152,0,660,65,1,0,0,0,661, + 662,3,282,138,0,662,663,3,288,141,0,663,664,3,298,146,0,664,665, + 3,272,133,0,665,666,3,294,144,0,666,67,1,0,0,0,667,668,3,282,138, + 0,668,669,3,288,141,0,669,670,3,294,144,0,670,671,3,310,152,0,671, + 672,3,280,137,0,672,673,3,306,150,0,673,69,1,0,0,0,674,675,3,282, + 138,0,675,676,3,288,141,0,676,677,3,298,146,0,677,678,3,272,133, + 0,678,679,3,294,144,0,679,680,3,294,144,0,680,681,3,320,157,0,681, + 71,1,0,0,0,682,683,3,282,138,0,683,684,3,288,141,0,684,685,3,306, + 150,0,685,686,3,308,151,0,686,687,3,310,152,0,687,73,1,0,0,0,688, + 689,3,282,138,0,689,690,3,298,146,0,690,75,1,0,0,0,691,692,3,282, + 138,0,692,693,3,300,147,0,693,694,3,294,144,0,694,695,3,294,144, + 0,695,696,3,300,147,0,696,697,3,316,155,0,697,698,3,288,141,0,698, + 699,3,298,146,0,699,700,3,284,139,0,700,77,1,0,0,0,701,702,3,282, + 138,0,702,703,3,300,147,0,703,704,3,306,150,0,704,79,1,0,0,0,705, + 706,3,282,138,0,706,707,3,306,150,0,707,708,3,300,147,0,708,709, + 3,296,145,0,709,81,1,0,0,0,710,711,3,282,138,0,711,712,3,312,153, + 0,712,713,3,294,144,0,713,714,3,294,144,0,714,83,1,0,0,0,715,716, + 3,282,138,0,716,717,3,312,153,0,717,718,3,298,146,0,718,85,1,0,0, + 0,719,720,3,284,139,0,720,721,3,306,150,0,721,722,3,300,147,0,722, + 723,3,312,153,0,723,724,3,302,148,0,724,87,1,0,0,0,725,726,3,284, + 139,0,726,727,3,306,150,0,727,728,3,300,147,0,728,729,3,312,153, + 0,729,730,3,302,148,0,730,731,3,288,141,0,731,732,3,298,146,0,732, + 733,3,284,139,0,733,89,1,0,0,0,734,735,3,286,140,0,735,736,3,272, + 133,0,736,737,3,314,154,0,737,738,3,288,141,0,738,739,3,298,146, + 0,739,740,3,284,139,0,740,91,1,0,0,0,741,742,3,286,140,0,742,743, + 3,300,147,0,743,744,3,312,153,0,744,745,3,306,150,0,745,93,1,0,0, + 0,746,747,3,288,141,0,747,748,3,278,136,0,748,95,1,0,0,0,749,750, + 3,288,141,0,750,751,3,282,138,0,751,97,1,0,0,0,752,753,3,288,141, + 0,753,754,3,294,144,0,754,755,3,288,141,0,755,756,3,292,143,0,756, + 757,3,280,137,0,757,99,1,0,0,0,758,759,3,288,141,0,759,760,3,284, + 139,0,760,761,3,298,146,0,761,762,3,300,147,0,762,763,3,306,150, + 0,763,764,3,280,137,0,764,101,1,0,0,0,765,766,3,288,141,0,766,767, + 3,298,146,0,767,768,3,276,135,0,768,769,3,294,144,0,769,770,3,312, + 153,0,770,771,3,278,136,0,771,772,3,280,137,0,772,103,1,0,0,0,773, + 774,3,288,141,0,774,775,3,298,146,0,775,105,1,0,0,0,776,777,3,288, + 141,0,777,778,3,298,146,0,778,779,3,282,138,0,779,790,1,0,0,0,780, + 781,3,288,141,0,781,782,3,298,146,0,782,783,3,282,138,0,783,784, + 3,288,141,0,784,785,3,298,146,0,785,786,3,288,141,0,786,787,3,310, + 152,0,787,788,3,320,157,0,788,790,1,0,0,0,789,776,1,0,0,0,789,780, + 1,0,0,0,790,107,1,0,0,0,791,792,3,288,141,0,792,793,3,298,146,0, + 793,794,3,298,146,0,794,795,3,280,137,0,795,796,3,306,150,0,796, + 109,1,0,0,0,797,798,3,288,141,0,798,799,3,298,146,0,799,800,3,310, + 152,0,800,801,3,280,137,0,801,802,3,306,150,0,802,803,3,308,151, + 0,803,804,3,280,137,0,804,805,3,276,135,0,805,806,3,310,152,0,806, + 111,1,0,0,0,807,808,3,288,141,0,808,809,3,298,146,0,809,810,3,310, + 152,0,810,811,3,280,137,0,811,812,3,306,150,0,812,813,3,314,154, + 0,813,814,3,272,133,0,814,815,3,294,144,0,815,113,1,0,0,0,816,817, + 3,288,141,0,817,818,3,308,151,0,818,115,1,0,0,0,819,820,3,290,142, + 0,820,821,3,300,147,0,821,822,3,288,141,0,822,823,3,298,146,0,823, + 117,1,0,0,0,824,825,3,292,143,0,825,826,3,280,137,0,826,827,3,320, + 157,0,827,119,1,0,0,0,828,829,3,294,144,0,829,830,3,272,133,0,830, + 831,3,296,145,0,831,832,3,274,134,0,832,833,3,278,136,0,833,834, + 3,272,133,0,834,121,1,0,0,0,835,836,3,294,144,0,836,837,3,272,133, + 0,837,838,3,308,151,0,838,839,3,310,152,0,839,123,1,0,0,0,840,841, + 3,294,144,0,841,842,3,280,137,0,842,843,3,272,133,0,843,844,3,278, + 136,0,844,845,3,288,141,0,845,846,3,298,146,0,846,847,3,284,139, + 0,847,125,1,0,0,0,848,849,3,294,144,0,849,850,3,280,137,0,850,851, + 3,282,138,0,851,852,3,310,152,0,852,127,1,0,0,0,853,854,3,294,144, + 0,854,855,3,280,137,0,855,856,3,310,152,0,856,129,1,0,0,0,857,858, + 3,294,144,0,858,859,3,288,141,0,859,860,3,292,143,0,860,861,3,280, + 137,0,861,131,1,0,0,0,862,863,3,294,144,0,863,864,3,288,141,0,864, + 865,3,296,145,0,865,866,3,288,141,0,866,867,3,310,152,0,867,133, + 1,0,0,0,868,869,3,296,145,0,869,870,3,272,133,0,870,871,3,310,152, + 0,871,872,3,280,137,0,872,873,3,306,150,0,873,874,3,288,141,0,874, + 875,3,272,133,0,875,876,3,294,144,0,876,877,3,288,141,0,877,878, + 3,322,158,0,878,879,3,280,137,0,879,880,3,278,136,0,880,135,1,0, + 0,0,881,882,3,296,145,0,882,883,3,288,141,0,883,884,3,298,146,0, + 884,885,3,312,153,0,885,886,3,310,152,0,886,887,3,280,137,0,887, + 137,1,0,0,0,888,889,3,296,145,0,889,890,3,300,147,0,890,891,3,298, + 146,0,891,892,3,310,152,0,892,893,3,286,140,0,893,139,1,0,0,0,894, + 895,3,298,146,0,895,896,3,272,133,0,896,897,3,296,145,0,897,898, + 3,280,137,0,898,141,1,0,0,0,899,900,3,298,146,0,900,901,3,272,133, + 0,901,902,3,310,152,0,902,903,3,312,153,0,903,904,3,306,150,0,904, + 905,3,272,133,0,905,906,3,294,144,0,906,143,1,0,0,0,907,908,3,298, + 146,0,908,909,3,272,133,0,909,910,3,298,146,0,910,145,1,0,0,0,911, + 912,3,298,146,0,912,913,3,300,147,0,913,914,3,310,152,0,914,147, + 1,0,0,0,915,916,3,298,146,0,916,917,3,312,153,0,917,918,3,294,144, + 0,918,919,3,294,144,0,919,149,1,0,0,0,920,921,3,298,146,0,921,922, + 3,312,153,0,922,923,3,294,144,0,923,924,3,294,144,0,924,925,3,308, + 151,0,925,151,1,0,0,0,926,927,3,300,147,0,927,928,3,282,138,0,928, + 929,3,282,138,0,929,930,3,308,151,0,930,931,3,280,137,0,931,932, + 3,310,152,0,932,153,1,0,0,0,933,934,3,300,147,0,934,935,3,298,146, + 0,935,155,1,0,0,0,936,937,3,300,147,0,937,938,3,306,150,0,938,157, + 1,0,0,0,939,940,3,300,147,0,940,941,3,306,150,0,941,942,3,278,136, + 0,942,943,3,280,137,0,943,944,3,306,150,0,944,159,1,0,0,0,945,946, + 3,300,147,0,946,947,3,312,153,0,947,948,3,310,152,0,948,949,3,280, + 137,0,949,950,3,306,150,0,950,161,1,0,0,0,951,952,3,300,147,0,952, + 953,3,314,154,0,953,954,3,280,137,0,954,955,3,306,150,0,955,163, + 1,0,0,0,956,957,3,302,148,0,957,958,3,272,133,0,958,959,3,306,150, + 0,959,960,3,310,152,0,960,961,3,288,141,0,961,962,3,310,152,0,962, + 963,3,288,141,0,963,964,3,300,147,0,964,965,3,298,146,0,965,165, + 1,0,0,0,966,967,3,302,148,0,967,968,3,288,141,0,968,969,3,314,154, + 0,969,970,3,300,147,0,970,971,3,310,152,0,971,167,1,0,0,0,972,973, + 3,302,148,0,973,974,3,300,147,0,974,975,3,308,151,0,975,976,3,288, + 141,0,976,977,3,310,152,0,977,978,3,288,141,0,978,979,3,300,147, + 0,979,980,3,298,146,0,980,981,3,272,133,0,981,982,3,294,144,0,982, + 169,1,0,0,0,983,984,3,302,148,0,984,985,3,306,150,0,985,986,3,280, + 137,0,986,987,3,276,135,0,987,988,3,280,137,0,988,989,3,278,136, + 0,989,990,3,288,141,0,990,991,3,298,146,0,991,992,3,284,139,0,992, + 171,1,0,0,0,993,994,3,302,148,0,994,995,3,306,150,0,995,996,3,280, + 137,0,996,997,3,316,155,0,997,998,3,286,140,0,998,999,3,280,137, + 0,999,1000,3,306,150,0,1000,1001,3,280,137,0,1001,173,1,0,0,0,1002, + 1003,3,304,149,0,1003,1004,3,312,153,0,1004,1005,3,272,133,0,1005, + 1006,3,294,144,0,1006,1007,3,288,141,0,1007,1008,3,282,138,0,1008, + 1009,3,320,157,0,1009,175,1,0,0,0,1010,1011,3,304,149,0,1011,1012, + 3,312,153,0,1012,1013,3,272,133,0,1013,1014,3,306,150,0,1014,1015, + 3,310,152,0,1015,1016,3,280,137,0,1016,1017,3,306,150,0,1017,177, + 1,0,0,0,1018,1019,3,306,150,0,1019,1020,3,272,133,0,1020,1021,3, + 298,146,0,1021,1022,3,284,139,0,1022,1023,3,280,137,0,1023,179,1, + 0,0,0,1024,1025,3,306,150,0,1025,1026,3,280,137,0,1026,1027,3,276, + 135,0,1027,1028,3,312,153,0,1028,1029,3,306,150,0,1029,1030,3,308, + 151,0,1030,1031,3,288,141,0,1031,1032,3,314,154,0,1032,1033,3,280, + 137,0,1033,181,1,0,0,0,1034,1035,3,306,150,0,1035,1036,3,280,137, + 0,1036,1037,3,302,148,0,1037,1038,3,294,144,0,1038,1039,3,272,133, + 0,1039,1040,3,276,135,0,1040,1041,3,280,137,0,1041,183,1,0,0,0,1042, + 1043,3,306,150,0,1043,1044,3,280,137,0,1044,1045,3,310,152,0,1045, + 1046,3,312,153,0,1046,1047,3,306,150,0,1047,1048,3,298,146,0,1048, + 185,1,0,0,0,1049,1050,3,306,150,0,1050,1051,3,288,141,0,1051,1052, + 3,284,139,0,1052,1053,3,286,140,0,1053,1054,3,310,152,0,1054,187, + 1,0,0,0,1055,1056,3,306,150,0,1056,1057,3,300,147,0,1057,1058,3, + 294,144,0,1058,1059,3,294,144,0,1059,1060,3,312,153,0,1060,1061, + 3,302,148,0,1061,189,1,0,0,0,1062,1063,3,306,150,0,1063,1064,3,300, + 147,0,1064,1065,3,316,155,0,1065,191,1,0,0,0,1066,1067,3,306,150, + 0,1067,1068,3,300,147,0,1068,1069,3,316,155,0,1069,1070,3,308,151, + 0,1070,193,1,0,0,0,1071,1072,3,308,151,0,1072,1073,3,272,133,0,1073, + 1074,3,296,145,0,1074,1075,3,302,148,0,1075,1076,3,294,144,0,1076, + 1077,3,280,137,0,1077,195,1,0,0,0,1078,1079,3,308,151,0,1079,1080, + 3,280,137,0,1080,1081,3,276,135,0,1081,1082,3,300,147,0,1082,1083, + 3,298,146,0,1083,1084,3,278,136,0,1084,197,1,0,0,0,1085,1086,3,308, + 151,0,1086,1087,3,280,137,0,1087,1088,3,294,144,0,1088,1089,3,280, + 137,0,1089,1090,3,276,135,0,1090,1091,3,310,152,0,1091,199,1,0,0, + 0,1092,1093,3,308,151,0,1093,1094,3,280,137,0,1094,1095,3,296,145, + 0,1095,1096,3,288,141,0,1096,201,1,0,0,0,1097,1098,3,308,151,0,1098, + 1099,3,280,137,0,1099,1100,3,310,152,0,1100,1101,3,308,151,0,1101, + 203,1,0,0,0,1102,1103,3,308,151,0,1103,1104,3,280,137,0,1104,1105, + 3,310,152,0,1105,1106,3,310,152,0,1106,1107,3,288,141,0,1107,1108, + 3,298,146,0,1108,1109,3,284,139,0,1109,1110,3,308,151,0,1110,205, + 1,0,0,0,1111,1112,3,308,151,0,1112,1113,3,312,153,0,1113,1114,3, + 274,134,0,1114,1115,3,308,151,0,1115,1116,3,310,152,0,1116,1117, + 3,306,150,0,1117,1118,3,288,141,0,1118,1119,3,298,146,0,1119,1120, + 3,284,139,0,1120,207,1,0,0,0,1121,1122,3,310,152,0,1122,1123,3,286, + 140,0,1123,1124,3,280,137,0,1124,1125,3,298,146,0,1125,209,1,0,0, + 0,1126,1127,3,310,152,0,1127,1128,3,286,140,0,1128,1129,3,306,150, + 0,1129,1130,3,300,147,0,1130,1131,3,316,155,0,1131,211,1,0,0,0,1132, + 1133,3,310,152,0,1133,1134,3,288,141,0,1134,1135,3,280,137,0,1135, + 1136,3,308,151,0,1136,213,1,0,0,0,1137,1138,3,310,152,0,1138,1139, + 3,288,141,0,1139,1140,3,296,145,0,1140,1141,3,280,137,0,1141,1142, + 3,308,151,0,1142,1143,3,310,152,0,1143,1144,3,272,133,0,1144,1145, + 3,296,145,0,1145,1146,3,302,148,0,1146,215,1,0,0,0,1147,1148,3,310, + 152,0,1148,1149,3,300,147,0,1149,217,1,0,0,0,1150,1151,3,310,152, + 0,1151,1152,3,300,147,0,1152,1153,3,302,148,0,1153,219,1,0,0,0,1154, + 1155,3,310,152,0,1155,1156,3,300,147,0,1156,1157,3,310,152,0,1157, + 1158,3,272,133,0,1158,1159,3,294,144,0,1159,1160,3,308,151,0,1160, + 221,1,0,0,0,1161,1162,3,310,152,0,1162,1163,3,306,150,0,1163,1164, + 3,272,133,0,1164,1165,3,288,141,0,1165,1166,3,294,144,0,1166,1167, + 3,288,141,0,1167,1168,3,298,146,0,1168,1169,3,284,139,0,1169,223, + 1,0,0,0,1170,1171,3,310,152,0,1171,1172,3,306,150,0,1172,1173,3, + 288,141,0,1173,1174,3,296,145,0,1174,225,1,0,0,0,1175,1176,3,310, + 152,0,1176,1177,3,306,150,0,1177,1178,3,312,153,0,1178,1179,3,298, + 146,0,1179,1180,3,276,135,0,1180,1181,3,272,133,0,1181,1182,3,310, + 152,0,1182,1183,3,280,137,0,1183,227,1,0,0,0,1184,1185,3,310,152, + 0,1185,1186,3,306,150,0,1186,1187,3,320,157,0,1187,229,1,0,0,0,1188, + 1189,3,310,152,0,1189,1190,3,306,150,0,1190,1191,3,320,157,0,1191, + 1192,5,95,0,0,1192,1193,3,276,135,0,1193,1194,3,272,133,0,1194,1195, + 3,308,151,0,1195,1196,3,310,152,0,1196,231,1,0,0,0,1197,1198,3,312, + 153,0,1198,1199,3,298,146,0,1199,1200,3,274,134,0,1200,1201,3,300, + 147,0,1201,1202,3,312,153,0,1202,1203,3,298,146,0,1203,1204,3,278, + 136,0,1204,1205,3,280,137,0,1205,1206,3,278,136,0,1206,233,1,0,0, + 0,1207,1208,3,312,153,0,1208,1209,3,298,146,0,1209,1210,3,288,141, + 0,1210,1211,3,300,147,0,1211,1212,3,298,146,0,1212,235,1,0,0,0,1213, + 1214,3,312,153,0,1214,1215,3,298,146,0,1215,1216,3,302,148,0,1216, + 1217,3,288,141,0,1217,1218,3,314,154,0,1218,1219,3,300,147,0,1219, + 1220,3,310,152,0,1220,237,1,0,0,0,1221,1222,3,312,153,0,1222,1223, + 3,308,151,0,1223,1224,3,288,141,0,1224,1225,3,298,146,0,1225,1226, + 3,284,139,0,1226,239,1,0,0,0,1227,1228,3,314,154,0,1228,1229,3,272, + 133,0,1229,1230,3,294,144,0,1230,1231,3,312,153,0,1231,1232,3,280, + 137,0,1232,1233,3,308,151,0,1233,241,1,0,0,0,1234,1235,3,316,155, + 0,1235,1236,3,280,137,0,1236,1237,3,280,137,0,1237,1238,3,292,143, + 0,1238,243,1,0,0,0,1239,1240,3,316,155,0,1240,1241,3,286,140,0,1241, + 1242,3,280,137,0,1242,1243,3,298,146,0,1243,245,1,0,0,0,1244,1245, + 3,316,155,0,1245,1246,3,286,140,0,1246,1247,3,280,137,0,1247,1248, + 3,306,150,0,1248,1249,3,280,137,0,1249,247,1,0,0,0,1250,1251,3,316, + 155,0,1251,1252,3,286,140,0,1252,1253,3,288,141,0,1253,1254,3,294, + 144,0,1254,1255,3,280,137,0,1255,249,1,0,0,0,1256,1257,3,316,155, + 0,1257,1258,3,288,141,0,1258,1259,3,298,146,0,1259,1260,3,278,136, + 0,1260,1261,3,300,147,0,1261,1262,3,316,155,0,1262,251,1,0,0,0,1263, + 1264,3,316,155,0,1264,1265,3,288,141,0,1265,1266,3,310,152,0,1266, + 1267,3,286,140,0,1267,253,1,0,0,0,1268,1269,3,316,155,0,1269,1270, + 3,288,141,0,1270,1271,3,310,152,0,1271,1272,3,286,140,0,1272,1273, + 3,288,141,0,1273,1274,3,298,146,0,1274,255,1,0,0,0,1275,1276,3,320, + 157,0,1276,1277,3,280,137,0,1277,1278,3,272,133,0,1278,1279,3,306, + 150,0,1279,1286,1,0,0,0,1280,1281,3,320,157,0,1281,1282,3,320,157, + 0,1282,1283,3,320,157,0,1283,1284,3,320,157,0,1284,1286,1,0,0,0, + 1285,1275,1,0,0,0,1285,1280,1,0,0,0,1286,257,1,0,0,0,1287,1288,3, + 338,166,0,1288,1289,3,274,134,0,1289,1320,1,0,0,0,1290,1291,3,338, + 166,0,1291,1292,3,282,138,0,1292,1320,1,0,0,0,1293,1294,3,338,166, + 0,1294,1295,3,306,150,0,1295,1320,1,0,0,0,1296,1297,3,338,166,0, + 1297,1298,3,298,146,0,1298,1320,1,0,0,0,1299,1300,3,338,166,0,1300, + 1301,3,310,152,0,1301,1320,1,0,0,0,1302,1303,3,338,166,0,1303,1304, + 5,48,0,0,1304,1320,1,0,0,0,1305,1306,3,338,166,0,1306,1307,3,272, + 133,0,1307,1320,1,0,0,0,1308,1309,3,338,166,0,1309,1310,3,314,154, + 0,1310,1320,1,0,0,0,1311,1312,3,338,166,0,1312,1313,3,338,166,0, + 1313,1320,1,0,0,0,1314,1315,3,338,166,0,1315,1316,3,318,156,0,1316, + 1317,3,330,162,0,1317,1318,3,330,162,0,1318,1320,1,0,0,0,1319,1287, + 1,0,0,0,1319,1290,1,0,0,0,1319,1293,1,0,0,0,1319,1296,1,0,0,0,1319, + 1299,1,0,0,0,1319,1302,1,0,0,0,1319,1305,1,0,0,0,1319,1308,1,0,0, + 0,1319,1311,1,0,0,0,1319,1314,1,0,0,0,1320,259,1,0,0,0,1321,1325, + 3,324,159,0,1322,1325,3,426,210,0,1323,1325,3,352,173,0,1324,1321, + 1,0,0,0,1324,1322,1,0,0,0,1324,1323,1,0,0,0,1325,1332,1,0,0,0,1326, + 1331,3,324,159,0,1327,1331,3,426,210,0,1328,1331,3,328,161,0,1329, + 1331,3,352,173,0,1330,1326,1,0,0,0,1330,1327,1,0,0,0,1330,1328,1, + 0,0,0,1330,1329,1,0,0,0,1331,1334,1,0,0,0,1332,1330,1,0,0,0,1332, + 1333,1,0,0,0,1333,1368,1,0,0,0,1334,1332,1,0,0,0,1335,1346,3,336, + 165,0,1336,1345,8,0,0,0,1337,1345,3,258,126,0,1338,1339,3,338,166, + 0,1339,1340,3,408,201,0,1340,1345,1,0,0,0,1341,1342,3,336,165,0, + 1342,1343,3,336,165,0,1343,1345,1,0,0,0,1344,1336,1,0,0,0,1344,1337, + 1,0,0,0,1344,1338,1,0,0,0,1344,1341,1,0,0,0,1345,1348,1,0,0,0,1346, + 1344,1,0,0,0,1346,1347,1,0,0,0,1347,1349,1,0,0,0,1348,1346,1,0,0, + 0,1349,1350,3,336,165,0,1350,1368,1,0,0,0,1351,1362,3,402,198,0, + 1352,1361,8,1,0,0,1353,1361,3,258,126,0,1354,1355,3,338,166,0,1355, + 1356,3,402,198,0,1356,1361,1,0,0,0,1357,1358,3,402,198,0,1358,1359, + 3,402,198,0,1359,1361,1,0,0,0,1360,1352,1,0,0,0,1360,1353,1,0,0, + 0,1360,1354,1,0,0,0,1360,1357,1,0,0,0,1361,1364,1,0,0,0,1362,1360, + 1,0,0,0,1362,1363,1,0,0,0,1363,1365,1,0,0,0,1364,1362,1,0,0,0,1365, + 1366,3,402,198,0,1366,1368,1,0,0,0,1367,1324,1,0,0,0,1367,1335,1, + 0,0,0,1367,1351,1,0,0,0,1368,261,1,0,0,0,1369,1370,3,268,131,0,1370, + 1374,3,354,174,0,1371,1373,3,330,162,0,1372,1371,1,0,0,0,1373,1376, + 1,0,0,0,1374,1372,1,0,0,0,1374,1375,1,0,0,0,1375,1379,1,0,0,0,1376, + 1374,1,0,0,0,1377,1380,3,302,148,0,1378,1380,3,280,137,0,1379,1377, + 1,0,0,0,1379,1378,1,0,0,0,1380,1383,1,0,0,0,1381,1384,3,398,196, + 0,1382,1384,3,350,172,0,1383,1381,1,0,0,0,1383,1382,1,0,0,0,1383, + 1384,1,0,0,0,1384,1386,1,0,0,0,1385,1387,3,328,161,0,1386,1385,1, + 0,0,0,1387,1388,1,0,0,0,1388,1386,1,0,0,0,1388,1389,1,0,0,0,1389, + 1446,1,0,0,0,1390,1393,3,268,131,0,1391,1394,3,302,148,0,1392,1394, + 3,280,137,0,1393,1391,1,0,0,0,1393,1392,1,0,0,0,1394,1397,1,0,0, + 0,1395,1398,3,398,196,0,1396,1398,3,350,172,0,1397,1395,1,0,0,0, + 1397,1396,1,0,0,0,1397,1398,1,0,0,0,1398,1400,1,0,0,0,1399,1401, + 3,328,161,0,1400,1399,1,0,0,0,1401,1402,1,0,0,0,1402,1400,1,0,0, + 0,1402,1403,1,0,0,0,1403,1446,1,0,0,0,1404,1405,3,266,130,0,1405, + 1409,3,354,174,0,1406,1408,3,328,161,0,1407,1406,1,0,0,0,1408,1411, + 1,0,0,0,1409,1407,1,0,0,0,1409,1410,1,0,0,0,1410,1412,1,0,0,0,1411, + 1409,1,0,0,0,1412,1415,3,280,137,0,1413,1416,3,398,196,0,1414,1416, + 3,350,172,0,1415,1413,1,0,0,0,1415,1414,1,0,0,0,1415,1416,1,0,0, + 0,1416,1418,1,0,0,0,1417,1419,3,328,161,0,1418,1417,1,0,0,0,1419, + 1420,1,0,0,0,1420,1418,1,0,0,0,1420,1421,1,0,0,0,1421,1446,1,0,0, + 0,1422,1423,3,354,174,0,1423,1424,3,266,130,0,1424,1427,3,280,137, + 0,1425,1428,3,398,196,0,1426,1428,3,350,172,0,1427,1425,1,0,0,0, + 1427,1426,1,0,0,0,1427,1428,1,0,0,0,1428,1430,1,0,0,0,1429,1431, + 3,328,161,0,1430,1429,1,0,0,0,1431,1432,1,0,0,0,1432,1430,1,0,0, + 0,1432,1433,1,0,0,0,1433,1446,1,0,0,0,1434,1435,3,266,130,0,1435, + 1438,3,280,137,0,1436,1439,3,398,196,0,1437,1439,3,350,172,0,1438, + 1436,1,0,0,0,1438,1437,1,0,0,0,1438,1439,1,0,0,0,1439,1441,1,0,0, + 0,1440,1442,3,328,161,0,1441,1440,1,0,0,0,1442,1443,1,0,0,0,1443, + 1441,1,0,0,0,1443,1444,1,0,0,0,1444,1446,1,0,0,0,1445,1369,1,0,0, + 0,1445,1390,1,0,0,0,1445,1404,1,0,0,0,1445,1422,1,0,0,0,1445,1434, + 1,0,0,0,1446,263,1,0,0,0,1447,1449,5,48,0,0,1448,1450,3,326,160, + 0,1449,1448,1,0,0,0,1450,1451,1,0,0,0,1451,1449,1,0,0,0,1451,1452, + 1,0,0,0,1452,265,1,0,0,0,1453,1455,3,328,161,0,1454,1453,1,0,0,0, + 1455,1456,1,0,0,0,1456,1454,1,0,0,0,1456,1457,1,0,0,0,1457,267,1, + 0,0,0,1458,1459,5,48,0,0,1459,1461,3,318,156,0,1460,1462,3,330,162, + 0,1461,1460,1,0,0,0,1462,1463,1,0,0,0,1463,1461,1,0,0,0,1463,1464, + 1,0,0,0,1464,269,1,0,0,0,1465,1476,3,408,201,0,1466,1475,8,2,0,0, + 1467,1475,3,258,126,0,1468,1469,3,338,166,0,1469,1470,3,408,201, + 0,1470,1475,1,0,0,0,1471,1472,3,408,201,0,1472,1473,3,408,201,0, + 1473,1475,1,0,0,0,1474,1466,1,0,0,0,1474,1467,1,0,0,0,1474,1468, + 1,0,0,0,1474,1471,1,0,0,0,1475,1478,1,0,0,0,1476,1474,1,0,0,0,1476, + 1477,1,0,0,0,1477,1479,1,0,0,0,1478,1476,1,0,0,0,1479,1480,3,408, + 201,0,1480,271,1,0,0,0,1481,1482,7,3,0,0,1482,273,1,0,0,0,1483,1484, + 7,4,0,0,1484,275,1,0,0,0,1485,1486,7,5,0,0,1486,277,1,0,0,0,1487, + 1488,7,6,0,0,1488,279,1,0,0,0,1489,1490,7,7,0,0,1490,281,1,0,0,0, + 1491,1492,7,8,0,0,1492,283,1,0,0,0,1493,1494,7,9,0,0,1494,285,1, + 0,0,0,1495,1496,7,10,0,0,1496,287,1,0,0,0,1497,1498,7,11,0,0,1498, + 289,1,0,0,0,1499,1500,7,12,0,0,1500,291,1,0,0,0,1501,1502,7,13,0, + 0,1502,293,1,0,0,0,1503,1504,7,14,0,0,1504,295,1,0,0,0,1505,1506, + 7,15,0,0,1506,297,1,0,0,0,1507,1508,7,16,0,0,1508,299,1,0,0,0,1509, + 1510,7,17,0,0,1510,301,1,0,0,0,1511,1512,7,18,0,0,1512,303,1,0,0, + 0,1513,1514,7,19,0,0,1514,305,1,0,0,0,1515,1516,7,20,0,0,1516,307, + 1,0,0,0,1517,1518,7,21,0,0,1518,309,1,0,0,0,1519,1520,7,22,0,0,1520, + 311,1,0,0,0,1521,1522,7,23,0,0,1522,313,1,0,0,0,1523,1524,7,24,0, + 0,1524,315,1,0,0,0,1525,1526,7,25,0,0,1526,317,1,0,0,0,1527,1528, + 7,26,0,0,1528,319,1,0,0,0,1529,1530,7,27,0,0,1530,321,1,0,0,0,1531, + 1532,7,28,0,0,1532,323,1,0,0,0,1533,1534,7,29,0,0,1534,325,1,0,0, + 0,1535,1536,7,30,0,0,1536,327,1,0,0,0,1537,1538,7,31,0,0,1538,329, + 1,0,0,0,1539,1540,7,32,0,0,1540,331,1,0,0,0,1541,1542,5,45,0,0,1542, + 1543,5,62,0,0,1543,333,1,0,0,0,1544,1545,5,42,0,0,1545,335,1,0,0, + 0,1546,1547,5,96,0,0,1547,337,1,0,0,0,1548,1549,5,92,0,0,1549,339, + 1,0,0,0,1550,1551,5,58,0,0,1551,1552,5,58,0,0,1552,341,1,0,0,0,1553, + 1554,5,58,0,0,1554,1555,5,61,0,0,1555,343,1,0,0,0,1556,1557,5,58, + 0,0,1557,345,1,0,0,0,1558,1559,5,44,0,0,1559,347,1,0,0,0,1560,1561, + 5,124,0,0,1561,1562,5,124,0,0,1562,349,1,0,0,0,1563,1564,5,45,0, + 0,1564,351,1,0,0,0,1565,1566,5,36,0,0,1566,353,1,0,0,0,1567,1568, + 5,46,0,0,1568,355,1,0,0,0,1569,1570,5,61,0,0,1570,1571,5,61,0,0, + 1571,357,1,0,0,0,1572,1573,5,61,0,0,1573,359,1,0,0,0,1574,1575,5, + 62,0,0,1575,1576,5,61,0,0,1576,361,1,0,0,0,1577,1578,5,62,0,0,1578, + 363,1,0,0,0,1579,1580,5,35,0,0,1580,365,1,0,0,0,1581,1582,5,126, + 0,0,1582,1583,5,42,0,0,1583,367,1,0,0,0,1584,1585,5,61,0,0,1585, + 1586,5,126,0,0,1586,1587,5,42,0,0,1587,369,1,0,0,0,1588,1589,5,123, + 0,0,1589,1590,1,0,0,0,1590,1591,6,182,0,0,1591,371,1,0,0,0,1592, + 1593,5,91,0,0,1593,373,1,0,0,0,1594,1595,5,40,0,0,1595,375,1,0,0, + 0,1596,1597,5,60,0,0,1597,1598,5,61,0,0,1598,377,1,0,0,0,1599,1600, + 5,60,0,0,1600,1601,5,47,0,0,1601,1602,1,0,0,0,1602,1603,6,186,1, + 0,1603,1604,6,186,2,0,1604,379,1,0,0,0,1605,1606,5,60,0,0,1606,1607, + 4,187,0,0,1607,1608,1,0,0,0,1608,1609,6,187,3,0,1609,1610,6,187, + 4,0,1610,381,1,0,0,0,1611,1612,5,60,0,0,1612,383,1,0,0,0,1613,1614, + 5,60,0,0,1614,1615,5,47,0,0,1615,385,1,0,0,0,1616,1617,5,33,0,0, + 1617,1621,5,61,0,0,1618,1619,5,60,0,0,1619,1621,5,62,0,0,1620,1616, + 1,0,0,0,1620,1618,1,0,0,0,1621,387,1,0,0,0,1622,1623,5,33,0,0,1623, + 1624,5,126,0,0,1624,1625,5,42,0,0,1625,389,1,0,0,0,1626,1627,5,33, + 0,0,1627,1628,5,126,0,0,1628,391,1,0,0,0,1629,1630,5,63,0,0,1630, + 1631,5,46,0,0,1631,393,1,0,0,0,1632,1633,5,63,0,0,1633,1634,5,63, + 0,0,1634,395,1,0,0,0,1635,1636,5,37,0,0,1636,397,1,0,0,0,1637,1638, + 5,43,0,0,1638,399,1,0,0,0,1639,1640,5,63,0,0,1640,401,1,0,0,0,1641, + 1642,5,34,0,0,1642,403,1,0,0,0,1643,1644,5,102,0,0,1644,1645,5,39, + 0,0,1645,1646,1,0,0,0,1646,1647,6,199,5,0,1647,405,1,0,0,0,1648, + 1649,5,70,0,0,1649,1650,5,39,0,0,1650,1651,1,0,0,0,1651,1652,6,200, + 6,0,1652,407,1,0,0,0,1653,1654,5,39,0,0,1654,409,1,0,0,0,1655,1656, + 5,126,0,0,1656,411,1,0,0,0,1657,1658,5,61,0,0,1658,1659,5,126,0, + 0,1659,413,1,0,0,0,1660,1661,5,125,0,0,1661,1662,1,0,0,0,1662,1663, + 6,204,7,0,1663,415,1,0,0,0,1664,1665,5,93,0,0,1665,417,1,0,0,0,1666, + 1667,5,41,0,0,1667,419,1,0,0,0,1668,1669,5,59,0,0,1669,421,1,0,0, + 0,1670,1671,5,47,0,0,1671,423,1,0,0,0,1672,1673,5,47,0,0,1673,1674, + 5,62,0,0,1674,425,1,0,0,0,1675,1676,5,95,0,0,1676,427,1,0,0,0,1677, + 1678,5,47,0,0,1678,1679,5,42,0,0,1679,1683,1,0,0,0,1680,1682,9,0, + 0,0,1681,1680,1,0,0,0,1682,1685,1,0,0,0,1683,1684,1,0,0,0,1683,1681, + 1,0,0,0,1684,1686,1,0,0,0,1685,1683,1,0,0,0,1686,1687,5,42,0,0,1687, + 1688,5,47,0,0,1688,1689,1,0,0,0,1689,1690,6,211,8,0,1690,429,1,0, + 0,0,1691,1692,5,45,0,0,1692,1696,5,45,0,0,1693,1694,5,47,0,0,1694, + 1696,5,47,0,0,1695,1691,1,0,0,0,1695,1693,1,0,0,0,1696,1700,1,0, + 0,0,1697,1699,8,33,0,0,1698,1697,1,0,0,0,1699,1702,1,0,0,0,1700, + 1698,1,0,0,0,1700,1701,1,0,0,0,1701,1704,1,0,0,0,1702,1700,1,0,0, + 0,1703,1705,7,34,0,0,1704,1703,1,0,0,0,1705,1706,1,0,0,0,1706,1707, + 6,212,8,0,1707,431,1,0,0,0,1708,1709,7,35,0,0,1709,1710,1,0,0,0, + 1710,1711,6,213,9,0,1711,433,1,0,0,0,1712,1724,8,36,0,0,1713,1724, + 3,258,126,0,1714,1715,3,338,166,0,1715,1716,3,408,201,0,1716,1724, + 1,0,0,0,1717,1718,3,338,166,0,1718,1719,3,370,182,0,1719,1724,1, + 0,0,0,1720,1721,3,408,201,0,1721,1722,3,408,201,0,1722,1724,1,0, + 0,0,1723,1712,1,0,0,0,1723,1713,1,0,0,0,1723,1714,1,0,0,0,1723,1717, + 1,0,0,0,1723,1720,1,0,0,0,1724,1725,1,0,0,0,1725,1723,1,0,0,0,1725, + 1726,1,0,0,0,1726,435,1,0,0,0,1727,1728,3,370,182,0,1728,1729,1, + 0,0,0,1729,1730,6,215,0,0,1730,437,1,0,0,0,1731,1732,3,408,201,0, + 1732,1733,1,0,0,0,1733,1734,6,216,10,0,1734,1735,6,216,7,0,1735, + 439,1,0,0,0,1736,1742,8,37,0,0,1737,1742,3,258,126,0,1738,1739,3, + 338,166,0,1739,1740,3,370,182,0,1740,1742,1,0,0,0,1741,1736,1,0, + 0,0,1741,1737,1,0,0,0,1741,1738,1,0,0,0,1742,1743,1,0,0,0,1743,1741, + 1,0,0,0,1743,1744,1,0,0,0,1744,441,1,0,0,0,1745,1746,3,370,182,0, + 1746,1747,1,0,0,0,1747,1748,6,218,0,0,1748,443,1,0,0,0,1749,1750, + 5,47,0,0,1750,1751,5,62,0,0,1751,1752,1,0,0,0,1752,1753,6,219,11, + 0,1753,1754,6,219,7,0,1754,445,1,0,0,0,1755,1756,5,62,0,0,1756,1757, + 1,0,0,0,1757,1758,6,220,12,0,1758,1759,6,220,7,0,1759,1760,6,220, + 13,0,1760,447,1,0,0,0,1761,1765,7,38,0,0,1762,1764,7,39,0,0,1763, + 1762,1,0,0,0,1764,1767,1,0,0,0,1765,1763,1,0,0,0,1765,1766,1,0,0, + 0,1766,1768,1,0,0,0,1767,1765,1,0,0,0,1768,1769,6,221,14,0,1769, + 449,1,0,0,0,1770,1771,5,61,0,0,1771,1772,1,0,0,0,1772,1773,6,222, + 15,0,1773,451,1,0,0,0,1774,1775,3,270,132,0,1775,1776,1,0,0,0,1776, + 1777,6,223,16,0,1777,453,1,0,0,0,1778,1780,7,40,0,0,1779,1778,1, + 0,0,0,1780,1781,1,0,0,0,1781,1779,1,0,0,0,1781,1782,1,0,0,0,1782, + 1783,1,0,0,0,1783,1784,6,224,9,0,1784,455,1,0,0,0,1785,1786,5,123, + 0,0,1786,1787,1,0,0,0,1787,1788,6,225,17,0,1788,1789,6,225,0,0,1789, + 457,1,0,0,0,1790,1791,5,62,0,0,1791,1792,1,0,0,0,1792,1793,6,226, + 12,0,1793,1794,6,226,7,0,1794,459,1,0,0,0,1795,1799,7,38,0,0,1796, + 1798,7,39,0,0,1797,1796,1,0,0,0,1798,1801,1,0,0,0,1799,1797,1,0, + 0,0,1799,1800,1,0,0,0,1800,1802,1,0,0,0,1801,1799,1,0,0,0,1802,1803, + 6,227,14,0,1803,461,1,0,0,0,1804,1806,7,40,0,0,1805,1804,1,0,0,0, + 1806,1807,1,0,0,0,1807,1805,1,0,0,0,1807,1808,1,0,0,0,1808,1809, + 1,0,0,0,1809,1810,6,228,9,0,1810,463,1,0,0,0,1811,1813,8,41,0,0, + 1812,1811,1,0,0,0,1813,1814,1,0,0,0,1814,1812,1,0,0,0,1814,1815, + 1,0,0,0,1815,465,1,0,0,0,1816,1817,5,123,0,0,1817,1818,1,0,0,0,1818, + 1819,6,230,17,0,1819,1820,6,230,0,0,1820,467,1,0,0,0,1821,1822,5, + 60,0,0,1822,1823,5,47,0,0,1823,1824,1,0,0,0,1824,1825,6,231,1,0, + 1825,1826,6,231,7,0,1826,1827,6,231,2,0,1827,469,1,0,0,0,1828,1829, + 5,60,0,0,1829,1830,1,0,0,0,1830,1831,6,232,3,0,1831,1832,6,232,4, + 0,1832,471,1,0,0,0,1833,1835,7,40,0,0,1834,1833,1,0,0,0,1835,1836, + 1,0,0,0,1836,1834,1,0,0,0,1836,1837,1,0,0,0,1837,1838,1,0,0,0,1838, + 1839,6,233,9,0,1839,473,1,0,0,0,53,0,1,2,3,4,5,514,789,1285,1319, + 1324,1330,1332,1344,1346,1360,1362,1367,1374,1379,1383,1388,1393, + 1397,1402,1409,1415,1420,1427,1432,1438,1443,1445,1451,1456,1463, + 1474,1476,1620,1683,1695,1700,1704,1723,1725,1741,1743,1765,1781, + 1799,1807,1814,1836,18,5,0,0,7,158,0,5,4,0,7,157,0,5,3,0,5,1,0,5, + 2,0,4,0,0,6,0,0,0,1,0,7,170,0,7,178,0,7,149,0,5,5,0,7,128,0,7,147, + 0,7,133,0,7,153,0 ] class HogQLLexer(Lexer): @@ -768,159 +794,165 @@ class HogQLLexer(Lexer): EXCLUDE = 29 EXTRACT = 30 FINAL = 31 - FINALLY = 32 - FIRST = 33 - FN = 34 - FOLLOWING = 35 - FOR = 36 - FROM = 37 - FULL = 38 - FUN = 39 - GROUP = 40 - GROUPING = 41 - HAVING = 42 - HOUR = 43 - ID = 44 - IF = 45 - ILIKE = 46 - IN = 47 - INF = 48 - INNER = 49 - INTERSECT = 50 - INTERVAL = 51 - IS = 52 - JOIN = 53 - KEY = 54 - LAMBDA = 55 - LAST = 56 - LEADING = 57 - LEFT = 58 - LET = 59 - LIKE = 60 - LIMIT = 61 - MATERIALIZED = 62 - MINUTE = 63 - MONTH = 64 - NAME = 65 - NAN_SQL = 66 - NOT = 67 - NULL_SQL = 68 - NULLS = 69 - OFFSET = 70 - ON = 71 - OR = 72 - ORDER = 73 - OUTER = 74 - OVER = 75 - PARTITION = 76 - PRECEDING = 77 - PREWHERE = 78 - QUALIFY = 79 - QUARTER = 80 - RANGE = 81 - RECURSIVE = 82 - REPLACE = 83 - RETURN = 84 - RIGHT = 85 - ROLLUP = 86 - ROW = 87 - ROWS = 88 - SAMPLE = 89 - SECOND = 90 - SELECT = 91 - SEMI = 92 - SETS = 93 - SETTINGS = 94 - SUBSTRING = 95 - THEN = 96 - THROW = 97 - TIES = 98 - TIMESTAMP = 99 - TO = 100 - TOP = 101 - TOTALS = 102 - TRAILING = 103 - TRIM = 104 - TRUNCATE = 105 - TRY = 106 - TRY_CAST = 107 - UNBOUNDED = 108 - UNION = 109 - UNPIVOT = 110 - USING = 111 - VALUES = 112 - WEEK = 113 - WHEN = 114 - WHERE = 115 - WHILE = 116 - WINDOW = 117 - WITH = 118 - WITHIN = 119 - YEAR = 120 - ESCAPE_CHAR_COMMON = 121 - IDENTIFIER = 122 - FLOATING_LITERAL = 123 - OCTAL_LITERAL = 124 - DECIMAL_LITERAL = 125 - HEXADECIMAL_LITERAL = 126 - STRING_LITERAL = 127 - ARROW = 128 - ASTERISK = 129 - BACKQUOTE = 130 - BACKSLASH = 131 - DOUBLECOLON = 132 - COLONEQUALS = 133 - COLON = 134 - COMMA = 135 - CONCAT = 136 - DASH = 137 - DOLLAR = 138 - DOT = 139 - EQ_DOUBLE = 140 - EQ_SINGLE = 141 - GT_EQ = 142 - GT = 143 - HASH = 144 - IREGEX_SINGLE = 145 - IREGEX_DOUBLE = 146 - LBRACE = 147 - LBRACKET = 148 - LPAREN = 149 - LT_EQ = 150 - LT = 151 - LT_SLASH = 152 - NOT_EQ = 153 - NOT_IREGEX = 154 - NOT_REGEX = 155 - NULL_PROPERTY = 156 - NULLISH = 157 - PERCENT = 158 - PLUS = 159 - QUERY = 160 - QUOTE_DOUBLE = 161 - QUOTE_SINGLE_TEMPLATE = 162 - QUOTE_SINGLE_TEMPLATE_FULL = 163 - QUOTE_SINGLE = 164 - REGEX_SINGLE = 165 - REGEX_DOUBLE = 166 - RBRACE = 167 - RBRACKET = 168 - RPAREN = 169 - SEMICOLON = 170 - SLASH = 171 - SLASH_GT = 172 - UNDERSCORE = 173 - MULTI_LINE_COMMENT = 174 - SINGLE_LINE_COMMENT = 175 - WHITESPACE = 176 - STRING_TEXT = 177 - STRING_ESCAPE_TRIGGER = 178 - FULL_STRING_TEXT = 179 - FULL_STRING_ESCAPE_TRIGGER = 180 - TAG_WS = 181 - TAGC_WS = 182 - HOGQLX_TEXT_TEXT = 183 - HOGQLX_TEXT_WS = 184 + FILTER = 32 + FINALLY = 33 + FIRST = 34 + FN = 35 + FOLLOWING = 36 + FOR = 37 + FROM = 38 + FULL = 39 + FUN = 40 + GROUP = 41 + GROUPING = 42 + HAVING = 43 + HOUR = 44 + ID = 45 + IF = 46 + ILIKE = 47 + IGNORE = 48 + INCLUDE = 49 + IN = 50 + INF = 51 + INNER = 52 + INTERSECT = 53 + INTERVAL = 54 + IS = 55 + JOIN = 56 + KEY = 57 + LAMBDA = 58 + LAST = 59 + LEADING = 60 + LEFT = 61 + LET = 62 + LIKE = 63 + LIMIT = 64 + MATERIALIZED = 65 + MINUTE = 66 + MONTH = 67 + NAME = 68 + NATURAL = 69 + NAN_SQL = 70 + NOT = 71 + NULL_SQL = 72 + NULLS = 73 + OFFSET = 74 + ON = 75 + OR = 76 + ORDER = 77 + OUTER = 78 + OVER = 79 + PARTITION = 80 + PIVOT = 81 + POSITIONAL = 82 + PRECEDING = 83 + PREWHERE = 84 + QUALIFY = 85 + QUARTER = 86 + RANGE = 87 + RECURSIVE = 88 + REPLACE = 89 + RETURN = 90 + RIGHT = 91 + ROLLUP = 92 + ROW = 93 + ROWS = 94 + SAMPLE = 95 + SECOND = 96 + SELECT = 97 + SEMI = 98 + SETS = 99 + SETTINGS = 100 + SUBSTRING = 101 + THEN = 102 + THROW = 103 + TIES = 104 + TIMESTAMP = 105 + TO = 106 + TOP = 107 + TOTALS = 108 + TRAILING = 109 + TRIM = 110 + TRUNCATE = 111 + TRY = 112 + TRY_CAST = 113 + UNBOUNDED = 114 + UNION = 115 + UNPIVOT = 116 + USING = 117 + VALUES = 118 + WEEK = 119 + WHEN = 120 + WHERE = 121 + WHILE = 122 + WINDOW = 123 + WITH = 124 + WITHIN = 125 + YEAR = 126 + ESCAPE_CHAR_COMMON = 127 + IDENTIFIER = 128 + FLOATING_LITERAL = 129 + OCTAL_LITERAL = 130 + DECIMAL_LITERAL = 131 + HEXADECIMAL_LITERAL = 132 + STRING_LITERAL = 133 + ARROW = 134 + ASTERISK = 135 + BACKQUOTE = 136 + BACKSLASH = 137 + DOUBLECOLON = 138 + COLONEQUALS = 139 + COLON = 140 + COMMA = 141 + CONCAT = 142 + DASH = 143 + DOLLAR = 144 + DOT = 145 + EQ_DOUBLE = 146 + EQ_SINGLE = 147 + GT_EQ = 148 + GT = 149 + HASH = 150 + IREGEX_SINGLE = 151 + IREGEX_DOUBLE = 152 + LBRACE = 153 + LBRACKET = 154 + LPAREN = 155 + LT_EQ = 156 + LT = 157 + LT_SLASH = 158 + NOT_EQ = 159 + NOT_IREGEX = 160 + NOT_REGEX = 161 + NULL_PROPERTY = 162 + NULLISH = 163 + PERCENT = 164 + PLUS = 165 + QUERY = 166 + QUOTE_DOUBLE = 167 + QUOTE_SINGLE_TEMPLATE = 168 + QUOTE_SINGLE_TEMPLATE_FULL = 169 + QUOTE_SINGLE = 170 + REGEX_SINGLE = 171 + REGEX_DOUBLE = 172 + RBRACE = 173 + RBRACKET = 174 + RPAREN = 175 + SEMICOLON = 176 + SLASH = 177 + SLASH_GT = 178 + UNDERSCORE = 179 + MULTI_LINE_COMMENT = 180 + SINGLE_LINE_COMMENT = 181 + WHITESPACE = 182 + STRING_TEXT = 183 + STRING_ESCAPE_TRIGGER = 184 + FULL_STRING_TEXT = 185 + FULL_STRING_ESCAPE_TRIGGER = 186 + TAG_WS = 187 + TAGC_WS = 188 + HOGQLX_TEXT_TEXT = 189 + HOGQLX_TEXT_WS = 190 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -940,20 +972,21 @@ class HogQLLexer(Lexer): "BETWEEN", "BOTH", "BY", "CASE", "CAST", "CATCH", "COHORT", "COLLATE", "COLUMNS", "CROSS", "CUBE", "CURRENT", "DATE", "DAY", "DESC", "DESCENDING", "DISTINCT", "ELSE", "END", "EXCEPT", "EXCLUDE", - "EXTRACT", "FINAL", "FINALLY", "FIRST", "FN", "FOLLOWING", "FOR", - "FROM", "FULL", "FUN", "GROUP", "GROUPING", "HAVING", "HOUR", - "ID", "IF", "ILIKE", "IN", "INF", "INNER", "INTERSECT", "INTERVAL", - "IS", "JOIN", "KEY", "LAMBDA", "LAST", "LEADING", "LEFT", "LET", - "LIKE", "LIMIT", "MATERIALIZED", "MINUTE", "MONTH", "NAME", - "NAN_SQL", "NOT", "NULL_SQL", "NULLS", "OFFSET", "ON", "OR", - "ORDER", "OUTER", "OVER", "PARTITION", "PRECEDING", "PREWHERE", - "QUALIFY", "QUARTER", "RANGE", "RECURSIVE", "REPLACE", "RETURN", - "RIGHT", "ROLLUP", "ROW", "ROWS", "SAMPLE", "SECOND", "SELECT", - "SEMI", "SETS", "SETTINGS", "SUBSTRING", "THEN", "THROW", "TIES", - "TIMESTAMP", "TO", "TOP", "TOTALS", "TRAILING", "TRIM", "TRUNCATE", - "TRY", "TRY_CAST", "UNBOUNDED", "UNION", "UNPIVOT", "USING", - "VALUES", "WEEK", "WHEN", "WHERE", "WHILE", "WINDOW", "WITH", - "WITHIN", "YEAR", "ESCAPE_CHAR_COMMON", "IDENTIFIER", "FLOATING_LITERAL", + "EXTRACT", "FINAL", "FILTER", "FINALLY", "FIRST", "FN", "FOLLOWING", + "FOR", "FROM", "FULL", "FUN", "GROUP", "GROUPING", "HAVING", + "HOUR", "ID", "IF", "ILIKE", "IGNORE", "INCLUDE", "IN", "INF", + "INNER", "INTERSECT", "INTERVAL", "IS", "JOIN", "KEY", "LAMBDA", + "LAST", "LEADING", "LEFT", "LET", "LIKE", "LIMIT", "MATERIALIZED", + "MINUTE", "MONTH", "NAME", "NATURAL", "NAN_SQL", "NOT", "NULL_SQL", + "NULLS", "OFFSET", "ON", "OR", "ORDER", "OUTER", "OVER", "PARTITION", + "PIVOT", "POSITIONAL", "PRECEDING", "PREWHERE", "QUALIFY", "QUARTER", + "RANGE", "RECURSIVE", "REPLACE", "RETURN", "RIGHT", "ROLLUP", + "ROW", "ROWS", "SAMPLE", "SECOND", "SELECT", "SEMI", "SETS", + "SETTINGS", "SUBSTRING", "THEN", "THROW", "TIES", "TIMESTAMP", + "TO", "TOP", "TOTALS", "TRAILING", "TRIM", "TRUNCATE", "TRY", + "TRY_CAST", "UNBOUNDED", "UNION", "UNPIVOT", "USING", "VALUES", + "WEEK", "WHEN", "WHERE", "WHILE", "WINDOW", "WITH", "WITHIN", + "YEAR", "ESCAPE_CHAR_COMMON", "IDENTIFIER", "FLOATING_LITERAL", "OCTAL_LITERAL", "DECIMAL_LITERAL", "HEXADECIMAL_LITERAL", "STRING_LITERAL", "ARROW", "ASTERISK", "BACKQUOTE", "BACKSLASH", "DOUBLECOLON", "COLONEQUALS", "COLON", "COMMA", "CONCAT", "DASH", "DOLLAR", @@ -972,34 +1005,36 @@ class HogQLLexer(Lexer): "ASOF", "BETWEEN", "BOTH", "BY", "CASE", "CAST", "CATCH", "COHORT", "COLLATE", "COLUMNS", "CROSS", "CUBE", "CURRENT", "DATE", "DAY", "DESC", "DESCENDING", "DISTINCT", "ELSE", - "END", "EXCEPT", "EXCLUDE", "EXTRACT", "FINAL", "FINALLY", - "FIRST", "FN", "FOLLOWING", "FOR", "FROM", "FULL", "FUN", - "GROUP", "GROUPING", "HAVING", "HOUR", "ID", "IF", "ILIKE", - "IN", "INF", "INNER", "INTERSECT", "INTERVAL", "IS", "JOIN", - "KEY", "LAMBDA", "LAST", "LEADING", "LEFT", "LET", "LIKE", - "LIMIT", "MATERIALIZED", "MINUTE", "MONTH", "NAME", "NAN_SQL", - "NOT", "NULL_SQL", "NULLS", "OFFSET", "ON", "OR", "ORDER", - "OUTER", "OVER", "PARTITION", "PRECEDING", "PREWHERE", - "QUALIFY", "QUARTER", "RANGE", "RECURSIVE", "REPLACE", - "RETURN", "RIGHT", "ROLLUP", "ROW", "ROWS", "SAMPLE", - "SECOND", "SELECT", "SEMI", "SETS", "SETTINGS", "SUBSTRING", - "THEN", "THROW", "TIES", "TIMESTAMP", "TO", "TOP", "TOTALS", - "TRAILING", "TRIM", "TRUNCATE", "TRY", "TRY_CAST", "UNBOUNDED", - "UNION", "UNPIVOT", "USING", "VALUES", "WEEK", "WHEN", - "WHERE", "WHILE", "WINDOW", "WITH", "WITHIN", "YEAR", - "ESCAPE_CHAR_COMMON", "IDENTIFIER", "FLOATING_LITERAL", - "OCTAL_LITERAL", "DECIMAL_LITERAL", "HEXADECIMAL_LITERAL", - "STRING_LITERAL", "A", "B", "C", "D", "E", "F", "G", "H", - "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", - "T", "U", "V", "W", "X", "Y", "Z", "LETTER", "OCT_DIGIT", - "DEC_DIGIT", "HEX_DIGIT", "ARROW", "ASTERISK", "BACKQUOTE", - "BACKSLASH", "DOUBLECOLON", "COLONEQUALS", "COLON", "COMMA", - "CONCAT", "DASH", "DOLLAR", "DOT", "EQ_DOUBLE", "EQ_SINGLE", - "GT_EQ", "GT", "HASH", "IREGEX_SINGLE", "IREGEX_DOUBLE", - "LBRACE", "LBRACKET", "LPAREN", "LT_EQ", "TAG_LT_SLASH", - "TAG_LT_OPEN", "LT", "LT_SLASH", "NOT_EQ", "NOT_IREGEX", - "NOT_REGEX", "NULL_PROPERTY", "NULLISH", "PERCENT", "PLUS", - "QUERY", "QUOTE_DOUBLE", "QUOTE_SINGLE_TEMPLATE", "QUOTE_SINGLE_TEMPLATE_FULL", + "END", "EXCEPT", "EXCLUDE", "EXTRACT", "FINAL", "FILTER", + "FINALLY", "FIRST", "FN", "FOLLOWING", "FOR", "FROM", + "FULL", "FUN", "GROUP", "GROUPING", "HAVING", "HOUR", + "ID", "IF", "ILIKE", "IGNORE", "INCLUDE", "IN", "INF", + "INNER", "INTERSECT", "INTERVAL", "IS", "JOIN", "KEY", + "LAMBDA", "LAST", "LEADING", "LEFT", "LET", "LIKE", "LIMIT", + "MATERIALIZED", "MINUTE", "MONTH", "NAME", "NATURAL", + "NAN_SQL", "NOT", "NULL_SQL", "NULLS", "OFFSET", "ON", + "OR", "ORDER", "OUTER", "OVER", "PARTITION", "PIVOT", + "POSITIONAL", "PRECEDING", "PREWHERE", "QUALIFY", "QUARTER", + "RANGE", "RECURSIVE", "REPLACE", "RETURN", "RIGHT", "ROLLUP", + "ROW", "ROWS", "SAMPLE", "SECOND", "SELECT", "SEMI", "SETS", + "SETTINGS", "SUBSTRING", "THEN", "THROW", "TIES", "TIMESTAMP", + "TO", "TOP", "TOTALS", "TRAILING", "TRIM", "TRUNCATE", + "TRY", "TRY_CAST", "UNBOUNDED", "UNION", "UNPIVOT", "USING", + "VALUES", "WEEK", "WHEN", "WHERE", "WHILE", "WINDOW", + "WITH", "WITHIN", "YEAR", "ESCAPE_CHAR_COMMON", "IDENTIFIER", + "FLOATING_LITERAL", "OCTAL_LITERAL", "DECIMAL_LITERAL", + "HEXADECIMAL_LITERAL", "STRING_LITERAL", "A", "B", "C", + "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", + "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", + "Z", "LETTER", "OCT_DIGIT", "DEC_DIGIT", "HEX_DIGIT", + "ARROW", "ASTERISK", "BACKQUOTE", "BACKSLASH", "DOUBLECOLON", + "COLONEQUALS", "COLON", "COMMA", "CONCAT", "DASH", "DOLLAR", + "DOT", "EQ_DOUBLE", "EQ_SINGLE", "GT_EQ", "GT", "HASH", + "IREGEX_SINGLE", "IREGEX_DOUBLE", "LBRACE", "LBRACKET", + "LPAREN", "LT_EQ", "TAG_LT_SLASH", "TAG_LT_OPEN", "LT", + "LT_SLASH", "NOT_EQ", "NOT_IREGEX", "NOT_REGEX", "NULL_PROPERTY", + "NULLISH", "PERCENT", "PLUS", "QUERY", "QUOTE_DOUBLE", + "QUOTE_SINGLE_TEMPLATE", "QUOTE_SINGLE_TEMPLATE_FULL", "QUOTE_SINGLE", "REGEX_SINGLE", "REGEX_DOUBLE", "RBRACE", "RBRACKET", "RPAREN", "SEMICOLON", "SLASH", "SLASH_GT", "UNDERSCORE", "MULTI_LINE_COMMENT", "SINGLE_LINE_COMMENT", @@ -1085,7 +1120,7 @@ def isOpeningTag(self) -> bool: def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): if self._predicates is None: preds = dict() - preds[181] = self.TAG_LT_OPEN_sempred + preds[187] = self.TAG_LT_OPEN_sempred self._predicates = preds pred = self._predicates.get(ruleIndex, None) if pred is not None: diff --git a/posthog/hogql/grammar/HogQLLexer.tokens b/posthog/hogql/grammar/HogQLLexer.tokens index ff4c37fb8c46..83760b967113 100644 --- a/posthog/hogql/grammar/HogQLLexer.tokens +++ b/posthog/hogql/grammar/HogQLLexer.tokens @@ -29,198 +29,204 @@ EXCEPT=28 EXCLUDE=29 EXTRACT=30 FINAL=31 -FINALLY=32 -FIRST=33 -FN=34 -FOLLOWING=35 -FOR=36 -FROM=37 -FULL=38 -FUN=39 -GROUP=40 -GROUPING=41 -HAVING=42 -HOUR=43 -ID=44 -IF=45 -ILIKE=46 -IN=47 -INF=48 -INNER=49 -INTERSECT=50 -INTERVAL=51 -IS=52 -JOIN=53 -KEY=54 -LAMBDA=55 -LAST=56 -LEADING=57 -LEFT=58 -LET=59 -LIKE=60 -LIMIT=61 -MATERIALIZED=62 -MINUTE=63 -MONTH=64 -NAME=65 -NAN_SQL=66 -NOT=67 -NULL_SQL=68 -NULLS=69 -OFFSET=70 -ON=71 -OR=72 -ORDER=73 -OUTER=74 -OVER=75 -PARTITION=76 -PRECEDING=77 -PREWHERE=78 -QUALIFY=79 -QUARTER=80 -RANGE=81 -RECURSIVE=82 -REPLACE=83 -RETURN=84 -RIGHT=85 -ROLLUP=86 -ROW=87 -ROWS=88 -SAMPLE=89 -SECOND=90 -SELECT=91 -SEMI=92 -SETS=93 -SETTINGS=94 -SUBSTRING=95 -THEN=96 -THROW=97 -TIES=98 -TIMESTAMP=99 -TO=100 -TOP=101 -TOTALS=102 -TRAILING=103 -TRIM=104 -TRUNCATE=105 -TRY=106 -TRY_CAST=107 -UNBOUNDED=108 -UNION=109 -UNPIVOT=110 -USING=111 -VALUES=112 -WEEK=113 -WHEN=114 -WHERE=115 -WHILE=116 -WINDOW=117 -WITH=118 -WITHIN=119 -YEAR=120 -ESCAPE_CHAR_COMMON=121 -IDENTIFIER=122 -FLOATING_LITERAL=123 -OCTAL_LITERAL=124 -DECIMAL_LITERAL=125 -HEXADECIMAL_LITERAL=126 -STRING_LITERAL=127 -ARROW=128 -ASTERISK=129 -BACKQUOTE=130 -BACKSLASH=131 -DOUBLECOLON=132 -COLONEQUALS=133 -COLON=134 -COMMA=135 -CONCAT=136 -DASH=137 -DOLLAR=138 -DOT=139 -EQ_DOUBLE=140 -EQ_SINGLE=141 -GT_EQ=142 -GT=143 -HASH=144 -IREGEX_SINGLE=145 -IREGEX_DOUBLE=146 -LBRACE=147 -LBRACKET=148 -LPAREN=149 -LT_EQ=150 -LT=151 -LT_SLASH=152 -NOT_EQ=153 -NOT_IREGEX=154 -NOT_REGEX=155 -NULL_PROPERTY=156 -NULLISH=157 -PERCENT=158 -PLUS=159 -QUERY=160 -QUOTE_DOUBLE=161 -QUOTE_SINGLE_TEMPLATE=162 -QUOTE_SINGLE_TEMPLATE_FULL=163 -QUOTE_SINGLE=164 -REGEX_SINGLE=165 -REGEX_DOUBLE=166 -RBRACE=167 -RBRACKET=168 -RPAREN=169 -SEMICOLON=170 -SLASH=171 -SLASH_GT=172 -UNDERSCORE=173 -MULTI_LINE_COMMENT=174 -SINGLE_LINE_COMMENT=175 -WHITESPACE=176 -STRING_TEXT=177 -STRING_ESCAPE_TRIGGER=178 -FULL_STRING_TEXT=179 -FULL_STRING_ESCAPE_TRIGGER=180 -TAG_WS=181 -TAGC_WS=182 -HOGQLX_TEXT_TEXT=183 -HOGQLX_TEXT_WS=184 -'->'=128 -'*'=129 -'`'=130 -'\\'=131 -'::'=132 -':='=133 -':'=134 -','=135 -'||'=136 -'-'=137 -'$'=138 -'.'=139 -'=='=140 -'>='=142 -'#'=144 -'~*'=145 -'=~*'=146 -'{'=147 -'['=148 -'('=149 -'<='=150 -'<'=151 -''=134 +'*'=135 +'`'=136 +'\\'=137 +'::'=138 +':='=139 +':'=140 +','=141 +'||'=142 +'-'=143 +'$'=144 +'.'=145 +'=='=146 +'>='=148 +'#'=150 +'~*'=151 +'=~*'=152 +'{'=153 +'['=154 +'('=155 +'<='=156 +'<'=157 +'' '*' '`' @@ -218,6 +224,7 @@ EXCEPT EXCLUDE EXTRACT FINAL +FILTER FINALLY FIRST FN @@ -233,6 +240,8 @@ HOUR ID IF ILIKE +IGNORE +INCLUDE IN INF INNER @@ -252,6 +261,7 @@ MATERIALIZED MINUTE MONTH NAME +NATURAL NAN_SQL NOT NULL_SQL @@ -263,6 +273,8 @@ ORDER OUTER OVER PARTITION +PIVOT +POSITIONAL PRECEDING PREWHERE QUALIFY @@ -458,6 +470,8 @@ withExprColumnNameList columnIdentifier nestedIdentifier tableExpr +pivotColumnList +pivotColumn unpivotColumnList unpivotColumn columnExprTupleOrSingle @@ -484,4 +498,4 @@ stringContentsFull atn: -[4, 1, 184, 1806, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 1, 0, 5, 0, 218, 8, 0, 10, 0, 12, 0, 221, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 227, 8, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 235, 8, 3, 1, 4, 1, 4, 1, 4, 5, 4, 240, 8, 4, 10, 4, 12, 4, 243, 9, 4, 1, 4, 3, 4, 246, 8, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 260, 8, 5, 1, 6, 1, 6, 3, 6, 264, 8, 6, 1, 6, 3, 6, 267, 8, 6, 1, 7, 1, 7, 3, 7, 271, 8, 7, 1, 7, 3, 7, 274, 8, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 281, 8, 8, 1, 8, 1, 8, 3, 8, 285, 8, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 5, 9, 292, 8, 9, 10, 9, 12, 9, 295, 9, 9, 1, 9, 1, 9, 3, 9, 299, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 308, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 316, 8, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 323, 8, 12, 1, 12, 1, 12, 3, 12, 327, 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 333, 8, 12, 1, 12, 1, 12, 1, 12, 3, 12, 338, 8, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 346, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 353, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 359, 8, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 3, 16, 370, 8, 16, 1, 17, 1, 17, 1, 18, 1, 18, 5, 18, 376, 8, 18, 10, 18, 12, 18, 379, 9, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 5, 20, 390, 8, 20, 10, 20, 12, 20, 393, 9, 20, 1, 20, 3, 20, 396, 8, 20, 1, 21, 1, 21, 1, 21, 3, 21, 401, 8, 21, 1, 21, 3, 21, 404, 8, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 414, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 420, 8, 23, 1, 23, 1, 23, 1, 23, 3, 23, 425, 8, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 431, 8, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 437, 8, 23, 1, 23, 1, 23, 1, 23, 3, 23, 442, 8, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 448, 8, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 454, 8, 23, 1, 23, 1, 23, 1, 23, 3, 23, 459, 8, 23, 3, 23, 461, 8, 23, 1, 23, 1, 23, 1, 24, 1, 24, 5, 24, 467, 8, 24, 10, 24, 12, 24, 470, 9, 24, 1, 24, 3, 24, 473, 8, 24, 1, 25, 1, 25, 1, 25, 3, 25, 478, 8, 25, 1, 25, 1, 25, 3, 25, 482, 8, 25, 1, 25, 1, 25, 3, 25, 486, 8, 25, 1, 25, 1, 25, 1, 25, 3, 25, 491, 8, 25, 1, 25, 1, 25, 3, 25, 495, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 502, 8, 25, 1, 26, 3, 26, 505, 8, 26, 1, 26, 1, 26, 3, 26, 509, 8, 26, 1, 26, 3, 26, 512, 8, 26, 1, 26, 1, 26, 3, 26, 516, 8, 26, 1, 26, 3, 26, 519, 8, 26, 1, 26, 3, 26, 522, 8, 26, 1, 26, 3, 26, 525, 8, 26, 1, 26, 3, 26, 528, 8, 26, 1, 26, 3, 26, 531, 8, 26, 1, 26, 3, 26, 534, 8, 26, 1, 26, 1, 26, 3, 26, 538, 8, 26, 1, 26, 1, 26, 3, 26, 542, 8, 26, 1, 26, 3, 26, 545, 8, 26, 1, 26, 3, 26, 548, 8, 26, 1, 26, 1, 26, 3, 26, 552, 8, 26, 1, 26, 3, 26, 555, 8, 26, 1, 26, 3, 26, 558, 8, 26, 1, 26, 3, 26, 561, 8, 26, 1, 26, 1, 26, 3, 26, 565, 8, 26, 1, 26, 3, 26, 568, 8, 26, 1, 27, 1, 27, 3, 27, 572, 8, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 580, 8, 28, 1, 29, 1, 29, 1, 29, 1, 30, 3, 30, 586, 8, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 5, 31, 605, 8, 31, 10, 31, 12, 31, 608, 9, 31, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 630, 8, 34, 1, 35, 1, 35, 1, 35, 5, 35, 635, 8, 35, 10, 35, 12, 35, 638, 9, 35, 1, 36, 1, 36, 3, 36, 642, 8, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 3, 42, 668, 8, 42, 1, 42, 1, 42, 3, 42, 672, 8, 42, 1, 42, 1, 42, 3, 42, 676, 8, 42, 1, 42, 1, 42, 1, 42, 3, 42, 681, 8, 42, 1, 42, 1, 42, 3, 42, 685, 8, 42, 1, 42, 1, 42, 1, 42, 3, 42, 690, 8, 42, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 5, 45, 702, 8, 45, 10, 45, 12, 45, 705, 9, 45, 1, 46, 1, 46, 1, 46, 1, 46, 5, 46, 711, 8, 46, 10, 46, 12, 46, 714, 9, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 3, 47, 721, 8, 47, 1, 47, 3, 47, 724, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 730, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 738, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 5, 47, 744, 8, 47, 10, 47, 12, 47, 747, 9, 47, 1, 48, 3, 48, 750, 8, 48, 1, 48, 1, 48, 1, 48, 3, 48, 755, 8, 48, 1, 48, 1, 48, 1, 48, 3, 48, 760, 8, 48, 1, 48, 3, 48, 763, 8, 48, 1, 48, 1, 48, 3, 48, 767, 8, 48, 1, 48, 1, 48, 3, 48, 771, 8, 48, 1, 48, 3, 48, 774, 8, 48, 3, 48, 776, 8, 48, 1, 48, 3, 48, 779, 8, 48, 1, 48, 1, 48, 3, 48, 783, 8, 48, 1, 48, 1, 48, 3, 48, 787, 8, 48, 1, 48, 3, 48, 790, 8, 48, 3, 48, 792, 8, 48, 3, 48, 794, 8, 48, 1, 49, 1, 49, 1, 49, 3, 49, 799, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 810, 8, 50, 1, 51, 1, 51, 1, 51, 3, 51, 815, 8, 51, 1, 51, 1, 51, 3, 51, 819, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 825, 8, 51, 1, 52, 1, 52, 1, 52, 3, 52, 830, 8, 52, 1, 53, 1, 53, 1, 53, 5, 53, 835, 8, 53, 10, 53, 12, 53, 838, 9, 53, 1, 54, 1, 54, 3, 54, 842, 8, 54, 1, 54, 1, 54, 3, 54, 846, 8, 54, 1, 54, 1, 54, 3, 54, 850, 8, 54, 1, 55, 1, 55, 1, 55, 1, 55, 3, 55, 856, 8, 55, 3, 55, 858, 8, 55, 1, 56, 1, 56, 1, 56, 5, 56, 863, 8, 56, 10, 56, 12, 56, 866, 9, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 3, 58, 873, 8, 58, 1, 58, 3, 58, 876, 8, 58, 1, 58, 3, 58, 879, 8, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 904, 8, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 3, 64, 918, 8, 64, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 5, 66, 931, 8, 66, 10, 66, 12, 66, 934, 9, 66, 1, 66, 3, 66, 937, 8, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 5, 66, 946, 8, 66, 10, 66, 12, 66, 949, 9, 66, 1, 66, 3, 66, 952, 8, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 5, 66, 961, 8, 66, 10, 66, 12, 66, 964, 9, 66, 1, 66, 3, 66, 967, 8, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 974, 8, 66, 1, 66, 1, 66, 1, 66, 1, 66, 4, 66, 980, 8, 66, 11, 66, 12, 66, 981, 1, 66, 3, 66, 985, 8, 66, 1, 67, 1, 67, 4, 67, 989, 8, 67, 11, 67, 12, 67, 990, 1, 67, 3, 67, 994, 8, 67, 1, 68, 1, 68, 1, 68, 5, 68, 999, 8, 68, 10, 68, 12, 68, 1002, 9, 68, 1, 68, 3, 68, 1005, 8, 68, 1, 69, 1, 69, 1, 69, 5, 69, 1010, 8, 69, 10, 69, 12, 69, 1013, 9, 69, 1, 69, 3, 69, 1016, 8, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 3, 70, 1023, 8, 70, 1, 71, 1, 71, 1, 71, 3, 71, 1028, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 4, 71, 1035, 8, 71, 11, 71, 12, 71, 1036, 1, 71, 1, 71, 3, 71, 1041, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1074, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1122, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1150, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1170, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1176, 8, 71, 1, 71, 3, 71, 1179, 8, 71, 1, 71, 3, 71, 1182, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1192, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1198, 8, 71, 1, 71, 3, 71, 1201, 8, 71, 1, 71, 3, 71, 1204, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1212, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1220, 8, 71, 1, 71, 3, 71, 1223, 8, 71, 1, 71, 1, 71, 3, 71, 1227, 8, 71, 1, 71, 3, 71, 1230, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1244, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1252, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 5, 71, 1258, 8, 71, 10, 71, 12, 71, 1261, 9, 71, 1, 71, 3, 71, 1264, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1283, 8, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1288, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1299, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1305, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1312, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1324, 8, 71, 1, 71, 1, 71, 3, 71, 1328, 8, 71, 1, 71, 3, 71, 1331, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1340, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1346, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1362, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1383, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1394, 8, 71, 1, 71, 1, 71, 3, 71, 1398, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1425, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1433, 8, 71, 5, 71, 1435, 8, 71, 10, 71, 12, 71, 1438, 9, 71, 1, 72, 1, 72, 1, 72, 1, 72, 5, 72, 1444, 8, 72, 10, 72, 12, 72, 1447, 9, 72, 1, 72, 3, 72, 1450, 8, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 5, 72, 1457, 8, 72, 10, 72, 12, 72, 1460, 9, 72, 1, 72, 3, 72, 1463, 8, 72, 1, 72, 1, 72, 3, 72, 1467, 8, 72, 1, 72, 1, 72, 1, 72, 3, 72, 1472, 8, 72, 1, 72, 1, 72, 1, 72, 1, 72, 5, 72, 1478, 8, 72, 10, 72, 12, 72, 1481, 9, 72, 1, 72, 3, 72, 1484, 8, 72, 1, 72, 1, 72, 1, 72, 3, 72, 1489, 8, 72, 1, 73, 1, 73, 1, 73, 5, 73, 1494, 8, 73, 10, 73, 12, 73, 1497, 9, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 3, 75, 1509, 8, 75, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 5, 77, 1516, 8, 77, 10, 77, 12, 77, 1519, 9, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 5, 77, 1526, 8, 77, 10, 77, 12, 77, 1529, 9, 77, 1, 77, 1, 77, 5, 77, 1533, 8, 77, 10, 77, 12, 77, 1536, 9, 77, 1, 77, 1, 77, 1, 77, 1, 77, 3, 77, 1542, 8, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1555, 8, 78, 1, 79, 1, 79, 1, 79, 5, 79, 1560, 8, 79, 10, 79, 12, 79, 1563, 9, 79, 1, 79, 3, 79, 1566, 8, 79, 1, 80, 1, 80, 3, 80, 1570, 8, 80, 1, 80, 1, 80, 1, 80, 3, 80, 1575, 8, 80, 1, 80, 1, 80, 3, 80, 1579, 8, 80, 1, 80, 3, 80, 1582, 8, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 3, 80, 1592, 8, 80, 1, 81, 1, 81, 1, 81, 1, 81, 5, 81, 1598, 8, 81, 10, 81, 12, 81, 1601, 9, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 3, 82, 1609, 8, 82, 1, 82, 3, 82, 1612, 8, 82, 1, 83, 1, 83, 1, 83, 5, 83, 1617, 8, 83, 10, 83, 12, 83, 1620, 9, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 3, 84, 1635, 8, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 3, 84, 1647, 8, 84, 1, 84, 3, 84, 1650, 8, 84, 5, 84, 1652, 8, 84, 10, 84, 12, 84, 1655, 9, 84, 1, 85, 1, 85, 1, 85, 5, 85, 1660, 8, 85, 10, 85, 12, 85, 1663, 9, 85, 1, 85, 3, 85, 1666, 8, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 3, 87, 1681, 8, 87, 1, 88, 1, 88, 1, 88, 1, 88, 5, 88, 1687, 8, 88, 10, 88, 12, 88, 1690, 9, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 3, 89, 1697, 8, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 3, 90, 1704, 8, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 5, 91, 1711, 8, 91, 10, 91, 12, 91, 1714, 9, 91, 1, 91, 3, 91, 1717, 8, 91, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 3, 93, 1727, 8, 93, 3, 93, 1729, 8, 93, 1, 94, 3, 94, 1732, 8, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 3, 94, 1740, 8, 94, 1, 95, 1, 95, 1, 95, 3, 95, 1745, 8, 95, 1, 96, 1, 96, 1, 97, 1, 97, 1, 98, 1, 98, 1, 99, 1, 99, 3, 99, 1755, 8, 99, 1, 100, 1, 100, 1, 100, 3, 100, 1760, 8, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 3, 103, 1772, 8, 103, 1, 104, 1, 104, 5, 104, 1776, 8, 104, 10, 104, 12, 104, 1779, 9, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 3, 105, 1788, 8, 105, 1, 106, 1, 106, 5, 106, 1792, 8, 106, 10, 106, 12, 106, 1795, 9, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 3, 107, 1804, 8, 107, 1, 107, 0, 3, 94, 142, 168, 108, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 0, 18, 2, 0, 34, 34, 39, 39, 2, 0, 19, 19, 86, 86, 2, 0, 49, 49, 58, 58, 3, 0, 1, 1, 4, 4, 8, 8, 4, 0, 1, 1, 3, 4, 8, 8, 92, 92, 2, 0, 58, 58, 85, 85, 2, 0, 1, 1, 4, 4, 2, 0, 70, 70, 135, 135, 2, 0, 7, 7, 23, 24, 2, 0, 33, 33, 56, 56, 2, 0, 81, 81, 88, 88, 3, 0, 10, 10, 57, 57, 103, 103, 2, 0, 46, 46, 60, 60, 1, 0, 124, 125, 2, 0, 137, 137, 159, 159, 7, 0, 22, 22, 43, 43, 63, 64, 80, 80, 90, 90, 113, 113, 120, 120, 20, 0, 1, 13, 15, 21, 23, 27, 29, 31, 33, 33, 35, 38, 40, 42, 44, 47, 49, 49, 51, 58, 60, 61, 65, 65, 67, 67, 69, 79, 81, 89, 91, 96, 98, 105, 107, 112, 114, 115, 117, 118, 4, 0, 21, 21, 33, 33, 44, 44, 54, 54, 2046, 0, 219, 1, 0, 0, 0, 2, 226, 1, 0, 0, 0, 4, 228, 1, 0, 0, 0, 6, 230, 1, 0, 0, 0, 8, 236, 1, 0, 0, 0, 10, 259, 1, 0, 0, 0, 12, 261, 1, 0, 0, 0, 14, 268, 1, 0, 0, 0, 16, 275, 1, 0, 0, 0, 18, 288, 1, 0, 0, 0, 20, 300, 1, 0, 0, 0, 22, 309, 1, 0, 0, 0, 24, 317, 1, 0, 0, 0, 26, 339, 1, 0, 0, 0, 28, 354, 1, 0, 0, 0, 30, 363, 1, 0, 0, 0, 32, 367, 1, 0, 0, 0, 34, 371, 1, 0, 0, 0, 36, 373, 1, 0, 0, 0, 38, 382, 1, 0, 0, 0, 40, 386, 1, 0, 0, 0, 42, 400, 1, 0, 0, 0, 44, 413, 1, 0, 0, 0, 46, 460, 1, 0, 0, 0, 48, 464, 1, 0, 0, 0, 50, 501, 1, 0, 0, 0, 52, 504, 1, 0, 0, 0, 54, 569, 1, 0, 0, 0, 56, 575, 1, 0, 0, 0, 58, 581, 1, 0, 0, 0, 60, 585, 1, 0, 0, 0, 62, 591, 1, 0, 0, 0, 64, 609, 1, 0, 0, 0, 66, 612, 1, 0, 0, 0, 68, 615, 1, 0, 0, 0, 70, 631, 1, 0, 0, 0, 72, 639, 1, 0, 0, 0, 74, 645, 1, 0, 0, 0, 76, 648, 1, 0, 0, 0, 78, 651, 1, 0, 0, 0, 80, 655, 1, 0, 0, 0, 82, 659, 1, 0, 0, 0, 84, 689, 1, 0, 0, 0, 86, 691, 1, 0, 0, 0, 88, 694, 1, 0, 0, 0, 90, 697, 1, 0, 0, 0, 92, 706, 1, 0, 0, 0, 94, 729, 1, 0, 0, 0, 96, 793, 1, 0, 0, 0, 98, 798, 1, 0, 0, 0, 100, 809, 1, 0, 0, 0, 102, 811, 1, 0, 0, 0, 104, 826, 1, 0, 0, 0, 106, 831, 1, 0, 0, 0, 108, 839, 1, 0, 0, 0, 110, 857, 1, 0, 0, 0, 112, 859, 1, 0, 0, 0, 114, 867, 1, 0, 0, 0, 116, 872, 1, 0, 0, 0, 118, 880, 1, 0, 0, 0, 120, 884, 1, 0, 0, 0, 122, 888, 1, 0, 0, 0, 124, 894, 1, 0, 0, 0, 126, 903, 1, 0, 0, 0, 128, 917, 1, 0, 0, 0, 130, 919, 1, 0, 0, 0, 132, 984, 1, 0, 0, 0, 134, 993, 1, 0, 0, 0, 136, 995, 1, 0, 0, 0, 138, 1006, 1, 0, 0, 0, 140, 1022, 1, 0, 0, 0, 142, 1298, 1, 0, 0, 0, 144, 1488, 1, 0, 0, 0, 146, 1490, 1, 0, 0, 0, 148, 1498, 1, 0, 0, 0, 150, 1508, 1, 0, 0, 0, 152, 1510, 1, 0, 0, 0, 154, 1541, 1, 0, 0, 0, 156, 1554, 1, 0, 0, 0, 158, 1556, 1, 0, 0, 0, 160, 1591, 1, 0, 0, 0, 162, 1593, 1, 0, 0, 0, 164, 1611, 1, 0, 0, 0, 166, 1613, 1, 0, 0, 0, 168, 1634, 1, 0, 0, 0, 170, 1656, 1, 0, 0, 0, 172, 1667, 1, 0, 0, 0, 174, 1680, 1, 0, 0, 0, 176, 1682, 1, 0, 0, 0, 178, 1693, 1, 0, 0, 0, 180, 1703, 1, 0, 0, 0, 182, 1707, 1, 0, 0, 0, 184, 1718, 1, 0, 0, 0, 186, 1728, 1, 0, 0, 0, 188, 1731, 1, 0, 0, 0, 190, 1744, 1, 0, 0, 0, 192, 1746, 1, 0, 0, 0, 194, 1748, 1, 0, 0, 0, 196, 1750, 1, 0, 0, 0, 198, 1754, 1, 0, 0, 0, 200, 1759, 1, 0, 0, 0, 202, 1761, 1, 0, 0, 0, 204, 1765, 1, 0, 0, 0, 206, 1771, 1, 0, 0, 0, 208, 1773, 1, 0, 0, 0, 210, 1787, 1, 0, 0, 0, 212, 1789, 1, 0, 0, 0, 214, 1803, 1, 0, 0, 0, 216, 218, 3, 2, 1, 0, 217, 216, 1, 0, 0, 0, 218, 221, 1, 0, 0, 0, 219, 217, 1, 0, 0, 0, 219, 220, 1, 0, 0, 0, 220, 222, 1, 0, 0, 0, 221, 219, 1, 0, 0, 0, 222, 223, 5, 0, 0, 1, 223, 1, 1, 0, 0, 0, 224, 227, 3, 6, 3, 0, 225, 227, 3, 10, 5, 0, 226, 224, 1, 0, 0, 0, 226, 225, 1, 0, 0, 0, 227, 3, 1, 0, 0, 0, 228, 229, 3, 142, 71, 0, 229, 5, 1, 0, 0, 0, 230, 231, 5, 59, 0, 0, 231, 234, 3, 200, 100, 0, 232, 233, 5, 133, 0, 0, 233, 235, 3, 4, 2, 0, 234, 232, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 7, 1, 0, 0, 0, 236, 241, 3, 166, 83, 0, 237, 238, 5, 135, 0, 0, 238, 240, 3, 166, 83, 0, 239, 237, 1, 0, 0, 0, 240, 243, 1, 0, 0, 0, 241, 239, 1, 0, 0, 0, 241, 242, 1, 0, 0, 0, 242, 245, 1, 0, 0, 0, 243, 241, 1, 0, 0, 0, 244, 246, 5, 135, 0, 0, 245, 244, 1, 0, 0, 0, 245, 246, 1, 0, 0, 0, 246, 9, 1, 0, 0, 0, 247, 260, 3, 12, 6, 0, 248, 260, 3, 14, 7, 0, 249, 260, 3, 18, 9, 0, 250, 260, 3, 20, 10, 0, 251, 260, 3, 22, 11, 0, 252, 260, 3, 26, 13, 0, 253, 260, 3, 24, 12, 0, 254, 260, 3, 28, 14, 0, 255, 260, 3, 30, 15, 0, 256, 260, 3, 36, 18, 0, 257, 260, 3, 32, 16, 0, 258, 260, 3, 34, 17, 0, 259, 247, 1, 0, 0, 0, 259, 248, 1, 0, 0, 0, 259, 249, 1, 0, 0, 0, 259, 250, 1, 0, 0, 0, 259, 251, 1, 0, 0, 0, 259, 252, 1, 0, 0, 0, 259, 253, 1, 0, 0, 0, 259, 254, 1, 0, 0, 0, 259, 255, 1, 0, 0, 0, 259, 256, 1, 0, 0, 0, 259, 257, 1, 0, 0, 0, 259, 258, 1, 0, 0, 0, 260, 11, 1, 0, 0, 0, 261, 263, 5, 84, 0, 0, 262, 264, 3, 4, 2, 0, 263, 262, 1, 0, 0, 0, 263, 264, 1, 0, 0, 0, 264, 266, 1, 0, 0, 0, 265, 267, 5, 170, 0, 0, 266, 265, 1, 0, 0, 0, 266, 267, 1, 0, 0, 0, 267, 13, 1, 0, 0, 0, 268, 270, 5, 97, 0, 0, 269, 271, 3, 4, 2, 0, 270, 269, 1, 0, 0, 0, 270, 271, 1, 0, 0, 0, 271, 273, 1, 0, 0, 0, 272, 274, 5, 170, 0, 0, 273, 272, 1, 0, 0, 0, 273, 274, 1, 0, 0, 0, 274, 15, 1, 0, 0, 0, 275, 284, 5, 14, 0, 0, 276, 277, 5, 149, 0, 0, 277, 280, 3, 200, 100, 0, 278, 279, 5, 134, 0, 0, 279, 281, 3, 200, 100, 0, 280, 278, 1, 0, 0, 0, 280, 281, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 283, 5, 169, 0, 0, 283, 285, 1, 0, 0, 0, 284, 276, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 286, 1, 0, 0, 0, 286, 287, 3, 36, 18, 0, 287, 17, 1, 0, 0, 0, 288, 289, 5, 106, 0, 0, 289, 293, 3, 36, 18, 0, 290, 292, 3, 16, 8, 0, 291, 290, 1, 0, 0, 0, 292, 295, 1, 0, 0, 0, 293, 291, 1, 0, 0, 0, 293, 294, 1, 0, 0, 0, 294, 298, 1, 0, 0, 0, 295, 293, 1, 0, 0, 0, 296, 297, 5, 32, 0, 0, 297, 299, 3, 36, 18, 0, 298, 296, 1, 0, 0, 0, 298, 299, 1, 0, 0, 0, 299, 19, 1, 0, 0, 0, 300, 301, 5, 45, 0, 0, 301, 302, 5, 149, 0, 0, 302, 303, 3, 4, 2, 0, 303, 304, 5, 169, 0, 0, 304, 307, 3, 10, 5, 0, 305, 306, 5, 26, 0, 0, 306, 308, 3, 10, 5, 0, 307, 305, 1, 0, 0, 0, 307, 308, 1, 0, 0, 0, 308, 21, 1, 0, 0, 0, 309, 310, 5, 116, 0, 0, 310, 311, 5, 149, 0, 0, 311, 312, 3, 4, 2, 0, 312, 313, 5, 169, 0, 0, 313, 315, 3, 10, 5, 0, 314, 316, 5, 170, 0, 0, 315, 314, 1, 0, 0, 0, 315, 316, 1, 0, 0, 0, 316, 23, 1, 0, 0, 0, 317, 318, 5, 36, 0, 0, 318, 322, 5, 149, 0, 0, 319, 323, 3, 6, 3, 0, 320, 323, 3, 30, 15, 0, 321, 323, 3, 4, 2, 0, 322, 319, 1, 0, 0, 0, 322, 320, 1, 0, 0, 0, 322, 321, 1, 0, 0, 0, 322, 323, 1, 0, 0, 0, 323, 324, 1, 0, 0, 0, 324, 326, 5, 170, 0, 0, 325, 327, 3, 4, 2, 0, 326, 325, 1, 0, 0, 0, 326, 327, 1, 0, 0, 0, 327, 328, 1, 0, 0, 0, 328, 332, 5, 170, 0, 0, 329, 333, 3, 6, 3, 0, 330, 333, 3, 30, 15, 0, 331, 333, 3, 4, 2, 0, 332, 329, 1, 0, 0, 0, 332, 330, 1, 0, 0, 0, 332, 331, 1, 0, 0, 0, 332, 333, 1, 0, 0, 0, 333, 334, 1, 0, 0, 0, 334, 335, 5, 169, 0, 0, 335, 337, 3, 10, 5, 0, 336, 338, 5, 170, 0, 0, 337, 336, 1, 0, 0, 0, 337, 338, 1, 0, 0, 0, 338, 25, 1, 0, 0, 0, 339, 340, 5, 36, 0, 0, 340, 341, 5, 149, 0, 0, 341, 342, 5, 59, 0, 0, 342, 345, 3, 200, 100, 0, 343, 344, 5, 135, 0, 0, 344, 346, 3, 200, 100, 0, 345, 343, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 347, 1, 0, 0, 0, 347, 348, 5, 47, 0, 0, 348, 349, 3, 4, 2, 0, 349, 350, 5, 169, 0, 0, 350, 352, 3, 10, 5, 0, 351, 353, 5, 170, 0, 0, 352, 351, 1, 0, 0, 0, 352, 353, 1, 0, 0, 0, 353, 27, 1, 0, 0, 0, 354, 355, 7, 0, 0, 0, 355, 356, 3, 200, 100, 0, 356, 358, 5, 149, 0, 0, 357, 359, 3, 8, 4, 0, 358, 357, 1, 0, 0, 0, 358, 359, 1, 0, 0, 0, 359, 360, 1, 0, 0, 0, 360, 361, 5, 169, 0, 0, 361, 362, 3, 36, 18, 0, 362, 29, 1, 0, 0, 0, 363, 364, 3, 4, 2, 0, 364, 365, 5, 133, 0, 0, 365, 366, 3, 4, 2, 0, 366, 31, 1, 0, 0, 0, 367, 369, 3, 4, 2, 0, 368, 370, 5, 170, 0, 0, 369, 368, 1, 0, 0, 0, 369, 370, 1, 0, 0, 0, 370, 33, 1, 0, 0, 0, 371, 372, 5, 170, 0, 0, 372, 35, 1, 0, 0, 0, 373, 377, 5, 147, 0, 0, 374, 376, 3, 2, 1, 0, 375, 374, 1, 0, 0, 0, 376, 379, 1, 0, 0, 0, 377, 375, 1, 0, 0, 0, 377, 378, 1, 0, 0, 0, 378, 380, 1, 0, 0, 0, 379, 377, 1, 0, 0, 0, 380, 381, 5, 167, 0, 0, 381, 37, 1, 0, 0, 0, 382, 383, 3, 4, 2, 0, 383, 384, 5, 134, 0, 0, 384, 385, 3, 4, 2, 0, 385, 39, 1, 0, 0, 0, 386, 391, 3, 38, 19, 0, 387, 388, 5, 135, 0, 0, 388, 390, 3, 38, 19, 0, 389, 387, 1, 0, 0, 0, 390, 393, 1, 0, 0, 0, 391, 389, 1, 0, 0, 0, 391, 392, 1, 0, 0, 0, 392, 395, 1, 0, 0, 0, 393, 391, 1, 0, 0, 0, 394, 396, 5, 135, 0, 0, 395, 394, 1, 0, 0, 0, 395, 396, 1, 0, 0, 0, 396, 41, 1, 0, 0, 0, 397, 401, 3, 48, 24, 0, 398, 401, 3, 52, 26, 0, 399, 401, 3, 154, 77, 0, 400, 397, 1, 0, 0, 0, 400, 398, 1, 0, 0, 0, 400, 399, 1, 0, 0, 0, 401, 403, 1, 0, 0, 0, 402, 404, 5, 170, 0, 0, 403, 402, 1, 0, 0, 0, 403, 404, 1, 0, 0, 0, 404, 405, 1, 0, 0, 0, 405, 406, 5, 0, 0, 1, 406, 43, 1, 0, 0, 0, 407, 414, 3, 52, 26, 0, 408, 409, 5, 149, 0, 0, 409, 410, 3, 48, 24, 0, 410, 411, 5, 169, 0, 0, 411, 414, 1, 0, 0, 0, 412, 414, 3, 204, 102, 0, 413, 407, 1, 0, 0, 0, 413, 408, 1, 0, 0, 0, 413, 412, 1, 0, 0, 0, 414, 45, 1, 0, 0, 0, 415, 416, 5, 28, 0, 0, 416, 419, 5, 1, 0, 0, 417, 418, 5, 11, 0, 0, 418, 420, 5, 65, 0, 0, 419, 417, 1, 0, 0, 0, 419, 420, 1, 0, 0, 0, 420, 461, 1, 0, 0, 0, 421, 424, 5, 28, 0, 0, 422, 423, 5, 11, 0, 0, 423, 425, 5, 65, 0, 0, 424, 422, 1, 0, 0, 0, 424, 425, 1, 0, 0, 0, 425, 461, 1, 0, 0, 0, 426, 427, 5, 109, 0, 0, 427, 430, 5, 1, 0, 0, 428, 429, 5, 11, 0, 0, 429, 431, 5, 65, 0, 0, 430, 428, 1, 0, 0, 0, 430, 431, 1, 0, 0, 0, 431, 461, 1, 0, 0, 0, 432, 433, 5, 109, 0, 0, 433, 436, 5, 25, 0, 0, 434, 435, 5, 11, 0, 0, 435, 437, 5, 65, 0, 0, 436, 434, 1, 0, 0, 0, 436, 437, 1, 0, 0, 0, 437, 461, 1, 0, 0, 0, 438, 441, 5, 109, 0, 0, 439, 440, 5, 11, 0, 0, 440, 442, 5, 65, 0, 0, 441, 439, 1, 0, 0, 0, 441, 442, 1, 0, 0, 0, 442, 461, 1, 0, 0, 0, 443, 444, 5, 50, 0, 0, 444, 447, 5, 1, 0, 0, 445, 446, 5, 11, 0, 0, 446, 448, 5, 65, 0, 0, 447, 445, 1, 0, 0, 0, 447, 448, 1, 0, 0, 0, 448, 461, 1, 0, 0, 0, 449, 450, 5, 50, 0, 0, 450, 453, 5, 25, 0, 0, 451, 452, 5, 11, 0, 0, 452, 454, 5, 65, 0, 0, 453, 451, 1, 0, 0, 0, 453, 454, 1, 0, 0, 0, 454, 461, 1, 0, 0, 0, 455, 458, 5, 50, 0, 0, 456, 457, 5, 11, 0, 0, 457, 459, 5, 65, 0, 0, 458, 456, 1, 0, 0, 0, 458, 459, 1, 0, 0, 0, 459, 461, 1, 0, 0, 0, 460, 415, 1, 0, 0, 0, 460, 421, 1, 0, 0, 0, 460, 426, 1, 0, 0, 0, 460, 432, 1, 0, 0, 0, 460, 438, 1, 0, 0, 0, 460, 443, 1, 0, 0, 0, 460, 449, 1, 0, 0, 0, 460, 455, 1, 0, 0, 0, 461, 462, 1, 0, 0, 0, 462, 463, 3, 44, 22, 0, 463, 47, 1, 0, 0, 0, 464, 468, 3, 44, 22, 0, 465, 467, 3, 46, 23, 0, 466, 465, 1, 0, 0, 0, 467, 470, 1, 0, 0, 0, 468, 466, 1, 0, 0, 0, 468, 469, 1, 0, 0, 0, 469, 472, 1, 0, 0, 0, 470, 468, 1, 0, 0, 0, 471, 473, 3, 50, 25, 0, 472, 471, 1, 0, 0, 0, 472, 473, 1, 0, 0, 0, 473, 49, 1, 0, 0, 0, 474, 475, 5, 61, 0, 0, 475, 477, 3, 142, 71, 0, 476, 478, 5, 158, 0, 0, 477, 476, 1, 0, 0, 0, 477, 478, 1, 0, 0, 0, 478, 481, 1, 0, 0, 0, 479, 480, 5, 135, 0, 0, 480, 482, 3, 142, 71, 0, 481, 479, 1, 0, 0, 0, 481, 482, 1, 0, 0, 0, 482, 485, 1, 0, 0, 0, 483, 484, 5, 118, 0, 0, 484, 486, 5, 98, 0, 0, 485, 483, 1, 0, 0, 0, 485, 486, 1, 0, 0, 0, 486, 502, 1, 0, 0, 0, 487, 488, 5, 61, 0, 0, 488, 490, 3, 142, 71, 0, 489, 491, 5, 158, 0, 0, 490, 489, 1, 0, 0, 0, 490, 491, 1, 0, 0, 0, 491, 494, 1, 0, 0, 0, 492, 493, 5, 118, 0, 0, 493, 495, 5, 98, 0, 0, 494, 492, 1, 0, 0, 0, 494, 495, 1, 0, 0, 0, 495, 496, 1, 0, 0, 0, 496, 497, 5, 70, 0, 0, 497, 498, 3, 142, 71, 0, 498, 502, 1, 0, 0, 0, 499, 500, 5, 70, 0, 0, 500, 502, 3, 142, 71, 0, 501, 474, 1, 0, 0, 0, 501, 487, 1, 0, 0, 0, 501, 499, 1, 0, 0, 0, 502, 51, 1, 0, 0, 0, 503, 505, 3, 54, 27, 0, 504, 503, 1, 0, 0, 0, 504, 505, 1, 0, 0, 0, 505, 506, 1, 0, 0, 0, 506, 508, 5, 91, 0, 0, 507, 509, 5, 25, 0, 0, 508, 507, 1, 0, 0, 0, 508, 509, 1, 0, 0, 0, 509, 511, 1, 0, 0, 0, 510, 512, 3, 56, 28, 0, 511, 510, 1, 0, 0, 0, 511, 512, 1, 0, 0, 0, 512, 513, 1, 0, 0, 0, 513, 515, 3, 138, 69, 0, 514, 516, 3, 58, 29, 0, 515, 514, 1, 0, 0, 0, 515, 516, 1, 0, 0, 0, 516, 518, 1, 0, 0, 0, 517, 519, 3, 60, 30, 0, 518, 517, 1, 0, 0, 0, 518, 519, 1, 0, 0, 0, 519, 521, 1, 0, 0, 0, 520, 522, 3, 64, 32, 0, 521, 520, 1, 0, 0, 0, 521, 522, 1, 0, 0, 0, 522, 524, 1, 0, 0, 0, 523, 525, 3, 66, 33, 0, 524, 523, 1, 0, 0, 0, 524, 525, 1, 0, 0, 0, 525, 530, 1, 0, 0, 0, 526, 528, 5, 111, 0, 0, 527, 526, 1, 0, 0, 0, 527, 528, 1, 0, 0, 0, 528, 529, 1, 0, 0, 0, 529, 531, 3, 102, 51, 0, 530, 527, 1, 0, 0, 0, 530, 531, 1, 0, 0, 0, 531, 533, 1, 0, 0, 0, 532, 534, 3, 68, 34, 0, 533, 532, 1, 0, 0, 0, 533, 534, 1, 0, 0, 0, 534, 537, 1, 0, 0, 0, 535, 536, 5, 118, 0, 0, 536, 538, 7, 1, 0, 0, 537, 535, 1, 0, 0, 0, 537, 538, 1, 0, 0, 0, 538, 541, 1, 0, 0, 0, 539, 540, 5, 118, 0, 0, 540, 542, 5, 102, 0, 0, 541, 539, 1, 0, 0, 0, 541, 542, 1, 0, 0, 0, 542, 544, 1, 0, 0, 0, 543, 545, 3, 74, 37, 0, 544, 543, 1, 0, 0, 0, 544, 545, 1, 0, 0, 0, 545, 547, 1, 0, 0, 0, 546, 548, 3, 76, 38, 0, 547, 546, 1, 0, 0, 0, 547, 548, 1, 0, 0, 0, 548, 551, 1, 0, 0, 0, 549, 550, 5, 111, 0, 0, 550, 552, 3, 102, 51, 0, 551, 549, 1, 0, 0, 0, 551, 552, 1, 0, 0, 0, 552, 554, 1, 0, 0, 0, 553, 555, 3, 62, 31, 0, 554, 553, 1, 0, 0, 0, 554, 555, 1, 0, 0, 0, 555, 557, 1, 0, 0, 0, 556, 558, 3, 78, 39, 0, 557, 556, 1, 0, 0, 0, 557, 558, 1, 0, 0, 0, 558, 560, 1, 0, 0, 0, 559, 561, 3, 82, 41, 0, 560, 559, 1, 0, 0, 0, 560, 561, 1, 0, 0, 0, 561, 564, 1, 0, 0, 0, 562, 565, 3, 84, 42, 0, 563, 565, 3, 86, 43, 0, 564, 562, 1, 0, 0, 0, 564, 563, 1, 0, 0, 0, 564, 565, 1, 0, 0, 0, 565, 567, 1, 0, 0, 0, 566, 568, 3, 88, 44, 0, 567, 566, 1, 0, 0, 0, 567, 568, 1, 0, 0, 0, 568, 53, 1, 0, 0, 0, 569, 571, 5, 118, 0, 0, 570, 572, 5, 82, 0, 0, 571, 570, 1, 0, 0, 0, 571, 572, 1, 0, 0, 0, 572, 573, 1, 0, 0, 0, 573, 574, 3, 158, 79, 0, 574, 55, 1, 0, 0, 0, 575, 576, 5, 101, 0, 0, 576, 579, 5, 125, 0, 0, 577, 578, 5, 118, 0, 0, 578, 580, 5, 98, 0, 0, 579, 577, 1, 0, 0, 0, 579, 580, 1, 0, 0, 0, 580, 57, 1, 0, 0, 0, 581, 582, 5, 37, 0, 0, 582, 583, 3, 94, 47, 0, 583, 59, 1, 0, 0, 0, 584, 586, 7, 2, 0, 0, 585, 584, 1, 0, 0, 0, 585, 586, 1, 0, 0, 0, 586, 587, 1, 0, 0, 0, 587, 588, 5, 5, 0, 0, 588, 589, 5, 53, 0, 0, 589, 590, 3, 136, 68, 0, 590, 61, 1, 0, 0, 0, 591, 592, 5, 117, 0, 0, 592, 593, 3, 200, 100, 0, 593, 594, 5, 6, 0, 0, 594, 595, 5, 149, 0, 0, 595, 596, 3, 116, 58, 0, 596, 606, 5, 169, 0, 0, 597, 598, 5, 135, 0, 0, 598, 599, 3, 200, 100, 0, 599, 600, 5, 6, 0, 0, 600, 601, 5, 149, 0, 0, 601, 602, 3, 116, 58, 0, 602, 603, 5, 169, 0, 0, 603, 605, 1, 0, 0, 0, 604, 597, 1, 0, 0, 0, 605, 608, 1, 0, 0, 0, 606, 604, 1, 0, 0, 0, 606, 607, 1, 0, 0, 0, 607, 63, 1, 0, 0, 0, 608, 606, 1, 0, 0, 0, 609, 610, 5, 78, 0, 0, 610, 611, 3, 142, 71, 0, 611, 65, 1, 0, 0, 0, 612, 613, 5, 115, 0, 0, 613, 614, 3, 142, 71, 0, 614, 67, 1, 0, 0, 0, 615, 616, 5, 40, 0, 0, 616, 629, 5, 11, 0, 0, 617, 618, 7, 1, 0, 0, 618, 619, 5, 149, 0, 0, 619, 620, 3, 136, 68, 0, 620, 621, 5, 169, 0, 0, 621, 630, 1, 0, 0, 0, 622, 623, 5, 41, 0, 0, 623, 624, 5, 93, 0, 0, 624, 625, 5, 149, 0, 0, 625, 626, 3, 70, 35, 0, 626, 627, 5, 169, 0, 0, 627, 630, 1, 0, 0, 0, 628, 630, 3, 136, 68, 0, 629, 617, 1, 0, 0, 0, 629, 622, 1, 0, 0, 0, 629, 628, 1, 0, 0, 0, 630, 69, 1, 0, 0, 0, 631, 636, 3, 72, 36, 0, 632, 633, 5, 135, 0, 0, 633, 635, 3, 72, 36, 0, 634, 632, 1, 0, 0, 0, 635, 638, 1, 0, 0, 0, 636, 634, 1, 0, 0, 0, 636, 637, 1, 0, 0, 0, 637, 71, 1, 0, 0, 0, 638, 636, 1, 0, 0, 0, 639, 641, 5, 149, 0, 0, 640, 642, 3, 136, 68, 0, 641, 640, 1, 0, 0, 0, 641, 642, 1, 0, 0, 0, 642, 643, 1, 0, 0, 0, 643, 644, 5, 169, 0, 0, 644, 73, 1, 0, 0, 0, 645, 646, 5, 42, 0, 0, 646, 647, 3, 142, 71, 0, 647, 75, 1, 0, 0, 0, 648, 649, 5, 79, 0, 0, 649, 650, 3, 142, 71, 0, 650, 77, 1, 0, 0, 0, 651, 652, 5, 73, 0, 0, 652, 653, 5, 11, 0, 0, 653, 654, 3, 106, 53, 0, 654, 79, 1, 0, 0, 0, 655, 656, 5, 73, 0, 0, 656, 657, 5, 11, 0, 0, 657, 658, 3, 136, 68, 0, 658, 81, 1, 0, 0, 0, 659, 660, 5, 61, 0, 0, 660, 661, 3, 104, 52, 0, 661, 662, 5, 11, 0, 0, 662, 663, 3, 136, 68, 0, 663, 83, 1, 0, 0, 0, 664, 665, 5, 61, 0, 0, 665, 667, 3, 142, 71, 0, 666, 668, 5, 158, 0, 0, 667, 666, 1, 0, 0, 0, 667, 668, 1, 0, 0, 0, 668, 671, 1, 0, 0, 0, 669, 670, 5, 135, 0, 0, 670, 672, 3, 142, 71, 0, 671, 669, 1, 0, 0, 0, 671, 672, 1, 0, 0, 0, 672, 675, 1, 0, 0, 0, 673, 674, 5, 118, 0, 0, 674, 676, 5, 98, 0, 0, 675, 673, 1, 0, 0, 0, 675, 676, 1, 0, 0, 0, 676, 690, 1, 0, 0, 0, 677, 678, 5, 61, 0, 0, 678, 680, 3, 142, 71, 0, 679, 681, 5, 158, 0, 0, 680, 679, 1, 0, 0, 0, 680, 681, 1, 0, 0, 0, 681, 684, 1, 0, 0, 0, 682, 683, 5, 118, 0, 0, 683, 685, 5, 98, 0, 0, 684, 682, 1, 0, 0, 0, 684, 685, 1, 0, 0, 0, 685, 686, 1, 0, 0, 0, 686, 687, 5, 70, 0, 0, 687, 688, 3, 142, 71, 0, 688, 690, 1, 0, 0, 0, 689, 664, 1, 0, 0, 0, 689, 677, 1, 0, 0, 0, 690, 85, 1, 0, 0, 0, 691, 692, 5, 70, 0, 0, 692, 693, 3, 142, 71, 0, 693, 87, 1, 0, 0, 0, 694, 695, 5, 94, 0, 0, 695, 696, 3, 112, 56, 0, 696, 89, 1, 0, 0, 0, 697, 698, 5, 112, 0, 0, 698, 703, 3, 92, 46, 0, 699, 700, 5, 135, 0, 0, 700, 702, 3, 92, 46, 0, 701, 699, 1, 0, 0, 0, 702, 705, 1, 0, 0, 0, 703, 701, 1, 0, 0, 0, 703, 704, 1, 0, 0, 0, 704, 91, 1, 0, 0, 0, 705, 703, 1, 0, 0, 0, 706, 707, 5, 149, 0, 0, 707, 712, 3, 142, 71, 0, 708, 709, 5, 135, 0, 0, 709, 711, 3, 142, 71, 0, 710, 708, 1, 0, 0, 0, 711, 714, 1, 0, 0, 0, 712, 710, 1, 0, 0, 0, 712, 713, 1, 0, 0, 0, 713, 715, 1, 0, 0, 0, 714, 712, 1, 0, 0, 0, 715, 716, 5, 169, 0, 0, 716, 93, 1, 0, 0, 0, 717, 718, 6, 47, -1, 0, 718, 720, 3, 168, 84, 0, 719, 721, 5, 31, 0, 0, 720, 719, 1, 0, 0, 0, 720, 721, 1, 0, 0, 0, 721, 723, 1, 0, 0, 0, 722, 724, 3, 102, 51, 0, 723, 722, 1, 0, 0, 0, 723, 724, 1, 0, 0, 0, 724, 730, 1, 0, 0, 0, 725, 726, 5, 149, 0, 0, 726, 727, 3, 94, 47, 0, 727, 728, 5, 169, 0, 0, 728, 730, 1, 0, 0, 0, 729, 717, 1, 0, 0, 0, 729, 725, 1, 0, 0, 0, 730, 745, 1, 0, 0, 0, 731, 732, 10, 3, 0, 0, 732, 733, 3, 98, 49, 0, 733, 734, 3, 94, 47, 4, 734, 744, 1, 0, 0, 0, 735, 737, 10, 4, 0, 0, 736, 738, 3, 96, 48, 0, 737, 736, 1, 0, 0, 0, 737, 738, 1, 0, 0, 0, 738, 739, 1, 0, 0, 0, 739, 740, 5, 53, 0, 0, 740, 741, 3, 94, 47, 0, 741, 742, 3, 100, 50, 0, 742, 744, 1, 0, 0, 0, 743, 731, 1, 0, 0, 0, 743, 735, 1, 0, 0, 0, 744, 747, 1, 0, 0, 0, 745, 743, 1, 0, 0, 0, 745, 746, 1, 0, 0, 0, 746, 95, 1, 0, 0, 0, 747, 745, 1, 0, 0, 0, 748, 750, 7, 3, 0, 0, 749, 748, 1, 0, 0, 0, 749, 750, 1, 0, 0, 0, 750, 751, 1, 0, 0, 0, 751, 760, 5, 49, 0, 0, 752, 754, 5, 49, 0, 0, 753, 755, 7, 3, 0, 0, 754, 753, 1, 0, 0, 0, 754, 755, 1, 0, 0, 0, 755, 760, 1, 0, 0, 0, 756, 760, 7, 3, 0, 0, 757, 760, 5, 3, 0, 0, 758, 760, 5, 92, 0, 0, 759, 749, 1, 0, 0, 0, 759, 752, 1, 0, 0, 0, 759, 756, 1, 0, 0, 0, 759, 757, 1, 0, 0, 0, 759, 758, 1, 0, 0, 0, 760, 794, 1, 0, 0, 0, 761, 763, 7, 4, 0, 0, 762, 761, 1, 0, 0, 0, 762, 763, 1, 0, 0, 0, 763, 764, 1, 0, 0, 0, 764, 766, 7, 5, 0, 0, 765, 767, 5, 74, 0, 0, 766, 765, 1, 0, 0, 0, 766, 767, 1, 0, 0, 0, 767, 776, 1, 0, 0, 0, 768, 770, 7, 5, 0, 0, 769, 771, 5, 74, 0, 0, 770, 769, 1, 0, 0, 0, 770, 771, 1, 0, 0, 0, 771, 773, 1, 0, 0, 0, 772, 774, 7, 4, 0, 0, 773, 772, 1, 0, 0, 0, 773, 774, 1, 0, 0, 0, 774, 776, 1, 0, 0, 0, 775, 762, 1, 0, 0, 0, 775, 768, 1, 0, 0, 0, 776, 794, 1, 0, 0, 0, 777, 779, 7, 6, 0, 0, 778, 777, 1, 0, 0, 0, 778, 779, 1, 0, 0, 0, 779, 780, 1, 0, 0, 0, 780, 782, 5, 38, 0, 0, 781, 783, 5, 74, 0, 0, 782, 781, 1, 0, 0, 0, 782, 783, 1, 0, 0, 0, 783, 792, 1, 0, 0, 0, 784, 786, 5, 38, 0, 0, 785, 787, 5, 74, 0, 0, 786, 785, 1, 0, 0, 0, 786, 787, 1, 0, 0, 0, 787, 789, 1, 0, 0, 0, 788, 790, 7, 6, 0, 0, 789, 788, 1, 0, 0, 0, 789, 790, 1, 0, 0, 0, 790, 792, 1, 0, 0, 0, 791, 778, 1, 0, 0, 0, 791, 784, 1, 0, 0, 0, 792, 794, 1, 0, 0, 0, 793, 759, 1, 0, 0, 0, 793, 775, 1, 0, 0, 0, 793, 791, 1, 0, 0, 0, 794, 97, 1, 0, 0, 0, 795, 796, 5, 18, 0, 0, 796, 799, 5, 53, 0, 0, 797, 799, 5, 135, 0, 0, 798, 795, 1, 0, 0, 0, 798, 797, 1, 0, 0, 0, 799, 99, 1, 0, 0, 0, 800, 801, 5, 71, 0, 0, 801, 810, 3, 136, 68, 0, 802, 803, 5, 111, 0, 0, 803, 804, 5, 149, 0, 0, 804, 805, 3, 136, 68, 0, 805, 806, 5, 169, 0, 0, 806, 810, 1, 0, 0, 0, 807, 808, 5, 111, 0, 0, 808, 810, 3, 136, 68, 0, 809, 800, 1, 0, 0, 0, 809, 802, 1, 0, 0, 0, 809, 807, 1, 0, 0, 0, 810, 101, 1, 0, 0, 0, 811, 812, 5, 89, 0, 0, 812, 814, 3, 110, 55, 0, 813, 815, 5, 158, 0, 0, 814, 813, 1, 0, 0, 0, 814, 815, 1, 0, 0, 0, 815, 818, 1, 0, 0, 0, 816, 817, 5, 70, 0, 0, 817, 819, 3, 110, 55, 0, 818, 816, 1, 0, 0, 0, 818, 819, 1, 0, 0, 0, 819, 824, 1, 0, 0, 0, 820, 821, 5, 149, 0, 0, 821, 822, 3, 200, 100, 0, 822, 823, 5, 169, 0, 0, 823, 825, 1, 0, 0, 0, 824, 820, 1, 0, 0, 0, 824, 825, 1, 0, 0, 0, 825, 103, 1, 0, 0, 0, 826, 829, 3, 142, 71, 0, 827, 828, 7, 7, 0, 0, 828, 830, 3, 142, 71, 0, 829, 827, 1, 0, 0, 0, 829, 830, 1, 0, 0, 0, 830, 105, 1, 0, 0, 0, 831, 836, 3, 108, 54, 0, 832, 833, 5, 135, 0, 0, 833, 835, 3, 108, 54, 0, 834, 832, 1, 0, 0, 0, 835, 838, 1, 0, 0, 0, 836, 834, 1, 0, 0, 0, 836, 837, 1, 0, 0, 0, 837, 107, 1, 0, 0, 0, 838, 836, 1, 0, 0, 0, 839, 841, 3, 142, 71, 0, 840, 842, 7, 8, 0, 0, 841, 840, 1, 0, 0, 0, 841, 842, 1, 0, 0, 0, 842, 845, 1, 0, 0, 0, 843, 844, 5, 69, 0, 0, 844, 846, 7, 9, 0, 0, 845, 843, 1, 0, 0, 0, 845, 846, 1, 0, 0, 0, 846, 849, 1, 0, 0, 0, 847, 848, 5, 16, 0, 0, 848, 850, 5, 127, 0, 0, 849, 847, 1, 0, 0, 0, 849, 850, 1, 0, 0, 0, 850, 109, 1, 0, 0, 0, 851, 858, 3, 204, 102, 0, 852, 855, 3, 188, 94, 0, 853, 854, 5, 171, 0, 0, 854, 856, 3, 188, 94, 0, 855, 853, 1, 0, 0, 0, 855, 856, 1, 0, 0, 0, 856, 858, 1, 0, 0, 0, 857, 851, 1, 0, 0, 0, 857, 852, 1, 0, 0, 0, 858, 111, 1, 0, 0, 0, 859, 864, 3, 114, 57, 0, 860, 861, 5, 135, 0, 0, 861, 863, 3, 114, 57, 0, 862, 860, 1, 0, 0, 0, 863, 866, 1, 0, 0, 0, 864, 862, 1, 0, 0, 0, 864, 865, 1, 0, 0, 0, 865, 113, 1, 0, 0, 0, 866, 864, 1, 0, 0, 0, 867, 868, 3, 200, 100, 0, 868, 869, 5, 141, 0, 0, 869, 870, 3, 190, 95, 0, 870, 115, 1, 0, 0, 0, 871, 873, 3, 118, 59, 0, 872, 871, 1, 0, 0, 0, 872, 873, 1, 0, 0, 0, 873, 875, 1, 0, 0, 0, 874, 876, 3, 120, 60, 0, 875, 874, 1, 0, 0, 0, 875, 876, 1, 0, 0, 0, 876, 878, 1, 0, 0, 0, 877, 879, 3, 124, 62, 0, 878, 877, 1, 0, 0, 0, 878, 879, 1, 0, 0, 0, 879, 117, 1, 0, 0, 0, 880, 881, 5, 76, 0, 0, 881, 882, 5, 11, 0, 0, 882, 883, 3, 136, 68, 0, 883, 119, 1, 0, 0, 0, 884, 885, 5, 73, 0, 0, 885, 886, 5, 11, 0, 0, 886, 887, 3, 106, 53, 0, 887, 121, 1, 0, 0, 0, 888, 889, 5, 119, 0, 0, 889, 890, 5, 40, 0, 0, 890, 891, 5, 149, 0, 0, 891, 892, 3, 78, 39, 0, 892, 893, 5, 169, 0, 0, 893, 123, 1, 0, 0, 0, 894, 895, 7, 10, 0, 0, 895, 896, 3, 126, 63, 0, 896, 125, 1, 0, 0, 0, 897, 904, 3, 128, 64, 0, 898, 899, 5, 9, 0, 0, 899, 900, 3, 128, 64, 0, 900, 901, 5, 2, 0, 0, 901, 902, 3, 128, 64, 0, 902, 904, 1, 0, 0, 0, 903, 897, 1, 0, 0, 0, 903, 898, 1, 0, 0, 0, 904, 127, 1, 0, 0, 0, 905, 906, 5, 20, 0, 0, 906, 918, 5, 87, 0, 0, 907, 908, 5, 108, 0, 0, 908, 918, 5, 77, 0, 0, 909, 910, 5, 108, 0, 0, 910, 918, 5, 35, 0, 0, 911, 912, 3, 142, 71, 0, 912, 913, 5, 77, 0, 0, 913, 918, 1, 0, 0, 0, 914, 915, 3, 142, 71, 0, 915, 916, 5, 35, 0, 0, 916, 918, 1, 0, 0, 0, 917, 905, 1, 0, 0, 0, 917, 907, 1, 0, 0, 0, 917, 909, 1, 0, 0, 0, 917, 911, 1, 0, 0, 0, 917, 914, 1, 0, 0, 0, 918, 129, 1, 0, 0, 0, 919, 920, 3, 142, 71, 0, 920, 921, 5, 0, 0, 1, 921, 131, 1, 0, 0, 0, 922, 923, 3, 200, 100, 0, 923, 924, 5, 149, 0, 0, 924, 925, 3, 200, 100, 0, 925, 932, 3, 132, 66, 0, 926, 927, 5, 135, 0, 0, 927, 928, 3, 200, 100, 0, 928, 929, 3, 132, 66, 0, 929, 931, 1, 0, 0, 0, 930, 926, 1, 0, 0, 0, 931, 934, 1, 0, 0, 0, 932, 930, 1, 0, 0, 0, 932, 933, 1, 0, 0, 0, 933, 936, 1, 0, 0, 0, 934, 932, 1, 0, 0, 0, 935, 937, 5, 135, 0, 0, 936, 935, 1, 0, 0, 0, 936, 937, 1, 0, 0, 0, 937, 938, 1, 0, 0, 0, 938, 939, 5, 169, 0, 0, 939, 985, 1, 0, 0, 0, 940, 941, 3, 200, 100, 0, 941, 942, 5, 149, 0, 0, 942, 947, 3, 202, 101, 0, 943, 944, 5, 135, 0, 0, 944, 946, 3, 202, 101, 0, 945, 943, 1, 0, 0, 0, 946, 949, 1, 0, 0, 0, 947, 945, 1, 0, 0, 0, 947, 948, 1, 0, 0, 0, 948, 951, 1, 0, 0, 0, 949, 947, 1, 0, 0, 0, 950, 952, 5, 135, 0, 0, 951, 950, 1, 0, 0, 0, 951, 952, 1, 0, 0, 0, 952, 953, 1, 0, 0, 0, 953, 954, 5, 169, 0, 0, 954, 985, 1, 0, 0, 0, 955, 956, 3, 200, 100, 0, 956, 957, 5, 149, 0, 0, 957, 962, 3, 132, 66, 0, 958, 959, 5, 135, 0, 0, 959, 961, 3, 132, 66, 0, 960, 958, 1, 0, 0, 0, 961, 964, 1, 0, 0, 0, 962, 960, 1, 0, 0, 0, 962, 963, 1, 0, 0, 0, 963, 966, 1, 0, 0, 0, 964, 962, 1, 0, 0, 0, 965, 967, 5, 135, 0, 0, 966, 965, 1, 0, 0, 0, 966, 967, 1, 0, 0, 0, 967, 968, 1, 0, 0, 0, 968, 969, 5, 169, 0, 0, 969, 985, 1, 0, 0, 0, 970, 971, 3, 200, 100, 0, 971, 973, 5, 149, 0, 0, 972, 974, 3, 136, 68, 0, 973, 972, 1, 0, 0, 0, 973, 974, 1, 0, 0, 0, 974, 975, 1, 0, 0, 0, 975, 976, 5, 169, 0, 0, 976, 985, 1, 0, 0, 0, 977, 979, 3, 200, 100, 0, 978, 980, 3, 200, 100, 0, 979, 978, 1, 0, 0, 0, 980, 981, 1, 0, 0, 0, 981, 979, 1, 0, 0, 0, 981, 982, 1, 0, 0, 0, 982, 985, 1, 0, 0, 0, 983, 985, 3, 200, 100, 0, 984, 922, 1, 0, 0, 0, 984, 940, 1, 0, 0, 0, 984, 955, 1, 0, 0, 0, 984, 970, 1, 0, 0, 0, 984, 977, 1, 0, 0, 0, 984, 983, 1, 0, 0, 0, 985, 133, 1, 0, 0, 0, 986, 988, 3, 200, 100, 0, 987, 989, 3, 200, 100, 0, 988, 987, 1, 0, 0, 0, 989, 990, 1, 0, 0, 0, 990, 988, 1, 0, 0, 0, 990, 991, 1, 0, 0, 0, 991, 994, 1, 0, 0, 0, 992, 994, 3, 200, 100, 0, 993, 986, 1, 0, 0, 0, 993, 992, 1, 0, 0, 0, 994, 135, 1, 0, 0, 0, 995, 1000, 3, 142, 71, 0, 996, 997, 5, 135, 0, 0, 997, 999, 3, 142, 71, 0, 998, 996, 1, 0, 0, 0, 999, 1002, 1, 0, 0, 0, 1000, 998, 1, 0, 0, 0, 1000, 1001, 1, 0, 0, 0, 1001, 1004, 1, 0, 0, 0, 1002, 1000, 1, 0, 0, 0, 1003, 1005, 5, 135, 0, 0, 1004, 1003, 1, 0, 0, 0, 1004, 1005, 1, 0, 0, 0, 1005, 137, 1, 0, 0, 0, 1006, 1011, 3, 140, 70, 0, 1007, 1008, 5, 135, 0, 0, 1008, 1010, 3, 140, 70, 0, 1009, 1007, 1, 0, 0, 0, 1010, 1013, 1, 0, 0, 0, 1011, 1009, 1, 0, 0, 0, 1011, 1012, 1, 0, 0, 0, 1012, 1015, 1, 0, 0, 0, 1013, 1011, 1, 0, 0, 0, 1014, 1016, 5, 135, 0, 0, 1015, 1014, 1, 0, 0, 0, 1015, 1016, 1, 0, 0, 0, 1016, 139, 1, 0, 0, 0, 1017, 1018, 3, 200, 100, 0, 1018, 1019, 5, 134, 0, 0, 1019, 1020, 3, 142, 71, 0, 1020, 1023, 1, 0, 0, 0, 1021, 1023, 3, 142, 71, 0, 1022, 1017, 1, 0, 0, 0, 1022, 1021, 1, 0, 0, 0, 1023, 141, 1, 0, 0, 0, 1024, 1025, 6, 71, -1, 0, 1025, 1027, 5, 12, 0, 0, 1026, 1028, 3, 142, 71, 0, 1027, 1026, 1, 0, 0, 0, 1027, 1028, 1, 0, 0, 0, 1028, 1034, 1, 0, 0, 0, 1029, 1030, 5, 114, 0, 0, 1030, 1031, 3, 142, 71, 0, 1031, 1032, 5, 96, 0, 0, 1032, 1033, 3, 142, 71, 0, 1033, 1035, 1, 0, 0, 0, 1034, 1029, 1, 0, 0, 0, 1035, 1036, 1, 0, 0, 0, 1036, 1034, 1, 0, 0, 0, 1036, 1037, 1, 0, 0, 0, 1037, 1040, 1, 0, 0, 0, 1038, 1039, 5, 26, 0, 0, 1039, 1041, 3, 142, 71, 0, 1040, 1038, 1, 0, 0, 0, 1040, 1041, 1, 0, 0, 0, 1041, 1042, 1, 0, 0, 0, 1042, 1043, 5, 27, 0, 0, 1043, 1299, 1, 0, 0, 0, 1044, 1045, 5, 13, 0, 0, 1045, 1046, 5, 149, 0, 0, 1046, 1047, 3, 142, 71, 0, 1047, 1048, 5, 6, 0, 0, 1048, 1049, 3, 132, 66, 0, 1049, 1050, 5, 169, 0, 0, 1050, 1299, 1, 0, 0, 0, 1051, 1052, 5, 107, 0, 0, 1052, 1053, 5, 149, 0, 0, 1053, 1054, 3, 142, 71, 0, 1054, 1055, 5, 6, 0, 0, 1055, 1056, 3, 132, 66, 0, 1056, 1057, 5, 169, 0, 0, 1057, 1299, 1, 0, 0, 0, 1058, 1059, 5, 21, 0, 0, 1059, 1299, 5, 127, 0, 0, 1060, 1061, 5, 51, 0, 0, 1061, 1299, 5, 127, 0, 0, 1062, 1063, 5, 51, 0, 0, 1063, 1064, 3, 142, 71, 0, 1064, 1065, 3, 192, 96, 0, 1065, 1299, 1, 0, 0, 0, 1066, 1067, 5, 95, 0, 0, 1067, 1068, 5, 149, 0, 0, 1068, 1069, 3, 142, 71, 0, 1069, 1070, 5, 37, 0, 0, 1070, 1073, 3, 142, 71, 0, 1071, 1072, 5, 36, 0, 0, 1072, 1074, 3, 142, 71, 0, 1073, 1071, 1, 0, 0, 0, 1073, 1074, 1, 0, 0, 0, 1074, 1075, 1, 0, 0, 0, 1075, 1076, 5, 169, 0, 0, 1076, 1299, 1, 0, 0, 0, 1077, 1078, 5, 99, 0, 0, 1078, 1299, 5, 127, 0, 0, 1079, 1080, 5, 104, 0, 0, 1080, 1081, 5, 149, 0, 0, 1081, 1082, 7, 11, 0, 0, 1082, 1083, 3, 206, 103, 0, 1083, 1084, 5, 37, 0, 0, 1084, 1085, 3, 142, 71, 0, 1085, 1086, 5, 169, 0, 0, 1086, 1299, 1, 0, 0, 0, 1087, 1088, 5, 17, 0, 0, 1088, 1089, 5, 149, 0, 0, 1089, 1090, 5, 127, 0, 0, 1090, 1299, 5, 169, 0, 0, 1091, 1092, 5, 17, 0, 0, 1092, 1093, 5, 149, 0, 0, 1093, 1094, 3, 136, 68, 0, 1094, 1095, 5, 169, 0, 0, 1095, 1299, 1, 0, 0, 0, 1096, 1097, 5, 17, 0, 0, 1097, 1098, 5, 149, 0, 0, 1098, 1099, 5, 129, 0, 0, 1099, 1100, 5, 29, 0, 0, 1100, 1101, 5, 149, 0, 0, 1101, 1102, 3, 8, 4, 0, 1102, 1103, 5, 169, 0, 0, 1103, 1104, 5, 83, 0, 0, 1104, 1105, 5, 149, 0, 0, 1105, 1106, 3, 146, 73, 0, 1106, 1107, 5, 169, 0, 0, 1107, 1108, 5, 169, 0, 0, 1108, 1122, 1, 0, 0, 0, 1109, 1110, 5, 149, 0, 0, 1110, 1111, 5, 129, 0, 0, 1111, 1112, 5, 29, 0, 0, 1112, 1113, 5, 149, 0, 0, 1113, 1114, 3, 8, 4, 0, 1114, 1115, 5, 169, 0, 0, 1115, 1116, 5, 83, 0, 0, 1116, 1117, 5, 149, 0, 0, 1117, 1118, 3, 146, 73, 0, 1118, 1119, 5, 169, 0, 0, 1119, 1120, 5, 169, 0, 0, 1120, 1122, 1, 0, 0, 0, 1121, 1096, 1, 0, 0, 0, 1121, 1109, 1, 0, 0, 0, 1122, 1299, 1, 0, 0, 0, 1123, 1124, 5, 17, 0, 0, 1124, 1125, 5, 149, 0, 0, 1125, 1126, 5, 129, 0, 0, 1126, 1127, 5, 29, 0, 0, 1127, 1128, 5, 149, 0, 0, 1128, 1129, 3, 8, 4, 0, 1129, 1130, 5, 169, 0, 0, 1130, 1131, 5, 169, 0, 0, 1131, 1299, 1, 0, 0, 0, 1132, 1133, 5, 17, 0, 0, 1133, 1134, 5, 149, 0, 0, 1134, 1135, 5, 129, 0, 0, 1135, 1136, 5, 83, 0, 0, 1136, 1137, 5, 149, 0, 0, 1137, 1138, 3, 146, 73, 0, 1138, 1139, 5, 169, 0, 0, 1139, 1140, 5, 169, 0, 0, 1140, 1150, 1, 0, 0, 0, 1141, 1142, 5, 149, 0, 0, 1142, 1143, 5, 129, 0, 0, 1143, 1144, 5, 83, 0, 0, 1144, 1145, 5, 149, 0, 0, 1145, 1146, 3, 146, 73, 0, 1146, 1147, 5, 169, 0, 0, 1147, 1148, 5, 169, 0, 0, 1148, 1150, 1, 0, 0, 0, 1149, 1132, 1, 0, 0, 0, 1149, 1141, 1, 0, 0, 0, 1150, 1299, 1, 0, 0, 0, 1151, 1152, 5, 17, 0, 0, 1152, 1153, 5, 149, 0, 0, 1153, 1154, 5, 129, 0, 0, 1154, 1299, 5, 169, 0, 0, 1155, 1156, 5, 129, 0, 0, 1156, 1157, 5, 17, 0, 0, 1157, 1158, 5, 149, 0, 0, 1158, 1159, 5, 127, 0, 0, 1159, 1299, 5, 169, 0, 0, 1160, 1161, 5, 129, 0, 0, 1161, 1162, 5, 17, 0, 0, 1162, 1163, 5, 149, 0, 0, 1163, 1164, 3, 136, 68, 0, 1164, 1165, 5, 169, 0, 0, 1165, 1299, 1, 0, 0, 0, 1166, 1167, 3, 200, 100, 0, 1167, 1169, 5, 149, 0, 0, 1168, 1170, 3, 136, 68, 0, 1169, 1168, 1, 0, 0, 0, 1169, 1170, 1, 0, 0, 0, 1170, 1171, 1, 0, 0, 0, 1171, 1172, 5, 169, 0, 0, 1172, 1181, 1, 0, 0, 0, 1173, 1175, 5, 149, 0, 0, 1174, 1176, 5, 25, 0, 0, 1175, 1174, 1, 0, 0, 0, 1175, 1176, 1, 0, 0, 0, 1176, 1178, 1, 0, 0, 0, 1177, 1179, 3, 136, 68, 0, 1178, 1177, 1, 0, 0, 0, 1178, 1179, 1, 0, 0, 0, 1179, 1180, 1, 0, 0, 0, 1180, 1182, 5, 169, 0, 0, 1181, 1173, 1, 0, 0, 0, 1181, 1182, 1, 0, 0, 0, 1182, 1183, 1, 0, 0, 0, 1183, 1184, 5, 75, 0, 0, 1184, 1185, 5, 149, 0, 0, 1185, 1186, 3, 116, 58, 0, 1186, 1187, 5, 169, 0, 0, 1187, 1299, 1, 0, 0, 0, 1188, 1189, 3, 200, 100, 0, 1189, 1191, 5, 149, 0, 0, 1190, 1192, 3, 136, 68, 0, 1191, 1190, 1, 0, 0, 0, 1191, 1192, 1, 0, 0, 0, 1192, 1193, 1, 0, 0, 0, 1193, 1194, 5, 169, 0, 0, 1194, 1203, 1, 0, 0, 0, 1195, 1197, 5, 149, 0, 0, 1196, 1198, 5, 25, 0, 0, 1197, 1196, 1, 0, 0, 0, 1197, 1198, 1, 0, 0, 0, 1198, 1200, 1, 0, 0, 0, 1199, 1201, 3, 136, 68, 0, 1200, 1199, 1, 0, 0, 0, 1200, 1201, 1, 0, 0, 0, 1201, 1202, 1, 0, 0, 0, 1202, 1204, 5, 169, 0, 0, 1203, 1195, 1, 0, 0, 0, 1203, 1204, 1, 0, 0, 0, 1204, 1205, 1, 0, 0, 0, 1205, 1206, 5, 75, 0, 0, 1206, 1207, 3, 200, 100, 0, 1207, 1299, 1, 0, 0, 0, 1208, 1209, 3, 200, 100, 0, 1209, 1211, 5, 149, 0, 0, 1210, 1212, 3, 136, 68, 0, 1211, 1210, 1, 0, 0, 0, 1211, 1212, 1, 0, 0, 0, 1212, 1213, 1, 0, 0, 0, 1213, 1214, 5, 169, 0, 0, 1214, 1215, 3, 122, 61, 0, 1215, 1299, 1, 0, 0, 0, 1216, 1222, 3, 200, 100, 0, 1217, 1219, 5, 149, 0, 0, 1218, 1220, 3, 136, 68, 0, 1219, 1218, 1, 0, 0, 0, 1219, 1220, 1, 0, 0, 0, 1220, 1221, 1, 0, 0, 0, 1221, 1223, 5, 169, 0, 0, 1222, 1217, 1, 0, 0, 0, 1222, 1223, 1, 0, 0, 0, 1223, 1224, 1, 0, 0, 0, 1224, 1226, 5, 149, 0, 0, 1225, 1227, 5, 25, 0, 0, 1226, 1225, 1, 0, 0, 0, 1226, 1227, 1, 0, 0, 0, 1227, 1229, 1, 0, 0, 0, 1228, 1230, 3, 136, 68, 0, 1229, 1228, 1, 0, 0, 0, 1229, 1230, 1, 0, 0, 0, 1230, 1231, 1, 0, 0, 0, 1231, 1232, 5, 169, 0, 0, 1232, 1299, 1, 0, 0, 0, 1233, 1299, 3, 154, 77, 0, 1234, 1299, 3, 208, 104, 0, 1235, 1299, 3, 190, 95, 0, 1236, 1237, 5, 137, 0, 0, 1237, 1299, 3, 142, 71, 24, 1238, 1239, 5, 67, 0, 0, 1239, 1299, 3, 142, 71, 17, 1240, 1241, 3, 180, 90, 0, 1241, 1242, 5, 139, 0, 0, 1242, 1244, 1, 0, 0, 0, 1243, 1240, 1, 0, 0, 0, 1243, 1244, 1, 0, 0, 0, 1244, 1245, 1, 0, 0, 0, 1245, 1251, 5, 129, 0, 0, 1246, 1247, 5, 29, 0, 0, 1247, 1248, 5, 149, 0, 0, 1248, 1249, 3, 8, 4, 0, 1249, 1250, 5, 169, 0, 0, 1250, 1252, 1, 0, 0, 0, 1251, 1246, 1, 0, 0, 0, 1251, 1252, 1, 0, 0, 0, 1252, 1299, 1, 0, 0, 0, 1253, 1254, 5, 55, 0, 0, 1254, 1259, 3, 200, 100, 0, 1255, 1256, 5, 135, 0, 0, 1256, 1258, 3, 200, 100, 0, 1257, 1255, 1, 0, 0, 0, 1258, 1261, 1, 0, 0, 0, 1259, 1257, 1, 0, 0, 0, 1259, 1260, 1, 0, 0, 0, 1260, 1263, 1, 0, 0, 0, 1261, 1259, 1, 0, 0, 0, 1262, 1264, 5, 135, 0, 0, 1263, 1262, 1, 0, 0, 0, 1263, 1264, 1, 0, 0, 0, 1264, 1265, 1, 0, 0, 0, 1265, 1266, 5, 134, 0, 0, 1266, 1267, 3, 142, 71, 10, 1267, 1299, 1, 0, 0, 0, 1268, 1269, 5, 149, 0, 0, 1269, 1270, 3, 48, 24, 0, 1270, 1271, 5, 169, 0, 0, 1271, 1299, 1, 0, 0, 0, 1272, 1273, 5, 149, 0, 0, 1273, 1274, 3, 142, 71, 0, 1274, 1275, 5, 169, 0, 0, 1275, 1299, 1, 0, 0, 0, 1276, 1277, 5, 149, 0, 0, 1277, 1278, 3, 136, 68, 0, 1278, 1279, 5, 169, 0, 0, 1279, 1299, 1, 0, 0, 0, 1280, 1282, 5, 148, 0, 0, 1281, 1283, 3, 136, 68, 0, 1282, 1281, 1, 0, 0, 0, 1282, 1283, 1, 0, 0, 0, 1283, 1284, 1, 0, 0, 0, 1284, 1299, 5, 168, 0, 0, 1285, 1287, 5, 147, 0, 0, 1286, 1288, 3, 40, 20, 0, 1287, 1286, 1, 0, 0, 0, 1287, 1288, 1, 0, 0, 0, 1288, 1289, 1, 0, 0, 0, 1289, 1299, 5, 167, 0, 0, 1290, 1299, 3, 144, 72, 0, 1291, 1292, 3, 200, 100, 0, 1292, 1293, 5, 133, 0, 0, 1293, 1294, 3, 142, 71, 3, 1294, 1299, 1, 0, 0, 0, 1295, 1296, 5, 144, 0, 0, 1296, 1299, 5, 125, 0, 0, 1297, 1299, 3, 164, 82, 0, 1298, 1024, 1, 0, 0, 0, 1298, 1044, 1, 0, 0, 0, 1298, 1051, 1, 0, 0, 0, 1298, 1058, 1, 0, 0, 0, 1298, 1060, 1, 0, 0, 0, 1298, 1062, 1, 0, 0, 0, 1298, 1066, 1, 0, 0, 0, 1298, 1077, 1, 0, 0, 0, 1298, 1079, 1, 0, 0, 0, 1298, 1087, 1, 0, 0, 0, 1298, 1091, 1, 0, 0, 0, 1298, 1121, 1, 0, 0, 0, 1298, 1123, 1, 0, 0, 0, 1298, 1149, 1, 0, 0, 0, 1298, 1151, 1, 0, 0, 0, 1298, 1155, 1, 0, 0, 0, 1298, 1160, 1, 0, 0, 0, 1298, 1166, 1, 0, 0, 0, 1298, 1188, 1, 0, 0, 0, 1298, 1208, 1, 0, 0, 0, 1298, 1216, 1, 0, 0, 0, 1298, 1233, 1, 0, 0, 0, 1298, 1234, 1, 0, 0, 0, 1298, 1235, 1, 0, 0, 0, 1298, 1236, 1, 0, 0, 0, 1298, 1238, 1, 0, 0, 0, 1298, 1243, 1, 0, 0, 0, 1298, 1253, 1, 0, 0, 0, 1298, 1268, 1, 0, 0, 0, 1298, 1272, 1, 0, 0, 0, 1298, 1276, 1, 0, 0, 0, 1298, 1280, 1, 0, 0, 0, 1298, 1285, 1, 0, 0, 0, 1298, 1290, 1, 0, 0, 0, 1298, 1291, 1, 0, 0, 0, 1298, 1295, 1, 0, 0, 0, 1298, 1297, 1, 0, 0, 0, 1299, 1436, 1, 0, 0, 0, 1300, 1304, 10, 23, 0, 0, 1301, 1305, 5, 129, 0, 0, 1302, 1305, 5, 171, 0, 0, 1303, 1305, 5, 158, 0, 0, 1304, 1301, 1, 0, 0, 0, 1304, 1302, 1, 0, 0, 0, 1304, 1303, 1, 0, 0, 0, 1305, 1306, 1, 0, 0, 0, 1306, 1435, 3, 142, 71, 24, 1307, 1311, 10, 22, 0, 0, 1308, 1312, 5, 159, 0, 0, 1309, 1312, 5, 137, 0, 0, 1310, 1312, 5, 136, 0, 0, 1311, 1308, 1, 0, 0, 0, 1311, 1309, 1, 0, 0, 0, 1311, 1310, 1, 0, 0, 0, 1312, 1313, 1, 0, 0, 0, 1313, 1435, 3, 142, 71, 23, 1314, 1339, 10, 21, 0, 0, 1315, 1340, 5, 140, 0, 0, 1316, 1340, 5, 141, 0, 0, 1317, 1340, 5, 153, 0, 0, 1318, 1340, 5, 150, 0, 0, 1319, 1340, 5, 151, 0, 0, 1320, 1340, 5, 142, 0, 0, 1321, 1340, 5, 143, 0, 0, 1322, 1324, 5, 67, 0, 0, 1323, 1322, 1, 0, 0, 0, 1323, 1324, 1, 0, 0, 0, 1324, 1325, 1, 0, 0, 0, 1325, 1327, 5, 47, 0, 0, 1326, 1328, 5, 15, 0, 0, 1327, 1326, 1, 0, 0, 0, 1327, 1328, 1, 0, 0, 0, 1328, 1340, 1, 0, 0, 0, 1329, 1331, 5, 67, 0, 0, 1330, 1329, 1, 0, 0, 0, 1330, 1331, 1, 0, 0, 0, 1331, 1332, 1, 0, 0, 0, 1332, 1340, 7, 12, 0, 0, 1333, 1340, 5, 165, 0, 0, 1334, 1340, 5, 166, 0, 0, 1335, 1340, 5, 155, 0, 0, 1336, 1340, 5, 145, 0, 0, 1337, 1340, 5, 146, 0, 0, 1338, 1340, 5, 154, 0, 0, 1339, 1315, 1, 0, 0, 0, 1339, 1316, 1, 0, 0, 0, 1339, 1317, 1, 0, 0, 0, 1339, 1318, 1, 0, 0, 0, 1339, 1319, 1, 0, 0, 0, 1339, 1320, 1, 0, 0, 0, 1339, 1321, 1, 0, 0, 0, 1339, 1323, 1, 0, 0, 0, 1339, 1330, 1, 0, 0, 0, 1339, 1333, 1, 0, 0, 0, 1339, 1334, 1, 0, 0, 0, 1339, 1335, 1, 0, 0, 0, 1339, 1336, 1, 0, 0, 0, 1339, 1337, 1, 0, 0, 0, 1339, 1338, 1, 0, 0, 0, 1340, 1341, 1, 0, 0, 0, 1341, 1435, 3, 142, 71, 22, 1342, 1343, 10, 19, 0, 0, 1343, 1345, 5, 52, 0, 0, 1344, 1346, 5, 67, 0, 0, 1345, 1344, 1, 0, 0, 0, 1345, 1346, 1, 0, 0, 0, 1346, 1347, 1, 0, 0, 0, 1347, 1348, 5, 25, 0, 0, 1348, 1349, 5, 37, 0, 0, 1349, 1435, 3, 142, 71, 20, 1350, 1351, 10, 18, 0, 0, 1351, 1352, 5, 157, 0, 0, 1352, 1435, 3, 142, 71, 19, 1353, 1354, 10, 16, 0, 0, 1354, 1355, 5, 2, 0, 0, 1355, 1435, 3, 142, 71, 17, 1356, 1357, 10, 15, 0, 0, 1357, 1358, 5, 72, 0, 0, 1358, 1435, 3, 142, 71, 16, 1359, 1361, 10, 14, 0, 0, 1360, 1362, 5, 67, 0, 0, 1361, 1360, 1, 0, 0, 0, 1361, 1362, 1, 0, 0, 0, 1362, 1363, 1, 0, 0, 0, 1363, 1364, 5, 9, 0, 0, 1364, 1365, 3, 142, 71, 0, 1365, 1366, 5, 2, 0, 0, 1366, 1367, 3, 142, 71, 15, 1367, 1435, 1, 0, 0, 0, 1368, 1369, 10, 13, 0, 0, 1369, 1370, 5, 160, 0, 0, 1370, 1371, 3, 142, 71, 0, 1371, 1372, 5, 134, 0, 0, 1372, 1373, 3, 142, 71, 13, 1373, 1435, 1, 0, 0, 0, 1374, 1375, 10, 37, 0, 0, 1375, 1376, 5, 149, 0, 0, 1376, 1377, 3, 48, 24, 0, 1377, 1378, 5, 169, 0, 0, 1378, 1435, 1, 0, 0, 0, 1379, 1380, 10, 36, 0, 0, 1380, 1382, 5, 149, 0, 0, 1381, 1383, 3, 136, 68, 0, 1382, 1381, 1, 0, 0, 0, 1382, 1383, 1, 0, 0, 0, 1383, 1384, 1, 0, 0, 0, 1384, 1435, 5, 169, 0, 0, 1385, 1386, 10, 32, 0, 0, 1386, 1387, 5, 148, 0, 0, 1387, 1388, 3, 142, 71, 0, 1388, 1389, 5, 168, 0, 0, 1389, 1435, 1, 0, 0, 0, 1390, 1391, 10, 31, 0, 0, 1391, 1393, 5, 148, 0, 0, 1392, 1394, 3, 142, 71, 0, 1393, 1392, 1, 0, 0, 0, 1393, 1394, 1, 0, 0, 0, 1394, 1395, 1, 0, 0, 0, 1395, 1397, 5, 134, 0, 0, 1396, 1398, 3, 142, 71, 0, 1397, 1396, 1, 0, 0, 0, 1397, 1398, 1, 0, 0, 0, 1398, 1399, 1, 0, 0, 0, 1399, 1435, 5, 168, 0, 0, 1400, 1401, 10, 30, 0, 0, 1401, 1402, 5, 139, 0, 0, 1402, 1435, 5, 125, 0, 0, 1403, 1404, 10, 29, 0, 0, 1404, 1405, 5, 139, 0, 0, 1405, 1435, 3, 200, 100, 0, 1406, 1407, 10, 28, 0, 0, 1407, 1408, 5, 156, 0, 0, 1408, 1409, 5, 148, 0, 0, 1409, 1410, 3, 142, 71, 0, 1410, 1411, 5, 168, 0, 0, 1411, 1435, 1, 0, 0, 0, 1412, 1413, 10, 27, 0, 0, 1413, 1414, 5, 156, 0, 0, 1414, 1435, 5, 125, 0, 0, 1415, 1416, 10, 26, 0, 0, 1416, 1417, 5, 156, 0, 0, 1417, 1435, 3, 200, 100, 0, 1418, 1419, 10, 25, 0, 0, 1419, 1420, 5, 132, 0, 0, 1420, 1435, 3, 134, 67, 0, 1421, 1422, 10, 20, 0, 0, 1422, 1424, 5, 52, 0, 0, 1423, 1425, 5, 67, 0, 0, 1424, 1423, 1, 0, 0, 0, 1424, 1425, 1, 0, 0, 0, 1425, 1426, 1, 0, 0, 0, 1426, 1435, 5, 68, 0, 0, 1427, 1432, 10, 12, 0, 0, 1428, 1429, 5, 6, 0, 0, 1429, 1433, 3, 200, 100, 0, 1430, 1431, 5, 6, 0, 0, 1431, 1433, 5, 127, 0, 0, 1432, 1428, 1, 0, 0, 0, 1432, 1430, 1, 0, 0, 0, 1433, 1435, 1, 0, 0, 0, 1434, 1300, 1, 0, 0, 0, 1434, 1307, 1, 0, 0, 0, 1434, 1314, 1, 0, 0, 0, 1434, 1342, 1, 0, 0, 0, 1434, 1350, 1, 0, 0, 0, 1434, 1353, 1, 0, 0, 0, 1434, 1356, 1, 0, 0, 0, 1434, 1359, 1, 0, 0, 0, 1434, 1368, 1, 0, 0, 0, 1434, 1374, 1, 0, 0, 0, 1434, 1379, 1, 0, 0, 0, 1434, 1385, 1, 0, 0, 0, 1434, 1390, 1, 0, 0, 0, 1434, 1400, 1, 0, 0, 0, 1434, 1403, 1, 0, 0, 0, 1434, 1406, 1, 0, 0, 0, 1434, 1412, 1, 0, 0, 0, 1434, 1415, 1, 0, 0, 0, 1434, 1418, 1, 0, 0, 0, 1434, 1421, 1, 0, 0, 0, 1434, 1427, 1, 0, 0, 0, 1435, 1438, 1, 0, 0, 0, 1436, 1434, 1, 0, 0, 0, 1436, 1437, 1, 0, 0, 0, 1437, 143, 1, 0, 0, 0, 1438, 1436, 1, 0, 0, 0, 1439, 1440, 5, 149, 0, 0, 1440, 1445, 3, 200, 100, 0, 1441, 1442, 5, 135, 0, 0, 1442, 1444, 3, 200, 100, 0, 1443, 1441, 1, 0, 0, 0, 1444, 1447, 1, 0, 0, 0, 1445, 1443, 1, 0, 0, 0, 1445, 1446, 1, 0, 0, 0, 1446, 1449, 1, 0, 0, 0, 1447, 1445, 1, 0, 0, 0, 1448, 1450, 5, 135, 0, 0, 1449, 1448, 1, 0, 0, 0, 1449, 1450, 1, 0, 0, 0, 1450, 1451, 1, 0, 0, 0, 1451, 1452, 5, 169, 0, 0, 1452, 1467, 1, 0, 0, 0, 1453, 1458, 3, 200, 100, 0, 1454, 1455, 5, 135, 0, 0, 1455, 1457, 3, 200, 100, 0, 1456, 1454, 1, 0, 0, 0, 1457, 1460, 1, 0, 0, 0, 1458, 1456, 1, 0, 0, 0, 1458, 1459, 1, 0, 0, 0, 1459, 1462, 1, 0, 0, 0, 1460, 1458, 1, 0, 0, 0, 1461, 1463, 5, 135, 0, 0, 1462, 1461, 1, 0, 0, 0, 1462, 1463, 1, 0, 0, 0, 1463, 1467, 1, 0, 0, 0, 1464, 1465, 5, 149, 0, 0, 1465, 1467, 5, 169, 0, 0, 1466, 1439, 1, 0, 0, 0, 1466, 1453, 1, 0, 0, 0, 1466, 1464, 1, 0, 0, 0, 1467, 1468, 1, 0, 0, 0, 1468, 1471, 5, 128, 0, 0, 1469, 1472, 3, 142, 71, 0, 1470, 1472, 3, 36, 18, 0, 1471, 1469, 1, 0, 0, 0, 1471, 1470, 1, 0, 0, 0, 1472, 1489, 1, 0, 0, 0, 1473, 1474, 5, 55, 0, 0, 1474, 1479, 3, 200, 100, 0, 1475, 1476, 5, 135, 0, 0, 1476, 1478, 3, 200, 100, 0, 1477, 1475, 1, 0, 0, 0, 1478, 1481, 1, 0, 0, 0, 1479, 1477, 1, 0, 0, 0, 1479, 1480, 1, 0, 0, 0, 1480, 1483, 1, 0, 0, 0, 1481, 1479, 1, 0, 0, 0, 1482, 1484, 5, 135, 0, 0, 1483, 1482, 1, 0, 0, 0, 1483, 1484, 1, 0, 0, 0, 1484, 1485, 1, 0, 0, 0, 1485, 1486, 5, 134, 0, 0, 1486, 1487, 3, 142, 71, 0, 1487, 1489, 1, 0, 0, 0, 1488, 1466, 1, 0, 0, 0, 1488, 1473, 1, 0, 0, 0, 1489, 145, 1, 0, 0, 0, 1490, 1495, 3, 148, 74, 0, 1491, 1492, 5, 135, 0, 0, 1492, 1494, 3, 148, 74, 0, 1493, 1491, 1, 0, 0, 0, 1494, 1497, 1, 0, 0, 0, 1495, 1493, 1, 0, 0, 0, 1495, 1496, 1, 0, 0, 0, 1496, 147, 1, 0, 0, 0, 1497, 1495, 1, 0, 0, 0, 1498, 1499, 3, 142, 71, 0, 1499, 1500, 5, 6, 0, 0, 1500, 1501, 3, 200, 100, 0, 1501, 149, 1, 0, 0, 0, 1502, 1509, 3, 154, 77, 0, 1503, 1509, 3, 152, 76, 0, 1504, 1505, 5, 147, 0, 0, 1505, 1506, 3, 142, 71, 0, 1506, 1507, 5, 167, 0, 0, 1507, 1509, 1, 0, 0, 0, 1508, 1502, 1, 0, 0, 0, 1508, 1503, 1, 0, 0, 0, 1508, 1504, 1, 0, 0, 0, 1509, 151, 1, 0, 0, 0, 1510, 1511, 5, 183, 0, 0, 1511, 153, 1, 0, 0, 0, 1512, 1513, 5, 151, 0, 0, 1513, 1517, 3, 200, 100, 0, 1514, 1516, 3, 156, 78, 0, 1515, 1514, 1, 0, 0, 0, 1516, 1519, 1, 0, 0, 0, 1517, 1515, 1, 0, 0, 0, 1517, 1518, 1, 0, 0, 0, 1518, 1520, 1, 0, 0, 0, 1519, 1517, 1, 0, 0, 0, 1520, 1521, 5, 172, 0, 0, 1521, 1542, 1, 0, 0, 0, 1522, 1523, 5, 151, 0, 0, 1523, 1527, 3, 200, 100, 0, 1524, 1526, 3, 156, 78, 0, 1525, 1524, 1, 0, 0, 0, 1526, 1529, 1, 0, 0, 0, 1527, 1525, 1, 0, 0, 0, 1527, 1528, 1, 0, 0, 0, 1528, 1530, 1, 0, 0, 0, 1529, 1527, 1, 0, 0, 0, 1530, 1534, 5, 143, 0, 0, 1531, 1533, 3, 150, 75, 0, 1532, 1531, 1, 0, 0, 0, 1533, 1536, 1, 0, 0, 0, 1534, 1532, 1, 0, 0, 0, 1534, 1535, 1, 0, 0, 0, 1535, 1537, 1, 0, 0, 0, 1536, 1534, 1, 0, 0, 0, 1537, 1538, 5, 152, 0, 0, 1538, 1539, 3, 200, 100, 0, 1539, 1540, 5, 143, 0, 0, 1540, 1542, 1, 0, 0, 0, 1541, 1512, 1, 0, 0, 0, 1541, 1522, 1, 0, 0, 0, 1542, 155, 1, 0, 0, 0, 1543, 1544, 3, 200, 100, 0, 1544, 1545, 5, 141, 0, 0, 1545, 1546, 3, 206, 103, 0, 1546, 1555, 1, 0, 0, 0, 1547, 1548, 3, 200, 100, 0, 1548, 1549, 5, 141, 0, 0, 1549, 1550, 5, 147, 0, 0, 1550, 1551, 3, 142, 71, 0, 1551, 1552, 5, 167, 0, 0, 1552, 1555, 1, 0, 0, 0, 1553, 1555, 3, 200, 100, 0, 1554, 1543, 1, 0, 0, 0, 1554, 1547, 1, 0, 0, 0, 1554, 1553, 1, 0, 0, 0, 1555, 157, 1, 0, 0, 0, 1556, 1561, 3, 160, 80, 0, 1557, 1558, 5, 135, 0, 0, 1558, 1560, 3, 160, 80, 0, 1559, 1557, 1, 0, 0, 0, 1560, 1563, 1, 0, 0, 0, 1561, 1559, 1, 0, 0, 0, 1561, 1562, 1, 0, 0, 0, 1562, 1565, 1, 0, 0, 0, 1563, 1561, 1, 0, 0, 0, 1564, 1566, 5, 135, 0, 0, 1565, 1564, 1, 0, 0, 0, 1565, 1566, 1, 0, 0, 0, 1566, 159, 1, 0, 0, 0, 1567, 1569, 3, 200, 100, 0, 1568, 1570, 3, 162, 81, 0, 1569, 1568, 1, 0, 0, 0, 1569, 1570, 1, 0, 0, 0, 1570, 1574, 1, 0, 0, 0, 1571, 1572, 5, 111, 0, 0, 1572, 1573, 5, 54, 0, 0, 1573, 1575, 3, 162, 81, 0, 1574, 1571, 1, 0, 0, 0, 1574, 1575, 1, 0, 0, 0, 1575, 1576, 1, 0, 0, 0, 1576, 1581, 5, 6, 0, 0, 1577, 1579, 5, 67, 0, 0, 1578, 1577, 1, 0, 0, 0, 1578, 1579, 1, 0, 0, 0, 1579, 1580, 1, 0, 0, 0, 1580, 1582, 5, 62, 0, 0, 1581, 1578, 1, 0, 0, 0, 1581, 1582, 1, 0, 0, 0, 1582, 1583, 1, 0, 0, 0, 1583, 1584, 5, 149, 0, 0, 1584, 1585, 3, 48, 24, 0, 1585, 1586, 5, 169, 0, 0, 1586, 1592, 1, 0, 0, 0, 1587, 1588, 3, 142, 71, 0, 1588, 1589, 5, 6, 0, 0, 1589, 1590, 3, 200, 100, 0, 1590, 1592, 1, 0, 0, 0, 1591, 1567, 1, 0, 0, 0, 1591, 1587, 1, 0, 0, 0, 1592, 161, 1, 0, 0, 0, 1593, 1594, 5, 149, 0, 0, 1594, 1599, 3, 200, 100, 0, 1595, 1596, 5, 135, 0, 0, 1596, 1598, 3, 200, 100, 0, 1597, 1595, 1, 0, 0, 0, 1598, 1601, 1, 0, 0, 0, 1599, 1597, 1, 0, 0, 0, 1599, 1600, 1, 0, 0, 0, 1600, 1602, 1, 0, 0, 0, 1601, 1599, 1, 0, 0, 0, 1602, 1603, 5, 169, 0, 0, 1603, 163, 1, 0, 0, 0, 1604, 1612, 3, 204, 102, 0, 1605, 1606, 3, 180, 90, 0, 1606, 1607, 5, 139, 0, 0, 1607, 1609, 1, 0, 0, 0, 1608, 1605, 1, 0, 0, 0, 1608, 1609, 1, 0, 0, 0, 1609, 1610, 1, 0, 0, 0, 1610, 1612, 3, 166, 83, 0, 1611, 1604, 1, 0, 0, 0, 1611, 1608, 1, 0, 0, 0, 1612, 165, 1, 0, 0, 0, 1613, 1618, 3, 200, 100, 0, 1614, 1615, 5, 139, 0, 0, 1615, 1617, 3, 200, 100, 0, 1616, 1614, 1, 0, 0, 0, 1617, 1620, 1, 0, 0, 0, 1618, 1616, 1, 0, 0, 0, 1618, 1619, 1, 0, 0, 0, 1619, 167, 1, 0, 0, 0, 1620, 1618, 1, 0, 0, 0, 1621, 1622, 6, 84, -1, 0, 1622, 1635, 3, 180, 90, 0, 1623, 1635, 3, 178, 89, 0, 1624, 1625, 5, 149, 0, 0, 1625, 1626, 3, 48, 24, 0, 1626, 1627, 5, 169, 0, 0, 1627, 1635, 1, 0, 0, 0, 1628, 1629, 5, 149, 0, 0, 1629, 1630, 3, 90, 45, 0, 1630, 1631, 5, 169, 0, 0, 1631, 1635, 1, 0, 0, 0, 1632, 1635, 3, 154, 77, 0, 1633, 1635, 3, 204, 102, 0, 1634, 1621, 1, 0, 0, 0, 1634, 1623, 1, 0, 0, 0, 1634, 1624, 1, 0, 0, 0, 1634, 1628, 1, 0, 0, 0, 1634, 1632, 1, 0, 0, 0, 1634, 1633, 1, 0, 0, 0, 1635, 1653, 1, 0, 0, 0, 1636, 1637, 10, 4, 0, 0, 1637, 1638, 5, 110, 0, 0, 1638, 1639, 5, 149, 0, 0, 1639, 1640, 3, 170, 85, 0, 1640, 1641, 5, 169, 0, 0, 1641, 1652, 1, 0, 0, 0, 1642, 1646, 10, 3, 0, 0, 1643, 1647, 3, 198, 99, 0, 1644, 1645, 5, 6, 0, 0, 1645, 1647, 3, 200, 100, 0, 1646, 1643, 1, 0, 0, 0, 1646, 1644, 1, 0, 0, 0, 1647, 1649, 1, 0, 0, 0, 1648, 1650, 3, 176, 88, 0, 1649, 1648, 1, 0, 0, 0, 1649, 1650, 1, 0, 0, 0, 1650, 1652, 1, 0, 0, 0, 1651, 1636, 1, 0, 0, 0, 1651, 1642, 1, 0, 0, 0, 1652, 1655, 1, 0, 0, 0, 1653, 1651, 1, 0, 0, 0, 1653, 1654, 1, 0, 0, 0, 1654, 169, 1, 0, 0, 0, 1655, 1653, 1, 0, 0, 0, 1656, 1661, 3, 172, 86, 0, 1657, 1658, 5, 135, 0, 0, 1658, 1660, 3, 172, 86, 0, 1659, 1657, 1, 0, 0, 0, 1660, 1663, 1, 0, 0, 0, 1661, 1659, 1, 0, 0, 0, 1661, 1662, 1, 0, 0, 0, 1662, 1665, 1, 0, 0, 0, 1663, 1661, 1, 0, 0, 0, 1664, 1666, 5, 135, 0, 0, 1665, 1664, 1, 0, 0, 0, 1665, 1666, 1, 0, 0, 0, 1666, 171, 1, 0, 0, 0, 1667, 1668, 3, 174, 87, 0, 1668, 1669, 5, 36, 0, 0, 1669, 1670, 3, 174, 87, 0, 1670, 1671, 5, 47, 0, 0, 1671, 1672, 5, 149, 0, 0, 1672, 1673, 3, 136, 68, 0, 1673, 1674, 5, 169, 0, 0, 1674, 173, 1, 0, 0, 0, 1675, 1676, 5, 149, 0, 0, 1676, 1677, 3, 136, 68, 0, 1677, 1678, 5, 169, 0, 0, 1678, 1681, 1, 0, 0, 0, 1679, 1681, 3, 142, 71, 0, 1680, 1675, 1, 0, 0, 0, 1680, 1679, 1, 0, 0, 0, 1681, 175, 1, 0, 0, 0, 1682, 1683, 5, 149, 0, 0, 1683, 1688, 3, 200, 100, 0, 1684, 1685, 5, 135, 0, 0, 1685, 1687, 3, 200, 100, 0, 1686, 1684, 1, 0, 0, 0, 1687, 1690, 1, 0, 0, 0, 1688, 1686, 1, 0, 0, 0, 1688, 1689, 1, 0, 0, 0, 1689, 1691, 1, 0, 0, 0, 1690, 1688, 1, 0, 0, 0, 1691, 1692, 5, 169, 0, 0, 1692, 177, 1, 0, 0, 0, 1693, 1694, 3, 200, 100, 0, 1694, 1696, 5, 149, 0, 0, 1695, 1697, 3, 182, 91, 0, 1696, 1695, 1, 0, 0, 0, 1696, 1697, 1, 0, 0, 0, 1697, 1698, 1, 0, 0, 0, 1698, 1699, 5, 169, 0, 0, 1699, 179, 1, 0, 0, 0, 1700, 1701, 3, 184, 92, 0, 1701, 1702, 5, 139, 0, 0, 1702, 1704, 1, 0, 0, 0, 1703, 1700, 1, 0, 0, 0, 1703, 1704, 1, 0, 0, 0, 1704, 1705, 1, 0, 0, 0, 1705, 1706, 3, 166, 83, 0, 1706, 181, 1, 0, 0, 0, 1707, 1712, 3, 142, 71, 0, 1708, 1709, 5, 135, 0, 0, 1709, 1711, 3, 142, 71, 0, 1710, 1708, 1, 0, 0, 0, 1711, 1714, 1, 0, 0, 0, 1712, 1710, 1, 0, 0, 0, 1712, 1713, 1, 0, 0, 0, 1713, 1716, 1, 0, 0, 0, 1714, 1712, 1, 0, 0, 0, 1715, 1717, 5, 135, 0, 0, 1716, 1715, 1, 0, 0, 0, 1716, 1717, 1, 0, 0, 0, 1717, 183, 1, 0, 0, 0, 1718, 1719, 3, 200, 100, 0, 1719, 185, 1, 0, 0, 0, 1720, 1729, 5, 123, 0, 0, 1721, 1722, 5, 139, 0, 0, 1722, 1729, 7, 13, 0, 0, 1723, 1724, 5, 125, 0, 0, 1724, 1726, 5, 139, 0, 0, 1725, 1727, 7, 13, 0, 0, 1726, 1725, 1, 0, 0, 0, 1726, 1727, 1, 0, 0, 0, 1727, 1729, 1, 0, 0, 0, 1728, 1720, 1, 0, 0, 0, 1728, 1721, 1, 0, 0, 0, 1728, 1723, 1, 0, 0, 0, 1729, 187, 1, 0, 0, 0, 1730, 1732, 7, 14, 0, 0, 1731, 1730, 1, 0, 0, 0, 1731, 1732, 1, 0, 0, 0, 1732, 1739, 1, 0, 0, 0, 1733, 1740, 3, 186, 93, 0, 1734, 1740, 5, 124, 0, 0, 1735, 1740, 5, 125, 0, 0, 1736, 1740, 5, 126, 0, 0, 1737, 1740, 5, 48, 0, 0, 1738, 1740, 5, 66, 0, 0, 1739, 1733, 1, 0, 0, 0, 1739, 1734, 1, 0, 0, 0, 1739, 1735, 1, 0, 0, 0, 1739, 1736, 1, 0, 0, 0, 1739, 1737, 1, 0, 0, 0, 1739, 1738, 1, 0, 0, 0, 1740, 189, 1, 0, 0, 0, 1741, 1745, 3, 188, 94, 0, 1742, 1745, 5, 127, 0, 0, 1743, 1745, 5, 68, 0, 0, 1744, 1741, 1, 0, 0, 0, 1744, 1742, 1, 0, 0, 0, 1744, 1743, 1, 0, 0, 0, 1745, 191, 1, 0, 0, 0, 1746, 1747, 7, 15, 0, 0, 1747, 193, 1, 0, 0, 0, 1748, 1749, 7, 16, 0, 0, 1749, 195, 1, 0, 0, 0, 1750, 1751, 7, 17, 0, 0, 1751, 197, 1, 0, 0, 0, 1752, 1755, 5, 122, 0, 0, 1753, 1755, 3, 196, 98, 0, 1754, 1752, 1, 0, 0, 0, 1754, 1753, 1, 0, 0, 0, 1755, 199, 1, 0, 0, 0, 1756, 1760, 5, 122, 0, 0, 1757, 1760, 3, 192, 96, 0, 1758, 1760, 3, 194, 97, 0, 1759, 1756, 1, 0, 0, 0, 1759, 1757, 1, 0, 0, 0, 1759, 1758, 1, 0, 0, 0, 1760, 201, 1, 0, 0, 0, 1761, 1762, 3, 206, 103, 0, 1762, 1763, 5, 141, 0, 0, 1763, 1764, 3, 188, 94, 0, 1764, 203, 1, 0, 0, 0, 1765, 1766, 5, 147, 0, 0, 1766, 1767, 3, 142, 71, 0, 1767, 1768, 5, 167, 0, 0, 1768, 205, 1, 0, 0, 0, 1769, 1772, 5, 127, 0, 0, 1770, 1772, 3, 208, 104, 0, 1771, 1769, 1, 0, 0, 0, 1771, 1770, 1, 0, 0, 0, 1772, 207, 1, 0, 0, 0, 1773, 1777, 5, 162, 0, 0, 1774, 1776, 3, 210, 105, 0, 1775, 1774, 1, 0, 0, 0, 1776, 1779, 1, 0, 0, 0, 1777, 1775, 1, 0, 0, 0, 1777, 1778, 1, 0, 0, 0, 1778, 1780, 1, 0, 0, 0, 1779, 1777, 1, 0, 0, 0, 1780, 1781, 5, 164, 0, 0, 1781, 209, 1, 0, 0, 0, 1782, 1783, 5, 178, 0, 0, 1783, 1784, 3, 142, 71, 0, 1784, 1785, 5, 167, 0, 0, 1785, 1788, 1, 0, 0, 0, 1786, 1788, 5, 177, 0, 0, 1787, 1782, 1, 0, 0, 0, 1787, 1786, 1, 0, 0, 0, 1788, 211, 1, 0, 0, 0, 1789, 1793, 5, 163, 0, 0, 1790, 1792, 3, 214, 107, 0, 1791, 1790, 1, 0, 0, 0, 1792, 1795, 1, 0, 0, 0, 1793, 1791, 1, 0, 0, 0, 1793, 1794, 1, 0, 0, 0, 1794, 1796, 1, 0, 0, 0, 1795, 1793, 1, 0, 0, 0, 1796, 1797, 5, 0, 0, 1, 1797, 213, 1, 0, 0, 0, 1798, 1799, 5, 180, 0, 0, 1799, 1800, 3, 142, 71, 0, 1800, 1801, 5, 167, 0, 0, 1801, 1804, 1, 0, 0, 0, 1802, 1804, 5, 179, 0, 0, 1803, 1798, 1, 0, 0, 0, 1803, 1802, 1, 0, 0, 0, 1804, 215, 1, 0, 0, 0, 229, 219, 226, 234, 241, 245, 259, 263, 266, 270, 273, 280, 284, 293, 298, 307, 315, 322, 326, 332, 337, 345, 352, 358, 369, 377, 391, 395, 400, 403, 413, 419, 424, 430, 436, 441, 447, 453, 458, 460, 468, 472, 477, 481, 485, 490, 494, 501, 504, 508, 511, 515, 518, 521, 524, 527, 530, 533, 537, 541, 544, 547, 551, 554, 557, 560, 564, 567, 571, 579, 585, 606, 629, 636, 641, 667, 671, 675, 680, 684, 689, 703, 712, 720, 723, 729, 737, 743, 745, 749, 754, 759, 762, 766, 770, 773, 775, 778, 782, 786, 789, 791, 793, 798, 809, 814, 818, 824, 829, 836, 841, 845, 849, 855, 857, 864, 872, 875, 878, 903, 917, 932, 936, 947, 951, 962, 966, 973, 981, 984, 990, 993, 1000, 1004, 1011, 1015, 1022, 1027, 1036, 1040, 1073, 1121, 1149, 1169, 1175, 1178, 1181, 1191, 1197, 1200, 1203, 1211, 1219, 1222, 1226, 1229, 1243, 1251, 1259, 1263, 1282, 1287, 1298, 1304, 1311, 1323, 1327, 1330, 1339, 1345, 1361, 1382, 1393, 1397, 1424, 1432, 1434, 1436, 1445, 1449, 1458, 1462, 1466, 1471, 1479, 1483, 1488, 1495, 1508, 1517, 1527, 1534, 1541, 1554, 1561, 1565, 1569, 1574, 1578, 1581, 1591, 1599, 1608, 1611, 1618, 1634, 1646, 1649, 1651, 1653, 1661, 1665, 1680, 1688, 1696, 1703, 1712, 1716, 1726, 1728, 1731, 1739, 1744, 1754, 1759, 1771, 1777, 1787, 1793, 1803] \ No newline at end of file +[4, 1, 190, 1988, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 1, 0, 5, 0, 222, 8, 0, 10, 0, 12, 0, 225, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 231, 8, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 239, 8, 3, 1, 4, 1, 4, 1, 4, 5, 4, 244, 8, 4, 10, 4, 12, 4, 247, 9, 4, 1, 4, 3, 4, 250, 8, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 264, 8, 5, 1, 6, 1, 6, 3, 6, 268, 8, 6, 1, 6, 3, 6, 271, 8, 6, 1, 7, 1, 7, 3, 7, 275, 8, 7, 1, 7, 3, 7, 278, 8, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 285, 8, 8, 1, 8, 1, 8, 3, 8, 289, 8, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 5, 9, 296, 8, 9, 10, 9, 12, 9, 299, 9, 9, 1, 9, 1, 9, 3, 9, 303, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 312, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 320, 8, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 327, 8, 12, 1, 12, 1, 12, 3, 12, 331, 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 337, 8, 12, 1, 12, 1, 12, 1, 12, 3, 12, 342, 8, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 350, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 357, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 363, 8, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 3, 16, 374, 8, 16, 1, 17, 1, 17, 1, 18, 1, 18, 5, 18, 380, 8, 18, 10, 18, 12, 18, 383, 9, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 5, 20, 394, 8, 20, 10, 20, 12, 20, 397, 9, 20, 1, 20, 3, 20, 400, 8, 20, 1, 21, 1, 21, 1, 21, 3, 21, 405, 8, 21, 1, 21, 3, 21, 408, 8, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 423, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 429, 8, 23, 1, 23, 1, 23, 1, 23, 3, 23, 434, 8, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 440, 8, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 446, 8, 23, 1, 23, 1, 23, 1, 23, 3, 23, 451, 8, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 457, 8, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 463, 8, 23, 1, 23, 1, 23, 1, 23, 3, 23, 468, 8, 23, 3, 23, 470, 8, 23, 1, 23, 1, 23, 1, 24, 1, 24, 5, 24, 476, 8, 24, 10, 24, 12, 24, 479, 9, 24, 1, 24, 3, 24, 482, 8, 24, 1, 24, 3, 24, 485, 8, 24, 1, 25, 1, 25, 1, 25, 3, 25, 490, 8, 25, 1, 25, 1, 25, 3, 25, 494, 8, 25, 1, 25, 1, 25, 3, 25, 498, 8, 25, 1, 25, 1, 25, 1, 25, 3, 25, 503, 8, 25, 1, 25, 1, 25, 3, 25, 507, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 514, 8, 25, 1, 26, 3, 26, 517, 8, 26, 1, 26, 1, 26, 3, 26, 521, 8, 26, 1, 26, 3, 26, 524, 8, 26, 1, 26, 1, 26, 3, 26, 528, 8, 26, 1, 26, 3, 26, 531, 8, 26, 1, 26, 3, 26, 534, 8, 26, 1, 26, 3, 26, 537, 8, 26, 1, 26, 3, 26, 540, 8, 26, 1, 26, 3, 26, 543, 8, 26, 1, 26, 3, 26, 546, 8, 26, 1, 26, 1, 26, 3, 26, 550, 8, 26, 1, 26, 1, 26, 3, 26, 554, 8, 26, 1, 26, 3, 26, 557, 8, 26, 1, 26, 3, 26, 560, 8, 26, 1, 26, 1, 26, 3, 26, 564, 8, 26, 1, 26, 3, 26, 567, 8, 26, 1, 26, 3, 26, 570, 8, 26, 1, 26, 3, 26, 573, 8, 26, 1, 26, 1, 26, 3, 26, 577, 8, 26, 1, 26, 3, 26, 580, 8, 26, 1, 27, 1, 27, 3, 27, 584, 8, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 592, 8, 28, 1, 29, 1, 29, 1, 29, 1, 30, 3, 30, 598, 8, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 5, 31, 617, 8, 31, 10, 31, 12, 31, 620, 9, 31, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 643, 8, 34, 1, 35, 1, 35, 1, 35, 5, 35, 648, 8, 35, 10, 35, 12, 35, 651, 9, 35, 1, 36, 1, 36, 3, 36, 655, 8, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 3, 42, 681, 8, 42, 1, 42, 1, 42, 3, 42, 685, 8, 42, 1, 42, 1, 42, 3, 42, 689, 8, 42, 1, 42, 1, 42, 1, 42, 3, 42, 694, 8, 42, 1, 42, 1, 42, 3, 42, 698, 8, 42, 1, 42, 1, 42, 1, 42, 3, 42, 703, 8, 42, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 5, 45, 715, 8, 45, 10, 45, 12, 45, 718, 9, 45, 1, 46, 1, 46, 1, 46, 1, 46, 5, 46, 724, 8, 46, 10, 46, 12, 46, 727, 9, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 3, 47, 734, 8, 47, 1, 47, 3, 47, 737, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 743, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 751, 8, 47, 1, 47, 3, 47, 754, 8, 47, 1, 47, 1, 47, 1, 47, 3, 47, 759, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 766, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 776, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 784, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 5, 47, 790, 8, 47, 10, 47, 12, 47, 793, 9, 47, 1, 48, 3, 48, 796, 8, 48, 1, 48, 1, 48, 1, 48, 3, 48, 801, 8, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 3, 48, 808, 8, 48, 1, 48, 3, 48, 811, 8, 48, 1, 48, 1, 48, 3, 48, 815, 8, 48, 1, 48, 1, 48, 3, 48, 819, 8, 48, 1, 48, 3, 48, 822, 8, 48, 1, 48, 1, 48, 1, 48, 1, 48, 3, 48, 828, 8, 48, 3, 48, 830, 8, 48, 1, 48, 3, 48, 833, 8, 48, 1, 48, 1, 48, 3, 48, 837, 8, 48, 1, 48, 1, 48, 3, 48, 841, 8, 48, 1, 48, 3, 48, 844, 8, 48, 3, 48, 846, 8, 48, 3, 48, 848, 8, 48, 1, 49, 1, 49, 1, 49, 3, 49, 853, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 864, 8, 50, 1, 51, 1, 51, 1, 51, 3, 51, 869, 8, 51, 1, 51, 1, 51, 3, 51, 873, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 879, 8, 51, 1, 52, 1, 52, 1, 52, 3, 52, 884, 8, 52, 1, 53, 1, 53, 1, 53, 5, 53, 889, 8, 53, 10, 53, 12, 53, 892, 9, 53, 1, 54, 1, 54, 3, 54, 896, 8, 54, 1, 54, 1, 54, 3, 54, 900, 8, 54, 1, 54, 1, 54, 3, 54, 904, 8, 54, 1, 55, 1, 55, 1, 55, 1, 55, 3, 55, 910, 8, 55, 3, 55, 912, 8, 55, 1, 56, 1, 56, 1, 56, 5, 56, 917, 8, 56, 10, 56, 12, 56, 920, 9, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 3, 58, 927, 8, 58, 1, 58, 3, 58, 930, 8, 58, 1, 58, 3, 58, 933, 8, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 958, 8, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 3, 64, 972, 8, 64, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 5, 66, 986, 8, 66, 10, 66, 12, 66, 989, 9, 66, 1, 66, 3, 66, 992, 8, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 5, 66, 1001, 8, 66, 10, 66, 12, 66, 1004, 9, 66, 1, 66, 3, 66, 1007, 8, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 5, 66, 1016, 8, 66, 10, 66, 12, 66, 1019, 9, 66, 1, 66, 3, 66, 1022, 8, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 1029, 8, 66, 1, 66, 1, 66, 1, 66, 1, 66, 4, 66, 1035, 8, 66, 11, 66, 12, 66, 1036, 1, 66, 3, 66, 1040, 8, 66, 1, 66, 1, 66, 1, 66, 3, 66, 1045, 8, 66, 1, 66, 5, 66, 1048, 8, 66, 10, 66, 12, 66, 1051, 9, 66, 1, 67, 1, 67, 4, 67, 1055, 8, 67, 11, 67, 12, 67, 1056, 1, 67, 3, 67, 1060, 8, 67, 1, 68, 1, 68, 1, 68, 5, 68, 1065, 8, 68, 10, 68, 12, 68, 1068, 9, 68, 1, 68, 3, 68, 1071, 8, 68, 1, 69, 1, 69, 1, 69, 5, 69, 1076, 8, 69, 10, 69, 12, 69, 1079, 9, 69, 1, 69, 3, 69, 1082, 8, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 3, 70, 1089, 8, 70, 1, 71, 1, 71, 1, 71, 3, 71, 1094, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 4, 71, 1101, 8, 71, 11, 71, 12, 71, 1102, 1, 71, 1, 71, 3, 71, 1107, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1140, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1188, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1216, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1280, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1288, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1294, 8, 71, 1, 71, 3, 71, 1297, 8, 71, 1, 71, 3, 71, 1300, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1308, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1318, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1324, 8, 71, 1, 71, 3, 71, 1327, 8, 71, 1, 71, 3, 71, 1330, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1338, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1346, 8, 71, 1, 71, 3, 71, 1349, 8, 71, 1, 71, 1, 71, 3, 71, 1353, 8, 71, 1, 71, 3, 71, 1356, 8, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1361, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1370, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1382, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1390, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 5, 71, 1396, 8, 71, 10, 71, 12, 71, 1399, 9, 71, 1, 71, 3, 71, 1402, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1420, 8, 71, 1, 71, 1, 71, 3, 71, 1424, 8, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1429, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1440, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1446, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1453, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1465, 8, 71, 1, 71, 1, 71, 3, 71, 1469, 8, 71, 1, 71, 3, 71, 1472, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1481, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1487, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1503, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1524, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1535, 8, 71, 1, 71, 1, 71, 3, 71, 1539, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1569, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1577, 8, 71, 5, 71, 1579, 8, 71, 10, 71, 12, 71, 1582, 9, 71, 1, 72, 1, 72, 1, 72, 1, 72, 5, 72, 1588, 8, 72, 10, 72, 12, 72, 1591, 9, 72, 1, 72, 3, 72, 1594, 8, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 5, 72, 1601, 8, 72, 10, 72, 12, 72, 1604, 9, 72, 1, 72, 3, 72, 1607, 8, 72, 1, 72, 1, 72, 3, 72, 1611, 8, 72, 1, 72, 1, 72, 1, 72, 3, 72, 1616, 8, 72, 1, 72, 1, 72, 1, 72, 1, 72, 5, 72, 1622, 8, 72, 10, 72, 12, 72, 1625, 9, 72, 1, 72, 3, 72, 1628, 8, 72, 1, 72, 1, 72, 1, 72, 3, 72, 1633, 8, 72, 1, 73, 1, 73, 1, 73, 5, 73, 1638, 8, 73, 10, 73, 12, 73, 1641, 9, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 3, 75, 1653, 8, 75, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 5, 77, 1660, 8, 77, 10, 77, 12, 77, 1663, 9, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 5, 77, 1670, 8, 77, 10, 77, 12, 77, 1673, 9, 77, 1, 77, 1, 77, 5, 77, 1677, 8, 77, 10, 77, 12, 77, 1680, 9, 77, 1, 77, 1, 77, 1, 77, 1, 77, 3, 77, 1686, 8, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1699, 8, 78, 1, 79, 1, 79, 1, 79, 5, 79, 1704, 8, 79, 10, 79, 12, 79, 1707, 9, 79, 1, 79, 3, 79, 1710, 8, 79, 1, 80, 1, 80, 3, 80, 1714, 8, 80, 1, 80, 1, 80, 1, 80, 3, 80, 1719, 8, 80, 1, 80, 1, 80, 3, 80, 1723, 8, 80, 1, 80, 3, 80, 1726, 8, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 3, 80, 1736, 8, 80, 1, 81, 1, 81, 1, 81, 1, 81, 5, 81, 1742, 8, 81, 10, 81, 12, 81, 1745, 9, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 3, 82, 1753, 8, 82, 1, 82, 3, 82, 1756, 8, 82, 1, 83, 1, 83, 1, 83, 5, 83, 1761, 8, 83, 10, 83, 12, 83, 1764, 9, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 3, 84, 1779, 8, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 3, 84, 1789, 8, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 3, 84, 1797, 8, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 3, 84, 1807, 8, 84, 1, 84, 3, 84, 1810, 8, 84, 5, 84, 1812, 8, 84, 10, 84, 12, 84, 1815, 9, 84, 1, 85, 1, 85, 4, 85, 1819, 8, 85, 11, 85, 12, 85, 1820, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 5, 87, 1832, 8, 87, 10, 87, 12, 87, 1835, 9, 87, 1, 87, 3, 87, 1838, 8, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 5, 88, 1853, 8, 88, 10, 88, 12, 88, 1856, 9, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 3, 89, 1863, 8, 89, 1, 90, 1, 90, 1, 90, 1, 90, 5, 90, 1869, 8, 90, 10, 90, 12, 90, 1872, 9, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 3, 91, 1879, 8, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 3, 92, 1886, 8, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 5, 93, 1893, 8, 93, 10, 93, 12, 93, 1896, 9, 93, 1, 93, 3, 93, 1899, 8, 93, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 3, 95, 1909, 8, 95, 3, 95, 1911, 8, 95, 1, 96, 3, 96, 1914, 8, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 3, 96, 1922, 8, 96, 1, 97, 1, 97, 1, 97, 3, 97, 1927, 8, 97, 1, 98, 1, 98, 1, 99, 1, 99, 1, 100, 1, 100, 1, 101, 1, 101, 3, 101, 1937, 8, 101, 1, 102, 1, 102, 1, 102, 3, 102, 1942, 8, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 3, 105, 1954, 8, 105, 1, 106, 1, 106, 5, 106, 1958, 8, 106, 10, 106, 12, 106, 1961, 9, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 3, 107, 1970, 8, 107, 1, 108, 1, 108, 5, 108, 1974, 8, 108, 10, 108, 12, 108, 1977, 9, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 3, 109, 1986, 8, 109, 1, 109, 0, 4, 94, 132, 142, 168, 110, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 0, 18, 2, 0, 35, 35, 40, 40, 2, 0, 19, 19, 92, 92, 2, 0, 52, 52, 61, 61, 3, 0, 1, 1, 4, 4, 8, 8, 2, 0, 3, 3, 98, 98, 4, 0, 1, 1, 3, 4, 8, 8, 98, 98, 2, 0, 61, 61, 91, 91, 2, 0, 74, 74, 141, 141, 2, 0, 7, 7, 23, 24, 2, 0, 34, 34, 59, 59, 2, 0, 87, 87, 94, 94, 3, 0, 10, 10, 60, 60, 109, 109, 2, 0, 47, 47, 63, 63, 1, 0, 130, 131, 2, 0, 143, 143, 165, 165, 7, 0, 22, 22, 44, 44, 66, 67, 86, 86, 96, 96, 119, 119, 126, 126, 20, 0, 1, 13, 15, 21, 23, 27, 29, 32, 34, 34, 36, 39, 41, 43, 45, 50, 52, 52, 54, 61, 63, 64, 68, 69, 71, 71, 73, 85, 87, 95, 97, 102, 104, 111, 113, 118, 120, 121, 123, 124, 4, 0, 21, 21, 34, 34, 45, 45, 57, 57, 2257, 0, 223, 1, 0, 0, 0, 2, 230, 1, 0, 0, 0, 4, 232, 1, 0, 0, 0, 6, 234, 1, 0, 0, 0, 8, 240, 1, 0, 0, 0, 10, 263, 1, 0, 0, 0, 12, 265, 1, 0, 0, 0, 14, 272, 1, 0, 0, 0, 16, 279, 1, 0, 0, 0, 18, 292, 1, 0, 0, 0, 20, 304, 1, 0, 0, 0, 22, 313, 1, 0, 0, 0, 24, 321, 1, 0, 0, 0, 26, 343, 1, 0, 0, 0, 28, 358, 1, 0, 0, 0, 30, 367, 1, 0, 0, 0, 32, 371, 1, 0, 0, 0, 34, 375, 1, 0, 0, 0, 36, 377, 1, 0, 0, 0, 38, 386, 1, 0, 0, 0, 40, 390, 1, 0, 0, 0, 42, 404, 1, 0, 0, 0, 44, 422, 1, 0, 0, 0, 46, 469, 1, 0, 0, 0, 48, 473, 1, 0, 0, 0, 50, 513, 1, 0, 0, 0, 52, 516, 1, 0, 0, 0, 54, 581, 1, 0, 0, 0, 56, 587, 1, 0, 0, 0, 58, 593, 1, 0, 0, 0, 60, 597, 1, 0, 0, 0, 62, 603, 1, 0, 0, 0, 64, 621, 1, 0, 0, 0, 66, 624, 1, 0, 0, 0, 68, 627, 1, 0, 0, 0, 70, 644, 1, 0, 0, 0, 72, 652, 1, 0, 0, 0, 74, 658, 1, 0, 0, 0, 76, 661, 1, 0, 0, 0, 78, 664, 1, 0, 0, 0, 80, 668, 1, 0, 0, 0, 82, 672, 1, 0, 0, 0, 84, 702, 1, 0, 0, 0, 86, 704, 1, 0, 0, 0, 88, 707, 1, 0, 0, 0, 90, 710, 1, 0, 0, 0, 92, 719, 1, 0, 0, 0, 94, 742, 1, 0, 0, 0, 96, 847, 1, 0, 0, 0, 98, 852, 1, 0, 0, 0, 100, 863, 1, 0, 0, 0, 102, 865, 1, 0, 0, 0, 104, 880, 1, 0, 0, 0, 106, 885, 1, 0, 0, 0, 108, 893, 1, 0, 0, 0, 110, 911, 1, 0, 0, 0, 112, 913, 1, 0, 0, 0, 114, 921, 1, 0, 0, 0, 116, 926, 1, 0, 0, 0, 118, 934, 1, 0, 0, 0, 120, 938, 1, 0, 0, 0, 122, 942, 1, 0, 0, 0, 124, 948, 1, 0, 0, 0, 126, 957, 1, 0, 0, 0, 128, 971, 1, 0, 0, 0, 130, 973, 1, 0, 0, 0, 132, 1039, 1, 0, 0, 0, 134, 1059, 1, 0, 0, 0, 136, 1061, 1, 0, 0, 0, 138, 1072, 1, 0, 0, 0, 140, 1088, 1, 0, 0, 0, 142, 1439, 1, 0, 0, 0, 144, 1632, 1, 0, 0, 0, 146, 1634, 1, 0, 0, 0, 148, 1642, 1, 0, 0, 0, 150, 1652, 1, 0, 0, 0, 152, 1654, 1, 0, 0, 0, 154, 1685, 1, 0, 0, 0, 156, 1698, 1, 0, 0, 0, 158, 1700, 1, 0, 0, 0, 160, 1735, 1, 0, 0, 0, 162, 1737, 1, 0, 0, 0, 164, 1755, 1, 0, 0, 0, 166, 1757, 1, 0, 0, 0, 168, 1778, 1, 0, 0, 0, 170, 1816, 1, 0, 0, 0, 172, 1822, 1, 0, 0, 0, 174, 1828, 1, 0, 0, 0, 176, 1839, 1, 0, 0, 0, 178, 1862, 1, 0, 0, 0, 180, 1864, 1, 0, 0, 0, 182, 1875, 1, 0, 0, 0, 184, 1885, 1, 0, 0, 0, 186, 1889, 1, 0, 0, 0, 188, 1900, 1, 0, 0, 0, 190, 1910, 1, 0, 0, 0, 192, 1913, 1, 0, 0, 0, 194, 1926, 1, 0, 0, 0, 196, 1928, 1, 0, 0, 0, 198, 1930, 1, 0, 0, 0, 200, 1932, 1, 0, 0, 0, 202, 1936, 1, 0, 0, 0, 204, 1941, 1, 0, 0, 0, 206, 1943, 1, 0, 0, 0, 208, 1947, 1, 0, 0, 0, 210, 1953, 1, 0, 0, 0, 212, 1955, 1, 0, 0, 0, 214, 1969, 1, 0, 0, 0, 216, 1971, 1, 0, 0, 0, 218, 1985, 1, 0, 0, 0, 220, 222, 3, 2, 1, 0, 221, 220, 1, 0, 0, 0, 222, 225, 1, 0, 0, 0, 223, 221, 1, 0, 0, 0, 223, 224, 1, 0, 0, 0, 224, 226, 1, 0, 0, 0, 225, 223, 1, 0, 0, 0, 226, 227, 5, 0, 0, 1, 227, 1, 1, 0, 0, 0, 228, 231, 3, 6, 3, 0, 229, 231, 3, 10, 5, 0, 230, 228, 1, 0, 0, 0, 230, 229, 1, 0, 0, 0, 231, 3, 1, 0, 0, 0, 232, 233, 3, 142, 71, 0, 233, 5, 1, 0, 0, 0, 234, 235, 5, 62, 0, 0, 235, 238, 3, 204, 102, 0, 236, 237, 5, 139, 0, 0, 237, 239, 3, 4, 2, 0, 238, 236, 1, 0, 0, 0, 238, 239, 1, 0, 0, 0, 239, 7, 1, 0, 0, 0, 240, 245, 3, 166, 83, 0, 241, 242, 5, 141, 0, 0, 242, 244, 3, 166, 83, 0, 243, 241, 1, 0, 0, 0, 244, 247, 1, 0, 0, 0, 245, 243, 1, 0, 0, 0, 245, 246, 1, 0, 0, 0, 246, 249, 1, 0, 0, 0, 247, 245, 1, 0, 0, 0, 248, 250, 5, 141, 0, 0, 249, 248, 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, 9, 1, 0, 0, 0, 251, 264, 3, 12, 6, 0, 252, 264, 3, 14, 7, 0, 253, 264, 3, 18, 9, 0, 254, 264, 3, 20, 10, 0, 255, 264, 3, 22, 11, 0, 256, 264, 3, 26, 13, 0, 257, 264, 3, 24, 12, 0, 258, 264, 3, 28, 14, 0, 259, 264, 3, 30, 15, 0, 260, 264, 3, 36, 18, 0, 261, 264, 3, 32, 16, 0, 262, 264, 3, 34, 17, 0, 263, 251, 1, 0, 0, 0, 263, 252, 1, 0, 0, 0, 263, 253, 1, 0, 0, 0, 263, 254, 1, 0, 0, 0, 263, 255, 1, 0, 0, 0, 263, 256, 1, 0, 0, 0, 263, 257, 1, 0, 0, 0, 263, 258, 1, 0, 0, 0, 263, 259, 1, 0, 0, 0, 263, 260, 1, 0, 0, 0, 263, 261, 1, 0, 0, 0, 263, 262, 1, 0, 0, 0, 264, 11, 1, 0, 0, 0, 265, 267, 5, 90, 0, 0, 266, 268, 3, 4, 2, 0, 267, 266, 1, 0, 0, 0, 267, 268, 1, 0, 0, 0, 268, 270, 1, 0, 0, 0, 269, 271, 5, 176, 0, 0, 270, 269, 1, 0, 0, 0, 270, 271, 1, 0, 0, 0, 271, 13, 1, 0, 0, 0, 272, 274, 5, 103, 0, 0, 273, 275, 3, 4, 2, 0, 274, 273, 1, 0, 0, 0, 274, 275, 1, 0, 0, 0, 275, 277, 1, 0, 0, 0, 276, 278, 5, 176, 0, 0, 277, 276, 1, 0, 0, 0, 277, 278, 1, 0, 0, 0, 278, 15, 1, 0, 0, 0, 279, 288, 5, 14, 0, 0, 280, 281, 5, 155, 0, 0, 281, 284, 3, 204, 102, 0, 282, 283, 5, 140, 0, 0, 283, 285, 3, 204, 102, 0, 284, 282, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 286, 1, 0, 0, 0, 286, 287, 5, 175, 0, 0, 287, 289, 1, 0, 0, 0, 288, 280, 1, 0, 0, 0, 288, 289, 1, 0, 0, 0, 289, 290, 1, 0, 0, 0, 290, 291, 3, 36, 18, 0, 291, 17, 1, 0, 0, 0, 292, 293, 5, 112, 0, 0, 293, 297, 3, 36, 18, 0, 294, 296, 3, 16, 8, 0, 295, 294, 1, 0, 0, 0, 296, 299, 1, 0, 0, 0, 297, 295, 1, 0, 0, 0, 297, 298, 1, 0, 0, 0, 298, 302, 1, 0, 0, 0, 299, 297, 1, 0, 0, 0, 300, 301, 5, 33, 0, 0, 301, 303, 3, 36, 18, 0, 302, 300, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 19, 1, 0, 0, 0, 304, 305, 5, 46, 0, 0, 305, 306, 5, 155, 0, 0, 306, 307, 3, 4, 2, 0, 307, 308, 5, 175, 0, 0, 308, 311, 3, 10, 5, 0, 309, 310, 5, 26, 0, 0, 310, 312, 3, 10, 5, 0, 311, 309, 1, 0, 0, 0, 311, 312, 1, 0, 0, 0, 312, 21, 1, 0, 0, 0, 313, 314, 5, 122, 0, 0, 314, 315, 5, 155, 0, 0, 315, 316, 3, 4, 2, 0, 316, 317, 5, 175, 0, 0, 317, 319, 3, 10, 5, 0, 318, 320, 5, 176, 0, 0, 319, 318, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 23, 1, 0, 0, 0, 321, 322, 5, 37, 0, 0, 322, 326, 5, 155, 0, 0, 323, 327, 3, 6, 3, 0, 324, 327, 3, 30, 15, 0, 325, 327, 3, 4, 2, 0, 326, 323, 1, 0, 0, 0, 326, 324, 1, 0, 0, 0, 326, 325, 1, 0, 0, 0, 326, 327, 1, 0, 0, 0, 327, 328, 1, 0, 0, 0, 328, 330, 5, 176, 0, 0, 329, 331, 3, 4, 2, 0, 330, 329, 1, 0, 0, 0, 330, 331, 1, 0, 0, 0, 331, 332, 1, 0, 0, 0, 332, 336, 5, 176, 0, 0, 333, 337, 3, 6, 3, 0, 334, 337, 3, 30, 15, 0, 335, 337, 3, 4, 2, 0, 336, 333, 1, 0, 0, 0, 336, 334, 1, 0, 0, 0, 336, 335, 1, 0, 0, 0, 336, 337, 1, 0, 0, 0, 337, 338, 1, 0, 0, 0, 338, 339, 5, 175, 0, 0, 339, 341, 3, 10, 5, 0, 340, 342, 5, 176, 0, 0, 341, 340, 1, 0, 0, 0, 341, 342, 1, 0, 0, 0, 342, 25, 1, 0, 0, 0, 343, 344, 5, 37, 0, 0, 344, 345, 5, 155, 0, 0, 345, 346, 5, 62, 0, 0, 346, 349, 3, 204, 102, 0, 347, 348, 5, 141, 0, 0, 348, 350, 3, 204, 102, 0, 349, 347, 1, 0, 0, 0, 349, 350, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 352, 5, 50, 0, 0, 352, 353, 3, 4, 2, 0, 353, 354, 5, 175, 0, 0, 354, 356, 3, 10, 5, 0, 355, 357, 5, 176, 0, 0, 356, 355, 1, 0, 0, 0, 356, 357, 1, 0, 0, 0, 357, 27, 1, 0, 0, 0, 358, 359, 7, 0, 0, 0, 359, 360, 3, 204, 102, 0, 360, 362, 5, 155, 0, 0, 361, 363, 3, 8, 4, 0, 362, 361, 1, 0, 0, 0, 362, 363, 1, 0, 0, 0, 363, 364, 1, 0, 0, 0, 364, 365, 5, 175, 0, 0, 365, 366, 3, 36, 18, 0, 366, 29, 1, 0, 0, 0, 367, 368, 3, 4, 2, 0, 368, 369, 5, 139, 0, 0, 369, 370, 3, 4, 2, 0, 370, 31, 1, 0, 0, 0, 371, 373, 3, 4, 2, 0, 372, 374, 5, 176, 0, 0, 373, 372, 1, 0, 0, 0, 373, 374, 1, 0, 0, 0, 374, 33, 1, 0, 0, 0, 375, 376, 5, 176, 0, 0, 376, 35, 1, 0, 0, 0, 377, 381, 5, 153, 0, 0, 378, 380, 3, 2, 1, 0, 379, 378, 1, 0, 0, 0, 380, 383, 1, 0, 0, 0, 381, 379, 1, 0, 0, 0, 381, 382, 1, 0, 0, 0, 382, 384, 1, 0, 0, 0, 383, 381, 1, 0, 0, 0, 384, 385, 5, 173, 0, 0, 385, 37, 1, 0, 0, 0, 386, 387, 3, 4, 2, 0, 387, 388, 5, 140, 0, 0, 388, 389, 3, 4, 2, 0, 389, 39, 1, 0, 0, 0, 390, 395, 3, 38, 19, 0, 391, 392, 5, 141, 0, 0, 392, 394, 3, 38, 19, 0, 393, 391, 1, 0, 0, 0, 394, 397, 1, 0, 0, 0, 395, 393, 1, 0, 0, 0, 395, 396, 1, 0, 0, 0, 396, 399, 1, 0, 0, 0, 397, 395, 1, 0, 0, 0, 398, 400, 5, 141, 0, 0, 399, 398, 1, 0, 0, 0, 399, 400, 1, 0, 0, 0, 400, 41, 1, 0, 0, 0, 401, 405, 3, 48, 24, 0, 402, 405, 3, 52, 26, 0, 403, 405, 3, 154, 77, 0, 404, 401, 1, 0, 0, 0, 404, 402, 1, 0, 0, 0, 404, 403, 1, 0, 0, 0, 405, 407, 1, 0, 0, 0, 406, 408, 5, 176, 0, 0, 407, 406, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 409, 1, 0, 0, 0, 409, 410, 5, 0, 0, 1, 410, 43, 1, 0, 0, 0, 411, 423, 3, 52, 26, 0, 412, 413, 3, 54, 27, 0, 413, 414, 5, 155, 0, 0, 414, 415, 3, 48, 24, 0, 415, 416, 5, 175, 0, 0, 416, 423, 1, 0, 0, 0, 417, 418, 5, 155, 0, 0, 418, 419, 3, 48, 24, 0, 419, 420, 5, 175, 0, 0, 420, 423, 1, 0, 0, 0, 421, 423, 3, 208, 104, 0, 422, 411, 1, 0, 0, 0, 422, 412, 1, 0, 0, 0, 422, 417, 1, 0, 0, 0, 422, 421, 1, 0, 0, 0, 423, 45, 1, 0, 0, 0, 424, 425, 5, 28, 0, 0, 425, 428, 5, 1, 0, 0, 426, 427, 5, 11, 0, 0, 427, 429, 5, 68, 0, 0, 428, 426, 1, 0, 0, 0, 428, 429, 1, 0, 0, 0, 429, 470, 1, 0, 0, 0, 430, 433, 5, 28, 0, 0, 431, 432, 5, 11, 0, 0, 432, 434, 5, 68, 0, 0, 433, 431, 1, 0, 0, 0, 433, 434, 1, 0, 0, 0, 434, 470, 1, 0, 0, 0, 435, 436, 5, 115, 0, 0, 436, 439, 5, 1, 0, 0, 437, 438, 5, 11, 0, 0, 438, 440, 5, 68, 0, 0, 439, 437, 1, 0, 0, 0, 439, 440, 1, 0, 0, 0, 440, 470, 1, 0, 0, 0, 441, 442, 5, 115, 0, 0, 442, 445, 5, 25, 0, 0, 443, 444, 5, 11, 0, 0, 444, 446, 5, 68, 0, 0, 445, 443, 1, 0, 0, 0, 445, 446, 1, 0, 0, 0, 446, 470, 1, 0, 0, 0, 447, 450, 5, 115, 0, 0, 448, 449, 5, 11, 0, 0, 449, 451, 5, 68, 0, 0, 450, 448, 1, 0, 0, 0, 450, 451, 1, 0, 0, 0, 451, 470, 1, 0, 0, 0, 452, 453, 5, 53, 0, 0, 453, 456, 5, 1, 0, 0, 454, 455, 5, 11, 0, 0, 455, 457, 5, 68, 0, 0, 456, 454, 1, 0, 0, 0, 456, 457, 1, 0, 0, 0, 457, 470, 1, 0, 0, 0, 458, 459, 5, 53, 0, 0, 459, 462, 5, 25, 0, 0, 460, 461, 5, 11, 0, 0, 461, 463, 5, 68, 0, 0, 462, 460, 1, 0, 0, 0, 462, 463, 1, 0, 0, 0, 463, 470, 1, 0, 0, 0, 464, 467, 5, 53, 0, 0, 465, 466, 5, 11, 0, 0, 466, 468, 5, 68, 0, 0, 467, 465, 1, 0, 0, 0, 467, 468, 1, 0, 0, 0, 468, 470, 1, 0, 0, 0, 469, 424, 1, 0, 0, 0, 469, 430, 1, 0, 0, 0, 469, 435, 1, 0, 0, 0, 469, 441, 1, 0, 0, 0, 469, 447, 1, 0, 0, 0, 469, 452, 1, 0, 0, 0, 469, 458, 1, 0, 0, 0, 469, 464, 1, 0, 0, 0, 470, 471, 1, 0, 0, 0, 471, 472, 3, 44, 22, 0, 472, 47, 1, 0, 0, 0, 473, 477, 3, 44, 22, 0, 474, 476, 3, 46, 23, 0, 475, 474, 1, 0, 0, 0, 476, 479, 1, 0, 0, 0, 477, 475, 1, 0, 0, 0, 477, 478, 1, 0, 0, 0, 478, 481, 1, 0, 0, 0, 479, 477, 1, 0, 0, 0, 480, 482, 3, 78, 39, 0, 481, 480, 1, 0, 0, 0, 481, 482, 1, 0, 0, 0, 482, 484, 1, 0, 0, 0, 483, 485, 3, 50, 25, 0, 484, 483, 1, 0, 0, 0, 484, 485, 1, 0, 0, 0, 485, 49, 1, 0, 0, 0, 486, 487, 5, 64, 0, 0, 487, 489, 3, 142, 71, 0, 488, 490, 5, 164, 0, 0, 489, 488, 1, 0, 0, 0, 489, 490, 1, 0, 0, 0, 490, 493, 1, 0, 0, 0, 491, 492, 5, 141, 0, 0, 492, 494, 3, 142, 71, 0, 493, 491, 1, 0, 0, 0, 493, 494, 1, 0, 0, 0, 494, 497, 1, 0, 0, 0, 495, 496, 5, 124, 0, 0, 496, 498, 5, 104, 0, 0, 497, 495, 1, 0, 0, 0, 497, 498, 1, 0, 0, 0, 498, 514, 1, 0, 0, 0, 499, 500, 5, 64, 0, 0, 500, 502, 3, 142, 71, 0, 501, 503, 5, 164, 0, 0, 502, 501, 1, 0, 0, 0, 502, 503, 1, 0, 0, 0, 503, 506, 1, 0, 0, 0, 504, 505, 5, 124, 0, 0, 505, 507, 5, 104, 0, 0, 506, 504, 1, 0, 0, 0, 506, 507, 1, 0, 0, 0, 507, 508, 1, 0, 0, 0, 508, 509, 5, 74, 0, 0, 509, 510, 3, 142, 71, 0, 510, 514, 1, 0, 0, 0, 511, 512, 5, 74, 0, 0, 512, 514, 3, 142, 71, 0, 513, 486, 1, 0, 0, 0, 513, 499, 1, 0, 0, 0, 513, 511, 1, 0, 0, 0, 514, 51, 1, 0, 0, 0, 515, 517, 3, 54, 27, 0, 516, 515, 1, 0, 0, 0, 516, 517, 1, 0, 0, 0, 517, 518, 1, 0, 0, 0, 518, 520, 5, 97, 0, 0, 519, 521, 5, 25, 0, 0, 520, 519, 1, 0, 0, 0, 520, 521, 1, 0, 0, 0, 521, 523, 1, 0, 0, 0, 522, 524, 3, 56, 28, 0, 523, 522, 1, 0, 0, 0, 523, 524, 1, 0, 0, 0, 524, 525, 1, 0, 0, 0, 525, 527, 3, 138, 69, 0, 526, 528, 3, 58, 29, 0, 527, 526, 1, 0, 0, 0, 527, 528, 1, 0, 0, 0, 528, 530, 1, 0, 0, 0, 529, 531, 3, 60, 30, 0, 530, 529, 1, 0, 0, 0, 530, 531, 1, 0, 0, 0, 531, 533, 1, 0, 0, 0, 532, 534, 3, 64, 32, 0, 533, 532, 1, 0, 0, 0, 533, 534, 1, 0, 0, 0, 534, 536, 1, 0, 0, 0, 535, 537, 3, 66, 33, 0, 536, 535, 1, 0, 0, 0, 536, 537, 1, 0, 0, 0, 537, 542, 1, 0, 0, 0, 538, 540, 5, 117, 0, 0, 539, 538, 1, 0, 0, 0, 539, 540, 1, 0, 0, 0, 540, 541, 1, 0, 0, 0, 541, 543, 3, 102, 51, 0, 542, 539, 1, 0, 0, 0, 542, 543, 1, 0, 0, 0, 543, 545, 1, 0, 0, 0, 544, 546, 3, 68, 34, 0, 545, 544, 1, 0, 0, 0, 545, 546, 1, 0, 0, 0, 546, 549, 1, 0, 0, 0, 547, 548, 5, 124, 0, 0, 548, 550, 7, 1, 0, 0, 549, 547, 1, 0, 0, 0, 549, 550, 1, 0, 0, 0, 550, 553, 1, 0, 0, 0, 551, 552, 5, 124, 0, 0, 552, 554, 5, 108, 0, 0, 553, 551, 1, 0, 0, 0, 553, 554, 1, 0, 0, 0, 554, 556, 1, 0, 0, 0, 555, 557, 3, 74, 37, 0, 556, 555, 1, 0, 0, 0, 556, 557, 1, 0, 0, 0, 557, 559, 1, 0, 0, 0, 558, 560, 3, 76, 38, 0, 559, 558, 1, 0, 0, 0, 559, 560, 1, 0, 0, 0, 560, 563, 1, 0, 0, 0, 561, 562, 5, 117, 0, 0, 562, 564, 3, 102, 51, 0, 563, 561, 1, 0, 0, 0, 563, 564, 1, 0, 0, 0, 564, 566, 1, 0, 0, 0, 565, 567, 3, 62, 31, 0, 566, 565, 1, 0, 0, 0, 566, 567, 1, 0, 0, 0, 567, 569, 1, 0, 0, 0, 568, 570, 3, 78, 39, 0, 569, 568, 1, 0, 0, 0, 569, 570, 1, 0, 0, 0, 570, 572, 1, 0, 0, 0, 571, 573, 3, 82, 41, 0, 572, 571, 1, 0, 0, 0, 572, 573, 1, 0, 0, 0, 573, 576, 1, 0, 0, 0, 574, 577, 3, 84, 42, 0, 575, 577, 3, 86, 43, 0, 576, 574, 1, 0, 0, 0, 576, 575, 1, 0, 0, 0, 576, 577, 1, 0, 0, 0, 577, 579, 1, 0, 0, 0, 578, 580, 3, 88, 44, 0, 579, 578, 1, 0, 0, 0, 579, 580, 1, 0, 0, 0, 580, 53, 1, 0, 0, 0, 581, 583, 5, 124, 0, 0, 582, 584, 5, 88, 0, 0, 583, 582, 1, 0, 0, 0, 583, 584, 1, 0, 0, 0, 584, 585, 1, 0, 0, 0, 585, 586, 3, 158, 79, 0, 586, 55, 1, 0, 0, 0, 587, 588, 5, 107, 0, 0, 588, 591, 5, 131, 0, 0, 589, 590, 5, 124, 0, 0, 590, 592, 5, 104, 0, 0, 591, 589, 1, 0, 0, 0, 591, 592, 1, 0, 0, 0, 592, 57, 1, 0, 0, 0, 593, 594, 5, 38, 0, 0, 594, 595, 3, 94, 47, 0, 595, 59, 1, 0, 0, 0, 596, 598, 7, 2, 0, 0, 597, 596, 1, 0, 0, 0, 597, 598, 1, 0, 0, 0, 598, 599, 1, 0, 0, 0, 599, 600, 5, 5, 0, 0, 600, 601, 5, 56, 0, 0, 601, 602, 3, 136, 68, 0, 602, 61, 1, 0, 0, 0, 603, 604, 5, 123, 0, 0, 604, 605, 3, 204, 102, 0, 605, 606, 5, 6, 0, 0, 606, 607, 5, 155, 0, 0, 607, 608, 3, 116, 58, 0, 608, 618, 5, 175, 0, 0, 609, 610, 5, 141, 0, 0, 610, 611, 3, 204, 102, 0, 611, 612, 5, 6, 0, 0, 612, 613, 5, 155, 0, 0, 613, 614, 3, 116, 58, 0, 614, 615, 5, 175, 0, 0, 615, 617, 1, 0, 0, 0, 616, 609, 1, 0, 0, 0, 617, 620, 1, 0, 0, 0, 618, 616, 1, 0, 0, 0, 618, 619, 1, 0, 0, 0, 619, 63, 1, 0, 0, 0, 620, 618, 1, 0, 0, 0, 621, 622, 5, 84, 0, 0, 622, 623, 3, 142, 71, 0, 623, 65, 1, 0, 0, 0, 624, 625, 5, 121, 0, 0, 625, 626, 3, 142, 71, 0, 626, 67, 1, 0, 0, 0, 627, 628, 5, 41, 0, 0, 628, 642, 5, 11, 0, 0, 629, 643, 5, 1, 0, 0, 630, 631, 7, 1, 0, 0, 631, 632, 5, 155, 0, 0, 632, 633, 3, 136, 68, 0, 633, 634, 5, 175, 0, 0, 634, 643, 1, 0, 0, 0, 635, 636, 5, 42, 0, 0, 636, 637, 5, 99, 0, 0, 637, 638, 5, 155, 0, 0, 638, 639, 3, 70, 35, 0, 639, 640, 5, 175, 0, 0, 640, 643, 1, 0, 0, 0, 641, 643, 3, 136, 68, 0, 642, 629, 1, 0, 0, 0, 642, 630, 1, 0, 0, 0, 642, 635, 1, 0, 0, 0, 642, 641, 1, 0, 0, 0, 643, 69, 1, 0, 0, 0, 644, 649, 3, 72, 36, 0, 645, 646, 5, 141, 0, 0, 646, 648, 3, 72, 36, 0, 647, 645, 1, 0, 0, 0, 648, 651, 1, 0, 0, 0, 649, 647, 1, 0, 0, 0, 649, 650, 1, 0, 0, 0, 650, 71, 1, 0, 0, 0, 651, 649, 1, 0, 0, 0, 652, 654, 5, 155, 0, 0, 653, 655, 3, 136, 68, 0, 654, 653, 1, 0, 0, 0, 654, 655, 1, 0, 0, 0, 655, 656, 1, 0, 0, 0, 656, 657, 5, 175, 0, 0, 657, 73, 1, 0, 0, 0, 658, 659, 5, 43, 0, 0, 659, 660, 3, 142, 71, 0, 660, 75, 1, 0, 0, 0, 661, 662, 5, 85, 0, 0, 662, 663, 3, 142, 71, 0, 663, 77, 1, 0, 0, 0, 664, 665, 5, 77, 0, 0, 665, 666, 5, 11, 0, 0, 666, 667, 3, 106, 53, 0, 667, 79, 1, 0, 0, 0, 668, 669, 5, 77, 0, 0, 669, 670, 5, 11, 0, 0, 670, 671, 3, 136, 68, 0, 671, 81, 1, 0, 0, 0, 672, 673, 5, 64, 0, 0, 673, 674, 3, 104, 52, 0, 674, 675, 5, 11, 0, 0, 675, 676, 3, 136, 68, 0, 676, 83, 1, 0, 0, 0, 677, 678, 5, 64, 0, 0, 678, 680, 3, 142, 71, 0, 679, 681, 5, 164, 0, 0, 680, 679, 1, 0, 0, 0, 680, 681, 1, 0, 0, 0, 681, 684, 1, 0, 0, 0, 682, 683, 5, 141, 0, 0, 683, 685, 3, 142, 71, 0, 684, 682, 1, 0, 0, 0, 684, 685, 1, 0, 0, 0, 685, 688, 1, 0, 0, 0, 686, 687, 5, 124, 0, 0, 687, 689, 5, 104, 0, 0, 688, 686, 1, 0, 0, 0, 688, 689, 1, 0, 0, 0, 689, 703, 1, 0, 0, 0, 690, 691, 5, 64, 0, 0, 691, 693, 3, 142, 71, 0, 692, 694, 5, 164, 0, 0, 693, 692, 1, 0, 0, 0, 693, 694, 1, 0, 0, 0, 694, 697, 1, 0, 0, 0, 695, 696, 5, 124, 0, 0, 696, 698, 5, 104, 0, 0, 697, 695, 1, 0, 0, 0, 697, 698, 1, 0, 0, 0, 698, 699, 1, 0, 0, 0, 699, 700, 5, 74, 0, 0, 700, 701, 3, 142, 71, 0, 701, 703, 1, 0, 0, 0, 702, 677, 1, 0, 0, 0, 702, 690, 1, 0, 0, 0, 703, 85, 1, 0, 0, 0, 704, 705, 5, 74, 0, 0, 705, 706, 3, 142, 71, 0, 706, 87, 1, 0, 0, 0, 707, 708, 5, 100, 0, 0, 708, 709, 3, 112, 56, 0, 709, 89, 1, 0, 0, 0, 710, 711, 5, 118, 0, 0, 711, 716, 3, 92, 46, 0, 712, 713, 5, 141, 0, 0, 713, 715, 3, 92, 46, 0, 714, 712, 1, 0, 0, 0, 715, 718, 1, 0, 0, 0, 716, 714, 1, 0, 0, 0, 716, 717, 1, 0, 0, 0, 717, 91, 1, 0, 0, 0, 718, 716, 1, 0, 0, 0, 719, 720, 5, 155, 0, 0, 720, 725, 3, 142, 71, 0, 721, 722, 5, 141, 0, 0, 722, 724, 3, 142, 71, 0, 723, 721, 1, 0, 0, 0, 724, 727, 1, 0, 0, 0, 725, 723, 1, 0, 0, 0, 725, 726, 1, 0, 0, 0, 726, 728, 1, 0, 0, 0, 727, 725, 1, 0, 0, 0, 728, 729, 5, 175, 0, 0, 729, 93, 1, 0, 0, 0, 730, 731, 6, 47, -1, 0, 731, 733, 3, 168, 84, 0, 732, 734, 5, 31, 0, 0, 733, 732, 1, 0, 0, 0, 733, 734, 1, 0, 0, 0, 734, 736, 1, 0, 0, 0, 735, 737, 3, 102, 51, 0, 736, 735, 1, 0, 0, 0, 736, 737, 1, 0, 0, 0, 737, 743, 1, 0, 0, 0, 738, 739, 5, 155, 0, 0, 739, 740, 3, 94, 47, 0, 740, 741, 5, 175, 0, 0, 741, 743, 1, 0, 0, 0, 742, 730, 1, 0, 0, 0, 742, 738, 1, 0, 0, 0, 743, 791, 1, 0, 0, 0, 744, 745, 10, 5, 0, 0, 745, 746, 3, 98, 49, 0, 746, 747, 3, 94, 47, 6, 747, 790, 1, 0, 0, 0, 748, 750, 10, 7, 0, 0, 749, 751, 5, 69, 0, 0, 750, 749, 1, 0, 0, 0, 750, 751, 1, 0, 0, 0, 751, 753, 1, 0, 0, 0, 752, 754, 3, 96, 48, 0, 753, 752, 1, 0, 0, 0, 753, 754, 1, 0, 0, 0, 754, 755, 1, 0, 0, 0, 755, 756, 5, 56, 0, 0, 756, 758, 3, 94, 47, 0, 757, 759, 3, 100, 50, 0, 758, 757, 1, 0, 0, 0, 758, 759, 1, 0, 0, 0, 759, 790, 1, 0, 0, 0, 760, 761, 10, 6, 0, 0, 761, 762, 5, 82, 0, 0, 762, 763, 5, 56, 0, 0, 763, 765, 3, 94, 47, 0, 764, 766, 3, 100, 50, 0, 765, 764, 1, 0, 0, 0, 765, 766, 1, 0, 0, 0, 766, 790, 1, 0, 0, 0, 767, 768, 10, 4, 0, 0, 768, 769, 5, 81, 0, 0, 769, 770, 5, 155, 0, 0, 770, 771, 3, 136, 68, 0, 771, 775, 3, 170, 85, 0, 772, 773, 5, 41, 0, 0, 773, 774, 5, 11, 0, 0, 774, 776, 3, 136, 68, 0, 775, 772, 1, 0, 0, 0, 775, 776, 1, 0, 0, 0, 776, 777, 1, 0, 0, 0, 777, 778, 5, 175, 0, 0, 778, 790, 1, 0, 0, 0, 779, 780, 10, 3, 0, 0, 780, 783, 5, 116, 0, 0, 781, 782, 5, 49, 0, 0, 782, 784, 5, 73, 0, 0, 783, 781, 1, 0, 0, 0, 783, 784, 1, 0, 0, 0, 784, 785, 1, 0, 0, 0, 785, 786, 5, 155, 0, 0, 786, 787, 3, 174, 87, 0, 787, 788, 5, 175, 0, 0, 788, 790, 1, 0, 0, 0, 789, 744, 1, 0, 0, 0, 789, 748, 1, 0, 0, 0, 789, 760, 1, 0, 0, 0, 789, 767, 1, 0, 0, 0, 789, 779, 1, 0, 0, 0, 790, 793, 1, 0, 0, 0, 791, 789, 1, 0, 0, 0, 791, 792, 1, 0, 0, 0, 792, 95, 1, 0, 0, 0, 793, 791, 1, 0, 0, 0, 794, 796, 7, 3, 0, 0, 795, 794, 1, 0, 0, 0, 795, 796, 1, 0, 0, 0, 796, 797, 1, 0, 0, 0, 797, 808, 5, 52, 0, 0, 798, 800, 5, 52, 0, 0, 799, 801, 7, 3, 0, 0, 800, 799, 1, 0, 0, 0, 800, 801, 1, 0, 0, 0, 801, 808, 1, 0, 0, 0, 802, 808, 7, 3, 0, 0, 803, 808, 5, 3, 0, 0, 804, 808, 5, 98, 0, 0, 805, 806, 5, 8, 0, 0, 806, 808, 7, 4, 0, 0, 807, 795, 1, 0, 0, 0, 807, 798, 1, 0, 0, 0, 807, 802, 1, 0, 0, 0, 807, 803, 1, 0, 0, 0, 807, 804, 1, 0, 0, 0, 807, 805, 1, 0, 0, 0, 808, 848, 1, 0, 0, 0, 809, 811, 7, 5, 0, 0, 810, 809, 1, 0, 0, 0, 810, 811, 1, 0, 0, 0, 811, 812, 1, 0, 0, 0, 812, 814, 7, 6, 0, 0, 813, 815, 5, 78, 0, 0, 814, 813, 1, 0, 0, 0, 814, 815, 1, 0, 0, 0, 815, 830, 1, 0, 0, 0, 816, 818, 7, 6, 0, 0, 817, 819, 5, 78, 0, 0, 818, 817, 1, 0, 0, 0, 818, 819, 1, 0, 0, 0, 819, 821, 1, 0, 0, 0, 820, 822, 7, 5, 0, 0, 821, 820, 1, 0, 0, 0, 821, 822, 1, 0, 0, 0, 822, 830, 1, 0, 0, 0, 823, 824, 5, 8, 0, 0, 824, 825, 7, 4, 0, 0, 825, 827, 7, 6, 0, 0, 826, 828, 5, 78, 0, 0, 827, 826, 1, 0, 0, 0, 827, 828, 1, 0, 0, 0, 828, 830, 1, 0, 0, 0, 829, 810, 1, 0, 0, 0, 829, 816, 1, 0, 0, 0, 829, 823, 1, 0, 0, 0, 830, 848, 1, 0, 0, 0, 831, 833, 7, 3, 0, 0, 832, 831, 1, 0, 0, 0, 832, 833, 1, 0, 0, 0, 833, 834, 1, 0, 0, 0, 834, 836, 5, 39, 0, 0, 835, 837, 5, 78, 0, 0, 836, 835, 1, 0, 0, 0, 836, 837, 1, 0, 0, 0, 837, 846, 1, 0, 0, 0, 838, 840, 5, 39, 0, 0, 839, 841, 5, 78, 0, 0, 840, 839, 1, 0, 0, 0, 840, 841, 1, 0, 0, 0, 841, 843, 1, 0, 0, 0, 842, 844, 7, 3, 0, 0, 843, 842, 1, 0, 0, 0, 843, 844, 1, 0, 0, 0, 844, 846, 1, 0, 0, 0, 845, 832, 1, 0, 0, 0, 845, 838, 1, 0, 0, 0, 846, 848, 1, 0, 0, 0, 847, 807, 1, 0, 0, 0, 847, 829, 1, 0, 0, 0, 847, 845, 1, 0, 0, 0, 848, 97, 1, 0, 0, 0, 849, 850, 5, 18, 0, 0, 850, 853, 5, 56, 0, 0, 851, 853, 5, 141, 0, 0, 852, 849, 1, 0, 0, 0, 852, 851, 1, 0, 0, 0, 853, 99, 1, 0, 0, 0, 854, 855, 5, 75, 0, 0, 855, 864, 3, 136, 68, 0, 856, 857, 5, 117, 0, 0, 857, 858, 5, 155, 0, 0, 858, 859, 3, 136, 68, 0, 859, 860, 5, 175, 0, 0, 860, 864, 1, 0, 0, 0, 861, 862, 5, 117, 0, 0, 862, 864, 3, 136, 68, 0, 863, 854, 1, 0, 0, 0, 863, 856, 1, 0, 0, 0, 863, 861, 1, 0, 0, 0, 864, 101, 1, 0, 0, 0, 865, 866, 5, 95, 0, 0, 866, 868, 3, 110, 55, 0, 867, 869, 5, 164, 0, 0, 868, 867, 1, 0, 0, 0, 868, 869, 1, 0, 0, 0, 869, 872, 1, 0, 0, 0, 870, 871, 5, 74, 0, 0, 871, 873, 3, 110, 55, 0, 872, 870, 1, 0, 0, 0, 872, 873, 1, 0, 0, 0, 873, 878, 1, 0, 0, 0, 874, 875, 5, 155, 0, 0, 875, 876, 3, 204, 102, 0, 876, 877, 5, 175, 0, 0, 877, 879, 1, 0, 0, 0, 878, 874, 1, 0, 0, 0, 878, 879, 1, 0, 0, 0, 879, 103, 1, 0, 0, 0, 880, 883, 3, 142, 71, 0, 881, 882, 7, 7, 0, 0, 882, 884, 3, 142, 71, 0, 883, 881, 1, 0, 0, 0, 883, 884, 1, 0, 0, 0, 884, 105, 1, 0, 0, 0, 885, 890, 3, 108, 54, 0, 886, 887, 5, 141, 0, 0, 887, 889, 3, 108, 54, 0, 888, 886, 1, 0, 0, 0, 889, 892, 1, 0, 0, 0, 890, 888, 1, 0, 0, 0, 890, 891, 1, 0, 0, 0, 891, 107, 1, 0, 0, 0, 892, 890, 1, 0, 0, 0, 893, 895, 3, 142, 71, 0, 894, 896, 7, 8, 0, 0, 895, 894, 1, 0, 0, 0, 895, 896, 1, 0, 0, 0, 896, 899, 1, 0, 0, 0, 897, 898, 5, 73, 0, 0, 898, 900, 7, 9, 0, 0, 899, 897, 1, 0, 0, 0, 899, 900, 1, 0, 0, 0, 900, 903, 1, 0, 0, 0, 901, 902, 5, 16, 0, 0, 902, 904, 5, 133, 0, 0, 903, 901, 1, 0, 0, 0, 903, 904, 1, 0, 0, 0, 904, 109, 1, 0, 0, 0, 905, 912, 3, 208, 104, 0, 906, 909, 3, 192, 96, 0, 907, 908, 5, 177, 0, 0, 908, 910, 3, 192, 96, 0, 909, 907, 1, 0, 0, 0, 909, 910, 1, 0, 0, 0, 910, 912, 1, 0, 0, 0, 911, 905, 1, 0, 0, 0, 911, 906, 1, 0, 0, 0, 912, 111, 1, 0, 0, 0, 913, 918, 3, 114, 57, 0, 914, 915, 5, 141, 0, 0, 915, 917, 3, 114, 57, 0, 916, 914, 1, 0, 0, 0, 917, 920, 1, 0, 0, 0, 918, 916, 1, 0, 0, 0, 918, 919, 1, 0, 0, 0, 919, 113, 1, 0, 0, 0, 920, 918, 1, 0, 0, 0, 921, 922, 3, 204, 102, 0, 922, 923, 5, 147, 0, 0, 923, 924, 3, 194, 97, 0, 924, 115, 1, 0, 0, 0, 925, 927, 3, 118, 59, 0, 926, 925, 1, 0, 0, 0, 926, 927, 1, 0, 0, 0, 927, 929, 1, 0, 0, 0, 928, 930, 3, 120, 60, 0, 929, 928, 1, 0, 0, 0, 929, 930, 1, 0, 0, 0, 930, 932, 1, 0, 0, 0, 931, 933, 3, 124, 62, 0, 932, 931, 1, 0, 0, 0, 932, 933, 1, 0, 0, 0, 933, 117, 1, 0, 0, 0, 934, 935, 5, 80, 0, 0, 935, 936, 5, 11, 0, 0, 936, 937, 3, 136, 68, 0, 937, 119, 1, 0, 0, 0, 938, 939, 5, 77, 0, 0, 939, 940, 5, 11, 0, 0, 940, 941, 3, 106, 53, 0, 941, 121, 1, 0, 0, 0, 942, 943, 5, 125, 0, 0, 943, 944, 5, 41, 0, 0, 944, 945, 5, 155, 0, 0, 945, 946, 3, 78, 39, 0, 946, 947, 5, 175, 0, 0, 947, 123, 1, 0, 0, 0, 948, 949, 7, 10, 0, 0, 949, 950, 3, 126, 63, 0, 950, 125, 1, 0, 0, 0, 951, 958, 3, 128, 64, 0, 952, 953, 5, 9, 0, 0, 953, 954, 3, 128, 64, 0, 954, 955, 5, 2, 0, 0, 955, 956, 3, 128, 64, 0, 956, 958, 1, 0, 0, 0, 957, 951, 1, 0, 0, 0, 957, 952, 1, 0, 0, 0, 958, 127, 1, 0, 0, 0, 959, 960, 5, 20, 0, 0, 960, 972, 5, 93, 0, 0, 961, 962, 5, 114, 0, 0, 962, 972, 5, 83, 0, 0, 963, 964, 5, 114, 0, 0, 964, 972, 5, 36, 0, 0, 965, 966, 3, 142, 71, 0, 966, 967, 5, 83, 0, 0, 967, 972, 1, 0, 0, 0, 968, 969, 3, 142, 71, 0, 969, 970, 5, 36, 0, 0, 970, 972, 1, 0, 0, 0, 971, 959, 1, 0, 0, 0, 971, 961, 1, 0, 0, 0, 971, 963, 1, 0, 0, 0, 971, 965, 1, 0, 0, 0, 971, 968, 1, 0, 0, 0, 972, 129, 1, 0, 0, 0, 973, 974, 3, 142, 71, 0, 974, 975, 5, 0, 0, 1, 975, 131, 1, 0, 0, 0, 976, 977, 6, 66, -1, 0, 977, 978, 3, 204, 102, 0, 978, 979, 5, 155, 0, 0, 979, 980, 3, 204, 102, 0, 980, 987, 3, 132, 66, 0, 981, 982, 5, 141, 0, 0, 982, 983, 3, 204, 102, 0, 983, 984, 3, 132, 66, 0, 984, 986, 1, 0, 0, 0, 985, 981, 1, 0, 0, 0, 986, 989, 1, 0, 0, 0, 987, 985, 1, 0, 0, 0, 987, 988, 1, 0, 0, 0, 988, 991, 1, 0, 0, 0, 989, 987, 1, 0, 0, 0, 990, 992, 5, 141, 0, 0, 991, 990, 1, 0, 0, 0, 991, 992, 1, 0, 0, 0, 992, 993, 1, 0, 0, 0, 993, 994, 5, 175, 0, 0, 994, 1040, 1, 0, 0, 0, 995, 996, 3, 204, 102, 0, 996, 997, 5, 155, 0, 0, 997, 1002, 3, 206, 103, 0, 998, 999, 5, 141, 0, 0, 999, 1001, 3, 206, 103, 0, 1000, 998, 1, 0, 0, 0, 1001, 1004, 1, 0, 0, 0, 1002, 1000, 1, 0, 0, 0, 1002, 1003, 1, 0, 0, 0, 1003, 1006, 1, 0, 0, 0, 1004, 1002, 1, 0, 0, 0, 1005, 1007, 5, 141, 0, 0, 1006, 1005, 1, 0, 0, 0, 1006, 1007, 1, 0, 0, 0, 1007, 1008, 1, 0, 0, 0, 1008, 1009, 5, 175, 0, 0, 1009, 1040, 1, 0, 0, 0, 1010, 1011, 3, 204, 102, 0, 1011, 1012, 5, 155, 0, 0, 1012, 1017, 3, 132, 66, 0, 1013, 1014, 5, 141, 0, 0, 1014, 1016, 3, 132, 66, 0, 1015, 1013, 1, 0, 0, 0, 1016, 1019, 1, 0, 0, 0, 1017, 1015, 1, 0, 0, 0, 1017, 1018, 1, 0, 0, 0, 1018, 1021, 1, 0, 0, 0, 1019, 1017, 1, 0, 0, 0, 1020, 1022, 5, 141, 0, 0, 1021, 1020, 1, 0, 0, 0, 1021, 1022, 1, 0, 0, 0, 1022, 1023, 1, 0, 0, 0, 1023, 1024, 5, 175, 0, 0, 1024, 1040, 1, 0, 0, 0, 1025, 1026, 3, 204, 102, 0, 1026, 1028, 5, 155, 0, 0, 1027, 1029, 3, 136, 68, 0, 1028, 1027, 1, 0, 0, 0, 1028, 1029, 1, 0, 0, 0, 1029, 1030, 1, 0, 0, 0, 1030, 1031, 5, 175, 0, 0, 1031, 1040, 1, 0, 0, 0, 1032, 1034, 3, 204, 102, 0, 1033, 1035, 3, 204, 102, 0, 1034, 1033, 1, 0, 0, 0, 1035, 1036, 1, 0, 0, 0, 1036, 1034, 1, 0, 0, 0, 1036, 1037, 1, 0, 0, 0, 1037, 1040, 1, 0, 0, 0, 1038, 1040, 3, 204, 102, 0, 1039, 976, 1, 0, 0, 0, 1039, 995, 1, 0, 0, 0, 1039, 1010, 1, 0, 0, 0, 1039, 1025, 1, 0, 0, 0, 1039, 1032, 1, 0, 0, 0, 1039, 1038, 1, 0, 0, 0, 1040, 1049, 1, 0, 0, 0, 1041, 1042, 10, 7, 0, 0, 1042, 1044, 5, 154, 0, 0, 1043, 1045, 5, 131, 0, 0, 1044, 1043, 1, 0, 0, 0, 1044, 1045, 1, 0, 0, 0, 1045, 1046, 1, 0, 0, 0, 1046, 1048, 5, 174, 0, 0, 1047, 1041, 1, 0, 0, 0, 1048, 1051, 1, 0, 0, 0, 1049, 1047, 1, 0, 0, 0, 1049, 1050, 1, 0, 0, 0, 1050, 133, 1, 0, 0, 0, 1051, 1049, 1, 0, 0, 0, 1052, 1054, 3, 204, 102, 0, 1053, 1055, 3, 204, 102, 0, 1054, 1053, 1, 0, 0, 0, 1055, 1056, 1, 0, 0, 0, 1056, 1054, 1, 0, 0, 0, 1056, 1057, 1, 0, 0, 0, 1057, 1060, 1, 0, 0, 0, 1058, 1060, 3, 204, 102, 0, 1059, 1052, 1, 0, 0, 0, 1059, 1058, 1, 0, 0, 0, 1060, 135, 1, 0, 0, 0, 1061, 1066, 3, 142, 71, 0, 1062, 1063, 5, 141, 0, 0, 1063, 1065, 3, 142, 71, 0, 1064, 1062, 1, 0, 0, 0, 1065, 1068, 1, 0, 0, 0, 1066, 1064, 1, 0, 0, 0, 1066, 1067, 1, 0, 0, 0, 1067, 1070, 1, 0, 0, 0, 1068, 1066, 1, 0, 0, 0, 1069, 1071, 5, 141, 0, 0, 1070, 1069, 1, 0, 0, 0, 1070, 1071, 1, 0, 0, 0, 1071, 137, 1, 0, 0, 0, 1072, 1077, 3, 140, 70, 0, 1073, 1074, 5, 141, 0, 0, 1074, 1076, 3, 140, 70, 0, 1075, 1073, 1, 0, 0, 0, 1076, 1079, 1, 0, 0, 0, 1077, 1075, 1, 0, 0, 0, 1077, 1078, 1, 0, 0, 0, 1078, 1081, 1, 0, 0, 0, 1079, 1077, 1, 0, 0, 0, 1080, 1082, 5, 141, 0, 0, 1081, 1080, 1, 0, 0, 0, 1081, 1082, 1, 0, 0, 0, 1082, 139, 1, 0, 0, 0, 1083, 1084, 3, 204, 102, 0, 1084, 1085, 5, 140, 0, 0, 1085, 1086, 3, 142, 71, 0, 1086, 1089, 1, 0, 0, 0, 1087, 1089, 3, 142, 71, 0, 1088, 1083, 1, 0, 0, 0, 1088, 1087, 1, 0, 0, 0, 1089, 141, 1, 0, 0, 0, 1090, 1091, 6, 71, -1, 0, 1091, 1093, 5, 12, 0, 0, 1092, 1094, 3, 142, 71, 0, 1093, 1092, 1, 0, 0, 0, 1093, 1094, 1, 0, 0, 0, 1094, 1100, 1, 0, 0, 0, 1095, 1096, 5, 120, 0, 0, 1096, 1097, 3, 142, 71, 0, 1097, 1098, 5, 102, 0, 0, 1098, 1099, 3, 142, 71, 0, 1099, 1101, 1, 0, 0, 0, 1100, 1095, 1, 0, 0, 0, 1101, 1102, 1, 0, 0, 0, 1102, 1100, 1, 0, 0, 0, 1102, 1103, 1, 0, 0, 0, 1103, 1106, 1, 0, 0, 0, 1104, 1105, 5, 26, 0, 0, 1105, 1107, 3, 142, 71, 0, 1106, 1104, 1, 0, 0, 0, 1106, 1107, 1, 0, 0, 0, 1107, 1108, 1, 0, 0, 0, 1108, 1109, 5, 27, 0, 0, 1109, 1440, 1, 0, 0, 0, 1110, 1111, 5, 13, 0, 0, 1111, 1112, 5, 155, 0, 0, 1112, 1113, 3, 142, 71, 0, 1113, 1114, 5, 6, 0, 0, 1114, 1115, 3, 132, 66, 0, 1115, 1116, 5, 175, 0, 0, 1116, 1440, 1, 0, 0, 0, 1117, 1118, 5, 113, 0, 0, 1118, 1119, 5, 155, 0, 0, 1119, 1120, 3, 142, 71, 0, 1120, 1121, 5, 6, 0, 0, 1121, 1122, 3, 132, 66, 0, 1122, 1123, 5, 175, 0, 0, 1123, 1440, 1, 0, 0, 0, 1124, 1125, 5, 21, 0, 0, 1125, 1440, 5, 133, 0, 0, 1126, 1127, 5, 54, 0, 0, 1127, 1440, 5, 133, 0, 0, 1128, 1129, 5, 54, 0, 0, 1129, 1130, 3, 142, 71, 0, 1130, 1131, 3, 196, 98, 0, 1131, 1440, 1, 0, 0, 0, 1132, 1133, 5, 101, 0, 0, 1133, 1134, 5, 155, 0, 0, 1134, 1135, 3, 142, 71, 0, 1135, 1136, 5, 38, 0, 0, 1136, 1139, 3, 142, 71, 0, 1137, 1138, 5, 37, 0, 0, 1138, 1140, 3, 142, 71, 0, 1139, 1137, 1, 0, 0, 0, 1139, 1140, 1, 0, 0, 0, 1140, 1141, 1, 0, 0, 0, 1141, 1142, 5, 175, 0, 0, 1142, 1440, 1, 0, 0, 0, 1143, 1144, 5, 105, 0, 0, 1144, 1440, 5, 133, 0, 0, 1145, 1146, 5, 110, 0, 0, 1146, 1147, 5, 155, 0, 0, 1147, 1148, 7, 11, 0, 0, 1148, 1149, 3, 210, 105, 0, 1149, 1150, 5, 38, 0, 0, 1150, 1151, 3, 142, 71, 0, 1151, 1152, 5, 175, 0, 0, 1152, 1440, 1, 0, 0, 0, 1153, 1154, 5, 17, 0, 0, 1154, 1155, 5, 155, 0, 0, 1155, 1156, 5, 133, 0, 0, 1156, 1440, 5, 175, 0, 0, 1157, 1158, 5, 17, 0, 0, 1158, 1159, 5, 155, 0, 0, 1159, 1160, 3, 136, 68, 0, 1160, 1161, 5, 175, 0, 0, 1161, 1440, 1, 0, 0, 0, 1162, 1163, 5, 17, 0, 0, 1163, 1164, 5, 155, 0, 0, 1164, 1165, 5, 135, 0, 0, 1165, 1166, 5, 29, 0, 0, 1166, 1167, 5, 155, 0, 0, 1167, 1168, 3, 8, 4, 0, 1168, 1169, 5, 175, 0, 0, 1169, 1170, 5, 89, 0, 0, 1170, 1171, 5, 155, 0, 0, 1171, 1172, 3, 146, 73, 0, 1172, 1173, 5, 175, 0, 0, 1173, 1174, 5, 175, 0, 0, 1174, 1188, 1, 0, 0, 0, 1175, 1176, 5, 155, 0, 0, 1176, 1177, 5, 135, 0, 0, 1177, 1178, 5, 29, 0, 0, 1178, 1179, 5, 155, 0, 0, 1179, 1180, 3, 8, 4, 0, 1180, 1181, 5, 175, 0, 0, 1181, 1182, 5, 89, 0, 0, 1182, 1183, 5, 155, 0, 0, 1183, 1184, 3, 146, 73, 0, 1184, 1185, 5, 175, 0, 0, 1185, 1186, 5, 175, 0, 0, 1186, 1188, 1, 0, 0, 0, 1187, 1162, 1, 0, 0, 0, 1187, 1175, 1, 0, 0, 0, 1188, 1440, 1, 0, 0, 0, 1189, 1190, 5, 17, 0, 0, 1190, 1191, 5, 155, 0, 0, 1191, 1192, 5, 135, 0, 0, 1192, 1193, 5, 29, 0, 0, 1193, 1194, 5, 155, 0, 0, 1194, 1195, 3, 8, 4, 0, 1195, 1196, 5, 175, 0, 0, 1196, 1197, 5, 175, 0, 0, 1197, 1440, 1, 0, 0, 0, 1198, 1199, 5, 17, 0, 0, 1199, 1200, 5, 155, 0, 0, 1200, 1201, 5, 135, 0, 0, 1201, 1202, 5, 89, 0, 0, 1202, 1203, 5, 155, 0, 0, 1203, 1204, 3, 146, 73, 0, 1204, 1205, 5, 175, 0, 0, 1205, 1206, 5, 175, 0, 0, 1206, 1216, 1, 0, 0, 0, 1207, 1208, 5, 155, 0, 0, 1208, 1209, 5, 135, 0, 0, 1209, 1210, 5, 89, 0, 0, 1210, 1211, 5, 155, 0, 0, 1211, 1212, 3, 146, 73, 0, 1212, 1213, 5, 175, 0, 0, 1213, 1214, 5, 175, 0, 0, 1214, 1216, 1, 0, 0, 0, 1215, 1198, 1, 0, 0, 0, 1215, 1207, 1, 0, 0, 0, 1216, 1440, 1, 0, 0, 0, 1217, 1218, 5, 17, 0, 0, 1218, 1219, 5, 155, 0, 0, 1219, 1220, 5, 135, 0, 0, 1220, 1440, 5, 175, 0, 0, 1221, 1222, 5, 17, 0, 0, 1222, 1223, 5, 155, 0, 0, 1223, 1224, 3, 204, 102, 0, 1224, 1225, 5, 145, 0, 0, 1225, 1226, 5, 135, 0, 0, 1226, 1227, 5, 29, 0, 0, 1227, 1228, 5, 155, 0, 0, 1228, 1229, 3, 8, 4, 0, 1229, 1230, 5, 175, 0, 0, 1230, 1231, 5, 89, 0, 0, 1231, 1232, 5, 155, 0, 0, 1232, 1233, 3, 146, 73, 0, 1233, 1234, 5, 175, 0, 0, 1234, 1235, 5, 175, 0, 0, 1235, 1440, 1, 0, 0, 0, 1236, 1237, 5, 17, 0, 0, 1237, 1238, 5, 155, 0, 0, 1238, 1239, 3, 204, 102, 0, 1239, 1240, 5, 145, 0, 0, 1240, 1241, 5, 135, 0, 0, 1241, 1242, 5, 29, 0, 0, 1242, 1243, 5, 155, 0, 0, 1243, 1244, 3, 8, 4, 0, 1244, 1245, 5, 175, 0, 0, 1245, 1246, 5, 175, 0, 0, 1246, 1440, 1, 0, 0, 0, 1247, 1248, 5, 17, 0, 0, 1248, 1249, 5, 155, 0, 0, 1249, 1250, 3, 204, 102, 0, 1250, 1251, 5, 145, 0, 0, 1251, 1252, 5, 135, 0, 0, 1252, 1253, 5, 89, 0, 0, 1253, 1254, 5, 155, 0, 0, 1254, 1255, 3, 146, 73, 0, 1255, 1256, 5, 175, 0, 0, 1256, 1257, 5, 175, 0, 0, 1257, 1440, 1, 0, 0, 0, 1258, 1259, 5, 17, 0, 0, 1259, 1260, 5, 155, 0, 0, 1260, 1261, 3, 204, 102, 0, 1261, 1262, 5, 145, 0, 0, 1262, 1263, 5, 135, 0, 0, 1263, 1264, 5, 175, 0, 0, 1264, 1440, 1, 0, 0, 0, 1265, 1266, 5, 135, 0, 0, 1266, 1267, 5, 17, 0, 0, 1267, 1268, 5, 155, 0, 0, 1268, 1269, 5, 133, 0, 0, 1269, 1440, 5, 175, 0, 0, 1270, 1271, 5, 135, 0, 0, 1271, 1272, 5, 17, 0, 0, 1272, 1273, 5, 155, 0, 0, 1273, 1274, 3, 136, 68, 0, 1274, 1275, 5, 175, 0, 0, 1275, 1440, 1, 0, 0, 0, 1276, 1277, 3, 204, 102, 0, 1277, 1279, 5, 155, 0, 0, 1278, 1280, 3, 136, 68, 0, 1279, 1278, 1, 0, 0, 0, 1279, 1280, 1, 0, 0, 0, 1280, 1281, 1, 0, 0, 0, 1281, 1282, 5, 175, 0, 0, 1282, 1283, 3, 122, 61, 0, 1283, 1440, 1, 0, 0, 0, 1284, 1285, 3, 204, 102, 0, 1285, 1287, 5, 155, 0, 0, 1286, 1288, 3, 136, 68, 0, 1287, 1286, 1, 0, 0, 0, 1287, 1288, 1, 0, 0, 0, 1288, 1289, 1, 0, 0, 0, 1289, 1290, 5, 175, 0, 0, 1290, 1299, 1, 0, 0, 0, 1291, 1293, 5, 155, 0, 0, 1292, 1294, 5, 25, 0, 0, 1293, 1292, 1, 0, 0, 0, 1293, 1294, 1, 0, 0, 0, 1294, 1296, 1, 0, 0, 0, 1295, 1297, 3, 136, 68, 0, 1296, 1295, 1, 0, 0, 0, 1296, 1297, 1, 0, 0, 0, 1297, 1298, 1, 0, 0, 0, 1298, 1300, 5, 175, 0, 0, 1299, 1291, 1, 0, 0, 0, 1299, 1300, 1, 0, 0, 0, 1300, 1307, 1, 0, 0, 0, 1301, 1302, 5, 32, 0, 0, 1302, 1303, 5, 155, 0, 0, 1303, 1304, 5, 121, 0, 0, 1304, 1305, 3, 142, 71, 0, 1305, 1306, 5, 175, 0, 0, 1306, 1308, 1, 0, 0, 0, 1307, 1301, 1, 0, 0, 0, 1307, 1308, 1, 0, 0, 0, 1308, 1309, 1, 0, 0, 0, 1309, 1310, 5, 79, 0, 0, 1310, 1311, 5, 155, 0, 0, 1311, 1312, 3, 116, 58, 0, 1312, 1313, 5, 175, 0, 0, 1313, 1440, 1, 0, 0, 0, 1314, 1315, 3, 204, 102, 0, 1315, 1317, 5, 155, 0, 0, 1316, 1318, 3, 136, 68, 0, 1317, 1316, 1, 0, 0, 0, 1317, 1318, 1, 0, 0, 0, 1318, 1319, 1, 0, 0, 0, 1319, 1320, 5, 175, 0, 0, 1320, 1329, 1, 0, 0, 0, 1321, 1323, 5, 155, 0, 0, 1322, 1324, 5, 25, 0, 0, 1323, 1322, 1, 0, 0, 0, 1323, 1324, 1, 0, 0, 0, 1324, 1326, 1, 0, 0, 0, 1325, 1327, 3, 136, 68, 0, 1326, 1325, 1, 0, 0, 0, 1326, 1327, 1, 0, 0, 0, 1327, 1328, 1, 0, 0, 0, 1328, 1330, 5, 175, 0, 0, 1329, 1321, 1, 0, 0, 0, 1329, 1330, 1, 0, 0, 0, 1330, 1337, 1, 0, 0, 0, 1331, 1332, 5, 32, 0, 0, 1332, 1333, 5, 155, 0, 0, 1333, 1334, 5, 121, 0, 0, 1334, 1335, 3, 142, 71, 0, 1335, 1336, 5, 175, 0, 0, 1336, 1338, 1, 0, 0, 0, 1337, 1331, 1, 0, 0, 0, 1337, 1338, 1, 0, 0, 0, 1338, 1339, 1, 0, 0, 0, 1339, 1340, 5, 79, 0, 0, 1340, 1341, 3, 204, 102, 0, 1341, 1440, 1, 0, 0, 0, 1342, 1348, 3, 204, 102, 0, 1343, 1345, 5, 155, 0, 0, 1344, 1346, 3, 136, 68, 0, 1345, 1344, 1, 0, 0, 0, 1345, 1346, 1, 0, 0, 0, 1346, 1347, 1, 0, 0, 0, 1347, 1349, 5, 175, 0, 0, 1348, 1343, 1, 0, 0, 0, 1348, 1349, 1, 0, 0, 0, 1349, 1350, 1, 0, 0, 0, 1350, 1352, 5, 155, 0, 0, 1351, 1353, 5, 25, 0, 0, 1352, 1351, 1, 0, 0, 0, 1352, 1353, 1, 0, 0, 0, 1353, 1355, 1, 0, 0, 0, 1354, 1356, 3, 136, 68, 0, 1355, 1354, 1, 0, 0, 0, 1355, 1356, 1, 0, 0, 0, 1356, 1360, 1, 0, 0, 0, 1357, 1358, 5, 77, 0, 0, 1358, 1359, 5, 11, 0, 0, 1359, 1361, 3, 106, 53, 0, 1360, 1357, 1, 0, 0, 0, 1360, 1361, 1, 0, 0, 0, 1361, 1362, 1, 0, 0, 0, 1362, 1369, 5, 175, 0, 0, 1363, 1364, 5, 32, 0, 0, 1364, 1365, 5, 155, 0, 0, 1365, 1366, 5, 121, 0, 0, 1366, 1367, 3, 142, 71, 0, 1367, 1368, 5, 175, 0, 0, 1368, 1370, 1, 0, 0, 0, 1369, 1363, 1, 0, 0, 0, 1369, 1370, 1, 0, 0, 0, 1370, 1440, 1, 0, 0, 0, 1371, 1440, 3, 154, 77, 0, 1372, 1440, 3, 212, 106, 0, 1373, 1440, 3, 194, 97, 0, 1374, 1375, 5, 143, 0, 0, 1375, 1440, 3, 142, 71, 25, 1376, 1377, 5, 71, 0, 0, 1377, 1440, 3, 142, 71, 17, 1378, 1379, 3, 184, 92, 0, 1379, 1380, 5, 145, 0, 0, 1380, 1382, 1, 0, 0, 0, 1381, 1378, 1, 0, 0, 0, 1381, 1382, 1, 0, 0, 0, 1382, 1383, 1, 0, 0, 0, 1383, 1389, 5, 135, 0, 0, 1384, 1385, 5, 29, 0, 0, 1385, 1386, 5, 155, 0, 0, 1386, 1387, 3, 8, 4, 0, 1387, 1388, 5, 175, 0, 0, 1388, 1390, 1, 0, 0, 0, 1389, 1384, 1, 0, 0, 0, 1389, 1390, 1, 0, 0, 0, 1390, 1440, 1, 0, 0, 0, 1391, 1392, 5, 58, 0, 0, 1392, 1397, 3, 204, 102, 0, 1393, 1394, 5, 141, 0, 0, 1394, 1396, 3, 204, 102, 0, 1395, 1393, 1, 0, 0, 0, 1396, 1399, 1, 0, 0, 0, 1397, 1395, 1, 0, 0, 0, 1397, 1398, 1, 0, 0, 0, 1398, 1401, 1, 0, 0, 0, 1399, 1397, 1, 0, 0, 0, 1400, 1402, 5, 141, 0, 0, 1401, 1400, 1, 0, 0, 0, 1401, 1402, 1, 0, 0, 0, 1402, 1403, 1, 0, 0, 0, 1403, 1404, 5, 140, 0, 0, 1404, 1405, 3, 142, 71, 10, 1405, 1440, 1, 0, 0, 0, 1406, 1407, 5, 155, 0, 0, 1407, 1408, 3, 48, 24, 0, 1408, 1409, 5, 175, 0, 0, 1409, 1440, 1, 0, 0, 0, 1410, 1411, 5, 155, 0, 0, 1411, 1412, 3, 142, 71, 0, 1412, 1413, 5, 175, 0, 0, 1413, 1440, 1, 0, 0, 0, 1414, 1415, 5, 155, 0, 0, 1415, 1416, 3, 136, 68, 0, 1416, 1417, 5, 175, 0, 0, 1417, 1440, 1, 0, 0, 0, 1418, 1420, 5, 5, 0, 0, 1419, 1418, 1, 0, 0, 0, 1419, 1420, 1, 0, 0, 0, 1420, 1421, 1, 0, 0, 0, 1421, 1423, 5, 154, 0, 0, 1422, 1424, 3, 136, 68, 0, 1423, 1422, 1, 0, 0, 0, 1423, 1424, 1, 0, 0, 0, 1424, 1425, 1, 0, 0, 0, 1425, 1440, 5, 174, 0, 0, 1426, 1428, 5, 153, 0, 0, 1427, 1429, 3, 40, 20, 0, 1428, 1427, 1, 0, 0, 0, 1428, 1429, 1, 0, 0, 0, 1429, 1430, 1, 0, 0, 0, 1430, 1440, 5, 173, 0, 0, 1431, 1440, 3, 144, 72, 0, 1432, 1433, 3, 204, 102, 0, 1433, 1434, 5, 139, 0, 0, 1434, 1435, 3, 142, 71, 3, 1435, 1440, 1, 0, 0, 0, 1436, 1437, 5, 150, 0, 0, 1437, 1440, 5, 131, 0, 0, 1438, 1440, 3, 164, 82, 0, 1439, 1090, 1, 0, 0, 0, 1439, 1110, 1, 0, 0, 0, 1439, 1117, 1, 0, 0, 0, 1439, 1124, 1, 0, 0, 0, 1439, 1126, 1, 0, 0, 0, 1439, 1128, 1, 0, 0, 0, 1439, 1132, 1, 0, 0, 0, 1439, 1143, 1, 0, 0, 0, 1439, 1145, 1, 0, 0, 0, 1439, 1153, 1, 0, 0, 0, 1439, 1157, 1, 0, 0, 0, 1439, 1187, 1, 0, 0, 0, 1439, 1189, 1, 0, 0, 0, 1439, 1215, 1, 0, 0, 0, 1439, 1217, 1, 0, 0, 0, 1439, 1221, 1, 0, 0, 0, 1439, 1236, 1, 0, 0, 0, 1439, 1247, 1, 0, 0, 0, 1439, 1258, 1, 0, 0, 0, 1439, 1265, 1, 0, 0, 0, 1439, 1270, 1, 0, 0, 0, 1439, 1276, 1, 0, 0, 0, 1439, 1284, 1, 0, 0, 0, 1439, 1314, 1, 0, 0, 0, 1439, 1342, 1, 0, 0, 0, 1439, 1371, 1, 0, 0, 0, 1439, 1372, 1, 0, 0, 0, 1439, 1373, 1, 0, 0, 0, 1439, 1374, 1, 0, 0, 0, 1439, 1376, 1, 0, 0, 0, 1439, 1381, 1, 0, 0, 0, 1439, 1391, 1, 0, 0, 0, 1439, 1406, 1, 0, 0, 0, 1439, 1410, 1, 0, 0, 0, 1439, 1414, 1, 0, 0, 0, 1439, 1419, 1, 0, 0, 0, 1439, 1426, 1, 0, 0, 0, 1439, 1431, 1, 0, 0, 0, 1439, 1432, 1, 0, 0, 0, 1439, 1436, 1, 0, 0, 0, 1439, 1438, 1, 0, 0, 0, 1440, 1580, 1, 0, 0, 0, 1441, 1445, 10, 24, 0, 0, 1442, 1446, 5, 135, 0, 0, 1443, 1446, 5, 177, 0, 0, 1444, 1446, 5, 164, 0, 0, 1445, 1442, 1, 0, 0, 0, 1445, 1443, 1, 0, 0, 0, 1445, 1444, 1, 0, 0, 0, 1446, 1447, 1, 0, 0, 0, 1447, 1579, 3, 142, 71, 25, 1448, 1452, 10, 23, 0, 0, 1449, 1453, 5, 165, 0, 0, 1450, 1453, 5, 143, 0, 0, 1451, 1453, 5, 142, 0, 0, 1452, 1449, 1, 0, 0, 0, 1452, 1450, 1, 0, 0, 0, 1452, 1451, 1, 0, 0, 0, 1453, 1454, 1, 0, 0, 0, 1454, 1579, 3, 142, 71, 24, 1455, 1480, 10, 22, 0, 0, 1456, 1481, 5, 146, 0, 0, 1457, 1481, 5, 147, 0, 0, 1458, 1481, 5, 159, 0, 0, 1459, 1481, 5, 156, 0, 0, 1460, 1481, 5, 157, 0, 0, 1461, 1481, 5, 148, 0, 0, 1462, 1481, 5, 149, 0, 0, 1463, 1465, 5, 71, 0, 0, 1464, 1463, 1, 0, 0, 0, 1464, 1465, 1, 0, 0, 0, 1465, 1466, 1, 0, 0, 0, 1466, 1468, 5, 50, 0, 0, 1467, 1469, 5, 15, 0, 0, 1468, 1467, 1, 0, 0, 0, 1468, 1469, 1, 0, 0, 0, 1469, 1481, 1, 0, 0, 0, 1470, 1472, 5, 71, 0, 0, 1471, 1470, 1, 0, 0, 0, 1471, 1472, 1, 0, 0, 0, 1472, 1473, 1, 0, 0, 0, 1473, 1481, 7, 12, 0, 0, 1474, 1481, 5, 171, 0, 0, 1475, 1481, 5, 172, 0, 0, 1476, 1481, 5, 161, 0, 0, 1477, 1481, 5, 151, 0, 0, 1478, 1481, 5, 152, 0, 0, 1479, 1481, 5, 160, 0, 0, 1480, 1456, 1, 0, 0, 0, 1480, 1457, 1, 0, 0, 0, 1480, 1458, 1, 0, 0, 0, 1480, 1459, 1, 0, 0, 0, 1480, 1460, 1, 0, 0, 0, 1480, 1461, 1, 0, 0, 0, 1480, 1462, 1, 0, 0, 0, 1480, 1464, 1, 0, 0, 0, 1480, 1471, 1, 0, 0, 0, 1480, 1474, 1, 0, 0, 0, 1480, 1475, 1, 0, 0, 0, 1480, 1476, 1, 0, 0, 0, 1480, 1477, 1, 0, 0, 0, 1480, 1478, 1, 0, 0, 0, 1480, 1479, 1, 0, 0, 0, 1481, 1482, 1, 0, 0, 0, 1482, 1579, 3, 142, 71, 23, 1483, 1484, 10, 19, 0, 0, 1484, 1486, 5, 55, 0, 0, 1485, 1487, 5, 71, 0, 0, 1486, 1485, 1, 0, 0, 0, 1486, 1487, 1, 0, 0, 0, 1487, 1488, 1, 0, 0, 0, 1488, 1489, 5, 25, 0, 0, 1489, 1490, 5, 38, 0, 0, 1490, 1579, 3, 142, 71, 20, 1491, 1492, 10, 18, 0, 0, 1492, 1493, 5, 163, 0, 0, 1493, 1579, 3, 142, 71, 19, 1494, 1495, 10, 16, 0, 0, 1495, 1496, 5, 2, 0, 0, 1496, 1579, 3, 142, 71, 17, 1497, 1498, 10, 15, 0, 0, 1498, 1499, 5, 76, 0, 0, 1499, 1579, 3, 142, 71, 16, 1500, 1502, 10, 14, 0, 0, 1501, 1503, 5, 71, 0, 0, 1502, 1501, 1, 0, 0, 0, 1502, 1503, 1, 0, 0, 0, 1503, 1504, 1, 0, 0, 0, 1504, 1505, 5, 9, 0, 0, 1505, 1506, 3, 142, 71, 0, 1506, 1507, 5, 2, 0, 0, 1507, 1508, 3, 142, 71, 15, 1508, 1579, 1, 0, 0, 0, 1509, 1510, 10, 13, 0, 0, 1510, 1511, 5, 166, 0, 0, 1511, 1512, 3, 142, 71, 0, 1512, 1513, 5, 140, 0, 0, 1513, 1514, 3, 142, 71, 13, 1514, 1579, 1, 0, 0, 0, 1515, 1516, 10, 38, 0, 0, 1516, 1517, 5, 155, 0, 0, 1517, 1518, 3, 48, 24, 0, 1518, 1519, 5, 175, 0, 0, 1519, 1579, 1, 0, 0, 0, 1520, 1521, 10, 37, 0, 0, 1521, 1523, 5, 155, 0, 0, 1522, 1524, 3, 136, 68, 0, 1523, 1522, 1, 0, 0, 0, 1523, 1524, 1, 0, 0, 0, 1524, 1525, 1, 0, 0, 0, 1525, 1579, 5, 175, 0, 0, 1526, 1527, 10, 33, 0, 0, 1527, 1528, 5, 154, 0, 0, 1528, 1529, 3, 142, 71, 0, 1529, 1530, 5, 174, 0, 0, 1530, 1579, 1, 0, 0, 0, 1531, 1532, 10, 32, 0, 0, 1532, 1534, 5, 154, 0, 0, 1533, 1535, 3, 142, 71, 0, 1534, 1533, 1, 0, 0, 0, 1534, 1535, 1, 0, 0, 0, 1535, 1536, 1, 0, 0, 0, 1536, 1538, 5, 140, 0, 0, 1537, 1539, 3, 142, 71, 0, 1538, 1537, 1, 0, 0, 0, 1538, 1539, 1, 0, 0, 0, 1539, 1540, 1, 0, 0, 0, 1540, 1579, 5, 174, 0, 0, 1541, 1542, 10, 31, 0, 0, 1542, 1543, 5, 145, 0, 0, 1543, 1579, 5, 131, 0, 0, 1544, 1545, 10, 30, 0, 0, 1545, 1546, 5, 145, 0, 0, 1546, 1579, 3, 204, 102, 0, 1547, 1548, 10, 29, 0, 0, 1548, 1549, 5, 162, 0, 0, 1549, 1550, 5, 154, 0, 0, 1550, 1551, 3, 142, 71, 0, 1551, 1552, 5, 174, 0, 0, 1552, 1579, 1, 0, 0, 0, 1553, 1554, 10, 28, 0, 0, 1554, 1555, 5, 162, 0, 0, 1555, 1579, 5, 131, 0, 0, 1556, 1557, 10, 27, 0, 0, 1557, 1558, 5, 162, 0, 0, 1558, 1579, 3, 204, 102, 0, 1559, 1560, 10, 26, 0, 0, 1560, 1561, 5, 138, 0, 0, 1561, 1579, 3, 134, 67, 0, 1562, 1563, 10, 21, 0, 0, 1563, 1564, 5, 48, 0, 0, 1564, 1579, 5, 73, 0, 0, 1565, 1566, 10, 20, 0, 0, 1566, 1568, 5, 55, 0, 0, 1567, 1569, 5, 71, 0, 0, 1568, 1567, 1, 0, 0, 0, 1568, 1569, 1, 0, 0, 0, 1569, 1570, 1, 0, 0, 0, 1570, 1579, 5, 72, 0, 0, 1571, 1576, 10, 12, 0, 0, 1572, 1573, 5, 6, 0, 0, 1573, 1577, 3, 204, 102, 0, 1574, 1575, 5, 6, 0, 0, 1575, 1577, 5, 133, 0, 0, 1576, 1572, 1, 0, 0, 0, 1576, 1574, 1, 0, 0, 0, 1577, 1579, 1, 0, 0, 0, 1578, 1441, 1, 0, 0, 0, 1578, 1448, 1, 0, 0, 0, 1578, 1455, 1, 0, 0, 0, 1578, 1483, 1, 0, 0, 0, 1578, 1491, 1, 0, 0, 0, 1578, 1494, 1, 0, 0, 0, 1578, 1497, 1, 0, 0, 0, 1578, 1500, 1, 0, 0, 0, 1578, 1509, 1, 0, 0, 0, 1578, 1515, 1, 0, 0, 0, 1578, 1520, 1, 0, 0, 0, 1578, 1526, 1, 0, 0, 0, 1578, 1531, 1, 0, 0, 0, 1578, 1541, 1, 0, 0, 0, 1578, 1544, 1, 0, 0, 0, 1578, 1547, 1, 0, 0, 0, 1578, 1553, 1, 0, 0, 0, 1578, 1556, 1, 0, 0, 0, 1578, 1559, 1, 0, 0, 0, 1578, 1562, 1, 0, 0, 0, 1578, 1565, 1, 0, 0, 0, 1578, 1571, 1, 0, 0, 0, 1579, 1582, 1, 0, 0, 0, 1580, 1578, 1, 0, 0, 0, 1580, 1581, 1, 0, 0, 0, 1581, 143, 1, 0, 0, 0, 1582, 1580, 1, 0, 0, 0, 1583, 1584, 5, 155, 0, 0, 1584, 1589, 3, 204, 102, 0, 1585, 1586, 5, 141, 0, 0, 1586, 1588, 3, 204, 102, 0, 1587, 1585, 1, 0, 0, 0, 1588, 1591, 1, 0, 0, 0, 1589, 1587, 1, 0, 0, 0, 1589, 1590, 1, 0, 0, 0, 1590, 1593, 1, 0, 0, 0, 1591, 1589, 1, 0, 0, 0, 1592, 1594, 5, 141, 0, 0, 1593, 1592, 1, 0, 0, 0, 1593, 1594, 1, 0, 0, 0, 1594, 1595, 1, 0, 0, 0, 1595, 1596, 5, 175, 0, 0, 1596, 1611, 1, 0, 0, 0, 1597, 1602, 3, 204, 102, 0, 1598, 1599, 5, 141, 0, 0, 1599, 1601, 3, 204, 102, 0, 1600, 1598, 1, 0, 0, 0, 1601, 1604, 1, 0, 0, 0, 1602, 1600, 1, 0, 0, 0, 1602, 1603, 1, 0, 0, 0, 1603, 1606, 1, 0, 0, 0, 1604, 1602, 1, 0, 0, 0, 1605, 1607, 5, 141, 0, 0, 1606, 1605, 1, 0, 0, 0, 1606, 1607, 1, 0, 0, 0, 1607, 1611, 1, 0, 0, 0, 1608, 1609, 5, 155, 0, 0, 1609, 1611, 5, 175, 0, 0, 1610, 1583, 1, 0, 0, 0, 1610, 1597, 1, 0, 0, 0, 1610, 1608, 1, 0, 0, 0, 1611, 1612, 1, 0, 0, 0, 1612, 1615, 5, 134, 0, 0, 1613, 1616, 3, 142, 71, 0, 1614, 1616, 3, 36, 18, 0, 1615, 1613, 1, 0, 0, 0, 1615, 1614, 1, 0, 0, 0, 1616, 1633, 1, 0, 0, 0, 1617, 1618, 5, 58, 0, 0, 1618, 1623, 3, 204, 102, 0, 1619, 1620, 5, 141, 0, 0, 1620, 1622, 3, 204, 102, 0, 1621, 1619, 1, 0, 0, 0, 1622, 1625, 1, 0, 0, 0, 1623, 1621, 1, 0, 0, 0, 1623, 1624, 1, 0, 0, 0, 1624, 1627, 1, 0, 0, 0, 1625, 1623, 1, 0, 0, 0, 1626, 1628, 5, 141, 0, 0, 1627, 1626, 1, 0, 0, 0, 1627, 1628, 1, 0, 0, 0, 1628, 1629, 1, 0, 0, 0, 1629, 1630, 5, 140, 0, 0, 1630, 1631, 3, 142, 71, 0, 1631, 1633, 1, 0, 0, 0, 1632, 1610, 1, 0, 0, 0, 1632, 1617, 1, 0, 0, 0, 1633, 145, 1, 0, 0, 0, 1634, 1639, 3, 148, 74, 0, 1635, 1636, 5, 141, 0, 0, 1636, 1638, 3, 148, 74, 0, 1637, 1635, 1, 0, 0, 0, 1638, 1641, 1, 0, 0, 0, 1639, 1637, 1, 0, 0, 0, 1639, 1640, 1, 0, 0, 0, 1640, 147, 1, 0, 0, 0, 1641, 1639, 1, 0, 0, 0, 1642, 1643, 3, 142, 71, 0, 1643, 1644, 5, 6, 0, 0, 1644, 1645, 3, 204, 102, 0, 1645, 149, 1, 0, 0, 0, 1646, 1653, 3, 154, 77, 0, 1647, 1653, 3, 152, 76, 0, 1648, 1649, 5, 153, 0, 0, 1649, 1650, 3, 142, 71, 0, 1650, 1651, 5, 173, 0, 0, 1651, 1653, 1, 0, 0, 0, 1652, 1646, 1, 0, 0, 0, 1652, 1647, 1, 0, 0, 0, 1652, 1648, 1, 0, 0, 0, 1653, 151, 1, 0, 0, 0, 1654, 1655, 5, 189, 0, 0, 1655, 153, 1, 0, 0, 0, 1656, 1657, 5, 157, 0, 0, 1657, 1661, 3, 204, 102, 0, 1658, 1660, 3, 156, 78, 0, 1659, 1658, 1, 0, 0, 0, 1660, 1663, 1, 0, 0, 0, 1661, 1659, 1, 0, 0, 0, 1661, 1662, 1, 0, 0, 0, 1662, 1664, 1, 0, 0, 0, 1663, 1661, 1, 0, 0, 0, 1664, 1665, 5, 178, 0, 0, 1665, 1686, 1, 0, 0, 0, 1666, 1667, 5, 157, 0, 0, 1667, 1671, 3, 204, 102, 0, 1668, 1670, 3, 156, 78, 0, 1669, 1668, 1, 0, 0, 0, 1670, 1673, 1, 0, 0, 0, 1671, 1669, 1, 0, 0, 0, 1671, 1672, 1, 0, 0, 0, 1672, 1674, 1, 0, 0, 0, 1673, 1671, 1, 0, 0, 0, 1674, 1678, 5, 149, 0, 0, 1675, 1677, 3, 150, 75, 0, 1676, 1675, 1, 0, 0, 0, 1677, 1680, 1, 0, 0, 0, 1678, 1676, 1, 0, 0, 0, 1678, 1679, 1, 0, 0, 0, 1679, 1681, 1, 0, 0, 0, 1680, 1678, 1, 0, 0, 0, 1681, 1682, 5, 158, 0, 0, 1682, 1683, 3, 204, 102, 0, 1683, 1684, 5, 149, 0, 0, 1684, 1686, 1, 0, 0, 0, 1685, 1656, 1, 0, 0, 0, 1685, 1666, 1, 0, 0, 0, 1686, 155, 1, 0, 0, 0, 1687, 1688, 3, 204, 102, 0, 1688, 1689, 5, 147, 0, 0, 1689, 1690, 3, 210, 105, 0, 1690, 1699, 1, 0, 0, 0, 1691, 1692, 3, 204, 102, 0, 1692, 1693, 5, 147, 0, 0, 1693, 1694, 5, 153, 0, 0, 1694, 1695, 3, 142, 71, 0, 1695, 1696, 5, 173, 0, 0, 1696, 1699, 1, 0, 0, 0, 1697, 1699, 3, 204, 102, 0, 1698, 1687, 1, 0, 0, 0, 1698, 1691, 1, 0, 0, 0, 1698, 1697, 1, 0, 0, 0, 1699, 157, 1, 0, 0, 0, 1700, 1705, 3, 160, 80, 0, 1701, 1702, 5, 141, 0, 0, 1702, 1704, 3, 160, 80, 0, 1703, 1701, 1, 0, 0, 0, 1704, 1707, 1, 0, 0, 0, 1705, 1703, 1, 0, 0, 0, 1705, 1706, 1, 0, 0, 0, 1706, 1709, 1, 0, 0, 0, 1707, 1705, 1, 0, 0, 0, 1708, 1710, 5, 141, 0, 0, 1709, 1708, 1, 0, 0, 0, 1709, 1710, 1, 0, 0, 0, 1710, 159, 1, 0, 0, 0, 1711, 1713, 3, 204, 102, 0, 1712, 1714, 3, 162, 81, 0, 1713, 1712, 1, 0, 0, 0, 1713, 1714, 1, 0, 0, 0, 1714, 1718, 1, 0, 0, 0, 1715, 1716, 5, 117, 0, 0, 1716, 1717, 5, 57, 0, 0, 1717, 1719, 3, 162, 81, 0, 1718, 1715, 1, 0, 0, 0, 1718, 1719, 1, 0, 0, 0, 1719, 1720, 1, 0, 0, 0, 1720, 1725, 5, 6, 0, 0, 1721, 1723, 5, 71, 0, 0, 1722, 1721, 1, 0, 0, 0, 1722, 1723, 1, 0, 0, 0, 1723, 1724, 1, 0, 0, 0, 1724, 1726, 5, 65, 0, 0, 1725, 1722, 1, 0, 0, 0, 1725, 1726, 1, 0, 0, 0, 1726, 1727, 1, 0, 0, 0, 1727, 1728, 5, 155, 0, 0, 1728, 1729, 3, 48, 24, 0, 1729, 1730, 5, 175, 0, 0, 1730, 1736, 1, 0, 0, 0, 1731, 1732, 3, 142, 71, 0, 1732, 1733, 5, 6, 0, 0, 1733, 1734, 3, 204, 102, 0, 1734, 1736, 1, 0, 0, 0, 1735, 1711, 1, 0, 0, 0, 1735, 1731, 1, 0, 0, 0, 1736, 161, 1, 0, 0, 0, 1737, 1738, 5, 155, 0, 0, 1738, 1743, 3, 204, 102, 0, 1739, 1740, 5, 141, 0, 0, 1740, 1742, 3, 204, 102, 0, 1741, 1739, 1, 0, 0, 0, 1742, 1745, 1, 0, 0, 0, 1743, 1741, 1, 0, 0, 0, 1743, 1744, 1, 0, 0, 0, 1744, 1746, 1, 0, 0, 0, 1745, 1743, 1, 0, 0, 0, 1746, 1747, 5, 175, 0, 0, 1747, 163, 1, 0, 0, 0, 1748, 1756, 3, 208, 104, 0, 1749, 1750, 3, 184, 92, 0, 1750, 1751, 5, 145, 0, 0, 1751, 1753, 1, 0, 0, 0, 1752, 1749, 1, 0, 0, 0, 1752, 1753, 1, 0, 0, 0, 1753, 1754, 1, 0, 0, 0, 1754, 1756, 3, 166, 83, 0, 1755, 1748, 1, 0, 0, 0, 1755, 1752, 1, 0, 0, 0, 1756, 165, 1, 0, 0, 0, 1757, 1762, 3, 204, 102, 0, 1758, 1759, 5, 145, 0, 0, 1759, 1761, 3, 204, 102, 0, 1760, 1758, 1, 0, 0, 0, 1761, 1764, 1, 0, 0, 0, 1762, 1760, 1, 0, 0, 0, 1762, 1763, 1, 0, 0, 0, 1763, 167, 1, 0, 0, 0, 1764, 1762, 1, 0, 0, 0, 1765, 1766, 6, 84, -1, 0, 1766, 1779, 3, 184, 92, 0, 1767, 1779, 3, 182, 91, 0, 1768, 1769, 5, 155, 0, 0, 1769, 1770, 3, 48, 24, 0, 1770, 1771, 5, 175, 0, 0, 1771, 1779, 1, 0, 0, 0, 1772, 1773, 5, 155, 0, 0, 1773, 1774, 3, 90, 45, 0, 1774, 1775, 5, 175, 0, 0, 1775, 1779, 1, 0, 0, 0, 1776, 1779, 3, 154, 77, 0, 1777, 1779, 3, 208, 104, 0, 1778, 1765, 1, 0, 0, 0, 1778, 1767, 1, 0, 0, 0, 1778, 1768, 1, 0, 0, 0, 1778, 1772, 1, 0, 0, 0, 1778, 1776, 1, 0, 0, 0, 1778, 1777, 1, 0, 0, 0, 1779, 1813, 1, 0, 0, 0, 1780, 1781, 10, 5, 0, 0, 1781, 1782, 5, 81, 0, 0, 1782, 1783, 5, 155, 0, 0, 1783, 1784, 3, 136, 68, 0, 1784, 1788, 3, 170, 85, 0, 1785, 1786, 5, 41, 0, 0, 1786, 1787, 5, 11, 0, 0, 1787, 1789, 3, 136, 68, 0, 1788, 1785, 1, 0, 0, 0, 1788, 1789, 1, 0, 0, 0, 1789, 1790, 1, 0, 0, 0, 1790, 1791, 5, 175, 0, 0, 1791, 1812, 1, 0, 0, 0, 1792, 1793, 10, 4, 0, 0, 1793, 1796, 5, 116, 0, 0, 1794, 1795, 5, 49, 0, 0, 1795, 1797, 5, 73, 0, 0, 1796, 1794, 1, 0, 0, 0, 1796, 1797, 1, 0, 0, 0, 1797, 1798, 1, 0, 0, 0, 1798, 1799, 5, 155, 0, 0, 1799, 1800, 3, 174, 87, 0, 1800, 1801, 5, 175, 0, 0, 1801, 1812, 1, 0, 0, 0, 1802, 1806, 10, 3, 0, 0, 1803, 1807, 3, 202, 101, 0, 1804, 1805, 5, 6, 0, 0, 1805, 1807, 3, 204, 102, 0, 1806, 1803, 1, 0, 0, 0, 1806, 1804, 1, 0, 0, 0, 1807, 1809, 1, 0, 0, 0, 1808, 1810, 3, 180, 90, 0, 1809, 1808, 1, 0, 0, 0, 1809, 1810, 1, 0, 0, 0, 1810, 1812, 1, 0, 0, 0, 1811, 1780, 1, 0, 0, 0, 1811, 1792, 1, 0, 0, 0, 1811, 1802, 1, 0, 0, 0, 1812, 1815, 1, 0, 0, 0, 1813, 1811, 1, 0, 0, 0, 1813, 1814, 1, 0, 0, 0, 1814, 169, 1, 0, 0, 0, 1815, 1813, 1, 0, 0, 0, 1816, 1818, 5, 37, 0, 0, 1817, 1819, 3, 172, 86, 0, 1818, 1817, 1, 0, 0, 0, 1819, 1820, 1, 0, 0, 0, 1820, 1818, 1, 0, 0, 0, 1820, 1821, 1, 0, 0, 0, 1821, 171, 1, 0, 0, 0, 1822, 1823, 3, 178, 89, 0, 1823, 1824, 5, 50, 0, 0, 1824, 1825, 5, 155, 0, 0, 1825, 1826, 3, 136, 68, 0, 1826, 1827, 5, 175, 0, 0, 1827, 173, 1, 0, 0, 0, 1828, 1833, 3, 176, 88, 0, 1829, 1830, 5, 141, 0, 0, 1830, 1832, 3, 176, 88, 0, 1831, 1829, 1, 0, 0, 0, 1832, 1835, 1, 0, 0, 0, 1833, 1831, 1, 0, 0, 0, 1833, 1834, 1, 0, 0, 0, 1834, 1837, 1, 0, 0, 0, 1835, 1833, 1, 0, 0, 0, 1836, 1838, 5, 141, 0, 0, 1837, 1836, 1, 0, 0, 0, 1837, 1838, 1, 0, 0, 0, 1838, 175, 1, 0, 0, 0, 1839, 1840, 3, 178, 89, 0, 1840, 1841, 5, 37, 0, 0, 1841, 1842, 3, 178, 89, 0, 1842, 1843, 5, 50, 0, 0, 1843, 1844, 5, 155, 0, 0, 1844, 1845, 3, 136, 68, 0, 1845, 1854, 5, 175, 0, 0, 1846, 1847, 3, 178, 89, 0, 1847, 1848, 5, 50, 0, 0, 1848, 1849, 5, 155, 0, 0, 1849, 1850, 3, 136, 68, 0, 1850, 1851, 5, 175, 0, 0, 1851, 1853, 1, 0, 0, 0, 1852, 1846, 1, 0, 0, 0, 1853, 1856, 1, 0, 0, 0, 1854, 1852, 1, 0, 0, 0, 1854, 1855, 1, 0, 0, 0, 1855, 177, 1, 0, 0, 0, 1856, 1854, 1, 0, 0, 0, 1857, 1858, 5, 155, 0, 0, 1858, 1859, 3, 136, 68, 0, 1859, 1860, 5, 175, 0, 0, 1860, 1863, 1, 0, 0, 0, 1861, 1863, 3, 142, 71, 0, 1862, 1857, 1, 0, 0, 0, 1862, 1861, 1, 0, 0, 0, 1863, 179, 1, 0, 0, 0, 1864, 1865, 5, 155, 0, 0, 1865, 1870, 3, 204, 102, 0, 1866, 1867, 5, 141, 0, 0, 1867, 1869, 3, 204, 102, 0, 1868, 1866, 1, 0, 0, 0, 1869, 1872, 1, 0, 0, 0, 1870, 1868, 1, 0, 0, 0, 1870, 1871, 1, 0, 0, 0, 1871, 1873, 1, 0, 0, 0, 1872, 1870, 1, 0, 0, 0, 1873, 1874, 5, 175, 0, 0, 1874, 181, 1, 0, 0, 0, 1875, 1876, 3, 204, 102, 0, 1876, 1878, 5, 155, 0, 0, 1877, 1879, 3, 186, 93, 0, 1878, 1877, 1, 0, 0, 0, 1878, 1879, 1, 0, 0, 0, 1879, 1880, 1, 0, 0, 0, 1880, 1881, 5, 175, 0, 0, 1881, 183, 1, 0, 0, 0, 1882, 1883, 3, 188, 94, 0, 1883, 1884, 5, 145, 0, 0, 1884, 1886, 1, 0, 0, 0, 1885, 1882, 1, 0, 0, 0, 1885, 1886, 1, 0, 0, 0, 1886, 1887, 1, 0, 0, 0, 1887, 1888, 3, 166, 83, 0, 1888, 185, 1, 0, 0, 0, 1889, 1894, 3, 142, 71, 0, 1890, 1891, 5, 141, 0, 0, 1891, 1893, 3, 142, 71, 0, 1892, 1890, 1, 0, 0, 0, 1893, 1896, 1, 0, 0, 0, 1894, 1892, 1, 0, 0, 0, 1894, 1895, 1, 0, 0, 0, 1895, 1898, 1, 0, 0, 0, 1896, 1894, 1, 0, 0, 0, 1897, 1899, 5, 141, 0, 0, 1898, 1897, 1, 0, 0, 0, 1898, 1899, 1, 0, 0, 0, 1899, 187, 1, 0, 0, 0, 1900, 1901, 3, 204, 102, 0, 1901, 189, 1, 0, 0, 0, 1902, 1911, 5, 129, 0, 0, 1903, 1904, 5, 145, 0, 0, 1904, 1911, 7, 13, 0, 0, 1905, 1906, 5, 131, 0, 0, 1906, 1908, 5, 145, 0, 0, 1907, 1909, 7, 13, 0, 0, 1908, 1907, 1, 0, 0, 0, 1908, 1909, 1, 0, 0, 0, 1909, 1911, 1, 0, 0, 0, 1910, 1902, 1, 0, 0, 0, 1910, 1903, 1, 0, 0, 0, 1910, 1905, 1, 0, 0, 0, 1911, 191, 1, 0, 0, 0, 1912, 1914, 7, 14, 0, 0, 1913, 1912, 1, 0, 0, 0, 1913, 1914, 1, 0, 0, 0, 1914, 1921, 1, 0, 0, 0, 1915, 1922, 3, 190, 95, 0, 1916, 1922, 5, 130, 0, 0, 1917, 1922, 5, 131, 0, 0, 1918, 1922, 5, 132, 0, 0, 1919, 1922, 5, 51, 0, 0, 1920, 1922, 5, 70, 0, 0, 1921, 1915, 1, 0, 0, 0, 1921, 1916, 1, 0, 0, 0, 1921, 1917, 1, 0, 0, 0, 1921, 1918, 1, 0, 0, 0, 1921, 1919, 1, 0, 0, 0, 1921, 1920, 1, 0, 0, 0, 1922, 193, 1, 0, 0, 0, 1923, 1927, 3, 192, 96, 0, 1924, 1927, 5, 133, 0, 0, 1925, 1927, 5, 72, 0, 0, 1926, 1923, 1, 0, 0, 0, 1926, 1924, 1, 0, 0, 0, 1926, 1925, 1, 0, 0, 0, 1927, 195, 1, 0, 0, 0, 1928, 1929, 7, 15, 0, 0, 1929, 197, 1, 0, 0, 0, 1930, 1931, 7, 16, 0, 0, 1931, 199, 1, 0, 0, 0, 1932, 1933, 7, 17, 0, 0, 1933, 201, 1, 0, 0, 0, 1934, 1937, 5, 128, 0, 0, 1935, 1937, 3, 200, 100, 0, 1936, 1934, 1, 0, 0, 0, 1936, 1935, 1, 0, 0, 0, 1937, 203, 1, 0, 0, 0, 1938, 1942, 5, 128, 0, 0, 1939, 1942, 3, 196, 98, 0, 1940, 1942, 3, 198, 99, 0, 1941, 1938, 1, 0, 0, 0, 1941, 1939, 1, 0, 0, 0, 1941, 1940, 1, 0, 0, 0, 1942, 205, 1, 0, 0, 0, 1943, 1944, 3, 210, 105, 0, 1944, 1945, 5, 147, 0, 0, 1945, 1946, 3, 192, 96, 0, 1946, 207, 1, 0, 0, 0, 1947, 1948, 5, 153, 0, 0, 1948, 1949, 3, 142, 71, 0, 1949, 1950, 5, 173, 0, 0, 1950, 209, 1, 0, 0, 0, 1951, 1954, 5, 133, 0, 0, 1952, 1954, 3, 212, 106, 0, 1953, 1951, 1, 0, 0, 0, 1953, 1952, 1, 0, 0, 0, 1954, 211, 1, 0, 0, 0, 1955, 1959, 5, 168, 0, 0, 1956, 1958, 3, 214, 107, 0, 1957, 1956, 1, 0, 0, 0, 1958, 1961, 1, 0, 0, 0, 1959, 1957, 1, 0, 0, 0, 1959, 1960, 1, 0, 0, 0, 1960, 1962, 1, 0, 0, 0, 1961, 1959, 1, 0, 0, 0, 1962, 1963, 5, 170, 0, 0, 1963, 213, 1, 0, 0, 0, 1964, 1965, 5, 184, 0, 0, 1965, 1966, 3, 142, 71, 0, 1966, 1967, 5, 173, 0, 0, 1967, 1970, 1, 0, 0, 0, 1968, 1970, 5, 183, 0, 0, 1969, 1964, 1, 0, 0, 0, 1969, 1968, 1, 0, 0, 0, 1970, 215, 1, 0, 0, 0, 1971, 1975, 5, 169, 0, 0, 1972, 1974, 3, 218, 109, 0, 1973, 1972, 1, 0, 0, 0, 1974, 1977, 1, 0, 0, 0, 1975, 1973, 1, 0, 0, 0, 1975, 1976, 1, 0, 0, 0, 1976, 1978, 1, 0, 0, 0, 1977, 1975, 1, 0, 0, 0, 1978, 1979, 5, 0, 0, 1, 1979, 217, 1, 0, 0, 0, 1980, 1981, 5, 186, 0, 0, 1981, 1982, 3, 142, 71, 0, 1982, 1983, 5, 173, 0, 0, 1983, 1986, 1, 0, 0, 0, 1984, 1986, 5, 185, 0, 0, 1985, 1980, 1, 0, 0, 0, 1985, 1984, 1, 0, 0, 0, 1986, 219, 1, 0, 0, 0, 247, 223, 230, 238, 245, 249, 263, 267, 270, 274, 277, 284, 288, 297, 302, 311, 319, 326, 330, 336, 341, 349, 356, 362, 373, 381, 395, 399, 404, 407, 422, 428, 433, 439, 445, 450, 456, 462, 467, 469, 477, 481, 484, 489, 493, 497, 502, 506, 513, 516, 520, 523, 527, 530, 533, 536, 539, 542, 545, 549, 553, 556, 559, 563, 566, 569, 572, 576, 579, 583, 591, 597, 618, 642, 649, 654, 680, 684, 688, 693, 697, 702, 716, 725, 733, 736, 742, 750, 753, 758, 765, 775, 783, 789, 791, 795, 800, 807, 810, 814, 818, 821, 827, 829, 832, 836, 840, 843, 845, 847, 852, 863, 868, 872, 878, 883, 890, 895, 899, 903, 909, 911, 918, 926, 929, 932, 957, 971, 987, 991, 1002, 1006, 1017, 1021, 1028, 1036, 1039, 1044, 1049, 1056, 1059, 1066, 1070, 1077, 1081, 1088, 1093, 1102, 1106, 1139, 1187, 1215, 1279, 1287, 1293, 1296, 1299, 1307, 1317, 1323, 1326, 1329, 1337, 1345, 1348, 1352, 1355, 1360, 1369, 1381, 1389, 1397, 1401, 1419, 1423, 1428, 1439, 1445, 1452, 1464, 1468, 1471, 1480, 1486, 1502, 1523, 1534, 1538, 1568, 1576, 1578, 1580, 1589, 1593, 1602, 1606, 1610, 1615, 1623, 1627, 1632, 1639, 1652, 1661, 1671, 1678, 1685, 1698, 1705, 1709, 1713, 1718, 1722, 1725, 1735, 1743, 1752, 1755, 1762, 1778, 1788, 1796, 1806, 1809, 1811, 1813, 1820, 1833, 1837, 1854, 1862, 1870, 1878, 1885, 1894, 1898, 1908, 1910, 1913, 1921, 1926, 1936, 1941, 1953, 1959, 1969, 1975, 1985] \ No newline at end of file diff --git a/posthog/hogql/grammar/HogQLParser.py b/posthog/hogql/grammar/HogQLParser.py index 06690b83b940..0dcfb5971efd 100644 --- a/posthog/hogql/grammar/HogQLParser.py +++ b/posthog/hogql/grammar/HogQLParser.py @@ -10,7 +10,7 @@ def serializedATN(): return [ - 4,1,184,1806,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6, + 4,1,190,1988,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6, 7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7, 13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2, 20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7, @@ -26,736 +26,815 @@ def serializedATN(): 85,7,85,2,86,7,86,2,87,7,87,2,88,7,88,2,89,7,89,2,90,7,90,2,91,7, 91,2,92,7,92,2,93,7,93,2,94,7,94,2,95,7,95,2,96,7,96,2,97,7,97,2, 98,7,98,2,99,7,99,2,100,7,100,2,101,7,101,2,102,7,102,2,103,7,103, - 2,104,7,104,2,105,7,105,2,106,7,106,2,107,7,107,1,0,5,0,218,8,0, - 10,0,12,0,221,9,0,1,0,1,0,1,1,1,1,3,1,227,8,1,1,2,1,2,1,3,1,3,1, - 3,1,3,3,3,235,8,3,1,4,1,4,1,4,5,4,240,8,4,10,4,12,4,243,9,4,1,4, - 3,4,246,8,4,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,3,5, - 260,8,5,1,6,1,6,3,6,264,8,6,1,6,3,6,267,8,6,1,7,1,7,3,7,271,8,7, - 1,7,3,7,274,8,7,1,8,1,8,1,8,1,8,1,8,3,8,281,8,8,1,8,1,8,3,8,285, - 8,8,1,8,1,8,1,9,1,9,1,9,5,9,292,8,9,10,9,12,9,295,9,9,1,9,1,9,3, - 9,299,8,9,1,10,1,10,1,10,1,10,1,10,1,10,1,10,3,10,308,8,10,1,11, - 1,11,1,11,1,11,1,11,1,11,3,11,316,8,11,1,12,1,12,1,12,1,12,1,12, - 3,12,323,8,12,1,12,1,12,3,12,327,8,12,1,12,1,12,1,12,1,12,3,12,333, - 8,12,1,12,1,12,1,12,3,12,338,8,12,1,13,1,13,1,13,1,13,1,13,1,13, - 3,13,346,8,13,1,13,1,13,1,13,1,13,1,13,3,13,353,8,13,1,14,1,14,1, - 14,1,14,3,14,359,8,14,1,14,1,14,1,14,1,15,1,15,1,15,1,15,1,16,1, - 16,3,16,370,8,16,1,17,1,17,1,18,1,18,5,18,376,8,18,10,18,12,18,379, - 9,18,1,18,1,18,1,19,1,19,1,19,1,19,1,20,1,20,1,20,5,20,390,8,20, - 10,20,12,20,393,9,20,1,20,3,20,396,8,20,1,21,1,21,1,21,3,21,401, - 8,21,1,21,3,21,404,8,21,1,21,1,21,1,22,1,22,1,22,1,22,1,22,1,22, - 3,22,414,8,22,1,23,1,23,1,23,1,23,3,23,420,8,23,1,23,1,23,1,23,3, - 23,425,8,23,1,23,1,23,1,23,1,23,3,23,431,8,23,1,23,1,23,1,23,1,23, - 3,23,437,8,23,1,23,1,23,1,23,3,23,442,8,23,1,23,1,23,1,23,1,23,3, - 23,448,8,23,1,23,1,23,1,23,1,23,3,23,454,8,23,1,23,1,23,1,23,3,23, - 459,8,23,3,23,461,8,23,1,23,1,23,1,24,1,24,5,24,467,8,24,10,24,12, - 24,470,9,24,1,24,3,24,473,8,24,1,25,1,25,1,25,3,25,478,8,25,1,25, - 1,25,3,25,482,8,25,1,25,1,25,3,25,486,8,25,1,25,1,25,1,25,3,25,491, - 8,25,1,25,1,25,3,25,495,8,25,1,25,1,25,1,25,1,25,1,25,3,25,502,8, - 25,1,26,3,26,505,8,26,1,26,1,26,3,26,509,8,26,1,26,3,26,512,8,26, - 1,26,1,26,3,26,516,8,26,1,26,3,26,519,8,26,1,26,3,26,522,8,26,1, - 26,3,26,525,8,26,1,26,3,26,528,8,26,1,26,3,26,531,8,26,1,26,3,26, - 534,8,26,1,26,1,26,3,26,538,8,26,1,26,1,26,3,26,542,8,26,1,26,3, - 26,545,8,26,1,26,3,26,548,8,26,1,26,1,26,3,26,552,8,26,1,26,3,26, - 555,8,26,1,26,3,26,558,8,26,1,26,3,26,561,8,26,1,26,1,26,3,26,565, - 8,26,1,26,3,26,568,8,26,1,27,1,27,3,27,572,8,27,1,27,1,27,1,28,1, - 28,1,28,1,28,3,28,580,8,28,1,29,1,29,1,29,1,30,3,30,586,8,30,1,30, + 2,104,7,104,2,105,7,105,2,106,7,106,2,107,7,107,2,108,7,108,2,109, + 7,109,1,0,5,0,222,8,0,10,0,12,0,225,9,0,1,0,1,0,1,1,1,1,3,1,231, + 8,1,1,2,1,2,1,3,1,3,1,3,1,3,3,3,239,8,3,1,4,1,4,1,4,5,4,244,8,4, + 10,4,12,4,247,9,4,1,4,3,4,250,8,4,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1, + 5,1,5,1,5,1,5,1,5,3,5,264,8,5,1,6,1,6,3,6,268,8,6,1,6,3,6,271,8, + 6,1,7,1,7,3,7,275,8,7,1,7,3,7,278,8,7,1,8,1,8,1,8,1,8,1,8,3,8,285, + 8,8,1,8,1,8,3,8,289,8,8,1,8,1,8,1,9,1,9,1,9,5,9,296,8,9,10,9,12, + 9,299,9,9,1,9,1,9,3,9,303,8,9,1,10,1,10,1,10,1,10,1,10,1,10,1,10, + 3,10,312,8,10,1,11,1,11,1,11,1,11,1,11,1,11,3,11,320,8,11,1,12,1, + 12,1,12,1,12,1,12,3,12,327,8,12,1,12,1,12,3,12,331,8,12,1,12,1,12, + 1,12,1,12,3,12,337,8,12,1,12,1,12,1,12,3,12,342,8,12,1,13,1,13,1, + 13,1,13,1,13,1,13,3,13,350,8,13,1,13,1,13,1,13,1,13,1,13,3,13,357, + 8,13,1,14,1,14,1,14,1,14,3,14,363,8,14,1,14,1,14,1,14,1,15,1,15, + 1,15,1,15,1,16,1,16,3,16,374,8,16,1,17,1,17,1,18,1,18,5,18,380,8, + 18,10,18,12,18,383,9,18,1,18,1,18,1,19,1,19,1,19,1,19,1,20,1,20, + 1,20,5,20,394,8,20,10,20,12,20,397,9,20,1,20,3,20,400,8,20,1,21, + 1,21,1,21,3,21,405,8,21,1,21,3,21,408,8,21,1,21,1,21,1,22,1,22,1, + 22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,3,22,423,8,22,1,23,1, + 23,1,23,1,23,3,23,429,8,23,1,23,1,23,1,23,3,23,434,8,23,1,23,1,23, + 1,23,1,23,3,23,440,8,23,1,23,1,23,1,23,1,23,3,23,446,8,23,1,23,1, + 23,1,23,3,23,451,8,23,1,23,1,23,1,23,1,23,3,23,457,8,23,1,23,1,23, + 1,23,1,23,3,23,463,8,23,1,23,1,23,1,23,3,23,468,8,23,3,23,470,8, + 23,1,23,1,23,1,24,1,24,5,24,476,8,24,10,24,12,24,479,9,24,1,24,3, + 24,482,8,24,1,24,3,24,485,8,24,1,25,1,25,1,25,3,25,490,8,25,1,25, + 1,25,3,25,494,8,25,1,25,1,25,3,25,498,8,25,1,25,1,25,1,25,3,25,503, + 8,25,1,25,1,25,3,25,507,8,25,1,25,1,25,1,25,1,25,1,25,3,25,514,8, + 25,1,26,3,26,517,8,26,1,26,1,26,3,26,521,8,26,1,26,3,26,524,8,26, + 1,26,1,26,3,26,528,8,26,1,26,3,26,531,8,26,1,26,3,26,534,8,26,1, + 26,3,26,537,8,26,1,26,3,26,540,8,26,1,26,3,26,543,8,26,1,26,3,26, + 546,8,26,1,26,1,26,3,26,550,8,26,1,26,1,26,3,26,554,8,26,1,26,3, + 26,557,8,26,1,26,3,26,560,8,26,1,26,1,26,3,26,564,8,26,1,26,3,26, + 567,8,26,1,26,3,26,570,8,26,1,26,3,26,573,8,26,1,26,1,26,3,26,577, + 8,26,1,26,3,26,580,8,26,1,27,1,27,3,27,584,8,27,1,27,1,27,1,28,1, + 28,1,28,1,28,3,28,592,8,28,1,29,1,29,1,29,1,30,3,30,598,8,30,1,30, 1,30,1,30,1,30,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31, - 1,31,1,31,1,31,5,31,605,8,31,10,31,12,31,608,9,31,1,32,1,32,1,32, + 1,31,1,31,1,31,5,31,617,8,31,10,31,12,31,620,9,31,1,32,1,32,1,32, 1,33,1,33,1,33,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34, - 1,34,1,34,1,34,1,34,3,34,630,8,34,1,35,1,35,1,35,5,35,635,8,35,10, - 35,12,35,638,9,35,1,36,1,36,3,36,642,8,36,1,36,1,36,1,37,1,37,1, - 37,1,38,1,38,1,38,1,39,1,39,1,39,1,39,1,40,1,40,1,40,1,40,1,41,1, - 41,1,41,1,41,1,41,1,42,1,42,1,42,3,42,668,8,42,1,42,1,42,3,42,672, - 8,42,1,42,1,42,3,42,676,8,42,1,42,1,42,1,42,3,42,681,8,42,1,42,1, - 42,3,42,685,8,42,1,42,1,42,1,42,3,42,690,8,42,1,43,1,43,1,43,1,44, - 1,44,1,44,1,45,1,45,1,45,1,45,5,45,702,8,45,10,45,12,45,705,9,45, - 1,46,1,46,1,46,1,46,5,46,711,8,46,10,46,12,46,714,9,46,1,46,1,46, - 1,47,1,47,1,47,3,47,721,8,47,1,47,3,47,724,8,47,1,47,1,47,1,47,1, - 47,3,47,730,8,47,1,47,1,47,1,47,1,47,1,47,1,47,3,47,738,8,47,1,47, - 1,47,1,47,1,47,5,47,744,8,47,10,47,12,47,747,9,47,1,48,3,48,750, - 8,48,1,48,1,48,1,48,3,48,755,8,48,1,48,1,48,1,48,3,48,760,8,48,1, - 48,3,48,763,8,48,1,48,1,48,3,48,767,8,48,1,48,1,48,3,48,771,8,48, - 1,48,3,48,774,8,48,3,48,776,8,48,1,48,3,48,779,8,48,1,48,1,48,3, - 48,783,8,48,1,48,1,48,3,48,787,8,48,1,48,3,48,790,8,48,3,48,792, - 8,48,3,48,794,8,48,1,49,1,49,1,49,3,49,799,8,49,1,50,1,50,1,50,1, - 50,1,50,1,50,1,50,1,50,1,50,3,50,810,8,50,1,51,1,51,1,51,3,51,815, - 8,51,1,51,1,51,3,51,819,8,51,1,51,1,51,1,51,1,51,3,51,825,8,51,1, - 52,1,52,1,52,3,52,830,8,52,1,53,1,53,1,53,5,53,835,8,53,10,53,12, - 53,838,9,53,1,54,1,54,3,54,842,8,54,1,54,1,54,3,54,846,8,54,1,54, - 1,54,3,54,850,8,54,1,55,1,55,1,55,1,55,3,55,856,8,55,3,55,858,8, - 55,1,56,1,56,1,56,5,56,863,8,56,10,56,12,56,866,9,56,1,57,1,57,1, - 57,1,57,1,58,3,58,873,8,58,1,58,3,58,876,8,58,1,58,3,58,879,8,58, - 1,59,1,59,1,59,1,59,1,60,1,60,1,60,1,60,1,61,1,61,1,61,1,61,1,61, - 1,61,1,62,1,62,1,62,1,63,1,63,1,63,1,63,1,63,1,63,3,63,904,8,63, - 1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,3,64, - 918,8,64,1,65,1,65,1,65,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66, - 5,66,931,8,66,10,66,12,66,934,9,66,1,66,3,66,937,8,66,1,66,1,66, - 1,66,1,66,1,66,1,66,1,66,5,66,946,8,66,10,66,12,66,949,9,66,1,66, - 3,66,952,8,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,5,66,961,8,66,10, - 66,12,66,964,9,66,1,66,3,66,967,8,66,1,66,1,66,1,66,1,66,1,66,3, - 66,974,8,66,1,66,1,66,1,66,1,66,4,66,980,8,66,11,66,12,66,981,1, - 66,3,66,985,8,66,1,67,1,67,4,67,989,8,67,11,67,12,67,990,1,67,3, - 67,994,8,67,1,68,1,68,1,68,5,68,999,8,68,10,68,12,68,1002,9,68,1, - 68,3,68,1005,8,68,1,69,1,69,1,69,5,69,1010,8,69,10,69,12,69,1013, - 9,69,1,69,3,69,1016,8,69,1,70,1,70,1,70,1,70,1,70,3,70,1023,8,70, - 1,71,1,71,1,71,3,71,1028,8,71,1,71,1,71,1,71,1,71,1,71,4,71,1035, - 8,71,11,71,12,71,1036,1,71,1,71,3,71,1041,8,71,1,71,1,71,1,71,1, + 1,34,1,34,1,34,1,34,1,34,3,34,643,8,34,1,35,1,35,1,35,5,35,648,8, + 35,10,35,12,35,651,9,35,1,36,1,36,3,36,655,8,36,1,36,1,36,1,37,1, + 37,1,37,1,38,1,38,1,38,1,39,1,39,1,39,1,39,1,40,1,40,1,40,1,40,1, + 41,1,41,1,41,1,41,1,41,1,42,1,42,1,42,3,42,681,8,42,1,42,1,42,3, + 42,685,8,42,1,42,1,42,3,42,689,8,42,1,42,1,42,1,42,3,42,694,8,42, + 1,42,1,42,3,42,698,8,42,1,42,1,42,1,42,3,42,703,8,42,1,43,1,43,1, + 43,1,44,1,44,1,44,1,45,1,45,1,45,1,45,5,45,715,8,45,10,45,12,45, + 718,9,45,1,46,1,46,1,46,1,46,5,46,724,8,46,10,46,12,46,727,9,46, + 1,46,1,46,1,47,1,47,1,47,3,47,734,8,47,1,47,3,47,737,8,47,1,47,1, + 47,1,47,1,47,3,47,743,8,47,1,47,1,47,1,47,1,47,1,47,1,47,3,47,751, + 8,47,1,47,3,47,754,8,47,1,47,1,47,1,47,3,47,759,8,47,1,47,1,47,1, + 47,1,47,1,47,3,47,766,8,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1, + 47,3,47,776,8,47,1,47,1,47,1,47,1,47,1,47,1,47,3,47,784,8,47,1,47, + 1,47,1,47,1,47,5,47,790,8,47,10,47,12,47,793,9,47,1,48,3,48,796, + 8,48,1,48,1,48,1,48,3,48,801,8,48,1,48,1,48,1,48,1,48,1,48,3,48, + 808,8,48,1,48,3,48,811,8,48,1,48,1,48,3,48,815,8,48,1,48,1,48,3, + 48,819,8,48,1,48,3,48,822,8,48,1,48,1,48,1,48,1,48,3,48,828,8,48, + 3,48,830,8,48,1,48,3,48,833,8,48,1,48,1,48,3,48,837,8,48,1,48,1, + 48,3,48,841,8,48,1,48,3,48,844,8,48,3,48,846,8,48,3,48,848,8,48, + 1,49,1,49,1,49,3,49,853,8,49,1,50,1,50,1,50,1,50,1,50,1,50,1,50, + 1,50,1,50,3,50,864,8,50,1,51,1,51,1,51,3,51,869,8,51,1,51,1,51,3, + 51,873,8,51,1,51,1,51,1,51,1,51,3,51,879,8,51,1,52,1,52,1,52,3,52, + 884,8,52,1,53,1,53,1,53,5,53,889,8,53,10,53,12,53,892,9,53,1,54, + 1,54,3,54,896,8,54,1,54,1,54,3,54,900,8,54,1,54,1,54,3,54,904,8, + 54,1,55,1,55,1,55,1,55,3,55,910,8,55,3,55,912,8,55,1,56,1,56,1,56, + 5,56,917,8,56,10,56,12,56,920,9,56,1,57,1,57,1,57,1,57,1,58,3,58, + 927,8,58,1,58,3,58,930,8,58,1,58,3,58,933,8,58,1,59,1,59,1,59,1, + 59,1,60,1,60,1,60,1,60,1,61,1,61,1,61,1,61,1,61,1,61,1,62,1,62,1, + 62,1,63,1,63,1,63,1,63,1,63,1,63,3,63,958,8,63,1,64,1,64,1,64,1, + 64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,3,64,972,8,64,1,65,1, + 65,1,65,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,5,66,986,8, + 66,10,66,12,66,989,9,66,1,66,3,66,992,8,66,1,66,1,66,1,66,1,66,1, + 66,1,66,1,66,5,66,1001,8,66,10,66,12,66,1004,9,66,1,66,3,66,1007, + 8,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,5,66,1016,8,66,10,66,12, + 66,1019,9,66,1,66,3,66,1022,8,66,1,66,1,66,1,66,1,66,1,66,3,66,1029, + 8,66,1,66,1,66,1,66,1,66,4,66,1035,8,66,11,66,12,66,1036,1,66,3, + 66,1040,8,66,1,66,1,66,1,66,3,66,1045,8,66,1,66,5,66,1048,8,66,10, + 66,12,66,1051,9,66,1,67,1,67,4,67,1055,8,67,11,67,12,67,1056,1,67, + 3,67,1060,8,67,1,68,1,68,1,68,5,68,1065,8,68,10,68,12,68,1068,9, + 68,1,68,3,68,1071,8,68,1,69,1,69,1,69,5,69,1076,8,69,10,69,12,69, + 1079,9,69,1,69,3,69,1082,8,69,1,70,1,70,1,70,1,70,1,70,3,70,1089, + 8,70,1,71,1,71,1,71,3,71,1094,8,71,1,71,1,71,1,71,1,71,1,71,4,71, + 1101,8,71,11,71,12,71,1102,1,71,1,71,3,71,1107,8,71,1,71,1,71,1, 71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1, 71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1, - 71,1,71,3,71,1074,8,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1, + 71,1,71,1,71,3,71,1140,8,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1, 71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1, 71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1, - 71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1122, - 8,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, - 1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, - 1,71,3,71,1150,8,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, - 1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1170,8,71,1,71, - 1,71,1,71,1,71,3,71,1176,8,71,1,71,3,71,1179,8,71,1,71,3,71,1182, - 8,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1192,8,71,1,71, - 1,71,1,71,1,71,3,71,1198,8,71,1,71,3,71,1201,8,71,1,71,3,71,1204, - 8,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1212,8,71,1,71,1,71,1,71, - 1,71,1,71,1,71,3,71,1220,8,71,1,71,3,71,1223,8,71,1,71,1,71,3,71, - 1227,8,71,1,71,3,71,1230,8,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, - 1,71,1,71,1,71,1,71,1,71,3,71,1244,8,71,1,71,1,71,1,71,1,71,1,71, - 1,71,3,71,1252,8,71,1,71,1,71,1,71,1,71,5,71,1258,8,71,10,71,12, - 71,1261,9,71,1,71,3,71,1264,8,71,1,71,1,71,1,71,1,71,1,71,1,71,1, - 71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1283,8, - 71,1,71,1,71,1,71,3,71,1288,8,71,1,71,1,71,1,71,1,71,1,71,1,71,1, - 71,1,71,1,71,3,71,1299,8,71,1,71,1,71,1,71,1,71,3,71,1305,8,71,1, - 71,1,71,1,71,1,71,1,71,3,71,1312,8,71,1,71,1,71,1,71,1,71,1,71,1, - 71,1,71,1,71,1,71,1,71,3,71,1324,8,71,1,71,1,71,3,71,1328,8,71,1, - 71,3,71,1331,8,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1340,8, - 71,1,71,1,71,1,71,1,71,3,71,1346,8,71,1,71,1,71,1,71,1,71,1,71,1, - 71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1362,8,71,1,71,1, + 71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,3, + 71,1188,8,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1, + 71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1, + 71,1,71,1,71,3,71,1216,8,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1, + 71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1, 71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1, - 71,1,71,1,71,1,71,1,71,3,71,1383,8,71,1,71,1,71,1,71,1,71,1,71,1, - 71,1,71,1,71,1,71,3,71,1394,8,71,1,71,1,71,3,71,1398,8,71,1,71,1, 71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1, - 71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1425,8, - 71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1433,8,71,5,71,1435,8,71,10, - 71,12,71,1438,9,71,1,72,1,72,1,72,1,72,5,72,1444,8,72,10,72,12,72, - 1447,9,72,1,72,3,72,1450,8,72,1,72,1,72,1,72,1,72,1,72,5,72,1457, - 8,72,10,72,12,72,1460,9,72,1,72,3,72,1463,8,72,1,72,1,72,3,72,1467, - 8,72,1,72,1,72,1,72,3,72,1472,8,72,1,72,1,72,1,72,1,72,5,72,1478, - 8,72,10,72,12,72,1481,9,72,1,72,3,72,1484,8,72,1,72,1,72,1,72,3, - 72,1489,8,72,1,73,1,73,1,73,5,73,1494,8,73,10,73,12,73,1497,9,73, - 1,74,1,74,1,74,1,74,1,75,1,75,1,75,1,75,1,75,1,75,3,75,1509,8,75, - 1,76,1,76,1,77,1,77,1,77,5,77,1516,8,77,10,77,12,77,1519,9,77,1, - 77,1,77,1,77,1,77,1,77,5,77,1526,8,77,10,77,12,77,1529,9,77,1,77, - 1,77,5,77,1533,8,77,10,77,12,77,1536,9,77,1,77,1,77,1,77,1,77,3, - 77,1542,8,77,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1, - 78,3,78,1555,8,78,1,79,1,79,1,79,5,79,1560,8,79,10,79,12,79,1563, - 9,79,1,79,3,79,1566,8,79,1,80,1,80,3,80,1570,8,80,1,80,1,80,1,80, - 3,80,1575,8,80,1,80,1,80,3,80,1579,8,80,1,80,3,80,1582,8,80,1,80, - 1,80,1,80,1,80,1,80,1,80,1,80,1,80,3,80,1592,8,80,1,81,1,81,1,81, - 1,81,5,81,1598,8,81,10,81,12,81,1601,9,81,1,81,1,81,1,82,1,82,1, - 82,1,82,3,82,1609,8,82,1,82,3,82,1612,8,82,1,83,1,83,1,83,5,83,1617, - 8,83,10,83,12,83,1620,9,83,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1, - 84,1,84,1,84,1,84,1,84,1,84,3,84,1635,8,84,1,84,1,84,1,84,1,84,1, - 84,1,84,1,84,1,84,1,84,1,84,3,84,1647,8,84,1,84,3,84,1650,8,84,5, - 84,1652,8,84,10,84,12,84,1655,9,84,1,85,1,85,1,85,5,85,1660,8,85, - 10,85,12,85,1663,9,85,1,85,3,85,1666,8,85,1,86,1,86,1,86,1,86,1, - 86,1,86,1,86,1,86,1,87,1,87,1,87,1,87,1,87,3,87,1681,8,87,1,88,1, - 88,1,88,1,88,5,88,1687,8,88,10,88,12,88,1690,9,88,1,88,1,88,1,89, - 1,89,1,89,3,89,1697,8,89,1,89,1,89,1,90,1,90,1,90,3,90,1704,8,90, - 1,90,1,90,1,91,1,91,1,91,5,91,1711,8,91,10,91,12,91,1714,9,91,1, - 91,3,91,1717,8,91,1,92,1,92,1,93,1,93,1,93,1,93,1,93,1,93,3,93,1727, - 8,93,3,93,1729,8,93,1,94,3,94,1732,8,94,1,94,1,94,1,94,1,94,1,94, - 1,94,3,94,1740,8,94,1,95,1,95,1,95,3,95,1745,8,95,1,96,1,96,1,97, - 1,97,1,98,1,98,1,99,1,99,3,99,1755,8,99,1,100,1,100,1,100,3,100, - 1760,8,100,1,101,1,101,1,101,1,101,1,102,1,102,1,102,1,102,1,103, - 1,103,3,103,1772,8,103,1,104,1,104,5,104,1776,8,104,10,104,12,104, - 1779,9,104,1,104,1,104,1,105,1,105,1,105,1,105,1,105,3,105,1788, - 8,105,1,106,1,106,5,106,1792,8,106,10,106,12,106,1795,9,106,1,106, - 1,106,1,107,1,107,1,107,1,107,1,107,3,107,1804,8,107,1,107,0,3,94, - 142,168,108,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36, + 71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1, + 71,1,71,1,71,3,71,1280,8,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1288, + 8,71,1,71,1,71,1,71,1,71,3,71,1294,8,71,1,71,3,71,1297,8,71,1,71, + 3,71,1300,8,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1308,8,71,1,71, + 1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1318,8,71,1,71,1,71,1,71, + 1,71,3,71,1324,8,71,1,71,3,71,1327,8,71,1,71,3,71,1330,8,71,1,71, + 1,71,1,71,1,71,1,71,1,71,3,71,1338,8,71,1,71,1,71,1,71,1,71,1,71, + 1,71,3,71,1346,8,71,1,71,3,71,1349,8,71,1,71,1,71,3,71,1353,8,71, + 1,71,3,71,1356,8,71,1,71,1,71,1,71,3,71,1361,8,71,1,71,1,71,1,71, + 1,71,1,71,1,71,1,71,3,71,1370,8,71,1,71,1,71,1,71,1,71,1,71,1,71, + 1,71,1,71,1,71,1,71,3,71,1382,8,71,1,71,1,71,1,71,1,71,1,71,1,71, + 3,71,1390,8,71,1,71,1,71,1,71,1,71,5,71,1396,8,71,10,71,12,71,1399, + 9,71,1,71,3,71,1402,8,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, + 1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1420,8,71,1,71,1,71, + 3,71,1424,8,71,1,71,1,71,1,71,3,71,1429,8,71,1,71,1,71,1,71,1,71, + 1,71,1,71,1,71,1,71,1,71,3,71,1440,8,71,1,71,1,71,1,71,1,71,3,71, + 1446,8,71,1,71,1,71,1,71,1,71,1,71,3,71,1453,8,71,1,71,1,71,1,71, + 1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1465,8,71,1,71,1,71,3,71, + 1469,8,71,1,71,3,71,1472,8,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, + 3,71,1481,8,71,1,71,1,71,1,71,1,71,3,71,1487,8,71,1,71,1,71,1,71, + 1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1503, + 8,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, + 1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1524,8,71,1,71,1,71,1,71, + 1,71,1,71,1,71,1,71,1,71,1,71,3,71,1535,8,71,1,71,1,71,3,71,1539, + 8,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, + 1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71, + 1,71,1,71,1,71,3,71,1569,8,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71, + 1577,8,71,5,71,1579,8,71,10,71,12,71,1582,9,71,1,72,1,72,1,72,1, + 72,5,72,1588,8,72,10,72,12,72,1591,9,72,1,72,3,72,1594,8,72,1,72, + 1,72,1,72,1,72,1,72,5,72,1601,8,72,10,72,12,72,1604,9,72,1,72,3, + 72,1607,8,72,1,72,1,72,3,72,1611,8,72,1,72,1,72,1,72,3,72,1616,8, + 72,1,72,1,72,1,72,1,72,5,72,1622,8,72,10,72,12,72,1625,9,72,1,72, + 3,72,1628,8,72,1,72,1,72,1,72,3,72,1633,8,72,1,73,1,73,1,73,5,73, + 1638,8,73,10,73,12,73,1641,9,73,1,74,1,74,1,74,1,74,1,75,1,75,1, + 75,1,75,1,75,1,75,3,75,1653,8,75,1,76,1,76,1,77,1,77,1,77,5,77,1660, + 8,77,10,77,12,77,1663,9,77,1,77,1,77,1,77,1,77,1,77,5,77,1670,8, + 77,10,77,12,77,1673,9,77,1,77,1,77,5,77,1677,8,77,10,77,12,77,1680, + 9,77,1,77,1,77,1,77,1,77,3,77,1686,8,77,1,78,1,78,1,78,1,78,1,78, + 1,78,1,78,1,78,1,78,1,78,1,78,3,78,1699,8,78,1,79,1,79,1,79,5,79, + 1704,8,79,10,79,12,79,1707,9,79,1,79,3,79,1710,8,79,1,80,1,80,3, + 80,1714,8,80,1,80,1,80,1,80,3,80,1719,8,80,1,80,1,80,3,80,1723,8, + 80,1,80,3,80,1726,8,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,3, + 80,1736,8,80,1,81,1,81,1,81,1,81,5,81,1742,8,81,10,81,12,81,1745, + 9,81,1,81,1,81,1,82,1,82,1,82,1,82,3,82,1753,8,82,1,82,3,82,1756, + 8,82,1,83,1,83,1,83,5,83,1761,8,83,10,83,12,83,1764,9,83,1,84,1, + 84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,3,84,1779, + 8,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,3,84,1789,8,84,1,84, + 1,84,1,84,1,84,1,84,1,84,3,84,1797,8,84,1,84,1,84,1,84,1,84,1,84, + 1,84,1,84,1,84,3,84,1807,8,84,1,84,3,84,1810,8,84,5,84,1812,8,84, + 10,84,12,84,1815,9,84,1,85,1,85,4,85,1819,8,85,11,85,12,85,1820, + 1,86,1,86,1,86,1,86,1,86,1,86,1,87,1,87,1,87,5,87,1832,8,87,10,87, + 12,87,1835,9,87,1,87,3,87,1838,8,87,1,88,1,88,1,88,1,88,1,88,1,88, + 1,88,1,88,1,88,1,88,1,88,1,88,1,88,5,88,1853,8,88,10,88,12,88,1856, + 9,88,1,89,1,89,1,89,1,89,1,89,3,89,1863,8,89,1,90,1,90,1,90,1,90, + 5,90,1869,8,90,10,90,12,90,1872,9,90,1,90,1,90,1,91,1,91,1,91,3, + 91,1879,8,91,1,91,1,91,1,92,1,92,1,92,3,92,1886,8,92,1,92,1,92,1, + 93,1,93,1,93,5,93,1893,8,93,10,93,12,93,1896,9,93,1,93,3,93,1899, + 8,93,1,94,1,94,1,95,1,95,1,95,1,95,1,95,1,95,3,95,1909,8,95,3,95, + 1911,8,95,1,96,3,96,1914,8,96,1,96,1,96,1,96,1,96,1,96,1,96,3,96, + 1922,8,96,1,97,1,97,1,97,3,97,1927,8,97,1,98,1,98,1,99,1,99,1,100, + 1,100,1,101,1,101,3,101,1937,8,101,1,102,1,102,1,102,3,102,1942, + 8,102,1,103,1,103,1,103,1,103,1,104,1,104,1,104,1,104,1,105,1,105, + 3,105,1954,8,105,1,106,1,106,5,106,1958,8,106,10,106,12,106,1961, + 9,106,1,106,1,106,1,107,1,107,1,107,1,107,1,107,3,107,1970,8,107, + 1,108,1,108,5,108,1974,8,108,10,108,12,108,1977,9,108,1,108,1,108, + 1,109,1,109,1,109,1,109,1,109,3,109,1986,8,109,1,109,0,4,94,132, + 142,168,110,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36, 38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80, 82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,118, 120,122,124,126,128,130,132,134,136,138,140,142,144,146,148,150, 152,154,156,158,160,162,164,166,168,170,172,174,176,178,180,182, 184,186,188,190,192,194,196,198,200,202,204,206,208,210,212,214, - 0,18,2,0,34,34,39,39,2,0,19,19,86,86,2,0,49,49,58,58,3,0,1,1,4,4, - 8,8,4,0,1,1,3,4,8,8,92,92,2,0,58,58,85,85,2,0,1,1,4,4,2,0,70,70, - 135,135,2,0,7,7,23,24,2,0,33,33,56,56,2,0,81,81,88,88,3,0,10,10, - 57,57,103,103,2,0,46,46,60,60,1,0,124,125,2,0,137,137,159,159,7, - 0,22,22,43,43,63,64,80,80,90,90,113,113,120,120,20,0,1,13,15,21, - 23,27,29,31,33,33,35,38,40,42,44,47,49,49,51,58,60,61,65,65,67,67, - 69,79,81,89,91,96,98,105,107,112,114,115,117,118,4,0,21,21,33,33, - 44,44,54,54,2046,0,219,1,0,0,0,2,226,1,0,0,0,4,228,1,0,0,0,6,230, - 1,0,0,0,8,236,1,0,0,0,10,259,1,0,0,0,12,261,1,0,0,0,14,268,1,0,0, - 0,16,275,1,0,0,0,18,288,1,0,0,0,20,300,1,0,0,0,22,309,1,0,0,0,24, - 317,1,0,0,0,26,339,1,0,0,0,28,354,1,0,0,0,30,363,1,0,0,0,32,367, - 1,0,0,0,34,371,1,0,0,0,36,373,1,0,0,0,38,382,1,0,0,0,40,386,1,0, - 0,0,42,400,1,0,0,0,44,413,1,0,0,0,46,460,1,0,0,0,48,464,1,0,0,0, - 50,501,1,0,0,0,52,504,1,0,0,0,54,569,1,0,0,0,56,575,1,0,0,0,58,581, - 1,0,0,0,60,585,1,0,0,0,62,591,1,0,0,0,64,609,1,0,0,0,66,612,1,0, - 0,0,68,615,1,0,0,0,70,631,1,0,0,0,72,639,1,0,0,0,74,645,1,0,0,0, - 76,648,1,0,0,0,78,651,1,0,0,0,80,655,1,0,0,0,82,659,1,0,0,0,84,689, - 1,0,0,0,86,691,1,0,0,0,88,694,1,0,0,0,90,697,1,0,0,0,92,706,1,0, - 0,0,94,729,1,0,0,0,96,793,1,0,0,0,98,798,1,0,0,0,100,809,1,0,0,0, - 102,811,1,0,0,0,104,826,1,0,0,0,106,831,1,0,0,0,108,839,1,0,0,0, - 110,857,1,0,0,0,112,859,1,0,0,0,114,867,1,0,0,0,116,872,1,0,0,0, - 118,880,1,0,0,0,120,884,1,0,0,0,122,888,1,0,0,0,124,894,1,0,0,0, - 126,903,1,0,0,0,128,917,1,0,0,0,130,919,1,0,0,0,132,984,1,0,0,0, - 134,993,1,0,0,0,136,995,1,0,0,0,138,1006,1,0,0,0,140,1022,1,0,0, - 0,142,1298,1,0,0,0,144,1488,1,0,0,0,146,1490,1,0,0,0,148,1498,1, - 0,0,0,150,1508,1,0,0,0,152,1510,1,0,0,0,154,1541,1,0,0,0,156,1554, - 1,0,0,0,158,1556,1,0,0,0,160,1591,1,0,0,0,162,1593,1,0,0,0,164,1611, - 1,0,0,0,166,1613,1,0,0,0,168,1634,1,0,0,0,170,1656,1,0,0,0,172,1667, - 1,0,0,0,174,1680,1,0,0,0,176,1682,1,0,0,0,178,1693,1,0,0,0,180,1703, - 1,0,0,0,182,1707,1,0,0,0,184,1718,1,0,0,0,186,1728,1,0,0,0,188,1731, - 1,0,0,0,190,1744,1,0,0,0,192,1746,1,0,0,0,194,1748,1,0,0,0,196,1750, - 1,0,0,0,198,1754,1,0,0,0,200,1759,1,0,0,0,202,1761,1,0,0,0,204,1765, - 1,0,0,0,206,1771,1,0,0,0,208,1773,1,0,0,0,210,1787,1,0,0,0,212,1789, - 1,0,0,0,214,1803,1,0,0,0,216,218,3,2,1,0,217,216,1,0,0,0,218,221, - 1,0,0,0,219,217,1,0,0,0,219,220,1,0,0,0,220,222,1,0,0,0,221,219, - 1,0,0,0,222,223,5,0,0,1,223,1,1,0,0,0,224,227,3,6,3,0,225,227,3, - 10,5,0,226,224,1,0,0,0,226,225,1,0,0,0,227,3,1,0,0,0,228,229,3,142, - 71,0,229,5,1,0,0,0,230,231,5,59,0,0,231,234,3,200,100,0,232,233, - 5,133,0,0,233,235,3,4,2,0,234,232,1,0,0,0,234,235,1,0,0,0,235,7, - 1,0,0,0,236,241,3,166,83,0,237,238,5,135,0,0,238,240,3,166,83,0, - 239,237,1,0,0,0,240,243,1,0,0,0,241,239,1,0,0,0,241,242,1,0,0,0, - 242,245,1,0,0,0,243,241,1,0,0,0,244,246,5,135,0,0,245,244,1,0,0, - 0,245,246,1,0,0,0,246,9,1,0,0,0,247,260,3,12,6,0,248,260,3,14,7, - 0,249,260,3,18,9,0,250,260,3,20,10,0,251,260,3,22,11,0,252,260,3, - 26,13,0,253,260,3,24,12,0,254,260,3,28,14,0,255,260,3,30,15,0,256, - 260,3,36,18,0,257,260,3,32,16,0,258,260,3,34,17,0,259,247,1,0,0, - 0,259,248,1,0,0,0,259,249,1,0,0,0,259,250,1,0,0,0,259,251,1,0,0, - 0,259,252,1,0,0,0,259,253,1,0,0,0,259,254,1,0,0,0,259,255,1,0,0, - 0,259,256,1,0,0,0,259,257,1,0,0,0,259,258,1,0,0,0,260,11,1,0,0,0, - 261,263,5,84,0,0,262,264,3,4,2,0,263,262,1,0,0,0,263,264,1,0,0,0, - 264,266,1,0,0,0,265,267,5,170,0,0,266,265,1,0,0,0,266,267,1,0,0, - 0,267,13,1,0,0,0,268,270,5,97,0,0,269,271,3,4,2,0,270,269,1,0,0, - 0,270,271,1,0,0,0,271,273,1,0,0,0,272,274,5,170,0,0,273,272,1,0, - 0,0,273,274,1,0,0,0,274,15,1,0,0,0,275,284,5,14,0,0,276,277,5,149, - 0,0,277,280,3,200,100,0,278,279,5,134,0,0,279,281,3,200,100,0,280, - 278,1,0,0,0,280,281,1,0,0,0,281,282,1,0,0,0,282,283,5,169,0,0,283, - 285,1,0,0,0,284,276,1,0,0,0,284,285,1,0,0,0,285,286,1,0,0,0,286, - 287,3,36,18,0,287,17,1,0,0,0,288,289,5,106,0,0,289,293,3,36,18,0, - 290,292,3,16,8,0,291,290,1,0,0,0,292,295,1,0,0,0,293,291,1,0,0,0, - 293,294,1,0,0,0,294,298,1,0,0,0,295,293,1,0,0,0,296,297,5,32,0,0, - 297,299,3,36,18,0,298,296,1,0,0,0,298,299,1,0,0,0,299,19,1,0,0,0, - 300,301,5,45,0,0,301,302,5,149,0,0,302,303,3,4,2,0,303,304,5,169, - 0,0,304,307,3,10,5,0,305,306,5,26,0,0,306,308,3,10,5,0,307,305,1, - 0,0,0,307,308,1,0,0,0,308,21,1,0,0,0,309,310,5,116,0,0,310,311,5, - 149,0,0,311,312,3,4,2,0,312,313,5,169,0,0,313,315,3,10,5,0,314,316, - 5,170,0,0,315,314,1,0,0,0,315,316,1,0,0,0,316,23,1,0,0,0,317,318, - 5,36,0,0,318,322,5,149,0,0,319,323,3,6,3,0,320,323,3,30,15,0,321, - 323,3,4,2,0,322,319,1,0,0,0,322,320,1,0,0,0,322,321,1,0,0,0,322, - 323,1,0,0,0,323,324,1,0,0,0,324,326,5,170,0,0,325,327,3,4,2,0,326, - 325,1,0,0,0,326,327,1,0,0,0,327,328,1,0,0,0,328,332,5,170,0,0,329, - 333,3,6,3,0,330,333,3,30,15,0,331,333,3,4,2,0,332,329,1,0,0,0,332, - 330,1,0,0,0,332,331,1,0,0,0,332,333,1,0,0,0,333,334,1,0,0,0,334, - 335,5,169,0,0,335,337,3,10,5,0,336,338,5,170,0,0,337,336,1,0,0,0, - 337,338,1,0,0,0,338,25,1,0,0,0,339,340,5,36,0,0,340,341,5,149,0, - 0,341,342,5,59,0,0,342,345,3,200,100,0,343,344,5,135,0,0,344,346, - 3,200,100,0,345,343,1,0,0,0,345,346,1,0,0,0,346,347,1,0,0,0,347, - 348,5,47,0,0,348,349,3,4,2,0,349,350,5,169,0,0,350,352,3,10,5,0, - 351,353,5,170,0,0,352,351,1,0,0,0,352,353,1,0,0,0,353,27,1,0,0,0, - 354,355,7,0,0,0,355,356,3,200,100,0,356,358,5,149,0,0,357,359,3, - 8,4,0,358,357,1,0,0,0,358,359,1,0,0,0,359,360,1,0,0,0,360,361,5, - 169,0,0,361,362,3,36,18,0,362,29,1,0,0,0,363,364,3,4,2,0,364,365, - 5,133,0,0,365,366,3,4,2,0,366,31,1,0,0,0,367,369,3,4,2,0,368,370, - 5,170,0,0,369,368,1,0,0,0,369,370,1,0,0,0,370,33,1,0,0,0,371,372, - 5,170,0,0,372,35,1,0,0,0,373,377,5,147,0,0,374,376,3,2,1,0,375,374, - 1,0,0,0,376,379,1,0,0,0,377,375,1,0,0,0,377,378,1,0,0,0,378,380, - 1,0,0,0,379,377,1,0,0,0,380,381,5,167,0,0,381,37,1,0,0,0,382,383, - 3,4,2,0,383,384,5,134,0,0,384,385,3,4,2,0,385,39,1,0,0,0,386,391, - 3,38,19,0,387,388,5,135,0,0,388,390,3,38,19,0,389,387,1,0,0,0,390, - 393,1,0,0,0,391,389,1,0,0,0,391,392,1,0,0,0,392,395,1,0,0,0,393, - 391,1,0,0,0,394,396,5,135,0,0,395,394,1,0,0,0,395,396,1,0,0,0,396, - 41,1,0,0,0,397,401,3,48,24,0,398,401,3,52,26,0,399,401,3,154,77, - 0,400,397,1,0,0,0,400,398,1,0,0,0,400,399,1,0,0,0,401,403,1,0,0, - 0,402,404,5,170,0,0,403,402,1,0,0,0,403,404,1,0,0,0,404,405,1,0, - 0,0,405,406,5,0,0,1,406,43,1,0,0,0,407,414,3,52,26,0,408,409,5,149, - 0,0,409,410,3,48,24,0,410,411,5,169,0,0,411,414,1,0,0,0,412,414, - 3,204,102,0,413,407,1,0,0,0,413,408,1,0,0,0,413,412,1,0,0,0,414, - 45,1,0,0,0,415,416,5,28,0,0,416,419,5,1,0,0,417,418,5,11,0,0,418, - 420,5,65,0,0,419,417,1,0,0,0,419,420,1,0,0,0,420,461,1,0,0,0,421, - 424,5,28,0,0,422,423,5,11,0,0,423,425,5,65,0,0,424,422,1,0,0,0,424, - 425,1,0,0,0,425,461,1,0,0,0,426,427,5,109,0,0,427,430,5,1,0,0,428, - 429,5,11,0,0,429,431,5,65,0,0,430,428,1,0,0,0,430,431,1,0,0,0,431, - 461,1,0,0,0,432,433,5,109,0,0,433,436,5,25,0,0,434,435,5,11,0,0, - 435,437,5,65,0,0,436,434,1,0,0,0,436,437,1,0,0,0,437,461,1,0,0,0, - 438,441,5,109,0,0,439,440,5,11,0,0,440,442,5,65,0,0,441,439,1,0, - 0,0,441,442,1,0,0,0,442,461,1,0,0,0,443,444,5,50,0,0,444,447,5,1, - 0,0,445,446,5,11,0,0,446,448,5,65,0,0,447,445,1,0,0,0,447,448,1, - 0,0,0,448,461,1,0,0,0,449,450,5,50,0,0,450,453,5,25,0,0,451,452, - 5,11,0,0,452,454,5,65,0,0,453,451,1,0,0,0,453,454,1,0,0,0,454,461, - 1,0,0,0,455,458,5,50,0,0,456,457,5,11,0,0,457,459,5,65,0,0,458,456, - 1,0,0,0,458,459,1,0,0,0,459,461,1,0,0,0,460,415,1,0,0,0,460,421, - 1,0,0,0,460,426,1,0,0,0,460,432,1,0,0,0,460,438,1,0,0,0,460,443, - 1,0,0,0,460,449,1,0,0,0,460,455,1,0,0,0,461,462,1,0,0,0,462,463, - 3,44,22,0,463,47,1,0,0,0,464,468,3,44,22,0,465,467,3,46,23,0,466, - 465,1,0,0,0,467,470,1,0,0,0,468,466,1,0,0,0,468,469,1,0,0,0,469, - 472,1,0,0,0,470,468,1,0,0,0,471,473,3,50,25,0,472,471,1,0,0,0,472, - 473,1,0,0,0,473,49,1,0,0,0,474,475,5,61,0,0,475,477,3,142,71,0,476, - 478,5,158,0,0,477,476,1,0,0,0,477,478,1,0,0,0,478,481,1,0,0,0,479, - 480,5,135,0,0,480,482,3,142,71,0,481,479,1,0,0,0,481,482,1,0,0,0, - 482,485,1,0,0,0,483,484,5,118,0,0,484,486,5,98,0,0,485,483,1,0,0, - 0,485,486,1,0,0,0,486,502,1,0,0,0,487,488,5,61,0,0,488,490,3,142, - 71,0,489,491,5,158,0,0,490,489,1,0,0,0,490,491,1,0,0,0,491,494,1, - 0,0,0,492,493,5,118,0,0,493,495,5,98,0,0,494,492,1,0,0,0,494,495, - 1,0,0,0,495,496,1,0,0,0,496,497,5,70,0,0,497,498,3,142,71,0,498, - 502,1,0,0,0,499,500,5,70,0,0,500,502,3,142,71,0,501,474,1,0,0,0, - 501,487,1,0,0,0,501,499,1,0,0,0,502,51,1,0,0,0,503,505,3,54,27,0, - 504,503,1,0,0,0,504,505,1,0,0,0,505,506,1,0,0,0,506,508,5,91,0,0, - 507,509,5,25,0,0,508,507,1,0,0,0,508,509,1,0,0,0,509,511,1,0,0,0, - 510,512,3,56,28,0,511,510,1,0,0,0,511,512,1,0,0,0,512,513,1,0,0, - 0,513,515,3,138,69,0,514,516,3,58,29,0,515,514,1,0,0,0,515,516,1, - 0,0,0,516,518,1,0,0,0,517,519,3,60,30,0,518,517,1,0,0,0,518,519, - 1,0,0,0,519,521,1,0,0,0,520,522,3,64,32,0,521,520,1,0,0,0,521,522, - 1,0,0,0,522,524,1,0,0,0,523,525,3,66,33,0,524,523,1,0,0,0,524,525, - 1,0,0,0,525,530,1,0,0,0,526,528,5,111,0,0,527,526,1,0,0,0,527,528, - 1,0,0,0,528,529,1,0,0,0,529,531,3,102,51,0,530,527,1,0,0,0,530,531, - 1,0,0,0,531,533,1,0,0,0,532,534,3,68,34,0,533,532,1,0,0,0,533,534, - 1,0,0,0,534,537,1,0,0,0,535,536,5,118,0,0,536,538,7,1,0,0,537,535, - 1,0,0,0,537,538,1,0,0,0,538,541,1,0,0,0,539,540,5,118,0,0,540,542, - 5,102,0,0,541,539,1,0,0,0,541,542,1,0,0,0,542,544,1,0,0,0,543,545, - 3,74,37,0,544,543,1,0,0,0,544,545,1,0,0,0,545,547,1,0,0,0,546,548, - 3,76,38,0,547,546,1,0,0,0,547,548,1,0,0,0,548,551,1,0,0,0,549,550, - 5,111,0,0,550,552,3,102,51,0,551,549,1,0,0,0,551,552,1,0,0,0,552, - 554,1,0,0,0,553,555,3,62,31,0,554,553,1,0,0,0,554,555,1,0,0,0,555, - 557,1,0,0,0,556,558,3,78,39,0,557,556,1,0,0,0,557,558,1,0,0,0,558, - 560,1,0,0,0,559,561,3,82,41,0,560,559,1,0,0,0,560,561,1,0,0,0,561, - 564,1,0,0,0,562,565,3,84,42,0,563,565,3,86,43,0,564,562,1,0,0,0, - 564,563,1,0,0,0,564,565,1,0,0,0,565,567,1,0,0,0,566,568,3,88,44, - 0,567,566,1,0,0,0,567,568,1,0,0,0,568,53,1,0,0,0,569,571,5,118,0, - 0,570,572,5,82,0,0,571,570,1,0,0,0,571,572,1,0,0,0,572,573,1,0,0, - 0,573,574,3,158,79,0,574,55,1,0,0,0,575,576,5,101,0,0,576,579,5, - 125,0,0,577,578,5,118,0,0,578,580,5,98,0,0,579,577,1,0,0,0,579,580, - 1,0,0,0,580,57,1,0,0,0,581,582,5,37,0,0,582,583,3,94,47,0,583,59, - 1,0,0,0,584,586,7,2,0,0,585,584,1,0,0,0,585,586,1,0,0,0,586,587, - 1,0,0,0,587,588,5,5,0,0,588,589,5,53,0,0,589,590,3,136,68,0,590, - 61,1,0,0,0,591,592,5,117,0,0,592,593,3,200,100,0,593,594,5,6,0,0, - 594,595,5,149,0,0,595,596,3,116,58,0,596,606,5,169,0,0,597,598,5, - 135,0,0,598,599,3,200,100,0,599,600,5,6,0,0,600,601,5,149,0,0,601, - 602,3,116,58,0,602,603,5,169,0,0,603,605,1,0,0,0,604,597,1,0,0,0, - 605,608,1,0,0,0,606,604,1,0,0,0,606,607,1,0,0,0,607,63,1,0,0,0,608, - 606,1,0,0,0,609,610,5,78,0,0,610,611,3,142,71,0,611,65,1,0,0,0,612, - 613,5,115,0,0,613,614,3,142,71,0,614,67,1,0,0,0,615,616,5,40,0,0, - 616,629,5,11,0,0,617,618,7,1,0,0,618,619,5,149,0,0,619,620,3,136, - 68,0,620,621,5,169,0,0,621,630,1,0,0,0,622,623,5,41,0,0,623,624, - 5,93,0,0,624,625,5,149,0,0,625,626,3,70,35,0,626,627,5,169,0,0,627, - 630,1,0,0,0,628,630,3,136,68,0,629,617,1,0,0,0,629,622,1,0,0,0,629, - 628,1,0,0,0,630,69,1,0,0,0,631,636,3,72,36,0,632,633,5,135,0,0,633, - 635,3,72,36,0,634,632,1,0,0,0,635,638,1,0,0,0,636,634,1,0,0,0,636, - 637,1,0,0,0,637,71,1,0,0,0,638,636,1,0,0,0,639,641,5,149,0,0,640, - 642,3,136,68,0,641,640,1,0,0,0,641,642,1,0,0,0,642,643,1,0,0,0,643, - 644,5,169,0,0,644,73,1,0,0,0,645,646,5,42,0,0,646,647,3,142,71,0, - 647,75,1,0,0,0,648,649,5,79,0,0,649,650,3,142,71,0,650,77,1,0,0, - 0,651,652,5,73,0,0,652,653,5,11,0,0,653,654,3,106,53,0,654,79,1, - 0,0,0,655,656,5,73,0,0,656,657,5,11,0,0,657,658,3,136,68,0,658,81, - 1,0,0,0,659,660,5,61,0,0,660,661,3,104,52,0,661,662,5,11,0,0,662, - 663,3,136,68,0,663,83,1,0,0,0,664,665,5,61,0,0,665,667,3,142,71, - 0,666,668,5,158,0,0,667,666,1,0,0,0,667,668,1,0,0,0,668,671,1,0, - 0,0,669,670,5,135,0,0,670,672,3,142,71,0,671,669,1,0,0,0,671,672, - 1,0,0,0,672,675,1,0,0,0,673,674,5,118,0,0,674,676,5,98,0,0,675,673, - 1,0,0,0,675,676,1,0,0,0,676,690,1,0,0,0,677,678,5,61,0,0,678,680, - 3,142,71,0,679,681,5,158,0,0,680,679,1,0,0,0,680,681,1,0,0,0,681, - 684,1,0,0,0,682,683,5,118,0,0,683,685,5,98,0,0,684,682,1,0,0,0,684, - 685,1,0,0,0,685,686,1,0,0,0,686,687,5,70,0,0,687,688,3,142,71,0, - 688,690,1,0,0,0,689,664,1,0,0,0,689,677,1,0,0,0,690,85,1,0,0,0,691, - 692,5,70,0,0,692,693,3,142,71,0,693,87,1,0,0,0,694,695,5,94,0,0, - 695,696,3,112,56,0,696,89,1,0,0,0,697,698,5,112,0,0,698,703,3,92, - 46,0,699,700,5,135,0,0,700,702,3,92,46,0,701,699,1,0,0,0,702,705, - 1,0,0,0,703,701,1,0,0,0,703,704,1,0,0,0,704,91,1,0,0,0,705,703,1, - 0,0,0,706,707,5,149,0,0,707,712,3,142,71,0,708,709,5,135,0,0,709, - 711,3,142,71,0,710,708,1,0,0,0,711,714,1,0,0,0,712,710,1,0,0,0,712, - 713,1,0,0,0,713,715,1,0,0,0,714,712,1,0,0,0,715,716,5,169,0,0,716, - 93,1,0,0,0,717,718,6,47,-1,0,718,720,3,168,84,0,719,721,5,31,0,0, - 720,719,1,0,0,0,720,721,1,0,0,0,721,723,1,0,0,0,722,724,3,102,51, - 0,723,722,1,0,0,0,723,724,1,0,0,0,724,730,1,0,0,0,725,726,5,149, - 0,0,726,727,3,94,47,0,727,728,5,169,0,0,728,730,1,0,0,0,729,717, - 1,0,0,0,729,725,1,0,0,0,730,745,1,0,0,0,731,732,10,3,0,0,732,733, - 3,98,49,0,733,734,3,94,47,4,734,744,1,0,0,0,735,737,10,4,0,0,736, - 738,3,96,48,0,737,736,1,0,0,0,737,738,1,0,0,0,738,739,1,0,0,0,739, - 740,5,53,0,0,740,741,3,94,47,0,741,742,3,100,50,0,742,744,1,0,0, - 0,743,731,1,0,0,0,743,735,1,0,0,0,744,747,1,0,0,0,745,743,1,0,0, - 0,745,746,1,0,0,0,746,95,1,0,0,0,747,745,1,0,0,0,748,750,7,3,0,0, - 749,748,1,0,0,0,749,750,1,0,0,0,750,751,1,0,0,0,751,760,5,49,0,0, - 752,754,5,49,0,0,753,755,7,3,0,0,754,753,1,0,0,0,754,755,1,0,0,0, - 755,760,1,0,0,0,756,760,7,3,0,0,757,760,5,3,0,0,758,760,5,92,0,0, - 759,749,1,0,0,0,759,752,1,0,0,0,759,756,1,0,0,0,759,757,1,0,0,0, - 759,758,1,0,0,0,760,794,1,0,0,0,761,763,7,4,0,0,762,761,1,0,0,0, - 762,763,1,0,0,0,763,764,1,0,0,0,764,766,7,5,0,0,765,767,5,74,0,0, - 766,765,1,0,0,0,766,767,1,0,0,0,767,776,1,0,0,0,768,770,7,5,0,0, - 769,771,5,74,0,0,770,769,1,0,0,0,770,771,1,0,0,0,771,773,1,0,0,0, - 772,774,7,4,0,0,773,772,1,0,0,0,773,774,1,0,0,0,774,776,1,0,0,0, - 775,762,1,0,0,0,775,768,1,0,0,0,776,794,1,0,0,0,777,779,7,6,0,0, - 778,777,1,0,0,0,778,779,1,0,0,0,779,780,1,0,0,0,780,782,5,38,0,0, - 781,783,5,74,0,0,782,781,1,0,0,0,782,783,1,0,0,0,783,792,1,0,0,0, - 784,786,5,38,0,0,785,787,5,74,0,0,786,785,1,0,0,0,786,787,1,0,0, - 0,787,789,1,0,0,0,788,790,7,6,0,0,789,788,1,0,0,0,789,790,1,0,0, - 0,790,792,1,0,0,0,791,778,1,0,0,0,791,784,1,0,0,0,792,794,1,0,0, - 0,793,759,1,0,0,0,793,775,1,0,0,0,793,791,1,0,0,0,794,97,1,0,0,0, - 795,796,5,18,0,0,796,799,5,53,0,0,797,799,5,135,0,0,798,795,1,0, - 0,0,798,797,1,0,0,0,799,99,1,0,0,0,800,801,5,71,0,0,801,810,3,136, - 68,0,802,803,5,111,0,0,803,804,5,149,0,0,804,805,3,136,68,0,805, - 806,5,169,0,0,806,810,1,0,0,0,807,808,5,111,0,0,808,810,3,136,68, - 0,809,800,1,0,0,0,809,802,1,0,0,0,809,807,1,0,0,0,810,101,1,0,0, - 0,811,812,5,89,0,0,812,814,3,110,55,0,813,815,5,158,0,0,814,813, - 1,0,0,0,814,815,1,0,0,0,815,818,1,0,0,0,816,817,5,70,0,0,817,819, - 3,110,55,0,818,816,1,0,0,0,818,819,1,0,0,0,819,824,1,0,0,0,820,821, - 5,149,0,0,821,822,3,200,100,0,822,823,5,169,0,0,823,825,1,0,0,0, - 824,820,1,0,0,0,824,825,1,0,0,0,825,103,1,0,0,0,826,829,3,142,71, - 0,827,828,7,7,0,0,828,830,3,142,71,0,829,827,1,0,0,0,829,830,1,0, - 0,0,830,105,1,0,0,0,831,836,3,108,54,0,832,833,5,135,0,0,833,835, - 3,108,54,0,834,832,1,0,0,0,835,838,1,0,0,0,836,834,1,0,0,0,836,837, - 1,0,0,0,837,107,1,0,0,0,838,836,1,0,0,0,839,841,3,142,71,0,840,842, - 7,8,0,0,841,840,1,0,0,0,841,842,1,0,0,0,842,845,1,0,0,0,843,844, - 5,69,0,0,844,846,7,9,0,0,845,843,1,0,0,0,845,846,1,0,0,0,846,849, - 1,0,0,0,847,848,5,16,0,0,848,850,5,127,0,0,849,847,1,0,0,0,849,850, - 1,0,0,0,850,109,1,0,0,0,851,858,3,204,102,0,852,855,3,188,94,0,853, - 854,5,171,0,0,854,856,3,188,94,0,855,853,1,0,0,0,855,856,1,0,0,0, - 856,858,1,0,0,0,857,851,1,0,0,0,857,852,1,0,0,0,858,111,1,0,0,0, - 859,864,3,114,57,0,860,861,5,135,0,0,861,863,3,114,57,0,862,860, - 1,0,0,0,863,866,1,0,0,0,864,862,1,0,0,0,864,865,1,0,0,0,865,113, - 1,0,0,0,866,864,1,0,0,0,867,868,3,200,100,0,868,869,5,141,0,0,869, - 870,3,190,95,0,870,115,1,0,0,0,871,873,3,118,59,0,872,871,1,0,0, - 0,872,873,1,0,0,0,873,875,1,0,0,0,874,876,3,120,60,0,875,874,1,0, - 0,0,875,876,1,0,0,0,876,878,1,0,0,0,877,879,3,124,62,0,878,877,1, - 0,0,0,878,879,1,0,0,0,879,117,1,0,0,0,880,881,5,76,0,0,881,882,5, - 11,0,0,882,883,3,136,68,0,883,119,1,0,0,0,884,885,5,73,0,0,885,886, - 5,11,0,0,886,887,3,106,53,0,887,121,1,0,0,0,888,889,5,119,0,0,889, - 890,5,40,0,0,890,891,5,149,0,0,891,892,3,78,39,0,892,893,5,169,0, - 0,893,123,1,0,0,0,894,895,7,10,0,0,895,896,3,126,63,0,896,125,1, - 0,0,0,897,904,3,128,64,0,898,899,5,9,0,0,899,900,3,128,64,0,900, - 901,5,2,0,0,901,902,3,128,64,0,902,904,1,0,0,0,903,897,1,0,0,0,903, - 898,1,0,0,0,904,127,1,0,0,0,905,906,5,20,0,0,906,918,5,87,0,0,907, - 908,5,108,0,0,908,918,5,77,0,0,909,910,5,108,0,0,910,918,5,35,0, - 0,911,912,3,142,71,0,912,913,5,77,0,0,913,918,1,0,0,0,914,915,3, - 142,71,0,915,916,5,35,0,0,916,918,1,0,0,0,917,905,1,0,0,0,917,907, - 1,0,0,0,917,909,1,0,0,0,917,911,1,0,0,0,917,914,1,0,0,0,918,129, - 1,0,0,0,919,920,3,142,71,0,920,921,5,0,0,1,921,131,1,0,0,0,922,923, - 3,200,100,0,923,924,5,149,0,0,924,925,3,200,100,0,925,932,3,132, - 66,0,926,927,5,135,0,0,927,928,3,200,100,0,928,929,3,132,66,0,929, - 931,1,0,0,0,930,926,1,0,0,0,931,934,1,0,0,0,932,930,1,0,0,0,932, - 933,1,0,0,0,933,936,1,0,0,0,934,932,1,0,0,0,935,937,5,135,0,0,936, - 935,1,0,0,0,936,937,1,0,0,0,937,938,1,0,0,0,938,939,5,169,0,0,939, - 985,1,0,0,0,940,941,3,200,100,0,941,942,5,149,0,0,942,947,3,202, - 101,0,943,944,5,135,0,0,944,946,3,202,101,0,945,943,1,0,0,0,946, - 949,1,0,0,0,947,945,1,0,0,0,947,948,1,0,0,0,948,951,1,0,0,0,949, - 947,1,0,0,0,950,952,5,135,0,0,951,950,1,0,0,0,951,952,1,0,0,0,952, - 953,1,0,0,0,953,954,5,169,0,0,954,985,1,0,0,0,955,956,3,200,100, - 0,956,957,5,149,0,0,957,962,3,132,66,0,958,959,5,135,0,0,959,961, - 3,132,66,0,960,958,1,0,0,0,961,964,1,0,0,0,962,960,1,0,0,0,962,963, - 1,0,0,0,963,966,1,0,0,0,964,962,1,0,0,0,965,967,5,135,0,0,966,965, - 1,0,0,0,966,967,1,0,0,0,967,968,1,0,0,0,968,969,5,169,0,0,969,985, - 1,0,0,0,970,971,3,200,100,0,971,973,5,149,0,0,972,974,3,136,68,0, - 973,972,1,0,0,0,973,974,1,0,0,0,974,975,1,0,0,0,975,976,5,169,0, - 0,976,985,1,0,0,0,977,979,3,200,100,0,978,980,3,200,100,0,979,978, - 1,0,0,0,980,981,1,0,0,0,981,979,1,0,0,0,981,982,1,0,0,0,982,985, - 1,0,0,0,983,985,3,200,100,0,984,922,1,0,0,0,984,940,1,0,0,0,984, - 955,1,0,0,0,984,970,1,0,0,0,984,977,1,0,0,0,984,983,1,0,0,0,985, - 133,1,0,0,0,986,988,3,200,100,0,987,989,3,200,100,0,988,987,1,0, - 0,0,989,990,1,0,0,0,990,988,1,0,0,0,990,991,1,0,0,0,991,994,1,0, - 0,0,992,994,3,200,100,0,993,986,1,0,0,0,993,992,1,0,0,0,994,135, - 1,0,0,0,995,1000,3,142,71,0,996,997,5,135,0,0,997,999,3,142,71,0, - 998,996,1,0,0,0,999,1002,1,0,0,0,1000,998,1,0,0,0,1000,1001,1,0, - 0,0,1001,1004,1,0,0,0,1002,1000,1,0,0,0,1003,1005,5,135,0,0,1004, - 1003,1,0,0,0,1004,1005,1,0,0,0,1005,137,1,0,0,0,1006,1011,3,140, - 70,0,1007,1008,5,135,0,0,1008,1010,3,140,70,0,1009,1007,1,0,0,0, - 1010,1013,1,0,0,0,1011,1009,1,0,0,0,1011,1012,1,0,0,0,1012,1015, - 1,0,0,0,1013,1011,1,0,0,0,1014,1016,5,135,0,0,1015,1014,1,0,0,0, - 1015,1016,1,0,0,0,1016,139,1,0,0,0,1017,1018,3,200,100,0,1018,1019, - 5,134,0,0,1019,1020,3,142,71,0,1020,1023,1,0,0,0,1021,1023,3,142, - 71,0,1022,1017,1,0,0,0,1022,1021,1,0,0,0,1023,141,1,0,0,0,1024,1025, - 6,71,-1,0,1025,1027,5,12,0,0,1026,1028,3,142,71,0,1027,1026,1,0, - 0,0,1027,1028,1,0,0,0,1028,1034,1,0,0,0,1029,1030,5,114,0,0,1030, - 1031,3,142,71,0,1031,1032,5,96,0,0,1032,1033,3,142,71,0,1033,1035, - 1,0,0,0,1034,1029,1,0,0,0,1035,1036,1,0,0,0,1036,1034,1,0,0,0,1036, - 1037,1,0,0,0,1037,1040,1,0,0,0,1038,1039,5,26,0,0,1039,1041,3,142, - 71,0,1040,1038,1,0,0,0,1040,1041,1,0,0,0,1041,1042,1,0,0,0,1042, - 1043,5,27,0,0,1043,1299,1,0,0,0,1044,1045,5,13,0,0,1045,1046,5,149, - 0,0,1046,1047,3,142,71,0,1047,1048,5,6,0,0,1048,1049,3,132,66,0, - 1049,1050,5,169,0,0,1050,1299,1,0,0,0,1051,1052,5,107,0,0,1052,1053, - 5,149,0,0,1053,1054,3,142,71,0,1054,1055,5,6,0,0,1055,1056,3,132, - 66,0,1056,1057,5,169,0,0,1057,1299,1,0,0,0,1058,1059,5,21,0,0,1059, - 1299,5,127,0,0,1060,1061,5,51,0,0,1061,1299,5,127,0,0,1062,1063, - 5,51,0,0,1063,1064,3,142,71,0,1064,1065,3,192,96,0,1065,1299,1,0, - 0,0,1066,1067,5,95,0,0,1067,1068,5,149,0,0,1068,1069,3,142,71,0, - 1069,1070,5,37,0,0,1070,1073,3,142,71,0,1071,1072,5,36,0,0,1072, - 1074,3,142,71,0,1073,1071,1,0,0,0,1073,1074,1,0,0,0,1074,1075,1, - 0,0,0,1075,1076,5,169,0,0,1076,1299,1,0,0,0,1077,1078,5,99,0,0,1078, - 1299,5,127,0,0,1079,1080,5,104,0,0,1080,1081,5,149,0,0,1081,1082, - 7,11,0,0,1082,1083,3,206,103,0,1083,1084,5,37,0,0,1084,1085,3,142, - 71,0,1085,1086,5,169,0,0,1086,1299,1,0,0,0,1087,1088,5,17,0,0,1088, - 1089,5,149,0,0,1089,1090,5,127,0,0,1090,1299,5,169,0,0,1091,1092, - 5,17,0,0,1092,1093,5,149,0,0,1093,1094,3,136,68,0,1094,1095,5,169, - 0,0,1095,1299,1,0,0,0,1096,1097,5,17,0,0,1097,1098,5,149,0,0,1098, - 1099,5,129,0,0,1099,1100,5,29,0,0,1100,1101,5,149,0,0,1101,1102, - 3,8,4,0,1102,1103,5,169,0,0,1103,1104,5,83,0,0,1104,1105,5,149,0, - 0,1105,1106,3,146,73,0,1106,1107,5,169,0,0,1107,1108,5,169,0,0,1108, - 1122,1,0,0,0,1109,1110,5,149,0,0,1110,1111,5,129,0,0,1111,1112,5, - 29,0,0,1112,1113,5,149,0,0,1113,1114,3,8,4,0,1114,1115,5,169,0,0, - 1115,1116,5,83,0,0,1116,1117,5,149,0,0,1117,1118,3,146,73,0,1118, - 1119,5,169,0,0,1119,1120,5,169,0,0,1120,1122,1,0,0,0,1121,1096,1, - 0,0,0,1121,1109,1,0,0,0,1122,1299,1,0,0,0,1123,1124,5,17,0,0,1124, - 1125,5,149,0,0,1125,1126,5,129,0,0,1126,1127,5,29,0,0,1127,1128, - 5,149,0,0,1128,1129,3,8,4,0,1129,1130,5,169,0,0,1130,1131,5,169, - 0,0,1131,1299,1,0,0,0,1132,1133,5,17,0,0,1133,1134,5,149,0,0,1134, - 1135,5,129,0,0,1135,1136,5,83,0,0,1136,1137,5,149,0,0,1137,1138, - 3,146,73,0,1138,1139,5,169,0,0,1139,1140,5,169,0,0,1140,1150,1,0, - 0,0,1141,1142,5,149,0,0,1142,1143,5,129,0,0,1143,1144,5,83,0,0,1144, - 1145,5,149,0,0,1145,1146,3,146,73,0,1146,1147,5,169,0,0,1147,1148, - 5,169,0,0,1148,1150,1,0,0,0,1149,1132,1,0,0,0,1149,1141,1,0,0,0, - 1150,1299,1,0,0,0,1151,1152,5,17,0,0,1152,1153,5,149,0,0,1153,1154, - 5,129,0,0,1154,1299,5,169,0,0,1155,1156,5,129,0,0,1156,1157,5,17, - 0,0,1157,1158,5,149,0,0,1158,1159,5,127,0,0,1159,1299,5,169,0,0, - 1160,1161,5,129,0,0,1161,1162,5,17,0,0,1162,1163,5,149,0,0,1163, - 1164,3,136,68,0,1164,1165,5,169,0,0,1165,1299,1,0,0,0,1166,1167, - 3,200,100,0,1167,1169,5,149,0,0,1168,1170,3,136,68,0,1169,1168,1, - 0,0,0,1169,1170,1,0,0,0,1170,1171,1,0,0,0,1171,1172,5,169,0,0,1172, - 1181,1,0,0,0,1173,1175,5,149,0,0,1174,1176,5,25,0,0,1175,1174,1, - 0,0,0,1175,1176,1,0,0,0,1176,1178,1,0,0,0,1177,1179,3,136,68,0,1178, - 1177,1,0,0,0,1178,1179,1,0,0,0,1179,1180,1,0,0,0,1180,1182,5,169, - 0,0,1181,1173,1,0,0,0,1181,1182,1,0,0,0,1182,1183,1,0,0,0,1183,1184, - 5,75,0,0,1184,1185,5,149,0,0,1185,1186,3,116,58,0,1186,1187,5,169, - 0,0,1187,1299,1,0,0,0,1188,1189,3,200,100,0,1189,1191,5,149,0,0, - 1190,1192,3,136,68,0,1191,1190,1,0,0,0,1191,1192,1,0,0,0,1192,1193, - 1,0,0,0,1193,1194,5,169,0,0,1194,1203,1,0,0,0,1195,1197,5,149,0, - 0,1196,1198,5,25,0,0,1197,1196,1,0,0,0,1197,1198,1,0,0,0,1198,1200, - 1,0,0,0,1199,1201,3,136,68,0,1200,1199,1,0,0,0,1200,1201,1,0,0,0, - 1201,1202,1,0,0,0,1202,1204,5,169,0,0,1203,1195,1,0,0,0,1203,1204, - 1,0,0,0,1204,1205,1,0,0,0,1205,1206,5,75,0,0,1206,1207,3,200,100, - 0,1207,1299,1,0,0,0,1208,1209,3,200,100,0,1209,1211,5,149,0,0,1210, - 1212,3,136,68,0,1211,1210,1,0,0,0,1211,1212,1,0,0,0,1212,1213,1, - 0,0,0,1213,1214,5,169,0,0,1214,1215,3,122,61,0,1215,1299,1,0,0,0, - 1216,1222,3,200,100,0,1217,1219,5,149,0,0,1218,1220,3,136,68,0,1219, - 1218,1,0,0,0,1219,1220,1,0,0,0,1220,1221,1,0,0,0,1221,1223,5,169, - 0,0,1222,1217,1,0,0,0,1222,1223,1,0,0,0,1223,1224,1,0,0,0,1224,1226, - 5,149,0,0,1225,1227,5,25,0,0,1226,1225,1,0,0,0,1226,1227,1,0,0,0, - 1227,1229,1,0,0,0,1228,1230,3,136,68,0,1229,1228,1,0,0,0,1229,1230, - 1,0,0,0,1230,1231,1,0,0,0,1231,1232,5,169,0,0,1232,1299,1,0,0,0, - 1233,1299,3,154,77,0,1234,1299,3,208,104,0,1235,1299,3,190,95,0, - 1236,1237,5,137,0,0,1237,1299,3,142,71,24,1238,1239,5,67,0,0,1239, - 1299,3,142,71,17,1240,1241,3,180,90,0,1241,1242,5,139,0,0,1242,1244, - 1,0,0,0,1243,1240,1,0,0,0,1243,1244,1,0,0,0,1244,1245,1,0,0,0,1245, - 1251,5,129,0,0,1246,1247,5,29,0,0,1247,1248,5,149,0,0,1248,1249, - 3,8,4,0,1249,1250,5,169,0,0,1250,1252,1,0,0,0,1251,1246,1,0,0,0, - 1251,1252,1,0,0,0,1252,1299,1,0,0,0,1253,1254,5,55,0,0,1254,1259, - 3,200,100,0,1255,1256,5,135,0,0,1256,1258,3,200,100,0,1257,1255, - 1,0,0,0,1258,1261,1,0,0,0,1259,1257,1,0,0,0,1259,1260,1,0,0,0,1260, - 1263,1,0,0,0,1261,1259,1,0,0,0,1262,1264,5,135,0,0,1263,1262,1,0, - 0,0,1263,1264,1,0,0,0,1264,1265,1,0,0,0,1265,1266,5,134,0,0,1266, - 1267,3,142,71,10,1267,1299,1,0,0,0,1268,1269,5,149,0,0,1269,1270, - 3,48,24,0,1270,1271,5,169,0,0,1271,1299,1,0,0,0,1272,1273,5,149, - 0,0,1273,1274,3,142,71,0,1274,1275,5,169,0,0,1275,1299,1,0,0,0,1276, - 1277,5,149,0,0,1277,1278,3,136,68,0,1278,1279,5,169,0,0,1279,1299, - 1,0,0,0,1280,1282,5,148,0,0,1281,1283,3,136,68,0,1282,1281,1,0,0, - 0,1282,1283,1,0,0,0,1283,1284,1,0,0,0,1284,1299,5,168,0,0,1285,1287, - 5,147,0,0,1286,1288,3,40,20,0,1287,1286,1,0,0,0,1287,1288,1,0,0, - 0,1288,1289,1,0,0,0,1289,1299,5,167,0,0,1290,1299,3,144,72,0,1291, - 1292,3,200,100,0,1292,1293,5,133,0,0,1293,1294,3,142,71,3,1294,1299, - 1,0,0,0,1295,1296,5,144,0,0,1296,1299,5,125,0,0,1297,1299,3,164, - 82,0,1298,1024,1,0,0,0,1298,1044,1,0,0,0,1298,1051,1,0,0,0,1298, - 1058,1,0,0,0,1298,1060,1,0,0,0,1298,1062,1,0,0,0,1298,1066,1,0,0, - 0,1298,1077,1,0,0,0,1298,1079,1,0,0,0,1298,1087,1,0,0,0,1298,1091, - 1,0,0,0,1298,1121,1,0,0,0,1298,1123,1,0,0,0,1298,1149,1,0,0,0,1298, - 1151,1,0,0,0,1298,1155,1,0,0,0,1298,1160,1,0,0,0,1298,1166,1,0,0, - 0,1298,1188,1,0,0,0,1298,1208,1,0,0,0,1298,1216,1,0,0,0,1298,1233, - 1,0,0,0,1298,1234,1,0,0,0,1298,1235,1,0,0,0,1298,1236,1,0,0,0,1298, - 1238,1,0,0,0,1298,1243,1,0,0,0,1298,1253,1,0,0,0,1298,1268,1,0,0, - 0,1298,1272,1,0,0,0,1298,1276,1,0,0,0,1298,1280,1,0,0,0,1298,1285, - 1,0,0,0,1298,1290,1,0,0,0,1298,1291,1,0,0,0,1298,1295,1,0,0,0,1298, - 1297,1,0,0,0,1299,1436,1,0,0,0,1300,1304,10,23,0,0,1301,1305,5,129, - 0,0,1302,1305,5,171,0,0,1303,1305,5,158,0,0,1304,1301,1,0,0,0,1304, - 1302,1,0,0,0,1304,1303,1,0,0,0,1305,1306,1,0,0,0,1306,1435,3,142, - 71,24,1307,1311,10,22,0,0,1308,1312,5,159,0,0,1309,1312,5,137,0, - 0,1310,1312,5,136,0,0,1311,1308,1,0,0,0,1311,1309,1,0,0,0,1311,1310, - 1,0,0,0,1312,1313,1,0,0,0,1313,1435,3,142,71,23,1314,1339,10,21, - 0,0,1315,1340,5,140,0,0,1316,1340,5,141,0,0,1317,1340,5,153,0,0, - 1318,1340,5,150,0,0,1319,1340,5,151,0,0,1320,1340,5,142,0,0,1321, - 1340,5,143,0,0,1322,1324,5,67,0,0,1323,1322,1,0,0,0,1323,1324,1, - 0,0,0,1324,1325,1,0,0,0,1325,1327,5,47,0,0,1326,1328,5,15,0,0,1327, - 1326,1,0,0,0,1327,1328,1,0,0,0,1328,1340,1,0,0,0,1329,1331,5,67, - 0,0,1330,1329,1,0,0,0,1330,1331,1,0,0,0,1331,1332,1,0,0,0,1332,1340, - 7,12,0,0,1333,1340,5,165,0,0,1334,1340,5,166,0,0,1335,1340,5,155, - 0,0,1336,1340,5,145,0,0,1337,1340,5,146,0,0,1338,1340,5,154,0,0, - 1339,1315,1,0,0,0,1339,1316,1,0,0,0,1339,1317,1,0,0,0,1339,1318, - 1,0,0,0,1339,1319,1,0,0,0,1339,1320,1,0,0,0,1339,1321,1,0,0,0,1339, - 1323,1,0,0,0,1339,1330,1,0,0,0,1339,1333,1,0,0,0,1339,1334,1,0,0, - 0,1339,1335,1,0,0,0,1339,1336,1,0,0,0,1339,1337,1,0,0,0,1339,1338, - 1,0,0,0,1340,1341,1,0,0,0,1341,1435,3,142,71,22,1342,1343,10,19, - 0,0,1343,1345,5,52,0,0,1344,1346,5,67,0,0,1345,1344,1,0,0,0,1345, - 1346,1,0,0,0,1346,1347,1,0,0,0,1347,1348,5,25,0,0,1348,1349,5,37, - 0,0,1349,1435,3,142,71,20,1350,1351,10,18,0,0,1351,1352,5,157,0, - 0,1352,1435,3,142,71,19,1353,1354,10,16,0,0,1354,1355,5,2,0,0,1355, - 1435,3,142,71,17,1356,1357,10,15,0,0,1357,1358,5,72,0,0,1358,1435, - 3,142,71,16,1359,1361,10,14,0,0,1360,1362,5,67,0,0,1361,1360,1,0, - 0,0,1361,1362,1,0,0,0,1362,1363,1,0,0,0,1363,1364,5,9,0,0,1364,1365, - 3,142,71,0,1365,1366,5,2,0,0,1366,1367,3,142,71,15,1367,1435,1,0, - 0,0,1368,1369,10,13,0,0,1369,1370,5,160,0,0,1370,1371,3,142,71,0, - 1371,1372,5,134,0,0,1372,1373,3,142,71,13,1373,1435,1,0,0,0,1374, - 1375,10,37,0,0,1375,1376,5,149,0,0,1376,1377,3,48,24,0,1377,1378, - 5,169,0,0,1378,1435,1,0,0,0,1379,1380,10,36,0,0,1380,1382,5,149, - 0,0,1381,1383,3,136,68,0,1382,1381,1,0,0,0,1382,1383,1,0,0,0,1383, - 1384,1,0,0,0,1384,1435,5,169,0,0,1385,1386,10,32,0,0,1386,1387,5, - 148,0,0,1387,1388,3,142,71,0,1388,1389,5,168,0,0,1389,1435,1,0,0, - 0,1390,1391,10,31,0,0,1391,1393,5,148,0,0,1392,1394,3,142,71,0,1393, - 1392,1,0,0,0,1393,1394,1,0,0,0,1394,1395,1,0,0,0,1395,1397,5,134, - 0,0,1396,1398,3,142,71,0,1397,1396,1,0,0,0,1397,1398,1,0,0,0,1398, - 1399,1,0,0,0,1399,1435,5,168,0,0,1400,1401,10,30,0,0,1401,1402,5, - 139,0,0,1402,1435,5,125,0,0,1403,1404,10,29,0,0,1404,1405,5,139, - 0,0,1405,1435,3,200,100,0,1406,1407,10,28,0,0,1407,1408,5,156,0, - 0,1408,1409,5,148,0,0,1409,1410,3,142,71,0,1410,1411,5,168,0,0,1411, - 1435,1,0,0,0,1412,1413,10,27,0,0,1413,1414,5,156,0,0,1414,1435,5, - 125,0,0,1415,1416,10,26,0,0,1416,1417,5,156,0,0,1417,1435,3,200, - 100,0,1418,1419,10,25,0,0,1419,1420,5,132,0,0,1420,1435,3,134,67, - 0,1421,1422,10,20,0,0,1422,1424,5,52,0,0,1423,1425,5,67,0,0,1424, - 1423,1,0,0,0,1424,1425,1,0,0,0,1425,1426,1,0,0,0,1426,1435,5,68, - 0,0,1427,1432,10,12,0,0,1428,1429,5,6,0,0,1429,1433,3,200,100,0, - 1430,1431,5,6,0,0,1431,1433,5,127,0,0,1432,1428,1,0,0,0,1432,1430, - 1,0,0,0,1433,1435,1,0,0,0,1434,1300,1,0,0,0,1434,1307,1,0,0,0,1434, - 1314,1,0,0,0,1434,1342,1,0,0,0,1434,1350,1,0,0,0,1434,1353,1,0,0, - 0,1434,1356,1,0,0,0,1434,1359,1,0,0,0,1434,1368,1,0,0,0,1434,1374, - 1,0,0,0,1434,1379,1,0,0,0,1434,1385,1,0,0,0,1434,1390,1,0,0,0,1434, - 1400,1,0,0,0,1434,1403,1,0,0,0,1434,1406,1,0,0,0,1434,1412,1,0,0, - 0,1434,1415,1,0,0,0,1434,1418,1,0,0,0,1434,1421,1,0,0,0,1434,1427, - 1,0,0,0,1435,1438,1,0,0,0,1436,1434,1,0,0,0,1436,1437,1,0,0,0,1437, - 143,1,0,0,0,1438,1436,1,0,0,0,1439,1440,5,149,0,0,1440,1445,3,200, - 100,0,1441,1442,5,135,0,0,1442,1444,3,200,100,0,1443,1441,1,0,0, - 0,1444,1447,1,0,0,0,1445,1443,1,0,0,0,1445,1446,1,0,0,0,1446,1449, - 1,0,0,0,1447,1445,1,0,0,0,1448,1450,5,135,0,0,1449,1448,1,0,0,0, - 1449,1450,1,0,0,0,1450,1451,1,0,0,0,1451,1452,5,169,0,0,1452,1467, - 1,0,0,0,1453,1458,3,200,100,0,1454,1455,5,135,0,0,1455,1457,3,200, - 100,0,1456,1454,1,0,0,0,1457,1460,1,0,0,0,1458,1456,1,0,0,0,1458, - 1459,1,0,0,0,1459,1462,1,0,0,0,1460,1458,1,0,0,0,1461,1463,5,135, - 0,0,1462,1461,1,0,0,0,1462,1463,1,0,0,0,1463,1467,1,0,0,0,1464,1465, - 5,149,0,0,1465,1467,5,169,0,0,1466,1439,1,0,0,0,1466,1453,1,0,0, - 0,1466,1464,1,0,0,0,1467,1468,1,0,0,0,1468,1471,5,128,0,0,1469,1472, - 3,142,71,0,1470,1472,3,36,18,0,1471,1469,1,0,0,0,1471,1470,1,0,0, - 0,1472,1489,1,0,0,0,1473,1474,5,55,0,0,1474,1479,3,200,100,0,1475, - 1476,5,135,0,0,1476,1478,3,200,100,0,1477,1475,1,0,0,0,1478,1481, - 1,0,0,0,1479,1477,1,0,0,0,1479,1480,1,0,0,0,1480,1483,1,0,0,0,1481, - 1479,1,0,0,0,1482,1484,5,135,0,0,1483,1482,1,0,0,0,1483,1484,1,0, - 0,0,1484,1485,1,0,0,0,1485,1486,5,134,0,0,1486,1487,3,142,71,0,1487, - 1489,1,0,0,0,1488,1466,1,0,0,0,1488,1473,1,0,0,0,1489,145,1,0,0, - 0,1490,1495,3,148,74,0,1491,1492,5,135,0,0,1492,1494,3,148,74,0, - 1493,1491,1,0,0,0,1494,1497,1,0,0,0,1495,1493,1,0,0,0,1495,1496, - 1,0,0,0,1496,147,1,0,0,0,1497,1495,1,0,0,0,1498,1499,3,142,71,0, - 1499,1500,5,6,0,0,1500,1501,3,200,100,0,1501,149,1,0,0,0,1502,1509, - 3,154,77,0,1503,1509,3,152,76,0,1504,1505,5,147,0,0,1505,1506,3, - 142,71,0,1506,1507,5,167,0,0,1507,1509,1,0,0,0,1508,1502,1,0,0,0, - 1508,1503,1,0,0,0,1508,1504,1,0,0,0,1509,151,1,0,0,0,1510,1511,5, - 183,0,0,1511,153,1,0,0,0,1512,1513,5,151,0,0,1513,1517,3,200,100, - 0,1514,1516,3,156,78,0,1515,1514,1,0,0,0,1516,1519,1,0,0,0,1517, - 1515,1,0,0,0,1517,1518,1,0,0,0,1518,1520,1,0,0,0,1519,1517,1,0,0, - 0,1520,1521,5,172,0,0,1521,1542,1,0,0,0,1522,1523,5,151,0,0,1523, - 1527,3,200,100,0,1524,1526,3,156,78,0,1525,1524,1,0,0,0,1526,1529, - 1,0,0,0,1527,1525,1,0,0,0,1527,1528,1,0,0,0,1528,1530,1,0,0,0,1529, - 1527,1,0,0,0,1530,1534,5,143,0,0,1531,1533,3,150,75,0,1532,1531, - 1,0,0,0,1533,1536,1,0,0,0,1534,1532,1,0,0,0,1534,1535,1,0,0,0,1535, - 1537,1,0,0,0,1536,1534,1,0,0,0,1537,1538,5,152,0,0,1538,1539,3,200, - 100,0,1539,1540,5,143,0,0,1540,1542,1,0,0,0,1541,1512,1,0,0,0,1541, - 1522,1,0,0,0,1542,155,1,0,0,0,1543,1544,3,200,100,0,1544,1545,5, - 141,0,0,1545,1546,3,206,103,0,1546,1555,1,0,0,0,1547,1548,3,200, - 100,0,1548,1549,5,141,0,0,1549,1550,5,147,0,0,1550,1551,3,142,71, - 0,1551,1552,5,167,0,0,1552,1555,1,0,0,0,1553,1555,3,200,100,0,1554, - 1543,1,0,0,0,1554,1547,1,0,0,0,1554,1553,1,0,0,0,1555,157,1,0,0, - 0,1556,1561,3,160,80,0,1557,1558,5,135,0,0,1558,1560,3,160,80,0, - 1559,1557,1,0,0,0,1560,1563,1,0,0,0,1561,1559,1,0,0,0,1561,1562, - 1,0,0,0,1562,1565,1,0,0,0,1563,1561,1,0,0,0,1564,1566,5,135,0,0, - 1565,1564,1,0,0,0,1565,1566,1,0,0,0,1566,159,1,0,0,0,1567,1569,3, - 200,100,0,1568,1570,3,162,81,0,1569,1568,1,0,0,0,1569,1570,1,0,0, - 0,1570,1574,1,0,0,0,1571,1572,5,111,0,0,1572,1573,5,54,0,0,1573, - 1575,3,162,81,0,1574,1571,1,0,0,0,1574,1575,1,0,0,0,1575,1576,1, - 0,0,0,1576,1581,5,6,0,0,1577,1579,5,67,0,0,1578,1577,1,0,0,0,1578, - 1579,1,0,0,0,1579,1580,1,0,0,0,1580,1582,5,62,0,0,1581,1578,1,0, - 0,0,1581,1582,1,0,0,0,1582,1583,1,0,0,0,1583,1584,5,149,0,0,1584, - 1585,3,48,24,0,1585,1586,5,169,0,0,1586,1592,1,0,0,0,1587,1588,3, - 142,71,0,1588,1589,5,6,0,0,1589,1590,3,200,100,0,1590,1592,1,0,0, - 0,1591,1567,1,0,0,0,1591,1587,1,0,0,0,1592,161,1,0,0,0,1593,1594, - 5,149,0,0,1594,1599,3,200,100,0,1595,1596,5,135,0,0,1596,1598,3, - 200,100,0,1597,1595,1,0,0,0,1598,1601,1,0,0,0,1599,1597,1,0,0,0, - 1599,1600,1,0,0,0,1600,1602,1,0,0,0,1601,1599,1,0,0,0,1602,1603, - 5,169,0,0,1603,163,1,0,0,0,1604,1612,3,204,102,0,1605,1606,3,180, - 90,0,1606,1607,5,139,0,0,1607,1609,1,0,0,0,1608,1605,1,0,0,0,1608, - 1609,1,0,0,0,1609,1610,1,0,0,0,1610,1612,3,166,83,0,1611,1604,1, - 0,0,0,1611,1608,1,0,0,0,1612,165,1,0,0,0,1613,1618,3,200,100,0,1614, - 1615,5,139,0,0,1615,1617,3,200,100,0,1616,1614,1,0,0,0,1617,1620, - 1,0,0,0,1618,1616,1,0,0,0,1618,1619,1,0,0,0,1619,167,1,0,0,0,1620, - 1618,1,0,0,0,1621,1622,6,84,-1,0,1622,1635,3,180,90,0,1623,1635, - 3,178,89,0,1624,1625,5,149,0,0,1625,1626,3,48,24,0,1626,1627,5,169, - 0,0,1627,1635,1,0,0,0,1628,1629,5,149,0,0,1629,1630,3,90,45,0,1630, - 1631,5,169,0,0,1631,1635,1,0,0,0,1632,1635,3,154,77,0,1633,1635, - 3,204,102,0,1634,1621,1,0,0,0,1634,1623,1,0,0,0,1634,1624,1,0,0, - 0,1634,1628,1,0,0,0,1634,1632,1,0,0,0,1634,1633,1,0,0,0,1635,1653, - 1,0,0,0,1636,1637,10,4,0,0,1637,1638,5,110,0,0,1638,1639,5,149,0, - 0,1639,1640,3,170,85,0,1640,1641,5,169,0,0,1641,1652,1,0,0,0,1642, - 1646,10,3,0,0,1643,1647,3,198,99,0,1644,1645,5,6,0,0,1645,1647,3, - 200,100,0,1646,1643,1,0,0,0,1646,1644,1,0,0,0,1647,1649,1,0,0,0, - 1648,1650,3,176,88,0,1649,1648,1,0,0,0,1649,1650,1,0,0,0,1650,1652, - 1,0,0,0,1651,1636,1,0,0,0,1651,1642,1,0,0,0,1652,1655,1,0,0,0,1653, - 1651,1,0,0,0,1653,1654,1,0,0,0,1654,169,1,0,0,0,1655,1653,1,0,0, - 0,1656,1661,3,172,86,0,1657,1658,5,135,0,0,1658,1660,3,172,86,0, - 1659,1657,1,0,0,0,1660,1663,1,0,0,0,1661,1659,1,0,0,0,1661,1662, - 1,0,0,0,1662,1665,1,0,0,0,1663,1661,1,0,0,0,1664,1666,5,135,0,0, - 1665,1664,1,0,0,0,1665,1666,1,0,0,0,1666,171,1,0,0,0,1667,1668,3, - 174,87,0,1668,1669,5,36,0,0,1669,1670,3,174,87,0,1670,1671,5,47, - 0,0,1671,1672,5,149,0,0,1672,1673,3,136,68,0,1673,1674,5,169,0,0, - 1674,173,1,0,0,0,1675,1676,5,149,0,0,1676,1677,3,136,68,0,1677,1678, - 5,169,0,0,1678,1681,1,0,0,0,1679,1681,3,142,71,0,1680,1675,1,0,0, - 0,1680,1679,1,0,0,0,1681,175,1,0,0,0,1682,1683,5,149,0,0,1683,1688, - 3,200,100,0,1684,1685,5,135,0,0,1685,1687,3,200,100,0,1686,1684, - 1,0,0,0,1687,1690,1,0,0,0,1688,1686,1,0,0,0,1688,1689,1,0,0,0,1689, - 1691,1,0,0,0,1690,1688,1,0,0,0,1691,1692,5,169,0,0,1692,177,1,0, - 0,0,1693,1694,3,200,100,0,1694,1696,5,149,0,0,1695,1697,3,182,91, - 0,1696,1695,1,0,0,0,1696,1697,1,0,0,0,1697,1698,1,0,0,0,1698,1699, - 5,169,0,0,1699,179,1,0,0,0,1700,1701,3,184,92,0,1701,1702,5,139, - 0,0,1702,1704,1,0,0,0,1703,1700,1,0,0,0,1703,1704,1,0,0,0,1704,1705, - 1,0,0,0,1705,1706,3,166,83,0,1706,181,1,0,0,0,1707,1712,3,142,71, - 0,1708,1709,5,135,0,0,1709,1711,3,142,71,0,1710,1708,1,0,0,0,1711, - 1714,1,0,0,0,1712,1710,1,0,0,0,1712,1713,1,0,0,0,1713,1716,1,0,0, - 0,1714,1712,1,0,0,0,1715,1717,5,135,0,0,1716,1715,1,0,0,0,1716,1717, - 1,0,0,0,1717,183,1,0,0,0,1718,1719,3,200,100,0,1719,185,1,0,0,0, - 1720,1729,5,123,0,0,1721,1722,5,139,0,0,1722,1729,7,13,0,0,1723, - 1724,5,125,0,0,1724,1726,5,139,0,0,1725,1727,7,13,0,0,1726,1725, - 1,0,0,0,1726,1727,1,0,0,0,1727,1729,1,0,0,0,1728,1720,1,0,0,0,1728, - 1721,1,0,0,0,1728,1723,1,0,0,0,1729,187,1,0,0,0,1730,1732,7,14,0, - 0,1731,1730,1,0,0,0,1731,1732,1,0,0,0,1732,1739,1,0,0,0,1733,1740, - 3,186,93,0,1734,1740,5,124,0,0,1735,1740,5,125,0,0,1736,1740,5,126, - 0,0,1737,1740,5,48,0,0,1738,1740,5,66,0,0,1739,1733,1,0,0,0,1739, - 1734,1,0,0,0,1739,1735,1,0,0,0,1739,1736,1,0,0,0,1739,1737,1,0,0, - 0,1739,1738,1,0,0,0,1740,189,1,0,0,0,1741,1745,3,188,94,0,1742,1745, - 5,127,0,0,1743,1745,5,68,0,0,1744,1741,1,0,0,0,1744,1742,1,0,0,0, - 1744,1743,1,0,0,0,1745,191,1,0,0,0,1746,1747,7,15,0,0,1747,193,1, - 0,0,0,1748,1749,7,16,0,0,1749,195,1,0,0,0,1750,1751,7,17,0,0,1751, - 197,1,0,0,0,1752,1755,5,122,0,0,1753,1755,3,196,98,0,1754,1752,1, - 0,0,0,1754,1753,1,0,0,0,1755,199,1,0,0,0,1756,1760,5,122,0,0,1757, - 1760,3,192,96,0,1758,1760,3,194,97,0,1759,1756,1,0,0,0,1759,1757, - 1,0,0,0,1759,1758,1,0,0,0,1760,201,1,0,0,0,1761,1762,3,206,103,0, - 1762,1763,5,141,0,0,1763,1764,3,188,94,0,1764,203,1,0,0,0,1765,1766, - 5,147,0,0,1766,1767,3,142,71,0,1767,1768,5,167,0,0,1768,205,1,0, - 0,0,1769,1772,5,127,0,0,1770,1772,3,208,104,0,1771,1769,1,0,0,0, - 1771,1770,1,0,0,0,1772,207,1,0,0,0,1773,1777,5,162,0,0,1774,1776, - 3,210,105,0,1775,1774,1,0,0,0,1776,1779,1,0,0,0,1777,1775,1,0,0, - 0,1777,1778,1,0,0,0,1778,1780,1,0,0,0,1779,1777,1,0,0,0,1780,1781, - 5,164,0,0,1781,209,1,0,0,0,1782,1783,5,178,0,0,1783,1784,3,142,71, - 0,1784,1785,5,167,0,0,1785,1788,1,0,0,0,1786,1788,5,177,0,0,1787, - 1782,1,0,0,0,1787,1786,1,0,0,0,1788,211,1,0,0,0,1789,1793,5,163, - 0,0,1790,1792,3,214,107,0,1791,1790,1,0,0,0,1792,1795,1,0,0,0,1793, - 1791,1,0,0,0,1793,1794,1,0,0,0,1794,1796,1,0,0,0,1795,1793,1,0,0, - 0,1796,1797,5,0,0,1,1797,213,1,0,0,0,1798,1799,5,180,0,0,1799,1800, - 3,142,71,0,1800,1801,5,167,0,0,1801,1804,1,0,0,0,1802,1804,5,179, - 0,0,1803,1798,1,0,0,0,1803,1802,1,0,0,0,1804,215,1,0,0,0,229,219, - 226,234,241,245,259,263,266,270,273,280,284,293,298,307,315,322, - 326,332,337,345,352,358,369,377,391,395,400,403,413,419,424,430, - 436,441,447,453,458,460,468,472,477,481,485,490,494,501,504,508, - 511,515,518,521,524,527,530,533,537,541,544,547,551,554,557,560, - 564,567,571,579,585,606,629,636,641,667,671,675,680,684,689,703, - 712,720,723,729,737,743,745,749,754,759,762,766,770,773,775,778, - 782,786,789,791,793,798,809,814,818,824,829,836,841,845,849,855, - 857,864,872,875,878,903,917,932,936,947,951,962,966,973,981,984, - 990,993,1000,1004,1011,1015,1022,1027,1036,1040,1073,1121,1149,1169, - 1175,1178,1181,1191,1197,1200,1203,1211,1219,1222,1226,1229,1243, - 1251,1259,1263,1282,1287,1298,1304,1311,1323,1327,1330,1339,1345, - 1361,1382,1393,1397,1424,1432,1434,1436,1445,1449,1458,1462,1466, - 1471,1479,1483,1488,1495,1508,1517,1527,1534,1541,1554,1561,1565, - 1569,1574,1578,1581,1591,1599,1608,1611,1618,1634,1646,1649,1651, - 1653,1661,1665,1680,1688,1696,1703,1712,1716,1726,1728,1731,1739, - 1744,1754,1759,1771,1777,1787,1793,1803 + 216,218,0,18,2,0,35,35,40,40,2,0,19,19,92,92,2,0,52,52,61,61,3,0, + 1,1,4,4,8,8,2,0,3,3,98,98,4,0,1,1,3,4,8,8,98,98,2,0,61,61,91,91, + 2,0,74,74,141,141,2,0,7,7,23,24,2,0,34,34,59,59,2,0,87,87,94,94, + 3,0,10,10,60,60,109,109,2,0,47,47,63,63,1,0,130,131,2,0,143,143, + 165,165,7,0,22,22,44,44,66,67,86,86,96,96,119,119,126,126,20,0,1, + 13,15,21,23,27,29,32,34,34,36,39,41,43,45,50,52,52,54,61,63,64,68, + 69,71,71,73,85,87,95,97,102,104,111,113,118,120,121,123,124,4,0, + 21,21,34,34,45,45,57,57,2257,0,223,1,0,0,0,2,230,1,0,0,0,4,232,1, + 0,0,0,6,234,1,0,0,0,8,240,1,0,0,0,10,263,1,0,0,0,12,265,1,0,0,0, + 14,272,1,0,0,0,16,279,1,0,0,0,18,292,1,0,0,0,20,304,1,0,0,0,22,313, + 1,0,0,0,24,321,1,0,0,0,26,343,1,0,0,0,28,358,1,0,0,0,30,367,1,0, + 0,0,32,371,1,0,0,0,34,375,1,0,0,0,36,377,1,0,0,0,38,386,1,0,0,0, + 40,390,1,0,0,0,42,404,1,0,0,0,44,422,1,0,0,0,46,469,1,0,0,0,48,473, + 1,0,0,0,50,513,1,0,0,0,52,516,1,0,0,0,54,581,1,0,0,0,56,587,1,0, + 0,0,58,593,1,0,0,0,60,597,1,0,0,0,62,603,1,0,0,0,64,621,1,0,0,0, + 66,624,1,0,0,0,68,627,1,0,0,0,70,644,1,0,0,0,72,652,1,0,0,0,74,658, + 1,0,0,0,76,661,1,0,0,0,78,664,1,0,0,0,80,668,1,0,0,0,82,672,1,0, + 0,0,84,702,1,0,0,0,86,704,1,0,0,0,88,707,1,0,0,0,90,710,1,0,0,0, + 92,719,1,0,0,0,94,742,1,0,0,0,96,847,1,0,0,0,98,852,1,0,0,0,100, + 863,1,0,0,0,102,865,1,0,0,0,104,880,1,0,0,0,106,885,1,0,0,0,108, + 893,1,0,0,0,110,911,1,0,0,0,112,913,1,0,0,0,114,921,1,0,0,0,116, + 926,1,0,0,0,118,934,1,0,0,0,120,938,1,0,0,0,122,942,1,0,0,0,124, + 948,1,0,0,0,126,957,1,0,0,0,128,971,1,0,0,0,130,973,1,0,0,0,132, + 1039,1,0,0,0,134,1059,1,0,0,0,136,1061,1,0,0,0,138,1072,1,0,0,0, + 140,1088,1,0,0,0,142,1439,1,0,0,0,144,1632,1,0,0,0,146,1634,1,0, + 0,0,148,1642,1,0,0,0,150,1652,1,0,0,0,152,1654,1,0,0,0,154,1685, + 1,0,0,0,156,1698,1,0,0,0,158,1700,1,0,0,0,160,1735,1,0,0,0,162,1737, + 1,0,0,0,164,1755,1,0,0,0,166,1757,1,0,0,0,168,1778,1,0,0,0,170,1816, + 1,0,0,0,172,1822,1,0,0,0,174,1828,1,0,0,0,176,1839,1,0,0,0,178,1862, + 1,0,0,0,180,1864,1,0,0,0,182,1875,1,0,0,0,184,1885,1,0,0,0,186,1889, + 1,0,0,0,188,1900,1,0,0,0,190,1910,1,0,0,0,192,1913,1,0,0,0,194,1926, + 1,0,0,0,196,1928,1,0,0,0,198,1930,1,0,0,0,200,1932,1,0,0,0,202,1936, + 1,0,0,0,204,1941,1,0,0,0,206,1943,1,0,0,0,208,1947,1,0,0,0,210,1953, + 1,0,0,0,212,1955,1,0,0,0,214,1969,1,0,0,0,216,1971,1,0,0,0,218,1985, + 1,0,0,0,220,222,3,2,1,0,221,220,1,0,0,0,222,225,1,0,0,0,223,221, + 1,0,0,0,223,224,1,0,0,0,224,226,1,0,0,0,225,223,1,0,0,0,226,227, + 5,0,0,1,227,1,1,0,0,0,228,231,3,6,3,0,229,231,3,10,5,0,230,228,1, + 0,0,0,230,229,1,0,0,0,231,3,1,0,0,0,232,233,3,142,71,0,233,5,1,0, + 0,0,234,235,5,62,0,0,235,238,3,204,102,0,236,237,5,139,0,0,237,239, + 3,4,2,0,238,236,1,0,0,0,238,239,1,0,0,0,239,7,1,0,0,0,240,245,3, + 166,83,0,241,242,5,141,0,0,242,244,3,166,83,0,243,241,1,0,0,0,244, + 247,1,0,0,0,245,243,1,0,0,0,245,246,1,0,0,0,246,249,1,0,0,0,247, + 245,1,0,0,0,248,250,5,141,0,0,249,248,1,0,0,0,249,250,1,0,0,0,250, + 9,1,0,0,0,251,264,3,12,6,0,252,264,3,14,7,0,253,264,3,18,9,0,254, + 264,3,20,10,0,255,264,3,22,11,0,256,264,3,26,13,0,257,264,3,24,12, + 0,258,264,3,28,14,0,259,264,3,30,15,0,260,264,3,36,18,0,261,264, + 3,32,16,0,262,264,3,34,17,0,263,251,1,0,0,0,263,252,1,0,0,0,263, + 253,1,0,0,0,263,254,1,0,0,0,263,255,1,0,0,0,263,256,1,0,0,0,263, + 257,1,0,0,0,263,258,1,0,0,0,263,259,1,0,0,0,263,260,1,0,0,0,263, + 261,1,0,0,0,263,262,1,0,0,0,264,11,1,0,0,0,265,267,5,90,0,0,266, + 268,3,4,2,0,267,266,1,0,0,0,267,268,1,0,0,0,268,270,1,0,0,0,269, + 271,5,176,0,0,270,269,1,0,0,0,270,271,1,0,0,0,271,13,1,0,0,0,272, + 274,5,103,0,0,273,275,3,4,2,0,274,273,1,0,0,0,274,275,1,0,0,0,275, + 277,1,0,0,0,276,278,5,176,0,0,277,276,1,0,0,0,277,278,1,0,0,0,278, + 15,1,0,0,0,279,288,5,14,0,0,280,281,5,155,0,0,281,284,3,204,102, + 0,282,283,5,140,0,0,283,285,3,204,102,0,284,282,1,0,0,0,284,285, + 1,0,0,0,285,286,1,0,0,0,286,287,5,175,0,0,287,289,1,0,0,0,288,280, + 1,0,0,0,288,289,1,0,0,0,289,290,1,0,0,0,290,291,3,36,18,0,291,17, + 1,0,0,0,292,293,5,112,0,0,293,297,3,36,18,0,294,296,3,16,8,0,295, + 294,1,0,0,0,296,299,1,0,0,0,297,295,1,0,0,0,297,298,1,0,0,0,298, + 302,1,0,0,0,299,297,1,0,0,0,300,301,5,33,0,0,301,303,3,36,18,0,302, + 300,1,0,0,0,302,303,1,0,0,0,303,19,1,0,0,0,304,305,5,46,0,0,305, + 306,5,155,0,0,306,307,3,4,2,0,307,308,5,175,0,0,308,311,3,10,5,0, + 309,310,5,26,0,0,310,312,3,10,5,0,311,309,1,0,0,0,311,312,1,0,0, + 0,312,21,1,0,0,0,313,314,5,122,0,0,314,315,5,155,0,0,315,316,3,4, + 2,0,316,317,5,175,0,0,317,319,3,10,5,0,318,320,5,176,0,0,319,318, + 1,0,0,0,319,320,1,0,0,0,320,23,1,0,0,0,321,322,5,37,0,0,322,326, + 5,155,0,0,323,327,3,6,3,0,324,327,3,30,15,0,325,327,3,4,2,0,326, + 323,1,0,0,0,326,324,1,0,0,0,326,325,1,0,0,0,326,327,1,0,0,0,327, + 328,1,0,0,0,328,330,5,176,0,0,329,331,3,4,2,0,330,329,1,0,0,0,330, + 331,1,0,0,0,331,332,1,0,0,0,332,336,5,176,0,0,333,337,3,6,3,0,334, + 337,3,30,15,0,335,337,3,4,2,0,336,333,1,0,0,0,336,334,1,0,0,0,336, + 335,1,0,0,0,336,337,1,0,0,0,337,338,1,0,0,0,338,339,5,175,0,0,339, + 341,3,10,5,0,340,342,5,176,0,0,341,340,1,0,0,0,341,342,1,0,0,0,342, + 25,1,0,0,0,343,344,5,37,0,0,344,345,5,155,0,0,345,346,5,62,0,0,346, + 349,3,204,102,0,347,348,5,141,0,0,348,350,3,204,102,0,349,347,1, + 0,0,0,349,350,1,0,0,0,350,351,1,0,0,0,351,352,5,50,0,0,352,353,3, + 4,2,0,353,354,5,175,0,0,354,356,3,10,5,0,355,357,5,176,0,0,356,355, + 1,0,0,0,356,357,1,0,0,0,357,27,1,0,0,0,358,359,7,0,0,0,359,360,3, + 204,102,0,360,362,5,155,0,0,361,363,3,8,4,0,362,361,1,0,0,0,362, + 363,1,0,0,0,363,364,1,0,0,0,364,365,5,175,0,0,365,366,3,36,18,0, + 366,29,1,0,0,0,367,368,3,4,2,0,368,369,5,139,0,0,369,370,3,4,2,0, + 370,31,1,0,0,0,371,373,3,4,2,0,372,374,5,176,0,0,373,372,1,0,0,0, + 373,374,1,0,0,0,374,33,1,0,0,0,375,376,5,176,0,0,376,35,1,0,0,0, + 377,381,5,153,0,0,378,380,3,2,1,0,379,378,1,0,0,0,380,383,1,0,0, + 0,381,379,1,0,0,0,381,382,1,0,0,0,382,384,1,0,0,0,383,381,1,0,0, + 0,384,385,5,173,0,0,385,37,1,0,0,0,386,387,3,4,2,0,387,388,5,140, + 0,0,388,389,3,4,2,0,389,39,1,0,0,0,390,395,3,38,19,0,391,392,5,141, + 0,0,392,394,3,38,19,0,393,391,1,0,0,0,394,397,1,0,0,0,395,393,1, + 0,0,0,395,396,1,0,0,0,396,399,1,0,0,0,397,395,1,0,0,0,398,400,5, + 141,0,0,399,398,1,0,0,0,399,400,1,0,0,0,400,41,1,0,0,0,401,405,3, + 48,24,0,402,405,3,52,26,0,403,405,3,154,77,0,404,401,1,0,0,0,404, + 402,1,0,0,0,404,403,1,0,0,0,405,407,1,0,0,0,406,408,5,176,0,0,407, + 406,1,0,0,0,407,408,1,0,0,0,408,409,1,0,0,0,409,410,5,0,0,1,410, + 43,1,0,0,0,411,423,3,52,26,0,412,413,3,54,27,0,413,414,5,155,0,0, + 414,415,3,48,24,0,415,416,5,175,0,0,416,423,1,0,0,0,417,418,5,155, + 0,0,418,419,3,48,24,0,419,420,5,175,0,0,420,423,1,0,0,0,421,423, + 3,208,104,0,422,411,1,0,0,0,422,412,1,0,0,0,422,417,1,0,0,0,422, + 421,1,0,0,0,423,45,1,0,0,0,424,425,5,28,0,0,425,428,5,1,0,0,426, + 427,5,11,0,0,427,429,5,68,0,0,428,426,1,0,0,0,428,429,1,0,0,0,429, + 470,1,0,0,0,430,433,5,28,0,0,431,432,5,11,0,0,432,434,5,68,0,0,433, + 431,1,0,0,0,433,434,1,0,0,0,434,470,1,0,0,0,435,436,5,115,0,0,436, + 439,5,1,0,0,437,438,5,11,0,0,438,440,5,68,0,0,439,437,1,0,0,0,439, + 440,1,0,0,0,440,470,1,0,0,0,441,442,5,115,0,0,442,445,5,25,0,0,443, + 444,5,11,0,0,444,446,5,68,0,0,445,443,1,0,0,0,445,446,1,0,0,0,446, + 470,1,0,0,0,447,450,5,115,0,0,448,449,5,11,0,0,449,451,5,68,0,0, + 450,448,1,0,0,0,450,451,1,0,0,0,451,470,1,0,0,0,452,453,5,53,0,0, + 453,456,5,1,0,0,454,455,5,11,0,0,455,457,5,68,0,0,456,454,1,0,0, + 0,456,457,1,0,0,0,457,470,1,0,0,0,458,459,5,53,0,0,459,462,5,25, + 0,0,460,461,5,11,0,0,461,463,5,68,0,0,462,460,1,0,0,0,462,463,1, + 0,0,0,463,470,1,0,0,0,464,467,5,53,0,0,465,466,5,11,0,0,466,468, + 5,68,0,0,467,465,1,0,0,0,467,468,1,0,0,0,468,470,1,0,0,0,469,424, + 1,0,0,0,469,430,1,0,0,0,469,435,1,0,0,0,469,441,1,0,0,0,469,447, + 1,0,0,0,469,452,1,0,0,0,469,458,1,0,0,0,469,464,1,0,0,0,470,471, + 1,0,0,0,471,472,3,44,22,0,472,47,1,0,0,0,473,477,3,44,22,0,474,476, + 3,46,23,0,475,474,1,0,0,0,476,479,1,0,0,0,477,475,1,0,0,0,477,478, + 1,0,0,0,478,481,1,0,0,0,479,477,1,0,0,0,480,482,3,78,39,0,481,480, + 1,0,0,0,481,482,1,0,0,0,482,484,1,0,0,0,483,485,3,50,25,0,484,483, + 1,0,0,0,484,485,1,0,0,0,485,49,1,0,0,0,486,487,5,64,0,0,487,489, + 3,142,71,0,488,490,5,164,0,0,489,488,1,0,0,0,489,490,1,0,0,0,490, + 493,1,0,0,0,491,492,5,141,0,0,492,494,3,142,71,0,493,491,1,0,0,0, + 493,494,1,0,0,0,494,497,1,0,0,0,495,496,5,124,0,0,496,498,5,104, + 0,0,497,495,1,0,0,0,497,498,1,0,0,0,498,514,1,0,0,0,499,500,5,64, + 0,0,500,502,3,142,71,0,501,503,5,164,0,0,502,501,1,0,0,0,502,503, + 1,0,0,0,503,506,1,0,0,0,504,505,5,124,0,0,505,507,5,104,0,0,506, + 504,1,0,0,0,506,507,1,0,0,0,507,508,1,0,0,0,508,509,5,74,0,0,509, + 510,3,142,71,0,510,514,1,0,0,0,511,512,5,74,0,0,512,514,3,142,71, + 0,513,486,1,0,0,0,513,499,1,0,0,0,513,511,1,0,0,0,514,51,1,0,0,0, + 515,517,3,54,27,0,516,515,1,0,0,0,516,517,1,0,0,0,517,518,1,0,0, + 0,518,520,5,97,0,0,519,521,5,25,0,0,520,519,1,0,0,0,520,521,1,0, + 0,0,521,523,1,0,0,0,522,524,3,56,28,0,523,522,1,0,0,0,523,524,1, + 0,0,0,524,525,1,0,0,0,525,527,3,138,69,0,526,528,3,58,29,0,527,526, + 1,0,0,0,527,528,1,0,0,0,528,530,1,0,0,0,529,531,3,60,30,0,530,529, + 1,0,0,0,530,531,1,0,0,0,531,533,1,0,0,0,532,534,3,64,32,0,533,532, + 1,0,0,0,533,534,1,0,0,0,534,536,1,0,0,0,535,537,3,66,33,0,536,535, + 1,0,0,0,536,537,1,0,0,0,537,542,1,0,0,0,538,540,5,117,0,0,539,538, + 1,0,0,0,539,540,1,0,0,0,540,541,1,0,0,0,541,543,3,102,51,0,542,539, + 1,0,0,0,542,543,1,0,0,0,543,545,1,0,0,0,544,546,3,68,34,0,545,544, + 1,0,0,0,545,546,1,0,0,0,546,549,1,0,0,0,547,548,5,124,0,0,548,550, + 7,1,0,0,549,547,1,0,0,0,549,550,1,0,0,0,550,553,1,0,0,0,551,552, + 5,124,0,0,552,554,5,108,0,0,553,551,1,0,0,0,553,554,1,0,0,0,554, + 556,1,0,0,0,555,557,3,74,37,0,556,555,1,0,0,0,556,557,1,0,0,0,557, + 559,1,0,0,0,558,560,3,76,38,0,559,558,1,0,0,0,559,560,1,0,0,0,560, + 563,1,0,0,0,561,562,5,117,0,0,562,564,3,102,51,0,563,561,1,0,0,0, + 563,564,1,0,0,0,564,566,1,0,0,0,565,567,3,62,31,0,566,565,1,0,0, + 0,566,567,1,0,0,0,567,569,1,0,0,0,568,570,3,78,39,0,569,568,1,0, + 0,0,569,570,1,0,0,0,570,572,1,0,0,0,571,573,3,82,41,0,572,571,1, + 0,0,0,572,573,1,0,0,0,573,576,1,0,0,0,574,577,3,84,42,0,575,577, + 3,86,43,0,576,574,1,0,0,0,576,575,1,0,0,0,576,577,1,0,0,0,577,579, + 1,0,0,0,578,580,3,88,44,0,579,578,1,0,0,0,579,580,1,0,0,0,580,53, + 1,0,0,0,581,583,5,124,0,0,582,584,5,88,0,0,583,582,1,0,0,0,583,584, + 1,0,0,0,584,585,1,0,0,0,585,586,3,158,79,0,586,55,1,0,0,0,587,588, + 5,107,0,0,588,591,5,131,0,0,589,590,5,124,0,0,590,592,5,104,0,0, + 591,589,1,0,0,0,591,592,1,0,0,0,592,57,1,0,0,0,593,594,5,38,0,0, + 594,595,3,94,47,0,595,59,1,0,0,0,596,598,7,2,0,0,597,596,1,0,0,0, + 597,598,1,0,0,0,598,599,1,0,0,0,599,600,5,5,0,0,600,601,5,56,0,0, + 601,602,3,136,68,0,602,61,1,0,0,0,603,604,5,123,0,0,604,605,3,204, + 102,0,605,606,5,6,0,0,606,607,5,155,0,0,607,608,3,116,58,0,608,618, + 5,175,0,0,609,610,5,141,0,0,610,611,3,204,102,0,611,612,5,6,0,0, + 612,613,5,155,0,0,613,614,3,116,58,0,614,615,5,175,0,0,615,617,1, + 0,0,0,616,609,1,0,0,0,617,620,1,0,0,0,618,616,1,0,0,0,618,619,1, + 0,0,0,619,63,1,0,0,0,620,618,1,0,0,0,621,622,5,84,0,0,622,623,3, + 142,71,0,623,65,1,0,0,0,624,625,5,121,0,0,625,626,3,142,71,0,626, + 67,1,0,0,0,627,628,5,41,0,0,628,642,5,11,0,0,629,643,5,1,0,0,630, + 631,7,1,0,0,631,632,5,155,0,0,632,633,3,136,68,0,633,634,5,175,0, + 0,634,643,1,0,0,0,635,636,5,42,0,0,636,637,5,99,0,0,637,638,5,155, + 0,0,638,639,3,70,35,0,639,640,5,175,0,0,640,643,1,0,0,0,641,643, + 3,136,68,0,642,629,1,0,0,0,642,630,1,0,0,0,642,635,1,0,0,0,642,641, + 1,0,0,0,643,69,1,0,0,0,644,649,3,72,36,0,645,646,5,141,0,0,646,648, + 3,72,36,0,647,645,1,0,0,0,648,651,1,0,0,0,649,647,1,0,0,0,649,650, + 1,0,0,0,650,71,1,0,0,0,651,649,1,0,0,0,652,654,5,155,0,0,653,655, + 3,136,68,0,654,653,1,0,0,0,654,655,1,0,0,0,655,656,1,0,0,0,656,657, + 5,175,0,0,657,73,1,0,0,0,658,659,5,43,0,0,659,660,3,142,71,0,660, + 75,1,0,0,0,661,662,5,85,0,0,662,663,3,142,71,0,663,77,1,0,0,0,664, + 665,5,77,0,0,665,666,5,11,0,0,666,667,3,106,53,0,667,79,1,0,0,0, + 668,669,5,77,0,0,669,670,5,11,0,0,670,671,3,136,68,0,671,81,1,0, + 0,0,672,673,5,64,0,0,673,674,3,104,52,0,674,675,5,11,0,0,675,676, + 3,136,68,0,676,83,1,0,0,0,677,678,5,64,0,0,678,680,3,142,71,0,679, + 681,5,164,0,0,680,679,1,0,0,0,680,681,1,0,0,0,681,684,1,0,0,0,682, + 683,5,141,0,0,683,685,3,142,71,0,684,682,1,0,0,0,684,685,1,0,0,0, + 685,688,1,0,0,0,686,687,5,124,0,0,687,689,5,104,0,0,688,686,1,0, + 0,0,688,689,1,0,0,0,689,703,1,0,0,0,690,691,5,64,0,0,691,693,3,142, + 71,0,692,694,5,164,0,0,693,692,1,0,0,0,693,694,1,0,0,0,694,697,1, + 0,0,0,695,696,5,124,0,0,696,698,5,104,0,0,697,695,1,0,0,0,697,698, + 1,0,0,0,698,699,1,0,0,0,699,700,5,74,0,0,700,701,3,142,71,0,701, + 703,1,0,0,0,702,677,1,0,0,0,702,690,1,0,0,0,703,85,1,0,0,0,704,705, + 5,74,0,0,705,706,3,142,71,0,706,87,1,0,0,0,707,708,5,100,0,0,708, + 709,3,112,56,0,709,89,1,0,0,0,710,711,5,118,0,0,711,716,3,92,46, + 0,712,713,5,141,0,0,713,715,3,92,46,0,714,712,1,0,0,0,715,718,1, + 0,0,0,716,714,1,0,0,0,716,717,1,0,0,0,717,91,1,0,0,0,718,716,1,0, + 0,0,719,720,5,155,0,0,720,725,3,142,71,0,721,722,5,141,0,0,722,724, + 3,142,71,0,723,721,1,0,0,0,724,727,1,0,0,0,725,723,1,0,0,0,725,726, + 1,0,0,0,726,728,1,0,0,0,727,725,1,0,0,0,728,729,5,175,0,0,729,93, + 1,0,0,0,730,731,6,47,-1,0,731,733,3,168,84,0,732,734,5,31,0,0,733, + 732,1,0,0,0,733,734,1,0,0,0,734,736,1,0,0,0,735,737,3,102,51,0,736, + 735,1,0,0,0,736,737,1,0,0,0,737,743,1,0,0,0,738,739,5,155,0,0,739, + 740,3,94,47,0,740,741,5,175,0,0,741,743,1,0,0,0,742,730,1,0,0,0, + 742,738,1,0,0,0,743,791,1,0,0,0,744,745,10,5,0,0,745,746,3,98,49, + 0,746,747,3,94,47,6,747,790,1,0,0,0,748,750,10,7,0,0,749,751,5,69, + 0,0,750,749,1,0,0,0,750,751,1,0,0,0,751,753,1,0,0,0,752,754,3,96, + 48,0,753,752,1,0,0,0,753,754,1,0,0,0,754,755,1,0,0,0,755,756,5,56, + 0,0,756,758,3,94,47,0,757,759,3,100,50,0,758,757,1,0,0,0,758,759, + 1,0,0,0,759,790,1,0,0,0,760,761,10,6,0,0,761,762,5,82,0,0,762,763, + 5,56,0,0,763,765,3,94,47,0,764,766,3,100,50,0,765,764,1,0,0,0,765, + 766,1,0,0,0,766,790,1,0,0,0,767,768,10,4,0,0,768,769,5,81,0,0,769, + 770,5,155,0,0,770,771,3,136,68,0,771,775,3,170,85,0,772,773,5,41, + 0,0,773,774,5,11,0,0,774,776,3,136,68,0,775,772,1,0,0,0,775,776, + 1,0,0,0,776,777,1,0,0,0,777,778,5,175,0,0,778,790,1,0,0,0,779,780, + 10,3,0,0,780,783,5,116,0,0,781,782,5,49,0,0,782,784,5,73,0,0,783, + 781,1,0,0,0,783,784,1,0,0,0,784,785,1,0,0,0,785,786,5,155,0,0,786, + 787,3,174,87,0,787,788,5,175,0,0,788,790,1,0,0,0,789,744,1,0,0,0, + 789,748,1,0,0,0,789,760,1,0,0,0,789,767,1,0,0,0,789,779,1,0,0,0, + 790,793,1,0,0,0,791,789,1,0,0,0,791,792,1,0,0,0,792,95,1,0,0,0,793, + 791,1,0,0,0,794,796,7,3,0,0,795,794,1,0,0,0,795,796,1,0,0,0,796, + 797,1,0,0,0,797,808,5,52,0,0,798,800,5,52,0,0,799,801,7,3,0,0,800, + 799,1,0,0,0,800,801,1,0,0,0,801,808,1,0,0,0,802,808,7,3,0,0,803, + 808,5,3,0,0,804,808,5,98,0,0,805,806,5,8,0,0,806,808,7,4,0,0,807, + 795,1,0,0,0,807,798,1,0,0,0,807,802,1,0,0,0,807,803,1,0,0,0,807, + 804,1,0,0,0,807,805,1,0,0,0,808,848,1,0,0,0,809,811,7,5,0,0,810, + 809,1,0,0,0,810,811,1,0,0,0,811,812,1,0,0,0,812,814,7,6,0,0,813, + 815,5,78,0,0,814,813,1,0,0,0,814,815,1,0,0,0,815,830,1,0,0,0,816, + 818,7,6,0,0,817,819,5,78,0,0,818,817,1,0,0,0,818,819,1,0,0,0,819, + 821,1,0,0,0,820,822,7,5,0,0,821,820,1,0,0,0,821,822,1,0,0,0,822, + 830,1,0,0,0,823,824,5,8,0,0,824,825,7,4,0,0,825,827,7,6,0,0,826, + 828,5,78,0,0,827,826,1,0,0,0,827,828,1,0,0,0,828,830,1,0,0,0,829, + 810,1,0,0,0,829,816,1,0,0,0,829,823,1,0,0,0,830,848,1,0,0,0,831, + 833,7,3,0,0,832,831,1,0,0,0,832,833,1,0,0,0,833,834,1,0,0,0,834, + 836,5,39,0,0,835,837,5,78,0,0,836,835,1,0,0,0,836,837,1,0,0,0,837, + 846,1,0,0,0,838,840,5,39,0,0,839,841,5,78,0,0,840,839,1,0,0,0,840, + 841,1,0,0,0,841,843,1,0,0,0,842,844,7,3,0,0,843,842,1,0,0,0,843, + 844,1,0,0,0,844,846,1,0,0,0,845,832,1,0,0,0,845,838,1,0,0,0,846, + 848,1,0,0,0,847,807,1,0,0,0,847,829,1,0,0,0,847,845,1,0,0,0,848, + 97,1,0,0,0,849,850,5,18,0,0,850,853,5,56,0,0,851,853,5,141,0,0,852, + 849,1,0,0,0,852,851,1,0,0,0,853,99,1,0,0,0,854,855,5,75,0,0,855, + 864,3,136,68,0,856,857,5,117,0,0,857,858,5,155,0,0,858,859,3,136, + 68,0,859,860,5,175,0,0,860,864,1,0,0,0,861,862,5,117,0,0,862,864, + 3,136,68,0,863,854,1,0,0,0,863,856,1,0,0,0,863,861,1,0,0,0,864,101, + 1,0,0,0,865,866,5,95,0,0,866,868,3,110,55,0,867,869,5,164,0,0,868, + 867,1,0,0,0,868,869,1,0,0,0,869,872,1,0,0,0,870,871,5,74,0,0,871, + 873,3,110,55,0,872,870,1,0,0,0,872,873,1,0,0,0,873,878,1,0,0,0,874, + 875,5,155,0,0,875,876,3,204,102,0,876,877,5,175,0,0,877,879,1,0, + 0,0,878,874,1,0,0,0,878,879,1,0,0,0,879,103,1,0,0,0,880,883,3,142, + 71,0,881,882,7,7,0,0,882,884,3,142,71,0,883,881,1,0,0,0,883,884, + 1,0,0,0,884,105,1,0,0,0,885,890,3,108,54,0,886,887,5,141,0,0,887, + 889,3,108,54,0,888,886,1,0,0,0,889,892,1,0,0,0,890,888,1,0,0,0,890, + 891,1,0,0,0,891,107,1,0,0,0,892,890,1,0,0,0,893,895,3,142,71,0,894, + 896,7,8,0,0,895,894,1,0,0,0,895,896,1,0,0,0,896,899,1,0,0,0,897, + 898,5,73,0,0,898,900,7,9,0,0,899,897,1,0,0,0,899,900,1,0,0,0,900, + 903,1,0,0,0,901,902,5,16,0,0,902,904,5,133,0,0,903,901,1,0,0,0,903, + 904,1,0,0,0,904,109,1,0,0,0,905,912,3,208,104,0,906,909,3,192,96, + 0,907,908,5,177,0,0,908,910,3,192,96,0,909,907,1,0,0,0,909,910,1, + 0,0,0,910,912,1,0,0,0,911,905,1,0,0,0,911,906,1,0,0,0,912,111,1, + 0,0,0,913,918,3,114,57,0,914,915,5,141,0,0,915,917,3,114,57,0,916, + 914,1,0,0,0,917,920,1,0,0,0,918,916,1,0,0,0,918,919,1,0,0,0,919, + 113,1,0,0,0,920,918,1,0,0,0,921,922,3,204,102,0,922,923,5,147,0, + 0,923,924,3,194,97,0,924,115,1,0,0,0,925,927,3,118,59,0,926,925, + 1,0,0,0,926,927,1,0,0,0,927,929,1,0,0,0,928,930,3,120,60,0,929,928, + 1,0,0,0,929,930,1,0,0,0,930,932,1,0,0,0,931,933,3,124,62,0,932,931, + 1,0,0,0,932,933,1,0,0,0,933,117,1,0,0,0,934,935,5,80,0,0,935,936, + 5,11,0,0,936,937,3,136,68,0,937,119,1,0,0,0,938,939,5,77,0,0,939, + 940,5,11,0,0,940,941,3,106,53,0,941,121,1,0,0,0,942,943,5,125,0, + 0,943,944,5,41,0,0,944,945,5,155,0,0,945,946,3,78,39,0,946,947,5, + 175,0,0,947,123,1,0,0,0,948,949,7,10,0,0,949,950,3,126,63,0,950, + 125,1,0,0,0,951,958,3,128,64,0,952,953,5,9,0,0,953,954,3,128,64, + 0,954,955,5,2,0,0,955,956,3,128,64,0,956,958,1,0,0,0,957,951,1,0, + 0,0,957,952,1,0,0,0,958,127,1,0,0,0,959,960,5,20,0,0,960,972,5,93, + 0,0,961,962,5,114,0,0,962,972,5,83,0,0,963,964,5,114,0,0,964,972, + 5,36,0,0,965,966,3,142,71,0,966,967,5,83,0,0,967,972,1,0,0,0,968, + 969,3,142,71,0,969,970,5,36,0,0,970,972,1,0,0,0,971,959,1,0,0,0, + 971,961,1,0,0,0,971,963,1,0,0,0,971,965,1,0,0,0,971,968,1,0,0,0, + 972,129,1,0,0,0,973,974,3,142,71,0,974,975,5,0,0,1,975,131,1,0,0, + 0,976,977,6,66,-1,0,977,978,3,204,102,0,978,979,5,155,0,0,979,980, + 3,204,102,0,980,987,3,132,66,0,981,982,5,141,0,0,982,983,3,204,102, + 0,983,984,3,132,66,0,984,986,1,0,0,0,985,981,1,0,0,0,986,989,1,0, + 0,0,987,985,1,0,0,0,987,988,1,0,0,0,988,991,1,0,0,0,989,987,1,0, + 0,0,990,992,5,141,0,0,991,990,1,0,0,0,991,992,1,0,0,0,992,993,1, + 0,0,0,993,994,5,175,0,0,994,1040,1,0,0,0,995,996,3,204,102,0,996, + 997,5,155,0,0,997,1002,3,206,103,0,998,999,5,141,0,0,999,1001,3, + 206,103,0,1000,998,1,0,0,0,1001,1004,1,0,0,0,1002,1000,1,0,0,0,1002, + 1003,1,0,0,0,1003,1006,1,0,0,0,1004,1002,1,0,0,0,1005,1007,5,141, + 0,0,1006,1005,1,0,0,0,1006,1007,1,0,0,0,1007,1008,1,0,0,0,1008,1009, + 5,175,0,0,1009,1040,1,0,0,0,1010,1011,3,204,102,0,1011,1012,5,155, + 0,0,1012,1017,3,132,66,0,1013,1014,5,141,0,0,1014,1016,3,132,66, + 0,1015,1013,1,0,0,0,1016,1019,1,0,0,0,1017,1015,1,0,0,0,1017,1018, + 1,0,0,0,1018,1021,1,0,0,0,1019,1017,1,0,0,0,1020,1022,5,141,0,0, + 1021,1020,1,0,0,0,1021,1022,1,0,0,0,1022,1023,1,0,0,0,1023,1024, + 5,175,0,0,1024,1040,1,0,0,0,1025,1026,3,204,102,0,1026,1028,5,155, + 0,0,1027,1029,3,136,68,0,1028,1027,1,0,0,0,1028,1029,1,0,0,0,1029, + 1030,1,0,0,0,1030,1031,5,175,0,0,1031,1040,1,0,0,0,1032,1034,3,204, + 102,0,1033,1035,3,204,102,0,1034,1033,1,0,0,0,1035,1036,1,0,0,0, + 1036,1034,1,0,0,0,1036,1037,1,0,0,0,1037,1040,1,0,0,0,1038,1040, + 3,204,102,0,1039,976,1,0,0,0,1039,995,1,0,0,0,1039,1010,1,0,0,0, + 1039,1025,1,0,0,0,1039,1032,1,0,0,0,1039,1038,1,0,0,0,1040,1049, + 1,0,0,0,1041,1042,10,7,0,0,1042,1044,5,154,0,0,1043,1045,5,131,0, + 0,1044,1043,1,0,0,0,1044,1045,1,0,0,0,1045,1046,1,0,0,0,1046,1048, + 5,174,0,0,1047,1041,1,0,0,0,1048,1051,1,0,0,0,1049,1047,1,0,0,0, + 1049,1050,1,0,0,0,1050,133,1,0,0,0,1051,1049,1,0,0,0,1052,1054,3, + 204,102,0,1053,1055,3,204,102,0,1054,1053,1,0,0,0,1055,1056,1,0, + 0,0,1056,1054,1,0,0,0,1056,1057,1,0,0,0,1057,1060,1,0,0,0,1058,1060, + 3,204,102,0,1059,1052,1,0,0,0,1059,1058,1,0,0,0,1060,135,1,0,0,0, + 1061,1066,3,142,71,0,1062,1063,5,141,0,0,1063,1065,3,142,71,0,1064, + 1062,1,0,0,0,1065,1068,1,0,0,0,1066,1064,1,0,0,0,1066,1067,1,0,0, + 0,1067,1070,1,0,0,0,1068,1066,1,0,0,0,1069,1071,5,141,0,0,1070,1069, + 1,0,0,0,1070,1071,1,0,0,0,1071,137,1,0,0,0,1072,1077,3,140,70,0, + 1073,1074,5,141,0,0,1074,1076,3,140,70,0,1075,1073,1,0,0,0,1076, + 1079,1,0,0,0,1077,1075,1,0,0,0,1077,1078,1,0,0,0,1078,1081,1,0,0, + 0,1079,1077,1,0,0,0,1080,1082,5,141,0,0,1081,1080,1,0,0,0,1081,1082, + 1,0,0,0,1082,139,1,0,0,0,1083,1084,3,204,102,0,1084,1085,5,140,0, + 0,1085,1086,3,142,71,0,1086,1089,1,0,0,0,1087,1089,3,142,71,0,1088, + 1083,1,0,0,0,1088,1087,1,0,0,0,1089,141,1,0,0,0,1090,1091,6,71,-1, + 0,1091,1093,5,12,0,0,1092,1094,3,142,71,0,1093,1092,1,0,0,0,1093, + 1094,1,0,0,0,1094,1100,1,0,0,0,1095,1096,5,120,0,0,1096,1097,3,142, + 71,0,1097,1098,5,102,0,0,1098,1099,3,142,71,0,1099,1101,1,0,0,0, + 1100,1095,1,0,0,0,1101,1102,1,0,0,0,1102,1100,1,0,0,0,1102,1103, + 1,0,0,0,1103,1106,1,0,0,0,1104,1105,5,26,0,0,1105,1107,3,142,71, + 0,1106,1104,1,0,0,0,1106,1107,1,0,0,0,1107,1108,1,0,0,0,1108,1109, + 5,27,0,0,1109,1440,1,0,0,0,1110,1111,5,13,0,0,1111,1112,5,155,0, + 0,1112,1113,3,142,71,0,1113,1114,5,6,0,0,1114,1115,3,132,66,0,1115, + 1116,5,175,0,0,1116,1440,1,0,0,0,1117,1118,5,113,0,0,1118,1119,5, + 155,0,0,1119,1120,3,142,71,0,1120,1121,5,6,0,0,1121,1122,3,132,66, + 0,1122,1123,5,175,0,0,1123,1440,1,0,0,0,1124,1125,5,21,0,0,1125, + 1440,5,133,0,0,1126,1127,5,54,0,0,1127,1440,5,133,0,0,1128,1129, + 5,54,0,0,1129,1130,3,142,71,0,1130,1131,3,196,98,0,1131,1440,1,0, + 0,0,1132,1133,5,101,0,0,1133,1134,5,155,0,0,1134,1135,3,142,71,0, + 1135,1136,5,38,0,0,1136,1139,3,142,71,0,1137,1138,5,37,0,0,1138, + 1140,3,142,71,0,1139,1137,1,0,0,0,1139,1140,1,0,0,0,1140,1141,1, + 0,0,0,1141,1142,5,175,0,0,1142,1440,1,0,0,0,1143,1144,5,105,0,0, + 1144,1440,5,133,0,0,1145,1146,5,110,0,0,1146,1147,5,155,0,0,1147, + 1148,7,11,0,0,1148,1149,3,210,105,0,1149,1150,5,38,0,0,1150,1151, + 3,142,71,0,1151,1152,5,175,0,0,1152,1440,1,0,0,0,1153,1154,5,17, + 0,0,1154,1155,5,155,0,0,1155,1156,5,133,0,0,1156,1440,5,175,0,0, + 1157,1158,5,17,0,0,1158,1159,5,155,0,0,1159,1160,3,136,68,0,1160, + 1161,5,175,0,0,1161,1440,1,0,0,0,1162,1163,5,17,0,0,1163,1164,5, + 155,0,0,1164,1165,5,135,0,0,1165,1166,5,29,0,0,1166,1167,5,155,0, + 0,1167,1168,3,8,4,0,1168,1169,5,175,0,0,1169,1170,5,89,0,0,1170, + 1171,5,155,0,0,1171,1172,3,146,73,0,1172,1173,5,175,0,0,1173,1174, + 5,175,0,0,1174,1188,1,0,0,0,1175,1176,5,155,0,0,1176,1177,5,135, + 0,0,1177,1178,5,29,0,0,1178,1179,5,155,0,0,1179,1180,3,8,4,0,1180, + 1181,5,175,0,0,1181,1182,5,89,0,0,1182,1183,5,155,0,0,1183,1184, + 3,146,73,0,1184,1185,5,175,0,0,1185,1186,5,175,0,0,1186,1188,1,0, + 0,0,1187,1162,1,0,0,0,1187,1175,1,0,0,0,1188,1440,1,0,0,0,1189,1190, + 5,17,0,0,1190,1191,5,155,0,0,1191,1192,5,135,0,0,1192,1193,5,29, + 0,0,1193,1194,5,155,0,0,1194,1195,3,8,4,0,1195,1196,5,175,0,0,1196, + 1197,5,175,0,0,1197,1440,1,0,0,0,1198,1199,5,17,0,0,1199,1200,5, + 155,0,0,1200,1201,5,135,0,0,1201,1202,5,89,0,0,1202,1203,5,155,0, + 0,1203,1204,3,146,73,0,1204,1205,5,175,0,0,1205,1206,5,175,0,0,1206, + 1216,1,0,0,0,1207,1208,5,155,0,0,1208,1209,5,135,0,0,1209,1210,5, + 89,0,0,1210,1211,5,155,0,0,1211,1212,3,146,73,0,1212,1213,5,175, + 0,0,1213,1214,5,175,0,0,1214,1216,1,0,0,0,1215,1198,1,0,0,0,1215, + 1207,1,0,0,0,1216,1440,1,0,0,0,1217,1218,5,17,0,0,1218,1219,5,155, + 0,0,1219,1220,5,135,0,0,1220,1440,5,175,0,0,1221,1222,5,17,0,0,1222, + 1223,5,155,0,0,1223,1224,3,204,102,0,1224,1225,5,145,0,0,1225,1226, + 5,135,0,0,1226,1227,5,29,0,0,1227,1228,5,155,0,0,1228,1229,3,8,4, + 0,1229,1230,5,175,0,0,1230,1231,5,89,0,0,1231,1232,5,155,0,0,1232, + 1233,3,146,73,0,1233,1234,5,175,0,0,1234,1235,5,175,0,0,1235,1440, + 1,0,0,0,1236,1237,5,17,0,0,1237,1238,5,155,0,0,1238,1239,3,204,102, + 0,1239,1240,5,145,0,0,1240,1241,5,135,0,0,1241,1242,5,29,0,0,1242, + 1243,5,155,0,0,1243,1244,3,8,4,0,1244,1245,5,175,0,0,1245,1246,5, + 175,0,0,1246,1440,1,0,0,0,1247,1248,5,17,0,0,1248,1249,5,155,0,0, + 1249,1250,3,204,102,0,1250,1251,5,145,0,0,1251,1252,5,135,0,0,1252, + 1253,5,89,0,0,1253,1254,5,155,0,0,1254,1255,3,146,73,0,1255,1256, + 5,175,0,0,1256,1257,5,175,0,0,1257,1440,1,0,0,0,1258,1259,5,17,0, + 0,1259,1260,5,155,0,0,1260,1261,3,204,102,0,1261,1262,5,145,0,0, + 1262,1263,5,135,0,0,1263,1264,5,175,0,0,1264,1440,1,0,0,0,1265,1266, + 5,135,0,0,1266,1267,5,17,0,0,1267,1268,5,155,0,0,1268,1269,5,133, + 0,0,1269,1440,5,175,0,0,1270,1271,5,135,0,0,1271,1272,5,17,0,0,1272, + 1273,5,155,0,0,1273,1274,3,136,68,0,1274,1275,5,175,0,0,1275,1440, + 1,0,0,0,1276,1277,3,204,102,0,1277,1279,5,155,0,0,1278,1280,3,136, + 68,0,1279,1278,1,0,0,0,1279,1280,1,0,0,0,1280,1281,1,0,0,0,1281, + 1282,5,175,0,0,1282,1283,3,122,61,0,1283,1440,1,0,0,0,1284,1285, + 3,204,102,0,1285,1287,5,155,0,0,1286,1288,3,136,68,0,1287,1286,1, + 0,0,0,1287,1288,1,0,0,0,1288,1289,1,0,0,0,1289,1290,5,175,0,0,1290, + 1299,1,0,0,0,1291,1293,5,155,0,0,1292,1294,5,25,0,0,1293,1292,1, + 0,0,0,1293,1294,1,0,0,0,1294,1296,1,0,0,0,1295,1297,3,136,68,0,1296, + 1295,1,0,0,0,1296,1297,1,0,0,0,1297,1298,1,0,0,0,1298,1300,5,175, + 0,0,1299,1291,1,0,0,0,1299,1300,1,0,0,0,1300,1307,1,0,0,0,1301,1302, + 5,32,0,0,1302,1303,5,155,0,0,1303,1304,5,121,0,0,1304,1305,3,142, + 71,0,1305,1306,5,175,0,0,1306,1308,1,0,0,0,1307,1301,1,0,0,0,1307, + 1308,1,0,0,0,1308,1309,1,0,0,0,1309,1310,5,79,0,0,1310,1311,5,155, + 0,0,1311,1312,3,116,58,0,1312,1313,5,175,0,0,1313,1440,1,0,0,0,1314, + 1315,3,204,102,0,1315,1317,5,155,0,0,1316,1318,3,136,68,0,1317,1316, + 1,0,0,0,1317,1318,1,0,0,0,1318,1319,1,0,0,0,1319,1320,5,175,0,0, + 1320,1329,1,0,0,0,1321,1323,5,155,0,0,1322,1324,5,25,0,0,1323,1322, + 1,0,0,0,1323,1324,1,0,0,0,1324,1326,1,0,0,0,1325,1327,3,136,68,0, + 1326,1325,1,0,0,0,1326,1327,1,0,0,0,1327,1328,1,0,0,0,1328,1330, + 5,175,0,0,1329,1321,1,0,0,0,1329,1330,1,0,0,0,1330,1337,1,0,0,0, + 1331,1332,5,32,0,0,1332,1333,5,155,0,0,1333,1334,5,121,0,0,1334, + 1335,3,142,71,0,1335,1336,5,175,0,0,1336,1338,1,0,0,0,1337,1331, + 1,0,0,0,1337,1338,1,0,0,0,1338,1339,1,0,0,0,1339,1340,5,79,0,0,1340, + 1341,3,204,102,0,1341,1440,1,0,0,0,1342,1348,3,204,102,0,1343,1345, + 5,155,0,0,1344,1346,3,136,68,0,1345,1344,1,0,0,0,1345,1346,1,0,0, + 0,1346,1347,1,0,0,0,1347,1349,5,175,0,0,1348,1343,1,0,0,0,1348,1349, + 1,0,0,0,1349,1350,1,0,0,0,1350,1352,5,155,0,0,1351,1353,5,25,0,0, + 1352,1351,1,0,0,0,1352,1353,1,0,0,0,1353,1355,1,0,0,0,1354,1356, + 3,136,68,0,1355,1354,1,0,0,0,1355,1356,1,0,0,0,1356,1360,1,0,0,0, + 1357,1358,5,77,0,0,1358,1359,5,11,0,0,1359,1361,3,106,53,0,1360, + 1357,1,0,0,0,1360,1361,1,0,0,0,1361,1362,1,0,0,0,1362,1369,5,175, + 0,0,1363,1364,5,32,0,0,1364,1365,5,155,0,0,1365,1366,5,121,0,0,1366, + 1367,3,142,71,0,1367,1368,5,175,0,0,1368,1370,1,0,0,0,1369,1363, + 1,0,0,0,1369,1370,1,0,0,0,1370,1440,1,0,0,0,1371,1440,3,154,77,0, + 1372,1440,3,212,106,0,1373,1440,3,194,97,0,1374,1375,5,143,0,0,1375, + 1440,3,142,71,25,1376,1377,5,71,0,0,1377,1440,3,142,71,17,1378,1379, + 3,184,92,0,1379,1380,5,145,0,0,1380,1382,1,0,0,0,1381,1378,1,0,0, + 0,1381,1382,1,0,0,0,1382,1383,1,0,0,0,1383,1389,5,135,0,0,1384,1385, + 5,29,0,0,1385,1386,5,155,0,0,1386,1387,3,8,4,0,1387,1388,5,175,0, + 0,1388,1390,1,0,0,0,1389,1384,1,0,0,0,1389,1390,1,0,0,0,1390,1440, + 1,0,0,0,1391,1392,5,58,0,0,1392,1397,3,204,102,0,1393,1394,5,141, + 0,0,1394,1396,3,204,102,0,1395,1393,1,0,0,0,1396,1399,1,0,0,0,1397, + 1395,1,0,0,0,1397,1398,1,0,0,0,1398,1401,1,0,0,0,1399,1397,1,0,0, + 0,1400,1402,5,141,0,0,1401,1400,1,0,0,0,1401,1402,1,0,0,0,1402,1403, + 1,0,0,0,1403,1404,5,140,0,0,1404,1405,3,142,71,10,1405,1440,1,0, + 0,0,1406,1407,5,155,0,0,1407,1408,3,48,24,0,1408,1409,5,175,0,0, + 1409,1440,1,0,0,0,1410,1411,5,155,0,0,1411,1412,3,142,71,0,1412, + 1413,5,175,0,0,1413,1440,1,0,0,0,1414,1415,5,155,0,0,1415,1416,3, + 136,68,0,1416,1417,5,175,0,0,1417,1440,1,0,0,0,1418,1420,5,5,0,0, + 1419,1418,1,0,0,0,1419,1420,1,0,0,0,1420,1421,1,0,0,0,1421,1423, + 5,154,0,0,1422,1424,3,136,68,0,1423,1422,1,0,0,0,1423,1424,1,0,0, + 0,1424,1425,1,0,0,0,1425,1440,5,174,0,0,1426,1428,5,153,0,0,1427, + 1429,3,40,20,0,1428,1427,1,0,0,0,1428,1429,1,0,0,0,1429,1430,1,0, + 0,0,1430,1440,5,173,0,0,1431,1440,3,144,72,0,1432,1433,3,204,102, + 0,1433,1434,5,139,0,0,1434,1435,3,142,71,3,1435,1440,1,0,0,0,1436, + 1437,5,150,0,0,1437,1440,5,131,0,0,1438,1440,3,164,82,0,1439,1090, + 1,0,0,0,1439,1110,1,0,0,0,1439,1117,1,0,0,0,1439,1124,1,0,0,0,1439, + 1126,1,0,0,0,1439,1128,1,0,0,0,1439,1132,1,0,0,0,1439,1143,1,0,0, + 0,1439,1145,1,0,0,0,1439,1153,1,0,0,0,1439,1157,1,0,0,0,1439,1187, + 1,0,0,0,1439,1189,1,0,0,0,1439,1215,1,0,0,0,1439,1217,1,0,0,0,1439, + 1221,1,0,0,0,1439,1236,1,0,0,0,1439,1247,1,0,0,0,1439,1258,1,0,0, + 0,1439,1265,1,0,0,0,1439,1270,1,0,0,0,1439,1276,1,0,0,0,1439,1284, + 1,0,0,0,1439,1314,1,0,0,0,1439,1342,1,0,0,0,1439,1371,1,0,0,0,1439, + 1372,1,0,0,0,1439,1373,1,0,0,0,1439,1374,1,0,0,0,1439,1376,1,0,0, + 0,1439,1381,1,0,0,0,1439,1391,1,0,0,0,1439,1406,1,0,0,0,1439,1410, + 1,0,0,0,1439,1414,1,0,0,0,1439,1419,1,0,0,0,1439,1426,1,0,0,0,1439, + 1431,1,0,0,0,1439,1432,1,0,0,0,1439,1436,1,0,0,0,1439,1438,1,0,0, + 0,1440,1580,1,0,0,0,1441,1445,10,24,0,0,1442,1446,5,135,0,0,1443, + 1446,5,177,0,0,1444,1446,5,164,0,0,1445,1442,1,0,0,0,1445,1443,1, + 0,0,0,1445,1444,1,0,0,0,1446,1447,1,0,0,0,1447,1579,3,142,71,25, + 1448,1452,10,23,0,0,1449,1453,5,165,0,0,1450,1453,5,143,0,0,1451, + 1453,5,142,0,0,1452,1449,1,0,0,0,1452,1450,1,0,0,0,1452,1451,1,0, + 0,0,1453,1454,1,0,0,0,1454,1579,3,142,71,24,1455,1480,10,22,0,0, + 1456,1481,5,146,0,0,1457,1481,5,147,0,0,1458,1481,5,159,0,0,1459, + 1481,5,156,0,0,1460,1481,5,157,0,0,1461,1481,5,148,0,0,1462,1481, + 5,149,0,0,1463,1465,5,71,0,0,1464,1463,1,0,0,0,1464,1465,1,0,0,0, + 1465,1466,1,0,0,0,1466,1468,5,50,0,0,1467,1469,5,15,0,0,1468,1467, + 1,0,0,0,1468,1469,1,0,0,0,1469,1481,1,0,0,0,1470,1472,5,71,0,0,1471, + 1470,1,0,0,0,1471,1472,1,0,0,0,1472,1473,1,0,0,0,1473,1481,7,12, + 0,0,1474,1481,5,171,0,0,1475,1481,5,172,0,0,1476,1481,5,161,0,0, + 1477,1481,5,151,0,0,1478,1481,5,152,0,0,1479,1481,5,160,0,0,1480, + 1456,1,0,0,0,1480,1457,1,0,0,0,1480,1458,1,0,0,0,1480,1459,1,0,0, + 0,1480,1460,1,0,0,0,1480,1461,1,0,0,0,1480,1462,1,0,0,0,1480,1464, + 1,0,0,0,1480,1471,1,0,0,0,1480,1474,1,0,0,0,1480,1475,1,0,0,0,1480, + 1476,1,0,0,0,1480,1477,1,0,0,0,1480,1478,1,0,0,0,1480,1479,1,0,0, + 0,1481,1482,1,0,0,0,1482,1579,3,142,71,23,1483,1484,10,19,0,0,1484, + 1486,5,55,0,0,1485,1487,5,71,0,0,1486,1485,1,0,0,0,1486,1487,1,0, + 0,0,1487,1488,1,0,0,0,1488,1489,5,25,0,0,1489,1490,5,38,0,0,1490, + 1579,3,142,71,20,1491,1492,10,18,0,0,1492,1493,5,163,0,0,1493,1579, + 3,142,71,19,1494,1495,10,16,0,0,1495,1496,5,2,0,0,1496,1579,3,142, + 71,17,1497,1498,10,15,0,0,1498,1499,5,76,0,0,1499,1579,3,142,71, + 16,1500,1502,10,14,0,0,1501,1503,5,71,0,0,1502,1501,1,0,0,0,1502, + 1503,1,0,0,0,1503,1504,1,0,0,0,1504,1505,5,9,0,0,1505,1506,3,142, + 71,0,1506,1507,5,2,0,0,1507,1508,3,142,71,15,1508,1579,1,0,0,0,1509, + 1510,10,13,0,0,1510,1511,5,166,0,0,1511,1512,3,142,71,0,1512,1513, + 5,140,0,0,1513,1514,3,142,71,13,1514,1579,1,0,0,0,1515,1516,10,38, + 0,0,1516,1517,5,155,0,0,1517,1518,3,48,24,0,1518,1519,5,175,0,0, + 1519,1579,1,0,0,0,1520,1521,10,37,0,0,1521,1523,5,155,0,0,1522,1524, + 3,136,68,0,1523,1522,1,0,0,0,1523,1524,1,0,0,0,1524,1525,1,0,0,0, + 1525,1579,5,175,0,0,1526,1527,10,33,0,0,1527,1528,5,154,0,0,1528, + 1529,3,142,71,0,1529,1530,5,174,0,0,1530,1579,1,0,0,0,1531,1532, + 10,32,0,0,1532,1534,5,154,0,0,1533,1535,3,142,71,0,1534,1533,1,0, + 0,0,1534,1535,1,0,0,0,1535,1536,1,0,0,0,1536,1538,5,140,0,0,1537, + 1539,3,142,71,0,1538,1537,1,0,0,0,1538,1539,1,0,0,0,1539,1540,1, + 0,0,0,1540,1579,5,174,0,0,1541,1542,10,31,0,0,1542,1543,5,145,0, + 0,1543,1579,5,131,0,0,1544,1545,10,30,0,0,1545,1546,5,145,0,0,1546, + 1579,3,204,102,0,1547,1548,10,29,0,0,1548,1549,5,162,0,0,1549,1550, + 5,154,0,0,1550,1551,3,142,71,0,1551,1552,5,174,0,0,1552,1579,1,0, + 0,0,1553,1554,10,28,0,0,1554,1555,5,162,0,0,1555,1579,5,131,0,0, + 1556,1557,10,27,0,0,1557,1558,5,162,0,0,1558,1579,3,204,102,0,1559, + 1560,10,26,0,0,1560,1561,5,138,0,0,1561,1579,3,134,67,0,1562,1563, + 10,21,0,0,1563,1564,5,48,0,0,1564,1579,5,73,0,0,1565,1566,10,20, + 0,0,1566,1568,5,55,0,0,1567,1569,5,71,0,0,1568,1567,1,0,0,0,1568, + 1569,1,0,0,0,1569,1570,1,0,0,0,1570,1579,5,72,0,0,1571,1576,10,12, + 0,0,1572,1573,5,6,0,0,1573,1577,3,204,102,0,1574,1575,5,6,0,0,1575, + 1577,5,133,0,0,1576,1572,1,0,0,0,1576,1574,1,0,0,0,1577,1579,1,0, + 0,0,1578,1441,1,0,0,0,1578,1448,1,0,0,0,1578,1455,1,0,0,0,1578,1483, + 1,0,0,0,1578,1491,1,0,0,0,1578,1494,1,0,0,0,1578,1497,1,0,0,0,1578, + 1500,1,0,0,0,1578,1509,1,0,0,0,1578,1515,1,0,0,0,1578,1520,1,0,0, + 0,1578,1526,1,0,0,0,1578,1531,1,0,0,0,1578,1541,1,0,0,0,1578,1544, + 1,0,0,0,1578,1547,1,0,0,0,1578,1553,1,0,0,0,1578,1556,1,0,0,0,1578, + 1559,1,0,0,0,1578,1562,1,0,0,0,1578,1565,1,0,0,0,1578,1571,1,0,0, + 0,1579,1582,1,0,0,0,1580,1578,1,0,0,0,1580,1581,1,0,0,0,1581,143, + 1,0,0,0,1582,1580,1,0,0,0,1583,1584,5,155,0,0,1584,1589,3,204,102, + 0,1585,1586,5,141,0,0,1586,1588,3,204,102,0,1587,1585,1,0,0,0,1588, + 1591,1,0,0,0,1589,1587,1,0,0,0,1589,1590,1,0,0,0,1590,1593,1,0,0, + 0,1591,1589,1,0,0,0,1592,1594,5,141,0,0,1593,1592,1,0,0,0,1593,1594, + 1,0,0,0,1594,1595,1,0,0,0,1595,1596,5,175,0,0,1596,1611,1,0,0,0, + 1597,1602,3,204,102,0,1598,1599,5,141,0,0,1599,1601,3,204,102,0, + 1600,1598,1,0,0,0,1601,1604,1,0,0,0,1602,1600,1,0,0,0,1602,1603, + 1,0,0,0,1603,1606,1,0,0,0,1604,1602,1,0,0,0,1605,1607,5,141,0,0, + 1606,1605,1,0,0,0,1606,1607,1,0,0,0,1607,1611,1,0,0,0,1608,1609, + 5,155,0,0,1609,1611,5,175,0,0,1610,1583,1,0,0,0,1610,1597,1,0,0, + 0,1610,1608,1,0,0,0,1611,1612,1,0,0,0,1612,1615,5,134,0,0,1613,1616, + 3,142,71,0,1614,1616,3,36,18,0,1615,1613,1,0,0,0,1615,1614,1,0,0, + 0,1616,1633,1,0,0,0,1617,1618,5,58,0,0,1618,1623,3,204,102,0,1619, + 1620,5,141,0,0,1620,1622,3,204,102,0,1621,1619,1,0,0,0,1622,1625, + 1,0,0,0,1623,1621,1,0,0,0,1623,1624,1,0,0,0,1624,1627,1,0,0,0,1625, + 1623,1,0,0,0,1626,1628,5,141,0,0,1627,1626,1,0,0,0,1627,1628,1,0, + 0,0,1628,1629,1,0,0,0,1629,1630,5,140,0,0,1630,1631,3,142,71,0,1631, + 1633,1,0,0,0,1632,1610,1,0,0,0,1632,1617,1,0,0,0,1633,145,1,0,0, + 0,1634,1639,3,148,74,0,1635,1636,5,141,0,0,1636,1638,3,148,74,0, + 1637,1635,1,0,0,0,1638,1641,1,0,0,0,1639,1637,1,0,0,0,1639,1640, + 1,0,0,0,1640,147,1,0,0,0,1641,1639,1,0,0,0,1642,1643,3,142,71,0, + 1643,1644,5,6,0,0,1644,1645,3,204,102,0,1645,149,1,0,0,0,1646,1653, + 3,154,77,0,1647,1653,3,152,76,0,1648,1649,5,153,0,0,1649,1650,3, + 142,71,0,1650,1651,5,173,0,0,1651,1653,1,0,0,0,1652,1646,1,0,0,0, + 1652,1647,1,0,0,0,1652,1648,1,0,0,0,1653,151,1,0,0,0,1654,1655,5, + 189,0,0,1655,153,1,0,0,0,1656,1657,5,157,0,0,1657,1661,3,204,102, + 0,1658,1660,3,156,78,0,1659,1658,1,0,0,0,1660,1663,1,0,0,0,1661, + 1659,1,0,0,0,1661,1662,1,0,0,0,1662,1664,1,0,0,0,1663,1661,1,0,0, + 0,1664,1665,5,178,0,0,1665,1686,1,0,0,0,1666,1667,5,157,0,0,1667, + 1671,3,204,102,0,1668,1670,3,156,78,0,1669,1668,1,0,0,0,1670,1673, + 1,0,0,0,1671,1669,1,0,0,0,1671,1672,1,0,0,0,1672,1674,1,0,0,0,1673, + 1671,1,0,0,0,1674,1678,5,149,0,0,1675,1677,3,150,75,0,1676,1675, + 1,0,0,0,1677,1680,1,0,0,0,1678,1676,1,0,0,0,1678,1679,1,0,0,0,1679, + 1681,1,0,0,0,1680,1678,1,0,0,0,1681,1682,5,158,0,0,1682,1683,3,204, + 102,0,1683,1684,5,149,0,0,1684,1686,1,0,0,0,1685,1656,1,0,0,0,1685, + 1666,1,0,0,0,1686,155,1,0,0,0,1687,1688,3,204,102,0,1688,1689,5, + 147,0,0,1689,1690,3,210,105,0,1690,1699,1,0,0,0,1691,1692,3,204, + 102,0,1692,1693,5,147,0,0,1693,1694,5,153,0,0,1694,1695,3,142,71, + 0,1695,1696,5,173,0,0,1696,1699,1,0,0,0,1697,1699,3,204,102,0,1698, + 1687,1,0,0,0,1698,1691,1,0,0,0,1698,1697,1,0,0,0,1699,157,1,0,0, + 0,1700,1705,3,160,80,0,1701,1702,5,141,0,0,1702,1704,3,160,80,0, + 1703,1701,1,0,0,0,1704,1707,1,0,0,0,1705,1703,1,0,0,0,1705,1706, + 1,0,0,0,1706,1709,1,0,0,0,1707,1705,1,0,0,0,1708,1710,5,141,0,0, + 1709,1708,1,0,0,0,1709,1710,1,0,0,0,1710,159,1,0,0,0,1711,1713,3, + 204,102,0,1712,1714,3,162,81,0,1713,1712,1,0,0,0,1713,1714,1,0,0, + 0,1714,1718,1,0,0,0,1715,1716,5,117,0,0,1716,1717,5,57,0,0,1717, + 1719,3,162,81,0,1718,1715,1,0,0,0,1718,1719,1,0,0,0,1719,1720,1, + 0,0,0,1720,1725,5,6,0,0,1721,1723,5,71,0,0,1722,1721,1,0,0,0,1722, + 1723,1,0,0,0,1723,1724,1,0,0,0,1724,1726,5,65,0,0,1725,1722,1,0, + 0,0,1725,1726,1,0,0,0,1726,1727,1,0,0,0,1727,1728,5,155,0,0,1728, + 1729,3,48,24,0,1729,1730,5,175,0,0,1730,1736,1,0,0,0,1731,1732,3, + 142,71,0,1732,1733,5,6,0,0,1733,1734,3,204,102,0,1734,1736,1,0,0, + 0,1735,1711,1,0,0,0,1735,1731,1,0,0,0,1736,161,1,0,0,0,1737,1738, + 5,155,0,0,1738,1743,3,204,102,0,1739,1740,5,141,0,0,1740,1742,3, + 204,102,0,1741,1739,1,0,0,0,1742,1745,1,0,0,0,1743,1741,1,0,0,0, + 1743,1744,1,0,0,0,1744,1746,1,0,0,0,1745,1743,1,0,0,0,1746,1747, + 5,175,0,0,1747,163,1,0,0,0,1748,1756,3,208,104,0,1749,1750,3,184, + 92,0,1750,1751,5,145,0,0,1751,1753,1,0,0,0,1752,1749,1,0,0,0,1752, + 1753,1,0,0,0,1753,1754,1,0,0,0,1754,1756,3,166,83,0,1755,1748,1, + 0,0,0,1755,1752,1,0,0,0,1756,165,1,0,0,0,1757,1762,3,204,102,0,1758, + 1759,5,145,0,0,1759,1761,3,204,102,0,1760,1758,1,0,0,0,1761,1764, + 1,0,0,0,1762,1760,1,0,0,0,1762,1763,1,0,0,0,1763,167,1,0,0,0,1764, + 1762,1,0,0,0,1765,1766,6,84,-1,0,1766,1779,3,184,92,0,1767,1779, + 3,182,91,0,1768,1769,5,155,0,0,1769,1770,3,48,24,0,1770,1771,5,175, + 0,0,1771,1779,1,0,0,0,1772,1773,5,155,0,0,1773,1774,3,90,45,0,1774, + 1775,5,175,0,0,1775,1779,1,0,0,0,1776,1779,3,154,77,0,1777,1779, + 3,208,104,0,1778,1765,1,0,0,0,1778,1767,1,0,0,0,1778,1768,1,0,0, + 0,1778,1772,1,0,0,0,1778,1776,1,0,0,0,1778,1777,1,0,0,0,1779,1813, + 1,0,0,0,1780,1781,10,5,0,0,1781,1782,5,81,0,0,1782,1783,5,155,0, + 0,1783,1784,3,136,68,0,1784,1788,3,170,85,0,1785,1786,5,41,0,0,1786, + 1787,5,11,0,0,1787,1789,3,136,68,0,1788,1785,1,0,0,0,1788,1789,1, + 0,0,0,1789,1790,1,0,0,0,1790,1791,5,175,0,0,1791,1812,1,0,0,0,1792, + 1793,10,4,0,0,1793,1796,5,116,0,0,1794,1795,5,49,0,0,1795,1797,5, + 73,0,0,1796,1794,1,0,0,0,1796,1797,1,0,0,0,1797,1798,1,0,0,0,1798, + 1799,5,155,0,0,1799,1800,3,174,87,0,1800,1801,5,175,0,0,1801,1812, + 1,0,0,0,1802,1806,10,3,0,0,1803,1807,3,202,101,0,1804,1805,5,6,0, + 0,1805,1807,3,204,102,0,1806,1803,1,0,0,0,1806,1804,1,0,0,0,1807, + 1809,1,0,0,0,1808,1810,3,180,90,0,1809,1808,1,0,0,0,1809,1810,1, + 0,0,0,1810,1812,1,0,0,0,1811,1780,1,0,0,0,1811,1792,1,0,0,0,1811, + 1802,1,0,0,0,1812,1815,1,0,0,0,1813,1811,1,0,0,0,1813,1814,1,0,0, + 0,1814,169,1,0,0,0,1815,1813,1,0,0,0,1816,1818,5,37,0,0,1817,1819, + 3,172,86,0,1818,1817,1,0,0,0,1819,1820,1,0,0,0,1820,1818,1,0,0,0, + 1820,1821,1,0,0,0,1821,171,1,0,0,0,1822,1823,3,178,89,0,1823,1824, + 5,50,0,0,1824,1825,5,155,0,0,1825,1826,3,136,68,0,1826,1827,5,175, + 0,0,1827,173,1,0,0,0,1828,1833,3,176,88,0,1829,1830,5,141,0,0,1830, + 1832,3,176,88,0,1831,1829,1,0,0,0,1832,1835,1,0,0,0,1833,1831,1, + 0,0,0,1833,1834,1,0,0,0,1834,1837,1,0,0,0,1835,1833,1,0,0,0,1836, + 1838,5,141,0,0,1837,1836,1,0,0,0,1837,1838,1,0,0,0,1838,175,1,0, + 0,0,1839,1840,3,178,89,0,1840,1841,5,37,0,0,1841,1842,3,178,89,0, + 1842,1843,5,50,0,0,1843,1844,5,155,0,0,1844,1845,3,136,68,0,1845, + 1854,5,175,0,0,1846,1847,3,178,89,0,1847,1848,5,50,0,0,1848,1849, + 5,155,0,0,1849,1850,3,136,68,0,1850,1851,5,175,0,0,1851,1853,1,0, + 0,0,1852,1846,1,0,0,0,1853,1856,1,0,0,0,1854,1852,1,0,0,0,1854,1855, + 1,0,0,0,1855,177,1,0,0,0,1856,1854,1,0,0,0,1857,1858,5,155,0,0,1858, + 1859,3,136,68,0,1859,1860,5,175,0,0,1860,1863,1,0,0,0,1861,1863, + 3,142,71,0,1862,1857,1,0,0,0,1862,1861,1,0,0,0,1863,179,1,0,0,0, + 1864,1865,5,155,0,0,1865,1870,3,204,102,0,1866,1867,5,141,0,0,1867, + 1869,3,204,102,0,1868,1866,1,0,0,0,1869,1872,1,0,0,0,1870,1868,1, + 0,0,0,1870,1871,1,0,0,0,1871,1873,1,0,0,0,1872,1870,1,0,0,0,1873, + 1874,5,175,0,0,1874,181,1,0,0,0,1875,1876,3,204,102,0,1876,1878, + 5,155,0,0,1877,1879,3,186,93,0,1878,1877,1,0,0,0,1878,1879,1,0,0, + 0,1879,1880,1,0,0,0,1880,1881,5,175,0,0,1881,183,1,0,0,0,1882,1883, + 3,188,94,0,1883,1884,5,145,0,0,1884,1886,1,0,0,0,1885,1882,1,0,0, + 0,1885,1886,1,0,0,0,1886,1887,1,0,0,0,1887,1888,3,166,83,0,1888, + 185,1,0,0,0,1889,1894,3,142,71,0,1890,1891,5,141,0,0,1891,1893,3, + 142,71,0,1892,1890,1,0,0,0,1893,1896,1,0,0,0,1894,1892,1,0,0,0,1894, + 1895,1,0,0,0,1895,1898,1,0,0,0,1896,1894,1,0,0,0,1897,1899,5,141, + 0,0,1898,1897,1,0,0,0,1898,1899,1,0,0,0,1899,187,1,0,0,0,1900,1901, + 3,204,102,0,1901,189,1,0,0,0,1902,1911,5,129,0,0,1903,1904,5,145, + 0,0,1904,1911,7,13,0,0,1905,1906,5,131,0,0,1906,1908,5,145,0,0,1907, + 1909,7,13,0,0,1908,1907,1,0,0,0,1908,1909,1,0,0,0,1909,1911,1,0, + 0,0,1910,1902,1,0,0,0,1910,1903,1,0,0,0,1910,1905,1,0,0,0,1911,191, + 1,0,0,0,1912,1914,7,14,0,0,1913,1912,1,0,0,0,1913,1914,1,0,0,0,1914, + 1921,1,0,0,0,1915,1922,3,190,95,0,1916,1922,5,130,0,0,1917,1922, + 5,131,0,0,1918,1922,5,132,0,0,1919,1922,5,51,0,0,1920,1922,5,70, + 0,0,1921,1915,1,0,0,0,1921,1916,1,0,0,0,1921,1917,1,0,0,0,1921,1918, + 1,0,0,0,1921,1919,1,0,0,0,1921,1920,1,0,0,0,1922,193,1,0,0,0,1923, + 1927,3,192,96,0,1924,1927,5,133,0,0,1925,1927,5,72,0,0,1926,1923, + 1,0,0,0,1926,1924,1,0,0,0,1926,1925,1,0,0,0,1927,195,1,0,0,0,1928, + 1929,7,15,0,0,1929,197,1,0,0,0,1930,1931,7,16,0,0,1931,199,1,0,0, + 0,1932,1933,7,17,0,0,1933,201,1,0,0,0,1934,1937,5,128,0,0,1935,1937, + 3,200,100,0,1936,1934,1,0,0,0,1936,1935,1,0,0,0,1937,203,1,0,0,0, + 1938,1942,5,128,0,0,1939,1942,3,196,98,0,1940,1942,3,198,99,0,1941, + 1938,1,0,0,0,1941,1939,1,0,0,0,1941,1940,1,0,0,0,1942,205,1,0,0, + 0,1943,1944,3,210,105,0,1944,1945,5,147,0,0,1945,1946,3,192,96,0, + 1946,207,1,0,0,0,1947,1948,5,153,0,0,1948,1949,3,142,71,0,1949,1950, + 5,173,0,0,1950,209,1,0,0,0,1951,1954,5,133,0,0,1952,1954,3,212,106, + 0,1953,1951,1,0,0,0,1953,1952,1,0,0,0,1954,211,1,0,0,0,1955,1959, + 5,168,0,0,1956,1958,3,214,107,0,1957,1956,1,0,0,0,1958,1961,1,0, + 0,0,1959,1957,1,0,0,0,1959,1960,1,0,0,0,1960,1962,1,0,0,0,1961,1959, + 1,0,0,0,1962,1963,5,170,0,0,1963,213,1,0,0,0,1964,1965,5,184,0,0, + 1965,1966,3,142,71,0,1966,1967,5,173,0,0,1967,1970,1,0,0,0,1968, + 1970,5,183,0,0,1969,1964,1,0,0,0,1969,1968,1,0,0,0,1970,215,1,0, + 0,0,1971,1975,5,169,0,0,1972,1974,3,218,109,0,1973,1972,1,0,0,0, + 1974,1977,1,0,0,0,1975,1973,1,0,0,0,1975,1976,1,0,0,0,1976,1978, + 1,0,0,0,1977,1975,1,0,0,0,1978,1979,5,0,0,1,1979,217,1,0,0,0,1980, + 1981,5,186,0,0,1981,1982,3,142,71,0,1982,1983,5,173,0,0,1983,1986, + 1,0,0,0,1984,1986,5,185,0,0,1985,1980,1,0,0,0,1985,1984,1,0,0,0, + 1986,219,1,0,0,0,247,223,230,238,245,249,263,267,270,274,277,284, + 288,297,302,311,319,326,330,336,341,349,356,362,373,381,395,399, + 404,407,422,428,433,439,445,450,456,462,467,469,477,481,484,489, + 493,497,502,506,513,516,520,523,527,530,533,536,539,542,545,549, + 553,556,559,563,566,569,572,576,579,583,591,597,618,642,649,654, + 680,684,688,693,697,702,716,725,733,736,742,750,753,758,765,775, + 783,789,791,795,800,807,810,814,818,821,827,829,832,836,840,843, + 845,847,852,863,868,872,878,883,890,895,899,903,909,911,918,926, + 929,932,957,971,987,991,1002,1006,1017,1021,1028,1036,1039,1044, + 1049,1056,1059,1066,1070,1077,1081,1088,1093,1102,1106,1139,1187, + 1215,1279,1287,1293,1296,1299,1307,1317,1323,1326,1329,1337,1345, + 1348,1352,1355,1360,1369,1381,1389,1397,1401,1419,1423,1428,1439, + 1445,1452,1464,1468,1471,1480,1486,1502,1523,1534,1538,1568,1576, + 1578,1580,1589,1593,1602,1606,1610,1615,1623,1627,1632,1639,1652, + 1661,1671,1678,1685,1698,1705,1709,1713,1718,1722,1725,1735,1743, + 1752,1755,1762,1778,1788,1796,1806,1809,1811,1813,1820,1833,1837, + 1854,1862,1870,1878,1885,1894,1898,1908,1910,1913,1921,1926,1936, + 1941,1953,1959,1969,1975,1985 ] class HogQLParser ( Parser ): @@ -800,50 +879,53 @@ class HogQLParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "", - "'->'", "'*'", "'`'", "'\\'", "'::'", "':='", "':'", - "','", "'||'", "'-'", "'$'", "'.'", "'=='", "", - "'>='", "", "'#'", "'~*'", "'=~*'", "'{'", - "'['", "'('", "'<='", "'<'", "'", "'!~*'", - "'!~'", "'?.'", "'??'", "'%'", "'+'", "'?'", "'\"'", - "'f''", "'F''", "'''", "'~'", "'=~'", "'}'", "']'", - "')'", "';'", "'/'", "", "'_'" ] + "", "", "", "", + "", "", "'->'", "'*'", "'`'", "'\\'", + "'::'", "':='", "':'", "','", "'||'", "'-'", "'$'", + "'.'", "'=='", "", "'>='", "", "'#'", + "'~*'", "'=~*'", "'{'", "'['", "'('", "'<='", "'<'", + "'", "'!~*'", "'!~'", "'?.'", "'??'", + "'%'", "'+'", "'?'", "'\"'", "'f''", "'F''", "'''", + "'~'", "'=~'", "'}'", "']'", "')'", "';'", "'/'", "", + "'_'" ] symbolicNames = [ "", "ALL", "AND", "ANTI", "ANY", "ARRAY", "AS", "ASCENDING", "ASOF", "BETWEEN", "BOTH", "BY", "CASE", "CAST", "CATCH", "COHORT", "COLLATE", "COLUMNS", "CROSS", "CUBE", "CURRENT", "DATE", "DAY", "DESC", "DESCENDING", "DISTINCT", "ELSE", "END", "EXCEPT", - "EXCLUDE", "EXTRACT", "FINAL", "FINALLY", "FIRST", - "FN", "FOLLOWING", "FOR", "FROM", "FULL", "FUN", "GROUP", - "GROUPING", "HAVING", "HOUR", "ID", "IF", "ILIKE", - "IN", "INF", "INNER", "INTERSECT", "INTERVAL", "IS", - "JOIN", "KEY", "LAMBDA", "LAST", "LEADING", "LEFT", - "LET", "LIKE", "LIMIT", "MATERIALIZED", "MINUTE", - "MONTH", "NAME", "NAN_SQL", "NOT", "NULL_SQL", "NULLS", - "OFFSET", "ON", "OR", "ORDER", "OUTER", "OVER", "PARTITION", - "PRECEDING", "PREWHERE", "QUALIFY", "QUARTER", "RANGE", - "RECURSIVE", "REPLACE", "RETURN", "RIGHT", "ROLLUP", - "ROW", "ROWS", "SAMPLE", "SECOND", "SELECT", "SEMI", - "SETS", "SETTINGS", "SUBSTRING", "THEN", "THROW", - "TIES", "TIMESTAMP", "TO", "TOP", "TOTALS", "TRAILING", - "TRIM", "TRUNCATE", "TRY", "TRY_CAST", "UNBOUNDED", - "UNION", "UNPIVOT", "USING", "VALUES", "WEEK", "WHEN", - "WHERE", "WHILE", "WINDOW", "WITH", "WITHIN", "YEAR", - "ESCAPE_CHAR_COMMON", "IDENTIFIER", "FLOATING_LITERAL", - "OCTAL_LITERAL", "DECIMAL_LITERAL", "HEXADECIMAL_LITERAL", - "STRING_LITERAL", "ARROW", "ASTERISK", "BACKQUOTE", - "BACKSLASH", "DOUBLECOLON", "COLONEQUALS", "COLON", - "COMMA", "CONCAT", "DASH", "DOLLAR", "DOT", "EQ_DOUBLE", - "EQ_SINGLE", "GT_EQ", "GT", "HASH", "IREGEX_SINGLE", - "IREGEX_DOUBLE", "LBRACE", "LBRACKET", "LPAREN", "LT_EQ", - "LT", "LT_SLASH", "NOT_EQ", "NOT_IREGEX", "NOT_REGEX", - "NULL_PROPERTY", "NULLISH", "PERCENT", "PLUS", "QUERY", - "QUOTE_DOUBLE", "QUOTE_SINGLE_TEMPLATE", "QUOTE_SINGLE_TEMPLATE_FULL", - "QUOTE_SINGLE", "REGEX_SINGLE", "REGEX_DOUBLE", "RBRACE", - "RBRACKET", "RPAREN", "SEMICOLON", "SLASH", "SLASH_GT", - "UNDERSCORE", "MULTI_LINE_COMMENT", "SINGLE_LINE_COMMENT", - "WHITESPACE", "STRING_TEXT", "STRING_ESCAPE_TRIGGER", - "FULL_STRING_TEXT", "FULL_STRING_ESCAPE_TRIGGER", + "EXCLUDE", "EXTRACT", "FINAL", "FILTER", "FINALLY", + "FIRST", "FN", "FOLLOWING", "FOR", "FROM", "FULL", + "FUN", "GROUP", "GROUPING", "HAVING", "HOUR", "ID", + "IF", "ILIKE", "IGNORE", "INCLUDE", "IN", "INF", "INNER", + "INTERSECT", "INTERVAL", "IS", "JOIN", "KEY", "LAMBDA", + "LAST", "LEADING", "LEFT", "LET", "LIKE", "LIMIT", + "MATERIALIZED", "MINUTE", "MONTH", "NAME", "NATURAL", + "NAN_SQL", "NOT", "NULL_SQL", "NULLS", "OFFSET", "ON", + "OR", "ORDER", "OUTER", "OVER", "PARTITION", "PIVOT", + "POSITIONAL", "PRECEDING", "PREWHERE", "QUALIFY", + "QUARTER", "RANGE", "RECURSIVE", "REPLACE", "RETURN", + "RIGHT", "ROLLUP", "ROW", "ROWS", "SAMPLE", "SECOND", + "SELECT", "SEMI", "SETS", "SETTINGS", "SUBSTRING", + "THEN", "THROW", "TIES", "TIMESTAMP", "TO", "TOP", + "TOTALS", "TRAILING", "TRIM", "TRUNCATE", "TRY", "TRY_CAST", + "UNBOUNDED", "UNION", "UNPIVOT", "USING", "VALUES", + "WEEK", "WHEN", "WHERE", "WHILE", "WINDOW", "WITH", + "WITHIN", "YEAR", "ESCAPE_CHAR_COMMON", "IDENTIFIER", + "FLOATING_LITERAL", "OCTAL_LITERAL", "DECIMAL_LITERAL", + "HEXADECIMAL_LITERAL", "STRING_LITERAL", "ARROW", + "ASTERISK", "BACKQUOTE", "BACKSLASH", "DOUBLECOLON", + "COLONEQUALS", "COLON", "COMMA", "CONCAT", "DASH", + "DOLLAR", "DOT", "EQ_DOUBLE", "EQ_SINGLE", "GT_EQ", + "GT", "HASH", "IREGEX_SINGLE", "IREGEX_DOUBLE", "LBRACE", + "LBRACKET", "LPAREN", "LT_EQ", "LT", "LT_SLASH", "NOT_EQ", + "NOT_IREGEX", "NOT_REGEX", "NULL_PROPERTY", "NULLISH", + "PERCENT", "PLUS", "QUERY", "QUOTE_DOUBLE", "QUOTE_SINGLE_TEMPLATE", + "QUOTE_SINGLE_TEMPLATE_FULL", "QUOTE_SINGLE", "REGEX_SINGLE", + "REGEX_DOUBLE", "RBRACE", "RBRACKET", "RPAREN", "SEMICOLON", + "SLASH", "SLASH_GT", "UNDERSCORE", "MULTI_LINE_COMMENT", + "SINGLE_LINE_COMMENT", "WHITESPACE", "STRING_TEXT", + "STRING_ESCAPE_TRIGGER", "FULL_STRING_TEXT", "FULL_STRING_ESCAPE_TRIGGER", "TAG_WS", "TAGC_WS", "HOGQLX_TEXT_TEXT", "HOGQLX_TEXT_WS" ] RULE_program = 0 @@ -931,29 +1013,31 @@ class HogQLParser ( Parser ): RULE_columnIdentifier = 82 RULE_nestedIdentifier = 83 RULE_tableExpr = 84 - RULE_unpivotColumnList = 85 - RULE_unpivotColumn = 86 - RULE_columnExprTupleOrSingle = 87 - RULE_columnAliases = 88 - RULE_tableFunctionExpr = 89 - RULE_tableIdentifier = 90 - RULE_tableArgList = 91 - RULE_databaseIdentifier = 92 - RULE_floatingLiteral = 93 - RULE_numberLiteral = 94 - RULE_literal = 95 - RULE_interval = 96 - RULE_keyword = 97 - RULE_keywordForAlias = 98 - RULE_alias = 99 - RULE_identifier = 100 - RULE_enumValue = 101 - RULE_placeholder = 102 - RULE_string = 103 - RULE_templateString = 104 - RULE_stringContents = 105 - RULE_fullTemplateString = 106 - RULE_stringContentsFull = 107 + RULE_pivotColumnList = 85 + RULE_pivotColumn = 86 + RULE_unpivotColumnList = 87 + RULE_unpivotColumn = 88 + RULE_columnExprTupleOrSingle = 89 + RULE_columnAliases = 90 + RULE_tableFunctionExpr = 91 + RULE_tableIdentifier = 92 + RULE_tableArgList = 93 + RULE_databaseIdentifier = 94 + RULE_floatingLiteral = 95 + RULE_numberLiteral = 96 + RULE_literal = 97 + RULE_interval = 98 + RULE_keyword = 99 + RULE_keywordForAlias = 100 + RULE_alias = 101 + RULE_identifier = 102 + RULE_enumValue = 103 + RULE_placeholder = 104 + RULE_string = 105 + RULE_templateString = 106 + RULE_stringContents = 107 + RULE_fullTemplateString = 108 + RULE_stringContentsFull = 109 ruleNames = [ "program", "declaration", "expression", "varDecl", "identifierList", "statement", "returnStmt", "throwStmt", "catchBlock", @@ -978,10 +1062,11 @@ class HogQLParser ( Parser ): "hogqlxText", "hogqlxTagElement", "hogqlxTagAttribute", "withExprList", "withExpr", "withExprColumnNameList", "columnIdentifier", "nestedIdentifier", "tableExpr", - "unpivotColumnList", "unpivotColumn", "columnExprTupleOrSingle", - "columnAliases", "tableFunctionExpr", "tableIdentifier", - "tableArgList", "databaseIdentifier", "floatingLiteral", - "numberLiteral", "literal", "interval", "keyword", "keywordForAlias", + "pivotColumnList", "pivotColumn", "unpivotColumnList", + "unpivotColumn", "columnExprTupleOrSingle", "columnAliases", + "tableFunctionExpr", "tableIdentifier", "tableArgList", + "databaseIdentifier", "floatingLiteral", "numberLiteral", + "literal", "interval", "keyword", "keywordForAlias", "alias", "identifier", "enumValue", "placeholder", "string", "templateString", "stringContents", "fullTemplateString", "stringContentsFull" ] @@ -1018,159 +1103,165 @@ class HogQLParser ( Parser ): EXCLUDE=29 EXTRACT=30 FINAL=31 - FINALLY=32 - FIRST=33 - FN=34 - FOLLOWING=35 - FOR=36 - FROM=37 - FULL=38 - FUN=39 - GROUP=40 - GROUPING=41 - HAVING=42 - HOUR=43 - ID=44 - IF=45 - ILIKE=46 - IN=47 - INF=48 - INNER=49 - INTERSECT=50 - INTERVAL=51 - IS=52 - JOIN=53 - KEY=54 - LAMBDA=55 - LAST=56 - LEADING=57 - LEFT=58 - LET=59 - LIKE=60 - LIMIT=61 - MATERIALIZED=62 - MINUTE=63 - MONTH=64 - NAME=65 - NAN_SQL=66 - NOT=67 - NULL_SQL=68 - NULLS=69 - OFFSET=70 - ON=71 - OR=72 - ORDER=73 - OUTER=74 - OVER=75 - PARTITION=76 - PRECEDING=77 - PREWHERE=78 - QUALIFY=79 - QUARTER=80 - RANGE=81 - RECURSIVE=82 - REPLACE=83 - RETURN=84 - RIGHT=85 - ROLLUP=86 - ROW=87 - ROWS=88 - SAMPLE=89 - SECOND=90 - SELECT=91 - SEMI=92 - SETS=93 - SETTINGS=94 - SUBSTRING=95 - THEN=96 - THROW=97 - TIES=98 - TIMESTAMP=99 - TO=100 - TOP=101 - TOTALS=102 - TRAILING=103 - TRIM=104 - TRUNCATE=105 - TRY=106 - TRY_CAST=107 - UNBOUNDED=108 - UNION=109 - UNPIVOT=110 - USING=111 - VALUES=112 - WEEK=113 - WHEN=114 - WHERE=115 - WHILE=116 - WINDOW=117 - WITH=118 - WITHIN=119 - YEAR=120 - ESCAPE_CHAR_COMMON=121 - IDENTIFIER=122 - FLOATING_LITERAL=123 - OCTAL_LITERAL=124 - DECIMAL_LITERAL=125 - HEXADECIMAL_LITERAL=126 - STRING_LITERAL=127 - ARROW=128 - ASTERISK=129 - BACKQUOTE=130 - BACKSLASH=131 - DOUBLECOLON=132 - COLONEQUALS=133 - COLON=134 - COMMA=135 - CONCAT=136 - DASH=137 - DOLLAR=138 - DOT=139 - EQ_DOUBLE=140 - EQ_SINGLE=141 - GT_EQ=142 - GT=143 - HASH=144 - IREGEX_SINGLE=145 - IREGEX_DOUBLE=146 - LBRACE=147 - LBRACKET=148 - LPAREN=149 - LT_EQ=150 - LT=151 - LT_SLASH=152 - NOT_EQ=153 - NOT_IREGEX=154 - NOT_REGEX=155 - NULL_PROPERTY=156 - NULLISH=157 - PERCENT=158 - PLUS=159 - QUERY=160 - QUOTE_DOUBLE=161 - QUOTE_SINGLE_TEMPLATE=162 - QUOTE_SINGLE_TEMPLATE_FULL=163 - QUOTE_SINGLE=164 - REGEX_SINGLE=165 - REGEX_DOUBLE=166 - RBRACE=167 - RBRACKET=168 - RPAREN=169 - SEMICOLON=170 - SLASH=171 - SLASH_GT=172 - UNDERSCORE=173 - MULTI_LINE_COMMENT=174 - SINGLE_LINE_COMMENT=175 - WHITESPACE=176 - STRING_TEXT=177 - STRING_ESCAPE_TRIGGER=178 - FULL_STRING_TEXT=179 - FULL_STRING_ESCAPE_TRIGGER=180 - TAG_WS=181 - TAGC_WS=182 - HOGQLX_TEXT_TEXT=183 - HOGQLX_TEXT_WS=184 + FILTER=32 + FINALLY=33 + FIRST=34 + FN=35 + FOLLOWING=36 + FOR=37 + FROM=38 + FULL=39 + FUN=40 + GROUP=41 + GROUPING=42 + HAVING=43 + HOUR=44 + ID=45 + IF=46 + ILIKE=47 + IGNORE=48 + INCLUDE=49 + IN=50 + INF=51 + INNER=52 + INTERSECT=53 + INTERVAL=54 + IS=55 + JOIN=56 + KEY=57 + LAMBDA=58 + LAST=59 + LEADING=60 + LEFT=61 + LET=62 + LIKE=63 + LIMIT=64 + MATERIALIZED=65 + MINUTE=66 + MONTH=67 + NAME=68 + NATURAL=69 + NAN_SQL=70 + NOT=71 + NULL_SQL=72 + NULLS=73 + OFFSET=74 + ON=75 + OR=76 + ORDER=77 + OUTER=78 + OVER=79 + PARTITION=80 + PIVOT=81 + POSITIONAL=82 + PRECEDING=83 + PREWHERE=84 + QUALIFY=85 + QUARTER=86 + RANGE=87 + RECURSIVE=88 + REPLACE=89 + RETURN=90 + RIGHT=91 + ROLLUP=92 + ROW=93 + ROWS=94 + SAMPLE=95 + SECOND=96 + SELECT=97 + SEMI=98 + SETS=99 + SETTINGS=100 + SUBSTRING=101 + THEN=102 + THROW=103 + TIES=104 + TIMESTAMP=105 + TO=106 + TOP=107 + TOTALS=108 + TRAILING=109 + TRIM=110 + TRUNCATE=111 + TRY=112 + TRY_CAST=113 + UNBOUNDED=114 + UNION=115 + UNPIVOT=116 + USING=117 + VALUES=118 + WEEK=119 + WHEN=120 + WHERE=121 + WHILE=122 + WINDOW=123 + WITH=124 + WITHIN=125 + YEAR=126 + ESCAPE_CHAR_COMMON=127 + IDENTIFIER=128 + FLOATING_LITERAL=129 + OCTAL_LITERAL=130 + DECIMAL_LITERAL=131 + HEXADECIMAL_LITERAL=132 + STRING_LITERAL=133 + ARROW=134 + ASTERISK=135 + BACKQUOTE=136 + BACKSLASH=137 + DOUBLECOLON=138 + COLONEQUALS=139 + COLON=140 + COMMA=141 + CONCAT=142 + DASH=143 + DOLLAR=144 + DOT=145 + EQ_DOUBLE=146 + EQ_SINGLE=147 + GT_EQ=148 + GT=149 + HASH=150 + IREGEX_SINGLE=151 + IREGEX_DOUBLE=152 + LBRACE=153 + LBRACKET=154 + LPAREN=155 + LT_EQ=156 + LT=157 + LT_SLASH=158 + NOT_EQ=159 + NOT_IREGEX=160 + NOT_REGEX=161 + NULL_PROPERTY=162 + NULLISH=163 + PERCENT=164 + PLUS=165 + QUERY=166 + QUOTE_DOUBLE=167 + QUOTE_SINGLE_TEMPLATE=168 + QUOTE_SINGLE_TEMPLATE_FULL=169 + QUOTE_SINGLE=170 + REGEX_SINGLE=171 + REGEX_DOUBLE=172 + RBRACE=173 + RBRACKET=174 + RPAREN=175 + SEMICOLON=176 + SLASH=177 + SLASH_GT=178 + UNDERSCORE=179 + MULTI_LINE_COMMENT=180 + SINGLE_LINE_COMMENT=181 + WHITESPACE=182 + STRING_TEXT=183 + STRING_ESCAPE_TRIGGER=184 + FULL_STRING_TEXT=185 + FULL_STRING_ESCAPE_TRIGGER=186 + TAG_WS=187 + TAGC_WS=188 + HOGQLX_TEXT_TEXT=189 + HOGQLX_TEXT_WS=190 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -1217,17 +1308,17 @@ def program(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 219 + self.state = 223 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & -4612811922897649666) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -180143985094819841) != 0) or ((((_la - 129)) & ~0x3f) == 0 and ((1 << (_la - 129)) & 2208692995329) != 0): - self.state = 216 + while (((_la) & ~0x3f) == 0 and ((1 << _la) & -9007208113127426) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 6917529027641081853) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & 282712703402175) != 0): + self.state = 220 self.declaration() - self.state = 221 + self.state = 225 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 222 + self.state = 226 self.match(HogQLParser.EOF) except RecognitionException as re: localctx.exception = re @@ -1270,17 +1361,17 @@ def declaration(self): localctx = HogQLParser.DeclarationContext(self, self._ctx, self.state) self.enterRule(localctx, 2, self.RULE_declaration) try: - self.state = 226 + self.state = 230 self._errHandler.sync(self) token = self._input.LA(1) - if token in [59]: + if token in [62]: self.enterOuterAlt(localctx, 1) - self.state = 224 + self.state = 228 self.varDecl() pass - elif token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 120, 122, 123, 124, 125, 126, 127, 129, 137, 139, 144, 147, 148, 149, 151, 159, 162, 170]: + elif token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 63, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 126, 128, 129, 130, 131, 132, 133, 135, 143, 145, 150, 153, 154, 155, 157, 165, 168, 176]: self.enterOuterAlt(localctx, 2) - self.state = 225 + self.state = 229 self.statement() pass else: @@ -1324,7 +1415,7 @@ def expression(self): self.enterRule(localctx, 4, self.RULE_expression) try: self.enterOuterAlt(localctx, 1) - self.state = 228 + self.state = 232 self.columnExpr(0) except RecognitionException as re: localctx.exception = re @@ -1375,17 +1466,17 @@ def varDecl(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 230 + self.state = 234 self.match(HogQLParser.LET) - self.state = 231 + self.state = 235 self.identifier() - self.state = 234 + self.state = 238 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==133: - self.state = 232 + if _la==139: + self.state = 236 self.match(HogQLParser.COLONEQUALS) - self.state = 233 + self.state = 237 self.expression() @@ -1437,26 +1528,26 @@ def identifierList(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 236 + self.state = 240 self.nestedIdentifier() - self.state = 241 + self.state = 245 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,3,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 237 + self.state = 241 self.match(HogQLParser.COMMA) - self.state = 238 + self.state = 242 self.nestedIdentifier() - self.state = 243 + self.state = 247 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,3,self._ctx) - self.state = 245 + self.state = 249 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==135: - self.state = 244 + if _la==141: + self.state = 248 self.match(HogQLParser.COMMA) @@ -1541,78 +1632,78 @@ def statement(self): localctx = HogQLParser.StatementContext(self, self._ctx, self.state) self.enterRule(localctx, 10, self.RULE_statement) try: - self.state = 259 + self.state = 263 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,5,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 247 + self.state = 251 self.returnStmt() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 248 + self.state = 252 self.throwStmt() pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 249 + self.state = 253 self.tryCatchStmt() pass elif la_ == 4: self.enterOuterAlt(localctx, 4) - self.state = 250 + self.state = 254 self.ifStmt() pass elif la_ == 5: self.enterOuterAlt(localctx, 5) - self.state = 251 + self.state = 255 self.whileStmt() pass elif la_ == 6: self.enterOuterAlt(localctx, 6) - self.state = 252 + self.state = 256 self.forInStmt() pass elif la_ == 7: self.enterOuterAlt(localctx, 7) - self.state = 253 + self.state = 257 self.forStmt() pass elif la_ == 8: self.enterOuterAlt(localctx, 8) - self.state = 254 + self.state = 258 self.funcStmt() pass elif la_ == 9: self.enterOuterAlt(localctx, 9) - self.state = 255 + self.state = 259 self.varAssignment() pass elif la_ == 10: self.enterOuterAlt(localctx, 10) - self.state = 256 + self.state = 260 self.block() pass elif la_ == 11: self.enterOuterAlt(localctx, 11) - self.state = 257 + self.state = 261 self.exprStmt() pass elif la_ == 12: self.enterOuterAlt(localctx, 12) - self.state = 258 + self.state = 262 self.emptyStmt() pass @@ -1661,21 +1752,21 @@ def returnStmt(self): self.enterRule(localctx, 12, self.RULE_returnStmt) try: self.enterOuterAlt(localctx, 1) - self.state = 261 + self.state = 265 self.match(HogQLParser.RETURN) - self.state = 263 + self.state = 267 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,6,self._ctx) if la_ == 1: - self.state = 262 + self.state = 266 self.expression() - self.state = 266 + self.state = 270 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,7,self._ctx) if la_ == 1: - self.state = 265 + self.state = 269 self.match(HogQLParser.SEMICOLON) @@ -1723,21 +1814,21 @@ def throwStmt(self): self.enterRule(localctx, 14, self.RULE_throwStmt) try: self.enterOuterAlt(localctx, 1) - self.state = 268 + self.state = 272 self.match(HogQLParser.THROW) - self.state = 270 + self.state = 274 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,8,self._ctx) if la_ == 1: - self.state = 269 + self.state = 273 self.expression() - self.state = 273 + self.state = 277 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,9,self._ctx) if la_ == 1: - self.state = 272 + self.state = 276 self.match(HogQLParser.SEMICOLON) @@ -1802,31 +1893,31 @@ def catchBlock(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 275 + self.state = 279 self.match(HogQLParser.CATCH) - self.state = 284 + self.state = 288 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==149: - self.state = 276 + if _la==155: + self.state = 280 self.match(HogQLParser.LPAREN) - self.state = 277 + self.state = 281 localctx.catchVar = self.identifier() - self.state = 280 + self.state = 284 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==134: - self.state = 278 + if _la==140: + self.state = 282 self.match(HogQLParser.COLON) - self.state = 279 + self.state = 283 localctx.catchType = self.identifier() - self.state = 282 + self.state = 286 self.match(HogQLParser.RPAREN) - self.state = 286 + self.state = 290 localctx.catchStmt = self.block() except RecognitionException as re: localctx.exception = re @@ -1885,27 +1976,27 @@ def tryCatchStmt(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 288 + self.state = 292 self.match(HogQLParser.TRY) - self.state = 289 - localctx.tryStmt = self.block() self.state = 293 + localctx.tryStmt = self.block() + self.state = 297 self._errHandler.sync(self) _la = self._input.LA(1) while _la==14: - self.state = 290 + self.state = 294 self.catchBlock() - self.state = 295 + self.state = 299 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 298 + self.state = 302 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==32: - self.state = 296 + if _la==33: + self.state = 300 self.match(HogQLParser.FINALLY) - self.state = 297 + self.state = 301 localctx.finallyStmt = self.block() @@ -1966,23 +2057,23 @@ def ifStmt(self): self.enterRule(localctx, 20, self.RULE_ifStmt) try: self.enterOuterAlt(localctx, 1) - self.state = 300 + self.state = 304 self.match(HogQLParser.IF) - self.state = 301 + self.state = 305 self.match(HogQLParser.LPAREN) - self.state = 302 + self.state = 306 self.expression() - self.state = 303 + self.state = 307 self.match(HogQLParser.RPAREN) - self.state = 304 + self.state = 308 self.statement() - self.state = 307 + self.state = 311 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,14,self._ctx) if la_ == 1: - self.state = 305 + self.state = 309 self.match(HogQLParser.ELSE) - self.state = 306 + self.state = 310 self.statement() @@ -2040,21 +2131,21 @@ def whileStmt(self): self.enterRule(localctx, 22, self.RULE_whileStmt) try: self.enterOuterAlt(localctx, 1) - self.state = 309 + self.state = 313 self.match(HogQLParser.WHILE) - self.state = 310 + self.state = 314 self.match(HogQLParser.LPAREN) - self.state = 311 + self.state = 315 self.expression() - self.state = 312 + self.state = 316 self.match(HogQLParser.RPAREN) - self.state = 313 + self.state = 317 self.statement() - self.state = 315 + self.state = 319 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,15,self._ctx) if la_ == 1: - self.state = 314 + self.state = 318 self.match(HogQLParser.SEMICOLON) @@ -2140,63 +2231,63 @@ def forStmt(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 317 + self.state = 321 self.match(HogQLParser.FOR) - self.state = 318 - self.match(HogQLParser.LPAREN) self.state = 322 + self.match(HogQLParser.LPAREN) + self.state = 326 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,16,self._ctx) if la_ == 1: - self.state = 319 + self.state = 323 localctx.initializerVarDeclr = self.varDecl() elif la_ == 2: - self.state = 320 + self.state = 324 localctx.initializerVarAssignment = self.varAssignment() elif la_ == 3: - self.state = 321 + self.state = 325 localctx.initializerExpression = self.expression() - self.state = 324 + self.state = 328 self.match(HogQLParser.SEMICOLON) - self.state = 326 + self.state = 330 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & -5189273242136756226) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -184651991358636033) != 0) or ((((_la - 129)) & ~0x3f) == 0 and ((1 << (_la - 129)) & 9669739777) != 0): - self.state = 325 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -4620694360411881474) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 6629016626756845565) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & 1237726691519) != 0): + self.state = 329 localctx.condition = self.expression() - self.state = 328 - self.match(HogQLParser.SEMICOLON) self.state = 332 + self.match(HogQLParser.SEMICOLON) + self.state = 336 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,18,self._ctx) if la_ == 1: - self.state = 329 + self.state = 333 localctx.incrementVarDeclr = self.varDecl() elif la_ == 2: - self.state = 330 + self.state = 334 localctx.incrementVarAssignment = self.varAssignment() elif la_ == 3: - self.state = 331 + self.state = 335 localctx.incrementExpression = self.expression() - self.state = 334 + self.state = 338 self.match(HogQLParser.RPAREN) - self.state = 335 + self.state = 339 self.statement() - self.state = 337 + self.state = 341 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,19,self._ctx) if la_ == 1: - self.state = 336 + self.state = 340 self.match(HogQLParser.SEMICOLON) @@ -2271,37 +2362,37 @@ def forInStmt(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 339 + self.state = 343 self.match(HogQLParser.FOR) - self.state = 340 + self.state = 344 self.match(HogQLParser.LPAREN) - self.state = 341 + self.state = 345 self.match(HogQLParser.LET) - self.state = 342 + self.state = 346 self.identifier() - self.state = 345 + self.state = 349 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==135: - self.state = 343 + if _la==141: + self.state = 347 self.match(HogQLParser.COMMA) - self.state = 344 + self.state = 348 self.identifier() - self.state = 347 + self.state = 351 self.match(HogQLParser.IN) - self.state = 348 + self.state = 352 self.expression() - self.state = 349 + self.state = 353 self.match(HogQLParser.RPAREN) - self.state = 350 + self.state = 354 self.statement() - self.state = 352 + self.state = 356 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,21,self._ctx) if la_ == 1: - self.state = 351 + self.state = 355 self.match(HogQLParser.SEMICOLON) @@ -2364,28 +2455,28 @@ def funcStmt(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 354 + self.state = 358 _la = self._input.LA(1) - if not(_la==34 or _la==39): + if not(_la==35 or _la==40): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 355 + self.state = 359 self.identifier() - self.state = 356 + self.state = 360 self.match(HogQLParser.LPAREN) - self.state = 358 + self.state = 362 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & -5189554717113466882) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 391808760944787435) != 0): - self.state = 357 + if ((((_la - 1)) & ~0x3f) == 0 and ((1 << (_la - 1)) & -2311473080112783361) != 0) or ((((_la - 66)) & ~0x3f) == 0 and ((1 << (_la - 66)) & 6268940175116599215) != 0): + self.state = 361 self.identifierList() - self.state = 360 + self.state = 364 self.match(HogQLParser.RPAREN) - self.state = 361 + self.state = 365 self.block() except RecognitionException as re: localctx.exception = re @@ -2431,11 +2522,11 @@ def varAssignment(self): self.enterRule(localctx, 30, self.RULE_varAssignment) try: self.enterOuterAlt(localctx, 1) - self.state = 363 + self.state = 367 self.expression() - self.state = 364 + self.state = 368 self.match(HogQLParser.COLONEQUALS) - self.state = 365 + self.state = 369 self.expression() except RecognitionException as re: localctx.exception = re @@ -2478,13 +2569,13 @@ def exprStmt(self): self.enterRule(localctx, 32, self.RULE_exprStmt) try: self.enterOuterAlt(localctx, 1) - self.state = 367 + self.state = 371 self.expression() - self.state = 369 + self.state = 373 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,23,self._ctx) if la_ == 1: - self.state = 368 + self.state = 372 self.match(HogQLParser.SEMICOLON) @@ -2525,7 +2616,7 @@ def emptyStmt(self): self.enterRule(localctx, 34, self.RULE_emptyStmt) try: self.enterOuterAlt(localctx, 1) - self.state = 371 + self.state = 375 self.match(HogQLParser.SEMICOLON) except RecognitionException as re: localctx.exception = re @@ -2575,19 +2666,19 @@ def block(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 373 - self.match(HogQLParser.LBRACE) self.state = 377 + self.match(HogQLParser.LBRACE) + self.state = 381 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & -4612811922897649666) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -180143985094819841) != 0) or ((((_la - 129)) & ~0x3f) == 0 and ((1 << (_la - 129)) & 2208692995329) != 0): - self.state = 374 + while (((_la) & ~0x3f) == 0 and ((1 << _la) & -9007208113127426) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 6917529027641081853) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & 282712703402175) != 0): + self.state = 378 self.declaration() - self.state = 379 + self.state = 383 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 380 + self.state = 384 self.match(HogQLParser.RBRACE) except RecognitionException as re: localctx.exception = re @@ -2633,11 +2724,11 @@ def kvPair(self): self.enterRule(localctx, 38, self.RULE_kvPair) try: self.enterOuterAlt(localctx, 1) - self.state = 382 + self.state = 386 self.expression() - self.state = 383 + self.state = 387 self.match(HogQLParser.COLON) - self.state = 384 + self.state = 388 self.expression() except RecognitionException as re: localctx.exception = re @@ -2687,26 +2778,26 @@ def kvPairList(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 386 + self.state = 390 self.kvPair() - self.state = 391 + self.state = 395 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,25,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 387 + self.state = 391 self.match(HogQLParser.COMMA) - self.state = 388 + self.state = 392 self.kvPair() - self.state = 393 + self.state = 397 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,25,self._ctx) - self.state = 395 + self.state = 399 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==135: - self.state = 394 + if _la==141: + self.state = 398 self.match(HogQLParser.COMMA) @@ -2763,34 +2854,34 @@ def select(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 400 + self.state = 404 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,27,self._ctx) if la_ == 1: - self.state = 397 + self.state = 401 self.selectSetStmt() pass elif la_ == 2: - self.state = 398 + self.state = 402 self.selectStmt() pass elif la_ == 3: - self.state = 399 + self.state = 403 self.hogqlxTagElement() pass - self.state = 403 + self.state = 407 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==170: - self.state = 402 + if _la==176: + self.state = 406 self.match(HogQLParser.SEMICOLON) - self.state = 405 + self.state = 409 self.match(HogQLParser.EOF) except RecognitionException as re: localctx.exception = re @@ -2812,6 +2903,10 @@ def selectStmt(self): return self.getTypedRuleContext(HogQLParser.SelectStmtContext,0) + def withClause(self): + return self.getTypedRuleContext(HogQLParser.WithClauseContext,0) + + def LPAREN(self): return self.getToken(HogQLParser.LPAREN, 0) @@ -2843,30 +2938,43 @@ def selectStmtWithParens(self): localctx = HogQLParser.SelectStmtWithParensContext(self, self._ctx, self.state) self.enterRule(localctx, 44, self.RULE_selectStmtWithParens) try: - self.state = 413 + self.state = 422 self._errHandler.sync(self) - token = self._input.LA(1) - if token in [91, 118]: + la_ = self._interp.adaptivePredict(self._input,29,self._ctx) + if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 407 + self.state = 411 self.selectStmt() pass - elif token in [149]: + + elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 408 + self.state = 412 + self.withClause() + self.state = 413 self.match(HogQLParser.LPAREN) - self.state = 409 + self.state = 414 self.selectSetStmt() - self.state = 410 + self.state = 415 self.match(HogQLParser.RPAREN) pass - elif token in [147]: + + elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 412 + self.state = 417 + self.match(HogQLParser.LPAREN) + self.state = 418 + self.selectSetStmt() + self.state = 419 + self.match(HogQLParser.RPAREN) + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 421 self.placeholder() pass - else: - raise NoViableAltException(self) + except RecognitionException as re: localctx.exception = re @@ -2928,141 +3036,141 @@ def subsequentSelectSetClause(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 460 + self.state = 469 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,38,self._ctx) if la_ == 1: - self.state = 415 + self.state = 424 self.match(HogQLParser.EXCEPT) - self.state = 416 + self.state = 425 self.match(HogQLParser.ALL) - self.state = 419 + self.state = 428 self._errHandler.sync(self) _la = self._input.LA(1) if _la==11: - self.state = 417 + self.state = 426 self.match(HogQLParser.BY) - self.state = 418 + self.state = 427 self.match(HogQLParser.NAME) pass elif la_ == 2: - self.state = 421 + self.state = 430 self.match(HogQLParser.EXCEPT) - self.state = 424 + self.state = 433 self._errHandler.sync(self) _la = self._input.LA(1) if _la==11: - self.state = 422 + self.state = 431 self.match(HogQLParser.BY) - self.state = 423 + self.state = 432 self.match(HogQLParser.NAME) pass elif la_ == 3: - self.state = 426 + self.state = 435 self.match(HogQLParser.UNION) - self.state = 427 + self.state = 436 self.match(HogQLParser.ALL) - self.state = 430 + self.state = 439 self._errHandler.sync(self) _la = self._input.LA(1) if _la==11: - self.state = 428 + self.state = 437 self.match(HogQLParser.BY) - self.state = 429 + self.state = 438 self.match(HogQLParser.NAME) pass elif la_ == 4: - self.state = 432 + self.state = 441 self.match(HogQLParser.UNION) - self.state = 433 + self.state = 442 self.match(HogQLParser.DISTINCT) - self.state = 436 + self.state = 445 self._errHandler.sync(self) _la = self._input.LA(1) if _la==11: - self.state = 434 + self.state = 443 self.match(HogQLParser.BY) - self.state = 435 + self.state = 444 self.match(HogQLParser.NAME) pass elif la_ == 5: - self.state = 438 + self.state = 447 self.match(HogQLParser.UNION) - self.state = 441 + self.state = 450 self._errHandler.sync(self) _la = self._input.LA(1) if _la==11: - self.state = 439 + self.state = 448 self.match(HogQLParser.BY) - self.state = 440 + self.state = 449 self.match(HogQLParser.NAME) pass elif la_ == 6: - self.state = 443 + self.state = 452 self.match(HogQLParser.INTERSECT) - self.state = 444 + self.state = 453 self.match(HogQLParser.ALL) - self.state = 447 + self.state = 456 self._errHandler.sync(self) _la = self._input.LA(1) if _la==11: - self.state = 445 + self.state = 454 self.match(HogQLParser.BY) - self.state = 446 + self.state = 455 self.match(HogQLParser.NAME) pass elif la_ == 7: - self.state = 449 + self.state = 458 self.match(HogQLParser.INTERSECT) - self.state = 450 + self.state = 459 self.match(HogQLParser.DISTINCT) - self.state = 453 + self.state = 462 self._errHandler.sync(self) _la = self._input.LA(1) if _la==11: - self.state = 451 + self.state = 460 self.match(HogQLParser.BY) - self.state = 452 + self.state = 461 self.match(HogQLParser.NAME) pass elif la_ == 8: - self.state = 455 + self.state = 464 self.match(HogQLParser.INTERSECT) - self.state = 458 + self.state = 467 self._errHandler.sync(self) _la = self._input.LA(1) if _la==11: - self.state = 456 + self.state = 465 self.match(HogQLParser.BY) - self.state = 457 + self.state = 466 self.match(HogQLParser.NAME) pass - self.state = 462 + self.state = 471 self.selectStmtWithParens() except RecognitionException as re: localctx.exception = re @@ -3091,6 +3199,10 @@ def subsequentSelectSetClause(self, i:int=None): return self.getTypedRuleContext(HogQLParser.SubsequentSelectSetClauseContext,i) + def orderByClause(self): + return self.getTypedRuleContext(HogQLParser.OrderByClauseContext,0) + + def limitAndOffsetClauseOptional(self): return self.getTypedRuleContext(HogQLParser.LimitAndOffsetClauseOptionalContext,0) @@ -3114,23 +3226,31 @@ def selectSetStmt(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 464 + self.state = 473 self.selectStmtWithParens() - self.state = 468 + self.state = 477 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==28 or _la==50 or _la==109: - self.state = 465 + while _la==28 or _la==53 or _la==115: + self.state = 474 self.subsequentSelectSetClause() - self.state = 470 + self.state = 479 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 472 + self.state = 481 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==61 or _la==70: - self.state = 471 + if _la==77: + self.state = 480 + self.orderByClause() + + + self.state = 484 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==64 or _la==74: + self.state = 483 self.limitAndOffsetClauseOptional() @@ -3193,40 +3313,40 @@ def limitAndOffsetClauseOptional(self): self.enterRule(localctx, 50, self.RULE_limitAndOffsetClauseOptional) self._la = 0 # Token type try: - self.state = 501 + self.state = 513 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,46,self._ctx) + la_ = self._interp.adaptivePredict(self._input,47,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 474 + self.state = 486 self.match(HogQLParser.LIMIT) - self.state = 475 + self.state = 487 self.columnExpr(0) - self.state = 477 + self.state = 489 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==158: - self.state = 476 + if _la==164: + self.state = 488 self.match(HogQLParser.PERCENT) - self.state = 481 + self.state = 493 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==135: - self.state = 479 + if _la==141: + self.state = 491 self.match(HogQLParser.COMMA) - self.state = 480 + self.state = 492 self.columnExpr(0) - self.state = 485 + self.state = 497 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==118: - self.state = 483 + if _la==124: + self.state = 495 self.match(HogQLParser.WITH) - self.state = 484 + self.state = 496 self.match(HogQLParser.TIES) @@ -3234,39 +3354,39 @@ def limitAndOffsetClauseOptional(self): elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 487 + self.state = 499 self.match(HogQLParser.LIMIT) - self.state = 488 + self.state = 500 self.columnExpr(0) - self.state = 490 + self.state = 502 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==158: - self.state = 489 + if _la==164: + self.state = 501 self.match(HogQLParser.PERCENT) - self.state = 494 + self.state = 506 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==118: - self.state = 492 + if _la==124: + self.state = 504 self.match(HogQLParser.WITH) - self.state = 493 + self.state = 505 self.match(HogQLParser.TIES) - self.state = 496 + self.state = 508 self.match(HogQLParser.OFFSET) - self.state = 497 + self.state = 509 self.columnExpr(0) pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 499 + self.state = 511 self.match(HogQLParser.OFFSET) - self.state = 500 + self.state = 512 self.columnExpr(0) pass @@ -3408,182 +3528,182 @@ def selectStmt(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 504 + self.state = 516 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==118: - self.state = 503 + if _la==124: + self.state = 515 localctx.with_ = self.withClause() - self.state = 506 + self.state = 518 self.match(HogQLParser.SELECT) - self.state = 508 + self.state = 520 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,48,self._ctx) + la_ = self._interp.adaptivePredict(self._input,49,self._ctx) if la_ == 1: - self.state = 507 + self.state = 519 self.match(HogQLParser.DISTINCT) - self.state = 511 + self.state = 523 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,49,self._ctx) + la_ = self._interp.adaptivePredict(self._input,50,self._ctx) if la_ == 1: - self.state = 510 + self.state = 522 self.topClause() - self.state = 513 + self.state = 525 localctx.columns = self.selectColumnExprList() - self.state = 515 + self.state = 527 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==37: - self.state = 514 + if _la==38: + self.state = 526 localctx.from_ = self.fromClause() - self.state = 518 + self.state = 530 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & 288793326105133088) != 0): - self.state = 517 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 2310346608841064480) != 0): + self.state = 529 self.arrayJoinClause() - self.state = 521 + self.state = 533 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==78: - self.state = 520 + if _la==84: + self.state = 532 self.prewhereClause() - self.state = 524 + self.state = 536 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==115: - self.state = 523 + if _la==121: + self.state = 535 localctx.where = self.whereClause() - self.state = 530 + self.state = 542 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,55,self._ctx) + la_ = self._interp.adaptivePredict(self._input,56,self._ctx) if la_ == 1: - self.state = 527 + self.state = 539 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==111: - self.state = 526 + if _la==117: + self.state = 538 self.match(HogQLParser.USING) - self.state = 529 + self.state = 541 self.sampleClause() - self.state = 533 + self.state = 545 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==40: - self.state = 532 + if _la==41: + self.state = 544 self.groupByClause() - self.state = 537 + self.state = 549 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,57,self._ctx) + la_ = self._interp.adaptivePredict(self._input,58,self._ctx) if la_ == 1: - self.state = 535 + self.state = 547 self.match(HogQLParser.WITH) - self.state = 536 + self.state = 548 _la = self._input.LA(1) - if not(_la==19 or _la==86): + if not(_la==19 or _la==92): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 541 + self.state = 553 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==118: - self.state = 539 + if _la==124: + self.state = 551 self.match(HogQLParser.WITH) - self.state = 540 + self.state = 552 self.match(HogQLParser.TOTALS) - self.state = 544 + self.state = 556 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==42: - self.state = 543 + if _la==43: + self.state = 555 self.havingClause() - self.state = 547 + self.state = 559 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==79: - self.state = 546 + if _la==85: + self.state = 558 self.qualifyClause() - self.state = 551 + self.state = 563 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==111: - self.state = 549 + if _la==117: + self.state = 561 self.match(HogQLParser.USING) - self.state = 550 + self.state = 562 self.sampleClause() - self.state = 554 + self.state = 566 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==117: - self.state = 553 + if _la==123: + self.state = 565 self.windowClause() - self.state = 557 + self.state = 569 self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==73: - self.state = 556 + la_ = self._interp.adaptivePredict(self._input,64,self._ctx) + if la_ == 1: + self.state = 568 self.orderByClause() - self.state = 560 + self.state = 572 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,64,self._ctx) + la_ = self._interp.adaptivePredict(self._input,65,self._ctx) if la_ == 1: - self.state = 559 + self.state = 571 self.limitByClause() - self.state = 564 + self.state = 576 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,65,self._ctx) + la_ = self._interp.adaptivePredict(self._input,66,self._ctx) if la_ == 1: - self.state = 562 + self.state = 574 self.limitAndOffsetClause() elif la_ == 2: - self.state = 563 + self.state = 575 self.offsetOnlyClause() - self.state = 567 + self.state = 579 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==94: - self.state = 566 + if _la==100: + self.state = 578 self.settingsClause() @@ -3631,17 +3751,17 @@ def withClause(self): self.enterRule(localctx, 54, self.RULE_withClause) try: self.enterOuterAlt(localctx, 1) - self.state = 569 + self.state = 581 self.match(HogQLParser.WITH) - self.state = 571 + self.state = 583 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,67,self._ctx) + la_ = self._interp.adaptivePredict(self._input,68,self._ctx) if la_ == 1: - self.state = 570 + self.state = 582 self.match(HogQLParser.RECURSIVE) - self.state = 573 + self.state = 585 self.withExprList() except RecognitionException as re: localctx.exception = re @@ -3689,17 +3809,17 @@ def topClause(self): self.enterRule(localctx, 56, self.RULE_topClause) try: self.enterOuterAlt(localctx, 1) - self.state = 575 + self.state = 587 self.match(HogQLParser.TOP) - self.state = 576 + self.state = 588 self.match(HogQLParser.DECIMAL_LITERAL) - self.state = 579 + self.state = 591 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,68,self._ctx) + la_ = self._interp.adaptivePredict(self._input,69,self._ctx) if la_ == 1: - self.state = 577 + self.state = 589 self.match(HogQLParser.WITH) - self.state = 578 + self.state = 590 self.match(HogQLParser.TIES) @@ -3744,9 +3864,9 @@ def fromClause(self): self.enterRule(localctx, 58, self.RULE_fromClause) try: self.enterOuterAlt(localctx, 1) - self.state = 581 + self.state = 593 self.match(HogQLParser.FROM) - self.state = 582 + self.state = 594 self.joinExpr(0) except RecognitionException as re: localctx.exception = re @@ -3799,24 +3919,24 @@ def arrayJoinClause(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 585 + self.state = 597 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==49 or _la==58: - self.state = 584 + if _la==52 or _la==61: + self.state = 596 _la = self._input.LA(1) - if not(_la==49 or _la==58): + if not(_la==52 or _la==61): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 587 + self.state = 599 self.match(HogQLParser.ARRAY) - self.state = 588 + self.state = 600 self.match(HogQLParser.JOIN) - self.state = 589 + self.state = 601 self.columnExprList() except RecognitionException as re: localctx.exception = re @@ -3894,35 +4014,35 @@ def windowClause(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 591 + self.state = 603 self.match(HogQLParser.WINDOW) - self.state = 592 + self.state = 604 self.identifier() - self.state = 593 + self.state = 605 self.match(HogQLParser.AS) - self.state = 594 + self.state = 606 self.match(HogQLParser.LPAREN) - self.state = 595 + self.state = 607 self.windowExpr() - self.state = 596 + self.state = 608 self.match(HogQLParser.RPAREN) - self.state = 606 + self.state = 618 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==135: - self.state = 597 + while _la==141: + self.state = 609 self.match(HogQLParser.COMMA) - self.state = 598 + self.state = 610 self.identifier() - self.state = 599 + self.state = 611 self.match(HogQLParser.AS) - self.state = 600 + self.state = 612 self.match(HogQLParser.LPAREN) - self.state = 601 + self.state = 613 self.windowExpr() - self.state = 602 + self.state = 614 self.match(HogQLParser.RPAREN) - self.state = 608 + self.state = 620 self._errHandler.sync(self) _la = self._input.LA(1) @@ -3967,9 +4087,9 @@ def prewhereClause(self): self.enterRule(localctx, 64, self.RULE_prewhereClause) try: self.enterOuterAlt(localctx, 1) - self.state = 609 + self.state = 621 self.match(HogQLParser.PREWHERE) - self.state = 610 + self.state = 622 self.columnExpr(0) except RecognitionException as re: localctx.exception = re @@ -4012,9 +4132,9 @@ def whereClause(self): self.enterRule(localctx, 66, self.RULE_whereClause) try: self.enterOuterAlt(localctx, 1) - self.state = 612 + self.state = 624 self.match(HogQLParser.WHERE) - self.state = 613 + self.state = 625 self.columnExpr(0) except RecognitionException as re: localctx.exception = re @@ -4038,6 +4158,9 @@ def GROUP(self): def BY(self): return self.getToken(HogQLParser.BY, 0) + def ALL(self): + return self.getToken(HogQLParser.ALL, 0) + def LPAREN(self): return self.getToken(HogQLParser.LPAREN, 0) @@ -4083,44 +4206,49 @@ def groupByClause(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 615 + self.state = 627 self.match(HogQLParser.GROUP) - self.state = 616 + self.state = 628 self.match(HogQLParser.BY) - self.state = 629 + self.state = 642 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,71,self._ctx) + la_ = self._interp.adaptivePredict(self._input,72,self._ctx) if la_ == 1: - self.state = 617 + self.state = 629 + self.match(HogQLParser.ALL) + pass + + elif la_ == 2: + self.state = 630 _la = self._input.LA(1) - if not(_la==19 or _la==86): + if not(_la==19 or _la==92): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 618 + self.state = 631 self.match(HogQLParser.LPAREN) - self.state = 619 + self.state = 632 self.columnExprList() - self.state = 620 + self.state = 633 self.match(HogQLParser.RPAREN) pass - elif la_ == 2: - self.state = 622 + elif la_ == 3: + self.state = 635 self.match(HogQLParser.GROUPING) - self.state = 623 + self.state = 636 self.match(HogQLParser.SETS) - self.state = 624 + self.state = 637 self.match(HogQLParser.LPAREN) - self.state = 625 + self.state = 638 self.groupingSetList() - self.state = 626 + self.state = 639 self.match(HogQLParser.RPAREN) pass - elif la_ == 3: - self.state = 628 + elif la_ == 4: + self.state = 641 self.columnExprList() pass @@ -4173,17 +4301,17 @@ def groupingSetList(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 631 + self.state = 644 self.groupingSet() - self.state = 636 + self.state = 649 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==135: - self.state = 632 + while _la==141: + self.state = 645 self.match(HogQLParser.COMMA) - self.state = 633 + self.state = 646 self.groupingSet() - self.state = 638 + self.state = 651 self._errHandler.sync(self) _la = self._input.LA(1) @@ -4232,17 +4360,17 @@ def groupingSet(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 639 + self.state = 652 self.match(HogQLParser.LPAREN) - self.state = 641 + self.state = 654 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & -5189273242136756226) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -184651991358636033) != 0) or ((((_la - 129)) & ~0x3f) == 0 and ((1 << (_la - 129)) & 9669739777) != 0): - self.state = 640 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -4620694360411881474) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 6629016626756845565) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & 1237726691519) != 0): + self.state = 653 self.columnExprList() - self.state = 643 + self.state = 656 self.match(HogQLParser.RPAREN) except RecognitionException as re: localctx.exception = re @@ -4285,9 +4413,9 @@ def havingClause(self): self.enterRule(localctx, 74, self.RULE_havingClause) try: self.enterOuterAlt(localctx, 1) - self.state = 645 + self.state = 658 self.match(HogQLParser.HAVING) - self.state = 646 + self.state = 659 self.columnExpr(0) except RecognitionException as re: localctx.exception = re @@ -4330,9 +4458,9 @@ def qualifyClause(self): self.enterRule(localctx, 76, self.RULE_qualifyClause) try: self.enterOuterAlt(localctx, 1) - self.state = 648 + self.state = 661 self.match(HogQLParser.QUALIFY) - self.state = 649 + self.state = 662 self.columnExpr(0) except RecognitionException as re: localctx.exception = re @@ -4378,11 +4506,11 @@ def orderByClause(self): self.enterRule(localctx, 78, self.RULE_orderByClause) try: self.enterOuterAlt(localctx, 1) - self.state = 651 + self.state = 664 self.match(HogQLParser.ORDER) - self.state = 652 + self.state = 665 self.match(HogQLParser.BY) - self.state = 653 + self.state = 666 self.orderExprList() except RecognitionException as re: localctx.exception = re @@ -4428,11 +4556,11 @@ def projectionOrderByClause(self): self.enterRule(localctx, 80, self.RULE_projectionOrderByClause) try: self.enterOuterAlt(localctx, 1) - self.state = 655 + self.state = 668 self.match(HogQLParser.ORDER) - self.state = 656 + self.state = 669 self.match(HogQLParser.BY) - self.state = 657 + self.state = 670 self.columnExprList() except RecognitionException as re: localctx.exception = re @@ -4482,13 +4610,13 @@ def limitByClause(self): self.enterRule(localctx, 82, self.RULE_limitByClause) try: self.enterOuterAlt(localctx, 1) - self.state = 659 + self.state = 672 self.match(HogQLParser.LIMIT) - self.state = 660 + self.state = 673 self.limitExpr() - self.state = 661 + self.state = 674 self.match(HogQLParser.BY) - self.state = 662 + self.state = 675 self.columnExprList() except RecognitionException as re: localctx.exception = re @@ -4549,40 +4677,40 @@ def limitAndOffsetClause(self): self.enterRule(localctx, 84, self.RULE_limitAndOffsetClause) self._la = 0 # Token type try: - self.state = 689 + self.state = 702 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,79,self._ctx) + la_ = self._interp.adaptivePredict(self._input,80,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 664 + self.state = 677 self.match(HogQLParser.LIMIT) - self.state = 665 + self.state = 678 self.columnExpr(0) - self.state = 667 + self.state = 680 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==158: - self.state = 666 + if _la==164: + self.state = 679 self.match(HogQLParser.PERCENT) - self.state = 671 + self.state = 684 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==135: - self.state = 669 + if _la==141: + self.state = 682 self.match(HogQLParser.COMMA) - self.state = 670 + self.state = 683 self.columnExpr(0) - self.state = 675 + self.state = 688 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==118: - self.state = 673 + if _la==124: + self.state = 686 self.match(HogQLParser.WITH) - self.state = 674 + self.state = 687 self.match(HogQLParser.TIES) @@ -4590,31 +4718,31 @@ def limitAndOffsetClause(self): elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 677 + self.state = 690 self.match(HogQLParser.LIMIT) - self.state = 678 + self.state = 691 self.columnExpr(0) - self.state = 680 + self.state = 693 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==158: - self.state = 679 + if _la==164: + self.state = 692 self.match(HogQLParser.PERCENT) - self.state = 684 + self.state = 697 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==118: - self.state = 682 + if _la==124: + self.state = 695 self.match(HogQLParser.WITH) - self.state = 683 + self.state = 696 self.match(HogQLParser.TIES) - self.state = 686 + self.state = 699 self.match(HogQLParser.OFFSET) - self.state = 687 + self.state = 700 self.columnExpr(0) pass @@ -4660,9 +4788,9 @@ def offsetOnlyClause(self): self.enterRule(localctx, 86, self.RULE_offsetOnlyClause) try: self.enterOuterAlt(localctx, 1) - self.state = 691 + self.state = 704 self.match(HogQLParser.OFFSET) - self.state = 692 + self.state = 705 self.columnExpr(0) except RecognitionException as re: localctx.exception = re @@ -4705,9 +4833,9 @@ def settingsClause(self): self.enterRule(localctx, 88, self.RULE_settingsClause) try: self.enterOuterAlt(localctx, 1) - self.state = 694 + self.state = 707 self.match(HogQLParser.SETTINGS) - self.state = 695 + self.state = 708 self.settingExprList() except RecognitionException as re: localctx.exception = re @@ -4760,19 +4888,19 @@ def valuesClause(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 697 + self.state = 710 self.match(HogQLParser.VALUES) - self.state = 698 + self.state = 711 self.valuesRow() - self.state = 703 + self.state = 716 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==135: - self.state = 699 + while _la==141: + self.state = 712 self.match(HogQLParser.COMMA) - self.state = 700 + self.state = 713 self.valuesRow() - self.state = 705 + self.state = 718 self._errHandler.sync(self) _la = self._input.LA(1) @@ -4830,23 +4958,23 @@ def valuesRow(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 706 + self.state = 719 self.match(HogQLParser.LPAREN) - self.state = 707 + self.state = 720 self.columnExpr(0) - self.state = 712 + self.state = 725 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==135: - self.state = 708 + while _la==141: + self.state = 721 self.match(HogQLParser.COMMA) - self.state = 709 + self.state = 722 self.columnExpr(0) - self.state = 714 + self.state = 727 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 715 + self.state = 728 self.match(HogQLParser.RPAREN) except RecognitionException as re: localctx.exception = re @@ -4873,7 +5001,7 @@ def copyFrom(self, ctx:ParserRuleContext): super().copyFrom(ctx) - class JoinExprOpContext(JoinExprContext): + class JoinExprPositionalContext(JoinExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.JoinExprContext super().__init__(parser) @@ -4885,14 +5013,43 @@ def joinExpr(self, i:int=None): else: return self.getTypedRuleContext(HogQLParser.JoinExprContext,i) + def POSITIONAL(self): + return self.getToken(HogQLParser.POSITIONAL, 0) def JOIN(self): return self.getToken(HogQLParser.JOIN, 0) def joinConstraintClause(self): return self.getTypedRuleContext(HogQLParser.JoinConstraintClauseContext,0) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitJoinExprPositional" ): + return visitor.visitJoinExprPositional(self) + else: + return visitor.visitChildren(self) + + + class JoinExprOpContext(JoinExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.JoinExprContext + super().__init__(parser) + self.copyFrom(ctx) + + def joinExpr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(HogQLParser.JoinExprContext) + else: + return self.getTypedRuleContext(HogQLParser.JoinExprContext,i) + + def JOIN(self): + return self.getToken(HogQLParser.JOIN, 0) + def NATURAL(self): + return self.getToken(HogQLParser.NATURAL, 0) def joinOp(self): return self.getTypedRuleContext(HogQLParser.JoinOpContext,0) + def joinConstraintClause(self): + return self.getTypedRuleContext(HogQLParser.JoinConstraintClauseContext,0) + def accept(self, visitor:ParseTreeVisitor): if hasattr( visitor, "visitJoinExprOp" ): @@ -4923,6 +5080,36 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class JoinExprUnpivotContext(JoinExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.JoinExprContext + super().__init__(parser) + self.copyFrom(ctx) + + def joinExpr(self): + return self.getTypedRuleContext(HogQLParser.JoinExprContext,0) + + def UNPIVOT(self): + return self.getToken(HogQLParser.UNPIVOT, 0) + def LPAREN(self): + return self.getToken(HogQLParser.LPAREN, 0) + def unpivotColumnList(self): + return self.getTypedRuleContext(HogQLParser.UnpivotColumnListContext,0) + + def RPAREN(self): + return self.getToken(HogQLParser.RPAREN, 0) + def INCLUDE(self): + return self.getToken(HogQLParser.INCLUDE, 0) + def NULLS(self): + return self.getToken(HogQLParser.NULLS, 0) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitJoinExprUnpivot" ): + return visitor.visitJoinExprUnpivot(self) + else: + return visitor.visitChildren(self) + + class JoinExprParensContext(JoinExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.JoinExprContext @@ -4967,6 +5154,42 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class JoinExprPivotContext(JoinExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.JoinExprContext + super().__init__(parser) + self.copyFrom(ctx) + + def joinExpr(self): + return self.getTypedRuleContext(HogQLParser.JoinExprContext,0) + + def PIVOT(self): + return self.getToken(HogQLParser.PIVOT, 0) + def LPAREN(self): + return self.getToken(HogQLParser.LPAREN, 0) + def columnExprList(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(HogQLParser.ColumnExprListContext) + else: + return self.getTypedRuleContext(HogQLParser.ColumnExprListContext,i) + + def pivotColumnList(self): + return self.getTypedRuleContext(HogQLParser.PivotColumnListContext,0) + + def RPAREN(self): + return self.getToken(HogQLParser.RPAREN, 0) + def GROUP(self): + return self.getToken(HogQLParser.GROUP, 0) + def BY(self): + return self.getToken(HogQLParser.BY, 0) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitJoinExprPivot" ): + return visitor.visitJoinExprPivot(self) + else: + return visitor.visitChildren(self) + + def joinExpr(self, _p:int=0): _parentctx = self._ctx @@ -4978,29 +5201,29 @@ def joinExpr(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 729 + self.state = 742 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,84,self._ctx) + la_ = self._interp.adaptivePredict(self._input,85,self._ctx) if la_ == 1: localctx = HogQLParser.JoinExprTableContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 718 + self.state = 731 self.tableExpr(0) - self.state = 720 + self.state = 733 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,82,self._ctx) + la_ = self._interp.adaptivePredict(self._input,83,self._ctx) if la_ == 1: - self.state = 719 + self.state = 732 self.match(HogQLParser.FINAL) - self.state = 723 + self.state = 736 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,83,self._ctx) + la_ = self._interp.adaptivePredict(self._input,84,self._ctx) if la_ == 1: - self.state = 722 + self.state = 735 self.sampleClause() @@ -5010,67 +5233,162 @@ def joinExpr(self, _p:int=0): localctx = HogQLParser.JoinExprParensContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 725 + self.state = 738 self.match(HogQLParser.LPAREN) - self.state = 726 + self.state = 739 self.joinExpr(0) - self.state = 727 + self.state = 740 self.match(HogQLParser.RPAREN) pass self._ctx.stop = self._input.LT(-1) - self.state = 745 + self.state = 791 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,87,self._ctx) + _alt = self._interp.adaptivePredict(self._input,93,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 743 + self.state = 789 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,86,self._ctx) + la_ = self._interp.adaptivePredict(self._input,92,self._ctx) if la_ == 1: localctx = HogQLParser.JoinExprCrossOpContext(self, HogQLParser.JoinExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_joinExpr) - self.state = 731 - if not self.precpred(self._ctx, 3): + self.state = 744 + if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 732 + raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") + self.state = 745 self.joinOpCross() - self.state = 733 - self.joinExpr(4) + self.state = 746 + self.joinExpr(6) pass elif la_ == 2: localctx = HogQLParser.JoinExprOpContext(self, HogQLParser.JoinExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_joinExpr) - self.state = 735 - if not self.precpred(self._ctx, 4): + self.state = 748 + if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 737 + raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") + self.state = 750 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==69: + self.state = 749 + self.match(HogQLParser.NATURAL) + + + self.state = 753 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & 288793600983040282) != 0) or _la==85 or _la==92: - self.state = 736 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 2310347158596878618) != 0) or _la==91 or _la==98: + self.state = 752 self.joinOp() - self.state = 739 + self.state = 755 + self.match(HogQLParser.JOIN) + self.state = 756 + self.joinExpr(0) + self.state = 758 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,88,self._ctx) + if la_ == 1: + self.state = 757 + self.joinConstraintClause() + + + pass + + elif la_ == 3: + localctx = HogQLParser.JoinExprPositionalContext(self, HogQLParser.JoinExprContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_joinExpr) + self.state = 760 + if not self.precpred(self._ctx, 6): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") + self.state = 761 + self.match(HogQLParser.POSITIONAL) + self.state = 762 self.match(HogQLParser.JOIN) - self.state = 740 + self.state = 763 self.joinExpr(0) - self.state = 741 - self.joinConstraintClause() + self.state = 765 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,89,self._ctx) + if la_ == 1: + self.state = 764 + self.joinConstraintClause() + + + pass + + elif la_ == 4: + localctx = HogQLParser.JoinExprPivotContext(self, HogQLParser.JoinExprContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_joinExpr) + self.state = 767 + if not self.precpred(self._ctx, 4): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") + self.state = 768 + self.match(HogQLParser.PIVOT) + self.state = 769 + self.match(HogQLParser.LPAREN) + self.state = 770 + self.columnExprList() + self.state = 771 + self.pivotColumnList() + self.state = 775 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==41: + self.state = 772 + self.match(HogQLParser.GROUP) + self.state = 773 + self.match(HogQLParser.BY) + self.state = 774 + self.columnExprList() + + + self.state = 777 + self.match(HogQLParser.RPAREN) + pass + + elif la_ == 5: + localctx = HogQLParser.JoinExprUnpivotContext(self, HogQLParser.JoinExprContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_joinExpr) + self.state = 779 + if not self.precpred(self._ctx, 3): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") + self.state = 780 + self.match(HogQLParser.UNPIVOT) + self.state = 783 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==49: + self.state = 781 + self.match(HogQLParser.INCLUDE) + self.state = 782 + self.match(HogQLParser.NULLS) + + + self.state = 785 + self.match(HogQLParser.LPAREN) + self.state = 786 + self.unpivotColumnList() + self.state = 787 + self.match(HogQLParser.RPAREN) pass - self.state = 747 + self.state = 793 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,87,self._ctx) + _alt = self._interp.adaptivePredict(self._input,93,self._ctx) except RecognitionException as re: localctx.exception = re @@ -5112,6 +5430,8 @@ def ALL(self): return self.getToken(HogQLParser.ALL, 0) def ANY(self): return self.getToken(HogQLParser.ANY, 0) + def ASOF(self): + return self.getToken(HogQLParser.ASOF, 0) def accept(self, visitor:ParseTreeVisitor): if hasattr( visitor, "visitJoinOpFull" ): @@ -5132,12 +5452,12 @@ def ANTI(self): return self.getToken(HogQLParser.ANTI, 0) def SEMI(self): return self.getToken(HogQLParser.SEMI, 0) + def ASOF(self): + return self.getToken(HogQLParser.ASOF, 0) def ALL(self): return self.getToken(HogQLParser.ALL, 0) def ANY(self): return self.getToken(HogQLParser.ANY, 0) - def ASOF(self): - return self.getToken(HogQLParser.ASOF, 0) def accept(self, visitor:ParseTreeVisitor): if hasattr( visitor, "visitJoinOpInner" ): @@ -5152,22 +5472,22 @@ def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.Join super().__init__(parser) self.copyFrom(ctx) + def ASOF(self): + return self.getToken(HogQLParser.ASOF, 0) def LEFT(self): return self.getToken(HogQLParser.LEFT, 0) def RIGHT(self): return self.getToken(HogQLParser.RIGHT, 0) - def OUTER(self): - return self.getToken(HogQLParser.OUTER, 0) + def ANTI(self): + return self.getToken(HogQLParser.ANTI, 0) def SEMI(self): return self.getToken(HogQLParser.SEMI, 0) + def OUTER(self): + return self.getToken(HogQLParser.OUTER, 0) def ALL(self): return self.getToken(HogQLParser.ALL, 0) - def ANTI(self): - return self.getToken(HogQLParser.ANTI, 0) def ANY(self): return self.getToken(HogQLParser.ANY, 0) - def ASOF(self): - return self.getToken(HogQLParser.ASOF, 0) def accept(self, visitor:ParseTreeVisitor): if hasattr( visitor, "visitJoinOpLeftRight" ): @@ -5183,21 +5503,21 @@ def joinOp(self): self.enterRule(localctx, 96, self.RULE_joinOp) self._la = 0 # Token type try: - self.state = 793 + self.state = 847 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,101,self._ctx) + la_ = self._interp.adaptivePredict(self._input,108,self._ctx) if la_ == 1: localctx = HogQLParser.JoinOpInnerContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 759 + self.state = 807 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,90,self._ctx) + la_ = self._interp.adaptivePredict(self._input,96,self._ctx) if la_ == 1: - self.state = 749 + self.state = 795 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & 274) != 0): - self.state = 748 + self.state = 794 _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 274) != 0)): self._errHandler.recoverInline(self) @@ -5206,18 +5526,18 @@ def joinOp(self): self.consume() - self.state = 751 + self.state = 797 self.match(HogQLParser.INNER) pass elif la_ == 2: - self.state = 752 + self.state = 798 self.match(HogQLParser.INNER) - self.state = 754 + self.state = 800 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & 274) != 0): - self.state = 753 + self.state = 799 _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 274) != 0)): self._errHandler.recoverInline(self) @@ -5229,7 +5549,7 @@ def joinOp(self): pass elif la_ == 3: - self.state = 756 + self.state = 802 _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 274) != 0)): self._errHandler.recoverInline(self) @@ -5239,78 +5559,90 @@ def joinOp(self): pass elif la_ == 4: - self.state = 757 + self.state = 803 self.match(HogQLParser.ANTI) pass elif la_ == 5: - self.state = 758 + self.state = 804 self.match(HogQLParser.SEMI) pass + elif la_ == 6: + self.state = 805 + self.match(HogQLParser.ASOF) + self.state = 806 + _la = self._input.LA(1) + if not(_la==3 or _la==98): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + pass + pass elif la_ == 2: localctx = HogQLParser.JoinOpLeftRightContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 775 + self.state = 829 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,95,self._ctx) + la_ = self._interp.adaptivePredict(self._input,102,self._ctx) if la_ == 1: - self.state = 762 + self.state = 810 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & 282) != 0) or _la==92: - self.state = 761 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 282) != 0) or _la==98: + self.state = 809 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 282) != 0) or _la==92): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 282) != 0) or _la==98): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 764 + self.state = 812 _la = self._input.LA(1) - if not(_la==58 or _la==85): + if not(_la==61 or _la==91): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 766 + self.state = 814 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==74: - self.state = 765 + if _la==78: + self.state = 813 self.match(HogQLParser.OUTER) pass elif la_ == 2: - self.state = 768 + self.state = 816 _la = self._input.LA(1) - if not(_la==58 or _la==85): + if not(_la==61 or _la==91): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 770 + self.state = 818 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==74: - self.state = 769 + if _la==78: + self.state = 817 self.match(HogQLParser.OUTER) - self.state = 773 + self.state = 821 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & 282) != 0) or _la==92: - self.state = 772 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 282) != 0) or _la==98: + self.state = 820 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 282) != 0) or _la==92): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 282) != 0) or _la==98): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -5319,59 +5651,86 @@ def joinOp(self): pass + elif la_ == 3: + self.state = 823 + self.match(HogQLParser.ASOF) + self.state = 824 + _la = self._input.LA(1) + if not(_la==3 or _la==98): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 825 + _la = self._input.LA(1) + if not(_la==61 or _la==91): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 827 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==78: + self.state = 826 + self.match(HogQLParser.OUTER) + + + pass + pass elif la_ == 3: localctx = HogQLParser.JoinOpFullContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 791 + self.state = 845 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,100,self._ctx) + la_ = self._interp.adaptivePredict(self._input,107,self._ctx) if la_ == 1: - self.state = 778 + self.state = 832 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==1 or _la==4: - self.state = 777 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 274) != 0): + self.state = 831 _la = self._input.LA(1) - if not(_la==1 or _la==4): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 274) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 780 + self.state = 834 self.match(HogQLParser.FULL) - self.state = 782 + self.state = 836 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==74: - self.state = 781 + if _la==78: + self.state = 835 self.match(HogQLParser.OUTER) pass elif la_ == 2: - self.state = 784 + self.state = 838 self.match(HogQLParser.FULL) - self.state = 786 + self.state = 840 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==74: - self.state = 785 + if _la==78: + self.state = 839 self.match(HogQLParser.OUTER) - self.state = 789 + self.state = 843 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==1 or _la==4: - self.state = 788 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 274) != 0): + self.state = 842 _la = self._input.LA(1) - if not(_la==1 or _la==4): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 274) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -5426,19 +5785,19 @@ def joinOpCross(self): localctx = HogQLParser.JoinOpCrossContext(self, self._ctx, self.state) self.enterRule(localctx, 98, self.RULE_joinOpCross) try: - self.state = 798 + self.state = 852 self._errHandler.sync(self) token = self._input.LA(1) if token in [18]: self.enterOuterAlt(localctx, 1) - self.state = 795 + self.state = 849 self.match(HogQLParser.CROSS) - self.state = 796 + self.state = 850 self.match(HogQLParser.JOIN) pass - elif token in [135]: + elif token in [141]: self.enterOuterAlt(localctx, 2) - self.state = 797 + self.state = 851 self.match(HogQLParser.COMMA) pass else: @@ -5493,34 +5852,34 @@ def joinConstraintClause(self): localctx = HogQLParser.JoinConstraintClauseContext(self, self._ctx, self.state) self.enterRule(localctx, 100, self.RULE_joinConstraintClause) try: - self.state = 809 + self.state = 863 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,103,self._ctx) + la_ = self._interp.adaptivePredict(self._input,110,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 800 + self.state = 854 self.match(HogQLParser.ON) - self.state = 801 + self.state = 855 self.columnExprList() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 802 + self.state = 856 self.match(HogQLParser.USING) - self.state = 803 + self.state = 857 self.match(HogQLParser.LPAREN) - self.state = 804 + self.state = 858 self.columnExprList() - self.state = 805 + self.state = 859 self.match(HogQLParser.RPAREN) pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 807 + self.state = 861 self.match(HogQLParser.USING) - self.state = 808 + self.state = 862 self.columnExprList() pass @@ -5585,37 +5944,37 @@ def sampleClause(self): self.enterRule(localctx, 102, self.RULE_sampleClause) try: self.enterOuterAlt(localctx, 1) - self.state = 811 + self.state = 865 self.match(HogQLParser.SAMPLE) - self.state = 812 + self.state = 866 self.ratioExpr() - self.state = 814 + self.state = 868 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,104,self._ctx) + la_ = self._interp.adaptivePredict(self._input,111,self._ctx) if la_ == 1: - self.state = 813 + self.state = 867 self.match(HogQLParser.PERCENT) - self.state = 818 + self.state = 872 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,105,self._ctx) + la_ = self._interp.adaptivePredict(self._input,112,self._ctx) if la_ == 1: - self.state = 816 + self.state = 870 self.match(HogQLParser.OFFSET) - self.state = 817 + self.state = 871 self.ratioExpr() - self.state = 824 + self.state = 878 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,106,self._ctx) + la_ = self._interp.adaptivePredict(self._input,113,self._ctx) if la_ == 1: - self.state = 820 + self.state = 874 self.match(HogQLParser.LPAREN) - self.state = 821 + self.state = 875 self.identifier() - self.state = 822 + self.state = 876 self.match(HogQLParser.RPAREN) @@ -5667,20 +6026,20 @@ def limitExpr(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 826 + self.state = 880 self.columnExpr(0) - self.state = 829 + self.state = 883 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==70 or _la==135: - self.state = 827 + if _la==74 or _la==141: + self.state = 881 _la = self._input.LA(1) - if not(_la==70 or _la==135): + if not(_la==74 or _la==141): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 828 + self.state = 882 self.columnExpr(0) @@ -5732,17 +6091,17 @@ def orderExprList(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 831 + self.state = 885 self.orderExpr() - self.state = 836 + self.state = 890 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==135: - self.state = 832 + while _la==141: + self.state = 886 self.match(HogQLParser.COMMA) - self.state = 833 + self.state = 887 self.orderExpr() - self.state = 838 + self.state = 892 self._errHandler.sync(self) _la = self._input.LA(1) @@ -5809,13 +6168,13 @@ def orderExpr(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 839 + self.state = 893 self.columnExpr(0) - self.state = 841 + self.state = 895 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & 25165952) != 0): - self.state = 840 + self.state = 894 _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 25165952) != 0)): self._errHandler.recoverInline(self) @@ -5824,28 +6183,28 @@ def orderExpr(self): self.consume() - self.state = 845 + self.state = 899 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==69: - self.state = 843 - self.match(HogQLParser.NULLS) - self.state = 844 + if _la==73: + self.state = 897 + self.match(HogQLParser.NULLS) + self.state = 898 _la = self._input.LA(1) - if not(_la==33 or _la==56): + if not(_la==34 or _la==59): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 849 + self.state = 903 self._errHandler.sync(self) _la = self._input.LA(1) if _la==16: - self.state = 847 + self.state = 901 self.match(HogQLParser.COLLATE) - self.state = 848 + self.state = 902 self.match(HogQLParser.STRING_LITERAL) @@ -5896,25 +6255,25 @@ def ratioExpr(self): localctx = HogQLParser.RatioExprContext(self, self._ctx, self.state) self.enterRule(localctx, 110, self.RULE_ratioExpr) try: - self.state = 857 + self.state = 911 self._errHandler.sync(self) token = self._input.LA(1) - if token in [147]: + if token in [153]: self.enterOuterAlt(localctx, 1) - self.state = 851 + self.state = 905 self.placeholder() pass - elif token in [48, 66, 123, 124, 125, 126, 137, 139, 159]: + elif token in [51, 70, 129, 130, 131, 132, 143, 145, 165]: self.enterOuterAlt(localctx, 2) - self.state = 852 + self.state = 906 self.numberLiteral() - self.state = 855 + self.state = 909 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,112,self._ctx) + la_ = self._interp.adaptivePredict(self._input,119,self._ctx) if la_ == 1: - self.state = 853 + self.state = 907 self.match(HogQLParser.SLASH) - self.state = 854 + self.state = 908 self.numberLiteral() @@ -5970,17 +6329,17 @@ def settingExprList(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 859 + self.state = 913 self.settingExpr() - self.state = 864 + self.state = 918 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==135: - self.state = 860 + while _la==141: + self.state = 914 self.match(HogQLParser.COMMA) - self.state = 861 + self.state = 915 self.settingExpr() - self.state = 866 + self.state = 920 self._errHandler.sync(self) _la = self._input.LA(1) @@ -6029,11 +6388,11 @@ def settingExpr(self): self.enterRule(localctx, 114, self.RULE_settingExpr) try: self.enterOuterAlt(localctx, 1) - self.state = 867 + self.state = 921 self.identifier() - self.state = 868 + self.state = 922 self.match(HogQLParser.EQ_SINGLE) - self.state = 869 + self.state = 923 self.literal() except RecognitionException as re: localctx.exception = re @@ -6082,27 +6441,27 @@ def windowExpr(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 872 + self.state = 926 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==76: - self.state = 871 + if _la==80: + self.state = 925 self.winPartitionByClause() - self.state = 875 + self.state = 929 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==73: - self.state = 874 + if _la==77: + self.state = 928 self.winOrderByClause() - self.state = 878 + self.state = 932 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==81 or _la==88: - self.state = 877 + if _la==87 or _la==94: + self.state = 931 self.winFrameClause() @@ -6150,11 +6509,11 @@ def winPartitionByClause(self): self.enterRule(localctx, 118, self.RULE_winPartitionByClause) try: self.enterOuterAlt(localctx, 1) - self.state = 880 + self.state = 934 self.match(HogQLParser.PARTITION) - self.state = 881 + self.state = 935 self.match(HogQLParser.BY) - self.state = 882 + self.state = 936 self.columnExprList() except RecognitionException as re: localctx.exception = re @@ -6200,11 +6559,11 @@ def winOrderByClause(self): self.enterRule(localctx, 120, self.RULE_winOrderByClause) try: self.enterOuterAlt(localctx, 1) - self.state = 884 + self.state = 938 self.match(HogQLParser.ORDER) - self.state = 885 + self.state = 939 self.match(HogQLParser.BY) - self.state = 886 + self.state = 940 self.orderExprList() except RecognitionException as re: localctx.exception = re @@ -6256,15 +6615,15 @@ def withinGroupClause(self): self.enterRule(localctx, 122, self.RULE_withinGroupClause) try: self.enterOuterAlt(localctx, 1) - self.state = 888 + self.state = 942 self.match(HogQLParser.WITHIN) - self.state = 889 + self.state = 943 self.match(HogQLParser.GROUP) - self.state = 890 + self.state = 944 self.match(HogQLParser.LPAREN) - self.state = 891 + self.state = 945 self.orderByClause() - self.state = 892 + self.state = 946 self.match(HogQLParser.RPAREN) except RecognitionException as re: localctx.exception = re @@ -6311,14 +6670,14 @@ def winFrameClause(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 894 + self.state = 948 _la = self._input.LA(1) - if not(_la==81 or _la==88): + if not(_la==87 or _la==94): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 895 + self.state = 949 self.winFrameExtend() except RecognitionException as re: localctx.exception = re @@ -6393,26 +6752,26 @@ def winFrameExtend(self): localctx = HogQLParser.WinFrameExtendContext(self, self._ctx, self.state) self.enterRule(localctx, 126, self.RULE_winFrameExtend) try: - self.state = 903 + self.state = 957 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,118,self._ctx) + la_ = self._interp.adaptivePredict(self._input,125,self._ctx) if la_ == 1: localctx = HogQLParser.FrameStartContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 897 + self.state = 951 self.winFrameBound() pass elif la_ == 2: localctx = HogQLParser.FrameBetweenContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 898 + self.state = 952 self.match(HogQLParser.BETWEEN) - self.state = 899 + self.state = 953 self.winFrameBound() - self.state = 900 + self.state = 954 self.match(HogQLParser.AND) - self.state = 901 + self.state = 955 self.winFrameBound() pass @@ -6470,41 +6829,41 @@ def winFrameBound(self): self.enterRule(localctx, 128, self.RULE_winFrameBound) try: self.enterOuterAlt(localctx, 1) - self.state = 917 + self.state = 971 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,119,self._ctx) + la_ = self._interp.adaptivePredict(self._input,126,self._ctx) if la_ == 1: - self.state = 905 + self.state = 959 self.match(HogQLParser.CURRENT) - self.state = 906 + self.state = 960 self.match(HogQLParser.ROW) pass elif la_ == 2: - self.state = 907 + self.state = 961 self.match(HogQLParser.UNBOUNDED) - self.state = 908 + self.state = 962 self.match(HogQLParser.PRECEDING) pass elif la_ == 3: - self.state = 909 + self.state = 963 self.match(HogQLParser.UNBOUNDED) - self.state = 910 + self.state = 964 self.match(HogQLParser.FOLLOWING) pass elif la_ == 4: - self.state = 911 + self.state = 965 self.columnExpr(0) - self.state = 912 + self.state = 966 self.match(HogQLParser.PRECEDING) pass elif la_ == 5: - self.state = 914 + self.state = 968 self.columnExpr(0) - self.state = 915 + self.state = 969 self.match(HogQLParser.FOLLOWING) pass @@ -6550,9 +6909,9 @@ def expr(self): self.enterRule(localctx, 130, self.RULE_expr) try: self.enterOuterAlt(localctx, 1) - self.state = 919 + self.state = 973 self.columnExpr(0) - self.state = 920 + self.state = 974 self.match(HogQLParser.EOF) except RecognitionException as re: localctx.exception = re @@ -6579,7 +6938,6 @@ def copyFrom(self, ctx:ParserRuleContext): super().copyFrom(ctx) - class ColumnTypeExprNestedContext(ColumnTypeExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.ColumnTypeExprContext @@ -6639,6 +6997,29 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class ColumnTypeExprArrayContext(ColumnTypeExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.ColumnTypeExprContext + super().__init__(parser) + self.copyFrom(ctx) + + def columnTypeExpr(self): + return self.getTypedRuleContext(HogQLParser.ColumnTypeExprContext,0) + + def LBRACKET(self): + return self.getToken(HogQLParser.LBRACKET, 0) + def RBRACKET(self): + return self.getToken(HogQLParser.RBRACKET, 0) + def DECIMAL_LITERAL(self): + return self.getToken(HogQLParser.DECIMAL_LITERAL, 0) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitColumnTypeExprArray" ): + return visitor.visitColumnTypeExprArray(self) + else: + return visitor.visitChildren(self) + + class ColumnTypeExprComplexContext(ColumnTypeExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.ColumnTypeExprContext @@ -6741,173 +7122,217 @@ def accept(self, visitor:ParseTreeVisitor): - def columnTypeExpr(self): - - localctx = HogQLParser.ColumnTypeExprContext(self, self._ctx, self.state) - self.enterRule(localctx, 132, self.RULE_columnTypeExpr) + def columnTypeExpr(self, _p:int=0): + _parentctx = self._ctx + _parentState = self.state + localctx = HogQLParser.ColumnTypeExprContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 132 + self.enterRecursionRule(localctx, 132, self.RULE_columnTypeExpr, _p) self._la = 0 # Token type try: - self.state = 984 + self.enterOuterAlt(localctx, 1) + self.state = 1039 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,128,self._ctx) + la_ = self._interp.adaptivePredict(self._input,135,self._ctx) if la_ == 1: localctx = HogQLParser.ColumnTypeExprNestedContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 922 + self._ctx = localctx + _prevctx = localctx + + self.state = 977 self.identifier() - self.state = 923 + self.state = 978 self.match(HogQLParser.LPAREN) - self.state = 924 + self.state = 979 self.identifier() - self.state = 925 - self.columnTypeExpr() - self.state = 932 + self.state = 980 + self.columnTypeExpr(0) + self.state = 987 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,120,self._ctx) + _alt = self._interp.adaptivePredict(self._input,127,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 926 + self.state = 981 self.match(HogQLParser.COMMA) - self.state = 927 + self.state = 982 self.identifier() - self.state = 928 - self.columnTypeExpr() - self.state = 934 + self.state = 983 + self.columnTypeExpr(0) + self.state = 989 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,120,self._ctx) + _alt = self._interp.adaptivePredict(self._input,127,self._ctx) - self.state = 936 + self.state = 991 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==135: - self.state = 935 + if _la==141: + self.state = 990 self.match(HogQLParser.COMMA) - self.state = 938 + self.state = 993 self.match(HogQLParser.RPAREN) pass elif la_ == 2: localctx = HogQLParser.ColumnTypeExprEnumContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 940 + self._ctx = localctx + _prevctx = localctx + self.state = 995 self.identifier() - self.state = 941 + self.state = 996 self.match(HogQLParser.LPAREN) - self.state = 942 + self.state = 997 self.enumValue() - self.state = 947 + self.state = 1002 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,122,self._ctx) + _alt = self._interp.adaptivePredict(self._input,129,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 943 + self.state = 998 self.match(HogQLParser.COMMA) - self.state = 944 + self.state = 999 self.enumValue() - self.state = 949 + self.state = 1004 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,122,self._ctx) + _alt = self._interp.adaptivePredict(self._input,129,self._ctx) - self.state = 951 + self.state = 1006 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==135: - self.state = 950 + if _la==141: + self.state = 1005 self.match(HogQLParser.COMMA) - self.state = 953 + self.state = 1008 self.match(HogQLParser.RPAREN) pass elif la_ == 3: localctx = HogQLParser.ColumnTypeExprComplexContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 955 + self._ctx = localctx + _prevctx = localctx + self.state = 1010 self.identifier() - self.state = 956 + self.state = 1011 self.match(HogQLParser.LPAREN) - self.state = 957 - self.columnTypeExpr() - self.state = 962 + self.state = 1012 + self.columnTypeExpr(0) + self.state = 1017 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,124,self._ctx) + _alt = self._interp.adaptivePredict(self._input,131,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 958 + self.state = 1013 self.match(HogQLParser.COMMA) - self.state = 959 - self.columnTypeExpr() - self.state = 964 + self.state = 1014 + self.columnTypeExpr(0) + self.state = 1019 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,124,self._ctx) + _alt = self._interp.adaptivePredict(self._input,131,self._ctx) - self.state = 966 + self.state = 1021 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==135: - self.state = 965 + if _la==141: + self.state = 1020 self.match(HogQLParser.COMMA) - self.state = 968 + self.state = 1023 self.match(HogQLParser.RPAREN) pass elif la_ == 4: localctx = HogQLParser.ColumnTypeExprParamContext(self, localctx) - self.enterOuterAlt(localctx, 4) - self.state = 970 + self._ctx = localctx + _prevctx = localctx + self.state = 1025 self.identifier() - self.state = 971 + self.state = 1026 self.match(HogQLParser.LPAREN) - self.state = 973 + self.state = 1028 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & -5189273242136756226) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -184651991358636033) != 0) or ((((_la - 129)) & ~0x3f) == 0 and ((1 << (_la - 129)) & 9669739777) != 0): - self.state = 972 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -4620694360411881474) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 6629016626756845565) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & 1237726691519) != 0): + self.state = 1027 self.columnExprList() - self.state = 975 + self.state = 1030 self.match(HogQLParser.RPAREN) pass elif la_ == 5: localctx = HogQLParser.ColumnTypeExprCompoundContext(self, localctx) - self.enterOuterAlt(localctx, 5) - self.state = 977 + self._ctx = localctx + _prevctx = localctx + self.state = 1032 self.identifier() - self.state = 979 + self.state = 1034 self._errHandler.sync(self) - _la = self._input.LA(1) - while True: - self.state = 978 - self.identifier() - self.state = 981 + _alt = 1 + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1033 + self.identifier() + + else: + raise NoViableAltException(self) + self.state = 1036 self._errHandler.sync(self) - _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & -5189554717113466882) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 391808760944787435) != 0)): - break + _alt = self._interp.adaptivePredict(self._input,134,self._ctx) pass elif la_ == 6: localctx = HogQLParser.ColumnTypeExprSimpleContext(self, localctx) - self.enterOuterAlt(localctx, 6) - self.state = 983 + self._ctx = localctx + _prevctx = localctx + self.state = 1038 self.identifier() pass + self._ctx.stop = self._input.LT(-1) + self.state = 1049 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,137,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + localctx = HogQLParser.ColumnTypeExprArrayContext(self, HogQLParser.ColumnTypeExprContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_columnTypeExpr) + self.state = 1041 + if not self.precpred(self._ctx, 7): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") + self.state = 1042 + self.match(HogQLParser.LBRACKET) + self.state = 1044 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1043 + self.match(HogQLParser.DECIMAL_LITERAL) + + + self.state = 1046 + self.match(HogQLParser.RBRACKET) + self.state = 1051 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,137,self._ctx) + except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) self._errHandler.recover(self, re) finally: - self.exitRule() + self.unrollRecursionContexts(_parentctx) return localctx @@ -6971,34 +7396,34 @@ def columnTypeCastExpr(self): localctx = HogQLParser.ColumnTypeCastExprContext(self, self._ctx, self.state) self.enterRule(localctx, 134, self.RULE_columnTypeCastExpr) try: - self.state = 993 + self.state = 1059 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,130,self._ctx) + la_ = self._interp.adaptivePredict(self._input,139,self._ctx) if la_ == 1: localctx = HogQLParser.ColumnTypeCastExprCompoundContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 986 + self.state = 1052 self.identifier() - self.state = 988 + self.state = 1054 self._errHandler.sync(self) _alt = 1 while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt == 1: - self.state = 987 + self.state = 1053 self.identifier() else: raise NoViableAltException(self) - self.state = 990 + self.state = 1056 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,129,self._ctx) + _alt = self._interp.adaptivePredict(self._input,138,self._ctx) pass elif la_ == 2: localctx = HogQLParser.ColumnTypeCastExprSimpleContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 992 + self.state = 1058 self.identifier() pass @@ -7050,26 +7475,26 @@ def columnExprList(self): self.enterRule(localctx, 136, self.RULE_columnExprList) try: self.enterOuterAlt(localctx, 1) - self.state = 995 + self.state = 1061 self.columnExpr(0) - self.state = 1000 + self.state = 1066 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,131,self._ctx) + _alt = self._interp.adaptivePredict(self._input,140,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 996 + self.state = 1062 self.match(HogQLParser.COMMA) - self.state = 997 + self.state = 1063 self.columnExpr(0) - self.state = 1002 + self.state = 1068 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,131,self._ctx) + _alt = self._interp.adaptivePredict(self._input,140,self._ctx) - self.state = 1004 + self.state = 1070 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,132,self._ctx) + la_ = self._interp.adaptivePredict(self._input,141,self._ctx) if la_ == 1: - self.state = 1003 + self.state = 1069 self.match(HogQLParser.COMMA) @@ -7121,26 +7546,26 @@ def selectColumnExprList(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1006 + self.state = 1072 self.selectColumnExpr() - self.state = 1011 + self.state = 1077 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,133,self._ctx) + _alt = self._interp.adaptivePredict(self._input,142,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 1007 + self.state = 1073 self.match(HogQLParser.COMMA) - self.state = 1008 + self.state = 1074 self.selectColumnExpr() - self.state = 1013 + self.state = 1079 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,133,self._ctx) + _alt = self._interp.adaptivePredict(self._input,142,self._ctx) - self.state = 1015 + self.state = 1081 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==135: - self.state = 1014 + if _la==141: + self.state = 1080 self.match(HogQLParser.COMMA) @@ -7215,24 +7640,24 @@ def selectColumnExpr(self): localctx = HogQLParser.SelectColumnExprContext(self, self._ctx, self.state) self.enterRule(localctx, 140, self.RULE_selectColumnExpr) try: - self.state = 1022 + self.state = 1088 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,135,self._ctx) + la_ = self._interp.adaptivePredict(self._input,144,self._ctx) if la_ == 1: localctx = HogQLParser.ColumnExprAliasBeforeContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 1017 + self.state = 1083 self.identifier() - self.state = 1018 + self.state = 1084 self.match(HogQLParser.COLON) - self.state = 1019 + self.state = 1085 self.columnExpr(0) pass elif la_ == 2: localctx = HogQLParser.ColumnExprSelectValueContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 1021 + self.state = 1087 self.columnExpr(0) pass @@ -7378,6 +7803,8 @@ def LBRACKET(self): return self.getToken(HogQLParser.LBRACKET, 0) def RBRACKET(self): return self.getToken(HogQLParser.RBRACKET, 0) + def ARRAY(self): + return self.getToken(HogQLParser.ARRAY, 0) def columnExprList(self): return self.getTypedRuleContext(HogQLParser.ColumnExprListContext,0) @@ -7579,6 +8006,7 @@ def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.Colu super().__init__(parser) self.columnExprs = None # ColumnExprListContext self.columnArgList = None # ColumnExprListContext + self.filterExpr = None # ColumnExprContext self.copyFrom(ctx) def identifier(self, i:int=None): @@ -7599,6 +8027,13 @@ def RPAREN(self, i:int=None): return self.getTokens(HogQLParser.RPAREN) else: return self.getToken(HogQLParser.RPAREN, i) + def FILTER(self): + return self.getToken(HogQLParser.FILTER, 0) + def WHERE(self): + return self.getToken(HogQLParser.WHERE, 0) + def columnExpr(self): + return self.getTypedRuleContext(HogQLParser.ColumnExprContext,0) + def columnExprList(self, i:int=None): if i is None: return self.getTypedRuleContexts(HogQLParser.ColumnExprListContext) @@ -7829,6 +8264,44 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class ColumnExprColumnsQualifiedExcludeContext(ColumnExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.ColumnExprContext + super().__init__(parser) + self.copyFrom(ctx) + + def COLUMNS(self): + return self.getToken(HogQLParser.COLUMNS, 0) + def LPAREN(self, i:int=None): + if i is None: + return self.getTokens(HogQLParser.LPAREN) + else: + return self.getToken(HogQLParser.LPAREN, i) + def identifier(self): + return self.getTypedRuleContext(HogQLParser.IdentifierContext,0) + + def DOT(self): + return self.getToken(HogQLParser.DOT, 0) + def ASTERISK(self): + return self.getToken(HogQLParser.ASTERISK, 0) + def EXCLUDE(self): + return self.getToken(HogQLParser.EXCLUDE, 0) + def identifierList(self): + return self.getTypedRuleContext(HogQLParser.IdentifierListContext,0) + + def RPAREN(self, i:int=None): + if i is None: + return self.getTokens(HogQLParser.RPAREN) + else: + return self.getToken(HogQLParser.RPAREN, i) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitColumnExprColumnsQualifiedExclude" ): + return visitor.visitColumnExprColumnsQualifiedExclude(self) + else: + return visitor.visitChildren(self) + + class ColumnExprNotContext(ColumnExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.ColumnExprContext @@ -7854,6 +8327,7 @@ def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.Colu super().__init__(parser) self.columnExprs = None # ColumnExprListContext self.columnArgList = None # ColumnExprListContext + self.filterExpr = None # ColumnExprContext self.copyFrom(ctx) def identifier(self): @@ -7871,12 +8345,26 @@ def RPAREN(self, i:int=None): return self.getToken(HogQLParser.RPAREN, i) def DISTINCT(self): return self.getToken(HogQLParser.DISTINCT, 0) + def ORDER(self): + return self.getToken(HogQLParser.ORDER, 0) + def BY(self): + return self.getToken(HogQLParser.BY, 0) + def orderExprList(self): + return self.getTypedRuleContext(HogQLParser.OrderExprListContext,0) + + def FILTER(self): + return self.getToken(HogQLParser.FILTER, 0) + def WHERE(self): + return self.getToken(HogQLParser.WHERE, 0) def columnExprList(self, i:int=None): if i is None: return self.getTypedRuleContexts(HogQLParser.ColumnExprListContext) else: return self.getTypedRuleContext(HogQLParser.ColumnExprListContext,i) + def columnExpr(self): + return self.getTypedRuleContext(HogQLParser.ColumnExprContext,0) + def accept(self, visitor:ParseTreeVisitor): if hasattr( visitor, "visitColumnExprFunction" ): @@ -8011,6 +8499,44 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class ColumnExprColumnsQualifiedReplaceContext(ColumnExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.ColumnExprContext + super().__init__(parser) + self.copyFrom(ctx) + + def COLUMNS(self): + return self.getToken(HogQLParser.COLUMNS, 0) + def LPAREN(self, i:int=None): + if i is None: + return self.getTokens(HogQLParser.LPAREN) + else: + return self.getToken(HogQLParser.LPAREN, i) + def identifier(self): + return self.getTypedRuleContext(HogQLParser.IdentifierContext,0) + + def DOT(self): + return self.getToken(HogQLParser.DOT, 0) + def ASTERISK(self): + return self.getToken(HogQLParser.ASTERISK, 0) + def REPLACE(self): + return self.getToken(HogQLParser.REPLACE, 0) + def columnsReplaceList(self): + return self.getTypedRuleContext(HogQLParser.ColumnsReplaceListContext,0) + + def RPAREN(self, i:int=None): + if i is None: + return self.getTokens(HogQLParser.RPAREN) + else: + return self.getToken(HogQLParser.RPAREN, i) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitColumnExprColumnsQualifiedReplace" ): + return visitor.visitColumnExprColumnsQualifiedReplace(self) + else: + return visitor.visitChildren(self) + + class ColumnExprNullTupleAccessContext(ColumnExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.ColumnExprContext @@ -8213,6 +8739,49 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class ColumnExprColumnsQualifiedExcludeReplaceContext(ColumnExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.ColumnExprContext + super().__init__(parser) + self.copyFrom(ctx) + + def COLUMNS(self): + return self.getToken(HogQLParser.COLUMNS, 0) + def LPAREN(self, i:int=None): + if i is None: + return self.getTokens(HogQLParser.LPAREN) + else: + return self.getToken(HogQLParser.LPAREN, i) + def identifier(self): + return self.getTypedRuleContext(HogQLParser.IdentifierContext,0) + + def DOT(self): + return self.getToken(HogQLParser.DOT, 0) + def ASTERISK(self): + return self.getToken(HogQLParser.ASTERISK, 0) + def EXCLUDE(self): + return self.getToken(HogQLParser.EXCLUDE, 0) + def identifierList(self): + return self.getTypedRuleContext(HogQLParser.IdentifierListContext,0) + + def RPAREN(self, i:int=None): + if i is None: + return self.getTokens(HogQLParser.RPAREN) + else: + return self.getToken(HogQLParser.RPAREN, i) + def REPLACE(self): + return self.getToken(HogQLParser.REPLACE, 0) + def columnsReplaceList(self): + return self.getTypedRuleContext(HogQLParser.ColumnsReplaceListContext,0) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitColumnExprColumnsQualifiedExcludeReplace" ): + return visitor.visitColumnExprColumnsQualifiedExcludeReplace(self) + else: + return visitor.visitChildren(self) + + class ColumnExprColumnsExcludeContext(ColumnExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.ColumnExprContext @@ -8302,6 +8871,33 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class ColumnExprColumnsQualifiedAllContext(ColumnExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.ColumnExprContext + super().__init__(parser) + self.copyFrom(ctx) + + def COLUMNS(self): + return self.getToken(HogQLParser.COLUMNS, 0) + def LPAREN(self): + return self.getToken(HogQLParser.LPAREN, 0) + def identifier(self): + return self.getTypedRuleContext(HogQLParser.IdentifierContext,0) + + def DOT(self): + return self.getToken(HogQLParser.DOT, 0) + def ASTERISK(self): + return self.getToken(HogQLParser.ASTERISK, 0) + def RPAREN(self): + return self.getToken(HogQLParser.RPAREN, 0) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitColumnExprColumnsQualifiedAll" ): + return visitor.visitColumnExprColumnsQualifiedAll(self) + else: + return visitor.visitChildren(self) + + class ColumnExprTrimContext(ColumnExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.ColumnExprContext @@ -8530,6 +9126,27 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class ColumnExprIgnoreNullsContext(ColumnExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.ColumnExprContext + super().__init__(parser) + self.copyFrom(ctx) + + def columnExpr(self): + return self.getTypedRuleContext(HogQLParser.ColumnExprContext,0) + + def IGNORE(self): + return self.getToken(HogQLParser.IGNORE, 0) + def NULLS(self): + return self.getToken(HogQLParser.NULLS, 0) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitColumnExprIgnoreNulls" ): + return visitor.visitColumnExprIgnoreNulls(self) + else: + return visitor.visitChildren(self) + + class ColumnExprNullishContext(ColumnExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.ColumnExprContext @@ -8637,6 +9254,7 @@ def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.Colu super().__init__(parser) self.columnExprs = None # ColumnExprListContext self.columnArgList = None # ColumnExprListContext + self.filterExpr = None # ColumnExprContext self.copyFrom(ctx) def identifier(self): @@ -8657,6 +9275,13 @@ def RPAREN(self, i:int=None): return self.getTokens(HogQLParser.RPAREN) else: return self.getToken(HogQLParser.RPAREN, i) + def FILTER(self): + return self.getToken(HogQLParser.FILTER, 0) + def WHERE(self): + return self.getToken(HogQLParser.WHERE, 0) + def columnExpr(self): + return self.getTypedRuleContext(HogQLParser.ColumnExprContext,0) + def columnExprList(self, i:int=None): if i is None: return self.getTypedRuleContexts(HogQLParser.ColumnExprListContext) @@ -8748,53 +9373,53 @@ def columnExpr(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1298 + self.state = 1439 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,161,self._ctx) + la_ = self._interp.adaptivePredict(self._input,175,self._ctx) if la_ == 1: localctx = HogQLParser.ColumnExprCaseContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1025 + self.state = 1091 self.match(HogQLParser.CASE) - self.state = 1027 + self.state = 1093 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,136,self._ctx) + la_ = self._interp.adaptivePredict(self._input,145,self._ctx) if la_ == 1: - self.state = 1026 + self.state = 1092 localctx.caseExpr = self.columnExpr(0) - self.state = 1034 + self.state = 1100 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 1029 + self.state = 1095 self.match(HogQLParser.WHEN) - self.state = 1030 + self.state = 1096 localctx.whenExpr = self.columnExpr(0) - self.state = 1031 + self.state = 1097 self.match(HogQLParser.THEN) - self.state = 1032 + self.state = 1098 localctx.thenExpr = self.columnExpr(0) - self.state = 1036 + self.state = 1102 self._errHandler.sync(self) _la = self._input.LA(1) - if not (_la==114): + if not (_la==120): break - self.state = 1040 + self.state = 1106 self._errHandler.sync(self) _la = self._input.LA(1) if _la==26: - self.state = 1038 + self.state = 1104 self.match(HogQLParser.ELSE) - self.state = 1039 + self.state = 1105 localctx.elseExpr = self.columnExpr(0) - self.state = 1042 + self.state = 1108 self.match(HogQLParser.END) pass @@ -8802,17 +9427,17 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprCastContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1044 + self.state = 1110 self.match(HogQLParser.CAST) - self.state = 1045 + self.state = 1111 self.match(HogQLParser.LPAREN) - self.state = 1046 + self.state = 1112 self.columnExpr(0) - self.state = 1047 + self.state = 1113 self.match(HogQLParser.AS) - self.state = 1048 - self.columnTypeExpr() - self.state = 1049 + self.state = 1114 + self.columnTypeExpr(0) + self.state = 1115 self.match(HogQLParser.RPAREN) pass @@ -8820,17 +9445,17 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprTryCastContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1051 + self.state = 1117 self.match(HogQLParser.TRY_CAST) - self.state = 1052 + self.state = 1118 self.match(HogQLParser.LPAREN) - self.state = 1053 + self.state = 1119 self.columnExpr(0) - self.state = 1054 + self.state = 1120 self.match(HogQLParser.AS) - self.state = 1055 - self.columnTypeExpr() - self.state = 1056 + self.state = 1121 + self.columnTypeExpr(0) + self.state = 1122 self.match(HogQLParser.RPAREN) pass @@ -8838,9 +9463,9 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprDateContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1058 + self.state = 1124 self.match(HogQLParser.DATE) - self.state = 1059 + self.state = 1125 self.match(HogQLParser.STRING_LITERAL) pass @@ -8848,9 +9473,9 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprIntervalStringContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1060 + self.state = 1126 self.match(HogQLParser.INTERVAL) - self.state = 1061 + self.state = 1127 self.match(HogQLParser.STRING_LITERAL) pass @@ -8858,11 +9483,11 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprIntervalContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1062 + self.state = 1128 self.match(HogQLParser.INTERVAL) - self.state = 1063 + self.state = 1129 self.columnExpr(0) - self.state = 1064 + self.state = 1130 self.interval() pass @@ -8870,27 +9495,27 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprSubstringContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1066 + self.state = 1132 self.match(HogQLParser.SUBSTRING) - self.state = 1067 + self.state = 1133 self.match(HogQLParser.LPAREN) - self.state = 1068 + self.state = 1134 self.columnExpr(0) - self.state = 1069 + self.state = 1135 self.match(HogQLParser.FROM) - self.state = 1070 + self.state = 1136 self.columnExpr(0) - self.state = 1073 + self.state = 1139 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==36: - self.state = 1071 + if _la==37: + self.state = 1137 self.match(HogQLParser.FOR) - self.state = 1072 + self.state = 1138 self.columnExpr(0) - self.state = 1075 + self.state = 1141 self.match(HogQLParser.RPAREN) pass @@ -8898,9 +9523,9 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprTimestampContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1077 + self.state = 1143 self.match(HogQLParser.TIMESTAMP) - self.state = 1078 + self.state = 1144 self.match(HogQLParser.STRING_LITERAL) pass @@ -8908,24 +9533,24 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprTrimContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1079 + self.state = 1145 self.match(HogQLParser.TRIM) - self.state = 1080 + self.state = 1146 self.match(HogQLParser.LPAREN) - self.state = 1081 + self.state = 1147 _la = self._input.LA(1) - if not(_la==10 or _la==57 or _la==103): + if not(_la==10 or _la==60 or _la==109): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 1082 + self.state = 1148 self.string() - self.state = 1083 + self.state = 1149 self.match(HogQLParser.FROM) - self.state = 1084 + self.state = 1150 self.columnExpr(0) - self.state = 1085 + self.state = 1151 self.match(HogQLParser.RPAREN) pass @@ -8933,13 +9558,13 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprColumnsRegexContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1087 + self.state = 1153 self.match(HogQLParser.COLUMNS) - self.state = 1088 + self.state = 1154 self.match(HogQLParser.LPAREN) - self.state = 1089 + self.state = 1155 self.match(HogQLParser.STRING_LITERAL) - self.state = 1090 + self.state = 1156 self.match(HogQLParser.RPAREN) pass @@ -8947,13 +9572,13 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprColumnsListContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1091 + self.state = 1157 self.match(HogQLParser.COLUMNS) - self.state = 1092 + self.state = 1158 self.match(HogQLParser.LPAREN) - self.state = 1093 + self.state = 1159 self.columnExprList() - self.state = 1094 + self.state = 1160 self.match(HogQLParser.RPAREN) pass @@ -8961,57 +9586,57 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprColumnsExcludeReplaceContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1121 + self.state = 1187 self._errHandler.sync(self) token = self._input.LA(1) if token in [17]: - self.state = 1096 + self.state = 1162 self.match(HogQLParser.COLUMNS) - self.state = 1097 + self.state = 1163 self.match(HogQLParser.LPAREN) - self.state = 1098 + self.state = 1164 self.match(HogQLParser.ASTERISK) - self.state = 1099 + self.state = 1165 self.match(HogQLParser.EXCLUDE) - self.state = 1100 + self.state = 1166 self.match(HogQLParser.LPAREN) - self.state = 1101 + self.state = 1167 self.identifierList() - self.state = 1102 + self.state = 1168 self.match(HogQLParser.RPAREN) - self.state = 1103 + self.state = 1169 self.match(HogQLParser.REPLACE) - self.state = 1104 + self.state = 1170 self.match(HogQLParser.LPAREN) - self.state = 1105 + self.state = 1171 self.columnsReplaceList() - self.state = 1106 + self.state = 1172 self.match(HogQLParser.RPAREN) - self.state = 1107 + self.state = 1173 self.match(HogQLParser.RPAREN) pass - elif token in [149]: - self.state = 1109 + elif token in [155]: + self.state = 1175 self.match(HogQLParser.LPAREN) - self.state = 1110 + self.state = 1176 self.match(HogQLParser.ASTERISK) - self.state = 1111 + self.state = 1177 self.match(HogQLParser.EXCLUDE) - self.state = 1112 + self.state = 1178 self.match(HogQLParser.LPAREN) - self.state = 1113 + self.state = 1179 self.identifierList() - self.state = 1114 + self.state = 1180 self.match(HogQLParser.RPAREN) - self.state = 1115 + self.state = 1181 self.match(HogQLParser.REPLACE) - self.state = 1116 + self.state = 1182 self.match(HogQLParser.LPAREN) - self.state = 1117 + self.state = 1183 self.columnsReplaceList() - self.state = 1118 + self.state = 1184 self.match(HogQLParser.RPAREN) - self.state = 1119 + self.state = 1185 self.match(HogQLParser.RPAREN) pass else: @@ -9023,21 +9648,21 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprColumnsExcludeContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1123 + self.state = 1189 self.match(HogQLParser.COLUMNS) - self.state = 1124 + self.state = 1190 self.match(HogQLParser.LPAREN) - self.state = 1125 + self.state = 1191 self.match(HogQLParser.ASTERISK) - self.state = 1126 + self.state = 1192 self.match(HogQLParser.EXCLUDE) - self.state = 1127 + self.state = 1193 self.match(HogQLParser.LPAREN) - self.state = 1128 + self.state = 1194 self.identifierList() - self.state = 1129 + self.state = 1195 self.match(HogQLParser.RPAREN) - self.state = 1130 + self.state = 1196 self.match(HogQLParser.RPAREN) pass @@ -9045,41 +9670,41 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprColumnsReplaceContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1149 + self.state = 1215 self._errHandler.sync(self) token = self._input.LA(1) if token in [17]: - self.state = 1132 + self.state = 1198 self.match(HogQLParser.COLUMNS) - self.state = 1133 + self.state = 1199 self.match(HogQLParser.LPAREN) - self.state = 1134 + self.state = 1200 self.match(HogQLParser.ASTERISK) - self.state = 1135 + self.state = 1201 self.match(HogQLParser.REPLACE) - self.state = 1136 + self.state = 1202 self.match(HogQLParser.LPAREN) - self.state = 1137 + self.state = 1203 self.columnsReplaceList() - self.state = 1138 + self.state = 1204 self.match(HogQLParser.RPAREN) - self.state = 1139 + self.state = 1205 self.match(HogQLParser.RPAREN) pass - elif token in [149]: - self.state = 1141 + elif token in [155]: + self.state = 1207 self.match(HogQLParser.LPAREN) - self.state = 1142 + self.state = 1208 self.match(HogQLParser.ASTERISK) - self.state = 1143 + self.state = 1209 self.match(HogQLParser.REPLACE) - self.state = 1144 + self.state = 1210 self.match(HogQLParser.LPAREN) - self.state = 1145 + self.state = 1211 self.columnsReplaceList() - self.state = 1146 + self.state = 1212 self.match(HogQLParser.RPAREN) - self.state = 1147 + self.state = 1213 self.match(HogQLParser.RPAREN) pass else: @@ -9091,595 +9716,767 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprColumnsAllContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1151 + self.state = 1217 self.match(HogQLParser.COLUMNS) - self.state = 1152 + self.state = 1218 self.match(HogQLParser.LPAREN) - self.state = 1153 + self.state = 1219 self.match(HogQLParser.ASTERISK) - self.state = 1154 + self.state = 1220 self.match(HogQLParser.RPAREN) pass elif la_ == 16: + localctx = HogQLParser.ColumnExprColumnsQualifiedExcludeReplaceContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 1221 + self.match(HogQLParser.COLUMNS) + self.state = 1222 + self.match(HogQLParser.LPAREN) + self.state = 1223 + self.identifier() + self.state = 1224 + self.match(HogQLParser.DOT) + self.state = 1225 + self.match(HogQLParser.ASTERISK) + self.state = 1226 + self.match(HogQLParser.EXCLUDE) + self.state = 1227 + self.match(HogQLParser.LPAREN) + self.state = 1228 + self.identifierList() + self.state = 1229 + self.match(HogQLParser.RPAREN) + self.state = 1230 + self.match(HogQLParser.REPLACE) + self.state = 1231 + self.match(HogQLParser.LPAREN) + self.state = 1232 + self.columnsReplaceList() + self.state = 1233 + self.match(HogQLParser.RPAREN) + self.state = 1234 + self.match(HogQLParser.RPAREN) + pass + + elif la_ == 17: + localctx = HogQLParser.ColumnExprColumnsQualifiedExcludeContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 1236 + self.match(HogQLParser.COLUMNS) + self.state = 1237 + self.match(HogQLParser.LPAREN) + self.state = 1238 + self.identifier() + self.state = 1239 + self.match(HogQLParser.DOT) + self.state = 1240 + self.match(HogQLParser.ASTERISK) + self.state = 1241 + self.match(HogQLParser.EXCLUDE) + self.state = 1242 + self.match(HogQLParser.LPAREN) + self.state = 1243 + self.identifierList() + self.state = 1244 + self.match(HogQLParser.RPAREN) + self.state = 1245 + self.match(HogQLParser.RPAREN) + pass + + elif la_ == 18: + localctx = HogQLParser.ColumnExprColumnsQualifiedReplaceContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 1247 + self.match(HogQLParser.COLUMNS) + self.state = 1248 + self.match(HogQLParser.LPAREN) + self.state = 1249 + self.identifier() + self.state = 1250 + self.match(HogQLParser.DOT) + self.state = 1251 + self.match(HogQLParser.ASTERISK) + self.state = 1252 + self.match(HogQLParser.REPLACE) + self.state = 1253 + self.match(HogQLParser.LPAREN) + self.state = 1254 + self.columnsReplaceList() + self.state = 1255 + self.match(HogQLParser.RPAREN) + self.state = 1256 + self.match(HogQLParser.RPAREN) + pass + + elif la_ == 19: + localctx = HogQLParser.ColumnExprColumnsQualifiedAllContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 1258 + self.match(HogQLParser.COLUMNS) + self.state = 1259 + self.match(HogQLParser.LPAREN) + self.state = 1260 + self.identifier() + self.state = 1261 + self.match(HogQLParser.DOT) + self.state = 1262 + self.match(HogQLParser.ASTERISK) + self.state = 1263 + self.match(HogQLParser.RPAREN) + pass + + elif la_ == 20: localctx = HogQLParser.ColumnExprSpreadColumnsRegexContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1155 + self.state = 1265 self.match(HogQLParser.ASTERISK) - self.state = 1156 + self.state = 1266 self.match(HogQLParser.COLUMNS) - self.state = 1157 + self.state = 1267 self.match(HogQLParser.LPAREN) - self.state = 1158 + self.state = 1268 self.match(HogQLParser.STRING_LITERAL) - self.state = 1159 + self.state = 1269 self.match(HogQLParser.RPAREN) pass - elif la_ == 17: + elif la_ == 21: localctx = HogQLParser.ColumnExprSpreadColumnsListContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1160 + self.state = 1270 self.match(HogQLParser.ASTERISK) - self.state = 1161 + self.state = 1271 self.match(HogQLParser.COLUMNS) - self.state = 1162 + self.state = 1272 self.match(HogQLParser.LPAREN) - self.state = 1163 + self.state = 1273 self.columnExprList() - self.state = 1164 + self.state = 1274 self.match(HogQLParser.RPAREN) pass - elif la_ == 18: + elif la_ == 22: + localctx = HogQLParser.ColumnExprFunctionWithinGroupContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 1276 + self.identifier() + self.state = 1277 + self.match(HogQLParser.LPAREN) + self.state = 1279 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -4620694360411881474) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 6629016626756845565) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & 1237726691519) != 0): + self.state = 1278 + localctx.columnExprs = self.columnExprList() + + + self.state = 1281 + self.match(HogQLParser.RPAREN) + self.state = 1282 + self.withinGroupClause() + pass + + elif la_ == 23: localctx = HogQLParser.ColumnExprWinFunctionContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1166 + self.state = 1284 self.identifier() - self.state = 1167 + self.state = 1285 self.match(HogQLParser.LPAREN) - self.state = 1169 + self.state = 1287 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & -5189273242136756226) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -184651991358636033) != 0) or ((((_la - 129)) & ~0x3f) == 0 and ((1 << (_la - 129)) & 9669739777) != 0): - self.state = 1168 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -4620694360411881474) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 6629016626756845565) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & 1237726691519) != 0): + self.state = 1286 localctx.columnExprs = self.columnExprList() - self.state = 1171 + self.state = 1289 self.match(HogQLParser.RPAREN) - self.state = 1181 + self.state = 1299 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==149: - self.state = 1173 + if _la==155: + self.state = 1291 self.match(HogQLParser.LPAREN) - self.state = 1175 + self.state = 1293 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,143,self._ctx) + la_ = self._interp.adaptivePredict(self._input,153,self._ctx) if la_ == 1: - self.state = 1174 + self.state = 1292 self.match(HogQLParser.DISTINCT) - self.state = 1178 + self.state = 1296 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & -5189273242136756226) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -184651991358636033) != 0) or ((((_la - 129)) & ~0x3f) == 0 and ((1 << (_la - 129)) & 9669739777) != 0): - self.state = 1177 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -4620694360411881474) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 6629016626756845565) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & 1237726691519) != 0): + self.state = 1295 localctx.columnArgList = self.columnExprList() - self.state = 1180 + self.state = 1298 + self.match(HogQLParser.RPAREN) + + + self.state = 1307 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==32: + self.state = 1301 + self.match(HogQLParser.FILTER) + self.state = 1302 + self.match(HogQLParser.LPAREN) + self.state = 1303 + self.match(HogQLParser.WHERE) + self.state = 1304 + localctx.filterExpr = self.columnExpr(0) + self.state = 1305 self.match(HogQLParser.RPAREN) - self.state = 1183 + self.state = 1309 self.match(HogQLParser.OVER) - self.state = 1184 + self.state = 1310 self.match(HogQLParser.LPAREN) - self.state = 1185 + self.state = 1311 self.windowExpr() - self.state = 1186 + self.state = 1312 self.match(HogQLParser.RPAREN) pass - elif la_ == 19: + elif la_ == 24: localctx = HogQLParser.ColumnExprWinFunctionTargetContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1188 + self.state = 1314 self.identifier() - self.state = 1189 + self.state = 1315 self.match(HogQLParser.LPAREN) - self.state = 1191 + self.state = 1317 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & -5189273242136756226) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -184651991358636033) != 0) or ((((_la - 129)) & ~0x3f) == 0 and ((1 << (_la - 129)) & 9669739777) != 0): - self.state = 1190 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -4620694360411881474) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 6629016626756845565) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & 1237726691519) != 0): + self.state = 1316 localctx.columnExprs = self.columnExprList() - self.state = 1193 + self.state = 1319 self.match(HogQLParser.RPAREN) - self.state = 1203 + self.state = 1329 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==149: - self.state = 1195 + if _la==155: + self.state = 1321 self.match(HogQLParser.LPAREN) - self.state = 1197 + self.state = 1323 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,147,self._ctx) + la_ = self._interp.adaptivePredict(self._input,158,self._ctx) if la_ == 1: - self.state = 1196 + self.state = 1322 self.match(HogQLParser.DISTINCT) - self.state = 1200 + self.state = 1326 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & -5189273242136756226) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -184651991358636033) != 0) or ((((_la - 129)) & ~0x3f) == 0 and ((1 << (_la - 129)) & 9669739777) != 0): - self.state = 1199 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -4620694360411881474) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 6629016626756845565) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & 1237726691519) != 0): + self.state = 1325 localctx.columnArgList = self.columnExprList() - self.state = 1202 + self.state = 1328 self.match(HogQLParser.RPAREN) - self.state = 1205 - self.match(HogQLParser.OVER) - self.state = 1206 - self.identifier() - pass - - elif la_ == 20: - localctx = HogQLParser.ColumnExprFunctionWithinGroupContext(self, localctx) - self._ctx = localctx - _prevctx = localctx - self.state = 1208 - self.identifier() - self.state = 1209 - self.match(HogQLParser.LPAREN) - self.state = 1211 + self.state = 1337 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & -5189273242136756226) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -184651991358636033) != 0) or ((((_la - 129)) & ~0x3f) == 0 and ((1 << (_la - 129)) & 9669739777) != 0): - self.state = 1210 - localctx.columnExprs = self.columnExprList() + if _la==32: + self.state = 1331 + self.match(HogQLParser.FILTER) + self.state = 1332 + self.match(HogQLParser.LPAREN) + self.state = 1333 + self.match(HogQLParser.WHERE) + self.state = 1334 + localctx.filterExpr = self.columnExpr(0) + self.state = 1335 + self.match(HogQLParser.RPAREN) - self.state = 1213 - self.match(HogQLParser.RPAREN) - self.state = 1214 - self.withinGroupClause() + self.state = 1339 + self.match(HogQLParser.OVER) + self.state = 1340 + self.identifier() pass - elif la_ == 21: + elif la_ == 25: localctx = HogQLParser.ColumnExprFunctionContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1216 + self.state = 1342 self.identifier() - self.state = 1222 + self.state = 1348 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,152,self._ctx) + la_ = self._interp.adaptivePredict(self._input,163,self._ctx) if la_ == 1: - self.state = 1217 + self.state = 1343 self.match(HogQLParser.LPAREN) - self.state = 1219 + self.state = 1345 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & -5189273242136756226) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -184651991358636033) != 0) or ((((_la - 129)) & ~0x3f) == 0 and ((1 << (_la - 129)) & 9669739777) != 0): - self.state = 1218 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -4620694360411881474) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 6629016626756845565) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & 1237726691519) != 0): + self.state = 1344 localctx.columnExprs = self.columnExprList() - self.state = 1221 + self.state = 1347 self.match(HogQLParser.RPAREN) - self.state = 1224 + self.state = 1350 self.match(HogQLParser.LPAREN) - self.state = 1226 + self.state = 1352 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,153,self._ctx) + la_ = self._interp.adaptivePredict(self._input,164,self._ctx) if la_ == 1: - self.state = 1225 + self.state = 1351 self.match(HogQLParser.DISTINCT) - self.state = 1229 + self.state = 1355 self._errHandler.sync(self) - _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & -5189273242136756226) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -184651991358636033) != 0) or ((((_la - 129)) & ~0x3f) == 0 and ((1 << (_la - 129)) & 9669739777) != 0): - self.state = 1228 + la_ = self._interp.adaptivePredict(self._input,165,self._ctx) + if la_ == 1: + self.state = 1354 localctx.columnArgList = self.columnExprList() - self.state = 1231 + self.state = 1360 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==77: + self.state = 1357 + self.match(HogQLParser.ORDER) + self.state = 1358 + self.match(HogQLParser.BY) + self.state = 1359 + self.orderExprList() + + + self.state = 1362 self.match(HogQLParser.RPAREN) + self.state = 1369 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,167,self._ctx) + if la_ == 1: + self.state = 1363 + self.match(HogQLParser.FILTER) + self.state = 1364 + self.match(HogQLParser.LPAREN) + self.state = 1365 + self.match(HogQLParser.WHERE) + self.state = 1366 + localctx.filterExpr = self.columnExpr(0) + self.state = 1367 + self.match(HogQLParser.RPAREN) + + pass - elif la_ == 22: + elif la_ == 26: localctx = HogQLParser.ColumnExprTagElementContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1233 + self.state = 1371 self.hogqlxTagElement() pass - elif la_ == 23: + elif la_ == 27: localctx = HogQLParser.ColumnExprTemplateStringContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1234 + self.state = 1372 self.templateString() pass - elif la_ == 24: + elif la_ == 28: localctx = HogQLParser.ColumnExprLiteralContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1235 + self.state = 1373 self.literal() pass - elif la_ == 25: + elif la_ == 29: localctx = HogQLParser.ColumnExprNegateContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1236 + self.state = 1374 self.match(HogQLParser.DASH) - self.state = 1237 - self.columnExpr(24) + self.state = 1375 + self.columnExpr(25) pass - elif la_ == 26: + elif la_ == 30: localctx = HogQLParser.ColumnExprNotContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1238 + self.state = 1376 self.match(HogQLParser.NOT) - self.state = 1239 + self.state = 1377 self.columnExpr(17) pass - elif la_ == 27: + elif la_ == 31: localctx = HogQLParser.ColumnExprAsteriskContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1243 + self.state = 1381 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & -5189554717113466882) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 391808760944787435) != 0): - self.state = 1240 + if ((((_la - 1)) & ~0x3f) == 0 and ((1 << (_la - 1)) & -2311473080112783361) != 0) or ((((_la - 66)) & ~0x3f) == 0 and ((1 << (_la - 66)) & 6268940175116599215) != 0): + self.state = 1378 self.tableIdentifier() - self.state = 1241 + self.state = 1379 self.match(HogQLParser.DOT) - self.state = 1245 + self.state = 1383 self.match(HogQLParser.ASTERISK) - self.state = 1251 + self.state = 1389 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,156,self._ctx) + la_ = self._interp.adaptivePredict(self._input,169,self._ctx) if la_ == 1: - self.state = 1246 + self.state = 1384 self.match(HogQLParser.EXCLUDE) - self.state = 1247 + self.state = 1385 self.match(HogQLParser.LPAREN) - self.state = 1248 + self.state = 1386 self.identifierList() - self.state = 1249 + self.state = 1387 self.match(HogQLParser.RPAREN) pass - elif la_ == 28: + elif la_ == 32: localctx = HogQLParser.ColumnExprColonLambdaContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1253 + self.state = 1391 self.match(HogQLParser.LAMBDA) - self.state = 1254 + self.state = 1392 self.identifier() - self.state = 1259 + self.state = 1397 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,157,self._ctx) + _alt = self._interp.adaptivePredict(self._input,170,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 1255 + self.state = 1393 self.match(HogQLParser.COMMA) - self.state = 1256 + self.state = 1394 self.identifier() - self.state = 1261 + self.state = 1399 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,157,self._ctx) + _alt = self._interp.adaptivePredict(self._input,170,self._ctx) - self.state = 1263 + self.state = 1401 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==135: - self.state = 1262 + if _la==141: + self.state = 1400 self.match(HogQLParser.COMMA) - self.state = 1265 + self.state = 1403 self.match(HogQLParser.COLON) - self.state = 1266 + self.state = 1404 self.columnExpr(10) pass - elif la_ == 29: + elif la_ == 33: localctx = HogQLParser.ColumnExprSubqueryContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1268 + self.state = 1406 self.match(HogQLParser.LPAREN) - self.state = 1269 + self.state = 1407 self.selectSetStmt() - self.state = 1270 + self.state = 1408 self.match(HogQLParser.RPAREN) pass - elif la_ == 30: + elif la_ == 34: localctx = HogQLParser.ColumnExprParensContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1272 + self.state = 1410 self.match(HogQLParser.LPAREN) - self.state = 1273 + self.state = 1411 self.columnExpr(0) - self.state = 1274 + self.state = 1412 self.match(HogQLParser.RPAREN) pass - elif la_ == 31: + elif la_ == 35: localctx = HogQLParser.ColumnExprTupleContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1276 + self.state = 1414 self.match(HogQLParser.LPAREN) - self.state = 1277 + self.state = 1415 self.columnExprList() - self.state = 1278 + self.state = 1416 self.match(HogQLParser.RPAREN) pass - elif la_ == 32: + elif la_ == 36: localctx = HogQLParser.ColumnExprArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1280 + self.state = 1419 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==5: + self.state = 1418 + self.match(HogQLParser.ARRAY) + + + self.state = 1421 self.match(HogQLParser.LBRACKET) - self.state = 1282 + self.state = 1423 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & -5189273242136756226) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -184651991358636033) != 0) or ((((_la - 129)) & ~0x3f) == 0 and ((1 << (_la - 129)) & 9669739777) != 0): - self.state = 1281 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -4620694360411881474) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 6629016626756845565) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & 1237726691519) != 0): + self.state = 1422 self.columnExprList() - self.state = 1284 + self.state = 1425 self.match(HogQLParser.RBRACKET) pass - elif la_ == 33: + elif la_ == 37: localctx = HogQLParser.ColumnExprDictContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1285 + self.state = 1426 self.match(HogQLParser.LBRACE) - self.state = 1287 + self.state = 1428 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & -5189273242136756226) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -184651991358636033) != 0) or ((((_la - 129)) & ~0x3f) == 0 and ((1 << (_la - 129)) & 9669739777) != 0): - self.state = 1286 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -4620694360411881474) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 6629016626756845565) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & 1237726691519) != 0): + self.state = 1427 self.kvPairList() - self.state = 1289 + self.state = 1430 self.match(HogQLParser.RBRACE) pass - elif la_ == 34: + elif la_ == 38: localctx = HogQLParser.ColumnExprLambdaContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1290 + self.state = 1431 self.columnLambdaExpr() pass - elif la_ == 35: + elif la_ == 39: localctx = HogQLParser.ColumnExprNamedArgContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1291 + self.state = 1432 self.identifier() - self.state = 1292 + self.state = 1433 self.match(HogQLParser.COLONEQUALS) - self.state = 1293 + self.state = 1434 self.columnExpr(3) pass - elif la_ == 36: + elif la_ == 40: localctx = HogQLParser.ColumnExprPositionalContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1295 + self.state = 1436 self.match(HogQLParser.HASH) - self.state = 1296 + self.state = 1437 self.match(HogQLParser.DECIMAL_LITERAL) pass - elif la_ == 37: + elif la_ == 41: localctx = HogQLParser.ColumnExprIdentifierContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1297 + self.state = 1438 self.columnIdentifier() pass self._ctx.stop = self._input.LT(-1) - self.state = 1436 + self.state = 1580 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,176,self._ctx) + _alt = self._interp.adaptivePredict(self._input,190,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 1434 + self.state = 1578 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,175,self._ctx) + la_ = self._interp.adaptivePredict(self._input,189,self._ctx) if la_ == 1: localctx = HogQLParser.ColumnExprPrecedence1Context(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 1300 - if not self.precpred(self._ctx, 23): + self.state = 1441 + if not self.precpred(self._ctx, 24): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 23)") - self.state = 1304 + raise FailedPredicateException(self, "self.precpred(self._ctx, 24)") + self.state = 1445 self._errHandler.sync(self) token = self._input.LA(1) - if token in [129]: - self.state = 1301 + if token in [135]: + self.state = 1442 localctx.operator = self.match(HogQLParser.ASTERISK) pass - elif token in [171]: - self.state = 1302 + elif token in [177]: + self.state = 1443 localctx.operator = self.match(HogQLParser.SLASH) pass - elif token in [158]: - self.state = 1303 + elif token in [164]: + self.state = 1444 localctx.operator = self.match(HogQLParser.PERCENT) pass else: raise NoViableAltException(self) - self.state = 1306 - localctx.right = self.columnExpr(24) + self.state = 1447 + localctx.right = self.columnExpr(25) pass elif la_ == 2: localctx = HogQLParser.ColumnExprPrecedence2Context(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 1307 - if not self.precpred(self._ctx, 22): + self.state = 1448 + if not self.precpred(self._ctx, 23): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 22)") - self.state = 1311 + raise FailedPredicateException(self, "self.precpred(self._ctx, 23)") + self.state = 1452 self._errHandler.sync(self) token = self._input.LA(1) - if token in [159]: - self.state = 1308 + if token in [165]: + self.state = 1449 localctx.operator = self.match(HogQLParser.PLUS) pass - elif token in [137]: - self.state = 1309 + elif token in [143]: + self.state = 1450 localctx.operator = self.match(HogQLParser.DASH) pass - elif token in [136]: - self.state = 1310 + elif token in [142]: + self.state = 1451 localctx.operator = self.match(HogQLParser.CONCAT) pass else: raise NoViableAltException(self) - self.state = 1313 - localctx.right = self.columnExpr(23) + self.state = 1454 + localctx.right = self.columnExpr(24) pass elif la_ == 3: localctx = HogQLParser.ColumnExprPrecedence3Context(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 1314 - if not self.precpred(self._ctx, 21): + self.state = 1455 + if not self.precpred(self._ctx, 22): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 21)") - self.state = 1339 + raise FailedPredicateException(self, "self.precpred(self._ctx, 22)") + self.state = 1480 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,167,self._ctx) + la_ = self._interp.adaptivePredict(self._input,181,self._ctx) if la_ == 1: - self.state = 1315 + self.state = 1456 localctx.operator = self.match(HogQLParser.EQ_DOUBLE) pass elif la_ == 2: - self.state = 1316 + self.state = 1457 localctx.operator = self.match(HogQLParser.EQ_SINGLE) pass elif la_ == 3: - self.state = 1317 + self.state = 1458 localctx.operator = self.match(HogQLParser.NOT_EQ) pass elif la_ == 4: - self.state = 1318 + self.state = 1459 localctx.operator = self.match(HogQLParser.LT_EQ) pass elif la_ == 5: - self.state = 1319 + self.state = 1460 localctx.operator = self.match(HogQLParser.LT) pass elif la_ == 6: - self.state = 1320 + self.state = 1461 localctx.operator = self.match(HogQLParser.GT_EQ) pass elif la_ == 7: - self.state = 1321 + self.state = 1462 localctx.operator = self.match(HogQLParser.GT) pass elif la_ == 8: - self.state = 1323 + self.state = 1464 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==67: - self.state = 1322 + if _la==71: + self.state = 1463 localctx.operator = self.match(HogQLParser.NOT) - self.state = 1325 + self.state = 1466 self.match(HogQLParser.IN) - self.state = 1327 + self.state = 1468 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,165,self._ctx) + la_ = self._interp.adaptivePredict(self._input,179,self._ctx) if la_ == 1: - self.state = 1326 + self.state = 1467 self.match(HogQLParser.COHORT) pass elif la_ == 9: - self.state = 1330 + self.state = 1471 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==67: - self.state = 1329 + if _la==71: + self.state = 1470 localctx.operator = self.match(HogQLParser.NOT) - self.state = 1332 + self.state = 1473 _la = self._input.LA(1) - if not(_la==46 or _la==60): + if not(_la==47 or _la==63): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -9687,352 +10484,365 @@ def columnExpr(self, _p:int=0): pass elif la_ == 10: - self.state = 1333 + self.state = 1474 localctx.operator = self.match(HogQLParser.REGEX_SINGLE) pass elif la_ == 11: - self.state = 1334 + self.state = 1475 localctx.operator = self.match(HogQLParser.REGEX_DOUBLE) pass elif la_ == 12: - self.state = 1335 + self.state = 1476 localctx.operator = self.match(HogQLParser.NOT_REGEX) pass elif la_ == 13: - self.state = 1336 + self.state = 1477 localctx.operator = self.match(HogQLParser.IREGEX_SINGLE) pass elif la_ == 14: - self.state = 1337 + self.state = 1478 localctx.operator = self.match(HogQLParser.IREGEX_DOUBLE) pass elif la_ == 15: - self.state = 1338 + self.state = 1479 localctx.operator = self.match(HogQLParser.NOT_IREGEX) pass - self.state = 1341 - localctx.right = self.columnExpr(22) + self.state = 1482 + localctx.right = self.columnExpr(23) pass elif la_ == 4: localctx = HogQLParser.ColumnExprIsDistinctFromContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 1342 + self.state = 1483 if not self.precpred(self._ctx, 19): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 19)") - self.state = 1343 + self.state = 1484 self.match(HogQLParser.IS) - self.state = 1345 + self.state = 1486 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==67: - self.state = 1344 + if _la==71: + self.state = 1485 self.match(HogQLParser.NOT) - self.state = 1347 + self.state = 1488 self.match(HogQLParser.DISTINCT) - self.state = 1348 + self.state = 1489 self.match(HogQLParser.FROM) - self.state = 1349 + self.state = 1490 self.columnExpr(20) pass elif la_ == 5: localctx = HogQLParser.ColumnExprNullishContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 1350 + self.state = 1491 if not self.precpred(self._ctx, 18): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 18)") - self.state = 1351 + self.state = 1492 self.match(HogQLParser.NULLISH) - self.state = 1352 + self.state = 1493 self.columnExpr(19) pass elif la_ == 6: localctx = HogQLParser.ColumnExprAndContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 1353 + self.state = 1494 if not self.precpred(self._ctx, 16): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 16)") - self.state = 1354 + self.state = 1495 self.match(HogQLParser.AND) - self.state = 1355 + self.state = 1496 self.columnExpr(17) pass elif la_ == 7: localctx = HogQLParser.ColumnExprOrContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 1356 + self.state = 1497 if not self.precpred(self._ctx, 15): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 15)") - self.state = 1357 + self.state = 1498 self.match(HogQLParser.OR) - self.state = 1358 + self.state = 1499 self.columnExpr(16) pass elif la_ == 8: localctx = HogQLParser.ColumnExprBetweenContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 1359 + self.state = 1500 if not self.precpred(self._ctx, 14): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") - self.state = 1361 + self.state = 1502 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==67: - self.state = 1360 + if _la==71: + self.state = 1501 self.match(HogQLParser.NOT) - self.state = 1363 + self.state = 1504 self.match(HogQLParser.BETWEEN) - self.state = 1364 + self.state = 1505 self.columnExpr(0) - self.state = 1365 + self.state = 1506 self.match(HogQLParser.AND) - self.state = 1366 + self.state = 1507 self.columnExpr(15) pass elif la_ == 9: localctx = HogQLParser.ColumnExprTernaryOpContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 1368 + self.state = 1509 if not self.precpred(self._ctx, 13): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") - self.state = 1369 + self.state = 1510 self.match(HogQLParser.QUERY) - self.state = 1370 + self.state = 1511 self.columnExpr(0) - self.state = 1371 + self.state = 1512 self.match(HogQLParser.COLON) - self.state = 1372 + self.state = 1513 self.columnExpr(13) pass elif la_ == 10: localctx = HogQLParser.ColumnExprCallSelectContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 1374 - if not self.precpred(self._ctx, 37): + self.state = 1515 + if not self.precpred(self._ctx, 38): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 37)") - self.state = 1375 + raise FailedPredicateException(self, "self.precpred(self._ctx, 38)") + self.state = 1516 self.match(HogQLParser.LPAREN) - self.state = 1376 + self.state = 1517 self.selectSetStmt() - self.state = 1377 + self.state = 1518 self.match(HogQLParser.RPAREN) pass elif la_ == 11: localctx = HogQLParser.ColumnExprCallContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 1379 - if not self.precpred(self._ctx, 36): + self.state = 1520 + if not self.precpred(self._ctx, 37): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 36)") - self.state = 1380 + raise FailedPredicateException(self, "self.precpred(self._ctx, 37)") + self.state = 1521 self.match(HogQLParser.LPAREN) - self.state = 1382 + self.state = 1523 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & -5189273242136756226) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -184651991358636033) != 0) or ((((_la - 129)) & ~0x3f) == 0 and ((1 << (_la - 129)) & 9669739777) != 0): - self.state = 1381 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -4620694360411881474) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 6629016626756845565) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & 1237726691519) != 0): + self.state = 1522 self.columnExprList() - self.state = 1384 + self.state = 1525 self.match(HogQLParser.RPAREN) pass elif la_ == 12: localctx = HogQLParser.ColumnExprArrayAccessContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 1385 - if not self.precpred(self._ctx, 32): + self.state = 1526 + if not self.precpred(self._ctx, 33): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 32)") - self.state = 1386 + raise FailedPredicateException(self, "self.precpred(self._ctx, 33)") + self.state = 1527 self.match(HogQLParser.LBRACKET) - self.state = 1387 + self.state = 1528 self.columnExpr(0) - self.state = 1388 + self.state = 1529 self.match(HogQLParser.RBRACKET) pass elif la_ == 13: localctx = HogQLParser.ColumnExprArraySliceContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 1390 - if not self.precpred(self._ctx, 31): + self.state = 1531 + if not self.precpred(self._ctx, 32): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 31)") - self.state = 1391 + raise FailedPredicateException(self, "self.precpred(self._ctx, 32)") + self.state = 1532 self.match(HogQLParser.LBRACKET) - self.state = 1393 + self.state = 1534 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & -5189273242136756226) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -184651991358636033) != 0) or ((((_la - 129)) & ~0x3f) == 0 and ((1 << (_la - 129)) & 9669739777) != 0): - self.state = 1392 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -4620694360411881474) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 6629016626756845565) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & 1237726691519) != 0): + self.state = 1533 self.columnExpr(0) - self.state = 1395 + self.state = 1536 self.match(HogQLParser.COLON) - self.state = 1397 + self.state = 1538 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & -5189273242136756226) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -184651991358636033) != 0) or ((((_la - 129)) & ~0x3f) == 0 and ((1 << (_la - 129)) & 9669739777) != 0): - self.state = 1396 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -4620694360411881474) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 6629016626756845565) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & 1237726691519) != 0): + self.state = 1537 self.columnExpr(0) - self.state = 1399 + self.state = 1540 self.match(HogQLParser.RBRACKET) pass elif la_ == 14: localctx = HogQLParser.ColumnExprTupleAccessContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 1400 - if not self.precpred(self._ctx, 30): + self.state = 1541 + if not self.precpred(self._ctx, 31): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 30)") - self.state = 1401 + raise FailedPredicateException(self, "self.precpred(self._ctx, 31)") + self.state = 1542 self.match(HogQLParser.DOT) - self.state = 1402 + self.state = 1543 self.match(HogQLParser.DECIMAL_LITERAL) pass elif la_ == 15: localctx = HogQLParser.ColumnExprPropertyAccessContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 1403 - if not self.precpred(self._ctx, 29): + self.state = 1544 + if not self.precpred(self._ctx, 30): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 29)") - self.state = 1404 + raise FailedPredicateException(self, "self.precpred(self._ctx, 30)") + self.state = 1545 self.match(HogQLParser.DOT) - self.state = 1405 + self.state = 1546 self.identifier() pass elif la_ == 16: localctx = HogQLParser.ColumnExprNullArrayAccessContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 1406 - if not self.precpred(self._ctx, 28): + self.state = 1547 + if not self.precpred(self._ctx, 29): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 28)") - self.state = 1407 + raise FailedPredicateException(self, "self.precpred(self._ctx, 29)") + self.state = 1548 self.match(HogQLParser.NULL_PROPERTY) - self.state = 1408 + self.state = 1549 self.match(HogQLParser.LBRACKET) - self.state = 1409 + self.state = 1550 self.columnExpr(0) - self.state = 1410 + self.state = 1551 self.match(HogQLParser.RBRACKET) pass elif la_ == 17: localctx = HogQLParser.ColumnExprNullTupleAccessContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 1412 - if not self.precpred(self._ctx, 27): + self.state = 1553 + if not self.precpred(self._ctx, 28): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 27)") - self.state = 1413 + raise FailedPredicateException(self, "self.precpred(self._ctx, 28)") + self.state = 1554 self.match(HogQLParser.NULL_PROPERTY) - self.state = 1414 + self.state = 1555 self.match(HogQLParser.DECIMAL_LITERAL) pass elif la_ == 18: localctx = HogQLParser.ColumnExprNullPropertyAccessContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 1415 - if not self.precpred(self._ctx, 26): + self.state = 1556 + if not self.precpred(self._ctx, 27): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 26)") - self.state = 1416 + raise FailedPredicateException(self, "self.precpred(self._ctx, 27)") + self.state = 1557 self.match(HogQLParser.NULL_PROPERTY) - self.state = 1417 + self.state = 1558 self.identifier() pass elif la_ == 19: localctx = HogQLParser.ColumnExprTypeCastContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 1418 - if not self.precpred(self._ctx, 25): + self.state = 1559 + if not self.precpred(self._ctx, 26): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 25)") - self.state = 1419 + raise FailedPredicateException(self, "self.precpred(self._ctx, 26)") + self.state = 1560 self.match(HogQLParser.DOUBLECOLON) - self.state = 1420 + self.state = 1561 self.columnTypeCastExpr() pass elif la_ == 20: + localctx = HogQLParser.ColumnExprIgnoreNullsContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) + self.state = 1562 + if not self.precpred(self._ctx, 21): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 21)") + self.state = 1563 + self.match(HogQLParser.IGNORE) + self.state = 1564 + self.match(HogQLParser.NULLS) + pass + + elif la_ == 21: localctx = HogQLParser.ColumnExprIsNullContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 1421 + self.state = 1565 if not self.precpred(self._ctx, 20): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 20)") - self.state = 1422 + self.state = 1566 self.match(HogQLParser.IS) - self.state = 1424 + self.state = 1568 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==67: - self.state = 1423 + if _la==71: + self.state = 1567 self.match(HogQLParser.NOT) - self.state = 1426 + self.state = 1570 self.match(HogQLParser.NULL_SQL) pass - elif la_ == 21: + elif la_ == 22: localctx = HogQLParser.ColumnExprAliasContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 1427 + self.state = 1571 if not self.precpred(self._ctx, 12): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") - self.state = 1432 + self.state = 1576 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,174,self._ctx) + la_ = self._interp.adaptivePredict(self._input,188,self._ctx) if la_ == 1: - self.state = 1428 + self.state = 1572 self.match(HogQLParser.AS) - self.state = 1429 + self.state = 1573 self.identifier() pass elif la_ == 2: - self.state = 1430 + self.state = 1574 self.match(HogQLParser.AS) - self.state = 1431 + self.state = 1575 self.match(HogQLParser.STRING_LITERAL) pass @@ -10040,9 +10850,9 @@ def columnExpr(self, _p:int=0): pass - self.state = 1438 + self.state = 1582 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,176,self._ctx) + _alt = self._interp.adaptivePredict(self._input,190,self._ctx) except RecognitionException as re: localctx.exception = re @@ -10146,91 +10956,91 @@ def columnLambdaExpr(self): self.enterRule(localctx, 144, self.RULE_columnLambdaExpr) self._la = 0 # Token type try: - self.state = 1488 + self.state = 1632 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,185,self._ctx) + la_ = self._interp.adaptivePredict(self._input,199,self._ctx) if la_ == 1: localctx = HogQLParser.ArrowLambdaContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 1466 + self.state = 1610 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,181,self._ctx) + la_ = self._interp.adaptivePredict(self._input,195,self._ctx) if la_ == 1: - self.state = 1439 + self.state = 1583 self.match(HogQLParser.LPAREN) - self.state = 1440 + self.state = 1584 self.identifier() - self.state = 1445 + self.state = 1589 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,177,self._ctx) + _alt = self._interp.adaptivePredict(self._input,191,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 1441 + self.state = 1585 self.match(HogQLParser.COMMA) - self.state = 1442 + self.state = 1586 self.identifier() - self.state = 1447 + self.state = 1591 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,177,self._ctx) + _alt = self._interp.adaptivePredict(self._input,191,self._ctx) - self.state = 1449 + self.state = 1593 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==135: - self.state = 1448 + if _la==141: + self.state = 1592 self.match(HogQLParser.COMMA) - self.state = 1451 + self.state = 1595 self.match(HogQLParser.RPAREN) pass elif la_ == 2: - self.state = 1453 + self.state = 1597 self.identifier() - self.state = 1458 + self.state = 1602 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,179,self._ctx) + _alt = self._interp.adaptivePredict(self._input,193,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 1454 + self.state = 1598 self.match(HogQLParser.COMMA) - self.state = 1455 + self.state = 1599 self.identifier() - self.state = 1460 + self.state = 1604 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,179,self._ctx) + _alt = self._interp.adaptivePredict(self._input,193,self._ctx) - self.state = 1462 + self.state = 1606 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==135: - self.state = 1461 + if _la==141: + self.state = 1605 self.match(HogQLParser.COMMA) pass elif la_ == 3: - self.state = 1464 + self.state = 1608 self.match(HogQLParser.LPAREN) - self.state = 1465 + self.state = 1609 self.match(HogQLParser.RPAREN) pass - self.state = 1468 + self.state = 1612 self.match(HogQLParser.ARROW) - self.state = 1471 + self.state = 1615 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,182,self._ctx) + la_ = self._interp.adaptivePredict(self._input,196,self._ctx) if la_ == 1: - self.state = 1469 + self.state = 1613 self.columnExpr(0) pass elif la_ == 2: - self.state = 1470 + self.state = 1614 self.block() pass @@ -10240,34 +11050,34 @@ def columnLambdaExpr(self): elif la_ == 2: localctx = HogQLParser.ColonLambdaContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 1473 + self.state = 1617 self.match(HogQLParser.LAMBDA) - self.state = 1474 + self.state = 1618 self.identifier() - self.state = 1479 + self.state = 1623 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,183,self._ctx) + _alt = self._interp.adaptivePredict(self._input,197,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 1475 + self.state = 1619 self.match(HogQLParser.COMMA) - self.state = 1476 + self.state = 1620 self.identifier() - self.state = 1481 + self.state = 1625 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,183,self._ctx) + _alt = self._interp.adaptivePredict(self._input,197,self._ctx) - self.state = 1483 + self.state = 1627 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==135: - self.state = 1482 + if _la==141: + self.state = 1626 self.match(HogQLParser.COMMA) - self.state = 1485 + self.state = 1629 self.match(HogQLParser.COLON) - self.state = 1486 + self.state = 1630 self.columnExpr(0) pass @@ -10320,17 +11130,17 @@ def columnsReplaceList(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1490 + self.state = 1634 self.columnsReplaceItem() - self.state = 1495 + self.state = 1639 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==135: - self.state = 1491 + while _la==141: + self.state = 1635 self.match(HogQLParser.COMMA) - self.state = 1492 + self.state = 1636 self.columnsReplaceItem() - self.state = 1497 + self.state = 1641 self._errHandler.sync(self) _la = self._input.LA(1) @@ -10379,11 +11189,11 @@ def columnsReplaceItem(self): self.enterRule(localctx, 148, self.RULE_columnsReplaceItem) try: self.enterOuterAlt(localctx, 1) - self.state = 1498 + self.state = 1642 self.columnExpr(0) - self.state = 1499 + self.state = 1643 self.match(HogQLParser.AS) - self.state = 1500 + self.state = 1644 self.identifier() except RecognitionException as re: localctx.exception = re @@ -10436,26 +11246,26 @@ def hogqlxChildElement(self): localctx = HogQLParser.HogqlxChildElementContext(self, self._ctx, self.state) self.enterRule(localctx, 150, self.RULE_hogqlxChildElement) try: - self.state = 1508 + self.state = 1652 self._errHandler.sync(self) token = self._input.LA(1) - if token in [151]: + if token in [157]: self.enterOuterAlt(localctx, 1) - self.state = 1502 + self.state = 1646 self.hogqlxTagElement() pass - elif token in [183]: + elif token in [189]: self.enterOuterAlt(localctx, 2) - self.state = 1503 + self.state = 1647 self.hogqlxText() pass - elif token in [147]: + elif token in [153]: self.enterOuterAlt(localctx, 3) - self.state = 1504 + self.state = 1648 self.match(HogQLParser.LBRACE) - self.state = 1505 + self.state = 1649 self.columnExpr(0) - self.state = 1506 + self.state = 1650 self.match(HogQLParser.RBRACE) pass else: @@ -10498,7 +11308,7 @@ def hogqlxText(self): self.enterRule(localctx, 152, self.RULE_hogqlxText) try: self.enterOuterAlt(localctx, 1) - self.state = 1510 + self.state = 1654 self.match(HogQLParser.HOGQLX_TEXT_TEXT) except RecognitionException as re: localctx.exception = re @@ -10601,64 +11411,64 @@ def hogqlxTagElement(self): self.enterRule(localctx, 154, self.RULE_hogqlxTagElement) self._la = 0 # Token type try: - self.state = 1541 + self.state = 1685 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,191,self._ctx) + la_ = self._interp.adaptivePredict(self._input,205,self._ctx) if la_ == 1: localctx = HogQLParser.HogqlxTagElementClosedContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 1512 + self.state = 1656 self.match(HogQLParser.LT) - self.state = 1513 + self.state = 1657 self.identifier() - self.state = 1517 + self.state = 1661 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & -5189554717113466882) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 391808760944787435) != 0): - self.state = 1514 + while ((((_la - 1)) & ~0x3f) == 0 and ((1 << (_la - 1)) & -2311473080112783361) != 0) or ((((_la - 66)) & ~0x3f) == 0 and ((1 << (_la - 66)) & 6268940175116599215) != 0): + self.state = 1658 self.hogqlxTagAttribute() - self.state = 1519 + self.state = 1663 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 1520 + self.state = 1664 self.match(HogQLParser.SLASH_GT) pass elif la_ == 2: localctx = HogQLParser.HogqlxTagElementNestedContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 1522 + self.state = 1666 self.match(HogQLParser.LT) - self.state = 1523 + self.state = 1667 self.identifier() - self.state = 1527 + self.state = 1671 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & -5189554717113466882) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 391808760944787435) != 0): - self.state = 1524 + while ((((_la - 1)) & ~0x3f) == 0 and ((1 << (_la - 1)) & -2311473080112783361) != 0) or ((((_la - 66)) & ~0x3f) == 0 and ((1 << (_la - 66)) & 6268940175116599215) != 0): + self.state = 1668 self.hogqlxTagAttribute() - self.state = 1529 + self.state = 1673 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 1530 + self.state = 1674 self.match(HogQLParser.GT) - self.state = 1534 + self.state = 1678 self._errHandler.sync(self) _la = self._input.LA(1) - while ((((_la - 147)) & ~0x3f) == 0 and ((1 << (_la - 147)) & 68719476753) != 0): - self.state = 1531 + while ((((_la - 153)) & ~0x3f) == 0 and ((1 << (_la - 153)) & 68719476753) != 0): + self.state = 1675 self.hogqlxChildElement() - self.state = 1536 + self.state = 1680 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 1537 + self.state = 1681 self.match(HogQLParser.LT_SLASH) - self.state = 1538 + self.state = 1682 self.identifier() - self.state = 1539 + self.state = 1683 self.match(HogQLParser.GT) pass @@ -10717,36 +11527,36 @@ def hogqlxTagAttribute(self): localctx = HogQLParser.HogqlxTagAttributeContext(self, self._ctx, self.state) self.enterRule(localctx, 156, self.RULE_hogqlxTagAttribute) try: - self.state = 1554 + self.state = 1698 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,192,self._ctx) + la_ = self._interp.adaptivePredict(self._input,206,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 1543 + self.state = 1687 self.identifier() - self.state = 1544 + self.state = 1688 self.match(HogQLParser.EQ_SINGLE) - self.state = 1545 + self.state = 1689 self.string() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 1547 + self.state = 1691 self.identifier() - self.state = 1548 + self.state = 1692 self.match(HogQLParser.EQ_SINGLE) - self.state = 1549 + self.state = 1693 self.match(HogQLParser.LBRACE) - self.state = 1550 + self.state = 1694 self.columnExpr(0) - self.state = 1551 + self.state = 1695 self.match(HogQLParser.RBRACE) pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 1553 + self.state = 1697 self.identifier() pass @@ -10799,26 +11609,26 @@ def withExprList(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1556 + self.state = 1700 self.withExpr() - self.state = 1561 + self.state = 1705 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,193,self._ctx) + _alt = self._interp.adaptivePredict(self._input,207,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 1557 + self.state = 1701 self.match(HogQLParser.COMMA) - self.state = 1558 + self.state = 1702 self.withExpr() - self.state = 1563 + self.state = 1707 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,193,self._ctx) + _alt = self._interp.adaptivePredict(self._input,207,self._ctx) - self.state = 1565 + self.state = 1709 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==135: - self.state = 1564 + if _la==141: + self.state = 1708 self.match(HogQLParser.COMMA) @@ -10917,68 +11727,68 @@ def withExpr(self): self.enterRule(localctx, 160, self.RULE_withExpr) self._la = 0 # Token type try: - self.state = 1591 + self.state = 1735 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,199,self._ctx) + la_ = self._interp.adaptivePredict(self._input,213,self._ctx) if la_ == 1: localctx = HogQLParser.WithExprSubqueryContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 1567 + self.state = 1711 self.identifier() - self.state = 1569 + self.state = 1713 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==149: - self.state = 1568 + if _la==155: + self.state = 1712 self.withExprColumnNameList() - self.state = 1574 + self.state = 1718 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==111: - self.state = 1571 + if _la==117: + self.state = 1715 self.match(HogQLParser.USING) - self.state = 1572 + self.state = 1716 self.match(HogQLParser.KEY) - self.state = 1573 + self.state = 1717 self.withExprColumnNameList() - self.state = 1576 + self.state = 1720 self.match(HogQLParser.AS) - self.state = 1581 + self.state = 1725 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==62 or _la==67: - self.state = 1578 + if _la==65 or _la==71: + self.state = 1722 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==67: - self.state = 1577 + if _la==71: + self.state = 1721 self.match(HogQLParser.NOT) - self.state = 1580 + self.state = 1724 self.match(HogQLParser.MATERIALIZED) - self.state = 1583 + self.state = 1727 self.match(HogQLParser.LPAREN) - self.state = 1584 + self.state = 1728 self.selectSetStmt() - self.state = 1585 + self.state = 1729 self.match(HogQLParser.RPAREN) pass elif la_ == 2: localctx = HogQLParser.WithExprColumnContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 1587 + self.state = 1731 self.columnExpr(0) - self.state = 1588 + self.state = 1732 self.match(HogQLParser.AS) - self.state = 1589 + self.state = 1733 self.identifier() pass @@ -11037,23 +11847,23 @@ def withExprColumnNameList(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1593 + self.state = 1737 self.match(HogQLParser.LPAREN) - self.state = 1594 + self.state = 1738 self.identifier() - self.state = 1599 + self.state = 1743 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==135: - self.state = 1595 + while _la==141: + self.state = 1739 self.match(HogQLParser.COMMA) - self.state = 1596 + self.state = 1740 self.identifier() - self.state = 1601 + self.state = 1745 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 1602 + self.state = 1746 self.match(HogQLParser.RPAREN) except RecognitionException as re: localctx.exception = re @@ -11103,27 +11913,27 @@ def columnIdentifier(self): localctx = HogQLParser.ColumnIdentifierContext(self, self._ctx, self.state) self.enterRule(localctx, 164, self.RULE_columnIdentifier) try: - self.state = 1611 + self.state = 1755 self._errHandler.sync(self) token = self._input.LA(1) - if token in [147]: + if token in [153]: self.enterOuterAlt(localctx, 1) - self.state = 1604 + self.state = 1748 self.placeholder() pass - elif token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 33, 35, 36, 37, 38, 40, 41, 42, 43, 44, 45, 46, 47, 49, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 63, 64, 65, 67, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 104, 105, 107, 108, 109, 110, 111, 112, 113, 114, 115, 117, 118, 120, 122]: + elif token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 34, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 54, 55, 56, 57, 58, 59, 60, 61, 63, 64, 66, 67, 68, 69, 71, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 104, 105, 106, 107, 108, 109, 110, 111, 113, 114, 115, 116, 117, 118, 119, 120, 121, 123, 124, 126, 128]: self.enterOuterAlt(localctx, 2) - self.state = 1608 + self.state = 1752 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,201,self._ctx) + la_ = self._interp.adaptivePredict(self._input,215,self._ctx) if la_ == 1: - self.state = 1605 + self.state = 1749 self.tableIdentifier() - self.state = 1606 + self.state = 1750 self.match(HogQLParser.DOT) - self.state = 1610 + self.state = 1754 self.nestedIdentifier() pass else: @@ -11176,20 +11986,20 @@ def nestedIdentifier(self): self.enterRule(localctx, 166, self.RULE_nestedIdentifier) try: self.enterOuterAlt(localctx, 1) - self.state = 1613 + self.state = 1757 self.identifier() - self.state = 1618 + self.state = 1762 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,203,self._ctx) + _alt = self._interp.adaptivePredict(self._input,217,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 1614 + self.state = 1758 self.match(HogQLParser.DOT) - self.state = 1615 + self.state = 1759 self.identifier() - self.state = 1620 + self.state = 1764 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,203,self._ctx) + _alt = self._interp.adaptivePredict(self._input,217,self._ctx) except RecognitionException as re: localctx.exception = re @@ -11261,29 +12071,65 @@ def placeholder(self): def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTableExprPlaceholder" ): - return visitor.visitTableExprPlaceholder(self) + if hasattr( visitor, "visitTableExprPlaceholder" ): + return visitor.visitTableExprPlaceholder(self) + else: + return visitor.visitChildren(self) + + + class TableExprSubqueryContext(TableExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.TableExprContext + super().__init__(parser) + self.copyFrom(ctx) + + def LPAREN(self): + return self.getToken(HogQLParser.LPAREN, 0) + def selectSetStmt(self): + return self.getTypedRuleContext(HogQLParser.SelectSetStmtContext,0) + + def RPAREN(self): + return self.getToken(HogQLParser.RPAREN, 0) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTableExprSubquery" ): + return visitor.visitTableExprSubquery(self) else: return visitor.visitChildren(self) - class TableExprSubqueryContext(TableExprContext): + class TableExprPivotContext(TableExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.TableExprContext super().__init__(parser) self.copyFrom(ctx) + def tableExpr(self): + return self.getTypedRuleContext(HogQLParser.TableExprContext,0) + + def PIVOT(self): + return self.getToken(HogQLParser.PIVOT, 0) def LPAREN(self): return self.getToken(HogQLParser.LPAREN, 0) - def selectSetStmt(self): - return self.getTypedRuleContext(HogQLParser.SelectSetStmtContext,0) + def columnExprList(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(HogQLParser.ColumnExprListContext) + else: + return self.getTypedRuleContext(HogQLParser.ColumnExprListContext,i) + + def pivotColumnList(self): + return self.getTypedRuleContext(HogQLParser.PivotColumnListContext,0) def RPAREN(self): return self.getToken(HogQLParser.RPAREN, 0) + def GROUP(self): + return self.getToken(HogQLParser.GROUP, 0) + def BY(self): + return self.getToken(HogQLParser.BY, 0) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTableExprSubquery" ): - return visitor.visitTableExprSubquery(self) + if hasattr( visitor, "visitTableExprPivot" ): + return visitor.visitTableExprPivot(self) else: return visitor.visitChildren(self) @@ -11372,6 +12218,10 @@ def unpivotColumnList(self): def RPAREN(self): return self.getToken(HogQLParser.RPAREN, 0) + def INCLUDE(self): + return self.getToken(HogQLParser.INCLUDE, 0) + def NULLS(self): + return self.getToken(HogQLParser.NULLS, 0) def accept(self, visitor:ParseTreeVisitor): if hasattr( visitor, "visitTableExprUnpivot" ): @@ -11388,17 +12238,18 @@ def tableExpr(self, _p:int=0): _prevctx = localctx _startState = 168 self.enterRecursionRule(localctx, 168, self.RULE_tableExpr, _p) + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1634 + self.state = 1778 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,204,self._ctx) + la_ = self._interp.adaptivePredict(self._input,218,self._ctx) if la_ == 1: localctx = HogQLParser.TableExprIdentifierContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1622 + self.state = 1766 self.tableIdentifier() pass @@ -11406,7 +12257,7 @@ def tableExpr(self, _p:int=0): localctx = HogQLParser.TableExprFunctionContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1623 + self.state = 1767 self.tableFunctionExpr() pass @@ -11414,11 +12265,11 @@ def tableExpr(self, _p:int=0): localctx = HogQLParser.TableExprSubqueryContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1624 + self.state = 1768 self.match(HogQLParser.LPAREN) - self.state = 1625 + self.state = 1769 self.selectSetStmt() - self.state = 1626 + self.state = 1770 self.match(HogQLParser.RPAREN) pass @@ -11426,11 +12277,11 @@ def tableExpr(self, _p:int=0): localctx = HogQLParser.TableExprValuesContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1628 + self.state = 1772 self.match(HogQLParser.LPAREN) - self.state = 1629 + self.state = 1773 self.valuesClause() - self.state = 1630 + self.state = 1774 self.match(HogQLParser.RPAREN) pass @@ -11438,7 +12289,7 @@ def tableExpr(self, _p:int=0): localctx = HogQLParser.TableExprTagContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1632 + self.state = 1776 self.hogqlxTagElement() pass @@ -11446,77 +12297,118 @@ def tableExpr(self, _p:int=0): localctx = HogQLParser.TableExprPlaceholderContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1633 + self.state = 1777 self.placeholder() pass self._ctx.stop = self._input.LT(-1) - self.state = 1653 + self.state = 1813 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,208,self._ctx) + _alt = self._interp.adaptivePredict(self._input,224,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 1651 + self.state = 1811 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,207,self._ctx) + la_ = self._interp.adaptivePredict(self._input,223,self._ctx) if la_ == 1: + localctx = HogQLParser.TableExprPivotContext(self, HogQLParser.TableExprContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_tableExpr) + self.state = 1780 + if not self.precpred(self._ctx, 5): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") + self.state = 1781 + self.match(HogQLParser.PIVOT) + self.state = 1782 + self.match(HogQLParser.LPAREN) + self.state = 1783 + self.columnExprList() + self.state = 1784 + self.pivotColumnList() + self.state = 1788 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==41: + self.state = 1785 + self.match(HogQLParser.GROUP) + self.state = 1786 + self.match(HogQLParser.BY) + self.state = 1787 + self.columnExprList() + + + self.state = 1790 + self.match(HogQLParser.RPAREN) + pass + + elif la_ == 2: localctx = HogQLParser.TableExprUnpivotContext(self, HogQLParser.TableExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_tableExpr) - self.state = 1636 + self.state = 1792 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 1637 + self.state = 1793 self.match(HogQLParser.UNPIVOT) - self.state = 1638 + self.state = 1796 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==49: + self.state = 1794 + self.match(HogQLParser.INCLUDE) + self.state = 1795 + self.match(HogQLParser.NULLS) + + + self.state = 1798 self.match(HogQLParser.LPAREN) - self.state = 1639 + self.state = 1799 self.unpivotColumnList() - self.state = 1640 + self.state = 1800 self.match(HogQLParser.RPAREN) pass - elif la_ == 2: + elif la_ == 3: localctx = HogQLParser.TableExprAliasContext(self, HogQLParser.TableExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_tableExpr) - self.state = 1642 + self.state = 1802 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 1646 + self.state = 1806 self._errHandler.sync(self) token = self._input.LA(1) - if token in [21, 33, 44, 54, 122]: - self.state = 1643 + if token in [21, 34, 45, 57, 128]: + self.state = 1803 self.alias() pass elif token in [6]: - self.state = 1644 + self.state = 1804 self.match(HogQLParser.AS) - self.state = 1645 + self.state = 1805 self.identifier() pass else: raise NoViableAltException(self) - self.state = 1649 + self.state = 1809 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,206,self._ctx) + la_ = self._interp.adaptivePredict(self._input,222,self._ctx) if la_ == 1: - self.state = 1648 + self.state = 1808 self.columnAliases() pass - self.state = 1655 + self.state = 1815 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,208,self._ctx) + _alt = self._interp.adaptivePredict(self._input,224,self._ctx) except RecognitionException as re: localctx.exception = re @@ -11527,6 +12419,127 @@ def tableExpr(self, _p:int=0): return localctx + class PivotColumnListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def FOR(self): + return self.getToken(HogQLParser.FOR, 0) + + def pivotColumn(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(HogQLParser.PivotColumnContext) + else: + return self.getTypedRuleContext(HogQLParser.PivotColumnContext,i) + + + def getRuleIndex(self): + return HogQLParser.RULE_pivotColumnList + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPivotColumnList" ): + return visitor.visitPivotColumnList(self) + else: + return visitor.visitChildren(self) + + + + + def pivotColumnList(self): + + localctx = HogQLParser.PivotColumnListContext(self, self._ctx, self.state) + self.enterRule(localctx, 170, self.RULE_pivotColumnList) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1816 + self.match(HogQLParser.FOR) + self.state = 1818 + self._errHandler.sync(self) + _alt = 1 + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1817 + self.pivotColumn() + + else: + raise NoViableAltException(self) + self.state = 1820 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,225,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PivotColumnContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def columnExprTupleOrSingle(self): + return self.getTypedRuleContext(HogQLParser.ColumnExprTupleOrSingleContext,0) + + + def IN(self): + return self.getToken(HogQLParser.IN, 0) + + def LPAREN(self): + return self.getToken(HogQLParser.LPAREN, 0) + + def columnExprList(self): + return self.getTypedRuleContext(HogQLParser.ColumnExprListContext,0) + + + def RPAREN(self): + return self.getToken(HogQLParser.RPAREN, 0) + + def getRuleIndex(self): + return HogQLParser.RULE_pivotColumn + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPivotColumn" ): + return visitor.visitPivotColumn(self) + else: + return visitor.visitChildren(self) + + + + + def pivotColumn(self): + + localctx = HogQLParser.PivotColumnContext(self, self._ctx, self.state) + self.enterRule(localctx, 172, self.RULE_pivotColumn) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1822 + self.columnExprTupleOrSingle() + self.state = 1823 + self.match(HogQLParser.IN) + self.state = 1824 + self.match(HogQLParser.LPAREN) + self.state = 1825 + self.columnExprList() + self.state = 1826 + self.match(HogQLParser.RPAREN) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class UnpivotColumnListContext(ParserRuleContext): __slots__ = 'parser' @@ -11562,30 +12575,30 @@ def accept(self, visitor:ParseTreeVisitor): def unpivotColumnList(self): localctx = HogQLParser.UnpivotColumnListContext(self, self._ctx, self.state) - self.enterRule(localctx, 170, self.RULE_unpivotColumnList) + self.enterRule(localctx, 174, self.RULE_unpivotColumnList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1656 + self.state = 1828 self.unpivotColumn() - self.state = 1661 + self.state = 1833 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,209,self._ctx) + _alt = self._interp.adaptivePredict(self._input,226,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 1657 + self.state = 1829 self.match(HogQLParser.COMMA) - self.state = 1658 + self.state = 1830 self.unpivotColumn() - self.state = 1663 + self.state = 1835 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,209,self._ctx) + _alt = self._interp.adaptivePredict(self._input,226,self._ctx) - self.state = 1665 + self.state = 1837 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==135: - self.state = 1664 + if _la==141: + self.state = 1836 self.match(HogQLParser.COMMA) @@ -11615,18 +12628,30 @@ def columnExprTupleOrSingle(self, i:int=None): def FOR(self): return self.getToken(HogQLParser.FOR, 0) - def IN(self): - return self.getToken(HogQLParser.IN, 0) + def IN(self, i:int=None): + if i is None: + return self.getTokens(HogQLParser.IN) + else: + return self.getToken(HogQLParser.IN, i) - def LPAREN(self): - return self.getToken(HogQLParser.LPAREN, 0) + def LPAREN(self, i:int=None): + if i is None: + return self.getTokens(HogQLParser.LPAREN) + else: + return self.getToken(HogQLParser.LPAREN, i) - def columnExprList(self): - return self.getTypedRuleContext(HogQLParser.ColumnExprListContext,0) + def columnExprList(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(HogQLParser.ColumnExprListContext) + else: + return self.getTypedRuleContext(HogQLParser.ColumnExprListContext,i) - def RPAREN(self): - return self.getToken(HogQLParser.RPAREN, 0) + def RPAREN(self, i:int=None): + if i is None: + return self.getTokens(HogQLParser.RPAREN) + else: + return self.getToken(HogQLParser.RPAREN, i) def getRuleIndex(self): return HogQLParser.RULE_unpivotColumn @@ -11643,23 +12668,42 @@ def accept(self, visitor:ParseTreeVisitor): def unpivotColumn(self): localctx = HogQLParser.UnpivotColumnContext(self, self._ctx, self.state) - self.enterRule(localctx, 172, self.RULE_unpivotColumn) + self.enterRule(localctx, 176, self.RULE_unpivotColumn) + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1667 + self.state = 1839 self.columnExprTupleOrSingle() - self.state = 1668 + self.state = 1840 self.match(HogQLParser.FOR) - self.state = 1669 + self.state = 1841 self.columnExprTupleOrSingle() - self.state = 1670 + self.state = 1842 self.match(HogQLParser.IN) - self.state = 1671 + self.state = 1843 self.match(HogQLParser.LPAREN) - self.state = 1672 + self.state = 1844 self.columnExprList() - self.state = 1673 + self.state = 1845 self.match(HogQLParser.RPAREN) + self.state = 1854 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & -4620694360411881474) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 6629016626756845565) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & 1237726691519) != 0): + self.state = 1846 + self.columnExprTupleOrSingle() + self.state = 1847 + self.match(HogQLParser.IN) + self.state = 1848 + self.match(HogQLParser.LPAREN) + self.state = 1849 + self.columnExprList() + self.state = 1850 + self.match(HogQLParser.RPAREN) + self.state = 1856 + self._errHandler.sync(self) + _la = self._input.LA(1) + except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -11705,24 +12749,24 @@ def accept(self, visitor:ParseTreeVisitor): def columnExprTupleOrSingle(self): localctx = HogQLParser.ColumnExprTupleOrSingleContext(self, self._ctx, self.state) - self.enterRule(localctx, 174, self.RULE_columnExprTupleOrSingle) + self.enterRule(localctx, 178, self.RULE_columnExprTupleOrSingle) try: - self.state = 1680 + self.state = 1862 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,211,self._ctx) + la_ = self._interp.adaptivePredict(self._input,229,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 1675 + self.state = 1857 self.match(HogQLParser.LPAREN) - self.state = 1676 + self.state = 1858 self.columnExprList() - self.state = 1677 + self.state = 1859 self.match(HogQLParser.RPAREN) pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 1679 + self.state = 1861 self.columnExpr(0) pass @@ -11777,27 +12821,27 @@ def accept(self, visitor:ParseTreeVisitor): def columnAliases(self): localctx = HogQLParser.ColumnAliasesContext(self, self._ctx, self.state) - self.enterRule(localctx, 176, self.RULE_columnAliases) + self.enterRule(localctx, 180, self.RULE_columnAliases) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1682 + self.state = 1864 self.match(HogQLParser.LPAREN) - self.state = 1683 + self.state = 1865 self.identifier() - self.state = 1688 + self.state = 1870 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==135: - self.state = 1684 + while _la==141: + self.state = 1866 self.match(HogQLParser.COMMA) - self.state = 1685 + self.state = 1867 self.identifier() - self.state = 1690 + self.state = 1872 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 1691 + self.state = 1873 self.match(HogQLParser.RPAREN) except RecognitionException as re: localctx.exception = re @@ -11844,23 +12888,23 @@ def accept(self, visitor:ParseTreeVisitor): def tableFunctionExpr(self): localctx = HogQLParser.TableFunctionExprContext(self, self._ctx, self.state) - self.enterRule(localctx, 178, self.RULE_tableFunctionExpr) + self.enterRule(localctx, 182, self.RULE_tableFunctionExpr) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1693 + self.state = 1875 self.identifier() - self.state = 1694 + self.state = 1876 self.match(HogQLParser.LPAREN) - self.state = 1696 + self.state = 1878 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & -5189273242136756226) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -184651991358636033) != 0) or ((((_la - 129)) & ~0x3f) == 0 and ((1 << (_la - 129)) & 9669739777) != 0): - self.state = 1695 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -4620694360411881474) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 6629016626756845565) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & 1237726691519) != 0): + self.state = 1877 self.tableArgList() - self.state = 1698 + self.state = 1880 self.match(HogQLParser.RPAREN) except RecognitionException as re: localctx.exception = re @@ -11904,20 +12948,20 @@ def accept(self, visitor:ParseTreeVisitor): def tableIdentifier(self): localctx = HogQLParser.TableIdentifierContext(self, self._ctx, self.state) - self.enterRule(localctx, 180, self.RULE_tableIdentifier) + self.enterRule(localctx, 184, self.RULE_tableIdentifier) try: self.enterOuterAlt(localctx, 1) - self.state = 1703 + self.state = 1885 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,214,self._ctx) + la_ = self._interp.adaptivePredict(self._input,232,self._ctx) if la_ == 1: - self.state = 1700 + self.state = 1882 self.databaseIdentifier() - self.state = 1701 + self.state = 1883 self.match(HogQLParser.DOT) - self.state = 1705 + self.state = 1887 self.nestedIdentifier() except RecognitionException as re: localctx.exception = re @@ -11963,30 +13007,30 @@ def accept(self, visitor:ParseTreeVisitor): def tableArgList(self): localctx = HogQLParser.TableArgListContext(self, self._ctx, self.state) - self.enterRule(localctx, 182, self.RULE_tableArgList) + self.enterRule(localctx, 186, self.RULE_tableArgList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1707 + self.state = 1889 self.columnExpr(0) - self.state = 1712 + self.state = 1894 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,215,self._ctx) + _alt = self._interp.adaptivePredict(self._input,233,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 1708 + self.state = 1890 self.match(HogQLParser.COMMA) - self.state = 1709 + self.state = 1891 self.columnExpr(0) - self.state = 1714 + self.state = 1896 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,215,self._ctx) + _alt = self._interp.adaptivePredict(self._input,233,self._ctx) - self.state = 1716 + self.state = 1898 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==135: - self.state = 1715 + if _la==141: + self.state = 1897 self.match(HogQLParser.COMMA) @@ -12025,10 +13069,10 @@ def accept(self, visitor:ParseTreeVisitor): def databaseIdentifier(self): localctx = HogQLParser.DatabaseIdentifierContext(self, self._ctx, self.state) - self.enterRule(localctx, 184, self.RULE_databaseIdentifier) + self.enterRule(localctx, 188, self.RULE_databaseIdentifier) try: self.enterOuterAlt(localctx, 1) - self.state = 1718 + self.state = 1900 self.identifier() except RecognitionException as re: localctx.exception = re @@ -12076,42 +13120,42 @@ def accept(self, visitor:ParseTreeVisitor): def floatingLiteral(self): localctx = HogQLParser.FloatingLiteralContext(self, self._ctx, self.state) - self.enterRule(localctx, 186, self.RULE_floatingLiteral) + self.enterRule(localctx, 190, self.RULE_floatingLiteral) self._la = 0 # Token type try: - self.state = 1728 + self.state = 1910 self._errHandler.sync(self) token = self._input.LA(1) - if token in [123]: + if token in [129]: self.enterOuterAlt(localctx, 1) - self.state = 1720 + self.state = 1902 self.match(HogQLParser.FLOATING_LITERAL) pass - elif token in [139]: + elif token in [145]: self.enterOuterAlt(localctx, 2) - self.state = 1721 + self.state = 1903 self.match(HogQLParser.DOT) - self.state = 1722 + self.state = 1904 _la = self._input.LA(1) - if not(_la==124 or _la==125): + if not(_la==130 or _la==131): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() pass - elif token in [125]: + elif token in [131]: self.enterOuterAlt(localctx, 3) - self.state = 1723 + self.state = 1905 self.match(HogQLParser.DECIMAL_LITERAL) - self.state = 1724 + self.state = 1906 self.match(HogQLParser.DOT) - self.state = 1726 + self.state = 1908 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,217,self._ctx) + la_ = self._interp.adaptivePredict(self._input,235,self._ctx) if la_ == 1: - self.state = 1725 + self.state = 1907 _la = self._input.LA(1) - if not(_la==124 or _la==125): + if not(_la==130 or _la==131): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -12178,53 +13222,53 @@ def accept(self, visitor:ParseTreeVisitor): def numberLiteral(self): localctx = HogQLParser.NumberLiteralContext(self, self._ctx, self.state) - self.enterRule(localctx, 188, self.RULE_numberLiteral) + self.enterRule(localctx, 192, self.RULE_numberLiteral) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1731 + self.state = 1913 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==137 or _la==159: - self.state = 1730 + if _la==143 or _la==165: + self.state = 1912 _la = self._input.LA(1) - if not(_la==137 or _la==159): + if not(_la==143 or _la==165): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 1739 + self.state = 1921 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,220,self._ctx) + la_ = self._interp.adaptivePredict(self._input,238,self._ctx) if la_ == 1: - self.state = 1733 + self.state = 1915 self.floatingLiteral() pass elif la_ == 2: - self.state = 1734 + self.state = 1916 self.match(HogQLParser.OCTAL_LITERAL) pass elif la_ == 3: - self.state = 1735 + self.state = 1917 self.match(HogQLParser.DECIMAL_LITERAL) pass elif la_ == 4: - self.state = 1736 + self.state = 1918 self.match(HogQLParser.HEXADECIMAL_LITERAL) pass elif la_ == 5: - self.state = 1737 + self.state = 1919 self.match(HogQLParser.INF) pass elif la_ == 6: - self.state = 1738 + self.state = 1920 self.match(HogQLParser.NAN_SQL) pass @@ -12270,24 +13314,24 @@ def accept(self, visitor:ParseTreeVisitor): def literal(self): localctx = HogQLParser.LiteralContext(self, self._ctx, self.state) - self.enterRule(localctx, 190, self.RULE_literal) + self.enterRule(localctx, 194, self.RULE_literal) try: - self.state = 1744 + self.state = 1926 self._errHandler.sync(self) token = self._input.LA(1) - if token in [48, 66, 123, 124, 125, 126, 137, 139, 159]: + if token in [51, 70, 129, 130, 131, 132, 143, 145, 165]: self.enterOuterAlt(localctx, 1) - self.state = 1741 + self.state = 1923 self.numberLiteral() pass - elif token in [127]: + elif token in [133]: self.enterOuterAlt(localctx, 2) - self.state = 1742 + self.state = 1924 self.match(HogQLParser.STRING_LITERAL) pass - elif token in [68]: + elif token in [72]: self.enterOuterAlt(localctx, 3) - self.state = 1743 + self.state = 1925 self.match(HogQLParser.NULL_SQL) pass else: @@ -12348,13 +13392,13 @@ def accept(self, visitor:ParseTreeVisitor): def interval(self): localctx = HogQLParser.IntervalContext(self, self._ctx, self.state) - self.enterRule(localctx, 192, self.RULE_interval) + self.enterRule(localctx, 196, self.RULE_interval) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1746 + self.state = 1928 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & -9223363240757559296) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 72620544058523649) != 0)): + if not(_la==22 or _la==44 or ((((_la - 66)) & ~0x3f) == 0 and ((1 << (_la - 66)) & 1161928704936378371) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -12456,6 +13500,9 @@ def EXCLUDE(self): def EXTRACT(self): return self.getToken(HogQLParser.EXTRACT, 0) + def FILTER(self): + return self.getToken(HogQLParser.FILTER, 0) + def FINAL(self): return self.getToken(HogQLParser.FINAL, 0) @@ -12492,9 +13539,15 @@ def GROUPING(self): def IF(self): return self.getToken(HogQLParser.IF, 0) + def IGNORE(self): + return self.getToken(HogQLParser.IGNORE, 0) + def ILIKE(self): return self.getToken(HogQLParser.ILIKE, 0) + def INCLUDE(self): + return self.getToken(HogQLParser.INCLUDE, 0) + def IN(self): return self.getToken(HogQLParser.IN, 0) @@ -12531,6 +13584,9 @@ def LIMIT(self): def NAME(self): return self.getToken(HogQLParser.NAME, 0) + def NATURAL(self): + return self.getToken(HogQLParser.NATURAL, 0) + def NOT(self): return self.getToken(HogQLParser.NOT, 0) @@ -12558,6 +13614,12 @@ def OVER(self): def PARTITION(self): return self.getToken(HogQLParser.PARTITION, 0) + def PIVOT(self): + return self.getToken(HogQLParser.PIVOT, 0) + + def POSITIONAL(self): + return self.getToken(HogQLParser.POSITIONAL, 0) + def PRECEDING(self): return self.getToken(HogQLParser.PRECEDING, 0) @@ -12681,13 +13743,13 @@ def accept(self, visitor:ParseTreeVisitor): def keyword(self): localctx = HogQLParser.KeywordContext(self, self._ctx, self.state) - self.enterRule(localctx, 194, self.RULE_keyword) + self.enterRule(localctx, 198, self.RULE_keyword) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1748 + self.state = 1930 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 4033808523644092414) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 15478920367276021) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & -4622963752415805442) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 1981301807011331761) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -12735,13 +13797,13 @@ def accept(self, visitor:ParseTreeVisitor): def keywordForAlias(self): localctx = HogQLParser.KeywordForAliasContext(self, self._ctx, self.state) - self.enterRule(localctx, 196, self.RULE_keywordForAlias) + self.enterRule(localctx, 200, self.RULE_keywordForAlias) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1750 + self.state = 1932 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 18031999287558144) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 144150389629911040) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -12784,19 +13846,19 @@ def accept(self, visitor:ParseTreeVisitor): def alias(self): localctx = HogQLParser.AliasContext(self, self._ctx, self.state) - self.enterRule(localctx, 198, self.RULE_alias) + self.enterRule(localctx, 202, self.RULE_alias) try: - self.state = 1754 + self.state = 1936 self._errHandler.sync(self) token = self._input.LA(1) - if token in [122]: + if token in [128]: self.enterOuterAlt(localctx, 1) - self.state = 1752 + self.state = 1934 self.match(HogQLParser.IDENTIFIER) pass - elif token in [21, 33, 44, 54]: + elif token in [21, 34, 45, 57]: self.enterOuterAlt(localctx, 2) - self.state = 1753 + self.state = 1935 self.keywordForAlias() pass else: @@ -12844,24 +13906,24 @@ def accept(self, visitor:ParseTreeVisitor): def identifier(self): localctx = HogQLParser.IdentifierContext(self, self._ctx, self.state) - self.enterRule(localctx, 200, self.RULE_identifier) + self.enterRule(localctx, 204, self.RULE_identifier) try: - self.state = 1759 + self.state = 1941 self._errHandler.sync(self) token = self._input.LA(1) - if token in [122]: + if token in [128]: self.enterOuterAlt(localctx, 1) - self.state = 1756 + self.state = 1938 self.match(HogQLParser.IDENTIFIER) pass - elif token in [22, 43, 63, 64, 80, 90, 113, 120]: + elif token in [22, 44, 66, 67, 86, 96, 119, 126]: self.enterOuterAlt(localctx, 2) - self.state = 1757 + self.state = 1939 self.interval() pass - elif token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 27, 29, 30, 31, 33, 35, 36, 37, 38, 40, 41, 42, 44, 45, 46, 47, 49, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 65, 67, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 104, 105, 107, 108, 109, 110, 111, 112, 114, 115, 117, 118]: + elif token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 27, 29, 30, 31, 32, 34, 36, 37, 38, 39, 41, 42, 43, 45, 46, 47, 48, 49, 50, 52, 54, 55, 56, 57, 58, 59, 60, 61, 63, 64, 68, 69, 71, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97, 98, 99, 100, 101, 102, 104, 105, 106, 107, 108, 109, 110, 111, 113, 114, 115, 116, 117, 118, 120, 121, 123, 124]: self.enterOuterAlt(localctx, 3) - self.state = 1758 + self.state = 1940 self.keyword() pass else: @@ -12909,14 +13971,14 @@ def accept(self, visitor:ParseTreeVisitor): def enumValue(self): localctx = HogQLParser.EnumValueContext(self, self._ctx, self.state) - self.enterRule(localctx, 202, self.RULE_enumValue) + self.enterRule(localctx, 206, self.RULE_enumValue) try: self.enterOuterAlt(localctx, 1) - self.state = 1761 + self.state = 1943 self.string() - self.state = 1762 + self.state = 1944 self.match(HogQLParser.EQ_SINGLE) - self.state = 1763 + self.state = 1945 self.numberLiteral() except RecognitionException as re: localctx.exception = re @@ -12959,14 +14021,14 @@ def accept(self, visitor:ParseTreeVisitor): def placeholder(self): localctx = HogQLParser.PlaceholderContext(self, self._ctx, self.state) - self.enterRule(localctx, 204, self.RULE_placeholder) + self.enterRule(localctx, 208, self.RULE_placeholder) try: self.enterOuterAlt(localctx, 1) - self.state = 1765 + self.state = 1947 self.match(HogQLParser.LBRACE) - self.state = 1766 + self.state = 1948 self.columnExpr(0) - self.state = 1767 + self.state = 1949 self.match(HogQLParser.RBRACE) except RecognitionException as re: localctx.exception = re @@ -13006,19 +14068,19 @@ def accept(self, visitor:ParseTreeVisitor): def string(self): localctx = HogQLParser.StringContext(self, self._ctx, self.state) - self.enterRule(localctx, 206, self.RULE_string) + self.enterRule(localctx, 210, self.RULE_string) try: - self.state = 1771 + self.state = 1953 self._errHandler.sync(self) token = self._input.LA(1) - if token in [127]: + if token in [133]: self.enterOuterAlt(localctx, 1) - self.state = 1769 + self.state = 1951 self.match(HogQLParser.STRING_LITERAL) pass - elif token in [162]: + elif token in [168]: self.enterOuterAlt(localctx, 2) - self.state = 1770 + self.state = 1952 self.templateString() pass else: @@ -13068,23 +14130,23 @@ def accept(self, visitor:ParseTreeVisitor): def templateString(self): localctx = HogQLParser.TemplateStringContext(self, self._ctx, self.state) - self.enterRule(localctx, 208, self.RULE_templateString) + self.enterRule(localctx, 212, self.RULE_templateString) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1773 + self.state = 1955 self.match(HogQLParser.QUOTE_SINGLE_TEMPLATE) - self.state = 1777 + self.state = 1959 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==177 or _la==178: - self.state = 1774 + while _la==183 or _la==184: + self.state = 1956 self.stringContents() - self.state = 1779 + self.state = 1961 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 1780 + self.state = 1962 self.match(HogQLParser.QUOTE_SINGLE) except RecognitionException as re: localctx.exception = re @@ -13130,23 +14192,23 @@ def accept(self, visitor:ParseTreeVisitor): def stringContents(self): localctx = HogQLParser.StringContentsContext(self, self._ctx, self.state) - self.enterRule(localctx, 210, self.RULE_stringContents) + self.enterRule(localctx, 214, self.RULE_stringContents) try: - self.state = 1787 + self.state = 1969 self._errHandler.sync(self) token = self._input.LA(1) - if token in [178]: + if token in [184]: self.enterOuterAlt(localctx, 1) - self.state = 1782 + self.state = 1964 self.match(HogQLParser.STRING_ESCAPE_TRIGGER) - self.state = 1783 + self.state = 1965 self.columnExpr(0) - self.state = 1784 + self.state = 1966 self.match(HogQLParser.RBRACE) pass - elif token in [177]: + elif token in [183]: self.enterOuterAlt(localctx, 2) - self.state = 1786 + self.state = 1968 self.match(HogQLParser.STRING_TEXT) pass else: @@ -13196,23 +14258,23 @@ def accept(self, visitor:ParseTreeVisitor): def fullTemplateString(self): localctx = HogQLParser.FullTemplateStringContext(self, self._ctx, self.state) - self.enterRule(localctx, 212, self.RULE_fullTemplateString) + self.enterRule(localctx, 216, self.RULE_fullTemplateString) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1789 + self.state = 1971 self.match(HogQLParser.QUOTE_SINGLE_TEMPLATE_FULL) - self.state = 1793 + self.state = 1975 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==179 or _la==180: - self.state = 1790 + while _la==185 or _la==186: + self.state = 1972 self.stringContentsFull() - self.state = 1795 + self.state = 1977 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 1796 + self.state = 1978 self.match(HogQLParser.EOF) except RecognitionException as re: localctx.exception = re @@ -13258,23 +14320,23 @@ def accept(self, visitor:ParseTreeVisitor): def stringContentsFull(self): localctx = HogQLParser.StringContentsFullContext(self, self._ctx, self.state) - self.enterRule(localctx, 214, self.RULE_stringContentsFull) + self.enterRule(localctx, 218, self.RULE_stringContentsFull) try: - self.state = 1803 + self.state = 1985 self._errHandler.sync(self) token = self._input.LA(1) - if token in [180]: + if token in [186]: self.enterOuterAlt(localctx, 1) - self.state = 1798 + self.state = 1980 self.match(HogQLParser.FULL_STRING_ESCAPE_TRIGGER) - self.state = 1799 + self.state = 1981 self.columnExpr(0) - self.state = 1800 + self.state = 1982 self.match(HogQLParser.RBRACE) pass - elif token in [179]: + elif token in [185]: self.enterOuterAlt(localctx, 2) - self.state = 1802 + self.state = 1984 self.match(HogQLParser.FULL_STRING_TEXT) pass else: @@ -13294,6 +14356,7 @@ def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): if self._predicates == None: self._predicates = dict() self._predicates[47] = self.joinExpr_sempred + self._predicates[66] = self.columnTypeExpr_sempred self._predicates[71] = self.columnExpr_sempred self._predicates[84] = self.tableExpr_sempred pred = self._predicates.get(ruleIndex, None) @@ -13304,104 +14367,129 @@ def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): def joinExpr_sempred(self, localctx:JoinExprContext, predIndex:int): if predIndex == 0: - return self.precpred(self._ctx, 3) + return self.precpred(self._ctx, 5) if predIndex == 1: - return self.precpred(self._ctx, 4) + return self.precpred(self._ctx, 7) - def columnExpr_sempred(self, localctx:ColumnExprContext, predIndex:int): if predIndex == 2: - return self.precpred(self._ctx, 23) + return self.precpred(self._ctx, 6) if predIndex == 3: - return self.precpred(self._ctx, 22) + return self.precpred(self._ctx, 4) if predIndex == 4: - return self.precpred(self._ctx, 21) + return self.precpred(self._ctx, 3) + def columnTypeExpr_sempred(self, localctx:ColumnTypeExprContext, predIndex:int): if predIndex == 5: - return self.precpred(self._ctx, 19) + return self.precpred(self._ctx, 7) + def columnExpr_sempred(self, localctx:ColumnExprContext, predIndex:int): if predIndex == 6: - return self.precpred(self._ctx, 18) + return self.precpred(self._ctx, 24) if predIndex == 7: - return self.precpred(self._ctx, 16) + return self.precpred(self._ctx, 23) if predIndex == 8: - return self.precpred(self._ctx, 15) + return self.precpred(self._ctx, 22) if predIndex == 9: - return self.precpred(self._ctx, 14) + return self.precpred(self._ctx, 19) if predIndex == 10: - return self.precpred(self._ctx, 13) + return self.precpred(self._ctx, 18) if predIndex == 11: - return self.precpred(self._ctx, 37) + return self.precpred(self._ctx, 16) if predIndex == 12: - return self.precpred(self._ctx, 36) + return self.precpred(self._ctx, 15) if predIndex == 13: - return self.precpred(self._ctx, 32) + return self.precpred(self._ctx, 14) if predIndex == 14: - return self.precpred(self._ctx, 31) + return self.precpred(self._ctx, 13) if predIndex == 15: - return self.precpred(self._ctx, 30) + return self.precpred(self._ctx, 38) if predIndex == 16: - return self.precpred(self._ctx, 29) + return self.precpred(self._ctx, 37) if predIndex == 17: - return self.precpred(self._ctx, 28) + return self.precpred(self._ctx, 33) if predIndex == 18: - return self.precpred(self._ctx, 27) + return self.precpred(self._ctx, 32) if predIndex == 19: - return self.precpred(self._ctx, 26) + return self.precpred(self._ctx, 31) if predIndex == 20: - return self.precpred(self._ctx, 25) + return self.precpred(self._ctx, 30) if predIndex == 21: - return self.precpred(self._ctx, 20) + return self.precpred(self._ctx, 29) if predIndex == 22: + return self.precpred(self._ctx, 28) + + + if predIndex == 23: + return self.precpred(self._ctx, 27) + + + if predIndex == 24: + return self.precpred(self._ctx, 26) + + + if predIndex == 25: + return self.precpred(self._ctx, 21) + + + if predIndex == 26: + return self.precpred(self._ctx, 20) + + + if predIndex == 27: return self.precpred(self._ctx, 12) def tableExpr_sempred(self, localctx:TableExprContext, predIndex:int): - if predIndex == 23: + if predIndex == 28: + return self.precpred(self._ctx, 5) + + + if predIndex == 29: return self.precpred(self._ctx, 4) - if predIndex == 24: + if predIndex == 30: return self.precpred(self._ctx, 3) diff --git a/posthog/hogql/grammar/HogQLParser.tokens b/posthog/hogql/grammar/HogQLParser.tokens index ff4c37fb8c46..83760b967113 100644 --- a/posthog/hogql/grammar/HogQLParser.tokens +++ b/posthog/hogql/grammar/HogQLParser.tokens @@ -29,198 +29,204 @@ EXCEPT=28 EXCLUDE=29 EXTRACT=30 FINAL=31 -FINALLY=32 -FIRST=33 -FN=34 -FOLLOWING=35 -FOR=36 -FROM=37 -FULL=38 -FUN=39 -GROUP=40 -GROUPING=41 -HAVING=42 -HOUR=43 -ID=44 -IF=45 -ILIKE=46 -IN=47 -INF=48 -INNER=49 -INTERSECT=50 -INTERVAL=51 -IS=52 -JOIN=53 -KEY=54 -LAMBDA=55 -LAST=56 -LEADING=57 -LEFT=58 -LET=59 -LIKE=60 -LIMIT=61 -MATERIALIZED=62 -MINUTE=63 -MONTH=64 -NAME=65 -NAN_SQL=66 -NOT=67 -NULL_SQL=68 -NULLS=69 -OFFSET=70 -ON=71 -OR=72 -ORDER=73 -OUTER=74 -OVER=75 -PARTITION=76 -PRECEDING=77 -PREWHERE=78 -QUALIFY=79 -QUARTER=80 -RANGE=81 -RECURSIVE=82 -REPLACE=83 -RETURN=84 -RIGHT=85 -ROLLUP=86 -ROW=87 -ROWS=88 -SAMPLE=89 -SECOND=90 -SELECT=91 -SEMI=92 -SETS=93 -SETTINGS=94 -SUBSTRING=95 -THEN=96 -THROW=97 -TIES=98 -TIMESTAMP=99 -TO=100 -TOP=101 -TOTALS=102 -TRAILING=103 -TRIM=104 -TRUNCATE=105 -TRY=106 -TRY_CAST=107 -UNBOUNDED=108 -UNION=109 -UNPIVOT=110 -USING=111 -VALUES=112 -WEEK=113 -WHEN=114 -WHERE=115 -WHILE=116 -WINDOW=117 -WITH=118 -WITHIN=119 -YEAR=120 -ESCAPE_CHAR_COMMON=121 -IDENTIFIER=122 -FLOATING_LITERAL=123 -OCTAL_LITERAL=124 -DECIMAL_LITERAL=125 -HEXADECIMAL_LITERAL=126 -STRING_LITERAL=127 -ARROW=128 -ASTERISK=129 -BACKQUOTE=130 -BACKSLASH=131 -DOUBLECOLON=132 -COLONEQUALS=133 -COLON=134 -COMMA=135 -CONCAT=136 -DASH=137 -DOLLAR=138 -DOT=139 -EQ_DOUBLE=140 -EQ_SINGLE=141 -GT_EQ=142 -GT=143 -HASH=144 -IREGEX_SINGLE=145 -IREGEX_DOUBLE=146 -LBRACE=147 -LBRACKET=148 -LPAREN=149 -LT_EQ=150 -LT=151 -LT_SLASH=152 -NOT_EQ=153 -NOT_IREGEX=154 -NOT_REGEX=155 -NULL_PROPERTY=156 -NULLISH=157 -PERCENT=158 -PLUS=159 -QUERY=160 -QUOTE_DOUBLE=161 -QUOTE_SINGLE_TEMPLATE=162 -QUOTE_SINGLE_TEMPLATE_FULL=163 -QUOTE_SINGLE=164 -REGEX_SINGLE=165 -REGEX_DOUBLE=166 -RBRACE=167 -RBRACKET=168 -RPAREN=169 -SEMICOLON=170 -SLASH=171 -SLASH_GT=172 -UNDERSCORE=173 -MULTI_LINE_COMMENT=174 -SINGLE_LINE_COMMENT=175 -WHITESPACE=176 -STRING_TEXT=177 -STRING_ESCAPE_TRIGGER=178 -FULL_STRING_TEXT=179 -FULL_STRING_ESCAPE_TRIGGER=180 -TAG_WS=181 -TAGC_WS=182 -HOGQLX_TEXT_TEXT=183 -HOGQLX_TEXT_WS=184 -'->'=128 -'*'=129 -'`'=130 -'\\'=131 -'::'=132 -':='=133 -':'=134 -','=135 -'||'=136 -'-'=137 -'$'=138 -'.'=139 -'=='=140 -'>='=142 -'#'=144 -'~*'=145 -'=~*'=146 -'{'=147 -'['=148 -'('=149 -'<='=150 -'<'=151 -''=134 +'*'=135 +'`'=136 +'\\'=137 +'::'=138 +':='=139 +':'=140 +','=141 +'||'=142 +'-'=143 +'$'=144 +'.'=145 +'=='=146 +'>='=148 +'#'=150 +'~*'=151 +'=~*'=152 +'{'=153 +'['=154 +'('=155 +'<='=156 +'<'=157 +' 1 else None + pivot = ast.PivotExpr(table=join, aggregates=aggregates, columns=pivot_columns, group_by=group_by) + return ast.JoinExpr(table=pivot) + def visitJoinOpInner(self, ctx: HogQLParser.JoinOpInnerContext): tokens = [] if ctx.ALL(): @@ -668,6 +707,8 @@ def visitJoinOpFull(self, ctx: HogQLParser.JoinOpFullContext): tokens.append("ALL") if ctx.ANY(): tokens.append("ANY") + if ctx.ASOF(): + tokens.append("ASOF") return " ".join(tokens) def visitJoinOpCross(self, ctx: HogQLParser.JoinOpCrossContext): @@ -766,6 +807,13 @@ def visitWinFrameBound(self, ctx: HogQLParser.WinFrameBoundContext): def visitExpr(self, ctx: HogQLParser.ExprContext): return self.visit(ctx.columnExpr()) + def visitColumnTypeExprArray(self, ctx: HogQLParser.ColumnTypeExprArrayContext): + base_type = self.visit(ctx.columnTypeExpr()) + size = ctx.DECIMAL_LITERAL() + if size is not None: + return f"{base_type}[{size.getText()}]" + return f"{base_type}[]" + def visitColumnTypeExprSimple(self, ctx: HogQLParser.ColumnTypeExprSimpleContext): return self.visit(ctx.identifier()).lower() @@ -782,7 +830,10 @@ def visitColumnTypeExprEnum(self, ctx: HogQLParser.ColumnTypeExprEnumContext): raise NotImplementedError(f"Unsupported node: ColumnTypeExprEnum") def visitColumnTypeExprComplex(self, ctx: HogQLParser.ColumnTypeExprComplexContext): - raise NotImplementedError(f"Unsupported node: ColumnTypeExprComplex") + name = self.visit(ctx.identifier()) + type_exprs = ctx.columnTypeExpr() + inner = ", ".join(self.visit(t) for t in type_exprs) + return f"{name}({inner})".lower() def visitColumnTypeExprCompound(self, ctx: HogQLParser.ColumnTypeExprCompoundContext): return " ".join(self.visit(ident) for ident in ctx.identifier()).lower() @@ -1007,6 +1058,9 @@ def visitColumnExprIntervalString(self, ctx: HogQLParser.ColumnExprIntervalStrin return ast.Call(name=name, args=[ast.Constant(value=int_count)]) + def visitColumnExprIgnoreNulls(self, ctx: HogQLParser.ColumnExprIgnoreNullsContext): + return self.visit(ctx.columnExpr()) + def visitColumnExprIsNull(self, ctx: HogQLParser.ColumnExprIsNullContext): return ast.CompareOperation( left=self.visit(ctx.columnExpr()), @@ -1174,12 +1228,18 @@ def visitColumnExprFunction(self, ctx: HogQLParser.ColumnExprFunctionContext): parameters: list[ast.Expr] | None = self.visit(ctx.columnExprs) if ctx.columnExprs is not None else None # two sets of parameters fn()(), return an empty list for the first even if no parameters - if ctx.LPAREN(1) and parameters is None: + # FILTER adds an extra LPAREN, so account for it when detecting parametric calls + lparen_threshold = 2 if ctx.FILTER() else 1 + if ctx.LPAREN(lparen_threshold) and parameters is None: parameters = [] args: list[ast.Expr] = self.visit(ctx.columnArgList) if ctx.columnArgList is not None else [] distinct = True if ctx.DISTINCT() else False - return ast.Call(name=name, params=parameters, args=args, distinct=distinct) + order_by = self.visit(ctx.orderExprList()) if ctx.orderExprList() else None + filter_expr = self.visit(ctx.filterExpr) if ctx.filterExpr is not None else None + return ast.Call( + name=name, params=parameters, args=args, distinct=distinct, order_by=order_by, filter_expr=filter_expr + ) def visitColumnExprFunctionWithinGroup(self, ctx: HogQLParser.ColumnExprFunctionWithinGroupContext): name = self.visit(ctx.identifier()) @@ -1228,6 +1288,25 @@ def _parse_columns_replace_list(self, ctx) -> dict[str, ast.Expr]: def visitColumnExprColumnsAll(self, ctx: HogQLParser.ColumnExprColumnsAllContext): return ast.ColumnsExpr(all_columns=True) + def visitColumnExprColumnsQualifiedAll(self, ctx: HogQLParser.ColumnExprColumnsQualifiedAllContext): + table = self.visit(ctx.identifier()) + return ast.ColumnsExpr(columns=[ast.Field(chain=[table, "*"])]) + + def visitColumnExprColumnsQualifiedExclude(self, ctx: HogQLParser.ColumnExprColumnsQualifiedExcludeContext): + exclude = self.visit(ctx.identifierList()) + return ast.ColumnsExpr(columns=[ast.ColumnsExpr(all_columns=True, exclude=exclude)]) + + def visitColumnExprColumnsQualifiedReplace(self, ctx: HogQLParser.ColumnExprColumnsQualifiedReplaceContext): + replace = self._parse_columns_replace_list(ctx.columnsReplaceList()) + return ast.ColumnsExpr(all_columns=True, replace=replace) + + def visitColumnExprColumnsQualifiedExcludeReplace( + self, ctx: HogQLParser.ColumnExprColumnsQualifiedExcludeReplaceContext + ): + exclude = self.visit(ctx.identifierList()) + replace = self._parse_columns_replace_list(ctx.columnsReplaceList()) + return ast.ColumnsExpr(all_columns=True, exclude=exclude, replace=replace) + def visitColumnExprSpreadColumnsRegex(self, ctx: HogQLParser.ColumnExprSpreadColumnsRegexContext): pattern = parse_string_literal_ctx(ctx.STRING_LITERAL()) start = ctx.start.start if ctx.start else None @@ -1354,10 +1433,30 @@ def visitValuesClause(self, ctx: HogQLParser.ValuesClauseContext): def visitValuesRow(self, ctx: HogQLParser.ValuesRowContext): return [self.visit(expr) for expr in ctx.columnExpr()] + def visitTableExprPivot(self, ctx: HogQLParser.TableExprPivotContext): + table = self.visit(ctx.tableExpr()) + expr_lists = ctx.columnExprList() + aggregates = self.visit(expr_lists[0]) + pivot_columns = [self.visit(col) for col in ctx.pivotColumnList().pivotColumn()] + group_by = self.visit(expr_lists[1]) if len(expr_lists) > 1 else None + return ast.PivotExpr(table=table, aggregates=aggregates, columns=pivot_columns, group_by=group_by) + + def visitPivotColumn(self, ctx: HogQLParser.PivotColumnContext): + column = self.visit(ctx.columnExprTupleOrSingle()) + values = self.visit(ctx.columnExprList()) + return ast.PivotColumn(column=column, values=values) + def visitTableExprUnpivot(self, ctx: HogQLParser.TableExprUnpivotContext): table = self.visit(ctx.tableExpr()) columns = self.visit(ctx.unpivotColumnList()) - return ast.UnpivotExpr(table=table, columns=columns) + include_nulls = ctx.INCLUDE() is not None + return ast.UnpivotExpr(table=table, columns=columns, include_nulls=include_nulls) + + def visitJoinExprUnpivot(self, ctx: HogQLParser.JoinExprUnpivotContext): + join = self.visit(ctx.joinExpr()) + columns = self.visit(ctx.unpivotColumnList()) + include_nulls = ctx.INCLUDE() is not None + return ast.JoinExpr(table=ast.UnpivotExpr(table=join, columns=columns, include_nulls=include_nulls)) def visitUnpivotColumnList(self, ctx: HogQLParser.UnpivotColumnListContext): return [self.visit(col) for col in ctx.unpivotColumn()] @@ -1366,7 +1465,8 @@ def visitUnpivotColumn(self, ctx: HogQLParser.UnpivotColumnContext): tuple_or_singles = ctx.columnExprTupleOrSingle() value_columns = self.visit(tuple_or_singles[0]) name_columns = self.visit(tuple_or_singles[1]) - unpivot_values = self.visit(ctx.columnExprList()) + all_lists = ctx.columnExprList() + unpivot_values = self.visit(all_lists[0] if isinstance(all_lists, list) else all_lists) return ast.UnpivotColumn( value_columns=value_columns, name_columns=name_columns, diff --git a/posthog/hogql/printer/base.py b/posthog/hogql/printer/base.py index 5f3486299769..7ce9dc12aea7 100644 --- a/posthog/hogql/printer/base.py +++ b/posthog/hogql/printer/base.py @@ -284,15 +284,17 @@ def visit_select_query(self, node: ast.SelectQuery): f"PREWHERE{space}" + prewhere if prewhere else None, f"WHERE{space}" + where if where else None, ( - f"GROUP BY{space}GROUPING SETS ({comma.join(group_by)})" + f"GROUP BY ALL" + if node.group_by_mode == "all" + else f"GROUP BY{space}GROUPING SETS ({comma.join(group_by or [])})" if node.group_by_mode == "grouping_sets" - else f"GROUP BY{space}CUBE({comma.join(group_by)})" + else f"GROUP BY{space}CUBE({comma.join(group_by or [])})" if node.group_by_mode == "cube" - else f"GROUP BY{space}ROLLUP({comma.join(group_by)})" + else f"GROUP BY{space}ROLLUP({comma.join(group_by or [])})" if node.group_by_mode == "rollup" - else f"GROUP BY{space}{comma.join(group_by)}" + else f"GROUP BY{space}{comma.join(group_by or [])}" ) - if group_by and len(group_by) > 0 + if node.group_by_mode == "all" or (group_by and len(group_by) > 0) else None, f"HAVING{space}" + having if having else None, f"QUALIFY{space}" + qualify if qualify else None, @@ -548,11 +550,26 @@ def visit_positional_ref(self, node: ast.PositionalRef): raise QueryError(f"Positional reference must be a positive integer, got {node.index}") return f"#{node.index}" + def _print_join_expr_chain(self, node: ast.JoinExpr) -> str: + parts: list[str] = [] + next_join: ast.JoinExpr | None = node + while isinstance(next_join, ast.JoinExpr): + visited = self.visit_join_expr(next_join) + if visited.where is not None: + raise QueryError("JOIN PIVOT/UNPIVOT cannot apply extra WHERE constraints") + parts.append(visited.printed_sql) + next_join = next_join.next_join + return " ".join(parts) + def visit_unpivot_expr(self, node: ast.UnpivotExpr): - table_expr = self.visit(node.table) - table = table_expr.printed_sql if isinstance(table_expr, JoinExprResponse) else table_expr + if isinstance(node.table, ast.JoinExpr): + table = self._print_join_expr_chain(node.table) + else: + table_expr = self.visit(node.table) + table = table_expr.printed_sql if isinstance(table_expr, JoinExprResponse) else table_expr columns = " ".join(self.visit(col) for col in node.columns) - return f"{table} UNPIVOT ({columns})" + include_nulls = "INCLUDE NULLS " if node.include_nulls else "" + return f"{table} UNPIVOT {include_nulls}({columns})" def visit_unpivot_column(self, node: ast.UnpivotColumn): value_cols = self.visit(node.value_columns) @@ -560,6 +577,22 @@ def visit_unpivot_column(self, node: ast.UnpivotColumn): values = ", ".join(self.visit(val) for val in node.unpivot_values) return f"{value_cols} FOR {name_cols} IN ({values})" + def visit_pivot_expr(self, node: ast.PivotExpr): + if isinstance(node.table, ast.JoinExpr): + table = self._print_join_expr_chain(node.table) + else: + table_expr = self.visit(node.table) + table = table_expr.printed_sql if isinstance(table_expr, JoinExprResponse) else table_expr + aggregates = ", ".join(self.visit(agg) for agg in node.aggregates) + columns = " ".join(self.visit(col) for col in node.columns) + group_by = f" GROUP BY {', '.join(self.visit(g) for g in node.group_by)}" if node.group_by else "" + return f"{table} PIVOT ({aggregates} FOR {columns}{group_by})" + + def visit_pivot_column(self, node: ast.PivotColumn): + column = self.visit(node.column) + values = ", ".join(self.visit(val) for val in node.values) + return f"{column} IN ({values})" + def visit_tuple_access(self, node: ast.TupleAccess): visited_tuple = self.visit(node.tuple) visited_index = int(str(node.index)) @@ -779,19 +812,19 @@ def visit_call(self, node: ast.Call): ) params_part = f"({', '.join(params)})" if params is not None else "" + order_by_part = f" ORDER BY {', '.join(self.visit(o) for o in node.order_by)}" if node.order_by else "" + args_body = f"{'DISTINCT ' if node.distinct else ''}{', '.join(arg_strings)}{order_by_part}" args_part = ( "" - if node.within_group is not None and len(arg_strings) == 0 and not node.distinct - else f"({'DISTINCT ' if node.distinct else ''}{', '.join(arg_strings)})" + if node.within_group is not None and len(arg_strings) == 0 and not node.distinct and not node.order_by + else f"({args_body})" ) if node.within_group is not None and not func_meta.requires_within_group: raise QueryError(f"Aggregation '{node.name}' does not support WITHIN GROUP") - return ( - f"{node.name if self.dialect == 'hogql' else func_meta.clickhouse_name}" - f"{params_part}{args_part}{within_group}" - ) + filter_part = f" FILTER (WHERE {self.visit(node.filter_expr)})" if node.filter_expr else "" + return f"{node.name if self.dialect == 'hogql' else func_meta.clickhouse_name}{params_part}{args_part}{within_group}{filter_part}" elif func_meta := find_hogql_function(node.name): validate_function_args( @@ -942,10 +975,14 @@ def visit_call(self, node: ast.Call): params = [self.visit(param) for param in node.params] if node.params is not None else None params_part = f"({', '.join(params)})" if params is not None else "" - args_part = f"({', '.join(args)})" - return f"{relevant_clickhouse_name}{params_part}{args_part}" + order_by_part = f" ORDER BY {', '.join(self.visit(o) for o in node.order_by)}" if node.order_by else "" + args_part = f"({', '.join(args)}{order_by_part})" + filter_part = f" FILTER (WHERE {self.visit(node.filter_expr)})" if node.filter_expr else "" + return f"{relevant_clickhouse_name}{params_part}{args_part}{filter_part}" else: - return f"{node.name}({', '.join([self.visit(arg) for arg in node.args])})" + order_by_part = f" ORDER BY {', '.join(self.visit(o) for o in node.order_by)}" if node.order_by else "" + filter_part = f" FILTER (WHERE {self.visit(node.filter_expr)})" if node.filter_expr else "" + return f"{node.name}({', '.join([self.visit(arg) for arg in node.args])}{order_by_part}){filter_part}" elif func_meta := find_hogql_posthog_function(node.name): validate_function_args( node.args, @@ -1307,6 +1344,9 @@ def visit_ctetable_alias_type(self, type: ast.CTETableAliasType): def visit_field_alias_type(self, type: ast.FieldAliasType): return self._print_identifier(type.alias) + def visit_expression_field_type(self, type: ast.ExpressionFieldType): + return self.visit(type.expr) + def visit_virtual_table_type(self, type: ast.VirtualTableType): return self.visit(type.table_type) diff --git a/posthog/hogql/printer/postgres.py b/posthog/hogql/printer/postgres.py index 4d6a118483c7..c9b107b7487e 100644 --- a/posthog/hogql/printer/postgres.py +++ b/posthog/hogql/printer/postgres.py @@ -73,21 +73,34 @@ def visit_call(self, node: ast.Call): f"(floor(extract(minute from {bucket_arg}) / {bucket_size})::int * {bucket_size} * interval '1 minute')" ) + if node.order_by: + # ORDER BY in function calls is only supported for passthrough functions. + func_name = node.name.lower() + if ( + func_name not in POSTGRES_PASSTHROUGH_FUNCTIONS + and func_name not in POSTGRES_FUNCTION_HANDLERS_LOWER + and func_name not in POSTGRES_FUNCTION_RENAMES_LOWER + ): + raise QueryError(f"Function '{node.name}' does not support ORDER BY in the Postgres dialect.") + # No function call validation for postgres args = [self.visit(arg) for arg in node.args] + order_by_part = f" ORDER BY {', '.join(self.visit(o) for o in node.order_by)}" if node.order_by else "" func_name = node.name.lower() handler = POSTGRES_FUNCTION_HANDLERS_LOWER.get(func_name) if handler is not None: + if node.order_by: + raise QueryError(f"Function '{node.name}' does not support ORDER BY in the Postgres dialect.") return handler(args) pg_name = POSTGRES_FUNCTION_RENAMES_LOWER.get(func_name) if pg_name is not None: - return f"{pg_name}({', '.join(args)})" + return f"{pg_name}({', '.join(args)}{order_by_part})" if func_name in POSTGRES_PASSTHROUGH_FUNCTIONS: - return f"{func_name}({', '.join(args)})" + return f"{func_name}({', '.join(args)}{order_by_part})" if func_name in self._connection_supported_functions: return f"{node.name}({', '.join(args)})" diff --git a/posthog/hogql/printer/test/test_printer.py b/posthog/hogql/printer/test/test_printer.py index 14e02601e8cd..fb71648b5e7b 100644 --- a/posthog/hogql/printer/test/test_printer.py +++ b/posthog/hogql/printer/test/test_printer.py @@ -337,6 +337,18 @@ def test_union3(self): "LIMIT 50000", ) + def test_ignore_nulls_prints(self): + self.assertEqual( + self._select("SELECT event IGNORE NULLS FROM events"), + f"SELECT events.event AS event FROM events WHERE equals(events.team_id, {self.team.pk}) LIMIT 50000", + ) + + def test_select_set_order_by_prints(self): + self.assertEqual( + self._select("select 1 union all select 2 order by 1"), + "SELECT 1 LIMIT 50000 UNION ALL SELECT 2 ORDER BY 1 ASC LIMIT 50000", + ) + def test_intersect_and_union_parens(self): expr = parse_select("""select 1 as id intersect (select 2 as id union all select 3 as id)""") response = to_printed_hogql(expr, self.team) @@ -1542,6 +1554,10 @@ def test_select_array_join(self): f"SELECT 1, a FROM events INNER ARRAY JOIN [1, 2, 3] AS a WHERE equals(events.team_id, {self.team.pk}) LIMIT {MAX_SELECT_RETURNED_ROWS}", ) + def test_select_positional_join(self): + result = self._select("select 1 from events positional join groups") + self.assertIn("POSITIONAL JOIN", result) + def test_select_where(self): self.assertEqual( self._select("select 1 from events where 1 == 1"), @@ -1553,6 +1569,16 @@ def test_select_where(self): f"SELECT 1 FROM events WHERE 0 LIMIT {MAX_SELECT_RETURNED_ROWS}", ) + def test_function_filter_prints(self): + result = self._select("select sum(event) filter (where event = 'a') from events") + self.assertIn("FILTER (WHERE", result) + + def test_with_clause_before_parens_select_set_prints(self): + self.assertEqual( + self._select("WITH cte AS (SELECT 1 AS a) (SELECT a FROM cte UNION ALL SELECT a FROM cte)"), + "WITH cte AS (SELECT 1 AS a) SELECT cte.a AS a FROM cte LIMIT 50000 UNION ALL SELECT cte.a AS a FROM cte LIMIT 50000", + ) + self.assertEqual( self._select("select 1 from events where event='name'"), f"SELECT 1 FROM events WHERE and(equals(events.team_id, {self.team.pk}), equals(events.event, %(hogql_val_0)s)) LIMIT {MAX_SELECT_RETURNED_ROWS}", @@ -4454,6 +4480,28 @@ def test_column_aliases(self): printed = self._select("SELECT 1 FROM events AS e (event_alias, ts_alias)") self.assertIn("AS e (event_alias, ts_alias)", printed) + @parameterized.expand( + [ + ( + "basic", + "SELECT 1 FROM events PIVOT (count() FOR event IN ('a', 'b'))", + "SELECT 1 FROM events PIVOT (count() FOR events.event IN ('a', 'b')) LIMIT 50000", + ), + ( + "multiple_columns", + "SELECT 1 FROM events PIVOT (count() FOR event IN ('a') distinct_id IN (1, 2) GROUP BY timestamp)", + "SELECT 1 FROM events PIVOT (count() FOR events.event IN ('a') events.distinct_id IN (1, 2) GROUP BY events.timestamp) LIMIT 50000", + ), + ( + "join", + "SELECT 1 FROM events JOIN events AS e2 ON 1 PIVOT (count() FOR events.event IN ('a'))", + "SELECT 1 FROM events JOIN events AS e2 ON 1 PIVOT (count() FOR events.event IN ('a')) LIMIT 50000", + ), + ] + ) + def test_pivot_prints(self, _name: str, query: str, expected: str): + self.assertEqual(self._select(query), expected) + def test_limit_percent_basic(self): printed = self._select("SELECT 1 FROM events LIMIT 10 %") self.assertIn("LIMIT 10 %", printed) @@ -4489,6 +4537,18 @@ def test_try_cast(self, expr: str, expected: str): printed = self._select(f"SELECT {expr}") self.assertIn(expected, printed) + @parameterized.expand( + [ + ( + "sum_desc", + "SELECT sum(event ORDER BY timestamp DESC) FROM events", + "SELECT sum(events.event ORDER BY events.timestamp DESC) FROM events LIMIT 50000", + ), + ] + ) + def test_function_call_order_by_prints(self, _name: str, query: str, expected: str): + self.assertEqual(self._select(query), expected) + @parameterized.expand( [ ("1 IS DISTINCT FROM 2", "1 IS DISTINCT FROM 2"), @@ -4917,6 +4977,12 @@ def test_unpivot_prints_with_multiple_in_columns(self): "SELECT field_name, field_value FROM events UNPIVOT (field_value FOR field_name IN (events.event, events.uuid)) LIMIT 50000", ) + def test_unpivot_prints_include_nulls(self): + result = self._select( + "SELECT field_name, field_value FROM events UNPIVOT INCLUDE NULLS (field_value FOR field_name IN (event))" + ) + self.assertIn("UNPIVOT INCLUDE NULLS", result) + def test_unpivot_prints_with_where_group_order(self): result = self._select( "SELECT field_name, count() FROM events UNPIVOT (field_value FOR field_name IN (event)) " @@ -4927,6 +4993,15 @@ def test_unpivot_prints_with_where_group_order(self): self.assertIn("GROUP BY", result) self.assertIn("ORDER BY", result) + def test_unpivot_join_prints(self): + self.assertEqual( + self._select( + "SELECT field_name, field_value FROM events JOIN events AS e2 ON 1 " + "UNPIVOT (field_value FOR field_name IN (events.event))" + ), + "SELECT field_name, field_value FROM events JOIN events AS e2 ON 1 UNPIVOT (field_value FOR field_name IN (events.event)) LIMIT 50000", + ) + def test_unpivot_clickhouse_raises_error(self): from posthog.hogql.errors import QueryError diff --git a/posthog/hogql/resolver.py b/posthog/hogql/resolver.py index 28721beb511f..cfe26ee18d31 100644 --- a/posthog/hogql/resolver.py +++ b/posthog/hogql/resolver.py @@ -409,6 +409,80 @@ def attach_unpivot_types(expr: ast.Expr) -> None: finally: self.scopes.pop() + def visit_pivot_expr(self, node: ast.PivotExpr): + if self.dialect != "postgres": + raise QueryError(f"PIVOT is not allowed in {self.dialect} dialect") + + node = cast(ast.PivotExpr, clone_expr(node)) + + # Resolve the source table in an isolated scope so we can use its columns. + temp_scope = ast.SelectQueryType() + self.scopes.append(temp_scope) + try: + if isinstance(node.table, ast.JoinExpr): + temp_join = self.visit_join_expr(node.table) + node.table = temp_join + else: + temp_join = self.visit_join_expr(ast.JoinExpr(table=cast(ast.Field, node.table))) + node.table = cast(ast.Expr, temp_join.table) + base_type = temp_join.type + + node.aggregates = [self.visit(expr) for expr in node.aggregates] + node.columns = [self.visit(col) for col in node.columns] + if node.group_by: + node.group_by = [self.visit(expr) for expr in node.group_by] + + columns: dict[str, ast.Type] = {} + base_field_names: set[str] = set() + if isinstance(base_type, ast.SelectQueryAliasType): + base_type = base_type.select_query_type + if isinstance(base_type, ast.SelectSetQueryType): + base_type = base_type.types[0] + + if isinstance(base_type, ast.SelectQueryType): + columns = dict(base_type.columns) + base_field_names = set(base_type.columns.keys()) + elif isinstance(base_type, ast.BaseTableType): + base_field_names = set(base_type.resolve_database_table(self.context).get_asterisk().keys()) + for name in base_field_names: + columns[name] = ast.UnknownType() + allowed_prefixes: set[str] = set() + if isinstance(temp_join, ast.JoinExpr): + if temp_join.alias is not None: + allowed_prefixes.add(temp_join.alias) + if isinstance(temp_join.table, ast.Field) and temp_join.table.chain: + allowed_prefixes.add(str(temp_join.table.chain[0])) + + def ensure_pivot_column_valid(expr: ast.Expr) -> None: + collector = FieldCollector() + collector.visit(expr) + for field in collector.fields: + if not field.chain: + raise QueryError("PIVOT columns must be identifiers") + if field.chain == ["*"]: + continue + if len(field.chain) == 1: + column_name = str(field.chain[0]) + elif len(field.chain) == 2 and str(field.chain[0]) in allowed_prefixes: + column_name = str(field.chain[1]) + else: + raise QueryError("PIVOT columns must be identifiers") + if base_field_names and column_name not in base_field_names: + raise QueryError(f'PIVOT column "{column_name}" was not found in the source table') + + for col in node.columns: + ensure_pivot_column_valid(col.column) + for agg in node.aggregates: + ensure_pivot_column_valid(agg) + if node.group_by: + for expr in node.group_by: + ensure_pivot_column_valid(expr) + + node.type = ast.SelectQueryType(columns=columns) + return node + finally: + self.scopes.pop() + def visit_cte(self, node: ast.CTE): self.cte_counter += 1 @@ -1176,6 +1250,32 @@ def visit_join_expr(self, node: ast.JoinExpr): node.constraint = self.visit_join_constraint(node.constraint) node.sample = self.visit(node.sample) + return node + elif isinstance(node.table, ast.PivotExpr): + node = cast(ast.JoinExpr, clone_expr(node)) + if node.constraint and node.constraint.constraint_type == "USING": + node.constraint = self.visit_join_constraint(node.constraint) + + node.table = cast(ast.PivotExpr, self.visit(node.table)) + + if node.alias is not None: + if node.alias in scope.tables: + raise QueryError( + f'Already have joined a table called "{node.alias}". Can\'t join another one with the same name.' + ) + node.type = ast.SelectQueryAliasType( + alias=node.alias, select_query_type=cast(ast.SelectQueryType, node.table.type) + ) + scope.tables[node.alias] = node.type + else: + node.type = cast(ast.TableOrSelectType, node.table.type) + scope.anonymous_tables.append(cast(ast.SelectQueryType, node.type)) + + node.next_join = self.visit(node.next_join) + if node.constraint and node.constraint.constraint_type == "ON": + node.constraint = self.visit_join_constraint(node.constraint) + node.sample = self.visit(node.sample) + return node else: raise QueryError(f"A {type(node.table).__name__} cannot be used as a SELECT source") diff --git a/posthog/hogql/test/_test_parser.py b/posthog/hogql/test/_test_parser.py index 940e5064a896..242d2349553b 100644 --- a/posthog/hogql/test/_test_parser.py +++ b/posthog/hogql/test/_test_parser.py @@ -447,6 +447,9 @@ def test_strings(self): self.assertEqual(self._expr("'n\null'"), ast.Constant(value="n\null")) # newline passed into string self.assertEqual(self._expr("'n\\null'"), ast.Constant(value="n\null")) # slash and 'n' passed into string self.assertEqual(self._expr("'n\\\\ull'"), ast.Constant(value="n\\ull")) # slash and 'n' passed into string + self.assertEqual(self._expr("'\\x41'"), ast.Constant(value="\\x41")) + self.assertEqual(self._expr("'\\x61\\x62'"), ast.Constant(value="\\x61\\x62")) + self.assertEqual(self._expr("'\\x5a'"), ast.Constant(value="\\x5a")) # String literals containing special float names should remain as strings self.assertEqual(self._expr("'Infinity'"), ast.Constant(value="Infinity")) @@ -833,6 +836,34 @@ def test_percentile_calls_within_group(self, function_name: str): ), ) + def test_function_calls_with_filter(self): + self.assertEqual( + self._expr("sum(event) FILTER (WHERE event = 'a')"), + ast.Call( + name="sum", + params=None, + args=[ast.Field(chain=["event"])], + distinct=False, + filter_expr=ast.CompareOperation( + left=ast.Field(chain=["event"]), + right=ast.Constant(value="a"), + op=ast.CompareOperationOp.Eq, + ), + ), + ) + + def test_function_calls_with_order_by(self): + self.assertEqual( + self._expr("sum(event ORDER BY timestamp DESC)"), + ast.Call( + name="sum", + params=None, + args=[ast.Field(chain=["event"])], + distinct=False, + order_by=[ast.OrderExpr(expr=ast.Field(chain=["timestamp"]), order="DESC")], + ), + ) + def test_alias(self): self.assertEqual( self._expr("1 as asd"), @@ -1159,6 +1190,55 @@ def test_select_replace_columns(self): ), ) + def test_ignore_nulls_expr(self): + self.assertEqual( + self._expr("event IGNORE NULLS"), + ast.Field(chain=["event"]), + ) + self.assertEqual( + self._select("select event IGNORE NULLS from events"), + ast.SelectQuery( + select=[ast.Field(chain=["event"])], + select_from=ast.JoinExpr(table=ast.Field(chain=["events"])), + ), + ) + + def test_select_columns_qualified(self): + self.assertEqual( + self._select("select COLUMNS(events.*) from events"), + ast.SelectQuery( + select=[ast.ColumnsExpr(columns=[ast.Field(chain=["events", "*"])])], + select_from=ast.JoinExpr(table=ast.Field(chain=["events"])), + ), + ) + self.assertEqual( + self._select("select COLUMNS(events.* EXCLUDE (event)) from events"), + ast.SelectQuery( + select=[ast.ColumnsExpr(columns=[ast.ColumnsExpr(all_columns=True, exclude=["event"])])], + select_from=ast.JoinExpr(table=ast.Field(chain=["events"])), + ), + ) + self.assertEqual( + self._select("select COLUMNS(events.* REPLACE (1 as event)) from events"), + ast.SelectQuery( + select=[ast.ColumnsExpr(all_columns=True, replace={"event": ast.Constant(value=1)})], + select_from=ast.JoinExpr(table=ast.Field(chain=["events"])), + ), + ) + self.assertEqual( + self._select("select COLUMNS(events.* EXCLUDE (event) REPLACE (1 as event)) from events"), + ast.SelectQuery( + select=[ + ast.ColumnsExpr( + all_columns=True, + exclude=["event"], + replace={"event": ast.Constant(value=1)}, + ) + ], + select_from=ast.JoinExpr(table=ast.Field(chain=["events"])), + ), + ) + def test_select_from_placeholder(self): self.assertEqual( self._select("select 1 from {placeholder}"), @@ -1476,6 +1556,21 @@ def test_select_group_by(self): ), ) + def test_select_group_by_all(self): + self.assertEqual( + self._select("select distinct_id, event, count(*) from events GROUP BY ALL"), + ast.SelectQuery( + select=[ + ast.Field(chain=["distinct_id"]), + ast.Field(chain=["event"]), + ast.Call(name="count", args=[ast.Field(chain=["*"])]), + ], + select_from=ast.JoinExpr(table=ast.Field(chain=["events"])), + group_by=None, + group_by_mode="all", + ), + ) + def test_order_by(self): self.assertEqual( parse_order_expr("1 ASC"), @@ -1770,6 +1865,23 @@ def test_select_except_all(self): ), ) + def test_select_set_order_by(self): + self.assertEqual( + self._select("select 1 union all select 2 order by 1"), + ast.SelectSetQuery( + initial_select_query=ast.SelectQuery(select=[ast.Constant(value=1)]), + subsequent_select_queries=[ + SelectSetNode( + set_operator="UNION ALL", + select_query=ast.SelectQuery( + select=[ast.Constant(value=2)], + order_by=[ast.OrderExpr(expr=ast.Constant(value=1), order="ASC")], + ), + ) + ], + ), + ) + @parameterized.expand( [ ("union by name", "UNION DISTINCT BY NAME"), @@ -3319,6 +3431,22 @@ def test_cast_with_nested_and_parametric_types(self): self._expr("CAST(x AS DECIMAL(10, 2))"), ast.TypeCast(expr=ast.Field(chain=["x"]), type_name="decimal(10, 2)"), ) + self.assertEqual( + self._expr("CAST(x AS INTEGER[])"), + ast.TypeCast(expr=ast.Field(chain=["x"]), type_name="integer[]"), + ) + self.assertEqual( + self._expr("CAST(x AS VARCHAR[3])"), + ast.TypeCast(expr=ast.Field(chain=["x"]), type_name="varchar[3]"), + ) + self.assertEqual( + self._expr("CAST(x AS ARRAY(INTEGER))"), + ast.TypeCast(expr=ast.Field(chain=["x"]), type_name="array(integer)"), + ) + self.assertEqual( + self._expr("CAST(x AS TUPLE(INTEGER, VARCHAR))"), + ast.TypeCast(expr=ast.Field(chain=["x"]), type_name="tuple(integer, varchar)"), + ) def test_with_clause_column_name_list(self): node = self._select("WITH cte (a, b) AS (SELECT 1, 2) SELECT * FROM cte") @@ -3372,6 +3500,35 @@ def test_cte_materialization_hint_not_materialized(self): assert cte is not None assert cte.materialized is False + def test_with_clause_before_parens_select_set(self): + self.assertEqual( + self._select("WITH cte AS (SELECT 1 AS a) (SELECT a FROM cte UNION ALL SELECT a FROM cte)"), + ast.SelectSetQuery( + initial_select_query=ast.SelectQuery( + select=[ast.Field(chain=["a"])], + select_from=ast.JoinExpr(table=ast.Field(chain=["cte"])), + ctes={ + "cte": ast.CTE( + name="cte", + expr=ast.SelectQuery( + select=[ast.Alias(alias="a", expr=ast.Constant(value=1))], + ), + cte_type="subquery", + ) + }, + ), + subsequent_select_queries=[ + ast.SelectSetNode( + set_operator="UNION ALL", + select_query=ast.SelectQuery( + select=[ast.Field(chain=["a"])], + select_from=ast.JoinExpr(table=ast.Field(chain=["cte"])), + ), + ) + ], + ), + ) + def test_cte_using_key_is_none_when_omitted(self): parsed = self._select("WITH RECURSIVE x(a, b) AS (SELECT 1, 2) SELECT * FROM x;") assert isinstance(parsed, SelectQuery) and parsed.ctes is not None @@ -3528,6 +3685,149 @@ def test_select_from_unpivot_with_table_alias(self): ), ) + def test_select_from_pivot(self): + self.assertEqual( + self._select("SELECT * FROM events PIVOT (count() FOR event IN ('a', 'b'))"), + ast.SelectQuery( + select=[ast.Field(chain=["*"])], + select_from=ast.JoinExpr( + table=ast.PivotExpr( + table=ast.Field(chain=["events"]), + aggregates=[ast.Call(name="count", args=[])], + columns=[ + ast.PivotColumn( + column=ast.Field(chain=["event"]), + values=[ast.Constant(value="a"), ast.Constant(value="b")], + ) + ], + group_by=None, + ) + ), + ), + ) + + def test_select_from_pivot_multiple_columns(self): + self.assertEqual( + self._select( + "SELECT * FROM events PIVOT (count() FOR event IN ('a') person_id IN (1, 2) GROUP BY distinct_id)" + ), + ast.SelectQuery( + select=[ast.Field(chain=["*"])], + select_from=ast.JoinExpr( + table=ast.PivotExpr( + table=ast.Field(chain=["events"]), + aggregates=[ast.Call(name="count", args=[])], + columns=[ + ast.PivotColumn( + column=ast.Field(chain=["event"]), + values=[ast.Constant(value="a")], + ), + ast.PivotColumn( + column=ast.Field(chain=["person_id"]), + values=[ast.Constant(value=1), ast.Constant(value=2)], + ), + ], + group_by=[ast.Field(chain=["distinct_id"])], + ) + ), + ), + ) + + def test_select_from_join_pivot(self): + self.assertEqual( + self._select("SELECT 1 FROM events JOIN events AS e2 ON 1 PIVOT (count() FOR events.event IN ('a'))"), + ast.SelectQuery( + select=[ast.Constant(value=1)], + select_from=ast.JoinExpr( + table=ast.PivotExpr( + table=ast.JoinExpr( + table=ast.Field(chain=["events"]), + next_join=ast.JoinExpr( + join_type="JOIN", + table=ast.Field(chain=["events"]), + alias="e2", + constraint=ast.JoinConstraint(expr=ast.Constant(value=1), constraint_type="ON"), + ), + ), + aggregates=[ast.Call(name="count", args=[])], + columns=[ + ast.PivotColumn( + column=ast.Field(chain=["events", "event"]), + values=[ast.Constant(value="a")], + ) + ], + group_by=None, + ) + ), + ), + ) + + def test_select_from_unpivot_include_nulls(self): + self.assertEqual( + self._select( + "SELECT field_name, field_value FROM events UNPIVOT INCLUDE NULLS (field_value FOR field_name IN (event))" + ), + ast.SelectQuery( + select=[ast.Field(chain=["field_name"]), ast.Field(chain=["field_value"])], + select_from=ast.JoinExpr( + table=ast.UnpivotExpr( + table=ast.Field(chain=["events"]), + columns=[ + ast.UnpivotColumn( + value_columns=ast.Field(chain=["field_value"]), + name_columns=ast.Field(chain=["field_name"]), + unpivot_values=[ast.Field(chain=["event"])], + ) + ], + include_nulls=True, + ) + ), + ), + ) + + def test_select_from_join_unpivot(self): + self.assertEqual( + self._select( + "SELECT field_name, field_value FROM events JOIN events AS e2 ON 1 " + "UNPIVOT (field_value FOR field_name IN (events.event))" + ), + ast.SelectQuery( + select=[ast.Field(chain=["field_name"]), ast.Field(chain=["field_value"])], + select_from=ast.JoinExpr( + table=ast.UnpivotExpr( + table=ast.JoinExpr( + table=ast.Field(chain=["events"]), + next_join=ast.JoinExpr( + join_type="JOIN", + table=ast.Field(chain=["events"]), + alias="e2", + constraint=ast.JoinConstraint(expr=ast.Constant(value=1), constraint_type="ON"), + ), + ), + columns=[ + ast.UnpivotColumn( + value_columns=ast.Field(chain=["field_value"]), + name_columns=ast.Field(chain=["field_name"]), + unpivot_values=[ast.Field(chain=["events", "event"])], + ) + ], + ) + ), + ), + ) + + def test_select_positional_join(self): + self.assertEqual( + self._select("SELECT * FROM events POSITIONAL JOIN persons"), + ast.SelectQuery( + select=[ast.Field(chain=["*"])], + select_from=ast.JoinExpr( + table=ast.Field(chain=["events"]), + next_join=ast.JoinExpr(table=ast.Field(chain=["persons"]), join_type="POSITIONAL JOIN"), + ), + ), + ) + def test_select_positional_refs(self): self.assertEqual( self._select("SELECT #1, #2 FROM events"), diff --git a/posthog/hogql/test/test_resolver.py b/posthog/hogql/test/test_resolver.py index 0df24372080f..b9eb16461f6e 100644 --- a/posthog/hogql/test/test_resolver.py +++ b/posthog/hogql/test/test_resolver.py @@ -457,6 +457,10 @@ def test_extract_base_table_types_from_select_set_type(self): self.assertEqual(table_names, ["events", "persons"]) + def test_select_set_order_by_prints(self): + printed = self._print_hogql("select 1 union all select 2 order by 1") + self.assertEqual(printed, "SELECT 1 LIMIT 50000 UNION ALL SELECT 2 ORDER BY 1 ASC LIMIT 50000") + def test_ctes_loop(self): with self.assertRaises(QueryError) as e: self._print_hogql("with cte as (select * from cte) select * from cte") @@ -597,6 +601,13 @@ def test_root_ctes_propagate_to_union_branches(self): "WITH page_view_stats AS (SELECT 1 AS a) SELECT a FROM page_view_stats LIMIT 50000 UNION ALL WITH purchase_stats AS (SELECT 2 AS a) SELECT a FROM page_view_stats LIMIT 50000", ) + def test_with_clause_before_parens_select_set(self): + printed = self._print_hogql("WITH cte AS (SELECT 1 AS a) (SELECT a FROM cte UNION ALL SELECT a FROM cte)") + self.assertEqual( + printed, + "WITH cte AS (SELECT 1 AS a) SELECT a FROM cte LIMIT 50000 UNION ALL SELECT a FROM cte LIMIT 50000", + ) + def test_ctes_scalar_subquery(self): self.assertEqual( self._print_hogql("WITH (SELECT 1) AS x SELECT x FROM events"), @@ -1573,6 +1584,59 @@ def test_unpivot_unknown_in_column_error(self): expr = self._select("SELECT * FROM events UNPIVOT (field_value FOR field_name IN (does_not_exist))") resolve_types(expr, self.context, dialect="postgres") + def test_pivot_basic_resolves(self): + expr = self._select("SELECT 1 FROM events PIVOT (count() FOR event IN ('a'))") + expr = cast(ast.SelectQuery, resolve_types(expr, self.context, dialect="postgres")) + assert isinstance(expr.select_from, ast.JoinExpr) + assert isinstance(expr.select_from.table, ast.PivotExpr) + assert isinstance(expr.select_from.type, ast.SelectQueryType) + + pivot = expr.select_from.table + column_expr = pivot.columns[0].column + if isinstance(column_expr, ast.Alias): + column_expr = column_expr.expr + assert isinstance(column_expr, ast.Field) + assert isinstance(column_expr.type, ast.FieldType) + + def test_pivot_join_basic_resolves(self): + expr = self._select("SELECT 1 FROM events JOIN events AS e2 ON 1 PIVOT (count() FOR events.event IN ('a'))") + expr = cast(ast.SelectQuery, resolve_types(expr, self.context, dialect="postgres")) + assert isinstance(expr.select_from, ast.JoinExpr) + assert isinstance(expr.select_from.table, ast.PivotExpr) + pivot = expr.select_from.table + assert isinstance(pivot.table, ast.JoinExpr) + column_expr = pivot.columns[0].column + if isinstance(column_expr, ast.Alias): + column_expr = column_expr.expr + assert isinstance(column_expr, ast.Field) + assert isinstance(column_expr.type, ast.FieldType) + + def test_pivot_expression_column_resolves(self): + expr = self._select("SELECT 1 FROM events PIVOT (count() FOR toYear(timestamp) IN (2015))") + expr = cast(ast.SelectQuery, resolve_types(expr, self.context, dialect="postgres")) + assert isinstance(expr.select_from, ast.JoinExpr) + assert isinstance(expr.select_from.table, ast.PivotExpr) + + def test_pivot_expression_unknown_column_error(self): + with self.assertRaisesMessage(QueryError, 'PIVOT column "does_not_exist" was not found'): + expr = self._select("SELECT 1 FROM events PIVOT (count() FOR toYear(does_not_exist) IN (2015))") + resolve_types(expr, self.context, dialect="postgres") + + def test_pivot_aggregate_unknown_column_error(self): + with self.assertRaisesMessage(QueryError, 'PIVOT column "thing" was not found'): + expr = self._select("SELECT 1 FROM events PIVOT (sum(thing) FOR toYear(timestamp) IN (2015))") + resolve_types(expr, self.context, dialect="postgres") + + def test_pivot_unknown_column_error(self): + with self.assertRaisesMessage(QueryError, 'PIVOT column "does_not_exist" was not found'): + expr = self._select("SELECT 1 FROM events PIVOT (count() FOR does_not_exist IN ('a'))") + resolve_types(expr, self.context, dialect="postgres") + + def test_pivot_non_postgres_dialect_error(self): + with self.assertRaisesMessage(QueryError, "PIVOT is not allowed in clickhouse dialect"): + expr = self._select("SELECT 1 FROM events PIVOT (count() FOR event IN ('a'))") + resolve_types(expr, self.context, dialect="clickhouse") + def test_limit_with_ties_postgres_error(self): with self.assertRaisesMessage(QueryError, "WITH TIES is not supported in postgres dialect"): expr = self._select("SELECT 1 FROM events ORDER BY 1 LIMIT 1 WITH TIES") @@ -1584,6 +1648,52 @@ def test_positional_refs_postgres(self): assert isinstance(expr.select[0], ast.PositionalRef) assert isinstance(expr.select[1], ast.PositionalRef) + def test_function_call_order_by_resolves(self): + expr = self._select("SELECT sum(event ORDER BY timestamp DESC) FROM events") + expr = cast(ast.SelectQuery, resolve_types(expr, self.context, dialect="postgres")) + assert isinstance(expr.select[0], ast.Call) + call = expr.select[0] + assert call.order_by is not None + assert len(call.order_by) == 1 + assert call.order_by[0].order == "DESC" + order_expr = call.order_by[0].expr + if isinstance(order_expr, ast.Alias): + order_expr = order_expr.expr + assert isinstance(order_expr, ast.Field) + assert isinstance(order_expr.type, ast.FieldType) + + def test_function_call_filter_resolves(self): + expr = self._select("SELECT sum(event) FILTER (WHERE event = 'a') FROM events") + expr = cast(ast.SelectQuery, resolve_types(expr, self.context, dialect="postgres")) + assert isinstance(expr.select[0], ast.Call) + call = expr.select[0] + assert call.filter_expr is not None + assert isinstance(call.filter_expr, ast.CompareOperation) + left = call.filter_expr.left + if isinstance(left, ast.Alias): + left = left.expr + assert isinstance(left, ast.Field) + assert isinstance(left.type, ast.FieldType) + + def test_unpivot_include_nulls_resolves(self): + expr = self._select( + "SELECT field_name, field_value FROM events UNPIVOT INCLUDE NULLS (field_value FOR field_name IN (event))" + ) + expr = cast(ast.SelectQuery, resolve_types(expr, self.context, dialect="postgres")) + assert isinstance(expr.select_from, ast.JoinExpr) + assert isinstance(expr.select_from.table, ast.UnpivotExpr) + assert expr.select_from.table.include_nulls is True + + def test_unpivot_join_basic_resolves(self): + expr = self._select( + "SELECT field_name, field_value FROM events JOIN events AS e2 ON 1 " + "UNPIVOT (field_value FOR field_name IN (events.event))" + ) + expr = cast(ast.SelectQuery, resolve_types(expr, self.context, dialect="postgres")) + assert isinstance(expr.select_from, ast.JoinExpr) + assert isinstance(expr.select_from.table, ast.UnpivotExpr) + assert isinstance(expr.select_from.type, ast.SelectQueryType) + def test_positional_refs_non_postgres_error(self): with self.assertRaisesMessage(QueryError, "Positional references are not allowed in clickhouse dialect"): expr = self._select("SELECT #1 FROM events") diff --git a/posthog/hogql/visitor.py b/posthog/hogql/visitor.py index a2b6f0f52b54..7ab9a5bc8cec 100644 --- a/posthog/hogql/visitor.py +++ b/posthog/hogql/visitor.py @@ -84,6 +84,21 @@ def visit_unpivot_column(self, node: ast.UnpivotColumn): for val in node.unpivot_values: self.visit(val) + def visit_pivot_expr(self, node: ast.PivotExpr): + self.visit(node.table) + for agg in node.aggregates: + self.visit(agg) + for col in node.columns: + self.visit(col) + if node.group_by: + for expr in node.group_by: + self.visit(expr) + + def visit_pivot_column(self, node: ast.PivotColumn): + self.visit(node.column) + for val in node.values: + self.visit(val) + def visit_between_expr(self, node: ast.BetweenExpr): self.visit(node.expr) self.visit(node.low) @@ -158,6 +173,11 @@ def visit_call(self, node: ast.Call): if node.within_group: for expr in node.within_group: self.visit(expr) + if node.order_by: + for expr in node.order_by: + self.visit(expr) + if node.filter_expr: + self.visit(node.filter_expr) def visit_expr_call(self, node: ast.ExprCall): self.visit(node.expr) @@ -555,6 +575,7 @@ def visit_unpivot_expr(self, node: ast.UnpivotExpr): type=None if self.clear_types else node.type, table=self.visit(node.table), columns=[self.visit(col) for col in node.columns], + include_nulls=node.include_nulls, ) def visit_unpivot_column(self, node: ast.UnpivotColumn): @@ -567,6 +588,26 @@ def visit_unpivot_column(self, node: ast.UnpivotColumn): unpivot_values=[self.visit(val) for val in node.unpivot_values], ) + def visit_pivot_expr(self, node: ast.PivotExpr): + return ast.PivotExpr( + start=None if self.clear_locations else node.start, + end=None if self.clear_locations else node.end, + type=None if self.clear_types else node.type, + table=self.visit(node.table), + aggregates=[self.visit(agg) for agg in node.aggregates], + columns=[self.visit(col) for col in node.columns], + group_by=[self.visit(expr) for expr in node.group_by] if node.group_by else None, + ) + + def visit_pivot_column(self, node: ast.PivotColumn): + return ast.PivotColumn( + start=None if self.clear_locations else node.start, + end=None if self.clear_locations else node.end, + type=None if self.clear_types else node.type, + column=self.visit(node.column), + values=[self.visit(val) for val in node.values], + ) + def visit_between_expr(self, node: ast.BetweenExpr): return ast.BetweenExpr( start=None if self.clear_locations else node.start, @@ -732,6 +773,8 @@ def visit_call(self, node: ast.Call): params=[self.visit(param) for param in node.params] if node.params is not None else None, distinct=node.distinct, within_group=[self.visit(order_by) for order_by in node.within_group] if node.within_group else None, + order_by=[self.visit(expr) for expr in node.order_by] if node.order_by is not None else None, + filter_expr=self.visit(node.filter_expr) if node.filter_expr is not None else None, ) def visit_expr_call(self, node: ast.ExprCall): diff --git a/pyproject.toml b/pyproject.toml index 78c030adb5e9..b3093958c7b7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -69,7 +69,7 @@ dependencies = [ "grimp==3.13", "grpcio~=1.71.0", "gspread==6.2.1", - "hogql-parser==1.3.31", + "hogql-parser==1.3.32", "infi-clickhouse-orm", "jsonref==1.1.0", "kafka-python==2.3.0", diff --git a/uv.lock b/uv.lock index 28eb6fcd3b97..c7007d3cd954 100644 --- a/uv.lock +++ b/uv.lock @@ -2892,14 +2892,14 @@ wheels = [ [[package]] name = "hogql-parser" -version = "1.3.31" +version = "1.3.32" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/03/e5/d11e3a76f74ef6974976142b046a0246d13770a65acda6dfda273e72ed64/hogql_parser-1.3.31.tar.gz", hash = "sha256:e8a65543ad9ab2883d4f71c5f54fa99fa9693ac50587001cbed0bab01c0ab6f9", size = 80819, upload-time = "2026-03-20T17:31:06.323Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/bc/4dc786fd500d82640f25721d27167636c86dc1796e78fb88525c009b7e54/hogql_parser-1.3.32.tar.gz", hash = "sha256:2874520348752251bdb38bd65063626caaa5732f6fd917820cb3ac08df1d774c", size = 85924, upload-time = "2026-03-24T08:47:56.584Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/95/d3/66f4de04e558166066eb5e455310a9379f3018331edf847e517a87ec54ed/hogql_parser-1.3.31-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:6f82b6f7b56d94ece49366744570c6b5cdfaf246d84ce57bb6157f511a94f5df", size = 621737, upload-time = "2026-03-20T17:30:51.9Z" }, - { url = "https://files.pythonhosted.org/packages/74/33/e02c337bc7d78bbaa129e67fade658e0d2670a9410268a690db8f325ee37/hogql_parser-1.3.31-cp312-cp312-macosx_15_0_x86_64.whl", hash = "sha256:2f8bb3e9c895d8f46aeccb85db2d5838f099c085432dd4908ec19f4e4f72bf41", size = 627617, upload-time = "2026-03-20T17:30:53.496Z" }, - { url = "https://files.pythonhosted.org/packages/5f/27/75ad81dce48d39e33e1d150b91588a245a4eeb4d73b7723d9897a2aa86bd/hogql_parser-1.3.31-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:9c49c9c347de3a70c7697a9130f09b39bf0885c4d36d5ce083f281732e50ca8e", size = 4630872, upload-time = "2026-03-20T17:30:55.294Z" }, - { url = "https://files.pythonhosted.org/packages/6a/3d/c6856e6d546762f471e0acc42917690b0d610ea4da6499a3a7972887c9a7/hogql_parser-1.3.31-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:842b554618f4fe2afcc2139d17455e957f8114e9168d2b8207558560f9e91b87", size = 4732504, upload-time = "2026-03-20T17:30:57.475Z" }, + { url = "https://files.pythonhosted.org/packages/d8/1a/5c17453e0df08f2259bfae3cd365536c4b0f4b8d8c81d1898807b5ba5567/hogql_parser-1.3.32-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:2a10050230c64842338bba10e0acf02d22f233b6be57b451e260d966f54ab8aa", size = 646380, upload-time = "2026-03-24T08:47:40.601Z" }, + { url = "https://files.pythonhosted.org/packages/58/e0/b11fbdb8c3c74a76ec2b9021a8452810380578ce701046e7020857811604/hogql_parser-1.3.32-cp312-cp312-macosx_15_0_x86_64.whl", hash = "sha256:ab0aa02b1be12e9b42d98d0098acdad903bfd99eb0281cd9b4756bf60e93b4ea", size = 651502, upload-time = "2026-03-24T08:47:42.561Z" }, + { url = "https://files.pythonhosted.org/packages/21/a2/87f49afbd49e0da7988b1e533e41ee8352b7f5091374a7b38790cd70ee22/hogql_parser-1.3.32-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:1c9745ccd1ace3b99a4b0460f595f7a0cc5edc482a51574099ed54061465dea3", size = 4874979, upload-time = "2026-03-24T08:47:44.57Z" }, + { url = "https://files.pythonhosted.org/packages/98/35/51ba6726b28be74443bdabac7c0ef62038fcc83259be56ec00ad379658eb/hogql_parser-1.3.32-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:2845187d0201e143fa9bd7edc6bd9c228500a22a9252d21ebe0f7a681bf30075", size = 4984092, upload-time = "2026-03-24T08:47:46.876Z" }, ] [[package]] @@ -5269,7 +5269,7 @@ requires-dist = [ { name = "grimp", specifier = "==3.13" }, { name = "grpcio", specifier = "~=1.71.0" }, { name = "gspread", specifier = "==6.2.1" }, - { name = "hogql-parser", specifier = "==1.3.31" }, + { name = "hogql-parser", specifier = "==1.3.32" }, { name = "infi-clickhouse-orm", git = "https://github.com/PostHog/infi.clickhouse_orm?rev=4e3996becf66bf5c26580aff12a80425d9d56fe5" }, { name = "jsonref", specifier = "==1.1.0" }, { name = "kafka-python", specifier = "==2.3.0" },