diff --git a/.github/actions/run-backend-tests/action.yml b/.github/actions/run-backend-tests/action.yml index 87038a52189ad..45e189e23b1b6 100644 --- a/.github/actions/run-backend-tests/action.yml +++ b/.github/actions/run-backend-tests/action.yml @@ -82,9 +82,9 @@ runs: # changed (requirements.txt has the already-published version) run: | sudo apt-get install libboost-all-dev unzip cmake curl uuid pkg-config - curl https://www.antlr.org/download/antlr4-cpp-runtime-4.13.0-source.zip --output antlr4-source.zip + curl https://www.antlr.org/download/antlr4-cpp-runtime-4.13.1-source.zip --output antlr4-source.zip # Check that the downloaded archive is the expected runtime - a security measure - anltr_known_md5sum="ff214b65fb02e150b4f515d7983bca92" + anltr_known_md5sum="c875c148991aacd043f733827644a76f" antlr_found_ms5sum="$(md5sum antlr4-source.zip | cut -d' ' -f1)" if [[ "$anltr_known_md5sum" != "$antlr_found_ms5sum" ]]; then echo "Unexpected MD5 sum of antlr4-source.zip!" diff --git a/.github/workflows/build-hogql-parser.yml b/.github/workflows/build-hogql-parser.yml index 97cc24fa59abf..476ce7082243d 100644 --- a/.github/workflows/build-hogql-parser.yml +++ b/.github/workflows/build-hogql-parser.yml @@ -44,8 +44,8 @@ jobs: local=$(python hogql_parser/setup.py --version) # TODO: Only comment if no comment alraedy exists for $local if [[ "$published" == "$local" ]]; then - MESSAGE_BODY="It looks like the code of `hogql-parser` has changed since last push, but its version stayed the same at $local. 👀\nMake sure to resolve this in `hogql_parser/setup.py` before merging!" - curl -s -u posthog-bot:${{ secrets.POSTHOG_BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} -X POST -d "{ \"body\": \"$MESSAGE_BODY\" }" "https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.pull_request.number }}/comments" + message_body="It looks like the code of \`hogql-parser\` has changed since last push, but its version stayed the same at $local. 👀\nMake sure to resolve this in \`hogql_parser/setup.py\` before merging!" + curl -s -u posthog-bot:${{ secrets.POSTHOG_BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} -X POST -d "{ \"body\": \"$message_body\" }" "https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.pull_request.number }}/comments" fi build-wheels: diff --git a/.github/workflows/ci-backend.yml b/.github/workflows/ci-backend.yml index f02e30b0b260e..52cbad73d8adf 100644 --- a/.github/workflows/ci-backend.yml +++ b/.github/workflows/ci-backend.yml @@ -159,7 +159,7 @@ jobs: env: # Installing a version of ANTLR compatible with what's in Homebrew as of October 2023 (version 4.13), # as apt-get is quite out of date. The same version must be set in hogql_parser/pyproject.toml - ANTLR_VERSION: '4.13.0' + ANTLR_VERSION: '4.13.1' check-migrations: needs: changes diff --git a/hogql_parser/HogQLLexer.cpp b/hogql_parser/HogQLLexer.cpp index d8ba1b07116fa..1331605dd768e 100644 --- a/hogql_parser/HogQLLexer.cpp +++ b/hogql_parser/HogQLLexer.cpp @@ -1,5 +1,5 @@ -// Generated from HogQLLexer.g4 by ANTLR 4.13.0 +// Generated from HogQLLexer.g4 by ANTLR 4.13.1 #include "HogQLLexer.h" diff --git a/hogql_parser/HogQLLexer.h b/hogql_parser/HogQLLexer.h index 78bfe64dc0bfc..3584bf43b4ff9 100644 --- a/hogql_parser/HogQLLexer.h +++ b/hogql_parser/HogQLLexer.h @@ -1,5 +1,5 @@ -// Generated from HogQLLexer.g4 by ANTLR 4.13.0 +// Generated from HogQLLexer.g4 by ANTLR 4.13.1 #pragma once diff --git a/hogql_parser/HogQLParser.cpp b/hogql_parser/HogQLParser.cpp index 779d2dbf7d4ed..60b83b24ed537 100644 --- a/hogql_parser/HogQLParser.cpp +++ b/hogql_parser/HogQLParser.cpp @@ -1,5 +1,5 @@ -// Generated from HogQLParser.g4 by ANTLR 4.13.0 +// Generated from HogQLParser.g4 by ANTLR 4.13.1 #include "HogQLParserVisitor.h" @@ -126,7 +126,7 @@ void hogqlparserParserInitialize() { } ); static const int32_t serializedATNSegment[] = { - 4,1,242,919,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, + 4,1,242,922,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, @@ -157,310 +157,312 @@ void hogqlparserParserInitialize() { 1,21,1,21,1,21,1,21,1,21,1,21,3,21,382,8,21,1,22,1,22,1,22,1,22,3,22, 388,8,22,1,23,1,23,1,23,5,23,393,8,23,10,23,12,23,396,9,23,1,24,1,24, 3,24,400,8,24,1,24,1,24,3,24,404,8,24,1,24,1,24,3,24,408,8,24,1,25,1, - 25,1,25,3,25,413,8,25,1,26,1,26,1,26,5,26,418,8,26,10,26,12,26,421,9, - 26,1,27,1,27,1,27,1,27,1,28,3,28,428,8,28,1,28,3,28,431,8,28,1,28,3,28, - 434,8,28,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,30,1,31,1,31,1,31,1,32, - 1,32,1,32,1,32,1,32,1,32,3,32,453,8,32,1,33,1,33,1,33,1,33,1,33,1,33, - 1,33,1,33,1,33,1,33,1,33,1,33,3,33,467,8,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,5,35,481,8,35,10,35,12,35,484,9,35, - 1,35,1,35,1,35,1,35,1,35,1,35,1,35,5,35,493,8,35,10,35,12,35,496,9,35, - 1,35,1,35,1,35,1,35,1,35,1,35,1,35,5,35,505,8,35,10,35,12,35,508,9,35, - 1,35,1,35,1,35,1,35,1,35,3,35,515,8,35,1,35,1,35,3,35,519,8,35,1,36,1, - 36,1,36,5,36,524,8,36,10,36,12,36,527,9,36,1,37,1,37,1,37,3,37,532,8, - 37,1,37,1,37,1,37,1,37,1,37,4,37,539,8,37,11,37,12,37,540,1,37,1,37,3, - 37,545,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1, + 25,1,25,1,25,3,25,414,8,25,3,25,416,8,25,1,26,1,26,1,26,5,26,421,8,26, + 10,26,12,26,424,9,26,1,27,1,27,1,27,1,27,1,28,3,28,431,8,28,1,28,3,28, + 434,8,28,1,28,3,28,437,8,28,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,30,1, + 31,1,31,1,31,1,32,1,32,1,32,1,32,1,32,1,32,3,32,456,8,32,1,33,1,33,1, + 33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,3,33,470,8,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,5,35,484,8,35,10, + 35,12,35,487,9,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,5,35,496,8,35,10, + 35,12,35,499,9,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,5,35,508,8,35,10, + 35,12,35,511,9,35,1,35,1,35,1,35,1,35,1,35,3,35,518,8,35,1,35,1,35,3, + 35,522,8,35,1,36,1,36,1,36,5,36,527,8,36,10,36,12,36,530,9,36,1,37,1, + 37,1,37,3,37,535,8,37,1,37,1,37,1,37,1,37,1,37,4,37,542,8,37,11,37,12, + 37,543,1,37,1,37,3,37,548,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, + 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, + 1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,579,8,37,1,37,1,37,1,37,1,37, + 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,596,8,37, + 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,608,8,37,1,37, + 1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,618,8,37,1,37,3,37,621,8,37,1, + 37,1,37,3,37,625,8,37,1,37,3,37,628,8,37,1,37,1,37,1,37,1,37,1,37,1,37, + 1,37,1,37,1,37,1,37,3,37,640,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, + 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,657,8,37,1,37,1,37,3,37, + 661,8,37,1,37,1,37,1,37,1,37,3,37,667,8,37,1,37,1,37,1,37,1,37,1,37,3, + 37,674,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,686, + 8,37,1,37,1,37,3,37,690,8,37,1,37,3,37,693,8,37,1,37,1,37,1,37,1,37,1, + 37,1,37,1,37,3,37,702,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1, + 37,1,37,1,37,1,37,3,37,716,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1, 37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1, - 37,1,37,1,37,1,37,3,37,576,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1, - 37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,593,8,37,1,37,1,37,1,37,1, - 37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,605,8,37,1,37,1,37,1,37,1,37,1, - 37,1,37,1,37,1,37,3,37,615,8,37,1,37,3,37,618,8,37,1,37,1,37,3,37,622, - 8,37,1,37,3,37,625,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, - 1,37,3,37,637,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, - 1,37,1,37,1,37,1,37,1,37,3,37,654,8,37,1,37,1,37,3,37,658,8,37,1,37,1, - 37,1,37,1,37,3,37,664,8,37,1,37,1,37,1,37,1,37,1,37,3,37,671,8,37,1,37, - 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,683,8,37,1,37,1,37, - 3,37,687,8,37,1,37,3,37,690,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3, - 37,699,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1, - 37,3,37,713,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1, - 37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1, - 37,3,37,740,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,749,8,37,5,37, - 751,8,37,10,37,12,37,754,9,37,1,38,1,38,1,38,5,38,759,8,38,10,38,12,38, - 762,9,38,1,39,1,39,3,39,766,8,39,1,40,1,40,1,40,1,40,5,40,772,8,40,10, - 40,12,40,775,9,40,1,40,1,40,1,40,1,40,1,40,5,40,782,8,40,10,40,12,40, - 785,9,40,3,40,787,8,40,1,40,1,40,1,40,1,41,1,41,1,41,5,41,795,8,41,10, - 41,12,41,798,9,41,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,3, - 42,810,8,42,1,43,1,43,1,43,1,43,3,43,816,8,43,1,43,3,43,819,8,43,1,44, - 1,44,1,44,5,44,824,8,44,10,44,12,44,827,9,44,1,45,1,45,1,45,1,45,1,45, - 1,45,1,45,1,45,3,45,837,8,45,1,45,1,45,1,45,1,45,3,45,843,8,45,5,45,845, - 8,45,10,45,12,45,848,9,45,1,46,1,46,1,46,3,46,853,8,46,1,46,1,46,1,47, - 1,47,1,47,3,47,860,8,47,1,47,1,47,1,48,1,48,1,48,5,48,867,8,48,10,48, - 12,48,870,9,48,1,49,1,49,1,50,1,50,1,50,1,50,1,50,1,50,3,50,880,8,50, - 3,50,882,8,50,1,51,3,51,885,8,51,1,51,1,51,1,51,1,51,1,51,1,51,3,51,893, - 8,51,1,52,1,52,1,52,3,52,898,8,52,1,53,1,53,1,54,1,54,1,55,1,55,1,56, - 1,56,3,56,908,8,56,1,57,1,57,1,57,3,57,913,8,57,1,58,1,58,1,58,1,58,1, - 58,0,3,36,74,90,59,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,0,16,2,0, - 32,32,141,141,2,0,84,84,96,96,3,0,4,4,8,8,12,12,4,0,4,4,7,8,12,12,147, - 147,2,0,96,96,140,140,2,0,4,4,8,8,2,0,11,11,42,43,2,0,62,62,93,93,2,0, - 133,133,143,143,3,0,17,17,95,95,170,170,2,0,79,79,98,98,1,0,196,197,2, - 0,208,208,228,228,8,0,37,37,76,76,108,108,110,110,132,132,145,145,185, - 185,190,190,13,0,2,24,26,36,38,75,77,81,83,107,109,109,111,112,114,115, - 117,130,133,144,146,184,186,189,191,192,4,0,36,36,62,62,77,77,91,91,1039, - 0,120,1,0,0,0,2,124,1,0,0,0,4,138,1,0,0,0,6,141,1,0,0,0,8,190,1,0,0,0, - 10,193,1,0,0,0,12,199,1,0,0,0,14,203,1,0,0,0,16,209,1,0,0,0,18,227,1, - 0,0,0,20,230,1,0,0,0,22,233,1,0,0,0,24,243,1,0,0,0,26,246,1,0,0,0,28, - 250,1,0,0,0,30,283,1,0,0,0,32,285,1,0,0,0,34,288,1,0,0,0,36,303,1,0,0, - 0,38,365,1,0,0,0,40,370,1,0,0,0,42,381,1,0,0,0,44,383,1,0,0,0,46,389, - 1,0,0,0,48,397,1,0,0,0,50,409,1,0,0,0,52,414,1,0,0,0,54,422,1,0,0,0,56, - 427,1,0,0,0,58,435,1,0,0,0,60,439,1,0,0,0,62,443,1,0,0,0,64,452,1,0,0, - 0,66,466,1,0,0,0,68,468,1,0,0,0,70,518,1,0,0,0,72,520,1,0,0,0,74,657, - 1,0,0,0,76,755,1,0,0,0,78,765,1,0,0,0,80,786,1,0,0,0,82,791,1,0,0,0,84, - 809,1,0,0,0,86,818,1,0,0,0,88,820,1,0,0,0,90,836,1,0,0,0,92,849,1,0,0, - 0,94,859,1,0,0,0,96,863,1,0,0,0,98,871,1,0,0,0,100,881,1,0,0,0,102,884, - 1,0,0,0,104,897,1,0,0,0,106,899,1,0,0,0,108,901,1,0,0,0,110,903,1,0,0, - 0,112,907,1,0,0,0,114,912,1,0,0,0,116,914,1,0,0,0,118,121,3,2,1,0,119, - 121,3,6,3,0,120,118,1,0,0,0,120,119,1,0,0,0,121,122,1,0,0,0,122,123,5, - 0,0,1,123,1,1,0,0,0,124,130,3,4,2,0,125,126,5,176,0,0,126,127,5,4,0,0, - 127,129,3,4,2,0,128,125,1,0,0,0,129,132,1,0,0,0,130,128,1,0,0,0,130,131, - 1,0,0,0,131,3,1,0,0,0,132,130,1,0,0,0,133,139,3,6,3,0,134,135,5,220,0, - 0,135,136,3,2,1,0,136,137,5,236,0,0,137,139,1,0,0,0,138,133,1,0,0,0,138, - 134,1,0,0,0,139,5,1,0,0,0,140,142,3,8,4,0,141,140,1,0,0,0,141,142,1,0, - 0,0,142,143,1,0,0,0,143,145,5,146,0,0,144,146,5,49,0,0,145,144,1,0,0, - 0,145,146,1,0,0,0,146,148,1,0,0,0,147,149,3,10,5,0,148,147,1,0,0,0,148, - 149,1,0,0,0,149,150,1,0,0,0,150,152,3,72,36,0,151,153,3,12,6,0,152,151, - 1,0,0,0,152,153,1,0,0,0,153,155,1,0,0,0,154,156,3,14,7,0,155,154,1,0, - 0,0,155,156,1,0,0,0,156,158,1,0,0,0,157,159,3,18,9,0,158,157,1,0,0,0, - 158,159,1,0,0,0,159,161,1,0,0,0,160,162,3,20,10,0,161,160,1,0,0,0,161, - 162,1,0,0,0,162,164,1,0,0,0,163,165,3,22,11,0,164,163,1,0,0,0,164,165, - 1,0,0,0,165,168,1,0,0,0,166,167,5,189,0,0,167,169,7,0,0,0,168,166,1,0, - 0,0,168,169,1,0,0,0,169,172,1,0,0,0,170,171,5,189,0,0,171,173,5,169,0, - 0,172,170,1,0,0,0,172,173,1,0,0,0,173,175,1,0,0,0,174,176,3,24,12,0,175, - 174,1,0,0,0,175,176,1,0,0,0,176,178,1,0,0,0,177,179,3,16,8,0,178,177, - 1,0,0,0,178,179,1,0,0,0,179,181,1,0,0,0,180,182,3,26,13,0,181,180,1,0, - 0,0,181,182,1,0,0,0,182,185,1,0,0,0,183,186,3,30,15,0,184,186,3,32,16, - 0,185,183,1,0,0,0,185,184,1,0,0,0,185,186,1,0,0,0,186,188,1,0,0,0,187, - 189,3,34,17,0,188,187,1,0,0,0,188,189,1,0,0,0,189,7,1,0,0,0,190,191,5, - 189,0,0,191,192,3,82,41,0,192,9,1,0,0,0,193,194,5,168,0,0,194,197,5,197, - 0,0,195,196,5,189,0,0,196,198,5,164,0,0,197,195,1,0,0,0,197,198,1,0,0, - 0,198,11,1,0,0,0,199,200,5,68,0,0,200,201,3,36,18,0,201,13,1,0,0,0,202, - 204,7,1,0,0,203,202,1,0,0,0,203,204,1,0,0,0,204,205,1,0,0,0,205,206,5, - 9,0,0,206,207,5,90,0,0,207,208,3,72,36,0,208,15,1,0,0,0,209,210,5,188, - 0,0,210,211,3,114,57,0,211,212,5,10,0,0,212,213,5,220,0,0,213,214,3,56, - 28,0,214,224,5,236,0,0,215,216,5,206,0,0,216,217,3,114,57,0,217,218,5, - 10,0,0,218,219,5,220,0,0,219,220,3,56,28,0,220,221,5,236,0,0,221,223, - 1,0,0,0,222,215,1,0,0,0,223,226,1,0,0,0,224,222,1,0,0,0,224,225,1,0,0, - 0,225,17,1,0,0,0,226,224,1,0,0,0,227,228,5,129,0,0,228,229,3,74,37,0, - 229,19,1,0,0,0,230,231,5,187,0,0,231,232,3,74,37,0,232,21,1,0,0,0,233, - 234,5,73,0,0,234,241,5,18,0,0,235,236,7,0,0,0,236,237,5,220,0,0,237,238, - 3,72,36,0,238,239,5,236,0,0,239,242,1,0,0,0,240,242,3,72,36,0,241,235, - 1,0,0,0,241,240,1,0,0,0,242,23,1,0,0,0,243,244,5,74,0,0,244,245,3,74, - 37,0,245,25,1,0,0,0,246,247,5,122,0,0,247,248,5,18,0,0,248,249,3,46,23, - 0,249,27,1,0,0,0,250,251,5,122,0,0,251,252,5,18,0,0,252,253,3,72,36,0, - 253,29,1,0,0,0,254,255,5,99,0,0,255,258,3,74,37,0,256,257,5,206,0,0,257, - 259,3,74,37,0,258,256,1,0,0,0,258,259,1,0,0,0,259,264,1,0,0,0,260,261, - 5,189,0,0,261,265,5,164,0,0,262,263,5,18,0,0,263,265,3,72,36,0,264,260, - 1,0,0,0,264,262,1,0,0,0,264,265,1,0,0,0,265,284,1,0,0,0,266,267,5,99, - 0,0,267,270,3,74,37,0,268,269,5,189,0,0,269,271,5,164,0,0,270,268,1,0, - 0,0,270,271,1,0,0,0,271,272,1,0,0,0,272,273,5,118,0,0,273,274,3,74,37, - 0,274,284,1,0,0,0,275,276,5,99,0,0,276,277,3,74,37,0,277,278,5,118,0, - 0,278,281,3,74,37,0,279,280,5,18,0,0,280,282,3,72,36,0,281,279,1,0,0, - 0,281,282,1,0,0,0,282,284,1,0,0,0,283,254,1,0,0,0,283,266,1,0,0,0,283, - 275,1,0,0,0,284,31,1,0,0,0,285,286,5,118,0,0,286,287,3,74,37,0,287,33, - 1,0,0,0,288,289,5,150,0,0,289,290,3,52,26,0,290,35,1,0,0,0,291,292,6, - 18,-1,0,292,294,3,90,45,0,293,295,5,61,0,0,294,293,1,0,0,0,294,295,1, - 0,0,0,295,297,1,0,0,0,296,298,3,44,22,0,297,296,1,0,0,0,297,298,1,0,0, - 0,298,304,1,0,0,0,299,300,5,220,0,0,300,301,3,36,18,0,301,302,5,236,0, - 0,302,304,1,0,0,0,303,291,1,0,0,0,303,299,1,0,0,0,304,319,1,0,0,0,305, - 306,10,3,0,0,306,307,3,40,20,0,307,308,3,36,18,4,308,318,1,0,0,0,309, - 311,10,4,0,0,310,312,3,38,19,0,311,310,1,0,0,0,311,312,1,0,0,0,312,313, - 1,0,0,0,313,314,5,90,0,0,314,315,3,36,18,0,315,316,3,42,21,0,316,318, - 1,0,0,0,317,305,1,0,0,0,317,309,1,0,0,0,318,321,1,0,0,0,319,317,1,0,0, - 0,319,320,1,0,0,0,320,37,1,0,0,0,321,319,1,0,0,0,322,324,7,2,0,0,323, - 322,1,0,0,0,323,324,1,0,0,0,324,325,1,0,0,0,325,332,5,84,0,0,326,328, - 5,84,0,0,327,329,7,2,0,0,328,327,1,0,0,0,328,329,1,0,0,0,329,332,1,0, - 0,0,330,332,7,2,0,0,331,323,1,0,0,0,331,326,1,0,0,0,331,330,1,0,0,0,332, - 366,1,0,0,0,333,335,7,3,0,0,334,333,1,0,0,0,334,335,1,0,0,0,335,336,1, - 0,0,0,336,338,7,4,0,0,337,339,5,123,0,0,338,337,1,0,0,0,338,339,1,0,0, - 0,339,348,1,0,0,0,340,342,7,4,0,0,341,343,5,123,0,0,342,341,1,0,0,0,342, - 343,1,0,0,0,343,345,1,0,0,0,344,346,7,3,0,0,345,344,1,0,0,0,345,346,1, - 0,0,0,346,348,1,0,0,0,347,334,1,0,0,0,347,340,1,0,0,0,348,366,1,0,0,0, - 349,351,7,5,0,0,350,349,1,0,0,0,350,351,1,0,0,0,351,352,1,0,0,0,352,354, - 5,69,0,0,353,355,5,123,0,0,354,353,1,0,0,0,354,355,1,0,0,0,355,364,1, - 0,0,0,356,358,5,69,0,0,357,359,5,123,0,0,358,357,1,0,0,0,358,359,1,0, - 0,0,359,361,1,0,0,0,360,362,7,5,0,0,361,360,1,0,0,0,361,362,1,0,0,0,362, - 364,1,0,0,0,363,350,1,0,0,0,363,356,1,0,0,0,364,366,1,0,0,0,365,331,1, - 0,0,0,365,347,1,0,0,0,365,363,1,0,0,0,366,39,1,0,0,0,367,368,5,31,0,0, - 368,371,5,90,0,0,369,371,5,206,0,0,370,367,1,0,0,0,370,369,1,0,0,0,371, - 41,1,0,0,0,372,373,5,119,0,0,373,382,3,72,36,0,374,375,5,179,0,0,375, - 376,5,220,0,0,376,377,3,72,36,0,377,378,5,236,0,0,378,382,1,0,0,0,379, - 380,5,179,0,0,380,382,3,72,36,0,381,372,1,0,0,0,381,374,1,0,0,0,381,379, - 1,0,0,0,382,43,1,0,0,0,383,384,5,144,0,0,384,387,3,50,25,0,385,386,5, - 118,0,0,386,388,3,50,25,0,387,385,1,0,0,0,387,388,1,0,0,0,388,45,1,0, - 0,0,389,394,3,48,24,0,390,391,5,206,0,0,391,393,3,48,24,0,392,390,1,0, - 0,0,393,396,1,0,0,0,394,392,1,0,0,0,394,395,1,0,0,0,395,47,1,0,0,0,396, - 394,1,0,0,0,397,399,3,74,37,0,398,400,7,6,0,0,399,398,1,0,0,0,399,400, - 1,0,0,0,400,403,1,0,0,0,401,402,5,117,0,0,402,404,7,7,0,0,403,401,1,0, - 0,0,403,404,1,0,0,0,404,407,1,0,0,0,405,406,5,26,0,0,406,408,5,199,0, - 0,407,405,1,0,0,0,407,408,1,0,0,0,408,49,1,0,0,0,409,412,3,102,51,0,410, - 411,5,238,0,0,411,413,3,102,51,0,412,410,1,0,0,0,412,413,1,0,0,0,413, - 51,1,0,0,0,414,419,3,54,27,0,415,416,5,206,0,0,416,418,3,54,27,0,417, - 415,1,0,0,0,418,421,1,0,0,0,419,417,1,0,0,0,419,420,1,0,0,0,420,53,1, - 0,0,0,421,419,1,0,0,0,422,423,3,114,57,0,423,424,5,212,0,0,424,425,3, - 104,52,0,425,55,1,0,0,0,426,428,3,58,29,0,427,426,1,0,0,0,427,428,1,0, - 0,0,428,430,1,0,0,0,429,431,3,60,30,0,430,429,1,0,0,0,430,431,1,0,0,0, - 431,433,1,0,0,0,432,434,3,62,31,0,433,432,1,0,0,0,433,434,1,0,0,0,434, - 57,1,0,0,0,435,436,5,126,0,0,436,437,5,18,0,0,437,438,3,72,36,0,438,59, - 1,0,0,0,439,440,5,122,0,0,440,441,5,18,0,0,441,442,3,46,23,0,442,61,1, - 0,0,0,443,444,7,8,0,0,444,445,3,64,32,0,445,63,1,0,0,0,446,453,3,66,33, - 0,447,448,5,16,0,0,448,449,3,66,33,0,449,450,5,6,0,0,450,451,3,66,33, - 0,451,453,1,0,0,0,452,446,1,0,0,0,452,447,1,0,0,0,453,65,1,0,0,0,454, - 455,5,33,0,0,455,467,5,142,0,0,456,457,5,175,0,0,457,467,5,128,0,0,458, - 459,5,175,0,0,459,467,5,64,0,0,460,461,3,102,51,0,461,462,5,128,0,0,462, - 467,1,0,0,0,463,464,3,102,51,0,464,465,5,64,0,0,465,467,1,0,0,0,466,454, - 1,0,0,0,466,456,1,0,0,0,466,458,1,0,0,0,466,460,1,0,0,0,466,463,1,0,0, - 0,467,67,1,0,0,0,468,469,3,74,37,0,469,470,5,0,0,1,470,69,1,0,0,0,471, - 519,3,114,57,0,472,473,3,114,57,0,473,474,5,220,0,0,474,475,3,114,57, - 0,475,482,3,70,35,0,476,477,5,206,0,0,477,478,3,114,57,0,478,479,3,70, - 35,0,479,481,1,0,0,0,480,476,1,0,0,0,481,484,1,0,0,0,482,480,1,0,0,0, - 482,483,1,0,0,0,483,485,1,0,0,0,484,482,1,0,0,0,485,486,5,236,0,0,486, - 519,1,0,0,0,487,488,3,114,57,0,488,489,5,220,0,0,489,494,3,116,58,0,490, - 491,5,206,0,0,491,493,3,116,58,0,492,490,1,0,0,0,493,496,1,0,0,0,494, - 492,1,0,0,0,494,495,1,0,0,0,495,497,1,0,0,0,496,494,1,0,0,0,497,498,5, - 236,0,0,498,519,1,0,0,0,499,500,3,114,57,0,500,501,5,220,0,0,501,506, - 3,70,35,0,502,503,5,206,0,0,503,505,3,70,35,0,504,502,1,0,0,0,505,508, - 1,0,0,0,506,504,1,0,0,0,506,507,1,0,0,0,507,509,1,0,0,0,508,506,1,0,0, - 0,509,510,5,236,0,0,510,519,1,0,0,0,511,512,3,114,57,0,512,514,5,220, - 0,0,513,515,3,72,36,0,514,513,1,0,0,0,514,515,1,0,0,0,515,516,1,0,0,0, - 516,517,5,236,0,0,517,519,1,0,0,0,518,471,1,0,0,0,518,472,1,0,0,0,518, - 487,1,0,0,0,518,499,1,0,0,0,518,511,1,0,0,0,519,71,1,0,0,0,520,525,3, - 74,37,0,521,522,5,206,0,0,522,524,3,74,37,0,523,521,1,0,0,0,524,527,1, - 0,0,0,525,523,1,0,0,0,525,526,1,0,0,0,526,73,1,0,0,0,527,525,1,0,0,0, - 528,529,6,37,-1,0,529,531,5,19,0,0,530,532,3,74,37,0,531,530,1,0,0,0, - 531,532,1,0,0,0,532,538,1,0,0,0,533,534,5,186,0,0,534,535,3,74,37,0,535, - 536,5,163,0,0,536,537,3,74,37,0,537,539,1,0,0,0,538,533,1,0,0,0,539,540, - 1,0,0,0,540,538,1,0,0,0,540,541,1,0,0,0,541,544,1,0,0,0,542,543,5,52, - 0,0,543,545,3,74,37,0,544,542,1,0,0,0,544,545,1,0,0,0,545,546,1,0,0,0, - 546,547,5,53,0,0,547,658,1,0,0,0,548,549,5,20,0,0,549,550,5,220,0,0,550, - 551,3,74,37,0,551,552,5,10,0,0,552,553,3,70,35,0,553,554,5,236,0,0,554, - 658,1,0,0,0,555,556,5,36,0,0,556,658,5,199,0,0,557,558,5,59,0,0,558,559, - 5,220,0,0,559,560,3,106,53,0,560,561,5,68,0,0,561,562,3,74,37,0,562,563, - 5,236,0,0,563,658,1,0,0,0,564,565,5,86,0,0,565,566,3,74,37,0,566,567, - 3,106,53,0,567,658,1,0,0,0,568,569,5,155,0,0,569,570,5,220,0,0,570,571, - 3,74,37,0,571,572,5,68,0,0,572,575,3,74,37,0,573,574,5,65,0,0,574,576, - 3,74,37,0,575,573,1,0,0,0,575,576,1,0,0,0,576,577,1,0,0,0,577,578,5,236, - 0,0,578,658,1,0,0,0,579,580,5,166,0,0,580,658,5,199,0,0,581,582,5,171, - 0,0,582,583,5,220,0,0,583,584,7,9,0,0,584,585,5,199,0,0,585,586,5,68, - 0,0,586,587,3,74,37,0,587,588,5,236,0,0,588,658,1,0,0,0,589,590,3,114, - 57,0,590,592,5,220,0,0,591,593,3,72,36,0,592,591,1,0,0,0,592,593,1,0, - 0,0,593,594,1,0,0,0,594,595,5,236,0,0,595,596,1,0,0,0,596,597,5,125,0, - 0,597,598,5,220,0,0,598,599,3,56,28,0,599,600,5,236,0,0,600,658,1,0,0, - 0,601,602,3,114,57,0,602,604,5,220,0,0,603,605,3,72,36,0,604,603,1,0, - 0,0,604,605,1,0,0,0,605,606,1,0,0,0,606,607,5,236,0,0,607,608,1,0,0,0, - 608,609,5,125,0,0,609,610,3,114,57,0,610,658,1,0,0,0,611,617,3,114,57, - 0,612,614,5,220,0,0,613,615,3,72,36,0,614,613,1,0,0,0,614,615,1,0,0,0, - 615,616,1,0,0,0,616,618,5,236,0,0,617,612,1,0,0,0,617,618,1,0,0,0,618, - 619,1,0,0,0,619,621,5,220,0,0,620,622,5,49,0,0,621,620,1,0,0,0,621,622, - 1,0,0,0,622,624,1,0,0,0,623,625,3,76,38,0,624,623,1,0,0,0,624,625,1,0, - 0,0,625,626,1,0,0,0,626,627,5,236,0,0,627,658,1,0,0,0,628,658,3,104,52, - 0,629,630,5,208,0,0,630,658,3,74,37,18,631,632,5,115,0,0,632,658,3,74, - 37,12,633,634,3,94,47,0,634,635,5,210,0,0,635,637,1,0,0,0,636,633,1,0, - 0,0,636,637,1,0,0,0,637,638,1,0,0,0,638,658,5,202,0,0,639,640,5,220,0, - 0,640,641,3,2,1,0,641,642,5,236,0,0,642,658,1,0,0,0,643,644,5,220,0,0, - 644,645,3,74,37,0,645,646,5,236,0,0,646,658,1,0,0,0,647,648,5,220,0,0, - 648,649,3,72,36,0,649,650,5,236,0,0,650,658,1,0,0,0,651,653,5,219,0,0, - 652,654,3,72,36,0,653,652,1,0,0,0,653,654,1,0,0,0,654,655,1,0,0,0,655, - 658,5,235,0,0,656,658,3,86,43,0,657,528,1,0,0,0,657,548,1,0,0,0,657,555, - 1,0,0,0,657,557,1,0,0,0,657,564,1,0,0,0,657,568,1,0,0,0,657,579,1,0,0, - 0,657,581,1,0,0,0,657,589,1,0,0,0,657,601,1,0,0,0,657,611,1,0,0,0,657, - 628,1,0,0,0,657,629,1,0,0,0,657,631,1,0,0,0,657,636,1,0,0,0,657,639,1, - 0,0,0,657,643,1,0,0,0,657,647,1,0,0,0,657,651,1,0,0,0,657,656,1,0,0,0, - 658,752,1,0,0,0,659,663,10,17,0,0,660,664,5,202,0,0,661,664,5,238,0,0, - 662,664,5,227,0,0,663,660,1,0,0,0,663,661,1,0,0,0,663,662,1,0,0,0,664, - 665,1,0,0,0,665,751,3,74,37,18,666,670,10,16,0,0,667,671,5,228,0,0,668, - 671,5,208,0,0,669,671,5,207,0,0,670,667,1,0,0,0,670,668,1,0,0,0,670,669, - 1,0,0,0,671,672,1,0,0,0,672,751,3,74,37,17,673,698,10,15,0,0,674,699, - 5,211,0,0,675,699,5,212,0,0,676,699,5,223,0,0,677,699,5,221,0,0,678,699, - 5,222,0,0,679,699,5,213,0,0,680,699,5,214,0,0,681,683,5,115,0,0,682,681, - 1,0,0,0,682,683,1,0,0,0,683,684,1,0,0,0,684,686,5,80,0,0,685,687,5,25, - 0,0,686,685,1,0,0,0,686,687,1,0,0,0,687,699,1,0,0,0,688,690,5,115,0,0, - 689,688,1,0,0,0,689,690,1,0,0,0,690,691,1,0,0,0,691,699,7,10,0,0,692, - 699,5,232,0,0,693,699,5,233,0,0,694,699,5,225,0,0,695,699,5,216,0,0,696, - 699,5,217,0,0,697,699,5,224,0,0,698,674,1,0,0,0,698,675,1,0,0,0,698,676, - 1,0,0,0,698,677,1,0,0,0,698,678,1,0,0,0,698,679,1,0,0,0,698,680,1,0,0, - 0,698,682,1,0,0,0,698,689,1,0,0,0,698,692,1,0,0,0,698,693,1,0,0,0,698, - 694,1,0,0,0,698,695,1,0,0,0,698,696,1,0,0,0,698,697,1,0,0,0,699,700,1, - 0,0,0,700,751,3,74,37,16,701,702,10,13,0,0,702,703,5,226,0,0,703,751, - 3,74,37,14,704,705,10,11,0,0,705,706,5,6,0,0,706,751,3,74,37,12,707,708, - 10,10,0,0,708,709,5,121,0,0,709,751,3,74,37,11,710,712,10,9,0,0,711,713, - 5,115,0,0,712,711,1,0,0,0,712,713,1,0,0,0,713,714,1,0,0,0,714,715,5,16, - 0,0,715,716,3,74,37,0,716,717,5,6,0,0,717,718,3,74,37,10,718,751,1,0, - 0,0,719,720,10,8,0,0,720,721,5,229,0,0,721,722,3,74,37,0,722,723,5,205, - 0,0,723,724,3,74,37,8,724,751,1,0,0,0,725,726,10,21,0,0,726,727,5,219, - 0,0,727,728,3,74,37,0,728,729,5,235,0,0,729,751,1,0,0,0,730,731,10,20, - 0,0,731,732,5,210,0,0,732,751,5,197,0,0,733,734,10,19,0,0,734,735,5,210, - 0,0,735,751,3,114,57,0,736,737,10,14,0,0,737,739,5,88,0,0,738,740,5,115, - 0,0,739,738,1,0,0,0,739,740,1,0,0,0,740,741,1,0,0,0,741,751,5,116,0,0, - 742,748,10,7,0,0,743,749,3,112,56,0,744,745,5,10,0,0,745,749,3,114,57, - 0,746,747,5,10,0,0,747,749,5,199,0,0,748,743,1,0,0,0,748,744,1,0,0,0, - 748,746,1,0,0,0,749,751,1,0,0,0,750,659,1,0,0,0,750,666,1,0,0,0,750,673, - 1,0,0,0,750,701,1,0,0,0,750,704,1,0,0,0,750,707,1,0,0,0,750,710,1,0,0, - 0,750,719,1,0,0,0,750,725,1,0,0,0,750,730,1,0,0,0,750,733,1,0,0,0,750, - 736,1,0,0,0,750,742,1,0,0,0,751,754,1,0,0,0,752,750,1,0,0,0,752,753,1, - 0,0,0,753,75,1,0,0,0,754,752,1,0,0,0,755,760,3,78,39,0,756,757,5,206, - 0,0,757,759,3,78,39,0,758,756,1,0,0,0,759,762,1,0,0,0,760,758,1,0,0,0, - 760,761,1,0,0,0,761,77,1,0,0,0,762,760,1,0,0,0,763,766,3,80,40,0,764, - 766,3,74,37,0,765,763,1,0,0,0,765,764,1,0,0,0,766,79,1,0,0,0,767,768, - 5,220,0,0,768,773,3,114,57,0,769,770,5,206,0,0,770,772,3,114,57,0,771, - 769,1,0,0,0,772,775,1,0,0,0,773,771,1,0,0,0,773,774,1,0,0,0,774,776,1, - 0,0,0,775,773,1,0,0,0,776,777,5,236,0,0,777,787,1,0,0,0,778,783,3,114, - 57,0,779,780,5,206,0,0,780,782,3,114,57,0,781,779,1,0,0,0,782,785,1,0, - 0,0,783,781,1,0,0,0,783,784,1,0,0,0,784,787,1,0,0,0,785,783,1,0,0,0,786, - 767,1,0,0,0,786,778,1,0,0,0,787,788,1,0,0,0,788,789,5,201,0,0,789,790, - 3,74,37,0,790,81,1,0,0,0,791,796,3,84,42,0,792,793,5,206,0,0,793,795, - 3,84,42,0,794,792,1,0,0,0,795,798,1,0,0,0,796,794,1,0,0,0,796,797,1,0, - 0,0,797,83,1,0,0,0,798,796,1,0,0,0,799,800,3,114,57,0,800,801,5,10,0, - 0,801,802,5,220,0,0,802,803,3,2,1,0,803,804,5,236,0,0,804,810,1,0,0,0, - 805,806,3,74,37,0,806,807,5,10,0,0,807,808,3,114,57,0,808,810,1,0,0,0, - 809,799,1,0,0,0,809,805,1,0,0,0,810,85,1,0,0,0,811,819,5,200,0,0,812, - 813,3,94,47,0,813,814,5,210,0,0,814,816,1,0,0,0,815,812,1,0,0,0,815,816, - 1,0,0,0,816,817,1,0,0,0,817,819,3,88,44,0,818,811,1,0,0,0,818,815,1,0, - 0,0,819,87,1,0,0,0,820,825,3,114,57,0,821,822,5,210,0,0,822,824,3,114, - 57,0,823,821,1,0,0,0,824,827,1,0,0,0,825,823,1,0,0,0,825,826,1,0,0,0, - 826,89,1,0,0,0,827,825,1,0,0,0,828,829,6,45,-1,0,829,837,3,94,47,0,830, - 837,3,92,46,0,831,832,5,220,0,0,832,833,3,2,1,0,833,834,5,236,0,0,834, - 837,1,0,0,0,835,837,5,200,0,0,836,828,1,0,0,0,836,830,1,0,0,0,836,831, - 1,0,0,0,836,835,1,0,0,0,837,846,1,0,0,0,838,842,10,2,0,0,839,843,3,112, - 56,0,840,841,5,10,0,0,841,843,3,114,57,0,842,839,1,0,0,0,842,840,1,0, - 0,0,843,845,1,0,0,0,844,838,1,0,0,0,845,848,1,0,0,0,846,844,1,0,0,0,846, - 847,1,0,0,0,847,91,1,0,0,0,848,846,1,0,0,0,849,850,3,114,57,0,850,852, - 5,220,0,0,851,853,3,96,48,0,852,851,1,0,0,0,852,853,1,0,0,0,853,854,1, - 0,0,0,854,855,5,236,0,0,855,93,1,0,0,0,856,857,3,98,49,0,857,858,5,210, - 0,0,858,860,1,0,0,0,859,856,1,0,0,0,859,860,1,0,0,0,860,861,1,0,0,0,861, - 862,3,114,57,0,862,95,1,0,0,0,863,868,3,74,37,0,864,865,5,206,0,0,865, - 867,3,74,37,0,866,864,1,0,0,0,867,870,1,0,0,0,868,866,1,0,0,0,868,869, - 1,0,0,0,869,97,1,0,0,0,870,868,1,0,0,0,871,872,3,114,57,0,872,99,1,0, - 0,0,873,882,5,195,0,0,874,875,5,210,0,0,875,882,7,11,0,0,876,877,5,197, - 0,0,877,879,5,210,0,0,878,880,7,11,0,0,879,878,1,0,0,0,879,880,1,0,0, - 0,880,882,1,0,0,0,881,873,1,0,0,0,881,874,1,0,0,0,881,876,1,0,0,0,882, - 101,1,0,0,0,883,885,7,12,0,0,884,883,1,0,0,0,884,885,1,0,0,0,885,892, - 1,0,0,0,886,893,3,100,50,0,887,893,5,196,0,0,888,893,5,197,0,0,889,893, - 5,198,0,0,890,893,5,82,0,0,891,893,5,113,0,0,892,886,1,0,0,0,892,887, - 1,0,0,0,892,888,1,0,0,0,892,889,1,0,0,0,892,890,1,0,0,0,892,891,1,0,0, - 0,893,103,1,0,0,0,894,898,3,102,51,0,895,898,5,199,0,0,896,898,5,116, - 0,0,897,894,1,0,0,0,897,895,1,0,0,0,897,896,1,0,0,0,898,105,1,0,0,0,899, - 900,7,13,0,0,900,107,1,0,0,0,901,902,7,14,0,0,902,109,1,0,0,0,903,904, - 7,15,0,0,904,111,1,0,0,0,905,908,5,194,0,0,906,908,3,110,55,0,907,905, - 1,0,0,0,907,906,1,0,0,0,908,113,1,0,0,0,909,913,5,194,0,0,910,913,3,106, - 53,0,911,913,3,108,54,0,912,909,1,0,0,0,912,910,1,0,0,0,912,911,1,0,0, - 0,913,115,1,0,0,0,914,915,5,199,0,0,915,916,5,212,0,0,916,917,3,102,51, - 0,917,117,1,0,0,0,114,120,130,138,141,145,148,152,155,158,161,164,168, - 172,175,178,181,185,188,197,203,224,241,258,264,270,281,283,294,297,303, - 311,317,319,323,328,331,334,338,342,345,347,350,354,358,361,363,365,370, - 381,387,394,399,403,407,412,419,427,430,433,452,466,482,494,506,514,518, - 525,531,540,544,575,592,604,614,617,621,624,636,653,657,663,670,682,686, - 689,698,712,739,748,750,752,760,765,773,783,786,796,809,815,818,825,836, - 842,846,852,859,868,879,881,884,892,897,907,912 + 37,1,37,1,37,1,37,3,37,743,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3, + 37,752,8,37,5,37,754,8,37,10,37,12,37,757,9,37,1,38,1,38,1,38,5,38,762, + 8,38,10,38,12,38,765,9,38,1,39,1,39,3,39,769,8,39,1,40,1,40,1,40,1,40, + 5,40,775,8,40,10,40,12,40,778,9,40,1,40,1,40,1,40,1,40,1,40,5,40,785, + 8,40,10,40,12,40,788,9,40,3,40,790,8,40,1,40,1,40,1,40,1,41,1,41,1,41, + 5,41,798,8,41,10,41,12,41,801,9,41,1,42,1,42,1,42,1,42,1,42,1,42,1,42, + 1,42,1,42,1,42,3,42,813,8,42,1,43,1,43,1,43,1,43,3,43,819,8,43,1,43,3, + 43,822,8,43,1,44,1,44,1,44,5,44,827,8,44,10,44,12,44,830,9,44,1,45,1, + 45,1,45,1,45,1,45,1,45,1,45,1,45,3,45,840,8,45,1,45,1,45,1,45,1,45,3, + 45,846,8,45,5,45,848,8,45,10,45,12,45,851,9,45,1,46,1,46,1,46,3,46,856, + 8,46,1,46,1,46,1,47,1,47,1,47,3,47,863,8,47,1,47,1,47,1,48,1,48,1,48, + 5,48,870,8,48,10,48,12,48,873,9,48,1,49,1,49,1,50,1,50,1,50,1,50,1,50, + 1,50,3,50,883,8,50,3,50,885,8,50,1,51,3,51,888,8,51,1,51,1,51,1,51,1, + 51,1,51,1,51,3,51,896,8,51,1,52,1,52,1,52,3,52,901,8,52,1,53,1,53,1,54, + 1,54,1,55,1,55,1,56,1,56,3,56,911,8,56,1,57,1,57,1,57,3,57,916,8,57,1, + 58,1,58,1,58,1,58,1,58,0,3,36,74,90,59,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,0,16,2,0,32,32,141,141,2,0,84,84,96,96,3,0,4,4,8,8,12,12, + 4,0,4,4,7,8,12,12,147,147,2,0,96,96,140,140,2,0,4,4,8,8,2,0,11,11,42, + 43,2,0,62,62,93,93,2,0,133,133,143,143,3,0,17,17,95,95,170,170,2,0,79, + 79,98,98,1,0,196,197,2,0,208,208,228,228,8,0,37,37,76,76,108,108,110, + 110,132,132,145,145,185,185,190,190,13,0,2,24,26,36,38,75,77,81,83,107, + 109,109,111,112,114,115,117,130,133,144,146,184,186,189,191,192,4,0,36, + 36,62,62,77,77,91,91,1043,0,120,1,0,0,0,2,124,1,0,0,0,4,138,1,0,0,0,6, + 141,1,0,0,0,8,190,1,0,0,0,10,193,1,0,0,0,12,199,1,0,0,0,14,203,1,0,0, + 0,16,209,1,0,0,0,18,227,1,0,0,0,20,230,1,0,0,0,22,233,1,0,0,0,24,243, + 1,0,0,0,26,246,1,0,0,0,28,250,1,0,0,0,30,283,1,0,0,0,32,285,1,0,0,0,34, + 288,1,0,0,0,36,303,1,0,0,0,38,365,1,0,0,0,40,370,1,0,0,0,42,381,1,0,0, + 0,44,383,1,0,0,0,46,389,1,0,0,0,48,397,1,0,0,0,50,415,1,0,0,0,52,417, + 1,0,0,0,54,425,1,0,0,0,56,430,1,0,0,0,58,438,1,0,0,0,60,442,1,0,0,0,62, + 446,1,0,0,0,64,455,1,0,0,0,66,469,1,0,0,0,68,471,1,0,0,0,70,521,1,0,0, + 0,72,523,1,0,0,0,74,660,1,0,0,0,76,758,1,0,0,0,78,768,1,0,0,0,80,789, + 1,0,0,0,82,794,1,0,0,0,84,812,1,0,0,0,86,821,1,0,0,0,88,823,1,0,0,0,90, + 839,1,0,0,0,92,852,1,0,0,0,94,862,1,0,0,0,96,866,1,0,0,0,98,874,1,0,0, + 0,100,884,1,0,0,0,102,887,1,0,0,0,104,900,1,0,0,0,106,902,1,0,0,0,108, + 904,1,0,0,0,110,906,1,0,0,0,112,910,1,0,0,0,114,915,1,0,0,0,116,917,1, + 0,0,0,118,121,3,2,1,0,119,121,3,6,3,0,120,118,1,0,0,0,120,119,1,0,0,0, + 121,122,1,0,0,0,122,123,5,0,0,1,123,1,1,0,0,0,124,130,3,4,2,0,125,126, + 5,176,0,0,126,127,5,4,0,0,127,129,3,4,2,0,128,125,1,0,0,0,129,132,1,0, + 0,0,130,128,1,0,0,0,130,131,1,0,0,0,131,3,1,0,0,0,132,130,1,0,0,0,133, + 139,3,6,3,0,134,135,5,220,0,0,135,136,3,2,1,0,136,137,5,236,0,0,137,139, + 1,0,0,0,138,133,1,0,0,0,138,134,1,0,0,0,139,5,1,0,0,0,140,142,3,8,4,0, + 141,140,1,0,0,0,141,142,1,0,0,0,142,143,1,0,0,0,143,145,5,146,0,0,144, + 146,5,49,0,0,145,144,1,0,0,0,145,146,1,0,0,0,146,148,1,0,0,0,147,149, + 3,10,5,0,148,147,1,0,0,0,148,149,1,0,0,0,149,150,1,0,0,0,150,152,3,72, + 36,0,151,153,3,12,6,0,152,151,1,0,0,0,152,153,1,0,0,0,153,155,1,0,0,0, + 154,156,3,14,7,0,155,154,1,0,0,0,155,156,1,0,0,0,156,158,1,0,0,0,157, + 159,3,18,9,0,158,157,1,0,0,0,158,159,1,0,0,0,159,161,1,0,0,0,160,162, + 3,20,10,0,161,160,1,0,0,0,161,162,1,0,0,0,162,164,1,0,0,0,163,165,3,22, + 11,0,164,163,1,0,0,0,164,165,1,0,0,0,165,168,1,0,0,0,166,167,5,189,0, + 0,167,169,7,0,0,0,168,166,1,0,0,0,168,169,1,0,0,0,169,172,1,0,0,0,170, + 171,5,189,0,0,171,173,5,169,0,0,172,170,1,0,0,0,172,173,1,0,0,0,173,175, + 1,0,0,0,174,176,3,24,12,0,175,174,1,0,0,0,175,176,1,0,0,0,176,178,1,0, + 0,0,177,179,3,16,8,0,178,177,1,0,0,0,178,179,1,0,0,0,179,181,1,0,0,0, + 180,182,3,26,13,0,181,180,1,0,0,0,181,182,1,0,0,0,182,185,1,0,0,0,183, + 186,3,30,15,0,184,186,3,32,16,0,185,183,1,0,0,0,185,184,1,0,0,0,185,186, + 1,0,0,0,186,188,1,0,0,0,187,189,3,34,17,0,188,187,1,0,0,0,188,189,1,0, + 0,0,189,7,1,0,0,0,190,191,5,189,0,0,191,192,3,82,41,0,192,9,1,0,0,0,193, + 194,5,168,0,0,194,197,5,197,0,0,195,196,5,189,0,0,196,198,5,164,0,0,197, + 195,1,0,0,0,197,198,1,0,0,0,198,11,1,0,0,0,199,200,5,68,0,0,200,201,3, + 36,18,0,201,13,1,0,0,0,202,204,7,1,0,0,203,202,1,0,0,0,203,204,1,0,0, + 0,204,205,1,0,0,0,205,206,5,9,0,0,206,207,5,90,0,0,207,208,3,72,36,0, + 208,15,1,0,0,0,209,210,5,188,0,0,210,211,3,114,57,0,211,212,5,10,0,0, + 212,213,5,220,0,0,213,214,3,56,28,0,214,224,5,236,0,0,215,216,5,206,0, + 0,216,217,3,114,57,0,217,218,5,10,0,0,218,219,5,220,0,0,219,220,3,56, + 28,0,220,221,5,236,0,0,221,223,1,0,0,0,222,215,1,0,0,0,223,226,1,0,0, + 0,224,222,1,0,0,0,224,225,1,0,0,0,225,17,1,0,0,0,226,224,1,0,0,0,227, + 228,5,129,0,0,228,229,3,74,37,0,229,19,1,0,0,0,230,231,5,187,0,0,231, + 232,3,74,37,0,232,21,1,0,0,0,233,234,5,73,0,0,234,241,5,18,0,0,235,236, + 7,0,0,0,236,237,5,220,0,0,237,238,3,72,36,0,238,239,5,236,0,0,239,242, + 1,0,0,0,240,242,3,72,36,0,241,235,1,0,0,0,241,240,1,0,0,0,242,23,1,0, + 0,0,243,244,5,74,0,0,244,245,3,74,37,0,245,25,1,0,0,0,246,247,5,122,0, + 0,247,248,5,18,0,0,248,249,3,46,23,0,249,27,1,0,0,0,250,251,5,122,0,0, + 251,252,5,18,0,0,252,253,3,72,36,0,253,29,1,0,0,0,254,255,5,99,0,0,255, + 258,3,74,37,0,256,257,5,206,0,0,257,259,3,74,37,0,258,256,1,0,0,0,258, + 259,1,0,0,0,259,264,1,0,0,0,260,261,5,189,0,0,261,265,5,164,0,0,262,263, + 5,18,0,0,263,265,3,72,36,0,264,260,1,0,0,0,264,262,1,0,0,0,264,265,1, + 0,0,0,265,284,1,0,0,0,266,267,5,99,0,0,267,270,3,74,37,0,268,269,5,189, + 0,0,269,271,5,164,0,0,270,268,1,0,0,0,270,271,1,0,0,0,271,272,1,0,0,0, + 272,273,5,118,0,0,273,274,3,74,37,0,274,284,1,0,0,0,275,276,5,99,0,0, + 276,277,3,74,37,0,277,278,5,118,0,0,278,281,3,74,37,0,279,280,5,18,0, + 0,280,282,3,72,36,0,281,279,1,0,0,0,281,282,1,0,0,0,282,284,1,0,0,0,283, + 254,1,0,0,0,283,266,1,0,0,0,283,275,1,0,0,0,284,31,1,0,0,0,285,286,5, + 118,0,0,286,287,3,74,37,0,287,33,1,0,0,0,288,289,5,150,0,0,289,290,3, + 52,26,0,290,35,1,0,0,0,291,292,6,18,-1,0,292,294,3,90,45,0,293,295,5, + 61,0,0,294,293,1,0,0,0,294,295,1,0,0,0,295,297,1,0,0,0,296,298,3,44,22, + 0,297,296,1,0,0,0,297,298,1,0,0,0,298,304,1,0,0,0,299,300,5,220,0,0,300, + 301,3,36,18,0,301,302,5,236,0,0,302,304,1,0,0,0,303,291,1,0,0,0,303,299, + 1,0,0,0,304,319,1,0,0,0,305,306,10,3,0,0,306,307,3,40,20,0,307,308,3, + 36,18,4,308,318,1,0,0,0,309,311,10,4,0,0,310,312,3,38,19,0,311,310,1, + 0,0,0,311,312,1,0,0,0,312,313,1,0,0,0,313,314,5,90,0,0,314,315,3,36,18, + 0,315,316,3,42,21,0,316,318,1,0,0,0,317,305,1,0,0,0,317,309,1,0,0,0,318, + 321,1,0,0,0,319,317,1,0,0,0,319,320,1,0,0,0,320,37,1,0,0,0,321,319,1, + 0,0,0,322,324,7,2,0,0,323,322,1,0,0,0,323,324,1,0,0,0,324,325,1,0,0,0, + 325,332,5,84,0,0,326,328,5,84,0,0,327,329,7,2,0,0,328,327,1,0,0,0,328, + 329,1,0,0,0,329,332,1,0,0,0,330,332,7,2,0,0,331,323,1,0,0,0,331,326,1, + 0,0,0,331,330,1,0,0,0,332,366,1,0,0,0,333,335,7,3,0,0,334,333,1,0,0,0, + 334,335,1,0,0,0,335,336,1,0,0,0,336,338,7,4,0,0,337,339,5,123,0,0,338, + 337,1,0,0,0,338,339,1,0,0,0,339,348,1,0,0,0,340,342,7,4,0,0,341,343,5, + 123,0,0,342,341,1,0,0,0,342,343,1,0,0,0,343,345,1,0,0,0,344,346,7,3,0, + 0,345,344,1,0,0,0,345,346,1,0,0,0,346,348,1,0,0,0,347,334,1,0,0,0,347, + 340,1,0,0,0,348,366,1,0,0,0,349,351,7,5,0,0,350,349,1,0,0,0,350,351,1, + 0,0,0,351,352,1,0,0,0,352,354,5,69,0,0,353,355,5,123,0,0,354,353,1,0, + 0,0,354,355,1,0,0,0,355,364,1,0,0,0,356,358,5,69,0,0,357,359,5,123,0, + 0,358,357,1,0,0,0,358,359,1,0,0,0,359,361,1,0,0,0,360,362,7,5,0,0,361, + 360,1,0,0,0,361,362,1,0,0,0,362,364,1,0,0,0,363,350,1,0,0,0,363,356,1, + 0,0,0,364,366,1,0,0,0,365,331,1,0,0,0,365,347,1,0,0,0,365,363,1,0,0,0, + 366,39,1,0,0,0,367,368,5,31,0,0,368,371,5,90,0,0,369,371,5,206,0,0,370, + 367,1,0,0,0,370,369,1,0,0,0,371,41,1,0,0,0,372,373,5,119,0,0,373,382, + 3,72,36,0,374,375,5,179,0,0,375,376,5,220,0,0,376,377,3,72,36,0,377,378, + 5,236,0,0,378,382,1,0,0,0,379,380,5,179,0,0,380,382,3,72,36,0,381,372, + 1,0,0,0,381,374,1,0,0,0,381,379,1,0,0,0,382,43,1,0,0,0,383,384,5,144, + 0,0,384,387,3,50,25,0,385,386,5,118,0,0,386,388,3,50,25,0,387,385,1,0, + 0,0,387,388,1,0,0,0,388,45,1,0,0,0,389,394,3,48,24,0,390,391,5,206,0, + 0,391,393,3,48,24,0,392,390,1,0,0,0,393,396,1,0,0,0,394,392,1,0,0,0,394, + 395,1,0,0,0,395,47,1,0,0,0,396,394,1,0,0,0,397,399,3,74,37,0,398,400, + 7,6,0,0,399,398,1,0,0,0,399,400,1,0,0,0,400,403,1,0,0,0,401,402,5,117, + 0,0,402,404,7,7,0,0,403,401,1,0,0,0,403,404,1,0,0,0,404,407,1,0,0,0,405, + 406,5,26,0,0,406,408,5,199,0,0,407,405,1,0,0,0,407,408,1,0,0,0,408,49, + 1,0,0,0,409,416,5,200,0,0,410,413,3,102,51,0,411,412,5,238,0,0,412,414, + 3,102,51,0,413,411,1,0,0,0,413,414,1,0,0,0,414,416,1,0,0,0,415,409,1, + 0,0,0,415,410,1,0,0,0,416,51,1,0,0,0,417,422,3,54,27,0,418,419,5,206, + 0,0,419,421,3,54,27,0,420,418,1,0,0,0,421,424,1,0,0,0,422,420,1,0,0,0, + 422,423,1,0,0,0,423,53,1,0,0,0,424,422,1,0,0,0,425,426,3,114,57,0,426, + 427,5,212,0,0,427,428,3,104,52,0,428,55,1,0,0,0,429,431,3,58,29,0,430, + 429,1,0,0,0,430,431,1,0,0,0,431,433,1,0,0,0,432,434,3,60,30,0,433,432, + 1,0,0,0,433,434,1,0,0,0,434,436,1,0,0,0,435,437,3,62,31,0,436,435,1,0, + 0,0,436,437,1,0,0,0,437,57,1,0,0,0,438,439,5,126,0,0,439,440,5,18,0,0, + 440,441,3,72,36,0,441,59,1,0,0,0,442,443,5,122,0,0,443,444,5,18,0,0,444, + 445,3,46,23,0,445,61,1,0,0,0,446,447,7,8,0,0,447,448,3,64,32,0,448,63, + 1,0,0,0,449,456,3,66,33,0,450,451,5,16,0,0,451,452,3,66,33,0,452,453, + 5,6,0,0,453,454,3,66,33,0,454,456,1,0,0,0,455,449,1,0,0,0,455,450,1,0, + 0,0,456,65,1,0,0,0,457,458,5,33,0,0,458,470,5,142,0,0,459,460,5,175,0, + 0,460,470,5,128,0,0,461,462,5,175,0,0,462,470,5,64,0,0,463,464,3,102, + 51,0,464,465,5,128,0,0,465,470,1,0,0,0,466,467,3,102,51,0,467,468,5,64, + 0,0,468,470,1,0,0,0,469,457,1,0,0,0,469,459,1,0,0,0,469,461,1,0,0,0,469, + 463,1,0,0,0,469,466,1,0,0,0,470,67,1,0,0,0,471,472,3,74,37,0,472,473, + 5,0,0,1,473,69,1,0,0,0,474,522,3,114,57,0,475,476,3,114,57,0,476,477, + 5,220,0,0,477,478,3,114,57,0,478,485,3,70,35,0,479,480,5,206,0,0,480, + 481,3,114,57,0,481,482,3,70,35,0,482,484,1,0,0,0,483,479,1,0,0,0,484, + 487,1,0,0,0,485,483,1,0,0,0,485,486,1,0,0,0,486,488,1,0,0,0,487,485,1, + 0,0,0,488,489,5,236,0,0,489,522,1,0,0,0,490,491,3,114,57,0,491,492,5, + 220,0,0,492,497,3,116,58,0,493,494,5,206,0,0,494,496,3,116,58,0,495,493, + 1,0,0,0,496,499,1,0,0,0,497,495,1,0,0,0,497,498,1,0,0,0,498,500,1,0,0, + 0,499,497,1,0,0,0,500,501,5,236,0,0,501,522,1,0,0,0,502,503,3,114,57, + 0,503,504,5,220,0,0,504,509,3,70,35,0,505,506,5,206,0,0,506,508,3,70, + 35,0,507,505,1,0,0,0,508,511,1,0,0,0,509,507,1,0,0,0,509,510,1,0,0,0, + 510,512,1,0,0,0,511,509,1,0,0,0,512,513,5,236,0,0,513,522,1,0,0,0,514, + 515,3,114,57,0,515,517,5,220,0,0,516,518,3,72,36,0,517,516,1,0,0,0,517, + 518,1,0,0,0,518,519,1,0,0,0,519,520,5,236,0,0,520,522,1,0,0,0,521,474, + 1,0,0,0,521,475,1,0,0,0,521,490,1,0,0,0,521,502,1,0,0,0,521,514,1,0,0, + 0,522,71,1,0,0,0,523,528,3,74,37,0,524,525,5,206,0,0,525,527,3,74,37, + 0,526,524,1,0,0,0,527,530,1,0,0,0,528,526,1,0,0,0,528,529,1,0,0,0,529, + 73,1,0,0,0,530,528,1,0,0,0,531,532,6,37,-1,0,532,534,5,19,0,0,533,535, + 3,74,37,0,534,533,1,0,0,0,534,535,1,0,0,0,535,541,1,0,0,0,536,537,5,186, + 0,0,537,538,3,74,37,0,538,539,5,163,0,0,539,540,3,74,37,0,540,542,1,0, + 0,0,541,536,1,0,0,0,542,543,1,0,0,0,543,541,1,0,0,0,543,544,1,0,0,0,544, + 547,1,0,0,0,545,546,5,52,0,0,546,548,3,74,37,0,547,545,1,0,0,0,547,548, + 1,0,0,0,548,549,1,0,0,0,549,550,5,53,0,0,550,661,1,0,0,0,551,552,5,20, + 0,0,552,553,5,220,0,0,553,554,3,74,37,0,554,555,5,10,0,0,555,556,3,70, + 35,0,556,557,5,236,0,0,557,661,1,0,0,0,558,559,5,36,0,0,559,661,5,199, + 0,0,560,561,5,59,0,0,561,562,5,220,0,0,562,563,3,106,53,0,563,564,5,68, + 0,0,564,565,3,74,37,0,565,566,5,236,0,0,566,661,1,0,0,0,567,568,5,86, + 0,0,568,569,3,74,37,0,569,570,3,106,53,0,570,661,1,0,0,0,571,572,5,155, + 0,0,572,573,5,220,0,0,573,574,3,74,37,0,574,575,5,68,0,0,575,578,3,74, + 37,0,576,577,5,65,0,0,577,579,3,74,37,0,578,576,1,0,0,0,578,579,1,0,0, + 0,579,580,1,0,0,0,580,581,5,236,0,0,581,661,1,0,0,0,582,583,5,166,0,0, + 583,661,5,199,0,0,584,585,5,171,0,0,585,586,5,220,0,0,586,587,7,9,0,0, + 587,588,5,199,0,0,588,589,5,68,0,0,589,590,3,74,37,0,590,591,5,236,0, + 0,591,661,1,0,0,0,592,593,3,114,57,0,593,595,5,220,0,0,594,596,3,72,36, + 0,595,594,1,0,0,0,595,596,1,0,0,0,596,597,1,0,0,0,597,598,5,236,0,0,598, + 599,1,0,0,0,599,600,5,125,0,0,600,601,5,220,0,0,601,602,3,56,28,0,602, + 603,5,236,0,0,603,661,1,0,0,0,604,605,3,114,57,0,605,607,5,220,0,0,606, + 608,3,72,36,0,607,606,1,0,0,0,607,608,1,0,0,0,608,609,1,0,0,0,609,610, + 5,236,0,0,610,611,1,0,0,0,611,612,5,125,0,0,612,613,3,114,57,0,613,661, + 1,0,0,0,614,620,3,114,57,0,615,617,5,220,0,0,616,618,3,72,36,0,617,616, + 1,0,0,0,617,618,1,0,0,0,618,619,1,0,0,0,619,621,5,236,0,0,620,615,1,0, + 0,0,620,621,1,0,0,0,621,622,1,0,0,0,622,624,5,220,0,0,623,625,5,49,0, + 0,624,623,1,0,0,0,624,625,1,0,0,0,625,627,1,0,0,0,626,628,3,76,38,0,627, + 626,1,0,0,0,627,628,1,0,0,0,628,629,1,0,0,0,629,630,5,236,0,0,630,661, + 1,0,0,0,631,661,3,104,52,0,632,633,5,208,0,0,633,661,3,74,37,18,634,635, + 5,115,0,0,635,661,3,74,37,12,636,637,3,94,47,0,637,638,5,210,0,0,638, + 640,1,0,0,0,639,636,1,0,0,0,639,640,1,0,0,0,640,641,1,0,0,0,641,661,5, + 202,0,0,642,643,5,220,0,0,643,644,3,2,1,0,644,645,5,236,0,0,645,661,1, + 0,0,0,646,647,5,220,0,0,647,648,3,74,37,0,648,649,5,236,0,0,649,661,1, + 0,0,0,650,651,5,220,0,0,651,652,3,72,36,0,652,653,5,236,0,0,653,661,1, + 0,0,0,654,656,5,219,0,0,655,657,3,72,36,0,656,655,1,0,0,0,656,657,1,0, + 0,0,657,658,1,0,0,0,658,661,5,235,0,0,659,661,3,86,43,0,660,531,1,0,0, + 0,660,551,1,0,0,0,660,558,1,0,0,0,660,560,1,0,0,0,660,567,1,0,0,0,660, + 571,1,0,0,0,660,582,1,0,0,0,660,584,1,0,0,0,660,592,1,0,0,0,660,604,1, + 0,0,0,660,614,1,0,0,0,660,631,1,0,0,0,660,632,1,0,0,0,660,634,1,0,0,0, + 660,639,1,0,0,0,660,642,1,0,0,0,660,646,1,0,0,0,660,650,1,0,0,0,660,654, + 1,0,0,0,660,659,1,0,0,0,661,755,1,0,0,0,662,666,10,17,0,0,663,667,5,202, + 0,0,664,667,5,238,0,0,665,667,5,227,0,0,666,663,1,0,0,0,666,664,1,0,0, + 0,666,665,1,0,0,0,667,668,1,0,0,0,668,754,3,74,37,18,669,673,10,16,0, + 0,670,674,5,228,0,0,671,674,5,208,0,0,672,674,5,207,0,0,673,670,1,0,0, + 0,673,671,1,0,0,0,673,672,1,0,0,0,674,675,1,0,0,0,675,754,3,74,37,17, + 676,701,10,15,0,0,677,702,5,211,0,0,678,702,5,212,0,0,679,702,5,223,0, + 0,680,702,5,221,0,0,681,702,5,222,0,0,682,702,5,213,0,0,683,702,5,214, + 0,0,684,686,5,115,0,0,685,684,1,0,0,0,685,686,1,0,0,0,686,687,1,0,0,0, + 687,689,5,80,0,0,688,690,5,25,0,0,689,688,1,0,0,0,689,690,1,0,0,0,690, + 702,1,0,0,0,691,693,5,115,0,0,692,691,1,0,0,0,692,693,1,0,0,0,693,694, + 1,0,0,0,694,702,7,10,0,0,695,702,5,232,0,0,696,702,5,233,0,0,697,702, + 5,225,0,0,698,702,5,216,0,0,699,702,5,217,0,0,700,702,5,224,0,0,701,677, + 1,0,0,0,701,678,1,0,0,0,701,679,1,0,0,0,701,680,1,0,0,0,701,681,1,0,0, + 0,701,682,1,0,0,0,701,683,1,0,0,0,701,685,1,0,0,0,701,692,1,0,0,0,701, + 695,1,0,0,0,701,696,1,0,0,0,701,697,1,0,0,0,701,698,1,0,0,0,701,699,1, + 0,0,0,701,700,1,0,0,0,702,703,1,0,0,0,703,754,3,74,37,16,704,705,10,13, + 0,0,705,706,5,226,0,0,706,754,3,74,37,14,707,708,10,11,0,0,708,709,5, + 6,0,0,709,754,3,74,37,12,710,711,10,10,0,0,711,712,5,121,0,0,712,754, + 3,74,37,11,713,715,10,9,0,0,714,716,5,115,0,0,715,714,1,0,0,0,715,716, + 1,0,0,0,716,717,1,0,0,0,717,718,5,16,0,0,718,719,3,74,37,0,719,720,5, + 6,0,0,720,721,3,74,37,10,721,754,1,0,0,0,722,723,10,8,0,0,723,724,5,229, + 0,0,724,725,3,74,37,0,725,726,5,205,0,0,726,727,3,74,37,8,727,754,1,0, + 0,0,728,729,10,21,0,0,729,730,5,219,0,0,730,731,3,74,37,0,731,732,5,235, + 0,0,732,754,1,0,0,0,733,734,10,20,0,0,734,735,5,210,0,0,735,754,5,197, + 0,0,736,737,10,19,0,0,737,738,5,210,0,0,738,754,3,114,57,0,739,740,10, + 14,0,0,740,742,5,88,0,0,741,743,5,115,0,0,742,741,1,0,0,0,742,743,1,0, + 0,0,743,744,1,0,0,0,744,754,5,116,0,0,745,751,10,7,0,0,746,752,3,112, + 56,0,747,748,5,10,0,0,748,752,3,114,57,0,749,750,5,10,0,0,750,752,5,199, + 0,0,751,746,1,0,0,0,751,747,1,0,0,0,751,749,1,0,0,0,752,754,1,0,0,0,753, + 662,1,0,0,0,753,669,1,0,0,0,753,676,1,0,0,0,753,704,1,0,0,0,753,707,1, + 0,0,0,753,710,1,0,0,0,753,713,1,0,0,0,753,722,1,0,0,0,753,728,1,0,0,0, + 753,733,1,0,0,0,753,736,1,0,0,0,753,739,1,0,0,0,753,745,1,0,0,0,754,757, + 1,0,0,0,755,753,1,0,0,0,755,756,1,0,0,0,756,75,1,0,0,0,757,755,1,0,0, + 0,758,763,3,78,39,0,759,760,5,206,0,0,760,762,3,78,39,0,761,759,1,0,0, + 0,762,765,1,0,0,0,763,761,1,0,0,0,763,764,1,0,0,0,764,77,1,0,0,0,765, + 763,1,0,0,0,766,769,3,80,40,0,767,769,3,74,37,0,768,766,1,0,0,0,768,767, + 1,0,0,0,769,79,1,0,0,0,770,771,5,220,0,0,771,776,3,114,57,0,772,773,5, + 206,0,0,773,775,3,114,57,0,774,772,1,0,0,0,775,778,1,0,0,0,776,774,1, + 0,0,0,776,777,1,0,0,0,777,779,1,0,0,0,778,776,1,0,0,0,779,780,5,236,0, + 0,780,790,1,0,0,0,781,786,3,114,57,0,782,783,5,206,0,0,783,785,3,114, + 57,0,784,782,1,0,0,0,785,788,1,0,0,0,786,784,1,0,0,0,786,787,1,0,0,0, + 787,790,1,0,0,0,788,786,1,0,0,0,789,770,1,0,0,0,789,781,1,0,0,0,790,791, + 1,0,0,0,791,792,5,201,0,0,792,793,3,74,37,0,793,81,1,0,0,0,794,799,3, + 84,42,0,795,796,5,206,0,0,796,798,3,84,42,0,797,795,1,0,0,0,798,801,1, + 0,0,0,799,797,1,0,0,0,799,800,1,0,0,0,800,83,1,0,0,0,801,799,1,0,0,0, + 802,803,3,114,57,0,803,804,5,10,0,0,804,805,5,220,0,0,805,806,3,2,1,0, + 806,807,5,236,0,0,807,813,1,0,0,0,808,809,3,74,37,0,809,810,5,10,0,0, + 810,811,3,114,57,0,811,813,1,0,0,0,812,802,1,0,0,0,812,808,1,0,0,0,813, + 85,1,0,0,0,814,822,5,200,0,0,815,816,3,94,47,0,816,817,5,210,0,0,817, + 819,1,0,0,0,818,815,1,0,0,0,818,819,1,0,0,0,819,820,1,0,0,0,820,822,3, + 88,44,0,821,814,1,0,0,0,821,818,1,0,0,0,822,87,1,0,0,0,823,828,3,114, + 57,0,824,825,5,210,0,0,825,827,3,114,57,0,826,824,1,0,0,0,827,830,1,0, + 0,0,828,826,1,0,0,0,828,829,1,0,0,0,829,89,1,0,0,0,830,828,1,0,0,0,831, + 832,6,45,-1,0,832,840,3,94,47,0,833,840,3,92,46,0,834,835,5,220,0,0,835, + 836,3,2,1,0,836,837,5,236,0,0,837,840,1,0,0,0,838,840,5,200,0,0,839,831, + 1,0,0,0,839,833,1,0,0,0,839,834,1,0,0,0,839,838,1,0,0,0,840,849,1,0,0, + 0,841,845,10,2,0,0,842,846,3,112,56,0,843,844,5,10,0,0,844,846,3,114, + 57,0,845,842,1,0,0,0,845,843,1,0,0,0,846,848,1,0,0,0,847,841,1,0,0,0, + 848,851,1,0,0,0,849,847,1,0,0,0,849,850,1,0,0,0,850,91,1,0,0,0,851,849, + 1,0,0,0,852,853,3,114,57,0,853,855,5,220,0,0,854,856,3,96,48,0,855,854, + 1,0,0,0,855,856,1,0,0,0,856,857,1,0,0,0,857,858,5,236,0,0,858,93,1,0, + 0,0,859,860,3,98,49,0,860,861,5,210,0,0,861,863,1,0,0,0,862,859,1,0,0, + 0,862,863,1,0,0,0,863,864,1,0,0,0,864,865,3,114,57,0,865,95,1,0,0,0,866, + 871,3,74,37,0,867,868,5,206,0,0,868,870,3,74,37,0,869,867,1,0,0,0,870, + 873,1,0,0,0,871,869,1,0,0,0,871,872,1,0,0,0,872,97,1,0,0,0,873,871,1, + 0,0,0,874,875,3,114,57,0,875,99,1,0,0,0,876,885,5,195,0,0,877,878,5,210, + 0,0,878,885,7,11,0,0,879,880,5,197,0,0,880,882,5,210,0,0,881,883,7,11, + 0,0,882,881,1,0,0,0,882,883,1,0,0,0,883,885,1,0,0,0,884,876,1,0,0,0,884, + 877,1,0,0,0,884,879,1,0,0,0,885,101,1,0,0,0,886,888,7,12,0,0,887,886, + 1,0,0,0,887,888,1,0,0,0,888,895,1,0,0,0,889,896,3,100,50,0,890,896,5, + 196,0,0,891,896,5,197,0,0,892,896,5,198,0,0,893,896,5,82,0,0,894,896, + 5,113,0,0,895,889,1,0,0,0,895,890,1,0,0,0,895,891,1,0,0,0,895,892,1,0, + 0,0,895,893,1,0,0,0,895,894,1,0,0,0,896,103,1,0,0,0,897,901,3,102,51, + 0,898,901,5,199,0,0,899,901,5,116,0,0,900,897,1,0,0,0,900,898,1,0,0,0, + 900,899,1,0,0,0,901,105,1,0,0,0,902,903,7,13,0,0,903,107,1,0,0,0,904, + 905,7,14,0,0,905,109,1,0,0,0,906,907,7,15,0,0,907,111,1,0,0,0,908,911, + 5,194,0,0,909,911,3,110,55,0,910,908,1,0,0,0,910,909,1,0,0,0,911,113, + 1,0,0,0,912,916,5,194,0,0,913,916,3,106,53,0,914,916,3,108,54,0,915,912, + 1,0,0,0,915,913,1,0,0,0,915,914,1,0,0,0,916,115,1,0,0,0,917,918,5,199, + 0,0,918,919,5,212,0,0,919,920,3,102,51,0,920,117,1,0,0,0,115,120,130, + 138,141,145,148,152,155,158,161,164,168,172,175,178,181,185,188,197,203, + 224,241,258,264,270,281,283,294,297,303,311,317,319,323,328,331,334,338, + 342,345,347,350,354,358,361,363,365,370,381,387,394,399,403,407,413,415, + 422,430,433,436,455,469,485,497,509,517,521,528,534,543,547,578,595,607, + 617,620,624,627,639,656,660,666,673,685,689,692,701,715,742,751,753,755, + 763,768,776,786,789,799,812,818,821,828,839,845,849,855,862,871,882,884, + 887,895,900,910,915 }; staticData->serializedATN = antlr4::atn::SerializedATNView(serializedATNSegment, sizeof(serializedATNSegment) / sizeof(serializedATNSegment[0])); @@ -3248,6 +3250,10 @@ HogQLParser::RatioExprContext::RatioExprContext(ParserRuleContext *parent, size_ : ParserRuleContext(parent, invokingState) { } +tree::TerminalNode* HogQLParser::RatioExprContext::PLACEHOLDER() { + return getToken(HogQLParser::PLACEHOLDER, 0); +} + std::vector HogQLParser::RatioExprContext::numberLiteral() { return getRuleContexts(); } @@ -3285,23 +3291,48 @@ HogQLParser::RatioExprContext* HogQLParser::ratioExpr() { exitRule(); }); try { - enterOuterAlt(_localctx, 1); - setState(409); - numberLiteral(); - setState(412); + setState(415); _errHandler->sync(this); + switch (_input->LA(1)) { + case HogQLParser::PLACEHOLDER: { + enterOuterAlt(_localctx, 1); + setState(409); + match(HogQLParser::PLACEHOLDER); + break; + } - switch (getInterpreter()->adaptivePredict(_input, 54, _ctx)) { - case 1: { - setState(410); - match(HogQLParser::SLASH); - setState(411); - numberLiteral(); - break; - } + case HogQLParser::INF: + case HogQLParser::NAN_SQL: + case HogQLParser::FLOATING_LITERAL: + case HogQLParser::OCTAL_LITERAL: + case HogQLParser::DECIMAL_LITERAL: + case HogQLParser::HEXADECIMAL_LITERAL: + case HogQLParser::DASH: + case HogQLParser::DOT: + case HogQLParser::PLUS: { + enterOuterAlt(_localctx, 2); + setState(410); + numberLiteral(); + setState(413); + _errHandler->sync(this); + + switch (getInterpreter()->adaptivePredict(_input, 54, _ctx)) { + case 1: { + setState(411); + match(HogQLParser::SLASH); + setState(412); + numberLiteral(); + break; + } + + default: + break; + } + break; + } default: - break; + throw NoViableAltException(this); } } @@ -3363,17 +3394,17 @@ HogQLParser::SettingExprListContext* HogQLParser::settingExprList() { }); try { enterOuterAlt(_localctx, 1); - setState(414); + setState(417); settingExpr(); - setState(419); + setState(422); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(415); + setState(418); match(HogQLParser::COMMA); - setState(416); + setState(419); settingExpr(); - setState(421); + setState(424); _errHandler->sync(this); _la = _input->LA(1); } @@ -3432,11 +3463,11 @@ HogQLParser::SettingExprContext* HogQLParser::settingExpr() { }); try { enterOuterAlt(_localctx, 1); - setState(422); + setState(425); identifier(); - setState(423); + setState(426); match(HogQLParser::EQ_SINGLE); - setState(424); + setState(427); literal(); } @@ -3494,30 +3525,30 @@ HogQLParser::WindowExprContext* HogQLParser::windowExpr() { }); try { enterOuterAlt(_localctx, 1); - setState(427); + setState(430); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::PARTITION) { - setState(426); + setState(429); winPartitionByClause(); } - setState(430); + setState(433); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::ORDER) { - setState(429); + setState(432); winOrderByClause(); } - setState(433); + setState(436); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::RANGE || _la == HogQLParser::ROWS) { - setState(432); + setState(435); winFrameClause(); } @@ -3575,11 +3606,11 @@ HogQLParser::WinPartitionByClauseContext* HogQLParser::winPartitionByClause() { }); try { enterOuterAlt(_localctx, 1); - setState(435); + setState(438); match(HogQLParser::PARTITION); - setState(436); + setState(439); match(HogQLParser::BY); - setState(437); + setState(440); columnExprList(); } @@ -3636,11 +3667,11 @@ HogQLParser::WinOrderByClauseContext* HogQLParser::winOrderByClause() { }); try { enterOuterAlt(_localctx, 1); - setState(439); + setState(442); match(HogQLParser::ORDER); - setState(440); + setState(443); match(HogQLParser::BY); - setState(441); + setState(444); orderExprList(); } @@ -3698,7 +3729,7 @@ HogQLParser::WinFrameClauseContext* HogQLParser::winFrameClause() { }); try { enterOuterAlt(_localctx, 1); - setState(443); + setState(446); _la = _input->LA(1); if (!(_la == HogQLParser::RANGE @@ -3709,7 +3740,7 @@ HogQLParser::WinFrameClauseContext* HogQLParser::winFrameClause() { _errHandler->reportMatch(this); consume(); } - setState(444); + setState(447); winFrameExtend(); } @@ -3791,7 +3822,7 @@ HogQLParser::WinFrameExtendContext* HogQLParser::winFrameExtend() { exitRule(); }); try { - setState(452); + setState(455); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::CURRENT: @@ -3807,7 +3838,7 @@ HogQLParser::WinFrameExtendContext* HogQLParser::winFrameExtend() { case HogQLParser::PLUS: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 1); - setState(446); + setState(449); winFrameBound(); break; } @@ -3815,13 +3846,13 @@ HogQLParser::WinFrameExtendContext* HogQLParser::winFrameExtend() { case HogQLParser::BETWEEN: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 2); - setState(447); + setState(450); match(HogQLParser::BETWEEN); - setState(448); + setState(451); winFrameBound(); - setState(449); + setState(452); match(HogQLParser::AND); - setState(450); + setState(453); winFrameBound(); break; } @@ -3896,45 +3927,45 @@ HogQLParser::WinFrameBoundContext* HogQLParser::winFrameBound() { }); try { enterOuterAlt(_localctx, 1); - setState(466); + setState(469); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 60, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 61, _ctx)) { case 1: { - setState(454); + setState(457); match(HogQLParser::CURRENT); - setState(455); + setState(458); match(HogQLParser::ROW); break; } case 2: { - setState(456); + setState(459); match(HogQLParser::UNBOUNDED); - setState(457); + setState(460); match(HogQLParser::PRECEDING); break; } case 3: { - setState(458); + setState(461); match(HogQLParser::UNBOUNDED); - setState(459); + setState(462); match(HogQLParser::FOLLOWING); break; } case 4: { - setState(460); + setState(463); numberLiteral(); - setState(461); + setState(464); match(HogQLParser::PRECEDING); break; } case 5: { - setState(463); + setState(466); numberLiteral(); - setState(464); + setState(467); match(HogQLParser::FOLLOWING); break; } @@ -3993,9 +4024,9 @@ HogQLParser::ExprContext* HogQLParser::expr() { }); try { enterOuterAlt(_localctx, 1); - setState(468); + setState(471); columnExpr(0); - setState(469); + setState(472); match(HogQLParser::EOF); } @@ -4199,13 +4230,13 @@ HogQLParser::ColumnTypeExprContext* HogQLParser::columnTypeExpr() { exitRule(); }); try { - setState(518); + setState(521); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 65, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 66, _ctx)) { case 1: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 1); - setState(471); + setState(474); identifier(); break; } @@ -4213,29 +4244,29 @@ HogQLParser::ColumnTypeExprContext* HogQLParser::columnTypeExpr() { case 2: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 2); - setState(472); + setState(475); identifier(); - setState(473); + setState(476); match(HogQLParser::LPAREN); - setState(474); + setState(477); identifier(); - setState(475); + setState(478); columnTypeExpr(); - setState(482); + setState(485); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(476); + setState(479); match(HogQLParser::COMMA); - setState(477); + setState(480); identifier(); - setState(478); + setState(481); columnTypeExpr(); - setState(484); + setState(487); _errHandler->sync(this); _la = _input->LA(1); } - setState(485); + setState(488); match(HogQLParser::RPAREN); break; } @@ -4243,25 +4274,25 @@ HogQLParser::ColumnTypeExprContext* HogQLParser::columnTypeExpr() { case 3: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 3); - setState(487); + setState(490); identifier(); - setState(488); + setState(491); match(HogQLParser::LPAREN); - setState(489); + setState(492); enumValue(); - setState(494); + setState(497); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(490); + setState(493); match(HogQLParser::COMMA); - setState(491); + setState(494); enumValue(); - setState(496); + setState(499); _errHandler->sync(this); _la = _input->LA(1); } - setState(497); + setState(500); match(HogQLParser::RPAREN); break; } @@ -4269,25 +4300,25 @@ HogQLParser::ColumnTypeExprContext* HogQLParser::columnTypeExpr() { case 4: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 4); - setState(499); + setState(502); identifier(); - setState(500); + setState(503); match(HogQLParser::LPAREN); - setState(501); + setState(504); columnTypeExpr(); - setState(506); + setState(509); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(502); + setState(505); match(HogQLParser::COMMA); - setState(503); + setState(506); columnTypeExpr(); - setState(508); + setState(511); _errHandler->sync(this); _la = _input->LA(1); } - setState(509); + setState(512); match(HogQLParser::RPAREN); break; } @@ -4295,11 +4326,11 @@ HogQLParser::ColumnTypeExprContext* HogQLParser::columnTypeExpr() { case 5: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 5); - setState(511); + setState(514); identifier(); - setState(512); + setState(515); match(HogQLParser::LPAREN); - setState(514); + setState(517); _errHandler->sync(this); _la = _input->LA(1); @@ -4308,10 +4339,10 @@ HogQLParser::ColumnTypeExprContext* HogQLParser::columnTypeExpr() { ((1ULL << (_la - 64)) & -1) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 128)) & -9) != 0) || ((((_la - 192) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 192)) & 69122459133) != 0)) { - setState(513); + setState(516); columnExprList(); } - setState(516); + setState(519); match(HogQLParser::RPAREN); break; } @@ -4379,21 +4410,21 @@ HogQLParser::ColumnExprListContext* HogQLParser::columnExprList() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(520); + setState(523); columnExpr(0); - setState(525); + setState(528); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 66, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 67, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(521); + setState(524); match(HogQLParser::COMMA); - setState(522); + setState(525); columnExpr(0); } - setState(527); + setState(530); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 66, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 67, _ctx); } } @@ -5426,22 +5457,22 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(657); + setState(660); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 79, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 80, _ctx)) { case 1: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(529); + setState(532); match(HogQLParser::CASE); - setState(531); + setState(534); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 67, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 68, _ctx)) { case 1: { - setState(530); + setState(533); antlrcpp::downCast(_localctx)->caseExpr = columnExpr(0); break; } @@ -5449,33 +5480,33 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { default: break; } - setState(538); + setState(541); _errHandler->sync(this); _la = _input->LA(1); do { - setState(533); + setState(536); match(HogQLParser::WHEN); - setState(534); + setState(537); antlrcpp::downCast(_localctx)->whenExpr = columnExpr(0); - setState(535); + setState(538); match(HogQLParser::THEN); - setState(536); + setState(539); antlrcpp::downCast(_localctx)->thenExpr = columnExpr(0); - setState(540); + setState(543); _errHandler->sync(this); _la = _input->LA(1); } while (_la == HogQLParser::WHEN); - setState(544); + setState(547); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::ELSE) { - setState(542); + setState(545); match(HogQLParser::ELSE); - setState(543); + setState(546); antlrcpp::downCast(_localctx)->elseExpr = columnExpr(0); } - setState(546); + setState(549); match(HogQLParser::END); break; } @@ -5484,17 +5515,17 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(548); + setState(551); match(HogQLParser::CAST); - setState(549); + setState(552); match(HogQLParser::LPAREN); - setState(550); + setState(553); columnExpr(0); - setState(551); + setState(554); match(HogQLParser::AS); - setState(552); + setState(555); columnTypeExpr(); - setState(553); + setState(556); match(HogQLParser::RPAREN); break; } @@ -5503,9 +5534,9 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(555); + setState(558); match(HogQLParser::DATE); - setState(556); + setState(559); match(HogQLParser::STRING_LITERAL); break; } @@ -5514,17 +5545,17 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(557); + setState(560); match(HogQLParser::EXTRACT); - setState(558); + setState(561); match(HogQLParser::LPAREN); - setState(559); + setState(562); interval(); - setState(560); + setState(563); match(HogQLParser::FROM); - setState(561); + setState(564); columnExpr(0); - setState(562); + setState(565); match(HogQLParser::RPAREN); break; } @@ -5533,11 +5564,11 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(564); + setState(567); match(HogQLParser::INTERVAL); - setState(565); + setState(568); columnExpr(0); - setState(566); + setState(569); interval(); break; } @@ -5546,27 +5577,27 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(568); + setState(571); match(HogQLParser::SUBSTRING); - setState(569); + setState(572); match(HogQLParser::LPAREN); - setState(570); + setState(573); columnExpr(0); - setState(571); + setState(574); match(HogQLParser::FROM); - setState(572); - columnExpr(0); setState(575); + columnExpr(0); + setState(578); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::FOR) { - setState(573); + setState(576); match(HogQLParser::FOR); - setState(574); + setState(577); columnExpr(0); } - setState(577); + setState(580); match(HogQLParser::RPAREN); break; } @@ -5575,9 +5606,9 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(579); + setState(582); match(HogQLParser::TIMESTAMP); - setState(580); + setState(583); match(HogQLParser::STRING_LITERAL); break; } @@ -5586,11 +5617,11 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(581); + setState(584); match(HogQLParser::TRIM); - setState(582); + setState(585); match(HogQLParser::LPAREN); - setState(583); + setState(586); _la = _input->LA(1); if (!(_la == HogQLParser::BOTH || _la == HogQLParser::LEADING || _la == HogQLParser::TRAILING)) { _errHandler->recoverInline(this); @@ -5599,13 +5630,13 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _errHandler->reportMatch(this); consume(); } - setState(584); + setState(587); match(HogQLParser::STRING_LITERAL); - setState(585); + setState(588); match(HogQLParser::FROM); - setState(586); + setState(589); columnExpr(0); - setState(587); + setState(590); match(HogQLParser::RPAREN); break; } @@ -5614,12 +5645,12 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(589); + setState(592); identifier(); - setState(590); + setState(593); match(HogQLParser::LPAREN); - setState(592); + setState(595); _errHandler->sync(this); _la = _input->LA(1); @@ -5628,18 +5659,18 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { ((1ULL << (_la - 64)) & -1) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 128)) & -9) != 0) || ((((_la - 192) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 192)) & 69122459133) != 0)) { - setState(591); + setState(594); columnExprList(); } - setState(594); + setState(597); match(HogQLParser::RPAREN); - setState(596); + setState(599); match(HogQLParser::OVER); - setState(597); + setState(600); match(HogQLParser::LPAREN); - setState(598); + setState(601); windowExpr(); - setState(599); + setState(602); match(HogQLParser::RPAREN); break; } @@ -5648,12 +5679,12 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(601); + setState(604); identifier(); - setState(602); + setState(605); match(HogQLParser::LPAREN); - setState(604); + setState(607); _errHandler->sync(this); _la = _input->LA(1); @@ -5662,14 +5693,14 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { ((1ULL << (_la - 64)) & -1) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 128)) & -9) != 0) || ((((_la - 192) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 192)) & 69122459133) != 0)) { - setState(603); + setState(606); columnExprList(); } - setState(606); + setState(609); match(HogQLParser::RPAREN); - setState(608); + setState(611); match(HogQLParser::OVER); - setState(609); + setState(612); identifier(); break; } @@ -5678,16 +5709,16 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(611); + setState(614); identifier(); - setState(617); + setState(620); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 74, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 75, _ctx)) { case 1: { - setState(612); + setState(615); match(HogQLParser::LPAREN); - setState(614); + setState(617); _errHandler->sync(this); _la = _input->LA(1); @@ -5696,10 +5727,10 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { ((1ULL << (_la - 64)) & -1) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 128)) & -9) != 0) || ((((_la - 192) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 192)) & 69122459133) != 0)) { - setState(613); + setState(616); columnExprList(); } - setState(616); + setState(619); match(HogQLParser::RPAREN); break; } @@ -5707,14 +5738,14 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { default: break; } - setState(619); + setState(622); match(HogQLParser::LPAREN); - setState(621); + setState(624); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 75, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 76, _ctx)) { case 1: { - setState(620); + setState(623); match(HogQLParser::DISTINCT); break; } @@ -5722,7 +5753,7 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { default: break; } - setState(624); + setState(627); _errHandler->sync(this); _la = _input->LA(1); @@ -5731,10 +5762,10 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { ((1ULL << (_la - 64)) & -1) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 128)) & -9) != 0) || ((((_la - 192) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 192)) & 69122459133) != 0)) { - setState(623); + setState(626); columnArgList(); } - setState(626); + setState(629); match(HogQLParser::RPAREN); break; } @@ -5743,7 +5774,7 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(628); + setState(631); literal(); break; } @@ -5752,9 +5783,9 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(629); + setState(632); match(HogQLParser::DASH); - setState(630); + setState(633); columnExpr(18); break; } @@ -5763,9 +5794,9 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(631); + setState(634); match(HogQLParser::NOT); - setState(632); + setState(635); columnExpr(12); break; } @@ -5774,7 +5805,7 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(636); + setState(639); _errHandler->sync(this); _la = _input->LA(1); @@ -5784,12 +5815,12 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { ((1ULL << (_la - 128)) & -9) != 0) || _la == HogQLParser::JSON_TRUE || _la == HogQLParser::IDENTIFIER) { - setState(633); + setState(636); tableIdentifier(); - setState(634); + setState(637); match(HogQLParser::DOT); } - setState(638); + setState(641); match(HogQLParser::ASTERISK); break; } @@ -5798,11 +5829,11 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(639); + setState(642); match(HogQLParser::LPAREN); - setState(640); + setState(643); selectUnionStmt(); - setState(641); + setState(644); match(HogQLParser::RPAREN); break; } @@ -5811,11 +5842,11 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(643); + setState(646); match(HogQLParser::LPAREN); - setState(644); + setState(647); columnExpr(0); - setState(645); + setState(648); match(HogQLParser::RPAREN); break; } @@ -5824,11 +5855,11 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(647); + setState(650); match(HogQLParser::LPAREN); - setState(648); + setState(651); columnExprList(); - setState(649); + setState(652); match(HogQLParser::RPAREN); break; } @@ -5837,9 +5868,9 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(651); + setState(654); match(HogQLParser::LBRACKET); - setState(653); + setState(656); _errHandler->sync(this); _la = _input->LA(1); @@ -5848,10 +5879,10 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { ((1ULL << (_la - 64)) & -1) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 128)) & -9) != 0) || ((((_la - 192) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 192)) & 69122459133) != 0)) { - setState(652); + setState(655); columnExprList(); } - setState(655); + setState(658); match(HogQLParser::RBRACKET); break; } @@ -5860,7 +5891,7 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(656); + setState(659); columnIdentifier(); break; } @@ -5869,42 +5900,42 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { break; } _ctx->stop = _input->LT(-1); - setState(752); + setState(755); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 90, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 91, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { if (!_parseListeners.empty()) triggerExitRuleEvent(); previousContext = _localctx; - setState(750); + setState(753); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 89, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 90, _ctx)) { case 1: { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; newContext->left = previousContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(659); + setState(662); if (!(precpred(_ctx, 17))) throw FailedPredicateException(this, "precpred(_ctx, 17)"); - setState(663); + setState(666); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::ASTERISK: { - setState(660); + setState(663); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::ASTERISK); break; } case HogQLParser::SLASH: { - setState(661); + setState(664); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::SLASH); break; } case HogQLParser::PERCENT: { - setState(662); + setState(665); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::PERCENT); break; } @@ -5912,7 +5943,7 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { default: throw NoViableAltException(this); } - setState(665); + setState(668); antlrcpp::downCast(_localctx)->right = columnExpr(18); break; } @@ -5922,26 +5953,26 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = newContext; newContext->left = previousContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(666); + setState(669); if (!(precpred(_ctx, 16))) throw FailedPredicateException(this, "precpred(_ctx, 16)"); - setState(670); + setState(673); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::PLUS: { - setState(667); + setState(670); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::PLUS); break; } case HogQLParser::DASH: { - setState(668); + setState(671); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::DASH); break; } case HogQLParser::CONCAT: { - setState(669); + setState(672); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::CONCAT); break; } @@ -5949,7 +5980,7 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { default: throw NoViableAltException(this); } - setState(672); + setState(675); antlrcpp::downCast(_localctx)->right = columnExpr(17); break; } @@ -5959,86 +5990,86 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = newContext; newContext->left = previousContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(673); + setState(676); if (!(precpred(_ctx, 15))) throw FailedPredicateException(this, "precpred(_ctx, 15)"); - setState(698); + setState(701); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 85, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 86, _ctx)) { case 1: { - setState(674); + setState(677); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::EQ_DOUBLE); break; } case 2: { - setState(675); + setState(678); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::EQ_SINGLE); break; } case 3: { - setState(676); + setState(679); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::NOT_EQ); break; } case 4: { - setState(677); + setState(680); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::LT_EQ); break; } case 5: { - setState(678); + setState(681); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::LT); break; } case 6: { - setState(679); + setState(682); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::GT_EQ); break; } case 7: { - setState(680); + setState(683); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::GT); break; } case 8: { - setState(682); + setState(685); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::NOT) { - setState(681); + setState(684); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::NOT); } - setState(684); + setState(687); match(HogQLParser::IN); - setState(686); + setState(689); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::COHORT) { - setState(685); + setState(688); match(HogQLParser::COHORT); } break; } case 9: { - setState(689); + setState(692); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::NOT) { - setState(688); + setState(691); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::NOT); } - setState(691); + setState(694); _la = _input->LA(1); if (!(_la == HogQLParser::ILIKE @@ -6053,37 +6084,37 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { } case 10: { - setState(692); + setState(695); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::REGEX_SINGLE); break; } case 11: { - setState(693); + setState(696); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::REGEX_DOUBLE); break; } case 12: { - setState(694); + setState(697); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::NOT_REGEX); break; } case 13: { - setState(695); + setState(698); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::IREGEX_SINGLE); break; } case 14: { - setState(696); + setState(699); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::IREGEX_DOUBLE); break; } case 15: { - setState(697); + setState(700); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::NOT_IREGEX); break; } @@ -6091,7 +6122,7 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { default: break; } - setState(700); + setState(703); antlrcpp::downCast(_localctx)->right = columnExpr(16); break; } @@ -6100,12 +6131,12 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(701); + setState(704); if (!(precpred(_ctx, 13))) throw FailedPredicateException(this, "precpred(_ctx, 13)"); - setState(702); + setState(705); match(HogQLParser::NULLISH); - setState(703); + setState(706); columnExpr(14); break; } @@ -6114,12 +6145,12 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(704); + setState(707); if (!(precpred(_ctx, 11))) throw FailedPredicateException(this, "precpred(_ctx, 11)"); - setState(705); + setState(708); match(HogQLParser::AND); - setState(706); + setState(709); columnExpr(12); break; } @@ -6128,12 +6159,12 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(707); + setState(710); if (!(precpred(_ctx, 10))) throw FailedPredicateException(this, "precpred(_ctx, 10)"); - setState(708); + setState(711); match(HogQLParser::OR); - setState(709); + setState(712); columnExpr(11); break; } @@ -6142,24 +6173,24 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(710); + setState(713); if (!(precpred(_ctx, 9))) throw FailedPredicateException(this, "precpred(_ctx, 9)"); - setState(712); + setState(715); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::NOT) { - setState(711); + setState(714); match(HogQLParser::NOT); } - setState(714); + setState(717); match(HogQLParser::BETWEEN); - setState(715); + setState(718); columnExpr(0); - setState(716); + setState(719); match(HogQLParser::AND); - setState(717); + setState(720); columnExpr(10); break; } @@ -6168,16 +6199,16 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(719); + setState(722); if (!(precpred(_ctx, 8))) throw FailedPredicateException(this, "precpred(_ctx, 8)"); - setState(720); + setState(723); match(HogQLParser::QUERY); - setState(721); + setState(724); columnExpr(0); - setState(722); + setState(725); match(HogQLParser::COLON); - setState(723); + setState(726); columnExpr(8); break; } @@ -6186,14 +6217,14 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(725); + setState(728); if (!(precpred(_ctx, 21))) throw FailedPredicateException(this, "precpred(_ctx, 21)"); - setState(726); + setState(729); match(HogQLParser::LBRACKET); - setState(727); + setState(730); columnExpr(0); - setState(728); + setState(731); match(HogQLParser::RBRACKET); break; } @@ -6202,12 +6233,12 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(730); + setState(733); if (!(precpred(_ctx, 20))) throw FailedPredicateException(this, "precpred(_ctx, 20)"); - setState(731); + setState(734); match(HogQLParser::DOT); - setState(732); + setState(735); match(HogQLParser::DECIMAL_LITERAL); break; } @@ -6216,12 +6247,12 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(733); + setState(736); if (!(precpred(_ctx, 19))) throw FailedPredicateException(this, "precpred(_ctx, 19)"); - setState(734); + setState(737); match(HogQLParser::DOT); - setState(735); + setState(738); identifier(); break; } @@ -6230,20 +6261,20 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(736); + setState(739); if (!(precpred(_ctx, 14))) throw FailedPredicateException(this, "precpred(_ctx, 14)"); - setState(737); + setState(740); match(HogQLParser::IS); - setState(739); + setState(742); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::NOT) { - setState(738); + setState(741); match(HogQLParser::NOT); } - setState(741); + setState(744); match(HogQLParser::NULL_SQL); break; } @@ -6252,30 +6283,30 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(742); + setState(745); if (!(precpred(_ctx, 7))) throw FailedPredicateException(this, "precpred(_ctx, 7)"); - setState(748); + setState(751); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 88, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 89, _ctx)) { case 1: { - setState(743); + setState(746); alias(); break; } case 2: { - setState(744); + setState(747); match(HogQLParser::AS); - setState(745); + setState(748); identifier(); break; } case 3: { - setState(746); + setState(749); match(HogQLParser::AS); - setState(747); + setState(750); match(HogQLParser::STRING_LITERAL); break; } @@ -6290,9 +6321,9 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { break; } } - setState(754); + setState(757); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 90, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 91, _ctx); } } catch (RecognitionException &e) { @@ -6352,17 +6383,17 @@ HogQLParser::ColumnArgListContext* HogQLParser::columnArgList() { }); try { enterOuterAlt(_localctx, 1); - setState(755); + setState(758); columnArgExpr(); - setState(760); + setState(763); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(756); + setState(759); match(HogQLParser::COMMA); - setState(757); + setState(760); columnArgExpr(); - setState(762); + setState(765); _errHandler->sync(this); _la = _input->LA(1); } @@ -6416,19 +6447,19 @@ HogQLParser::ColumnArgExprContext* HogQLParser::columnArgExpr() { exitRule(); }); try { - setState(765); + setState(768); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 92, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 93, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(763); + setState(766); columnLambdaExpr(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(764); + setState(767); columnExpr(0); break; } @@ -6512,27 +6543,27 @@ HogQLParser::ColumnLambdaExprContext* HogQLParser::columnLambdaExpr() { }); try { enterOuterAlt(_localctx, 1); - setState(786); + setState(789); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::LPAREN: { - setState(767); + setState(770); match(HogQLParser::LPAREN); - setState(768); + setState(771); identifier(); - setState(773); + setState(776); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(769); + setState(772); match(HogQLParser::COMMA); - setState(770); + setState(773); identifier(); - setState(775); + setState(778); _errHandler->sync(this); _la = _input->LA(1); } - setState(776); + setState(779); match(HogQLParser::RPAREN); break; } @@ -6724,17 +6755,17 @@ HogQLParser::ColumnLambdaExprContext* HogQLParser::columnLambdaExpr() { case HogQLParser::JSON_FALSE: case HogQLParser::JSON_TRUE: case HogQLParser::IDENTIFIER: { - setState(778); + setState(781); identifier(); - setState(783); + setState(786); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(779); + setState(782); match(HogQLParser::COMMA); - setState(780); + setState(783); identifier(); - setState(785); + setState(788); _errHandler->sync(this); _la = _input->LA(1); } @@ -6744,9 +6775,9 @@ HogQLParser::ColumnLambdaExprContext* HogQLParser::columnLambdaExpr() { default: throw NoViableAltException(this); } - setState(788); + setState(791); match(HogQLParser::ARROW); - setState(789); + setState(792); columnExpr(0); } @@ -6808,17 +6839,17 @@ HogQLParser::WithExprListContext* HogQLParser::withExprList() { }); try { enterOuterAlt(_localctx, 1); - setState(791); + setState(794); withExpr(); - setState(796); + setState(799); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(792); + setState(795); match(HogQLParser::COMMA); - setState(793); + setState(796); withExpr(); - setState(798); + setState(801); _errHandler->sync(this); _la = _input->LA(1); } @@ -6914,21 +6945,21 @@ HogQLParser::WithExprContext* HogQLParser::withExpr() { exitRule(); }); try { - setState(809); + setState(812); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 97, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 98, _ctx)) { case 1: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 1); - setState(799); + setState(802); identifier(); - setState(800); + setState(803); match(HogQLParser::AS); - setState(801); + setState(804); match(HogQLParser::LPAREN); - setState(802); + setState(805); selectUnionStmt(); - setState(803); + setState(806); match(HogQLParser::RPAREN); break; } @@ -6936,11 +6967,11 @@ HogQLParser::WithExprContext* HogQLParser::withExpr() { case 2: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 2); - setState(805); + setState(808); columnExpr(0); - setState(806); + setState(809); match(HogQLParser::AS); - setState(807); + setState(810); identifier(); break; } @@ -7006,12 +7037,12 @@ HogQLParser::ColumnIdentifierContext* HogQLParser::columnIdentifier() { exitRule(); }); try { - setState(818); + setState(821); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::PLACEHOLDER: { enterOuterAlt(_localctx, 1); - setState(811); + setState(814); match(HogQLParser::PLACEHOLDER); break; } @@ -7204,14 +7235,14 @@ HogQLParser::ColumnIdentifierContext* HogQLParser::columnIdentifier() { case HogQLParser::JSON_TRUE: case HogQLParser::IDENTIFIER: { enterOuterAlt(_localctx, 2); - setState(815); + setState(818); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 98, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 99, _ctx)) { case 1: { - setState(812); + setState(815); tableIdentifier(); - setState(813); + setState(816); match(HogQLParser::DOT); break; } @@ -7219,7 +7250,7 @@ HogQLParser::ColumnIdentifierContext* HogQLParser::columnIdentifier() { default: break; } - setState(817); + setState(820); nestedIdentifier(); break; } @@ -7287,21 +7318,21 @@ HogQLParser::NestedIdentifierContext* HogQLParser::nestedIdentifier() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(820); + setState(823); identifier(); - setState(825); + setState(828); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 100, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 101, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(821); + setState(824); match(HogQLParser::DOT); - setState(822); + setState(825); identifier(); } - setState(827); + setState(830); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 100, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 101, _ctx); } } @@ -7450,15 +7481,15 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(836); + setState(839); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 101, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 102, _ctx)) { case 1: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(829); + setState(832); tableIdentifier(); break; } @@ -7467,7 +7498,7 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(830); + setState(833); tableFunctionExpr(); break; } @@ -7476,11 +7507,11 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(831); + setState(834); match(HogQLParser::LPAREN); - setState(832); + setState(835); selectUnionStmt(); - setState(833); + setState(836); match(HogQLParser::RPAREN); break; } @@ -7489,7 +7520,7 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(835); + setState(838); match(HogQLParser::PLACEHOLDER); break; } @@ -7498,9 +7529,9 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { break; } _ctx->stop = _input->LT(-1); - setState(846); + setState(849); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 103, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 104, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { if (!_parseListeners.empty()) @@ -7509,10 +7540,10 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleTableExpr); - setState(838); + setState(841); if (!(precpred(_ctx, 2))) throw FailedPredicateException(this, "precpred(_ctx, 2)"); - setState(842); + setState(845); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::DATE: @@ -7520,15 +7551,15 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { case HogQLParser::ID: case HogQLParser::KEY: case HogQLParser::IDENTIFIER: { - setState(839); + setState(842); alias(); break; } case HogQLParser::AS: { - setState(840); + setState(843); match(HogQLParser::AS); - setState(841); + setState(844); identifier(); break; } @@ -7537,9 +7568,9 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { throw NoViableAltException(this); } } - setState(848); + setState(851); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 103, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 104, _ctx); } } catch (RecognitionException &e) { @@ -7599,11 +7630,11 @@ HogQLParser::TableFunctionExprContext* HogQLParser::tableFunctionExpr() { }); try { enterOuterAlt(_localctx, 1); - setState(849); + setState(852); identifier(); - setState(850); + setState(853); match(HogQLParser::LPAREN); - setState(852); + setState(855); _errHandler->sync(this); _la = _input->LA(1); @@ -7612,10 +7643,10 @@ HogQLParser::TableFunctionExprContext* HogQLParser::tableFunctionExpr() { ((1ULL << (_la - 64)) & -1) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 128)) & -9) != 0) || ((((_la - 192) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 192)) & 69122459133) != 0)) { - setState(851); + setState(854); tableArgList(); } - setState(854); + setState(857); match(HogQLParser::RPAREN); } @@ -7672,14 +7703,14 @@ HogQLParser::TableIdentifierContext* HogQLParser::tableIdentifier() { }); try { enterOuterAlt(_localctx, 1); - setState(859); + setState(862); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 105, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 106, _ctx)) { case 1: { - setState(856); + setState(859); databaseIdentifier(); - setState(857); + setState(860); match(HogQLParser::DOT); break; } @@ -7687,7 +7718,7 @@ HogQLParser::TableIdentifierContext* HogQLParser::tableIdentifier() { default: break; } - setState(861); + setState(864); identifier(); } @@ -7749,17 +7780,17 @@ HogQLParser::TableArgListContext* HogQLParser::tableArgList() { }); try { enterOuterAlt(_localctx, 1); - setState(863); + setState(866); columnExpr(0); - setState(868); + setState(871); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(864); + setState(867); match(HogQLParser::COMMA); - setState(865); + setState(868); columnExpr(0); - setState(870); + setState(873); _errHandler->sync(this); _la = _input->LA(1); } @@ -7810,7 +7841,7 @@ HogQLParser::DatabaseIdentifierContext* HogQLParser::databaseIdentifier() { }); try { enterOuterAlt(_localctx, 1); - setState(871); + setState(874); identifier(); } @@ -7875,21 +7906,21 @@ HogQLParser::FloatingLiteralContext* HogQLParser::floatingLiteral() { exitRule(); }); try { - setState(881); + setState(884); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::FLOATING_LITERAL: { enterOuterAlt(_localctx, 1); - setState(873); + setState(876); match(HogQLParser::FLOATING_LITERAL); break; } case HogQLParser::DOT: { enterOuterAlt(_localctx, 2); - setState(874); + setState(877); match(HogQLParser::DOT); - setState(875); + setState(878); _la = _input->LA(1); if (!(_la == HogQLParser::OCTAL_LITERAL @@ -7905,16 +7936,16 @@ HogQLParser::FloatingLiteralContext* HogQLParser::floatingLiteral() { case HogQLParser::DECIMAL_LITERAL: { enterOuterAlt(_localctx, 3); - setState(876); + setState(879); match(HogQLParser::DECIMAL_LITERAL); - setState(877); + setState(880); match(HogQLParser::DOT); - setState(879); + setState(882); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 107, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 108, _ctx)) { case 1: { - setState(878); + setState(881); _la = _input->LA(1); if (!(_la == HogQLParser::OCTAL_LITERAL @@ -8013,14 +8044,14 @@ HogQLParser::NumberLiteralContext* HogQLParser::numberLiteral() { }); try { enterOuterAlt(_localctx, 1); - setState(884); + setState(887); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::DASH || _la == HogQLParser::PLUS) { - setState(883); + setState(886); _la = _input->LA(1); if (!(_la == HogQLParser::DASH @@ -8032,41 +8063,41 @@ HogQLParser::NumberLiteralContext* HogQLParser::numberLiteral() { consume(); } } - setState(892); + setState(895); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 110, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 111, _ctx)) { case 1: { - setState(886); + setState(889); floatingLiteral(); break; } case 2: { - setState(887); + setState(890); match(HogQLParser::OCTAL_LITERAL); break; } case 3: { - setState(888); + setState(891); match(HogQLParser::DECIMAL_LITERAL); break; } case 4: { - setState(889); + setState(892); match(HogQLParser::HEXADECIMAL_LITERAL); break; } case 5: { - setState(890); + setState(893); match(HogQLParser::INF); break; } case 6: { - setState(891); + setState(894); match(HogQLParser::NAN_SQL); break; } @@ -8128,7 +8159,7 @@ HogQLParser::LiteralContext* HogQLParser::literal() { exitRule(); }); try { - setState(897); + setState(900); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::INF: @@ -8141,21 +8172,21 @@ HogQLParser::LiteralContext* HogQLParser::literal() { case HogQLParser::DOT: case HogQLParser::PLUS: { enterOuterAlt(_localctx, 1); - setState(894); + setState(897); numberLiteral(); break; } case HogQLParser::STRING_LITERAL: { enterOuterAlt(_localctx, 2); - setState(895); + setState(898); match(HogQLParser::STRING_LITERAL); break; } case HogQLParser::NULL_SQL: { enterOuterAlt(_localctx, 3); - setState(896); + setState(899); match(HogQLParser::NULL_SQL); break; } @@ -8239,7 +8270,7 @@ HogQLParser::IntervalContext* HogQLParser::interval() { }); try { enterOuterAlt(_localctx, 1); - setState(899); + setState(902); _la = _input->LA(1); if (!(_la == HogQLParser::DAY || ((((_la - 76) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 76)) & 72057615512764417) != 0) || ((((_la - 145) & ~ 0x3fULL) == 0) && @@ -9006,7 +9037,7 @@ HogQLParser::KeywordContext* HogQLParser::keyword() { }); try { enterOuterAlt(_localctx, 1); - setState(901); + setState(904); _la = _input->LA(1); if (!(((((_la - 2) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 2)) & -34368126977) != 0) || ((((_la - 66) & ~ 0x3fULL) == 0) && @@ -9078,7 +9109,7 @@ HogQLParser::KeywordForAliasContext* HogQLParser::keywordForAlias() { }); try { enterOuterAlt(_localctx, 1); - setState(903); + setState(906); _la = _input->LA(1); if (!(((((_la - 36) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 36)) & 36030996109328385) != 0))) { @@ -9138,12 +9169,12 @@ HogQLParser::AliasContext* HogQLParser::alias() { exitRule(); }); try { - setState(907); + setState(910); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::IDENTIFIER: { enterOuterAlt(_localctx, 1); - setState(905); + setState(908); match(HogQLParser::IDENTIFIER); break; } @@ -9153,7 +9184,7 @@ HogQLParser::AliasContext* HogQLParser::alias() { case HogQLParser::ID: case HogQLParser::KEY: { enterOuterAlt(_localctx, 2); - setState(906); + setState(909); keywordForAlias(); break; } @@ -9215,12 +9246,12 @@ HogQLParser::IdentifierContext* HogQLParser::identifier() { exitRule(); }); try { - setState(912); + setState(915); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::IDENTIFIER: { enterOuterAlt(_localctx, 1); - setState(909); + setState(912); match(HogQLParser::IDENTIFIER); break; } @@ -9234,7 +9265,7 @@ HogQLParser::IdentifierContext* HogQLParser::identifier() { case HogQLParser::WEEK: case HogQLParser::YEAR: { enterOuterAlt(_localctx, 2); - setState(910); + setState(913); interval(); break; } @@ -9418,7 +9449,7 @@ HogQLParser::IdentifierContext* HogQLParser::identifier() { case HogQLParser::JSON_FALSE: case HogQLParser::JSON_TRUE: { enterOuterAlt(_localctx, 3); - setState(911); + setState(914); keyword(); break; } @@ -9481,11 +9512,11 @@ HogQLParser::EnumValueContext* HogQLParser::enumValue() { }); try { enterOuterAlt(_localctx, 1); - setState(914); + setState(917); match(HogQLParser::STRING_LITERAL); - setState(915); + setState(918); match(HogQLParser::EQ_SINGLE); - setState(916); + setState(919); numberLiteral(); } diff --git a/hogql_parser/HogQLParser.h b/hogql_parser/HogQLParser.h index 0f1a21fa159ec..1984b66e28b98 100644 --- a/hogql_parser/HogQLParser.h +++ b/hogql_parser/HogQLParser.h @@ -1,5 +1,5 @@ -// Generated from HogQLParser.g4 by ANTLR 4.13.0 +// Generated from HogQLParser.g4 by ANTLR 4.13.1 #pragma once @@ -675,6 +675,7 @@ class HogQLParser : public antlr4::Parser { public: RatioExprContext(antlr4::ParserRuleContext *parent, size_t invokingState); virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *PLACEHOLDER(); std::vector numberLiteral(); NumberLiteralContext* numberLiteral(size_t i); antlr4::tree::TerminalNode *SLASH(); diff --git a/hogql_parser/HogQLParser.interp b/hogql_parser/HogQLParser.interp index 321af6e3bd81a..d7adc1a3a9959 100644 --- a/hogql_parser/HogQLParser.interp +++ b/hogql_parser/HogQLParser.interp @@ -551,4 +551,4 @@ enumValue atn: -[4, 1, 242, 919, 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, 1, 0, 1, 0, 3, 0, 121, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 129, 8, 1, 10, 1, 12, 1, 132, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 139, 8, 2, 1, 3, 3, 3, 142, 8, 3, 1, 3, 1, 3, 3, 3, 146, 8, 3, 1, 3, 3, 3, 149, 8, 3, 1, 3, 1, 3, 3, 3, 153, 8, 3, 1, 3, 3, 3, 156, 8, 3, 1, 3, 3, 3, 159, 8, 3, 1, 3, 3, 3, 162, 8, 3, 1, 3, 3, 3, 165, 8, 3, 1, 3, 1, 3, 3, 3, 169, 8, 3, 1, 3, 1, 3, 3, 3, 173, 8, 3, 1, 3, 3, 3, 176, 8, 3, 1, 3, 3, 3, 179, 8, 3, 1, 3, 3, 3, 182, 8, 3, 1, 3, 1, 3, 3, 3, 186, 8, 3, 1, 3, 3, 3, 189, 8, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 198, 8, 5, 1, 6, 1, 6, 1, 6, 1, 7, 3, 7, 204, 8, 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, 8, 1, 8, 1, 8, 1, 8, 1, 8, 5, 8, 223, 8, 8, 10, 8, 12, 8, 226, 9, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 242, 8, 11, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 259, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 265, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 271, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 282, 8, 15, 3, 15, 284, 8, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 3, 18, 295, 8, 18, 1, 18, 3, 18, 298, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 304, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 312, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 5, 18, 318, 8, 18, 10, 18, 12, 18, 321, 9, 18, 1, 19, 3, 19, 324, 8, 19, 1, 19, 1, 19, 1, 19, 3, 19, 329, 8, 19, 1, 19, 3, 19, 332, 8, 19, 1, 19, 3, 19, 335, 8, 19, 1, 19, 1, 19, 3, 19, 339, 8, 19, 1, 19, 1, 19, 3, 19, 343, 8, 19, 1, 19, 3, 19, 346, 8, 19, 3, 19, 348, 8, 19, 1, 19, 3, 19, 351, 8, 19, 1, 19, 1, 19, 3, 19, 355, 8, 19, 1, 19, 1, 19, 3, 19, 359, 8, 19, 1, 19, 3, 19, 362, 8, 19, 3, 19, 364, 8, 19, 3, 19, 366, 8, 19, 1, 20, 1, 20, 1, 20, 3, 20, 371, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 382, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 388, 8, 22, 1, 23, 1, 23, 1, 23, 5, 23, 393, 8, 23, 10, 23, 12, 23, 396, 9, 23, 1, 24, 1, 24, 3, 24, 400, 8, 24, 1, 24, 1, 24, 3, 24, 404, 8, 24, 1, 24, 1, 24, 3, 24, 408, 8, 24, 1, 25, 1, 25, 1, 25, 3, 25, 413, 8, 25, 1, 26, 1, 26, 1, 26, 5, 26, 418, 8, 26, 10, 26, 12, 26, 421, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 3, 28, 428, 8, 28, 1, 28, 3, 28, 431, 8, 28, 1, 28, 3, 28, 434, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 453, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 467, 8, 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, 5, 35, 481, 8, 35, 10, 35, 12, 35, 484, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 493, 8, 35, 10, 35, 12, 35, 496, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 505, 8, 35, 10, 35, 12, 35, 508, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 515, 8, 35, 1, 35, 1, 35, 3, 35, 519, 8, 35, 1, 36, 1, 36, 1, 36, 5, 36, 524, 8, 36, 10, 36, 12, 36, 527, 9, 36, 1, 37, 1, 37, 1, 37, 3, 37, 532, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 4, 37, 539, 8, 37, 11, 37, 12, 37, 540, 1, 37, 1, 37, 3, 37, 545, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 576, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 593, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 605, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 615, 8, 37, 1, 37, 3, 37, 618, 8, 37, 1, 37, 1, 37, 3, 37, 622, 8, 37, 1, 37, 3, 37, 625, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 637, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 654, 8, 37, 1, 37, 1, 37, 3, 37, 658, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 664, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 671, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 683, 8, 37, 1, 37, 1, 37, 3, 37, 687, 8, 37, 1, 37, 3, 37, 690, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 699, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 713, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 740, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 749, 8, 37, 5, 37, 751, 8, 37, 10, 37, 12, 37, 754, 9, 37, 1, 38, 1, 38, 1, 38, 5, 38, 759, 8, 38, 10, 38, 12, 38, 762, 9, 38, 1, 39, 1, 39, 3, 39, 766, 8, 39, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 772, 8, 40, 10, 40, 12, 40, 775, 9, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 782, 8, 40, 10, 40, 12, 40, 785, 9, 40, 3, 40, 787, 8, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 5, 41, 795, 8, 41, 10, 41, 12, 41, 798, 9, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 810, 8, 42, 1, 43, 1, 43, 1, 43, 1, 43, 3, 43, 816, 8, 43, 1, 43, 3, 43, 819, 8, 43, 1, 44, 1, 44, 1, 44, 5, 44, 824, 8, 44, 10, 44, 12, 44, 827, 9, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 837, 8, 45, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 843, 8, 45, 5, 45, 845, 8, 45, 10, 45, 12, 45, 848, 9, 45, 1, 46, 1, 46, 1, 46, 3, 46, 853, 8, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 3, 47, 860, 8, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 5, 48, 867, 8, 48, 10, 48, 12, 48, 870, 9, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 880, 8, 50, 3, 50, 882, 8, 50, 1, 51, 3, 51, 885, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 893, 8, 51, 1, 52, 1, 52, 1, 52, 3, 52, 898, 8, 52, 1, 53, 1, 53, 1, 54, 1, 54, 1, 55, 1, 55, 1, 56, 1, 56, 3, 56, 908, 8, 56, 1, 57, 1, 57, 1, 57, 3, 57, 913, 8, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 0, 3, 36, 74, 90, 59, 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, 0, 16, 2, 0, 32, 32, 141, 141, 2, 0, 84, 84, 96, 96, 3, 0, 4, 4, 8, 8, 12, 12, 4, 0, 4, 4, 7, 8, 12, 12, 147, 147, 2, 0, 96, 96, 140, 140, 2, 0, 4, 4, 8, 8, 2, 0, 11, 11, 42, 43, 2, 0, 62, 62, 93, 93, 2, 0, 133, 133, 143, 143, 3, 0, 17, 17, 95, 95, 170, 170, 2, 0, 79, 79, 98, 98, 1, 0, 196, 197, 2, 0, 208, 208, 228, 228, 8, 0, 37, 37, 76, 76, 108, 108, 110, 110, 132, 132, 145, 145, 185, 185, 190, 190, 13, 0, 2, 24, 26, 36, 38, 75, 77, 81, 83, 107, 109, 109, 111, 112, 114, 115, 117, 130, 133, 144, 146, 184, 186, 189, 191, 192, 4, 0, 36, 36, 62, 62, 77, 77, 91, 91, 1039, 0, 120, 1, 0, 0, 0, 2, 124, 1, 0, 0, 0, 4, 138, 1, 0, 0, 0, 6, 141, 1, 0, 0, 0, 8, 190, 1, 0, 0, 0, 10, 193, 1, 0, 0, 0, 12, 199, 1, 0, 0, 0, 14, 203, 1, 0, 0, 0, 16, 209, 1, 0, 0, 0, 18, 227, 1, 0, 0, 0, 20, 230, 1, 0, 0, 0, 22, 233, 1, 0, 0, 0, 24, 243, 1, 0, 0, 0, 26, 246, 1, 0, 0, 0, 28, 250, 1, 0, 0, 0, 30, 283, 1, 0, 0, 0, 32, 285, 1, 0, 0, 0, 34, 288, 1, 0, 0, 0, 36, 303, 1, 0, 0, 0, 38, 365, 1, 0, 0, 0, 40, 370, 1, 0, 0, 0, 42, 381, 1, 0, 0, 0, 44, 383, 1, 0, 0, 0, 46, 389, 1, 0, 0, 0, 48, 397, 1, 0, 0, 0, 50, 409, 1, 0, 0, 0, 52, 414, 1, 0, 0, 0, 54, 422, 1, 0, 0, 0, 56, 427, 1, 0, 0, 0, 58, 435, 1, 0, 0, 0, 60, 439, 1, 0, 0, 0, 62, 443, 1, 0, 0, 0, 64, 452, 1, 0, 0, 0, 66, 466, 1, 0, 0, 0, 68, 468, 1, 0, 0, 0, 70, 518, 1, 0, 0, 0, 72, 520, 1, 0, 0, 0, 74, 657, 1, 0, 0, 0, 76, 755, 1, 0, 0, 0, 78, 765, 1, 0, 0, 0, 80, 786, 1, 0, 0, 0, 82, 791, 1, 0, 0, 0, 84, 809, 1, 0, 0, 0, 86, 818, 1, 0, 0, 0, 88, 820, 1, 0, 0, 0, 90, 836, 1, 0, 0, 0, 92, 849, 1, 0, 0, 0, 94, 859, 1, 0, 0, 0, 96, 863, 1, 0, 0, 0, 98, 871, 1, 0, 0, 0, 100, 881, 1, 0, 0, 0, 102, 884, 1, 0, 0, 0, 104, 897, 1, 0, 0, 0, 106, 899, 1, 0, 0, 0, 108, 901, 1, 0, 0, 0, 110, 903, 1, 0, 0, 0, 112, 907, 1, 0, 0, 0, 114, 912, 1, 0, 0, 0, 116, 914, 1, 0, 0, 0, 118, 121, 3, 2, 1, 0, 119, 121, 3, 6, 3, 0, 120, 118, 1, 0, 0, 0, 120, 119, 1, 0, 0, 0, 121, 122, 1, 0, 0, 0, 122, 123, 5, 0, 0, 1, 123, 1, 1, 0, 0, 0, 124, 130, 3, 4, 2, 0, 125, 126, 5, 176, 0, 0, 126, 127, 5, 4, 0, 0, 127, 129, 3, 4, 2, 0, 128, 125, 1, 0, 0, 0, 129, 132, 1, 0, 0, 0, 130, 128, 1, 0, 0, 0, 130, 131, 1, 0, 0, 0, 131, 3, 1, 0, 0, 0, 132, 130, 1, 0, 0, 0, 133, 139, 3, 6, 3, 0, 134, 135, 5, 220, 0, 0, 135, 136, 3, 2, 1, 0, 136, 137, 5, 236, 0, 0, 137, 139, 1, 0, 0, 0, 138, 133, 1, 0, 0, 0, 138, 134, 1, 0, 0, 0, 139, 5, 1, 0, 0, 0, 140, 142, 3, 8, 4, 0, 141, 140, 1, 0, 0, 0, 141, 142, 1, 0, 0, 0, 142, 143, 1, 0, 0, 0, 143, 145, 5, 146, 0, 0, 144, 146, 5, 49, 0, 0, 145, 144, 1, 0, 0, 0, 145, 146, 1, 0, 0, 0, 146, 148, 1, 0, 0, 0, 147, 149, 3, 10, 5, 0, 148, 147, 1, 0, 0, 0, 148, 149, 1, 0, 0, 0, 149, 150, 1, 0, 0, 0, 150, 152, 3, 72, 36, 0, 151, 153, 3, 12, 6, 0, 152, 151, 1, 0, 0, 0, 152, 153, 1, 0, 0, 0, 153, 155, 1, 0, 0, 0, 154, 156, 3, 14, 7, 0, 155, 154, 1, 0, 0, 0, 155, 156, 1, 0, 0, 0, 156, 158, 1, 0, 0, 0, 157, 159, 3, 18, 9, 0, 158, 157, 1, 0, 0, 0, 158, 159, 1, 0, 0, 0, 159, 161, 1, 0, 0, 0, 160, 162, 3, 20, 10, 0, 161, 160, 1, 0, 0, 0, 161, 162, 1, 0, 0, 0, 162, 164, 1, 0, 0, 0, 163, 165, 3, 22, 11, 0, 164, 163, 1, 0, 0, 0, 164, 165, 1, 0, 0, 0, 165, 168, 1, 0, 0, 0, 166, 167, 5, 189, 0, 0, 167, 169, 7, 0, 0, 0, 168, 166, 1, 0, 0, 0, 168, 169, 1, 0, 0, 0, 169, 172, 1, 0, 0, 0, 170, 171, 5, 189, 0, 0, 171, 173, 5, 169, 0, 0, 172, 170, 1, 0, 0, 0, 172, 173, 1, 0, 0, 0, 173, 175, 1, 0, 0, 0, 174, 176, 3, 24, 12, 0, 175, 174, 1, 0, 0, 0, 175, 176, 1, 0, 0, 0, 176, 178, 1, 0, 0, 0, 177, 179, 3, 16, 8, 0, 178, 177, 1, 0, 0, 0, 178, 179, 1, 0, 0, 0, 179, 181, 1, 0, 0, 0, 180, 182, 3, 26, 13, 0, 181, 180, 1, 0, 0, 0, 181, 182, 1, 0, 0, 0, 182, 185, 1, 0, 0, 0, 183, 186, 3, 30, 15, 0, 184, 186, 3, 32, 16, 0, 185, 183, 1, 0, 0, 0, 185, 184, 1, 0, 0, 0, 185, 186, 1, 0, 0, 0, 186, 188, 1, 0, 0, 0, 187, 189, 3, 34, 17, 0, 188, 187, 1, 0, 0, 0, 188, 189, 1, 0, 0, 0, 189, 7, 1, 0, 0, 0, 190, 191, 5, 189, 0, 0, 191, 192, 3, 82, 41, 0, 192, 9, 1, 0, 0, 0, 193, 194, 5, 168, 0, 0, 194, 197, 5, 197, 0, 0, 195, 196, 5, 189, 0, 0, 196, 198, 5, 164, 0, 0, 197, 195, 1, 0, 0, 0, 197, 198, 1, 0, 0, 0, 198, 11, 1, 0, 0, 0, 199, 200, 5, 68, 0, 0, 200, 201, 3, 36, 18, 0, 201, 13, 1, 0, 0, 0, 202, 204, 7, 1, 0, 0, 203, 202, 1, 0, 0, 0, 203, 204, 1, 0, 0, 0, 204, 205, 1, 0, 0, 0, 205, 206, 5, 9, 0, 0, 206, 207, 5, 90, 0, 0, 207, 208, 3, 72, 36, 0, 208, 15, 1, 0, 0, 0, 209, 210, 5, 188, 0, 0, 210, 211, 3, 114, 57, 0, 211, 212, 5, 10, 0, 0, 212, 213, 5, 220, 0, 0, 213, 214, 3, 56, 28, 0, 214, 224, 5, 236, 0, 0, 215, 216, 5, 206, 0, 0, 216, 217, 3, 114, 57, 0, 217, 218, 5, 10, 0, 0, 218, 219, 5, 220, 0, 0, 219, 220, 3, 56, 28, 0, 220, 221, 5, 236, 0, 0, 221, 223, 1, 0, 0, 0, 222, 215, 1, 0, 0, 0, 223, 226, 1, 0, 0, 0, 224, 222, 1, 0, 0, 0, 224, 225, 1, 0, 0, 0, 225, 17, 1, 0, 0, 0, 226, 224, 1, 0, 0, 0, 227, 228, 5, 129, 0, 0, 228, 229, 3, 74, 37, 0, 229, 19, 1, 0, 0, 0, 230, 231, 5, 187, 0, 0, 231, 232, 3, 74, 37, 0, 232, 21, 1, 0, 0, 0, 233, 234, 5, 73, 0, 0, 234, 241, 5, 18, 0, 0, 235, 236, 7, 0, 0, 0, 236, 237, 5, 220, 0, 0, 237, 238, 3, 72, 36, 0, 238, 239, 5, 236, 0, 0, 239, 242, 1, 0, 0, 0, 240, 242, 3, 72, 36, 0, 241, 235, 1, 0, 0, 0, 241, 240, 1, 0, 0, 0, 242, 23, 1, 0, 0, 0, 243, 244, 5, 74, 0, 0, 244, 245, 3, 74, 37, 0, 245, 25, 1, 0, 0, 0, 246, 247, 5, 122, 0, 0, 247, 248, 5, 18, 0, 0, 248, 249, 3, 46, 23, 0, 249, 27, 1, 0, 0, 0, 250, 251, 5, 122, 0, 0, 251, 252, 5, 18, 0, 0, 252, 253, 3, 72, 36, 0, 253, 29, 1, 0, 0, 0, 254, 255, 5, 99, 0, 0, 255, 258, 3, 74, 37, 0, 256, 257, 5, 206, 0, 0, 257, 259, 3, 74, 37, 0, 258, 256, 1, 0, 0, 0, 258, 259, 1, 0, 0, 0, 259, 264, 1, 0, 0, 0, 260, 261, 5, 189, 0, 0, 261, 265, 5, 164, 0, 0, 262, 263, 5, 18, 0, 0, 263, 265, 3, 72, 36, 0, 264, 260, 1, 0, 0, 0, 264, 262, 1, 0, 0, 0, 264, 265, 1, 0, 0, 0, 265, 284, 1, 0, 0, 0, 266, 267, 5, 99, 0, 0, 267, 270, 3, 74, 37, 0, 268, 269, 5, 189, 0, 0, 269, 271, 5, 164, 0, 0, 270, 268, 1, 0, 0, 0, 270, 271, 1, 0, 0, 0, 271, 272, 1, 0, 0, 0, 272, 273, 5, 118, 0, 0, 273, 274, 3, 74, 37, 0, 274, 284, 1, 0, 0, 0, 275, 276, 5, 99, 0, 0, 276, 277, 3, 74, 37, 0, 277, 278, 5, 118, 0, 0, 278, 281, 3, 74, 37, 0, 279, 280, 5, 18, 0, 0, 280, 282, 3, 72, 36, 0, 281, 279, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 284, 1, 0, 0, 0, 283, 254, 1, 0, 0, 0, 283, 266, 1, 0, 0, 0, 283, 275, 1, 0, 0, 0, 284, 31, 1, 0, 0, 0, 285, 286, 5, 118, 0, 0, 286, 287, 3, 74, 37, 0, 287, 33, 1, 0, 0, 0, 288, 289, 5, 150, 0, 0, 289, 290, 3, 52, 26, 0, 290, 35, 1, 0, 0, 0, 291, 292, 6, 18, -1, 0, 292, 294, 3, 90, 45, 0, 293, 295, 5, 61, 0, 0, 294, 293, 1, 0, 0, 0, 294, 295, 1, 0, 0, 0, 295, 297, 1, 0, 0, 0, 296, 298, 3, 44, 22, 0, 297, 296, 1, 0, 0, 0, 297, 298, 1, 0, 0, 0, 298, 304, 1, 0, 0, 0, 299, 300, 5, 220, 0, 0, 300, 301, 3, 36, 18, 0, 301, 302, 5, 236, 0, 0, 302, 304, 1, 0, 0, 0, 303, 291, 1, 0, 0, 0, 303, 299, 1, 0, 0, 0, 304, 319, 1, 0, 0, 0, 305, 306, 10, 3, 0, 0, 306, 307, 3, 40, 20, 0, 307, 308, 3, 36, 18, 4, 308, 318, 1, 0, 0, 0, 309, 311, 10, 4, 0, 0, 310, 312, 3, 38, 19, 0, 311, 310, 1, 0, 0, 0, 311, 312, 1, 0, 0, 0, 312, 313, 1, 0, 0, 0, 313, 314, 5, 90, 0, 0, 314, 315, 3, 36, 18, 0, 315, 316, 3, 42, 21, 0, 316, 318, 1, 0, 0, 0, 317, 305, 1, 0, 0, 0, 317, 309, 1, 0, 0, 0, 318, 321, 1, 0, 0, 0, 319, 317, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 37, 1, 0, 0, 0, 321, 319, 1, 0, 0, 0, 322, 324, 7, 2, 0, 0, 323, 322, 1, 0, 0, 0, 323, 324, 1, 0, 0, 0, 324, 325, 1, 0, 0, 0, 325, 332, 5, 84, 0, 0, 326, 328, 5, 84, 0, 0, 327, 329, 7, 2, 0, 0, 328, 327, 1, 0, 0, 0, 328, 329, 1, 0, 0, 0, 329, 332, 1, 0, 0, 0, 330, 332, 7, 2, 0, 0, 331, 323, 1, 0, 0, 0, 331, 326, 1, 0, 0, 0, 331, 330, 1, 0, 0, 0, 332, 366, 1, 0, 0, 0, 333, 335, 7, 3, 0, 0, 334, 333, 1, 0, 0, 0, 334, 335, 1, 0, 0, 0, 335, 336, 1, 0, 0, 0, 336, 338, 7, 4, 0, 0, 337, 339, 5, 123, 0, 0, 338, 337, 1, 0, 0, 0, 338, 339, 1, 0, 0, 0, 339, 348, 1, 0, 0, 0, 340, 342, 7, 4, 0, 0, 341, 343, 5, 123, 0, 0, 342, 341, 1, 0, 0, 0, 342, 343, 1, 0, 0, 0, 343, 345, 1, 0, 0, 0, 344, 346, 7, 3, 0, 0, 345, 344, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 348, 1, 0, 0, 0, 347, 334, 1, 0, 0, 0, 347, 340, 1, 0, 0, 0, 348, 366, 1, 0, 0, 0, 349, 351, 7, 5, 0, 0, 350, 349, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 352, 1, 0, 0, 0, 352, 354, 5, 69, 0, 0, 353, 355, 5, 123, 0, 0, 354, 353, 1, 0, 0, 0, 354, 355, 1, 0, 0, 0, 355, 364, 1, 0, 0, 0, 356, 358, 5, 69, 0, 0, 357, 359, 5, 123, 0, 0, 358, 357, 1, 0, 0, 0, 358, 359, 1, 0, 0, 0, 359, 361, 1, 0, 0, 0, 360, 362, 7, 5, 0, 0, 361, 360, 1, 0, 0, 0, 361, 362, 1, 0, 0, 0, 362, 364, 1, 0, 0, 0, 363, 350, 1, 0, 0, 0, 363, 356, 1, 0, 0, 0, 364, 366, 1, 0, 0, 0, 365, 331, 1, 0, 0, 0, 365, 347, 1, 0, 0, 0, 365, 363, 1, 0, 0, 0, 366, 39, 1, 0, 0, 0, 367, 368, 5, 31, 0, 0, 368, 371, 5, 90, 0, 0, 369, 371, 5, 206, 0, 0, 370, 367, 1, 0, 0, 0, 370, 369, 1, 0, 0, 0, 371, 41, 1, 0, 0, 0, 372, 373, 5, 119, 0, 0, 373, 382, 3, 72, 36, 0, 374, 375, 5, 179, 0, 0, 375, 376, 5, 220, 0, 0, 376, 377, 3, 72, 36, 0, 377, 378, 5, 236, 0, 0, 378, 382, 1, 0, 0, 0, 379, 380, 5, 179, 0, 0, 380, 382, 3, 72, 36, 0, 381, 372, 1, 0, 0, 0, 381, 374, 1, 0, 0, 0, 381, 379, 1, 0, 0, 0, 382, 43, 1, 0, 0, 0, 383, 384, 5, 144, 0, 0, 384, 387, 3, 50, 25, 0, 385, 386, 5, 118, 0, 0, 386, 388, 3, 50, 25, 0, 387, 385, 1, 0, 0, 0, 387, 388, 1, 0, 0, 0, 388, 45, 1, 0, 0, 0, 389, 394, 3, 48, 24, 0, 390, 391, 5, 206, 0, 0, 391, 393, 3, 48, 24, 0, 392, 390, 1, 0, 0, 0, 393, 396, 1, 0, 0, 0, 394, 392, 1, 0, 0, 0, 394, 395, 1, 0, 0, 0, 395, 47, 1, 0, 0, 0, 396, 394, 1, 0, 0, 0, 397, 399, 3, 74, 37, 0, 398, 400, 7, 6, 0, 0, 399, 398, 1, 0, 0, 0, 399, 400, 1, 0, 0, 0, 400, 403, 1, 0, 0, 0, 401, 402, 5, 117, 0, 0, 402, 404, 7, 7, 0, 0, 403, 401, 1, 0, 0, 0, 403, 404, 1, 0, 0, 0, 404, 407, 1, 0, 0, 0, 405, 406, 5, 26, 0, 0, 406, 408, 5, 199, 0, 0, 407, 405, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 49, 1, 0, 0, 0, 409, 412, 3, 102, 51, 0, 410, 411, 5, 238, 0, 0, 411, 413, 3, 102, 51, 0, 412, 410, 1, 0, 0, 0, 412, 413, 1, 0, 0, 0, 413, 51, 1, 0, 0, 0, 414, 419, 3, 54, 27, 0, 415, 416, 5, 206, 0, 0, 416, 418, 3, 54, 27, 0, 417, 415, 1, 0, 0, 0, 418, 421, 1, 0, 0, 0, 419, 417, 1, 0, 0, 0, 419, 420, 1, 0, 0, 0, 420, 53, 1, 0, 0, 0, 421, 419, 1, 0, 0, 0, 422, 423, 3, 114, 57, 0, 423, 424, 5, 212, 0, 0, 424, 425, 3, 104, 52, 0, 425, 55, 1, 0, 0, 0, 426, 428, 3, 58, 29, 0, 427, 426, 1, 0, 0, 0, 427, 428, 1, 0, 0, 0, 428, 430, 1, 0, 0, 0, 429, 431, 3, 60, 30, 0, 430, 429, 1, 0, 0, 0, 430, 431, 1, 0, 0, 0, 431, 433, 1, 0, 0, 0, 432, 434, 3, 62, 31, 0, 433, 432, 1, 0, 0, 0, 433, 434, 1, 0, 0, 0, 434, 57, 1, 0, 0, 0, 435, 436, 5, 126, 0, 0, 436, 437, 5, 18, 0, 0, 437, 438, 3, 72, 36, 0, 438, 59, 1, 0, 0, 0, 439, 440, 5, 122, 0, 0, 440, 441, 5, 18, 0, 0, 441, 442, 3, 46, 23, 0, 442, 61, 1, 0, 0, 0, 443, 444, 7, 8, 0, 0, 444, 445, 3, 64, 32, 0, 445, 63, 1, 0, 0, 0, 446, 453, 3, 66, 33, 0, 447, 448, 5, 16, 0, 0, 448, 449, 3, 66, 33, 0, 449, 450, 5, 6, 0, 0, 450, 451, 3, 66, 33, 0, 451, 453, 1, 0, 0, 0, 452, 446, 1, 0, 0, 0, 452, 447, 1, 0, 0, 0, 453, 65, 1, 0, 0, 0, 454, 455, 5, 33, 0, 0, 455, 467, 5, 142, 0, 0, 456, 457, 5, 175, 0, 0, 457, 467, 5, 128, 0, 0, 458, 459, 5, 175, 0, 0, 459, 467, 5, 64, 0, 0, 460, 461, 3, 102, 51, 0, 461, 462, 5, 128, 0, 0, 462, 467, 1, 0, 0, 0, 463, 464, 3, 102, 51, 0, 464, 465, 5, 64, 0, 0, 465, 467, 1, 0, 0, 0, 466, 454, 1, 0, 0, 0, 466, 456, 1, 0, 0, 0, 466, 458, 1, 0, 0, 0, 466, 460, 1, 0, 0, 0, 466, 463, 1, 0, 0, 0, 467, 67, 1, 0, 0, 0, 468, 469, 3, 74, 37, 0, 469, 470, 5, 0, 0, 1, 470, 69, 1, 0, 0, 0, 471, 519, 3, 114, 57, 0, 472, 473, 3, 114, 57, 0, 473, 474, 5, 220, 0, 0, 474, 475, 3, 114, 57, 0, 475, 482, 3, 70, 35, 0, 476, 477, 5, 206, 0, 0, 477, 478, 3, 114, 57, 0, 478, 479, 3, 70, 35, 0, 479, 481, 1, 0, 0, 0, 480, 476, 1, 0, 0, 0, 481, 484, 1, 0, 0, 0, 482, 480, 1, 0, 0, 0, 482, 483, 1, 0, 0, 0, 483, 485, 1, 0, 0, 0, 484, 482, 1, 0, 0, 0, 485, 486, 5, 236, 0, 0, 486, 519, 1, 0, 0, 0, 487, 488, 3, 114, 57, 0, 488, 489, 5, 220, 0, 0, 489, 494, 3, 116, 58, 0, 490, 491, 5, 206, 0, 0, 491, 493, 3, 116, 58, 0, 492, 490, 1, 0, 0, 0, 493, 496, 1, 0, 0, 0, 494, 492, 1, 0, 0, 0, 494, 495, 1, 0, 0, 0, 495, 497, 1, 0, 0, 0, 496, 494, 1, 0, 0, 0, 497, 498, 5, 236, 0, 0, 498, 519, 1, 0, 0, 0, 499, 500, 3, 114, 57, 0, 500, 501, 5, 220, 0, 0, 501, 506, 3, 70, 35, 0, 502, 503, 5, 206, 0, 0, 503, 505, 3, 70, 35, 0, 504, 502, 1, 0, 0, 0, 505, 508, 1, 0, 0, 0, 506, 504, 1, 0, 0, 0, 506, 507, 1, 0, 0, 0, 507, 509, 1, 0, 0, 0, 508, 506, 1, 0, 0, 0, 509, 510, 5, 236, 0, 0, 510, 519, 1, 0, 0, 0, 511, 512, 3, 114, 57, 0, 512, 514, 5, 220, 0, 0, 513, 515, 3, 72, 36, 0, 514, 513, 1, 0, 0, 0, 514, 515, 1, 0, 0, 0, 515, 516, 1, 0, 0, 0, 516, 517, 5, 236, 0, 0, 517, 519, 1, 0, 0, 0, 518, 471, 1, 0, 0, 0, 518, 472, 1, 0, 0, 0, 518, 487, 1, 0, 0, 0, 518, 499, 1, 0, 0, 0, 518, 511, 1, 0, 0, 0, 519, 71, 1, 0, 0, 0, 520, 525, 3, 74, 37, 0, 521, 522, 5, 206, 0, 0, 522, 524, 3, 74, 37, 0, 523, 521, 1, 0, 0, 0, 524, 527, 1, 0, 0, 0, 525, 523, 1, 0, 0, 0, 525, 526, 1, 0, 0, 0, 526, 73, 1, 0, 0, 0, 527, 525, 1, 0, 0, 0, 528, 529, 6, 37, -1, 0, 529, 531, 5, 19, 0, 0, 530, 532, 3, 74, 37, 0, 531, 530, 1, 0, 0, 0, 531, 532, 1, 0, 0, 0, 532, 538, 1, 0, 0, 0, 533, 534, 5, 186, 0, 0, 534, 535, 3, 74, 37, 0, 535, 536, 5, 163, 0, 0, 536, 537, 3, 74, 37, 0, 537, 539, 1, 0, 0, 0, 538, 533, 1, 0, 0, 0, 539, 540, 1, 0, 0, 0, 540, 538, 1, 0, 0, 0, 540, 541, 1, 0, 0, 0, 541, 544, 1, 0, 0, 0, 542, 543, 5, 52, 0, 0, 543, 545, 3, 74, 37, 0, 544, 542, 1, 0, 0, 0, 544, 545, 1, 0, 0, 0, 545, 546, 1, 0, 0, 0, 546, 547, 5, 53, 0, 0, 547, 658, 1, 0, 0, 0, 548, 549, 5, 20, 0, 0, 549, 550, 5, 220, 0, 0, 550, 551, 3, 74, 37, 0, 551, 552, 5, 10, 0, 0, 552, 553, 3, 70, 35, 0, 553, 554, 5, 236, 0, 0, 554, 658, 1, 0, 0, 0, 555, 556, 5, 36, 0, 0, 556, 658, 5, 199, 0, 0, 557, 558, 5, 59, 0, 0, 558, 559, 5, 220, 0, 0, 559, 560, 3, 106, 53, 0, 560, 561, 5, 68, 0, 0, 561, 562, 3, 74, 37, 0, 562, 563, 5, 236, 0, 0, 563, 658, 1, 0, 0, 0, 564, 565, 5, 86, 0, 0, 565, 566, 3, 74, 37, 0, 566, 567, 3, 106, 53, 0, 567, 658, 1, 0, 0, 0, 568, 569, 5, 155, 0, 0, 569, 570, 5, 220, 0, 0, 570, 571, 3, 74, 37, 0, 571, 572, 5, 68, 0, 0, 572, 575, 3, 74, 37, 0, 573, 574, 5, 65, 0, 0, 574, 576, 3, 74, 37, 0, 575, 573, 1, 0, 0, 0, 575, 576, 1, 0, 0, 0, 576, 577, 1, 0, 0, 0, 577, 578, 5, 236, 0, 0, 578, 658, 1, 0, 0, 0, 579, 580, 5, 166, 0, 0, 580, 658, 5, 199, 0, 0, 581, 582, 5, 171, 0, 0, 582, 583, 5, 220, 0, 0, 583, 584, 7, 9, 0, 0, 584, 585, 5, 199, 0, 0, 585, 586, 5, 68, 0, 0, 586, 587, 3, 74, 37, 0, 587, 588, 5, 236, 0, 0, 588, 658, 1, 0, 0, 0, 589, 590, 3, 114, 57, 0, 590, 592, 5, 220, 0, 0, 591, 593, 3, 72, 36, 0, 592, 591, 1, 0, 0, 0, 592, 593, 1, 0, 0, 0, 593, 594, 1, 0, 0, 0, 594, 595, 5, 236, 0, 0, 595, 596, 1, 0, 0, 0, 596, 597, 5, 125, 0, 0, 597, 598, 5, 220, 0, 0, 598, 599, 3, 56, 28, 0, 599, 600, 5, 236, 0, 0, 600, 658, 1, 0, 0, 0, 601, 602, 3, 114, 57, 0, 602, 604, 5, 220, 0, 0, 603, 605, 3, 72, 36, 0, 604, 603, 1, 0, 0, 0, 604, 605, 1, 0, 0, 0, 605, 606, 1, 0, 0, 0, 606, 607, 5, 236, 0, 0, 607, 608, 1, 0, 0, 0, 608, 609, 5, 125, 0, 0, 609, 610, 3, 114, 57, 0, 610, 658, 1, 0, 0, 0, 611, 617, 3, 114, 57, 0, 612, 614, 5, 220, 0, 0, 613, 615, 3, 72, 36, 0, 614, 613, 1, 0, 0, 0, 614, 615, 1, 0, 0, 0, 615, 616, 1, 0, 0, 0, 616, 618, 5, 236, 0, 0, 617, 612, 1, 0, 0, 0, 617, 618, 1, 0, 0, 0, 618, 619, 1, 0, 0, 0, 619, 621, 5, 220, 0, 0, 620, 622, 5, 49, 0, 0, 621, 620, 1, 0, 0, 0, 621, 622, 1, 0, 0, 0, 622, 624, 1, 0, 0, 0, 623, 625, 3, 76, 38, 0, 624, 623, 1, 0, 0, 0, 624, 625, 1, 0, 0, 0, 625, 626, 1, 0, 0, 0, 626, 627, 5, 236, 0, 0, 627, 658, 1, 0, 0, 0, 628, 658, 3, 104, 52, 0, 629, 630, 5, 208, 0, 0, 630, 658, 3, 74, 37, 18, 631, 632, 5, 115, 0, 0, 632, 658, 3, 74, 37, 12, 633, 634, 3, 94, 47, 0, 634, 635, 5, 210, 0, 0, 635, 637, 1, 0, 0, 0, 636, 633, 1, 0, 0, 0, 636, 637, 1, 0, 0, 0, 637, 638, 1, 0, 0, 0, 638, 658, 5, 202, 0, 0, 639, 640, 5, 220, 0, 0, 640, 641, 3, 2, 1, 0, 641, 642, 5, 236, 0, 0, 642, 658, 1, 0, 0, 0, 643, 644, 5, 220, 0, 0, 644, 645, 3, 74, 37, 0, 645, 646, 5, 236, 0, 0, 646, 658, 1, 0, 0, 0, 647, 648, 5, 220, 0, 0, 648, 649, 3, 72, 36, 0, 649, 650, 5, 236, 0, 0, 650, 658, 1, 0, 0, 0, 651, 653, 5, 219, 0, 0, 652, 654, 3, 72, 36, 0, 653, 652, 1, 0, 0, 0, 653, 654, 1, 0, 0, 0, 654, 655, 1, 0, 0, 0, 655, 658, 5, 235, 0, 0, 656, 658, 3, 86, 43, 0, 657, 528, 1, 0, 0, 0, 657, 548, 1, 0, 0, 0, 657, 555, 1, 0, 0, 0, 657, 557, 1, 0, 0, 0, 657, 564, 1, 0, 0, 0, 657, 568, 1, 0, 0, 0, 657, 579, 1, 0, 0, 0, 657, 581, 1, 0, 0, 0, 657, 589, 1, 0, 0, 0, 657, 601, 1, 0, 0, 0, 657, 611, 1, 0, 0, 0, 657, 628, 1, 0, 0, 0, 657, 629, 1, 0, 0, 0, 657, 631, 1, 0, 0, 0, 657, 636, 1, 0, 0, 0, 657, 639, 1, 0, 0, 0, 657, 643, 1, 0, 0, 0, 657, 647, 1, 0, 0, 0, 657, 651, 1, 0, 0, 0, 657, 656, 1, 0, 0, 0, 658, 752, 1, 0, 0, 0, 659, 663, 10, 17, 0, 0, 660, 664, 5, 202, 0, 0, 661, 664, 5, 238, 0, 0, 662, 664, 5, 227, 0, 0, 663, 660, 1, 0, 0, 0, 663, 661, 1, 0, 0, 0, 663, 662, 1, 0, 0, 0, 664, 665, 1, 0, 0, 0, 665, 751, 3, 74, 37, 18, 666, 670, 10, 16, 0, 0, 667, 671, 5, 228, 0, 0, 668, 671, 5, 208, 0, 0, 669, 671, 5, 207, 0, 0, 670, 667, 1, 0, 0, 0, 670, 668, 1, 0, 0, 0, 670, 669, 1, 0, 0, 0, 671, 672, 1, 0, 0, 0, 672, 751, 3, 74, 37, 17, 673, 698, 10, 15, 0, 0, 674, 699, 5, 211, 0, 0, 675, 699, 5, 212, 0, 0, 676, 699, 5, 223, 0, 0, 677, 699, 5, 221, 0, 0, 678, 699, 5, 222, 0, 0, 679, 699, 5, 213, 0, 0, 680, 699, 5, 214, 0, 0, 681, 683, 5, 115, 0, 0, 682, 681, 1, 0, 0, 0, 682, 683, 1, 0, 0, 0, 683, 684, 1, 0, 0, 0, 684, 686, 5, 80, 0, 0, 685, 687, 5, 25, 0, 0, 686, 685, 1, 0, 0, 0, 686, 687, 1, 0, 0, 0, 687, 699, 1, 0, 0, 0, 688, 690, 5, 115, 0, 0, 689, 688, 1, 0, 0, 0, 689, 690, 1, 0, 0, 0, 690, 691, 1, 0, 0, 0, 691, 699, 7, 10, 0, 0, 692, 699, 5, 232, 0, 0, 693, 699, 5, 233, 0, 0, 694, 699, 5, 225, 0, 0, 695, 699, 5, 216, 0, 0, 696, 699, 5, 217, 0, 0, 697, 699, 5, 224, 0, 0, 698, 674, 1, 0, 0, 0, 698, 675, 1, 0, 0, 0, 698, 676, 1, 0, 0, 0, 698, 677, 1, 0, 0, 0, 698, 678, 1, 0, 0, 0, 698, 679, 1, 0, 0, 0, 698, 680, 1, 0, 0, 0, 698, 682, 1, 0, 0, 0, 698, 689, 1, 0, 0, 0, 698, 692, 1, 0, 0, 0, 698, 693, 1, 0, 0, 0, 698, 694, 1, 0, 0, 0, 698, 695, 1, 0, 0, 0, 698, 696, 1, 0, 0, 0, 698, 697, 1, 0, 0, 0, 699, 700, 1, 0, 0, 0, 700, 751, 3, 74, 37, 16, 701, 702, 10, 13, 0, 0, 702, 703, 5, 226, 0, 0, 703, 751, 3, 74, 37, 14, 704, 705, 10, 11, 0, 0, 705, 706, 5, 6, 0, 0, 706, 751, 3, 74, 37, 12, 707, 708, 10, 10, 0, 0, 708, 709, 5, 121, 0, 0, 709, 751, 3, 74, 37, 11, 710, 712, 10, 9, 0, 0, 711, 713, 5, 115, 0, 0, 712, 711, 1, 0, 0, 0, 712, 713, 1, 0, 0, 0, 713, 714, 1, 0, 0, 0, 714, 715, 5, 16, 0, 0, 715, 716, 3, 74, 37, 0, 716, 717, 5, 6, 0, 0, 717, 718, 3, 74, 37, 10, 718, 751, 1, 0, 0, 0, 719, 720, 10, 8, 0, 0, 720, 721, 5, 229, 0, 0, 721, 722, 3, 74, 37, 0, 722, 723, 5, 205, 0, 0, 723, 724, 3, 74, 37, 8, 724, 751, 1, 0, 0, 0, 725, 726, 10, 21, 0, 0, 726, 727, 5, 219, 0, 0, 727, 728, 3, 74, 37, 0, 728, 729, 5, 235, 0, 0, 729, 751, 1, 0, 0, 0, 730, 731, 10, 20, 0, 0, 731, 732, 5, 210, 0, 0, 732, 751, 5, 197, 0, 0, 733, 734, 10, 19, 0, 0, 734, 735, 5, 210, 0, 0, 735, 751, 3, 114, 57, 0, 736, 737, 10, 14, 0, 0, 737, 739, 5, 88, 0, 0, 738, 740, 5, 115, 0, 0, 739, 738, 1, 0, 0, 0, 739, 740, 1, 0, 0, 0, 740, 741, 1, 0, 0, 0, 741, 751, 5, 116, 0, 0, 742, 748, 10, 7, 0, 0, 743, 749, 3, 112, 56, 0, 744, 745, 5, 10, 0, 0, 745, 749, 3, 114, 57, 0, 746, 747, 5, 10, 0, 0, 747, 749, 5, 199, 0, 0, 748, 743, 1, 0, 0, 0, 748, 744, 1, 0, 0, 0, 748, 746, 1, 0, 0, 0, 749, 751, 1, 0, 0, 0, 750, 659, 1, 0, 0, 0, 750, 666, 1, 0, 0, 0, 750, 673, 1, 0, 0, 0, 750, 701, 1, 0, 0, 0, 750, 704, 1, 0, 0, 0, 750, 707, 1, 0, 0, 0, 750, 710, 1, 0, 0, 0, 750, 719, 1, 0, 0, 0, 750, 725, 1, 0, 0, 0, 750, 730, 1, 0, 0, 0, 750, 733, 1, 0, 0, 0, 750, 736, 1, 0, 0, 0, 750, 742, 1, 0, 0, 0, 751, 754, 1, 0, 0, 0, 752, 750, 1, 0, 0, 0, 752, 753, 1, 0, 0, 0, 753, 75, 1, 0, 0, 0, 754, 752, 1, 0, 0, 0, 755, 760, 3, 78, 39, 0, 756, 757, 5, 206, 0, 0, 757, 759, 3, 78, 39, 0, 758, 756, 1, 0, 0, 0, 759, 762, 1, 0, 0, 0, 760, 758, 1, 0, 0, 0, 760, 761, 1, 0, 0, 0, 761, 77, 1, 0, 0, 0, 762, 760, 1, 0, 0, 0, 763, 766, 3, 80, 40, 0, 764, 766, 3, 74, 37, 0, 765, 763, 1, 0, 0, 0, 765, 764, 1, 0, 0, 0, 766, 79, 1, 0, 0, 0, 767, 768, 5, 220, 0, 0, 768, 773, 3, 114, 57, 0, 769, 770, 5, 206, 0, 0, 770, 772, 3, 114, 57, 0, 771, 769, 1, 0, 0, 0, 772, 775, 1, 0, 0, 0, 773, 771, 1, 0, 0, 0, 773, 774, 1, 0, 0, 0, 774, 776, 1, 0, 0, 0, 775, 773, 1, 0, 0, 0, 776, 777, 5, 236, 0, 0, 777, 787, 1, 0, 0, 0, 778, 783, 3, 114, 57, 0, 779, 780, 5, 206, 0, 0, 780, 782, 3, 114, 57, 0, 781, 779, 1, 0, 0, 0, 782, 785, 1, 0, 0, 0, 783, 781, 1, 0, 0, 0, 783, 784, 1, 0, 0, 0, 784, 787, 1, 0, 0, 0, 785, 783, 1, 0, 0, 0, 786, 767, 1, 0, 0, 0, 786, 778, 1, 0, 0, 0, 787, 788, 1, 0, 0, 0, 788, 789, 5, 201, 0, 0, 789, 790, 3, 74, 37, 0, 790, 81, 1, 0, 0, 0, 791, 796, 3, 84, 42, 0, 792, 793, 5, 206, 0, 0, 793, 795, 3, 84, 42, 0, 794, 792, 1, 0, 0, 0, 795, 798, 1, 0, 0, 0, 796, 794, 1, 0, 0, 0, 796, 797, 1, 0, 0, 0, 797, 83, 1, 0, 0, 0, 798, 796, 1, 0, 0, 0, 799, 800, 3, 114, 57, 0, 800, 801, 5, 10, 0, 0, 801, 802, 5, 220, 0, 0, 802, 803, 3, 2, 1, 0, 803, 804, 5, 236, 0, 0, 804, 810, 1, 0, 0, 0, 805, 806, 3, 74, 37, 0, 806, 807, 5, 10, 0, 0, 807, 808, 3, 114, 57, 0, 808, 810, 1, 0, 0, 0, 809, 799, 1, 0, 0, 0, 809, 805, 1, 0, 0, 0, 810, 85, 1, 0, 0, 0, 811, 819, 5, 200, 0, 0, 812, 813, 3, 94, 47, 0, 813, 814, 5, 210, 0, 0, 814, 816, 1, 0, 0, 0, 815, 812, 1, 0, 0, 0, 815, 816, 1, 0, 0, 0, 816, 817, 1, 0, 0, 0, 817, 819, 3, 88, 44, 0, 818, 811, 1, 0, 0, 0, 818, 815, 1, 0, 0, 0, 819, 87, 1, 0, 0, 0, 820, 825, 3, 114, 57, 0, 821, 822, 5, 210, 0, 0, 822, 824, 3, 114, 57, 0, 823, 821, 1, 0, 0, 0, 824, 827, 1, 0, 0, 0, 825, 823, 1, 0, 0, 0, 825, 826, 1, 0, 0, 0, 826, 89, 1, 0, 0, 0, 827, 825, 1, 0, 0, 0, 828, 829, 6, 45, -1, 0, 829, 837, 3, 94, 47, 0, 830, 837, 3, 92, 46, 0, 831, 832, 5, 220, 0, 0, 832, 833, 3, 2, 1, 0, 833, 834, 5, 236, 0, 0, 834, 837, 1, 0, 0, 0, 835, 837, 5, 200, 0, 0, 836, 828, 1, 0, 0, 0, 836, 830, 1, 0, 0, 0, 836, 831, 1, 0, 0, 0, 836, 835, 1, 0, 0, 0, 837, 846, 1, 0, 0, 0, 838, 842, 10, 2, 0, 0, 839, 843, 3, 112, 56, 0, 840, 841, 5, 10, 0, 0, 841, 843, 3, 114, 57, 0, 842, 839, 1, 0, 0, 0, 842, 840, 1, 0, 0, 0, 843, 845, 1, 0, 0, 0, 844, 838, 1, 0, 0, 0, 845, 848, 1, 0, 0, 0, 846, 844, 1, 0, 0, 0, 846, 847, 1, 0, 0, 0, 847, 91, 1, 0, 0, 0, 848, 846, 1, 0, 0, 0, 849, 850, 3, 114, 57, 0, 850, 852, 5, 220, 0, 0, 851, 853, 3, 96, 48, 0, 852, 851, 1, 0, 0, 0, 852, 853, 1, 0, 0, 0, 853, 854, 1, 0, 0, 0, 854, 855, 5, 236, 0, 0, 855, 93, 1, 0, 0, 0, 856, 857, 3, 98, 49, 0, 857, 858, 5, 210, 0, 0, 858, 860, 1, 0, 0, 0, 859, 856, 1, 0, 0, 0, 859, 860, 1, 0, 0, 0, 860, 861, 1, 0, 0, 0, 861, 862, 3, 114, 57, 0, 862, 95, 1, 0, 0, 0, 863, 868, 3, 74, 37, 0, 864, 865, 5, 206, 0, 0, 865, 867, 3, 74, 37, 0, 866, 864, 1, 0, 0, 0, 867, 870, 1, 0, 0, 0, 868, 866, 1, 0, 0, 0, 868, 869, 1, 0, 0, 0, 869, 97, 1, 0, 0, 0, 870, 868, 1, 0, 0, 0, 871, 872, 3, 114, 57, 0, 872, 99, 1, 0, 0, 0, 873, 882, 5, 195, 0, 0, 874, 875, 5, 210, 0, 0, 875, 882, 7, 11, 0, 0, 876, 877, 5, 197, 0, 0, 877, 879, 5, 210, 0, 0, 878, 880, 7, 11, 0, 0, 879, 878, 1, 0, 0, 0, 879, 880, 1, 0, 0, 0, 880, 882, 1, 0, 0, 0, 881, 873, 1, 0, 0, 0, 881, 874, 1, 0, 0, 0, 881, 876, 1, 0, 0, 0, 882, 101, 1, 0, 0, 0, 883, 885, 7, 12, 0, 0, 884, 883, 1, 0, 0, 0, 884, 885, 1, 0, 0, 0, 885, 892, 1, 0, 0, 0, 886, 893, 3, 100, 50, 0, 887, 893, 5, 196, 0, 0, 888, 893, 5, 197, 0, 0, 889, 893, 5, 198, 0, 0, 890, 893, 5, 82, 0, 0, 891, 893, 5, 113, 0, 0, 892, 886, 1, 0, 0, 0, 892, 887, 1, 0, 0, 0, 892, 888, 1, 0, 0, 0, 892, 889, 1, 0, 0, 0, 892, 890, 1, 0, 0, 0, 892, 891, 1, 0, 0, 0, 893, 103, 1, 0, 0, 0, 894, 898, 3, 102, 51, 0, 895, 898, 5, 199, 0, 0, 896, 898, 5, 116, 0, 0, 897, 894, 1, 0, 0, 0, 897, 895, 1, 0, 0, 0, 897, 896, 1, 0, 0, 0, 898, 105, 1, 0, 0, 0, 899, 900, 7, 13, 0, 0, 900, 107, 1, 0, 0, 0, 901, 902, 7, 14, 0, 0, 902, 109, 1, 0, 0, 0, 903, 904, 7, 15, 0, 0, 904, 111, 1, 0, 0, 0, 905, 908, 5, 194, 0, 0, 906, 908, 3, 110, 55, 0, 907, 905, 1, 0, 0, 0, 907, 906, 1, 0, 0, 0, 908, 113, 1, 0, 0, 0, 909, 913, 5, 194, 0, 0, 910, 913, 3, 106, 53, 0, 911, 913, 3, 108, 54, 0, 912, 909, 1, 0, 0, 0, 912, 910, 1, 0, 0, 0, 912, 911, 1, 0, 0, 0, 913, 115, 1, 0, 0, 0, 914, 915, 5, 199, 0, 0, 915, 916, 5, 212, 0, 0, 916, 917, 3, 102, 51, 0, 917, 117, 1, 0, 0, 0, 114, 120, 130, 138, 141, 145, 148, 152, 155, 158, 161, 164, 168, 172, 175, 178, 181, 185, 188, 197, 203, 224, 241, 258, 264, 270, 281, 283, 294, 297, 303, 311, 317, 319, 323, 328, 331, 334, 338, 342, 345, 347, 350, 354, 358, 361, 363, 365, 370, 381, 387, 394, 399, 403, 407, 412, 419, 427, 430, 433, 452, 466, 482, 494, 506, 514, 518, 525, 531, 540, 544, 575, 592, 604, 614, 617, 621, 624, 636, 653, 657, 663, 670, 682, 686, 689, 698, 712, 739, 748, 750, 752, 760, 765, 773, 783, 786, 796, 809, 815, 818, 825, 836, 842, 846, 852, 859, 868, 879, 881, 884, 892, 897, 907, 912] \ No newline at end of file +[4, 1, 242, 922, 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, 1, 0, 1, 0, 3, 0, 121, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 129, 8, 1, 10, 1, 12, 1, 132, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 139, 8, 2, 1, 3, 3, 3, 142, 8, 3, 1, 3, 1, 3, 3, 3, 146, 8, 3, 1, 3, 3, 3, 149, 8, 3, 1, 3, 1, 3, 3, 3, 153, 8, 3, 1, 3, 3, 3, 156, 8, 3, 1, 3, 3, 3, 159, 8, 3, 1, 3, 3, 3, 162, 8, 3, 1, 3, 3, 3, 165, 8, 3, 1, 3, 1, 3, 3, 3, 169, 8, 3, 1, 3, 1, 3, 3, 3, 173, 8, 3, 1, 3, 3, 3, 176, 8, 3, 1, 3, 3, 3, 179, 8, 3, 1, 3, 3, 3, 182, 8, 3, 1, 3, 1, 3, 3, 3, 186, 8, 3, 1, 3, 3, 3, 189, 8, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 198, 8, 5, 1, 6, 1, 6, 1, 6, 1, 7, 3, 7, 204, 8, 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, 8, 1, 8, 1, 8, 1, 8, 1, 8, 5, 8, 223, 8, 8, 10, 8, 12, 8, 226, 9, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 242, 8, 11, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 259, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 265, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 271, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 282, 8, 15, 3, 15, 284, 8, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 3, 18, 295, 8, 18, 1, 18, 3, 18, 298, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 304, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 312, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 5, 18, 318, 8, 18, 10, 18, 12, 18, 321, 9, 18, 1, 19, 3, 19, 324, 8, 19, 1, 19, 1, 19, 1, 19, 3, 19, 329, 8, 19, 1, 19, 3, 19, 332, 8, 19, 1, 19, 3, 19, 335, 8, 19, 1, 19, 1, 19, 3, 19, 339, 8, 19, 1, 19, 1, 19, 3, 19, 343, 8, 19, 1, 19, 3, 19, 346, 8, 19, 3, 19, 348, 8, 19, 1, 19, 3, 19, 351, 8, 19, 1, 19, 1, 19, 3, 19, 355, 8, 19, 1, 19, 1, 19, 3, 19, 359, 8, 19, 1, 19, 3, 19, 362, 8, 19, 3, 19, 364, 8, 19, 3, 19, 366, 8, 19, 1, 20, 1, 20, 1, 20, 3, 20, 371, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 382, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 388, 8, 22, 1, 23, 1, 23, 1, 23, 5, 23, 393, 8, 23, 10, 23, 12, 23, 396, 9, 23, 1, 24, 1, 24, 3, 24, 400, 8, 24, 1, 24, 1, 24, 3, 24, 404, 8, 24, 1, 24, 1, 24, 3, 24, 408, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 414, 8, 25, 3, 25, 416, 8, 25, 1, 26, 1, 26, 1, 26, 5, 26, 421, 8, 26, 10, 26, 12, 26, 424, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 3, 28, 431, 8, 28, 1, 28, 3, 28, 434, 8, 28, 1, 28, 3, 28, 437, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 456, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 470, 8, 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, 5, 35, 484, 8, 35, 10, 35, 12, 35, 487, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 496, 8, 35, 10, 35, 12, 35, 499, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 508, 8, 35, 10, 35, 12, 35, 511, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 518, 8, 35, 1, 35, 1, 35, 3, 35, 522, 8, 35, 1, 36, 1, 36, 1, 36, 5, 36, 527, 8, 36, 10, 36, 12, 36, 530, 9, 36, 1, 37, 1, 37, 1, 37, 3, 37, 535, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 4, 37, 542, 8, 37, 11, 37, 12, 37, 543, 1, 37, 1, 37, 3, 37, 548, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 579, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 596, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 608, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 618, 8, 37, 1, 37, 3, 37, 621, 8, 37, 1, 37, 1, 37, 3, 37, 625, 8, 37, 1, 37, 3, 37, 628, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 640, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 657, 8, 37, 1, 37, 1, 37, 3, 37, 661, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 667, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 674, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 686, 8, 37, 1, 37, 1, 37, 3, 37, 690, 8, 37, 1, 37, 3, 37, 693, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 702, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 716, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 743, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 752, 8, 37, 5, 37, 754, 8, 37, 10, 37, 12, 37, 757, 9, 37, 1, 38, 1, 38, 1, 38, 5, 38, 762, 8, 38, 10, 38, 12, 38, 765, 9, 38, 1, 39, 1, 39, 3, 39, 769, 8, 39, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 775, 8, 40, 10, 40, 12, 40, 778, 9, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 785, 8, 40, 10, 40, 12, 40, 788, 9, 40, 3, 40, 790, 8, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 5, 41, 798, 8, 41, 10, 41, 12, 41, 801, 9, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 813, 8, 42, 1, 43, 1, 43, 1, 43, 1, 43, 3, 43, 819, 8, 43, 1, 43, 3, 43, 822, 8, 43, 1, 44, 1, 44, 1, 44, 5, 44, 827, 8, 44, 10, 44, 12, 44, 830, 9, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 840, 8, 45, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 846, 8, 45, 5, 45, 848, 8, 45, 10, 45, 12, 45, 851, 9, 45, 1, 46, 1, 46, 1, 46, 3, 46, 856, 8, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 3, 47, 863, 8, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 5, 48, 870, 8, 48, 10, 48, 12, 48, 873, 9, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 883, 8, 50, 3, 50, 885, 8, 50, 1, 51, 3, 51, 888, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 896, 8, 51, 1, 52, 1, 52, 1, 52, 3, 52, 901, 8, 52, 1, 53, 1, 53, 1, 54, 1, 54, 1, 55, 1, 55, 1, 56, 1, 56, 3, 56, 911, 8, 56, 1, 57, 1, 57, 1, 57, 3, 57, 916, 8, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 0, 3, 36, 74, 90, 59, 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, 0, 16, 2, 0, 32, 32, 141, 141, 2, 0, 84, 84, 96, 96, 3, 0, 4, 4, 8, 8, 12, 12, 4, 0, 4, 4, 7, 8, 12, 12, 147, 147, 2, 0, 96, 96, 140, 140, 2, 0, 4, 4, 8, 8, 2, 0, 11, 11, 42, 43, 2, 0, 62, 62, 93, 93, 2, 0, 133, 133, 143, 143, 3, 0, 17, 17, 95, 95, 170, 170, 2, 0, 79, 79, 98, 98, 1, 0, 196, 197, 2, 0, 208, 208, 228, 228, 8, 0, 37, 37, 76, 76, 108, 108, 110, 110, 132, 132, 145, 145, 185, 185, 190, 190, 13, 0, 2, 24, 26, 36, 38, 75, 77, 81, 83, 107, 109, 109, 111, 112, 114, 115, 117, 130, 133, 144, 146, 184, 186, 189, 191, 192, 4, 0, 36, 36, 62, 62, 77, 77, 91, 91, 1043, 0, 120, 1, 0, 0, 0, 2, 124, 1, 0, 0, 0, 4, 138, 1, 0, 0, 0, 6, 141, 1, 0, 0, 0, 8, 190, 1, 0, 0, 0, 10, 193, 1, 0, 0, 0, 12, 199, 1, 0, 0, 0, 14, 203, 1, 0, 0, 0, 16, 209, 1, 0, 0, 0, 18, 227, 1, 0, 0, 0, 20, 230, 1, 0, 0, 0, 22, 233, 1, 0, 0, 0, 24, 243, 1, 0, 0, 0, 26, 246, 1, 0, 0, 0, 28, 250, 1, 0, 0, 0, 30, 283, 1, 0, 0, 0, 32, 285, 1, 0, 0, 0, 34, 288, 1, 0, 0, 0, 36, 303, 1, 0, 0, 0, 38, 365, 1, 0, 0, 0, 40, 370, 1, 0, 0, 0, 42, 381, 1, 0, 0, 0, 44, 383, 1, 0, 0, 0, 46, 389, 1, 0, 0, 0, 48, 397, 1, 0, 0, 0, 50, 415, 1, 0, 0, 0, 52, 417, 1, 0, 0, 0, 54, 425, 1, 0, 0, 0, 56, 430, 1, 0, 0, 0, 58, 438, 1, 0, 0, 0, 60, 442, 1, 0, 0, 0, 62, 446, 1, 0, 0, 0, 64, 455, 1, 0, 0, 0, 66, 469, 1, 0, 0, 0, 68, 471, 1, 0, 0, 0, 70, 521, 1, 0, 0, 0, 72, 523, 1, 0, 0, 0, 74, 660, 1, 0, 0, 0, 76, 758, 1, 0, 0, 0, 78, 768, 1, 0, 0, 0, 80, 789, 1, 0, 0, 0, 82, 794, 1, 0, 0, 0, 84, 812, 1, 0, 0, 0, 86, 821, 1, 0, 0, 0, 88, 823, 1, 0, 0, 0, 90, 839, 1, 0, 0, 0, 92, 852, 1, 0, 0, 0, 94, 862, 1, 0, 0, 0, 96, 866, 1, 0, 0, 0, 98, 874, 1, 0, 0, 0, 100, 884, 1, 0, 0, 0, 102, 887, 1, 0, 0, 0, 104, 900, 1, 0, 0, 0, 106, 902, 1, 0, 0, 0, 108, 904, 1, 0, 0, 0, 110, 906, 1, 0, 0, 0, 112, 910, 1, 0, 0, 0, 114, 915, 1, 0, 0, 0, 116, 917, 1, 0, 0, 0, 118, 121, 3, 2, 1, 0, 119, 121, 3, 6, 3, 0, 120, 118, 1, 0, 0, 0, 120, 119, 1, 0, 0, 0, 121, 122, 1, 0, 0, 0, 122, 123, 5, 0, 0, 1, 123, 1, 1, 0, 0, 0, 124, 130, 3, 4, 2, 0, 125, 126, 5, 176, 0, 0, 126, 127, 5, 4, 0, 0, 127, 129, 3, 4, 2, 0, 128, 125, 1, 0, 0, 0, 129, 132, 1, 0, 0, 0, 130, 128, 1, 0, 0, 0, 130, 131, 1, 0, 0, 0, 131, 3, 1, 0, 0, 0, 132, 130, 1, 0, 0, 0, 133, 139, 3, 6, 3, 0, 134, 135, 5, 220, 0, 0, 135, 136, 3, 2, 1, 0, 136, 137, 5, 236, 0, 0, 137, 139, 1, 0, 0, 0, 138, 133, 1, 0, 0, 0, 138, 134, 1, 0, 0, 0, 139, 5, 1, 0, 0, 0, 140, 142, 3, 8, 4, 0, 141, 140, 1, 0, 0, 0, 141, 142, 1, 0, 0, 0, 142, 143, 1, 0, 0, 0, 143, 145, 5, 146, 0, 0, 144, 146, 5, 49, 0, 0, 145, 144, 1, 0, 0, 0, 145, 146, 1, 0, 0, 0, 146, 148, 1, 0, 0, 0, 147, 149, 3, 10, 5, 0, 148, 147, 1, 0, 0, 0, 148, 149, 1, 0, 0, 0, 149, 150, 1, 0, 0, 0, 150, 152, 3, 72, 36, 0, 151, 153, 3, 12, 6, 0, 152, 151, 1, 0, 0, 0, 152, 153, 1, 0, 0, 0, 153, 155, 1, 0, 0, 0, 154, 156, 3, 14, 7, 0, 155, 154, 1, 0, 0, 0, 155, 156, 1, 0, 0, 0, 156, 158, 1, 0, 0, 0, 157, 159, 3, 18, 9, 0, 158, 157, 1, 0, 0, 0, 158, 159, 1, 0, 0, 0, 159, 161, 1, 0, 0, 0, 160, 162, 3, 20, 10, 0, 161, 160, 1, 0, 0, 0, 161, 162, 1, 0, 0, 0, 162, 164, 1, 0, 0, 0, 163, 165, 3, 22, 11, 0, 164, 163, 1, 0, 0, 0, 164, 165, 1, 0, 0, 0, 165, 168, 1, 0, 0, 0, 166, 167, 5, 189, 0, 0, 167, 169, 7, 0, 0, 0, 168, 166, 1, 0, 0, 0, 168, 169, 1, 0, 0, 0, 169, 172, 1, 0, 0, 0, 170, 171, 5, 189, 0, 0, 171, 173, 5, 169, 0, 0, 172, 170, 1, 0, 0, 0, 172, 173, 1, 0, 0, 0, 173, 175, 1, 0, 0, 0, 174, 176, 3, 24, 12, 0, 175, 174, 1, 0, 0, 0, 175, 176, 1, 0, 0, 0, 176, 178, 1, 0, 0, 0, 177, 179, 3, 16, 8, 0, 178, 177, 1, 0, 0, 0, 178, 179, 1, 0, 0, 0, 179, 181, 1, 0, 0, 0, 180, 182, 3, 26, 13, 0, 181, 180, 1, 0, 0, 0, 181, 182, 1, 0, 0, 0, 182, 185, 1, 0, 0, 0, 183, 186, 3, 30, 15, 0, 184, 186, 3, 32, 16, 0, 185, 183, 1, 0, 0, 0, 185, 184, 1, 0, 0, 0, 185, 186, 1, 0, 0, 0, 186, 188, 1, 0, 0, 0, 187, 189, 3, 34, 17, 0, 188, 187, 1, 0, 0, 0, 188, 189, 1, 0, 0, 0, 189, 7, 1, 0, 0, 0, 190, 191, 5, 189, 0, 0, 191, 192, 3, 82, 41, 0, 192, 9, 1, 0, 0, 0, 193, 194, 5, 168, 0, 0, 194, 197, 5, 197, 0, 0, 195, 196, 5, 189, 0, 0, 196, 198, 5, 164, 0, 0, 197, 195, 1, 0, 0, 0, 197, 198, 1, 0, 0, 0, 198, 11, 1, 0, 0, 0, 199, 200, 5, 68, 0, 0, 200, 201, 3, 36, 18, 0, 201, 13, 1, 0, 0, 0, 202, 204, 7, 1, 0, 0, 203, 202, 1, 0, 0, 0, 203, 204, 1, 0, 0, 0, 204, 205, 1, 0, 0, 0, 205, 206, 5, 9, 0, 0, 206, 207, 5, 90, 0, 0, 207, 208, 3, 72, 36, 0, 208, 15, 1, 0, 0, 0, 209, 210, 5, 188, 0, 0, 210, 211, 3, 114, 57, 0, 211, 212, 5, 10, 0, 0, 212, 213, 5, 220, 0, 0, 213, 214, 3, 56, 28, 0, 214, 224, 5, 236, 0, 0, 215, 216, 5, 206, 0, 0, 216, 217, 3, 114, 57, 0, 217, 218, 5, 10, 0, 0, 218, 219, 5, 220, 0, 0, 219, 220, 3, 56, 28, 0, 220, 221, 5, 236, 0, 0, 221, 223, 1, 0, 0, 0, 222, 215, 1, 0, 0, 0, 223, 226, 1, 0, 0, 0, 224, 222, 1, 0, 0, 0, 224, 225, 1, 0, 0, 0, 225, 17, 1, 0, 0, 0, 226, 224, 1, 0, 0, 0, 227, 228, 5, 129, 0, 0, 228, 229, 3, 74, 37, 0, 229, 19, 1, 0, 0, 0, 230, 231, 5, 187, 0, 0, 231, 232, 3, 74, 37, 0, 232, 21, 1, 0, 0, 0, 233, 234, 5, 73, 0, 0, 234, 241, 5, 18, 0, 0, 235, 236, 7, 0, 0, 0, 236, 237, 5, 220, 0, 0, 237, 238, 3, 72, 36, 0, 238, 239, 5, 236, 0, 0, 239, 242, 1, 0, 0, 0, 240, 242, 3, 72, 36, 0, 241, 235, 1, 0, 0, 0, 241, 240, 1, 0, 0, 0, 242, 23, 1, 0, 0, 0, 243, 244, 5, 74, 0, 0, 244, 245, 3, 74, 37, 0, 245, 25, 1, 0, 0, 0, 246, 247, 5, 122, 0, 0, 247, 248, 5, 18, 0, 0, 248, 249, 3, 46, 23, 0, 249, 27, 1, 0, 0, 0, 250, 251, 5, 122, 0, 0, 251, 252, 5, 18, 0, 0, 252, 253, 3, 72, 36, 0, 253, 29, 1, 0, 0, 0, 254, 255, 5, 99, 0, 0, 255, 258, 3, 74, 37, 0, 256, 257, 5, 206, 0, 0, 257, 259, 3, 74, 37, 0, 258, 256, 1, 0, 0, 0, 258, 259, 1, 0, 0, 0, 259, 264, 1, 0, 0, 0, 260, 261, 5, 189, 0, 0, 261, 265, 5, 164, 0, 0, 262, 263, 5, 18, 0, 0, 263, 265, 3, 72, 36, 0, 264, 260, 1, 0, 0, 0, 264, 262, 1, 0, 0, 0, 264, 265, 1, 0, 0, 0, 265, 284, 1, 0, 0, 0, 266, 267, 5, 99, 0, 0, 267, 270, 3, 74, 37, 0, 268, 269, 5, 189, 0, 0, 269, 271, 5, 164, 0, 0, 270, 268, 1, 0, 0, 0, 270, 271, 1, 0, 0, 0, 271, 272, 1, 0, 0, 0, 272, 273, 5, 118, 0, 0, 273, 274, 3, 74, 37, 0, 274, 284, 1, 0, 0, 0, 275, 276, 5, 99, 0, 0, 276, 277, 3, 74, 37, 0, 277, 278, 5, 118, 0, 0, 278, 281, 3, 74, 37, 0, 279, 280, 5, 18, 0, 0, 280, 282, 3, 72, 36, 0, 281, 279, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 284, 1, 0, 0, 0, 283, 254, 1, 0, 0, 0, 283, 266, 1, 0, 0, 0, 283, 275, 1, 0, 0, 0, 284, 31, 1, 0, 0, 0, 285, 286, 5, 118, 0, 0, 286, 287, 3, 74, 37, 0, 287, 33, 1, 0, 0, 0, 288, 289, 5, 150, 0, 0, 289, 290, 3, 52, 26, 0, 290, 35, 1, 0, 0, 0, 291, 292, 6, 18, -1, 0, 292, 294, 3, 90, 45, 0, 293, 295, 5, 61, 0, 0, 294, 293, 1, 0, 0, 0, 294, 295, 1, 0, 0, 0, 295, 297, 1, 0, 0, 0, 296, 298, 3, 44, 22, 0, 297, 296, 1, 0, 0, 0, 297, 298, 1, 0, 0, 0, 298, 304, 1, 0, 0, 0, 299, 300, 5, 220, 0, 0, 300, 301, 3, 36, 18, 0, 301, 302, 5, 236, 0, 0, 302, 304, 1, 0, 0, 0, 303, 291, 1, 0, 0, 0, 303, 299, 1, 0, 0, 0, 304, 319, 1, 0, 0, 0, 305, 306, 10, 3, 0, 0, 306, 307, 3, 40, 20, 0, 307, 308, 3, 36, 18, 4, 308, 318, 1, 0, 0, 0, 309, 311, 10, 4, 0, 0, 310, 312, 3, 38, 19, 0, 311, 310, 1, 0, 0, 0, 311, 312, 1, 0, 0, 0, 312, 313, 1, 0, 0, 0, 313, 314, 5, 90, 0, 0, 314, 315, 3, 36, 18, 0, 315, 316, 3, 42, 21, 0, 316, 318, 1, 0, 0, 0, 317, 305, 1, 0, 0, 0, 317, 309, 1, 0, 0, 0, 318, 321, 1, 0, 0, 0, 319, 317, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 37, 1, 0, 0, 0, 321, 319, 1, 0, 0, 0, 322, 324, 7, 2, 0, 0, 323, 322, 1, 0, 0, 0, 323, 324, 1, 0, 0, 0, 324, 325, 1, 0, 0, 0, 325, 332, 5, 84, 0, 0, 326, 328, 5, 84, 0, 0, 327, 329, 7, 2, 0, 0, 328, 327, 1, 0, 0, 0, 328, 329, 1, 0, 0, 0, 329, 332, 1, 0, 0, 0, 330, 332, 7, 2, 0, 0, 331, 323, 1, 0, 0, 0, 331, 326, 1, 0, 0, 0, 331, 330, 1, 0, 0, 0, 332, 366, 1, 0, 0, 0, 333, 335, 7, 3, 0, 0, 334, 333, 1, 0, 0, 0, 334, 335, 1, 0, 0, 0, 335, 336, 1, 0, 0, 0, 336, 338, 7, 4, 0, 0, 337, 339, 5, 123, 0, 0, 338, 337, 1, 0, 0, 0, 338, 339, 1, 0, 0, 0, 339, 348, 1, 0, 0, 0, 340, 342, 7, 4, 0, 0, 341, 343, 5, 123, 0, 0, 342, 341, 1, 0, 0, 0, 342, 343, 1, 0, 0, 0, 343, 345, 1, 0, 0, 0, 344, 346, 7, 3, 0, 0, 345, 344, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 348, 1, 0, 0, 0, 347, 334, 1, 0, 0, 0, 347, 340, 1, 0, 0, 0, 348, 366, 1, 0, 0, 0, 349, 351, 7, 5, 0, 0, 350, 349, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 352, 1, 0, 0, 0, 352, 354, 5, 69, 0, 0, 353, 355, 5, 123, 0, 0, 354, 353, 1, 0, 0, 0, 354, 355, 1, 0, 0, 0, 355, 364, 1, 0, 0, 0, 356, 358, 5, 69, 0, 0, 357, 359, 5, 123, 0, 0, 358, 357, 1, 0, 0, 0, 358, 359, 1, 0, 0, 0, 359, 361, 1, 0, 0, 0, 360, 362, 7, 5, 0, 0, 361, 360, 1, 0, 0, 0, 361, 362, 1, 0, 0, 0, 362, 364, 1, 0, 0, 0, 363, 350, 1, 0, 0, 0, 363, 356, 1, 0, 0, 0, 364, 366, 1, 0, 0, 0, 365, 331, 1, 0, 0, 0, 365, 347, 1, 0, 0, 0, 365, 363, 1, 0, 0, 0, 366, 39, 1, 0, 0, 0, 367, 368, 5, 31, 0, 0, 368, 371, 5, 90, 0, 0, 369, 371, 5, 206, 0, 0, 370, 367, 1, 0, 0, 0, 370, 369, 1, 0, 0, 0, 371, 41, 1, 0, 0, 0, 372, 373, 5, 119, 0, 0, 373, 382, 3, 72, 36, 0, 374, 375, 5, 179, 0, 0, 375, 376, 5, 220, 0, 0, 376, 377, 3, 72, 36, 0, 377, 378, 5, 236, 0, 0, 378, 382, 1, 0, 0, 0, 379, 380, 5, 179, 0, 0, 380, 382, 3, 72, 36, 0, 381, 372, 1, 0, 0, 0, 381, 374, 1, 0, 0, 0, 381, 379, 1, 0, 0, 0, 382, 43, 1, 0, 0, 0, 383, 384, 5, 144, 0, 0, 384, 387, 3, 50, 25, 0, 385, 386, 5, 118, 0, 0, 386, 388, 3, 50, 25, 0, 387, 385, 1, 0, 0, 0, 387, 388, 1, 0, 0, 0, 388, 45, 1, 0, 0, 0, 389, 394, 3, 48, 24, 0, 390, 391, 5, 206, 0, 0, 391, 393, 3, 48, 24, 0, 392, 390, 1, 0, 0, 0, 393, 396, 1, 0, 0, 0, 394, 392, 1, 0, 0, 0, 394, 395, 1, 0, 0, 0, 395, 47, 1, 0, 0, 0, 396, 394, 1, 0, 0, 0, 397, 399, 3, 74, 37, 0, 398, 400, 7, 6, 0, 0, 399, 398, 1, 0, 0, 0, 399, 400, 1, 0, 0, 0, 400, 403, 1, 0, 0, 0, 401, 402, 5, 117, 0, 0, 402, 404, 7, 7, 0, 0, 403, 401, 1, 0, 0, 0, 403, 404, 1, 0, 0, 0, 404, 407, 1, 0, 0, 0, 405, 406, 5, 26, 0, 0, 406, 408, 5, 199, 0, 0, 407, 405, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 49, 1, 0, 0, 0, 409, 416, 5, 200, 0, 0, 410, 413, 3, 102, 51, 0, 411, 412, 5, 238, 0, 0, 412, 414, 3, 102, 51, 0, 413, 411, 1, 0, 0, 0, 413, 414, 1, 0, 0, 0, 414, 416, 1, 0, 0, 0, 415, 409, 1, 0, 0, 0, 415, 410, 1, 0, 0, 0, 416, 51, 1, 0, 0, 0, 417, 422, 3, 54, 27, 0, 418, 419, 5, 206, 0, 0, 419, 421, 3, 54, 27, 0, 420, 418, 1, 0, 0, 0, 421, 424, 1, 0, 0, 0, 422, 420, 1, 0, 0, 0, 422, 423, 1, 0, 0, 0, 423, 53, 1, 0, 0, 0, 424, 422, 1, 0, 0, 0, 425, 426, 3, 114, 57, 0, 426, 427, 5, 212, 0, 0, 427, 428, 3, 104, 52, 0, 428, 55, 1, 0, 0, 0, 429, 431, 3, 58, 29, 0, 430, 429, 1, 0, 0, 0, 430, 431, 1, 0, 0, 0, 431, 433, 1, 0, 0, 0, 432, 434, 3, 60, 30, 0, 433, 432, 1, 0, 0, 0, 433, 434, 1, 0, 0, 0, 434, 436, 1, 0, 0, 0, 435, 437, 3, 62, 31, 0, 436, 435, 1, 0, 0, 0, 436, 437, 1, 0, 0, 0, 437, 57, 1, 0, 0, 0, 438, 439, 5, 126, 0, 0, 439, 440, 5, 18, 0, 0, 440, 441, 3, 72, 36, 0, 441, 59, 1, 0, 0, 0, 442, 443, 5, 122, 0, 0, 443, 444, 5, 18, 0, 0, 444, 445, 3, 46, 23, 0, 445, 61, 1, 0, 0, 0, 446, 447, 7, 8, 0, 0, 447, 448, 3, 64, 32, 0, 448, 63, 1, 0, 0, 0, 449, 456, 3, 66, 33, 0, 450, 451, 5, 16, 0, 0, 451, 452, 3, 66, 33, 0, 452, 453, 5, 6, 0, 0, 453, 454, 3, 66, 33, 0, 454, 456, 1, 0, 0, 0, 455, 449, 1, 0, 0, 0, 455, 450, 1, 0, 0, 0, 456, 65, 1, 0, 0, 0, 457, 458, 5, 33, 0, 0, 458, 470, 5, 142, 0, 0, 459, 460, 5, 175, 0, 0, 460, 470, 5, 128, 0, 0, 461, 462, 5, 175, 0, 0, 462, 470, 5, 64, 0, 0, 463, 464, 3, 102, 51, 0, 464, 465, 5, 128, 0, 0, 465, 470, 1, 0, 0, 0, 466, 467, 3, 102, 51, 0, 467, 468, 5, 64, 0, 0, 468, 470, 1, 0, 0, 0, 469, 457, 1, 0, 0, 0, 469, 459, 1, 0, 0, 0, 469, 461, 1, 0, 0, 0, 469, 463, 1, 0, 0, 0, 469, 466, 1, 0, 0, 0, 470, 67, 1, 0, 0, 0, 471, 472, 3, 74, 37, 0, 472, 473, 5, 0, 0, 1, 473, 69, 1, 0, 0, 0, 474, 522, 3, 114, 57, 0, 475, 476, 3, 114, 57, 0, 476, 477, 5, 220, 0, 0, 477, 478, 3, 114, 57, 0, 478, 485, 3, 70, 35, 0, 479, 480, 5, 206, 0, 0, 480, 481, 3, 114, 57, 0, 481, 482, 3, 70, 35, 0, 482, 484, 1, 0, 0, 0, 483, 479, 1, 0, 0, 0, 484, 487, 1, 0, 0, 0, 485, 483, 1, 0, 0, 0, 485, 486, 1, 0, 0, 0, 486, 488, 1, 0, 0, 0, 487, 485, 1, 0, 0, 0, 488, 489, 5, 236, 0, 0, 489, 522, 1, 0, 0, 0, 490, 491, 3, 114, 57, 0, 491, 492, 5, 220, 0, 0, 492, 497, 3, 116, 58, 0, 493, 494, 5, 206, 0, 0, 494, 496, 3, 116, 58, 0, 495, 493, 1, 0, 0, 0, 496, 499, 1, 0, 0, 0, 497, 495, 1, 0, 0, 0, 497, 498, 1, 0, 0, 0, 498, 500, 1, 0, 0, 0, 499, 497, 1, 0, 0, 0, 500, 501, 5, 236, 0, 0, 501, 522, 1, 0, 0, 0, 502, 503, 3, 114, 57, 0, 503, 504, 5, 220, 0, 0, 504, 509, 3, 70, 35, 0, 505, 506, 5, 206, 0, 0, 506, 508, 3, 70, 35, 0, 507, 505, 1, 0, 0, 0, 508, 511, 1, 0, 0, 0, 509, 507, 1, 0, 0, 0, 509, 510, 1, 0, 0, 0, 510, 512, 1, 0, 0, 0, 511, 509, 1, 0, 0, 0, 512, 513, 5, 236, 0, 0, 513, 522, 1, 0, 0, 0, 514, 515, 3, 114, 57, 0, 515, 517, 5, 220, 0, 0, 516, 518, 3, 72, 36, 0, 517, 516, 1, 0, 0, 0, 517, 518, 1, 0, 0, 0, 518, 519, 1, 0, 0, 0, 519, 520, 5, 236, 0, 0, 520, 522, 1, 0, 0, 0, 521, 474, 1, 0, 0, 0, 521, 475, 1, 0, 0, 0, 521, 490, 1, 0, 0, 0, 521, 502, 1, 0, 0, 0, 521, 514, 1, 0, 0, 0, 522, 71, 1, 0, 0, 0, 523, 528, 3, 74, 37, 0, 524, 525, 5, 206, 0, 0, 525, 527, 3, 74, 37, 0, 526, 524, 1, 0, 0, 0, 527, 530, 1, 0, 0, 0, 528, 526, 1, 0, 0, 0, 528, 529, 1, 0, 0, 0, 529, 73, 1, 0, 0, 0, 530, 528, 1, 0, 0, 0, 531, 532, 6, 37, -1, 0, 532, 534, 5, 19, 0, 0, 533, 535, 3, 74, 37, 0, 534, 533, 1, 0, 0, 0, 534, 535, 1, 0, 0, 0, 535, 541, 1, 0, 0, 0, 536, 537, 5, 186, 0, 0, 537, 538, 3, 74, 37, 0, 538, 539, 5, 163, 0, 0, 539, 540, 3, 74, 37, 0, 540, 542, 1, 0, 0, 0, 541, 536, 1, 0, 0, 0, 542, 543, 1, 0, 0, 0, 543, 541, 1, 0, 0, 0, 543, 544, 1, 0, 0, 0, 544, 547, 1, 0, 0, 0, 545, 546, 5, 52, 0, 0, 546, 548, 3, 74, 37, 0, 547, 545, 1, 0, 0, 0, 547, 548, 1, 0, 0, 0, 548, 549, 1, 0, 0, 0, 549, 550, 5, 53, 0, 0, 550, 661, 1, 0, 0, 0, 551, 552, 5, 20, 0, 0, 552, 553, 5, 220, 0, 0, 553, 554, 3, 74, 37, 0, 554, 555, 5, 10, 0, 0, 555, 556, 3, 70, 35, 0, 556, 557, 5, 236, 0, 0, 557, 661, 1, 0, 0, 0, 558, 559, 5, 36, 0, 0, 559, 661, 5, 199, 0, 0, 560, 561, 5, 59, 0, 0, 561, 562, 5, 220, 0, 0, 562, 563, 3, 106, 53, 0, 563, 564, 5, 68, 0, 0, 564, 565, 3, 74, 37, 0, 565, 566, 5, 236, 0, 0, 566, 661, 1, 0, 0, 0, 567, 568, 5, 86, 0, 0, 568, 569, 3, 74, 37, 0, 569, 570, 3, 106, 53, 0, 570, 661, 1, 0, 0, 0, 571, 572, 5, 155, 0, 0, 572, 573, 5, 220, 0, 0, 573, 574, 3, 74, 37, 0, 574, 575, 5, 68, 0, 0, 575, 578, 3, 74, 37, 0, 576, 577, 5, 65, 0, 0, 577, 579, 3, 74, 37, 0, 578, 576, 1, 0, 0, 0, 578, 579, 1, 0, 0, 0, 579, 580, 1, 0, 0, 0, 580, 581, 5, 236, 0, 0, 581, 661, 1, 0, 0, 0, 582, 583, 5, 166, 0, 0, 583, 661, 5, 199, 0, 0, 584, 585, 5, 171, 0, 0, 585, 586, 5, 220, 0, 0, 586, 587, 7, 9, 0, 0, 587, 588, 5, 199, 0, 0, 588, 589, 5, 68, 0, 0, 589, 590, 3, 74, 37, 0, 590, 591, 5, 236, 0, 0, 591, 661, 1, 0, 0, 0, 592, 593, 3, 114, 57, 0, 593, 595, 5, 220, 0, 0, 594, 596, 3, 72, 36, 0, 595, 594, 1, 0, 0, 0, 595, 596, 1, 0, 0, 0, 596, 597, 1, 0, 0, 0, 597, 598, 5, 236, 0, 0, 598, 599, 1, 0, 0, 0, 599, 600, 5, 125, 0, 0, 600, 601, 5, 220, 0, 0, 601, 602, 3, 56, 28, 0, 602, 603, 5, 236, 0, 0, 603, 661, 1, 0, 0, 0, 604, 605, 3, 114, 57, 0, 605, 607, 5, 220, 0, 0, 606, 608, 3, 72, 36, 0, 607, 606, 1, 0, 0, 0, 607, 608, 1, 0, 0, 0, 608, 609, 1, 0, 0, 0, 609, 610, 5, 236, 0, 0, 610, 611, 1, 0, 0, 0, 611, 612, 5, 125, 0, 0, 612, 613, 3, 114, 57, 0, 613, 661, 1, 0, 0, 0, 614, 620, 3, 114, 57, 0, 615, 617, 5, 220, 0, 0, 616, 618, 3, 72, 36, 0, 617, 616, 1, 0, 0, 0, 617, 618, 1, 0, 0, 0, 618, 619, 1, 0, 0, 0, 619, 621, 5, 236, 0, 0, 620, 615, 1, 0, 0, 0, 620, 621, 1, 0, 0, 0, 621, 622, 1, 0, 0, 0, 622, 624, 5, 220, 0, 0, 623, 625, 5, 49, 0, 0, 624, 623, 1, 0, 0, 0, 624, 625, 1, 0, 0, 0, 625, 627, 1, 0, 0, 0, 626, 628, 3, 76, 38, 0, 627, 626, 1, 0, 0, 0, 627, 628, 1, 0, 0, 0, 628, 629, 1, 0, 0, 0, 629, 630, 5, 236, 0, 0, 630, 661, 1, 0, 0, 0, 631, 661, 3, 104, 52, 0, 632, 633, 5, 208, 0, 0, 633, 661, 3, 74, 37, 18, 634, 635, 5, 115, 0, 0, 635, 661, 3, 74, 37, 12, 636, 637, 3, 94, 47, 0, 637, 638, 5, 210, 0, 0, 638, 640, 1, 0, 0, 0, 639, 636, 1, 0, 0, 0, 639, 640, 1, 0, 0, 0, 640, 641, 1, 0, 0, 0, 641, 661, 5, 202, 0, 0, 642, 643, 5, 220, 0, 0, 643, 644, 3, 2, 1, 0, 644, 645, 5, 236, 0, 0, 645, 661, 1, 0, 0, 0, 646, 647, 5, 220, 0, 0, 647, 648, 3, 74, 37, 0, 648, 649, 5, 236, 0, 0, 649, 661, 1, 0, 0, 0, 650, 651, 5, 220, 0, 0, 651, 652, 3, 72, 36, 0, 652, 653, 5, 236, 0, 0, 653, 661, 1, 0, 0, 0, 654, 656, 5, 219, 0, 0, 655, 657, 3, 72, 36, 0, 656, 655, 1, 0, 0, 0, 656, 657, 1, 0, 0, 0, 657, 658, 1, 0, 0, 0, 658, 661, 5, 235, 0, 0, 659, 661, 3, 86, 43, 0, 660, 531, 1, 0, 0, 0, 660, 551, 1, 0, 0, 0, 660, 558, 1, 0, 0, 0, 660, 560, 1, 0, 0, 0, 660, 567, 1, 0, 0, 0, 660, 571, 1, 0, 0, 0, 660, 582, 1, 0, 0, 0, 660, 584, 1, 0, 0, 0, 660, 592, 1, 0, 0, 0, 660, 604, 1, 0, 0, 0, 660, 614, 1, 0, 0, 0, 660, 631, 1, 0, 0, 0, 660, 632, 1, 0, 0, 0, 660, 634, 1, 0, 0, 0, 660, 639, 1, 0, 0, 0, 660, 642, 1, 0, 0, 0, 660, 646, 1, 0, 0, 0, 660, 650, 1, 0, 0, 0, 660, 654, 1, 0, 0, 0, 660, 659, 1, 0, 0, 0, 661, 755, 1, 0, 0, 0, 662, 666, 10, 17, 0, 0, 663, 667, 5, 202, 0, 0, 664, 667, 5, 238, 0, 0, 665, 667, 5, 227, 0, 0, 666, 663, 1, 0, 0, 0, 666, 664, 1, 0, 0, 0, 666, 665, 1, 0, 0, 0, 667, 668, 1, 0, 0, 0, 668, 754, 3, 74, 37, 18, 669, 673, 10, 16, 0, 0, 670, 674, 5, 228, 0, 0, 671, 674, 5, 208, 0, 0, 672, 674, 5, 207, 0, 0, 673, 670, 1, 0, 0, 0, 673, 671, 1, 0, 0, 0, 673, 672, 1, 0, 0, 0, 674, 675, 1, 0, 0, 0, 675, 754, 3, 74, 37, 17, 676, 701, 10, 15, 0, 0, 677, 702, 5, 211, 0, 0, 678, 702, 5, 212, 0, 0, 679, 702, 5, 223, 0, 0, 680, 702, 5, 221, 0, 0, 681, 702, 5, 222, 0, 0, 682, 702, 5, 213, 0, 0, 683, 702, 5, 214, 0, 0, 684, 686, 5, 115, 0, 0, 685, 684, 1, 0, 0, 0, 685, 686, 1, 0, 0, 0, 686, 687, 1, 0, 0, 0, 687, 689, 5, 80, 0, 0, 688, 690, 5, 25, 0, 0, 689, 688, 1, 0, 0, 0, 689, 690, 1, 0, 0, 0, 690, 702, 1, 0, 0, 0, 691, 693, 5, 115, 0, 0, 692, 691, 1, 0, 0, 0, 692, 693, 1, 0, 0, 0, 693, 694, 1, 0, 0, 0, 694, 702, 7, 10, 0, 0, 695, 702, 5, 232, 0, 0, 696, 702, 5, 233, 0, 0, 697, 702, 5, 225, 0, 0, 698, 702, 5, 216, 0, 0, 699, 702, 5, 217, 0, 0, 700, 702, 5, 224, 0, 0, 701, 677, 1, 0, 0, 0, 701, 678, 1, 0, 0, 0, 701, 679, 1, 0, 0, 0, 701, 680, 1, 0, 0, 0, 701, 681, 1, 0, 0, 0, 701, 682, 1, 0, 0, 0, 701, 683, 1, 0, 0, 0, 701, 685, 1, 0, 0, 0, 701, 692, 1, 0, 0, 0, 701, 695, 1, 0, 0, 0, 701, 696, 1, 0, 0, 0, 701, 697, 1, 0, 0, 0, 701, 698, 1, 0, 0, 0, 701, 699, 1, 0, 0, 0, 701, 700, 1, 0, 0, 0, 702, 703, 1, 0, 0, 0, 703, 754, 3, 74, 37, 16, 704, 705, 10, 13, 0, 0, 705, 706, 5, 226, 0, 0, 706, 754, 3, 74, 37, 14, 707, 708, 10, 11, 0, 0, 708, 709, 5, 6, 0, 0, 709, 754, 3, 74, 37, 12, 710, 711, 10, 10, 0, 0, 711, 712, 5, 121, 0, 0, 712, 754, 3, 74, 37, 11, 713, 715, 10, 9, 0, 0, 714, 716, 5, 115, 0, 0, 715, 714, 1, 0, 0, 0, 715, 716, 1, 0, 0, 0, 716, 717, 1, 0, 0, 0, 717, 718, 5, 16, 0, 0, 718, 719, 3, 74, 37, 0, 719, 720, 5, 6, 0, 0, 720, 721, 3, 74, 37, 10, 721, 754, 1, 0, 0, 0, 722, 723, 10, 8, 0, 0, 723, 724, 5, 229, 0, 0, 724, 725, 3, 74, 37, 0, 725, 726, 5, 205, 0, 0, 726, 727, 3, 74, 37, 8, 727, 754, 1, 0, 0, 0, 728, 729, 10, 21, 0, 0, 729, 730, 5, 219, 0, 0, 730, 731, 3, 74, 37, 0, 731, 732, 5, 235, 0, 0, 732, 754, 1, 0, 0, 0, 733, 734, 10, 20, 0, 0, 734, 735, 5, 210, 0, 0, 735, 754, 5, 197, 0, 0, 736, 737, 10, 19, 0, 0, 737, 738, 5, 210, 0, 0, 738, 754, 3, 114, 57, 0, 739, 740, 10, 14, 0, 0, 740, 742, 5, 88, 0, 0, 741, 743, 5, 115, 0, 0, 742, 741, 1, 0, 0, 0, 742, 743, 1, 0, 0, 0, 743, 744, 1, 0, 0, 0, 744, 754, 5, 116, 0, 0, 745, 751, 10, 7, 0, 0, 746, 752, 3, 112, 56, 0, 747, 748, 5, 10, 0, 0, 748, 752, 3, 114, 57, 0, 749, 750, 5, 10, 0, 0, 750, 752, 5, 199, 0, 0, 751, 746, 1, 0, 0, 0, 751, 747, 1, 0, 0, 0, 751, 749, 1, 0, 0, 0, 752, 754, 1, 0, 0, 0, 753, 662, 1, 0, 0, 0, 753, 669, 1, 0, 0, 0, 753, 676, 1, 0, 0, 0, 753, 704, 1, 0, 0, 0, 753, 707, 1, 0, 0, 0, 753, 710, 1, 0, 0, 0, 753, 713, 1, 0, 0, 0, 753, 722, 1, 0, 0, 0, 753, 728, 1, 0, 0, 0, 753, 733, 1, 0, 0, 0, 753, 736, 1, 0, 0, 0, 753, 739, 1, 0, 0, 0, 753, 745, 1, 0, 0, 0, 754, 757, 1, 0, 0, 0, 755, 753, 1, 0, 0, 0, 755, 756, 1, 0, 0, 0, 756, 75, 1, 0, 0, 0, 757, 755, 1, 0, 0, 0, 758, 763, 3, 78, 39, 0, 759, 760, 5, 206, 0, 0, 760, 762, 3, 78, 39, 0, 761, 759, 1, 0, 0, 0, 762, 765, 1, 0, 0, 0, 763, 761, 1, 0, 0, 0, 763, 764, 1, 0, 0, 0, 764, 77, 1, 0, 0, 0, 765, 763, 1, 0, 0, 0, 766, 769, 3, 80, 40, 0, 767, 769, 3, 74, 37, 0, 768, 766, 1, 0, 0, 0, 768, 767, 1, 0, 0, 0, 769, 79, 1, 0, 0, 0, 770, 771, 5, 220, 0, 0, 771, 776, 3, 114, 57, 0, 772, 773, 5, 206, 0, 0, 773, 775, 3, 114, 57, 0, 774, 772, 1, 0, 0, 0, 775, 778, 1, 0, 0, 0, 776, 774, 1, 0, 0, 0, 776, 777, 1, 0, 0, 0, 777, 779, 1, 0, 0, 0, 778, 776, 1, 0, 0, 0, 779, 780, 5, 236, 0, 0, 780, 790, 1, 0, 0, 0, 781, 786, 3, 114, 57, 0, 782, 783, 5, 206, 0, 0, 783, 785, 3, 114, 57, 0, 784, 782, 1, 0, 0, 0, 785, 788, 1, 0, 0, 0, 786, 784, 1, 0, 0, 0, 786, 787, 1, 0, 0, 0, 787, 790, 1, 0, 0, 0, 788, 786, 1, 0, 0, 0, 789, 770, 1, 0, 0, 0, 789, 781, 1, 0, 0, 0, 790, 791, 1, 0, 0, 0, 791, 792, 5, 201, 0, 0, 792, 793, 3, 74, 37, 0, 793, 81, 1, 0, 0, 0, 794, 799, 3, 84, 42, 0, 795, 796, 5, 206, 0, 0, 796, 798, 3, 84, 42, 0, 797, 795, 1, 0, 0, 0, 798, 801, 1, 0, 0, 0, 799, 797, 1, 0, 0, 0, 799, 800, 1, 0, 0, 0, 800, 83, 1, 0, 0, 0, 801, 799, 1, 0, 0, 0, 802, 803, 3, 114, 57, 0, 803, 804, 5, 10, 0, 0, 804, 805, 5, 220, 0, 0, 805, 806, 3, 2, 1, 0, 806, 807, 5, 236, 0, 0, 807, 813, 1, 0, 0, 0, 808, 809, 3, 74, 37, 0, 809, 810, 5, 10, 0, 0, 810, 811, 3, 114, 57, 0, 811, 813, 1, 0, 0, 0, 812, 802, 1, 0, 0, 0, 812, 808, 1, 0, 0, 0, 813, 85, 1, 0, 0, 0, 814, 822, 5, 200, 0, 0, 815, 816, 3, 94, 47, 0, 816, 817, 5, 210, 0, 0, 817, 819, 1, 0, 0, 0, 818, 815, 1, 0, 0, 0, 818, 819, 1, 0, 0, 0, 819, 820, 1, 0, 0, 0, 820, 822, 3, 88, 44, 0, 821, 814, 1, 0, 0, 0, 821, 818, 1, 0, 0, 0, 822, 87, 1, 0, 0, 0, 823, 828, 3, 114, 57, 0, 824, 825, 5, 210, 0, 0, 825, 827, 3, 114, 57, 0, 826, 824, 1, 0, 0, 0, 827, 830, 1, 0, 0, 0, 828, 826, 1, 0, 0, 0, 828, 829, 1, 0, 0, 0, 829, 89, 1, 0, 0, 0, 830, 828, 1, 0, 0, 0, 831, 832, 6, 45, -1, 0, 832, 840, 3, 94, 47, 0, 833, 840, 3, 92, 46, 0, 834, 835, 5, 220, 0, 0, 835, 836, 3, 2, 1, 0, 836, 837, 5, 236, 0, 0, 837, 840, 1, 0, 0, 0, 838, 840, 5, 200, 0, 0, 839, 831, 1, 0, 0, 0, 839, 833, 1, 0, 0, 0, 839, 834, 1, 0, 0, 0, 839, 838, 1, 0, 0, 0, 840, 849, 1, 0, 0, 0, 841, 845, 10, 2, 0, 0, 842, 846, 3, 112, 56, 0, 843, 844, 5, 10, 0, 0, 844, 846, 3, 114, 57, 0, 845, 842, 1, 0, 0, 0, 845, 843, 1, 0, 0, 0, 846, 848, 1, 0, 0, 0, 847, 841, 1, 0, 0, 0, 848, 851, 1, 0, 0, 0, 849, 847, 1, 0, 0, 0, 849, 850, 1, 0, 0, 0, 850, 91, 1, 0, 0, 0, 851, 849, 1, 0, 0, 0, 852, 853, 3, 114, 57, 0, 853, 855, 5, 220, 0, 0, 854, 856, 3, 96, 48, 0, 855, 854, 1, 0, 0, 0, 855, 856, 1, 0, 0, 0, 856, 857, 1, 0, 0, 0, 857, 858, 5, 236, 0, 0, 858, 93, 1, 0, 0, 0, 859, 860, 3, 98, 49, 0, 860, 861, 5, 210, 0, 0, 861, 863, 1, 0, 0, 0, 862, 859, 1, 0, 0, 0, 862, 863, 1, 0, 0, 0, 863, 864, 1, 0, 0, 0, 864, 865, 3, 114, 57, 0, 865, 95, 1, 0, 0, 0, 866, 871, 3, 74, 37, 0, 867, 868, 5, 206, 0, 0, 868, 870, 3, 74, 37, 0, 869, 867, 1, 0, 0, 0, 870, 873, 1, 0, 0, 0, 871, 869, 1, 0, 0, 0, 871, 872, 1, 0, 0, 0, 872, 97, 1, 0, 0, 0, 873, 871, 1, 0, 0, 0, 874, 875, 3, 114, 57, 0, 875, 99, 1, 0, 0, 0, 876, 885, 5, 195, 0, 0, 877, 878, 5, 210, 0, 0, 878, 885, 7, 11, 0, 0, 879, 880, 5, 197, 0, 0, 880, 882, 5, 210, 0, 0, 881, 883, 7, 11, 0, 0, 882, 881, 1, 0, 0, 0, 882, 883, 1, 0, 0, 0, 883, 885, 1, 0, 0, 0, 884, 876, 1, 0, 0, 0, 884, 877, 1, 0, 0, 0, 884, 879, 1, 0, 0, 0, 885, 101, 1, 0, 0, 0, 886, 888, 7, 12, 0, 0, 887, 886, 1, 0, 0, 0, 887, 888, 1, 0, 0, 0, 888, 895, 1, 0, 0, 0, 889, 896, 3, 100, 50, 0, 890, 896, 5, 196, 0, 0, 891, 896, 5, 197, 0, 0, 892, 896, 5, 198, 0, 0, 893, 896, 5, 82, 0, 0, 894, 896, 5, 113, 0, 0, 895, 889, 1, 0, 0, 0, 895, 890, 1, 0, 0, 0, 895, 891, 1, 0, 0, 0, 895, 892, 1, 0, 0, 0, 895, 893, 1, 0, 0, 0, 895, 894, 1, 0, 0, 0, 896, 103, 1, 0, 0, 0, 897, 901, 3, 102, 51, 0, 898, 901, 5, 199, 0, 0, 899, 901, 5, 116, 0, 0, 900, 897, 1, 0, 0, 0, 900, 898, 1, 0, 0, 0, 900, 899, 1, 0, 0, 0, 901, 105, 1, 0, 0, 0, 902, 903, 7, 13, 0, 0, 903, 107, 1, 0, 0, 0, 904, 905, 7, 14, 0, 0, 905, 109, 1, 0, 0, 0, 906, 907, 7, 15, 0, 0, 907, 111, 1, 0, 0, 0, 908, 911, 5, 194, 0, 0, 909, 911, 3, 110, 55, 0, 910, 908, 1, 0, 0, 0, 910, 909, 1, 0, 0, 0, 911, 113, 1, 0, 0, 0, 912, 916, 5, 194, 0, 0, 913, 916, 3, 106, 53, 0, 914, 916, 3, 108, 54, 0, 915, 912, 1, 0, 0, 0, 915, 913, 1, 0, 0, 0, 915, 914, 1, 0, 0, 0, 916, 115, 1, 0, 0, 0, 917, 918, 5, 199, 0, 0, 918, 919, 5, 212, 0, 0, 919, 920, 3, 102, 51, 0, 920, 117, 1, 0, 0, 0, 115, 120, 130, 138, 141, 145, 148, 152, 155, 158, 161, 164, 168, 172, 175, 178, 181, 185, 188, 197, 203, 224, 241, 258, 264, 270, 281, 283, 294, 297, 303, 311, 317, 319, 323, 328, 331, 334, 338, 342, 345, 347, 350, 354, 358, 361, 363, 365, 370, 381, 387, 394, 399, 403, 407, 413, 415, 422, 430, 433, 436, 455, 469, 485, 497, 509, 517, 521, 528, 534, 543, 547, 578, 595, 607, 617, 620, 624, 627, 639, 656, 660, 666, 673, 685, 689, 692, 701, 715, 742, 751, 753, 755, 763, 768, 776, 786, 789, 799, 812, 818, 821, 828, 839, 845, 849, 855, 862, 871, 882, 884, 887, 895, 900, 910, 915] \ No newline at end of file diff --git a/hogql_parser/HogQLParserBaseVisitor.cpp b/hogql_parser/HogQLParserBaseVisitor.cpp index 2827d134c4419..03bf38add14d5 100644 --- a/hogql_parser/HogQLParserBaseVisitor.cpp +++ b/hogql_parser/HogQLParserBaseVisitor.cpp @@ -1,5 +1,5 @@ -// Generated from HogQLParser.g4 by ANTLR 4.13.0 +// Generated from HogQLParser.g4 by ANTLR 4.13.1 #include "HogQLParserBaseVisitor.h" diff --git a/hogql_parser/HogQLParserBaseVisitor.h b/hogql_parser/HogQLParserBaseVisitor.h index 99575438db32b..016b75a57f4c0 100644 --- a/hogql_parser/HogQLParserBaseVisitor.h +++ b/hogql_parser/HogQLParserBaseVisitor.h @@ -1,5 +1,5 @@ -// Generated from HogQLParser.g4 by ANTLR 4.13.0 +// Generated from HogQLParser.g4 by ANTLR 4.13.1 #pragma once diff --git a/hogql_parser/HogQLParserVisitor.cpp b/hogql_parser/HogQLParserVisitor.cpp index 3e5f3b1b5f069..82a2f14e4ec57 100644 --- a/hogql_parser/HogQLParserVisitor.cpp +++ b/hogql_parser/HogQLParserVisitor.cpp @@ -1,5 +1,5 @@ -// Generated from HogQLParser.g4 by ANTLR 4.13.0 +// Generated from HogQLParser.g4 by ANTLR 4.13.1 #include "HogQLParserVisitor.h" diff --git a/hogql_parser/HogQLParserVisitor.h b/hogql_parser/HogQLParserVisitor.h index 789221ea387d3..d255fa6a97971 100644 --- a/hogql_parser/HogQLParserVisitor.h +++ b/hogql_parser/HogQLParserVisitor.h @@ -1,5 +1,5 @@ -// Generated from HogQLParser.g4 by ANTLR 4.13.0 +// Generated from HogQLParser.g4 by ANTLR 4.13.1 #pragma once diff --git a/hogql_parser/parser.cpp b/hogql_parser/parser.cpp index 4fae49ad24a36..2e734cc8737fc 100644 --- a/hogql_parser/parser.cpp +++ b/hogql_parser/parser.cpp @@ -570,6 +570,12 @@ class HogQLParseTreeConverter : public HogQLParserBaseVisitor { } VISIT(RatioExpr) { + auto placeholder_ctx = ctx->PLACEHOLDER(); + if (placeholder_ctx) { + string placeholder = unquote_string_terminal(placeholder_ctx); + return build_ast_node("Placeholder", "{s:s#}", "field", placeholder.data(), placeholder.size()); + } + auto number_literal_ctxs = ctx->numberLiteral(); if (number_literal_ctxs.size() > 2) { diff --git a/hogql_parser/pyproject.toml b/hogql_parser/pyproject.toml index f3405ff64ec59..6fde5a0352ccf 100644 --- a/hogql_parser/pyproject.toml +++ b/hogql_parser/pyproject.toml @@ -26,9 +26,9 @@ before-build = [ # We need to install the libraries for each architecture separa before-all = [ # manylinux_2_28 is based on AlmaLinux 8, which uses Fedora's dnf as its package manager "dnf install -y boost-devel unzip cmake curl uuid pkg-config", - "curl https://www.antlr.org/download/antlr4-cpp-runtime-4.13.0-source.zip --output antlr4-source.zip", + "curl https://www.antlr.org/download/antlr4-cpp-runtime-4.13.1-source.zip --output antlr4-source.zip", # Check that the downloaded archive is the expected runtime - a security measure - "anltr_known_md5sum=\"ff214b65fb02e150b4f515d7983bca92\"", + "anltr_known_md5sum=\"c875c148991aacd043f733827644a76f\"", "antlr_found_ms5sum=\"$(md5sum antlr4-source.zip | cut -d' ' -f1)\"", 'if [[ "$anltr_known_md5sum" != "$antlr_found_ms5sum" ]]; then exit 64; fi', "unzip antlr4-source.zip -d antlr4-source && cd antlr4-source", diff --git a/hogql_parser/setup.py b/hogql_parser/setup.py index 1a4ee2dfad726..7697d267057b6 100644 --- a/hogql_parser/setup.py +++ b/hogql_parser/setup.py @@ -32,7 +32,7 @@ setup( name="hogql_parser", - version="0.1.8", + version="0.1.9", url="https://github.com/PostHog/posthog/tree/master/hogql_parser", author="PostHog Inc.", author_email="hey@posthog.com", diff --git a/posthog/hogql/grammar/HogQLLexer.py b/posthog/hogql/grammar/HogQLLexer.py index 59a779fd1e0e5..acbadf74fdc53 100644 --- a/posthog/hogql/grammar/HogQLLexer.py +++ b/posthog/hogql/grammar/HogQLLexer.py @@ -1,4 +1,4 @@ -# Generated from HogQLLexer.g4 by ANTLR 4.13.0 +# Generated from HogQLLexer.g4 by ANTLR 4.13.1 from antlr4 import * from io import StringIO import sys @@ -1252,7 +1252,7 @@ class HogQLLexer(Lexer): def __init__(self, input=None, output:TextIO = sys.stdout): super().__init__(input, output) - self.checkVersion("4.13.0") + self.checkVersion("4.13.1") self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache()) self._actions = None self._predicates = None diff --git a/posthog/hogql/grammar/HogQLParser.g4 b/posthog/hogql/grammar/HogQLParser.g4 index f5c04fc01398b..49f5953d1e92e 100644 --- a/posthog/hogql/grammar/HogQLParser.g4 +++ b/posthog/hogql/grammar/HogQLParser.g4 @@ -70,7 +70,7 @@ joinConstraintClause sampleClause: SAMPLE ratioExpr (OFFSET ratioExpr)?; orderExprList: orderExpr (COMMA orderExpr)*; orderExpr: columnExpr (ASCENDING | DESCENDING | DESC)? (NULLS (FIRST | LAST))? (COLLATE STRING_LITERAL)?; -ratioExpr: numberLiteral (SLASH numberLiteral)?; +ratioExpr: PLACEHOLDER | numberLiteral (SLASH numberLiteral)?; settingExprList: settingExpr (COMMA settingExpr)*; settingExpr: identifier EQ_SINGLE literal; diff --git a/posthog/hogql/grammar/HogQLParser.interp b/posthog/hogql/grammar/HogQLParser.interp index 321af6e3bd81a..d7adc1a3a9959 100644 --- a/posthog/hogql/grammar/HogQLParser.interp +++ b/posthog/hogql/grammar/HogQLParser.interp @@ -551,4 +551,4 @@ enumValue atn: -[4, 1, 242, 919, 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, 1, 0, 1, 0, 3, 0, 121, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 129, 8, 1, 10, 1, 12, 1, 132, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 139, 8, 2, 1, 3, 3, 3, 142, 8, 3, 1, 3, 1, 3, 3, 3, 146, 8, 3, 1, 3, 3, 3, 149, 8, 3, 1, 3, 1, 3, 3, 3, 153, 8, 3, 1, 3, 3, 3, 156, 8, 3, 1, 3, 3, 3, 159, 8, 3, 1, 3, 3, 3, 162, 8, 3, 1, 3, 3, 3, 165, 8, 3, 1, 3, 1, 3, 3, 3, 169, 8, 3, 1, 3, 1, 3, 3, 3, 173, 8, 3, 1, 3, 3, 3, 176, 8, 3, 1, 3, 3, 3, 179, 8, 3, 1, 3, 3, 3, 182, 8, 3, 1, 3, 1, 3, 3, 3, 186, 8, 3, 1, 3, 3, 3, 189, 8, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 198, 8, 5, 1, 6, 1, 6, 1, 6, 1, 7, 3, 7, 204, 8, 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, 8, 1, 8, 1, 8, 1, 8, 1, 8, 5, 8, 223, 8, 8, 10, 8, 12, 8, 226, 9, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 242, 8, 11, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 259, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 265, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 271, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 282, 8, 15, 3, 15, 284, 8, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 3, 18, 295, 8, 18, 1, 18, 3, 18, 298, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 304, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 312, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 5, 18, 318, 8, 18, 10, 18, 12, 18, 321, 9, 18, 1, 19, 3, 19, 324, 8, 19, 1, 19, 1, 19, 1, 19, 3, 19, 329, 8, 19, 1, 19, 3, 19, 332, 8, 19, 1, 19, 3, 19, 335, 8, 19, 1, 19, 1, 19, 3, 19, 339, 8, 19, 1, 19, 1, 19, 3, 19, 343, 8, 19, 1, 19, 3, 19, 346, 8, 19, 3, 19, 348, 8, 19, 1, 19, 3, 19, 351, 8, 19, 1, 19, 1, 19, 3, 19, 355, 8, 19, 1, 19, 1, 19, 3, 19, 359, 8, 19, 1, 19, 3, 19, 362, 8, 19, 3, 19, 364, 8, 19, 3, 19, 366, 8, 19, 1, 20, 1, 20, 1, 20, 3, 20, 371, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 382, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 388, 8, 22, 1, 23, 1, 23, 1, 23, 5, 23, 393, 8, 23, 10, 23, 12, 23, 396, 9, 23, 1, 24, 1, 24, 3, 24, 400, 8, 24, 1, 24, 1, 24, 3, 24, 404, 8, 24, 1, 24, 1, 24, 3, 24, 408, 8, 24, 1, 25, 1, 25, 1, 25, 3, 25, 413, 8, 25, 1, 26, 1, 26, 1, 26, 5, 26, 418, 8, 26, 10, 26, 12, 26, 421, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 3, 28, 428, 8, 28, 1, 28, 3, 28, 431, 8, 28, 1, 28, 3, 28, 434, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 453, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 467, 8, 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, 5, 35, 481, 8, 35, 10, 35, 12, 35, 484, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 493, 8, 35, 10, 35, 12, 35, 496, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 505, 8, 35, 10, 35, 12, 35, 508, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 515, 8, 35, 1, 35, 1, 35, 3, 35, 519, 8, 35, 1, 36, 1, 36, 1, 36, 5, 36, 524, 8, 36, 10, 36, 12, 36, 527, 9, 36, 1, 37, 1, 37, 1, 37, 3, 37, 532, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 4, 37, 539, 8, 37, 11, 37, 12, 37, 540, 1, 37, 1, 37, 3, 37, 545, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 576, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 593, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 605, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 615, 8, 37, 1, 37, 3, 37, 618, 8, 37, 1, 37, 1, 37, 3, 37, 622, 8, 37, 1, 37, 3, 37, 625, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 637, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 654, 8, 37, 1, 37, 1, 37, 3, 37, 658, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 664, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 671, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 683, 8, 37, 1, 37, 1, 37, 3, 37, 687, 8, 37, 1, 37, 3, 37, 690, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 699, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 713, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 740, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 749, 8, 37, 5, 37, 751, 8, 37, 10, 37, 12, 37, 754, 9, 37, 1, 38, 1, 38, 1, 38, 5, 38, 759, 8, 38, 10, 38, 12, 38, 762, 9, 38, 1, 39, 1, 39, 3, 39, 766, 8, 39, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 772, 8, 40, 10, 40, 12, 40, 775, 9, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 782, 8, 40, 10, 40, 12, 40, 785, 9, 40, 3, 40, 787, 8, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 5, 41, 795, 8, 41, 10, 41, 12, 41, 798, 9, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 810, 8, 42, 1, 43, 1, 43, 1, 43, 1, 43, 3, 43, 816, 8, 43, 1, 43, 3, 43, 819, 8, 43, 1, 44, 1, 44, 1, 44, 5, 44, 824, 8, 44, 10, 44, 12, 44, 827, 9, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 837, 8, 45, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 843, 8, 45, 5, 45, 845, 8, 45, 10, 45, 12, 45, 848, 9, 45, 1, 46, 1, 46, 1, 46, 3, 46, 853, 8, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 3, 47, 860, 8, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 5, 48, 867, 8, 48, 10, 48, 12, 48, 870, 9, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 880, 8, 50, 3, 50, 882, 8, 50, 1, 51, 3, 51, 885, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 893, 8, 51, 1, 52, 1, 52, 1, 52, 3, 52, 898, 8, 52, 1, 53, 1, 53, 1, 54, 1, 54, 1, 55, 1, 55, 1, 56, 1, 56, 3, 56, 908, 8, 56, 1, 57, 1, 57, 1, 57, 3, 57, 913, 8, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 0, 3, 36, 74, 90, 59, 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, 0, 16, 2, 0, 32, 32, 141, 141, 2, 0, 84, 84, 96, 96, 3, 0, 4, 4, 8, 8, 12, 12, 4, 0, 4, 4, 7, 8, 12, 12, 147, 147, 2, 0, 96, 96, 140, 140, 2, 0, 4, 4, 8, 8, 2, 0, 11, 11, 42, 43, 2, 0, 62, 62, 93, 93, 2, 0, 133, 133, 143, 143, 3, 0, 17, 17, 95, 95, 170, 170, 2, 0, 79, 79, 98, 98, 1, 0, 196, 197, 2, 0, 208, 208, 228, 228, 8, 0, 37, 37, 76, 76, 108, 108, 110, 110, 132, 132, 145, 145, 185, 185, 190, 190, 13, 0, 2, 24, 26, 36, 38, 75, 77, 81, 83, 107, 109, 109, 111, 112, 114, 115, 117, 130, 133, 144, 146, 184, 186, 189, 191, 192, 4, 0, 36, 36, 62, 62, 77, 77, 91, 91, 1039, 0, 120, 1, 0, 0, 0, 2, 124, 1, 0, 0, 0, 4, 138, 1, 0, 0, 0, 6, 141, 1, 0, 0, 0, 8, 190, 1, 0, 0, 0, 10, 193, 1, 0, 0, 0, 12, 199, 1, 0, 0, 0, 14, 203, 1, 0, 0, 0, 16, 209, 1, 0, 0, 0, 18, 227, 1, 0, 0, 0, 20, 230, 1, 0, 0, 0, 22, 233, 1, 0, 0, 0, 24, 243, 1, 0, 0, 0, 26, 246, 1, 0, 0, 0, 28, 250, 1, 0, 0, 0, 30, 283, 1, 0, 0, 0, 32, 285, 1, 0, 0, 0, 34, 288, 1, 0, 0, 0, 36, 303, 1, 0, 0, 0, 38, 365, 1, 0, 0, 0, 40, 370, 1, 0, 0, 0, 42, 381, 1, 0, 0, 0, 44, 383, 1, 0, 0, 0, 46, 389, 1, 0, 0, 0, 48, 397, 1, 0, 0, 0, 50, 409, 1, 0, 0, 0, 52, 414, 1, 0, 0, 0, 54, 422, 1, 0, 0, 0, 56, 427, 1, 0, 0, 0, 58, 435, 1, 0, 0, 0, 60, 439, 1, 0, 0, 0, 62, 443, 1, 0, 0, 0, 64, 452, 1, 0, 0, 0, 66, 466, 1, 0, 0, 0, 68, 468, 1, 0, 0, 0, 70, 518, 1, 0, 0, 0, 72, 520, 1, 0, 0, 0, 74, 657, 1, 0, 0, 0, 76, 755, 1, 0, 0, 0, 78, 765, 1, 0, 0, 0, 80, 786, 1, 0, 0, 0, 82, 791, 1, 0, 0, 0, 84, 809, 1, 0, 0, 0, 86, 818, 1, 0, 0, 0, 88, 820, 1, 0, 0, 0, 90, 836, 1, 0, 0, 0, 92, 849, 1, 0, 0, 0, 94, 859, 1, 0, 0, 0, 96, 863, 1, 0, 0, 0, 98, 871, 1, 0, 0, 0, 100, 881, 1, 0, 0, 0, 102, 884, 1, 0, 0, 0, 104, 897, 1, 0, 0, 0, 106, 899, 1, 0, 0, 0, 108, 901, 1, 0, 0, 0, 110, 903, 1, 0, 0, 0, 112, 907, 1, 0, 0, 0, 114, 912, 1, 0, 0, 0, 116, 914, 1, 0, 0, 0, 118, 121, 3, 2, 1, 0, 119, 121, 3, 6, 3, 0, 120, 118, 1, 0, 0, 0, 120, 119, 1, 0, 0, 0, 121, 122, 1, 0, 0, 0, 122, 123, 5, 0, 0, 1, 123, 1, 1, 0, 0, 0, 124, 130, 3, 4, 2, 0, 125, 126, 5, 176, 0, 0, 126, 127, 5, 4, 0, 0, 127, 129, 3, 4, 2, 0, 128, 125, 1, 0, 0, 0, 129, 132, 1, 0, 0, 0, 130, 128, 1, 0, 0, 0, 130, 131, 1, 0, 0, 0, 131, 3, 1, 0, 0, 0, 132, 130, 1, 0, 0, 0, 133, 139, 3, 6, 3, 0, 134, 135, 5, 220, 0, 0, 135, 136, 3, 2, 1, 0, 136, 137, 5, 236, 0, 0, 137, 139, 1, 0, 0, 0, 138, 133, 1, 0, 0, 0, 138, 134, 1, 0, 0, 0, 139, 5, 1, 0, 0, 0, 140, 142, 3, 8, 4, 0, 141, 140, 1, 0, 0, 0, 141, 142, 1, 0, 0, 0, 142, 143, 1, 0, 0, 0, 143, 145, 5, 146, 0, 0, 144, 146, 5, 49, 0, 0, 145, 144, 1, 0, 0, 0, 145, 146, 1, 0, 0, 0, 146, 148, 1, 0, 0, 0, 147, 149, 3, 10, 5, 0, 148, 147, 1, 0, 0, 0, 148, 149, 1, 0, 0, 0, 149, 150, 1, 0, 0, 0, 150, 152, 3, 72, 36, 0, 151, 153, 3, 12, 6, 0, 152, 151, 1, 0, 0, 0, 152, 153, 1, 0, 0, 0, 153, 155, 1, 0, 0, 0, 154, 156, 3, 14, 7, 0, 155, 154, 1, 0, 0, 0, 155, 156, 1, 0, 0, 0, 156, 158, 1, 0, 0, 0, 157, 159, 3, 18, 9, 0, 158, 157, 1, 0, 0, 0, 158, 159, 1, 0, 0, 0, 159, 161, 1, 0, 0, 0, 160, 162, 3, 20, 10, 0, 161, 160, 1, 0, 0, 0, 161, 162, 1, 0, 0, 0, 162, 164, 1, 0, 0, 0, 163, 165, 3, 22, 11, 0, 164, 163, 1, 0, 0, 0, 164, 165, 1, 0, 0, 0, 165, 168, 1, 0, 0, 0, 166, 167, 5, 189, 0, 0, 167, 169, 7, 0, 0, 0, 168, 166, 1, 0, 0, 0, 168, 169, 1, 0, 0, 0, 169, 172, 1, 0, 0, 0, 170, 171, 5, 189, 0, 0, 171, 173, 5, 169, 0, 0, 172, 170, 1, 0, 0, 0, 172, 173, 1, 0, 0, 0, 173, 175, 1, 0, 0, 0, 174, 176, 3, 24, 12, 0, 175, 174, 1, 0, 0, 0, 175, 176, 1, 0, 0, 0, 176, 178, 1, 0, 0, 0, 177, 179, 3, 16, 8, 0, 178, 177, 1, 0, 0, 0, 178, 179, 1, 0, 0, 0, 179, 181, 1, 0, 0, 0, 180, 182, 3, 26, 13, 0, 181, 180, 1, 0, 0, 0, 181, 182, 1, 0, 0, 0, 182, 185, 1, 0, 0, 0, 183, 186, 3, 30, 15, 0, 184, 186, 3, 32, 16, 0, 185, 183, 1, 0, 0, 0, 185, 184, 1, 0, 0, 0, 185, 186, 1, 0, 0, 0, 186, 188, 1, 0, 0, 0, 187, 189, 3, 34, 17, 0, 188, 187, 1, 0, 0, 0, 188, 189, 1, 0, 0, 0, 189, 7, 1, 0, 0, 0, 190, 191, 5, 189, 0, 0, 191, 192, 3, 82, 41, 0, 192, 9, 1, 0, 0, 0, 193, 194, 5, 168, 0, 0, 194, 197, 5, 197, 0, 0, 195, 196, 5, 189, 0, 0, 196, 198, 5, 164, 0, 0, 197, 195, 1, 0, 0, 0, 197, 198, 1, 0, 0, 0, 198, 11, 1, 0, 0, 0, 199, 200, 5, 68, 0, 0, 200, 201, 3, 36, 18, 0, 201, 13, 1, 0, 0, 0, 202, 204, 7, 1, 0, 0, 203, 202, 1, 0, 0, 0, 203, 204, 1, 0, 0, 0, 204, 205, 1, 0, 0, 0, 205, 206, 5, 9, 0, 0, 206, 207, 5, 90, 0, 0, 207, 208, 3, 72, 36, 0, 208, 15, 1, 0, 0, 0, 209, 210, 5, 188, 0, 0, 210, 211, 3, 114, 57, 0, 211, 212, 5, 10, 0, 0, 212, 213, 5, 220, 0, 0, 213, 214, 3, 56, 28, 0, 214, 224, 5, 236, 0, 0, 215, 216, 5, 206, 0, 0, 216, 217, 3, 114, 57, 0, 217, 218, 5, 10, 0, 0, 218, 219, 5, 220, 0, 0, 219, 220, 3, 56, 28, 0, 220, 221, 5, 236, 0, 0, 221, 223, 1, 0, 0, 0, 222, 215, 1, 0, 0, 0, 223, 226, 1, 0, 0, 0, 224, 222, 1, 0, 0, 0, 224, 225, 1, 0, 0, 0, 225, 17, 1, 0, 0, 0, 226, 224, 1, 0, 0, 0, 227, 228, 5, 129, 0, 0, 228, 229, 3, 74, 37, 0, 229, 19, 1, 0, 0, 0, 230, 231, 5, 187, 0, 0, 231, 232, 3, 74, 37, 0, 232, 21, 1, 0, 0, 0, 233, 234, 5, 73, 0, 0, 234, 241, 5, 18, 0, 0, 235, 236, 7, 0, 0, 0, 236, 237, 5, 220, 0, 0, 237, 238, 3, 72, 36, 0, 238, 239, 5, 236, 0, 0, 239, 242, 1, 0, 0, 0, 240, 242, 3, 72, 36, 0, 241, 235, 1, 0, 0, 0, 241, 240, 1, 0, 0, 0, 242, 23, 1, 0, 0, 0, 243, 244, 5, 74, 0, 0, 244, 245, 3, 74, 37, 0, 245, 25, 1, 0, 0, 0, 246, 247, 5, 122, 0, 0, 247, 248, 5, 18, 0, 0, 248, 249, 3, 46, 23, 0, 249, 27, 1, 0, 0, 0, 250, 251, 5, 122, 0, 0, 251, 252, 5, 18, 0, 0, 252, 253, 3, 72, 36, 0, 253, 29, 1, 0, 0, 0, 254, 255, 5, 99, 0, 0, 255, 258, 3, 74, 37, 0, 256, 257, 5, 206, 0, 0, 257, 259, 3, 74, 37, 0, 258, 256, 1, 0, 0, 0, 258, 259, 1, 0, 0, 0, 259, 264, 1, 0, 0, 0, 260, 261, 5, 189, 0, 0, 261, 265, 5, 164, 0, 0, 262, 263, 5, 18, 0, 0, 263, 265, 3, 72, 36, 0, 264, 260, 1, 0, 0, 0, 264, 262, 1, 0, 0, 0, 264, 265, 1, 0, 0, 0, 265, 284, 1, 0, 0, 0, 266, 267, 5, 99, 0, 0, 267, 270, 3, 74, 37, 0, 268, 269, 5, 189, 0, 0, 269, 271, 5, 164, 0, 0, 270, 268, 1, 0, 0, 0, 270, 271, 1, 0, 0, 0, 271, 272, 1, 0, 0, 0, 272, 273, 5, 118, 0, 0, 273, 274, 3, 74, 37, 0, 274, 284, 1, 0, 0, 0, 275, 276, 5, 99, 0, 0, 276, 277, 3, 74, 37, 0, 277, 278, 5, 118, 0, 0, 278, 281, 3, 74, 37, 0, 279, 280, 5, 18, 0, 0, 280, 282, 3, 72, 36, 0, 281, 279, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 284, 1, 0, 0, 0, 283, 254, 1, 0, 0, 0, 283, 266, 1, 0, 0, 0, 283, 275, 1, 0, 0, 0, 284, 31, 1, 0, 0, 0, 285, 286, 5, 118, 0, 0, 286, 287, 3, 74, 37, 0, 287, 33, 1, 0, 0, 0, 288, 289, 5, 150, 0, 0, 289, 290, 3, 52, 26, 0, 290, 35, 1, 0, 0, 0, 291, 292, 6, 18, -1, 0, 292, 294, 3, 90, 45, 0, 293, 295, 5, 61, 0, 0, 294, 293, 1, 0, 0, 0, 294, 295, 1, 0, 0, 0, 295, 297, 1, 0, 0, 0, 296, 298, 3, 44, 22, 0, 297, 296, 1, 0, 0, 0, 297, 298, 1, 0, 0, 0, 298, 304, 1, 0, 0, 0, 299, 300, 5, 220, 0, 0, 300, 301, 3, 36, 18, 0, 301, 302, 5, 236, 0, 0, 302, 304, 1, 0, 0, 0, 303, 291, 1, 0, 0, 0, 303, 299, 1, 0, 0, 0, 304, 319, 1, 0, 0, 0, 305, 306, 10, 3, 0, 0, 306, 307, 3, 40, 20, 0, 307, 308, 3, 36, 18, 4, 308, 318, 1, 0, 0, 0, 309, 311, 10, 4, 0, 0, 310, 312, 3, 38, 19, 0, 311, 310, 1, 0, 0, 0, 311, 312, 1, 0, 0, 0, 312, 313, 1, 0, 0, 0, 313, 314, 5, 90, 0, 0, 314, 315, 3, 36, 18, 0, 315, 316, 3, 42, 21, 0, 316, 318, 1, 0, 0, 0, 317, 305, 1, 0, 0, 0, 317, 309, 1, 0, 0, 0, 318, 321, 1, 0, 0, 0, 319, 317, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 37, 1, 0, 0, 0, 321, 319, 1, 0, 0, 0, 322, 324, 7, 2, 0, 0, 323, 322, 1, 0, 0, 0, 323, 324, 1, 0, 0, 0, 324, 325, 1, 0, 0, 0, 325, 332, 5, 84, 0, 0, 326, 328, 5, 84, 0, 0, 327, 329, 7, 2, 0, 0, 328, 327, 1, 0, 0, 0, 328, 329, 1, 0, 0, 0, 329, 332, 1, 0, 0, 0, 330, 332, 7, 2, 0, 0, 331, 323, 1, 0, 0, 0, 331, 326, 1, 0, 0, 0, 331, 330, 1, 0, 0, 0, 332, 366, 1, 0, 0, 0, 333, 335, 7, 3, 0, 0, 334, 333, 1, 0, 0, 0, 334, 335, 1, 0, 0, 0, 335, 336, 1, 0, 0, 0, 336, 338, 7, 4, 0, 0, 337, 339, 5, 123, 0, 0, 338, 337, 1, 0, 0, 0, 338, 339, 1, 0, 0, 0, 339, 348, 1, 0, 0, 0, 340, 342, 7, 4, 0, 0, 341, 343, 5, 123, 0, 0, 342, 341, 1, 0, 0, 0, 342, 343, 1, 0, 0, 0, 343, 345, 1, 0, 0, 0, 344, 346, 7, 3, 0, 0, 345, 344, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 348, 1, 0, 0, 0, 347, 334, 1, 0, 0, 0, 347, 340, 1, 0, 0, 0, 348, 366, 1, 0, 0, 0, 349, 351, 7, 5, 0, 0, 350, 349, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 352, 1, 0, 0, 0, 352, 354, 5, 69, 0, 0, 353, 355, 5, 123, 0, 0, 354, 353, 1, 0, 0, 0, 354, 355, 1, 0, 0, 0, 355, 364, 1, 0, 0, 0, 356, 358, 5, 69, 0, 0, 357, 359, 5, 123, 0, 0, 358, 357, 1, 0, 0, 0, 358, 359, 1, 0, 0, 0, 359, 361, 1, 0, 0, 0, 360, 362, 7, 5, 0, 0, 361, 360, 1, 0, 0, 0, 361, 362, 1, 0, 0, 0, 362, 364, 1, 0, 0, 0, 363, 350, 1, 0, 0, 0, 363, 356, 1, 0, 0, 0, 364, 366, 1, 0, 0, 0, 365, 331, 1, 0, 0, 0, 365, 347, 1, 0, 0, 0, 365, 363, 1, 0, 0, 0, 366, 39, 1, 0, 0, 0, 367, 368, 5, 31, 0, 0, 368, 371, 5, 90, 0, 0, 369, 371, 5, 206, 0, 0, 370, 367, 1, 0, 0, 0, 370, 369, 1, 0, 0, 0, 371, 41, 1, 0, 0, 0, 372, 373, 5, 119, 0, 0, 373, 382, 3, 72, 36, 0, 374, 375, 5, 179, 0, 0, 375, 376, 5, 220, 0, 0, 376, 377, 3, 72, 36, 0, 377, 378, 5, 236, 0, 0, 378, 382, 1, 0, 0, 0, 379, 380, 5, 179, 0, 0, 380, 382, 3, 72, 36, 0, 381, 372, 1, 0, 0, 0, 381, 374, 1, 0, 0, 0, 381, 379, 1, 0, 0, 0, 382, 43, 1, 0, 0, 0, 383, 384, 5, 144, 0, 0, 384, 387, 3, 50, 25, 0, 385, 386, 5, 118, 0, 0, 386, 388, 3, 50, 25, 0, 387, 385, 1, 0, 0, 0, 387, 388, 1, 0, 0, 0, 388, 45, 1, 0, 0, 0, 389, 394, 3, 48, 24, 0, 390, 391, 5, 206, 0, 0, 391, 393, 3, 48, 24, 0, 392, 390, 1, 0, 0, 0, 393, 396, 1, 0, 0, 0, 394, 392, 1, 0, 0, 0, 394, 395, 1, 0, 0, 0, 395, 47, 1, 0, 0, 0, 396, 394, 1, 0, 0, 0, 397, 399, 3, 74, 37, 0, 398, 400, 7, 6, 0, 0, 399, 398, 1, 0, 0, 0, 399, 400, 1, 0, 0, 0, 400, 403, 1, 0, 0, 0, 401, 402, 5, 117, 0, 0, 402, 404, 7, 7, 0, 0, 403, 401, 1, 0, 0, 0, 403, 404, 1, 0, 0, 0, 404, 407, 1, 0, 0, 0, 405, 406, 5, 26, 0, 0, 406, 408, 5, 199, 0, 0, 407, 405, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 49, 1, 0, 0, 0, 409, 412, 3, 102, 51, 0, 410, 411, 5, 238, 0, 0, 411, 413, 3, 102, 51, 0, 412, 410, 1, 0, 0, 0, 412, 413, 1, 0, 0, 0, 413, 51, 1, 0, 0, 0, 414, 419, 3, 54, 27, 0, 415, 416, 5, 206, 0, 0, 416, 418, 3, 54, 27, 0, 417, 415, 1, 0, 0, 0, 418, 421, 1, 0, 0, 0, 419, 417, 1, 0, 0, 0, 419, 420, 1, 0, 0, 0, 420, 53, 1, 0, 0, 0, 421, 419, 1, 0, 0, 0, 422, 423, 3, 114, 57, 0, 423, 424, 5, 212, 0, 0, 424, 425, 3, 104, 52, 0, 425, 55, 1, 0, 0, 0, 426, 428, 3, 58, 29, 0, 427, 426, 1, 0, 0, 0, 427, 428, 1, 0, 0, 0, 428, 430, 1, 0, 0, 0, 429, 431, 3, 60, 30, 0, 430, 429, 1, 0, 0, 0, 430, 431, 1, 0, 0, 0, 431, 433, 1, 0, 0, 0, 432, 434, 3, 62, 31, 0, 433, 432, 1, 0, 0, 0, 433, 434, 1, 0, 0, 0, 434, 57, 1, 0, 0, 0, 435, 436, 5, 126, 0, 0, 436, 437, 5, 18, 0, 0, 437, 438, 3, 72, 36, 0, 438, 59, 1, 0, 0, 0, 439, 440, 5, 122, 0, 0, 440, 441, 5, 18, 0, 0, 441, 442, 3, 46, 23, 0, 442, 61, 1, 0, 0, 0, 443, 444, 7, 8, 0, 0, 444, 445, 3, 64, 32, 0, 445, 63, 1, 0, 0, 0, 446, 453, 3, 66, 33, 0, 447, 448, 5, 16, 0, 0, 448, 449, 3, 66, 33, 0, 449, 450, 5, 6, 0, 0, 450, 451, 3, 66, 33, 0, 451, 453, 1, 0, 0, 0, 452, 446, 1, 0, 0, 0, 452, 447, 1, 0, 0, 0, 453, 65, 1, 0, 0, 0, 454, 455, 5, 33, 0, 0, 455, 467, 5, 142, 0, 0, 456, 457, 5, 175, 0, 0, 457, 467, 5, 128, 0, 0, 458, 459, 5, 175, 0, 0, 459, 467, 5, 64, 0, 0, 460, 461, 3, 102, 51, 0, 461, 462, 5, 128, 0, 0, 462, 467, 1, 0, 0, 0, 463, 464, 3, 102, 51, 0, 464, 465, 5, 64, 0, 0, 465, 467, 1, 0, 0, 0, 466, 454, 1, 0, 0, 0, 466, 456, 1, 0, 0, 0, 466, 458, 1, 0, 0, 0, 466, 460, 1, 0, 0, 0, 466, 463, 1, 0, 0, 0, 467, 67, 1, 0, 0, 0, 468, 469, 3, 74, 37, 0, 469, 470, 5, 0, 0, 1, 470, 69, 1, 0, 0, 0, 471, 519, 3, 114, 57, 0, 472, 473, 3, 114, 57, 0, 473, 474, 5, 220, 0, 0, 474, 475, 3, 114, 57, 0, 475, 482, 3, 70, 35, 0, 476, 477, 5, 206, 0, 0, 477, 478, 3, 114, 57, 0, 478, 479, 3, 70, 35, 0, 479, 481, 1, 0, 0, 0, 480, 476, 1, 0, 0, 0, 481, 484, 1, 0, 0, 0, 482, 480, 1, 0, 0, 0, 482, 483, 1, 0, 0, 0, 483, 485, 1, 0, 0, 0, 484, 482, 1, 0, 0, 0, 485, 486, 5, 236, 0, 0, 486, 519, 1, 0, 0, 0, 487, 488, 3, 114, 57, 0, 488, 489, 5, 220, 0, 0, 489, 494, 3, 116, 58, 0, 490, 491, 5, 206, 0, 0, 491, 493, 3, 116, 58, 0, 492, 490, 1, 0, 0, 0, 493, 496, 1, 0, 0, 0, 494, 492, 1, 0, 0, 0, 494, 495, 1, 0, 0, 0, 495, 497, 1, 0, 0, 0, 496, 494, 1, 0, 0, 0, 497, 498, 5, 236, 0, 0, 498, 519, 1, 0, 0, 0, 499, 500, 3, 114, 57, 0, 500, 501, 5, 220, 0, 0, 501, 506, 3, 70, 35, 0, 502, 503, 5, 206, 0, 0, 503, 505, 3, 70, 35, 0, 504, 502, 1, 0, 0, 0, 505, 508, 1, 0, 0, 0, 506, 504, 1, 0, 0, 0, 506, 507, 1, 0, 0, 0, 507, 509, 1, 0, 0, 0, 508, 506, 1, 0, 0, 0, 509, 510, 5, 236, 0, 0, 510, 519, 1, 0, 0, 0, 511, 512, 3, 114, 57, 0, 512, 514, 5, 220, 0, 0, 513, 515, 3, 72, 36, 0, 514, 513, 1, 0, 0, 0, 514, 515, 1, 0, 0, 0, 515, 516, 1, 0, 0, 0, 516, 517, 5, 236, 0, 0, 517, 519, 1, 0, 0, 0, 518, 471, 1, 0, 0, 0, 518, 472, 1, 0, 0, 0, 518, 487, 1, 0, 0, 0, 518, 499, 1, 0, 0, 0, 518, 511, 1, 0, 0, 0, 519, 71, 1, 0, 0, 0, 520, 525, 3, 74, 37, 0, 521, 522, 5, 206, 0, 0, 522, 524, 3, 74, 37, 0, 523, 521, 1, 0, 0, 0, 524, 527, 1, 0, 0, 0, 525, 523, 1, 0, 0, 0, 525, 526, 1, 0, 0, 0, 526, 73, 1, 0, 0, 0, 527, 525, 1, 0, 0, 0, 528, 529, 6, 37, -1, 0, 529, 531, 5, 19, 0, 0, 530, 532, 3, 74, 37, 0, 531, 530, 1, 0, 0, 0, 531, 532, 1, 0, 0, 0, 532, 538, 1, 0, 0, 0, 533, 534, 5, 186, 0, 0, 534, 535, 3, 74, 37, 0, 535, 536, 5, 163, 0, 0, 536, 537, 3, 74, 37, 0, 537, 539, 1, 0, 0, 0, 538, 533, 1, 0, 0, 0, 539, 540, 1, 0, 0, 0, 540, 538, 1, 0, 0, 0, 540, 541, 1, 0, 0, 0, 541, 544, 1, 0, 0, 0, 542, 543, 5, 52, 0, 0, 543, 545, 3, 74, 37, 0, 544, 542, 1, 0, 0, 0, 544, 545, 1, 0, 0, 0, 545, 546, 1, 0, 0, 0, 546, 547, 5, 53, 0, 0, 547, 658, 1, 0, 0, 0, 548, 549, 5, 20, 0, 0, 549, 550, 5, 220, 0, 0, 550, 551, 3, 74, 37, 0, 551, 552, 5, 10, 0, 0, 552, 553, 3, 70, 35, 0, 553, 554, 5, 236, 0, 0, 554, 658, 1, 0, 0, 0, 555, 556, 5, 36, 0, 0, 556, 658, 5, 199, 0, 0, 557, 558, 5, 59, 0, 0, 558, 559, 5, 220, 0, 0, 559, 560, 3, 106, 53, 0, 560, 561, 5, 68, 0, 0, 561, 562, 3, 74, 37, 0, 562, 563, 5, 236, 0, 0, 563, 658, 1, 0, 0, 0, 564, 565, 5, 86, 0, 0, 565, 566, 3, 74, 37, 0, 566, 567, 3, 106, 53, 0, 567, 658, 1, 0, 0, 0, 568, 569, 5, 155, 0, 0, 569, 570, 5, 220, 0, 0, 570, 571, 3, 74, 37, 0, 571, 572, 5, 68, 0, 0, 572, 575, 3, 74, 37, 0, 573, 574, 5, 65, 0, 0, 574, 576, 3, 74, 37, 0, 575, 573, 1, 0, 0, 0, 575, 576, 1, 0, 0, 0, 576, 577, 1, 0, 0, 0, 577, 578, 5, 236, 0, 0, 578, 658, 1, 0, 0, 0, 579, 580, 5, 166, 0, 0, 580, 658, 5, 199, 0, 0, 581, 582, 5, 171, 0, 0, 582, 583, 5, 220, 0, 0, 583, 584, 7, 9, 0, 0, 584, 585, 5, 199, 0, 0, 585, 586, 5, 68, 0, 0, 586, 587, 3, 74, 37, 0, 587, 588, 5, 236, 0, 0, 588, 658, 1, 0, 0, 0, 589, 590, 3, 114, 57, 0, 590, 592, 5, 220, 0, 0, 591, 593, 3, 72, 36, 0, 592, 591, 1, 0, 0, 0, 592, 593, 1, 0, 0, 0, 593, 594, 1, 0, 0, 0, 594, 595, 5, 236, 0, 0, 595, 596, 1, 0, 0, 0, 596, 597, 5, 125, 0, 0, 597, 598, 5, 220, 0, 0, 598, 599, 3, 56, 28, 0, 599, 600, 5, 236, 0, 0, 600, 658, 1, 0, 0, 0, 601, 602, 3, 114, 57, 0, 602, 604, 5, 220, 0, 0, 603, 605, 3, 72, 36, 0, 604, 603, 1, 0, 0, 0, 604, 605, 1, 0, 0, 0, 605, 606, 1, 0, 0, 0, 606, 607, 5, 236, 0, 0, 607, 608, 1, 0, 0, 0, 608, 609, 5, 125, 0, 0, 609, 610, 3, 114, 57, 0, 610, 658, 1, 0, 0, 0, 611, 617, 3, 114, 57, 0, 612, 614, 5, 220, 0, 0, 613, 615, 3, 72, 36, 0, 614, 613, 1, 0, 0, 0, 614, 615, 1, 0, 0, 0, 615, 616, 1, 0, 0, 0, 616, 618, 5, 236, 0, 0, 617, 612, 1, 0, 0, 0, 617, 618, 1, 0, 0, 0, 618, 619, 1, 0, 0, 0, 619, 621, 5, 220, 0, 0, 620, 622, 5, 49, 0, 0, 621, 620, 1, 0, 0, 0, 621, 622, 1, 0, 0, 0, 622, 624, 1, 0, 0, 0, 623, 625, 3, 76, 38, 0, 624, 623, 1, 0, 0, 0, 624, 625, 1, 0, 0, 0, 625, 626, 1, 0, 0, 0, 626, 627, 5, 236, 0, 0, 627, 658, 1, 0, 0, 0, 628, 658, 3, 104, 52, 0, 629, 630, 5, 208, 0, 0, 630, 658, 3, 74, 37, 18, 631, 632, 5, 115, 0, 0, 632, 658, 3, 74, 37, 12, 633, 634, 3, 94, 47, 0, 634, 635, 5, 210, 0, 0, 635, 637, 1, 0, 0, 0, 636, 633, 1, 0, 0, 0, 636, 637, 1, 0, 0, 0, 637, 638, 1, 0, 0, 0, 638, 658, 5, 202, 0, 0, 639, 640, 5, 220, 0, 0, 640, 641, 3, 2, 1, 0, 641, 642, 5, 236, 0, 0, 642, 658, 1, 0, 0, 0, 643, 644, 5, 220, 0, 0, 644, 645, 3, 74, 37, 0, 645, 646, 5, 236, 0, 0, 646, 658, 1, 0, 0, 0, 647, 648, 5, 220, 0, 0, 648, 649, 3, 72, 36, 0, 649, 650, 5, 236, 0, 0, 650, 658, 1, 0, 0, 0, 651, 653, 5, 219, 0, 0, 652, 654, 3, 72, 36, 0, 653, 652, 1, 0, 0, 0, 653, 654, 1, 0, 0, 0, 654, 655, 1, 0, 0, 0, 655, 658, 5, 235, 0, 0, 656, 658, 3, 86, 43, 0, 657, 528, 1, 0, 0, 0, 657, 548, 1, 0, 0, 0, 657, 555, 1, 0, 0, 0, 657, 557, 1, 0, 0, 0, 657, 564, 1, 0, 0, 0, 657, 568, 1, 0, 0, 0, 657, 579, 1, 0, 0, 0, 657, 581, 1, 0, 0, 0, 657, 589, 1, 0, 0, 0, 657, 601, 1, 0, 0, 0, 657, 611, 1, 0, 0, 0, 657, 628, 1, 0, 0, 0, 657, 629, 1, 0, 0, 0, 657, 631, 1, 0, 0, 0, 657, 636, 1, 0, 0, 0, 657, 639, 1, 0, 0, 0, 657, 643, 1, 0, 0, 0, 657, 647, 1, 0, 0, 0, 657, 651, 1, 0, 0, 0, 657, 656, 1, 0, 0, 0, 658, 752, 1, 0, 0, 0, 659, 663, 10, 17, 0, 0, 660, 664, 5, 202, 0, 0, 661, 664, 5, 238, 0, 0, 662, 664, 5, 227, 0, 0, 663, 660, 1, 0, 0, 0, 663, 661, 1, 0, 0, 0, 663, 662, 1, 0, 0, 0, 664, 665, 1, 0, 0, 0, 665, 751, 3, 74, 37, 18, 666, 670, 10, 16, 0, 0, 667, 671, 5, 228, 0, 0, 668, 671, 5, 208, 0, 0, 669, 671, 5, 207, 0, 0, 670, 667, 1, 0, 0, 0, 670, 668, 1, 0, 0, 0, 670, 669, 1, 0, 0, 0, 671, 672, 1, 0, 0, 0, 672, 751, 3, 74, 37, 17, 673, 698, 10, 15, 0, 0, 674, 699, 5, 211, 0, 0, 675, 699, 5, 212, 0, 0, 676, 699, 5, 223, 0, 0, 677, 699, 5, 221, 0, 0, 678, 699, 5, 222, 0, 0, 679, 699, 5, 213, 0, 0, 680, 699, 5, 214, 0, 0, 681, 683, 5, 115, 0, 0, 682, 681, 1, 0, 0, 0, 682, 683, 1, 0, 0, 0, 683, 684, 1, 0, 0, 0, 684, 686, 5, 80, 0, 0, 685, 687, 5, 25, 0, 0, 686, 685, 1, 0, 0, 0, 686, 687, 1, 0, 0, 0, 687, 699, 1, 0, 0, 0, 688, 690, 5, 115, 0, 0, 689, 688, 1, 0, 0, 0, 689, 690, 1, 0, 0, 0, 690, 691, 1, 0, 0, 0, 691, 699, 7, 10, 0, 0, 692, 699, 5, 232, 0, 0, 693, 699, 5, 233, 0, 0, 694, 699, 5, 225, 0, 0, 695, 699, 5, 216, 0, 0, 696, 699, 5, 217, 0, 0, 697, 699, 5, 224, 0, 0, 698, 674, 1, 0, 0, 0, 698, 675, 1, 0, 0, 0, 698, 676, 1, 0, 0, 0, 698, 677, 1, 0, 0, 0, 698, 678, 1, 0, 0, 0, 698, 679, 1, 0, 0, 0, 698, 680, 1, 0, 0, 0, 698, 682, 1, 0, 0, 0, 698, 689, 1, 0, 0, 0, 698, 692, 1, 0, 0, 0, 698, 693, 1, 0, 0, 0, 698, 694, 1, 0, 0, 0, 698, 695, 1, 0, 0, 0, 698, 696, 1, 0, 0, 0, 698, 697, 1, 0, 0, 0, 699, 700, 1, 0, 0, 0, 700, 751, 3, 74, 37, 16, 701, 702, 10, 13, 0, 0, 702, 703, 5, 226, 0, 0, 703, 751, 3, 74, 37, 14, 704, 705, 10, 11, 0, 0, 705, 706, 5, 6, 0, 0, 706, 751, 3, 74, 37, 12, 707, 708, 10, 10, 0, 0, 708, 709, 5, 121, 0, 0, 709, 751, 3, 74, 37, 11, 710, 712, 10, 9, 0, 0, 711, 713, 5, 115, 0, 0, 712, 711, 1, 0, 0, 0, 712, 713, 1, 0, 0, 0, 713, 714, 1, 0, 0, 0, 714, 715, 5, 16, 0, 0, 715, 716, 3, 74, 37, 0, 716, 717, 5, 6, 0, 0, 717, 718, 3, 74, 37, 10, 718, 751, 1, 0, 0, 0, 719, 720, 10, 8, 0, 0, 720, 721, 5, 229, 0, 0, 721, 722, 3, 74, 37, 0, 722, 723, 5, 205, 0, 0, 723, 724, 3, 74, 37, 8, 724, 751, 1, 0, 0, 0, 725, 726, 10, 21, 0, 0, 726, 727, 5, 219, 0, 0, 727, 728, 3, 74, 37, 0, 728, 729, 5, 235, 0, 0, 729, 751, 1, 0, 0, 0, 730, 731, 10, 20, 0, 0, 731, 732, 5, 210, 0, 0, 732, 751, 5, 197, 0, 0, 733, 734, 10, 19, 0, 0, 734, 735, 5, 210, 0, 0, 735, 751, 3, 114, 57, 0, 736, 737, 10, 14, 0, 0, 737, 739, 5, 88, 0, 0, 738, 740, 5, 115, 0, 0, 739, 738, 1, 0, 0, 0, 739, 740, 1, 0, 0, 0, 740, 741, 1, 0, 0, 0, 741, 751, 5, 116, 0, 0, 742, 748, 10, 7, 0, 0, 743, 749, 3, 112, 56, 0, 744, 745, 5, 10, 0, 0, 745, 749, 3, 114, 57, 0, 746, 747, 5, 10, 0, 0, 747, 749, 5, 199, 0, 0, 748, 743, 1, 0, 0, 0, 748, 744, 1, 0, 0, 0, 748, 746, 1, 0, 0, 0, 749, 751, 1, 0, 0, 0, 750, 659, 1, 0, 0, 0, 750, 666, 1, 0, 0, 0, 750, 673, 1, 0, 0, 0, 750, 701, 1, 0, 0, 0, 750, 704, 1, 0, 0, 0, 750, 707, 1, 0, 0, 0, 750, 710, 1, 0, 0, 0, 750, 719, 1, 0, 0, 0, 750, 725, 1, 0, 0, 0, 750, 730, 1, 0, 0, 0, 750, 733, 1, 0, 0, 0, 750, 736, 1, 0, 0, 0, 750, 742, 1, 0, 0, 0, 751, 754, 1, 0, 0, 0, 752, 750, 1, 0, 0, 0, 752, 753, 1, 0, 0, 0, 753, 75, 1, 0, 0, 0, 754, 752, 1, 0, 0, 0, 755, 760, 3, 78, 39, 0, 756, 757, 5, 206, 0, 0, 757, 759, 3, 78, 39, 0, 758, 756, 1, 0, 0, 0, 759, 762, 1, 0, 0, 0, 760, 758, 1, 0, 0, 0, 760, 761, 1, 0, 0, 0, 761, 77, 1, 0, 0, 0, 762, 760, 1, 0, 0, 0, 763, 766, 3, 80, 40, 0, 764, 766, 3, 74, 37, 0, 765, 763, 1, 0, 0, 0, 765, 764, 1, 0, 0, 0, 766, 79, 1, 0, 0, 0, 767, 768, 5, 220, 0, 0, 768, 773, 3, 114, 57, 0, 769, 770, 5, 206, 0, 0, 770, 772, 3, 114, 57, 0, 771, 769, 1, 0, 0, 0, 772, 775, 1, 0, 0, 0, 773, 771, 1, 0, 0, 0, 773, 774, 1, 0, 0, 0, 774, 776, 1, 0, 0, 0, 775, 773, 1, 0, 0, 0, 776, 777, 5, 236, 0, 0, 777, 787, 1, 0, 0, 0, 778, 783, 3, 114, 57, 0, 779, 780, 5, 206, 0, 0, 780, 782, 3, 114, 57, 0, 781, 779, 1, 0, 0, 0, 782, 785, 1, 0, 0, 0, 783, 781, 1, 0, 0, 0, 783, 784, 1, 0, 0, 0, 784, 787, 1, 0, 0, 0, 785, 783, 1, 0, 0, 0, 786, 767, 1, 0, 0, 0, 786, 778, 1, 0, 0, 0, 787, 788, 1, 0, 0, 0, 788, 789, 5, 201, 0, 0, 789, 790, 3, 74, 37, 0, 790, 81, 1, 0, 0, 0, 791, 796, 3, 84, 42, 0, 792, 793, 5, 206, 0, 0, 793, 795, 3, 84, 42, 0, 794, 792, 1, 0, 0, 0, 795, 798, 1, 0, 0, 0, 796, 794, 1, 0, 0, 0, 796, 797, 1, 0, 0, 0, 797, 83, 1, 0, 0, 0, 798, 796, 1, 0, 0, 0, 799, 800, 3, 114, 57, 0, 800, 801, 5, 10, 0, 0, 801, 802, 5, 220, 0, 0, 802, 803, 3, 2, 1, 0, 803, 804, 5, 236, 0, 0, 804, 810, 1, 0, 0, 0, 805, 806, 3, 74, 37, 0, 806, 807, 5, 10, 0, 0, 807, 808, 3, 114, 57, 0, 808, 810, 1, 0, 0, 0, 809, 799, 1, 0, 0, 0, 809, 805, 1, 0, 0, 0, 810, 85, 1, 0, 0, 0, 811, 819, 5, 200, 0, 0, 812, 813, 3, 94, 47, 0, 813, 814, 5, 210, 0, 0, 814, 816, 1, 0, 0, 0, 815, 812, 1, 0, 0, 0, 815, 816, 1, 0, 0, 0, 816, 817, 1, 0, 0, 0, 817, 819, 3, 88, 44, 0, 818, 811, 1, 0, 0, 0, 818, 815, 1, 0, 0, 0, 819, 87, 1, 0, 0, 0, 820, 825, 3, 114, 57, 0, 821, 822, 5, 210, 0, 0, 822, 824, 3, 114, 57, 0, 823, 821, 1, 0, 0, 0, 824, 827, 1, 0, 0, 0, 825, 823, 1, 0, 0, 0, 825, 826, 1, 0, 0, 0, 826, 89, 1, 0, 0, 0, 827, 825, 1, 0, 0, 0, 828, 829, 6, 45, -1, 0, 829, 837, 3, 94, 47, 0, 830, 837, 3, 92, 46, 0, 831, 832, 5, 220, 0, 0, 832, 833, 3, 2, 1, 0, 833, 834, 5, 236, 0, 0, 834, 837, 1, 0, 0, 0, 835, 837, 5, 200, 0, 0, 836, 828, 1, 0, 0, 0, 836, 830, 1, 0, 0, 0, 836, 831, 1, 0, 0, 0, 836, 835, 1, 0, 0, 0, 837, 846, 1, 0, 0, 0, 838, 842, 10, 2, 0, 0, 839, 843, 3, 112, 56, 0, 840, 841, 5, 10, 0, 0, 841, 843, 3, 114, 57, 0, 842, 839, 1, 0, 0, 0, 842, 840, 1, 0, 0, 0, 843, 845, 1, 0, 0, 0, 844, 838, 1, 0, 0, 0, 845, 848, 1, 0, 0, 0, 846, 844, 1, 0, 0, 0, 846, 847, 1, 0, 0, 0, 847, 91, 1, 0, 0, 0, 848, 846, 1, 0, 0, 0, 849, 850, 3, 114, 57, 0, 850, 852, 5, 220, 0, 0, 851, 853, 3, 96, 48, 0, 852, 851, 1, 0, 0, 0, 852, 853, 1, 0, 0, 0, 853, 854, 1, 0, 0, 0, 854, 855, 5, 236, 0, 0, 855, 93, 1, 0, 0, 0, 856, 857, 3, 98, 49, 0, 857, 858, 5, 210, 0, 0, 858, 860, 1, 0, 0, 0, 859, 856, 1, 0, 0, 0, 859, 860, 1, 0, 0, 0, 860, 861, 1, 0, 0, 0, 861, 862, 3, 114, 57, 0, 862, 95, 1, 0, 0, 0, 863, 868, 3, 74, 37, 0, 864, 865, 5, 206, 0, 0, 865, 867, 3, 74, 37, 0, 866, 864, 1, 0, 0, 0, 867, 870, 1, 0, 0, 0, 868, 866, 1, 0, 0, 0, 868, 869, 1, 0, 0, 0, 869, 97, 1, 0, 0, 0, 870, 868, 1, 0, 0, 0, 871, 872, 3, 114, 57, 0, 872, 99, 1, 0, 0, 0, 873, 882, 5, 195, 0, 0, 874, 875, 5, 210, 0, 0, 875, 882, 7, 11, 0, 0, 876, 877, 5, 197, 0, 0, 877, 879, 5, 210, 0, 0, 878, 880, 7, 11, 0, 0, 879, 878, 1, 0, 0, 0, 879, 880, 1, 0, 0, 0, 880, 882, 1, 0, 0, 0, 881, 873, 1, 0, 0, 0, 881, 874, 1, 0, 0, 0, 881, 876, 1, 0, 0, 0, 882, 101, 1, 0, 0, 0, 883, 885, 7, 12, 0, 0, 884, 883, 1, 0, 0, 0, 884, 885, 1, 0, 0, 0, 885, 892, 1, 0, 0, 0, 886, 893, 3, 100, 50, 0, 887, 893, 5, 196, 0, 0, 888, 893, 5, 197, 0, 0, 889, 893, 5, 198, 0, 0, 890, 893, 5, 82, 0, 0, 891, 893, 5, 113, 0, 0, 892, 886, 1, 0, 0, 0, 892, 887, 1, 0, 0, 0, 892, 888, 1, 0, 0, 0, 892, 889, 1, 0, 0, 0, 892, 890, 1, 0, 0, 0, 892, 891, 1, 0, 0, 0, 893, 103, 1, 0, 0, 0, 894, 898, 3, 102, 51, 0, 895, 898, 5, 199, 0, 0, 896, 898, 5, 116, 0, 0, 897, 894, 1, 0, 0, 0, 897, 895, 1, 0, 0, 0, 897, 896, 1, 0, 0, 0, 898, 105, 1, 0, 0, 0, 899, 900, 7, 13, 0, 0, 900, 107, 1, 0, 0, 0, 901, 902, 7, 14, 0, 0, 902, 109, 1, 0, 0, 0, 903, 904, 7, 15, 0, 0, 904, 111, 1, 0, 0, 0, 905, 908, 5, 194, 0, 0, 906, 908, 3, 110, 55, 0, 907, 905, 1, 0, 0, 0, 907, 906, 1, 0, 0, 0, 908, 113, 1, 0, 0, 0, 909, 913, 5, 194, 0, 0, 910, 913, 3, 106, 53, 0, 911, 913, 3, 108, 54, 0, 912, 909, 1, 0, 0, 0, 912, 910, 1, 0, 0, 0, 912, 911, 1, 0, 0, 0, 913, 115, 1, 0, 0, 0, 914, 915, 5, 199, 0, 0, 915, 916, 5, 212, 0, 0, 916, 917, 3, 102, 51, 0, 917, 117, 1, 0, 0, 0, 114, 120, 130, 138, 141, 145, 148, 152, 155, 158, 161, 164, 168, 172, 175, 178, 181, 185, 188, 197, 203, 224, 241, 258, 264, 270, 281, 283, 294, 297, 303, 311, 317, 319, 323, 328, 331, 334, 338, 342, 345, 347, 350, 354, 358, 361, 363, 365, 370, 381, 387, 394, 399, 403, 407, 412, 419, 427, 430, 433, 452, 466, 482, 494, 506, 514, 518, 525, 531, 540, 544, 575, 592, 604, 614, 617, 621, 624, 636, 653, 657, 663, 670, 682, 686, 689, 698, 712, 739, 748, 750, 752, 760, 765, 773, 783, 786, 796, 809, 815, 818, 825, 836, 842, 846, 852, 859, 868, 879, 881, 884, 892, 897, 907, 912] \ No newline at end of file +[4, 1, 242, 922, 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, 1, 0, 1, 0, 3, 0, 121, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 129, 8, 1, 10, 1, 12, 1, 132, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 139, 8, 2, 1, 3, 3, 3, 142, 8, 3, 1, 3, 1, 3, 3, 3, 146, 8, 3, 1, 3, 3, 3, 149, 8, 3, 1, 3, 1, 3, 3, 3, 153, 8, 3, 1, 3, 3, 3, 156, 8, 3, 1, 3, 3, 3, 159, 8, 3, 1, 3, 3, 3, 162, 8, 3, 1, 3, 3, 3, 165, 8, 3, 1, 3, 1, 3, 3, 3, 169, 8, 3, 1, 3, 1, 3, 3, 3, 173, 8, 3, 1, 3, 3, 3, 176, 8, 3, 1, 3, 3, 3, 179, 8, 3, 1, 3, 3, 3, 182, 8, 3, 1, 3, 1, 3, 3, 3, 186, 8, 3, 1, 3, 3, 3, 189, 8, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 198, 8, 5, 1, 6, 1, 6, 1, 6, 1, 7, 3, 7, 204, 8, 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, 8, 1, 8, 1, 8, 1, 8, 1, 8, 5, 8, 223, 8, 8, 10, 8, 12, 8, 226, 9, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 242, 8, 11, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 259, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 265, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 271, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 282, 8, 15, 3, 15, 284, 8, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 3, 18, 295, 8, 18, 1, 18, 3, 18, 298, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 304, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 312, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 5, 18, 318, 8, 18, 10, 18, 12, 18, 321, 9, 18, 1, 19, 3, 19, 324, 8, 19, 1, 19, 1, 19, 1, 19, 3, 19, 329, 8, 19, 1, 19, 3, 19, 332, 8, 19, 1, 19, 3, 19, 335, 8, 19, 1, 19, 1, 19, 3, 19, 339, 8, 19, 1, 19, 1, 19, 3, 19, 343, 8, 19, 1, 19, 3, 19, 346, 8, 19, 3, 19, 348, 8, 19, 1, 19, 3, 19, 351, 8, 19, 1, 19, 1, 19, 3, 19, 355, 8, 19, 1, 19, 1, 19, 3, 19, 359, 8, 19, 1, 19, 3, 19, 362, 8, 19, 3, 19, 364, 8, 19, 3, 19, 366, 8, 19, 1, 20, 1, 20, 1, 20, 3, 20, 371, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 382, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 388, 8, 22, 1, 23, 1, 23, 1, 23, 5, 23, 393, 8, 23, 10, 23, 12, 23, 396, 9, 23, 1, 24, 1, 24, 3, 24, 400, 8, 24, 1, 24, 1, 24, 3, 24, 404, 8, 24, 1, 24, 1, 24, 3, 24, 408, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 414, 8, 25, 3, 25, 416, 8, 25, 1, 26, 1, 26, 1, 26, 5, 26, 421, 8, 26, 10, 26, 12, 26, 424, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 3, 28, 431, 8, 28, 1, 28, 3, 28, 434, 8, 28, 1, 28, 3, 28, 437, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 456, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 470, 8, 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, 5, 35, 484, 8, 35, 10, 35, 12, 35, 487, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 496, 8, 35, 10, 35, 12, 35, 499, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 508, 8, 35, 10, 35, 12, 35, 511, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 518, 8, 35, 1, 35, 1, 35, 3, 35, 522, 8, 35, 1, 36, 1, 36, 1, 36, 5, 36, 527, 8, 36, 10, 36, 12, 36, 530, 9, 36, 1, 37, 1, 37, 1, 37, 3, 37, 535, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 4, 37, 542, 8, 37, 11, 37, 12, 37, 543, 1, 37, 1, 37, 3, 37, 548, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 579, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 596, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 608, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 618, 8, 37, 1, 37, 3, 37, 621, 8, 37, 1, 37, 1, 37, 3, 37, 625, 8, 37, 1, 37, 3, 37, 628, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 640, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 657, 8, 37, 1, 37, 1, 37, 3, 37, 661, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 667, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 674, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 686, 8, 37, 1, 37, 1, 37, 3, 37, 690, 8, 37, 1, 37, 3, 37, 693, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 702, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 716, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 743, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 752, 8, 37, 5, 37, 754, 8, 37, 10, 37, 12, 37, 757, 9, 37, 1, 38, 1, 38, 1, 38, 5, 38, 762, 8, 38, 10, 38, 12, 38, 765, 9, 38, 1, 39, 1, 39, 3, 39, 769, 8, 39, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 775, 8, 40, 10, 40, 12, 40, 778, 9, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 785, 8, 40, 10, 40, 12, 40, 788, 9, 40, 3, 40, 790, 8, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 5, 41, 798, 8, 41, 10, 41, 12, 41, 801, 9, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 813, 8, 42, 1, 43, 1, 43, 1, 43, 1, 43, 3, 43, 819, 8, 43, 1, 43, 3, 43, 822, 8, 43, 1, 44, 1, 44, 1, 44, 5, 44, 827, 8, 44, 10, 44, 12, 44, 830, 9, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 840, 8, 45, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 846, 8, 45, 5, 45, 848, 8, 45, 10, 45, 12, 45, 851, 9, 45, 1, 46, 1, 46, 1, 46, 3, 46, 856, 8, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 3, 47, 863, 8, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 5, 48, 870, 8, 48, 10, 48, 12, 48, 873, 9, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 883, 8, 50, 3, 50, 885, 8, 50, 1, 51, 3, 51, 888, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 896, 8, 51, 1, 52, 1, 52, 1, 52, 3, 52, 901, 8, 52, 1, 53, 1, 53, 1, 54, 1, 54, 1, 55, 1, 55, 1, 56, 1, 56, 3, 56, 911, 8, 56, 1, 57, 1, 57, 1, 57, 3, 57, 916, 8, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 0, 3, 36, 74, 90, 59, 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, 0, 16, 2, 0, 32, 32, 141, 141, 2, 0, 84, 84, 96, 96, 3, 0, 4, 4, 8, 8, 12, 12, 4, 0, 4, 4, 7, 8, 12, 12, 147, 147, 2, 0, 96, 96, 140, 140, 2, 0, 4, 4, 8, 8, 2, 0, 11, 11, 42, 43, 2, 0, 62, 62, 93, 93, 2, 0, 133, 133, 143, 143, 3, 0, 17, 17, 95, 95, 170, 170, 2, 0, 79, 79, 98, 98, 1, 0, 196, 197, 2, 0, 208, 208, 228, 228, 8, 0, 37, 37, 76, 76, 108, 108, 110, 110, 132, 132, 145, 145, 185, 185, 190, 190, 13, 0, 2, 24, 26, 36, 38, 75, 77, 81, 83, 107, 109, 109, 111, 112, 114, 115, 117, 130, 133, 144, 146, 184, 186, 189, 191, 192, 4, 0, 36, 36, 62, 62, 77, 77, 91, 91, 1043, 0, 120, 1, 0, 0, 0, 2, 124, 1, 0, 0, 0, 4, 138, 1, 0, 0, 0, 6, 141, 1, 0, 0, 0, 8, 190, 1, 0, 0, 0, 10, 193, 1, 0, 0, 0, 12, 199, 1, 0, 0, 0, 14, 203, 1, 0, 0, 0, 16, 209, 1, 0, 0, 0, 18, 227, 1, 0, 0, 0, 20, 230, 1, 0, 0, 0, 22, 233, 1, 0, 0, 0, 24, 243, 1, 0, 0, 0, 26, 246, 1, 0, 0, 0, 28, 250, 1, 0, 0, 0, 30, 283, 1, 0, 0, 0, 32, 285, 1, 0, 0, 0, 34, 288, 1, 0, 0, 0, 36, 303, 1, 0, 0, 0, 38, 365, 1, 0, 0, 0, 40, 370, 1, 0, 0, 0, 42, 381, 1, 0, 0, 0, 44, 383, 1, 0, 0, 0, 46, 389, 1, 0, 0, 0, 48, 397, 1, 0, 0, 0, 50, 415, 1, 0, 0, 0, 52, 417, 1, 0, 0, 0, 54, 425, 1, 0, 0, 0, 56, 430, 1, 0, 0, 0, 58, 438, 1, 0, 0, 0, 60, 442, 1, 0, 0, 0, 62, 446, 1, 0, 0, 0, 64, 455, 1, 0, 0, 0, 66, 469, 1, 0, 0, 0, 68, 471, 1, 0, 0, 0, 70, 521, 1, 0, 0, 0, 72, 523, 1, 0, 0, 0, 74, 660, 1, 0, 0, 0, 76, 758, 1, 0, 0, 0, 78, 768, 1, 0, 0, 0, 80, 789, 1, 0, 0, 0, 82, 794, 1, 0, 0, 0, 84, 812, 1, 0, 0, 0, 86, 821, 1, 0, 0, 0, 88, 823, 1, 0, 0, 0, 90, 839, 1, 0, 0, 0, 92, 852, 1, 0, 0, 0, 94, 862, 1, 0, 0, 0, 96, 866, 1, 0, 0, 0, 98, 874, 1, 0, 0, 0, 100, 884, 1, 0, 0, 0, 102, 887, 1, 0, 0, 0, 104, 900, 1, 0, 0, 0, 106, 902, 1, 0, 0, 0, 108, 904, 1, 0, 0, 0, 110, 906, 1, 0, 0, 0, 112, 910, 1, 0, 0, 0, 114, 915, 1, 0, 0, 0, 116, 917, 1, 0, 0, 0, 118, 121, 3, 2, 1, 0, 119, 121, 3, 6, 3, 0, 120, 118, 1, 0, 0, 0, 120, 119, 1, 0, 0, 0, 121, 122, 1, 0, 0, 0, 122, 123, 5, 0, 0, 1, 123, 1, 1, 0, 0, 0, 124, 130, 3, 4, 2, 0, 125, 126, 5, 176, 0, 0, 126, 127, 5, 4, 0, 0, 127, 129, 3, 4, 2, 0, 128, 125, 1, 0, 0, 0, 129, 132, 1, 0, 0, 0, 130, 128, 1, 0, 0, 0, 130, 131, 1, 0, 0, 0, 131, 3, 1, 0, 0, 0, 132, 130, 1, 0, 0, 0, 133, 139, 3, 6, 3, 0, 134, 135, 5, 220, 0, 0, 135, 136, 3, 2, 1, 0, 136, 137, 5, 236, 0, 0, 137, 139, 1, 0, 0, 0, 138, 133, 1, 0, 0, 0, 138, 134, 1, 0, 0, 0, 139, 5, 1, 0, 0, 0, 140, 142, 3, 8, 4, 0, 141, 140, 1, 0, 0, 0, 141, 142, 1, 0, 0, 0, 142, 143, 1, 0, 0, 0, 143, 145, 5, 146, 0, 0, 144, 146, 5, 49, 0, 0, 145, 144, 1, 0, 0, 0, 145, 146, 1, 0, 0, 0, 146, 148, 1, 0, 0, 0, 147, 149, 3, 10, 5, 0, 148, 147, 1, 0, 0, 0, 148, 149, 1, 0, 0, 0, 149, 150, 1, 0, 0, 0, 150, 152, 3, 72, 36, 0, 151, 153, 3, 12, 6, 0, 152, 151, 1, 0, 0, 0, 152, 153, 1, 0, 0, 0, 153, 155, 1, 0, 0, 0, 154, 156, 3, 14, 7, 0, 155, 154, 1, 0, 0, 0, 155, 156, 1, 0, 0, 0, 156, 158, 1, 0, 0, 0, 157, 159, 3, 18, 9, 0, 158, 157, 1, 0, 0, 0, 158, 159, 1, 0, 0, 0, 159, 161, 1, 0, 0, 0, 160, 162, 3, 20, 10, 0, 161, 160, 1, 0, 0, 0, 161, 162, 1, 0, 0, 0, 162, 164, 1, 0, 0, 0, 163, 165, 3, 22, 11, 0, 164, 163, 1, 0, 0, 0, 164, 165, 1, 0, 0, 0, 165, 168, 1, 0, 0, 0, 166, 167, 5, 189, 0, 0, 167, 169, 7, 0, 0, 0, 168, 166, 1, 0, 0, 0, 168, 169, 1, 0, 0, 0, 169, 172, 1, 0, 0, 0, 170, 171, 5, 189, 0, 0, 171, 173, 5, 169, 0, 0, 172, 170, 1, 0, 0, 0, 172, 173, 1, 0, 0, 0, 173, 175, 1, 0, 0, 0, 174, 176, 3, 24, 12, 0, 175, 174, 1, 0, 0, 0, 175, 176, 1, 0, 0, 0, 176, 178, 1, 0, 0, 0, 177, 179, 3, 16, 8, 0, 178, 177, 1, 0, 0, 0, 178, 179, 1, 0, 0, 0, 179, 181, 1, 0, 0, 0, 180, 182, 3, 26, 13, 0, 181, 180, 1, 0, 0, 0, 181, 182, 1, 0, 0, 0, 182, 185, 1, 0, 0, 0, 183, 186, 3, 30, 15, 0, 184, 186, 3, 32, 16, 0, 185, 183, 1, 0, 0, 0, 185, 184, 1, 0, 0, 0, 185, 186, 1, 0, 0, 0, 186, 188, 1, 0, 0, 0, 187, 189, 3, 34, 17, 0, 188, 187, 1, 0, 0, 0, 188, 189, 1, 0, 0, 0, 189, 7, 1, 0, 0, 0, 190, 191, 5, 189, 0, 0, 191, 192, 3, 82, 41, 0, 192, 9, 1, 0, 0, 0, 193, 194, 5, 168, 0, 0, 194, 197, 5, 197, 0, 0, 195, 196, 5, 189, 0, 0, 196, 198, 5, 164, 0, 0, 197, 195, 1, 0, 0, 0, 197, 198, 1, 0, 0, 0, 198, 11, 1, 0, 0, 0, 199, 200, 5, 68, 0, 0, 200, 201, 3, 36, 18, 0, 201, 13, 1, 0, 0, 0, 202, 204, 7, 1, 0, 0, 203, 202, 1, 0, 0, 0, 203, 204, 1, 0, 0, 0, 204, 205, 1, 0, 0, 0, 205, 206, 5, 9, 0, 0, 206, 207, 5, 90, 0, 0, 207, 208, 3, 72, 36, 0, 208, 15, 1, 0, 0, 0, 209, 210, 5, 188, 0, 0, 210, 211, 3, 114, 57, 0, 211, 212, 5, 10, 0, 0, 212, 213, 5, 220, 0, 0, 213, 214, 3, 56, 28, 0, 214, 224, 5, 236, 0, 0, 215, 216, 5, 206, 0, 0, 216, 217, 3, 114, 57, 0, 217, 218, 5, 10, 0, 0, 218, 219, 5, 220, 0, 0, 219, 220, 3, 56, 28, 0, 220, 221, 5, 236, 0, 0, 221, 223, 1, 0, 0, 0, 222, 215, 1, 0, 0, 0, 223, 226, 1, 0, 0, 0, 224, 222, 1, 0, 0, 0, 224, 225, 1, 0, 0, 0, 225, 17, 1, 0, 0, 0, 226, 224, 1, 0, 0, 0, 227, 228, 5, 129, 0, 0, 228, 229, 3, 74, 37, 0, 229, 19, 1, 0, 0, 0, 230, 231, 5, 187, 0, 0, 231, 232, 3, 74, 37, 0, 232, 21, 1, 0, 0, 0, 233, 234, 5, 73, 0, 0, 234, 241, 5, 18, 0, 0, 235, 236, 7, 0, 0, 0, 236, 237, 5, 220, 0, 0, 237, 238, 3, 72, 36, 0, 238, 239, 5, 236, 0, 0, 239, 242, 1, 0, 0, 0, 240, 242, 3, 72, 36, 0, 241, 235, 1, 0, 0, 0, 241, 240, 1, 0, 0, 0, 242, 23, 1, 0, 0, 0, 243, 244, 5, 74, 0, 0, 244, 245, 3, 74, 37, 0, 245, 25, 1, 0, 0, 0, 246, 247, 5, 122, 0, 0, 247, 248, 5, 18, 0, 0, 248, 249, 3, 46, 23, 0, 249, 27, 1, 0, 0, 0, 250, 251, 5, 122, 0, 0, 251, 252, 5, 18, 0, 0, 252, 253, 3, 72, 36, 0, 253, 29, 1, 0, 0, 0, 254, 255, 5, 99, 0, 0, 255, 258, 3, 74, 37, 0, 256, 257, 5, 206, 0, 0, 257, 259, 3, 74, 37, 0, 258, 256, 1, 0, 0, 0, 258, 259, 1, 0, 0, 0, 259, 264, 1, 0, 0, 0, 260, 261, 5, 189, 0, 0, 261, 265, 5, 164, 0, 0, 262, 263, 5, 18, 0, 0, 263, 265, 3, 72, 36, 0, 264, 260, 1, 0, 0, 0, 264, 262, 1, 0, 0, 0, 264, 265, 1, 0, 0, 0, 265, 284, 1, 0, 0, 0, 266, 267, 5, 99, 0, 0, 267, 270, 3, 74, 37, 0, 268, 269, 5, 189, 0, 0, 269, 271, 5, 164, 0, 0, 270, 268, 1, 0, 0, 0, 270, 271, 1, 0, 0, 0, 271, 272, 1, 0, 0, 0, 272, 273, 5, 118, 0, 0, 273, 274, 3, 74, 37, 0, 274, 284, 1, 0, 0, 0, 275, 276, 5, 99, 0, 0, 276, 277, 3, 74, 37, 0, 277, 278, 5, 118, 0, 0, 278, 281, 3, 74, 37, 0, 279, 280, 5, 18, 0, 0, 280, 282, 3, 72, 36, 0, 281, 279, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 284, 1, 0, 0, 0, 283, 254, 1, 0, 0, 0, 283, 266, 1, 0, 0, 0, 283, 275, 1, 0, 0, 0, 284, 31, 1, 0, 0, 0, 285, 286, 5, 118, 0, 0, 286, 287, 3, 74, 37, 0, 287, 33, 1, 0, 0, 0, 288, 289, 5, 150, 0, 0, 289, 290, 3, 52, 26, 0, 290, 35, 1, 0, 0, 0, 291, 292, 6, 18, -1, 0, 292, 294, 3, 90, 45, 0, 293, 295, 5, 61, 0, 0, 294, 293, 1, 0, 0, 0, 294, 295, 1, 0, 0, 0, 295, 297, 1, 0, 0, 0, 296, 298, 3, 44, 22, 0, 297, 296, 1, 0, 0, 0, 297, 298, 1, 0, 0, 0, 298, 304, 1, 0, 0, 0, 299, 300, 5, 220, 0, 0, 300, 301, 3, 36, 18, 0, 301, 302, 5, 236, 0, 0, 302, 304, 1, 0, 0, 0, 303, 291, 1, 0, 0, 0, 303, 299, 1, 0, 0, 0, 304, 319, 1, 0, 0, 0, 305, 306, 10, 3, 0, 0, 306, 307, 3, 40, 20, 0, 307, 308, 3, 36, 18, 4, 308, 318, 1, 0, 0, 0, 309, 311, 10, 4, 0, 0, 310, 312, 3, 38, 19, 0, 311, 310, 1, 0, 0, 0, 311, 312, 1, 0, 0, 0, 312, 313, 1, 0, 0, 0, 313, 314, 5, 90, 0, 0, 314, 315, 3, 36, 18, 0, 315, 316, 3, 42, 21, 0, 316, 318, 1, 0, 0, 0, 317, 305, 1, 0, 0, 0, 317, 309, 1, 0, 0, 0, 318, 321, 1, 0, 0, 0, 319, 317, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 37, 1, 0, 0, 0, 321, 319, 1, 0, 0, 0, 322, 324, 7, 2, 0, 0, 323, 322, 1, 0, 0, 0, 323, 324, 1, 0, 0, 0, 324, 325, 1, 0, 0, 0, 325, 332, 5, 84, 0, 0, 326, 328, 5, 84, 0, 0, 327, 329, 7, 2, 0, 0, 328, 327, 1, 0, 0, 0, 328, 329, 1, 0, 0, 0, 329, 332, 1, 0, 0, 0, 330, 332, 7, 2, 0, 0, 331, 323, 1, 0, 0, 0, 331, 326, 1, 0, 0, 0, 331, 330, 1, 0, 0, 0, 332, 366, 1, 0, 0, 0, 333, 335, 7, 3, 0, 0, 334, 333, 1, 0, 0, 0, 334, 335, 1, 0, 0, 0, 335, 336, 1, 0, 0, 0, 336, 338, 7, 4, 0, 0, 337, 339, 5, 123, 0, 0, 338, 337, 1, 0, 0, 0, 338, 339, 1, 0, 0, 0, 339, 348, 1, 0, 0, 0, 340, 342, 7, 4, 0, 0, 341, 343, 5, 123, 0, 0, 342, 341, 1, 0, 0, 0, 342, 343, 1, 0, 0, 0, 343, 345, 1, 0, 0, 0, 344, 346, 7, 3, 0, 0, 345, 344, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 348, 1, 0, 0, 0, 347, 334, 1, 0, 0, 0, 347, 340, 1, 0, 0, 0, 348, 366, 1, 0, 0, 0, 349, 351, 7, 5, 0, 0, 350, 349, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 352, 1, 0, 0, 0, 352, 354, 5, 69, 0, 0, 353, 355, 5, 123, 0, 0, 354, 353, 1, 0, 0, 0, 354, 355, 1, 0, 0, 0, 355, 364, 1, 0, 0, 0, 356, 358, 5, 69, 0, 0, 357, 359, 5, 123, 0, 0, 358, 357, 1, 0, 0, 0, 358, 359, 1, 0, 0, 0, 359, 361, 1, 0, 0, 0, 360, 362, 7, 5, 0, 0, 361, 360, 1, 0, 0, 0, 361, 362, 1, 0, 0, 0, 362, 364, 1, 0, 0, 0, 363, 350, 1, 0, 0, 0, 363, 356, 1, 0, 0, 0, 364, 366, 1, 0, 0, 0, 365, 331, 1, 0, 0, 0, 365, 347, 1, 0, 0, 0, 365, 363, 1, 0, 0, 0, 366, 39, 1, 0, 0, 0, 367, 368, 5, 31, 0, 0, 368, 371, 5, 90, 0, 0, 369, 371, 5, 206, 0, 0, 370, 367, 1, 0, 0, 0, 370, 369, 1, 0, 0, 0, 371, 41, 1, 0, 0, 0, 372, 373, 5, 119, 0, 0, 373, 382, 3, 72, 36, 0, 374, 375, 5, 179, 0, 0, 375, 376, 5, 220, 0, 0, 376, 377, 3, 72, 36, 0, 377, 378, 5, 236, 0, 0, 378, 382, 1, 0, 0, 0, 379, 380, 5, 179, 0, 0, 380, 382, 3, 72, 36, 0, 381, 372, 1, 0, 0, 0, 381, 374, 1, 0, 0, 0, 381, 379, 1, 0, 0, 0, 382, 43, 1, 0, 0, 0, 383, 384, 5, 144, 0, 0, 384, 387, 3, 50, 25, 0, 385, 386, 5, 118, 0, 0, 386, 388, 3, 50, 25, 0, 387, 385, 1, 0, 0, 0, 387, 388, 1, 0, 0, 0, 388, 45, 1, 0, 0, 0, 389, 394, 3, 48, 24, 0, 390, 391, 5, 206, 0, 0, 391, 393, 3, 48, 24, 0, 392, 390, 1, 0, 0, 0, 393, 396, 1, 0, 0, 0, 394, 392, 1, 0, 0, 0, 394, 395, 1, 0, 0, 0, 395, 47, 1, 0, 0, 0, 396, 394, 1, 0, 0, 0, 397, 399, 3, 74, 37, 0, 398, 400, 7, 6, 0, 0, 399, 398, 1, 0, 0, 0, 399, 400, 1, 0, 0, 0, 400, 403, 1, 0, 0, 0, 401, 402, 5, 117, 0, 0, 402, 404, 7, 7, 0, 0, 403, 401, 1, 0, 0, 0, 403, 404, 1, 0, 0, 0, 404, 407, 1, 0, 0, 0, 405, 406, 5, 26, 0, 0, 406, 408, 5, 199, 0, 0, 407, 405, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 49, 1, 0, 0, 0, 409, 416, 5, 200, 0, 0, 410, 413, 3, 102, 51, 0, 411, 412, 5, 238, 0, 0, 412, 414, 3, 102, 51, 0, 413, 411, 1, 0, 0, 0, 413, 414, 1, 0, 0, 0, 414, 416, 1, 0, 0, 0, 415, 409, 1, 0, 0, 0, 415, 410, 1, 0, 0, 0, 416, 51, 1, 0, 0, 0, 417, 422, 3, 54, 27, 0, 418, 419, 5, 206, 0, 0, 419, 421, 3, 54, 27, 0, 420, 418, 1, 0, 0, 0, 421, 424, 1, 0, 0, 0, 422, 420, 1, 0, 0, 0, 422, 423, 1, 0, 0, 0, 423, 53, 1, 0, 0, 0, 424, 422, 1, 0, 0, 0, 425, 426, 3, 114, 57, 0, 426, 427, 5, 212, 0, 0, 427, 428, 3, 104, 52, 0, 428, 55, 1, 0, 0, 0, 429, 431, 3, 58, 29, 0, 430, 429, 1, 0, 0, 0, 430, 431, 1, 0, 0, 0, 431, 433, 1, 0, 0, 0, 432, 434, 3, 60, 30, 0, 433, 432, 1, 0, 0, 0, 433, 434, 1, 0, 0, 0, 434, 436, 1, 0, 0, 0, 435, 437, 3, 62, 31, 0, 436, 435, 1, 0, 0, 0, 436, 437, 1, 0, 0, 0, 437, 57, 1, 0, 0, 0, 438, 439, 5, 126, 0, 0, 439, 440, 5, 18, 0, 0, 440, 441, 3, 72, 36, 0, 441, 59, 1, 0, 0, 0, 442, 443, 5, 122, 0, 0, 443, 444, 5, 18, 0, 0, 444, 445, 3, 46, 23, 0, 445, 61, 1, 0, 0, 0, 446, 447, 7, 8, 0, 0, 447, 448, 3, 64, 32, 0, 448, 63, 1, 0, 0, 0, 449, 456, 3, 66, 33, 0, 450, 451, 5, 16, 0, 0, 451, 452, 3, 66, 33, 0, 452, 453, 5, 6, 0, 0, 453, 454, 3, 66, 33, 0, 454, 456, 1, 0, 0, 0, 455, 449, 1, 0, 0, 0, 455, 450, 1, 0, 0, 0, 456, 65, 1, 0, 0, 0, 457, 458, 5, 33, 0, 0, 458, 470, 5, 142, 0, 0, 459, 460, 5, 175, 0, 0, 460, 470, 5, 128, 0, 0, 461, 462, 5, 175, 0, 0, 462, 470, 5, 64, 0, 0, 463, 464, 3, 102, 51, 0, 464, 465, 5, 128, 0, 0, 465, 470, 1, 0, 0, 0, 466, 467, 3, 102, 51, 0, 467, 468, 5, 64, 0, 0, 468, 470, 1, 0, 0, 0, 469, 457, 1, 0, 0, 0, 469, 459, 1, 0, 0, 0, 469, 461, 1, 0, 0, 0, 469, 463, 1, 0, 0, 0, 469, 466, 1, 0, 0, 0, 470, 67, 1, 0, 0, 0, 471, 472, 3, 74, 37, 0, 472, 473, 5, 0, 0, 1, 473, 69, 1, 0, 0, 0, 474, 522, 3, 114, 57, 0, 475, 476, 3, 114, 57, 0, 476, 477, 5, 220, 0, 0, 477, 478, 3, 114, 57, 0, 478, 485, 3, 70, 35, 0, 479, 480, 5, 206, 0, 0, 480, 481, 3, 114, 57, 0, 481, 482, 3, 70, 35, 0, 482, 484, 1, 0, 0, 0, 483, 479, 1, 0, 0, 0, 484, 487, 1, 0, 0, 0, 485, 483, 1, 0, 0, 0, 485, 486, 1, 0, 0, 0, 486, 488, 1, 0, 0, 0, 487, 485, 1, 0, 0, 0, 488, 489, 5, 236, 0, 0, 489, 522, 1, 0, 0, 0, 490, 491, 3, 114, 57, 0, 491, 492, 5, 220, 0, 0, 492, 497, 3, 116, 58, 0, 493, 494, 5, 206, 0, 0, 494, 496, 3, 116, 58, 0, 495, 493, 1, 0, 0, 0, 496, 499, 1, 0, 0, 0, 497, 495, 1, 0, 0, 0, 497, 498, 1, 0, 0, 0, 498, 500, 1, 0, 0, 0, 499, 497, 1, 0, 0, 0, 500, 501, 5, 236, 0, 0, 501, 522, 1, 0, 0, 0, 502, 503, 3, 114, 57, 0, 503, 504, 5, 220, 0, 0, 504, 509, 3, 70, 35, 0, 505, 506, 5, 206, 0, 0, 506, 508, 3, 70, 35, 0, 507, 505, 1, 0, 0, 0, 508, 511, 1, 0, 0, 0, 509, 507, 1, 0, 0, 0, 509, 510, 1, 0, 0, 0, 510, 512, 1, 0, 0, 0, 511, 509, 1, 0, 0, 0, 512, 513, 5, 236, 0, 0, 513, 522, 1, 0, 0, 0, 514, 515, 3, 114, 57, 0, 515, 517, 5, 220, 0, 0, 516, 518, 3, 72, 36, 0, 517, 516, 1, 0, 0, 0, 517, 518, 1, 0, 0, 0, 518, 519, 1, 0, 0, 0, 519, 520, 5, 236, 0, 0, 520, 522, 1, 0, 0, 0, 521, 474, 1, 0, 0, 0, 521, 475, 1, 0, 0, 0, 521, 490, 1, 0, 0, 0, 521, 502, 1, 0, 0, 0, 521, 514, 1, 0, 0, 0, 522, 71, 1, 0, 0, 0, 523, 528, 3, 74, 37, 0, 524, 525, 5, 206, 0, 0, 525, 527, 3, 74, 37, 0, 526, 524, 1, 0, 0, 0, 527, 530, 1, 0, 0, 0, 528, 526, 1, 0, 0, 0, 528, 529, 1, 0, 0, 0, 529, 73, 1, 0, 0, 0, 530, 528, 1, 0, 0, 0, 531, 532, 6, 37, -1, 0, 532, 534, 5, 19, 0, 0, 533, 535, 3, 74, 37, 0, 534, 533, 1, 0, 0, 0, 534, 535, 1, 0, 0, 0, 535, 541, 1, 0, 0, 0, 536, 537, 5, 186, 0, 0, 537, 538, 3, 74, 37, 0, 538, 539, 5, 163, 0, 0, 539, 540, 3, 74, 37, 0, 540, 542, 1, 0, 0, 0, 541, 536, 1, 0, 0, 0, 542, 543, 1, 0, 0, 0, 543, 541, 1, 0, 0, 0, 543, 544, 1, 0, 0, 0, 544, 547, 1, 0, 0, 0, 545, 546, 5, 52, 0, 0, 546, 548, 3, 74, 37, 0, 547, 545, 1, 0, 0, 0, 547, 548, 1, 0, 0, 0, 548, 549, 1, 0, 0, 0, 549, 550, 5, 53, 0, 0, 550, 661, 1, 0, 0, 0, 551, 552, 5, 20, 0, 0, 552, 553, 5, 220, 0, 0, 553, 554, 3, 74, 37, 0, 554, 555, 5, 10, 0, 0, 555, 556, 3, 70, 35, 0, 556, 557, 5, 236, 0, 0, 557, 661, 1, 0, 0, 0, 558, 559, 5, 36, 0, 0, 559, 661, 5, 199, 0, 0, 560, 561, 5, 59, 0, 0, 561, 562, 5, 220, 0, 0, 562, 563, 3, 106, 53, 0, 563, 564, 5, 68, 0, 0, 564, 565, 3, 74, 37, 0, 565, 566, 5, 236, 0, 0, 566, 661, 1, 0, 0, 0, 567, 568, 5, 86, 0, 0, 568, 569, 3, 74, 37, 0, 569, 570, 3, 106, 53, 0, 570, 661, 1, 0, 0, 0, 571, 572, 5, 155, 0, 0, 572, 573, 5, 220, 0, 0, 573, 574, 3, 74, 37, 0, 574, 575, 5, 68, 0, 0, 575, 578, 3, 74, 37, 0, 576, 577, 5, 65, 0, 0, 577, 579, 3, 74, 37, 0, 578, 576, 1, 0, 0, 0, 578, 579, 1, 0, 0, 0, 579, 580, 1, 0, 0, 0, 580, 581, 5, 236, 0, 0, 581, 661, 1, 0, 0, 0, 582, 583, 5, 166, 0, 0, 583, 661, 5, 199, 0, 0, 584, 585, 5, 171, 0, 0, 585, 586, 5, 220, 0, 0, 586, 587, 7, 9, 0, 0, 587, 588, 5, 199, 0, 0, 588, 589, 5, 68, 0, 0, 589, 590, 3, 74, 37, 0, 590, 591, 5, 236, 0, 0, 591, 661, 1, 0, 0, 0, 592, 593, 3, 114, 57, 0, 593, 595, 5, 220, 0, 0, 594, 596, 3, 72, 36, 0, 595, 594, 1, 0, 0, 0, 595, 596, 1, 0, 0, 0, 596, 597, 1, 0, 0, 0, 597, 598, 5, 236, 0, 0, 598, 599, 1, 0, 0, 0, 599, 600, 5, 125, 0, 0, 600, 601, 5, 220, 0, 0, 601, 602, 3, 56, 28, 0, 602, 603, 5, 236, 0, 0, 603, 661, 1, 0, 0, 0, 604, 605, 3, 114, 57, 0, 605, 607, 5, 220, 0, 0, 606, 608, 3, 72, 36, 0, 607, 606, 1, 0, 0, 0, 607, 608, 1, 0, 0, 0, 608, 609, 1, 0, 0, 0, 609, 610, 5, 236, 0, 0, 610, 611, 1, 0, 0, 0, 611, 612, 5, 125, 0, 0, 612, 613, 3, 114, 57, 0, 613, 661, 1, 0, 0, 0, 614, 620, 3, 114, 57, 0, 615, 617, 5, 220, 0, 0, 616, 618, 3, 72, 36, 0, 617, 616, 1, 0, 0, 0, 617, 618, 1, 0, 0, 0, 618, 619, 1, 0, 0, 0, 619, 621, 5, 236, 0, 0, 620, 615, 1, 0, 0, 0, 620, 621, 1, 0, 0, 0, 621, 622, 1, 0, 0, 0, 622, 624, 5, 220, 0, 0, 623, 625, 5, 49, 0, 0, 624, 623, 1, 0, 0, 0, 624, 625, 1, 0, 0, 0, 625, 627, 1, 0, 0, 0, 626, 628, 3, 76, 38, 0, 627, 626, 1, 0, 0, 0, 627, 628, 1, 0, 0, 0, 628, 629, 1, 0, 0, 0, 629, 630, 5, 236, 0, 0, 630, 661, 1, 0, 0, 0, 631, 661, 3, 104, 52, 0, 632, 633, 5, 208, 0, 0, 633, 661, 3, 74, 37, 18, 634, 635, 5, 115, 0, 0, 635, 661, 3, 74, 37, 12, 636, 637, 3, 94, 47, 0, 637, 638, 5, 210, 0, 0, 638, 640, 1, 0, 0, 0, 639, 636, 1, 0, 0, 0, 639, 640, 1, 0, 0, 0, 640, 641, 1, 0, 0, 0, 641, 661, 5, 202, 0, 0, 642, 643, 5, 220, 0, 0, 643, 644, 3, 2, 1, 0, 644, 645, 5, 236, 0, 0, 645, 661, 1, 0, 0, 0, 646, 647, 5, 220, 0, 0, 647, 648, 3, 74, 37, 0, 648, 649, 5, 236, 0, 0, 649, 661, 1, 0, 0, 0, 650, 651, 5, 220, 0, 0, 651, 652, 3, 72, 36, 0, 652, 653, 5, 236, 0, 0, 653, 661, 1, 0, 0, 0, 654, 656, 5, 219, 0, 0, 655, 657, 3, 72, 36, 0, 656, 655, 1, 0, 0, 0, 656, 657, 1, 0, 0, 0, 657, 658, 1, 0, 0, 0, 658, 661, 5, 235, 0, 0, 659, 661, 3, 86, 43, 0, 660, 531, 1, 0, 0, 0, 660, 551, 1, 0, 0, 0, 660, 558, 1, 0, 0, 0, 660, 560, 1, 0, 0, 0, 660, 567, 1, 0, 0, 0, 660, 571, 1, 0, 0, 0, 660, 582, 1, 0, 0, 0, 660, 584, 1, 0, 0, 0, 660, 592, 1, 0, 0, 0, 660, 604, 1, 0, 0, 0, 660, 614, 1, 0, 0, 0, 660, 631, 1, 0, 0, 0, 660, 632, 1, 0, 0, 0, 660, 634, 1, 0, 0, 0, 660, 639, 1, 0, 0, 0, 660, 642, 1, 0, 0, 0, 660, 646, 1, 0, 0, 0, 660, 650, 1, 0, 0, 0, 660, 654, 1, 0, 0, 0, 660, 659, 1, 0, 0, 0, 661, 755, 1, 0, 0, 0, 662, 666, 10, 17, 0, 0, 663, 667, 5, 202, 0, 0, 664, 667, 5, 238, 0, 0, 665, 667, 5, 227, 0, 0, 666, 663, 1, 0, 0, 0, 666, 664, 1, 0, 0, 0, 666, 665, 1, 0, 0, 0, 667, 668, 1, 0, 0, 0, 668, 754, 3, 74, 37, 18, 669, 673, 10, 16, 0, 0, 670, 674, 5, 228, 0, 0, 671, 674, 5, 208, 0, 0, 672, 674, 5, 207, 0, 0, 673, 670, 1, 0, 0, 0, 673, 671, 1, 0, 0, 0, 673, 672, 1, 0, 0, 0, 674, 675, 1, 0, 0, 0, 675, 754, 3, 74, 37, 17, 676, 701, 10, 15, 0, 0, 677, 702, 5, 211, 0, 0, 678, 702, 5, 212, 0, 0, 679, 702, 5, 223, 0, 0, 680, 702, 5, 221, 0, 0, 681, 702, 5, 222, 0, 0, 682, 702, 5, 213, 0, 0, 683, 702, 5, 214, 0, 0, 684, 686, 5, 115, 0, 0, 685, 684, 1, 0, 0, 0, 685, 686, 1, 0, 0, 0, 686, 687, 1, 0, 0, 0, 687, 689, 5, 80, 0, 0, 688, 690, 5, 25, 0, 0, 689, 688, 1, 0, 0, 0, 689, 690, 1, 0, 0, 0, 690, 702, 1, 0, 0, 0, 691, 693, 5, 115, 0, 0, 692, 691, 1, 0, 0, 0, 692, 693, 1, 0, 0, 0, 693, 694, 1, 0, 0, 0, 694, 702, 7, 10, 0, 0, 695, 702, 5, 232, 0, 0, 696, 702, 5, 233, 0, 0, 697, 702, 5, 225, 0, 0, 698, 702, 5, 216, 0, 0, 699, 702, 5, 217, 0, 0, 700, 702, 5, 224, 0, 0, 701, 677, 1, 0, 0, 0, 701, 678, 1, 0, 0, 0, 701, 679, 1, 0, 0, 0, 701, 680, 1, 0, 0, 0, 701, 681, 1, 0, 0, 0, 701, 682, 1, 0, 0, 0, 701, 683, 1, 0, 0, 0, 701, 685, 1, 0, 0, 0, 701, 692, 1, 0, 0, 0, 701, 695, 1, 0, 0, 0, 701, 696, 1, 0, 0, 0, 701, 697, 1, 0, 0, 0, 701, 698, 1, 0, 0, 0, 701, 699, 1, 0, 0, 0, 701, 700, 1, 0, 0, 0, 702, 703, 1, 0, 0, 0, 703, 754, 3, 74, 37, 16, 704, 705, 10, 13, 0, 0, 705, 706, 5, 226, 0, 0, 706, 754, 3, 74, 37, 14, 707, 708, 10, 11, 0, 0, 708, 709, 5, 6, 0, 0, 709, 754, 3, 74, 37, 12, 710, 711, 10, 10, 0, 0, 711, 712, 5, 121, 0, 0, 712, 754, 3, 74, 37, 11, 713, 715, 10, 9, 0, 0, 714, 716, 5, 115, 0, 0, 715, 714, 1, 0, 0, 0, 715, 716, 1, 0, 0, 0, 716, 717, 1, 0, 0, 0, 717, 718, 5, 16, 0, 0, 718, 719, 3, 74, 37, 0, 719, 720, 5, 6, 0, 0, 720, 721, 3, 74, 37, 10, 721, 754, 1, 0, 0, 0, 722, 723, 10, 8, 0, 0, 723, 724, 5, 229, 0, 0, 724, 725, 3, 74, 37, 0, 725, 726, 5, 205, 0, 0, 726, 727, 3, 74, 37, 8, 727, 754, 1, 0, 0, 0, 728, 729, 10, 21, 0, 0, 729, 730, 5, 219, 0, 0, 730, 731, 3, 74, 37, 0, 731, 732, 5, 235, 0, 0, 732, 754, 1, 0, 0, 0, 733, 734, 10, 20, 0, 0, 734, 735, 5, 210, 0, 0, 735, 754, 5, 197, 0, 0, 736, 737, 10, 19, 0, 0, 737, 738, 5, 210, 0, 0, 738, 754, 3, 114, 57, 0, 739, 740, 10, 14, 0, 0, 740, 742, 5, 88, 0, 0, 741, 743, 5, 115, 0, 0, 742, 741, 1, 0, 0, 0, 742, 743, 1, 0, 0, 0, 743, 744, 1, 0, 0, 0, 744, 754, 5, 116, 0, 0, 745, 751, 10, 7, 0, 0, 746, 752, 3, 112, 56, 0, 747, 748, 5, 10, 0, 0, 748, 752, 3, 114, 57, 0, 749, 750, 5, 10, 0, 0, 750, 752, 5, 199, 0, 0, 751, 746, 1, 0, 0, 0, 751, 747, 1, 0, 0, 0, 751, 749, 1, 0, 0, 0, 752, 754, 1, 0, 0, 0, 753, 662, 1, 0, 0, 0, 753, 669, 1, 0, 0, 0, 753, 676, 1, 0, 0, 0, 753, 704, 1, 0, 0, 0, 753, 707, 1, 0, 0, 0, 753, 710, 1, 0, 0, 0, 753, 713, 1, 0, 0, 0, 753, 722, 1, 0, 0, 0, 753, 728, 1, 0, 0, 0, 753, 733, 1, 0, 0, 0, 753, 736, 1, 0, 0, 0, 753, 739, 1, 0, 0, 0, 753, 745, 1, 0, 0, 0, 754, 757, 1, 0, 0, 0, 755, 753, 1, 0, 0, 0, 755, 756, 1, 0, 0, 0, 756, 75, 1, 0, 0, 0, 757, 755, 1, 0, 0, 0, 758, 763, 3, 78, 39, 0, 759, 760, 5, 206, 0, 0, 760, 762, 3, 78, 39, 0, 761, 759, 1, 0, 0, 0, 762, 765, 1, 0, 0, 0, 763, 761, 1, 0, 0, 0, 763, 764, 1, 0, 0, 0, 764, 77, 1, 0, 0, 0, 765, 763, 1, 0, 0, 0, 766, 769, 3, 80, 40, 0, 767, 769, 3, 74, 37, 0, 768, 766, 1, 0, 0, 0, 768, 767, 1, 0, 0, 0, 769, 79, 1, 0, 0, 0, 770, 771, 5, 220, 0, 0, 771, 776, 3, 114, 57, 0, 772, 773, 5, 206, 0, 0, 773, 775, 3, 114, 57, 0, 774, 772, 1, 0, 0, 0, 775, 778, 1, 0, 0, 0, 776, 774, 1, 0, 0, 0, 776, 777, 1, 0, 0, 0, 777, 779, 1, 0, 0, 0, 778, 776, 1, 0, 0, 0, 779, 780, 5, 236, 0, 0, 780, 790, 1, 0, 0, 0, 781, 786, 3, 114, 57, 0, 782, 783, 5, 206, 0, 0, 783, 785, 3, 114, 57, 0, 784, 782, 1, 0, 0, 0, 785, 788, 1, 0, 0, 0, 786, 784, 1, 0, 0, 0, 786, 787, 1, 0, 0, 0, 787, 790, 1, 0, 0, 0, 788, 786, 1, 0, 0, 0, 789, 770, 1, 0, 0, 0, 789, 781, 1, 0, 0, 0, 790, 791, 1, 0, 0, 0, 791, 792, 5, 201, 0, 0, 792, 793, 3, 74, 37, 0, 793, 81, 1, 0, 0, 0, 794, 799, 3, 84, 42, 0, 795, 796, 5, 206, 0, 0, 796, 798, 3, 84, 42, 0, 797, 795, 1, 0, 0, 0, 798, 801, 1, 0, 0, 0, 799, 797, 1, 0, 0, 0, 799, 800, 1, 0, 0, 0, 800, 83, 1, 0, 0, 0, 801, 799, 1, 0, 0, 0, 802, 803, 3, 114, 57, 0, 803, 804, 5, 10, 0, 0, 804, 805, 5, 220, 0, 0, 805, 806, 3, 2, 1, 0, 806, 807, 5, 236, 0, 0, 807, 813, 1, 0, 0, 0, 808, 809, 3, 74, 37, 0, 809, 810, 5, 10, 0, 0, 810, 811, 3, 114, 57, 0, 811, 813, 1, 0, 0, 0, 812, 802, 1, 0, 0, 0, 812, 808, 1, 0, 0, 0, 813, 85, 1, 0, 0, 0, 814, 822, 5, 200, 0, 0, 815, 816, 3, 94, 47, 0, 816, 817, 5, 210, 0, 0, 817, 819, 1, 0, 0, 0, 818, 815, 1, 0, 0, 0, 818, 819, 1, 0, 0, 0, 819, 820, 1, 0, 0, 0, 820, 822, 3, 88, 44, 0, 821, 814, 1, 0, 0, 0, 821, 818, 1, 0, 0, 0, 822, 87, 1, 0, 0, 0, 823, 828, 3, 114, 57, 0, 824, 825, 5, 210, 0, 0, 825, 827, 3, 114, 57, 0, 826, 824, 1, 0, 0, 0, 827, 830, 1, 0, 0, 0, 828, 826, 1, 0, 0, 0, 828, 829, 1, 0, 0, 0, 829, 89, 1, 0, 0, 0, 830, 828, 1, 0, 0, 0, 831, 832, 6, 45, -1, 0, 832, 840, 3, 94, 47, 0, 833, 840, 3, 92, 46, 0, 834, 835, 5, 220, 0, 0, 835, 836, 3, 2, 1, 0, 836, 837, 5, 236, 0, 0, 837, 840, 1, 0, 0, 0, 838, 840, 5, 200, 0, 0, 839, 831, 1, 0, 0, 0, 839, 833, 1, 0, 0, 0, 839, 834, 1, 0, 0, 0, 839, 838, 1, 0, 0, 0, 840, 849, 1, 0, 0, 0, 841, 845, 10, 2, 0, 0, 842, 846, 3, 112, 56, 0, 843, 844, 5, 10, 0, 0, 844, 846, 3, 114, 57, 0, 845, 842, 1, 0, 0, 0, 845, 843, 1, 0, 0, 0, 846, 848, 1, 0, 0, 0, 847, 841, 1, 0, 0, 0, 848, 851, 1, 0, 0, 0, 849, 847, 1, 0, 0, 0, 849, 850, 1, 0, 0, 0, 850, 91, 1, 0, 0, 0, 851, 849, 1, 0, 0, 0, 852, 853, 3, 114, 57, 0, 853, 855, 5, 220, 0, 0, 854, 856, 3, 96, 48, 0, 855, 854, 1, 0, 0, 0, 855, 856, 1, 0, 0, 0, 856, 857, 1, 0, 0, 0, 857, 858, 5, 236, 0, 0, 858, 93, 1, 0, 0, 0, 859, 860, 3, 98, 49, 0, 860, 861, 5, 210, 0, 0, 861, 863, 1, 0, 0, 0, 862, 859, 1, 0, 0, 0, 862, 863, 1, 0, 0, 0, 863, 864, 1, 0, 0, 0, 864, 865, 3, 114, 57, 0, 865, 95, 1, 0, 0, 0, 866, 871, 3, 74, 37, 0, 867, 868, 5, 206, 0, 0, 868, 870, 3, 74, 37, 0, 869, 867, 1, 0, 0, 0, 870, 873, 1, 0, 0, 0, 871, 869, 1, 0, 0, 0, 871, 872, 1, 0, 0, 0, 872, 97, 1, 0, 0, 0, 873, 871, 1, 0, 0, 0, 874, 875, 3, 114, 57, 0, 875, 99, 1, 0, 0, 0, 876, 885, 5, 195, 0, 0, 877, 878, 5, 210, 0, 0, 878, 885, 7, 11, 0, 0, 879, 880, 5, 197, 0, 0, 880, 882, 5, 210, 0, 0, 881, 883, 7, 11, 0, 0, 882, 881, 1, 0, 0, 0, 882, 883, 1, 0, 0, 0, 883, 885, 1, 0, 0, 0, 884, 876, 1, 0, 0, 0, 884, 877, 1, 0, 0, 0, 884, 879, 1, 0, 0, 0, 885, 101, 1, 0, 0, 0, 886, 888, 7, 12, 0, 0, 887, 886, 1, 0, 0, 0, 887, 888, 1, 0, 0, 0, 888, 895, 1, 0, 0, 0, 889, 896, 3, 100, 50, 0, 890, 896, 5, 196, 0, 0, 891, 896, 5, 197, 0, 0, 892, 896, 5, 198, 0, 0, 893, 896, 5, 82, 0, 0, 894, 896, 5, 113, 0, 0, 895, 889, 1, 0, 0, 0, 895, 890, 1, 0, 0, 0, 895, 891, 1, 0, 0, 0, 895, 892, 1, 0, 0, 0, 895, 893, 1, 0, 0, 0, 895, 894, 1, 0, 0, 0, 896, 103, 1, 0, 0, 0, 897, 901, 3, 102, 51, 0, 898, 901, 5, 199, 0, 0, 899, 901, 5, 116, 0, 0, 900, 897, 1, 0, 0, 0, 900, 898, 1, 0, 0, 0, 900, 899, 1, 0, 0, 0, 901, 105, 1, 0, 0, 0, 902, 903, 7, 13, 0, 0, 903, 107, 1, 0, 0, 0, 904, 905, 7, 14, 0, 0, 905, 109, 1, 0, 0, 0, 906, 907, 7, 15, 0, 0, 907, 111, 1, 0, 0, 0, 908, 911, 5, 194, 0, 0, 909, 911, 3, 110, 55, 0, 910, 908, 1, 0, 0, 0, 910, 909, 1, 0, 0, 0, 911, 113, 1, 0, 0, 0, 912, 916, 5, 194, 0, 0, 913, 916, 3, 106, 53, 0, 914, 916, 3, 108, 54, 0, 915, 912, 1, 0, 0, 0, 915, 913, 1, 0, 0, 0, 915, 914, 1, 0, 0, 0, 916, 115, 1, 0, 0, 0, 917, 918, 5, 199, 0, 0, 918, 919, 5, 212, 0, 0, 919, 920, 3, 102, 51, 0, 920, 117, 1, 0, 0, 0, 115, 120, 130, 138, 141, 145, 148, 152, 155, 158, 161, 164, 168, 172, 175, 178, 181, 185, 188, 197, 203, 224, 241, 258, 264, 270, 281, 283, 294, 297, 303, 311, 317, 319, 323, 328, 331, 334, 338, 342, 345, 347, 350, 354, 358, 361, 363, 365, 370, 381, 387, 394, 399, 403, 407, 413, 415, 422, 430, 433, 436, 455, 469, 485, 497, 509, 517, 521, 528, 534, 543, 547, 578, 595, 607, 617, 620, 624, 627, 639, 656, 660, 666, 673, 685, 689, 692, 701, 715, 742, 751, 753, 755, 763, 768, 776, 786, 789, 799, 812, 818, 821, 828, 839, 845, 849, 855, 862, 871, 882, 884, 887, 895, 900, 910, 915] \ No newline at end of file diff --git a/posthog/hogql/grammar/HogQLParser.py b/posthog/hogql/grammar/HogQLParser.py index 50cece564da2f..7f3b6995ecb50 100644 --- a/posthog/hogql/grammar/HogQLParser.py +++ b/posthog/hogql/grammar/HogQLParser.py @@ -1,4 +1,4 @@ -# Generated from HogQLParser.g4 by ANTLR 4.13.0 +# Generated from HogQLParser.g4 by ANTLR 4.13.1 # encoding: utf-8 from antlr4 import * from io import StringIO @@ -10,7 +10,7 @@ def serializedATN(): return [ - 4,1,242,919,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,242,922,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, @@ -43,335 +43,337 @@ def serializedATN(): 371,8,20,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,3,21,382,8, 21,1,22,1,22,1,22,1,22,3,22,388,8,22,1,23,1,23,1,23,5,23,393,8,23, 10,23,12,23,396,9,23,1,24,1,24,3,24,400,8,24,1,24,1,24,3,24,404, - 8,24,1,24,1,24,3,24,408,8,24,1,25,1,25,1,25,3,25,413,8,25,1,26,1, - 26,1,26,5,26,418,8,26,10,26,12,26,421,9,26,1,27,1,27,1,27,1,27,1, - 28,3,28,428,8,28,1,28,3,28,431,8,28,1,28,3,28,434,8,28,1,29,1,29, - 1,29,1,29,1,30,1,30,1,30,1,30,1,31,1,31,1,31,1,32,1,32,1,32,1,32, - 1,32,1,32,3,32,453,8,32,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33, - 1,33,1,33,1,33,1,33,3,33,467,8,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,5,35,481,8,35,10,35,12,35,484,9,35, - 1,35,1,35,1,35,1,35,1,35,1,35,1,35,5,35,493,8,35,10,35,12,35,496, - 9,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,5,35,505,8,35,10,35,12,35, - 508,9,35,1,35,1,35,1,35,1,35,1,35,3,35,515,8,35,1,35,1,35,3,35,519, - 8,35,1,36,1,36,1,36,5,36,524,8,36,10,36,12,36,527,9,36,1,37,1,37, - 1,37,3,37,532,8,37,1,37,1,37,1,37,1,37,1,37,4,37,539,8,37,11,37, - 12,37,540,1,37,1,37,3,37,545,8,37,1,37,1,37,1,37,1,37,1,37,1,37, + 8,24,1,24,1,24,3,24,408,8,24,1,25,1,25,1,25,1,25,3,25,414,8,25,3, + 25,416,8,25,1,26,1,26,1,26,5,26,421,8,26,10,26,12,26,424,9,26,1, + 27,1,27,1,27,1,27,1,28,3,28,431,8,28,1,28,3,28,434,8,28,1,28,3,28, + 437,8,28,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,30,1,31,1,31,1,31, + 1,32,1,32,1,32,1,32,1,32,1,32,3,32,456,8,32,1,33,1,33,1,33,1,33, + 1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,3,33,470,8,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,5,35,484,8,35, + 10,35,12,35,487,9,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,5,35,496, + 8,35,10,35,12,35,499,9,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,5,35, + 508,8,35,10,35,12,35,511,9,35,1,35,1,35,1,35,1,35,1,35,3,35,518, + 8,35,1,35,1,35,3,35,522,8,35,1,36,1,36,1,36,5,36,527,8,36,10,36, + 12,36,530,9,36,1,37,1,37,1,37,3,37,535,8,37,1,37,1,37,1,37,1,37, + 1,37,4,37,542,8,37,11,37,12,37,543,1,37,1,37,3,37,548,8,37,1,37, 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, - 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,576,8,37, 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, - 1,37,1,37,3,37,593,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, - 1,37,1,37,3,37,605,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, - 3,37,615,8,37,1,37,3,37,618,8,37,1,37,1,37,3,37,622,8,37,1,37,3, - 37,625,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3, - 37,637,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1, - 37,1,37,1,37,1,37,1,37,3,37,654,8,37,1,37,1,37,3,37,658,8,37,1,37, - 1,37,1,37,1,37,3,37,664,8,37,1,37,1,37,1,37,1,37,1,37,3,37,671,8, - 37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,683,8, - 37,1,37,1,37,3,37,687,8,37,1,37,3,37,690,8,37,1,37,1,37,1,37,1,37, - 1,37,1,37,1,37,3,37,699,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, - 1,37,1,37,1,37,1,37,1,37,3,37,713,8,37,1,37,1,37,1,37,1,37,1,37, + 1,37,1,37,3,37,579,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, + 1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,596,8,37,1,37,1,37,1,37, + 1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,608,8,37,1,37,1,37,1,37, + 1,37,1,37,1,37,1,37,1,37,3,37,618,8,37,1,37,3,37,621,8,37,1,37,1, + 37,3,37,625,8,37,1,37,3,37,628,8,37,1,37,1,37,1,37,1,37,1,37,1,37, + 1,37,1,37,1,37,1,37,3,37,640,8,37,1,37,1,37,1,37,1,37,1,37,1,37, + 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,657,8,37,1,37, + 1,37,3,37,661,8,37,1,37,1,37,1,37,1,37,3,37,667,8,37,1,37,1,37,1, + 37,1,37,1,37,3,37,674,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1, + 37,1,37,1,37,3,37,686,8,37,1,37,1,37,3,37,690,8,37,1,37,3,37,693, + 8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,702,8,37,1,37,1,37, + 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,716,8,37, 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, - 1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,740,8,37,1,37,1,37,1,37, - 1,37,1,37,1,37,1,37,3,37,749,8,37,5,37,751,8,37,10,37,12,37,754, - 9,37,1,38,1,38,1,38,5,38,759,8,38,10,38,12,38,762,9,38,1,39,1,39, - 3,39,766,8,39,1,40,1,40,1,40,1,40,5,40,772,8,40,10,40,12,40,775, - 9,40,1,40,1,40,1,40,1,40,1,40,5,40,782,8,40,10,40,12,40,785,9,40, - 3,40,787,8,40,1,40,1,40,1,40,1,41,1,41,1,41,5,41,795,8,41,10,41, - 12,41,798,9,41,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42, - 3,42,810,8,42,1,43,1,43,1,43,1,43,3,43,816,8,43,1,43,3,43,819,8, - 43,1,44,1,44,1,44,5,44,824,8,44,10,44,12,44,827,9,44,1,45,1,45,1, - 45,1,45,1,45,1,45,1,45,1,45,3,45,837,8,45,1,45,1,45,1,45,1,45,3, - 45,843,8,45,5,45,845,8,45,10,45,12,45,848,9,45,1,46,1,46,1,46,3, - 46,853,8,46,1,46,1,46,1,47,1,47,1,47,3,47,860,8,47,1,47,1,47,1,48, - 1,48,1,48,5,48,867,8,48,10,48,12,48,870,9,48,1,49,1,49,1,50,1,50, - 1,50,1,50,1,50,1,50,3,50,880,8,50,3,50,882,8,50,1,51,3,51,885,8, - 51,1,51,1,51,1,51,1,51,1,51,1,51,3,51,893,8,51,1,52,1,52,1,52,3, - 52,898,8,52,1,53,1,53,1,54,1,54,1,55,1,55,1,56,1,56,3,56,908,8,56, - 1,57,1,57,1,57,3,57,913,8,57,1,58,1,58,1,58,1,58,1,58,0,3,36,74, - 90,59,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,0,16,2, - 0,32,32,141,141,2,0,84,84,96,96,3,0,4,4,8,8,12,12,4,0,4,4,7,8,12, - 12,147,147,2,0,96,96,140,140,2,0,4,4,8,8,2,0,11,11,42,43,2,0,62, - 62,93,93,2,0,133,133,143,143,3,0,17,17,95,95,170,170,2,0,79,79,98, - 98,1,0,196,197,2,0,208,208,228,228,8,0,37,37,76,76,108,108,110,110, - 132,132,145,145,185,185,190,190,13,0,2,24,26,36,38,75,77,81,83,107, - 109,109,111,112,114,115,117,130,133,144,146,184,186,189,191,192, - 4,0,36,36,62,62,77,77,91,91,1039,0,120,1,0,0,0,2,124,1,0,0,0,4,138, - 1,0,0,0,6,141,1,0,0,0,8,190,1,0,0,0,10,193,1,0,0,0,12,199,1,0,0, - 0,14,203,1,0,0,0,16,209,1,0,0,0,18,227,1,0,0,0,20,230,1,0,0,0,22, - 233,1,0,0,0,24,243,1,0,0,0,26,246,1,0,0,0,28,250,1,0,0,0,30,283, - 1,0,0,0,32,285,1,0,0,0,34,288,1,0,0,0,36,303,1,0,0,0,38,365,1,0, - 0,0,40,370,1,0,0,0,42,381,1,0,0,0,44,383,1,0,0,0,46,389,1,0,0,0, - 48,397,1,0,0,0,50,409,1,0,0,0,52,414,1,0,0,0,54,422,1,0,0,0,56,427, - 1,0,0,0,58,435,1,0,0,0,60,439,1,0,0,0,62,443,1,0,0,0,64,452,1,0, - 0,0,66,466,1,0,0,0,68,468,1,0,0,0,70,518,1,0,0,0,72,520,1,0,0,0, - 74,657,1,0,0,0,76,755,1,0,0,0,78,765,1,0,0,0,80,786,1,0,0,0,82,791, - 1,0,0,0,84,809,1,0,0,0,86,818,1,0,0,0,88,820,1,0,0,0,90,836,1,0, - 0,0,92,849,1,0,0,0,94,859,1,0,0,0,96,863,1,0,0,0,98,871,1,0,0,0, - 100,881,1,0,0,0,102,884,1,0,0,0,104,897,1,0,0,0,106,899,1,0,0,0, - 108,901,1,0,0,0,110,903,1,0,0,0,112,907,1,0,0,0,114,912,1,0,0,0, - 116,914,1,0,0,0,118,121,3,2,1,0,119,121,3,6,3,0,120,118,1,0,0,0, - 120,119,1,0,0,0,121,122,1,0,0,0,122,123,5,0,0,1,123,1,1,0,0,0,124, - 130,3,4,2,0,125,126,5,176,0,0,126,127,5,4,0,0,127,129,3,4,2,0,128, - 125,1,0,0,0,129,132,1,0,0,0,130,128,1,0,0,0,130,131,1,0,0,0,131, - 3,1,0,0,0,132,130,1,0,0,0,133,139,3,6,3,0,134,135,5,220,0,0,135, - 136,3,2,1,0,136,137,5,236,0,0,137,139,1,0,0,0,138,133,1,0,0,0,138, - 134,1,0,0,0,139,5,1,0,0,0,140,142,3,8,4,0,141,140,1,0,0,0,141,142, - 1,0,0,0,142,143,1,0,0,0,143,145,5,146,0,0,144,146,5,49,0,0,145,144, - 1,0,0,0,145,146,1,0,0,0,146,148,1,0,0,0,147,149,3,10,5,0,148,147, - 1,0,0,0,148,149,1,0,0,0,149,150,1,0,0,0,150,152,3,72,36,0,151,153, - 3,12,6,0,152,151,1,0,0,0,152,153,1,0,0,0,153,155,1,0,0,0,154,156, - 3,14,7,0,155,154,1,0,0,0,155,156,1,0,0,0,156,158,1,0,0,0,157,159, - 3,18,9,0,158,157,1,0,0,0,158,159,1,0,0,0,159,161,1,0,0,0,160,162, - 3,20,10,0,161,160,1,0,0,0,161,162,1,0,0,0,162,164,1,0,0,0,163,165, - 3,22,11,0,164,163,1,0,0,0,164,165,1,0,0,0,165,168,1,0,0,0,166,167, - 5,189,0,0,167,169,7,0,0,0,168,166,1,0,0,0,168,169,1,0,0,0,169,172, - 1,0,0,0,170,171,5,189,0,0,171,173,5,169,0,0,172,170,1,0,0,0,172, - 173,1,0,0,0,173,175,1,0,0,0,174,176,3,24,12,0,175,174,1,0,0,0,175, - 176,1,0,0,0,176,178,1,0,0,0,177,179,3,16,8,0,178,177,1,0,0,0,178, - 179,1,0,0,0,179,181,1,0,0,0,180,182,3,26,13,0,181,180,1,0,0,0,181, - 182,1,0,0,0,182,185,1,0,0,0,183,186,3,30,15,0,184,186,3,32,16,0, - 185,183,1,0,0,0,185,184,1,0,0,0,185,186,1,0,0,0,186,188,1,0,0,0, - 187,189,3,34,17,0,188,187,1,0,0,0,188,189,1,0,0,0,189,7,1,0,0,0, - 190,191,5,189,0,0,191,192,3,82,41,0,192,9,1,0,0,0,193,194,5,168, - 0,0,194,197,5,197,0,0,195,196,5,189,0,0,196,198,5,164,0,0,197,195, - 1,0,0,0,197,198,1,0,0,0,198,11,1,0,0,0,199,200,5,68,0,0,200,201, - 3,36,18,0,201,13,1,0,0,0,202,204,7,1,0,0,203,202,1,0,0,0,203,204, - 1,0,0,0,204,205,1,0,0,0,205,206,5,9,0,0,206,207,5,90,0,0,207,208, - 3,72,36,0,208,15,1,0,0,0,209,210,5,188,0,0,210,211,3,114,57,0,211, - 212,5,10,0,0,212,213,5,220,0,0,213,214,3,56,28,0,214,224,5,236,0, - 0,215,216,5,206,0,0,216,217,3,114,57,0,217,218,5,10,0,0,218,219, - 5,220,0,0,219,220,3,56,28,0,220,221,5,236,0,0,221,223,1,0,0,0,222, - 215,1,0,0,0,223,226,1,0,0,0,224,222,1,0,0,0,224,225,1,0,0,0,225, - 17,1,0,0,0,226,224,1,0,0,0,227,228,5,129,0,0,228,229,3,74,37,0,229, - 19,1,0,0,0,230,231,5,187,0,0,231,232,3,74,37,0,232,21,1,0,0,0,233, - 234,5,73,0,0,234,241,5,18,0,0,235,236,7,0,0,0,236,237,5,220,0,0, - 237,238,3,72,36,0,238,239,5,236,0,0,239,242,1,0,0,0,240,242,3,72, - 36,0,241,235,1,0,0,0,241,240,1,0,0,0,242,23,1,0,0,0,243,244,5,74, - 0,0,244,245,3,74,37,0,245,25,1,0,0,0,246,247,5,122,0,0,247,248,5, - 18,0,0,248,249,3,46,23,0,249,27,1,0,0,0,250,251,5,122,0,0,251,252, - 5,18,0,0,252,253,3,72,36,0,253,29,1,0,0,0,254,255,5,99,0,0,255,258, - 3,74,37,0,256,257,5,206,0,0,257,259,3,74,37,0,258,256,1,0,0,0,258, - 259,1,0,0,0,259,264,1,0,0,0,260,261,5,189,0,0,261,265,5,164,0,0, - 262,263,5,18,0,0,263,265,3,72,36,0,264,260,1,0,0,0,264,262,1,0,0, - 0,264,265,1,0,0,0,265,284,1,0,0,0,266,267,5,99,0,0,267,270,3,74, - 37,0,268,269,5,189,0,0,269,271,5,164,0,0,270,268,1,0,0,0,270,271, - 1,0,0,0,271,272,1,0,0,0,272,273,5,118,0,0,273,274,3,74,37,0,274, - 284,1,0,0,0,275,276,5,99,0,0,276,277,3,74,37,0,277,278,5,118,0,0, - 278,281,3,74,37,0,279,280,5,18,0,0,280,282,3,72,36,0,281,279,1,0, - 0,0,281,282,1,0,0,0,282,284,1,0,0,0,283,254,1,0,0,0,283,266,1,0, - 0,0,283,275,1,0,0,0,284,31,1,0,0,0,285,286,5,118,0,0,286,287,3,74, - 37,0,287,33,1,0,0,0,288,289,5,150,0,0,289,290,3,52,26,0,290,35,1, - 0,0,0,291,292,6,18,-1,0,292,294,3,90,45,0,293,295,5,61,0,0,294,293, - 1,0,0,0,294,295,1,0,0,0,295,297,1,0,0,0,296,298,3,44,22,0,297,296, - 1,0,0,0,297,298,1,0,0,0,298,304,1,0,0,0,299,300,5,220,0,0,300,301, - 3,36,18,0,301,302,5,236,0,0,302,304,1,0,0,0,303,291,1,0,0,0,303, - 299,1,0,0,0,304,319,1,0,0,0,305,306,10,3,0,0,306,307,3,40,20,0,307, - 308,3,36,18,4,308,318,1,0,0,0,309,311,10,4,0,0,310,312,3,38,19,0, - 311,310,1,0,0,0,311,312,1,0,0,0,312,313,1,0,0,0,313,314,5,90,0,0, - 314,315,3,36,18,0,315,316,3,42,21,0,316,318,1,0,0,0,317,305,1,0, - 0,0,317,309,1,0,0,0,318,321,1,0,0,0,319,317,1,0,0,0,319,320,1,0, - 0,0,320,37,1,0,0,0,321,319,1,0,0,0,322,324,7,2,0,0,323,322,1,0,0, - 0,323,324,1,0,0,0,324,325,1,0,0,0,325,332,5,84,0,0,326,328,5,84, - 0,0,327,329,7,2,0,0,328,327,1,0,0,0,328,329,1,0,0,0,329,332,1,0, - 0,0,330,332,7,2,0,0,331,323,1,0,0,0,331,326,1,0,0,0,331,330,1,0, - 0,0,332,366,1,0,0,0,333,335,7,3,0,0,334,333,1,0,0,0,334,335,1,0, - 0,0,335,336,1,0,0,0,336,338,7,4,0,0,337,339,5,123,0,0,338,337,1, - 0,0,0,338,339,1,0,0,0,339,348,1,0,0,0,340,342,7,4,0,0,341,343,5, - 123,0,0,342,341,1,0,0,0,342,343,1,0,0,0,343,345,1,0,0,0,344,346, - 7,3,0,0,345,344,1,0,0,0,345,346,1,0,0,0,346,348,1,0,0,0,347,334, - 1,0,0,0,347,340,1,0,0,0,348,366,1,0,0,0,349,351,7,5,0,0,350,349, - 1,0,0,0,350,351,1,0,0,0,351,352,1,0,0,0,352,354,5,69,0,0,353,355, - 5,123,0,0,354,353,1,0,0,0,354,355,1,0,0,0,355,364,1,0,0,0,356,358, - 5,69,0,0,357,359,5,123,0,0,358,357,1,0,0,0,358,359,1,0,0,0,359,361, - 1,0,0,0,360,362,7,5,0,0,361,360,1,0,0,0,361,362,1,0,0,0,362,364, - 1,0,0,0,363,350,1,0,0,0,363,356,1,0,0,0,364,366,1,0,0,0,365,331, - 1,0,0,0,365,347,1,0,0,0,365,363,1,0,0,0,366,39,1,0,0,0,367,368,5, - 31,0,0,368,371,5,90,0,0,369,371,5,206,0,0,370,367,1,0,0,0,370,369, - 1,0,0,0,371,41,1,0,0,0,372,373,5,119,0,0,373,382,3,72,36,0,374,375, - 5,179,0,0,375,376,5,220,0,0,376,377,3,72,36,0,377,378,5,236,0,0, - 378,382,1,0,0,0,379,380,5,179,0,0,380,382,3,72,36,0,381,372,1,0, - 0,0,381,374,1,0,0,0,381,379,1,0,0,0,382,43,1,0,0,0,383,384,5,144, - 0,0,384,387,3,50,25,0,385,386,5,118,0,0,386,388,3,50,25,0,387,385, - 1,0,0,0,387,388,1,0,0,0,388,45,1,0,0,0,389,394,3,48,24,0,390,391, - 5,206,0,0,391,393,3,48,24,0,392,390,1,0,0,0,393,396,1,0,0,0,394, - 392,1,0,0,0,394,395,1,0,0,0,395,47,1,0,0,0,396,394,1,0,0,0,397,399, - 3,74,37,0,398,400,7,6,0,0,399,398,1,0,0,0,399,400,1,0,0,0,400,403, - 1,0,0,0,401,402,5,117,0,0,402,404,7,7,0,0,403,401,1,0,0,0,403,404, - 1,0,0,0,404,407,1,0,0,0,405,406,5,26,0,0,406,408,5,199,0,0,407,405, - 1,0,0,0,407,408,1,0,0,0,408,49,1,0,0,0,409,412,3,102,51,0,410,411, - 5,238,0,0,411,413,3,102,51,0,412,410,1,0,0,0,412,413,1,0,0,0,413, - 51,1,0,0,0,414,419,3,54,27,0,415,416,5,206,0,0,416,418,3,54,27,0, - 417,415,1,0,0,0,418,421,1,0,0,0,419,417,1,0,0,0,419,420,1,0,0,0, - 420,53,1,0,0,0,421,419,1,0,0,0,422,423,3,114,57,0,423,424,5,212, - 0,0,424,425,3,104,52,0,425,55,1,0,0,0,426,428,3,58,29,0,427,426, - 1,0,0,0,427,428,1,0,0,0,428,430,1,0,0,0,429,431,3,60,30,0,430,429, - 1,0,0,0,430,431,1,0,0,0,431,433,1,0,0,0,432,434,3,62,31,0,433,432, - 1,0,0,0,433,434,1,0,0,0,434,57,1,0,0,0,435,436,5,126,0,0,436,437, - 5,18,0,0,437,438,3,72,36,0,438,59,1,0,0,0,439,440,5,122,0,0,440, - 441,5,18,0,0,441,442,3,46,23,0,442,61,1,0,0,0,443,444,7,8,0,0,444, - 445,3,64,32,0,445,63,1,0,0,0,446,453,3,66,33,0,447,448,5,16,0,0, - 448,449,3,66,33,0,449,450,5,6,0,0,450,451,3,66,33,0,451,453,1,0, - 0,0,452,446,1,0,0,0,452,447,1,0,0,0,453,65,1,0,0,0,454,455,5,33, - 0,0,455,467,5,142,0,0,456,457,5,175,0,0,457,467,5,128,0,0,458,459, - 5,175,0,0,459,467,5,64,0,0,460,461,3,102,51,0,461,462,5,128,0,0, - 462,467,1,0,0,0,463,464,3,102,51,0,464,465,5,64,0,0,465,467,1,0, - 0,0,466,454,1,0,0,0,466,456,1,0,0,0,466,458,1,0,0,0,466,460,1,0, - 0,0,466,463,1,0,0,0,467,67,1,0,0,0,468,469,3,74,37,0,469,470,5,0, - 0,1,470,69,1,0,0,0,471,519,3,114,57,0,472,473,3,114,57,0,473,474, - 5,220,0,0,474,475,3,114,57,0,475,482,3,70,35,0,476,477,5,206,0,0, - 477,478,3,114,57,0,478,479,3,70,35,0,479,481,1,0,0,0,480,476,1,0, - 0,0,481,484,1,0,0,0,482,480,1,0,0,0,482,483,1,0,0,0,483,485,1,0, - 0,0,484,482,1,0,0,0,485,486,5,236,0,0,486,519,1,0,0,0,487,488,3, - 114,57,0,488,489,5,220,0,0,489,494,3,116,58,0,490,491,5,206,0,0, - 491,493,3,116,58,0,492,490,1,0,0,0,493,496,1,0,0,0,494,492,1,0,0, - 0,494,495,1,0,0,0,495,497,1,0,0,0,496,494,1,0,0,0,497,498,5,236, - 0,0,498,519,1,0,0,0,499,500,3,114,57,0,500,501,5,220,0,0,501,506, - 3,70,35,0,502,503,5,206,0,0,503,505,3,70,35,0,504,502,1,0,0,0,505, - 508,1,0,0,0,506,504,1,0,0,0,506,507,1,0,0,0,507,509,1,0,0,0,508, - 506,1,0,0,0,509,510,5,236,0,0,510,519,1,0,0,0,511,512,3,114,57,0, - 512,514,5,220,0,0,513,515,3,72,36,0,514,513,1,0,0,0,514,515,1,0, - 0,0,515,516,1,0,0,0,516,517,5,236,0,0,517,519,1,0,0,0,518,471,1, - 0,0,0,518,472,1,0,0,0,518,487,1,0,0,0,518,499,1,0,0,0,518,511,1, - 0,0,0,519,71,1,0,0,0,520,525,3,74,37,0,521,522,5,206,0,0,522,524, - 3,74,37,0,523,521,1,0,0,0,524,527,1,0,0,0,525,523,1,0,0,0,525,526, - 1,0,0,0,526,73,1,0,0,0,527,525,1,0,0,0,528,529,6,37,-1,0,529,531, - 5,19,0,0,530,532,3,74,37,0,531,530,1,0,0,0,531,532,1,0,0,0,532,538, - 1,0,0,0,533,534,5,186,0,0,534,535,3,74,37,0,535,536,5,163,0,0,536, - 537,3,74,37,0,537,539,1,0,0,0,538,533,1,0,0,0,539,540,1,0,0,0,540, - 538,1,0,0,0,540,541,1,0,0,0,541,544,1,0,0,0,542,543,5,52,0,0,543, - 545,3,74,37,0,544,542,1,0,0,0,544,545,1,0,0,0,545,546,1,0,0,0,546, - 547,5,53,0,0,547,658,1,0,0,0,548,549,5,20,0,0,549,550,5,220,0,0, - 550,551,3,74,37,0,551,552,5,10,0,0,552,553,3,70,35,0,553,554,5,236, - 0,0,554,658,1,0,0,0,555,556,5,36,0,0,556,658,5,199,0,0,557,558,5, - 59,0,0,558,559,5,220,0,0,559,560,3,106,53,0,560,561,5,68,0,0,561, - 562,3,74,37,0,562,563,5,236,0,0,563,658,1,0,0,0,564,565,5,86,0,0, - 565,566,3,74,37,0,566,567,3,106,53,0,567,658,1,0,0,0,568,569,5,155, - 0,0,569,570,5,220,0,0,570,571,3,74,37,0,571,572,5,68,0,0,572,575, - 3,74,37,0,573,574,5,65,0,0,574,576,3,74,37,0,575,573,1,0,0,0,575, - 576,1,0,0,0,576,577,1,0,0,0,577,578,5,236,0,0,578,658,1,0,0,0,579, - 580,5,166,0,0,580,658,5,199,0,0,581,582,5,171,0,0,582,583,5,220, - 0,0,583,584,7,9,0,0,584,585,5,199,0,0,585,586,5,68,0,0,586,587,3, - 74,37,0,587,588,5,236,0,0,588,658,1,0,0,0,589,590,3,114,57,0,590, - 592,5,220,0,0,591,593,3,72,36,0,592,591,1,0,0,0,592,593,1,0,0,0, - 593,594,1,0,0,0,594,595,5,236,0,0,595,596,1,0,0,0,596,597,5,125, - 0,0,597,598,5,220,0,0,598,599,3,56,28,0,599,600,5,236,0,0,600,658, - 1,0,0,0,601,602,3,114,57,0,602,604,5,220,0,0,603,605,3,72,36,0,604, - 603,1,0,0,0,604,605,1,0,0,0,605,606,1,0,0,0,606,607,5,236,0,0,607, - 608,1,0,0,0,608,609,5,125,0,0,609,610,3,114,57,0,610,658,1,0,0,0, - 611,617,3,114,57,0,612,614,5,220,0,0,613,615,3,72,36,0,614,613,1, - 0,0,0,614,615,1,0,0,0,615,616,1,0,0,0,616,618,5,236,0,0,617,612, - 1,0,0,0,617,618,1,0,0,0,618,619,1,0,0,0,619,621,5,220,0,0,620,622, - 5,49,0,0,621,620,1,0,0,0,621,622,1,0,0,0,622,624,1,0,0,0,623,625, - 3,76,38,0,624,623,1,0,0,0,624,625,1,0,0,0,625,626,1,0,0,0,626,627, - 5,236,0,0,627,658,1,0,0,0,628,658,3,104,52,0,629,630,5,208,0,0,630, - 658,3,74,37,18,631,632,5,115,0,0,632,658,3,74,37,12,633,634,3,94, - 47,0,634,635,5,210,0,0,635,637,1,0,0,0,636,633,1,0,0,0,636,637,1, - 0,0,0,637,638,1,0,0,0,638,658,5,202,0,0,639,640,5,220,0,0,640,641, - 3,2,1,0,641,642,5,236,0,0,642,658,1,0,0,0,643,644,5,220,0,0,644, - 645,3,74,37,0,645,646,5,236,0,0,646,658,1,0,0,0,647,648,5,220,0, - 0,648,649,3,72,36,0,649,650,5,236,0,0,650,658,1,0,0,0,651,653,5, - 219,0,0,652,654,3,72,36,0,653,652,1,0,0,0,653,654,1,0,0,0,654,655, - 1,0,0,0,655,658,5,235,0,0,656,658,3,86,43,0,657,528,1,0,0,0,657, - 548,1,0,0,0,657,555,1,0,0,0,657,557,1,0,0,0,657,564,1,0,0,0,657, - 568,1,0,0,0,657,579,1,0,0,0,657,581,1,0,0,0,657,589,1,0,0,0,657, - 601,1,0,0,0,657,611,1,0,0,0,657,628,1,0,0,0,657,629,1,0,0,0,657, - 631,1,0,0,0,657,636,1,0,0,0,657,639,1,0,0,0,657,643,1,0,0,0,657, - 647,1,0,0,0,657,651,1,0,0,0,657,656,1,0,0,0,658,752,1,0,0,0,659, - 663,10,17,0,0,660,664,5,202,0,0,661,664,5,238,0,0,662,664,5,227, - 0,0,663,660,1,0,0,0,663,661,1,0,0,0,663,662,1,0,0,0,664,665,1,0, - 0,0,665,751,3,74,37,18,666,670,10,16,0,0,667,671,5,228,0,0,668,671, - 5,208,0,0,669,671,5,207,0,0,670,667,1,0,0,0,670,668,1,0,0,0,670, - 669,1,0,0,0,671,672,1,0,0,0,672,751,3,74,37,17,673,698,10,15,0,0, - 674,699,5,211,0,0,675,699,5,212,0,0,676,699,5,223,0,0,677,699,5, - 221,0,0,678,699,5,222,0,0,679,699,5,213,0,0,680,699,5,214,0,0,681, - 683,5,115,0,0,682,681,1,0,0,0,682,683,1,0,0,0,683,684,1,0,0,0,684, - 686,5,80,0,0,685,687,5,25,0,0,686,685,1,0,0,0,686,687,1,0,0,0,687, - 699,1,0,0,0,688,690,5,115,0,0,689,688,1,0,0,0,689,690,1,0,0,0,690, - 691,1,0,0,0,691,699,7,10,0,0,692,699,5,232,0,0,693,699,5,233,0,0, - 694,699,5,225,0,0,695,699,5,216,0,0,696,699,5,217,0,0,697,699,5, - 224,0,0,698,674,1,0,0,0,698,675,1,0,0,0,698,676,1,0,0,0,698,677, - 1,0,0,0,698,678,1,0,0,0,698,679,1,0,0,0,698,680,1,0,0,0,698,682, - 1,0,0,0,698,689,1,0,0,0,698,692,1,0,0,0,698,693,1,0,0,0,698,694, - 1,0,0,0,698,695,1,0,0,0,698,696,1,0,0,0,698,697,1,0,0,0,699,700, - 1,0,0,0,700,751,3,74,37,16,701,702,10,13,0,0,702,703,5,226,0,0,703, - 751,3,74,37,14,704,705,10,11,0,0,705,706,5,6,0,0,706,751,3,74,37, - 12,707,708,10,10,0,0,708,709,5,121,0,0,709,751,3,74,37,11,710,712, - 10,9,0,0,711,713,5,115,0,0,712,711,1,0,0,0,712,713,1,0,0,0,713,714, - 1,0,0,0,714,715,5,16,0,0,715,716,3,74,37,0,716,717,5,6,0,0,717,718, - 3,74,37,10,718,751,1,0,0,0,719,720,10,8,0,0,720,721,5,229,0,0,721, - 722,3,74,37,0,722,723,5,205,0,0,723,724,3,74,37,8,724,751,1,0,0, - 0,725,726,10,21,0,0,726,727,5,219,0,0,727,728,3,74,37,0,728,729, - 5,235,0,0,729,751,1,0,0,0,730,731,10,20,0,0,731,732,5,210,0,0,732, - 751,5,197,0,0,733,734,10,19,0,0,734,735,5,210,0,0,735,751,3,114, - 57,0,736,737,10,14,0,0,737,739,5,88,0,0,738,740,5,115,0,0,739,738, - 1,0,0,0,739,740,1,0,0,0,740,741,1,0,0,0,741,751,5,116,0,0,742,748, - 10,7,0,0,743,749,3,112,56,0,744,745,5,10,0,0,745,749,3,114,57,0, - 746,747,5,10,0,0,747,749,5,199,0,0,748,743,1,0,0,0,748,744,1,0,0, - 0,748,746,1,0,0,0,749,751,1,0,0,0,750,659,1,0,0,0,750,666,1,0,0, - 0,750,673,1,0,0,0,750,701,1,0,0,0,750,704,1,0,0,0,750,707,1,0,0, - 0,750,710,1,0,0,0,750,719,1,0,0,0,750,725,1,0,0,0,750,730,1,0,0, - 0,750,733,1,0,0,0,750,736,1,0,0,0,750,742,1,0,0,0,751,754,1,0,0, - 0,752,750,1,0,0,0,752,753,1,0,0,0,753,75,1,0,0,0,754,752,1,0,0,0, - 755,760,3,78,39,0,756,757,5,206,0,0,757,759,3,78,39,0,758,756,1, - 0,0,0,759,762,1,0,0,0,760,758,1,0,0,0,760,761,1,0,0,0,761,77,1,0, - 0,0,762,760,1,0,0,0,763,766,3,80,40,0,764,766,3,74,37,0,765,763, - 1,0,0,0,765,764,1,0,0,0,766,79,1,0,0,0,767,768,5,220,0,0,768,773, - 3,114,57,0,769,770,5,206,0,0,770,772,3,114,57,0,771,769,1,0,0,0, - 772,775,1,0,0,0,773,771,1,0,0,0,773,774,1,0,0,0,774,776,1,0,0,0, - 775,773,1,0,0,0,776,777,5,236,0,0,777,787,1,0,0,0,778,783,3,114, - 57,0,779,780,5,206,0,0,780,782,3,114,57,0,781,779,1,0,0,0,782,785, - 1,0,0,0,783,781,1,0,0,0,783,784,1,0,0,0,784,787,1,0,0,0,785,783, - 1,0,0,0,786,767,1,0,0,0,786,778,1,0,0,0,787,788,1,0,0,0,788,789, - 5,201,0,0,789,790,3,74,37,0,790,81,1,0,0,0,791,796,3,84,42,0,792, - 793,5,206,0,0,793,795,3,84,42,0,794,792,1,0,0,0,795,798,1,0,0,0, - 796,794,1,0,0,0,796,797,1,0,0,0,797,83,1,0,0,0,798,796,1,0,0,0,799, - 800,3,114,57,0,800,801,5,10,0,0,801,802,5,220,0,0,802,803,3,2,1, - 0,803,804,5,236,0,0,804,810,1,0,0,0,805,806,3,74,37,0,806,807,5, - 10,0,0,807,808,3,114,57,0,808,810,1,0,0,0,809,799,1,0,0,0,809,805, - 1,0,0,0,810,85,1,0,0,0,811,819,5,200,0,0,812,813,3,94,47,0,813,814, - 5,210,0,0,814,816,1,0,0,0,815,812,1,0,0,0,815,816,1,0,0,0,816,817, - 1,0,0,0,817,819,3,88,44,0,818,811,1,0,0,0,818,815,1,0,0,0,819,87, - 1,0,0,0,820,825,3,114,57,0,821,822,5,210,0,0,822,824,3,114,57,0, - 823,821,1,0,0,0,824,827,1,0,0,0,825,823,1,0,0,0,825,826,1,0,0,0, - 826,89,1,0,0,0,827,825,1,0,0,0,828,829,6,45,-1,0,829,837,3,94,47, - 0,830,837,3,92,46,0,831,832,5,220,0,0,832,833,3,2,1,0,833,834,5, - 236,0,0,834,837,1,0,0,0,835,837,5,200,0,0,836,828,1,0,0,0,836,830, - 1,0,0,0,836,831,1,0,0,0,836,835,1,0,0,0,837,846,1,0,0,0,838,842, - 10,2,0,0,839,843,3,112,56,0,840,841,5,10,0,0,841,843,3,114,57,0, - 842,839,1,0,0,0,842,840,1,0,0,0,843,845,1,0,0,0,844,838,1,0,0,0, - 845,848,1,0,0,0,846,844,1,0,0,0,846,847,1,0,0,0,847,91,1,0,0,0,848, - 846,1,0,0,0,849,850,3,114,57,0,850,852,5,220,0,0,851,853,3,96,48, - 0,852,851,1,0,0,0,852,853,1,0,0,0,853,854,1,0,0,0,854,855,5,236, - 0,0,855,93,1,0,0,0,856,857,3,98,49,0,857,858,5,210,0,0,858,860,1, - 0,0,0,859,856,1,0,0,0,859,860,1,0,0,0,860,861,1,0,0,0,861,862,3, - 114,57,0,862,95,1,0,0,0,863,868,3,74,37,0,864,865,5,206,0,0,865, - 867,3,74,37,0,866,864,1,0,0,0,867,870,1,0,0,0,868,866,1,0,0,0,868, - 869,1,0,0,0,869,97,1,0,0,0,870,868,1,0,0,0,871,872,3,114,57,0,872, - 99,1,0,0,0,873,882,5,195,0,0,874,875,5,210,0,0,875,882,7,11,0,0, - 876,877,5,197,0,0,877,879,5,210,0,0,878,880,7,11,0,0,879,878,1,0, - 0,0,879,880,1,0,0,0,880,882,1,0,0,0,881,873,1,0,0,0,881,874,1,0, - 0,0,881,876,1,0,0,0,882,101,1,0,0,0,883,885,7,12,0,0,884,883,1,0, - 0,0,884,885,1,0,0,0,885,892,1,0,0,0,886,893,3,100,50,0,887,893,5, - 196,0,0,888,893,5,197,0,0,889,893,5,198,0,0,890,893,5,82,0,0,891, - 893,5,113,0,0,892,886,1,0,0,0,892,887,1,0,0,0,892,888,1,0,0,0,892, - 889,1,0,0,0,892,890,1,0,0,0,892,891,1,0,0,0,893,103,1,0,0,0,894, - 898,3,102,51,0,895,898,5,199,0,0,896,898,5,116,0,0,897,894,1,0,0, - 0,897,895,1,0,0,0,897,896,1,0,0,0,898,105,1,0,0,0,899,900,7,13,0, - 0,900,107,1,0,0,0,901,902,7,14,0,0,902,109,1,0,0,0,903,904,7,15, - 0,0,904,111,1,0,0,0,905,908,5,194,0,0,906,908,3,110,55,0,907,905, - 1,0,0,0,907,906,1,0,0,0,908,113,1,0,0,0,909,913,5,194,0,0,910,913, - 3,106,53,0,911,913,3,108,54,0,912,909,1,0,0,0,912,910,1,0,0,0,912, - 911,1,0,0,0,913,115,1,0,0,0,914,915,5,199,0,0,915,916,5,212,0,0, - 916,917,3,102,51,0,917,117,1,0,0,0,114,120,130,138,141,145,148,152, - 155,158,161,164,168,172,175,178,181,185,188,197,203,224,241,258, - 264,270,281,283,294,297,303,311,317,319,323,328,331,334,338,342, - 345,347,350,354,358,361,363,365,370,381,387,394,399,403,407,412, - 419,427,430,433,452,466,482,494,506,514,518,525,531,540,544,575, - 592,604,614,617,621,624,636,653,657,663,670,682,686,689,698,712, - 739,748,750,752,760,765,773,783,786,796,809,815,818,825,836,842, - 846,852,859,868,879,881,884,892,897,907,912 + 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37, + 743,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,752,8,37,5,37,754, + 8,37,10,37,12,37,757,9,37,1,38,1,38,1,38,5,38,762,8,38,10,38,12, + 38,765,9,38,1,39,1,39,3,39,769,8,39,1,40,1,40,1,40,1,40,5,40,775, + 8,40,10,40,12,40,778,9,40,1,40,1,40,1,40,1,40,1,40,5,40,785,8,40, + 10,40,12,40,788,9,40,3,40,790,8,40,1,40,1,40,1,40,1,41,1,41,1,41, + 5,41,798,8,41,10,41,12,41,801,9,41,1,42,1,42,1,42,1,42,1,42,1,42, + 1,42,1,42,1,42,1,42,3,42,813,8,42,1,43,1,43,1,43,1,43,3,43,819,8, + 43,1,43,3,43,822,8,43,1,44,1,44,1,44,5,44,827,8,44,10,44,12,44,830, + 9,44,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,3,45,840,8,45,1,45, + 1,45,1,45,1,45,3,45,846,8,45,5,45,848,8,45,10,45,12,45,851,9,45, + 1,46,1,46,1,46,3,46,856,8,46,1,46,1,46,1,47,1,47,1,47,3,47,863,8, + 47,1,47,1,47,1,48,1,48,1,48,5,48,870,8,48,10,48,12,48,873,9,48,1, + 49,1,49,1,50,1,50,1,50,1,50,1,50,1,50,3,50,883,8,50,3,50,885,8,50, + 1,51,3,51,888,8,51,1,51,1,51,1,51,1,51,1,51,1,51,3,51,896,8,51,1, + 52,1,52,1,52,3,52,901,8,52,1,53,1,53,1,54,1,54,1,55,1,55,1,56,1, + 56,3,56,911,8,56,1,57,1,57,1,57,3,57,916,8,57,1,58,1,58,1,58,1,58, + 1,58,0,3,36,74,90,59,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,0,16,2,0,32,32,141,141,2,0,84,84,96,96,3,0,4,4,8,8,12,12, + 4,0,4,4,7,8,12,12,147,147,2,0,96,96,140,140,2,0,4,4,8,8,2,0,11,11, + 42,43,2,0,62,62,93,93,2,0,133,133,143,143,3,0,17,17,95,95,170,170, + 2,0,79,79,98,98,1,0,196,197,2,0,208,208,228,228,8,0,37,37,76,76, + 108,108,110,110,132,132,145,145,185,185,190,190,13,0,2,24,26,36, + 38,75,77,81,83,107,109,109,111,112,114,115,117,130,133,144,146,184, + 186,189,191,192,4,0,36,36,62,62,77,77,91,91,1043,0,120,1,0,0,0,2, + 124,1,0,0,0,4,138,1,0,0,0,6,141,1,0,0,0,8,190,1,0,0,0,10,193,1,0, + 0,0,12,199,1,0,0,0,14,203,1,0,0,0,16,209,1,0,0,0,18,227,1,0,0,0, + 20,230,1,0,0,0,22,233,1,0,0,0,24,243,1,0,0,0,26,246,1,0,0,0,28,250, + 1,0,0,0,30,283,1,0,0,0,32,285,1,0,0,0,34,288,1,0,0,0,36,303,1,0, + 0,0,38,365,1,0,0,0,40,370,1,0,0,0,42,381,1,0,0,0,44,383,1,0,0,0, + 46,389,1,0,0,0,48,397,1,0,0,0,50,415,1,0,0,0,52,417,1,0,0,0,54,425, + 1,0,0,0,56,430,1,0,0,0,58,438,1,0,0,0,60,442,1,0,0,0,62,446,1,0, + 0,0,64,455,1,0,0,0,66,469,1,0,0,0,68,471,1,0,0,0,70,521,1,0,0,0, + 72,523,1,0,0,0,74,660,1,0,0,0,76,758,1,0,0,0,78,768,1,0,0,0,80,789, + 1,0,0,0,82,794,1,0,0,0,84,812,1,0,0,0,86,821,1,0,0,0,88,823,1,0, + 0,0,90,839,1,0,0,0,92,852,1,0,0,0,94,862,1,0,0,0,96,866,1,0,0,0, + 98,874,1,0,0,0,100,884,1,0,0,0,102,887,1,0,0,0,104,900,1,0,0,0,106, + 902,1,0,0,0,108,904,1,0,0,0,110,906,1,0,0,0,112,910,1,0,0,0,114, + 915,1,0,0,0,116,917,1,0,0,0,118,121,3,2,1,0,119,121,3,6,3,0,120, + 118,1,0,0,0,120,119,1,0,0,0,121,122,1,0,0,0,122,123,5,0,0,1,123, + 1,1,0,0,0,124,130,3,4,2,0,125,126,5,176,0,0,126,127,5,4,0,0,127, + 129,3,4,2,0,128,125,1,0,0,0,129,132,1,0,0,0,130,128,1,0,0,0,130, + 131,1,0,0,0,131,3,1,0,0,0,132,130,1,0,0,0,133,139,3,6,3,0,134,135, + 5,220,0,0,135,136,3,2,1,0,136,137,5,236,0,0,137,139,1,0,0,0,138, + 133,1,0,0,0,138,134,1,0,0,0,139,5,1,0,0,0,140,142,3,8,4,0,141,140, + 1,0,0,0,141,142,1,0,0,0,142,143,1,0,0,0,143,145,5,146,0,0,144,146, + 5,49,0,0,145,144,1,0,0,0,145,146,1,0,0,0,146,148,1,0,0,0,147,149, + 3,10,5,0,148,147,1,0,0,0,148,149,1,0,0,0,149,150,1,0,0,0,150,152, + 3,72,36,0,151,153,3,12,6,0,152,151,1,0,0,0,152,153,1,0,0,0,153,155, + 1,0,0,0,154,156,3,14,7,0,155,154,1,0,0,0,155,156,1,0,0,0,156,158, + 1,0,0,0,157,159,3,18,9,0,158,157,1,0,0,0,158,159,1,0,0,0,159,161, + 1,0,0,0,160,162,3,20,10,0,161,160,1,0,0,0,161,162,1,0,0,0,162,164, + 1,0,0,0,163,165,3,22,11,0,164,163,1,0,0,0,164,165,1,0,0,0,165,168, + 1,0,0,0,166,167,5,189,0,0,167,169,7,0,0,0,168,166,1,0,0,0,168,169, + 1,0,0,0,169,172,1,0,0,0,170,171,5,189,0,0,171,173,5,169,0,0,172, + 170,1,0,0,0,172,173,1,0,0,0,173,175,1,0,0,0,174,176,3,24,12,0,175, + 174,1,0,0,0,175,176,1,0,0,0,176,178,1,0,0,0,177,179,3,16,8,0,178, + 177,1,0,0,0,178,179,1,0,0,0,179,181,1,0,0,0,180,182,3,26,13,0,181, + 180,1,0,0,0,181,182,1,0,0,0,182,185,1,0,0,0,183,186,3,30,15,0,184, + 186,3,32,16,0,185,183,1,0,0,0,185,184,1,0,0,0,185,186,1,0,0,0,186, + 188,1,0,0,0,187,189,3,34,17,0,188,187,1,0,0,0,188,189,1,0,0,0,189, + 7,1,0,0,0,190,191,5,189,0,0,191,192,3,82,41,0,192,9,1,0,0,0,193, + 194,5,168,0,0,194,197,5,197,0,0,195,196,5,189,0,0,196,198,5,164, + 0,0,197,195,1,0,0,0,197,198,1,0,0,0,198,11,1,0,0,0,199,200,5,68, + 0,0,200,201,3,36,18,0,201,13,1,0,0,0,202,204,7,1,0,0,203,202,1,0, + 0,0,203,204,1,0,0,0,204,205,1,0,0,0,205,206,5,9,0,0,206,207,5,90, + 0,0,207,208,3,72,36,0,208,15,1,0,0,0,209,210,5,188,0,0,210,211,3, + 114,57,0,211,212,5,10,0,0,212,213,5,220,0,0,213,214,3,56,28,0,214, + 224,5,236,0,0,215,216,5,206,0,0,216,217,3,114,57,0,217,218,5,10, + 0,0,218,219,5,220,0,0,219,220,3,56,28,0,220,221,5,236,0,0,221,223, + 1,0,0,0,222,215,1,0,0,0,223,226,1,0,0,0,224,222,1,0,0,0,224,225, + 1,0,0,0,225,17,1,0,0,0,226,224,1,0,0,0,227,228,5,129,0,0,228,229, + 3,74,37,0,229,19,1,0,0,0,230,231,5,187,0,0,231,232,3,74,37,0,232, + 21,1,0,0,0,233,234,5,73,0,0,234,241,5,18,0,0,235,236,7,0,0,0,236, + 237,5,220,0,0,237,238,3,72,36,0,238,239,5,236,0,0,239,242,1,0,0, + 0,240,242,3,72,36,0,241,235,1,0,0,0,241,240,1,0,0,0,242,23,1,0,0, + 0,243,244,5,74,0,0,244,245,3,74,37,0,245,25,1,0,0,0,246,247,5,122, + 0,0,247,248,5,18,0,0,248,249,3,46,23,0,249,27,1,0,0,0,250,251,5, + 122,0,0,251,252,5,18,0,0,252,253,3,72,36,0,253,29,1,0,0,0,254,255, + 5,99,0,0,255,258,3,74,37,0,256,257,5,206,0,0,257,259,3,74,37,0,258, + 256,1,0,0,0,258,259,1,0,0,0,259,264,1,0,0,0,260,261,5,189,0,0,261, + 265,5,164,0,0,262,263,5,18,0,0,263,265,3,72,36,0,264,260,1,0,0,0, + 264,262,1,0,0,0,264,265,1,0,0,0,265,284,1,0,0,0,266,267,5,99,0,0, + 267,270,3,74,37,0,268,269,5,189,0,0,269,271,5,164,0,0,270,268,1, + 0,0,0,270,271,1,0,0,0,271,272,1,0,0,0,272,273,5,118,0,0,273,274, + 3,74,37,0,274,284,1,0,0,0,275,276,5,99,0,0,276,277,3,74,37,0,277, + 278,5,118,0,0,278,281,3,74,37,0,279,280,5,18,0,0,280,282,3,72,36, + 0,281,279,1,0,0,0,281,282,1,0,0,0,282,284,1,0,0,0,283,254,1,0,0, + 0,283,266,1,0,0,0,283,275,1,0,0,0,284,31,1,0,0,0,285,286,5,118,0, + 0,286,287,3,74,37,0,287,33,1,0,0,0,288,289,5,150,0,0,289,290,3,52, + 26,0,290,35,1,0,0,0,291,292,6,18,-1,0,292,294,3,90,45,0,293,295, + 5,61,0,0,294,293,1,0,0,0,294,295,1,0,0,0,295,297,1,0,0,0,296,298, + 3,44,22,0,297,296,1,0,0,0,297,298,1,0,0,0,298,304,1,0,0,0,299,300, + 5,220,0,0,300,301,3,36,18,0,301,302,5,236,0,0,302,304,1,0,0,0,303, + 291,1,0,0,0,303,299,1,0,0,0,304,319,1,0,0,0,305,306,10,3,0,0,306, + 307,3,40,20,0,307,308,3,36,18,4,308,318,1,0,0,0,309,311,10,4,0,0, + 310,312,3,38,19,0,311,310,1,0,0,0,311,312,1,0,0,0,312,313,1,0,0, + 0,313,314,5,90,0,0,314,315,3,36,18,0,315,316,3,42,21,0,316,318,1, + 0,0,0,317,305,1,0,0,0,317,309,1,0,0,0,318,321,1,0,0,0,319,317,1, + 0,0,0,319,320,1,0,0,0,320,37,1,0,0,0,321,319,1,0,0,0,322,324,7,2, + 0,0,323,322,1,0,0,0,323,324,1,0,0,0,324,325,1,0,0,0,325,332,5,84, + 0,0,326,328,5,84,0,0,327,329,7,2,0,0,328,327,1,0,0,0,328,329,1,0, + 0,0,329,332,1,0,0,0,330,332,7,2,0,0,331,323,1,0,0,0,331,326,1,0, + 0,0,331,330,1,0,0,0,332,366,1,0,0,0,333,335,7,3,0,0,334,333,1,0, + 0,0,334,335,1,0,0,0,335,336,1,0,0,0,336,338,7,4,0,0,337,339,5,123, + 0,0,338,337,1,0,0,0,338,339,1,0,0,0,339,348,1,0,0,0,340,342,7,4, + 0,0,341,343,5,123,0,0,342,341,1,0,0,0,342,343,1,0,0,0,343,345,1, + 0,0,0,344,346,7,3,0,0,345,344,1,0,0,0,345,346,1,0,0,0,346,348,1, + 0,0,0,347,334,1,0,0,0,347,340,1,0,0,0,348,366,1,0,0,0,349,351,7, + 5,0,0,350,349,1,0,0,0,350,351,1,0,0,0,351,352,1,0,0,0,352,354,5, + 69,0,0,353,355,5,123,0,0,354,353,1,0,0,0,354,355,1,0,0,0,355,364, + 1,0,0,0,356,358,5,69,0,0,357,359,5,123,0,0,358,357,1,0,0,0,358,359, + 1,0,0,0,359,361,1,0,0,0,360,362,7,5,0,0,361,360,1,0,0,0,361,362, + 1,0,0,0,362,364,1,0,0,0,363,350,1,0,0,0,363,356,1,0,0,0,364,366, + 1,0,0,0,365,331,1,0,0,0,365,347,1,0,0,0,365,363,1,0,0,0,366,39,1, + 0,0,0,367,368,5,31,0,0,368,371,5,90,0,0,369,371,5,206,0,0,370,367, + 1,0,0,0,370,369,1,0,0,0,371,41,1,0,0,0,372,373,5,119,0,0,373,382, + 3,72,36,0,374,375,5,179,0,0,375,376,5,220,0,0,376,377,3,72,36,0, + 377,378,5,236,0,0,378,382,1,0,0,0,379,380,5,179,0,0,380,382,3,72, + 36,0,381,372,1,0,0,0,381,374,1,0,0,0,381,379,1,0,0,0,382,43,1,0, + 0,0,383,384,5,144,0,0,384,387,3,50,25,0,385,386,5,118,0,0,386,388, + 3,50,25,0,387,385,1,0,0,0,387,388,1,0,0,0,388,45,1,0,0,0,389,394, + 3,48,24,0,390,391,5,206,0,0,391,393,3,48,24,0,392,390,1,0,0,0,393, + 396,1,0,0,0,394,392,1,0,0,0,394,395,1,0,0,0,395,47,1,0,0,0,396,394, + 1,0,0,0,397,399,3,74,37,0,398,400,7,6,0,0,399,398,1,0,0,0,399,400, + 1,0,0,0,400,403,1,0,0,0,401,402,5,117,0,0,402,404,7,7,0,0,403,401, + 1,0,0,0,403,404,1,0,0,0,404,407,1,0,0,0,405,406,5,26,0,0,406,408, + 5,199,0,0,407,405,1,0,0,0,407,408,1,0,0,0,408,49,1,0,0,0,409,416, + 5,200,0,0,410,413,3,102,51,0,411,412,5,238,0,0,412,414,3,102,51, + 0,413,411,1,0,0,0,413,414,1,0,0,0,414,416,1,0,0,0,415,409,1,0,0, + 0,415,410,1,0,0,0,416,51,1,0,0,0,417,422,3,54,27,0,418,419,5,206, + 0,0,419,421,3,54,27,0,420,418,1,0,0,0,421,424,1,0,0,0,422,420,1, + 0,0,0,422,423,1,0,0,0,423,53,1,0,0,0,424,422,1,0,0,0,425,426,3,114, + 57,0,426,427,5,212,0,0,427,428,3,104,52,0,428,55,1,0,0,0,429,431, + 3,58,29,0,430,429,1,0,0,0,430,431,1,0,0,0,431,433,1,0,0,0,432,434, + 3,60,30,0,433,432,1,0,0,0,433,434,1,0,0,0,434,436,1,0,0,0,435,437, + 3,62,31,0,436,435,1,0,0,0,436,437,1,0,0,0,437,57,1,0,0,0,438,439, + 5,126,0,0,439,440,5,18,0,0,440,441,3,72,36,0,441,59,1,0,0,0,442, + 443,5,122,0,0,443,444,5,18,0,0,444,445,3,46,23,0,445,61,1,0,0,0, + 446,447,7,8,0,0,447,448,3,64,32,0,448,63,1,0,0,0,449,456,3,66,33, + 0,450,451,5,16,0,0,451,452,3,66,33,0,452,453,5,6,0,0,453,454,3,66, + 33,0,454,456,1,0,0,0,455,449,1,0,0,0,455,450,1,0,0,0,456,65,1,0, + 0,0,457,458,5,33,0,0,458,470,5,142,0,0,459,460,5,175,0,0,460,470, + 5,128,0,0,461,462,5,175,0,0,462,470,5,64,0,0,463,464,3,102,51,0, + 464,465,5,128,0,0,465,470,1,0,0,0,466,467,3,102,51,0,467,468,5,64, + 0,0,468,470,1,0,0,0,469,457,1,0,0,0,469,459,1,0,0,0,469,461,1,0, + 0,0,469,463,1,0,0,0,469,466,1,0,0,0,470,67,1,0,0,0,471,472,3,74, + 37,0,472,473,5,0,0,1,473,69,1,0,0,0,474,522,3,114,57,0,475,476,3, + 114,57,0,476,477,5,220,0,0,477,478,3,114,57,0,478,485,3,70,35,0, + 479,480,5,206,0,0,480,481,3,114,57,0,481,482,3,70,35,0,482,484,1, + 0,0,0,483,479,1,0,0,0,484,487,1,0,0,0,485,483,1,0,0,0,485,486,1, + 0,0,0,486,488,1,0,0,0,487,485,1,0,0,0,488,489,5,236,0,0,489,522, + 1,0,0,0,490,491,3,114,57,0,491,492,5,220,0,0,492,497,3,116,58,0, + 493,494,5,206,0,0,494,496,3,116,58,0,495,493,1,0,0,0,496,499,1,0, + 0,0,497,495,1,0,0,0,497,498,1,0,0,0,498,500,1,0,0,0,499,497,1,0, + 0,0,500,501,5,236,0,0,501,522,1,0,0,0,502,503,3,114,57,0,503,504, + 5,220,0,0,504,509,3,70,35,0,505,506,5,206,0,0,506,508,3,70,35,0, + 507,505,1,0,0,0,508,511,1,0,0,0,509,507,1,0,0,0,509,510,1,0,0,0, + 510,512,1,0,0,0,511,509,1,0,0,0,512,513,5,236,0,0,513,522,1,0,0, + 0,514,515,3,114,57,0,515,517,5,220,0,0,516,518,3,72,36,0,517,516, + 1,0,0,0,517,518,1,0,0,0,518,519,1,0,0,0,519,520,5,236,0,0,520,522, + 1,0,0,0,521,474,1,0,0,0,521,475,1,0,0,0,521,490,1,0,0,0,521,502, + 1,0,0,0,521,514,1,0,0,0,522,71,1,0,0,0,523,528,3,74,37,0,524,525, + 5,206,0,0,525,527,3,74,37,0,526,524,1,0,0,0,527,530,1,0,0,0,528, + 526,1,0,0,0,528,529,1,0,0,0,529,73,1,0,0,0,530,528,1,0,0,0,531,532, + 6,37,-1,0,532,534,5,19,0,0,533,535,3,74,37,0,534,533,1,0,0,0,534, + 535,1,0,0,0,535,541,1,0,0,0,536,537,5,186,0,0,537,538,3,74,37,0, + 538,539,5,163,0,0,539,540,3,74,37,0,540,542,1,0,0,0,541,536,1,0, + 0,0,542,543,1,0,0,0,543,541,1,0,0,0,543,544,1,0,0,0,544,547,1,0, + 0,0,545,546,5,52,0,0,546,548,3,74,37,0,547,545,1,0,0,0,547,548,1, + 0,0,0,548,549,1,0,0,0,549,550,5,53,0,0,550,661,1,0,0,0,551,552,5, + 20,0,0,552,553,5,220,0,0,553,554,3,74,37,0,554,555,5,10,0,0,555, + 556,3,70,35,0,556,557,5,236,0,0,557,661,1,0,0,0,558,559,5,36,0,0, + 559,661,5,199,0,0,560,561,5,59,0,0,561,562,5,220,0,0,562,563,3,106, + 53,0,563,564,5,68,0,0,564,565,3,74,37,0,565,566,5,236,0,0,566,661, + 1,0,0,0,567,568,5,86,0,0,568,569,3,74,37,0,569,570,3,106,53,0,570, + 661,1,0,0,0,571,572,5,155,0,0,572,573,5,220,0,0,573,574,3,74,37, + 0,574,575,5,68,0,0,575,578,3,74,37,0,576,577,5,65,0,0,577,579,3, + 74,37,0,578,576,1,0,0,0,578,579,1,0,0,0,579,580,1,0,0,0,580,581, + 5,236,0,0,581,661,1,0,0,0,582,583,5,166,0,0,583,661,5,199,0,0,584, + 585,5,171,0,0,585,586,5,220,0,0,586,587,7,9,0,0,587,588,5,199,0, + 0,588,589,5,68,0,0,589,590,3,74,37,0,590,591,5,236,0,0,591,661,1, + 0,0,0,592,593,3,114,57,0,593,595,5,220,0,0,594,596,3,72,36,0,595, + 594,1,0,0,0,595,596,1,0,0,0,596,597,1,0,0,0,597,598,5,236,0,0,598, + 599,1,0,0,0,599,600,5,125,0,0,600,601,5,220,0,0,601,602,3,56,28, + 0,602,603,5,236,0,0,603,661,1,0,0,0,604,605,3,114,57,0,605,607,5, + 220,0,0,606,608,3,72,36,0,607,606,1,0,0,0,607,608,1,0,0,0,608,609, + 1,0,0,0,609,610,5,236,0,0,610,611,1,0,0,0,611,612,5,125,0,0,612, + 613,3,114,57,0,613,661,1,0,0,0,614,620,3,114,57,0,615,617,5,220, + 0,0,616,618,3,72,36,0,617,616,1,0,0,0,617,618,1,0,0,0,618,619,1, + 0,0,0,619,621,5,236,0,0,620,615,1,0,0,0,620,621,1,0,0,0,621,622, + 1,0,0,0,622,624,5,220,0,0,623,625,5,49,0,0,624,623,1,0,0,0,624,625, + 1,0,0,0,625,627,1,0,0,0,626,628,3,76,38,0,627,626,1,0,0,0,627,628, + 1,0,0,0,628,629,1,0,0,0,629,630,5,236,0,0,630,661,1,0,0,0,631,661, + 3,104,52,0,632,633,5,208,0,0,633,661,3,74,37,18,634,635,5,115,0, + 0,635,661,3,74,37,12,636,637,3,94,47,0,637,638,5,210,0,0,638,640, + 1,0,0,0,639,636,1,0,0,0,639,640,1,0,0,0,640,641,1,0,0,0,641,661, + 5,202,0,0,642,643,5,220,0,0,643,644,3,2,1,0,644,645,5,236,0,0,645, + 661,1,0,0,0,646,647,5,220,0,0,647,648,3,74,37,0,648,649,5,236,0, + 0,649,661,1,0,0,0,650,651,5,220,0,0,651,652,3,72,36,0,652,653,5, + 236,0,0,653,661,1,0,0,0,654,656,5,219,0,0,655,657,3,72,36,0,656, + 655,1,0,0,0,656,657,1,0,0,0,657,658,1,0,0,0,658,661,5,235,0,0,659, + 661,3,86,43,0,660,531,1,0,0,0,660,551,1,0,0,0,660,558,1,0,0,0,660, + 560,1,0,0,0,660,567,1,0,0,0,660,571,1,0,0,0,660,582,1,0,0,0,660, + 584,1,0,0,0,660,592,1,0,0,0,660,604,1,0,0,0,660,614,1,0,0,0,660, + 631,1,0,0,0,660,632,1,0,0,0,660,634,1,0,0,0,660,639,1,0,0,0,660, + 642,1,0,0,0,660,646,1,0,0,0,660,650,1,0,0,0,660,654,1,0,0,0,660, + 659,1,0,0,0,661,755,1,0,0,0,662,666,10,17,0,0,663,667,5,202,0,0, + 664,667,5,238,0,0,665,667,5,227,0,0,666,663,1,0,0,0,666,664,1,0, + 0,0,666,665,1,0,0,0,667,668,1,0,0,0,668,754,3,74,37,18,669,673,10, + 16,0,0,670,674,5,228,0,0,671,674,5,208,0,0,672,674,5,207,0,0,673, + 670,1,0,0,0,673,671,1,0,0,0,673,672,1,0,0,0,674,675,1,0,0,0,675, + 754,3,74,37,17,676,701,10,15,0,0,677,702,5,211,0,0,678,702,5,212, + 0,0,679,702,5,223,0,0,680,702,5,221,0,0,681,702,5,222,0,0,682,702, + 5,213,0,0,683,702,5,214,0,0,684,686,5,115,0,0,685,684,1,0,0,0,685, + 686,1,0,0,0,686,687,1,0,0,0,687,689,5,80,0,0,688,690,5,25,0,0,689, + 688,1,0,0,0,689,690,1,0,0,0,690,702,1,0,0,0,691,693,5,115,0,0,692, + 691,1,0,0,0,692,693,1,0,0,0,693,694,1,0,0,0,694,702,7,10,0,0,695, + 702,5,232,0,0,696,702,5,233,0,0,697,702,5,225,0,0,698,702,5,216, + 0,0,699,702,5,217,0,0,700,702,5,224,0,0,701,677,1,0,0,0,701,678, + 1,0,0,0,701,679,1,0,0,0,701,680,1,0,0,0,701,681,1,0,0,0,701,682, + 1,0,0,0,701,683,1,0,0,0,701,685,1,0,0,0,701,692,1,0,0,0,701,695, + 1,0,0,0,701,696,1,0,0,0,701,697,1,0,0,0,701,698,1,0,0,0,701,699, + 1,0,0,0,701,700,1,0,0,0,702,703,1,0,0,0,703,754,3,74,37,16,704,705, + 10,13,0,0,705,706,5,226,0,0,706,754,3,74,37,14,707,708,10,11,0,0, + 708,709,5,6,0,0,709,754,3,74,37,12,710,711,10,10,0,0,711,712,5,121, + 0,0,712,754,3,74,37,11,713,715,10,9,0,0,714,716,5,115,0,0,715,714, + 1,0,0,0,715,716,1,0,0,0,716,717,1,0,0,0,717,718,5,16,0,0,718,719, + 3,74,37,0,719,720,5,6,0,0,720,721,3,74,37,10,721,754,1,0,0,0,722, + 723,10,8,0,0,723,724,5,229,0,0,724,725,3,74,37,0,725,726,5,205,0, + 0,726,727,3,74,37,8,727,754,1,0,0,0,728,729,10,21,0,0,729,730,5, + 219,0,0,730,731,3,74,37,0,731,732,5,235,0,0,732,754,1,0,0,0,733, + 734,10,20,0,0,734,735,5,210,0,0,735,754,5,197,0,0,736,737,10,19, + 0,0,737,738,5,210,0,0,738,754,3,114,57,0,739,740,10,14,0,0,740,742, + 5,88,0,0,741,743,5,115,0,0,742,741,1,0,0,0,742,743,1,0,0,0,743,744, + 1,0,0,0,744,754,5,116,0,0,745,751,10,7,0,0,746,752,3,112,56,0,747, + 748,5,10,0,0,748,752,3,114,57,0,749,750,5,10,0,0,750,752,5,199,0, + 0,751,746,1,0,0,0,751,747,1,0,0,0,751,749,1,0,0,0,752,754,1,0,0, + 0,753,662,1,0,0,0,753,669,1,0,0,0,753,676,1,0,0,0,753,704,1,0,0, + 0,753,707,1,0,0,0,753,710,1,0,0,0,753,713,1,0,0,0,753,722,1,0,0, + 0,753,728,1,0,0,0,753,733,1,0,0,0,753,736,1,0,0,0,753,739,1,0,0, + 0,753,745,1,0,0,0,754,757,1,0,0,0,755,753,1,0,0,0,755,756,1,0,0, + 0,756,75,1,0,0,0,757,755,1,0,0,0,758,763,3,78,39,0,759,760,5,206, + 0,0,760,762,3,78,39,0,761,759,1,0,0,0,762,765,1,0,0,0,763,761,1, + 0,0,0,763,764,1,0,0,0,764,77,1,0,0,0,765,763,1,0,0,0,766,769,3,80, + 40,0,767,769,3,74,37,0,768,766,1,0,0,0,768,767,1,0,0,0,769,79,1, + 0,0,0,770,771,5,220,0,0,771,776,3,114,57,0,772,773,5,206,0,0,773, + 775,3,114,57,0,774,772,1,0,0,0,775,778,1,0,0,0,776,774,1,0,0,0,776, + 777,1,0,0,0,777,779,1,0,0,0,778,776,1,0,0,0,779,780,5,236,0,0,780, + 790,1,0,0,0,781,786,3,114,57,0,782,783,5,206,0,0,783,785,3,114,57, + 0,784,782,1,0,0,0,785,788,1,0,0,0,786,784,1,0,0,0,786,787,1,0,0, + 0,787,790,1,0,0,0,788,786,1,0,0,0,789,770,1,0,0,0,789,781,1,0,0, + 0,790,791,1,0,0,0,791,792,5,201,0,0,792,793,3,74,37,0,793,81,1,0, + 0,0,794,799,3,84,42,0,795,796,5,206,0,0,796,798,3,84,42,0,797,795, + 1,0,0,0,798,801,1,0,0,0,799,797,1,0,0,0,799,800,1,0,0,0,800,83,1, + 0,0,0,801,799,1,0,0,0,802,803,3,114,57,0,803,804,5,10,0,0,804,805, + 5,220,0,0,805,806,3,2,1,0,806,807,5,236,0,0,807,813,1,0,0,0,808, + 809,3,74,37,0,809,810,5,10,0,0,810,811,3,114,57,0,811,813,1,0,0, + 0,812,802,1,0,0,0,812,808,1,0,0,0,813,85,1,0,0,0,814,822,5,200,0, + 0,815,816,3,94,47,0,816,817,5,210,0,0,817,819,1,0,0,0,818,815,1, + 0,0,0,818,819,1,0,0,0,819,820,1,0,0,0,820,822,3,88,44,0,821,814, + 1,0,0,0,821,818,1,0,0,0,822,87,1,0,0,0,823,828,3,114,57,0,824,825, + 5,210,0,0,825,827,3,114,57,0,826,824,1,0,0,0,827,830,1,0,0,0,828, + 826,1,0,0,0,828,829,1,0,0,0,829,89,1,0,0,0,830,828,1,0,0,0,831,832, + 6,45,-1,0,832,840,3,94,47,0,833,840,3,92,46,0,834,835,5,220,0,0, + 835,836,3,2,1,0,836,837,5,236,0,0,837,840,1,0,0,0,838,840,5,200, + 0,0,839,831,1,0,0,0,839,833,1,0,0,0,839,834,1,0,0,0,839,838,1,0, + 0,0,840,849,1,0,0,0,841,845,10,2,0,0,842,846,3,112,56,0,843,844, + 5,10,0,0,844,846,3,114,57,0,845,842,1,0,0,0,845,843,1,0,0,0,846, + 848,1,0,0,0,847,841,1,0,0,0,848,851,1,0,0,0,849,847,1,0,0,0,849, + 850,1,0,0,0,850,91,1,0,0,0,851,849,1,0,0,0,852,853,3,114,57,0,853, + 855,5,220,0,0,854,856,3,96,48,0,855,854,1,0,0,0,855,856,1,0,0,0, + 856,857,1,0,0,0,857,858,5,236,0,0,858,93,1,0,0,0,859,860,3,98,49, + 0,860,861,5,210,0,0,861,863,1,0,0,0,862,859,1,0,0,0,862,863,1,0, + 0,0,863,864,1,0,0,0,864,865,3,114,57,0,865,95,1,0,0,0,866,871,3, + 74,37,0,867,868,5,206,0,0,868,870,3,74,37,0,869,867,1,0,0,0,870, + 873,1,0,0,0,871,869,1,0,0,0,871,872,1,0,0,0,872,97,1,0,0,0,873,871, + 1,0,0,0,874,875,3,114,57,0,875,99,1,0,0,0,876,885,5,195,0,0,877, + 878,5,210,0,0,878,885,7,11,0,0,879,880,5,197,0,0,880,882,5,210,0, + 0,881,883,7,11,0,0,882,881,1,0,0,0,882,883,1,0,0,0,883,885,1,0,0, + 0,884,876,1,0,0,0,884,877,1,0,0,0,884,879,1,0,0,0,885,101,1,0,0, + 0,886,888,7,12,0,0,887,886,1,0,0,0,887,888,1,0,0,0,888,895,1,0,0, + 0,889,896,3,100,50,0,890,896,5,196,0,0,891,896,5,197,0,0,892,896, + 5,198,0,0,893,896,5,82,0,0,894,896,5,113,0,0,895,889,1,0,0,0,895, + 890,1,0,0,0,895,891,1,0,0,0,895,892,1,0,0,0,895,893,1,0,0,0,895, + 894,1,0,0,0,896,103,1,0,0,0,897,901,3,102,51,0,898,901,5,199,0,0, + 899,901,5,116,0,0,900,897,1,0,0,0,900,898,1,0,0,0,900,899,1,0,0, + 0,901,105,1,0,0,0,902,903,7,13,0,0,903,107,1,0,0,0,904,905,7,14, + 0,0,905,109,1,0,0,0,906,907,7,15,0,0,907,111,1,0,0,0,908,911,5,194, + 0,0,909,911,3,110,55,0,910,908,1,0,0,0,910,909,1,0,0,0,911,113,1, + 0,0,0,912,916,5,194,0,0,913,916,3,106,53,0,914,916,3,108,54,0,915, + 912,1,0,0,0,915,913,1,0,0,0,915,914,1,0,0,0,916,115,1,0,0,0,917, + 918,5,199,0,0,918,919,5,212,0,0,919,920,3,102,51,0,920,117,1,0,0, + 0,115,120,130,138,141,145,148,152,155,158,161,164,168,172,175,178, + 181,185,188,197,203,224,241,258,264,270,281,283,294,297,303,311, + 317,319,323,328,331,334,338,342,345,347,350,354,358,361,363,365, + 370,381,387,394,399,403,407,413,415,422,430,433,436,455,469,485, + 497,509,517,521,528,534,543,547,578,595,607,617,620,624,627,639, + 656,660,666,673,685,689,692,701,715,742,751,753,755,763,768,776, + 786,789,799,812,818,821,828,839,845,849,855,862,871,882,884,887, + 895,900,910,915 ] class HogQLParser ( Parser ): @@ -812,7 +814,7 @@ class HogQLParser ( Parser ): def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) - self.checkVersion("4.13.0") + self.checkVersion("4.13.1") self._interp = ParserATNSimulator(self, self.atn, self.decisionsToDFA, self.sharedContextCache) self._predicates = None @@ -3056,6 +3058,9 @@ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser + def PLACEHOLDER(self): + return self.getToken(HogQLParser.PLACEHOLDER, 0) + def numberLiteral(self, i:int=None): if i is None: return self.getTypedRuleContexts(HogQLParser.NumberLiteralContext) @@ -3083,19 +3088,32 @@ def ratioExpr(self): localctx = HogQLParser.RatioExprContext(self, self._ctx, self.state) self.enterRule(localctx, 50, self.RULE_ratioExpr) try: - self.enterOuterAlt(localctx, 1) - self.state = 409 - self.numberLiteral() - self.state = 412 + self.state = 415 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,54,self._ctx) - if la_ == 1: + token = self._input.LA(1) + if token in [200]: + self.enterOuterAlt(localctx, 1) + self.state = 409 + self.match(HogQLParser.PLACEHOLDER) + pass + elif token in [82, 113, 195, 196, 197, 198, 208, 210, 228]: + self.enterOuterAlt(localctx, 2) self.state = 410 - self.match(HogQLParser.SLASH) - self.state = 411 self.numberLiteral() + self.state = 413 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,54,self._ctx) + if la_ == 1: + self.state = 411 + self.match(HogQLParser.SLASH) + self.state = 412 + self.numberLiteral() + pass + else: + raise NoViableAltException(self) + except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -3144,17 +3162,17 @@ def settingExprList(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 414 + self.state = 417 self.settingExpr() - self.state = 419 + self.state = 422 self._errHandler.sync(self) _la = self._input.LA(1) while _la==206: - self.state = 415 + self.state = 418 self.match(HogQLParser.COMMA) - self.state = 416 + self.state = 419 self.settingExpr() - self.state = 421 + self.state = 424 self._errHandler.sync(self) _la = self._input.LA(1) @@ -3203,11 +3221,11 @@ def settingExpr(self): self.enterRule(localctx, 54, self.RULE_settingExpr) try: self.enterOuterAlt(localctx, 1) - self.state = 422 + self.state = 425 self.identifier() - self.state = 423 + self.state = 426 self.match(HogQLParser.EQ_SINGLE) - self.state = 424 + self.state = 427 self.literal() except RecognitionException as re: localctx.exception = re @@ -3256,27 +3274,27 @@ def windowExpr(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 427 + self.state = 430 self._errHandler.sync(self) _la = self._input.LA(1) if _la==126: - self.state = 426 + self.state = 429 self.winPartitionByClause() - self.state = 430 + self.state = 433 self._errHandler.sync(self) _la = self._input.LA(1) if _la==122: - self.state = 429 + self.state = 432 self.winOrderByClause() - self.state = 433 + self.state = 436 self._errHandler.sync(self) _la = self._input.LA(1) if _la==133 or _la==143: - self.state = 432 + self.state = 435 self.winFrameClause() @@ -3324,11 +3342,11 @@ def winPartitionByClause(self): self.enterRule(localctx, 58, self.RULE_winPartitionByClause) try: self.enterOuterAlt(localctx, 1) - self.state = 435 + self.state = 438 self.match(HogQLParser.PARTITION) - self.state = 436 + self.state = 439 self.match(HogQLParser.BY) - self.state = 437 + self.state = 440 self.columnExprList() except RecognitionException as re: localctx.exception = re @@ -3374,11 +3392,11 @@ def winOrderByClause(self): self.enterRule(localctx, 60, self.RULE_winOrderByClause) try: self.enterOuterAlt(localctx, 1) - self.state = 439 + self.state = 442 self.match(HogQLParser.ORDER) - self.state = 440 + self.state = 443 self.match(HogQLParser.BY) - self.state = 441 + self.state = 444 self.orderExprList() except RecognitionException as re: localctx.exception = re @@ -3425,14 +3443,14 @@ def winFrameClause(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 443 + self.state = 446 _la = self._input.LA(1) if not(_la==133 or _la==143): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 444 + self.state = 447 self.winFrameExtend() except RecognitionException as re: localctx.exception = re @@ -3507,25 +3525,25 @@ def winFrameExtend(self): localctx = HogQLParser.WinFrameExtendContext(self, self._ctx, self.state) self.enterRule(localctx, 64, self.RULE_winFrameExtend) try: - self.state = 452 + self.state = 455 self._errHandler.sync(self) token = self._input.LA(1) if token in [33, 82, 113, 175, 195, 196, 197, 198, 208, 210, 228]: localctx = HogQLParser.FrameStartContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 446 + self.state = 449 self.winFrameBound() pass elif token in [16]: localctx = HogQLParser.FrameBetweenContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 447 + self.state = 450 self.match(HogQLParser.BETWEEN) - self.state = 448 + self.state = 451 self.winFrameBound() - self.state = 449 + self.state = 452 self.match(HogQLParser.AND) - self.state = 450 + self.state = 453 self.winFrameBound() pass else: @@ -3584,41 +3602,41 @@ def winFrameBound(self): self.enterRule(localctx, 66, self.RULE_winFrameBound) try: self.enterOuterAlt(localctx, 1) - self.state = 466 + self.state = 469 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,60,self._ctx) + la_ = self._interp.adaptivePredict(self._input,61,self._ctx) if la_ == 1: - self.state = 454 + self.state = 457 self.match(HogQLParser.CURRENT) - self.state = 455 + self.state = 458 self.match(HogQLParser.ROW) pass elif la_ == 2: - self.state = 456 + self.state = 459 self.match(HogQLParser.UNBOUNDED) - self.state = 457 + self.state = 460 self.match(HogQLParser.PRECEDING) pass elif la_ == 3: - self.state = 458 + self.state = 461 self.match(HogQLParser.UNBOUNDED) - self.state = 459 + self.state = 462 self.match(HogQLParser.FOLLOWING) pass elif la_ == 4: - self.state = 460 + self.state = 463 self.numberLiteral() - self.state = 461 + self.state = 464 self.match(HogQLParser.PRECEDING) pass elif la_ == 5: - self.state = 463 + self.state = 466 self.numberLiteral() - self.state = 464 + self.state = 467 self.match(HogQLParser.FOLLOWING) pass @@ -3664,9 +3682,9 @@ def expr(self): self.enterRule(localctx, 68, self.RULE_expr) try: self.enterOuterAlt(localctx, 1) - self.state = 468 + self.state = 471 self.columnExpr(0) - self.state = 469 + self.state = 472 self.match(HogQLParser.EOF) except RecognitionException as re: localctx.exception = re @@ -3841,111 +3859,111 @@ def columnTypeExpr(self): self.enterRule(localctx, 70, self.RULE_columnTypeExpr) self._la = 0 # Token type try: - self.state = 518 + self.state = 521 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: localctx = HogQLParser.ColumnTypeExprSimpleContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 471 + self.state = 474 self.identifier() pass elif la_ == 2: localctx = HogQLParser.ColumnTypeExprNestedContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 472 + self.state = 475 self.identifier() - self.state = 473 + self.state = 476 self.match(HogQLParser.LPAREN) - self.state = 474 + self.state = 477 self.identifier() - self.state = 475 + self.state = 478 self.columnTypeExpr() - self.state = 482 + self.state = 485 self._errHandler.sync(self) _la = self._input.LA(1) while _la==206: - self.state = 476 + self.state = 479 self.match(HogQLParser.COMMA) - self.state = 477 + self.state = 480 self.identifier() - self.state = 478 + self.state = 481 self.columnTypeExpr() - self.state = 484 + self.state = 487 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 485 + self.state = 488 self.match(HogQLParser.RPAREN) pass elif la_ == 3: localctx = HogQLParser.ColumnTypeExprEnumContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 487 + self.state = 490 self.identifier() - self.state = 488 + self.state = 491 self.match(HogQLParser.LPAREN) - self.state = 489 + self.state = 492 self.enumValue() - self.state = 494 + self.state = 497 self._errHandler.sync(self) _la = self._input.LA(1) while _la==206: - self.state = 490 + self.state = 493 self.match(HogQLParser.COMMA) - self.state = 491 + self.state = 494 self.enumValue() - self.state = 496 + self.state = 499 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 497 + self.state = 500 self.match(HogQLParser.RPAREN) pass elif la_ == 4: localctx = HogQLParser.ColumnTypeExprComplexContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 499 + self.state = 502 self.identifier() - self.state = 500 + self.state = 503 self.match(HogQLParser.LPAREN) - self.state = 501 + self.state = 504 self.columnTypeExpr() - self.state = 506 + self.state = 509 self._errHandler.sync(self) _la = self._input.LA(1) while _la==206: - self.state = 502 + self.state = 505 self.match(HogQLParser.COMMA) - self.state = 503 + self.state = 506 self.columnTypeExpr() - self.state = 508 + self.state = 511 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 509 + self.state = 512 self.match(HogQLParser.RPAREN) pass elif la_ == 5: localctx = HogQLParser.ColumnTypeExprParamContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 511 + self.state = 514 self.identifier() - self.state = 512 + self.state = 515 self.match(HogQLParser.LPAREN) - self.state = 514 + self.state = 517 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & 69122459133) != 0): - self.state = 513 + self.state = 516 self.columnExprList() - self.state = 516 + self.state = 519 self.match(HogQLParser.RPAREN) pass @@ -3997,20 +4015,20 @@ def columnExprList(self): self.enterRule(localctx, 72, self.RULE_columnExprList) try: self.enterOuterAlt(localctx, 1) - self.state = 520 + self.state = 523 self.columnExpr(0) - self.state = 525 + self.state = 528 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,66,self._ctx) + _alt = self._interp.adaptivePredict(self._input,67,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 521 + self.state = 524 self.match(HogQLParser.COMMA) - self.state = 522 + self.state = 525 self.columnExpr(0) - self.state = 527 + self.state = 530 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,66,self._ctx) + _alt = self._interp.adaptivePredict(self._input,67,self._ctx) except RecognitionException as re: localctx.exception = re @@ -4891,53 +4909,53 @@ def columnExpr(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 657 + self.state = 660 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: localctx = HogQLParser.ColumnExprCaseContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 529 + self.state = 532 self.match(HogQLParser.CASE) - self.state = 531 + self.state = 534 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 = 530 + self.state = 533 localctx.caseExpr = self.columnExpr(0) - self.state = 538 + self.state = 541 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 533 + self.state = 536 self.match(HogQLParser.WHEN) - self.state = 534 + self.state = 537 localctx.whenExpr = self.columnExpr(0) - self.state = 535 + self.state = 538 self.match(HogQLParser.THEN) - self.state = 536 + self.state = 539 localctx.thenExpr = self.columnExpr(0) - self.state = 540 + self.state = 543 self._errHandler.sync(self) _la = self._input.LA(1) if not (_la==186): break - self.state = 544 + self.state = 547 self._errHandler.sync(self) _la = self._input.LA(1) if _la==52: - self.state = 542 + self.state = 545 self.match(HogQLParser.ELSE) - self.state = 543 + self.state = 546 localctx.elseExpr = self.columnExpr(0) - self.state = 546 + self.state = 549 self.match(HogQLParser.END) pass @@ -4945,17 +4963,17 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprCastContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 548 + self.state = 551 self.match(HogQLParser.CAST) - self.state = 549 + self.state = 552 self.match(HogQLParser.LPAREN) - self.state = 550 + self.state = 553 self.columnExpr(0) - self.state = 551 + self.state = 554 self.match(HogQLParser.AS) - self.state = 552 + self.state = 555 self.columnTypeExpr() - self.state = 553 + self.state = 556 self.match(HogQLParser.RPAREN) pass @@ -4963,9 +4981,9 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprDateContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 555 + self.state = 558 self.match(HogQLParser.DATE) - self.state = 556 + self.state = 559 self.match(HogQLParser.STRING_LITERAL) pass @@ -4973,17 +4991,17 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprExtractContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 557 + self.state = 560 self.match(HogQLParser.EXTRACT) - self.state = 558 + self.state = 561 self.match(HogQLParser.LPAREN) - self.state = 559 + self.state = 562 self.interval() - self.state = 560 + self.state = 563 self.match(HogQLParser.FROM) - self.state = 561 + self.state = 564 self.columnExpr(0) - self.state = 562 + self.state = 565 self.match(HogQLParser.RPAREN) pass @@ -4991,11 +5009,11 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprIntervalContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 564 + self.state = 567 self.match(HogQLParser.INTERVAL) - self.state = 565 + self.state = 568 self.columnExpr(0) - self.state = 566 + self.state = 569 self.interval() pass @@ -5003,27 +5021,27 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprSubstringContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 568 + self.state = 571 self.match(HogQLParser.SUBSTRING) - self.state = 569 + self.state = 572 self.match(HogQLParser.LPAREN) - self.state = 570 + self.state = 573 self.columnExpr(0) - self.state = 571 + self.state = 574 self.match(HogQLParser.FROM) - self.state = 572 - self.columnExpr(0) self.state = 575 + self.columnExpr(0) + self.state = 578 self._errHandler.sync(self) _la = self._input.LA(1) if _la==65: - self.state = 573 + self.state = 576 self.match(HogQLParser.FOR) - self.state = 574 + self.state = 577 self.columnExpr(0) - self.state = 577 + self.state = 580 self.match(HogQLParser.RPAREN) pass @@ -5031,9 +5049,9 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprTimestampContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 579 + self.state = 582 self.match(HogQLParser.TIMESTAMP) - self.state = 580 + self.state = 583 self.match(HogQLParser.STRING_LITERAL) pass @@ -5041,24 +5059,24 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprTrimContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 581 + self.state = 584 self.match(HogQLParser.TRIM) - self.state = 582 + self.state = 585 self.match(HogQLParser.LPAREN) - self.state = 583 + self.state = 586 _la = self._input.LA(1) if not(_la==17 or _la==95 or _la==170): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 584 + self.state = 587 self.match(HogQLParser.STRING_LITERAL) - self.state = 585 + self.state = 588 self.match(HogQLParser.FROM) - self.state = 586 + self.state = 589 self.columnExpr(0) - self.state = 587 + self.state = 590 self.match(HogQLParser.RPAREN) pass @@ -5066,28 +5084,28 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprWinFunctionContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 589 + self.state = 592 self.identifier() - self.state = 590 + self.state = 593 self.match(HogQLParser.LPAREN) - self.state = 592 + self.state = 595 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & 69122459133) != 0): - self.state = 591 + self.state = 594 self.columnExprList() - self.state = 594 + self.state = 597 self.match(HogQLParser.RPAREN) - self.state = 596 + self.state = 599 self.match(HogQLParser.OVER) - self.state = 597 + self.state = 600 self.match(HogQLParser.LPAREN) - self.state = 598 + self.state = 601 self.windowExpr() - self.state = 599 + self.state = 602 self.match(HogQLParser.RPAREN) pass @@ -5095,24 +5113,24 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprWinFunctionTargetContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 601 + self.state = 604 self.identifier() - self.state = 602 + self.state = 605 self.match(HogQLParser.LPAREN) - self.state = 604 + self.state = 607 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & 69122459133) != 0): - self.state = 603 + self.state = 606 self.columnExprList() - self.state = 606 + self.state = 609 self.match(HogQLParser.RPAREN) - self.state = 608 + self.state = 611 self.match(HogQLParser.OVER) - self.state = 609 + self.state = 612 self.identifier() pass @@ -5120,45 +5138,45 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprFunctionContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 611 + self.state = 614 self.identifier() - self.state = 617 + self.state = 620 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,74,self._ctx) + la_ = self._interp.adaptivePredict(self._input,75,self._ctx) if la_ == 1: - self.state = 612 + self.state = 615 self.match(HogQLParser.LPAREN) - self.state = 614 + self.state = 617 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & 69122459133) != 0): - self.state = 613 + self.state = 616 self.columnExprList() - self.state = 616 + self.state = 619 self.match(HogQLParser.RPAREN) - self.state = 619 + self.state = 622 self.match(HogQLParser.LPAREN) - self.state = 621 + self.state = 624 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,75,self._ctx) + la_ = self._interp.adaptivePredict(self._input,76,self._ctx) if la_ == 1: - self.state = 620 + self.state = 623 self.match(HogQLParser.DISTINCT) - self.state = 624 + self.state = 627 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & 69122459133) != 0): - self.state = 623 + self.state = 626 self.columnArgList() - self.state = 626 + self.state = 629 self.match(HogQLParser.RPAREN) pass @@ -5166,7 +5184,7 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprLiteralContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 628 + self.state = 631 self.literal() pass @@ -5174,9 +5192,9 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprNegateContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 629 + self.state = 632 self.match(HogQLParser.DASH) - self.state = 630 + self.state = 633 self.columnExpr(18) pass @@ -5184,9 +5202,9 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprNotContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 631 + self.state = 634 self.match(HogQLParser.NOT) - self.state = 632 + self.state = 635 self.columnExpr(12) pass @@ -5194,17 +5212,17 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprAsteriskContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 636 + self.state = 639 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -5066549581053953) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or _la==192 or _la==194: - self.state = 633 + self.state = 636 self.tableIdentifier() - self.state = 634 + self.state = 637 self.match(HogQLParser.DOT) - self.state = 638 + self.state = 641 self.match(HogQLParser.ASTERISK) pass @@ -5212,11 +5230,11 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprSubqueryContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 639 + self.state = 642 self.match(HogQLParser.LPAREN) - self.state = 640 + self.state = 643 self.selectUnionStmt() - self.state = 641 + self.state = 644 self.match(HogQLParser.RPAREN) pass @@ -5224,11 +5242,11 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprParensContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 643 + self.state = 646 self.match(HogQLParser.LPAREN) - self.state = 644 + self.state = 647 self.columnExpr(0) - self.state = 645 + self.state = 648 self.match(HogQLParser.RPAREN) pass @@ -5236,11 +5254,11 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprTupleContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 647 + self.state = 650 self.match(HogQLParser.LPAREN) - self.state = 648 + self.state = 651 self.columnExprList() - self.state = 649 + self.state = 652 self.match(HogQLParser.RPAREN) pass @@ -5248,17 +5266,17 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 651 + self.state = 654 self.match(HogQLParser.LBRACKET) - self.state = 653 + self.state = 656 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & 69122459133) != 0): - self.state = 652 + self.state = 655 self.columnExprList() - self.state = 655 + self.state = 658 self.match(HogQLParser.RBRACKET) pass @@ -5266,50 +5284,50 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprIdentifierContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 656 + self.state = 659 self.columnIdentifier() pass self._ctx.stop = self._input.LT(-1) - self.state = 752 + self.state = 755 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,90,self._ctx) + _alt = self._interp.adaptivePredict(self._input,91,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 = 750 + self.state = 753 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,89,self._ctx) + la_ = self._interp.adaptivePredict(self._input,90,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 = 659 + self.state = 662 if not self.precpred(self._ctx, 17): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 17)") - self.state = 663 + self.state = 666 self._errHandler.sync(self) token = self._input.LA(1) if token in [202]: - self.state = 660 + self.state = 663 localctx.operator = self.match(HogQLParser.ASTERISK) pass elif token in [238]: - self.state = 661 + self.state = 664 localctx.operator = self.match(HogQLParser.SLASH) pass elif token in [227]: - self.state = 662 + self.state = 665 localctx.operator = self.match(HogQLParser.PERCENT) pass else: raise NoViableAltException(self) - self.state = 665 + self.state = 668 localctx.right = self.columnExpr(18) pass @@ -5317,29 +5335,29 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprPrecedence2Context(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 666 + self.state = 669 if not self.precpred(self._ctx, 16): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 16)") - self.state = 670 + self.state = 673 self._errHandler.sync(self) token = self._input.LA(1) if token in [228]: - self.state = 667 + self.state = 670 localctx.operator = self.match(HogQLParser.PLUS) pass elif token in [208]: - self.state = 668 + self.state = 671 localctx.operator = self.match(HogQLParser.DASH) pass elif token in [207]: - self.state = 669 + self.state = 672 localctx.operator = self.match(HogQLParser.CONCAT) pass else: raise NoViableAltException(self) - self.state = 672 + self.state = 675 localctx.right = self.columnExpr(17) pass @@ -5347,79 +5365,79 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprPrecedence3Context(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 673 + self.state = 676 if not self.precpred(self._ctx, 15): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 15)") - self.state = 698 + self.state = 701 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,85,self._ctx) + la_ = self._interp.adaptivePredict(self._input,86,self._ctx) if la_ == 1: - self.state = 674 + self.state = 677 localctx.operator = self.match(HogQLParser.EQ_DOUBLE) pass elif la_ == 2: - self.state = 675 + self.state = 678 localctx.operator = self.match(HogQLParser.EQ_SINGLE) pass elif la_ == 3: - self.state = 676 + self.state = 679 localctx.operator = self.match(HogQLParser.NOT_EQ) pass elif la_ == 4: - self.state = 677 + self.state = 680 localctx.operator = self.match(HogQLParser.LT_EQ) pass elif la_ == 5: - self.state = 678 + self.state = 681 localctx.operator = self.match(HogQLParser.LT) pass elif la_ == 6: - self.state = 679 + self.state = 682 localctx.operator = self.match(HogQLParser.GT_EQ) pass elif la_ == 7: - self.state = 680 + self.state = 683 localctx.operator = self.match(HogQLParser.GT) pass elif la_ == 8: - self.state = 682 + self.state = 685 self._errHandler.sync(self) _la = self._input.LA(1) if _la==115: - self.state = 681 + self.state = 684 localctx.operator = self.match(HogQLParser.NOT) - self.state = 684 + self.state = 687 self.match(HogQLParser.IN) - self.state = 686 + self.state = 689 self._errHandler.sync(self) _la = self._input.LA(1) if _la==25: - self.state = 685 + self.state = 688 self.match(HogQLParser.COHORT) pass elif la_ == 9: - self.state = 689 + self.state = 692 self._errHandler.sync(self) _la = self._input.LA(1) if _la==115: - self.state = 688 + self.state = 691 localctx.operator = self.match(HogQLParser.NOT) - self.state = 691 + self.state = 694 _la = self._input.LA(1) if not(_la==79 or _la==98): self._errHandler.recoverInline(self) @@ -5429,209 +5447,209 @@ def columnExpr(self, _p:int=0): pass elif la_ == 10: - self.state = 692 + self.state = 695 localctx.operator = self.match(HogQLParser.REGEX_SINGLE) pass elif la_ == 11: - self.state = 693 + self.state = 696 localctx.operator = self.match(HogQLParser.REGEX_DOUBLE) pass elif la_ == 12: - self.state = 694 + self.state = 697 localctx.operator = self.match(HogQLParser.NOT_REGEX) pass elif la_ == 13: - self.state = 695 + self.state = 698 localctx.operator = self.match(HogQLParser.IREGEX_SINGLE) pass elif la_ == 14: - self.state = 696 + self.state = 699 localctx.operator = self.match(HogQLParser.IREGEX_DOUBLE) pass elif la_ == 15: - self.state = 697 + self.state = 700 localctx.operator = self.match(HogQLParser.NOT_IREGEX) pass - self.state = 700 + self.state = 703 localctx.right = self.columnExpr(16) pass elif la_ == 4: localctx = HogQLParser.ColumnExprNullishContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 701 + self.state = 704 if not self.precpred(self._ctx, 13): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") - self.state = 702 + self.state = 705 self.match(HogQLParser.NULLISH) - self.state = 703 + self.state = 706 self.columnExpr(14) pass elif la_ == 5: localctx = HogQLParser.ColumnExprAndContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 704 + self.state = 707 if not self.precpred(self._ctx, 11): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") - self.state = 705 + self.state = 708 self.match(HogQLParser.AND) - self.state = 706 + self.state = 709 self.columnExpr(12) pass elif la_ == 6: localctx = HogQLParser.ColumnExprOrContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 707 + self.state = 710 if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") - self.state = 708 + self.state = 711 self.match(HogQLParser.OR) - self.state = 709 + self.state = 712 self.columnExpr(11) pass elif la_ == 7: localctx = HogQLParser.ColumnExprBetweenContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 710 + self.state = 713 if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") - self.state = 712 + self.state = 715 self._errHandler.sync(self) _la = self._input.LA(1) if _la==115: - self.state = 711 + self.state = 714 self.match(HogQLParser.NOT) - self.state = 714 + self.state = 717 self.match(HogQLParser.BETWEEN) - self.state = 715 + self.state = 718 self.columnExpr(0) - self.state = 716 + self.state = 719 self.match(HogQLParser.AND) - self.state = 717 + self.state = 720 self.columnExpr(10) pass elif la_ == 8: localctx = HogQLParser.ColumnExprTernaryOpContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 719 + self.state = 722 if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") - self.state = 720 + self.state = 723 self.match(HogQLParser.QUERY) - self.state = 721 + self.state = 724 self.columnExpr(0) - self.state = 722 + self.state = 725 self.match(HogQLParser.COLON) - self.state = 723 + self.state = 726 self.columnExpr(8) pass elif la_ == 9: localctx = HogQLParser.ColumnExprArrayAccessContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 725 + self.state = 728 if not self.precpred(self._ctx, 21): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 21)") - self.state = 726 + self.state = 729 self.match(HogQLParser.LBRACKET) - self.state = 727 + self.state = 730 self.columnExpr(0) - self.state = 728 + self.state = 731 self.match(HogQLParser.RBRACKET) pass elif la_ == 10: localctx = HogQLParser.ColumnExprTupleAccessContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 730 + self.state = 733 if not self.precpred(self._ctx, 20): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 20)") - self.state = 731 + self.state = 734 self.match(HogQLParser.DOT) - self.state = 732 + self.state = 735 self.match(HogQLParser.DECIMAL_LITERAL) pass elif la_ == 11: localctx = HogQLParser.ColumnExprPropertyAccessContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 733 + self.state = 736 if not self.precpred(self._ctx, 19): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 19)") - self.state = 734 + self.state = 737 self.match(HogQLParser.DOT) - self.state = 735 + self.state = 738 self.identifier() pass elif la_ == 12: localctx = HogQLParser.ColumnExprIsNullContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 736 + self.state = 739 if not self.precpred(self._ctx, 14): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") - self.state = 737 + self.state = 740 self.match(HogQLParser.IS) - self.state = 739 + self.state = 742 self._errHandler.sync(self) _la = self._input.LA(1) if _la==115: - self.state = 738 + self.state = 741 self.match(HogQLParser.NOT) - self.state = 741 + self.state = 744 self.match(HogQLParser.NULL_SQL) pass elif la_ == 13: localctx = HogQLParser.ColumnExprAliasContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 742 + self.state = 745 if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 748 + self.state = 751 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,88,self._ctx) + la_ = self._interp.adaptivePredict(self._input,89,self._ctx) if la_ == 1: - self.state = 743 + self.state = 746 self.alias() pass elif la_ == 2: - self.state = 744 + self.state = 747 self.match(HogQLParser.AS) - self.state = 745 + self.state = 748 self.identifier() pass elif la_ == 3: - self.state = 746 + self.state = 749 self.match(HogQLParser.AS) - self.state = 747 + self.state = 750 self.match(HogQLParser.STRING_LITERAL) pass @@ -5639,9 +5657,9 @@ def columnExpr(self, _p:int=0): pass - self.state = 754 + self.state = 757 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,90,self._ctx) + _alt = self._interp.adaptivePredict(self._input,91,self._ctx) except RecognitionException as re: localctx.exception = re @@ -5691,17 +5709,17 @@ def columnArgList(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 755 + self.state = 758 self.columnArgExpr() - self.state = 760 + self.state = 763 self._errHandler.sync(self) _la = self._input.LA(1) while _la==206: - self.state = 756 + self.state = 759 self.match(HogQLParser.COMMA) - self.state = 757 + self.state = 760 self.columnArgExpr() - self.state = 762 + self.state = 765 self._errHandler.sync(self) _la = self._input.LA(1) @@ -5746,18 +5764,18 @@ def columnArgExpr(self): localctx = HogQLParser.ColumnArgExprContext(self, self._ctx, self.state) self.enterRule(localctx, 78, self.RULE_columnArgExpr) try: - self.state = 765 + self.state = 768 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,92,self._ctx) + la_ = self._interp.adaptivePredict(self._input,93,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 763 + self.state = 766 self.columnLambdaExpr() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 764 + self.state = 767 self.columnExpr(0) pass @@ -5823,41 +5841,41 @@ def columnLambdaExpr(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 786 + self.state = 789 self._errHandler.sync(self) token = self._input.LA(1) if token in [220]: - self.state = 767 + self.state = 770 self.match(HogQLParser.LPAREN) - self.state = 768 + self.state = 771 self.identifier() - self.state = 773 + self.state = 776 self._errHandler.sync(self) _la = self._input.LA(1) while _la==206: - self.state = 769 + self.state = 772 self.match(HogQLParser.COMMA) - self.state = 770 + self.state = 773 self.identifier() - self.state = 775 + self.state = 778 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 776 + self.state = 779 self.match(HogQLParser.RPAREN) pass elif token in [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 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, 114, 115, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 194]: - self.state = 778 + self.state = 781 self.identifier() - self.state = 783 + self.state = 786 self._errHandler.sync(self) _la = self._input.LA(1) while _la==206: - self.state = 779 + self.state = 782 self.match(HogQLParser.COMMA) - self.state = 780 + self.state = 783 self.identifier() - self.state = 785 + self.state = 788 self._errHandler.sync(self) _la = self._input.LA(1) @@ -5865,9 +5883,9 @@ def columnLambdaExpr(self): else: raise NoViableAltException(self) - self.state = 788 + self.state = 791 self.match(HogQLParser.ARROW) - self.state = 789 + self.state = 792 self.columnExpr(0) except RecognitionException as re: localctx.exception = re @@ -5917,17 +5935,17 @@ def withExprList(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 791 + self.state = 794 self.withExpr() - self.state = 796 + self.state = 799 self._errHandler.sync(self) _la = self._input.LA(1) while _la==206: - self.state = 792 + self.state = 795 self.match(HogQLParser.COMMA) - self.state = 793 + self.state = 796 self.withExpr() - self.state = 798 + self.state = 801 self._errHandler.sync(self) _la = self._input.LA(1) @@ -6011,32 +6029,32 @@ def withExpr(self): localctx = HogQLParser.WithExprContext(self, self._ctx, self.state) self.enterRule(localctx, 84, self.RULE_withExpr) try: - self.state = 809 + self.state = 812 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,97,self._ctx) + la_ = self._interp.adaptivePredict(self._input,98,self._ctx) if la_ == 1: localctx = HogQLParser.WithExprSubqueryContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 799 + self.state = 802 self.identifier() - self.state = 800 + self.state = 803 self.match(HogQLParser.AS) - self.state = 801 + self.state = 804 self.match(HogQLParser.LPAREN) - self.state = 802 + self.state = 805 self.selectUnionStmt() - self.state = 803 + self.state = 806 self.match(HogQLParser.RPAREN) pass elif la_ == 2: localctx = HogQLParser.WithExprColumnContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 805 + self.state = 808 self.columnExpr(0) - self.state = 806 + self.state = 809 self.match(HogQLParser.AS) - self.state = 807 + self.state = 810 self.identifier() pass @@ -6088,27 +6106,27 @@ def columnIdentifier(self): localctx = HogQLParser.ColumnIdentifierContext(self, self._ctx, self.state) self.enterRule(localctx, 86, self.RULE_columnIdentifier) try: - self.state = 818 + self.state = 821 self._errHandler.sync(self) token = self._input.LA(1) if token in [200]: self.enterOuterAlt(localctx, 1) - self.state = 811 + self.state = 814 self.match(HogQLParser.PLACEHOLDER) pass elif token in [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 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, 114, 115, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 194]: self.enterOuterAlt(localctx, 2) - self.state = 815 + self.state = 818 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,98,self._ctx) + la_ = self._interp.adaptivePredict(self._input,99,self._ctx) if la_ == 1: - self.state = 812 + self.state = 815 self.tableIdentifier() - self.state = 813 + self.state = 816 self.match(HogQLParser.DOT) - self.state = 817 + self.state = 820 self.nestedIdentifier() pass else: @@ -6161,20 +6179,20 @@ def nestedIdentifier(self): self.enterRule(localctx, 88, self.RULE_nestedIdentifier) try: self.enterOuterAlt(localctx, 1) - self.state = 820 + self.state = 823 self.identifier() - self.state = 825 + self.state = 828 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,100,self._ctx) + _alt = self._interp.adaptivePredict(self._input,101,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 821 + self.state = 824 self.match(HogQLParser.DOT) - self.state = 822 + self.state = 825 self.identifier() - self.state = 827 + self.state = 830 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,100,self._ctx) + _alt = self._interp.adaptivePredict(self._input,101,self._ctx) except RecognitionException as re: localctx.exception = re @@ -6307,15 +6325,15 @@ def tableExpr(self, _p:int=0): self.enterRecursionRule(localctx, 90, self.RULE_tableExpr, _p) try: self.enterOuterAlt(localctx, 1) - self.state = 836 + self.state = 839 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,101,self._ctx) + la_ = self._interp.adaptivePredict(self._input,102,self._ctx) if la_ == 1: localctx = HogQLParser.TableExprIdentifierContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 829 + self.state = 832 self.tableIdentifier() pass @@ -6323,7 +6341,7 @@ def tableExpr(self, _p:int=0): localctx = HogQLParser.TableExprFunctionContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 830 + self.state = 833 self.tableFunctionExpr() pass @@ -6331,11 +6349,11 @@ def tableExpr(self, _p:int=0): localctx = HogQLParser.TableExprSubqueryContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 831 + self.state = 834 self.match(HogQLParser.LPAREN) - self.state = 832 + self.state = 835 self.selectUnionStmt() - self.state = 833 + self.state = 836 self.match(HogQLParser.RPAREN) pass @@ -6343,15 +6361,15 @@ def tableExpr(self, _p:int=0): localctx = HogQLParser.TableExprPlaceholderContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 835 + self.state = 838 self.match(HogQLParser.PLACEHOLDER) pass self._ctx.stop = self._input.LT(-1) - self.state = 846 + self.state = 849 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,103,self._ctx) + _alt = self._interp.adaptivePredict(self._input,104,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: @@ -6359,29 +6377,29 @@ def tableExpr(self, _p:int=0): _prevctx = localctx localctx = HogQLParser.TableExprAliasContext(self, HogQLParser.TableExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_tableExpr) - self.state = 838 + self.state = 841 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 842 + self.state = 845 self._errHandler.sync(self) token = self._input.LA(1) if token in [36, 62, 77, 91, 194]: - self.state = 839 + self.state = 842 self.alias() pass elif token in [10]: - self.state = 840 + self.state = 843 self.match(HogQLParser.AS) - self.state = 841 + self.state = 844 self.identifier() pass else: raise NoViableAltException(self) - self.state = 848 + self.state = 851 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,103,self._ctx) + _alt = self._interp.adaptivePredict(self._input,104,self._ctx) except RecognitionException as re: localctx.exception = re @@ -6432,19 +6450,19 @@ def tableFunctionExpr(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 849 + self.state = 852 self.identifier() - self.state = 850 + self.state = 853 self.match(HogQLParser.LPAREN) - self.state = 852 + self.state = 855 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & 69122459133) != 0): - self.state = 851 + self.state = 854 self.tableArgList() - self.state = 854 + self.state = 857 self.match(HogQLParser.RPAREN) except RecognitionException as re: localctx.exception = re @@ -6491,17 +6509,17 @@ def tableIdentifier(self): self.enterRule(localctx, 94, self.RULE_tableIdentifier) try: self.enterOuterAlt(localctx, 1) - self.state = 859 + self.state = 862 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,105,self._ctx) + la_ = self._interp.adaptivePredict(self._input,106,self._ctx) if la_ == 1: - self.state = 856 + self.state = 859 self.databaseIdentifier() - self.state = 857 + self.state = 860 self.match(HogQLParser.DOT) - self.state = 861 + self.state = 864 self.identifier() except RecognitionException as re: localctx.exception = re @@ -6551,17 +6569,17 @@ def tableArgList(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 863 + self.state = 866 self.columnExpr(0) - self.state = 868 + self.state = 871 self._errHandler.sync(self) _la = self._input.LA(1) while _la==206: - self.state = 864 + self.state = 867 self.match(HogQLParser.COMMA) - self.state = 865 + self.state = 868 self.columnExpr(0) - self.state = 870 + self.state = 873 self._errHandler.sync(self) _la = self._input.LA(1) @@ -6603,7 +6621,7 @@ def databaseIdentifier(self): self.enterRule(localctx, 98, self.RULE_databaseIdentifier) try: self.enterOuterAlt(localctx, 1) - self.state = 871 + self.state = 874 self.identifier() except RecognitionException as re: localctx.exception = re @@ -6654,19 +6672,19 @@ def floatingLiteral(self): self.enterRule(localctx, 100, self.RULE_floatingLiteral) self._la = 0 # Token type try: - self.state = 881 + self.state = 884 self._errHandler.sync(self) token = self._input.LA(1) if token in [195]: self.enterOuterAlt(localctx, 1) - self.state = 873 + self.state = 876 self.match(HogQLParser.FLOATING_LITERAL) pass elif token in [210]: self.enterOuterAlt(localctx, 2) - self.state = 874 + self.state = 877 self.match(HogQLParser.DOT) - self.state = 875 + self.state = 878 _la = self._input.LA(1) if not(_la==196 or _la==197): self._errHandler.recoverInline(self) @@ -6676,15 +6694,15 @@ def floatingLiteral(self): pass elif token in [197]: self.enterOuterAlt(localctx, 3) - self.state = 876 + self.state = 879 self.match(HogQLParser.DECIMAL_LITERAL) - self.state = 877 + self.state = 880 self.match(HogQLParser.DOT) - self.state = 879 + self.state = 882 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,107,self._ctx) + la_ = self._interp.adaptivePredict(self._input,108,self._ctx) if la_ == 1: - self.state = 878 + self.state = 881 _la = self._input.LA(1) if not(_la==196 or _la==197): self._errHandler.recoverInline(self) @@ -6757,11 +6775,11 @@ def numberLiteral(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 884 + self.state = 887 self._errHandler.sync(self) _la = self._input.LA(1) if _la==208 or _la==228: - self.state = 883 + self.state = 886 _la = self._input.LA(1) if not(_la==208 or _la==228): self._errHandler.recoverInline(self) @@ -6770,36 +6788,36 @@ def numberLiteral(self): self.consume() - self.state = 892 + self.state = 895 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,110,self._ctx) + la_ = self._interp.adaptivePredict(self._input,111,self._ctx) if la_ == 1: - self.state = 886 + self.state = 889 self.floatingLiteral() pass elif la_ == 2: - self.state = 887 + self.state = 890 self.match(HogQLParser.OCTAL_LITERAL) pass elif la_ == 3: - self.state = 888 + self.state = 891 self.match(HogQLParser.DECIMAL_LITERAL) pass elif la_ == 4: - self.state = 889 + self.state = 892 self.match(HogQLParser.HEXADECIMAL_LITERAL) pass elif la_ == 5: - self.state = 890 + self.state = 893 self.match(HogQLParser.INF) pass elif la_ == 6: - self.state = 891 + self.state = 894 self.match(HogQLParser.NAN_SQL) pass @@ -6847,22 +6865,22 @@ def literal(self): localctx = HogQLParser.LiteralContext(self, self._ctx, self.state) self.enterRule(localctx, 104, self.RULE_literal) try: - self.state = 897 + self.state = 900 self._errHandler.sync(self) token = self._input.LA(1) if token in [82, 113, 195, 196, 197, 198, 208, 210, 228]: self.enterOuterAlt(localctx, 1) - self.state = 894 + self.state = 897 self.numberLiteral() pass elif token in [199]: self.enterOuterAlt(localctx, 2) - self.state = 895 + self.state = 898 self.match(HogQLParser.STRING_LITERAL) pass elif token in [116]: self.enterOuterAlt(localctx, 3) - self.state = 896 + self.state = 899 self.match(HogQLParser.NULL_SQL) pass else: @@ -6927,7 +6945,7 @@ def interval(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 899 + self.state = 902 _la = self._input.LA(1) if not(_la==37 or ((((_la - 76)) & ~0x3f) == 0 and ((1 << (_la - 76)) & 72057615512764417) != 0) or ((((_la - 145)) & ~0x3f) == 0 and ((1 << (_la - 145)) & 36283883716609) != 0)): self._errHandler.recoverInline(self) @@ -7503,7 +7521,7 @@ def keyword(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 901 + self.state = 904 _la = self._input.LA(1) if not(((((_la - 2)) & ~0x3f) == 0 and ((1 << (_la - 2)) & -34368126977) != 0) or ((((_la - 66)) & ~0x3f) == 0 and ((1 << (_la - 66)) & -1288627627820033) != 0) or ((((_la - 130)) & ~0x3f) == 0 and ((1 << (_la - 130)) & 8034421735228932089) != 0)): self._errHandler.recoverInline(self) @@ -7557,7 +7575,7 @@ def keywordForAlias(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 903 + self.state = 906 _la = self._input.LA(1) if not(((((_la - 36)) & ~0x3f) == 0 and ((1 << (_la - 36)) & 36030996109328385) != 0)): self._errHandler.recoverInline(self) @@ -7604,17 +7622,17 @@ def alias(self): localctx = HogQLParser.AliasContext(self, self._ctx, self.state) self.enterRule(localctx, 112, self.RULE_alias) try: - self.state = 907 + self.state = 910 self._errHandler.sync(self) token = self._input.LA(1) if token in [194]: self.enterOuterAlt(localctx, 1) - self.state = 905 + self.state = 908 self.match(HogQLParser.IDENTIFIER) pass elif token in [36, 62, 77, 91]: self.enterOuterAlt(localctx, 2) - self.state = 906 + self.state = 909 self.keywordForAlias() pass else: @@ -7664,22 +7682,22 @@ def identifier(self): localctx = HogQLParser.IdentifierContext(self, self._ctx, self.state) self.enterRule(localctx, 114, self.RULE_identifier) try: - self.state = 912 + self.state = 915 self._errHandler.sync(self) token = self._input.LA(1) if token in [194]: self.enterOuterAlt(localctx, 1) - self.state = 909 + self.state = 912 self.match(HogQLParser.IDENTIFIER) pass elif token in [37, 76, 108, 110, 132, 145, 185, 190]: self.enterOuterAlt(localctx, 2) - self.state = 910 + self.state = 913 self.interval() pass elif token in [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 80, 81, 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, 109, 111, 112, 114, 115, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 186, 187, 188, 189, 191, 192]: self.enterOuterAlt(localctx, 3) - self.state = 911 + self.state = 914 self.keyword() pass else: @@ -7729,11 +7747,11 @@ def enumValue(self): self.enterRule(localctx, 116, self.RULE_enumValue) try: self.enterOuterAlt(localctx, 1) - self.state = 914 + self.state = 917 self.match(HogQLParser.STRING_LITERAL) - self.state = 915 + self.state = 918 self.match(HogQLParser.EQ_SINGLE) - self.state = 916 + self.state = 919 self.numberLiteral() except RecognitionException as re: localctx.exception = re diff --git a/posthog/hogql/grammar/HogQLParserVisitor.py b/posthog/hogql/grammar/HogQLParserVisitor.py index 41475580d134e..61c17aecae477 100644 --- a/posthog/hogql/grammar/HogQLParserVisitor.py +++ b/posthog/hogql/grammar/HogQLParserVisitor.py @@ -1,4 +1,4 @@ -# Generated from HogQLParser.g4 by ANTLR 4.13.0 +# Generated from HogQLParser.g4 by ANTLR 4.13.1 from antlr4 import * if "." in __name__: from .HogQLParser import HogQLParser diff --git a/posthog/hogql/parser.py b/posthog/hogql/parser.py index 3624127a9ea62..132755d01026c 100644 --- a/posthog/hogql/parser.py +++ b/posthog/hogql/parser.py @@ -363,6 +363,9 @@ def visitOrderExpr(self, ctx: HogQLParser.OrderExprContext): return ast.OrderExpr(expr=self.visit(ctx.columnExpr()), order=cast(Literal["ASC", "DESC"], order)) def visitRatioExpr(self, ctx: HogQLParser.RatioExprContext): + if ctx.PLACEHOLDER(): + return ast.Placeholder(field=parse_string_literal(ctx.PLACEHOLDER())) + number_literals = ctx.numberLiteral() left = number_literals[0] diff --git a/posthog/hogql_queries/insights/trends/query_builder.py b/posthog/hogql_queries/insights/trends/query_builder.py index ac1f4811d1cbf..cd5602303c7c7 100644 --- a/posthog/hogql_queries/insights/trends/query_builder.py +++ b/posthog/hogql_queries/insights/trends/query_builder.py @@ -113,15 +113,15 @@ def _get_events_subquery(self) -> ast.SelectQuery: {aggregation_operation} AS total, dateTrunc({interval}, toTimeZone(toDateTime(timestamp), 'UTC')) AS day_start FROM events AS e - %s + SAMPLE {sample} WHERE {events_filter} GROUP BY day_start - """ - % (self._sample_value()), + """, placeholders={ **self.query_date_range.to_placeholders(), "events_filter": self._events_filter(), "aggregation_operation": self._aggregation_operation(), + "sample": self._sample_value(), }, ) @@ -243,9 +243,9 @@ def _aggregation_operation(self) -> ast.Expr: # Using string interpolation for SAMPLE due to HogQL limitations with `UNION ALL` and `SAMPLE` AST nodes def _sample_value(self) -> str: if self.query.samplingFactor is None: - return "" + return ast.RatioExpr(left=ast.Constant(value=1)) - return f"SAMPLE {self.query.samplingFactor}" + return ast.RatioExpr(left=ast.Constant(value=self.query.samplingFactor)) @cached_property def _breakdown(self): diff --git a/requirements.in b/requirements.in index a1b3cdf01340e..990318d120356 100644 --- a/requirements.in +++ b/requirements.in @@ -6,7 +6,7 @@ # aiohttp>=3.8.4 aioboto3==11.1 -antlr4-python3-runtime==4.13.0 +antlr4-python3-runtime==4.13.1 amqp==5.1.1 boto3==1.26.76 boto3-stubs[s3] @@ -87,4 +87,4 @@ django-two-factor-auth==1.14.0 phonenumberslite==8.13.6 openai==0.27.8 nh3==0.2.14 -hogql-parser==0.1.8 +hogql-parser==0.1.9 diff --git a/requirements.txt b/requirements.txt index 58e89b2e25e52..f4518a7dec9da 100644 --- a/requirements.txt +++ b/requirements.txt @@ -24,7 +24,7 @@ amqp==5.1.1 # kombu annotated-types==0.5.0 # via pydantic -antlr4-python3-runtime==4.13.0 +antlr4-python3-runtime==4.13.1 # via -r requirements.in asgiref==3.3.2 # via django @@ -248,7 +248,7 @@ gunicorn==20.1.0 # via -r requirements.in h11==0.13.0 # via wsproto -hogql-parser==0.1.8 +hogql-parser==0.1.9 # via -r requirements.in idna==2.8 # via