# Generated from /data/Coding/LLM4DB/antlr_gram/mysql/MySqlParser.g4 by ANTLR 4.13.1
# encoding: utf-8
from antlr4 import *
from io import StringIO
import sys
if sys.version_info[1] > 5:
	from typing import TextIO
else:
	from typing.io import TextIO

def serializedATN():
    return [
        4,1,1163,7447,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,
        6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,
        7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,
        2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,
        7,26,2,27,7,27,2,28,7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32,7,32,
        2,33,7,33,2,34,7,34,2,35,7,35,2,36,7,36,2,37,7,37,2,38,7,38,2,39,
        7,39,2,40,7,40,2,41,7,41,2,42,7,42,2,43,7,43,2,44,7,44,2,45,7,45,
        2,46,7,46,2,47,7,47,2,48,7,48,2,49,7,49,2,50,7,50,2,51,7,51,2,52,
        7,52,2,53,7,53,2,54,7,54,2,55,7,55,2,56,7,56,2,57,7,57,2,58,7,58,
        2,59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,63,7,63,2,64,7,64,2,65,
        7,65,2,66,7,66,2,67,7,67,2,68,7,68,2,69,7,69,2,70,7,70,2,71,7,71,
        2,72,7,72,2,73,7,73,2,74,7,74,2,75,7,75,2,76,7,76,2,77,7,77,2,78,
        7,78,2,79,7,79,2,80,7,80,2,81,7,81,2,82,7,82,2,83,7,83,2,84,7,84,
        2,85,7,85,2,86,7,86,2,87,7,87,2,88,7,88,2,89,7,89,2,90,7,90,2,91,
        7,91,2,92,7,92,2,93,7,93,2,94,7,94,2,95,7,95,2,96,7,96,2,97,7,97,
        2,98,7,98,2,99,7,99,2,100,7,100,2,101,7,101,2,102,7,102,2,103,7,
        103,2,104,7,104,2,105,7,105,2,106,7,106,2,107,7,107,2,108,7,108,
        2,109,7,109,2,110,7,110,2,111,7,111,2,112,7,112,2,113,7,113,2,114,
        7,114,2,115,7,115,2,116,7,116,2,117,7,117,2,118,7,118,2,119,7,119,
        2,120,7,120,2,121,7,121,2,122,7,122,2,123,7,123,2,124,7,124,2,125,
        7,125,2,126,7,126,2,127,7,127,2,128,7,128,2,129,7,129,2,130,7,130,
        2,131,7,131,2,132,7,132,2,133,7,133,2,134,7,134,2,135,7,135,2,136,
        7,136,2,137,7,137,2,138,7,138,2,139,7,139,2,140,7,140,2,141,7,141,
        2,142,7,142,2,143,7,143,2,144,7,144,2,145,7,145,2,146,7,146,2,147,
        7,147,2,148,7,148,2,149,7,149,2,150,7,150,2,151,7,151,2,152,7,152,
        2,153,7,153,2,154,7,154,2,155,7,155,2,156,7,156,2,157,7,157,2,158,
        7,158,2,159,7,159,2,160,7,160,2,161,7,161,2,162,7,162,2,163,7,163,
        2,164,7,164,2,165,7,165,2,166,7,166,2,167,7,167,2,168,7,168,2,169,
        7,169,2,170,7,170,2,171,7,171,2,172,7,172,2,173,7,173,2,174,7,174,
        2,175,7,175,2,176,7,176,2,177,7,177,2,178,7,178,2,179,7,179,2,180,
        7,180,2,181,7,181,2,182,7,182,2,183,7,183,2,184,7,184,2,185,7,185,
        2,186,7,186,2,187,7,187,2,188,7,188,2,189,7,189,2,190,7,190,2,191,
        7,191,2,192,7,192,2,193,7,193,2,194,7,194,2,195,7,195,2,196,7,196,
        2,197,7,197,2,198,7,198,2,199,7,199,2,200,7,200,2,201,7,201,2,202,
        7,202,2,203,7,203,2,204,7,204,2,205,7,205,2,206,7,206,2,207,7,207,
        2,208,7,208,2,209,7,209,2,210,7,210,2,211,7,211,2,212,7,212,2,213,
        7,213,2,214,7,214,2,215,7,215,2,216,7,216,2,217,7,217,2,218,7,218,
        2,219,7,219,2,220,7,220,2,221,7,221,2,222,7,222,2,223,7,223,2,224,
        7,224,2,225,7,225,2,226,7,226,2,227,7,227,2,228,7,228,2,229,7,229,
        2,230,7,230,2,231,7,231,2,232,7,232,2,233,7,233,2,234,7,234,2,235,
        7,235,2,236,7,236,2,237,7,237,2,238,7,238,2,239,7,239,2,240,7,240,
        2,241,7,241,2,242,7,242,2,243,7,243,2,244,7,244,2,245,7,245,2,246,
        7,246,2,247,7,247,2,248,7,248,2,249,7,249,2,250,7,250,2,251,7,251,
        2,252,7,252,2,253,7,253,2,254,7,254,2,255,7,255,2,256,7,256,2,257,
        7,257,2,258,7,258,2,259,7,259,2,260,7,260,2,261,7,261,2,262,7,262,
        2,263,7,263,2,264,7,264,2,265,7,265,2,266,7,266,2,267,7,267,2,268,
        7,268,2,269,7,269,2,270,7,270,2,271,7,271,2,272,7,272,2,273,7,273,
        2,274,7,274,2,275,7,275,2,276,7,276,2,277,7,277,2,278,7,278,2,279,
        7,279,2,280,7,280,2,281,7,281,2,282,7,282,2,283,7,283,2,284,7,284,
        2,285,7,285,2,286,7,286,2,287,7,287,2,288,7,288,2,289,7,289,2,290,
        7,290,2,291,7,291,2,292,7,292,2,293,7,293,2,294,7,294,2,295,7,295,
        2,296,7,296,2,297,7,297,2,298,7,298,2,299,7,299,2,300,7,300,2,301,
        7,301,2,302,7,302,2,303,7,303,2,304,7,304,2,305,7,305,2,306,7,306,
        2,307,7,307,2,308,7,308,2,309,7,309,2,310,7,310,2,311,7,311,2,312,
        7,312,2,313,7,313,2,314,7,314,2,315,7,315,2,316,7,316,2,317,7,317,
        2,318,7,318,2,319,7,319,2,320,7,320,2,321,7,321,2,322,7,322,2,323,
        7,323,2,324,7,324,2,325,7,325,2,326,7,326,2,327,7,327,2,328,7,328,
        2,329,7,329,2,330,7,330,2,331,7,331,2,332,7,332,2,333,7,333,2,334,
        7,334,2,335,7,335,2,336,7,336,2,337,7,337,2,338,7,338,2,339,7,339,
        2,340,7,340,2,341,7,341,2,342,7,342,2,343,7,343,2,344,7,344,2,345,
        7,345,2,346,7,346,2,347,7,347,2,348,7,348,2,349,7,349,2,350,7,350,
        2,351,7,351,2,352,7,352,2,353,7,353,2,354,7,354,2,355,7,355,2,356,
        7,356,2,357,7,357,2,358,7,358,2,359,7,359,2,360,7,360,1,0,3,0,724,
        8,0,1,0,1,0,3,0,728,8,0,1,0,1,0,1,1,1,1,1,1,3,1,735,8,1,1,1,3,1,
        738,8,1,1,1,5,1,741,8,1,10,1,12,1,744,9,1,1,1,1,1,1,1,3,1,749,8,
        1,1,1,3,1,752,8,1,1,1,3,1,755,8,1,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,
        2,764,8,2,1,3,1,3,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,
        4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,
        4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,3,4,806,8,4,1,5,1,5,1,
        5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,3,5,821,8,5,1,6,1,6,1,
        6,1,6,1,6,1,6,1,6,1,6,1,6,3,6,832,8,6,1,7,1,7,1,7,1,7,1,7,1,7,1,
        7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,3,7,849,8,7,1,8,1,8,1,8,3,8,854,
        8,8,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,3,9,869,
        8,9,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,
        1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,
        3,10,896,8,10,1,11,1,11,1,11,1,11,1,11,1,11,1,11,3,11,905,8,11,1,
        12,1,12,1,12,3,12,910,8,12,1,12,1,12,5,12,914,8,12,10,12,12,12,917,
        9,12,1,13,1,13,3,13,921,8,13,1,13,1,13,3,13,925,8,13,1,13,1,13,1,
        13,1,13,1,13,1,13,1,13,3,13,934,8,13,1,13,3,13,937,8,13,1,13,3,13,
        940,8,13,1,13,1,13,3,13,944,8,13,1,13,1,13,1,13,1,14,1,14,3,14,951,
        8,14,1,14,3,14,954,8,14,1,14,1,14,1,14,3,14,959,8,14,1,14,1,14,1,
        14,1,14,5,14,965,8,14,10,14,12,14,968,9,14,1,14,1,14,3,14,972,8,
        14,1,14,1,14,1,14,3,14,977,8,14,1,14,5,14,980,8,14,10,14,12,14,983,
        9,14,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,3,15,994,8,15,
        1,15,3,15,997,8,15,1,15,1,15,3,15,1001,8,15,1,15,3,15,1004,8,15,
        1,15,1,15,3,15,1008,8,15,1,15,3,15,1011,8,15,1,15,1,15,3,15,1015,
        8,15,1,15,3,15,1018,8,15,1,15,3,15,1021,8,15,1,15,1,15,3,15,1025,
        8,15,1,15,3,15,1028,8,15,1,15,1,15,3,15,1032,8,15,1,15,1,15,1,16,
        1,16,3,16,1038,8,16,1,16,1,16,1,16,1,16,3,16,1044,8,16,1,16,1,16,
        5,16,1048,8,16,10,16,12,16,1051,9,16,1,16,1,16,5,16,1055,8,16,10,
        16,12,16,1058,9,16,1,16,1,16,1,17,1,17,3,17,1064,8,17,1,17,3,17,
        1067,8,17,1,17,1,17,3,17,1071,8,17,1,17,1,17,1,17,3,17,1076,8,17,
        1,17,1,17,5,17,1080,8,17,10,17,12,17,1083,9,17,1,17,1,17,1,17,1,
        17,5,17,1089,8,17,10,17,12,17,1092,9,17,1,17,1,17,3,17,1096,8,17,
        1,18,1,18,1,18,3,18,1101,8,18,1,18,1,18,1,18,5,18,1106,8,18,10,18,
        12,18,1109,9,18,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,
        1,19,1,19,5,19,1123,8,19,10,19,12,19,1126,9,19,1,19,1,19,1,20,1,
        20,3,20,1132,8,20,1,20,1,20,3,20,1136,8,20,1,20,1,20,1,20,1,20,1,
        20,1,20,1,20,1,20,3,20,1146,8,20,1,20,1,20,3,20,1150,8,20,1,20,1,
        20,3,20,1154,8,20,1,20,1,20,3,20,1158,8,20,1,20,1,20,3,20,1162,8,
        20,1,20,5,20,1165,8,20,10,20,12,20,1168,9,20,3,20,1170,8,20,1,20,
        3,20,1173,8,20,1,20,3,20,1176,8,20,1,20,3,20,1179,8,20,1,20,1,20,
        1,20,1,20,3,20,1185,8,20,1,20,1,20,3,20,1189,8,20,1,20,1,20,1,20,
        1,20,3,20,1195,8,20,1,20,5,20,1198,8,20,10,20,12,20,1201,9,20,3,
        20,1203,8,20,1,20,3,20,1206,8,20,3,20,1208,8,20,1,21,1,21,1,21,1,
        21,1,21,1,21,1,21,1,21,1,21,3,21,1219,8,21,1,21,1,21,3,21,1223,8,
        21,1,21,3,21,1226,8,21,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,
        22,1,22,1,22,1,22,3,22,1240,8,22,1,22,3,22,1243,8,22,1,22,1,22,3,
        22,1247,8,22,1,22,3,22,1250,8,22,1,22,1,22,3,22,1254,8,22,1,22,3,
        22,1257,8,22,1,22,1,22,3,22,1261,8,22,1,22,3,22,1264,8,22,1,22,1,
        22,3,22,1268,8,22,1,22,3,22,1271,8,22,1,22,3,22,1274,8,22,1,22,1,
        22,3,22,1278,8,22,1,22,3,22,1281,8,22,1,22,1,22,3,22,1285,8,22,1,
        22,1,22,1,23,1,23,3,23,1291,8,23,1,23,1,23,1,23,1,23,1,23,1,23,1,
        23,1,23,1,23,1,23,1,23,3,23,1304,8,23,1,23,1,23,1,24,1,24,3,24,1310,
        8,24,1,24,1,24,1,25,1,25,1,25,1,25,1,25,5,25,1319,8,25,10,25,12,
        25,1322,9,25,1,25,1,25,3,25,1326,8,25,1,25,1,25,1,25,1,25,1,25,1,
        25,3,25,1334,8,25,1,26,1,26,1,27,1,27,1,28,1,28,3,28,1342,8,28,1,
        28,1,28,1,28,3,28,1347,8,28,1,28,3,28,1350,8,28,1,28,1,28,1,28,3,
        28,1355,8,28,1,28,1,28,1,28,1,28,1,28,1,28,3,28,1363,8,28,1,28,1,
        28,1,28,3,28,1368,8,28,1,28,1,28,1,28,1,28,3,28,1374,8,28,1,28,1,
        28,1,28,3,28,1379,8,28,1,28,1,28,3,28,1383,8,28,3,28,1385,8,28,1,
        29,3,29,1388,8,29,1,29,1,29,3,29,1392,8,29,1,29,1,29,3,29,1396,8,
        29,1,29,3,29,1399,8,29,1,29,1,29,3,29,1403,8,29,1,29,1,29,3,29,1407,
        8,29,1,29,1,29,3,29,1411,8,29,1,29,1,29,1,29,1,29,3,29,1417,8,29,
        1,29,3,29,1420,8,29,1,30,1,30,1,30,1,30,1,30,3,30,1427,8,30,1,31,
        1,31,1,31,3,31,1432,8,31,1,32,1,32,1,32,1,32,3,32,1438,8,32,1,33,
        1,33,1,33,5,33,1443,8,33,10,33,12,33,1446,9,33,1,33,1,33,1,33,3,
        33,1451,8,33,1,33,1,33,1,33,1,33,5,33,1457,8,33,10,33,12,33,1460,
        9,33,3,33,1462,8,33,1,33,1,33,1,33,5,33,1467,8,33,10,33,12,33,1470,
        9,33,3,33,1472,8,33,3,33,1474,8,33,1,34,1,34,1,34,1,34,3,34,1480,
        8,34,1,35,1,35,1,35,1,35,3,35,1486,8,35,1,35,1,35,1,36,1,36,1,36,
        1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,3,36,1503,8,36,
        1,37,1,37,1,37,1,37,1,37,3,37,1510,8,37,1,38,1,38,1,38,1,39,1,39,
        3,39,1517,8,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,
        3,39,1529,8,39,1,39,1,39,1,39,3,39,1534,8,39,1,39,3,39,1537,8,39,
        1,40,3,40,1540,8,40,1,40,1,40,1,40,1,41,1,41,1,41,1,42,1,42,1,42,
        1,42,1,42,3,42,1553,8,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,
        1,42,1,42,1,42,3,42,1566,8,42,1,42,1,42,1,42,3,42,1571,8,42,1,43,
        1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,
        3,43,1587,8,43,1,44,1,44,1,44,1,44,5,44,1593,8,44,10,44,12,44,1596,
        9,44,1,44,1,44,1,45,1,45,1,45,1,45,1,45,3,45,1605,8,45,1,45,3,45,
        1608,8,45,1,45,3,45,1611,8,45,1,46,1,46,5,46,1615,8,46,10,46,12,
        46,1618,9,46,1,46,3,46,1621,8,46,1,46,3,46,1624,8,46,1,47,1,47,1,
        47,1,47,1,47,1,47,1,47,1,47,1,47,3,47,1635,8,47,1,47,3,47,1638,8,
        47,1,47,1,47,1,47,3,47,1643,8,47,1,47,1,47,1,47,1,47,1,47,1,47,1,
        47,1,47,1,47,1,47,1,47,3,47,1656,8,47,1,47,1,47,1,47,1,47,1,47,3,
        47,1663,8,47,1,47,1,47,1,47,1,47,1,47,3,47,1670,8,47,3,47,1672,8,
        47,1,47,1,47,1,47,1,47,1,47,3,47,1679,8,47,1,48,1,48,3,48,1683,8,
        48,3,48,1685,8,48,1,48,1,48,1,48,3,48,1690,8,48,1,48,3,48,1693,8,
        48,1,48,1,48,5,48,1697,8,48,10,48,12,48,1700,9,48,1,48,1,48,3,48,
        1704,8,48,3,48,1706,8,48,1,48,1,48,3,48,1710,8,48,1,48,3,48,1713,
        8,48,1,48,3,48,1716,8,48,1,48,1,48,5,48,1720,8,48,10,48,12,48,1723,
        9,48,1,48,1,48,3,48,1727,8,48,3,48,1729,8,48,1,48,1,48,1,48,3,48,
        1734,8,48,1,48,1,48,1,48,1,48,1,48,3,48,1741,8,48,3,48,1743,8,48,
        1,48,1,48,1,48,1,48,1,48,3,48,1750,8,48,1,49,1,49,1,49,3,49,1755,
        8,49,1,49,1,49,3,49,1759,8,49,1,49,3,49,1762,8,49,1,50,1,50,1,50,
        1,50,1,50,1,50,3,50,1770,8,50,1,50,1,50,1,50,1,50,1,50,1,50,3,50,
        1778,8,50,3,50,1780,8,50,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,
        3,51,1790,8,51,1,52,1,52,3,52,1794,8,52,1,52,3,52,1797,8,52,1,52,
        1,52,5,52,1801,8,52,10,52,12,52,1804,9,52,1,52,1,52,3,52,1808,8,
        52,1,52,3,52,1811,8,52,1,52,1,52,5,52,1815,8,52,10,52,12,52,1818,
        9,52,3,52,1820,8,52,1,53,1,53,3,53,1824,8,53,1,53,3,53,1827,8,53,
        1,53,1,53,3,53,1831,8,53,1,53,1,53,1,53,3,53,1836,8,53,1,53,1,53,
        1,53,3,53,1841,8,53,1,53,1,53,1,53,3,53,1846,8,53,1,53,1,53,3,53,
        1850,8,53,1,53,1,53,3,53,1854,8,53,1,53,1,53,3,53,1858,8,53,1,53,
        1,53,3,53,1862,8,53,1,53,1,53,3,53,1866,8,53,1,53,1,53,3,53,1870,
        8,53,1,53,1,53,1,53,3,53,1875,8,53,1,53,1,53,1,53,3,53,1880,8,53,
        1,53,1,53,1,53,3,53,1885,8,53,1,53,1,53,1,53,1,53,3,53,1891,8,53,
        1,53,1,53,1,53,3,53,1896,8,53,1,53,1,53,1,53,3,53,1901,8,53,1,53,
        1,53,1,53,3,53,1906,8,53,1,53,1,53,1,53,3,53,1911,8,53,1,53,1,53,
        1,53,3,53,1916,8,53,1,53,1,53,1,53,1,53,3,53,1922,8,53,1,53,1,53,
        1,53,3,53,1927,8,53,1,53,1,53,1,53,3,53,1932,8,53,1,53,1,53,1,53,
        3,53,1937,8,53,1,53,1,53,1,53,3,53,1942,8,53,1,53,1,53,1,53,3,53,
        1947,8,53,1,53,1,53,1,53,3,53,1952,8,53,1,53,1,53,1,53,3,53,1957,
        8,53,1,53,1,53,1,53,1,53,1,53,3,53,1964,8,53,1,53,1,53,1,53,3,53,
        1969,8,53,1,53,1,53,1,53,3,53,1974,8,53,1,53,1,53,1,53,3,53,1979,
        8,53,1,53,1,53,3,53,1983,8,53,1,53,1,53,1,53,3,53,1988,8,53,1,53,
        1,53,1,53,1,53,1,53,1,53,3,53,1996,8,53,1,53,1,53,1,53,3,53,2001,
        8,53,1,53,1,53,1,53,1,53,3,53,2007,8,53,1,54,1,54,1,55,1,55,1,55,
        1,56,1,56,1,56,1,56,1,56,3,56,2019,8,56,1,56,1,56,1,56,1,56,1,56,
        3,56,2026,8,56,3,56,2028,8,56,1,56,1,56,1,56,1,56,5,56,2034,8,56,
        10,56,12,56,2037,9,56,1,56,1,56,3,56,2041,8,56,1,57,3,57,2044,8,
        57,1,57,1,57,1,57,1,57,1,57,1,57,3,57,2052,8,57,1,57,1,57,1,57,1,
        57,3,57,2058,8,57,1,57,1,57,3,57,2062,8,57,1,57,1,57,1,57,1,57,1,
        57,1,57,1,57,1,57,1,57,1,57,1,57,3,57,2075,8,57,1,57,1,57,1,57,1,
        57,1,57,1,57,1,57,1,57,1,57,1,57,3,57,2087,8,57,3,57,2089,8,57,1,
        58,3,58,2092,8,58,1,58,1,58,1,58,1,58,1,58,1,58,3,58,2100,8,58,1,
        58,1,58,1,58,1,58,3,58,2106,8,58,1,58,1,58,1,58,1,58,3,58,2112,8,
        58,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,5,59,2123,8,59,10,
        59,12,59,2126,9,59,1,59,1,59,5,59,2130,8,59,10,59,12,59,2133,9,59,
        1,59,1,59,1,59,1,59,5,59,2139,8,59,10,59,12,59,2142,9,59,1,59,1,
        59,3,59,2146,8,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,5,59,2155,8,
        59,10,59,12,59,2158,9,59,1,59,1,59,1,59,1,59,5,59,2164,8,59,10,59,
        12,59,2167,9,59,1,59,1,59,3,59,2171,8,59,1,59,1,59,1,59,1,59,1,59,
        1,59,1,59,1,59,5,59,2181,8,59,10,59,12,59,2184,9,59,1,59,1,59,5,
        59,2188,8,59,10,59,12,59,2191,9,59,1,59,1,59,1,59,1,59,5,59,2197,
        8,59,10,59,12,59,2200,9,59,1,59,1,59,3,59,2204,8,59,1,59,1,59,1,
        59,1,59,1,59,1,59,1,59,1,59,5,59,2214,8,59,10,59,12,59,2217,9,59,
        1,59,1,59,5,59,2221,8,59,10,59,12,59,2224,9,59,1,59,1,59,1,59,1,
        59,5,59,2230,8,59,10,59,12,59,2233,9,59,1,59,1,59,3,59,2237,8,59,
        1,59,1,59,1,59,5,59,2242,8,59,10,59,12,59,2245,9,59,1,59,1,59,1,
        59,1,59,5,59,2251,8,59,10,59,12,59,2254,9,59,1,59,1,59,3,59,2258,
        8,59,3,59,2260,8,59,1,60,1,60,1,60,3,60,2265,8,60,1,61,1,61,1,61,
        1,61,4,61,2271,8,61,11,61,12,61,2272,1,61,1,61,1,62,1,62,1,62,5,
        62,2280,8,62,10,62,12,62,2283,9,62,1,63,3,63,2286,8,63,1,63,3,63,
        2289,8,63,1,63,1,63,3,63,2293,8,63,1,63,1,63,1,63,3,63,2298,8,63,
        1,63,1,63,1,63,1,63,3,63,2304,8,63,1,63,1,63,1,63,1,63,3,63,2310,
        8,63,1,63,1,63,1,63,3,63,2315,8,63,1,63,1,63,1,63,3,63,2320,8,63,
        1,63,1,63,1,63,3,63,2325,8,63,1,63,1,63,1,63,3,63,2330,8,63,1,63,
        3,63,2333,8,63,1,64,1,64,1,64,3,64,2338,8,64,1,64,4,64,2341,8,64,
        11,64,12,64,2342,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,3,64,2353,
        8,64,1,65,1,65,3,65,2357,8,65,1,65,1,65,1,65,1,65,1,65,3,65,2364,
        8,65,1,65,1,65,1,65,3,65,2369,8,65,1,65,3,65,2372,8,65,1,65,1,65,
        1,65,3,65,2377,8,65,1,65,3,65,2380,8,65,1,65,1,65,3,65,2384,8,65,
        1,65,1,65,3,65,2388,8,65,1,66,1,66,1,66,1,66,5,66,2394,8,66,10,66,
        12,66,2397,9,66,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,68,1,68,1,68,
        1,68,1,68,1,68,1,68,1,68,1,68,3,68,2415,8,68,1,68,3,68,2418,8,68,
        1,68,3,68,2421,8,68,1,68,1,68,3,68,2425,8,68,1,68,1,68,1,69,1,69,
        1,69,1,69,5,69,2433,8,69,10,69,12,69,2436,9,69,1,70,1,70,1,70,1,
        70,1,70,1,70,1,70,1,70,5,70,2446,8,70,10,70,12,70,2449,9,70,1,70,
        1,70,1,71,1,71,3,71,2455,8,71,1,71,3,71,2458,8,71,1,71,1,71,1,71,
        3,71,2463,8,71,1,71,1,71,1,71,5,71,2468,8,71,10,71,12,71,2471,9,
        71,3,71,2473,8,71,1,71,3,71,2476,8,71,1,72,1,72,1,72,1,72,1,72,1,
        72,1,72,1,72,1,72,3,72,2487,8,72,1,72,3,72,2490,8,72,1,72,1,72,3,
        72,2494,8,72,1,72,1,72,1,73,1,73,1,73,1,73,3,73,2502,8,73,1,73,3,
        73,2505,8,73,1,73,1,73,1,73,3,73,2510,8,73,1,73,1,73,1,73,1,73,1,
        73,1,73,3,73,2518,8,73,1,73,1,73,1,73,1,73,3,73,2524,8,73,1,73,1,
        73,3,73,2528,8,73,1,74,1,74,3,74,2532,8,74,1,74,5,74,2535,8,74,10,
        74,12,74,2538,9,74,1,74,1,74,3,74,2542,8,74,1,74,1,74,1,74,1,74,
        1,74,3,74,2549,8,74,1,74,1,74,3,74,2553,8,74,1,74,1,74,1,74,1,74,
        1,74,1,74,1,74,5,74,2562,8,74,10,74,12,74,2565,9,74,1,74,1,74,1,
        74,1,74,1,74,3,74,2572,8,74,1,74,3,74,2575,8,74,1,74,1,74,5,74,2579,
        8,74,10,74,12,74,2582,9,74,1,74,1,74,1,74,3,74,2587,8,74,3,74,2589,
        8,74,1,74,1,74,1,74,3,74,2594,8,74,1,74,3,74,2597,8,74,1,74,1,74,
        5,74,2601,8,74,10,74,12,74,2604,9,74,1,74,1,74,1,74,3,74,2609,8,
        74,3,74,2611,8,74,1,74,1,74,3,74,2615,8,74,1,74,3,74,2618,8,74,1,
        74,3,74,2621,8,74,1,74,1,74,5,74,2625,8,74,10,74,12,74,2628,9,74,
        1,74,1,74,1,74,3,74,2633,8,74,1,74,3,74,2636,8,74,1,74,1,74,5,74,
        2640,8,74,10,74,12,74,2643,9,74,1,74,1,74,1,74,3,74,2648,8,74,3,
        74,2650,8,74,1,74,1,74,1,74,3,74,2655,8,74,1,74,1,74,1,74,1,74,1,
        74,1,74,3,74,2663,8,74,3,74,2665,8,74,1,74,1,74,1,74,1,74,1,74,1,
        74,1,74,3,74,2674,8,74,1,74,3,74,2677,8,74,1,74,3,74,2680,8,74,1,
        74,1,74,1,74,3,74,2685,8,74,3,74,2687,8,74,1,74,1,74,1,74,1,74,1,
        74,1,74,1,74,3,74,2696,8,74,1,74,3,74,2699,8,74,1,74,3,74,2702,8,
        74,1,74,1,74,1,74,3,74,2707,8,74,3,74,2709,8,74,1,74,1,74,1,74,1,
        74,1,74,1,74,1,74,3,74,2718,8,74,1,74,1,74,1,74,3,74,2723,8,74,1,
        74,1,74,1,74,1,74,1,74,1,74,3,74,2731,8,74,1,74,1,74,3,74,2735,8,
        74,1,74,1,74,1,74,1,74,1,74,1,74,3,74,2743,8,74,1,74,1,74,1,74,1,
        74,1,74,1,74,1,74,1,74,3,74,2753,8,74,1,74,1,74,1,74,3,74,2758,8,
        74,1,74,1,74,1,74,1,74,1,74,3,74,2765,8,74,1,74,1,74,3,74,2769,8,
        74,1,74,1,74,3,74,2773,8,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,
        74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,3,74,2792,8,74,1,
        74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,3,74,2802,8,74,1,74,1,74,1,
        74,1,74,3,74,2808,8,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,
        74,1,74,1,74,1,74,1,74,1,74,1,74,3,74,2825,8,74,1,74,1,74,3,74,2829,
        8,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,3,74,2839,8,74,1,74,
        1,74,1,74,3,74,2844,8,74,1,74,3,74,2847,8,74,1,74,1,74,1,74,1,74,
        1,74,1,74,1,74,3,74,2856,8,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,
        1,74,1,74,3,74,2867,8,74,1,74,1,74,1,74,1,74,5,74,2873,8,74,10,74,
        12,74,2876,9,74,1,74,1,74,1,74,3,74,2881,8,74,1,75,1,75,1,75,1,75,
        1,75,1,75,5,75,2889,8,75,10,75,12,75,2892,9,75,1,75,1,75,1,75,1,
        75,1,75,1,75,1,75,1,75,1,75,3,75,2903,8,75,1,75,1,75,1,75,1,75,1,
        75,3,75,2910,8,75,1,75,1,75,1,75,1,75,1,75,3,75,2917,8,75,1,75,1,
        75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,5,75,2930,8,75,10,
        75,12,75,2933,9,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,
        1,75,3,75,2945,8,75,1,75,1,75,1,75,1,75,3,75,2951,8,75,1,75,1,75,
        1,75,1,75,3,75,2957,8,75,1,75,1,75,1,75,1,75,3,75,2963,8,75,1,75,
        1,75,1,75,1,75,3,75,2969,8,75,1,75,1,75,1,75,1,75,3,75,2975,8,75,
        1,75,1,75,1,75,1,75,3,75,2981,8,75,1,76,1,76,1,76,3,76,2986,8,76,
        1,76,1,76,1,77,1,77,1,77,3,77,2993,8,77,1,77,1,77,1,78,1,78,1,78,
        3,78,3000,8,78,1,78,1,78,1,78,1,78,1,78,3,78,3007,8,78,1,78,1,78,
        1,78,3,78,3012,8,78,1,78,5,78,3015,8,78,10,78,12,78,3018,9,78,1,
        79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,80,1,80,1,80,3,80,3031,8,
        80,1,80,1,80,1,81,1,81,1,81,3,81,3038,8,81,1,81,1,81,1,82,1,82,1,
        82,3,82,3045,8,82,1,82,1,82,1,83,1,83,3,83,3051,8,83,1,83,1,83,3,
        83,3055,8,83,1,83,1,83,3,83,3059,8,83,1,84,1,84,1,84,1,84,1,84,3,
        84,3066,8,84,1,84,3,84,3069,8,84,1,85,1,85,1,85,3,85,3074,8,85,1,
        85,1,85,1,86,1,86,1,86,3,86,3081,8,86,1,86,1,86,1,86,5,86,3086,8,
        86,10,86,12,86,3089,9,86,1,86,3,86,3092,8,86,1,87,1,87,1,87,3,87,
        3097,8,87,1,87,1,87,1,87,5,87,3102,8,87,10,87,12,87,3105,9,87,1,
        88,1,88,1,88,1,88,1,88,1,88,1,88,1,88,5,88,3115,8,88,10,88,12,88,
        3118,9,88,3,88,3120,8,88,1,88,1,88,1,88,3,88,3125,8,88,1,88,1,88,
        1,88,3,88,3130,8,88,5,88,3132,8,88,10,88,12,88,3135,9,88,1,88,1,
        88,1,88,3,88,3140,8,88,1,89,1,89,1,89,1,89,1,89,5,89,3147,8,89,10,
        89,12,89,3150,9,89,1,90,1,90,1,90,1,90,1,91,1,91,3,91,3158,8,91,
        1,91,1,91,1,92,1,92,1,92,1,92,1,92,3,92,3167,8,92,1,92,3,92,3170,
        8,92,1,93,1,93,3,93,3174,8,93,1,94,1,94,1,94,1,95,1,95,1,95,1,95,
        3,95,3183,8,95,1,96,1,96,3,96,3187,8,96,1,96,3,96,3190,8,96,1,96,
        3,96,3193,8,96,1,96,1,96,1,96,1,96,3,96,3199,8,96,1,96,3,96,3202,
        8,96,1,96,1,96,3,96,3206,8,96,1,96,3,96,3209,8,96,1,96,1,96,3,96,
        3213,8,96,1,96,3,96,3216,8,96,1,96,1,96,1,96,1,96,5,96,3222,8,96,
        10,96,12,96,3225,9,96,3,96,3227,8,96,1,96,1,96,1,96,1,96,1,96,1,
        96,1,96,5,96,3236,8,96,10,96,12,96,3239,9,96,3,96,3241,8,96,1,97,
        1,97,1,97,3,97,3246,8,97,1,97,3,97,3249,8,97,1,97,1,97,1,97,3,97,
        3254,8,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,3,97,3264,8,97,
        1,97,1,97,1,97,3,97,3269,8,97,1,97,1,97,4,97,3273,8,97,11,97,12,
        97,3274,3,97,3277,8,97,1,97,1,97,4,97,3281,8,97,11,97,12,97,3282,
        3,97,3285,8,97,1,97,1,97,1,97,1,97,3,97,3291,8,97,1,97,1,97,1,97,
        1,97,5,97,3297,8,97,10,97,12,97,3300,9,97,1,97,1,97,3,97,3304,8,
        97,1,97,1,97,1,97,1,97,5,97,3310,8,97,10,97,12,97,3313,9,97,3,97,
        3315,8,97,1,98,1,98,1,98,3,98,3320,8,98,1,98,3,98,3323,8,98,1,98,
        1,98,1,98,3,98,3328,8,98,1,98,1,98,1,98,1,98,1,98,1,98,3,98,3336,
        8,98,1,98,1,98,1,98,1,98,1,98,1,98,3,98,3344,8,98,1,98,1,98,1,98,
        1,98,3,98,3350,8,98,1,98,1,98,1,98,1,98,5,98,3356,8,98,10,98,12,
        98,3359,9,98,1,98,1,98,3,98,3363,8,98,1,98,1,98,1,98,1,98,5,98,3369,
        8,98,10,98,12,98,3372,9,98,3,98,3374,8,98,1,99,1,99,3,99,3378,8,
        99,1,99,3,99,3381,8,99,1,99,1,99,1,99,1,99,1,99,1,99,3,99,3389,8,
        99,1,99,1,99,1,99,1,99,3,99,3395,8,99,1,99,1,99,1,99,1,99,1,99,5,
        99,3402,8,99,10,99,12,99,3405,9,99,3,99,3407,8,99,1,100,1,100,3,
        100,3411,8,100,1,100,1,100,3,100,3415,8,100,1,100,1,100,3,100,3419,
        8,100,1,100,4,100,3422,8,100,11,100,12,100,3423,1,100,1,100,3,100,
        3428,8,100,1,100,1,100,3,100,3432,8,100,3,100,3434,8,100,1,100,3,
        100,3437,8,100,1,100,3,100,3440,8,100,1,100,3,100,3443,8,100,1,100,
        1,100,4,100,3447,8,100,11,100,12,100,3448,1,100,1,100,3,100,3453,
        8,100,1,100,3,100,3456,8,100,1,100,3,100,3459,8,100,1,100,3,100,
        3462,8,100,1,100,3,100,3465,8,100,1,100,1,100,1,100,4,100,3470,8,
        100,11,100,12,100,3471,3,100,3474,8,100,1,101,1,101,3,101,3478,8,
        101,1,102,1,102,1,102,3,102,3483,8,102,1,102,1,102,1,102,1,102,3,
        102,3489,8,102,1,102,5,102,3492,8,102,10,102,12,102,3495,9,102,1,
        103,1,103,1,103,1,103,3,103,3501,8,103,1,103,1,103,1,103,1,103,3,
        103,3507,8,103,1,103,5,103,3510,8,103,10,103,12,103,3513,9,103,3,
        103,3515,8,103,1,104,1,104,1,104,1,104,3,104,3521,8,104,1,105,1,
        105,3,105,3525,8,105,1,106,1,106,1,106,1,106,1,106,1,106,3,106,3533,
        8,106,1,107,1,107,3,107,3537,8,107,1,107,3,107,3540,8,107,1,107,
        3,107,3543,8,107,1,107,1,107,1,107,3,107,3548,8,107,1,107,3,107,
        3551,8,107,1,107,1,107,1,107,1,107,1,107,3,107,3558,8,107,1,107,
        1,107,3,107,3562,8,107,1,107,3,107,3565,8,107,1,107,1,107,3,107,
        3569,8,107,1,108,1,108,3,108,3573,8,108,1,108,3,108,3576,8,108,1,
        108,3,108,3579,8,108,1,108,1,108,1,108,3,108,3584,8,108,1,108,1,
        108,1,108,1,108,3,108,3590,8,108,5,108,3592,8,108,10,108,12,108,
        3595,9,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,3,108,3604,
        8,108,1,108,1,108,1,108,1,108,3,108,3610,8,108,5,108,3612,8,108,
        10,108,12,108,3615,9,108,1,108,1,108,1,108,3,108,3620,8,108,1,108,
        1,108,3,108,3624,8,108,1,109,1,109,1,109,1,109,3,109,3630,8,109,
        1,109,3,109,3633,8,109,1,110,1,110,1,110,1,110,1,110,1,110,1,110,
        1,110,1,110,1,110,3,110,3645,8,110,1,110,1,110,3,110,3649,8,110,
        1,110,1,110,3,110,3653,8,110,1,111,1,111,1,111,1,111,1,111,1,111,
        3,111,3661,8,111,1,111,1,111,3,111,3665,8,111,1,112,1,112,1,112,
        1,112,1,113,1,113,3,113,3673,8,113,1,113,3,113,3676,8,113,1,113,
        1,113,3,113,3680,8,113,1,113,3,113,3683,8,113,1,113,1,113,1,113,
        1,113,5,113,3689,8,113,10,113,12,113,3692,9,113,1,113,1,113,3,113,
        3696,8,113,1,113,3,113,3699,8,113,1,113,3,113,3702,8,113,1,114,1,
        114,3,114,3706,8,114,1,114,3,114,3709,8,114,1,114,1,114,1,114,1,
        114,1,114,5,114,3716,8,114,10,114,12,114,3719,9,114,1,114,1,114,
        3,114,3723,8,114,1,115,1,115,1,115,1,115,1,115,5,115,3730,8,115,
        10,115,12,115,3733,9,115,1,116,1,116,3,116,3737,8,116,1,117,1,117,
        1,117,5,117,3742,8,117,10,117,12,117,3745,9,117,1,118,1,118,5,118,
        3749,8,118,10,118,12,118,3752,9,118,1,118,1,118,1,118,5,118,3757,
        8,118,10,118,12,118,3760,9,118,1,118,1,118,1,118,3,118,3765,8,118,
        1,119,1,119,1,119,1,119,1,119,1,119,3,119,3773,8,119,1,119,3,119,
        3776,8,119,1,119,3,119,3779,8,119,1,119,1,119,1,119,5,119,3784,8,
        119,10,119,12,119,3787,9,119,3,119,3789,8,119,1,119,1,119,1,119,
        1,119,1,119,3,119,3796,8,119,1,119,3,119,3799,8,119,1,119,1,119,
        1,119,1,119,1,119,1,119,3,119,3807,8,119,1,120,1,120,1,120,1,120,
        3,120,3813,8,120,1,120,1,120,1,120,1,120,1,121,1,121,1,121,1,121,
        1,121,3,121,3824,8,121,1,122,3,122,3827,8,122,1,122,1,122,3,122,
        3831,8,122,1,122,1,122,5,122,3835,8,122,10,122,12,122,3838,9,122,
        1,122,1,122,1,122,1,122,5,122,3844,8,122,10,122,12,122,3847,9,122,
        1,122,1,122,3,122,3851,8,122,1,122,1,122,3,122,3855,8,122,1,122,
        1,122,5,122,3859,8,122,10,122,12,122,3862,9,122,1,122,1,122,1,122,
        3,122,3867,8,122,3,122,3869,8,122,1,122,1,122,3,122,3873,8,122,1,
        123,1,123,1,123,1,123,1,123,1,123,1,123,3,123,3882,8,123,1,124,1,
        124,1,124,1,124,1,124,1,124,1,124,1,124,3,124,3892,8,124,1,125,1,
        125,1,125,1,125,1,125,1,125,1,125,1,125,3,125,3902,8,125,1,126,1,
        126,5,126,3906,8,126,10,126,12,126,3909,9,126,1,126,1,126,3,126,
        3913,8,126,1,126,1,126,3,126,3917,8,126,1,126,3,126,3920,8,126,1,
        126,3,126,3923,8,126,1,126,3,126,3926,8,126,1,126,3,126,3929,8,126,
        1,126,1,126,5,126,3933,8,126,10,126,12,126,3936,9,126,1,126,1,126,
        1,126,3,126,3941,8,126,1,126,3,126,3944,8,126,1,126,3,126,3947,8,
        126,1,126,3,126,3950,8,126,1,126,3,126,3953,8,126,1,126,3,126,3956,
        8,126,3,126,3958,8,126,1,127,1,127,5,127,3962,8,127,10,127,12,127,
        3965,9,127,1,127,1,127,1,127,3,127,3970,8,127,1,127,3,127,3973,8,
        127,1,127,3,127,3976,8,127,1,127,3,127,3979,8,127,1,127,3,127,3982,
        8,127,1,127,3,127,3985,8,127,1,128,1,128,3,128,3989,8,128,1,128,
        1,128,1,129,1,129,3,129,3995,8,129,1,129,1,129,3,129,3999,8,129,
        1,130,1,130,1,130,1,130,1,130,1,130,3,130,4007,8,130,1,130,1,130,
        3,130,4011,8,130,1,130,3,130,4014,8,130,3,130,4016,8,130,1,131,1,
        131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,3,131,
        4029,8,131,1,131,3,131,4032,8,131,1,132,1,132,1,132,5,132,4037,8,
        132,10,132,12,132,4040,9,132,1,133,1,133,1,133,1,133,1,133,1,133,
        1,133,3,133,4049,8,133,1,133,3,133,4052,8,133,1,133,1,133,1,133,
        3,133,4057,8,133,3,133,4059,8,133,1,133,1,133,3,133,4063,8,133,1,
        133,1,133,1,133,1,133,1,133,1,133,3,133,4071,8,133,1,134,1,134,1,
        134,1,134,3,134,4077,8,134,1,134,1,134,1,134,1,135,1,135,1,135,1,
        135,3,135,4086,8,135,1,135,1,135,1,135,1,136,1,136,1,136,1,136,1,
        136,1,136,1,136,1,136,3,136,4099,8,136,1,137,1,137,3,137,4103,8,
        137,1,137,1,137,5,137,4107,8,137,10,137,12,137,4110,9,137,1,138,
        1,138,1,138,1,138,1,138,1,138,3,138,4118,8,138,1,138,3,138,4121,
        8,138,1,138,1,138,3,138,4125,8,138,1,138,3,138,4128,8,138,1,138,
        1,138,3,138,4132,8,138,1,138,1,138,3,138,4136,8,138,1,138,3,138,
        4139,8,138,3,138,4141,8,138,1,139,1,139,1,139,1,139,5,139,4147,8,
        139,10,139,12,139,4150,9,139,1,139,1,139,1,139,1,139,1,139,1,139,
        1,139,1,139,1,139,3,139,4161,8,139,1,139,1,139,4,139,4165,8,139,
        11,139,12,139,4166,3,139,4169,8,139,1,139,1,139,4,139,4173,8,139,
        11,139,12,139,4174,3,139,4177,8,139,3,139,4179,8,139,1,140,1,140,
        1,140,1,140,3,140,4185,8,140,1,140,1,140,1,140,1,140,1,140,1,140,
        3,140,4193,8,140,1,141,1,141,1,141,1,141,1,141,1,141,3,141,4201,
        8,141,1,142,1,142,3,142,4205,8,142,1,142,1,142,3,142,4209,8,142,
        1,143,1,143,1,143,1,143,1,143,5,143,4216,8,143,10,143,12,143,4219,
        9,143,1,143,1,143,3,143,4223,8,143,1,144,1,144,1,144,1,145,1,145,
        1,145,1,145,1,145,1,145,1,145,1,145,1,145,1,145,1,145,1,145,1,145,
        5,145,4241,8,145,10,145,12,145,4244,9,145,1,146,1,146,3,146,4248,
        8,146,1,147,1,147,1,147,1,147,3,147,4254,8,147,1,147,1,147,1,147,
        1,147,1,147,3,147,4261,8,147,1,148,1,148,1,148,3,148,4266,8,148,
        1,149,1,149,1,149,1,149,1,149,5,149,4273,8,149,10,149,12,149,4276,
        9,149,3,149,4278,8,149,1,150,1,150,3,150,4282,8,150,1,151,1,151,
        3,151,4286,8,151,1,151,1,151,3,151,4290,8,151,1,151,3,151,4293,8,
        151,1,151,3,151,4296,8,151,1,151,3,151,4299,8,151,1,152,1,152,3,
        152,4303,8,152,1,152,1,152,3,152,4307,8,152,1,152,3,152,4310,8,152,
        1,152,3,152,4313,8,152,1,152,3,152,4316,8,152,1,153,1,153,1,153,
        1,154,1,154,3,154,4323,8,154,1,154,1,154,3,154,4327,8,154,1,154,
        1,154,1,155,1,155,1,155,1,155,1,156,1,156,1,156,1,156,1,156,5,156,
        4340,8,156,10,156,12,156,4343,9,156,1,156,3,156,4346,8,156,1,157,
        1,157,1,157,1,158,1,158,1,158,1,158,1,158,1,159,1,159,3,159,4358,
        8,159,1,159,1,159,1,159,1,159,5,159,4364,8,159,10,159,12,159,4367,
        9,159,1,160,1,160,1,160,1,160,1,160,1,160,1,160,3,160,4376,8,160,
        1,161,1,161,3,161,4380,8,161,1,161,3,161,4383,8,161,1,161,1,161,
        1,162,1,162,3,162,4389,8,162,1,162,3,162,4392,8,162,1,162,3,162,
        4395,8,162,1,163,1,163,1,163,1,163,1,163,1,163,1,163,3,163,4404,
        8,163,1,164,1,164,1,164,1,164,1,164,1,164,1,164,3,164,4413,8,164,
        1,165,1,165,1,165,1,165,1,165,1,165,5,165,4421,8,165,10,165,12,165,
        4424,9,165,1,165,3,165,4427,8,165,1,166,1,166,1,166,1,166,1,166,
        1,166,5,166,4435,8,166,10,166,12,166,4438,9,166,1,167,1,167,1,167,
        1,167,1,167,1,167,1,167,3,167,4447,8,167,1,168,1,168,1,168,1,169,
        1,169,1,169,3,169,4455,8,169,1,169,3,169,4458,8,169,1,170,1,170,
        1,170,1,170,1,170,5,170,4465,8,170,10,170,12,170,4468,9,170,3,170,
        4470,8,170,1,170,1,170,3,170,4474,8,170,1,170,5,170,4477,8,170,10,
        170,12,170,4480,9,170,1,170,3,170,4483,8,170,1,171,1,171,1,171,1,
        171,1,171,5,171,4490,8,171,10,171,12,171,4493,9,171,3,171,4495,8,
        171,1,172,1,172,1,172,1,173,1,173,1,173,1,174,1,174,1,174,1,174,
        1,174,1,174,1,174,1,174,1,174,1,174,1,174,1,174,1,174,1,174,1,174,
        1,174,1,174,1,174,1,174,1,174,1,174,5,174,4524,8,174,10,174,12,174,
        4527,9,174,3,174,4529,8,174,1,174,3,174,4532,8,174,1,175,1,175,1,
        176,1,176,1,177,1,177,1,178,1,178,1,178,1,178,1,179,1,179,1,179,
        1,179,1,179,1,179,1,179,1,179,1,179,1,179,1,179,1,179,1,179,1,179,
        1,179,1,179,1,179,1,179,1,179,1,179,1,179,1,179,1,179,1,179,1,179,
        1,179,1,179,1,179,1,179,1,179,1,179,1,179,1,179,1,179,1,179,1,179,
        1,179,1,179,1,179,1,179,1,179,1,179,5,179,4586,8,179,10,179,12,179,
        4589,9,179,1,179,1,179,3,179,4593,8,179,1,180,1,180,1,180,1,180,
        1,180,1,180,1,181,1,181,1,182,1,182,1,182,1,182,1,182,1,182,1,182,
        1,182,1,182,1,182,1,182,1,182,1,182,1,182,1,182,1,182,1,182,1,182,
        3,182,4621,8,182,1,183,1,183,1,183,1,183,1,183,1,183,1,183,1,183,
        1,183,1,183,1,183,1,183,3,183,4635,8,183,1,184,1,184,1,184,5,184,
        4640,8,184,10,184,12,184,4643,9,184,1,184,3,184,4646,8,184,1,185,
        1,185,1,185,1,185,3,185,4652,8,185,1,186,1,186,1,186,1,186,1,186,
        1,186,3,186,4660,8,186,3,186,4662,8,186,1,187,1,187,1,187,1,187,
        1,188,1,188,1,188,1,188,1,188,3,188,4673,8,188,1,189,1,189,1,189,
        1,189,1,190,1,190,1,190,1,190,3,190,4683,8,190,1,191,1,191,1,191,
        1,191,1,191,3,191,4690,8,191,1,192,1,192,1,192,1,192,3,192,4696,
        8,192,1,193,1,193,1,193,1,193,1,194,1,194,3,194,4704,8,194,1,195,
        1,195,1,195,3,195,4709,8,195,1,195,1,195,1,195,1,195,5,195,4715,
        8,195,10,195,12,195,4718,9,195,1,195,1,195,1,195,5,195,4723,8,195,
        10,195,12,195,4726,9,195,1,195,1,195,1,195,5,195,4731,8,195,10,195,
        12,195,4734,9,195,1,195,1,195,1,195,5,195,4739,8,195,10,195,12,195,
        4742,9,195,1,195,5,195,4745,8,195,10,195,12,195,4748,9,195,1,195,
        1,195,3,195,4752,8,195,1,196,1,196,1,196,3,196,4757,8,196,1,196,
        4,196,4760,8,196,11,196,12,196,4761,1,196,1,196,4,196,4766,8,196,
        11,196,12,196,4767,3,196,4770,8,196,1,196,1,196,1,196,1,197,1,197,
        1,197,1,197,4,197,4779,8,197,11,197,12,197,4780,1,197,5,197,4784,
        8,197,10,197,12,197,4787,9,197,1,197,1,197,4,197,4791,8,197,11,197,
        12,197,4792,3,197,4795,8,197,1,197,1,197,1,197,1,198,1,198,1,198,
        1,199,1,199,1,199,1,200,1,200,1,200,3,200,4809,8,200,1,200,1,200,
        4,200,4813,8,200,11,200,12,200,4814,1,200,1,200,1,200,3,200,4820,
        8,200,1,201,1,201,1,201,3,201,4825,8,201,1,201,1,201,4,201,4829,
        8,201,11,201,12,201,4830,1,201,1,201,1,201,1,201,1,201,3,201,4838,
        8,201,1,202,1,202,1,202,1,203,1,203,1,203,3,203,4846,8,203,1,203,
        1,203,1,203,1,203,4,203,4852,8,203,11,203,12,203,4853,1,203,1,203,
        1,203,3,203,4859,8,203,1,204,1,204,1,204,1,204,3,204,4865,8,204,
        1,204,3,204,4868,8,204,1,204,1,204,1,204,1,204,1,204,1,204,3,204,
        4876,8,204,1,205,1,205,1,205,1,205,1,205,3,205,4883,8,205,1,206,
        1,206,1,206,1,206,1,206,1,206,1,206,3,206,4892,8,206,1,206,3,206,
        4895,8,206,1,207,1,207,1,207,1,207,1,207,1,207,1,208,1,208,1,208,
        1,208,1,208,1,208,1,208,5,208,4910,8,208,10,208,12,208,4913,9,208,
        1,208,1,208,1,209,1,209,1,209,3,209,4920,8,209,1,209,1,209,1,209,
        1,209,1,209,1,209,3,209,4928,8,209,1,210,1,210,3,210,4932,8,210,
        1,210,1,210,1,211,1,211,1,211,3,211,4939,8,211,1,211,1,211,4,211,
        4943,8,211,11,211,12,211,4944,1,212,1,212,1,212,1,212,4,212,4951,
        8,212,11,212,12,212,4952,1,213,1,213,1,213,1,213,1,213,5,213,4960,
        8,213,10,213,12,213,4963,9,213,1,213,1,213,1,213,3,213,4968,8,213,
        1,213,1,213,1,213,5,213,4973,8,213,10,213,12,213,4976,9,213,1,213,
        1,213,1,213,1,213,3,213,4982,8,213,1,213,5,213,4985,8,213,10,213,
        12,213,4988,9,213,3,213,4990,8,213,3,213,4992,8,213,1,213,1,213,
        4,213,4996,8,213,11,213,12,213,4997,3,213,5000,8,213,1,213,1,213,
        5,213,5004,8,213,10,213,12,213,5007,9,213,1,213,1,213,1,213,1,213,
        3,213,5013,8,213,1,213,1,213,1,213,3,213,5018,8,213,1,213,1,213,
        3,213,5022,8,213,1,213,1,213,1,213,1,213,3,213,5028,8,213,1,214,
        1,214,1,214,1,214,1,214,5,214,5035,8,214,10,214,12,214,5038,9,214,
        1,214,1,214,1,214,3,214,5043,8,214,1,214,1,214,1,214,5,214,5048,
        8,214,10,214,12,214,5051,9,214,1,214,1,214,1,214,3,214,5056,8,214,
        1,214,1,214,1,214,1,214,3,214,5062,8,214,1,214,5,214,5065,8,214,
        10,214,12,214,5068,9,214,3,214,5070,8,214,3,214,5072,8,214,1,214,
        1,214,4,214,5076,8,214,11,214,12,214,5077,3,214,5080,8,214,1,214,
        1,214,5,214,5084,8,214,10,214,12,214,5087,9,214,1,214,1,214,1,214,
        1,214,3,214,5093,8,214,3,214,5095,8,214,1,215,1,215,1,215,3,215,
        5100,8,215,1,215,1,215,1,215,5,215,5105,8,215,10,215,12,215,5108,
        9,215,1,216,1,216,1,216,1,216,5,216,5114,8,216,10,216,12,216,5117,
        9,216,1,216,1,216,3,216,5121,8,216,1,216,1,216,1,216,1,216,1,216,
        5,216,5128,8,216,10,216,12,216,5131,9,216,1,216,1,216,1,216,1,216,
        3,216,5137,8,216,1,216,5,216,5140,8,216,10,216,12,216,5143,9,216,
        3,216,5145,8,216,3,216,5147,8,216,1,216,1,216,1,216,1,216,5,216,
        5153,8,216,10,216,12,216,5156,9,216,3,216,5158,8,216,1,216,1,216,
        1,216,1,216,1,216,1,216,3,216,5166,8,216,1,216,1,216,1,216,3,216,
        5171,8,216,1,216,1,216,1,216,3,216,5176,8,216,5,216,5178,8,216,10,
        216,12,216,5181,9,216,1,216,1,216,1,216,3,216,5186,8,216,1,216,1,
        216,1,216,3,216,5191,8,216,5,216,5193,8,216,10,216,12,216,5196,9,
        216,1,216,1,216,1,216,3,216,5201,8,216,3,216,5203,8,216,1,217,1,
        217,1,217,1,217,1,217,1,217,1,217,5,217,5212,8,217,10,217,12,217,
        5215,9,217,3,217,5217,8,217,1,217,1,217,1,217,5,217,5222,8,217,10,
        217,12,217,5225,9,217,3,217,5227,8,217,1,218,1,218,1,218,1,218,1,
        218,1,218,1,218,1,218,5,218,5237,8,218,10,218,12,218,5240,9,218,
        1,218,1,218,1,218,3,218,5245,8,218,1,219,1,219,1,219,1,219,1,219,
        5,219,5252,8,219,10,219,12,219,5255,9,219,1,220,1,220,1,220,1,220,
        5,220,5261,8,220,10,220,12,220,5264,9,220,1,220,1,220,3,220,5268,
        8,220,1,220,1,220,1,220,1,220,1,220,5,220,5275,8,220,10,220,12,220,
        5278,9,220,1,220,1,220,1,220,3,220,5283,8,220,1,220,1,220,1,220,
        1,220,1,220,1,220,1,220,5,220,5292,8,220,10,220,12,220,5295,9,220,
        1,220,1,220,1,220,3,220,5300,8,220,1,220,1,220,1,220,3,220,5305,
        8,220,5,220,5307,8,220,10,220,12,220,5310,9,220,1,220,1,220,1,220,
        3,220,5315,8,220,1,220,1,220,1,220,3,220,5320,8,220,5,220,5322,8,
        220,10,220,12,220,5325,9,220,3,220,5327,8,220,1,221,1,221,1,221,
        1,221,1,221,1,221,1,221,1,221,5,221,5337,8,221,10,221,12,221,5340,
        9,221,1,222,1,222,1,222,1,222,3,222,5346,8,222,1,222,1,222,1,222,
        3,222,5351,8,222,1,223,1,223,1,223,1,224,1,224,1,224,1,224,1,224,
        1,224,1,224,1,224,1,224,1,224,1,224,1,224,1,224,1,224,1,224,1,224,
        1,224,1,224,1,224,1,224,1,224,1,224,1,224,1,224,1,224,3,224,5381,
        8,224,1,225,1,225,3,225,5385,8,225,1,225,1,225,1,225,3,225,5390,
        8,225,1,226,1,226,1,226,1,226,1,226,3,226,5397,8,226,1,226,3,226,
        5400,8,226,1,226,1,226,1,226,1,226,3,226,5406,8,226,1,227,1,227,
        1,227,1,227,1,227,1,227,1,227,1,227,3,227,5416,8,227,1,228,1,228,
        1,228,1,228,1,228,1,228,1,228,1,228,3,228,5426,8,228,1,229,1,229,
        1,229,1,229,1,229,1,229,1,229,1,229,3,229,5436,8,229,1,229,1,229,
        1,229,1,229,3,229,5442,8,229,1,229,1,229,1,229,1,229,1,229,1,229,
        1,229,3,229,5451,8,229,1,229,1,229,1,229,1,229,3,229,5457,8,229,
        1,229,1,229,1,229,1,229,1,229,3,229,5464,8,229,3,229,5466,8,229,
        1,230,1,230,1,230,1,231,1,231,1,231,1,231,1,231,3,231,5476,8,231,
        1,232,1,232,3,232,5480,8,232,1,232,1,232,3,232,5484,8,232,1,232,
        1,232,1,232,1,232,1,232,1,232,1,232,1,232,3,232,5494,8,232,1,232,
        1,232,1,232,3,232,5499,8,232,1,232,1,232,1,232,1,232,1,232,1,232,
        1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,
        1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,
        1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,
        1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,
        1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,
        1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,3,232,5571,
        8,232,1,233,1,233,1,233,1,233,1,233,1,233,1,233,1,233,1,233,1,233,
        1,233,1,233,1,233,1,233,1,233,1,233,3,233,5589,8,233,1,234,1,234,
        1,234,1,234,1,235,1,235,3,235,5597,8,235,1,235,1,235,1,235,1,235,
        1,235,1,235,1,235,1,235,5,235,5607,8,235,10,235,12,235,5610,9,235,
        1,235,1,235,1,235,1,235,3,235,5616,8,235,3,235,5618,8,235,1,235,
        1,235,1,235,1,235,1,235,1,235,5,235,5626,8,235,10,235,12,235,5629,
        9,235,3,235,5631,8,235,1,236,1,236,1,236,1,236,5,236,5637,8,236,
        10,236,12,236,5640,9,236,1,237,1,237,1,237,1,237,3,237,5646,8,237,
        1,238,1,238,3,238,5650,8,238,1,238,1,238,1,238,1,239,1,239,3,239,
        5657,8,239,1,239,1,239,1,239,3,239,5662,8,239,1,239,3,239,5665,8,
        239,1,239,3,239,5668,8,239,1,240,1,240,1,240,1,240,1,240,1,240,1,
        240,3,240,5677,8,240,1,241,1,241,3,241,5681,8,241,1,241,1,241,3,
        241,5685,8,241,1,241,1,241,1,241,1,241,1,241,1,241,1,242,1,242,1,
        242,1,242,1,242,1,242,1,243,1,243,1,243,1,243,1,244,1,244,1,244,
        1,244,1,244,3,244,5708,8,244,1,244,1,244,1,244,1,244,1,244,3,244,
        5715,8,244,5,244,5717,8,244,10,244,12,244,5720,9,244,1,244,1,244,
        1,244,1,244,3,244,5726,8,244,1,244,1,244,1,244,1,244,1,244,3,244,
        5733,8,244,1,244,3,244,5736,8,244,1,244,1,244,1,244,1,244,1,244,
        1,244,1,244,1,244,1,244,1,244,1,244,1,244,5,244,5750,8,244,10,244,
        12,244,5753,9,244,3,244,5755,8,244,1,245,1,245,1,245,1,245,1,245,
        1,245,1,245,1,245,3,245,5765,8,245,1,245,1,245,3,245,5769,8,245,
        1,245,1,245,1,245,1,245,3,245,5775,8,245,1,245,3,245,5778,8,245,
        1,245,1,245,1,245,3,245,5783,8,245,1,245,1,245,3,245,5787,8,245,
        1,245,1,245,1,245,1,245,1,245,3,245,5794,8,245,1,245,3,245,5797,
        8,245,1,245,1,245,1,245,1,245,3,245,5803,8,245,1,245,1,245,1,245,
        1,245,1,245,1,245,1,245,1,245,1,245,1,245,1,245,1,245,1,245,1,245,
        1,245,1,245,1,245,1,245,1,245,1,245,1,245,1,245,3,245,5827,8,245,
        1,245,3,245,5830,8,245,1,245,1,245,1,245,1,245,1,245,1,245,1,245,
        1,245,1,245,1,245,3,245,5842,8,245,1,245,3,245,5845,8,245,1,245,
        1,245,1,245,1,245,1,245,1,245,1,245,1,245,3,245,5855,8,245,1,245,
        1,245,1,245,1,245,1,245,1,245,3,245,5863,8,245,1,245,1,245,3,245,
        5867,8,245,1,245,1,245,1,245,1,245,1,245,3,245,5874,8,245,1,245,
        3,245,5877,8,245,1,245,1,245,1,245,1,245,1,245,5,245,5884,8,245,
        10,245,12,245,5887,9,245,1,245,1,245,1,245,3,245,5892,8,245,1,245,
        1,245,1,245,1,245,3,245,5898,8,245,1,245,1,245,1,245,1,245,1,245,
        1,245,1,245,1,245,3,245,5908,8,245,3,245,5910,8,245,1,246,1,246,
        1,246,1,246,3,246,5916,8,246,1,246,3,246,5919,8,246,1,246,3,246,
        5922,8,246,1,247,1,247,1,247,1,247,1,247,1,247,1,247,1,247,1,247,
        1,247,3,247,5934,8,247,1,247,3,247,5937,8,247,1,248,1,248,1,248,
        1,248,3,248,5943,8,248,1,249,3,249,5946,8,249,1,249,1,249,1,249,
        1,249,1,249,1,249,3,249,5954,8,249,1,249,1,249,1,249,1,249,1,249,
        1,249,3,249,5962,8,249,1,250,1,250,1,250,1,250,3,250,5968,8,250,
        1,250,1,250,3,250,5972,8,250,1,251,1,251,1,251,1,251,1,251,1,251,
        1,251,1,251,1,251,1,251,1,251,1,251,3,251,5986,8,251,1,252,1,252,
        1,252,1,253,1,253,1,253,1,253,1,253,5,253,5996,8,253,10,253,12,253,
        5999,9,253,1,253,1,253,1,253,1,253,3,253,6005,8,253,1,253,3,253,
        6008,8,253,1,253,1,253,1,253,1,254,1,254,3,254,6015,8,254,1,254,
        1,254,1,254,5,254,6020,8,254,10,254,12,254,6023,9,254,1,255,1,255,
        3,255,6027,8,255,1,255,1,255,1,256,1,256,1,256,1,256,1,256,1,256,
        1,256,5,256,6038,8,256,10,256,12,256,6041,9,256,1,257,1,257,1,257,
        1,257,1,258,1,258,1,259,1,259,3,259,6051,8,259,1,259,1,259,1,259,
        1,259,3,259,6057,8,259,1,260,1,260,1,260,3,260,6062,8,260,1,260,
        1,260,1,260,1,260,1,260,1,260,1,260,1,260,1,260,1,260,1,260,3,260,
        6075,8,260,3,260,6077,8,260,1,260,1,260,1,260,3,260,6082,8,260,1,
        260,1,260,3,260,6086,8,260,1,260,3,260,6089,8,260,3,260,6091,8,260,
        1,261,1,261,1,261,1,261,1,261,3,261,6098,8,261,1,262,1,262,1,262,
        1,262,1,262,3,262,6105,8,262,1,262,3,262,6108,8,262,1,262,3,262,
        6111,8,262,1,262,1,262,1,262,1,262,3,262,6117,8,262,1,262,1,262,
        3,262,6121,8,262,1,263,1,263,1,263,1,263,3,263,6127,8,263,1,264,
        1,264,1,264,1,264,3,264,6133,8,264,1,264,1,264,1,265,1,265,1,265,
        1,266,1,266,1,266,1,267,1,267,1,267,3,267,6146,8,267,1,267,1,267,
        1,267,3,267,6151,8,267,1,267,1,267,1,267,1,267,5,267,6157,8,267,
        10,267,12,267,6160,9,267,3,267,6162,8,267,1,268,1,268,1,268,3,268,
        6167,8,268,1,268,1,268,1,268,3,268,6172,8,268,1,268,1,268,1,268,
        1,268,5,268,6178,8,268,10,268,12,268,6181,9,268,3,268,6183,8,268,
        1,269,1,269,1,269,1,269,1,269,1,269,3,269,6191,8,269,1,270,1,270,
        3,270,6195,8,270,1,270,1,270,1,270,5,270,6200,8,270,10,270,12,270,
        6203,9,270,1,271,1,271,1,271,3,271,6208,8,271,1,271,3,271,6211,8,
        271,1,272,1,272,3,272,6215,8,272,1,272,1,272,1,272,1,272,1,272,1,
        272,1,272,1,272,1,272,5,272,6226,8,272,10,272,12,272,6229,9,272,
        1,272,1,272,1,272,3,272,6234,8,272,1,272,1,272,1,272,1,272,1,272,
        1,272,1,272,1,272,5,272,6244,8,272,10,272,12,272,6247,9,272,3,272,
        6249,8,272,1,273,1,273,1,274,1,274,1,274,1,274,1,274,3,274,6258,
        8,274,1,274,1,274,1,274,3,274,6263,8,274,1,275,1,275,1,275,1,275,
        3,275,6269,8,275,1,276,1,276,1,277,1,277,3,277,6275,8,277,1,278,
        1,278,1,278,3,278,6280,8,278,3,278,6282,8,278,1,278,3,278,6285,8,
        278,1,278,1,278,3,278,6289,8,278,3,278,6291,8,278,1,279,1,279,3,
        279,6295,8,279,1,279,1,279,1,279,1,279,3,279,6301,8,279,1,279,3,
        279,6304,8,279,1,279,3,279,6307,8,279,1,280,1,280,1,280,1,280,3,
        280,6313,8,280,1,281,1,281,1,282,1,282,1,282,1,282,1,282,3,282,6322,
        8,282,1,283,1,283,1,284,1,284,1,284,1,284,3,284,6330,8,284,1,285,
        1,285,3,285,6334,8,285,1,286,1,286,1,286,3,286,6339,8,286,1,287,
        1,287,1,288,1,288,1,288,1,288,1,288,1,288,1,288,1,288,1,288,1,288,
        1,288,1,288,1,288,1,288,4,288,6357,8,288,11,288,12,288,6358,1,289,
        1,289,1,289,1,289,1,289,3,289,6366,8,289,3,289,6368,8,289,1,290,
        1,290,1,290,4,290,6373,8,290,11,290,12,290,6374,3,290,6377,8,290,
        1,291,1,291,3,291,6381,8,291,1,292,1,292,1,292,3,292,6386,8,292,
        1,293,1,293,1,293,1,293,1,293,1,293,1,293,1,293,1,293,3,293,6397,
        8,293,1,294,1,294,1,294,3,294,6402,8,294,1,295,1,295,1,296,1,296,
        3,296,6408,8,296,1,297,3,297,6411,8,297,1,297,1,297,3,297,6415,8,
        297,1,297,4,297,6418,8,297,11,297,12,297,6419,1,297,3,297,6423,8,
        297,1,297,1,297,3,297,6427,8,297,1,297,1,297,3,297,6431,8,297,3,
        297,6433,8,297,1,298,1,298,1,299,3,299,6438,8,299,1,299,1,299,1,
        300,3,300,6443,8,300,1,300,1,300,1,301,1,301,1,301,1,301,1,301,1,
        301,1,301,1,301,1,301,3,301,6456,8,301,1,301,3,301,6459,8,301,1,
        302,1,302,3,302,6463,8,302,1,302,3,302,6466,8,302,1,302,3,302,6469,
        8,302,1,302,1,302,1,302,3,302,6474,8,302,1,302,1,302,1,302,3,302,
        6479,8,302,1,302,1,302,1,302,1,302,3,302,6485,8,302,1,302,3,302,
        6488,8,302,1,302,1,302,1,302,3,302,6493,8,302,1,302,3,302,6496,8,
        302,1,302,1,302,1,302,3,302,6501,8,302,1,302,3,302,6504,8,302,1,
        302,1,302,3,302,6508,8,302,1,302,5,302,6511,8,302,10,302,12,302,
        6514,9,302,1,302,1,302,3,302,6518,8,302,1,302,5,302,6521,8,302,10,
        302,12,302,6524,9,302,1,302,1,302,3,302,6528,8,302,1,302,3,302,6531,
        8,302,1,302,5,302,6534,8,302,10,302,12,302,6537,9,302,1,302,1,302,
        3,302,6541,8,302,1,302,5,302,6544,8,302,10,302,12,302,6547,9,302,
        1,302,1,302,1,302,3,302,6552,8,302,1,302,1,302,1,302,3,302,6557,
        8,302,1,302,1,302,1,302,3,302,6562,8,302,1,302,1,302,1,302,3,302,
        6567,8,302,1,302,1,302,3,302,6571,8,302,1,302,3,302,6574,8,302,1,
        302,1,302,1,302,3,302,6579,8,302,1,302,1,302,3,302,6583,8,302,1,
        302,1,302,3,302,6587,8,302,1,303,1,303,1,303,1,303,5,303,6593,8,
        303,10,303,12,303,6596,9,303,1,303,1,303,1,304,1,304,3,304,6602,
        8,304,1,304,1,304,3,304,6606,8,304,1,304,1,304,1,304,3,304,6611,
        8,304,1,304,1,304,1,304,3,304,6616,8,304,1,304,1,304,3,304,6620,
        8,304,3,304,6622,8,304,1,304,3,304,6625,8,304,1,305,1,305,1,305,
        1,305,1,306,1,306,1,306,1,306,1,306,1,306,1,307,1,307,1,307,1,307,
        3,307,6641,8,307,1,307,1,307,1,308,1,308,1,308,5,308,6648,8,308,
        10,308,12,308,6651,9,308,1,309,1,309,1,309,5,309,6656,8,309,10,309,
        12,309,6659,9,309,1,310,1,310,1,310,5,310,6664,8,310,10,310,12,310,
        6667,9,310,1,311,1,311,1,311,1,311,5,311,6673,8,311,10,311,12,311,
        6676,9,311,1,311,1,311,1,312,1,312,1,312,5,312,6683,8,312,10,312,
        12,312,6686,9,312,1,313,1,313,1,313,5,313,6691,8,313,10,313,12,313,
        6694,9,313,1,314,1,314,1,314,5,314,6699,8,314,10,314,12,314,6702,
        9,314,1,315,1,315,1,315,5,315,6707,8,315,10,315,12,315,6710,9,315,
        1,316,1,316,1,316,5,316,6715,8,316,10,316,12,316,6718,9,316,1,317,
        1,317,1,317,1,317,1,317,1,317,1,317,1,317,1,317,3,317,6729,8,317,
        1,317,1,317,1,317,1,317,1,317,3,317,6736,8,317,1,317,1,317,1,317,
        1,317,1,317,1,317,1,317,1,317,3,317,6746,8,317,1,318,1,318,1,318,
        3,318,6751,8,318,1,318,3,318,6754,8,318,1,318,1,318,1,318,3,318,
        6759,8,318,1,318,3,318,6762,8,318,1,319,1,319,3,319,6766,8,319,1,
        320,1,320,1,320,1,321,1,321,1,321,1,321,1,322,1,322,1,322,1,323,
        1,323,1,323,3,323,6781,8,323,1,324,1,324,1,324,1,324,1,324,1,324,
        3,324,6789,8,324,1,324,1,324,1,324,1,324,1,324,3,324,6796,8,324,
        1,324,1,324,1,324,3,324,6801,8,324,1,325,1,325,1,325,3,325,6806,
        8,325,1,325,1,325,1,325,1,325,1,325,1,325,1,325,1,325,1,325,1,325,
        1,325,1,325,1,325,1,325,1,325,1,325,1,325,1,325,1,325,1,325,1,325,
        1,325,1,325,1,325,1,325,1,325,1,325,1,325,1,325,1,325,4,325,6838,
        8,325,11,325,12,325,6839,1,325,1,325,3,325,6844,8,325,1,325,1,325,
        1,325,1,325,4,325,6850,8,325,11,325,12,325,6851,1,325,1,325,3,325,
        6856,8,325,1,325,1,325,1,325,1,325,1,325,1,325,1,325,3,325,6865,
        8,325,1,325,1,325,1,325,1,325,1,325,1,325,3,325,6873,8,325,1,325,
        1,325,1,325,3,325,6878,8,325,1,325,1,325,1,325,1,325,1,325,1,325,
        3,325,6886,8,325,1,325,1,325,1,325,3,325,6891,8,325,1,325,1,325,
        1,325,3,325,6896,8,325,3,325,6898,8,325,1,325,1,325,1,325,1,325,
        1,325,1,325,1,325,3,325,6907,8,325,1,325,1,325,1,325,3,325,6912,
        8,325,1,325,1,325,1,325,1,325,1,325,1,325,3,325,6920,8,325,1,325,
        1,325,1,325,3,325,6925,8,325,1,325,1,325,1,325,1,325,1,325,1,325,
        3,325,6933,8,325,1,325,1,325,1,325,1,325,1,325,1,325,3,325,6941,
        8,325,1,325,3,325,6944,8,325,1,325,1,325,1,325,1,325,1,325,1,325,
        1,325,1,325,3,325,6954,8,325,1,325,1,325,1,325,1,325,1,325,1,325,
        1,325,1,325,1,325,1,325,1,325,1,325,1,325,1,325,1,325,1,325,3,325,
        6972,8,325,1,325,3,325,6975,8,325,1,325,3,325,6978,8,325,1,325,1,
        325,3,325,6982,8,325,1,326,1,326,1,326,1,326,1,326,1,327,1,327,1,
        327,1,327,5,327,6993,8,327,10,327,12,327,6996,9,327,1,327,1,327,
        1,327,1,327,1,327,3,327,7003,8,327,1,328,1,328,3,328,7007,8,328,
        1,329,1,329,1,329,3,329,7012,8,329,1,329,1,329,1,329,3,329,7017,
        8,329,1,329,1,329,1,329,1,329,3,329,7023,8,329,1,329,1,329,1,329,
        3,329,7028,8,329,1,329,1,329,3,329,7032,8,329,1,329,1,329,1,329,
        3,329,7037,8,329,1,329,1,329,1,329,3,329,7042,8,329,1,329,1,329,
        1,329,3,329,7047,8,329,1,329,1,329,1,329,1,329,1,329,1,329,5,329,
        7055,8,329,10,329,12,329,7058,9,329,3,329,7060,8,329,1,329,1,329,
        3,329,7064,8,329,1,329,1,329,3,329,7068,8,329,1,330,1,330,1,330,
        1,330,1,330,3,330,7075,8,330,1,330,1,330,3,330,7079,8,330,1,330,
        1,330,1,330,1,330,1,330,1,330,1,330,1,330,1,330,1,330,1,330,1,330,
        1,330,1,330,1,330,1,330,1,330,1,330,1,330,1,330,1,330,1,330,1,330,
        1,330,1,330,1,330,1,330,3,330,7108,8,330,1,331,1,331,1,331,1,331,
        1,331,1,331,3,331,7116,8,331,1,332,3,332,7119,8,332,1,332,3,332,
        7122,8,332,1,332,3,332,7125,8,332,1,332,3,332,7128,8,332,1,333,1,
        333,1,334,1,334,1,334,1,335,1,335,1,336,1,336,3,336,7139,8,336,1,
        337,1,337,1,337,1,337,1,337,1,338,1,338,1,338,1,338,1,338,1,338,
        1,338,3,338,7153,8,338,1,339,1,339,1,339,1,339,1,339,5,339,7160,
        8,339,10,339,12,339,7163,9,339,1,340,1,340,1,340,1,340,1,340,1,340,
        1,340,1,340,1,340,1,340,1,340,1,340,1,340,1,340,1,340,1,340,1,340,
        1,340,1,340,1,340,1,340,1,340,1,340,1,340,3,340,7189,8,340,1,341,
        1,341,1,341,1,341,1,341,1,342,1,342,1,342,1,342,3,342,7200,8,342,
        1,342,1,342,1,342,1,342,1,342,3,342,7207,8,342,5,342,7209,8,342,
        10,342,12,342,7212,9,342,1,343,1,343,1,343,1,343,3,343,7218,8,343,
        1,344,1,344,1,344,1,344,1,344,1,344,3,344,7226,8,344,1,344,1,344,
        1,344,3,344,7231,8,344,1,344,1,344,1,344,1,344,5,344,7237,8,344,
        10,344,12,344,7240,9,344,1,345,1,345,1,345,1,345,1,345,1,345,1,345,
        1,345,1,345,3,345,7251,8,345,1,345,1,345,1,345,1,345,1,345,1,345,
        1,345,1,345,1,345,1,345,1,345,3,345,7264,8,345,1,345,1,345,1,345,
        1,345,3,345,7270,8,345,1,345,1,345,1,345,1,345,3,345,7276,8,345,
        1,345,1,345,1,345,1,345,1,345,1,345,1,345,1,345,1,345,1,345,1,345,
        1,345,1,345,1,345,3,345,7292,8,345,1,345,1,345,1,345,1,345,3,345,
        7298,8,345,1,345,1,345,1,345,1,345,1,345,1,345,1,345,5,345,7307,
        8,345,10,345,12,345,7310,9,345,1,346,1,346,1,346,1,346,1,346,1,346,
        1,346,1,346,1,346,1,346,1,346,1,346,1,346,1,346,1,346,1,346,1,346,
        5,346,7329,8,346,10,346,12,346,7332,9,346,1,346,1,346,1,346,1,346,
        1,346,1,346,1,346,4,346,7341,8,346,11,346,12,346,7342,1,346,1,346,
        1,346,1,346,1,346,1,346,1,346,1,346,1,346,1,346,1,346,1,346,1,346,
        1,346,1,346,3,346,7360,8,346,1,346,1,346,1,346,1,346,1,346,1,346,
        1,346,1,346,1,346,1,346,1,346,1,346,1,346,1,346,1,346,1,346,1,346,
        1,346,1,346,5,346,7381,8,346,10,346,12,346,7384,9,346,1,347,1,347,
        1,348,1,348,1,348,1,348,1,348,1,348,1,348,1,348,1,348,1,348,1,348,
        1,348,1,348,1,348,3,348,7402,8,348,1,349,1,349,1,349,1,349,1,349,
        1,349,1,349,3,349,7411,8,349,1,350,1,350,1,350,1,350,1,350,1,350,
        1,350,3,350,7420,8,350,1,351,1,351,1,352,1,352,1,353,1,353,1,353,
        1,353,1,353,3,353,7431,8,353,1,354,1,354,1,355,1,355,1,356,1,356,
        1,357,1,357,1,358,1,358,1,359,1,359,1,360,1,360,1,360,0,3,688,690,
        692,361,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,
        42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,
        86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,118,120,
        122,124,126,128,130,132,134,136,138,140,142,144,146,148,150,152,
        154,156,158,160,162,164,166,168,170,172,174,176,178,180,182,184,
        186,188,190,192,194,196,198,200,202,204,206,208,210,212,214,216,
        218,220,222,224,226,228,230,232,234,236,238,240,242,244,246,248,
        250,252,254,256,258,260,262,264,266,268,270,272,274,276,278,280,
        282,284,286,288,290,292,294,296,298,300,302,304,306,308,310,312,
        314,316,318,320,322,324,326,328,330,332,334,336,338,340,342,344,
        346,348,350,352,354,356,358,360,362,364,366,368,370,372,374,376,
        378,380,382,384,386,388,390,392,394,396,398,400,402,404,406,408,
        410,412,414,416,418,420,422,424,426,428,430,432,434,436,438,440,
        442,444,446,448,450,452,454,456,458,460,462,464,466,468,470,472,
        474,476,478,480,482,484,486,488,490,492,494,496,498,500,502,504,
        506,508,510,512,514,516,518,520,522,524,526,528,530,532,534,536,
        538,540,542,544,546,548,550,552,554,556,558,560,562,564,566,568,
        570,572,574,576,578,580,582,584,586,588,590,592,594,596,598,600,
        602,604,606,608,610,612,614,616,618,620,622,624,626,628,630,632,
        634,636,638,640,642,644,646,648,650,652,654,656,658,660,662,664,
        666,668,670,672,674,676,678,680,682,684,686,688,690,692,694,696,
        698,700,702,704,706,708,710,712,714,716,718,720,0,145,2,0,39,39,
        150,150,2,0,531,531,537,537,3,0,69,69,159,159,181,181,3,0,42,42,
        384,384,454,454,4,0,42,42,419,419,529,529,611,611,2,0,514,514,1148,
        1148,2,0,78,78,141,141,2,0,15,15,334,334,3,0,44,44,85,85,184,184,
        2,0,434,434,558,558,3,0,506,506,650,650,658,658,2,0,392,392,460,
        460,2,0,352,352,474,474,2,0,42,42,1138,1139,2,0,350,350,443,443,
        2,0,459,459,673,673,3,0,80,80,84,84,125,125,3,0,42,42,402,402,431,
        431,3,0,42,42,398,398,792,792,2,0,637,637,672,672,2,0,81,81,91,91,
        3,0,436,436,548,548,613,613,2,0,69,69,159,159,1,0,356,357,1,0,1138,
        1139,2,0,1148,1148,1156,1156,2,0,81,81,388,388,2,0,545,545,1148,
        1148,2,0,546,546,1148,1148,3,0,430,430,469,469,521,521,7,0,42,42,
        370,370,372,372,402,402,431,431,573,573,1156,1156,2,0,514,514,530,
        530,1,0,1139,1140,2,0,5,5,51,51,4,0,42,42,384,384,454,454,458,458,
        2,0,26,26,30,30,2,0,12,12,175,175,2,0,192,192,677,677,2,0,21,21,
        144,144,3,0,43,43,75,75,106,106,2,0,106,106,374,374,2,0,365,365,
        427,427,2,0,101,101,601,601,2,0,43,43,106,106,2,0,6,6,49,49,2,0,
        188,188,669,669,4,0,430,430,469,469,520,520,562,562,2,0,430,430,
        520,520,2,0,13,13,45,45,3,0,66,66,78,78,186,186,2,0,34,34,83,83,
        2,0,97,97,148,148,2,0,6,6,49,50,1,0,626,627,1,0,1162,1163,2,0,172,
        172,742,742,2,0,439,439,609,609,2,0,226,226,477,477,5,0,107,107,
        482,483,485,485,489,497,575,575,4,0,479,480,484,484,486,487,576,
        576,3,0,108,108,478,478,488,488,2,0,462,462,628,628,2,0,622,622,
        624,624,2,0,344,344,629,629,2,0,90,90,591,591,2,0,51,51,390,390,
        3,0,31,31,61,61,179,179,3,0,131,131,172,172,437,437,3,0,12,12,19,
        19,187,187,2,0,42,42,121,121,2,0,103,103,182,182,2,0,360,360,614,
        614,2,0,40,40,671,671,2,0,115,115,474,474,2,0,422,422,568,568,4,
        0,206,206,208,208,214,214,638,638,2,0,1108,1108,1124,1124,2,0,345,
        345,577,577,2,0,68,68,80,80,6,0,131,131,172,172,177,177,415,415,
        437,437,671,671,2,0,513,513,634,634,2,0,412,412,675,675,2,0,131,
        131,437,437,3,0,81,81,92,92,452,452,3,0,439,439,474,474,609,609,
        2,0,634,634,670,670,2,0,376,376,567,567,6,0,226,226,409,409,411,
        411,438,438,574,574,615,615,2,0,45,46,62,62,3,0,422,422,550,550,
        885,885,2,0,466,466,652,652,10,0,359,359,367,367,378,380,387,387,
        507,507,515,515,639,639,646,646,836,836,1005,1005,2,0,35,35,168,
        168,2,0,117,117,996,996,11,0,359,359,367,367,378,380,387,387,507,
        507,515,515,592,592,639,639,646,646,836,836,1005,1005,2,0,1137,1137,
        1158,1159,1,0,1159,1160,2,0,375,375,787,798,3,0,1138,1140,1149,1149,
        1151,1151,2,0,63,63,178,178,2,0,116,116,1152,1152,5,0,25,25,222,
        224,231,231,233,236,518,518,2,0,25,25,222,222,2,0,25,25,222,223,
        1,0,196,207,3,0,183,183,195,195,612,612,2,0,211,216,431,431,6,0,
        217,217,228,228,230,230,232,232,239,239,348,349,4,0,218,221,226,
        227,229,229,346,346,2,0,153,153,237,237,2,0,466,466,803,811,3,0,
        211,211,226,226,518,518,6,0,200,200,206,206,209,209,217,218,220,
        221,466,466,1,0,214,215,2,0,183,183,612,612,2,0,200,200,206,206,
        2,0,315,316,322,322,3,0,150,150,313,316,331,331,1,0,325,326,3,0,
        17,17,95,95,176,176,2,0,222,222,226,226,2,0,217,218,220,220,3,0,
        13,13,45,45,994,994,3,0,286,286,298,299,309,309,3,0,287,289,305,
        308,310,312,2,0,295,295,297,297,2,0,293,293,296,296,2,0,291,292,
        302,304,2,0,133,133,601,601,2,0,433,433,559,559,2,0,535,535,551,
        551,2,0,114,114,1127,1127,3,0,63,63,178,178,662,662,2,0,137,137,
        149,149,3,0,6,6,337,337,618,618,3,0,114,114,1120,1121,1127,1128,
        2,0,1117,1119,1122,1123,1,0,1120,1121,2,0,226,226,746,786,1,0,799,
        802,5,0,708,709,725,727,733,733,739,740,742,742,1,0,689,696,3,0,
        217,221,234,234,237,237,58,0,11,11,14,14,18,18,29,29,35,35,37,37,
        42,42,48,48,55,55,57,57,59,59,73,73,79,79,94,94,117,117,121,121,
        124,124,130,130,158,158,168,168,239,239,283,290,294,294,298,299,
        305,312,332,385,387,403,405,405,407,432,434,450,452,458,460,521,
        523,523,527,544,547,558,560,589,591,606,608,636,638,672,674,675,
        677,682,684,688,697,697,699,707,710,712,717,718,720,724,728,732,
        734,734,736,738,741,741,743,745,792,792,836,836,875,875,1000,1000,
        1005,1005,1088,1088,23,0,39,39,97,97,148,148,150,150,217,219,221,
        221,251,282,290,293,295,297,300,304,324,324,459,459,673,673,689,
        696,736,736,803,803,806,835,837,874,876,999,1001,1004,1006,1087,
        1089,1107,1123,1123,8767,0,723,1,0,0,0,2,742,1,0,0,0,4,763,1,0,0,
        0,6,765,1,0,0,0,8,805,1,0,0,0,10,820,1,0,0,0,12,831,1,0,0,0,14,848,
        1,0,0,0,16,853,1,0,0,0,18,868,1,0,0,0,20,895,1,0,0,0,22,904,1,0,
        0,0,24,906,1,0,0,0,26,918,1,0,0,0,28,948,1,0,0,0,30,984,1,0,0,0,
        32,1035,1,0,0,0,34,1061,1,0,0,0,36,1097,1,0,0,0,38,1110,1,0,0,0,
        40,1207,1,0,0,0,42,1209,1,0,0,0,44,1227,1,0,0,0,46,1288,1,0,0,0,
        48,1307,1,0,0,0,50,1313,1,0,0,0,52,1335,1,0,0,0,54,1337,1,0,0,0,
        56,1339,1,0,0,0,58,1419,1,0,0,0,60,1426,1,0,0,0,62,1428,1,0,0,0,
        64,1433,1,0,0,0,66,1473,1,0,0,0,68,1479,1,0,0,0,70,1481,1,0,0,0,
        72,1502,1,0,0,0,74,1509,1,0,0,0,76,1511,1,0,0,0,78,1536,1,0,0,0,
        80,1539,1,0,0,0,82,1544,1,0,0,0,84,1570,1,0,0,0,86,1586,1,0,0,0,
        88,1588,1,0,0,0,90,1610,1,0,0,0,92,1612,1,0,0,0,94,1678,1,0,0,0,
        96,1749,1,0,0,0,98,1751,1,0,0,0,100,1779,1,0,0,0,102,1789,1,0,0,
        0,104,1819,1,0,0,0,106,2006,1,0,0,0,108,2008,1,0,0,0,110,2010,1,
        0,0,0,112,2013,1,0,0,0,114,2088,1,0,0,0,116,2111,1,0,0,0,118,2259,
        1,0,0,0,120,2264,1,0,0,0,122,2266,1,0,0,0,124,2276,1,0,0,0,126,2332,
        1,0,0,0,128,2352,1,0,0,0,130,2354,1,0,0,0,132,2389,1,0,0,0,134,2398,
        1,0,0,0,136,2405,1,0,0,0,138,2428,1,0,0,0,140,2437,1,0,0,0,142,2452,
        1,0,0,0,144,2477,1,0,0,0,146,2497,1,0,0,0,148,2880,1,0,0,0,150,2980,
        1,0,0,0,152,2982,1,0,0,0,154,2989,1,0,0,0,156,2996,1,0,0,0,158,3019,
        1,0,0,0,160,3027,1,0,0,0,162,3034,1,0,0,0,164,3041,1,0,0,0,166,3048,
        1,0,0,0,168,3060,1,0,0,0,170,3070,1,0,0,0,172,3077,1,0,0,0,174,3093,
        1,0,0,0,176,3139,1,0,0,0,178,3141,1,0,0,0,180,3151,1,0,0,0,182,3155,
        1,0,0,0,184,3161,1,0,0,0,186,3173,1,0,0,0,188,3175,1,0,0,0,190,3182,
        1,0,0,0,192,3184,1,0,0,0,194,3242,1,0,0,0,196,3316,1,0,0,0,198,3375,
        1,0,0,0,200,3473,1,0,0,0,202,3477,1,0,0,0,204,3479,1,0,0,0,206,3514,
        1,0,0,0,208,3516,1,0,0,0,210,3524,1,0,0,0,212,3532,1,0,0,0,214,3534,
        1,0,0,0,216,3570,1,0,0,0,218,3625,1,0,0,0,220,3634,1,0,0,0,222,3654,
        1,0,0,0,224,3666,1,0,0,0,226,3670,1,0,0,0,228,3703,1,0,0,0,230,3724,
        1,0,0,0,232,3734,1,0,0,0,234,3738,1,0,0,0,236,3764,1,0,0,0,238,3806,
        1,0,0,0,240,3808,1,0,0,0,242,3823,1,0,0,0,244,3872,1,0,0,0,246,3881,
        1,0,0,0,248,3891,1,0,0,0,250,3901,1,0,0,0,252,3957,1,0,0,0,254,3959,
        1,0,0,0,256,3986,1,0,0,0,258,3992,1,0,0,0,260,4000,1,0,0,0,262,4017,
        1,0,0,0,264,4033,1,0,0,0,266,4070,1,0,0,0,268,4076,1,0,0,0,270,4085,
        1,0,0,0,272,4098,1,0,0,0,274,4102,1,0,0,0,276,4140,1,0,0,0,278,4178,
        1,0,0,0,280,4192,1,0,0,0,282,4200,1,0,0,0,284,4204,1,0,0,0,286,4210,
        1,0,0,0,288,4224,1,0,0,0,290,4227,1,0,0,0,292,4245,1,0,0,0,294,4249,
        1,0,0,0,296,4265,1,0,0,0,298,4267,1,0,0,0,300,4279,1,0,0,0,302,4283,
        1,0,0,0,304,4300,1,0,0,0,306,4317,1,0,0,0,308,4320,1,0,0,0,310,4330,
        1,0,0,0,312,4334,1,0,0,0,314,4347,1,0,0,0,316,4350,1,0,0,0,318,4355,
        1,0,0,0,320,4375,1,0,0,0,322,4377,1,0,0,0,324,4394,1,0,0,0,326,4403,
        1,0,0,0,328,4412,1,0,0,0,330,4414,1,0,0,0,332,4428,1,0,0,0,334,4439,
        1,0,0,0,336,4448,1,0,0,0,338,4451,1,0,0,0,340,4459,1,0,0,0,342,4484,
        1,0,0,0,344,4496,1,0,0,0,346,4499,1,0,0,0,348,4531,1,0,0,0,350,4533,
        1,0,0,0,352,4535,1,0,0,0,354,4537,1,0,0,0,356,4539,1,0,0,0,358,4592,
        1,0,0,0,360,4594,1,0,0,0,362,4600,1,0,0,0,364,4620,1,0,0,0,366,4634,
        1,0,0,0,368,4645,1,0,0,0,370,4647,1,0,0,0,372,4653,1,0,0,0,374,4663,
        1,0,0,0,376,4667,1,0,0,0,378,4674,1,0,0,0,380,4678,1,0,0,0,382,4684,
        1,0,0,0,384,4691,1,0,0,0,386,4697,1,0,0,0,388,4703,1,0,0,0,390,4708,
        1,0,0,0,392,4753,1,0,0,0,394,4774,1,0,0,0,396,4799,1,0,0,0,398,4802,
        1,0,0,0,400,4808,1,0,0,0,402,4824,1,0,0,0,404,4839,1,0,0,0,406,4845,
        1,0,0,0,408,4875,1,0,0,0,410,4877,1,0,0,0,412,4884,1,0,0,0,414,4896,
        1,0,0,0,416,4902,1,0,0,0,418,4927,1,0,0,0,420,4931,1,0,0,0,422,4935,
        1,0,0,0,424,4946,1,0,0,0,426,5027,1,0,0,0,428,5094,1,0,0,0,430,5096,
        1,0,0,0,432,5202,1,0,0,0,434,5226,1,0,0,0,436,5228,1,0,0,0,438,5246,
        1,0,0,0,440,5326,1,0,0,0,442,5328,1,0,0,0,444,5341,1,0,0,0,446,5352,
        1,0,0,0,448,5380,1,0,0,0,450,5384,1,0,0,0,452,5405,1,0,0,0,454,5415,
        1,0,0,0,456,5425,1,0,0,0,458,5465,1,0,0,0,460,5467,1,0,0,0,462,5470,
        1,0,0,0,464,5570,1,0,0,0,466,5588,1,0,0,0,468,5590,1,0,0,0,470,5594,
        1,0,0,0,472,5632,1,0,0,0,474,5641,1,0,0,0,476,5647,1,0,0,0,478,5654,
        1,0,0,0,480,5676,1,0,0,0,482,5678,1,0,0,0,484,5692,1,0,0,0,486,5698,
        1,0,0,0,488,5754,1,0,0,0,490,5909,1,0,0,0,492,5921,1,0,0,0,494,5936,
        1,0,0,0,496,5942,1,0,0,0,498,5961,1,0,0,0,500,5971,1,0,0,0,502,5985,
        1,0,0,0,504,5987,1,0,0,0,506,5990,1,0,0,0,508,6012,1,0,0,0,510,6024,
        1,0,0,0,512,6030,1,0,0,0,514,6042,1,0,0,0,516,6046,1,0,0,0,518,6048,
        1,0,0,0,520,6090,1,0,0,0,522,6097,1,0,0,0,524,6099,1,0,0,0,526,6122,
        1,0,0,0,528,6128,1,0,0,0,530,6136,1,0,0,0,532,6139,1,0,0,0,534,6142,
        1,0,0,0,536,6163,1,0,0,0,538,6184,1,0,0,0,540,6192,1,0,0,0,542,6204,
        1,0,0,0,544,6212,1,0,0,0,546,6250,1,0,0,0,548,6262,1,0,0,0,550,6264,
        1,0,0,0,552,6270,1,0,0,0,554,6274,1,0,0,0,556,6290,1,0,0,0,558,6303,
        1,0,0,0,560,6312,1,0,0,0,562,6314,1,0,0,0,564,6321,1,0,0,0,566,6323,
        1,0,0,0,568,6329,1,0,0,0,570,6333,1,0,0,0,572,6338,1,0,0,0,574,6340,
        1,0,0,0,576,6342,1,0,0,0,578,6360,1,0,0,0,580,6376,1,0,0,0,582,6380,
        1,0,0,0,584,6385,1,0,0,0,586,6396,1,0,0,0,588,6401,1,0,0,0,590,6403,
        1,0,0,0,592,6407,1,0,0,0,594,6432,1,0,0,0,596,6434,1,0,0,0,598,6437,
        1,0,0,0,600,6442,1,0,0,0,602,6458,1,0,0,0,604,6586,1,0,0,0,606,6588,
        1,0,0,0,608,6621,1,0,0,0,610,6626,1,0,0,0,612,6630,1,0,0,0,614,6636,
        1,0,0,0,616,6644,1,0,0,0,618,6652,1,0,0,0,620,6660,1,0,0,0,622,6668,
        1,0,0,0,624,6679,1,0,0,0,626,6687,1,0,0,0,628,6695,1,0,0,0,630,6703,
        1,0,0,0,632,6711,1,0,0,0,634,6745,1,0,0,0,636,6761,1,0,0,0,638,6765,
        1,0,0,0,640,6767,1,0,0,0,642,6770,1,0,0,0,644,6774,1,0,0,0,646,6780,
        1,0,0,0,648,6800,1,0,0,0,650,6981,1,0,0,0,652,6983,1,0,0,0,654,7002,
        1,0,0,0,656,7004,1,0,0,0,658,7067,1,0,0,0,660,7107,1,0,0,0,662,7109,
        1,0,0,0,664,7118,1,0,0,0,666,7129,1,0,0,0,668,7131,1,0,0,0,670,7134,
        1,0,0,0,672,7138,1,0,0,0,674,7140,1,0,0,0,676,7152,1,0,0,0,678,7154,
        1,0,0,0,680,7188,1,0,0,0,682,7190,1,0,0,0,684,7199,1,0,0,0,686,7217,
        1,0,0,0,688,7230,1,0,0,0,690,7241,1,0,0,0,692,7359,1,0,0,0,694,7385,
        1,0,0,0,696,7401,1,0,0,0,698,7410,1,0,0,0,700,7419,1,0,0,0,702,7421,
        1,0,0,0,704,7423,1,0,0,0,706,7430,1,0,0,0,708,7432,1,0,0,0,710,7434,
        1,0,0,0,712,7436,1,0,0,0,714,7438,1,0,0,0,716,7440,1,0,0,0,718,7442,
        1,0,0,0,720,7444,1,0,0,0,722,724,3,2,1,0,723,722,1,0,0,0,723,724,
        1,0,0,0,724,727,1,0,0,0,725,726,5,1121,0,0,726,728,5,1121,0,0,727,
        725,1,0,0,0,727,728,1,0,0,0,728,729,1,0,0,0,729,730,5,0,0,1,730,
        1,1,0,0,0,731,734,3,4,2,0,732,733,5,1121,0,0,733,735,5,1121,0,0,
        734,732,1,0,0,0,734,735,1,0,0,0,735,737,1,0,0,0,736,738,5,1136,0,
        0,737,736,1,0,0,0,737,738,1,0,0,0,738,741,1,0,0,0,739,741,3,6,3,
        0,740,731,1,0,0,0,740,739,1,0,0,0,741,744,1,0,0,0,742,740,1,0,0,
        0,742,743,1,0,0,0,743,754,1,0,0,0,744,742,1,0,0,0,745,751,3,4,2,
        0,746,747,5,1121,0,0,747,749,5,1121,0,0,748,746,1,0,0,0,748,749,
        1,0,0,0,749,750,1,0,0,0,750,752,5,1136,0,0,751,748,1,0,0,0,751,752,
        1,0,0,0,752,755,1,0,0,0,753,755,3,6,3,0,754,745,1,0,0,0,754,753,
        1,0,0,0,755,3,1,0,0,0,756,764,3,8,4,0,757,764,3,10,5,0,758,764,3,
        12,6,0,759,764,3,14,7,0,760,764,3,16,8,0,761,764,3,20,10,0,762,764,
        3,22,11,0,763,756,1,0,0,0,763,757,1,0,0,0,763,758,1,0,0,0,763,759,
        1,0,0,0,763,760,1,0,0,0,763,761,1,0,0,0,763,762,1,0,0,0,764,5,1,
        0,0,0,765,766,5,1136,0,0,766,7,1,0,0,0,767,806,3,24,12,0,768,806,
        3,26,13,0,769,806,3,28,14,0,770,806,3,30,15,0,771,806,3,32,16,0,
        772,806,3,34,17,0,773,806,3,38,19,0,774,806,3,40,20,0,775,806,3,
        42,21,0,776,806,3,44,22,0,777,806,3,46,23,0,778,806,3,56,28,0,779,
        806,3,36,18,0,780,806,3,128,64,0,781,806,3,130,65,0,782,806,3,132,
        66,0,783,806,3,134,67,0,784,806,3,136,68,0,785,806,3,138,69,0,786,
        806,3,140,70,0,787,806,3,142,71,0,788,806,3,144,72,0,789,806,3,146,
        73,0,790,806,3,152,76,0,791,806,3,154,77,0,792,806,3,156,78,0,793,
        806,3,158,79,0,794,806,3,160,80,0,795,806,3,162,81,0,796,806,3,164,
        82,0,797,806,3,166,83,0,798,806,3,168,84,0,799,806,3,170,85,0,800,
        806,3,172,86,0,801,806,3,174,87,0,802,806,3,176,88,0,803,806,3,178,
        89,0,804,806,3,182,91,0,805,767,1,0,0,0,805,768,1,0,0,0,805,769,
        1,0,0,0,805,770,1,0,0,0,805,771,1,0,0,0,805,772,1,0,0,0,805,773,
        1,0,0,0,805,774,1,0,0,0,805,775,1,0,0,0,805,776,1,0,0,0,805,777,
        1,0,0,0,805,778,1,0,0,0,805,779,1,0,0,0,805,780,1,0,0,0,805,781,
        1,0,0,0,805,782,1,0,0,0,805,783,1,0,0,0,805,784,1,0,0,0,805,785,
        1,0,0,0,805,786,1,0,0,0,805,787,1,0,0,0,805,788,1,0,0,0,805,789,
        1,0,0,0,805,790,1,0,0,0,805,791,1,0,0,0,805,792,1,0,0,0,805,793,
        1,0,0,0,805,794,1,0,0,0,805,795,1,0,0,0,805,796,1,0,0,0,805,797,
        1,0,0,0,805,798,1,0,0,0,805,799,1,0,0,0,805,800,1,0,0,0,805,801,
        1,0,0,0,805,802,1,0,0,0,805,803,1,0,0,0,805,804,1,0,0,0,806,9,1,
        0,0,0,807,821,3,200,100,0,808,821,3,192,96,0,809,821,3,202,101,0,
        810,821,3,186,93,0,811,821,3,198,99,0,812,821,3,184,92,0,813,821,
        3,194,97,0,814,821,3,196,98,0,815,821,3,188,94,0,816,821,3,190,95,
        0,817,821,3,204,102,0,818,821,3,540,270,0,819,821,3,542,271,0,820,
        807,1,0,0,0,820,808,1,0,0,0,820,809,1,0,0,0,820,810,1,0,0,0,820,
        811,1,0,0,0,820,812,1,0,0,0,820,813,1,0,0,0,820,814,1,0,0,0,820,
        815,1,0,0,0,820,816,1,0,0,0,820,817,1,0,0,0,820,818,1,0,0,0,820,
        819,1,0,0,0,821,11,1,0,0,0,822,832,3,298,149,0,823,832,3,300,150,
        0,824,832,3,302,151,0,825,832,3,304,152,0,826,832,3,306,153,0,827,
        832,3,308,154,0,828,832,3,310,155,0,829,832,3,312,156,0,830,832,
        3,314,157,0,831,822,1,0,0,0,831,823,1,0,0,0,831,824,1,0,0,0,831,
        825,1,0,0,0,831,826,1,0,0,0,831,827,1,0,0,0,831,828,1,0,0,0,831,
        829,1,0,0,0,831,830,1,0,0,0,832,13,1,0,0,0,833,849,3,330,165,0,834,
        849,3,332,166,0,835,849,3,334,167,0,836,849,3,336,168,0,837,849,
        3,338,169,0,838,849,3,340,170,0,839,849,3,342,171,0,840,849,3,344,
        172,0,841,849,3,346,173,0,842,849,3,370,185,0,843,849,3,372,186,
        0,844,849,3,374,187,0,845,849,3,376,188,0,846,849,3,378,189,0,847,
        849,3,380,190,0,848,833,1,0,0,0,848,834,1,0,0,0,848,835,1,0,0,0,
        848,836,1,0,0,0,848,837,1,0,0,0,848,838,1,0,0,0,848,839,1,0,0,0,
        848,840,1,0,0,0,848,841,1,0,0,0,848,842,1,0,0,0,848,843,1,0,0,0,
        848,844,1,0,0,0,848,845,1,0,0,0,848,846,1,0,0,0,848,847,1,0,0,0,
        849,15,1,0,0,0,850,854,3,382,191,0,851,854,3,384,192,0,852,854,3,
        386,193,0,853,850,1,0,0,0,853,851,1,0,0,0,853,852,1,0,0,0,854,17,
        1,0,0,0,855,869,3,390,195,0,856,869,3,392,196,0,857,869,3,394,197,
        0,858,869,3,398,199,0,859,869,3,400,200,0,860,869,3,402,201,0,861,
        869,3,406,203,0,862,869,3,396,198,0,863,869,3,404,202,0,864,869,
        3,408,204,0,865,866,3,540,270,0,866,867,3,10,5,0,867,869,1,0,0,0,
        868,855,1,0,0,0,868,856,1,0,0,0,868,857,1,0,0,0,868,858,1,0,0,0,
        868,859,1,0,0,0,868,860,1,0,0,0,868,861,1,0,0,0,868,862,1,0,0,0,
        868,863,1,0,0,0,868,864,1,0,0,0,868,865,1,0,0,0,869,19,1,0,0,0,870,
        896,3,426,213,0,871,896,3,428,214,0,872,896,3,430,215,0,873,896,
        3,432,216,0,874,896,3,436,218,0,875,896,3,438,219,0,876,896,3,440,
        220,0,877,896,3,442,221,0,878,896,3,470,235,0,879,896,3,472,236,
        0,880,896,3,474,237,0,881,896,3,476,238,0,882,896,3,478,239,0,883,
        896,3,482,241,0,884,896,3,484,242,0,885,896,3,486,243,0,886,896,
        3,488,244,0,887,896,3,490,245,0,888,896,3,504,252,0,889,896,3,506,
        253,0,890,896,3,508,254,0,891,896,3,510,255,0,892,896,3,512,256,
        0,893,896,3,514,257,0,894,896,3,516,258,0,895,870,1,0,0,0,895,871,
        1,0,0,0,895,872,1,0,0,0,895,873,1,0,0,0,895,874,1,0,0,0,895,875,
        1,0,0,0,895,876,1,0,0,0,895,877,1,0,0,0,895,878,1,0,0,0,895,879,
        1,0,0,0,895,880,1,0,0,0,895,881,1,0,0,0,895,882,1,0,0,0,895,883,
        1,0,0,0,895,884,1,0,0,0,895,885,1,0,0,0,895,886,1,0,0,0,895,887,
        1,0,0,0,895,888,1,0,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,21,1,
        0,0,0,897,905,3,526,263,0,898,905,3,528,264,0,899,905,3,530,265,
        0,900,905,3,532,266,0,901,905,3,534,267,0,902,905,3,536,268,0,903,
        905,3,544,272,0,904,897,1,0,0,0,904,898,1,0,0,0,904,899,1,0,0,0,
        904,900,1,0,0,0,904,901,1,0,0,0,904,902,1,0,0,0,904,903,1,0,0,0,
        905,23,1,0,0,0,906,907,5,33,0,0,907,909,7,0,0,0,908,910,3,642,321,
        0,909,908,1,0,0,0,909,910,1,0,0,0,910,911,1,0,0,0,911,915,3,584,
        292,0,912,914,3,58,29,0,913,912,1,0,0,0,914,917,1,0,0,0,915,913,
        1,0,0,0,915,916,1,0,0,0,916,25,1,0,0,0,917,915,1,0,0,0,918,920,5,
        33,0,0,919,921,3,64,32,0,920,919,1,0,0,0,920,921,1,0,0,0,921,922,
        1,0,0,0,922,924,5,415,0,0,923,925,3,642,321,0,924,923,1,0,0,0,924,
        925,1,0,0,0,925,926,1,0,0,0,926,927,3,550,275,0,927,928,5,118,0,
        0,928,929,5,605,0,0,929,936,3,66,33,0,930,931,5,118,0,0,931,933,
        5,371,0,0,932,934,5,114,0,0,933,932,1,0,0,0,933,934,1,0,0,0,934,
        935,1,0,0,0,935,937,5,561,0,0,936,930,1,0,0,0,936,937,1,0,0,0,937,
        939,1,0,0,0,938,940,3,74,37,0,939,938,1,0,0,0,939,940,1,0,0,0,940,
        943,1,0,0,0,941,942,5,368,0,0,942,944,5,1148,0,0,943,941,1,0,0,0,
        943,944,1,0,0,0,944,945,1,0,0,0,945,946,5,399,0,0,946,947,3,388,
        194,0,947,27,1,0,0,0,948,950,5,33,0,0,949,951,7,1,0,0,950,949,1,
        0,0,0,950,951,1,0,0,0,951,953,1,0,0,0,952,954,7,2,0,0,953,952,1,
        0,0,0,953,954,1,0,0,0,954,955,1,0,0,0,955,956,5,81,0,0,956,958,3,
        584,292,0,957,959,3,76,38,0,958,957,1,0,0,0,958,959,1,0,0,0,959,
        960,1,0,0,0,960,961,5,118,0,0,961,962,3,552,276,0,962,966,3,622,
        311,0,963,965,3,78,39,0,964,963,1,0,0,0,965,968,1,0,0,0,966,964,
        1,0,0,0,966,967,1,0,0,0,967,981,1,0,0,0,968,966,1,0,0,0,969,971,
        5,336,0,0,970,972,5,1124,0,0,971,970,1,0,0,0,971,972,1,0,0,0,972,
        973,1,0,0,0,973,980,7,3,0,0,974,976,5,103,0,0,975,977,5,1124,0,0,
        976,975,1,0,0,0,976,977,1,0,0,0,977,978,1,0,0,0,978,980,7,4,0,0,
        979,969,1,0,0,0,979,974,1,0,0,0,980,983,1,0,0,0,981,979,1,0,0,0,
        981,982,1,0,0,0,982,29,1,0,0,0,983,981,1,0,0,0,984,985,5,33,0,0,
        985,986,5,475,0,0,986,987,5,73,0,0,987,988,3,584,292,0,988,989,5,
        5,0,0,989,990,5,659,0,0,990,996,5,1148,0,0,991,993,5,453,0,0,992,
        994,5,1124,0,0,993,992,1,0,0,0,993,994,1,0,0,0,994,995,1,0,0,0,995,
        997,3,592,296,0,996,991,1,0,0,0,996,997,1,0,0,0,997,1003,1,0,0,0,
        998,1000,5,660,0,0,999,1001,5,1124,0,0,1000,999,1,0,0,0,1000,1001,
        1,0,0,0,1001,1002,1,0,0,0,1002,1004,3,592,296,0,1003,998,1,0,0,0,
        1003,1004,1,0,0,0,1004,1010,1,0,0,0,1005,1007,5,572,0,0,1006,1008,
        5,1124,0,0,1007,1006,1,0,0,0,1007,1008,1,0,0,0,1008,1009,1,0,0,0,
        1009,1011,3,592,296,0,1010,1005,1,0,0,0,1010,1011,1,0,0,0,1011,1017,
        1,0,0,0,1012,1014,5,528,0,0,1013,1015,5,1124,0,0,1014,1013,1,0,0,
        0,1014,1015,1,0,0,0,1015,1016,1,0,0,0,1016,1018,3,584,292,0,1017,
        1012,1,0,0,0,1017,1018,1,0,0,0,1018,1020,1,0,0,0,1019,1021,5,674,
        0,0,1020,1019,1,0,0,0,1020,1021,1,0,0,0,1021,1027,1,0,0,0,1022,1024,
        5,368,0,0,1023,1025,5,1124,0,0,1024,1023,1,0,0,0,1024,1025,1,0,0,
        0,1025,1026,1,0,0,0,1026,1028,5,1148,0,0,1027,1022,1,0,0,0,1027,
        1028,1,0,0,0,1028,1029,1,0,0,0,1029,1031,5,409,0,0,1030,1032,5,1124,
        0,0,1031,1030,1,0,0,0,1031,1032,1,0,0,0,1032,1033,1,0,0,0,1033,1034,
        3,572,286,0,1034,31,1,0,0,0,1035,1037,5,33,0,0,1036,1038,3,64,32,
        0,1037,1036,1,0,0,0,1037,1038,1,0,0,0,1038,1039,1,0,0,0,1039,1040,
        5,131,0,0,1040,1041,3,550,275,0,1041,1043,5,1133,0,0,1042,1044,3,
        80,40,0,1043,1042,1,0,0,0,1043,1044,1,0,0,0,1044,1049,1,0,0,0,1045,
        1046,5,1135,0,0,1046,1048,3,80,40,0,1047,1045,1,0,0,0,1048,1051,
        1,0,0,0,1049,1047,1,0,0,0,1049,1050,1,0,0,0,1050,1052,1,0,0,0,1051,
        1049,1,0,0,0,1052,1056,5,1134,0,0,1053,1055,3,84,42,0,1054,1053,
        1,0,0,0,1055,1058,1,0,0,0,1056,1054,1,0,0,0,1056,1057,1,0,0,0,1057,
        1059,1,0,0,0,1058,1056,1,0,0,0,1059,1060,3,388,194,0,1060,33,1,0,
        0,0,1061,1063,5,33,0,0,1062,1064,3,64,32,0,1063,1062,1,0,0,0,1063,
        1064,1,0,0,0,1064,1066,1,0,0,0,1065,1067,5,335,0,0,1066,1065,1,0,
        0,0,1066,1067,1,0,0,0,1067,1068,1,0,0,0,1068,1070,5,437,0,0,1069,
        1071,3,642,321,0,1070,1069,1,0,0,0,1070,1071,1,0,0,0,1071,1072,1,
        0,0,0,1072,1073,3,550,275,0,1073,1075,5,1133,0,0,1074,1076,3,82,
        41,0,1075,1074,1,0,0,0,1075,1076,1,0,0,0,1076,1081,1,0,0,0,1077,
        1078,5,1135,0,0,1078,1080,3,82,41,0,1079,1077,1,0,0,0,1080,1083,
        1,0,0,0,1081,1079,1,0,0,0,1081,1082,1,0,0,0,1082,1084,1,0,0,0,1083,
        1081,1,0,0,0,1084,1085,5,1134,0,0,1085,1086,5,594,0,0,1086,1090,
        3,604,302,0,1087,1089,3,84,42,0,1088,1087,1,0,0,0,1089,1092,1,0,
        0,0,1090,1088,1,0,0,0,1090,1091,1,0,0,0,1091,1095,1,0,0,0,1092,1090,
        1,0,0,0,1093,1096,3,388,194,0,1094,1096,3,404,202,0,1095,1093,1,
        0,0,0,1095,1094,1,0,0,0,1096,35,1,0,0,0,1097,1098,5,33,0,0,1098,
        1100,5,596,0,0,1099,1101,3,642,321,0,1100,1099,1,0,0,0,1100,1101,
        1,0,0,0,1101,1102,1,0,0,0,1102,1107,3,554,277,0,1103,1104,5,1135,
        0,0,1104,1106,3,554,277,0,1105,1103,1,0,0,0,1106,1109,1,0,0,0,1107,
        1105,1,0,0,0,1107,1108,1,0,0,0,1108,37,1,0,0,0,1109,1107,1,0,0,0,
        1110,1111,5,33,0,0,1111,1112,5,608,0,0,1112,1113,3,584,292,0,1113,
        1114,5,67,0,0,1114,1115,5,388,0,0,1115,1116,5,679,0,0,1116,1117,
        7,5,0,0,1117,1118,5,541,0,0,1118,1119,5,1133,0,0,1119,1124,3,86,
        43,0,1120,1121,5,1135,0,0,1121,1123,3,86,43,0,1122,1120,1,0,0,0,
        1123,1126,1,0,0,0,1124,1122,1,0,0,0,1124,1125,1,0,0,0,1125,1127,
        1,0,0,0,1126,1124,1,0,0,0,1127,1128,5,1134,0,0,1128,39,1,0,0,0,1129,
        1131,5,33,0,0,1130,1132,5,649,0,0,1131,1130,1,0,0,0,1131,1132,1,
        0,0,0,1132,1133,1,0,0,0,1133,1135,5,172,0,0,1134,1136,3,642,321,
        0,1135,1134,1,0,0,0,1135,1136,1,0,0,0,1136,1137,1,0,0,0,1137,1145,
        3,552,276,0,1138,1139,5,98,0,0,1139,1146,3,552,276,0,1140,1141,5,
        1133,0,0,1141,1142,5,98,0,0,1142,1143,3,552,276,0,1143,1144,5,1134,
        0,0,1144,1146,1,0,0,0,1145,1138,1,0,0,0,1145,1140,1,0,0,0,1146,1208,
        1,0,0,0,1147,1149,5,33,0,0,1148,1150,5,649,0,0,1149,1148,1,0,0,0,
        1149,1150,1,0,0,0,1150,1151,1,0,0,0,1151,1153,5,172,0,0,1152,1154,
        3,642,321,0,1153,1152,1,0,0,0,1153,1154,1,0,0,0,1154,1155,1,0,0,
        0,1155,1157,3,552,276,0,1156,1158,3,88,44,0,1157,1156,1,0,0,0,1157,
        1158,1,0,0,0,1158,1169,1,0,0,0,1159,1166,3,106,53,0,1160,1162,5,
        1135,0,0,1161,1160,1,0,0,0,1161,1162,1,0,0,0,1162,1163,1,0,0,0,1163,
        1165,3,106,53,0,1164,1161,1,0,0,0,1165,1168,1,0,0,0,1166,1164,1,
        0,0,0,1166,1167,1,0,0,0,1167,1170,1,0,0,0,1168,1166,1,0,0,0,1169,
        1159,1,0,0,0,1169,1170,1,0,0,0,1170,1172,1,0,0,0,1171,1173,3,112,
        56,0,1172,1171,1,0,0,0,1172,1173,1,0,0,0,1173,1175,1,0,0,0,1174,
        1176,7,6,0,0,1175,1174,1,0,0,0,1175,1176,1,0,0,0,1176,1178,1,0,0,
        0,1177,1179,5,12,0,0,1178,1177,1,0,0,0,1178,1179,1,0,0,0,1179,1180,
        1,0,0,0,1180,1181,3,200,100,0,1181,1208,1,0,0,0,1182,1184,5,33,0,
        0,1183,1185,5,649,0,0,1184,1183,1,0,0,0,1184,1185,1,0,0,0,1185,1186,
        1,0,0,0,1186,1188,5,172,0,0,1187,1189,3,642,321,0,1188,1187,1,0,
        0,0,1188,1189,1,0,0,0,1189,1190,1,0,0,0,1190,1191,3,552,276,0,1191,
        1202,3,88,44,0,1192,1199,3,106,53,0,1193,1195,5,1135,0,0,1194,1193,
        1,0,0,0,1194,1195,1,0,0,0,1195,1196,1,0,0,0,1196,1198,3,106,53,0,
        1197,1194,1,0,0,0,1198,1201,1,0,0,0,1199,1197,1,0,0,0,1199,1200,
        1,0,0,0,1200,1203,1,0,0,0,1201,1199,1,0,0,0,1202,1192,1,0,0,0,1202,
        1203,1,0,0,0,1203,1205,1,0,0,0,1204,1206,3,112,56,0,1205,1204,1,
        0,0,0,1205,1206,1,0,0,0,1206,1208,1,0,0,0,1207,1129,1,0,0,0,1207,
        1147,1,0,0,0,1207,1182,1,0,0,0,1208,41,1,0,0,0,1209,1210,5,33,0,
        0,1210,1211,5,647,0,0,1211,1212,3,584,292,0,1212,1213,5,5,0,0,1213,
        1214,5,389,0,0,1214,1218,5,1148,0,0,1215,1216,5,428,0,0,1216,1217,
        5,1124,0,0,1217,1219,3,592,296,0,1218,1215,1,0,0,0,1218,1219,1,0,
        0,0,1219,1225,1,0,0,0,1220,1222,5,409,0,0,1221,1223,5,1124,0,0,1222,
        1221,1,0,0,0,1222,1223,1,0,0,0,1223,1224,1,0,0,0,1224,1226,3,572,
        286,0,1225,1220,1,0,0,0,1225,1226,1,0,0,0,1226,43,1,0,0,0,1227,1228,
        5,33,0,0,1228,1229,5,647,0,0,1229,1230,3,584,292,0,1230,1231,5,5,
        0,0,1231,1232,5,389,0,0,1232,1233,5,1148,0,0,1233,1234,5,186,0,0,
        1234,1235,5,475,0,0,1235,1236,5,73,0,0,1236,1242,3,584,292,0,1237,
        1239,5,423,0,0,1238,1240,5,1124,0,0,1239,1238,1,0,0,0,1239,1240,
        1,0,0,0,1240,1241,1,0,0,0,1241,1243,3,592,296,0,1242,1237,1,0,0,
        0,1242,1243,1,0,0,0,1243,1249,1,0,0,0,1244,1246,5,453,0,0,1245,1247,
        5,1124,0,0,1246,1245,1,0,0,0,1246,1247,1,0,0,0,1247,1248,1,0,0,0,
        1248,1250,3,592,296,0,1249,1244,1,0,0,0,1249,1250,1,0,0,0,1250,1256,
        1,0,0,0,1251,1253,5,341,0,0,1252,1254,5,1124,0,0,1253,1252,1,0,0,
        0,1253,1254,1,0,0,0,1254,1255,1,0,0,0,1255,1257,3,592,296,0,1256,
        1251,1,0,0,0,1256,1257,1,0,0,0,1257,1263,1,0,0,0,1258,1260,5,501,
        0,0,1259,1261,5,1124,0,0,1260,1259,1,0,0,0,1260,1261,1,0,0,0,1261,
        1262,1,0,0,0,1262,1264,3,592,296,0,1263,1258,1,0,0,0,1263,1264,1,
        0,0,0,1264,1270,1,0,0,0,1265,1267,5,528,0,0,1266,1268,5,1124,0,0,
        1267,1266,1,0,0,0,1267,1268,1,0,0,0,1268,1269,1,0,0,0,1269,1271,
        3,584,292,0,1270,1265,1,0,0,0,1270,1271,1,0,0,0,1271,1273,1,0,0,
        0,1272,1274,5,674,0,0,1273,1272,1,0,0,0,1273,1274,1,0,0,0,1274,1280,
        1,0,0,0,1275,1277,5,368,0,0,1276,1278,5,1124,0,0,1277,1276,1,0,0,
        0,1277,1278,1,0,0,0,1278,1279,1,0,0,0,1279,1281,5,1148,0,0,1280,
        1275,1,0,0,0,1280,1281,1,0,0,0,1281,1282,1,0,0,0,1282,1284,5,409,
        0,0,1283,1285,5,1124,0,0,1284,1283,1,0,0,0,1284,1285,1,0,0,0,1285,
        1286,1,0,0,0,1286,1287,3,572,286,0,1287,45,1,0,0,0,1288,1290,5,33,
        0,0,1289,1291,3,64,32,0,1290,1289,1,0,0,0,1290,1291,1,0,0,0,1291,
        1292,1,0,0,0,1292,1293,5,177,0,0,1293,1294,3,550,275,0,1294,1295,
        7,7,0,0,1295,1296,7,8,0,0,1296,1297,5,118,0,0,1297,1298,3,552,276,
        0,1298,1299,5,65,0,0,1299,1300,5,52,0,0,1300,1303,5,600,0,0,1301,
        1302,7,9,0,0,1302,1304,3,550,275,0,1303,1301,1,0,0,0,1303,1304,1,
        0,0,0,1304,1305,1,0,0,0,1305,1306,3,388,194,0,1306,47,1,0,0,0,1307,
        1309,5,192,0,0,1308,1310,5,571,0,0,1309,1308,1,0,0,0,1309,1310,1,
        0,0,0,1310,1311,1,0,0,0,1311,1312,3,50,25,0,1312,49,1,0,0,0,1313,
        1325,3,52,26,0,1314,1315,5,1133,0,0,1315,1320,3,54,27,0,1316,1317,
        5,1135,0,0,1317,1319,3,54,27,0,1318,1316,1,0,0,0,1319,1322,1,0,0,
        0,1320,1318,1,0,0,0,1320,1321,1,0,0,0,1321,1323,1,0,0,0,1322,1320,
        1,0,0,0,1323,1324,5,1134,0,0,1324,1326,1,0,0,0,1325,1314,1,0,0,0,
        1325,1326,1,0,0,0,1326,1327,1,0,0,0,1327,1328,5,12,0,0,1328,1329,
        5,1133,0,0,1329,1330,3,10,5,0,1330,1333,5,1134,0,0,1331,1332,5,1135,
        0,0,1332,1334,3,50,25,0,1333,1331,1,0,0,0,1333,1334,1,0,0,0,1334,
        51,1,0,0,0,1335,1336,3,584,292,0,1336,53,1,0,0,0,1337,1338,3,584,
        292,0,1338,55,1,0,0,0,1339,1341,5,33,0,0,1340,1342,3,644,322,0,1341,
        1340,1,0,0,0,1341,1342,1,0,0,0,1342,1346,1,0,0,0,1343,1344,5,336,
        0,0,1344,1345,5,1124,0,0,1345,1347,7,10,0,0,1346,1343,1,0,0,0,1346,
        1347,1,0,0,0,1347,1349,1,0,0,0,1348,1350,3,64,32,0,1349,1348,1,0,
        0,0,1349,1350,1,0,0,0,1350,1354,1,0,0,0,1351,1352,5,160,0,0,1352,
        1353,5,606,0,0,1353,1355,7,11,0,0,1354,1351,1,0,0,0,1354,1355,1,
        0,0,0,1355,1356,1,0,0,0,1356,1357,5,671,0,0,1357,1362,3,550,275,
        0,1358,1359,5,1133,0,0,1359,1360,3,616,308,0,1360,1361,5,1134,0,
        0,1361,1363,1,0,0,0,1362,1358,1,0,0,0,1362,1363,1,0,0,0,1363,1364,
        1,0,0,0,1364,1384,5,12,0,0,1365,1367,5,1133,0,0,1366,1368,3,48,24,
        0,1367,1366,1,0,0,0,1367,1368,1,0,0,0,1368,1369,1,0,0,0,1369,1370,
        3,200,100,0,1370,1371,5,1134,0,0,1371,1385,1,0,0,0,1372,1374,3,48,
        24,0,1373,1372,1,0,0,0,1373,1374,1,0,0,0,1374,1375,1,0,0,0,1375,
        1382,3,200,100,0,1376,1378,5,192,0,0,1377,1379,7,12,0,0,1378,1377,
        1,0,0,0,1378,1379,1,0,0,0,1379,1380,1,0,0,0,1380,1381,5,26,0,0,1381,
        1383,5,120,0,0,1382,1376,1,0,0,0,1382,1383,1,0,0,0,1383,1385,1,0,
        0,0,1384,1365,1,0,0,0,1384,1373,1,0,0,0,1385,57,1,0,0,0,1386,1388,
        5,42,0,0,1387,1386,1,0,0,0,1387,1388,1,0,0,0,1388,1389,1,0,0,0,1389,
        1391,3,60,30,0,1390,1392,5,1124,0,0,1391,1390,1,0,0,0,1391,1392,
        1,0,0,0,1392,1395,1,0,0,0,1393,1396,3,568,284,0,1394,1396,5,42,0,
        0,1395,1393,1,0,0,0,1395,1394,1,0,0,0,1396,1420,1,0,0,0,1397,1399,
        5,42,0,0,1398,1397,1,0,0,0,1398,1399,1,0,0,0,1399,1400,1,0,0,0,1400,
        1402,5,27,0,0,1401,1403,5,1124,0,0,1402,1401,1,0,0,0,1402,1403,1,
        0,0,0,1403,1404,1,0,0,0,1404,1420,3,570,285,0,1405,1407,5,42,0,0,
        1406,1405,1,0,0,0,1406,1407,1,0,0,0,1407,1408,1,0,0,0,1408,1410,
        5,405,0,0,1409,1411,5,1124,0,0,1410,1409,1,0,0,0,1410,1411,1,0,0,
        0,1411,1412,1,0,0,0,1412,1420,5,1148,0,0,1413,1414,5,134,0,0,1414,
        1416,5,538,0,0,1415,1417,5,1124,0,0,1416,1415,1,0,0,0,1416,1417,
        1,0,0,0,1417,1418,1,0,0,0,1418,1420,7,13,0,0,1419,1387,1,0,0,0,1419,
        1398,1,0,0,0,1419,1406,1,0,0,0,1419,1413,1,0,0,0,1420,59,1,0,0,0,
        1421,1422,5,25,0,0,1422,1427,5,153,0,0,1423,1427,5,841,0,0,1424,
        1425,5,222,0,0,1425,1427,5,153,0,0,1426,1421,1,0,0,0,1426,1423,1,
        0,0,0,1426,1424,1,0,0,0,1427,61,1,0,0,0,1428,1431,5,37,0,0,1429,
        1430,5,1133,0,0,1430,1432,5,1134,0,0,1431,1429,1,0,0,0,1431,1432,
        1,0,0,0,1432,63,1,0,0,0,1433,1434,5,392,0,0,1434,1437,5,1124,0,0,
        1435,1438,3,564,282,0,1436,1438,3,62,31,0,1437,1435,1,0,0,0,1437,
        1436,1,0,0,0,1438,65,1,0,0,0,1439,1440,5,338,0,0,1440,1444,3,68,
        34,0,1441,1443,3,70,35,0,1442,1441,1,0,0,0,1443,1446,1,0,0,0,1444,
        1442,1,0,0,0,1444,1445,1,0,0,0,1445,1474,1,0,0,0,1446,1444,1,0,0,
        0,1447,1450,5,417,0,0,1448,1451,3,590,295,0,1449,1451,3,688,344,
        0,1450,1448,1,0,0,0,1450,1449,1,0,0,0,1451,1452,1,0,0,0,1452,1461,
        3,72,36,0,1453,1454,5,630,0,0,1454,1458,3,68,34,0,1455,1457,3,70,
        35,0,1456,1455,1,0,0,0,1457,1460,1,0,0,0,1458,1456,1,0,0,0,1458,
        1459,1,0,0,0,1459,1462,1,0,0,0,1460,1458,1,0,0,0,1461,1453,1,0,0,
        0,1461,1462,1,0,0,0,1462,1471,1,0,0,0,1463,1464,5,408,0,0,1464,1468,
        3,68,34,0,1465,1467,3,70,35,0,1466,1465,1,0,0,0,1467,1470,1,0,0,
        0,1468,1466,1,0,0,0,1468,1469,1,0,0,0,1469,1472,1,0,0,0,1470,1468,
        1,0,0,0,1471,1463,1,0,0,0,1471,1472,1,0,0,0,1472,1474,1,0,0,0,1473,
        1439,1,0,0,0,1473,1447,1,0,0,0,1474,67,1,0,0,0,1475,1480,5,315,0,
        0,1476,1480,3,594,297,0,1477,1480,3,590,295,0,1478,1480,3,688,344,
        0,1479,1475,1,0,0,0,1479,1476,1,0,0,0,1479,1477,1,0,0,0,1479,1478,
        1,0,0,0,1480,69,1,0,0,0,1481,1482,5,1120,0,0,1482,1485,5,86,0,0,
        1483,1486,3,590,295,0,1484,1486,3,688,344,0,1485,1483,1,0,0,0,1485,
        1484,1,0,0,0,1486,1487,1,0,0,0,1487,1488,3,72,36,0,1488,71,1,0,0,
        0,1489,1503,3,714,357,0,1490,1503,5,221,0,0,1491,1503,5,240,0,0,
        1492,1503,5,241,0,0,1493,1503,5,242,0,0,1494,1503,5,243,0,0,1495,
        1503,5,244,0,0,1496,1503,5,245,0,0,1497,1503,5,246,0,0,1498,1503,
        5,247,0,0,1499,1503,5,248,0,0,1500,1503,5,249,0,0,1501,1503,5,250,
        0,0,1502,1489,1,0,0,0,1502,1490,1,0,0,0,1502,1491,1,0,0,0,1502,1492,
        1,0,0,0,1502,1493,1,0,0,0,1502,1494,1,0,0,0,1502,1495,1,0,0,0,1502,
        1496,1,0,0,0,1502,1497,1,0,0,0,1502,1498,1,0,0,0,1502,1499,1,0,0,
        0,1502,1500,1,0,0,0,1502,1501,1,0,0,0,1503,73,1,0,0,0,1504,1510,
        5,403,0,0,1505,1510,5,396,0,0,1506,1507,5,396,0,0,1507,1508,5,118,
        0,0,1508,1510,5,614,0,0,1509,1504,1,0,0,0,1509,1505,1,0,0,0,1509,
        1506,1,0,0,0,1510,75,1,0,0,0,1511,1512,5,187,0,0,1512,1513,7,14,
        0,0,1513,77,1,0,0,0,1514,1516,5,467,0,0,1515,1517,5,1124,0,0,1516,
        1515,1,0,0,0,1516,1517,1,0,0,0,1517,1518,1,0,0,0,1518,1537,3,592,
        296,0,1519,1537,3,76,38,0,1520,1521,5,192,0,0,1521,1522,5,547,0,
        0,1522,1537,3,584,292,0,1523,1524,5,368,0,0,1524,1537,5,1148,0,0,
        1525,1537,7,15,0,0,1526,1528,5,875,0,0,1527,1529,5,1124,0,0,1528,
        1527,1,0,0,0,1528,1529,1,0,0,0,1529,1530,1,0,0,0,1530,1537,5,1148,
        0,0,1531,1533,5,1000,0,0,1532,1534,5,1124,0,0,1533,1532,1,0,0,0,
        1533,1534,1,0,0,0,1534,1535,1,0,0,0,1535,1537,5,1148,0,0,1536,1514,
        1,0,0,0,1536,1519,1,0,0,0,1536,1520,1,0,0,0,1536,1523,1,0,0,0,1536,
        1525,1,0,0,0,1536,1526,1,0,0,0,1536,1531,1,0,0,0,1537,79,1,0,0,0,
        1538,1540,7,16,0,0,1539,1538,1,0,0,0,1539,1540,1,0,0,0,1540,1541,
        1,0,0,0,1541,1542,3,584,292,0,1542,1543,3,604,302,0,1543,81,1,0,
        0,0,1544,1545,3,584,292,0,1545,1546,3,604,302,0,1546,83,1,0,0,0,
        1547,1548,5,368,0,0,1548,1571,5,1148,0,0,1549,1550,5,468,0,0,1550,
        1571,5,160,0,0,1551,1553,5,114,0,0,1552,1551,1,0,0,0,1552,1553,1,
        0,0,0,1553,1554,1,0,0,0,1554,1571,5,47,0,0,1555,1556,5,381,0,0,1556,
        1566,5,160,0,0,1557,1558,5,521,0,0,1558,1566,5,160,0,0,1559,1560,
        5,135,0,0,1560,1561,5,160,0,0,1561,1566,5,388,0,0,1562,1563,5,112,
        0,0,1563,1564,5,160,0,0,1564,1566,5,388,0,0,1565,1555,1,0,0,0,1565,
        1557,1,0,0,0,1565,1559,1,0,0,0,1565,1562,1,0,0,0,1566,1571,1,0,0,
        0,1567,1568,5,160,0,0,1568,1569,5,606,0,0,1569,1571,7,11,0,0,1570,
        1547,1,0,0,0,1570,1549,1,0,0,0,1570,1552,1,0,0,0,1570,1565,1,0,0,
        0,1570,1567,1,0,0,0,1571,85,1,0,0,0,1572,1573,5,446,0,0,1573,1587,
        5,1148,0,0,1574,1575,5,39,0,0,1575,1587,5,1148,0,0,1576,1577,5,665,
        0,0,1577,1587,5,1148,0,0,1578,1579,5,551,0,0,1579,1587,5,1148,0,
        0,1580,1581,5,617,0,0,1581,1587,5,1148,0,0,1582,1583,5,542,0,0,1583,
        1587,5,1148,0,0,1584,1585,5,557,0,0,1585,1587,3,590,295,0,1586,1572,
        1,0,0,0,1586,1574,1,0,0,0,1586,1576,1,0,0,0,1586,1578,1,0,0,0,1586,
        1580,1,0,0,0,1586,1582,1,0,0,0,1586,1584,1,0,0,0,1587,87,1,0,0,0,
        1588,1589,5,1133,0,0,1589,1594,3,90,45,0,1590,1591,5,1135,0,0,1591,
        1593,3,90,45,0,1592,1590,1,0,0,0,1593,1596,1,0,0,0,1594,1592,1,0,
        0,0,1594,1595,1,0,0,0,1595,1597,1,0,0,0,1596,1594,1,0,0,0,1597,1598,
        5,1134,0,0,1598,89,1,0,0,0,1599,1600,3,556,278,0,1600,1601,3,92,
        46,0,1601,1611,1,0,0,0,1602,1604,3,96,48,0,1603,1605,5,114,0,0,1604,
        1603,1,0,0,0,1604,1605,1,0,0,0,1605,1607,1,0,0,0,1606,1608,5,57,
        0,0,1607,1606,1,0,0,0,1607,1608,1,0,0,0,1608,1611,1,0,0,0,1609,1611,
        3,104,52,0,1610,1599,1,0,0,0,1610,1602,1,0,0,0,1610,1609,1,0,0,0,
        1611,91,1,0,0,0,1612,1616,3,604,302,0,1613,1615,3,94,47,0,1614,1613,
        1,0,0,0,1615,1618,1,0,0,0,1616,1614,1,0,0,0,1616,1617,1,0,0,0,1617,
        1620,1,0,0,0,1618,1616,1,0,0,0,1619,1621,5,114,0,0,1620,1619,1,0,
        0,0,1620,1621,1,0,0,0,1621,1623,1,0,0,0,1622,1624,5,57,0,0,1623,
        1622,1,0,0,0,1623,1624,1,0,0,0,1624,93,1,0,0,0,1625,1679,3,600,300,
        0,1626,1627,5,42,0,0,1627,1679,3,634,317,0,1628,1679,5,673,0,0,1629,
        1679,5,459,0,0,1630,1635,5,342,0,0,1631,1632,5,118,0,0,1632,1633,
        5,184,0,0,1633,1635,3,636,318,0,1634,1630,1,0,0,0,1634,1631,1,0,
        0,0,1635,1679,1,0,0,0,1636,1638,5,130,0,0,1637,1636,1,0,0,0,1637,
        1638,1,0,0,0,1638,1639,1,0,0,0,1639,1679,5,91,0,0,1640,1642,5,181,
        0,0,1641,1643,5,91,0,0,1642,1641,1,0,0,0,1642,1643,1,0,0,0,1643,
        1679,1,0,0,0,1644,1645,5,368,0,0,1645,1679,5,1148,0,0,1646,1647,
        5,366,0,0,1647,1679,7,17,0,0,1648,1649,5,636,0,0,1649,1679,7,18,
        0,0,1650,1679,3,98,49,0,1651,1652,5,27,0,0,1652,1679,3,570,285,0,
        1653,1654,5,70,0,0,1654,1656,5,8,0,0,1655,1653,1,0,0,0,1655,1656,
        1,0,0,0,1656,1657,1,0,0,0,1657,1658,5,12,0,0,1658,1659,5,1133,0,
        0,1659,1660,3,688,344,0,1660,1662,5,1134,0,0,1661,1663,7,19,0,0,
        1662,1661,1,0,0,0,1662,1663,1,0,0,0,1663,1679,1,0,0,0,1664,1665,
        5,239,0,0,1665,1666,5,42,0,0,1666,1679,5,669,0,0,1667,1669,5,30,
        0,0,1668,1670,3,584,292,0,1669,1668,1,0,0,0,1669,1670,1,0,0,0,1670,
        1672,1,0,0,0,1671,1667,1,0,0,0,1671,1672,1,0,0,0,1672,1673,1,0,0,
        0,1673,1674,5,26,0,0,1674,1675,5,1133,0,0,1675,1676,3,688,344,0,
        1676,1677,5,1134,0,0,1677,1679,1,0,0,0,1678,1625,1,0,0,0,1678,1626,
        1,0,0,0,1678,1628,1,0,0,0,1678,1629,1,0,0,0,1678,1634,1,0,0,0,1678,
        1637,1,0,0,0,1678,1640,1,0,0,0,1678,1644,1,0,0,0,1678,1646,1,0,0,
        0,1678,1648,1,0,0,0,1678,1650,1,0,0,0,1678,1651,1,0,0,0,1678,1655,
        1,0,0,0,1678,1664,1,0,0,0,1678,1671,1,0,0,0,1679,95,1,0,0,0,1680,
        1682,5,30,0,0,1681,1683,3,584,292,0,1682,1681,1,0,0,0,1682,1683,
        1,0,0,0,1683,1685,1,0,0,0,1684,1680,1,0,0,0,1684,1685,1,0,0,0,1685,
        1686,1,0,0,0,1686,1687,5,130,0,0,1687,1689,5,91,0,0,1688,1690,3,
        584,292,0,1689,1688,1,0,0,0,1689,1690,1,0,0,0,1690,1692,1,0,0,0,
        1691,1693,3,76,38,0,1692,1691,1,0,0,0,1692,1693,1,0,0,0,1693,1694,
        1,0,0,0,1694,1698,3,622,311,0,1695,1697,3,78,39,0,1696,1695,1,0,
        0,0,1697,1700,1,0,0,0,1698,1696,1,0,0,0,1698,1699,1,0,0,0,1699,1750,
        1,0,0,0,1700,1698,1,0,0,0,1701,1703,5,30,0,0,1702,1704,3,584,292,
        0,1703,1702,1,0,0,0,1703,1704,1,0,0,0,1704,1706,1,0,0,0,1705,1701,
        1,0,0,0,1705,1706,1,0,0,0,1706,1707,1,0,0,0,1707,1709,5,181,0,0,
        1708,1710,7,20,0,0,1709,1708,1,0,0,0,1709,1710,1,0,0,0,1710,1712,
        1,0,0,0,1711,1713,3,584,292,0,1712,1711,1,0,0,0,1712,1713,1,0,0,
        0,1713,1715,1,0,0,0,1714,1716,3,76,38,0,1715,1714,1,0,0,0,1715,1716,
        1,0,0,0,1716,1717,1,0,0,0,1717,1721,3,622,311,0,1718,1720,3,78,39,
        0,1719,1718,1,0,0,0,1720,1723,1,0,0,0,1721,1719,1,0,0,0,1721,1722,
        1,0,0,0,1722,1750,1,0,0,0,1723,1721,1,0,0,0,1724,1726,5,30,0,0,1725,
        1727,3,584,292,0,1726,1725,1,0,0,0,1726,1727,1,0,0,0,1727,1729,1,
        0,0,0,1728,1724,1,0,0,0,1728,1729,1,0,0,0,1729,1730,1,0,0,0,1730,
        1731,5,67,0,0,1731,1733,5,91,0,0,1732,1734,3,584,292,0,1733,1732,
        1,0,0,0,1733,1734,1,0,0,0,1734,1735,1,0,0,0,1735,1736,3,622,311,
        0,1736,1737,3,98,49,0,1737,1750,1,0,0,0,1738,1740,5,30,0,0,1739,
        1741,3,584,292,0,1740,1739,1,0,0,0,1740,1741,1,0,0,0,1741,1743,1,
        0,0,0,1742,1738,1,0,0,0,1742,1743,1,0,0,0,1743,1744,1,0,0,0,1744,
        1745,5,26,0,0,1745,1746,5,1133,0,0,1746,1747,3,688,344,0,1747,1748,
        5,1134,0,0,1748,1750,1,0,0,0,1749,1684,1,0,0,0,1749,1705,1,0,0,0,
        1749,1728,1,0,0,0,1749,1742,1,0,0,0,1750,97,1,0,0,0,1751,1752,5,
        136,0,0,1752,1754,3,552,276,0,1753,1755,3,622,311,0,1754,1753,1,
        0,0,0,1754,1755,1,0,0,0,1755,1758,1,0,0,0,1756,1757,5,109,0,0,1757,
        1759,7,21,0,0,1758,1756,1,0,0,0,1758,1759,1,0,0,0,1759,1761,1,0,
        0,0,1760,1762,3,100,50,0,1761,1760,1,0,0,0,1761,1762,1,0,0,0,1762,
        99,1,0,0,0,1763,1764,5,118,0,0,1764,1765,5,44,0,0,1765,1769,3,102,
        51,0,1766,1767,5,118,0,0,1767,1768,5,184,0,0,1768,1770,3,102,51,
        0,1769,1766,1,0,0,0,1769,1770,1,0,0,0,1770,1780,1,0,0,0,1771,1772,
        5,118,0,0,1772,1773,5,184,0,0,1773,1777,3,102,51,0,1774,1775,5,118,
        0,0,1775,1776,5,44,0,0,1776,1778,3,102,51,0,1777,1774,1,0,0,0,1777,
        1778,1,0,0,0,1778,1780,1,0,0,0,1779,1763,1,0,0,0,1779,1771,1,0,0,
        0,1780,101,1,0,0,0,1781,1790,5,144,0,0,1782,1790,5,21,0,0,1783,1784,
        5,153,0,0,1784,1790,5,116,0,0,1785,1786,5,521,0,0,1786,1790,5,333,
        0,0,1787,1788,5,153,0,0,1788,1790,5,42,0,0,1789,1781,1,0,0,0,1789,
        1782,1,0,0,0,1789,1783,1,0,0,0,1789,1785,1,0,0,0,1789,1787,1,0,0,
        0,1790,103,1,0,0,0,1791,1793,7,20,0,0,1792,1794,3,584,292,0,1793,
        1792,1,0,0,0,1793,1794,1,0,0,0,1794,1796,1,0,0,0,1795,1797,3,76,
        38,0,1796,1795,1,0,0,0,1796,1797,1,0,0,0,1797,1798,1,0,0,0,1798,
        1802,3,622,311,0,1799,1801,3,78,39,0,1800,1799,1,0,0,0,1801,1804,
        1,0,0,0,1802,1800,1,0,0,0,1802,1803,1,0,0,0,1803,1820,1,0,0,0,1804,
        1802,1,0,0,0,1805,1807,7,22,0,0,1806,1808,7,20,0,0,1807,1806,1,0,
        0,0,1807,1808,1,0,0,0,1808,1810,1,0,0,0,1809,1811,3,584,292,0,1810,
        1809,1,0,0,0,1810,1811,1,0,0,0,1811,1812,1,0,0,0,1812,1816,3,622,
        311,0,1813,1815,3,78,39,0,1814,1813,1,0,0,0,1815,1818,1,0,0,0,1816,
        1814,1,0,0,0,1816,1817,1,0,0,0,1817,1820,1,0,0,0,1818,1816,1,0,0,
        0,1819,1791,1,0,0,0,1819,1805,1,0,0,0,1820,105,1,0,0,0,1821,1823,
        5,409,0,0,1822,1824,5,1124,0,0,1823,1822,1,0,0,0,1823,1824,1,0,0,
        0,1824,1826,1,0,0,0,1825,1827,3,572,286,0,1826,1825,1,0,0,0,1826,
        1827,1,0,0,0,1827,2007,1,0,0,0,1828,1830,5,875,0,0,1829,1831,5,1124,
        0,0,1830,1829,1,0,0,0,1830,1831,1,0,0,0,1831,1832,1,0,0,0,1832,2007,
        5,1148,0,0,1833,1835,5,341,0,0,1834,1836,5,1124,0,0,1835,1834,1,
        0,0,0,1835,1836,1,0,0,0,1836,1837,1,0,0,0,1837,2007,3,590,295,0,
        1838,1840,5,342,0,0,1839,1841,5,1124,0,0,1840,1839,1,0,0,0,1840,
        1841,1,0,0,0,1841,1842,1,0,0,0,1842,2007,3,590,295,0,1843,1845,5,
        343,0,0,1844,1846,5,1124,0,0,1845,1844,1,0,0,0,1845,1846,1,0,0,0,
        1846,1847,1,0,0,0,1847,2007,3,590,295,0,1848,1850,5,42,0,0,1849,
        1848,1,0,0,0,1849,1850,1,0,0,0,1850,1851,1,0,0,0,1851,1853,3,60,
        30,0,1852,1854,5,1124,0,0,1853,1852,1,0,0,0,1853,1854,1,0,0,0,1854,
        1857,1,0,0,0,1855,1858,3,568,284,0,1856,1858,5,42,0,0,1857,1855,
        1,0,0,0,1857,1856,1,0,0,0,1858,2007,1,0,0,0,1859,1861,7,23,0,0,1860,
        1862,5,1124,0,0,1861,1860,1,0,0,0,1861,1862,1,0,0,0,1862,1863,1,
        0,0,0,1863,2007,7,24,0,0,1864,1866,5,42,0,0,1865,1864,1,0,0,0,1865,
        1866,1,0,0,0,1866,1867,1,0,0,0,1867,1869,5,27,0,0,1868,1870,5,1124,
        0,0,1869,1868,1,0,0,0,1869,1870,1,0,0,0,1870,1871,1,0,0,0,1871,2007,
        3,570,285,0,1872,1874,5,368,0,0,1873,1875,5,1124,0,0,1874,1873,1,
        0,0,0,1874,1875,1,0,0,0,1875,1876,1,0,0,0,1876,2007,5,1148,0,0,1877,
        1879,5,373,0,0,1878,1880,5,1124,0,0,1879,1878,1,0,0,0,1879,1880,
        1,0,0,0,1880,1881,1,0,0,0,1881,2007,7,25,0,0,1882,1884,5,376,0,0,
        1883,1885,5,1124,0,0,1884,1883,1,0,0,0,1884,1885,1,0,0,0,1885,1886,
        1,0,0,0,1886,2007,5,1148,0,0,1887,1888,7,26,0,0,1888,1890,5,395,
        0,0,1889,1891,5,1124,0,0,1890,1889,1,0,0,0,1890,1891,1,0,0,0,1891,
        1892,1,0,0,0,1892,2007,5,1148,0,0,1893,1895,5,393,0,0,1894,1896,
        5,1124,0,0,1895,1894,1,0,0,0,1895,1896,1,0,0,0,1896,1897,1,0,0,0,
        1897,2007,7,24,0,0,1898,1900,5,405,0,0,1899,1901,5,1124,0,0,1900,
        1899,1,0,0,0,1900,1901,1,0,0,0,1901,1902,1,0,0,0,1902,2007,5,1148,
        0,0,1903,1905,7,27,0,0,1904,1906,5,1124,0,0,1905,1904,1,0,0,0,1905,
        1906,1,0,0,0,1906,1907,1,0,0,0,1907,2007,7,24,0,0,1908,1910,7,28,
        0,0,1909,1911,5,1124,0,0,1910,1909,1,0,0,0,1910,1911,1,0,0,0,1911,
        1912,1,0,0,0,1912,2007,3,590,295,0,1913,1915,5,406,0,0,1914,1916,
        5,1124,0,0,1915,1914,1,0,0,0,1915,1916,1,0,0,0,1916,1917,1,0,0,0,
        1917,2007,3,590,295,0,1918,1919,5,81,0,0,1919,1921,5,395,0,0,1920,
        1922,5,1124,0,0,1921,1920,1,0,0,0,1921,1922,1,0,0,0,1922,1923,1,
        0,0,0,1923,2007,5,1148,0,0,1924,1926,5,455,0,0,1925,1927,5,1124,
        0,0,1926,1925,1,0,0,0,1926,1927,1,0,0,0,1927,1928,1,0,0,0,1928,2007,
        7,29,0,0,1929,1931,5,467,0,0,1930,1932,5,1124,0,0,1931,1930,1,0,
        0,0,1931,1932,1,0,0,0,1932,1933,1,0,0,0,1933,2007,3,592,296,0,1934,
        1936,5,500,0,0,1935,1937,5,1124,0,0,1936,1935,1,0,0,0,1936,1937,
        1,0,0,0,1937,1938,1,0,0,0,1938,2007,3,590,295,0,1939,1941,5,510,
        0,0,1940,1942,5,1124,0,0,1941,1940,1,0,0,0,1941,1942,1,0,0,0,1942,
        1943,1,0,0,0,1943,2007,3,590,295,0,1944,1946,5,543,0,0,1945,1947,
        5,1124,0,0,1946,1945,1,0,0,0,1946,1947,1,0,0,0,1947,1948,1,0,0,0,
        1948,2007,7,13,0,0,1949,1951,5,551,0,0,1950,1952,5,1124,0,0,1951,
        1950,1,0,0,0,1951,1952,1,0,0,0,1952,1953,1,0,0,0,1953,2007,5,1148,
        0,0,1954,1956,5,602,0,0,1955,1957,5,1124,0,0,1956,1955,1,0,0,0,1956,
        1957,1,0,0,0,1957,1958,1,0,0,0,1958,2007,7,30,0,0,1959,1960,5,629,
        0,0,1960,2007,5,653,0,0,1961,1963,5,1000,0,0,1962,1964,5,1124,0,
        0,1963,1962,1,0,0,0,1963,1964,1,0,0,0,1964,1965,1,0,0,0,1965,2007,
        5,1148,0,0,1966,1968,5,631,0,0,1967,1969,5,1124,0,0,1968,1967,1,
        0,0,0,1968,1969,1,0,0,0,1969,1970,1,0,0,0,1970,2007,7,13,0,0,1971,
        1973,5,632,0,0,1972,1974,5,1124,0,0,1973,1972,1,0,0,0,1973,1974,
        1,0,0,0,1974,1975,1,0,0,0,1975,2007,7,13,0,0,1976,1978,5,633,0,0,
        1977,1979,5,1124,0,0,1978,1977,1,0,0,0,1978,1979,1,0,0,0,1979,1982,
        1,0,0,0,1980,1983,5,42,0,0,1981,1983,3,590,295,0,1982,1980,1,0,0,
        0,1982,1981,1,0,0,0,1983,2007,1,0,0,0,1984,1985,5,647,0,0,1985,1987,
        3,584,292,0,1986,1988,3,110,55,0,1987,1986,1,0,0,0,1987,1988,1,0,
        0,0,1988,2007,1,0,0,0,1989,1990,5,648,0,0,1990,1991,5,1124,0,0,1991,
        2007,3,108,54,0,1992,2007,3,110,55,0,1993,1995,5,654,0,0,1994,1996,
        5,1124,0,0,1995,1994,1,0,0,0,1995,1996,1,0,0,0,1996,1997,1,0,0,0,
        1997,2007,7,24,0,0,1998,2000,5,180,0,0,1999,2001,5,1124,0,0,2000,
        1999,1,0,0,0,2000,2001,1,0,0,0,2001,2002,1,0,0,0,2002,2003,5,1133,
        0,0,2003,2004,3,620,310,0,2004,2005,5,1134,0,0,2005,2007,1,0,0,0,
        2006,1821,1,0,0,0,2006,1828,1,0,0,0,2006,1833,1,0,0,0,2006,1838,
        1,0,0,0,2006,1843,1,0,0,0,2006,1849,1,0,0,0,2006,1859,1,0,0,0,2006,
        1865,1,0,0,0,2006,1872,1,0,0,0,2006,1877,1,0,0,0,2006,1882,1,0,0,
        0,2006,1887,1,0,0,0,2006,1893,1,0,0,0,2006,1898,1,0,0,0,2006,1903,
        1,0,0,0,2006,1908,1,0,0,0,2006,1913,1,0,0,0,2006,1918,1,0,0,0,2006,
        1924,1,0,0,0,2006,1929,1,0,0,0,2006,1934,1,0,0,0,2006,1939,1,0,0,
        0,2006,1944,1,0,0,0,2006,1949,1,0,0,0,2006,1954,1,0,0,0,2006,1959,
        1,0,0,0,2006,1961,1,0,0,0,2006,1966,1,0,0,0,2006,1971,1,0,0,0,2006,
        1976,1,0,0,0,2006,1984,1,0,0,0,2006,1989,1,0,0,0,2006,1992,1,0,0,
        0,2006,1993,1,0,0,0,2006,1998,1,0,0,0,2007,107,1,0,0,0,2008,2009,
        7,31,0,0,2009,109,1,0,0,0,2010,2011,5,636,0,0,2011,2012,7,18,0,0,
        2012,111,1,0,0,0,2013,2014,5,129,0,0,2014,2015,5,19,0,0,2015,2018,
        3,114,57,0,2016,2017,5,550,0,0,2017,2019,3,590,295,0,2018,2016,1,
        0,0,0,2018,2019,1,0,0,0,2019,2027,1,0,0,0,2020,2021,5,641,0,0,2021,
        2022,5,19,0,0,2022,2025,3,116,58,0,2023,2024,5,642,0,0,2024,2026,
        3,590,295,0,2025,2023,1,0,0,0,2025,2026,1,0,0,0,2026,2028,1,0,0,
        0,2027,2020,1,0,0,0,2027,2028,1,0,0,0,2028,2040,1,0,0,0,2029,2030,
        5,1133,0,0,2030,2035,3,118,59,0,2031,2032,5,1135,0,0,2032,2034,3,
        118,59,0,2033,2031,1,0,0,0,2034,2037,1,0,0,0,2035,2033,1,0,0,0,2035,
        2036,1,0,0,0,2036,2038,1,0,0,0,2037,2035,1,0,0,0,2038,2039,5,1134,
        0,0,2039,2041,1,0,0,0,2040,2029,1,0,0,0,2040,2041,1,0,0,0,2041,113,
        1,0,0,0,2042,2044,5,100,0,0,2043,2042,1,0,0,0,2043,2044,1,0,0,0,
        2044,2045,1,0,0,0,2045,2046,5,443,0,0,2046,2047,5,1133,0,0,2047,
        2048,3,688,344,0,2048,2049,5,1134,0,0,2049,2089,1,0,0,0,2050,2052,
        5,100,0,0,2051,2050,1,0,0,0,2051,2052,1,0,0,0,2052,2053,1,0,0,0,
        2053,2057,5,91,0,0,2054,2055,5,336,0,0,2055,2056,5,1124,0,0,2056,
        2058,7,32,0,0,2057,2054,1,0,0,0,2057,2058,1,0,0,0,2058,2059,1,0,
        0,0,2059,2061,5,1133,0,0,2060,2062,3,616,308,0,2061,2060,1,0,0,0,
        2061,2062,1,0,0,0,2062,2063,1,0,0,0,2063,2089,5,1134,0,0,2064,2074,
        5,133,0,0,2065,2066,5,1133,0,0,2066,2067,3,688,344,0,2067,2068,5,
        1134,0,0,2068,2075,1,0,0,0,2069,2070,5,365,0,0,2070,2071,5,1133,
        0,0,2071,2072,3,616,308,0,2072,2073,5,1134,0,0,2073,2075,1,0,0,0,
        2074,2065,1,0,0,0,2074,2069,1,0,0,0,2075,2089,1,0,0,0,2076,2086,
        5,473,0,0,2077,2078,5,1133,0,0,2078,2079,3,688,344,0,2079,2080,5,
        1134,0,0,2080,2087,1,0,0,0,2081,2082,5,365,0,0,2082,2083,5,1133,
        0,0,2083,2084,3,616,308,0,2084,2085,5,1134,0,0,2085,2087,1,0,0,0,
        2086,2077,1,0,0,0,2086,2081,1,0,0,0,2087,2089,1,0,0,0,2088,2043,
        1,0,0,0,2088,2051,1,0,0,0,2088,2064,1,0,0,0,2088,2076,1,0,0,0,2089,
        115,1,0,0,0,2090,2092,5,100,0,0,2091,2090,1,0,0,0,2091,2092,1,0,
        0,0,2092,2093,1,0,0,0,2093,2094,5,443,0,0,2094,2095,5,1133,0,0,2095,
        2096,3,688,344,0,2096,2097,5,1134,0,0,2097,2112,1,0,0,0,2098,2100,
        5,100,0,0,2099,2098,1,0,0,0,2099,2100,1,0,0,0,2100,2101,1,0,0,0,
        2101,2105,5,91,0,0,2102,2103,5,336,0,0,2103,2104,5,1124,0,0,2104,
        2106,7,32,0,0,2105,2102,1,0,0,0,2105,2106,1,0,0,0,2106,2107,1,0,
        0,0,2107,2108,5,1133,0,0,2108,2109,3,616,308,0,2109,2110,5,1134,
        0,0,2110,2112,1,0,0,0,2111,2091,1,0,0,0,2111,2099,1,0,0,0,2112,117,
        1,0,0,0,2113,2114,5,129,0,0,2114,2115,3,584,292,0,2115,2116,5,188,
        0,0,2116,2117,5,471,0,0,2117,2118,5,651,0,0,2118,2119,5,1133,0,0,
        2119,2124,3,120,60,0,2120,2121,5,1135,0,0,2121,2123,3,120,60,0,2122,
        2120,1,0,0,0,2123,2126,1,0,0,0,2124,2122,1,0,0,0,2124,2125,1,0,0,
        0,2125,2127,1,0,0,0,2126,2124,1,0,0,0,2127,2131,5,1134,0,0,2128,
        2130,3,126,63,0,2129,2128,1,0,0,0,2130,2133,1,0,0,0,2131,2129,1,
        0,0,0,2131,2132,1,0,0,0,2132,2145,1,0,0,0,2133,2131,1,0,0,0,2134,
        2135,5,1133,0,0,2135,2140,3,124,62,0,2136,2137,5,1135,0,0,2137,2139,
        3,124,62,0,2138,2136,1,0,0,0,2139,2142,1,0,0,0,2140,2138,1,0,0,0,
        2140,2141,1,0,0,0,2141,2143,1,0,0,0,2142,2140,1,0,0,0,2143,2144,
        5,1134,0,0,2144,2146,1,0,0,0,2145,2134,1,0,0,0,2145,2146,1,0,0,0,
        2146,2260,1,0,0,0,2147,2148,5,129,0,0,2148,2149,3,584,292,0,2149,
        2150,5,188,0,0,2150,2151,5,471,0,0,2151,2152,5,651,0,0,2152,2156,
        3,120,60,0,2153,2155,3,126,63,0,2154,2153,1,0,0,0,2155,2158,1,0,
        0,0,2156,2154,1,0,0,0,2156,2157,1,0,0,0,2157,2170,1,0,0,0,2158,2156,
        1,0,0,0,2159,2160,5,1133,0,0,2160,2165,3,124,62,0,2161,2162,5,1135,
        0,0,2162,2164,3,124,62,0,2163,2161,1,0,0,0,2164,2167,1,0,0,0,2165,
        2163,1,0,0,0,2165,2166,1,0,0,0,2166,2168,1,0,0,0,2167,2165,1,0,0,
        0,2168,2169,5,1134,0,0,2169,2171,1,0,0,0,2170,2159,1,0,0,0,2170,
        2171,1,0,0,0,2171,2260,1,0,0,0,2172,2173,5,129,0,0,2173,2174,3,584,
        292,0,2174,2175,5,188,0,0,2175,2176,5,80,0,0,2176,2177,5,1133,0,
        0,2177,2182,3,120,60,0,2178,2179,5,1135,0,0,2179,2181,3,120,60,0,
        2180,2178,1,0,0,0,2181,2184,1,0,0,0,2182,2180,1,0,0,0,2182,2183,
        1,0,0,0,2183,2185,1,0,0,0,2184,2182,1,0,0,0,2185,2189,5,1134,0,0,
        2186,2188,3,126,63,0,2187,2186,1,0,0,0,2188,2191,1,0,0,0,2189,2187,
        1,0,0,0,2189,2190,1,0,0,0,2190,2203,1,0,0,0,2191,2189,1,0,0,0,2192,
        2193,5,1133,0,0,2193,2198,3,124,62,0,2194,2195,5,1135,0,0,2195,2197,
        3,124,62,0,2196,2194,1,0,0,0,2197,2200,1,0,0,0,2198,2196,1,0,0,0,
        2198,2199,1,0,0,0,2199,2201,1,0,0,0,2200,2198,1,0,0,0,2201,2202,
        5,1134,0,0,2202,2204,1,0,0,0,2203,2192,1,0,0,0,2203,2204,1,0,0,0,
        2204,2260,1,0,0,0,2205,2206,5,129,0,0,2206,2207,3,584,292,0,2207,
        2208,5,188,0,0,2208,2209,5,80,0,0,2209,2210,5,1133,0,0,2210,2215,
        3,122,61,0,2211,2212,5,1135,0,0,2212,2214,3,122,61,0,2213,2211,1,
        0,0,0,2214,2217,1,0,0,0,2215,2213,1,0,0,0,2215,2216,1,0,0,0,2216,
        2218,1,0,0,0,2217,2215,1,0,0,0,2218,2222,5,1134,0,0,2219,2221,3,
        126,63,0,2220,2219,1,0,0,0,2221,2224,1,0,0,0,2222,2220,1,0,0,0,2222,
        2223,1,0,0,0,2223,2236,1,0,0,0,2224,2222,1,0,0,0,2225,2226,5,1133,
        0,0,2226,2231,3,124,62,0,2227,2228,5,1135,0,0,2228,2230,3,124,62,
        0,2229,2227,1,0,0,0,2230,2233,1,0,0,0,2231,2229,1,0,0,0,2231,2232,
        1,0,0,0,2232,2234,1,0,0,0,2233,2231,1,0,0,0,2234,2235,5,1134,0,0,
        2235,2237,1,0,0,0,2236,2225,1,0,0,0,2236,2237,1,0,0,0,2237,2260,
        1,0,0,0,2238,2239,5,129,0,0,2239,2243,3,584,292,0,2240,2242,3,126,
        63,0,2241,2240,1,0,0,0,2242,2245,1,0,0,0,2243,2241,1,0,0,0,2243,
        2244,1,0,0,0,2244,2257,1,0,0,0,2245,2243,1,0,0,0,2246,2247,5,1133,
        0,0,2247,2252,3,124,62,0,2248,2249,5,1135,0,0,2249,2251,3,124,62,
        0,2250,2248,1,0,0,0,2251,2254,1,0,0,0,2252,2250,1,0,0,0,2252,2253,
        1,0,0,0,2253,2255,1,0,0,0,2254,2252,1,0,0,0,2255,2256,5,1134,0,0,
        2256,2258,1,0,0,0,2257,2246,1,0,0,0,2257,2258,1,0,0,0,2258,2260,
        1,0,0,0,2259,2113,1,0,0,0,2259,2147,1,0,0,0,2259,2172,1,0,0,0,2259,
        2205,1,0,0,0,2259,2238,1,0,0,0,2260,119,1,0,0,0,2261,2265,3,602,
        301,0,2262,2265,3,688,344,0,2263,2265,5,110,0,0,2264,2261,1,0,0,
        0,2264,2262,1,0,0,0,2264,2263,1,0,0,0,2265,121,1,0,0,0,2266,2267,
        5,1133,0,0,2267,2270,3,120,60,0,2268,2269,5,1135,0,0,2269,2271,3,
        120,60,0,2270,2268,1,0,0,0,2271,2272,1,0,0,0,2272,2270,1,0,0,0,2272,
        2273,1,0,0,0,2273,2274,1,0,0,0,2274,2275,5,1134,0,0,2275,123,1,0,
        0,0,2276,2277,5,641,0,0,2277,2281,3,584,292,0,2278,2280,3,126,63,
        0,2279,2278,1,0,0,0,2280,2283,1,0,0,0,2281,2279,1,0,0,0,2281,2282,
        1,0,0,0,2282,125,1,0,0,0,2283,2281,1,0,0,0,2284,2286,5,42,0,0,2285,
        2284,1,0,0,0,2285,2286,1,0,0,0,2286,2288,1,0,0,0,2287,2289,5,636,
        0,0,2288,2287,1,0,0,0,2288,2289,1,0,0,0,2289,2290,1,0,0,0,2290,2292,
        5,409,0,0,2291,2293,5,1124,0,0,2292,2291,1,0,0,0,2292,2293,1,0,0,
        0,2293,2294,1,0,0,0,2294,2333,3,572,286,0,2295,2297,5,368,0,0,2296,
        2298,5,1124,0,0,2297,2296,1,0,0,0,2297,2298,1,0,0,0,2298,2299,1,
        0,0,0,2299,2333,5,1148,0,0,2300,2301,5,388,0,0,2301,2303,5,395,0,
        0,2302,2304,5,1124,0,0,2303,2302,1,0,0,0,2303,2304,1,0,0,0,2304,
        2305,1,0,0,0,2305,2333,5,1148,0,0,2306,2307,5,81,0,0,2307,2309,5,
        395,0,0,2308,2310,5,1124,0,0,2309,2308,1,0,0,0,2309,2310,1,0,0,0,
        2310,2311,1,0,0,0,2311,2333,5,1148,0,0,2312,2314,5,500,0,0,2313,
        2315,5,1124,0,0,2314,2313,1,0,0,0,2314,2315,1,0,0,0,2315,2316,1,
        0,0,0,2316,2333,3,590,295,0,2317,2319,5,510,0,0,2318,2320,5,1124,
        0,0,2319,2318,1,0,0,0,2319,2320,1,0,0,0,2320,2321,1,0,0,0,2321,2333,
        3,590,295,0,2322,2324,5,647,0,0,2323,2325,5,1124,0,0,2324,2323,1,
        0,0,0,2324,2325,1,0,0,0,2325,2326,1,0,0,0,2326,2333,3,584,292,0,
        2327,2329,5,528,0,0,2328,2330,5,1124,0,0,2329,2328,1,0,0,0,2329,
        2330,1,0,0,0,2330,2331,1,0,0,0,2331,2333,3,584,292,0,2332,2285,1,
        0,0,0,2332,2295,1,0,0,0,2332,2300,1,0,0,0,2332,2306,1,0,0,0,2332,
        2312,1,0,0,0,2332,2317,1,0,0,0,2332,2322,1,0,0,0,2332,2327,1,0,0,
        0,2333,127,1,0,0,0,2334,2335,5,7,0,0,2335,2337,7,0,0,0,2336,2338,
        3,584,292,0,2337,2336,1,0,0,0,2337,2338,1,0,0,0,2338,2340,1,0,0,
        0,2339,2341,3,58,29,0,2340,2339,1,0,0,0,2341,2342,1,0,0,0,2342,2340,
        1,0,0,0,2342,2343,1,0,0,0,2343,2353,1,0,0,0,2344,2345,5,7,0,0,2345,
        2346,7,0,0,0,2346,2347,3,584,292,0,2347,2348,5,664,0,0,2348,2349,
        5,388,0,0,2349,2350,5,395,0,0,2350,2351,5,516,0,0,2351,2353,1,0,
        0,0,2352,2334,1,0,0,0,2352,2344,1,0,0,0,2353,129,1,0,0,0,2354,2356,
        5,7,0,0,2355,2357,3,64,32,0,2356,2355,1,0,0,0,2356,2357,1,0,0,0,
        2357,2358,1,0,0,0,2358,2359,5,415,0,0,2359,2363,3,550,275,0,2360,
        2361,5,118,0,0,2361,2362,5,605,0,0,2362,2364,3,66,33,0,2363,2360,
        1,0,0,0,2363,2364,1,0,0,0,2364,2371,1,0,0,0,2365,2366,5,118,0,0,
        2366,2368,5,371,0,0,2367,2369,5,114,0,0,2368,2367,1,0,0,0,2368,2369,
        1,0,0,0,2369,2370,1,0,0,0,2370,2372,5,561,0,0,2371,2365,1,0,0,0,
        2371,2372,1,0,0,0,2372,2376,1,0,0,0,2373,2374,5,139,0,0,2374,2375,
        5,175,0,0,2375,2377,3,550,275,0,2376,2373,1,0,0,0,2376,2377,1,0,
        0,0,2377,2379,1,0,0,0,2378,2380,3,74,37,0,2379,2378,1,0,0,0,2379,
        2380,1,0,0,0,2380,2383,1,0,0,0,2381,2382,5,368,0,0,2382,2384,5,1148,
        0,0,2383,2381,1,0,0,0,2383,2384,1,0,0,0,2384,2387,1,0,0,0,2385,2386,
        5,399,0,0,2386,2388,3,388,194,0,2387,2385,1,0,0,0,2387,2388,1,0,
        0,0,2388,131,1,0,0,0,2389,2390,5,7,0,0,2390,2391,5,437,0,0,2391,
        2395,3,550,275,0,2392,2394,3,84,42,0,2393,2392,1,0,0,0,2394,2397,
        1,0,0,0,2395,2393,1,0,0,0,2395,2396,1,0,0,0,2396,133,1,0,0,0,2397,
        2395,1,0,0,0,2398,2399,5,7,0,0,2399,2400,5,457,0,0,2400,2401,5,599,
        0,0,2401,2402,5,791,0,0,2402,2403,5,477,0,0,2403,2404,5,91,0,0,2404,
        135,1,0,0,0,2405,2406,5,7,0,0,2406,2407,5,475,0,0,2407,2408,5,73,
        0,0,2408,2409,3,584,292,0,2409,2410,5,5,0,0,2410,2411,5,659,0,0,
        2411,2417,5,1148,0,0,2412,2414,5,453,0,0,2413,2415,5,1124,0,0,2414,
        2413,1,0,0,0,2414,2415,1,0,0,0,2415,2416,1,0,0,0,2416,2418,3,592,
        296,0,2417,2412,1,0,0,0,2417,2418,1,0,0,0,2418,2420,1,0,0,0,2419,
        2421,5,674,0,0,2420,2419,1,0,0,0,2420,2421,1,0,0,0,2421,2422,1,0,
        0,0,2422,2424,5,409,0,0,2423,2425,5,1124,0,0,2424,2423,1,0,0,0,2424,
        2425,1,0,0,0,2425,2426,1,0,0,0,2426,2427,3,572,286,0,2427,137,1,
        0,0,0,2428,2429,5,7,0,0,2429,2430,5,131,0,0,2430,2434,3,550,275,
        0,2431,2433,3,84,42,0,2432,2431,1,0,0,0,2433,2436,1,0,0,0,2434,2432,
        1,0,0,0,2434,2435,1,0,0,0,2435,139,1,0,0,0,2436,2434,1,0,0,0,2437,
        2438,5,7,0,0,2438,2439,5,608,0,0,2439,2440,3,584,292,0,2440,2441,
        5,541,0,0,2441,2442,5,1133,0,0,2442,2447,3,86,43,0,2443,2444,5,1135,
        0,0,2444,2446,3,86,43,0,2445,2443,1,0,0,0,2446,2449,1,0,0,0,2447,
        2445,1,0,0,0,2447,2448,1,0,0,0,2448,2450,1,0,0,0,2449,2447,1,0,0,
        0,2450,2451,5,1134,0,0,2451,141,1,0,0,0,2452,2454,5,7,0,0,2453,2455,
        7,1,0,0,2454,2453,1,0,0,0,2454,2455,1,0,0,0,2455,2457,1,0,0,0,2456,
        2458,5,78,0,0,2457,2456,1,0,0,0,2457,2458,1,0,0,0,2458,2459,1,0,
        0,0,2459,2460,5,172,0,0,2460,2462,3,552,276,0,2461,2463,3,646,323,
        0,2462,2461,1,0,0,0,2462,2463,1,0,0,0,2463,2472,1,0,0,0,2464,2469,
        3,148,74,0,2465,2466,5,1135,0,0,2466,2468,3,148,74,0,2467,2465,1,
        0,0,0,2468,2471,1,0,0,0,2469,2467,1,0,0,0,2469,2470,1,0,0,0,2470,
        2473,1,0,0,0,2471,2469,1,0,0,0,2472,2464,1,0,0,0,2472,2473,1,0,0,
        0,2473,2475,1,0,0,0,2474,2476,3,112,56,0,2475,2474,1,0,0,0,2475,
        2476,1,0,0,0,2476,143,1,0,0,0,2477,2478,5,7,0,0,2478,2479,5,647,
        0,0,2479,2480,3,584,292,0,2480,2481,7,33,0,0,2481,2482,5,389,0,0,
        2482,2486,5,1148,0,0,2483,2484,5,453,0,0,2484,2485,5,1124,0,0,2485,
        2487,3,592,296,0,2486,2483,1,0,0,0,2486,2487,1,0,0,0,2487,2489,1,
        0,0,0,2488,2490,5,674,0,0,2489,2488,1,0,0,0,2489,2490,1,0,0,0,2490,
        2491,1,0,0,0,2491,2493,5,409,0,0,2492,2494,5,1124,0,0,2493,2492,
        1,0,0,0,2493,2494,1,0,0,0,2494,2495,1,0,0,0,2495,2496,3,572,286,
        0,2496,145,1,0,0,0,2497,2501,5,7,0,0,2498,2499,5,336,0,0,2499,2500,
        5,1124,0,0,2500,2502,7,10,0,0,2501,2498,1,0,0,0,2501,2502,1,0,0,
        0,2502,2504,1,0,0,0,2503,2505,3,64,32,0,2504,2503,1,0,0,0,2504,2505,
        1,0,0,0,2505,2509,1,0,0,0,2506,2507,5,160,0,0,2507,2508,5,606,0,
        0,2508,2510,7,11,0,0,2509,2506,1,0,0,0,2509,2510,1,0,0,0,2510,2511,
        1,0,0,0,2511,2512,5,671,0,0,2512,2517,3,550,275,0,2513,2514,5,1133,
        0,0,2514,2515,3,616,308,0,2515,2516,5,1134,0,0,2516,2518,1,0,0,0,
        2517,2513,1,0,0,0,2517,2518,1,0,0,0,2518,2519,1,0,0,0,2519,2520,
        5,12,0,0,2520,2527,3,200,100,0,2521,2523,5,192,0,0,2522,2524,7,12,
        0,0,2523,2522,1,0,0,0,2523,2524,1,0,0,0,2524,2525,1,0,0,0,2525,2526,
        5,26,0,0,2526,2528,5,120,0,0,2527,2521,1,0,0,0,2527,2528,1,0,0,0,
        2528,147,1,0,0,0,2529,2536,3,106,53,0,2530,2532,5,1135,0,0,2531,
        2530,1,0,0,0,2531,2532,1,0,0,0,2532,2533,1,0,0,0,2533,2535,3,106,
        53,0,2534,2531,1,0,0,0,2535,2538,1,0,0,0,2536,2534,1,0,0,0,2536,
        2537,1,0,0,0,2537,2881,1,0,0,0,2538,2536,1,0,0,0,2539,2541,5,5,0,
        0,2540,2542,5,28,0,0,2541,2540,1,0,0,0,2541,2542,1,0,0,0,2542,2543,
        1,0,0,0,2543,2544,3,584,292,0,2544,2548,3,92,46,0,2545,2549,5,430,
        0,0,2546,2547,5,334,0,0,2547,2549,3,584,292,0,2548,2545,1,0,0,0,
        2548,2546,1,0,0,0,2548,2549,1,0,0,0,2549,2881,1,0,0,0,2550,2552,
        5,5,0,0,2551,2553,5,28,0,0,2552,2551,1,0,0,0,2552,2553,1,0,0,0,2553,
        2554,1,0,0,0,2554,2555,5,1133,0,0,2555,2556,3,584,292,0,2556,2563,
        3,92,46,0,2557,2558,5,1135,0,0,2558,2559,3,584,292,0,2559,2560,3,
        92,46,0,2560,2562,1,0,0,0,2561,2557,1,0,0,0,2562,2565,1,0,0,0,2563,
        2561,1,0,0,0,2563,2564,1,0,0,0,2564,2566,1,0,0,0,2565,2563,1,0,0,
        0,2566,2567,5,1134,0,0,2567,2881,1,0,0,0,2568,2569,5,5,0,0,2569,
        2571,7,20,0,0,2570,2572,3,584,292,0,2571,2570,1,0,0,0,2571,2572,
        1,0,0,0,2572,2574,1,0,0,0,2573,2575,3,76,38,0,2574,2573,1,0,0,0,
        2574,2575,1,0,0,0,2575,2576,1,0,0,0,2576,2580,3,622,311,0,2577,2579,
        3,78,39,0,2578,2577,1,0,0,0,2579,2582,1,0,0,0,2580,2578,1,0,0,0,
        2580,2581,1,0,0,0,2581,2881,1,0,0,0,2582,2580,1,0,0,0,2583,2588,
        5,5,0,0,2584,2586,5,30,0,0,2585,2587,3,584,292,0,2586,2585,1,0,0,
        0,2586,2587,1,0,0,0,2587,2589,1,0,0,0,2588,2584,1,0,0,0,2588,2589,
        1,0,0,0,2589,2590,1,0,0,0,2590,2591,5,130,0,0,2591,2593,5,91,0,0,
        2592,2594,3,584,292,0,2593,2592,1,0,0,0,2593,2594,1,0,0,0,2594,2596,
        1,0,0,0,2595,2597,3,76,38,0,2596,2595,1,0,0,0,2596,2597,1,0,0,0,
        2597,2598,1,0,0,0,2598,2602,3,622,311,0,2599,2601,3,78,39,0,2600,
        2599,1,0,0,0,2601,2604,1,0,0,0,2602,2600,1,0,0,0,2602,2603,1,0,0,
        0,2603,2881,1,0,0,0,2604,2602,1,0,0,0,2605,2610,5,5,0,0,2606,2608,
        5,30,0,0,2607,2609,3,584,292,0,2608,2607,1,0,0,0,2608,2609,1,0,0,
        0,2609,2611,1,0,0,0,2610,2606,1,0,0,0,2610,2611,1,0,0,0,2611,2612,
        1,0,0,0,2612,2614,5,181,0,0,2613,2615,7,20,0,0,2614,2613,1,0,0,0,
        2614,2615,1,0,0,0,2615,2617,1,0,0,0,2616,2618,3,584,292,0,2617,2616,
        1,0,0,0,2617,2618,1,0,0,0,2618,2620,1,0,0,0,2619,2621,3,76,38,0,
        2620,2619,1,0,0,0,2620,2621,1,0,0,0,2621,2622,1,0,0,0,2622,2626,
        3,622,311,0,2623,2625,3,78,39,0,2624,2623,1,0,0,0,2625,2628,1,0,
        0,0,2626,2624,1,0,0,0,2626,2627,1,0,0,0,2627,2881,1,0,0,0,2628,2626,
        1,0,0,0,2629,2630,5,5,0,0,2630,2632,7,22,0,0,2631,2633,7,20,0,0,
        2632,2631,1,0,0,0,2632,2633,1,0,0,0,2633,2635,1,0,0,0,2634,2636,
        3,584,292,0,2635,2634,1,0,0,0,2635,2636,1,0,0,0,2636,2637,1,0,0,
        0,2637,2641,3,622,311,0,2638,2640,3,78,39,0,2639,2638,1,0,0,0,2640,
        2643,1,0,0,0,2641,2639,1,0,0,0,2641,2642,1,0,0,0,2642,2881,1,0,0,
        0,2643,2641,1,0,0,0,2644,2649,5,5,0,0,2645,2647,5,30,0,0,2646,2648,
        3,584,292,0,2647,2646,1,0,0,0,2647,2648,1,0,0,0,2648,2650,1,0,0,
        0,2649,2645,1,0,0,0,2649,2650,1,0,0,0,2650,2651,1,0,0,0,2651,2652,
        5,67,0,0,2652,2654,5,91,0,0,2653,2655,3,584,292,0,2654,2653,1,0,
        0,0,2654,2655,1,0,0,0,2655,2656,1,0,0,0,2656,2657,3,622,311,0,2657,
        2658,3,98,49,0,2658,2881,1,0,0,0,2659,2664,5,5,0,0,2660,2662,5,30,
        0,0,2661,2663,3,584,292,0,2662,2661,1,0,0,0,2662,2663,1,0,0,0,2663,
        2665,1,0,0,0,2664,2660,1,0,0,0,2664,2665,1,0,0,0,2665,2666,1,0,0,
        0,2666,2673,5,26,0,0,2667,2674,3,584,292,0,2668,2674,3,594,297,0,
        2669,2670,5,1133,0,0,2670,2671,3,688,344,0,2671,2672,5,1134,0,0,
        2672,2674,1,0,0,0,2673,2667,1,0,0,0,2673,2668,1,0,0,0,2673,2669,
        1,0,0,0,2674,2676,1,0,0,0,2675,2677,5,114,0,0,2676,2675,1,0,0,0,
        2676,2677,1,0,0,0,2677,2679,1,0,0,0,2678,2680,5,57,0,0,2679,2678,
        1,0,0,0,2679,2680,1,0,0,0,2680,2881,1,0,0,0,2681,2686,5,7,0,0,2682,
        2684,5,30,0,0,2683,2685,3,584,292,0,2684,2683,1,0,0,0,2684,2685,
        1,0,0,0,2685,2687,1,0,0,0,2686,2682,1,0,0,0,2686,2687,1,0,0,0,2687,
        2688,1,0,0,0,2688,2695,5,26,0,0,2689,2696,3,584,292,0,2690,2696,
        3,594,297,0,2691,2692,5,1133,0,0,2692,2693,3,688,344,0,2693,2694,
        5,1134,0,0,2694,2696,1,0,0,0,2695,2689,1,0,0,0,2695,2690,1,0,0,0,
        2695,2691,1,0,0,0,2696,2698,1,0,0,0,2697,2699,5,114,0,0,2698,2697,
        1,0,0,0,2698,2699,1,0,0,0,2699,2701,1,0,0,0,2700,2702,5,57,0,0,2701,
        2700,1,0,0,0,2701,2702,1,0,0,0,2702,2881,1,0,0,0,2703,2708,5,5,0,
        0,2704,2706,5,30,0,0,2705,2707,3,584,292,0,2706,2705,1,0,0,0,2706,
        2707,1,0,0,0,2707,2709,1,0,0,0,2708,2704,1,0,0,0,2708,2709,1,0,0,
        0,2709,2710,1,0,0,0,2710,2711,5,26,0,0,2711,2712,5,1133,0,0,2712,
        2713,3,688,344,0,2713,2714,5,1134,0,0,2714,2881,1,0,0,0,2715,2717,
        5,336,0,0,2716,2718,5,1124,0,0,2717,2716,1,0,0,0,2717,2718,1,0,0,
        0,2718,2719,1,0,0,0,2719,2881,7,34,0,0,2720,2722,5,7,0,0,2721,2723,
        5,28,0,0,2722,2721,1,0,0,0,2722,2723,1,0,0,0,2723,2724,1,0,0,0,2724,
        2730,3,584,292,0,2725,2726,5,153,0,0,2726,2727,5,42,0,0,2727,2731,
        3,634,317,0,2728,2729,5,51,0,0,2729,2731,5,42,0,0,2730,2725,1,0,
        0,0,2730,2728,1,0,0,0,2731,2881,1,0,0,0,2732,2734,5,24,0,0,2733,
        2735,5,28,0,0,2734,2733,1,0,0,0,2734,2735,1,0,0,0,2735,2736,1,0,
        0,0,2736,2737,3,584,292,0,2737,2738,3,584,292,0,2738,2742,3,92,46,
        0,2739,2743,5,430,0,0,2740,2741,5,334,0,0,2741,2743,3,584,292,0,
        2742,2739,1,0,0,0,2742,2740,1,0,0,0,2742,2743,1,0,0,0,2743,2881,
        1,0,0,0,2744,2745,5,139,0,0,2745,2746,5,28,0,0,2746,2747,3,584,292,
        0,2747,2748,5,175,0,0,2748,2749,3,584,292,0,2749,2881,1,0,0,0,2750,
        2752,5,103,0,0,2751,2753,5,1124,0,0,2752,2751,1,0,0,0,2752,2753,
        1,0,0,0,2753,2754,1,0,0,0,2754,2881,7,4,0,0,2755,2757,5,512,0,0,
        2756,2758,5,28,0,0,2757,2756,1,0,0,0,2757,2758,1,0,0,0,2758,2759,
        1,0,0,0,2759,2760,3,584,292,0,2760,2764,3,92,46,0,2761,2765,5,430,
        0,0,2762,2763,5,334,0,0,2763,2765,3,584,292,0,2764,2761,1,0,0,0,
        2764,2762,1,0,0,0,2764,2765,1,0,0,0,2765,2881,1,0,0,0,2766,2768,
        5,51,0,0,2767,2769,5,28,0,0,2768,2767,1,0,0,0,2768,2769,1,0,0,0,
        2769,2770,1,0,0,0,2770,2772,3,584,292,0,2771,2773,5,144,0,0,2772,
        2771,1,0,0,0,2772,2773,1,0,0,0,2773,2881,1,0,0,0,2774,2775,5,51,
        0,0,2775,2776,7,35,0,0,2776,2881,3,584,292,0,2777,2778,5,51,0,0,
        2778,2779,5,130,0,0,2779,2881,5,91,0,0,2780,2781,5,51,0,0,2781,2782,
        7,20,0,0,2782,2881,3,584,292,0,2783,2784,5,139,0,0,2784,2785,7,20,
        0,0,2785,2786,3,584,292,0,2786,2787,5,175,0,0,2787,2788,3,584,292,
        0,2788,2881,1,0,0,0,2789,2791,5,7,0,0,2790,2792,5,28,0,0,2791,2790,
        1,0,0,0,2791,2792,1,0,0,0,2792,2793,1,0,0,0,2793,2807,3,584,292,
        0,2794,2795,5,153,0,0,2795,2801,5,42,0,0,2796,2802,3,594,297,0,2797,
        2798,5,1133,0,0,2798,2799,3,688,344,0,2799,2800,5,1134,0,0,2800,
        2802,1,0,0,0,2801,2796,1,0,0,0,2801,2797,1,0,0,0,2802,2808,1,0,0,
        0,2803,2804,5,153,0,0,2804,2808,7,15,0,0,2805,2806,5,51,0,0,2806,
        2808,5,42,0,0,2807,2794,1,0,0,0,2807,2803,1,0,0,0,2807,2805,1,0,
        0,0,2808,2881,1,0,0,0,2809,2810,5,7,0,0,2810,2811,5,81,0,0,2811,
        2812,3,584,292,0,2812,2813,7,15,0,0,2813,2881,1,0,0,0,2814,2815,
        5,51,0,0,2815,2816,5,67,0,0,2816,2817,5,91,0,0,2817,2881,3,584,292,
        0,2818,2819,5,396,0,0,2819,2881,5,92,0,0,2820,2821,5,403,0,0,2821,
        2881,5,92,0,0,2822,2824,5,139,0,0,2823,2825,7,36,0,0,2824,2823,1,
        0,0,0,2824,2825,1,0,0,0,2825,2828,1,0,0,0,2826,2829,3,584,292,0,
        2827,2829,3,550,275,0,2828,2826,1,0,0,0,2828,2827,1,0,0,0,2829,2881,
        1,0,0,0,2830,2831,5,124,0,0,2831,2832,5,19,0,0,2832,2881,3,616,308,
        0,2833,2834,5,32,0,0,2834,2838,5,175,0,0,2835,2839,5,841,0,0,2836,
        2837,5,25,0,0,2837,2839,5,153,0,0,2838,2835,1,0,0,0,2838,2836,1,
        0,0,0,2839,2840,1,0,0,0,2840,2843,3,568,284,0,2841,2842,5,27,0,0,
        2842,2844,3,570,285,0,2843,2841,1,0,0,0,2843,2844,1,0,0,0,2844,2881,
        1,0,0,0,2845,2847,5,42,0,0,2846,2845,1,0,0,0,2846,2847,1,0,0,0,2847,
        2848,1,0,0,0,2848,2849,5,25,0,0,2849,2850,5,153,0,0,2850,2851,5,
        1124,0,0,2851,2855,3,568,284,0,2852,2853,5,27,0,0,2853,2854,5,1124,
        0,0,2854,2856,3,570,285,0,2855,2852,1,0,0,0,2855,2856,1,0,0,0,2856,
        2881,1,0,0,0,2857,2858,5,397,0,0,2858,2881,5,647,0,0,2859,2860,5,
        450,0,0,2860,2881,5,647,0,0,2861,2881,5,66,0,0,2862,2863,7,37,0,
        0,2863,2881,5,668,0,0,2864,2866,5,5,0,0,2865,2867,5,28,0,0,2866,
        2865,1,0,0,0,2866,2867,1,0,0,0,2867,2868,1,0,0,0,2868,2869,5,1133,
        0,0,2869,2874,3,90,45,0,2870,2871,5,1135,0,0,2871,2873,3,90,45,0,
        2872,2870,1,0,0,0,2873,2876,1,0,0,0,2874,2872,1,0,0,0,2874,2875,
        1,0,0,0,2875,2877,1,0,0,0,2876,2874,1,0,0,0,2877,2878,5,1134,0,0,
        2878,2881,1,0,0,0,2879,2881,3,150,75,0,2880,2529,1,0,0,0,2880,2539,
        1,0,0,0,2880,2550,1,0,0,0,2880,2568,1,0,0,0,2880,2583,1,0,0,0,2880,
        2605,1,0,0,0,2880,2629,1,0,0,0,2880,2644,1,0,0,0,2880,2659,1,0,0,
        0,2880,2681,1,0,0,0,2880,2703,1,0,0,0,2880,2715,1,0,0,0,2880,2720,
        1,0,0,0,2880,2732,1,0,0,0,2880,2744,1,0,0,0,2880,2750,1,0,0,0,2880,
        2755,1,0,0,0,2880,2766,1,0,0,0,2880,2774,1,0,0,0,2880,2777,1,0,0,
        0,2880,2780,1,0,0,0,2880,2783,1,0,0,0,2880,2789,1,0,0,0,2880,2809,
        1,0,0,0,2880,2814,1,0,0,0,2880,2818,1,0,0,0,2880,2820,1,0,0,0,2880,
        2822,1,0,0,0,2880,2830,1,0,0,0,2880,2833,1,0,0,0,2880,2846,1,0,0,
        0,2880,2857,1,0,0,0,2880,2859,1,0,0,0,2880,2861,1,0,0,0,2880,2862,
        1,0,0,0,2880,2864,1,0,0,0,2880,2879,1,0,0,0,2881,149,1,0,0,0,2882,
        2883,5,5,0,0,2883,2884,5,129,0,0,2884,2885,5,1133,0,0,2885,2890,
        3,118,59,0,2886,2887,5,1135,0,0,2887,2889,3,118,59,0,2888,2886,1,
        0,0,0,2889,2892,1,0,0,0,2890,2888,1,0,0,0,2890,2891,1,0,0,0,2891,
        2893,1,0,0,0,2892,2890,1,0,0,0,2893,2894,5,1134,0,0,2894,2981,1,
        0,0,0,2895,2896,5,51,0,0,2896,2897,5,129,0,0,2897,2981,3,616,308,
        0,2898,2899,5,397,0,0,2899,2902,5,129,0,0,2900,2903,3,616,308,0,
        2901,2903,5,6,0,0,2902,2900,1,0,0,0,2902,2901,1,0,0,0,2903,2904,
        1,0,0,0,2904,2981,5,647,0,0,2905,2906,5,450,0,0,2906,2909,5,129,
        0,0,2907,2910,3,616,308,0,2908,2910,5,6,0,0,2909,2907,1,0,0,0,2909,
        2908,1,0,0,0,2910,2911,1,0,0,0,2911,2981,5,647,0,0,2912,2913,5,656,
        0,0,2913,2916,5,129,0,0,2914,2917,3,616,308,0,2915,2917,5,6,0,0,
        2916,2914,1,0,0,0,2916,2915,1,0,0,0,2917,2981,1,0,0,0,2918,2919,
        5,363,0,0,2919,2920,5,129,0,0,2920,2981,3,590,295,0,2921,2922,5,
        579,0,0,2922,2923,5,129,0,0,2923,2924,3,616,308,0,2924,2925,5,87,
        0,0,2925,2926,5,1133,0,0,2926,2931,3,118,59,0,2927,2928,5,1135,0,
        0,2928,2930,3,118,59,0,2929,2927,1,0,0,0,2930,2933,1,0,0,0,2931,
        2929,1,0,0,0,2931,2932,1,0,0,0,2932,2934,1,0,0,0,2933,2931,1,0,0,
        0,2934,2935,5,1134,0,0,2935,2981,1,0,0,0,2936,2937,5,418,0,0,2937,
        2938,5,129,0,0,2938,2939,3,584,292,0,2939,2940,5,192,0,0,2940,2941,
        5,172,0,0,2941,2944,3,552,276,0,2942,2943,7,37,0,0,2943,2945,5,668,
        0,0,2944,2942,1,0,0,0,2944,2945,1,0,0,0,2945,2981,1,0,0,0,2946,2947,
        5,9,0,0,2947,2950,5,129,0,0,2948,2951,3,616,308,0,2949,2951,5,6,
        0,0,2950,2948,1,0,0,0,2950,2949,1,0,0,0,2951,2981,1,0,0,0,2952,2953,
        5,26,0,0,2953,2956,5,129,0,0,2954,2957,3,616,308,0,2955,2957,5,6,
        0,0,2956,2954,1,0,0,0,2956,2955,1,0,0,0,2957,2981,1,0,0,0,2958,2959,
        5,119,0,0,2959,2962,5,129,0,0,2960,2963,3,616,308,0,2961,2963,5,
        6,0,0,2962,2960,1,0,0,0,2962,2961,1,0,0,0,2963,2981,1,0,0,0,2964,
        2965,5,569,0,0,2965,2968,5,129,0,0,2966,2969,3,616,308,0,2967,2969,
        5,6,0,0,2968,2966,1,0,0,0,2968,2967,1,0,0,0,2969,2981,1,0,0,0,2970,
        2971,5,580,0,0,2971,2974,5,129,0,0,2972,2975,3,616,308,0,2973,2975,
        5,6,0,0,2974,2972,1,0,0,0,2974,2973,1,0,0,0,2975,2981,1,0,0,0,2976,
        2977,5,578,0,0,2977,2981,5,549,0,0,2978,2979,5,664,0,0,2979,2981,
        5,549,0,0,2980,2882,1,0,0,0,2980,2895,1,0,0,0,2980,2898,1,0,0,0,
        2980,2905,1,0,0,0,2980,2912,1,0,0,0,2980,2918,1,0,0,0,2980,2921,
        1,0,0,0,2980,2936,1,0,0,0,2980,2946,1,0,0,0,2980,2952,1,0,0,0,2980,
        2958,1,0,0,0,2980,2964,1,0,0,0,2980,2970,1,0,0,0,2980,2976,1,0,0,
        0,2980,2978,1,0,0,0,2981,151,1,0,0,0,2982,2983,5,51,0,0,2983,2985,
        7,0,0,0,2984,2986,3,640,320,0,2985,2984,1,0,0,0,2985,2986,1,0,0,
        0,2986,2987,1,0,0,0,2987,2988,3,584,292,0,2988,153,1,0,0,0,2989,
        2990,5,51,0,0,2990,2992,5,415,0,0,2991,2993,3,640,320,0,2992,2991,
        1,0,0,0,2992,2993,1,0,0,0,2993,2994,1,0,0,0,2994,2995,3,550,275,
        0,2995,155,1,0,0,0,2996,2997,5,51,0,0,2997,2999,5,81,0,0,2998,3000,
        7,1,0,0,2999,2998,1,0,0,0,2999,3000,1,0,0,0,3000,3001,1,0,0,0,3001,
        3002,3,584,292,0,3002,3003,5,118,0,0,3003,3016,3,552,276,0,3004,
        3006,5,336,0,0,3005,3007,5,1124,0,0,3006,3005,1,0,0,0,3006,3007,
        1,0,0,0,3007,3008,1,0,0,0,3008,3015,7,3,0,0,3009,3011,5,103,0,0,
        3010,3012,5,1124,0,0,3011,3010,1,0,0,0,3011,3012,1,0,0,0,3012,3013,
        1,0,0,0,3013,3015,7,4,0,0,3014,3004,1,0,0,0,3014,3009,1,0,0,0,3015,
        3018,1,0,0,0,3016,3014,1,0,0,0,3016,3017,1,0,0,0,3017,157,1,0,0,
        0,3018,3016,1,0,0,0,3019,3020,5,51,0,0,3020,3021,5,475,0,0,3021,
        3022,5,73,0,0,3022,3023,3,584,292,0,3023,3024,5,409,0,0,3024,3025,
        5,1124,0,0,3025,3026,3,572,286,0,3026,159,1,0,0,0,3027,3028,5,51,
        0,0,3028,3030,5,131,0,0,3029,3031,3,640,320,0,3030,3029,1,0,0,0,
        3030,3031,1,0,0,0,3031,3032,1,0,0,0,3032,3033,3,550,275,0,3033,161,
        1,0,0,0,3034,3035,5,51,0,0,3035,3037,5,437,0,0,3036,3038,3,640,320,
        0,3037,3036,1,0,0,0,3037,3038,1,0,0,0,3038,3039,1,0,0,0,3039,3040,
        3,550,275,0,3040,163,1,0,0,0,3041,3042,5,51,0,0,3042,3044,5,608,
        0,0,3043,3045,3,640,320,0,3044,3043,1,0,0,0,3044,3045,1,0,0,0,3045,
        3046,1,0,0,0,3046,3047,3,584,292,0,3047,165,1,0,0,0,3048,3050,5,
        51,0,0,3049,3051,5,649,0,0,3050,3049,1,0,0,0,3050,3051,1,0,0,0,3051,
        3052,1,0,0,0,3052,3054,5,172,0,0,3053,3055,3,640,320,0,3054,3053,
        1,0,0,0,3054,3055,1,0,0,0,3055,3056,1,0,0,0,3056,3058,3,620,310,
        0,3057,3059,7,38,0,0,3058,3057,1,0,0,0,3058,3059,1,0,0,0,3059,167,
        1,0,0,0,3060,3061,5,51,0,0,3061,3062,5,647,0,0,3062,3068,3,584,292,
        0,3063,3065,5,409,0,0,3064,3066,5,1124,0,0,3065,3064,1,0,0,0,3065,
        3066,1,0,0,0,3066,3067,1,0,0,0,3067,3069,3,572,286,0,3068,3063,1,
        0,0,0,3068,3069,1,0,0,0,3069,169,1,0,0,0,3070,3071,5,51,0,0,3071,
        3073,5,177,0,0,3072,3074,3,640,320,0,3073,3072,1,0,0,0,3073,3074,
        1,0,0,0,3074,3075,1,0,0,0,3075,3076,3,550,275,0,3076,171,1,0,0,0,
        3077,3078,5,51,0,0,3078,3080,5,671,0,0,3079,3081,3,640,320,0,3080,
        3079,1,0,0,0,3080,3081,1,0,0,0,3081,3082,1,0,0,0,3082,3087,3,550,
        275,0,3083,3084,5,1135,0,0,3084,3086,3,550,275,0,3085,3083,1,0,0,
        0,3086,3089,1,0,0,0,3087,3085,1,0,0,0,3087,3088,1,0,0,0,3088,3091,
        1,0,0,0,3089,3087,1,0,0,0,3090,3092,7,38,0,0,3091,3090,1,0,0,0,3091,
        3092,1,0,0,0,3092,173,1,0,0,0,3093,3094,5,51,0,0,3094,3096,5,596,
        0,0,3095,3097,3,640,320,0,3096,3095,1,0,0,0,3096,3097,1,0,0,0,3097,
        3098,1,0,0,0,3098,3103,3,554,277,0,3099,3100,5,1135,0,0,3100,3102,
        3,554,277,0,3101,3099,1,0,0,0,3102,3105,1,0,0,0,3103,3101,1,0,0,
        0,3103,3104,1,0,0,0,3104,175,1,0,0,0,3105,3103,1,0,0,0,3106,3107,
        5,153,0,0,3107,3108,5,42,0,0,3108,3119,5,596,0,0,3109,3120,5,529,
        0,0,3110,3120,5,6,0,0,3111,3116,3,554,277,0,3112,3113,5,1135,0,0,
        3113,3115,3,554,277,0,3114,3112,1,0,0,0,3115,3118,1,0,0,0,3116,3114,
        1,0,0,0,3116,3117,1,0,0,0,3117,3120,1,0,0,0,3118,3116,1,0,0,0,3119,
        3109,1,0,0,0,3119,3110,1,0,0,0,3119,3111,1,0,0,0,3120,3121,1,0,0,
        0,3121,3124,5,175,0,0,3122,3125,3,564,282,0,3123,3125,3,584,292,
        0,3124,3122,1,0,0,0,3124,3123,1,0,0,0,3125,3133,1,0,0,0,3126,3129,
        5,1135,0,0,3127,3130,3,564,282,0,3128,3130,3,584,292,0,3129,3127,
        1,0,0,0,3129,3128,1,0,0,0,3130,3132,1,0,0,0,3131,3126,1,0,0,0,3132,
        3135,1,0,0,0,3133,3131,1,0,0,0,3133,3134,1,0,0,0,3134,3140,1,0,0,
        0,3135,3133,1,0,0,0,3136,3137,5,153,0,0,3137,3138,5,596,0,0,3138,
        3140,3,434,217,0,3139,3106,1,0,0,0,3139,3136,1,0,0,0,3140,177,1,
        0,0,0,3141,3142,5,139,0,0,3142,3143,5,172,0,0,3143,3148,3,180,90,
        0,3144,3145,5,1135,0,0,3145,3147,3,180,90,0,3146,3144,1,0,0,0,3147,
        3150,1,0,0,0,3148,3146,1,0,0,0,3148,3149,1,0,0,0,3149,179,1,0,0,
        0,3150,3148,1,0,0,0,3151,3152,3,552,276,0,3152,3153,5,175,0,0,3153,
        3154,3,552,276,0,3154,181,1,0,0,0,3155,3157,5,656,0,0,3156,3158,
        5,172,0,0,3157,3156,1,0,0,0,3157,3158,1,0,0,0,3158,3159,1,0,0,0,
        3159,3160,3,552,276,0,3160,183,1,0,0,0,3161,3162,5,20,0,0,3162,3169,
        3,550,275,0,3163,3166,5,1133,0,0,3164,3167,3,628,314,0,3165,3167,
        3,624,312,0,3166,3164,1,0,0,0,3166,3165,1,0,0,0,3166,3167,1,0,0,
        0,3167,3168,1,0,0,0,3168,3170,5,1134,0,0,3169,3163,1,0,0,0,3169,
        3170,1,0,0,0,3170,185,1,0,0,0,3171,3174,3,214,107,0,3172,3174,3,
        216,108,0,3173,3171,1,0,0,0,3173,3172,1,0,0,0,3174,187,1,0,0,0,3175,
        3176,5,399,0,0,3176,3177,3,624,312,0,3177,189,1,0,0,0,3178,3183,
        3,218,109,0,3179,3183,3,220,110,0,3180,3183,3,222,111,0,3181,3183,
        3,224,112,0,3182,3178,1,0,0,0,3182,3179,1,0,0,0,3182,3180,1,0,0,
        0,3182,3181,1,0,0,0,3183,191,1,0,0,0,3184,3186,5,85,0,0,3185,3187,
        7,39,0,0,3186,3185,1,0,0,0,3186,3187,1,0,0,0,3187,3189,1,0,0,0,3188,
        3190,5,78,0,0,3189,3188,1,0,0,0,3189,3190,1,0,0,0,3190,3192,1,0,
        0,0,3191,3193,5,87,0,0,3192,3191,1,0,0,0,3192,3193,1,0,0,0,3193,
        3194,1,0,0,0,3194,3201,3,552,276,0,3195,3196,5,129,0,0,3196,3198,
        5,1133,0,0,3197,3199,3,616,308,0,3198,3197,1,0,0,0,3198,3199,1,0,
        0,0,3199,3200,1,0,0,0,3200,3202,5,1134,0,0,3201,3195,1,0,0,0,3201,
        3202,1,0,0,0,3202,3226,1,0,0,0,3203,3205,5,1133,0,0,3204,3206,3,
        618,309,0,3205,3204,1,0,0,0,3205,3206,1,0,0,0,3206,3207,1,0,0,0,
        3207,3209,5,1134,0,0,3208,3203,1,0,0,0,3208,3209,1,0,0,0,3209,3210,
        1,0,0,0,3210,3215,3,206,103,0,3211,3213,5,12,0,0,3212,3211,1,0,0,
        0,3212,3213,1,0,0,0,3213,3214,1,0,0,0,3214,3216,3,584,292,0,3215,
        3212,1,0,0,0,3215,3216,1,0,0,0,3216,3227,1,0,0,0,3217,3218,5,153,
        0,0,3218,3223,3,208,104,0,3219,3220,5,1135,0,0,3220,3222,3,208,104,
        0,3221,3219,1,0,0,0,3222,3225,1,0,0,0,3223,3221,1,0,0,0,3223,3224,
        1,0,0,0,3224,3227,1,0,0,0,3225,3223,1,0,0,0,3226,3208,1,0,0,0,3226,
        3217,1,0,0,0,3227,3240,1,0,0,0,3228,3229,5,118,0,0,3229,3230,5,401,
        0,0,3230,3231,5,91,0,0,3231,3232,5,184,0,0,3232,3237,3,208,104,0,
        3233,3234,5,1135,0,0,3234,3236,3,208,104,0,3235,3233,1,0,0,0,3236,
        3239,1,0,0,0,3237,3235,1,0,0,0,3237,3238,1,0,0,0,3238,3241,1,0,0,
        0,3239,3237,1,0,0,0,3240,3228,1,0,0,0,3240,3241,1,0,0,0,3241,193,
        1,0,0,0,3242,3243,5,102,0,0,3243,3245,5,388,0,0,3244,3246,7,40,0,
        0,3245,3244,1,0,0,0,3245,3246,1,0,0,0,3246,3248,1,0,0,0,3247,3249,
        5,474,0,0,3248,3247,1,0,0,0,3248,3249,1,0,0,0,3249,3250,1,0,0,0,
        3250,3251,5,82,0,0,3251,3253,5,1148,0,0,3252,3254,7,6,0,0,3253,3252,
        1,0,0,0,3253,3254,1,0,0,0,3254,3255,1,0,0,0,3255,3256,5,87,0,0,3256,
        3257,5,172,0,0,3257,3263,3,552,276,0,3258,3259,5,129,0,0,3259,3260,
        5,1133,0,0,3260,3261,3,616,308,0,3261,3262,5,1134,0,0,3262,3264,
        1,0,0,0,3263,3258,1,0,0,0,3263,3264,1,0,0,0,3264,3268,1,0,0,0,3265,
        3266,5,25,0,0,3266,3267,5,153,0,0,3267,3269,3,568,284,0,3268,3265,
        1,0,0,0,3268,3269,1,0,0,0,3269,3276,1,0,0,0,3270,3272,7,41,0,0,3271,
        3273,3,280,140,0,3272,3271,1,0,0,0,3273,3274,1,0,0,0,3274,3272,1,
        0,0,0,3274,3275,1,0,0,0,3275,3277,1,0,0,0,3276,3270,1,0,0,0,3276,
        3277,1,0,0,0,3277,3284,1,0,0,0,3278,3280,5,101,0,0,3279,3281,3,282,
        141,0,3280,3279,1,0,0,0,3281,3282,1,0,0,0,3282,3280,1,0,0,0,3282,
        3283,1,0,0,0,3283,3285,1,0,0,0,3284,3278,1,0,0,0,3284,3285,1,0,0,
        0,3285,3290,1,0,0,0,3286,3287,5,78,0,0,3287,3288,3,590,295,0,3288,
        3289,7,42,0,0,3289,3291,1,0,0,0,3290,3286,1,0,0,0,3290,3291,1,0,
        0,0,3291,3303,1,0,0,0,3292,3293,5,1133,0,0,3293,3298,3,210,105,0,
        3294,3295,5,1135,0,0,3295,3297,3,210,105,0,3296,3294,1,0,0,0,3297,
        3300,1,0,0,0,3298,3296,1,0,0,0,3298,3299,1,0,0,0,3299,3301,1,0,0,
        0,3300,3298,1,0,0,0,3301,3302,5,1134,0,0,3302,3304,1,0,0,0,3303,
        3292,1,0,0,0,3303,3304,1,0,0,0,3304,3314,1,0,0,0,3305,3306,5,153,
        0,0,3306,3311,3,208,104,0,3307,3308,5,1135,0,0,3308,3310,3,208,104,
        0,3309,3307,1,0,0,0,3310,3313,1,0,0,0,3311,3309,1,0,0,0,3311,3312,
        1,0,0,0,3312,3315,1,0,0,0,3313,3311,1,0,0,0,3314,3305,1,0,0,0,3314,
        3315,1,0,0,0,3315,195,1,0,0,0,3316,3317,5,102,0,0,3317,3319,5,682,
        0,0,3318,3320,7,40,0,0,3319,3318,1,0,0,0,3319,3320,1,0,0,0,3320,
        3322,1,0,0,0,3321,3323,5,474,0,0,3322,3321,1,0,0,0,3322,3323,1,0,
        0,0,3323,3324,1,0,0,0,3324,3325,5,82,0,0,3325,3327,5,1148,0,0,3326,
        3328,7,6,0,0,3327,3326,1,0,0,0,3327,3328,1,0,0,0,3328,3329,1,0,0,
        0,3329,3330,5,87,0,0,3330,3331,5,172,0,0,3331,3335,3,552,276,0,3332,
        3333,5,25,0,0,3333,3334,5,153,0,0,3334,3336,3,568,284,0,3335,3332,
        1,0,0,0,3335,3336,1,0,0,0,3336,3343,1,0,0,0,3337,3338,5,601,0,0,
        3338,3339,5,448,0,0,3339,3340,5,19,0,0,3340,3341,5,1126,0,0,3341,
        3342,5,1148,0,0,3342,3344,5,1125,0,0,3343,3337,1,0,0,0,3343,3344,
        1,0,0,0,3344,3349,1,0,0,0,3345,3346,5,78,0,0,3346,3347,3,590,295,
        0,3347,3348,7,42,0,0,3348,3350,1,0,0,0,3349,3345,1,0,0,0,3349,3350,
        1,0,0,0,3350,3362,1,0,0,0,3351,3352,5,1133,0,0,3352,3357,3,210,105,
        0,3353,3354,5,1135,0,0,3354,3356,3,210,105,0,3355,3353,1,0,0,0,3356,
        3359,1,0,0,0,3357,3355,1,0,0,0,3357,3358,1,0,0,0,3358,3360,1,0,0,
        0,3359,3357,1,0,0,0,3360,3361,5,1134,0,0,3361,3363,1,0,0,0,3362,
        3351,1,0,0,0,3362,3363,1,0,0,0,3363,3373,1,0,0,0,3364,3365,5,153,
        0,0,3365,3370,3,208,104,0,3366,3367,5,1135,0,0,3367,3369,3,208,104,
        0,3368,3366,1,0,0,0,3369,3372,1,0,0,0,3370,3368,1,0,0,0,3370,3371,
        1,0,0,0,3371,3374,1,0,0,0,3372,3370,1,0,0,0,3373,3364,1,0,0,0,3373,
        3374,1,0,0,0,3374,197,1,0,0,0,3375,3377,5,141,0,0,3376,3378,7,43,
        0,0,3377,3376,1,0,0,0,3377,3378,1,0,0,0,3378,3380,1,0,0,0,3379,3381,
        5,87,0,0,3380,3379,1,0,0,0,3380,3381,1,0,0,0,3381,3382,1,0,0,0,3382,
        3388,3,552,276,0,3383,3384,5,129,0,0,3384,3385,5,1133,0,0,3385,3386,
        3,616,308,0,3386,3387,5,1134,0,0,3387,3389,1,0,0,0,3388,3383,1,0,
        0,0,3388,3389,1,0,0,0,3389,3406,1,0,0,0,3390,3391,5,1133,0,0,3391,
        3392,3,616,308,0,3392,3393,5,1134,0,0,3393,3395,1,0,0,0,3394,3390,
        1,0,0,0,3394,3395,1,0,0,0,3395,3396,1,0,0,0,3396,3407,3,206,103,
        0,3397,3398,5,153,0,0,3398,3403,3,208,104,0,3399,3400,5,1135,0,0,
        3400,3402,3,208,104,0,3401,3399,1,0,0,0,3402,3405,1,0,0,0,3403,3401,
        1,0,0,0,3403,3404,1,0,0,0,3404,3407,1,0,0,0,3405,3403,1,0,0,0,3406,
        3394,1,0,0,0,3406,3397,1,0,0,0,3407,199,1,0,0,0,3408,3410,3,252,
        126,0,3409,3411,3,212,106,0,3410,3409,1,0,0,0,3410,3411,1,0,0,0,
        3411,3474,1,0,0,0,3412,3414,3,248,124,0,3413,3415,3,212,106,0,3414,
        3413,1,0,0,0,3414,3415,1,0,0,0,3415,3474,1,0,0,0,3416,3419,3,254,
        127,0,3417,3419,3,250,125,0,3418,3416,1,0,0,0,3418,3417,1,0,0,0,
        3419,3421,1,0,0,0,3420,3422,3,258,129,0,3421,3420,1,0,0,0,3422,3423,
        1,0,0,0,3423,3421,1,0,0,0,3423,3424,1,0,0,0,3424,3433,1,0,0,0,3425,
        3427,5,180,0,0,3426,3428,7,44,0,0,3427,3426,1,0,0,0,3427,3428,1,
        0,0,0,3428,3431,1,0,0,0,3429,3432,3,252,126,0,3430,3432,3,248,124,
        0,3431,3429,1,0,0,0,3431,3430,1,0,0,0,3432,3434,1,0,0,0,3433,3425,
        1,0,0,0,3433,3434,1,0,0,0,3434,3436,1,0,0,0,3435,3437,3,230,115,
        0,3436,3435,1,0,0,0,3436,3437,1,0,0,0,3437,3439,1,0,0,0,3438,3440,
        3,294,147,0,3439,3438,1,0,0,0,3439,3440,1,0,0,0,3440,3442,1,0,0,
        0,3441,3443,3,212,106,0,3442,3441,1,0,0,0,3442,3443,1,0,0,0,3443,
        3474,1,0,0,0,3444,3446,3,250,125,0,3445,3447,3,256,128,0,3446,3445,
        1,0,0,0,3447,3448,1,0,0,0,3448,3446,1,0,0,0,3448,3449,1,0,0,0,3449,
        3455,1,0,0,0,3450,3452,5,180,0,0,3451,3453,7,44,0,0,3452,3451,1,
        0,0,0,3452,3453,1,0,0,0,3453,3454,1,0,0,0,3454,3456,3,248,124,0,
        3455,3450,1,0,0,0,3455,3456,1,0,0,0,3456,3458,1,0,0,0,3457,3459,
        3,230,115,0,3458,3457,1,0,0,0,3458,3459,1,0,0,0,3459,3461,1,0,0,
        0,3460,3462,3,294,147,0,3461,3460,1,0,0,0,3461,3462,1,0,0,0,3462,
        3464,1,0,0,0,3463,3465,3,212,106,0,3464,3463,1,0,0,0,3464,3465,1,
        0,0,0,3465,3474,1,0,0,0,3466,3469,3,254,127,0,3467,3468,5,1135,0,
        0,3468,3470,3,260,130,0,3469,3467,1,0,0,0,3470,3471,1,0,0,0,3471,
        3469,1,0,0,0,3471,3472,1,0,0,0,3472,3474,1,0,0,0,3473,3408,1,0,0,
        0,3473,3412,1,0,0,0,3473,3418,1,0,0,0,3473,3444,1,0,0,0,3473,3466,
        1,0,0,0,3474,201,1,0,0,0,3475,3478,3,226,113,0,3476,3478,3,228,114,
        0,3477,3475,1,0,0,0,3477,3476,1,0,0,0,3478,203,1,0,0,0,3479,3480,
        5,188,0,0,3480,3482,5,1133,0,0,3481,3483,3,626,313,0,3482,3481,1,
        0,0,0,3482,3483,1,0,0,0,3483,3484,1,0,0,0,3484,3493,5,1134,0,0,3485,
        3486,5,1135,0,0,3486,3488,5,1133,0,0,3487,3489,3,626,313,0,3488,
        3487,1,0,0,0,3488,3489,1,0,0,0,3489,3490,1,0,0,0,3490,3492,5,1134,
        0,0,3491,3485,1,0,0,0,3492,3495,1,0,0,0,3493,3491,1,0,0,0,3493,3494,
        1,0,0,0,3494,205,1,0,0,0,3495,3493,1,0,0,0,3496,3515,3,200,100,0,
        3497,3498,7,45,0,0,3498,3500,5,1133,0,0,3499,3501,3,626,313,0,3500,
        3499,1,0,0,0,3500,3501,1,0,0,0,3501,3502,1,0,0,0,3502,3511,5,1134,
        0,0,3503,3504,5,1135,0,0,3504,3506,5,1133,0,0,3505,3507,3,626,313,
        0,3506,3505,1,0,0,0,3506,3507,1,0,0,0,3507,3508,1,0,0,0,3508,3510,
        5,1134,0,0,3509,3503,1,0,0,0,3510,3513,1,0,0,0,3511,3509,1,0,0,0,
        3511,3512,1,0,0,0,3512,3515,1,0,0,0,3513,3511,1,0,0,0,3514,3496,
        1,0,0,0,3514,3497,1,0,0,0,3515,207,1,0,0,0,3516,3517,3,556,278,0,
        3517,3520,5,1124,0,0,3518,3521,3,688,344,0,3519,3521,5,42,0,0,3520,
        3518,1,0,0,0,3520,3519,1,0,0,0,3521,209,1,0,0,0,3522,3525,3,584,
        292,0,3523,3525,5,1159,0,0,3524,3522,1,0,0,0,3524,3523,1,0,0,0,3525,
        211,1,0,0,0,3526,3527,5,65,0,0,3527,3533,5,184,0,0,3528,3529,5,103,
        0,0,3529,3530,5,80,0,0,3530,3531,5,610,0,0,3531,3533,5,511,0,0,3532,
        3526,1,0,0,0,3532,3528,1,0,0,0,3533,213,1,0,0,0,3534,3536,5,44,0,
        0,3535,3537,5,106,0,0,3536,3535,1,0,0,0,3536,3537,1,0,0,0,3537,3539,
        1,0,0,0,3538,3540,5,568,0,0,3539,3538,1,0,0,0,3539,3540,1,0,0,0,
        3540,3542,1,0,0,0,3541,3543,5,78,0,0,3542,3541,1,0,0,0,3542,3543,
        1,0,0,0,3543,3544,1,0,0,0,3544,3545,5,68,0,0,3545,3550,3,552,276,
        0,3546,3548,5,12,0,0,3547,3546,1,0,0,0,3547,3548,1,0,0,0,3548,3549,
        1,0,0,0,3549,3551,3,584,292,0,3550,3547,1,0,0,0,3550,3551,1,0,0,
        0,3551,3557,1,0,0,0,3552,3553,5,129,0,0,3553,3554,5,1133,0,0,3554,
        3555,3,616,308,0,3555,3556,5,1134,0,0,3556,3558,1,0,0,0,3557,3552,
        1,0,0,0,3557,3558,1,0,0,0,3558,3561,1,0,0,0,3559,3560,5,190,0,0,
        3560,3562,3,688,344,0,3561,3559,1,0,0,0,3561,3562,1,0,0,0,3562,3564,
        1,0,0,0,3563,3565,3,230,115,0,3564,3563,1,0,0,0,3564,3565,1,0,0,
        0,3565,3568,1,0,0,0,3566,3567,5,99,0,0,3567,3569,3,296,148,0,3568,
        3566,1,0,0,0,3568,3569,1,0,0,0,3569,215,1,0,0,0,3570,3572,5,44,0,
        0,3571,3573,5,106,0,0,3572,3571,1,0,0,0,3572,3573,1,0,0,0,3573,3575,
        1,0,0,0,3574,3576,5,568,0,0,3575,3574,1,0,0,0,3575,3576,1,0,0,0,
        3576,3578,1,0,0,0,3577,3579,5,78,0,0,3578,3577,1,0,0,0,3578,3579,
        1,0,0,0,3579,3619,1,0,0,0,3580,3583,3,552,276,0,3581,3582,5,1132,
        0,0,3582,3584,5,1117,0,0,3583,3581,1,0,0,0,3583,3584,1,0,0,0,3584,
        3593,1,0,0,0,3585,3586,5,1135,0,0,3586,3589,3,552,276,0,3587,3588,
        5,1132,0,0,3588,3590,5,1117,0,0,3589,3587,1,0,0,0,3589,3590,1,0,
        0,0,3590,3592,1,0,0,0,3591,3585,1,0,0,0,3592,3595,1,0,0,0,3593,3591,
        1,0,0,0,3593,3594,1,0,0,0,3594,3596,1,0,0,0,3595,3593,1,0,0,0,3596,
        3597,5,68,0,0,3597,3598,3,234,117,0,3598,3620,1,0,0,0,3599,3600,
        5,68,0,0,3600,3603,3,552,276,0,3601,3602,5,1132,0,0,3602,3604,5,
        1117,0,0,3603,3601,1,0,0,0,3603,3604,1,0,0,0,3604,3613,1,0,0,0,3605,
        3606,5,1135,0,0,3606,3609,3,552,276,0,3607,3608,5,1132,0,0,3608,
        3610,5,1117,0,0,3609,3607,1,0,0,0,3609,3610,1,0,0,0,3610,3612,1,
        0,0,0,3611,3605,1,0,0,0,3612,3615,1,0,0,0,3613,3611,1,0,0,0,3613,
        3614,1,0,0,0,3614,3616,1,0,0,0,3615,3613,1,0,0,0,3616,3617,5,187,
        0,0,3617,3618,3,234,117,0,3618,3620,1,0,0,0,3619,3580,1,0,0,0,3619,
        3599,1,0,0,0,3620,3623,1,0,0,0,3621,3622,5,190,0,0,3622,3624,3,688,
        344,0,3623,3621,1,0,0,0,3623,3624,1,0,0,0,3624,217,1,0,0,0,3625,
        3626,5,442,0,0,3626,3627,3,552,276,0,3627,3632,5,539,0,0,3628,3630,
        5,12,0,0,3629,3628,1,0,0,0,3629,3630,1,0,0,0,3630,3631,1,0,0,0,3631,
        3633,3,584,292,0,3632,3629,1,0,0,0,3632,3633,1,0,0,0,3633,219,1,
        0,0,0,3634,3635,5,442,0,0,3635,3636,3,552,276,0,3636,3637,5,134,
        0,0,3637,3644,3,584,292,0,3638,3639,3,696,348,0,3639,3640,5,1133,
        0,0,3640,3641,3,628,314,0,3641,3642,5,1134,0,0,3642,3645,1,0,0,0,
        3643,3645,7,46,0,0,3644,3638,1,0,0,0,3644,3643,1,0,0,0,3645,3648,
        1,0,0,0,3646,3647,5,190,0,0,3647,3649,3,688,344,0,3648,3646,1,0,
        0,0,3648,3649,1,0,0,0,3649,3652,1,0,0,0,3650,3651,5,99,0,0,3651,
        3653,3,296,148,0,3652,3650,1,0,0,0,3652,3653,1,0,0,0,3653,221,1,
        0,0,0,3654,3655,5,442,0,0,3655,3656,3,552,276,0,3656,3657,5,134,
        0,0,3657,3660,7,47,0,0,3658,3659,5,190,0,0,3659,3661,3,688,344,0,
        3660,3658,1,0,0,0,3660,3661,1,0,0,0,3661,3664,1,0,0,0,3662,3663,
        5,99,0,0,3663,3665,3,296,148,0,3664,3662,1,0,0,0,3664,3665,1,0,0,
        0,3665,223,1,0,0,0,3666,3667,5,442,0,0,3667,3668,3,552,276,0,3668,
        3669,5,361,0,0,3669,225,1,0,0,0,3670,3672,5,184,0,0,3671,3673,5,
        106,0,0,3672,3671,1,0,0,0,3672,3673,1,0,0,0,3673,3675,1,0,0,0,3674,
        3676,5,78,0,0,3675,3674,1,0,0,0,3675,3676,1,0,0,0,3676,3677,1,0,
        0,0,3677,3682,3,552,276,0,3678,3680,5,12,0,0,3679,3678,1,0,0,0,3679,
        3680,1,0,0,0,3680,3681,1,0,0,0,3681,3683,3,584,292,0,3682,3679,1,
        0,0,0,3682,3683,1,0,0,0,3683,3684,1,0,0,0,3684,3685,5,153,0,0,3685,
        3690,3,208,104,0,3686,3687,5,1135,0,0,3687,3689,3,208,104,0,3688,
        3686,1,0,0,0,3689,3692,1,0,0,0,3690,3688,1,0,0,0,3690,3691,1,0,0,
        0,3691,3695,1,0,0,0,3692,3690,1,0,0,0,3693,3694,5,190,0,0,3694,3696,
        3,688,344,0,3695,3693,1,0,0,0,3695,3696,1,0,0,0,3696,3698,1,0,0,
        0,3697,3699,3,230,115,0,3698,3697,1,0,0,0,3698,3699,1,0,0,0,3699,
        3701,1,0,0,0,3700,3702,3,294,147,0,3701,3700,1,0,0,0,3701,3702,1,
        0,0,0,3702,227,1,0,0,0,3703,3705,5,184,0,0,3704,3706,5,106,0,0,3705,
        3704,1,0,0,0,3705,3706,1,0,0,0,3706,3708,1,0,0,0,3707,3709,5,78,
        0,0,3708,3707,1,0,0,0,3708,3709,1,0,0,0,3709,3710,1,0,0,0,3710,3711,
        3,234,117,0,3711,3712,5,153,0,0,3712,3717,3,208,104,0,3713,3714,
        5,1135,0,0,3714,3716,3,208,104,0,3715,3713,1,0,0,0,3716,3719,1,0,
        0,0,3717,3715,1,0,0,0,3717,3718,1,0,0,0,3718,3722,1,0,0,0,3719,3717,
        1,0,0,0,3720,3721,5,190,0,0,3721,3723,3,688,344,0,3722,3720,1,0,
        0,0,3722,3723,1,0,0,0,3723,229,1,0,0,0,3724,3725,5,124,0,0,3725,
        3726,5,19,0,0,3726,3731,3,232,116,0,3727,3728,5,1135,0,0,3728,3730,
        3,232,116,0,3729,3727,1,0,0,0,3730,3733,1,0,0,0,3731,3729,1,0,0,
        0,3731,3732,1,0,0,0,3732,231,1,0,0,0,3733,3731,1,0,0,0,3734,3736,
        3,688,344,0,3735,3737,7,48,0,0,3736,3735,1,0,0,0,3736,3737,1,0,0,
        0,3737,233,1,0,0,0,3738,3743,3,236,118,0,3739,3740,5,1135,0,0,3740,
        3742,3,236,118,0,3741,3739,1,0,0,0,3742,3745,1,0,0,0,3743,3741,1,
        0,0,0,3743,3744,1,0,0,0,3744,235,1,0,0,0,3745,3743,1,0,0,0,3746,
        3750,3,238,119,0,3747,3749,3,244,122,0,3748,3747,1,0,0,0,3749,3752,
        1,0,0,0,3750,3748,1,0,0,0,3750,3751,1,0,0,0,3751,3765,1,0,0,0,3752,
        3750,1,0,0,0,3753,3754,5,1133,0,0,3754,3758,3,238,119,0,3755,3757,
        3,244,122,0,3756,3755,1,0,0,0,3757,3760,1,0,0,0,3758,3756,1,0,0,
        0,3758,3759,1,0,0,0,3759,3761,1,0,0,0,3760,3758,1,0,0,0,3761,3762,
        5,1134,0,0,3762,3765,1,0,0,0,3763,3765,3,262,131,0,3764,3746,1,0,
        0,0,3764,3753,1,0,0,0,3764,3763,1,0,0,0,3765,237,1,0,0,0,3766,3772,
        3,552,276,0,3767,3768,5,129,0,0,3768,3769,5,1133,0,0,3769,3770,3,
        616,308,0,3770,3771,5,1134,0,0,3771,3773,1,0,0,0,3772,3767,1,0,0,
        0,3772,3773,1,0,0,0,3773,3778,1,0,0,0,3774,3776,5,12,0,0,3775,3774,
        1,0,0,0,3775,3776,1,0,0,0,3776,3777,1,0,0,0,3777,3779,3,584,292,
        0,3778,3775,1,0,0,0,3778,3779,1,0,0,0,3779,3788,1,0,0,0,3780,3785,
        3,240,120,0,3781,3782,5,1135,0,0,3782,3784,3,240,120,0,3783,3781,
        1,0,0,0,3784,3787,1,0,0,0,3785,3783,1,0,0,0,3785,3786,1,0,0,0,3786,
        3789,1,0,0,0,3787,3785,1,0,0,0,3788,3780,1,0,0,0,3788,3789,1,0,0,
        0,3789,3807,1,0,0,0,3790,3796,3,200,100,0,3791,3792,5,1133,0,0,3792,
        3793,3,200,100,0,3793,3794,5,1134,0,0,3794,3796,1,0,0,0,3795,3790,
        1,0,0,0,3795,3791,1,0,0,0,3796,3798,1,0,0,0,3797,3799,5,12,0,0,3798,
        3797,1,0,0,0,3798,3799,1,0,0,0,3799,3800,1,0,0,0,3800,3801,3,584,
        292,0,3801,3807,1,0,0,0,3802,3803,5,1133,0,0,3803,3804,3,234,117,
        0,3804,3805,5,1134,0,0,3805,3807,1,0,0,0,3806,3766,1,0,0,0,3806,
        3795,1,0,0,0,3806,3802,1,0,0,0,3807,239,1,0,0,0,3808,3809,7,49,0,
        0,3809,3812,7,20,0,0,3810,3811,5,65,0,0,3811,3813,3,242,121,0,3812,
        3810,1,0,0,0,3812,3813,1,0,0,0,3813,3814,1,0,0,0,3814,3815,5,1133,
        0,0,3815,3816,3,616,308,0,3816,3817,5,1134,0,0,3817,241,1,0,0,0,
        3818,3824,5,90,0,0,3819,3820,5,124,0,0,3820,3824,5,19,0,0,3821,3822,
        5,73,0,0,3822,3824,5,19,0,0,3823,3818,1,0,0,0,3823,3819,1,0,0,0,
        3823,3821,1,0,0,0,3824,243,1,0,0,0,3825,3827,7,50,0,0,3826,3825,
        1,0,0,0,3826,3827,1,0,0,0,3827,3828,1,0,0,0,3828,3830,5,90,0,0,3829,
        3831,5,94,0,0,3830,3829,1,0,0,0,3830,3831,1,0,0,0,3831,3832,1,0,
        0,0,3832,3836,3,238,119,0,3833,3835,3,246,123,0,3834,3833,1,0,0,
        0,3835,3838,1,0,0,0,3836,3834,1,0,0,0,3836,3837,1,0,0,0,3837,3873,
        1,0,0,0,3838,3836,1,0,0,0,3839,3840,5,171,0,0,3840,3845,3,238,119,
        0,3841,3842,5,118,0,0,3842,3844,3,688,344,0,3843,3841,1,0,0,0,3844,
        3847,1,0,0,0,3845,3843,1,0,0,0,3845,3846,1,0,0,0,3846,3873,1,0,0,
        0,3847,3845,1,0,0,0,3848,3850,7,51,0,0,3849,3851,5,126,0,0,3850,
        3849,1,0,0,0,3850,3851,1,0,0,0,3851,3852,1,0,0,0,3852,3854,5,90,
        0,0,3853,3855,5,94,0,0,3854,3853,1,0,0,0,3854,3855,1,0,0,0,3855,
        3856,1,0,0,0,3856,3860,3,238,119,0,3857,3859,3,246,123,0,3858,3857,
        1,0,0,0,3859,3862,1,0,0,0,3860,3858,1,0,0,0,3860,3861,1,0,0,0,3861,
        3873,1,0,0,0,3862,3860,1,0,0,0,3863,3868,5,113,0,0,3864,3866,7,51,
        0,0,3865,3867,5,126,0,0,3866,3865,1,0,0,0,3866,3867,1,0,0,0,3867,
        3869,1,0,0,0,3868,3864,1,0,0,0,3868,3869,1,0,0,0,3869,3870,1,0,0,
        0,3870,3871,5,90,0,0,3871,3873,3,238,119,0,3872,3826,1,0,0,0,3872,
        3839,1,0,0,0,3872,3848,1,0,0,0,3872,3863,1,0,0,0,3873,245,1,0,0,
        0,3874,3875,5,118,0,0,3875,3882,3,688,344,0,3876,3877,5,187,0,0,
        3877,3878,5,1133,0,0,3878,3879,3,616,308,0,3879,3880,5,1134,0,0,
        3880,3882,1,0,0,0,3881,3874,1,0,0,0,3881,3876,1,0,0,0,3882,247,1,
        0,0,0,3883,3884,5,1133,0,0,3884,3885,3,252,126,0,3885,3886,5,1134,
        0,0,3886,3892,1,0,0,0,3887,3888,5,1133,0,0,3888,3889,3,248,124,0,
        3889,3890,5,1134,0,0,3890,3892,1,0,0,0,3891,3883,1,0,0,0,3891,3887,
        1,0,0,0,3892,249,1,0,0,0,3893,3894,5,1133,0,0,3894,3895,3,254,127,
        0,3895,3896,5,1134,0,0,3896,3902,1,0,0,0,3897,3898,5,1133,0,0,3898,
        3899,3,250,125,0,3899,3900,5,1134,0,0,3900,3902,1,0,0,0,3901,3893,
        1,0,0,0,3901,3897,1,0,0,0,3902,251,1,0,0,0,3903,3907,5,152,0,0,3904,
        3906,3,272,136,0,3905,3904,1,0,0,0,3906,3909,1,0,0,0,3907,3905,1,
        0,0,0,3907,3908,1,0,0,0,3908,3910,1,0,0,0,3909,3907,1,0,0,0,3910,
        3912,3,274,137,0,3911,3913,3,278,139,0,3912,3911,1,0,0,0,3912,3913,
        1,0,0,0,3913,3914,1,0,0,0,3914,3916,3,284,142,0,3915,3917,3,286,
        143,0,3916,3915,1,0,0,0,3916,3917,1,0,0,0,3917,3919,1,0,0,0,3918,
        3920,3,288,144,0,3919,3918,1,0,0,0,3919,3920,1,0,0,0,3920,3922,1,
        0,0,0,3921,3923,3,290,145,0,3922,3921,1,0,0,0,3922,3923,1,0,0,0,
        3923,3925,1,0,0,0,3924,3926,3,230,115,0,3925,3924,1,0,0,0,3925,3926,
        1,0,0,0,3926,3928,1,0,0,0,3927,3929,3,294,147,0,3928,3927,1,0,0,
        0,3928,3929,1,0,0,0,3929,3958,1,0,0,0,3930,3934,5,152,0,0,3931,3933,
        3,272,136,0,3932,3931,1,0,0,0,3933,3936,1,0,0,0,3934,3932,1,0,0,
        0,3934,3935,1,0,0,0,3935,3937,1,0,0,0,3936,3934,1,0,0,0,3937,3938,
        3,274,137,0,3938,3940,3,284,142,0,3939,3941,3,286,143,0,3940,3939,
        1,0,0,0,3940,3941,1,0,0,0,3941,3943,1,0,0,0,3942,3944,3,288,144,
        0,3943,3942,1,0,0,0,3943,3944,1,0,0,0,3944,3946,1,0,0,0,3945,3947,
        3,290,145,0,3946,3945,1,0,0,0,3946,3947,1,0,0,0,3947,3949,1,0,0,
        0,3948,3950,3,230,115,0,3949,3948,1,0,0,0,3949,3950,1,0,0,0,3950,
        3952,1,0,0,0,3951,3953,3,294,147,0,3952,3951,1,0,0,0,3952,3953,1,
        0,0,0,3953,3955,1,0,0,0,3954,3956,3,278,139,0,3955,3954,1,0,0,0,
        3955,3956,1,0,0,0,3956,3958,1,0,0,0,3957,3903,1,0,0,0,3957,3930,
        1,0,0,0,3958,253,1,0,0,0,3959,3963,5,152,0,0,3960,3962,3,272,136,
        0,3961,3960,1,0,0,0,3962,3965,1,0,0,0,3963,3961,1,0,0,0,3963,3964,
        1,0,0,0,3964,3966,1,0,0,0,3965,3963,1,0,0,0,3966,3967,3,274,137,
        0,3967,3969,3,284,142,0,3968,3970,3,286,143,0,3969,3968,1,0,0,0,
        3969,3970,1,0,0,0,3970,3972,1,0,0,0,3971,3973,3,288,144,0,3972,3971,
        1,0,0,0,3972,3973,1,0,0,0,3973,3975,1,0,0,0,3974,3976,3,290,145,
        0,3975,3974,1,0,0,0,3975,3976,1,0,0,0,3976,3978,1,0,0,0,3977,3979,
        3,230,115,0,3978,3977,1,0,0,0,3978,3979,1,0,0,0,3979,3981,1,0,0,
        0,3980,3982,3,294,147,0,3981,3980,1,0,0,0,3981,3982,1,0,0,0,3982,
        3984,1,0,0,0,3983,3985,3,258,129,0,3984,3983,1,0,0,0,3984,3985,1,
        0,0,0,3985,255,1,0,0,0,3986,3988,5,180,0,0,3987,3989,7,44,0,0,3988,
        3987,1,0,0,0,3988,3989,1,0,0,0,3989,3990,1,0,0,0,3990,3991,3,250,
        125,0,3991,257,1,0,0,0,3992,3994,5,180,0,0,3993,3995,7,44,0,0,3994,
        3993,1,0,0,0,3994,3995,1,0,0,0,3995,3998,1,0,0,0,3996,3999,3,254,
        127,0,3997,3999,3,250,125,0,3998,3996,1,0,0,0,3998,3997,1,0,0,0,
        3999,259,1,0,0,0,4000,4015,5,94,0,0,4001,4016,3,254,127,0,4002,4016,
        3,250,125,0,4003,4006,5,1133,0,0,4004,4007,3,254,127,0,4005,4007,
        3,250,125,0,4006,4004,1,0,0,0,4006,4005,1,0,0,0,4007,4008,1,0,0,
        0,4008,4013,5,1134,0,0,4009,4011,5,12,0,0,4010,4009,1,0,0,0,4010,
        4011,1,0,0,0,4011,4012,1,0,0,0,4012,4014,3,584,292,0,4013,4010,1,
        0,0,0,4013,4014,1,0,0,0,4014,4016,1,0,0,0,4015,4001,1,0,0,0,4015,
        4002,1,0,0,0,4015,4003,1,0,0,0,4016,261,1,0,0,0,4017,4018,5,278,
        0,0,4018,4019,5,1133,0,0,4019,4020,5,1148,0,0,4020,4021,5,1135,0,
        0,4021,4022,5,1148,0,0,4022,4023,5,365,0,0,4023,4024,5,1133,0,0,
        4024,4025,3,264,132,0,4025,4026,5,1134,0,0,4026,4031,5,1134,0,0,
        4027,4029,5,12,0,0,4028,4027,1,0,0,0,4028,4029,1,0,0,0,4029,4030,
        1,0,0,0,4030,4032,3,584,292,0,4031,4028,1,0,0,0,4031,4032,1,0,0,
        0,4032,263,1,0,0,0,4033,4038,3,266,133,0,4034,4035,5,1135,0,0,4035,
        4037,3,266,133,0,4036,4034,1,0,0,0,4037,4040,1,0,0,0,4038,4036,1,
        0,0,0,4038,4039,1,0,0,0,4039,265,1,0,0,0,4040,4038,1,0,0,0,4041,
        4058,3,556,278,0,4042,4043,5,65,0,0,4043,4059,5,284,0,0,4044,4056,
        3,604,302,0,4045,4046,5,285,0,0,4046,4048,5,1148,0,0,4047,4049,3,
        268,134,0,4048,4047,1,0,0,0,4048,4049,1,0,0,0,4049,4051,1,0,0,0,
        4050,4052,3,270,135,0,4051,4050,1,0,0,0,4051,4052,1,0,0,0,4052,4057,
        1,0,0,0,4053,4054,5,60,0,0,4054,4055,5,285,0,0,4055,4057,5,1148,
        0,0,4056,4045,1,0,0,0,4056,4053,1,0,0,0,4057,4059,1,0,0,0,4058,4042,
        1,0,0,0,4058,4044,1,0,0,0,4059,4071,1,0,0,0,4060,4062,5,283,0,0,
        4061,4063,5,285,0,0,4062,4061,1,0,0,0,4062,4063,1,0,0,0,4063,4064,
        1,0,0,0,4064,4065,5,1148,0,0,4065,4066,5,365,0,0,4066,4067,5,1133,
        0,0,4067,4068,3,264,132,0,4068,4069,5,1134,0,0,4069,4071,1,0,0,0,
        4070,4041,1,0,0,0,4070,4060,1,0,0,0,4071,267,1,0,0,0,4072,4077,5,
        116,0,0,4073,4077,5,411,0,0,4074,4075,5,42,0,0,4075,4077,3,634,317,
        0,4076,4072,1,0,0,0,4076,4073,1,0,0,0,4076,4074,1,0,0,0,4077,4078,
        1,0,0,0,4078,4079,5,118,0,0,4079,4080,5,55,0,0,4080,269,1,0,0,0,
        4081,4086,5,116,0,0,4082,4086,5,411,0,0,4083,4084,5,42,0,0,4084,
        4086,3,634,317,0,4085,4081,1,0,0,0,4085,4082,1,0,0,0,4085,4083,1,
        0,0,0,4086,4087,1,0,0,0,4087,4088,5,118,0,0,4088,4089,5,411,0,0,
        4089,271,1,0,0,0,4090,4099,7,52,0,0,4091,4099,5,75,0,0,4092,4099,
        5,171,0,0,4093,4099,5,166,0,0,4094,4099,5,164,0,0,4095,4099,5,625,
        0,0,4096,4099,7,53,0,0,4097,4099,5,165,0,0,4098,4090,1,0,0,0,4098,
        4091,1,0,0,0,4098,4092,1,0,0,0,4098,4093,1,0,0,0,4098,4094,1,0,0,
        0,4098,4095,1,0,0,0,4098,4096,1,0,0,0,4098,4097,1,0,0,0,4099,273,
        1,0,0,0,4100,4103,5,1117,0,0,4101,4103,3,276,138,0,4102,4100,1,0,
        0,0,4102,4101,1,0,0,0,4103,4108,1,0,0,0,4104,4105,5,1135,0,0,4105,
        4107,3,276,138,0,4106,4104,1,0,0,0,4107,4110,1,0,0,0,4108,4106,1,
        0,0,0,4108,4109,1,0,0,0,4109,275,1,0,0,0,4110,4108,1,0,0,0,4111,
        4112,3,550,275,0,4112,4113,5,1132,0,0,4113,4114,5,1117,0,0,4114,
        4141,1,0,0,0,4115,4120,3,556,278,0,4116,4118,5,12,0,0,4117,4116,
        1,0,0,0,4117,4118,1,0,0,0,4118,4119,1,0,0,0,4119,4121,3,584,292,
        0,4120,4117,1,0,0,0,4120,4121,1,0,0,0,4121,4141,1,0,0,0,4122,4127,
        3,648,324,0,4123,4125,5,12,0,0,4124,4123,1,0,0,0,4124,4125,1,0,0,
        0,4125,4126,1,0,0,0,4126,4128,3,584,292,0,4127,4124,1,0,0,0,4127,
        4128,1,0,0,0,4128,4141,1,0,0,0,4129,4130,5,1159,0,0,4130,4132,5,
        1108,0,0,4131,4129,1,0,0,0,4131,4132,1,0,0,0,4132,4133,1,0,0,0,4133,
        4138,3,688,344,0,4134,4136,5,12,0,0,4135,4134,1,0,0,0,4135,4136,
        1,0,0,0,4136,4137,1,0,0,0,4137,4139,3,584,292,0,4138,4135,1,0,0,
        0,4138,4139,1,0,0,0,4139,4141,1,0,0,0,4140,4111,1,0,0,0,4140,4115,
        1,0,0,0,4140,4122,1,0,0,0,4140,4131,1,0,0,0,4141,277,1,0,0,0,4142,
        4143,5,87,0,0,4143,4148,3,210,105,0,4144,4145,5,1135,0,0,4145,4147,
        3,210,105,0,4146,4144,1,0,0,0,4147,4150,1,0,0,0,4148,4146,1,0,0,
        0,4148,4149,1,0,0,0,4149,4179,1,0,0,0,4150,4148,1,0,0,0,4151,4152,
        5,87,0,0,4152,4153,5,400,0,0,4153,4179,5,1148,0,0,4154,4155,5,87,
        0,0,4155,4156,5,127,0,0,4156,4160,7,54,0,0,4157,4158,5,25,0,0,4158,
        4159,5,153,0,0,4159,4161,3,568,284,0,4160,4157,1,0,0,0,4160,4161,
        1,0,0,0,4161,4168,1,0,0,0,4162,4164,7,41,0,0,4163,4165,3,280,140,
        0,4164,4163,1,0,0,0,4165,4166,1,0,0,0,4166,4164,1,0,0,0,4166,4167,
        1,0,0,0,4167,4169,1,0,0,0,4168,4162,1,0,0,0,4168,4169,1,0,0,0,4169,
        4176,1,0,0,0,4170,4172,5,101,0,0,4171,4173,3,282,141,0,4172,4171,
        1,0,0,0,4173,4174,1,0,0,0,4174,4172,1,0,0,0,4174,4175,1,0,0,0,4175,
        4177,1,0,0,0,4176,4170,1,0,0,0,4176,4177,1,0,0,0,4177,4179,1,0,0,
        0,4178,4142,1,0,0,0,4178,4151,1,0,0,0,4178,4154,1,0,0,0,4179,279,
        1,0,0,0,4180,4181,5,173,0,0,4181,4182,5,19,0,0,4182,4193,5,1148,
        0,0,4183,4185,5,122,0,0,4184,4183,1,0,0,0,4184,4185,1,0,0,0,4185,
        4186,1,0,0,0,4186,4187,5,56,0,0,4187,4188,5,19,0,0,4188,4193,5,1148,
        0,0,4189,4190,5,58,0,0,4190,4191,5,19,0,0,4191,4193,5,1148,0,0,4192,
        4180,1,0,0,0,4192,4184,1,0,0,0,4192,4189,1,0,0,0,4193,281,1,0,0,
        0,4194,4195,5,169,0,0,4195,4196,5,19,0,0,4196,4201,5,1148,0,0,4197,
        4198,5,173,0,0,4198,4199,5,19,0,0,4199,4201,5,1148,0,0,4200,4194,
        1,0,0,0,4200,4197,1,0,0,0,4201,283,1,0,0,0,4202,4203,5,68,0,0,4203,
        4205,3,234,117,0,4204,4202,1,0,0,0,4204,4205,1,0,0,0,4205,4208,1,
        0,0,0,4206,4207,5,190,0,0,4207,4209,3,688,344,0,4208,4206,1,0,0,
        0,4208,4209,1,0,0,0,4209,285,1,0,0,0,4210,4211,5,73,0,0,4211,4212,
        5,19,0,0,4212,4217,3,292,146,0,4213,4214,5,1135,0,0,4214,4216,3,
        292,146,0,4215,4213,1,0,0,0,4216,4219,1,0,0,0,4217,4215,1,0,0,0,
        4217,4218,1,0,0,0,4218,4222,1,0,0,0,4219,4217,1,0,0,0,4220,4221,
        5,192,0,0,4221,4223,5,598,0,0,4222,4220,1,0,0,0,4222,4223,1,0,0,
        0,4223,287,1,0,0,0,4224,4225,5,74,0,0,4225,4226,3,688,344,0,4226,
        289,1,0,0,0,4227,4228,5,676,0,0,4228,4229,3,666,333,0,4229,4230,
        5,12,0,0,4230,4231,5,1133,0,0,4231,4232,3,664,332,0,4232,4242,5,
        1134,0,0,4233,4234,5,1135,0,0,4234,4235,3,666,333,0,4235,4236,5,
        12,0,0,4236,4237,5,1133,0,0,4237,4238,3,664,332,0,4238,4239,5,1134,
        0,0,4239,4241,1,0,0,0,4240,4233,1,0,0,0,4241,4244,1,0,0,0,4242,4240,
        1,0,0,0,4242,4243,1,0,0,0,4243,291,1,0,0,0,4244,4242,1,0,0,0,4245,
        4247,3,688,344,0,4246,4248,7,48,0,0,4247,4246,1,0,0,0,4247,4248,
        1,0,0,0,4248,293,1,0,0,0,4249,4260,5,99,0,0,4250,4251,3,296,148,
        0,4251,4252,5,1135,0,0,4252,4254,1,0,0,0,4253,4250,1,0,0,0,4253,
        4254,1,0,0,0,4254,4255,1,0,0,0,4255,4261,3,296,148,0,4256,4257,3,
        296,148,0,4257,4258,5,532,0,0,4258,4259,3,296,148,0,4259,4261,1,
        0,0,0,4260,4253,1,0,0,0,4260,4256,1,0,0,0,4261,295,1,0,0,0,4262,
        4266,3,590,295,0,4263,4266,3,566,283,0,4264,4266,3,586,293,0,4265,
        4262,1,0,0,0,4265,4263,1,0,0,0,4265,4264,1,0,0,0,4266,297,1,0,0,
        0,4267,4268,5,629,0,0,4268,4277,5,653,0,0,4269,4274,3,320,160,0,
        4270,4271,5,1135,0,0,4271,4273,3,320,160,0,4272,4270,1,0,0,0,4273,
        4276,1,0,0,0,4274,4272,1,0,0,0,4274,4275,1,0,0,0,4275,4278,1,0,0,
        0,4276,4274,1,0,0,0,4277,4269,1,0,0,0,4277,4278,1,0,0,0,4278,299,
        1,0,0,0,4279,4281,5,344,0,0,4280,4282,5,678,0,0,4281,4280,1,0,0,
        0,4281,4282,1,0,0,0,4282,301,1,0,0,0,4283,4285,5,369,0,0,4284,4286,
        5,678,0,0,4285,4284,1,0,0,0,4285,4286,1,0,0,0,4286,4292,1,0,0,0,
        4287,4289,5,10,0,0,4288,4290,5,521,0,0,4289,4288,1,0,0,0,4289,4290,
        1,0,0,0,4290,4291,1,0,0,0,4291,4293,5,353,0,0,4292,4287,1,0,0,0,
        4292,4293,1,0,0,0,4293,4298,1,0,0,0,4294,4296,5,521,0,0,4295,4294,
        1,0,0,0,4295,4296,1,0,0,0,4296,4297,1,0,0,0,4297,4299,5,138,0,0,
        4298,4295,1,0,0,0,4298,4299,1,0,0,0,4299,303,1,0,0,0,4300,4302,5,
        597,0,0,4301,4303,5,678,0,0,4302,4301,1,0,0,0,4302,4303,1,0,0,0,
        4303,4309,1,0,0,0,4304,4306,5,10,0,0,4305,4307,5,521,0,0,4306,4305,
        1,0,0,0,4306,4307,1,0,0,0,4307,4308,1,0,0,0,4308,4310,5,353,0,0,
        4309,4304,1,0,0,0,4309,4310,1,0,0,0,4310,4315,1,0,0,0,4311,4313,
        5,521,0,0,4312,4311,1,0,0,0,4312,4313,1,0,0,0,4313,4314,1,0,0,0,
        4314,4316,5,138,0,0,4315,4312,1,0,0,0,4315,4316,1,0,0,0,4316,305,
        1,0,0,0,4317,4318,5,604,0,0,4318,4319,3,584,292,0,4319,307,1,0,0,
        0,4320,4322,5,597,0,0,4321,4323,5,678,0,0,4322,4321,1,0,0,0,4322,
        4323,1,0,0,0,4323,4324,1,0,0,0,4324,4326,5,175,0,0,4325,4327,5,604,
        0,0,4326,4325,1,0,0,0,4326,4327,1,0,0,0,4327,4328,1,0,0,0,4328,4329,
        3,584,292,0,4329,309,1,0,0,0,4330,4331,5,138,0,0,4331,4332,5,604,
        0,0,4332,4333,3,584,292,0,4333,311,1,0,0,0,4334,4335,5,103,0,0,4335,
        4336,7,55,0,0,4336,4341,3,322,161,0,4337,4338,5,1135,0,0,4338,4340,
        3,322,161,0,4339,4337,1,0,0,0,4340,4343,1,0,0,0,4341,4339,1,0,0,
        0,4341,4342,1,0,0,0,4342,4345,1,0,0,0,4343,4341,1,0,0,0,4344,4346,
        3,646,323,0,4345,4344,1,0,0,0,4345,4346,1,0,0,0,4346,313,1,0,0,0,
        4347,4348,5,182,0,0,4348,4349,5,742,0,0,4349,315,1,0,0,0,4350,4351,
        5,153,0,0,4351,4352,5,340,0,0,4352,4353,5,1124,0,0,4353,4354,7,24,
        0,0,4354,317,1,0,0,0,4355,4357,5,153,0,0,4356,4358,7,56,0,0,4357,
        4356,1,0,0,0,4357,4358,1,0,0,0,4358,4359,1,0,0,0,4359,4360,5,653,
        0,0,4360,4365,3,326,163,0,4361,4362,5,1135,0,0,4362,4364,3,326,163,
        0,4363,4361,1,0,0,0,4364,4367,1,0,0,0,4365,4363,1,0,0,0,4365,4366,
        1,0,0,0,4366,319,1,0,0,0,4367,4365,1,0,0,0,4368,4369,5,192,0,0,4369,
        4370,5,377,0,0,4370,4376,5,616,0,0,4371,4372,5,134,0,0,4372,4376,
        5,193,0,0,4373,4374,5,134,0,0,4374,4376,5,538,0,0,4375,4368,1,0,
        0,0,4375,4371,1,0,0,0,4375,4373,1,0,0,0,4376,321,1,0,0,0,4377,4382,
        3,552,276,0,4378,4380,5,12,0,0,4379,4378,1,0,0,0,4379,4380,1,0,0,
        0,4380,4381,1,0,0,0,4381,4383,3,584,292,0,4382,4379,1,0,0,0,4382,
        4383,1,0,0,0,4383,4384,1,0,0,0,4384,4385,3,324,162,0,4385,323,1,
        0,0,0,4386,4388,5,134,0,0,4387,4389,5,474,0,0,4388,4387,1,0,0,0,
        4388,4389,1,0,0,0,4389,4395,1,0,0,0,4390,4392,5,106,0,0,4391,4390,
        1,0,0,0,4391,4392,1,0,0,0,4392,4393,1,0,0,0,4393,4395,5,193,0,0,
        4394,4386,1,0,0,0,4394,4391,1,0,0,0,4395,325,1,0,0,0,4396,4397,5,
        464,0,0,4397,4398,5,472,0,0,4398,4404,3,328,164,0,4399,4400,5,134,
        0,0,4400,4404,5,193,0,0,4401,4402,5,134,0,0,4402,4404,5,538,0,0,
        4403,4396,1,0,0,0,4403,4399,1,0,0,0,4403,4401,1,0,0,0,4404,327,1,
        0,0,0,4405,4406,5,799,0,0,4406,4413,5,134,0,0,4407,4408,5,134,0,
        0,4408,4413,5,800,0,0,4409,4410,5,134,0,0,4410,4413,5,801,0,0,4411,
        4413,5,802,0,0,4412,4405,1,0,0,0,4412,4407,1,0,0,0,4412,4409,1,0,
        0,0,4412,4411,1,0,0,0,4413,329,1,0,0,0,4414,4415,5,24,0,0,4415,4416,
        5,477,0,0,4416,4417,5,175,0,0,4417,4422,3,348,174,0,4418,4419,5,
        1135,0,0,4419,4421,3,348,174,0,4420,4418,1,0,0,0,4421,4424,1,0,0,
        0,4422,4420,1,0,0,0,4422,4423,1,0,0,0,4423,4426,1,0,0,0,4424,4422,
        1,0,0,0,4425,4427,3,356,178,0,4426,4425,1,0,0,0,4426,4427,1,0,0,
        0,4427,331,1,0,0,0,4428,4429,5,24,0,0,4429,4430,5,588,0,0,4430,4431,
        5,429,0,0,4431,4436,3,358,179,0,4432,4433,5,1135,0,0,4433,4435,3,
        358,179,0,4434,4432,1,0,0,0,4435,4438,1,0,0,0,4436,4434,1,0,0,0,
        4436,4437,1,0,0,0,4437,333,1,0,0,0,4438,4436,1,0,0,0,4439,4440,5,
        132,0,0,4440,4441,7,57,0,0,4441,4446,5,476,0,0,4442,4443,5,175,0,
        0,4443,4447,5,1148,0,0,4444,4445,5,15,0,0,4445,4447,5,1148,0,0,4446,
        4442,1,0,0,0,4446,4444,1,0,0,0,4447,335,1,0,0,0,4448,4449,5,589,
        0,0,4449,4450,5,477,0,0,4450,337,1,0,0,0,4451,4452,5,589,0,0,4452,
        4454,5,614,0,0,4453,4455,5,6,0,0,4454,4453,1,0,0,0,4454,4455,1,0,
        0,0,4455,4457,1,0,0,0,4456,4458,3,356,178,0,4457,4456,1,0,0,0,4457,
        4458,1,0,0,0,4458,339,1,0,0,0,4459,4460,5,629,0,0,4460,4469,5,614,
        0,0,4461,4466,3,362,181,0,4462,4463,5,1135,0,0,4463,4465,3,362,181,
        0,4464,4462,1,0,0,0,4465,4468,1,0,0,0,4466,4464,1,0,0,0,4466,4467,
        1,0,0,0,4467,4470,1,0,0,0,4468,4466,1,0,0,0,4469,4461,1,0,0,0,4469,
        4470,1,0,0,0,4470,4473,1,0,0,0,4471,4472,5,663,0,0,4472,4474,3,364,
        182,0,4473,4471,1,0,0,0,4473,4474,1,0,0,0,4474,4478,1,0,0,0,4475,
        4477,3,366,183,0,4476,4475,1,0,0,0,4477,4480,1,0,0,0,4478,4476,1,
        0,0,0,4478,4479,1,0,0,0,4479,4482,1,0,0,0,4480,4478,1,0,0,0,4481,
        4483,3,356,178,0,4482,4481,1,0,0,0,4482,4483,1,0,0,0,4483,341,1,
        0,0,0,4484,4485,5,635,0,0,4485,4494,5,614,0,0,4486,4491,3,362,181,
        0,4487,4488,5,1135,0,0,4488,4490,3,362,181,0,4489,4487,1,0,0,0,4490,
        4493,1,0,0,0,4491,4489,1,0,0,0,4491,4492,1,0,0,0,4492,4495,1,0,0,
        0,4493,4491,1,0,0,0,4494,4486,1,0,0,0,4494,4495,1,0,0,0,4495,343,
        1,0,0,0,4496,4497,5,629,0,0,4497,4498,5,441,0,0,4498,345,1,0,0,0,
        4499,4500,5,635,0,0,4500,4501,5,441,0,0,4501,347,1,0,0,0,4502,4503,
        3,350,175,0,4503,4504,5,1124,0,0,4504,4505,5,1148,0,0,4505,4532,
        1,0,0,0,4506,4507,3,352,176,0,4507,4508,5,1124,0,0,4508,4509,3,590,
        295,0,4509,4532,1,0,0,0,4510,4511,3,354,177,0,4511,4512,5,1124,0,
        0,4512,4513,7,24,0,0,4513,4532,1,0,0,0,4514,4515,5,481,0,0,4515,
        4516,5,1124,0,0,4516,4532,5,1151,0,0,4517,4518,5,449,0,0,4518,4519,
        5,1124,0,0,4519,4528,5,1133,0,0,4520,4525,3,584,292,0,4521,4522,
        5,1135,0,0,4522,4524,3,584,292,0,4523,4521,1,0,0,0,4524,4527,1,0,
        0,0,4525,4523,1,0,0,0,4525,4526,1,0,0,0,4526,4529,1,0,0,0,4527,4525,
        1,0,0,0,4528,4520,1,0,0,0,4528,4529,1,0,0,0,4529,4530,1,0,0,0,4530,
        4532,5,1134,0,0,4531,4502,1,0,0,0,4531,4506,1,0,0,0,4531,4510,1,
        0,0,0,4531,4514,1,0,0,0,4531,4517,1,0,0,0,4532,349,1,0,0,0,4533,
        4534,7,58,0,0,4534,351,1,0,0,0,4535,4536,7,59,0,0,4536,353,1,0,0,
        0,4537,4538,7,60,0,0,4538,355,1,0,0,0,4539,4540,5,65,0,0,4540,4541,
        5,355,0,0,4541,4542,5,1148,0,0,4542,357,1,0,0,0,4543,4544,5,581,
        0,0,4544,4545,5,1124,0,0,4545,4546,5,1133,0,0,4546,4547,3,616,308,
        0,4547,4548,5,1134,0,0,4548,4593,1,0,0,0,4549,4550,5,583,0,0,4550,
        4551,5,1124,0,0,4551,4552,5,1133,0,0,4552,4553,3,616,308,0,4553,
        4554,5,1134,0,0,4554,4593,1,0,0,0,4555,4556,5,582,0,0,4556,4557,
        5,1124,0,0,4557,4558,5,1133,0,0,4558,4559,3,620,310,0,4559,4560,
        5,1134,0,0,4560,4593,1,0,0,0,4561,4562,5,584,0,0,4562,4563,5,1124,
        0,0,4563,4564,5,1133,0,0,4564,4565,3,620,310,0,4565,4566,5,1134,
        0,0,4566,4593,1,0,0,0,4567,4568,5,586,0,0,4568,4569,5,1124,0,0,4569,
        4570,5,1133,0,0,4570,4571,3,630,315,0,4571,4572,5,1134,0,0,4572,
        4593,1,0,0,0,4573,4574,5,587,0,0,4574,4575,5,1124,0,0,4575,4576,
        5,1133,0,0,4576,4577,3,630,315,0,4577,4578,5,1134,0,0,4578,4593,
        1,0,0,0,4579,4580,5,585,0,0,4580,4581,5,1124,0,0,4581,4582,5,1133,
        0,0,4582,4587,3,360,180,0,4583,4584,5,1135,0,0,4584,4586,3,360,180,
        0,4585,4583,1,0,0,0,4586,4589,1,0,0,0,4587,4585,1,0,0,0,4587,4588,
        1,0,0,0,4588,4590,1,0,0,0,4589,4587,1,0,0,0,4590,4591,5,1134,0,0,
        4591,4593,1,0,0,0,4592,4543,1,0,0,0,4592,4549,1,0,0,0,4592,4555,
        1,0,0,0,4592,4561,1,0,0,0,4592,4567,1,0,0,0,4592,4573,1,0,0,0,4592,
        4579,1,0,0,0,4593,359,1,0,0,0,4594,4595,5,1133,0,0,4595,4596,3,552,
        276,0,4596,4597,5,1135,0,0,4597,4598,3,552,276,0,4598,4599,5,1134,
        0,0,4599,361,1,0,0,0,4600,4601,7,61,0,0,4601,363,1,0,0,0,4602,4603,
        7,62,0,0,4603,4604,5,1124,0,0,4604,4621,3,368,184,0,4605,4606,5,
        483,0,0,4606,4607,5,1124,0,0,4607,4608,5,1148,0,0,4608,4609,5,1135,
        0,0,4609,4610,5,484,0,0,4610,4611,5,1124,0,0,4611,4621,3,590,295,
        0,4612,4613,5,575,0,0,4613,4614,5,1124,0,0,4614,4615,5,1148,0,0,
        4615,4616,5,1135,0,0,4616,4617,5,576,0,0,4617,4618,5,1124,0,0,4618,
        4621,3,590,295,0,4619,4621,5,623,0,0,4620,4602,1,0,0,0,4620,4605,
        1,0,0,0,4620,4612,1,0,0,0,4620,4619,1,0,0,0,4621,365,1,0,0,0,4622,
        4623,5,665,0,0,4623,4624,5,1124,0,0,4624,4635,5,1148,0,0,4625,4626,
        5,551,0,0,4626,4627,5,1124,0,0,4627,4635,5,1148,0,0,4628,4629,5,
        391,0,0,4629,4630,5,1124,0,0,4630,4635,5,1148,0,0,4631,4632,5,555,
        0,0,4632,4633,5,1124,0,0,4633,4635,5,1148,0,0,4634,4622,1,0,0,0,
        4634,4625,1,0,0,0,4634,4628,1,0,0,0,4634,4631,1,0,0,0,4635,367,1,
        0,0,0,4636,4641,3,576,288,0,4637,4638,5,1135,0,0,4638,4640,3,576,
        288,0,4639,4637,1,0,0,0,4640,4643,1,0,0,0,4641,4639,1,0,0,0,4641,
        4642,1,0,0,0,4642,4646,1,0,0,0,4643,4641,1,0,0,0,4644,4646,5,1148,
        0,0,4645,4636,1,0,0,0,4645,4644,1,0,0,0,4646,369,1,0,0,0,4647,4648,
        5,681,0,0,4648,4649,7,63,0,0,4649,4651,3,578,289,0,4650,4652,7,64,
        0,0,4651,4650,1,0,0,0,4651,4652,1,0,0,0,4652,371,1,0,0,0,4653,4654,
        5,681,0,0,4654,4655,5,407,0,0,4655,4661,3,578,289,0,4656,4659,5,
        643,0,0,4657,4658,5,65,0,0,4658,4660,5,509,0,0,4659,4657,1,0,0,0,
        4659,4660,1,0,0,0,4660,4662,1,0,0,0,4661,4656,1,0,0,0,4661,4662,
        1,0,0,0,4662,373,1,0,0,0,4663,4664,5,681,0,0,4664,4665,5,560,0,0,
        4665,4666,3,578,289,0,4666,375,1,0,0,0,4667,4668,5,681,0,0,4668,
        4669,5,369,0,0,4669,4672,3,578,289,0,4670,4671,5,536,0,0,4671,4673,
        5,553,0,0,4672,4670,1,0,0,0,4672,4673,1,0,0,0,4673,377,1,0,0,0,4674,
        4675,5,681,0,0,4675,4676,5,597,0,0,4676,4677,3,578,289,0,4677,379,
        1,0,0,0,4678,4679,5,681,0,0,4679,4682,5,570,0,0,4680,4681,5,32,0,
        0,4681,4683,3,578,289,0,4682,4680,1,0,0,0,4682,4683,1,0,0,0,4683,
        381,1,0,0,0,4684,4685,5,560,0,0,4685,4686,3,584,292,0,4686,4689,
        5,68,0,0,4687,4690,5,1148,0,0,4688,4690,5,1159,0,0,4689,4687,1,0,
        0,0,4689,4688,1,0,0,0,4690,383,1,0,0,0,4691,4692,5,708,0,0,4692,
        4695,3,584,292,0,4693,4694,5,187,0,0,4694,4696,3,632,316,0,4695,
        4693,1,0,0,0,4695,4696,1,0,0,0,4696,385,1,0,0,0,4697,4698,7,65,0,
        0,4698,4699,5,560,0,0,4699,4700,3,584,292,0,4700,387,1,0,0,0,4701,
        4704,3,390,195,0,4702,4704,3,4,2,0,4703,4701,1,0,0,0,4703,4702,1,
        0,0,0,4704,389,1,0,0,0,4705,4706,3,584,292,0,4706,4707,5,1144,0,
        0,4707,4709,1,0,0,0,4708,4705,1,0,0,0,4708,4709,1,0,0,0,4709,4710,
        1,0,0,0,4710,4716,5,344,0,0,4711,4712,3,410,205,0,4712,4713,5,1136,
        0,0,4713,4715,1,0,0,0,4714,4711,1,0,0,0,4715,4718,1,0,0,0,4716,4714,
        1,0,0,0,4716,4717,1,0,0,0,4717,4724,1,0,0,0,4718,4716,1,0,0,0,4719,
        4720,3,412,206,0,4720,4721,5,1136,0,0,4721,4723,1,0,0,0,4722,4719,
        1,0,0,0,4723,4726,1,0,0,0,4724,4722,1,0,0,0,4724,4725,1,0,0,0,4725,
        4732,1,0,0,0,4726,4724,1,0,0,0,4727,4728,3,414,207,0,4728,4729,5,
        1136,0,0,4729,4731,1,0,0,0,4730,4727,1,0,0,0,4731,4734,1,0,0,0,4732,
        4730,1,0,0,0,4732,4733,1,0,0,0,4733,4740,1,0,0,0,4734,4732,1,0,0,
        0,4735,4736,3,416,208,0,4736,4737,5,1136,0,0,4737,4739,1,0,0,0,4738,
        4735,1,0,0,0,4739,4742,1,0,0,0,4740,4738,1,0,0,0,4740,4741,1,0,0,
        0,4741,4746,1,0,0,0,4742,4740,1,0,0,0,4743,4745,3,420,210,0,4744,
        4743,1,0,0,0,4745,4748,1,0,0,0,4746,4744,1,0,0,0,4746,4747,1,0,0,
        0,4747,4749,1,0,0,0,4748,4746,1,0,0,0,4749,4751,5,407,0,0,4750,4752,
        3,584,292,0,4751,4750,1,0,0,0,4751,4752,1,0,0,0,4752,391,1,0,0,0,
        4753,4756,5,22,0,0,4754,4757,3,584,292,0,4755,4757,3,688,344,0,4756,
        4754,1,0,0,0,4756,4755,1,0,0,0,4756,4757,1,0,0,0,4757,4759,1,0,0,
        0,4758,4760,3,422,211,0,4759,4758,1,0,0,0,4760,4761,1,0,0,0,4761,
        4759,1,0,0,0,4761,4762,1,0,0,0,4762,4769,1,0,0,0,4763,4765,5,53,
        0,0,4764,4766,3,420,210,0,4765,4764,1,0,0,0,4766,4767,1,0,0,0,4767,
        4765,1,0,0,0,4767,4768,1,0,0,0,4768,4770,1,0,0,0,4769,4763,1,0,0,
        0,4769,4770,1,0,0,0,4770,4771,1,0,0,0,4771,4772,5,407,0,0,4772,4773,
        5,22,0,0,4773,393,1,0,0,0,4774,4775,5,77,0,0,4775,4776,3,688,344,
        0,4776,4778,5,174,0,0,4777,4779,3,420,210,0,4778,4777,1,0,0,0,4779,
        4780,1,0,0,0,4780,4778,1,0,0,0,4780,4781,1,0,0,0,4781,4785,1,0,0,
        0,4782,4784,3,424,212,0,4783,4782,1,0,0,0,4784,4787,1,0,0,0,4785,
        4783,1,0,0,0,4785,4786,1,0,0,0,4786,4794,1,0,0,0,4787,4785,1,0,0,
        0,4788,4790,5,53,0,0,4789,4791,3,420,210,0,4790,4789,1,0,0,0,4791,
        4792,1,0,0,0,4792,4790,1,0,0,0,4792,4793,1,0,0,0,4793,4795,1,0,0,
        0,4794,4788,1,0,0,0,4794,4795,1,0,0,0,4795,4796,1,0,0,0,4796,4797,
        5,407,0,0,4797,4798,5,77,0,0,4798,395,1,0,0,0,4799,4800,5,89,0,0,
        4800,4801,3,584,292,0,4801,397,1,0,0,0,4802,4803,5,96,0,0,4803,4804,
        3,584,292,0,4804,399,1,0,0,0,4805,4806,3,584,292,0,4806,4807,5,1144,
        0,0,4807,4809,1,0,0,0,4808,4805,1,0,0,0,4808,4809,1,0,0,0,4809,4810,
        1,0,0,0,4810,4812,5,105,0,0,4811,4813,3,420,210,0,4812,4811,1,0,
        0,0,4813,4814,1,0,0,0,4814,4812,1,0,0,0,4814,4815,1,0,0,0,4815,4816,
        1,0,0,0,4816,4817,5,407,0,0,4817,4819,5,105,0,0,4818,4820,3,584,
        292,0,4819,4818,1,0,0,0,4819,4820,1,0,0,0,4820,401,1,0,0,0,4821,
        4822,3,584,292,0,4822,4823,5,1144,0,0,4823,4825,1,0,0,0,4824,4821,
        1,0,0,0,4824,4825,1,0,0,0,4825,4826,1,0,0,0,4826,4828,5,140,0,0,
        4827,4829,3,420,210,0,4828,4827,1,0,0,0,4829,4830,1,0,0,0,4830,4828,
        1,0,0,0,4830,4831,1,0,0,0,4831,4832,1,0,0,0,4832,4833,5,663,0,0,
        4833,4834,3,688,344,0,4834,4835,5,407,0,0,4835,4837,5,140,0,0,4836,
        4838,3,584,292,0,4837,4836,1,0,0,0,4837,4838,1,0,0,0,4838,403,1,
        0,0,0,4839,4840,5,146,0,0,4840,4841,3,688,344,0,4841,405,1,0,0,0,
        4842,4843,3,584,292,0,4843,4844,5,1144,0,0,4844,4846,1,0,0,0,4845,
        4842,1,0,0,0,4845,4846,1,0,0,0,4846,4847,1,0,0,0,4847,4848,5,191,
        0,0,4848,4849,3,688,344,0,4849,4851,5,399,0,0,4850,4852,3,420,210,
        0,4851,4850,1,0,0,0,4852,4853,1,0,0,0,4853,4851,1,0,0,0,4853,4854,
        1,0,0,0,4854,4855,1,0,0,0,4855,4856,5,407,0,0,4856,4858,5,191,0,
        0,4857,4859,3,584,292,0,4858,4857,1,0,0,0,4858,4859,1,0,0,0,4859,
        407,1,0,0,0,4860,4861,5,361,0,0,4861,4876,3,584,292,0,4862,4867,
        5,64,0,0,4863,4865,5,520,0,0,4864,4863,1,0,0,0,4864,4865,1,0,0,0,
        4865,4866,1,0,0,0,4866,4868,5,68,0,0,4867,4864,1,0,0,0,4867,4868,
        1,0,0,0,4868,4869,1,0,0,0,4869,4870,3,584,292,0,4870,4871,5,87,0,
        0,4871,4872,3,616,308,0,4872,4876,1,0,0,0,4873,4874,5,539,0,0,4874,
        4876,3,584,292,0,4875,4860,1,0,0,0,4875,4862,1,0,0,0,4875,4873,1,
        0,0,0,4876,409,1,0,0,0,4877,4878,5,41,0,0,4878,4879,3,616,308,0,
        4879,4882,3,604,302,0,4880,4881,5,42,0,0,4881,4883,3,688,344,0,4882,
        4880,1,0,0,0,4882,4883,1,0,0,0,4883,411,1,0,0,0,4884,4885,5,41,0,
        0,4885,4886,3,584,292,0,4886,4887,5,29,0,0,4887,4894,5,65,0,0,4888,
        4895,3,590,295,0,4889,4891,5,162,0,0,4890,4892,5,669,0,0,4891,4890,
        1,0,0,0,4891,4892,1,0,0,0,4892,4893,1,0,0,0,4893,4895,5,1148,0,0,
        4894,4888,1,0,0,0,4894,4889,1,0,0,0,4895,413,1,0,0,0,4896,4897,5,
        41,0,0,4897,4898,3,584,292,0,4898,4899,5,38,0,0,4899,4900,5,65,0,
        0,4900,4901,3,200,100,0,4901,415,1,0,0,0,4902,4903,5,41,0,0,4903,
        4904,7,66,0,0,4904,4905,5,442,0,0,4905,4906,5,65,0,0,4906,4911,3,
        418,209,0,4907,4908,5,1135,0,0,4908,4910,3,418,209,0,4909,4907,1,
        0,0,0,4910,4913,1,0,0,0,4911,4909,1,0,0,0,4911,4912,1,0,0,0,4912,
        4914,1,0,0,0,4913,4911,1,0,0,0,4914,4915,3,388,194,0,4915,417,1,
        0,0,0,4916,4928,3,590,295,0,4917,4919,5,162,0,0,4918,4920,5,669,
        0,0,4919,4918,1,0,0,0,4919,4920,1,0,0,0,4920,4921,1,0,0,0,4921,4928,
        5,1148,0,0,4922,4928,3,584,292,0,4923,4928,5,163,0,0,4924,4925,5,
        114,0,0,4925,4928,5,435,0,0,4926,4928,5,161,0,0,4927,4916,1,0,0,
        0,4927,4917,1,0,0,0,4927,4922,1,0,0,0,4927,4923,1,0,0,0,4927,4924,
        1,0,0,0,4927,4926,1,0,0,0,4928,419,1,0,0,0,4929,4932,3,18,9,0,4930,
        4932,3,4,2,0,4931,4929,1,0,0,0,4931,4930,1,0,0,0,4932,4933,1,0,0,
        0,4933,4934,5,1136,0,0,4934,421,1,0,0,0,4935,4938,5,189,0,0,4936,
        4939,3,602,301,0,4937,4939,3,688,344,0,4938,4936,1,0,0,0,4938,4937,
        1,0,0,0,4939,4940,1,0,0,0,4940,4942,5,174,0,0,4941,4943,3,420,210,
        0,4942,4941,1,0,0,0,4943,4944,1,0,0,0,4944,4942,1,0,0,0,4944,4945,
        1,0,0,0,4945,423,1,0,0,0,4946,4947,5,54,0,0,4947,4948,3,688,344,
        0,4948,4950,5,174,0,0,4949,4951,3,420,210,0,4950,4949,1,0,0,0,4951,
        4952,1,0,0,0,4952,4950,1,0,0,0,4952,4953,1,0,0,0,4953,425,1,0,0,
        0,4954,4955,5,7,0,0,4955,4956,5,665,0,0,4956,4961,3,446,223,0,4957,
        4958,5,1135,0,0,4958,4960,3,446,223,0,4959,4957,1,0,0,0,4960,4963,
        1,0,0,0,4961,4959,1,0,0,0,4961,4962,1,0,0,0,4962,5028,1,0,0,0,4963,
        4961,1,0,0,0,4964,4965,5,7,0,0,4965,4967,5,665,0,0,4966,4968,3,640,
        320,0,4967,4966,1,0,0,0,4967,4968,1,0,0,0,4968,4969,1,0,0,0,4969,
        4974,3,448,224,0,4970,4971,5,1135,0,0,4971,4973,3,448,224,0,4972,
        4970,1,0,0,0,4973,4976,1,0,0,0,4974,4972,1,0,0,0,4974,4975,1,0,0,
        0,4975,4991,1,0,0,0,4976,4974,1,0,0,0,4977,4989,5,142,0,0,4978,4990,
        5,529,0,0,4979,4986,3,454,227,0,4980,4982,5,10,0,0,4981,4980,1,0,
        0,0,4981,4982,1,0,0,0,4982,4983,1,0,0,0,4983,4985,3,454,227,0,4984,
        4981,1,0,0,0,4985,4988,1,0,0,0,4986,4984,1,0,0,0,4986,4987,1,0,0,
        0,4987,4990,1,0,0,0,4988,4986,1,0,0,0,4989,4978,1,0,0,0,4989,4979,
        1,0,0,0,4990,4992,1,0,0,0,4991,4977,1,0,0,0,4991,4992,1,0,0,0,4992,
        4999,1,0,0,0,4993,4995,5,192,0,0,4994,4996,3,456,228,0,4995,4994,
        1,0,0,0,4996,4997,1,0,0,0,4997,4995,1,0,0,0,4997,4998,1,0,0,0,4998,
        5000,1,0,0,0,4999,4993,1,0,0,0,4999,5000,1,0,0,0,5000,5005,1,0,0,
        0,5001,5004,3,458,229,0,5002,5004,3,460,230,0,5003,5001,1,0,0,0,
        5003,5002,1,0,0,0,5004,5007,1,0,0,0,5005,5003,1,0,0,0,5005,5006,
        1,0,0,0,5006,5012,1,0,0,0,5007,5005,1,0,0,0,5008,5009,5,368,0,0,
        5009,5013,5,1148,0,0,5010,5011,5,14,0,0,5011,5013,5,1148,0,0,5012,
        5008,1,0,0,0,5012,5010,1,0,0,0,5012,5013,1,0,0,0,5013,5028,1,0,0,
        0,5014,5015,5,7,0,0,5015,5017,5,665,0,0,5016,5018,3,640,320,0,5017,
        5016,1,0,0,0,5017,5018,1,0,0,0,5018,5021,1,0,0,0,5019,5022,3,564,
        282,0,5020,5022,3,584,292,0,5021,5019,1,0,0,0,5021,5020,1,0,0,0,
        5022,5023,1,0,0,0,5023,5024,5,42,0,0,5024,5025,5,596,0,0,5025,5026,
        3,434,217,0,5026,5028,1,0,0,0,5027,4954,1,0,0,0,5027,4964,1,0,0,
        0,5027,5014,1,0,0,0,5028,427,1,0,0,0,5029,5030,5,33,0,0,5030,5031,
        5,665,0,0,5031,5036,3,448,224,0,5032,5033,5,1135,0,0,5033,5035,3,
        448,224,0,5034,5032,1,0,0,0,5035,5038,1,0,0,0,5036,5034,1,0,0,0,
        5036,5037,1,0,0,0,5037,5095,1,0,0,0,5038,5036,1,0,0,0,5039,5040,
        5,33,0,0,5040,5042,5,665,0,0,5041,5043,3,642,321,0,5042,5041,1,0,
        0,0,5042,5043,1,0,0,0,5043,5044,1,0,0,0,5044,5049,3,448,224,0,5045,
        5046,5,1135,0,0,5046,5048,3,448,224,0,5047,5045,1,0,0,0,5048,5051,
        1,0,0,0,5049,5047,1,0,0,0,5049,5050,1,0,0,0,5050,5055,1,0,0,0,5051,
        5049,1,0,0,0,5052,5053,5,42,0,0,5053,5054,5,596,0,0,5054,5056,3,
        434,217,0,5055,5052,1,0,0,0,5055,5056,1,0,0,0,5056,5071,1,0,0,0,
        5057,5069,5,142,0,0,5058,5070,5,529,0,0,5059,5066,3,454,227,0,5060,
        5062,5,10,0,0,5061,5060,1,0,0,0,5061,5062,1,0,0,0,5062,5063,1,0,
        0,0,5063,5065,3,454,227,0,5064,5061,1,0,0,0,5065,5068,1,0,0,0,5066,
        5064,1,0,0,0,5066,5067,1,0,0,0,5067,5070,1,0,0,0,5068,5066,1,0,0,
        0,5069,5058,1,0,0,0,5069,5059,1,0,0,0,5070,5072,1,0,0,0,5071,5057,
        1,0,0,0,5071,5072,1,0,0,0,5072,5079,1,0,0,0,5073,5075,5,192,0,0,
        5074,5076,3,456,228,0,5075,5074,1,0,0,0,5076,5077,1,0,0,0,5077,5075,
        1,0,0,0,5077,5078,1,0,0,0,5078,5080,1,0,0,0,5079,5073,1,0,0,0,5079,
        5080,1,0,0,0,5080,5085,1,0,0,0,5081,5084,3,458,229,0,5082,5084,3,
        460,230,0,5083,5081,1,0,0,0,5083,5082,1,0,0,0,5084,5087,1,0,0,0,
        5085,5083,1,0,0,0,5085,5086,1,0,0,0,5086,5092,1,0,0,0,5087,5085,
        1,0,0,0,5088,5089,5,368,0,0,5089,5093,5,1148,0,0,5090,5091,5,14,
        0,0,5091,5093,5,1148,0,0,5092,5088,1,0,0,0,5092,5090,1,0,0,0,5092,
        5093,1,0,0,0,5093,5095,1,0,0,0,5094,5029,1,0,0,0,5094,5039,1,0,0,
        0,5095,429,1,0,0,0,5096,5097,5,51,0,0,5097,5099,5,665,0,0,5098,5100,
        3,640,320,0,5099,5098,1,0,0,0,5099,5100,1,0,0,0,5100,5101,1,0,0,
        0,5101,5106,3,564,282,0,5102,5103,5,1135,0,0,5103,5105,3,564,282,
        0,5104,5102,1,0,0,0,5105,5108,1,0,0,0,5106,5104,1,0,0,0,5106,5107,
        1,0,0,0,5107,431,1,0,0,0,5108,5106,1,0,0,0,5109,5110,5,72,0,0,5110,
        5115,3,462,231,0,5111,5112,5,1135,0,0,5112,5114,3,462,231,0,5113,
        5111,1,0,0,0,5114,5117,1,0,0,0,5115,5113,1,0,0,0,5115,5116,1,0,0,
        0,5116,5118,1,0,0,0,5117,5115,1,0,0,0,5118,5120,5,118,0,0,5119,5121,
        7,67,0,0,5120,5119,1,0,0,0,5120,5121,1,0,0,0,5121,5122,1,0,0,0,5122,
        5123,3,466,233,0,5123,5124,5,175,0,0,5124,5129,3,448,224,0,5125,
        5126,5,1135,0,0,5126,5128,3,448,224,0,5127,5125,1,0,0,0,5128,5131,
        1,0,0,0,5129,5127,1,0,0,0,5129,5130,1,0,0,0,5130,5146,1,0,0,0,5131,
        5129,1,0,0,0,5132,5144,5,142,0,0,5133,5145,5,529,0,0,5134,5141,3,
        454,227,0,5135,5137,5,10,0,0,5136,5135,1,0,0,0,5136,5137,1,0,0,0,
        5137,5138,1,0,0,0,5138,5140,3,454,227,0,5139,5136,1,0,0,0,5140,5143,
        1,0,0,0,5141,5139,1,0,0,0,5141,5142,1,0,0,0,5142,5145,1,0,0,0,5143,
        5141,1,0,0,0,5144,5133,1,0,0,0,5144,5134,1,0,0,0,5145,5147,1,0,0,
        0,5146,5132,1,0,0,0,5146,5147,1,0,0,0,5147,5157,1,0,0,0,5148,5154,
        5,192,0,0,5149,5150,5,72,0,0,5150,5153,5,120,0,0,5151,5153,3,456,
        228,0,5152,5149,1,0,0,0,5152,5151,1,0,0,0,5153,5156,1,0,0,0,5154,
        5152,1,0,0,0,5154,5155,1,0,0,0,5155,5158,1,0,0,0,5156,5154,1,0,0,
        0,5157,5148,1,0,0,0,5157,5158,1,0,0,0,5158,5165,1,0,0,0,5159,5160,
        5,12,0,0,5160,5161,3,564,282,0,5161,5162,5,192,0,0,5162,5163,5,596,
        0,0,5163,5164,3,434,217,0,5164,5166,1,0,0,0,5165,5159,1,0,0,0,5165,
        5166,1,0,0,0,5166,5203,1,0,0,0,5167,5170,5,72,0,0,5168,5171,3,564,
        282,0,5169,5171,3,584,292,0,5170,5168,1,0,0,0,5170,5169,1,0,0,0,
        5171,5179,1,0,0,0,5172,5175,5,1135,0,0,5173,5176,3,564,282,0,5174,
        5176,3,584,292,0,5175,5173,1,0,0,0,5175,5174,1,0,0,0,5176,5178,1,
        0,0,0,5177,5172,1,0,0,0,5178,5181,1,0,0,0,5179,5177,1,0,0,0,5179,
        5180,1,0,0,0,5180,5182,1,0,0,0,5181,5179,1,0,0,0,5182,5185,5,175,
        0,0,5183,5186,3,564,282,0,5184,5186,3,584,292,0,5185,5183,1,0,0,
        0,5185,5184,1,0,0,0,5186,5194,1,0,0,0,5187,5190,5,1135,0,0,5188,
        5191,3,564,282,0,5189,5191,3,584,292,0,5190,5188,1,0,0,0,5190,5189,
        1,0,0,0,5191,5193,1,0,0,0,5192,5187,1,0,0,0,5193,5196,1,0,0,0,5194,
        5192,1,0,0,0,5194,5195,1,0,0,0,5195,5200,1,0,0,0,5196,5194,1,0,0,
        0,5197,5198,5,192,0,0,5198,5199,5,697,0,0,5199,5201,5,120,0,0,5200,
        5197,1,0,0,0,5200,5201,1,0,0,0,5201,5203,1,0,0,0,5202,5109,1,0,0,
        0,5202,5167,1,0,0,0,5203,433,1,0,0,0,5204,5227,5,42,0,0,5205,5227,
        5,529,0,0,5206,5216,5,6,0,0,5207,5208,5,59,0,0,5208,5213,3,564,282,
        0,5209,5210,5,1135,0,0,5210,5212,3,564,282,0,5211,5209,1,0,0,0,5212,
        5215,1,0,0,0,5213,5211,1,0,0,0,5213,5214,1,0,0,0,5214,5217,1,0,0,
        0,5215,5213,1,0,0,0,5216,5207,1,0,0,0,5216,5217,1,0,0,0,5217,5227,
        1,0,0,0,5218,5223,3,564,282,0,5219,5220,5,1135,0,0,5220,5222,3,564,
        282,0,5221,5219,1,0,0,0,5222,5225,1,0,0,0,5223,5221,1,0,0,0,5223,
        5224,1,0,0,0,5224,5227,1,0,0,0,5225,5223,1,0,0,0,5226,5204,1,0,0,
        0,5226,5205,1,0,0,0,5226,5206,1,0,0,0,5226,5218,1,0,0,0,5227,435,
        1,0,0,0,5228,5229,5,72,0,0,5229,5230,5,566,0,0,5230,5231,5,118,0,
        0,5231,5232,3,564,282,0,5232,5233,5,175,0,0,5233,5238,3,564,282,
        0,5234,5235,5,1135,0,0,5235,5237,3,564,282,0,5236,5234,1,0,0,0,5237,
        5240,1,0,0,0,5238,5236,1,0,0,0,5238,5239,1,0,0,0,5239,5244,1,0,0,
        0,5240,5238,1,0,0,0,5241,5242,5,192,0,0,5242,5243,5,72,0,0,5243,
        5245,5,120,0,0,5244,5241,1,0,0,0,5244,5245,1,0,0,0,5245,437,1,0,
        0,0,5246,5247,5,139,0,0,5247,5248,5,665,0,0,5248,5253,3,468,234,
        0,5249,5250,5,1135,0,0,5250,5252,3,468,234,0,5251,5249,1,0,0,0,5252,
        5255,1,0,0,0,5253,5251,1,0,0,0,5253,5254,1,0,0,0,5254,439,1,0,0,
        0,5255,5253,1,0,0,0,5256,5257,5,147,0,0,5257,5262,3,462,231,0,5258,
        5259,5,1135,0,0,5259,5261,3,462,231,0,5260,5258,1,0,0,0,5261,5264,
        1,0,0,0,5262,5260,1,0,0,0,5262,5263,1,0,0,0,5263,5265,1,0,0,0,5264,
        5262,1,0,0,0,5265,5267,5,118,0,0,5266,5268,7,67,0,0,5267,5266,1,
        0,0,0,5267,5268,1,0,0,0,5268,5269,1,0,0,0,5269,5270,3,466,233,0,
        5270,5271,5,68,0,0,5271,5276,3,564,282,0,5272,5273,5,1135,0,0,5273,
        5275,3,564,282,0,5274,5272,1,0,0,0,5275,5278,1,0,0,0,5276,5274,1,
        0,0,0,5276,5277,1,0,0,0,5277,5327,1,0,0,0,5278,5276,1,0,0,0,5279,
        5280,5,147,0,0,5280,5282,5,6,0,0,5281,5283,5,725,0,0,5282,5281,1,
        0,0,0,5282,5283,1,0,0,0,5283,5284,1,0,0,0,5284,5285,5,1135,0,0,5285,
        5286,5,72,0,0,5286,5287,5,120,0,0,5287,5288,5,68,0,0,5288,5293,3,
        564,282,0,5289,5290,5,1135,0,0,5290,5292,3,564,282,0,5291,5289,1,
        0,0,0,5292,5295,1,0,0,0,5293,5291,1,0,0,0,5293,5294,1,0,0,0,5294,
        5327,1,0,0,0,5295,5293,1,0,0,0,5296,5299,5,147,0,0,5297,5300,3,564,
        282,0,5298,5300,3,584,292,0,5299,5297,1,0,0,0,5299,5298,1,0,0,0,
        5300,5308,1,0,0,0,5301,5304,5,1135,0,0,5302,5305,3,564,282,0,5303,
        5305,3,584,292,0,5304,5302,1,0,0,0,5304,5303,1,0,0,0,5305,5307,1,
        0,0,0,5306,5301,1,0,0,0,5307,5310,1,0,0,0,5308,5306,1,0,0,0,5308,
        5309,1,0,0,0,5309,5311,1,0,0,0,5310,5308,1,0,0,0,5311,5314,5,68,
        0,0,5312,5315,3,564,282,0,5313,5315,3,584,292,0,5314,5312,1,0,0,
        0,5314,5313,1,0,0,0,5315,5323,1,0,0,0,5316,5319,5,1135,0,0,5317,
        5320,3,564,282,0,5318,5320,3,584,292,0,5319,5317,1,0,0,0,5319,5318,
        1,0,0,0,5320,5322,1,0,0,0,5321,5316,1,0,0,0,5322,5325,1,0,0,0,5323,
        5321,1,0,0,0,5323,5324,1,0,0,0,5324,5327,1,0,0,0,5325,5323,1,0,0,
        0,5326,5256,1,0,0,0,5326,5279,1,0,0,0,5326,5296,1,0,0,0,5327,441,
        1,0,0,0,5328,5329,5,147,0,0,5329,5330,5,566,0,0,5330,5331,5,118,
        0,0,5331,5332,3,564,282,0,5332,5333,5,68,0,0,5333,5338,3,564,282,
        0,5334,5335,5,1135,0,0,5335,5337,3,564,282,0,5336,5334,1,0,0,0,5337,
        5340,1,0,0,0,5338,5336,1,0,0,0,5338,5339,1,0,0,0,5339,443,1,0,0,
        0,5340,5338,1,0,0,0,5341,5342,5,153,0,0,5342,5345,5,551,0,0,5343,
        5344,5,65,0,0,5344,5346,3,564,282,0,5345,5343,1,0,0,0,5345,5346,
        1,0,0,0,5346,5347,1,0,0,0,5347,5350,5,1124,0,0,5348,5351,3,682,341,
        0,5349,5351,5,1148,0,0,5350,5348,1,0,0,0,5350,5349,1,0,0,0,5351,
        445,1,0,0,0,5352,5353,3,564,282,0,5353,5354,3,458,229,0,5354,447,
        1,0,0,0,5355,5356,3,564,282,0,5356,5357,5,448,0,0,5357,5358,5,19,
        0,0,5358,5359,5,551,0,0,5359,5360,5,1148,0,0,5360,5381,1,0,0,0,5361,
        5362,3,564,282,0,5362,5363,5,448,0,0,5363,5364,5,19,0,0,5364,5365,
        5,991,0,0,5365,5366,5,551,0,0,5366,5367,3,450,225,0,5367,5381,1,
        0,0,0,5368,5369,3,564,282,0,5369,5370,5,448,0,0,5370,5371,5,19,0,
        0,5371,5372,5,1148,0,0,5372,5373,3,450,225,0,5373,5381,1,0,0,0,5374,
        5375,3,564,282,0,5375,5376,5,448,0,0,5376,5377,5,192,0,0,5377,5378,
        3,452,226,0,5378,5381,1,0,0,0,5379,5381,3,564,282,0,5380,5355,1,
        0,0,0,5380,5361,1,0,0,0,5380,5368,1,0,0,0,5380,5374,1,0,0,0,5380,
        5379,1,0,0,0,5381,449,1,0,0,0,5382,5383,5,141,0,0,5383,5385,5,1148,
        0,0,5384,5382,1,0,0,0,5384,5385,1,0,0,0,5385,5389,1,0,0,0,5386,5387,
        5,145,0,0,5387,5388,5,35,0,0,5388,5390,5,551,0,0,5389,5386,1,0,0,
        0,5389,5390,1,0,0,0,5390,451,1,0,0,0,5391,5399,3,582,291,0,5392,
        5396,7,68,0,0,5393,5397,5,1148,0,0,5394,5395,5,991,0,0,5395,5397,
        5,551,0,0,5396,5393,1,0,0,0,5396,5394,1,0,0,0,5397,5398,1,0,0,0,
        5398,5400,3,450,225,0,5399,5392,1,0,0,0,5399,5400,1,0,0,0,5400,5406,
        1,0,0,0,5401,5402,3,582,291,0,5402,5403,5,187,0,0,5403,5404,3,682,
        341,0,5404,5406,1,0,0,0,5405,5391,1,0,0,0,5405,5401,1,0,0,0,5406,
        453,1,0,0,0,5407,5416,5,167,0,0,5408,5416,5,680,0,0,5409,5410,5,
        358,0,0,5410,5416,5,1148,0,0,5411,5412,5,465,0,0,5412,5416,5,1148,
        0,0,5413,5414,5,640,0,0,5414,5416,5,1148,0,0,5415,5407,1,0,0,0,5415,
        5408,1,0,0,0,5415,5409,1,0,0,0,5415,5411,1,0,0,0,5415,5413,1,0,0,
        0,5416,455,1,0,0,0,5417,5418,5,499,0,0,5418,5426,3,590,295,0,5419,
        5420,5,502,0,0,5420,5426,3,590,295,0,5421,5422,5,498,0,0,5422,5426,
        3,590,295,0,5423,5424,5,503,0,0,5424,5426,3,590,295,0,5425,5417,
        1,0,0,0,5425,5419,1,0,0,0,5425,5421,1,0,0,0,5425,5423,1,0,0,0,5426,
        457,1,0,0,0,5427,5428,5,551,0,0,5428,5435,5,420,0,0,5429,5436,5,
        42,0,0,5430,5436,5,519,0,0,5431,5432,5,86,0,0,5432,5433,3,590,295,
        0,5433,5434,5,691,0,0,5434,5436,1,0,0,0,5435,5429,1,0,0,0,5435,5430,
        1,0,0,0,5435,5431,1,0,0,0,5435,5436,1,0,0,0,5436,5466,1,0,0,0,5437,
        5438,5,551,0,0,5438,5441,5,445,0,0,5439,5442,5,42,0,0,5440,5442,
        3,590,295,0,5441,5439,1,0,0,0,5441,5440,1,0,0,0,5442,5466,1,0,0,
        0,5443,5444,5,551,0,0,5444,5445,5,595,0,0,5445,5450,5,86,0,0,5446,
        5451,5,42,0,0,5447,5448,3,590,295,0,5448,5449,5,691,0,0,5449,5451,
        1,0,0,0,5450,5446,1,0,0,0,5450,5447,1,0,0,0,5451,5466,1,0,0,0,5452,
        5453,5,551,0,0,5453,5454,5,142,0,0,5454,5456,5,35,0,0,5455,5457,
        7,69,0,0,5456,5455,1,0,0,0,5456,5457,1,0,0,0,5457,5466,1,0,0,0,5458,
        5459,5,424,0,0,5459,5466,3,590,295,0,5460,5463,5,552,0,0,5461,5464,
        3,590,295,0,5462,5464,5,657,0,0,5463,5461,1,0,0,0,5463,5462,1,0,
        0,0,5464,5466,1,0,0,0,5465,5427,1,0,0,0,5465,5437,1,0,0,0,5465,5443,
        1,0,0,0,5465,5452,1,0,0,0,5465,5458,1,0,0,0,5465,5460,1,0,0,0,5466,
        459,1,0,0,0,5467,5468,5,332,0,0,5468,5469,7,70,0,0,5469,461,1,0,
        0,0,5470,5475,3,464,232,0,5471,5472,5,1133,0,0,5472,5473,3,616,308,
        0,5473,5474,5,1134,0,0,5474,5476,1,0,0,0,5475,5471,1,0,0,0,5475,
        5476,1,0,0,0,5476,463,1,0,0,0,5477,5479,5,6,0,0,5478,5480,5,725,
        0,0,5479,5478,1,0,0,0,5479,5480,1,0,0,0,5480,5571,1,0,0,0,5481,5483,
        5,7,0,0,5482,5484,5,733,0,0,5483,5482,1,0,0,0,5483,5484,1,0,0,0,
        5484,5571,1,0,0,0,5485,5493,5,33,0,0,5486,5487,5,649,0,0,5487,5494,
        5,742,0,0,5488,5494,5,733,0,0,5489,5494,5,671,0,0,5490,5494,5,665,
        0,0,5491,5494,5,647,0,0,5492,5494,5,596,0,0,5493,5486,1,0,0,0,5493,
        5488,1,0,0,0,5493,5489,1,0,0,0,5493,5490,1,0,0,0,5493,5491,1,0,0,
        0,5493,5492,1,0,0,0,5493,5494,1,0,0,0,5494,5571,1,0,0,0,5495,5571,
        5,44,0,0,5496,5498,5,51,0,0,5497,5499,5,596,0,0,5498,5497,1,0,0,
        0,5498,5499,1,0,0,0,5499,5571,1,0,0,0,5500,5571,5,415,0,0,5501,5571,
        5,708,0,0,5502,5571,5,709,0,0,5503,5504,5,72,0,0,5504,5571,5,120,
        0,0,5505,5571,5,81,0,0,5506,5571,5,85,0,0,5507,5508,5,103,0,0,5508,
        5571,5,742,0,0,5509,5571,5,726,0,0,5510,5571,5,566,0,0,5511,5571,
        5,136,0,0,5512,5571,5,727,0,0,5513,5514,5,588,0,0,5514,5571,7,71,
        0,0,5515,5571,5,152,0,0,5516,5517,5,155,0,0,5517,5571,7,72,0,0,5518,
        5571,5,739,0,0,5519,5571,5,740,0,0,5520,5571,5,177,0,0,5521,5571,
        5,184,0,0,5522,5571,5,185,0,0,5523,5571,5,698,0,0,5524,5571,5,699,
        0,0,5525,5571,5,700,0,0,5526,5571,5,701,0,0,5527,5571,5,702,0,0,
        5528,5571,5,703,0,0,5529,5571,5,704,0,0,5530,5571,5,705,0,0,5531,
        5571,5,706,0,0,5532,5571,5,707,0,0,5533,5571,5,710,0,0,5534,5571,
        5,711,0,0,5535,5571,5,712,0,0,5536,5571,5,713,0,0,5537,5571,5,714,
        0,0,5538,5571,5,715,0,0,5539,5571,5,716,0,0,5540,5571,5,717,0,0,
        5541,5571,5,718,0,0,5542,5571,5,719,0,0,5543,5571,5,722,0,0,5544,
        5571,5,723,0,0,5545,5571,5,724,0,0,5546,5571,5,728,0,0,5547,5571,
        5,729,0,0,5548,5571,5,730,0,0,5549,5571,5,731,0,0,5550,5571,5,732,
        0,0,5551,5571,5,735,0,0,5552,5571,5,736,0,0,5553,5571,5,737,0,0,
        5554,5571,5,158,0,0,5555,5571,5,738,0,0,5556,5571,5,1077,0,0,5557,
        5571,5,741,0,0,5558,5571,5,743,0,0,5559,5571,5,1088,0,0,5560,5571,
        5,744,0,0,5561,5571,5,745,0,0,5562,5563,5,102,0,0,5563,5564,5,68,
        0,0,5564,5571,5,734,0,0,5565,5566,5,152,0,0,5566,5567,5,87,0,0,5567,
        5571,5,734,0,0,5568,5569,5,720,0,0,5569,5571,5,721,0,0,5570,5477,
        1,0,0,0,5570,5481,1,0,0,0,5570,5485,1,0,0,0,5570,5495,1,0,0,0,5570,
        5496,1,0,0,0,5570,5500,1,0,0,0,5570,5501,1,0,0,0,5570,5502,1,0,0,
        0,5570,5503,1,0,0,0,5570,5505,1,0,0,0,5570,5506,1,0,0,0,5570,5507,
        1,0,0,0,5570,5509,1,0,0,0,5570,5510,1,0,0,0,5570,5511,1,0,0,0,5570,
        5512,1,0,0,0,5570,5513,1,0,0,0,5570,5515,1,0,0,0,5570,5516,1,0,0,
        0,5570,5518,1,0,0,0,5570,5519,1,0,0,0,5570,5520,1,0,0,0,5570,5521,
        1,0,0,0,5570,5522,1,0,0,0,5570,5523,1,0,0,0,5570,5524,1,0,0,0,5570,
        5525,1,0,0,0,5570,5526,1,0,0,0,5570,5527,1,0,0,0,5570,5528,1,0,0,
        0,5570,5529,1,0,0,0,5570,5530,1,0,0,0,5570,5531,1,0,0,0,5570,5532,
        1,0,0,0,5570,5533,1,0,0,0,5570,5534,1,0,0,0,5570,5535,1,0,0,0,5570,
        5536,1,0,0,0,5570,5537,1,0,0,0,5570,5538,1,0,0,0,5570,5539,1,0,0,
        0,5570,5540,1,0,0,0,5570,5541,1,0,0,0,5570,5542,1,0,0,0,5570,5543,
        1,0,0,0,5570,5544,1,0,0,0,5570,5545,1,0,0,0,5570,5546,1,0,0,0,5570,
        5547,1,0,0,0,5570,5548,1,0,0,0,5570,5549,1,0,0,0,5570,5550,1,0,0,
        0,5570,5551,1,0,0,0,5570,5552,1,0,0,0,5570,5553,1,0,0,0,5570,5554,
        1,0,0,0,5570,5555,1,0,0,0,5570,5556,1,0,0,0,5570,5557,1,0,0,0,5570,
        5558,1,0,0,0,5570,5559,1,0,0,0,5570,5560,1,0,0,0,5570,5561,1,0,0,
        0,5570,5562,1,0,0,0,5570,5565,1,0,0,0,5570,5568,1,0,0,0,5571,465,
        1,0,0,0,5572,5589,5,1117,0,0,5573,5574,5,1117,0,0,5574,5575,5,1132,
        0,0,5575,5589,5,1117,0,0,5576,5577,3,584,292,0,5577,5578,5,1132,
        0,0,5578,5579,5,1117,0,0,5579,5589,1,0,0,0,5580,5581,3,584,292,0,
        5581,5582,5,1132,0,0,5582,5583,3,584,292,0,5583,5589,1,0,0,0,5584,
        5585,3,584,292,0,5585,5586,3,588,294,0,5586,5589,1,0,0,0,5587,5589,
        3,584,292,0,5588,5572,1,0,0,0,5588,5573,1,0,0,0,5588,5576,1,0,0,
        0,5588,5580,1,0,0,0,5588,5584,1,0,0,0,5588,5587,1,0,0,0,5589,467,
        1,0,0,0,5590,5591,3,564,282,0,5591,5592,5,175,0,0,5592,5593,3,564,
        282,0,5593,469,1,0,0,0,5594,5596,5,9,0,0,5595,5597,7,73,0,0,5596,
        5595,1,0,0,0,5596,5597,1,0,0,0,5597,5598,1,0,0,0,5598,5599,7,55,
        0,0,5599,5617,3,620,310,0,5600,5601,5,184,0,0,5601,5602,5,76,0,0,
        5602,5603,5,118,0,0,5603,5608,3,556,278,0,5604,5605,5,1135,0,0,5605,
        5607,3,556,278,0,5606,5604,1,0,0,0,5607,5610,1,0,0,0,5608,5606,1,
        0,0,0,5608,5609,1,0,0,0,5609,5615,1,0,0,0,5610,5608,1,0,0,0,5611,
        5612,5,192,0,0,5612,5613,3,590,295,0,5613,5614,5,18,0,0,5614,5616,
        1,0,0,0,5615,5611,1,0,0,0,5615,5616,1,0,0,0,5616,5618,1,0,0,0,5617,
        5600,1,0,0,0,5617,5618,1,0,0,0,5618,5630,1,0,0,0,5619,5620,5,51,
        0,0,5620,5621,5,76,0,0,5621,5622,5,118,0,0,5622,5627,3,556,278,0,
        5623,5624,5,1135,0,0,5624,5626,3,556,278,0,5625,5623,1,0,0,0,5626,
        5629,1,0,0,0,5627,5625,1,0,0,0,5627,5628,1,0,0,0,5628,5631,1,0,0,
        0,5629,5627,1,0,0,0,5630,5619,1,0,0,0,5630,5631,1,0,0,0,5631,471,
        1,0,0,0,5632,5633,5,26,0,0,5633,5634,5,172,0,0,5634,5638,3,620,310,
        0,5635,5637,3,480,240,0,5636,5635,1,0,0,0,5637,5640,1,0,0,0,5638,
        5636,1,0,0,0,5638,5639,1,0,0,0,5639,473,1,0,0,0,5640,5638,1,0,0,
        0,5641,5642,5,356,0,0,5642,5643,5,172,0,0,5643,5645,3,620,310,0,
        5644,5646,7,74,0,0,5645,5644,1,0,0,0,5645,5646,1,0,0,0,5646,475,
        1,0,0,0,5647,5649,5,119,0,0,5648,5650,7,73,0,0,5649,5648,1,0,0,0,
        5649,5650,1,0,0,0,5650,5651,1,0,0,0,5651,5652,7,55,0,0,5652,5653,
        3,620,310,0,5653,477,1,0,0,0,5654,5656,5,580,0,0,5655,5657,7,73,
        0,0,5656,5655,1,0,0,0,5656,5657,1,0,0,0,5657,5658,1,0,0,0,5658,5659,
        5,172,0,0,5659,5661,3,620,310,0,5660,5662,5,568,0,0,5661,5660,1,
        0,0,0,5661,5662,1,0,0,0,5662,5664,1,0,0,0,5663,5665,5,422,0,0,5664,
        5663,1,0,0,0,5664,5665,1,0,0,0,5665,5667,1,0,0,0,5666,5668,5,666,
        0,0,5667,5666,1,0,0,0,5667,5668,1,0,0,0,5668,479,1,0,0,0,5669,5670,
        5,65,0,0,5670,5677,5,664,0,0,5671,5677,5,568,0,0,5672,5677,5,425,
        0,0,5673,5677,5,504,0,0,5674,5677,5,422,0,0,5675,5677,5,354,0,0,
        5676,5669,1,0,0,0,5676,5671,1,0,0,0,5676,5672,1,0,0,0,5676,5673,
        1,0,0,0,5676,5674,1,0,0,0,5676,5675,1,0,0,0,5677,481,1,0,0,0,5678,
        5680,5,33,0,0,5679,5681,5,335,0,0,5680,5679,1,0,0,0,5680,5681,1,
        0,0,0,5681,5682,1,0,0,0,5682,5684,5,437,0,0,5683,5685,3,642,321,
        0,5684,5683,1,0,0,0,5684,5685,1,0,0,0,5685,5686,1,0,0,0,5686,5687,
        3,584,292,0,5687,5688,5,594,0,0,5688,5689,7,75,0,0,5689,5690,5,619,
        0,0,5690,5691,5,1148,0,0,5691,483,1,0,0,0,5692,5693,5,456,0,0,5693,
        5694,5,554,0,0,5694,5695,3,584,292,0,5695,5696,5,619,0,0,5696,5697,
        5,1148,0,0,5697,485,1,0,0,0,5698,5699,5,661,0,0,5699,5700,5,554,
        0,0,5700,5701,3,584,292,0,5701,487,1,0,0,0,5702,5703,5,153,0,0,5703,
        5704,3,492,246,0,5704,5707,7,76,0,0,5705,5708,3,688,344,0,5706,5708,
        5,118,0,0,5707,5705,1,0,0,0,5707,5706,1,0,0,0,5708,5718,1,0,0,0,
        5709,5710,5,1135,0,0,5710,5711,3,492,246,0,5711,5714,7,76,0,0,5712,
        5715,3,688,344,0,5713,5715,5,118,0,0,5714,5712,1,0,0,0,5714,5713,
        1,0,0,0,5715,5717,1,0,0,0,5716,5709,1,0,0,0,5717,5720,1,0,0,0,5718,
        5716,1,0,0,0,5718,5719,1,0,0,0,5719,5755,1,0,0,0,5720,5718,1,0,0,
        0,5721,5722,5,153,0,0,5722,5725,3,60,30,0,5723,5726,3,568,284,0,
        5724,5726,5,42,0,0,5725,5723,1,0,0,0,5725,5724,1,0,0,0,5726,5755,
        1,0,0,0,5727,5728,5,153,0,0,5728,5735,5,517,0,0,5729,5732,3,568,
        284,0,5730,5731,5,27,0,0,5731,5733,3,570,285,0,5732,5730,1,0,0,0,
        5732,5733,1,0,0,0,5733,5736,1,0,0,0,5734,5736,5,42,0,0,5735,5729,
        1,0,0,0,5735,5734,1,0,0,0,5736,5755,1,0,0,0,5737,5755,3,444,222,
        0,5738,5755,3,318,159,0,5739,5755,3,316,158,0,5740,5741,5,153,0,
        0,5741,5742,3,550,275,0,5742,5743,7,76,0,0,5743,5751,3,688,344,0,
        5744,5745,5,1135,0,0,5745,5746,3,550,275,0,5746,5747,7,76,0,0,5747,
        5748,3,688,344,0,5748,5750,1,0,0,0,5749,5744,1,0,0,0,5750,5753,1,
        0,0,0,5751,5749,1,0,0,0,5751,5752,1,0,0,0,5752,5755,1,0,0,0,5753,
        5751,1,0,0,0,5754,5702,1,0,0,0,5754,5721,1,0,0,0,5754,5727,1,0,0,
        0,5754,5737,1,0,0,0,5754,5738,1,0,0,0,5754,5739,1,0,0,0,5754,5740,
        1,0,0,0,5755,489,1,0,0,0,5756,5757,5,155,0,0,5757,5758,7,57,0,0,
        5758,5910,5,476,0,0,5759,5760,5,155,0,0,5760,5761,7,77,0,0,5761,
        5764,5,416,0,0,5762,5763,5,80,0,0,5763,5765,5,1148,0,0,5764,5762,
        1,0,0,0,5764,5765,1,0,0,0,5765,5768,1,0,0,0,5766,5767,5,68,0,0,5767,
        5769,3,590,295,0,5768,5766,1,0,0,0,5768,5769,1,0,0,0,5769,5777,1,
        0,0,0,5770,5774,5,99,0,0,5771,5772,3,590,295,0,5772,5773,5,1135,
        0,0,5773,5775,1,0,0,0,5774,5771,1,0,0,0,5774,5775,1,0,0,0,5775,5776,
        1,0,0,0,5776,5778,3,590,295,0,5777,5770,1,0,0,0,5777,5778,1,0,0,
        0,5778,5910,1,0,0,0,5779,5780,5,155,0,0,5780,5782,3,494,247,0,5781,
        5783,3,496,248,0,5782,5781,1,0,0,0,5782,5783,1,0,0,0,5783,5910,1,
        0,0,0,5784,5786,5,155,0,0,5785,5787,5,436,0,0,5786,5785,1,0,0,0,
        5786,5787,1,0,0,0,5787,5788,1,0,0,0,5788,5789,7,41,0,0,5789,5790,
        7,78,0,0,5790,5793,3,552,276,0,5791,5792,7,78,0,0,5792,5794,3,584,
        292,0,5793,5791,1,0,0,0,5793,5794,1,0,0,0,5794,5796,1,0,0,0,5795,
        5797,3,496,248,0,5796,5795,1,0,0,0,5796,5797,1,0,0,0,5797,5910,1,
        0,0,0,5798,5799,5,155,0,0,5799,5800,5,33,0,0,5800,5802,7,0,0,0,5801,
        5803,3,642,321,0,5802,5801,1,0,0,0,5802,5803,1,0,0,0,5803,5804,1,
        0,0,0,5804,5910,3,584,292,0,5805,5806,5,155,0,0,5806,5807,5,33,0,
        0,5807,5808,7,79,0,0,5808,5910,3,550,275,0,5809,5810,5,155,0,0,5810,
        5811,5,33,0,0,5811,5812,5,665,0,0,5812,5910,3,564,282,0,5813,5814,
        5,155,0,0,5814,5815,5,409,0,0,5815,5816,3,572,286,0,5816,5817,7,
        80,0,0,5817,5910,1,0,0,0,5818,5819,5,155,0,0,5819,5910,3,498,249,
        0,5820,5821,5,155,0,0,5821,5829,7,81,0,0,5822,5826,5,99,0,0,5823,
        5824,3,590,295,0,5824,5825,5,1135,0,0,5825,5827,1,0,0,0,5826,5823,
        1,0,0,0,5826,5827,1,0,0,0,5827,5828,1,0,0,0,5828,5830,3,590,295,
        0,5829,5822,1,0,0,0,5829,5830,1,0,0,0,5830,5910,1,0,0,0,5831,5832,
        5,155,0,0,5832,5833,5,290,0,0,5833,5834,5,1133,0,0,5834,5835,5,1117,
        0,0,5835,5836,5,1134,0,0,5836,5910,7,81,0,0,5837,5838,5,155,0,0,
        5838,5841,3,500,250,0,5839,5840,7,78,0,0,5840,5842,3,584,292,0,5841,
        5839,1,0,0,0,5841,5842,1,0,0,0,5842,5844,1,0,0,0,5843,5845,3,496,
        248,0,5844,5843,1,0,0,0,5844,5845,1,0,0,0,5845,5910,1,0,0,0,5846,
        5847,5,155,0,0,5847,5848,7,82,0,0,5848,5849,5,364,0,0,5849,5910,
        3,550,275,0,5850,5851,5,155,0,0,5851,5854,5,440,0,0,5852,5853,5,
        65,0,0,5853,5855,3,564,282,0,5854,5852,1,0,0,0,5854,5855,1,0,0,0,
        5855,5910,1,0,0,0,5856,5857,5,155,0,0,5857,5858,7,83,0,0,5858,5859,
        7,78,0,0,5859,5862,3,552,276,0,5860,5861,7,78,0,0,5861,5863,3,584,
        292,0,5862,5860,1,0,0,0,5862,5863,1,0,0,0,5863,5866,1,0,0,0,5864,
        5865,5,190,0,0,5865,5867,3,688,344,0,5866,5864,1,0,0,0,5866,5867,
        1,0,0,0,5867,5910,1,0,0,0,5868,5869,5,155,0,0,5869,5870,5,539,0,
        0,5870,5873,5,742,0,0,5871,5872,7,78,0,0,5872,5874,3,584,292,0,5873,
        5871,1,0,0,0,5873,5874,1,0,0,0,5874,5876,1,0,0,0,5875,5877,3,496,
        248,0,5876,5875,1,0,0,0,5876,5877,1,0,0,0,5877,5910,1,0,0,0,5878,
        5879,5,155,0,0,5879,5880,5,564,0,0,5880,5885,3,502,251,0,5881,5882,
        5,1135,0,0,5882,5884,3,502,251,0,5883,5881,1,0,0,0,5884,5887,1,0,
        0,0,5885,5883,1,0,0,0,5885,5886,1,0,0,0,5886,5891,1,0,0,0,5887,5885,
        1,0,0,0,5888,5889,5,65,0,0,5889,5890,5,567,0,0,5890,5892,3,590,295,
        0,5891,5888,1,0,0,0,5891,5892,1,0,0,0,5892,5893,1,0,0,0,5893,5897,
        5,99,0,0,5894,5895,3,590,295,0,5895,5896,5,1135,0,0,5896,5898,1,
        0,0,0,5897,5894,1,0,0,0,5897,5898,1,0,0,0,5898,5899,1,0,0,0,5899,
        5900,3,590,295,0,5900,5910,1,0,0,0,5901,5902,5,155,0,0,5902,5903,
        5,614,0,0,5903,5907,5,634,0,0,5904,5905,5,65,0,0,5905,5906,5,355,
        0,0,5906,5908,5,1148,0,0,5907,5904,1,0,0,0,5907,5908,1,0,0,0,5908,
        5910,1,0,0,0,5909,5756,1,0,0,0,5909,5759,1,0,0,0,5909,5779,1,0,0,
        0,5909,5784,1,0,0,0,5909,5798,1,0,0,0,5909,5805,1,0,0,0,5909,5809,
        1,0,0,0,5909,5813,1,0,0,0,5909,5818,1,0,0,0,5909,5820,1,0,0,0,5909,
        5831,1,0,0,0,5909,5837,1,0,0,0,5909,5846,1,0,0,0,5909,5850,1,0,0,
        0,5909,5856,1,0,0,0,5909,5868,1,0,0,0,5909,5878,1,0,0,0,5909,5901,
        1,0,0,0,5910,491,1,0,0,0,5911,5922,5,1159,0,0,5912,5922,5,1160,0,
        0,5913,5914,5,1137,0,0,5914,5916,5,1137,0,0,5915,5913,1,0,0,0,5915,
        5916,1,0,0,0,5916,5917,1,0,0,0,5917,5919,7,84,0,0,5918,5915,1,0,
        0,0,5918,5919,1,0,0,0,5919,5920,1,0,0,0,5920,5922,3,584,292,0,5921,
        5911,1,0,0,0,5921,5912,1,0,0,0,5921,5918,1,0,0,0,5922,493,1,0,0,
        0,5923,5924,5,25,0,0,5924,5937,5,153,0,0,5925,5937,5,844,0,0,5926,
        5937,5,40,0,0,5927,5937,5,151,0,0,5928,5929,5,437,0,0,5929,5937,
        5,634,0,0,5930,5931,5,131,0,0,5931,5937,5,634,0,0,5932,5934,7,56,
        0,0,5933,5932,1,0,0,0,5933,5934,1,0,0,0,5934,5935,1,0,0,0,5935,5937,
        7,85,0,0,5936,5923,1,0,0,0,5936,5925,1,0,0,0,5936,5926,1,0,0,0,5936,
        5927,1,0,0,0,5936,5928,1,0,0,0,5936,5930,1,0,0,0,5936,5933,1,0,0,
        0,5937,495,1,0,0,0,5938,5939,5,98,0,0,5939,5943,5,1148,0,0,5940,
        5941,5,190,0,0,5941,5943,3,688,344,0,5942,5938,1,0,0,0,5942,5940,
        1,0,0,0,5943,497,1,0,0,0,5944,5946,5,636,0,0,5945,5944,1,0,0,0,5945,
        5946,1,0,0,0,5946,5947,1,0,0,0,5947,5962,5,410,0,0,5948,5949,5,477,
        0,0,5949,5962,5,634,0,0,5950,5962,5,556,0,0,5951,5962,5,725,0,0,
        5952,5954,5,436,0,0,5953,5952,1,0,0,0,5953,5954,1,0,0,0,5954,5955,
        1,0,0,0,5955,5962,5,563,0,0,5956,5962,5,565,0,0,5957,5958,5,614,
        0,0,5958,5962,5,447,0,0,5959,5962,5,339,0,0,5960,5962,5,383,0,0,
        5961,5945,1,0,0,0,5961,5948,1,0,0,0,5961,5950,1,0,0,0,5961,5951,
        1,0,0,0,5961,5953,1,0,0,0,5961,5956,1,0,0,0,5961,5957,1,0,0,0,5961,
        5959,1,0,0,0,5961,5960,1,0,0,0,5962,499,1,0,0,0,5963,5972,5,416,
        0,0,5964,5965,5,172,0,0,5965,5972,5,634,0,0,5966,5968,5,436,0,0,
        5967,5966,1,0,0,0,5967,5968,1,0,0,0,5968,5969,1,0,0,0,5969,5972,
        5,742,0,0,5970,5972,5,655,0,0,5971,5963,1,0,0,0,5971,5964,1,0,0,
        0,5971,5967,1,0,0,0,5971,5970,1,0,0,0,5972,501,1,0,0,0,5973,5986,
        5,6,0,0,5974,5975,5,347,0,0,5975,5986,5,461,0,0,5976,5977,5,382,
        0,0,5977,5986,5,645,0,0,5978,5986,5,385,0,0,5979,5986,5,463,0,0,
        5980,5986,5,792,0,0,5981,5982,5,544,0,0,5982,5986,5,426,0,0,5983,
        5986,5,621,0,0,5984,5986,5,644,0,0,5985,5973,1,0,0,0,5985,5974,1,
        0,0,0,5985,5976,1,0,0,0,5985,5978,1,0,0,0,5985,5979,1,0,0,0,5985,
        5980,1,0,0,0,5985,5981,1,0,0,0,5985,5983,1,0,0,0,5985,5984,1,0,0,
        0,5986,503,1,0,0,0,5987,5988,5,345,0,0,5988,5989,5,1148,0,0,5989,
        505,1,0,0,0,5990,5991,5,351,0,0,5991,5992,5,81,0,0,5992,5997,3,518,
        259,0,5993,5994,5,1135,0,0,5994,5996,3,518,259,0,5995,5993,1,0,0,
        0,5996,5999,1,0,0,0,5997,5995,1,0,0,0,5997,5998,1,0,0,0,5998,6007,
        1,0,0,0,5999,5997,1,0,0,0,6000,6001,5,129,0,0,6001,6004,5,1133,0,
        0,6002,6005,3,616,308,0,6003,6005,5,6,0,0,6004,6002,1,0,0,0,6004,
        6003,1,0,0,0,6005,6006,1,0,0,0,6006,6008,5,1134,0,0,6007,6000,1,
        0,0,0,6007,6008,1,0,0,0,6008,6009,1,0,0,0,6009,6010,5,80,0,0,6010,
        6011,3,584,292,0,6011,507,1,0,0,0,6012,6014,5,432,0,0,6013,6015,
        7,73,0,0,6014,6013,1,0,0,0,6014,6015,1,0,0,0,6015,6016,1,0,0,0,6016,
        6021,3,520,260,0,6017,6018,5,1135,0,0,6018,6020,3,520,260,0,6019,
        6017,1,0,0,0,6020,6023,1,0,0,0,6021,6019,1,0,0,0,6021,6022,1,0,0,
        0,6022,509,1,0,0,0,6023,6021,1,0,0,0,6024,6026,5,93,0,0,6025,6027,
        7,86,0,0,6026,6025,1,0,0,0,6026,6027,1,0,0,0,6027,6028,1,0,0,0,6028,
        6029,3,688,344,0,6029,511,1,0,0,0,6030,6031,5,102,0,0,6031,6032,
        5,81,0,0,6032,6033,5,87,0,0,6033,6034,5,351,0,0,6034,6039,3,524,
        262,0,6035,6036,5,1135,0,0,6036,6038,3,524,262,0,6037,6035,1,0,0,
        0,6038,6041,1,0,0,0,6039,6037,1,0,0,0,6039,6040,1,0,0,0,6040,513,
        1,0,0,0,6041,6039,1,0,0,0,6042,6043,5,589,0,0,6043,6044,5,567,0,
        0,6044,6045,5,351,0,0,6045,515,1,0,0,0,6046,6047,5,739,0,0,6047,
        517,1,0,0,0,6048,6056,3,552,276,0,6049,6051,7,20,0,0,6050,6049,1,
        0,0,0,6050,6051,1,0,0,0,6051,6052,1,0,0,0,6052,6053,5,1133,0,0,6053,
        6054,3,616,308,0,6054,6055,5,1134,0,0,6055,6057,1,0,0,0,6056,6050,
        1,0,0,0,6056,6057,1,0,0,0,6057,519,1,0,0,0,6058,6077,5,394,0,0,6059,
        6077,5,447,0,0,6060,6062,7,87,0,0,6061,6060,1,0,0,0,6061,6062,1,
        0,0,0,6062,6063,1,0,0,0,6063,6077,5,476,0,0,6064,6077,5,540,0,0,
        6065,6077,5,725,0,0,6066,6067,5,567,0,0,6067,6077,5,351,0,0,6068,
        6077,5,634,0,0,6069,6077,5,667,0,0,6070,6074,5,742,0,0,6071,6072,
        5,192,0,0,6072,6073,5,134,0,0,6073,6075,5,103,0,0,6074,6071,1,0,
        0,0,6074,6075,1,0,0,0,6075,6077,1,0,0,0,6076,6058,1,0,0,0,6076,6059,
        1,0,0,0,6076,6061,1,0,0,0,6076,6064,1,0,0,0,6076,6065,1,0,0,0,6076,
        6066,1,0,0,0,6076,6068,1,0,0,0,6076,6069,1,0,0,0,6076,6070,1,0,0,
        0,6077,6091,1,0,0,0,6078,6079,5,574,0,0,6079,6081,5,476,0,0,6080,
        6082,3,356,178,0,6081,6080,1,0,0,0,6081,6082,1,0,0,0,6082,6091,1,
        0,0,0,6083,6085,7,55,0,0,6084,6086,3,620,310,0,6085,6084,1,0,0,0,
        6085,6086,1,0,0,0,6086,6088,1,0,0,0,6087,6089,3,522,261,0,6088,6087,
        1,0,0,0,6088,6089,1,0,0,0,6089,6091,1,0,0,0,6090,6076,1,0,0,0,6090,
        6078,1,0,0,0,6090,6083,1,0,0,0,6091,521,1,0,0,0,6092,6093,5,192,
        0,0,6093,6094,5,134,0,0,6094,6098,5,103,0,0,6095,6096,5,65,0,0,6096,
        6098,5,421,0,0,6097,6092,1,0,0,0,6097,6095,1,0,0,0,6098,523,1,0,
        0,0,6099,6107,3,552,276,0,6100,6101,5,129,0,0,6101,6104,5,1133,0,
        0,6102,6105,3,616,308,0,6103,6105,5,6,0,0,6104,6102,1,0,0,0,6104,
        6103,1,0,0,0,6105,6106,1,0,0,0,6106,6108,5,1134,0,0,6107,6100,1,
        0,0,0,6107,6108,1,0,0,0,6108,6116,1,0,0,0,6109,6111,7,20,0,0,6110,
        6109,1,0,0,0,6110,6111,1,0,0,0,6111,6112,1,0,0,0,6112,6113,5,1133,
        0,0,6113,6114,3,616,308,0,6114,6115,5,1134,0,0,6115,6117,1,0,0,0,
        6116,6110,1,0,0,0,6116,6117,1,0,0,0,6117,6120,1,0,0,0,6118,6119,
        5,78,0,0,6119,6121,5,470,0,0,6120,6118,1,0,0,0,6120,6121,1,0,0,0,
        6121,525,1,0,0,0,6122,6123,7,88,0,0,6123,6126,3,552,276,0,6124,6127,
        3,584,292,0,6125,6127,5,1148,0,0,6126,6124,1,0,0,0,6126,6125,1,0,
        0,0,6126,6127,1,0,0,0,6127,527,1,0,0,0,6128,6132,7,88,0,0,6129,6130,
        7,89,0,0,6130,6131,5,1124,0,0,6131,6133,7,90,0,0,6132,6129,1,0,0,
        0,6132,6133,1,0,0,0,6133,6134,1,0,0,0,6134,6135,3,548,274,0,6135,
        529,1,0,0,0,6136,6137,5,444,0,0,6137,6138,5,1148,0,0,6138,531,1,
        0,0,0,6139,6140,5,186,0,0,6140,6141,3,584,292,0,6141,533,1,0,0,0,
        6142,6150,5,156,0,0,6143,6145,5,162,0,0,6144,6146,5,669,0,0,6145,
        6144,1,0,0,0,6145,6146,1,0,0,0,6146,6147,1,0,0,0,6147,6151,3,594,
        297,0,6148,6151,5,1156,0,0,6149,6151,5,1157,0,0,6150,6143,1,0,0,
        0,6150,6148,1,0,0,0,6150,6149,1,0,0,0,6151,6161,1,0,0,0,6152,6153,
        5,153,0,0,6153,6158,3,538,269,0,6154,6155,5,1135,0,0,6155,6157,3,
        538,269,0,6156,6154,1,0,0,0,6157,6160,1,0,0,0,6158,6156,1,0,0,0,
        6158,6159,1,0,0,0,6159,6162,1,0,0,0,6160,6158,1,0,0,0,6161,6152,
        1,0,0,0,6161,6162,1,0,0,0,6162,535,1,0,0,0,6163,6171,5,143,0,0,6164,
        6166,5,162,0,0,6165,6167,5,669,0,0,6166,6165,1,0,0,0,6166,6167,1,
        0,0,0,6167,6168,1,0,0,0,6168,6172,3,594,297,0,6169,6172,5,1156,0,
        0,6170,6172,5,1157,0,0,6171,6164,1,0,0,0,6171,6169,1,0,0,0,6171,
        6170,1,0,0,0,6171,6172,1,0,0,0,6172,6182,1,0,0,0,6173,6174,5,153,
        0,0,6174,6179,3,538,269,0,6175,6176,5,1135,0,0,6176,6178,3,538,269,
        0,6177,6175,1,0,0,0,6178,6181,1,0,0,0,6179,6177,1,0,0,0,6179,6180,
        1,0,0,0,6180,6183,1,0,0,0,6181,6179,1,0,0,0,6182,6173,1,0,0,0,6182,
        6183,1,0,0,0,6183,537,1,0,0,0,6184,6185,7,91,0,0,6185,6190,5,1124,
        0,0,6186,6191,3,594,297,0,6187,6191,5,1149,0,0,6188,6191,3,566,283,
        0,6189,6191,3,586,293,0,6190,6186,1,0,0,0,6190,6187,1,0,0,0,6190,
        6188,1,0,0,0,6190,6189,1,0,0,0,6191,539,1,0,0,0,6192,6194,5,192,
        0,0,6193,6195,5,571,0,0,6194,6193,1,0,0,0,6194,6195,1,0,0,0,6195,
        6196,1,0,0,0,6196,6201,3,50,25,0,6197,6198,5,1135,0,0,6198,6200,
        3,50,25,0,6199,6197,1,0,0,0,6200,6203,1,0,0,0,6201,6199,1,0,0,0,
        6201,6202,1,0,0,0,6202,541,1,0,0,0,6203,6201,1,0,0,0,6204,6205,5,
        172,0,0,6205,6207,3,552,276,0,6206,6208,3,230,115,0,6207,6206,1,
        0,0,0,6207,6208,1,0,0,0,6208,6210,1,0,0,0,6209,6211,3,294,147,0,
        6210,6209,1,0,0,0,6210,6211,1,0,0,0,6211,543,1,0,0,0,6212,6214,5,
        71,0,0,6213,6215,7,92,0,0,6214,6213,1,0,0,0,6214,6215,1,0,0,0,6215,
        6216,1,0,0,0,6216,6248,5,48,0,0,6217,6218,3,492,246,0,6218,6219,
        5,1124,0,0,6219,6227,7,93,0,0,6220,6221,5,1135,0,0,6221,6222,3,492,
        246,0,6222,6223,5,1124,0,0,6223,6224,7,93,0,0,6224,6226,1,0,0,0,
        6225,6220,1,0,0,0,6226,6229,1,0,0,0,6227,6225,1,0,0,0,6227,6228,
        1,0,0,0,6228,6249,1,0,0,0,6229,6227,1,0,0,0,6230,6233,5,29,0,0,6231,
        6234,3,590,295,0,6232,6234,3,492,246,0,6233,6231,1,0,0,0,6233,6232,
        1,0,0,0,6234,6235,1,0,0,0,6235,6236,3,492,246,0,6236,6237,5,1124,
        0,0,6237,6245,3,546,273,0,6238,6239,5,1135,0,0,6239,6240,3,492,246,
        0,6240,6241,5,1124,0,0,6241,6242,3,546,273,0,6242,6244,1,0,0,0,6243,
        6238,1,0,0,0,6244,6247,1,0,0,0,6245,6243,1,0,0,0,6245,6246,1,0,0,
        0,6246,6249,1,0,0,0,6247,6245,1,0,0,0,6248,6217,1,0,0,0,6248,6230,
        1,0,0,0,6249,545,1,0,0,0,6250,6251,7,94,0,0,6251,547,1,0,0,0,6252,
        6258,3,200,100,0,6253,6258,3,186,93,0,6254,6258,3,192,96,0,6255,
        6258,3,198,99,0,6256,6258,3,202,101,0,6257,6252,1,0,0,0,6257,6253,
        1,0,0,0,6257,6254,1,0,0,0,6257,6255,1,0,0,0,6257,6256,1,0,0,0,6258,
        6263,1,0,0,0,6259,6260,5,65,0,0,6260,6261,5,376,0,0,6261,6263,3,
        584,292,0,6262,6257,1,0,0,0,6262,6259,1,0,0,0,6263,549,1,0,0,0,6264,
        6268,3,584,292,0,6265,6269,5,1155,0,0,6266,6267,5,1132,0,0,6267,
        6269,3,584,292,0,6268,6265,1,0,0,0,6268,6266,1,0,0,0,6268,6269,1,
        0,0,0,6269,551,1,0,0,0,6270,6271,3,550,275,0,6271,553,1,0,0,0,6272,
        6275,3,564,282,0,6273,6275,3,584,292,0,6274,6272,1,0,0,0,6274,6273,
        1,0,0,0,6275,555,1,0,0,0,6276,6281,3,584,292,0,6277,6279,3,588,294,
        0,6278,6280,3,588,294,0,6279,6278,1,0,0,0,6279,6280,1,0,0,0,6280,
        6282,1,0,0,0,6281,6277,1,0,0,0,6281,6282,1,0,0,0,6282,6291,1,0,0,
        0,6283,6285,9,0,0,0,6284,6283,1,0,0,0,6284,6285,1,0,0,0,6285,6286,
        1,0,0,0,6286,6288,3,588,294,0,6287,6289,3,588,294,0,6288,6287,1,
        0,0,0,6288,6289,1,0,0,0,6289,6291,1,0,0,0,6290,6276,1,0,0,0,6290,
        6284,1,0,0,0,6291,557,1,0,0,0,6292,6295,3,584,292,0,6293,6295,5,
        1148,0,0,6294,6292,1,0,0,0,6294,6293,1,0,0,0,6295,6300,1,0,0,0,6296,
        6297,5,1133,0,0,6297,6298,3,590,295,0,6298,6299,5,1134,0,0,6299,
        6301,1,0,0,0,6300,6296,1,0,0,0,6300,6301,1,0,0,0,6301,6304,1,0,0,
        0,6302,6304,3,688,344,0,6303,6294,1,0,0,0,6303,6302,1,0,0,0,6304,
        6306,1,0,0,0,6305,6307,7,48,0,0,6306,6305,1,0,0,0,6306,6307,1,0,
        0,0,6307,559,1,0,0,0,6308,6313,5,1148,0,0,6309,6313,5,1156,0,0,6310,
        6313,5,697,0,0,6311,6313,3,718,359,0,6312,6308,1,0,0,0,6312,6309,
        1,0,0,0,6312,6310,1,0,0,0,6312,6311,1,0,0,0,6313,561,1,0,0,0,6314,
        6315,7,95,0,0,6315,563,1,0,0,0,6316,6322,3,560,280,0,6317,6318,3,
        560,280,0,6318,6319,3,562,281,0,6319,6322,1,0,0,0,6320,6322,3,62,
        31,0,6321,6316,1,0,0,0,6321,6317,1,0,0,0,6321,6320,1,0,0,0,6322,
        565,1,0,0,0,6323,6324,7,96,0,0,6324,567,1,0,0,0,6325,6330,5,226,
        0,0,6326,6330,3,708,354,0,6327,6330,5,1148,0,0,6328,6330,5,1145,
        0,0,6329,6325,1,0,0,0,6329,6326,1,0,0,0,6329,6327,1,0,0,0,6329,6328,
        1,0,0,0,6330,569,1,0,0,0,6331,6334,3,584,292,0,6332,6334,5,1148,
        0,0,6333,6331,1,0,0,0,6333,6332,1,0,0,0,6334,571,1,0,0,0,6335,6339,
        3,574,287,0,6336,6339,5,1156,0,0,6337,6339,5,1148,0,0,6338,6335,
        1,0,0,0,6338,6336,1,0,0,0,6338,6337,1,0,0,0,6339,573,1,0,0,0,6340,
        6341,7,97,0,0,6341,575,1,0,0,0,6342,6343,3,590,295,0,6343,6344,5,
        1121,0,0,6344,6345,3,590,295,0,6345,6346,5,1121,0,0,6346,6347,3,
        590,295,0,6347,6348,5,1121,0,0,6348,6349,3,590,295,0,6349,6350,5,
        1121,0,0,6350,6356,3,590,295,0,6351,6352,5,1144,0,0,6352,6353,3,
        590,295,0,6353,6354,5,1121,0,0,6354,6355,3,590,295,0,6355,6357,1,
        0,0,0,6356,6351,1,0,0,0,6357,6358,1,0,0,0,6358,6356,1,0,0,0,6358,
        6359,1,0,0,0,6359,577,1,0,0,0,6360,6367,3,580,290,0,6361,6362,5,
        1135,0,0,6362,6365,3,580,290,0,6363,6364,5,1135,0,0,6364,6366,3,
        590,295,0,6365,6363,1,0,0,0,6365,6366,1,0,0,0,6366,6368,1,0,0,0,
        6367,6361,1,0,0,0,6367,6368,1,0,0,0,6368,579,1,0,0,0,6369,6377,5,
        1148,0,0,6370,6377,5,1153,0,0,6371,6373,5,1150,0,0,6372,6371,1,0,
        0,0,6373,6374,1,0,0,0,6374,6372,1,0,0,0,6374,6375,1,0,0,0,6375,6377,
        1,0,0,0,6376,6369,1,0,0,0,6376,6370,1,0,0,0,6376,6372,1,0,0,0,6377,
        581,1,0,0,0,6378,6381,3,584,292,0,6379,6381,5,1148,0,0,6380,6378,
        1,0,0,0,6380,6379,1,0,0,0,6381,583,1,0,0,0,6382,6386,3,586,293,0,
        6383,6386,5,1145,0,0,6384,6386,5,1148,0,0,6385,6382,1,0,0,0,6385,
        6383,1,0,0,0,6385,6384,1,0,0,0,6386,585,1,0,0,0,6387,6397,5,1156,
        0,0,6388,6397,3,708,354,0,6389,6397,3,710,355,0,6390,6397,3,574,
        287,0,6391,6397,3,712,356,0,6392,6397,3,714,357,0,6393,6397,3,716,
        358,0,6394,6397,3,718,359,0,6395,6397,3,680,340,0,6396,6387,1,0,
        0,0,6396,6388,1,0,0,0,6396,6389,1,0,0,0,6396,6390,1,0,0,0,6396,6391,
        1,0,0,0,6396,6392,1,0,0,0,6396,6393,1,0,0,0,6396,6394,1,0,0,0,6396,
        6395,1,0,0,0,6397,587,1,0,0,0,6398,6402,5,1155,0,0,6399,6400,5,1132,
        0,0,6400,6402,3,584,292,0,6401,6398,1,0,0,0,6401,6399,1,0,0,0,6402,
        589,1,0,0,0,6403,6404,7,98,0,0,6404,591,1,0,0,0,6405,6408,5,1146,
        0,0,6406,6408,3,590,295,0,6407,6405,1,0,0,0,6407,6406,1,0,0,0,6408,
        593,1,0,0,0,6409,6411,5,1154,0,0,6410,6409,1,0,0,0,6410,6411,1,0,
        0,0,6411,6412,1,0,0,0,6412,6415,5,1148,0,0,6413,6415,5,1147,0,0,
        6414,6410,1,0,0,0,6414,6413,1,0,0,0,6415,6417,1,0,0,0,6416,6418,
        5,1148,0,0,6417,6416,1,0,0,0,6418,6419,1,0,0,0,6419,6417,1,0,0,0,
        6419,6420,1,0,0,0,6420,6433,1,0,0,0,6421,6423,5,1154,0,0,6422,6421,
        1,0,0,0,6422,6423,1,0,0,0,6423,6424,1,0,0,0,6424,6427,5,1148,0,0,
        6425,6427,5,1147,0,0,6426,6422,1,0,0,0,6426,6425,1,0,0,0,6427,6430,
        1,0,0,0,6428,6429,5,27,0,0,6429,6431,3,570,285,0,6430,6428,1,0,0,
        0,6430,6431,1,0,0,0,6431,6433,1,0,0,0,6432,6414,1,0,0,0,6432,6426,
        1,0,0,0,6433,595,1,0,0,0,6434,6435,7,99,0,0,6435,597,1,0,0,0,6436,
        6438,5,1154,0,0,6437,6436,1,0,0,0,6437,6438,1,0,0,0,6438,6439,1,
        0,0,0,6439,6440,5,1150,0,0,6440,599,1,0,0,0,6441,6443,5,114,0,0,
        6442,6441,1,0,0,0,6442,6443,1,0,0,0,6443,6444,1,0,0,0,6444,6445,
        7,100,0,0,6445,601,1,0,0,0,6446,6459,3,594,297,0,6447,6459,3,590,
        295,0,6448,6449,5,1121,0,0,6449,6459,3,590,295,0,6450,6459,3,598,
        299,0,6451,6459,3,596,298,0,6452,6459,5,1151,0,0,6453,6459,5,1153,
        0,0,6454,6456,5,114,0,0,6455,6454,1,0,0,0,6455,6456,1,0,0,0,6456,
        6457,1,0,0,0,6457,6459,7,100,0,0,6458,6446,1,0,0,0,6458,6447,1,0,
        0,0,6458,6448,1,0,0,0,6458,6450,1,0,0,0,6458,6451,1,0,0,0,6458,6452,
        1,0,0,0,6458,6453,1,0,0,0,6458,6455,1,0,0,0,6459,603,1,0,0,0,6460,
        6462,7,101,0,0,6461,6463,5,238,0,0,6462,6461,1,0,0,0,6462,6463,1,
        0,0,0,6463,6465,1,0,0,0,6464,6466,3,610,305,0,6465,6464,1,0,0,0,
        6465,6466,1,0,0,0,6466,6468,1,0,0,0,6467,6469,5,226,0,0,6468,6467,
        1,0,0,0,6468,6469,1,0,0,0,6469,6473,1,0,0,0,6470,6471,3,60,30,0,
        6471,6472,3,568,284,0,6472,6474,1,0,0,0,6473,6470,1,0,0,0,6473,6474,
        1,0,0,0,6474,6478,1,0,0,0,6475,6476,5,27,0,0,6476,6479,3,570,285,
        0,6477,6479,5,226,0,0,6478,6475,1,0,0,0,6478,6477,1,0,0,0,6478,6479,
        1,0,0,0,6479,6587,1,0,0,0,6480,6481,5,225,0,0,6481,6482,7,102,0,
        0,6482,6484,5,238,0,0,6483,6485,3,610,305,0,6484,6483,1,0,0,0,6484,
        6485,1,0,0,0,6485,6487,1,0,0,0,6486,6488,5,226,0,0,6487,6486,1,0,
        0,0,6487,6488,1,0,0,0,6488,6587,1,0,0,0,6489,6490,5,225,0,0,6490,
        6492,7,103,0,0,6491,6493,3,610,305,0,6492,6491,1,0,0,0,6492,6493,
        1,0,0,0,6493,6495,1,0,0,0,6494,6496,5,226,0,0,6495,6494,1,0,0,0,
        6495,6496,1,0,0,0,6496,6587,1,0,0,0,6497,6498,5,518,0,0,6498,6500,
        5,223,0,0,6499,6501,3,610,305,0,6500,6499,1,0,0,0,6500,6501,1,0,
        0,0,6501,6503,1,0,0,0,6502,6504,5,226,0,0,6503,6502,1,0,0,0,6503,
        6504,1,0,0,0,6504,6587,1,0,0,0,6505,6507,7,104,0,0,6506,6508,3,610,
        305,0,6507,6506,1,0,0,0,6507,6508,1,0,0,0,6508,6512,1,0,0,0,6509,
        6511,7,105,0,0,6510,6509,1,0,0,0,6511,6514,1,0,0,0,6512,6510,1,0,
        0,0,6512,6513,1,0,0,0,6513,6587,1,0,0,0,6514,6512,1,0,0,0,6515,6517,
        5,208,0,0,6516,6518,3,612,306,0,6517,6516,1,0,0,0,6517,6518,1,0,
        0,0,6518,6522,1,0,0,0,6519,6521,7,105,0,0,6520,6519,1,0,0,0,6521,
        6524,1,0,0,0,6522,6520,1,0,0,0,6522,6523,1,0,0,0,6523,6587,1,0,0,
        0,6524,6522,1,0,0,0,6525,6527,5,209,0,0,6526,6528,5,210,0,0,6527,
        6526,1,0,0,0,6527,6528,1,0,0,0,6528,6530,1,0,0,0,6529,6531,3,612,
        306,0,6530,6529,1,0,0,0,6530,6531,1,0,0,0,6531,6535,1,0,0,0,6532,
        6534,7,105,0,0,6533,6532,1,0,0,0,6534,6537,1,0,0,0,6535,6533,1,0,
        0,0,6535,6536,1,0,0,0,6536,6587,1,0,0,0,6537,6535,1,0,0,0,6538,6540,
        7,106,0,0,6539,6541,3,614,307,0,6540,6539,1,0,0,0,6540,6541,1,0,
        0,0,6541,6545,1,0,0,0,6542,6544,7,105,0,0,6543,6542,1,0,0,0,6544,
        6547,1,0,0,0,6545,6543,1,0,0,0,6545,6546,1,0,0,0,6546,6587,1,0,0,
        0,6547,6545,1,0,0,0,6548,6587,7,107,0,0,6549,6551,7,108,0,0,6550,
        6552,3,610,305,0,6551,6550,1,0,0,0,6551,6552,1,0,0,0,6552,6587,1,
        0,0,0,6553,6554,7,109,0,0,6554,6556,3,606,303,0,6555,6557,5,226,
        0,0,6556,6555,1,0,0,0,6556,6557,1,0,0,0,6557,6561,1,0,0,0,6558,6559,
        3,60,30,0,6559,6560,3,568,284,0,6560,6562,1,0,0,0,6561,6558,1,0,
        0,0,6561,6562,1,0,0,0,6562,6587,1,0,0,0,6563,6566,7,110,0,0,6564,
        6565,5,1012,0,0,6565,6567,3,590,295,0,6566,6564,1,0,0,0,6566,6567,
        1,0,0,0,6567,6587,1,0,0,0,6568,6570,5,231,0,0,6569,6571,5,223,0,
        0,6570,6569,1,0,0,0,6570,6571,1,0,0,0,6571,6573,1,0,0,0,6572,6574,
        5,226,0,0,6573,6572,1,0,0,0,6573,6574,1,0,0,0,6574,6578,1,0,0,0,
        6575,6576,3,60,30,0,6576,6577,3,568,284,0,6577,6579,1,0,0,0,6578,
        6575,1,0,0,0,6578,6579,1,0,0,0,6579,6582,1,0,0,0,6580,6581,5,27,
        0,0,6581,6583,3,570,285,0,6582,6580,1,0,0,0,6582,6583,1,0,0,0,6583,
        6587,1,0,0,0,6584,6585,5,231,0,0,6585,6587,5,227,0,0,6586,6460,1,
        0,0,0,6586,6480,1,0,0,0,6586,6489,1,0,0,0,6586,6497,1,0,0,0,6586,
        6505,1,0,0,0,6586,6515,1,0,0,0,6586,6525,1,0,0,0,6586,6538,1,0,0,
        0,6586,6548,1,0,0,0,6586,6549,1,0,0,0,6586,6553,1,0,0,0,6586,6563,
        1,0,0,0,6586,6568,1,0,0,0,6586,6584,1,0,0,0,6587,605,1,0,0,0,6588,
        6589,5,1133,0,0,6589,6594,5,1148,0,0,6590,6591,5,1135,0,0,6591,6593,
        5,1148,0,0,6592,6590,1,0,0,0,6593,6596,1,0,0,0,6594,6592,1,0,0,0,
        6594,6595,1,0,0,0,6595,6597,1,0,0,0,6596,6594,1,0,0,0,6597,6598,
        5,1134,0,0,6598,607,1,0,0,0,6599,6601,7,111,0,0,6600,6602,3,610,
        305,0,6601,6600,1,0,0,0,6601,6602,1,0,0,0,6602,6622,1,0,0,0,6603,
        6605,5,222,0,0,6604,6606,3,610,305,0,6605,6604,1,0,0,0,6605,6606,
        1,0,0,0,6606,6610,1,0,0,0,6607,6608,3,60,30,0,6608,6609,3,568,284,
        0,6609,6611,1,0,0,0,6610,6607,1,0,0,0,6610,6611,1,0,0,0,6611,6622,
        1,0,0,0,6612,6622,7,112,0,0,6613,6615,7,113,0,0,6614,6616,3,614,
        307,0,6615,6614,1,0,0,0,6615,6616,1,0,0,0,6616,6622,1,0,0,0,6617,
        6619,7,114,0,0,6618,6620,7,115,0,0,6619,6618,1,0,0,0,6619,6620,1,
        0,0,0,6620,6622,1,0,0,0,6621,6599,1,0,0,0,6621,6603,1,0,0,0,6621,
        6612,1,0,0,0,6621,6613,1,0,0,0,6621,6617,1,0,0,0,6622,6624,1,0,0,
        0,6623,6625,5,11,0,0,6624,6623,1,0,0,0,6624,6625,1,0,0,0,6625,609,
        1,0,0,0,6626,6627,5,1133,0,0,6627,6628,3,590,295,0,6628,6629,5,1134,
        0,0,6629,611,1,0,0,0,6630,6631,5,1133,0,0,6631,6632,3,590,295,0,
        6632,6633,5,1135,0,0,6633,6634,3,590,295,0,6634,6635,5,1134,0,0,
        6635,613,1,0,0,0,6636,6637,5,1133,0,0,6637,6640,3,590,295,0,6638,
        6639,5,1135,0,0,6639,6641,3,590,295,0,6640,6638,1,0,0,0,6640,6641,
        1,0,0,0,6641,6642,1,0,0,0,6642,6643,5,1134,0,0,6643,615,1,0,0,0,
        6644,6649,3,584,292,0,6645,6646,5,1135,0,0,6646,6648,3,584,292,0,
        6647,6645,1,0,0,0,6648,6651,1,0,0,0,6649,6647,1,0,0,0,6649,6650,
        1,0,0,0,6650,617,1,0,0,0,6651,6649,1,0,0,0,6652,6657,3,556,278,0,
        6653,6654,5,1135,0,0,6654,6656,3,556,278,0,6655,6653,1,0,0,0,6656,
        6659,1,0,0,0,6657,6655,1,0,0,0,6657,6658,1,0,0,0,6658,619,1,0,0,
        0,6659,6657,1,0,0,0,6660,6665,3,552,276,0,6661,6662,5,1135,0,0,6662,
        6664,3,552,276,0,6663,6661,1,0,0,0,6664,6667,1,0,0,0,6665,6663,1,
        0,0,0,6665,6666,1,0,0,0,6666,621,1,0,0,0,6667,6665,1,0,0,0,6668,
        6669,5,1133,0,0,6669,6674,3,558,279,0,6670,6671,5,1135,0,0,6671,
        6673,3,558,279,0,6672,6670,1,0,0,0,6673,6676,1,0,0,0,6674,6672,1,
        0,0,0,6674,6675,1,0,0,0,6675,6677,1,0,0,0,6676,6674,1,0,0,0,6677,
        6678,5,1134,0,0,6678,623,1,0,0,0,6679,6684,3,688,344,0,6680,6681,
        5,1135,0,0,6681,6683,3,688,344,0,6682,6680,1,0,0,0,6683,6686,1,0,
        0,0,6684,6682,1,0,0,0,6684,6685,1,0,0,0,6685,625,1,0,0,0,6686,6684,
        1,0,0,0,6687,6692,3,638,319,0,6688,6689,5,1135,0,0,6689,6691,3,638,
        319,0,6690,6688,1,0,0,0,6691,6694,1,0,0,0,6692,6690,1,0,0,0,6692,
        6693,1,0,0,0,6693,627,1,0,0,0,6694,6692,1,0,0,0,6695,6700,3,602,
        301,0,6696,6697,5,1135,0,0,6697,6699,3,602,301,0,6698,6696,1,0,0,
        0,6699,6702,1,0,0,0,6700,6698,1,0,0,0,6700,6701,1,0,0,0,6701,629,
        1,0,0,0,6702,6700,1,0,0,0,6703,6708,5,1148,0,0,6704,6705,5,1135,
        0,0,6705,6707,5,1148,0,0,6706,6704,1,0,0,0,6707,6710,1,0,0,0,6708,
        6706,1,0,0,0,6708,6709,1,0,0,0,6709,631,1,0,0,0,6710,6708,1,0,0,
        0,6711,6716,5,1159,0,0,6712,6713,5,1135,0,0,6713,6715,5,1159,0,0,
        6714,6712,1,0,0,0,6715,6718,1,0,0,0,6716,6714,1,0,0,0,6716,6717,
        1,0,0,0,6717,633,1,0,0,0,6718,6716,1,0,0,0,6719,6746,5,116,0,0,6720,
        6721,5,23,0,0,6721,6722,5,1133,0,0,6722,6723,3,688,344,0,6723,6724,
        5,12,0,0,6724,6725,3,608,304,0,6725,6726,5,1134,0,0,6726,6746,1,
        0,0,0,6727,6729,3,694,347,0,6728,6727,1,0,0,0,6728,6729,1,0,0,0,
        6729,6730,1,0,0,0,6730,6746,3,602,301,0,6731,6735,3,636,318,0,6732,
        6733,5,118,0,0,6733,6734,5,184,0,0,6734,6736,3,636,318,0,6735,6732,
        1,0,0,0,6735,6736,1,0,0,0,6736,6746,1,0,0,0,6737,6738,5,1133,0,0,
        6738,6739,3,688,344,0,6739,6740,5,1134,0,0,6740,6746,1,0,0,0,6741,
        6742,5,1133,0,0,6742,6743,3,550,275,0,6743,6744,5,1134,0,0,6744,
        6746,1,0,0,0,6745,6719,1,0,0,0,6745,6720,1,0,0,0,6745,6728,1,0,0,
        0,6745,6731,1,0,0,0,6745,6737,1,0,0,0,6745,6741,1,0,0,0,6746,635,
        1,0,0,0,6747,6753,7,116,0,0,6748,6750,5,1133,0,0,6749,6751,3,590,
        295,0,6750,6749,1,0,0,0,6750,6751,1,0,0,0,6751,6752,1,0,0,0,6752,
        6754,5,1134,0,0,6753,6748,1,0,0,0,6753,6754,1,0,0,0,6754,6762,1,
        0,0,0,6755,6756,5,323,0,0,6756,6758,5,1133,0,0,6757,6759,3,590,295,
        0,6758,6757,1,0,0,0,6758,6759,1,0,0,0,6759,6760,1,0,0,0,6760,6762,
        5,1134,0,0,6761,6747,1,0,0,0,6761,6755,1,0,0,0,6762,637,1,0,0,0,
        6763,6766,3,688,344,0,6764,6766,5,42,0,0,6765,6763,1,0,0,0,6765,
        6764,1,0,0,0,6766,639,1,0,0,0,6767,6768,5,77,0,0,6768,6769,5,60,
        0,0,6769,641,1,0,0,0,6770,6771,5,77,0,0,6771,6772,5,114,0,0,6772,
        6773,5,60,0,0,6773,643,1,0,0,0,6774,6775,5,123,0,0,6775,6776,5,141,
        0,0,6776,645,1,0,0,0,6777,6778,5,674,0,0,6778,6781,3,590,295,0,6779,
        6781,5,527,0,0,6780,6777,1,0,0,0,6780,6779,1,0,0,0,6781,647,1,0,
        0,0,6782,6801,3,650,325,0,6783,6801,3,658,329,0,6784,6801,3,660,
        330,0,6785,6786,3,680,340,0,6786,6788,5,1133,0,0,6787,6789,3,684,
        342,0,6788,6787,1,0,0,0,6788,6789,1,0,0,0,6789,6790,1,0,0,0,6790,
        6791,5,1134,0,0,6791,6801,1,0,0,0,6792,6793,3,550,275,0,6793,6795,
        5,1133,0,0,6794,6796,3,684,342,0,6795,6794,1,0,0,0,6795,6796,1,0,
        0,0,6796,6797,1,0,0,0,6797,6798,5,1134,0,0,6798,6801,1,0,0,0,6799,
        6801,3,682,341,0,6800,6782,1,0,0,0,6800,6783,1,0,0,0,6800,6784,1,
        0,0,0,6800,6785,1,0,0,0,6800,6792,1,0,0,0,6800,6799,1,0,0,0,6801,
        649,1,0,0,0,6802,6805,7,117,0,0,6803,6804,5,1133,0,0,6804,6806,5,
        1134,0,0,6805,6803,1,0,0,0,6805,6806,1,0,0,0,6806,6982,1,0,0,0,6807,
        6982,3,62,31,0,6808,6809,5,32,0,0,6809,6810,5,1133,0,0,6810,6811,
        3,688,344,0,6811,6812,5,1135,0,0,6812,6813,3,608,304,0,6813,6814,
        5,1134,0,0,6814,6982,1,0,0,0,6815,6816,5,32,0,0,6816,6817,5,1133,
        0,0,6817,6818,3,688,344,0,6818,6819,5,187,0,0,6819,6820,3,568,284,
        0,6820,6821,5,1134,0,0,6821,6982,1,0,0,0,6822,6823,5,23,0,0,6823,
        6824,5,1133,0,0,6824,6825,3,688,344,0,6825,6826,5,12,0,0,6826,6827,
        3,608,304,0,6827,6828,5,1134,0,0,6828,6982,1,0,0,0,6829,6830,5,188,
        0,0,6830,6831,5,1133,0,0,6831,6832,3,556,278,0,6832,6833,5,1134,
        0,0,6833,6982,1,0,0,0,6834,6835,5,22,0,0,6835,6837,3,688,344,0,6836,
        6838,3,652,326,0,6837,6836,1,0,0,0,6838,6839,1,0,0,0,6839,6837,1,
        0,0,0,6839,6840,1,0,0,0,6840,6843,1,0,0,0,6841,6842,5,53,0,0,6842,
        6844,3,686,343,0,6843,6841,1,0,0,0,6843,6844,1,0,0,0,6844,6845,1,
        0,0,0,6845,6846,5,407,0,0,6846,6982,1,0,0,0,6847,6849,5,22,0,0,6848,
        6850,3,652,326,0,6849,6848,1,0,0,0,6850,6851,1,0,0,0,6851,6849,1,
        0,0,0,6851,6852,1,0,0,0,6852,6855,1,0,0,0,6853,6854,5,53,0,0,6854,
        6856,3,686,343,0,6855,6853,1,0,0,0,6855,6856,1,0,0,0,6856,6857,1,
        0,0,0,6857,6858,5,407,0,0,6858,6982,1,0,0,0,6859,6860,5,222,0,0,
        6860,6861,5,1133,0,0,6861,6864,3,684,342,0,6862,6863,5,187,0,0,6863,
        6865,3,568,284,0,6864,6862,1,0,0,0,6864,6865,1,0,0,0,6865,6866,1,
        0,0,0,6866,6867,5,1134,0,0,6867,6982,1,0,0,0,6868,6869,5,324,0,0,
        6869,6872,5,1133,0,0,6870,6873,3,594,297,0,6871,6873,3,688,344,0,
        6872,6870,1,0,0,0,6872,6871,1,0,0,0,6873,6874,1,0,0,0,6874,6877,
        5,80,0,0,6875,6878,3,594,297,0,6876,6878,3,688,344,0,6877,6875,1,
        0,0,0,6877,6876,1,0,0,0,6878,6879,1,0,0,0,6879,6880,5,1134,0,0,6880,
        6982,1,0,0,0,6881,6882,7,118,0,0,6882,6885,5,1133,0,0,6883,6886,
        3,594,297,0,6884,6886,3,688,344,0,6885,6883,1,0,0,0,6885,6884,1,
        0,0,0,6886,6887,1,0,0,0,6887,6890,5,68,0,0,6888,6891,3,590,295,0,
        6889,6891,3,688,344,0,6890,6888,1,0,0,0,6890,6889,1,0,0,0,6891,6897,
        1,0,0,0,6892,6895,5,65,0,0,6893,6896,3,590,295,0,6894,6896,3,688,
        344,0,6895,6893,1,0,0,0,6895,6894,1,0,0,0,6896,6898,1,0,0,0,6897,
        6892,1,0,0,0,6897,6898,1,0,0,0,6898,6899,1,0,0,0,6899,6900,5,1134,
        0,0,6900,6982,1,0,0,0,6901,6902,5,328,0,0,6902,6903,5,1133,0,0,6903,
        6906,7,119,0,0,6904,6907,3,594,297,0,6905,6907,3,688,344,0,6906,
        6904,1,0,0,0,6906,6905,1,0,0,0,6906,6907,1,0,0,0,6907,6908,1,0,0,
        0,6908,6911,5,68,0,0,6909,6912,3,594,297,0,6910,6912,3,688,344,0,
        6911,6909,1,0,0,0,6911,6910,1,0,0,0,6912,6913,1,0,0,0,6913,6914,
        5,1134,0,0,6914,6982,1,0,0,0,6915,6916,5,328,0,0,6916,6919,5,1133,
        0,0,6917,6920,3,594,297,0,6918,6920,3,688,344,0,6919,6917,1,0,0,
        0,6919,6918,1,0,0,0,6920,6921,1,0,0,0,6921,6924,5,68,0,0,6922,6925,
        3,594,297,0,6923,6925,3,688,344,0,6924,6922,1,0,0,0,6924,6923,1,
        0,0,0,6925,6926,1,0,0,0,6926,6927,5,1134,0,0,6927,6982,1,0,0,0,6928,
        6929,5,1103,0,0,6929,6932,5,1133,0,0,6930,6933,3,594,297,0,6931,
        6933,3,688,344,0,6932,6930,1,0,0,0,6932,6931,1,0,0,0,6933,6940,1,
        0,0,0,6934,6935,5,12,0,0,6935,6936,7,120,0,0,6936,6937,5,1133,0,
        0,6937,6938,3,590,295,0,6938,6939,5,1134,0,0,6939,6941,1,0,0,0,6940,
        6934,1,0,0,0,6940,6941,1,0,0,0,6941,6943,1,0,0,0,6942,6944,3,654,
        327,0,6943,6942,1,0,0,0,6943,6944,1,0,0,0,6944,6945,1,0,0,0,6945,
        6946,5,1134,0,0,6946,6982,1,0,0,0,6947,6948,5,321,0,0,6948,6949,
        5,1133,0,0,6949,6950,3,72,36,0,6950,6953,5,68,0,0,6951,6954,3,594,
        297,0,6952,6954,3,688,344,0,6953,6951,1,0,0,0,6953,6952,1,0,0,0,
        6954,6955,1,0,0,0,6955,6956,5,1134,0,0,6956,6982,1,0,0,0,6957,6958,
        5,900,0,0,6958,6959,5,1133,0,0,6959,6960,7,121,0,0,6960,6961,5,1135,
        0,0,6961,6962,3,594,297,0,6962,6963,5,1134,0,0,6963,6982,1,0,0,0,
        6964,6965,5,282,0,0,6965,6966,5,1133,0,0,6966,6967,3,688,344,0,6967,
        6968,5,1135,0,0,6968,6971,3,688,344,0,6969,6970,5,593,0,0,6970,6972,
        3,608,304,0,6971,6969,1,0,0,0,6971,6972,1,0,0,0,6972,6974,1,0,0,
        0,6973,6975,3,268,134,0,6974,6973,1,0,0,0,6974,6975,1,0,0,0,6975,
        6977,1,0,0,0,6976,6978,3,270,135,0,6977,6976,1,0,0,0,6977,6978,1,
        0,0,0,6978,6979,1,0,0,0,6979,6980,5,1134,0,0,6980,6982,1,0,0,0,6981,
        6802,1,0,0,0,6981,6807,1,0,0,0,6981,6808,1,0,0,0,6981,6815,1,0,0,
        0,6981,6822,1,0,0,0,6981,6829,1,0,0,0,6981,6834,1,0,0,0,6981,6847,
        1,0,0,0,6981,6859,1,0,0,0,6981,6868,1,0,0,0,6981,6881,1,0,0,0,6981,
        6901,1,0,0,0,6981,6915,1,0,0,0,6981,6928,1,0,0,0,6981,6947,1,0,0,
        0,6981,6957,1,0,0,0,6981,6964,1,0,0,0,6982,651,1,0,0,0,6983,6984,
        5,189,0,0,6984,6985,3,686,343,0,6985,6986,5,174,0,0,6986,6987,3,
        686,343,0,6987,653,1,0,0,0,6988,6989,5,472,0,0,6989,6994,3,656,328,
        0,6990,6991,5,1135,0,0,6991,6993,3,656,328,0,6992,6990,1,0,0,0,6993,
        6996,1,0,0,0,6994,6992,1,0,0,0,6994,6995,1,0,0,0,6995,7003,1,0,0,
        0,6996,6994,1,0,0,0,6997,6998,5,472,0,0,6998,6999,3,590,295,0,6999,
        7000,5,1121,0,0,7000,7001,3,590,295,0,7001,7003,1,0,0,0,7002,6988,
        1,0,0,0,7002,6997,1,0,0,0,7003,655,1,0,0,0,7004,7006,3,590,295,0,
        7005,7007,7,122,0,0,7006,7005,1,0,0,0,7006,7007,1,0,0,0,7007,657,
        1,0,0,0,7008,7009,7,123,0,0,7009,7011,5,1133,0,0,7010,7012,7,44,
        0,0,7011,7010,1,0,0,0,7011,7012,1,0,0,0,7012,7013,1,0,0,0,7013,7014,
        3,686,343,0,7014,7016,5,1134,0,0,7015,7017,3,662,331,0,7016,7015,
        1,0,0,0,7016,7017,1,0,0,0,7017,7068,1,0,0,0,7018,7019,5,290,0,0,
        7019,7027,5,1133,0,0,7020,7028,5,1117,0,0,7021,7023,5,6,0,0,7022,
        7021,1,0,0,0,7022,7023,1,0,0,0,7023,7024,1,0,0,0,7024,7028,3,686,
        343,0,7025,7026,5,49,0,0,7026,7028,3,684,342,0,7027,7020,1,0,0,0,
        7027,7022,1,0,0,0,7027,7025,1,0,0,0,7028,7029,1,0,0,0,7029,7031,
        5,1134,0,0,7030,7032,3,662,331,0,7031,7030,1,0,0,0,7031,7032,1,0,
        0,0,7032,7068,1,0,0,0,7033,7034,7,124,0,0,7034,7036,5,1133,0,0,7035,
        7037,5,6,0,0,7036,7035,1,0,0,0,7036,7037,1,0,0,0,7037,7038,1,0,0,
        0,7038,7039,3,686,343,0,7039,7041,5,1134,0,0,7040,7042,3,662,331,
        0,7041,7040,1,0,0,0,7041,7042,1,0,0,0,7042,7068,1,0,0,0,7043,7044,
        5,294,0,0,7044,7046,5,1133,0,0,7045,7047,5,49,0,0,7046,7045,1,0,
        0,0,7046,7047,1,0,0,0,7047,7048,1,0,0,0,7048,7059,3,684,342,0,7049,
        7050,5,124,0,0,7050,7051,5,19,0,0,7051,7056,3,232,116,0,7052,7053,
        5,1135,0,0,7053,7055,3,232,116,0,7054,7052,1,0,0,0,7055,7058,1,0,
        0,0,7056,7054,1,0,0,0,7056,7057,1,0,0,0,7057,7060,1,0,0,0,7058,7056,
        1,0,0,0,7059,7049,1,0,0,0,7059,7060,1,0,0,0,7060,7063,1,0,0,0,7061,
        7062,5,154,0,0,7062,7064,5,1148,0,0,7063,7061,1,0,0,0,7063,7064,
        1,0,0,0,7064,7065,1,0,0,0,7065,7066,5,1134,0,0,7066,7068,1,0,0,0,
        7067,7008,1,0,0,0,7067,7018,1,0,0,0,7067,7033,1,0,0,0,7067,7043,
        1,0,0,0,7068,659,1,0,0,0,7069,7070,7,125,0,0,7070,7071,5,1133,0,
        0,7071,7074,3,688,344,0,7072,7073,5,1135,0,0,7073,7075,3,590,295,
        0,7074,7072,1,0,0,0,7074,7075,1,0,0,0,7075,7078,1,0,0,0,7076,7077,
        5,1135,0,0,7077,7079,3,590,295,0,7078,7076,1,0,0,0,7078,7079,1,0,
        0,0,7079,7080,1,0,0,0,7080,7081,5,1134,0,0,7081,7082,3,662,331,0,
        7082,7108,1,0,0,0,7083,7084,7,126,0,0,7084,7085,5,1133,0,0,7085,
        7086,3,688,344,0,7086,7087,5,1134,0,0,7087,7088,3,662,331,0,7088,
        7108,1,0,0,0,7089,7090,7,127,0,0,7090,7091,5,1133,0,0,7091,7092,
        5,1134,0,0,7092,7108,3,662,331,0,7093,7094,5,301,0,0,7094,7095,5,
        1133,0,0,7095,7096,3,688,344,0,7096,7097,5,1135,0,0,7097,7098,3,
        590,295,0,7098,7099,5,1134,0,0,7099,7100,3,662,331,0,7100,7108,1,
        0,0,0,7101,7102,5,300,0,0,7102,7103,5,1133,0,0,7103,7104,3,590,295,
        0,7104,7105,5,1134,0,0,7105,7106,3,662,331,0,7106,7108,1,0,0,0,7107,
        7069,1,0,0,0,7107,7083,1,0,0,0,7107,7089,1,0,0,0,7107,7093,1,0,0,
        0,7107,7101,1,0,0,0,7108,661,1,0,0,0,7109,7115,5,128,0,0,7110,7111,
        5,1133,0,0,7111,7112,3,664,332,0,7112,7113,5,1134,0,0,7113,7116,
        1,0,0,0,7114,7116,3,666,333,0,7115,7110,1,0,0,0,7115,7114,1,0,0,
        0,7116,663,1,0,0,0,7117,7119,3,666,333,0,7118,7117,1,0,0,0,7118,
        7119,1,0,0,0,7119,7121,1,0,0,0,7120,7122,3,678,339,0,7121,7120,1,
        0,0,0,7121,7122,1,0,0,0,7122,7124,1,0,0,0,7123,7125,3,230,115,0,
        7124,7123,1,0,0,0,7124,7125,1,0,0,0,7125,7127,1,0,0,0,7126,7128,
        3,668,334,0,7127,7126,1,0,0,0,7127,7128,1,0,0,0,7128,665,1,0,0,0,
        7129,7130,3,584,292,0,7130,667,1,0,0,0,7131,7132,3,670,335,0,7132,
        7133,3,672,336,0,7133,669,1,0,0,0,7134,7135,7,128,0,0,7135,671,1,
        0,0,0,7136,7139,3,676,338,0,7137,7139,3,674,337,0,7138,7136,1,0,
        0,0,7138,7137,1,0,0,0,7139,673,1,0,0,0,7140,7141,5,16,0,0,7141,7142,
        3,676,338,0,7142,7143,5,10,0,0,7143,7144,3,676,338,0,7144,675,1,
        0,0,0,7145,7146,5,35,0,0,7146,7153,5,600,0,0,7147,7148,5,657,0,0,
        7148,7153,7,129,0,0,7149,7150,3,688,344,0,7150,7151,7,129,0,0,7151,
        7153,1,0,0,0,7152,7145,1,0,0,0,7152,7147,1,0,0,0,7152,7149,1,0,0,
        0,7153,677,1,0,0,0,7154,7155,5,129,0,0,7155,7156,5,19,0,0,7156,7161,
        3,688,344,0,7157,7158,5,1135,0,0,7158,7160,3,688,344,0,7159,7157,
        1,0,0,0,7160,7163,1,0,0,0,7161,7159,1,0,0,0,7161,7162,1,0,0,0,7162,
        679,1,0,0,0,7163,7161,1,0,0,0,7164,7189,3,720,360,0,7165,7189,5,
        747,0,0,7166,7189,5,317,0,0,7167,7189,5,313,0,0,7168,7189,5,314,
        0,0,7169,7189,5,315,0,0,7170,7189,5,318,0,0,7171,7189,5,319,0,0,
        7172,7189,5,320,0,0,7173,7189,5,77,0,0,7174,7189,5,85,0,0,7175,7189,
        5,316,0,0,7176,7189,5,322,0,0,7177,7189,5,508,0,0,7178,7189,5,323,
        0,0,7179,7189,5,140,0,0,7180,7189,5,141,0,0,7181,7189,5,325,0,0,
        7182,7189,5,326,0,0,7183,7189,5,327,0,0,7184,7189,5,328,0,0,7185,
        7189,5,329,0,0,7186,7189,5,330,0,0,7187,7189,5,331,0,0,7188,7164,
        1,0,0,0,7188,7165,1,0,0,0,7188,7166,1,0,0,0,7188,7167,1,0,0,0,7188,
        7168,1,0,0,0,7188,7169,1,0,0,0,7188,7170,1,0,0,0,7188,7171,1,0,0,
        0,7188,7172,1,0,0,0,7188,7173,1,0,0,0,7188,7174,1,0,0,0,7188,7175,
        1,0,0,0,7188,7176,1,0,0,0,7188,7177,1,0,0,0,7188,7178,1,0,0,0,7188,
        7179,1,0,0,0,7188,7180,1,0,0,0,7188,7181,1,0,0,0,7188,7182,1,0,0,
        0,7188,7183,1,0,0,0,7188,7184,1,0,0,0,7188,7185,1,0,0,0,7188,7186,
        1,0,0,0,7188,7187,1,0,0,0,7189,681,1,0,0,0,7190,7191,7,130,0,0,7191,
        7192,5,1133,0,0,7192,7193,3,686,343,0,7193,7194,5,1134,0,0,7194,
        683,1,0,0,0,7195,7200,3,602,301,0,7196,7200,3,556,278,0,7197,7200,
        3,648,324,0,7198,7200,3,688,344,0,7199,7195,1,0,0,0,7199,7196,1,
        0,0,0,7199,7197,1,0,0,0,7199,7198,1,0,0,0,7200,7210,1,0,0,0,7201,
        7206,5,1135,0,0,7202,7207,3,602,301,0,7203,7207,3,556,278,0,7204,
        7207,3,648,324,0,7205,7207,3,688,344,0,7206,7202,1,0,0,0,7206,7203,
        1,0,0,0,7206,7204,1,0,0,0,7206,7205,1,0,0,0,7207,7209,1,0,0,0,7208,
        7201,1,0,0,0,7209,7212,1,0,0,0,7210,7208,1,0,0,0,7210,7211,1,0,0,
        0,7211,685,1,0,0,0,7212,7210,1,0,0,0,7213,7218,3,602,301,0,7214,
        7218,3,556,278,0,7215,7218,3,648,324,0,7216,7218,3,688,344,0,7217,
        7213,1,0,0,0,7217,7214,1,0,0,0,7217,7215,1,0,0,0,7217,7216,1,0,0,
        0,7218,687,1,0,0,0,7219,7220,6,344,-1,0,7220,7221,7,131,0,0,7221,
        7231,3,688,344,4,7222,7223,3,690,345,0,7223,7225,5,88,0,0,7224,7226,
        5,114,0,0,7225,7224,1,0,0,0,7225,7226,1,0,0,0,7226,7227,1,0,0,0,
        7227,7228,7,132,0,0,7228,7231,1,0,0,0,7229,7231,3,690,345,0,7230,
        7219,1,0,0,0,7230,7222,1,0,0,0,7230,7229,1,0,0,0,7231,7238,1,0,0,
        0,7232,7233,10,3,0,0,7233,7234,3,698,349,0,7234,7235,3,688,344,4,
        7235,7237,1,0,0,0,7236,7232,1,0,0,0,7237,7240,1,0,0,0,7238,7236,
        1,0,0,0,7238,7239,1,0,0,0,7239,689,1,0,0,0,7240,7238,1,0,0,0,7241,
        7242,6,345,-1,0,7242,7243,3,692,346,0,7243,7308,1,0,0,0,7244,7245,
        10,8,0,0,7245,7246,3,696,348,0,7246,7247,3,690,345,9,7247,7307,1,
        0,0,0,7248,7250,10,6,0,0,7249,7251,5,114,0,0,7250,7249,1,0,0,0,7250,
        7251,1,0,0,0,7251,7252,1,0,0,0,7252,7253,5,16,0,0,7253,7254,3,690,
        345,0,7254,7255,5,10,0,0,7255,7256,3,690,345,7,7256,7307,1,0,0,0,
        7257,7258,10,5,0,0,7258,7259,5,620,0,0,7259,7260,5,98,0,0,7260,7307,
        3,690,345,6,7261,7263,10,3,0,0,7262,7264,5,114,0,0,7263,7262,1,0,
        0,0,7263,7264,1,0,0,0,7264,7265,1,0,0,0,7265,7266,7,133,0,0,7266,
        7307,3,690,345,4,7267,7269,10,10,0,0,7268,7270,5,114,0,0,7269,7268,
        1,0,0,0,7269,7270,1,0,0,0,7270,7271,1,0,0,0,7271,7272,5,80,0,0,7272,
        7275,5,1133,0,0,7273,7276,3,200,100,0,7274,7276,3,624,312,0,7275,
        7273,1,0,0,0,7275,7274,1,0,0,0,7276,7277,1,0,0,0,7277,7278,5,1134,
        0,0,7278,7307,1,0,0,0,7279,7280,10,9,0,0,7280,7281,5,88,0,0,7281,
        7307,3,600,300,0,7282,7283,10,7,0,0,7283,7284,3,696,348,0,7284,7285,
        7,134,0,0,7285,7286,5,1133,0,0,7286,7287,3,200,100,0,7287,7288,5,
        1134,0,0,7288,7307,1,0,0,0,7289,7291,10,4,0,0,7290,7292,5,114,0,
        0,7291,7290,1,0,0,0,7291,7292,1,0,0,0,7292,7293,1,0,0,0,7293,7294,
        5,98,0,0,7294,7297,3,690,345,0,7295,7296,5,413,0,0,7296,7298,5,1148,
        0,0,7297,7295,1,0,0,0,7297,7298,1,0,0,0,7298,7307,1,0,0,0,7299,7300,
        10,2,0,0,7300,7301,5,505,0,0,7301,7302,5,533,0,0,7302,7303,5,1133,
        0,0,7303,7304,3,690,345,0,7304,7305,5,1134,0,0,7305,7307,1,0,0,0,
        7306,7244,1,0,0,0,7306,7248,1,0,0,0,7306,7257,1,0,0,0,7306,7261,
        1,0,0,0,7306,7267,1,0,0,0,7306,7279,1,0,0,0,7306,7282,1,0,0,0,7306,
        7289,1,0,0,0,7306,7299,1,0,0,0,7307,7310,1,0,0,0,7308,7306,1,0,0,
        0,7308,7309,1,0,0,0,7309,691,1,0,0,0,7310,7308,1,0,0,0,7311,7312,
        6,346,-1,0,7312,7360,3,602,301,0,7313,7360,3,556,278,0,7314,7360,
        3,648,324,0,7315,7360,3,566,283,0,7316,7317,3,694,347,0,7317,7318,
        3,692,346,12,7318,7360,1,0,0,0,7319,7320,5,226,0,0,7320,7360,3,692,
        346,11,7321,7322,5,1159,0,0,7322,7323,5,1108,0,0,7323,7360,3,692,
        346,10,7324,7325,5,1133,0,0,7325,7330,3,688,344,0,7326,7327,5,1135,
        0,0,7327,7329,3,688,344,0,7328,7326,1,0,0,0,7329,7332,1,0,0,0,7330,
        7328,1,0,0,0,7330,7331,1,0,0,0,7331,7333,1,0,0,0,7332,7330,1,0,0,
        0,7333,7334,5,1134,0,0,7334,7360,1,0,0,0,7335,7336,5,600,0,0,7336,
        7337,5,1133,0,0,7337,7340,3,688,344,0,7338,7339,5,1135,0,0,7339,
        7341,3,688,344,0,7340,7338,1,0,0,0,7341,7342,1,0,0,0,7342,7340,1,
        0,0,0,7342,7343,1,0,0,0,7343,7344,1,0,0,0,7344,7345,5,1134,0,0,7345,
        7360,1,0,0,0,7346,7347,5,60,0,0,7347,7348,5,1133,0,0,7348,7349,3,
        200,100,0,7349,7350,5,1134,0,0,7350,7360,1,0,0,0,7351,7352,5,1133,
        0,0,7352,7353,3,200,100,0,7353,7354,5,1134,0,0,7354,7360,1,0,0,0,
        7355,7356,5,86,0,0,7356,7357,3,688,344,0,7357,7358,3,72,36,0,7358,
        7360,1,0,0,0,7359,7311,1,0,0,0,7359,7313,1,0,0,0,7359,7314,1,0,0,
        0,7359,7315,1,0,0,0,7359,7316,1,0,0,0,7359,7319,1,0,0,0,7359,7321,
        1,0,0,0,7359,7324,1,0,0,0,7359,7335,1,0,0,0,7359,7346,1,0,0,0,7359,
        7351,1,0,0,0,7359,7355,1,0,0,0,7360,7382,1,0,0,0,7361,7362,10,4,
        0,0,7362,7363,3,700,350,0,7363,7364,3,692,346,5,7364,7381,1,0,0,
        0,7365,7366,10,3,0,0,7366,7367,3,702,351,0,7367,7368,3,692,346,4,
        7368,7381,1,0,0,0,7369,7370,10,2,0,0,7370,7371,3,704,352,0,7371,
        7372,3,692,346,3,7372,7381,1,0,0,0,7373,7374,10,1,0,0,7374,7375,
        3,706,353,0,7375,7376,3,692,346,2,7376,7381,1,0,0,0,7377,7378,10,
        14,0,0,7378,7379,5,27,0,0,7379,7381,3,570,285,0,7380,7361,1,0,0,
        0,7380,7365,1,0,0,0,7380,7369,1,0,0,0,7380,7373,1,0,0,0,7380,7377,
        1,0,0,0,7381,7384,1,0,0,0,7382,7380,1,0,0,0,7382,7383,1,0,0,0,7383,
        693,1,0,0,0,7384,7382,1,0,0,0,7385,7386,7,135,0,0,7386,695,1,0,0,
        0,7387,7402,5,1124,0,0,7388,7402,5,1125,0,0,7389,7402,5,1126,0,0,
        7390,7391,5,1126,0,0,7391,7402,5,1124,0,0,7392,7393,5,1125,0,0,7393,
        7402,5,1124,0,0,7394,7395,5,1126,0,0,7395,7402,5,1125,0,0,7396,7397,
        5,1127,0,0,7397,7402,5,1124,0,0,7398,7399,5,1126,0,0,7399,7400,5,
        1124,0,0,7400,7402,5,1125,0,0,7401,7387,1,0,0,0,7401,7388,1,0,0,
        0,7401,7389,1,0,0,0,7401,7390,1,0,0,0,7401,7392,1,0,0,0,7401,7394,
        1,0,0,0,7401,7396,1,0,0,0,7401,7398,1,0,0,0,7402,697,1,0,0,0,7403,
        7411,5,10,0,0,7404,7405,5,1130,0,0,7405,7411,5,1130,0,0,7406,7411,
        5,194,0,0,7407,7411,5,123,0,0,7408,7409,5,1129,0,0,7409,7411,5,1129,
        0,0,7410,7403,1,0,0,0,7410,7404,1,0,0,0,7410,7406,1,0,0,0,7410,7407,
        1,0,0,0,7410,7408,1,0,0,0,7411,699,1,0,0,0,7412,7413,5,1126,0,0,
        7413,7420,5,1126,0,0,7414,7415,5,1125,0,0,7415,7420,5,1125,0,0,7416,
        7420,5,1130,0,0,7417,7420,5,1131,0,0,7418,7420,5,1129,0,0,7419,7412,
        1,0,0,0,7419,7414,1,0,0,0,7419,7416,1,0,0,0,7419,7417,1,0,0,0,7419,
        7418,1,0,0,0,7420,701,1,0,0,0,7421,7422,7,136,0,0,7422,703,1,0,0,
        0,7423,7424,7,137,0,0,7424,705,1,0,0,0,7425,7426,5,1121,0,0,7426,
        7431,5,1125,0,0,7427,7428,5,1121,0,0,7428,7429,5,1125,0,0,7429,7431,
        5,1125,0,0,7430,7425,1,0,0,0,7430,7427,1,0,0,0,7431,707,1,0,0,0,
        7432,7433,7,138,0,0,7433,709,1,0,0,0,7434,7435,7,139,0,0,7435,711,
        1,0,0,0,7436,7437,7,140,0,0,7437,713,1,0,0,0,7438,7439,7,141,0,0,
        7439,715,1,0,0,0,7440,7441,7,142,0,0,7441,717,1,0,0,0,7442,7443,
        7,143,0,0,7443,719,1,0,0,0,7444,7445,7,144,0,0,7445,721,1,0,0,0,
        1086,723,727,734,737,740,742,748,751,754,763,805,820,831,848,853,
        868,895,904,909,915,920,924,933,936,939,943,950,953,958,966,971,
        976,979,981,993,996,1000,1003,1007,1010,1014,1017,1020,1024,1027,
        1031,1037,1043,1049,1056,1063,1066,1070,1075,1081,1090,1095,1100,
        1107,1124,1131,1135,1145,1149,1153,1157,1161,1166,1169,1172,1175,
        1178,1184,1188,1194,1199,1202,1205,1207,1218,1222,1225,1239,1242,
        1246,1249,1253,1256,1260,1263,1267,1270,1273,1277,1280,1284,1290,
        1303,1309,1320,1325,1333,1341,1346,1349,1354,1362,1367,1373,1378,
        1382,1384,1387,1391,1395,1398,1402,1406,1410,1416,1419,1426,1431,
        1437,1444,1450,1458,1461,1468,1471,1473,1479,1485,1502,1509,1516,
        1528,1533,1536,1539,1552,1565,1570,1586,1594,1604,1607,1610,1616,
        1620,1623,1634,1637,1642,1655,1662,1669,1671,1678,1682,1684,1689,
        1692,1698,1703,1705,1709,1712,1715,1721,1726,1728,1733,1740,1742,
        1749,1754,1758,1761,1769,1777,1779,1789,1793,1796,1802,1807,1810,
        1816,1819,1823,1826,1830,1835,1840,1845,1849,1853,1857,1861,1865,
        1869,1874,1879,1884,1890,1895,1900,1905,1910,1915,1921,1926,1931,
        1936,1941,1946,1951,1956,1963,1968,1973,1978,1982,1987,1995,2000,
        2006,2018,2025,2027,2035,2040,2043,2051,2057,2061,2074,2086,2088,
        2091,2099,2105,2111,2124,2131,2140,2145,2156,2165,2170,2182,2189,
        2198,2203,2215,2222,2231,2236,2243,2252,2257,2259,2264,2272,2281,
        2285,2288,2292,2297,2303,2309,2314,2319,2324,2329,2332,2337,2342,
        2352,2356,2363,2368,2371,2376,2379,2383,2387,2395,2414,2417,2420,
        2424,2434,2447,2454,2457,2462,2469,2472,2475,2486,2489,2493,2501,
        2504,2509,2517,2523,2527,2531,2536,2541,2548,2552,2563,2571,2574,
        2580,2586,2588,2593,2596,2602,2608,2610,2614,2617,2620,2626,2632,
        2635,2641,2647,2649,2654,2662,2664,2673,2676,2679,2684,2686,2695,
        2698,2701,2706,2708,2717,2722,2730,2734,2742,2752,2757,2764,2768,
        2772,2791,2801,2807,2824,2828,2838,2843,2846,2855,2866,2874,2880,
        2890,2902,2909,2916,2931,2944,2950,2956,2962,2968,2974,2980,2985,
        2992,2999,3006,3011,3014,3016,3030,3037,3044,3050,3054,3058,3065,
        3068,3073,3080,3087,3091,3096,3103,3116,3119,3124,3129,3133,3139,
        3148,3157,3166,3169,3173,3182,3186,3189,3192,3198,3201,3205,3208,
        3212,3215,3223,3226,3237,3240,3245,3248,3253,3263,3268,3274,3276,
        3282,3284,3290,3298,3303,3311,3314,3319,3322,3327,3335,3343,3349,
        3357,3362,3370,3373,3377,3380,3388,3394,3403,3406,3410,3414,3418,
        3423,3427,3431,3433,3436,3439,3442,3448,3452,3455,3458,3461,3464,
        3471,3473,3477,3482,3488,3493,3500,3506,3511,3514,3520,3524,3532,
        3536,3539,3542,3547,3550,3557,3561,3564,3568,3572,3575,3578,3583,
        3589,3593,3603,3609,3613,3619,3623,3629,3632,3644,3648,3652,3660,
        3664,3672,3675,3679,3682,3690,3695,3698,3701,3705,3708,3717,3722,
        3731,3736,3743,3750,3758,3764,3772,3775,3778,3785,3788,3795,3798,
        3806,3812,3823,3826,3830,3836,3845,3850,3854,3860,3866,3868,3872,
        3881,3891,3901,3907,3912,3916,3919,3922,3925,3928,3934,3940,3943,
        3946,3949,3952,3955,3957,3963,3969,3972,3975,3978,3981,3984,3988,
        3994,3998,4006,4010,4013,4015,4028,4031,4038,4048,4051,4056,4058,
        4062,4070,4076,4085,4098,4102,4108,4117,4120,4124,4127,4131,4135,
        4138,4140,4148,4160,4166,4168,4174,4176,4178,4184,4192,4200,4204,
        4208,4217,4222,4242,4247,4253,4260,4265,4274,4277,4281,4285,4289,
        4292,4295,4298,4302,4306,4309,4312,4315,4322,4326,4341,4345,4357,
        4365,4375,4379,4382,4388,4391,4394,4403,4412,4422,4426,4436,4446,
        4454,4457,4466,4469,4473,4478,4482,4491,4494,4525,4528,4531,4587,
        4592,4620,4634,4641,4645,4651,4659,4661,4672,4682,4689,4695,4703,
        4708,4716,4724,4732,4740,4746,4751,4756,4761,4767,4769,4780,4785,
        4792,4794,4808,4814,4819,4824,4830,4837,4845,4853,4858,4864,4867,
        4875,4882,4891,4894,4911,4919,4927,4931,4938,4944,4952,4961,4967,
        4974,4981,4986,4989,4991,4997,4999,5003,5005,5012,5017,5021,5027,
        5036,5042,5049,5055,5061,5066,5069,5071,5077,5079,5083,5085,5092,
        5094,5099,5106,5115,5120,5129,5136,5141,5144,5146,5152,5154,5157,
        5165,5170,5175,5179,5185,5190,5194,5200,5202,5213,5216,5223,5226,
        5238,5244,5253,5262,5267,5276,5282,5293,5299,5304,5308,5314,5319,
        5323,5326,5338,5345,5350,5380,5384,5389,5396,5399,5405,5415,5425,
        5435,5441,5450,5456,5463,5465,5475,5479,5483,5493,5498,5570,5588,
        5596,5608,5615,5617,5627,5630,5638,5645,5649,5656,5661,5664,5667,
        5676,5680,5684,5707,5714,5718,5725,5732,5735,5751,5754,5764,5768,
        5774,5777,5782,5786,5793,5796,5802,5826,5829,5841,5844,5854,5862,
        5866,5873,5876,5885,5891,5897,5907,5909,5915,5918,5921,5933,5936,
        5942,5945,5953,5961,5967,5971,5985,5997,6004,6007,6014,6021,6026,
        6039,6050,6056,6061,6074,6076,6081,6085,6088,6090,6097,6104,6107,
        6110,6116,6120,6126,6132,6145,6150,6158,6161,6166,6171,6179,6182,
        6190,6194,6201,6207,6210,6214,6227,6233,6245,6248,6257,6262,6268,
        6274,6279,6281,6284,6288,6290,6294,6300,6303,6306,6312,6321,6329,
        6333,6338,6358,6365,6367,6374,6376,6380,6385,6396,6401,6407,6410,
        6414,6419,6422,6426,6430,6432,6437,6442,6455,6458,6462,6465,6468,
        6473,6478,6484,6487,6492,6495,6500,6503,6507,6512,6517,6522,6527,
        6530,6535,6540,6545,6551,6556,6561,6566,6570,6573,6578,6582,6586,
        6594,6601,6605,6610,6615,6619,6621,6624,6640,6649,6657,6665,6674,
        6684,6692,6700,6708,6716,6728,6735,6745,6750,6753,6758,6761,6765,
        6780,6788,6795,6800,6805,6839,6843,6851,6855,6864,6872,6877,6885,
        6890,6895,6897,6906,6911,6919,6924,6932,6940,6943,6953,6971,6974,
        6977,6981,6994,7002,7006,7011,7016,7022,7027,7031,7036,7041,7046,
        7056,7059,7063,7067,7074,7078,7107,7115,7118,7121,7124,7127,7138,
        7152,7161,7188,7199,7206,7210,7217,7225,7230,7238,7250,7263,7269,
        7275,7291,7297,7306,7308,7330,7342,7359,7380,7382,7401,7410,7419,
        7430
    ]

class MySqlParser ( Parser ):

    grammarFileName = "MySqlParser.g4"

    atn = ATNDeserializer().deserialize(serializedATN())

    decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ]

    sharedContextCache = PredictionContextCache()

    literalNames = [ "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", 
                     "<INVALID>", "'ADD'", "'ALL'", "'ALTER'", "'ALWAYS'", 
                     "'ANALYZE'", "'AND'", "'ARRAY'", "'AS'", "'ASC'", "'ATTRIBUTE'", 
                     "'BEFORE'", "'BETWEEN'", "'BOTH'", "'BUCKETS'", "'BY'", 
                     "'CALL'", "'CASCADE'", "'CASE'", "'CAST'", "'CHANGE'", 
                     "'CHARACTER'", "'CHECK'", "'COLLATE'", "'COLUMN'", 
                     "'CONDITION'", "'CONSTRAINT'", "'CONTINUE'", "'CONVERT'", 
                     "'CREATE'", "'CROSS'", "'CURRENT'", "'CURRENT_ROLE'", 
                     "'CURRENT_USER'", "'CURSOR'", "'DATABASE'", "'DATABASES'", 
                     "'DECLARE'", "'DEFAULT'", "'DELAYED'", "'DELETE'", 
                     "'DESC'", "'DESCRIBE'", "'DETERMINISTIC'", "'DIAGNOSTICS'", 
                     "'DISTINCT'", "'DISTINCTROW'", "'DROP'", "'EACH'", 
                     "'ELSE'", "'ELSEIF'", "'EMPTY'", "'ENCLOSED'", "'ENFORCED'", 
                     "'ESCAPED'", "'EXCEPT'", "'EXISTS'", "'EXIT'", "'EXPLAIN'", 
                     "'FALSE'", "'FETCH'", "'FOR'", "'FORCE'", "'FOREIGN'", 
                     "'FROM'", "'FULLTEXT'", "'GENERATED'", "'GET'", "'GRANT'", 
                     "'GROUP'", "'HAVING'", "'HIGH_PRIORITY'", "'HISTOGRAM'", 
                     "'IF'", "'IGNORE'", "'IGNORED'", "'IN'", "'INDEX'", 
                     "'INFILE'", "'INNER'", "'INOUT'", "'INSERT'", "'INTERVAL'", 
                     "'INTO'", "'IS'", "'ITERATE'", "'JOIN'", "'KEY'", "'KEYS'", 
                     "'KILL'", "'LATERAL'", "'LEADING'", "'LEAVE'", "'LEFT'", 
                     "'LIKE'", "'LIMIT'", "'LINEAR'", "'LINES'", "'LOAD'", 
                     "'LOCK'", "'LOCKED'", "'LOOP'", "'LOW_PRIORITY'", "'MASTER_BIND'", 
                     "'MASTER_SSL_VERIFY_SERVER_CERT'", "'MATCH'", "'MAXVALUE'", 
                     "'MINVALUE'", "'MODIFIES'", "'NATURAL'", "'NOT'", "'NO_WRITE_TO_BINLOG'", 
                     "'NULL'", "'NUMBER'", "'ON'", "'OPTIMIZE'", "'OPTION'", 
                     "'OPTIONAL'", "'OPTIONALLY'", "'OR'", "'ORDER'", "'OUT'", 
                     "'OUTER'", "'OUTFILE'", "'OVER'", "'PARTITION'", "'PRIMARY'", 
                     "'PROCEDURE'", "'PURGE'", "'RANGE'", "'READ'", "'READS'", 
                     "'REFERENCES'", "'REGEXP'", "'RELEASE'", "'RENAME'", 
                     "'REPEAT'", "'REPLACE'", "'REQUIRE'", "'RESIGNAL'", 
                     "'RESTRICT'", "'RETAIN'", "'RETURN'", "'REVOKE'", "'RIGHT'", 
                     "'RLIKE'", "'SCHEMA'", "'SCHEMAS'", "'SELECT'", "'SET'", 
                     "'SEPARATOR'", "'SHOW'", "'SIGNAL'", "'SKIP'", "'SKIP_QUERY_REWRITE'", 
                     "'SPATIAL'", "'SQL'", "'SQLEXCEPTION'", "'SQLSTATE'", 
                     "'SQLWARNING'", "'SQL_BIG_RESULT'", "'SQL_CALC_FOUND_ROWS'", 
                     "'SQL_SMALL_RESULT'", "'SSL'", "'STACKED'", "'STARTING'", 
                     "'STATEMENT'", "'STRAIGHT_JOIN'", "'TABLE'", "'TERMINATED'", 
                     "'THEN'", "'TO'", "'TRAILING'", "'TRIGGER'", "'TRUE'", 
                     "'UNDO'", "'UNION'", "'UNIQUE'", "'UNLOCK'", "'UNSIGNED'", 
                     "'UPDATE'", "'USAGE'", "'USE'", "'USING'", "'VALUES'", 
                     "'WHEN'", "'WHERE'", "'WHILE'", "'WITH'", "'WRITE'", 
                     "'XOR'", "'ZEROFILL'", "'TINYINT'", "'SMALLINT'", "'MEDIUMINT'", 
                     "'MIDDLEINT'", "'INT'", "'INT1'", "'INT2'", "'INT3'", 
                     "'INT4'", "'INT8'", "'INTEGER'", "'BIGINT'", "'REAL'", 
                     "'DOUBLE'", "'PRECISION'", "'FLOAT'", "'FLOAT4'", "'FLOAT8'", 
                     "'DECIMAL'", "'DEC'", "'NUMERIC'", "'DATE'", "'TIME'", 
                     "'TIMESTAMP'", "'DATETIME'", "'YEAR'", "'CHAR'", "'VARCHAR'", 
                     "'NVARCHAR'", "'NATIONAL'", "'BINARY'", "'VARBINARY'", 
                     "'TINYBLOB'", "'BLOB'", "'MEDIUMBLOB'", "'LONG'", "'LONGBLOB'", 
                     "'TINYTEXT'", "'TEXT'", "'MEDIUMTEXT'", "'LONGTEXT'", 
                     "'ENUM'", "'VARYING'", "'SERIAL'", "'YEAR_MONTH'", 
                     "'DAY_HOUR'", "'DAY_MINUTE'", "'DAY_SECOND'", "'HOUR_MINUTE'", 
                     "'HOUR_SECOND'", "'MINUTE_SECOND'", "'SECOND_MICROSECOND'", 
                     "'MINUTE_MICROSECOND'", "'HOUR_MICROSECOND'", "'DAY_MICROSECOND'", 
                     "'JSON_ARRAY'", "'JSON_ARRAYAGG'", "'JSON_ARRAY_APPEND'", 
                     "'JSON_ARRAY_INSERT'", "'JSON_CONTAINS'", "'JSON_CONTAINS_PATH'", 
                     "'JSON_DEPTH'", "'JSON_EXTRACT'", "'JSON_INSERT'", 
                     "'JSON_KEYS'", "'JSON_LENGTH'", "'JSON_MERGE'", "'JSON_MERGE_PATCH'", 
                     "'JSON_MERGE_PRESERVE'", "'JSON_OBJECT'", "'JSON_OBJECTAGG'", 
                     "'JSON_OVERLAPS'", "'JSON_PRETTY'", "'JSON_QUOTE'", 
                     "'JSON_REMOVE'", "'JSON_REPLACE'", "'JSON_SCHEMA_VALID'", 
                     "'JSON_SCHEMA_VALIDATION_REPORT'", "'JSON_SEARCH'", 
                     "'JSON_SET'", "'JSON_STORAGE_FREE'", "'JSON_STORAGE_SIZE'", 
                     "'JSON_TABLE'", "'JSON_TYPE'", "'JSON_UNQUOTE'", "'JSON_VALID'", 
                     "'JSON_VALUE'", "'NESTED'", "'ORDINALITY'", "'PATH'", 
                     "'AVG'", "'BIT_AND'", "'BIT_OR'", "'BIT_XOR'", "'COUNT'", 
                     "'CUME_DIST'", "'DENSE_RANK'", "'FIRST_VALUE'", "'GROUP_CONCAT'", 
                     "'LAG'", "'LAST_VALUE'", "'LEAD'", "'MAX'", "'MIN'", 
                     "'NTILE'", "'NTH_VALUE'", "'PERCENT_RANK'", "'RANK'", 
                     "'ROW_NUMBER'", "'STD'", "'STDDEV'", "'STDDEV_POP'", 
                     "'STDDEV_SAMP'", "'SUM'", "'VAR_POP'", "'VAR_SAMP'", 
                     "'VARIANCE'", "'CURRENT_DATE'", "'CURRENT_TIME'", "'CURRENT_TIMESTAMP'", 
                     "'LOCALTIME'", "'CURDATE'", "'CURTIME'", "'DATE_ADD'", 
                     "'DATE_SUB'", "'EXTRACT'", "'LOCALTIMESTAMP'", "'NOW'", 
                     "'POSITION'", "'SUBSTR'", "'SUBSTRING'", "'SYSDATE'", 
                     "'TRIM'", "'UTC_DATE'", "'UTC_TIME'", "'UTC_TIMESTAMP'", 
                     "'ACCOUNT'", "'ACTION'", "'AFTER'", "'AGGREGATE'", 
                     "'ALGORITHM'", "'ANY'", "'AT'", "'AUTHORS'", "'AUTOCOMMIT'", 
                     "'AUTOEXTEND_SIZE'", "'AUTO_INCREMENT'", "'AVG_ROW_LENGTH'", 
                     "'BEGIN'", "'BINLOG'", "'BIT'", "'BLOCK'", "'BOOL'", 
                     "'BOOLEAN'", "'BTREE'", "'CACHE'", "'CASCADED'", "'CHAIN'", 
                     "'CHANGED'", "'CHANNEL'", "'CHECKSUM'", "'PAGE_CHECKSUM'", 
                     "'CIPHER'", "'CLASS_ORIGIN'", "'CLIENT'", "'CLOSE'", 
                     "'CLUSTERING'", "'COALESCE'", "'CODE'", "'COLUMNS'", 
                     "'COLUMN_FORMAT'", "'COLUMN_NAME'", "'COMMENT'", "'COMMIT'", 
                     "'COMPACT'", "'COMPLETION'", "'COMPRESSED'", "'COMPRESSION'", 
                     "'CONCURRENT'", "'CONNECT'", "'CONNECTION'", "'CONSISTENT'", 
                     "'CONSTRAINT_CATALOG'", "'CONSTRAINT_SCHEMA'", "'CONSTRAINT_NAME'", 
                     "'CONTAINS'", "'CONTEXT'", "'CONTRIBUTORS'", "'COPY'", 
                     "'CPU'", "'CYCLE'", "'CURSOR_NAME'", "'DATA'", "'DATAFILE'", 
                     "'DEALLOCATE'", "'DEFAULT_AUTH'", "'DEFINER'", "'DELAY_KEY_WRITE'", 
                     "'DES_KEY_FILE'", "'DIRECTORY'", "'DISABLE'", "'DISCARD'", 
                     "'DISK'", "'DO'", "'DUMPFILE'", "'DUPLICATE'", "'DYNAMIC'", 
                     "'ENABLE'", "'ENCRYPTED'", "'ENCRYPTION'", "'ENCRYPTION_KEY_ID'", 
                     "'END'", "'ENDS'", "'ENGINE'", "'ENGINES'", "'ERROR'", 
                     "'ERRORS'", "'ESCAPE'", "'EVEN'", "'EVENT'", "'EVENTS'", 
                     "'EVERY'", "'EXCHANGE'", "'EXCLUSIVE'", "'EXPIRE'", 
                     "'EXPORT'", "'EXTENDED'", "'EXTENT_SIZE'", "'FAILED_LOGIN_ATTEMPTS'", 
                     "'FAST'", "'FAULTS'", "'FIELDS'", "'FILE_BLOCK_SIZE'", 
                     "'FILTER'", "'FIRST'", "'FIXED'", "'FLUSH'", "'FOLLOWING'", 
                     "'FOLLOWS'", "'FOUND'", "'FULL'", "'FUNCTION'", "'GENERAL'", 
                     "'GLOBAL'", "'GRANTS'", "'GROUP_REPLICATION'", "'HANDLER'", 
                     "'HASH'", "'HELP'", "'HISTORY'", "'HOST'", "'HOSTS'", 
                     "'IDENTIFIED'", "'IGNORE_SERVER_IDS'", "'IMPORT'", 
                     "'INCREMENT'", "'INDEXES'", "'INITIAL_SIZE'", "'INPLACE'", 
                     "'INSERT_METHOD'", "'INSTALL'", "'INSTANCE'", "'INSTANT'", 
                     "'INVISIBLE'", "'INVOKER'", "'IO'", "'IO_THREAD'", 
                     "'IPC'", "'ISOLATION'", "'ISSUER'", "'JSON'", "'KEY_BLOCK_SIZE'", 
                     "'LANGUAGE'", "'LAST'", "'LEAVES'", "'LESS'", "'LEVEL'", 
                     "'LIST'", "'LOCAL'", "'LOGFILE'", "'LOGS'", "'MASTER'", 
                     "'MASTER_AUTO_POSITION'", "'MASTER_CONNECT_RETRY'", 
                     "'MASTER_DELAY'", "'MASTER_HEARTBEAT_PERIOD'", "'MASTER_HOST'", 
                     "'MASTER_LOG_FILE'", "'MASTER_LOG_POS'", "'MASTER_PASSWORD'", 
                     "'MASTER_PORT'", "'MASTER_RETRY_COUNT'", "'MASTER_SSL'", 
                     "'MASTER_SSL_CA'", "'MASTER_SSL_CAPATH'", "'MASTER_SSL_CERT'", 
                     "'MASTER_SSL_CIPHER'", "'MASTER_SSL_CRL'", "'MASTER_SSL_CRLPATH'", 
                     "'MASTER_SSL_KEY'", "'MASTER_TLS_VERSION'", "'MASTER_USER'", 
                     "'MAX_CONNECTIONS_PER_HOUR'", "'MAX_QUERIES_PER_HOUR'", 
                     "'MAX_ROWS'", "'MAX_SIZE'", "'MAX_UPDATES_PER_HOUR'", 
                     "'MAX_USER_CONNECTIONS'", "'MEDIUM'", "'MEMBER'", "'MERGE'", 
                     "'MESSAGE_TEXT'", "'MID'", "'MIGRATE'", "'MIN_ROWS'", 
                     "'MODE'", "'MODIFY'", "'MUTEX'", "'MYSQL'", "'MYSQL_ERRNO'", 
                     "'NAME'", "'NAMES'", "'NCHAR'", "'NEVER'", "'NEXT'", 
                     "'NO'", "'NOCACHE'", "'NOCOPY'", "'NOCYCLE'", "'NOMAXVALUE'", 
                     "'NOMINVALUE'", "'NOWAIT'", "'NODEGROUP'", "'NONE'", 
                     "'ODBC'", "'OFFLINE'", "'OFFSET'", "'OF'", "'OJ'", 
                     "'OLD_PASSWORD'", "'ONE'", "'ONLINE'", "'ONLY'", "'OPEN'", 
                     "'OPTIMIZER_COSTS'", "'OPTIONS'", "'OWNER'", "'PACK_KEYS'", 
                     "'PAGE'", "'PAGE_COMPRESSED'", "'PAGE_COMPRESSION_LEVEL'", 
                     "'PARSER'", "'PARTIAL'", "'PARTITIONING'", "'PARTITIONS'", 
                     "'PASSWORD'", "'PASSWORD_LOCK_TIME'", "'PHASE'", "'PLUGIN'", 
                     "'PLUGIN_DIR'", "'PLUGINS'", "'PORT'", "'PRECEDES'", 
                     "'PRECEDING'", "'PREPARE'", "'PRESERVE'", "'PREV'", 
                     "'PROCESSLIST'", "'PROFILE'", "'PROFILES'", "'PROXY'", 
                     "'QUERY'", "'QUICK'", "'REBUILD'", "'RECOVER'", "'RECURSIVE'", 
                     "'REDO_BUFFER_SIZE'", "'REDUNDANT'", "'RELAY'", "'RELAY_LOG_FILE'", 
                     "'RELAY_LOG_POS'", "'RELAYLOG'", "'REMOVE'", "'REORGANIZE'", 
                     "'REPAIR'", "'REPLICATE_DO_DB'", "'REPLICATE_DO_TABLE'", 
                     "'REPLICATE_IGNORE_DB'", "'REPLICATE_IGNORE_TABLE'", 
                     "'REPLICATE_REWRITE_DB'", "'REPLICATE_WILD_DO_TABLE'", 
                     "'REPLICATE_WILD_IGNORE_TABLE'", "'REPLICATION'", "'RESET'", 
                     "'RESTART'", "'RESUME'", "'RETURNED_SQLSTATE'", "'RETURNING'", 
                     "'RETURNS'", "'REUSE'", "'ROLE'", "'ROLLBACK'", "'ROLLUP'", 
                     "'ROTATE'", "'ROW'", "'ROWS'", "'ROW_FORMAT'", "'RTREE'", 
                     "'SAVEPOINT'", "'SCHEDULE'", "'SECURITY'", "'SEQUENCE'", 
                     "'SERVER'", "'SESSION'", "'SHARE'", "'SHARED'", "'SIGNED'", 
                     "'SIMPLE'", "'SLAVE'", "'SLOW'", "'SNAPSHOT'", "'SOCKET'", 
                     "'SOME'", "'SONAME'", "'SOUNDS'", "'SOURCE'", "'SQL_AFTER_GTIDS'", 
                     "'SQL_AFTER_MTS_GAPS'", "'SQL_BEFORE_GTIDS'", "'SQL_BUFFER_RESULT'", 
                     "'SQL_CACHE'", "'SQL_NO_CACHE'", "'SQL_THREAD'", "'START'", 
                     "'STARTS'", "'STATS_AUTO_RECALC'", "'STATS_PERSISTENT'", 
                     "'STATS_SAMPLE_PAGES'", "'STATUS'", "'STOP'", "'STORAGE'", 
                     "'STORED'", "'STRING'", "'SUBCLASS_ORIGIN'", "'SUBJECT'", 
                     "'SUBPARTITION'", "'SUBPARTITIONS'", "'SUSPEND'", "'SWAPS'", 
                     "'SWITCHES'", "'TABLE_NAME'", "'TABLESPACE'", "'TABLE_TYPE'", 
                     "'TEMPORARY'", "'TEMPTABLE'", "'THAN'", "'TRADITIONAL'", 
                     "'TRANSACTION'", "'TRANSACTIONAL'", "'TRIGGERS'", "'TRUNCATE'", 
                     "'UNBOUNDED'", "'UNDEFINED'", "'UNDOFILE'", "'UNDO_BUFFER_SIZE'", 
                     "'UNINSTALL'", "'UNKNOWN'", "'UNTIL'", "'UPGRADE'", 
                     "'USER'", "'USE_FRM'", "'USER_RESOURCES'", "'VALIDATION'", 
                     "'VALUE'", "'VARIABLES'", "'VIEW'", "'VIRTUAL'", "'VISIBLE'", 
                     "'WAIT'", "'WARNINGS'", "'WINDOW'", "'WITHOUT'", "'WORK'", 
                     "'WRAPPER'", "'X509'", "'XA'", "'XML'", "'YES'", "'EUR'", 
                     "'USA'", "'JIS'", "'ISO'", "'INTERNAL'", "'QUARTER'", 
                     "'MONTH'", "'DAY'", "'HOUR'", "'MINUTE'", "'WEEK'", 
                     "'SECOND'", "'MICROSECOND'", "'ADMIN'", "'APPLICATION_PASSWORD_ADMIN'", 
                     "'AUDIT_ABORT_EXEMPT'", "'AUDIT_ADMIN'", "'AUTHENTICATION_POLICY_ADMIN'", 
                     "'BACKUP_ADMIN'", "'BINLOG_ADMIN'", "'BINLOG_ENCRYPTION_ADMIN'", 
                     "'CLONE_ADMIN'", "'CONNECTION_ADMIN'", "'ENCRYPTION_KEY_ADMIN'", 
                     "'EXECUTE'", "'FILE'", "'FIREWALL_ADMIN'", "'FIREWALL_EXEMPT'", 
                     "'FIREWALL_USER'", "'FLUSH_OPTIMIZER_COSTS'", "'FLUSH_STATUS'", 
                     "'FLUSH_TABLES'", "'FLUSH_USER_RESOURCES'", "'GROUP_REPLICATION_ADMIN'", 
                     "'INNODB_REDO_LOG_ARCHIVE'", "'INNODB_REDO_LOG_ENABLE'", 
                     "'INVOKE'", "'LAMBDA'", "'NDB_STORED_USER'", "'PASSWORDLESS_USER_ADMIN'", 
                     "'PERSIST_RO_VARIABLES_ADMIN'", "'PRIVILEGES'", "'PROCESS'", 
                     "'RELOAD'", "'REPLICATION_APPLIER'", "'REPLICATION_SLAVE_ADMIN'", 
                     "'RESOURCE_GROUP_ADMIN'", "'RESOURCE_GROUP_USER'", 
                     "'ROLE_ADMIN'", "'ROUTINE'", "'S3'", "'SERVICE_CONNECTION_ADMIN'", 
                     "<INVALID>", "'SET_USER_ID'", "'SHOW_ROUTINE'", "'SHUTDOWN'", 
                     "'SUPER'", "'SYSTEM_VARIABLES_ADMIN'", "'TABLES'", 
                     "'TABLE_ENCRYPTION_ADMIN'", "'VERSION_TOKEN_ADMIN'", 
                     "'XA_RECOVER_ADMIN'", "'ARMSCII8'", "'ASCII'", "'BIG5'", 
                     "'CP1250'", "'CP1251'", "'CP1256'", "'CP1257'", "'CP850'", 
                     "'CP852'", "'CP866'", "'CP932'", "'DEC8'", "'EUCJPMS'", 
                     "'EUCKR'", "'GB18030'", "'GB2312'", "'GBK'", "'GEOSTD8'", 
                     "'GREEK'", "'HEBREW'", "'HP8'", "'KEYBCS2'", "'KOI8R'", 
                     "'KOI8U'", "'LATIN1'", "'LATIN2'", "'LATIN5'", "'LATIN7'", 
                     "'MACCE'", "'MACROMAN'", "'SJIS'", "'SWE7'", "'TIS620'", 
                     "'UCS2'", "'UJIS'", "'UTF16'", "'UTF16LE'", "'UTF32'", 
                     "'UTF8'", "'UTF8MB3'", "'UTF8MB4'", "'ARCHIVE'", "'BLACKHOLE'", 
                     "'CSV'", "'FEDERATED'", "'INNODB'", "'MEMORY'", "'MRG_MYISAM'", 
                     "'MYISAM'", "'NDB'", "'NDBCLUSTER'", "'PERFORMANCE_SCHEMA'", 
                     "'TOKUDB'", "'REPEATABLE'", "'COMMITTED'", "'UNCOMMITTED'", 
                     "'SERIALIZABLE'", "'GEOMETRYCOLLECTION'", "'GEOMCOLLECTION'", 
                     "'GEOMETRY'", "'LINESTRING'", "'MULTILINESTRING'", 
                     "'MULTIPOINT'", "'MULTIPOLYGON'", "'POINT'", "'POLYGON'", 
                     "'ABS'", "'ACOS'", "'ADDDATE'", "'ADDTIME'", "'AES_DECRYPT'", 
                     "'AES_ENCRYPT'", "'AREA'", "'ASBINARY'", "'ASIN'", 
                     "'ASTEXT'", "'ASWKB'", "'ASWKT'", "'ASYMMETRIC_DECRYPT'", 
                     "'ASYMMETRIC_DERIVE'", "'ASYMMETRIC_ENCRYPT'", "'ASYMMETRIC_SIGN'", 
                     "'ASYMMETRIC_VERIFY'", "'ATAN'", "'ATAN2'", "'BENCHMARK'", 
                     "'BIN'", "'BIT_COUNT'", "'BIT_LENGTH'", "'BUFFER'", 
                     "'CATALOG_NAME'", "'CEIL'", "'CEILING'", "'CENTROID'", 
                     "'CHARACTER_LENGTH'", "'CHARSET'", "'CHAR_LENGTH'", 
                     "'COERCIBILITY'", "'COLLATION'", "'COMPRESS'", "'CONCAT'", 
                     "'CONCAT_WS'", "'CONNECTION_ID'", "'CONV'", "'CONVERT_TZ'", 
                     "'COS'", "'COT'", "'CRC32'", "'CREATE_ASYMMETRIC_PRIV_KEY'", 
                     "'CREATE_ASYMMETRIC_PUB_KEY'", "'CREATE_DH_PARAMETERS'", 
                     "'CREATE_DIGEST'", "'CROSSES'", "'DATEDIFF'", "'DATE_FORMAT'", 
                     "'DAYNAME'", "'DAYOFMONTH'", "'DAYOFWEEK'", "'DAYOFYEAR'", 
                     "'DECODE'", "'DEGREES'", "'DES_DECRYPT'", "'DES_ENCRYPT'", 
                     "'DIMENSION'", "'DISJOINT'", "'ELT'", "'ENCODE'", "'ENCRYPT'", 
                     "'ENDPOINT'", "'ENGINE_ATTRIBUTE'", "'ENVELOPE'", "'EQUALS'", 
                     "'EXP'", "'EXPORT_SET'", "'EXTERIORRING'", "'EXTRACTVALUE'", 
                     "'FIELD'", "'FIND_IN_SET'", "'FLOOR'", "'FORMAT'", 
                     "'FOUND_ROWS'", "'FROM_BASE64'", "'FROM_DAYS'", "'FROM_UNIXTIME'", 
                     "'GEOMCOLLFROMTEXT'", "'GEOMCOLLFROMWKB'", "'GEOMETRYCOLLECTIONFROMTEXT'", 
                     "'GEOMETRYCOLLECTIONFROMWKB'", "'GEOMETRYFROMTEXT'", 
                     "'GEOMETRYFROMWKB'", "'GEOMETRYN'", "'GEOMETRYTYPE'", 
                     "'GEOMFROMTEXT'", "'GEOMFROMWKB'", "'GET_FORMAT'", 
                     "'GET_LOCK'", "'GLENGTH'", "'GREATEST'", "'GTID_SUBSET'", 
                     "'GTID_SUBTRACT'", "'HEX'", "'IFNULL'", "'INET6_ATON'", 
                     "'INET6_NTOA'", "'INET_ATON'", "'INET_NTOA'", "'INSTR'", 
                     "'INTERIORRINGN'", "'INTERSECTS'", "'ISCLOSED'", "'ISEMPTY'", 
                     "'ISNULL'", "'ISSIMPLE'", "'IS_FREE_LOCK'", "'IS_IPV4'", 
                     "'IS_IPV4_COMPAT'", "'IS_IPV4_MAPPED'", "'IS_IPV6'", 
                     "'IS_USED_LOCK'", "'LAST_INSERT_ID'", "'LCASE'", "'LEAST'", 
                     "'LENGTH'", "'LINEFROMTEXT'", "'LINEFROMWKB'", "'LINESTRINGFROMTEXT'", 
                     "'LINESTRINGFROMWKB'", "'LN'", "'LOAD_FILE'", "'LOCATE'", 
                     "'LOG'", "'LOG10'", "'LOG2'", "'LOWER'", "'LPAD'", 
                     "'LTRIM'", "'MAKEDATE'", "'MAKETIME'", "'MAKE_SET'", 
                     "'MASTER_POS_WAIT'", "'MBRCONTAINS'", "'MBRDISJOINT'", 
                     "'MBREQUAL'", "'MBRINTERSECTS'", "'MBROVERLAPS'", "'MBRTOUCHES'", 
                     "'MBRWITHIN'", "'MD5'", "'MLINEFROMTEXT'", "'MLINEFROMWKB'", 
                     "'MONTHNAME'", "'MPOINTFROMTEXT'", "'MPOINTFROMWKB'", 
                     "'MPOLYFROMTEXT'", "'MPOLYFROMWKB'", "'MULTILINESTRINGFROMTEXT'", 
                     "'MULTILINESTRINGFROMWKB'", "'MULTIPOINTFROMTEXT'", 
                     "'MULTIPOINTFROMWKB'", "'MULTIPOLYGONFROMTEXT'", "'MULTIPOLYGONFROMWKB'", 
                     "'NAME_CONST'", "'NULLIF'", "'NUMGEOMETRIES'", "'NUMINTERIORRINGS'", 
                     "'NUMPOINTS'", "'OCT'", "'OCTET_LENGTH'", "'ORD'", 
                     "'OVERLAPS'", "'PERIOD_ADD'", "'PERIOD_DIFF'", "'PI'", 
                     "'POINTFROMTEXT'", "'POINTFROMWKB'", "'POINTN'", "'POLYFROMTEXT'", 
                     "'POLYFROMWKB'", "'POLYGONFROMTEXT'", "'POLYGONFROMWKB'", 
                     "'POW'", "'POWER'", "'QUOTE'", "'RADIANS'", "'RAND'", 
                     "'RANDOM'", "'RANDOM_BYTES'", "'RELEASE_LOCK'", "'REVERSE'", 
                     "'ROUND'", "'ROW_COUNT'", "'RPAD'", "'RTRIM'", "'SEC_TO_TIME'", 
                     "'SECONDARY_ENGINE_ATTRIBUTE'", "'SESSION_USER'", "'SHA'", 
                     "'SHA1'", "'SHA2'", "'SCHEMA_NAME'", "'SIGN'", "'SIN'", 
                     "'SLEEP'", "'SOUNDEX'", "'SQL_THREAD_WAIT_AFTER_GTIDS'", 
                     "'SQRT'", "'SRID'", "'STARTPOINT'", "'STRCMP'", "'STR_TO_DATE'", 
                     "'ST_AREA'", "'ST_ASBINARY'", "'ST_ASTEXT'", "'ST_ASWKB'", 
                     "'ST_ASWKT'", "'ST_BUFFER'", "'ST_CENTROID'", "'ST_CONTAINS'", 
                     "'ST_CROSSES'", "'ST_DIFFERENCE'", "'ST_DIMENSION'", 
                     "'ST_DISJOINT'", "'ST_DISTANCE'", "'ST_ENDPOINT'", 
                     "'ST_ENVELOPE'", "'ST_EQUALS'", "'ST_EXTERIORRING'", 
                     "'ST_GEOMCOLLFROMTEXT'", "'ST_GEOMCOLLFROMTXT'", "'ST_GEOMCOLLFROMWKB'", 
                     "'ST_GEOMETRYCOLLECTIONFROMTEXT'", "'ST_GEOMETRYCOLLECTIONFROMWKB'", 
                     "'ST_GEOMETRYFROMTEXT'", "'ST_GEOMETRYFROMWKB'", "'ST_GEOMETRYN'", 
                     "'ST_GEOMETRYTYPE'", "'ST_GEOMFROMTEXT'", "'ST_GEOMFROMWKB'", 
                     "'ST_INTERIORRINGN'", "'ST_INTERSECTION'", "'ST_INTERSECTS'", 
                     "'ST_ISCLOSED'", "'ST_ISEMPTY'", "'ST_ISSIMPLE'", "'ST_LINEFROMTEXT'", 
                     "'ST_LINEFROMWKB'", "'ST_LINESTRINGFROMTEXT'", "'ST_LINESTRINGFROMWKB'", 
                     "'ST_NUMGEOMETRIES'", "'ST_NUMINTERIORRING'", "'ST_NUMINTERIORRINGS'", 
                     "'ST_NUMPOINTS'", "'ST_OVERLAPS'", "'ST_POINTFROMTEXT'", 
                     "'ST_POINTFROMWKB'", "'ST_POINTN'", "'ST_POLYFROMTEXT'", 
                     "'ST_POLYFROMWKB'", "'ST_POLYGONFROMTEXT'", "'ST_POLYGONFROMWKB'", 
                     "'ST_SRID'", "'ST_STARTPOINT'", "'ST_SYMDIFFERENCE'", 
                     "'ST_TOUCHES'", "'ST_UNION'", "'ST_WITHIN'", "'ST_X'", 
                     "'ST_Y'", "'SUBDATE'", "'SUBSTRING_INDEX'", "'SUBTIME'", 
                     "'SYSTEM_USER'", "'TAN'", "'TIMEDIFF'", "'TIMESTAMPADD'", 
                     "'TIMESTAMPDIFF'", "'TIME_FORMAT'", "'TIME_TO_SEC'", 
                     "'TOUCHES'", "'TO_BASE64'", "'TO_DAYS'", "'TO_SECONDS'", 
                     "'TP_CONNECTION_ADMIN'", "'UCASE'", "'UNCOMPRESS'", 
                     "'UNCOMPRESSED_LENGTH'", "'UNHEX'", "'UNIX_TIMESTAMP'", 
                     "'UPDATEXML'", "'UPPER'", "'UUID'", "'UUID_SHORT'", 
                     "'VALIDATE_PASSWORD_STRENGTH'", "'VERSION'", "'WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS'", 
                     "'WEEKDAY'", "'WEEKOFYEAR'", "'WEIGHT_STRING'", "'WITHIN'", 
                     "'YEARWEEK'", "'Y'", "'X'", "':='", "'+='", "'-='", 
                     "'*='", "'/='", "'%='", "'&='", "'^='", "'|='", "'*'", 
                     "'/'", "'%'", "'+'", "'-'", "'DIV'", "'MOD'", "'='", 
                     "'>'", "'<'", "'!'", "'~'", "'|'", "'&'", "'^'", "'.'", 
                     "'('", "')'", "','", "';'", "'@'", "'0'", "'1'", "'2'", 
                     "'''", "'\"'", "'`'", "':'" ]

    symbolicNames = [ "<INVALID>", "SPACE", "SPEC_MYSQL_COMMENT", "COMMENT_INPUT", 
                      "LINE_COMMENT", "ADD", "ALL", "ALTER", "ALWAYS", "ANALYZE", 
                      "AND", "ARRAY", "AS", "ASC", "ATTRIBUTE", "BEFORE", 
                      "BETWEEN", "BOTH", "BUCKETS", "BY", "CALL", "CASCADE", 
                      "CASE", "CAST", "CHANGE", "CHARACTER", "CHECK", "COLLATE", 
                      "COLUMN", "CONDITION", "CONSTRAINT", "CONTINUE", "CONVERT", 
                      "CREATE", "CROSS", "CURRENT", "CURRENT_ROLE", "CURRENT_USER", 
                      "CURSOR", "DATABASE", "DATABASES", "DECLARE", "DEFAULT", 
                      "DELAYED", "DELETE", "DESC", "DESCRIBE", "DETERMINISTIC", 
                      "DIAGNOSTICS", "DISTINCT", "DISTINCTROW", "DROP", 
                      "EACH", "ELSE", "ELSEIF", "EMPTY", "ENCLOSED", "ENFORCED", 
                      "ESCAPED", "EXCEPT", "EXISTS", "EXIT", "EXPLAIN", 
                      "FALSE", "FETCH", "FOR", "FORCE", "FOREIGN", "FROM", 
                      "FULLTEXT", "GENERATED", "GET", "GRANT", "GROUP", 
                      "HAVING", "HIGH_PRIORITY", "HISTOGRAM", "IF", "IGNORE", 
                      "IGNORED", "IN", "INDEX", "INFILE", "INNER", "INOUT", 
                      "INSERT", "INTERVAL", "INTO", "IS", "ITERATE", "JOIN", 
                      "KEY", "KEYS", "KILL", "LATERAL", "LEADING", "LEAVE", 
                      "LEFT", "LIKE", "LIMIT", "LINEAR", "LINES", "LOAD", 
                      "LOCK", "LOCKED", "LOOP", "LOW_PRIORITY", "MASTER_BIND", 
                      "MASTER_SSL_VERIFY_SERVER_CERT", "MATCH", "MAXVALUE", 
                      "MINVALUE", "MODIFIES", "NATURAL", "NOT", "NO_WRITE_TO_BINLOG", 
                      "NULL_LITERAL", "NUMBER", "ON", "OPTIMIZE", "OPTION", 
                      "OPTIONAL", "OPTIONALLY", "OR", "ORDER", "OUT", "OUTER", 
                      "OUTFILE", "OVER", "PARTITION", "PRIMARY", "PROCEDURE", 
                      "PURGE", "RANGE", "READ", "READS", "REFERENCES", "REGEXP", 
                      "RELEASE", "RENAME", "REPEAT", "REPLACE", "REQUIRE", 
                      "RESIGNAL", "RESTRICT", "RETAIN", "RETURN", "REVOKE", 
                      "RIGHT", "RLIKE", "SCHEMA", "SCHEMAS", "SELECT", "SET", 
                      "SEPARATOR", "SHOW", "SIGNAL", "SKIP_", "SKIP_QUERY_REWRITE", 
                      "SPATIAL", "SQL", "SQLEXCEPTION", "SQLSTATE", "SQLWARNING", 
                      "SQL_BIG_RESULT", "SQL_CALC_FOUND_ROWS", "SQL_SMALL_RESULT", 
                      "SSL", "STACKED", "STARTING", "STATEMENT", "STRAIGHT_JOIN", 
                      "TABLE", "TERMINATED", "THEN", "TO", "TRAILING", "TRIGGER", 
                      "TRUE", "UNDO", "UNION", "UNIQUE", "UNLOCK", "UNSIGNED", 
                      "UPDATE", "USAGE", "USE", "USING", "VALUES", "WHEN", 
                      "WHERE", "WHILE", "WITH", "WRITE", "XOR", "ZEROFILL", 
                      "TINYINT", "SMALLINT", "MEDIUMINT", "MIDDLEINT", "INT", 
                      "INT1", "INT2", "INT3", "INT4", "INT8", "INTEGER", 
                      "BIGINT", "REAL", "DOUBLE", "PRECISION", "FLOAT", 
                      "FLOAT4", "FLOAT8", "DECIMAL", "DEC", "NUMERIC", "DATE", 
                      "TIME", "TIMESTAMP", "DATETIME", "YEAR", "CHAR", "VARCHAR", 
                      "NVARCHAR", "NATIONAL", "BINARY", "VARBINARY", "TINYBLOB", 
                      "BLOB", "MEDIUMBLOB", "LONG", "LONGBLOB", "TINYTEXT", 
                      "TEXT", "MEDIUMTEXT", "LONGTEXT", "ENUM", "VARYING", 
                      "SERIAL", "YEAR_MONTH", "DAY_HOUR", "DAY_MINUTE", 
                      "DAY_SECOND", "HOUR_MINUTE", "HOUR_SECOND", "MINUTE_SECOND", 
                      "SECOND_MICROSECOND", "MINUTE_MICROSECOND", "HOUR_MICROSECOND", 
                      "DAY_MICROSECOND", "JSON_ARRAY", "JSON_ARRAYAGG", 
                      "JSON_ARRAY_APPEND", "JSON_ARRAY_INSERT", "JSON_CONTAINS", 
                      "JSON_CONTAINS_PATH", "JSON_DEPTH", "JSON_EXTRACT", 
                      "JSON_INSERT", "JSON_KEYS", "JSON_LENGTH", "JSON_MERGE", 
                      "JSON_MERGE_PATCH", "JSON_MERGE_PRESERVE", "JSON_OBJECT", 
                      "JSON_OBJECTAGG", "JSON_OVERLAPS", "JSON_PRETTY", 
                      "JSON_QUOTE", "JSON_REMOVE", "JSON_REPLACE", "JSON_SCHEMA_VALID", 
                      "JSON_SCHEMA_VALIDATION_REPORT", "JSON_SEARCH", "JSON_SET", 
                      "JSON_STORAGE_FREE", "JSON_STORAGE_SIZE", "JSON_TABLE", 
                      "JSON_TYPE", "JSON_UNQUOTE", "JSON_VALID", "JSON_VALUE", 
                      "NESTED", "ORDINALITY", "PATH", "AVG", "BIT_AND", 
                      "BIT_OR", "BIT_XOR", "COUNT", "CUME_DIST", "DENSE_RANK", 
                      "FIRST_VALUE", "GROUP_CONCAT", "LAG", "LAST_VALUE", 
                      "LEAD", "MAX", "MIN", "NTILE", "NTH_VALUE", "PERCENT_RANK", 
                      "RANK", "ROW_NUMBER", "STD", "STDDEV", "STDDEV_POP", 
                      "STDDEV_SAMP", "SUM", "VAR_POP", "VAR_SAMP", "VARIANCE", 
                      "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP", 
                      "LOCALTIME", "CURDATE", "CURTIME", "DATE_ADD", "DATE_SUB", 
                      "EXTRACT", "LOCALTIMESTAMP", "NOW", "POSITION", "SUBSTR", 
                      "SUBSTRING", "SYSDATE", "TRIM", "UTC_DATE", "UTC_TIME", 
                      "UTC_TIMESTAMP", "ACCOUNT", "ACTION", "AFTER", "AGGREGATE", 
                      "ALGORITHM", "ANY", "AT", "AUTHORS", "AUTOCOMMIT", 
                      "AUTOEXTEND_SIZE", "AUTO_INCREMENT", "AVG_ROW_LENGTH", 
                      "BEGIN", "BINLOG", "BIT", "BLOCK", "BOOL", "BOOLEAN", 
                      "BTREE", "CACHE", "CASCADED", "CHAIN", "CHANGED", 
                      "CHANNEL", "CHECKSUM", "PAGE_CHECKSUM", "CIPHER", 
                      "CLASS_ORIGIN", "CLIENT", "CLOSE", "CLUSTERING", "COALESCE", 
                      "CODE", "COLUMNS", "COLUMN_FORMAT", "COLUMN_NAME", 
                      "COMMENT", "COMMIT", "COMPACT", "COMPLETION", "COMPRESSED", 
                      "COMPRESSION", "CONCURRENT", "CONNECT", "CONNECTION", 
                      "CONSISTENT", "CONSTRAINT_CATALOG", "CONSTRAINT_SCHEMA", 
                      "CONSTRAINT_NAME", "CONTAINS", "CONTEXT", "CONTRIBUTORS", 
                      "COPY", "CPU", "CYCLE", "CURSOR_NAME", "DATA", "DATAFILE", 
                      "DEALLOCATE", "DEFAULT_AUTH", "DEFINER", "DELAY_KEY_WRITE", 
                      "DES_KEY_FILE", "DIRECTORY", "DISABLE", "DISCARD", 
                      "DISK", "DO", "DUMPFILE", "DUPLICATE", "DYNAMIC", 
                      "ENABLE", "ENCRYPTED", "ENCRYPTION", "ENCRYPTION_KEY_ID", 
                      "END", "ENDS", "ENGINE", "ENGINES", "ERROR", "ERRORS", 
                      "ESCAPE", "EVEN", "EVENT", "EVENTS", "EVERY", "EXCHANGE", 
                      "EXCLUSIVE", "EXPIRE", "EXPORT", "EXTENDED", "EXTENT_SIZE", 
                      "FAILED_LOGIN_ATTEMPTS", "FAST", "FAULTS", "FIELDS", 
                      "FILE_BLOCK_SIZE", "FILTER", "FIRST", "FIXED", "FLUSH", 
                      "FOLLOWING", "FOLLOWS", "FOUND", "FULL", "FUNCTION", 
                      "GENERAL", "GLOBAL", "GRANTS", "GROUP_REPLICATION", 
                      "HANDLER", "HASH", "HELP", "HISTORY", "HOST", "HOSTS", 
                      "IDENTIFIED", "IGNORE_SERVER_IDS", "IMPORT", "INCREMENT", 
                      "INDEXES", "INITIAL_SIZE", "INPLACE", "INSERT_METHOD", 
                      "INSTALL", "INSTANCE", "INSTANT", "INVISIBLE", "INVOKER", 
                      "IO", "IO_THREAD", "IPC", "ISOLATION", "ISSUER", "JSON", 
                      "KEY_BLOCK_SIZE", "LANGUAGE", "LAST", "LEAVES", "LESS", 
                      "LEVEL", "LIST", "LOCAL", "LOGFILE", "LOGS", "MASTER", 
                      "MASTER_AUTO_POSITION", "MASTER_CONNECT_RETRY", "MASTER_DELAY", 
                      "MASTER_HEARTBEAT_PERIOD", "MASTER_HOST", "MASTER_LOG_FILE", 
                      "MASTER_LOG_POS", "MASTER_PASSWORD", "MASTER_PORT", 
                      "MASTER_RETRY_COUNT", "MASTER_SSL", "MASTER_SSL_CA", 
                      "MASTER_SSL_CAPATH", "MASTER_SSL_CERT", "MASTER_SSL_CIPHER", 
                      "MASTER_SSL_CRL", "MASTER_SSL_CRLPATH", "MASTER_SSL_KEY", 
                      "MASTER_TLS_VERSION", "MASTER_USER", "MAX_CONNECTIONS_PER_HOUR", 
                      "MAX_QUERIES_PER_HOUR", "MAX_ROWS", "MAX_SIZE", "MAX_UPDATES_PER_HOUR", 
                      "MAX_USER_CONNECTIONS", "MEDIUM", "MEMBER", "MERGE", 
                      "MESSAGE_TEXT", "MID", "MIGRATE", "MIN_ROWS", "MODE", 
                      "MODIFY", "MUTEX", "MYSQL", "MYSQL_ERRNO", "NAME", 
                      "NAMES", "NCHAR", "NEVER", "NEXT", "NO", "NOCACHE", 
                      "NOCOPY", "NOCYCLE", "NOMAXVALUE", "NOMINVALUE", "NOWAIT", 
                      "NODEGROUP", "NONE", "ODBC", "OFFLINE", "OFFSET", 
                      "OF", "OJ", "OLD_PASSWORD", "ONE", "ONLINE", "ONLY", 
                      "OPEN", "OPTIMIZER_COSTS", "OPTIONS", "OWNER", "PACK_KEYS", 
                      "PAGE", "PAGE_COMPRESSED", "PAGE_COMPRESSION_LEVEL", 
                      "PARSER", "PARTIAL", "PARTITIONING", "PARTITIONS", 
                      "PASSWORD", "PASSWORD_LOCK_TIME", "PHASE", "PLUGIN", 
                      "PLUGIN_DIR", "PLUGINS", "PORT", "PRECEDES", "PRECEDING", 
                      "PREPARE", "PRESERVE", "PREV", "PROCESSLIST", "PROFILE", 
                      "PROFILES", "PROXY", "QUERY", "QUICK", "REBUILD", 
                      "RECOVER", "RECURSIVE", "REDO_BUFFER_SIZE", "REDUNDANT", 
                      "RELAY", "RELAY_LOG_FILE", "RELAY_LOG_POS", "RELAYLOG", 
                      "REMOVE", "REORGANIZE", "REPAIR", "REPLICATE_DO_DB", 
                      "REPLICATE_DO_TABLE", "REPLICATE_IGNORE_DB", "REPLICATE_IGNORE_TABLE", 
                      "REPLICATE_REWRITE_DB", "REPLICATE_WILD_DO_TABLE", 
                      "REPLICATE_WILD_IGNORE_TABLE", "REPLICATION", "RESET", 
                      "RESTART", "RESUME", "RETURNED_SQLSTATE", "RETURNING", 
                      "RETURNS", "REUSE", "ROLE", "ROLLBACK", "ROLLUP", 
                      "ROTATE", "ROW", "ROWS", "ROW_FORMAT", "RTREE", "SAVEPOINT", 
                      "SCHEDULE", "SECURITY", "SEQUENCE", "SERVER", "SESSION", 
                      "SHARE", "SHARED", "SIGNED", "SIMPLE", "SLAVE", "SLOW", 
                      "SNAPSHOT", "SOCKET", "SOME", "SONAME", "SOUNDS", 
                      "SOURCE", "SQL_AFTER_GTIDS", "SQL_AFTER_MTS_GAPS", 
                      "SQL_BEFORE_GTIDS", "SQL_BUFFER_RESULT", "SQL_CACHE", 
                      "SQL_NO_CACHE", "SQL_THREAD", "START", "STARTS", "STATS_AUTO_RECALC", 
                      "STATS_PERSISTENT", "STATS_SAMPLE_PAGES", "STATUS", 
                      "STOP", "STORAGE", "STORED", "STRING", "SUBCLASS_ORIGIN", 
                      "SUBJECT", "SUBPARTITION", "SUBPARTITIONS", "SUSPEND", 
                      "SWAPS", "SWITCHES", "TABLE_NAME", "TABLESPACE", "TABLE_TYPE", 
                      "TEMPORARY", "TEMPTABLE", "THAN", "TRADITIONAL", "TRANSACTION", 
                      "TRANSACTIONAL", "TRIGGERS", "TRUNCATE", "UNBOUNDED", 
                      "UNDEFINED", "UNDOFILE", "UNDO_BUFFER_SIZE", "UNINSTALL", 
                      "UNKNOWN", "UNTIL", "UPGRADE", "USER", "USE_FRM", 
                      "USER_RESOURCES", "VALIDATION", "VALUE", "VARIABLES", 
                      "VIEW", "VIRTUAL", "VISIBLE", "WAIT", "WARNINGS", 
                      "WINDOW", "WITHOUT", "WORK", "WRAPPER", "X509", "XA", 
                      "XML", "YES", "EUR", "USA", "JIS", "ISO", "INTERNAL", 
                      "QUARTER", "MONTH", "DAY", "HOUR", "MINUTE", "WEEK", 
                      "SECOND", "MICROSECOND", "ADMIN", "APPLICATION_PASSWORD_ADMIN", 
                      "AUDIT_ABORT_EXEMPT", "AUDIT_ADMIN", "AUTHENTICATION_POLICY_ADMIN", 
                      "BACKUP_ADMIN", "BINLOG_ADMIN", "BINLOG_ENCRYPTION_ADMIN", 
                      "CLONE_ADMIN", "CONNECTION_ADMIN", "ENCRYPTION_KEY_ADMIN", 
                      "EXECUTE", "FILE", "FIREWALL_ADMIN", "FIREWALL_EXEMPT", 
                      "FIREWALL_USER", "FLUSH_OPTIMIZER_COSTS", "FLUSH_STATUS", 
                      "FLUSH_TABLES", "FLUSH_USER_RESOURCES", "GROUP_REPLICATION_ADMIN", 
                      "INNODB_REDO_LOG_ARCHIVE", "INNODB_REDO_LOG_ENABLE", 
                      "INVOKE", "LAMBDA", "NDB_STORED_USER", "PASSWORDLESS_USER_ADMIN", 
                      "PERSIST_RO_VARIABLES_ADMIN", "PRIVILEGES", "PROCESS", 
                      "RELOAD", "REPLICATION_APPLIER", "REPLICATION_SLAVE_ADMIN", 
                      "RESOURCE_GROUP_ADMIN", "RESOURCE_GROUP_USER", "ROLE_ADMIN", 
                      "ROUTINE", "S3", "SERVICE_CONNECTION_ADMIN", "SESSION_VARIABLES_ADMIN", 
                      "SET_USER_ID", "SHOW_ROUTINE", "SHUTDOWN", "SUPER", 
                      "SYSTEM_VARIABLES_ADMIN", "TABLES", "TABLE_ENCRYPTION_ADMIN", 
                      "VERSION_TOKEN_ADMIN", "XA_RECOVER_ADMIN", "ARMSCII8", 
                      "ASCII", "BIG5", "CP1250", "CP1251", "CP1256", "CP1257", 
                      "CP850", "CP852", "CP866", "CP932", "DEC8", "EUCJPMS", 
                      "EUCKR", "GB18030", "GB2312", "GBK", "GEOSTD8", "GREEK", 
                      "HEBREW", "HP8", "KEYBCS2", "KOI8R", "KOI8U", "LATIN1", 
                      "LATIN2", "LATIN5", "LATIN7", "MACCE", "MACROMAN", 
                      "SJIS", "SWE7", "TIS620", "UCS2", "UJIS", "UTF16", 
                      "UTF16LE", "UTF32", "UTF8", "UTF8MB3", "UTF8MB4", 
                      "ARCHIVE", "BLACKHOLE", "CSV", "FEDERATED", "INNODB", 
                      "MEMORY", "MRG_MYISAM", "MYISAM", "NDB", "NDBCLUSTER", 
                      "PERFORMANCE_SCHEMA", "TOKUDB", "REPEATABLE", "COMMITTED", 
                      "UNCOMMITTED", "SERIALIZABLE", "GEOMETRYCOLLECTION", 
                      "GEOMCOLLECTION", "GEOMETRY", "LINESTRING", "MULTILINESTRING", 
                      "MULTIPOINT", "MULTIPOLYGON", "POINT", "POLYGON", 
                      "ABS", "ACOS", "ADDDATE", "ADDTIME", "AES_DECRYPT", 
                      "AES_ENCRYPT", "AREA", "ASBINARY", "ASIN", "ASTEXT", 
                      "ASWKB", "ASWKT", "ASYMMETRIC_DECRYPT", "ASYMMETRIC_DERIVE", 
                      "ASYMMETRIC_ENCRYPT", "ASYMMETRIC_SIGN", "ASYMMETRIC_VERIFY", 
                      "ATAN", "ATAN2", "BENCHMARK", "BIN", "BIT_COUNT", 
                      "BIT_LENGTH", "BUFFER", "CATALOG_NAME", "CEIL", "CEILING", 
                      "CENTROID", "CHARACTER_LENGTH", "CHARSET", "CHAR_LENGTH", 
                      "COERCIBILITY", "COLLATION", "COMPRESS", "CONCAT", 
                      "CONCAT_WS", "CONNECTION_ID", "CONV", "CONVERT_TZ", 
                      "COS", "COT", "CRC32", "CREATE_ASYMMETRIC_PRIV_KEY", 
                      "CREATE_ASYMMETRIC_PUB_KEY", "CREATE_DH_PARAMETERS", 
                      "CREATE_DIGEST", "CROSSES", "DATEDIFF", "DATE_FORMAT", 
                      "DAYNAME", "DAYOFMONTH", "DAYOFWEEK", "DAYOFYEAR", 
                      "DECODE", "DEGREES", "DES_DECRYPT", "DES_ENCRYPT", 
                      "DIMENSION", "DISJOINT", "ELT", "ENCODE", "ENCRYPT", 
                      "ENDPOINT", "ENGINE_ATTRIBUTE", "ENVELOPE", "EQUALS", 
                      "EXP", "EXPORT_SET", "EXTERIORRING", "EXTRACTVALUE", 
                      "FIELD", "FIND_IN_SET", "FLOOR", "FORMAT", "FOUND_ROWS", 
                      "FROM_BASE64", "FROM_DAYS", "FROM_UNIXTIME", "GEOMCOLLFROMTEXT", 
                      "GEOMCOLLFROMWKB", "GEOMETRYCOLLECTIONFROMTEXT", "GEOMETRYCOLLECTIONFROMWKB", 
                      "GEOMETRYFROMTEXT", "GEOMETRYFROMWKB", "GEOMETRYN", 
                      "GEOMETRYTYPE", "GEOMFROMTEXT", "GEOMFROMWKB", "GET_FORMAT", 
                      "GET_LOCK", "GLENGTH", "GREATEST", "GTID_SUBSET", 
                      "GTID_SUBTRACT", "HEX", "IFNULL", "INET6_ATON", "INET6_NTOA", 
                      "INET_ATON", "INET_NTOA", "INSTR", "INTERIORRINGN", 
                      "INTERSECTS", "ISCLOSED", "ISEMPTY", "ISNULL", "ISSIMPLE", 
                      "IS_FREE_LOCK", "IS_IPV4", "IS_IPV4_COMPAT", "IS_IPV4_MAPPED", 
                      "IS_IPV6", "IS_USED_LOCK", "LAST_INSERT_ID", "LCASE", 
                      "LEAST", "LENGTH", "LINEFROMTEXT", "LINEFROMWKB", 
                      "LINESTRINGFROMTEXT", "LINESTRINGFROMWKB", "LN", "LOAD_FILE", 
                      "LOCATE", "LOG", "LOG10", "LOG2", "LOWER", "LPAD", 
                      "LTRIM", "MAKEDATE", "MAKETIME", "MAKE_SET", "MASTER_POS_WAIT", 
                      "MBRCONTAINS", "MBRDISJOINT", "MBREQUAL", "MBRINTERSECTS", 
                      "MBROVERLAPS", "MBRTOUCHES", "MBRWITHIN", "MD5", "MLINEFROMTEXT", 
                      "MLINEFROMWKB", "MONTHNAME", "MPOINTFROMTEXT", "MPOINTFROMWKB", 
                      "MPOLYFROMTEXT", "MPOLYFROMWKB", "MULTILINESTRINGFROMTEXT", 
                      "MULTILINESTRINGFROMWKB", "MULTIPOINTFROMTEXT", "MULTIPOINTFROMWKB", 
                      "MULTIPOLYGONFROMTEXT", "MULTIPOLYGONFROMWKB", "NAME_CONST", 
                      "NULLIF", "NUMGEOMETRIES", "NUMINTERIORRINGS", "NUMPOINTS", 
                      "OCT", "OCTET_LENGTH", "ORD", "OVERLAPS", "PERIOD_ADD", 
                      "PERIOD_DIFF", "PI", "POINTFROMTEXT", "POINTFROMWKB", 
                      "POINTN", "POLYFROMTEXT", "POLYFROMWKB", "POLYGONFROMTEXT", 
                      "POLYGONFROMWKB", "POW", "POWER", "QUOTE", "RADIANS", 
                      "RAND", "RANDOM", "RANDOM_BYTES", "RELEASE_LOCK", 
                      "REVERSE", "ROUND", "ROW_COUNT", "RPAD", "RTRIM", 
                      "SEC_TO_TIME", "SECONDARY_ENGINE_ATTRIBUTE", "SESSION_USER", 
                      "SHA", "SHA1", "SHA2", "SCHEMA_NAME", "SIGN", "SIN", 
                      "SLEEP", "SOUNDEX", "SQL_THREAD_WAIT_AFTER_GTIDS", 
                      "SQRT", "SRID", "STARTPOINT", "STRCMP", "STR_TO_DATE", 
                      "ST_AREA", "ST_ASBINARY", "ST_ASTEXT", "ST_ASWKB", 
                      "ST_ASWKT", "ST_BUFFER", "ST_CENTROID", "ST_CONTAINS", 
                      "ST_CROSSES", "ST_DIFFERENCE", "ST_DIMENSION", "ST_DISJOINT", 
                      "ST_DISTANCE", "ST_ENDPOINT", "ST_ENVELOPE", "ST_EQUALS", 
                      "ST_EXTERIORRING", "ST_GEOMCOLLFROMTEXT", "ST_GEOMCOLLFROMTXT", 
                      "ST_GEOMCOLLFROMWKB", "ST_GEOMETRYCOLLECTIONFROMTEXT", 
                      "ST_GEOMETRYCOLLECTIONFROMWKB", "ST_GEOMETRYFROMTEXT", 
                      "ST_GEOMETRYFROMWKB", "ST_GEOMETRYN", "ST_GEOMETRYTYPE", 
                      "ST_GEOMFROMTEXT", "ST_GEOMFROMWKB", "ST_INTERIORRINGN", 
                      "ST_INTERSECTION", "ST_INTERSECTS", "ST_ISCLOSED", 
                      "ST_ISEMPTY", "ST_ISSIMPLE", "ST_LINEFROMTEXT", "ST_LINEFROMWKB", 
                      "ST_LINESTRINGFROMTEXT", "ST_LINESTRINGFROMWKB", "ST_NUMGEOMETRIES", 
                      "ST_NUMINTERIORRING", "ST_NUMINTERIORRINGS", "ST_NUMPOINTS", 
                      "ST_OVERLAPS", "ST_POINTFROMTEXT", "ST_POINTFROMWKB", 
                      "ST_POINTN", "ST_POLYFROMTEXT", "ST_POLYFROMWKB", 
                      "ST_POLYGONFROMTEXT", "ST_POLYGONFROMWKB", "ST_SRID", 
                      "ST_STARTPOINT", "ST_SYMDIFFERENCE", "ST_TOUCHES", 
                      "ST_UNION", "ST_WITHIN", "ST_X", "ST_Y", "SUBDATE", 
                      "SUBSTRING_INDEX", "SUBTIME", "SYSTEM_USER", "TAN", 
                      "TIMEDIFF", "TIMESTAMPADD", "TIMESTAMPDIFF", "TIME_FORMAT", 
                      "TIME_TO_SEC", "TOUCHES", "TO_BASE64", "TO_DAYS", 
                      "TO_SECONDS", "TP_CONNECTION_ADMIN", "UCASE", "UNCOMPRESS", 
                      "UNCOMPRESSED_LENGTH", "UNHEX", "UNIX_TIMESTAMP", 
                      "UPDATEXML", "UPPER", "UUID", "UUID_SHORT", "VALIDATE_PASSWORD_STRENGTH", 
                      "VERSION", "WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS", "WEEKDAY", 
                      "WEEKOFYEAR", "WEIGHT_STRING", "WITHIN", "YEARWEEK", 
                      "Y_FUNCTION", "X_FUNCTION", "VAR_ASSIGN", "PLUS_ASSIGN", 
                      "MINUS_ASSIGN", "MULT_ASSIGN", "DIV_ASSIGN", "MOD_ASSIGN", 
                      "AND_ASSIGN", "XOR_ASSIGN", "OR_ASSIGN", "STAR", "DIVIDE", 
                      "MODULE", "PLUS", "MINUS", "DIV", "MOD", "EQUAL_SYMBOL", 
                      "GREATER_SYMBOL", "LESS_SYMBOL", "EXCLAMATION_SYMBOL", 
                      "BIT_NOT_OP", "BIT_OR_OP", "BIT_AND_OP", "BIT_XOR_OP", 
                      "DOT", "LR_BRACKET", "RR_BRACKET", "COMMA", "SEMI", 
                      "AT_SIGN", "ZERO_DECIMAL", "ONE_DECIMAL", "TWO_DECIMAL", 
                      "SINGLE_QUOTE_SYMB", "DOUBLE_QUOTE_SYMB", "REVERSE_QUOTE_SYMB", 
                      "COLON_SYMB", "CHARSET_REVERSE_QOUTE_STRING", "FILESIZE_LITERAL", 
                      "START_NATIONAL_STRING_LITERAL", "STRING_LITERAL", 
                      "DECIMAL_LITERAL", "HEXADECIMAL_LITERAL", "REAL_LITERAL", 
                      "NULL_SPEC_LITERAL", "BIT_STRING", "STRING_CHARSET_NAME", 
                      "DOT_ID", "ID", "REVERSE_QUOTE_ID", "HOST_IP_ADDRESS", 
                      "LOCAL_ID", "GLOBAL_ID", "ERROR_RECONGNIGION", "DQUOTA_STRING", 
                      "SQUOTA_STRING" ]

    RULE_root = 0
    RULE_sqlStatements = 1
    RULE_sqlStatement = 2
    RULE_emptyStatement_ = 3
    RULE_ddlStatement = 4
    RULE_dmlStatement = 5
    RULE_transactionStatement = 6
    RULE_replicationStatement = 7
    RULE_preparedStatement = 8
    RULE_compoundStatement = 9
    RULE_administrationStatement = 10
    RULE_utilityStatement = 11
    RULE_createDatabase = 12
    RULE_createEvent = 13
    RULE_createIndex = 14
    RULE_createLogfileGroup = 15
    RULE_createProcedure = 16
    RULE_createFunction = 17
    RULE_createRole = 18
    RULE_createServer = 19
    RULE_createTable = 20
    RULE_createTablespaceInnodb = 21
    RULE_createTablespaceNdb = 22
    RULE_createTrigger = 23
    RULE_withClause = 24
    RULE_commonTableExpressions = 25
    RULE_cteName = 26
    RULE_cteColumnName = 27
    RULE_createView = 28
    RULE_createDatabaseOption = 29
    RULE_charSet = 30
    RULE_currentUserExpression = 31
    RULE_ownerStatement = 32
    RULE_scheduleExpression = 33
    RULE_timestampValue = 34
    RULE_intervalExpr = 35
    RULE_intervalType = 36
    RULE_enableType = 37
    RULE_indexType = 38
    RULE_indexOption = 39
    RULE_procedureParameter = 40
    RULE_functionParameter = 41
    RULE_routineOption = 42
    RULE_serverOption = 43
    RULE_createDefinitions = 44
    RULE_createDefinition = 45
    RULE_columnDefinition = 46
    RULE_columnConstraint = 47
    RULE_tableConstraint = 48
    RULE_referenceDefinition = 49
    RULE_referenceAction = 50
    RULE_referenceControlType = 51
    RULE_indexColumnDefinition = 52
    RULE_tableOption = 53
    RULE_tableType = 54
    RULE_tablespaceStorage = 55
    RULE_partitionDefinitions = 56
    RULE_partitionFunctionDefinition = 57
    RULE_subpartitionFunctionDefinition = 58
    RULE_partitionDefinition = 59
    RULE_partitionDefinerAtom = 60
    RULE_partitionDefinerVector = 61
    RULE_subpartitionDefinition = 62
    RULE_partitionOption = 63
    RULE_alterDatabase = 64
    RULE_alterEvent = 65
    RULE_alterFunction = 66
    RULE_alterInstance = 67
    RULE_alterLogfileGroup = 68
    RULE_alterProcedure = 69
    RULE_alterServer = 70
    RULE_alterTable = 71
    RULE_alterTablespace = 72
    RULE_alterView = 73
    RULE_alterSpecification = 74
    RULE_alterPartitionSpecification = 75
    RULE_dropDatabase = 76
    RULE_dropEvent = 77
    RULE_dropIndex = 78
    RULE_dropLogfileGroup = 79
    RULE_dropProcedure = 80
    RULE_dropFunction = 81
    RULE_dropServer = 82
    RULE_dropTable = 83
    RULE_dropTablespace = 84
    RULE_dropTrigger = 85
    RULE_dropView = 86
    RULE_dropRole = 87
    RULE_setRole = 88
    RULE_renameTable = 89
    RULE_renameTableClause = 90
    RULE_truncateTable = 91
    RULE_callStatement = 92
    RULE_deleteStatement = 93
    RULE_doStatement = 94
    RULE_handlerStatement = 95
    RULE_insertStatement = 96
    RULE_loadDataStatement = 97
    RULE_loadXmlStatement = 98
    RULE_replaceStatement = 99
    RULE_selectStatement = 100
    RULE_updateStatement = 101
    RULE_valuesStatement = 102
    RULE_insertStatementValue = 103
    RULE_updatedElement = 104
    RULE_assignmentField = 105
    RULE_lockClause = 106
    RULE_singleDeleteStatement = 107
    RULE_multipleDeleteStatement = 108
    RULE_handlerOpenStatement = 109
    RULE_handlerReadIndexStatement = 110
    RULE_handlerReadStatement = 111
    RULE_handlerCloseStatement = 112
    RULE_singleUpdateStatement = 113
    RULE_multipleUpdateStatement = 114
    RULE_orderByClause = 115
    RULE_orderByExpression = 116
    RULE_tableSources = 117
    RULE_tableSource = 118
    RULE_tableSourceItem = 119
    RULE_indexHint = 120
    RULE_indexHintType = 121
    RULE_joinPart = 122
    RULE_joinSpec = 123
    RULE_queryExpression = 124
    RULE_queryExpressionNointo = 125
    RULE_querySpecification = 126
    RULE_querySpecificationNointo = 127
    RULE_unionParenthesis = 128
    RULE_unionStatement = 129
    RULE_lateralStatement = 130
    RULE_jsonTable = 131
    RULE_jsonColumnList = 132
    RULE_jsonColumn = 133
    RULE_jsonOnEmpty = 134
    RULE_jsonOnError = 135
    RULE_selectSpec = 136
    RULE_selectElements = 137
    RULE_selectElement = 138
    RULE_selectIntoExpression = 139
    RULE_selectFieldsInto = 140
    RULE_selectLinesInto = 141
    RULE_fromClause = 142
    RULE_groupByClause = 143
    RULE_havingClause = 144
    RULE_windowClause = 145
    RULE_groupByItem = 146
    RULE_limitClause = 147
    RULE_limitClauseAtom = 148
    RULE_startTransaction = 149
    RULE_beginWork = 150
    RULE_commitWork = 151
    RULE_rollbackWork = 152
    RULE_savepointStatement = 153
    RULE_rollbackStatement = 154
    RULE_releaseStatement = 155
    RULE_lockTables = 156
    RULE_unlockTables = 157
    RULE_setAutocommitStatement = 158
    RULE_setTransactionStatement = 159
    RULE_transactionMode = 160
    RULE_lockTableElement = 161
    RULE_lockAction = 162
    RULE_transactionOption = 163
    RULE_transactionLevel = 164
    RULE_changeMaster = 165
    RULE_changeReplicationFilter = 166
    RULE_purgeBinaryLogs = 167
    RULE_resetMaster = 168
    RULE_resetSlave = 169
    RULE_startSlave = 170
    RULE_stopSlave = 171
    RULE_startGroupReplication = 172
    RULE_stopGroupReplication = 173
    RULE_masterOption = 174
    RULE_stringMasterOption = 175
    RULE_decimalMasterOption = 176
    RULE_boolMasterOption = 177
    RULE_channelOption = 178
    RULE_replicationFilter = 179
    RULE_tablePair = 180
    RULE_threadType = 181
    RULE_untilOption = 182
    RULE_connectionOption = 183
    RULE_gtuidSet = 184
    RULE_xaStartTransaction = 185
    RULE_xaEndTransaction = 186
    RULE_xaPrepareStatement = 187
    RULE_xaCommitWork = 188
    RULE_xaRollbackWork = 189
    RULE_xaRecoverWork = 190
    RULE_prepareStatement = 191
    RULE_executeStatement = 192
    RULE_deallocatePrepare = 193
    RULE_routineBody = 194
    RULE_blockStatement = 195
    RULE_caseStatement = 196
    RULE_ifStatement = 197
    RULE_iterateStatement = 198
    RULE_leaveStatement = 199
    RULE_loopStatement = 200
    RULE_repeatStatement = 201
    RULE_returnStatement = 202
    RULE_whileStatement = 203
    RULE_cursorStatement = 204
    RULE_declareVariable = 205
    RULE_declareCondition = 206
    RULE_declareCursor = 207
    RULE_declareHandler = 208
    RULE_handlerConditionValue = 209
    RULE_procedureSqlStatement = 210
    RULE_caseAlternative = 211
    RULE_elifAlternative = 212
    RULE_alterUser = 213
    RULE_createUser = 214
    RULE_dropUser = 215
    RULE_grantStatement = 216
    RULE_roleOption = 217
    RULE_grantProxy = 218
    RULE_renameUser = 219
    RULE_revokeStatement = 220
    RULE_revokeProxy = 221
    RULE_setPasswordStatement = 222
    RULE_userSpecification = 223
    RULE_userAuthOption = 224
    RULE_authOptionClause = 225
    RULE_authenticationRule = 226
    RULE_tlsOption = 227
    RULE_userResourceOption = 228
    RULE_userPasswordOption = 229
    RULE_userLockOption = 230
    RULE_privelegeClause = 231
    RULE_privilege = 232
    RULE_privilegeLevel = 233
    RULE_renameUserClause = 234
    RULE_analyzeTable = 235
    RULE_checkTable = 236
    RULE_checksumTable = 237
    RULE_optimizeTable = 238
    RULE_repairTable = 239
    RULE_checkTableOption = 240
    RULE_createUdfunction = 241
    RULE_installPlugin = 242
    RULE_uninstallPlugin = 243
    RULE_setStatement = 244
    RULE_showStatement = 245
    RULE_variableClause = 246
    RULE_showCommonEntity = 247
    RULE_showFilter = 248
    RULE_showGlobalInfoClause = 249
    RULE_showSchemaEntity = 250
    RULE_showProfileType = 251
    RULE_binlogStatement = 252
    RULE_cacheIndexStatement = 253
    RULE_flushStatement = 254
    RULE_killStatement = 255
    RULE_loadIndexIntoCache = 256
    RULE_resetStatement = 257
    RULE_shutdownStatement = 258
    RULE_tableIndexes = 259
    RULE_flushOption = 260
    RULE_flushTableOption = 261
    RULE_loadedTableIndexes = 262
    RULE_simpleDescribeStatement = 263
    RULE_fullDescribeStatement = 264
    RULE_helpStatement = 265
    RULE_useStatement = 266
    RULE_signalStatement = 267
    RULE_resignalStatement = 268
    RULE_signalConditionInformation = 269
    RULE_withStatement = 270
    RULE_tableStatement = 271
    RULE_diagnosticsStatement = 272
    RULE_diagnosticsConditionInformationName = 273
    RULE_describeObjectClause = 274
    RULE_fullId = 275
    RULE_tableName = 276
    RULE_roleName = 277
    RULE_fullColumnName = 278
    RULE_indexColumnName = 279
    RULE_simpleUserName = 280
    RULE_hostName = 281
    RULE_userName = 282
    RULE_mysqlVariable = 283
    RULE_charsetName = 284
    RULE_collationName = 285
    RULE_engineName = 286
    RULE_engineNameBase = 287
    RULE_uuidSet = 288
    RULE_xid = 289
    RULE_xuidStringId = 290
    RULE_authPlugin = 291
    RULE_uid = 292
    RULE_simpleId = 293
    RULE_dottedId = 294
    RULE_decimalLiteral = 295
    RULE_fileSizeLiteral = 296
    RULE_stringLiteral = 297
    RULE_booleanLiteral = 298
    RULE_hexadecimalLiteral = 299
    RULE_nullNotnull = 300
    RULE_constant = 301
    RULE_dataType = 302
    RULE_collectionOptions = 303
    RULE_convertedDataType = 304
    RULE_lengthOneDimension = 305
    RULE_lengthTwoDimension = 306
    RULE_lengthTwoOptionalDimension = 307
    RULE_uidList = 308
    RULE_fullColumnNameList = 309
    RULE_tables = 310
    RULE_indexColumnNames = 311
    RULE_expressions = 312
    RULE_expressionsWithDefaults = 313
    RULE_constants = 314
    RULE_simpleStrings = 315
    RULE_userVariables = 316
    RULE_defaultValue = 317
    RULE_currentTimestamp = 318
    RULE_expressionOrDefault = 319
    RULE_ifExists = 320
    RULE_ifNotExists = 321
    RULE_orReplace = 322
    RULE_waitNowaitClause = 323
    RULE_functionCall = 324
    RULE_specificFunction = 325
    RULE_caseFuncAlternative = 326
    RULE_levelsInWeightString = 327
    RULE_levelInWeightListElement = 328
    RULE_aggregateWindowedFunction = 329
    RULE_nonAggregateWindowedFunction = 330
    RULE_overClause = 331
    RULE_windowSpec = 332
    RULE_windowName = 333
    RULE_frameClause = 334
    RULE_frameUnits = 335
    RULE_frameExtent = 336
    RULE_frameBetween = 337
    RULE_frameRange = 338
    RULE_partitionClause = 339
    RULE_scalarFunctionName = 340
    RULE_passwordFunctionClause = 341
    RULE_functionArgs = 342
    RULE_functionArg = 343
    RULE_expression = 344
    RULE_predicate = 345
    RULE_expressionAtom = 346
    RULE_unaryOperator = 347
    RULE_comparisonOperator = 348
    RULE_logicalOperator = 349
    RULE_bitOperator = 350
    RULE_multOperator = 351
    RULE_addOperator = 352
    RULE_jsonOperator = 353
    RULE_charsetNameBase = 354
    RULE_transactionLevelBase = 355
    RULE_privilegesBase = 356
    RULE_intervalTypeBase = 357
    RULE_dataTypeBase = 358
    RULE_keywordsCanBeId = 359
    RULE_functionNameBase = 360

    ruleNames =  [ "root", "sqlStatements", "sqlStatement", "emptyStatement_", 
                   "ddlStatement", "dmlStatement", "transactionStatement", 
                   "replicationStatement", "preparedStatement", "compoundStatement", 
                   "administrationStatement", "utilityStatement", "createDatabase", 
                   "createEvent", "createIndex", "createLogfileGroup", "createProcedure", 
                   "createFunction", "createRole", "createServer", "createTable", 
                   "createTablespaceInnodb", "createTablespaceNdb", "createTrigger", 
                   "withClause", "commonTableExpressions", "cteName", "cteColumnName", 
                   "createView", "createDatabaseOption", "charSet", "currentUserExpression", 
                   "ownerStatement", "scheduleExpression", "timestampValue", 
                   "intervalExpr", "intervalType", "enableType", "indexType", 
                   "indexOption", "procedureParameter", "functionParameter", 
                   "routineOption", "serverOption", "createDefinitions", 
                   "createDefinition", "columnDefinition", "columnConstraint", 
                   "tableConstraint", "referenceDefinition", "referenceAction", 
                   "referenceControlType", "indexColumnDefinition", "tableOption", 
                   "tableType", "tablespaceStorage", "partitionDefinitions", 
                   "partitionFunctionDefinition", "subpartitionFunctionDefinition", 
                   "partitionDefinition", "partitionDefinerAtom", "partitionDefinerVector", 
                   "subpartitionDefinition", "partitionOption", "alterDatabase", 
                   "alterEvent", "alterFunction", "alterInstance", "alterLogfileGroup", 
                   "alterProcedure", "alterServer", "alterTable", "alterTablespace", 
                   "alterView", "alterSpecification", "alterPartitionSpecification", 
                   "dropDatabase", "dropEvent", "dropIndex", "dropLogfileGroup", 
                   "dropProcedure", "dropFunction", "dropServer", "dropTable", 
                   "dropTablespace", "dropTrigger", "dropView", "dropRole", 
                   "setRole", "renameTable", "renameTableClause", "truncateTable", 
                   "callStatement", "deleteStatement", "doStatement", "handlerStatement", 
                   "insertStatement", "loadDataStatement", "loadXmlStatement", 
                   "replaceStatement", "selectStatement", "updateStatement", 
                   "valuesStatement", "insertStatementValue", "updatedElement", 
                   "assignmentField", "lockClause", "singleDeleteStatement", 
                   "multipleDeleteStatement", "handlerOpenStatement", "handlerReadIndexStatement", 
                   "handlerReadStatement", "handlerCloseStatement", "singleUpdateStatement", 
                   "multipleUpdateStatement", "orderByClause", "orderByExpression", 
                   "tableSources", "tableSource", "tableSourceItem", "indexHint", 
                   "indexHintType", "joinPart", "joinSpec", "queryExpression", 
                   "queryExpressionNointo", "querySpecification", "querySpecificationNointo", 
                   "unionParenthesis", "unionStatement", "lateralStatement", 
                   "jsonTable", "jsonColumnList", "jsonColumn", "jsonOnEmpty", 
                   "jsonOnError", "selectSpec", "selectElements", "selectElement", 
                   "selectIntoExpression", "selectFieldsInto", "selectLinesInto", 
                   "fromClause", "groupByClause", "havingClause", "windowClause", 
                   "groupByItem", "limitClause", "limitClauseAtom", "startTransaction", 
                   "beginWork", "commitWork", "rollbackWork", "savepointStatement", 
                   "rollbackStatement", "releaseStatement", "lockTables", 
                   "unlockTables", "setAutocommitStatement", "setTransactionStatement", 
                   "transactionMode", "lockTableElement", "lockAction", 
                   "transactionOption", "transactionLevel", "changeMaster", 
                   "changeReplicationFilter", "purgeBinaryLogs", "resetMaster", 
                   "resetSlave", "startSlave", "stopSlave", "startGroupReplication", 
                   "stopGroupReplication", "masterOption", "stringMasterOption", 
                   "decimalMasterOption", "boolMasterOption", "channelOption", 
                   "replicationFilter", "tablePair", "threadType", "untilOption", 
                   "connectionOption", "gtuidSet", "xaStartTransaction", 
                   "xaEndTransaction", "xaPrepareStatement", "xaCommitWork", 
                   "xaRollbackWork", "xaRecoverWork", "prepareStatement", 
                   "executeStatement", "deallocatePrepare", "routineBody", 
                   "blockStatement", "caseStatement", "ifStatement", "iterateStatement", 
                   "leaveStatement", "loopStatement", "repeatStatement", 
                   "returnStatement", "whileStatement", "cursorStatement", 
                   "declareVariable", "declareCondition", "declareCursor", 
                   "declareHandler", "handlerConditionValue", "procedureSqlStatement", 
                   "caseAlternative", "elifAlternative", "alterUser", "createUser", 
                   "dropUser", "grantStatement", "roleOption", "grantProxy", 
                   "renameUser", "revokeStatement", "revokeProxy", "setPasswordStatement", 
                   "userSpecification", "userAuthOption", "authOptionClause", 
                   "authenticationRule", "tlsOption", "userResourceOption", 
                   "userPasswordOption", "userLockOption", "privelegeClause", 
                   "privilege", "privilegeLevel", "renameUserClause", "analyzeTable", 
                   "checkTable", "checksumTable", "optimizeTable", "repairTable", 
                   "checkTableOption", "createUdfunction", "installPlugin", 
                   "uninstallPlugin", "setStatement", "showStatement", "variableClause", 
                   "showCommonEntity", "showFilter", "showGlobalInfoClause", 
                   "showSchemaEntity", "showProfileType", "binlogStatement", 
                   "cacheIndexStatement", "flushStatement", "killStatement", 
                   "loadIndexIntoCache", "resetStatement", "shutdownStatement", 
                   "tableIndexes", "flushOption", "flushTableOption", "loadedTableIndexes", 
                   "simpleDescribeStatement", "fullDescribeStatement", "helpStatement", 
                   "useStatement", "signalStatement", "resignalStatement", 
                   "signalConditionInformation", "withStatement", "tableStatement", 
                   "diagnosticsStatement", "diagnosticsConditionInformationName", 
                   "describeObjectClause", "fullId", "tableName", "roleName", 
                   "fullColumnName", "indexColumnName", "simpleUserName", 
                   "hostName", "userName", "mysqlVariable", "charsetName", 
                   "collationName", "engineName", "engineNameBase", "uuidSet", 
                   "xid", "xuidStringId", "authPlugin", "uid", "simpleId", 
                   "dottedId", "decimalLiteral", "fileSizeLiteral", "stringLiteral", 
                   "booleanLiteral", "hexadecimalLiteral", "nullNotnull", 
                   "constant", "dataType", "collectionOptions", "convertedDataType", 
                   "lengthOneDimension", "lengthTwoDimension", "lengthTwoOptionalDimension", 
                   "uidList", "fullColumnNameList", "tables", "indexColumnNames", 
                   "expressions", "expressionsWithDefaults", "constants", 
                   "simpleStrings", "userVariables", "defaultValue", "currentTimestamp", 
                   "expressionOrDefault", "ifExists", "ifNotExists", "orReplace", 
                   "waitNowaitClause", "functionCall", "specificFunction", 
                   "caseFuncAlternative", "levelsInWeightString", "levelInWeightListElement", 
                   "aggregateWindowedFunction", "nonAggregateWindowedFunction", 
                   "overClause", "windowSpec", "windowName", "frameClause", 
                   "frameUnits", "frameExtent", "frameBetween", "frameRange", 
                   "partitionClause", "scalarFunctionName", "passwordFunctionClause", 
                   "functionArgs", "functionArg", "expression", "predicate", 
                   "expressionAtom", "unaryOperator", "comparisonOperator", 
                   "logicalOperator", "bitOperator", "multOperator", "addOperator", 
                   "jsonOperator", "charsetNameBase", "transactionLevelBase", 
                   "privilegesBase", "intervalTypeBase", "dataTypeBase", 
                   "keywordsCanBeId", "functionNameBase" ]

    EOF = Token.EOF
    SPACE=1
    SPEC_MYSQL_COMMENT=2
    COMMENT_INPUT=3
    LINE_COMMENT=4
    ADD=5
    ALL=6
    ALTER=7
    ALWAYS=8
    ANALYZE=9
    AND=10
    ARRAY=11
    AS=12
    ASC=13
    ATTRIBUTE=14
    BEFORE=15
    BETWEEN=16
    BOTH=17
    BUCKETS=18
    BY=19
    CALL=20
    CASCADE=21
    CASE=22
    CAST=23
    CHANGE=24
    CHARACTER=25
    CHECK=26
    COLLATE=27
    COLUMN=28
    CONDITION=29
    CONSTRAINT=30
    CONTINUE=31
    CONVERT=32
    CREATE=33
    CROSS=34
    CURRENT=35
    CURRENT_ROLE=36
    CURRENT_USER=37
    CURSOR=38
    DATABASE=39
    DATABASES=40
    DECLARE=41
    DEFAULT=42
    DELAYED=43
    DELETE=44
    DESC=45
    DESCRIBE=46
    DETERMINISTIC=47
    DIAGNOSTICS=48
    DISTINCT=49
    DISTINCTROW=50
    DROP=51
    EACH=52
    ELSE=53
    ELSEIF=54
    EMPTY=55
    ENCLOSED=56
    ENFORCED=57
    ESCAPED=58
    EXCEPT=59
    EXISTS=60
    EXIT=61
    EXPLAIN=62
    FALSE=63
    FETCH=64
    FOR=65
    FORCE=66
    FOREIGN=67
    FROM=68
    FULLTEXT=69
    GENERATED=70
    GET=71
    GRANT=72
    GROUP=73
    HAVING=74
    HIGH_PRIORITY=75
    HISTOGRAM=76
    IF=77
    IGNORE=78
    IGNORED=79
    IN=80
    INDEX=81
    INFILE=82
    INNER=83
    INOUT=84
    INSERT=85
    INTERVAL=86
    INTO=87
    IS=88
    ITERATE=89
    JOIN=90
    KEY=91
    KEYS=92
    KILL=93
    LATERAL=94
    LEADING=95
    LEAVE=96
    LEFT=97
    LIKE=98
    LIMIT=99
    LINEAR=100
    LINES=101
    LOAD=102
    LOCK=103
    LOCKED=104
    LOOP=105
    LOW_PRIORITY=106
    MASTER_BIND=107
    MASTER_SSL_VERIFY_SERVER_CERT=108
    MATCH=109
    MAXVALUE=110
    MINVALUE=111
    MODIFIES=112
    NATURAL=113
    NOT=114
    NO_WRITE_TO_BINLOG=115
    NULL_LITERAL=116
    NUMBER=117
    ON=118
    OPTIMIZE=119
    OPTION=120
    OPTIONAL=121
    OPTIONALLY=122
    OR=123
    ORDER=124
    OUT=125
    OUTER=126
    OUTFILE=127
    OVER=128
    PARTITION=129
    PRIMARY=130
    PROCEDURE=131
    PURGE=132
    RANGE=133
    READ=134
    READS=135
    REFERENCES=136
    REGEXP=137
    RELEASE=138
    RENAME=139
    REPEAT=140
    REPLACE=141
    REQUIRE=142
    RESIGNAL=143
    RESTRICT=144
    RETAIN=145
    RETURN=146
    REVOKE=147
    RIGHT=148
    RLIKE=149
    SCHEMA=150
    SCHEMAS=151
    SELECT=152
    SET=153
    SEPARATOR=154
    SHOW=155
    SIGNAL=156
    SKIP_=157
    SKIP_QUERY_REWRITE=158
    SPATIAL=159
    SQL=160
    SQLEXCEPTION=161
    SQLSTATE=162
    SQLWARNING=163
    SQL_BIG_RESULT=164
    SQL_CALC_FOUND_ROWS=165
    SQL_SMALL_RESULT=166
    SSL=167
    STACKED=168
    STARTING=169
    STATEMENT=170
    STRAIGHT_JOIN=171
    TABLE=172
    TERMINATED=173
    THEN=174
    TO=175
    TRAILING=176
    TRIGGER=177
    TRUE=178
    UNDO=179
    UNION=180
    UNIQUE=181
    UNLOCK=182
    UNSIGNED=183
    UPDATE=184
    USAGE=185
    USE=186
    USING=187
    VALUES=188
    WHEN=189
    WHERE=190
    WHILE=191
    WITH=192
    WRITE=193
    XOR=194
    ZEROFILL=195
    TINYINT=196
    SMALLINT=197
    MEDIUMINT=198
    MIDDLEINT=199
    INT=200
    INT1=201
    INT2=202
    INT3=203
    INT4=204
    INT8=205
    INTEGER=206
    BIGINT=207
    REAL=208
    DOUBLE=209
    PRECISION=210
    FLOAT=211
    FLOAT4=212
    FLOAT8=213
    DECIMAL=214
    DEC=215
    NUMERIC=216
    DATE=217
    TIME=218
    TIMESTAMP=219
    DATETIME=220
    YEAR=221
    CHAR=222
    VARCHAR=223
    NVARCHAR=224
    NATIONAL=225
    BINARY=226
    VARBINARY=227
    TINYBLOB=228
    BLOB=229
    MEDIUMBLOB=230
    LONG=231
    LONGBLOB=232
    TINYTEXT=233
    TEXT=234
    MEDIUMTEXT=235
    LONGTEXT=236
    ENUM=237
    VARYING=238
    SERIAL=239
    YEAR_MONTH=240
    DAY_HOUR=241
    DAY_MINUTE=242
    DAY_SECOND=243
    HOUR_MINUTE=244
    HOUR_SECOND=245
    MINUTE_SECOND=246
    SECOND_MICROSECOND=247
    MINUTE_MICROSECOND=248
    HOUR_MICROSECOND=249
    DAY_MICROSECOND=250
    JSON_ARRAY=251
    JSON_ARRAYAGG=252
    JSON_ARRAY_APPEND=253
    JSON_ARRAY_INSERT=254
    JSON_CONTAINS=255
    JSON_CONTAINS_PATH=256
    JSON_DEPTH=257
    JSON_EXTRACT=258
    JSON_INSERT=259
    JSON_KEYS=260
    JSON_LENGTH=261
    JSON_MERGE=262
    JSON_MERGE_PATCH=263
    JSON_MERGE_PRESERVE=264
    JSON_OBJECT=265
    JSON_OBJECTAGG=266
    JSON_OVERLAPS=267
    JSON_PRETTY=268
    JSON_QUOTE=269
    JSON_REMOVE=270
    JSON_REPLACE=271
    JSON_SCHEMA_VALID=272
    JSON_SCHEMA_VALIDATION_REPORT=273
    JSON_SEARCH=274
    JSON_SET=275
    JSON_STORAGE_FREE=276
    JSON_STORAGE_SIZE=277
    JSON_TABLE=278
    JSON_TYPE=279
    JSON_UNQUOTE=280
    JSON_VALID=281
    JSON_VALUE=282
    NESTED=283
    ORDINALITY=284
    PATH=285
    AVG=286
    BIT_AND=287
    BIT_OR=288
    BIT_XOR=289
    COUNT=290
    CUME_DIST=291
    DENSE_RANK=292
    FIRST_VALUE=293
    GROUP_CONCAT=294
    LAG=295
    LAST_VALUE=296
    LEAD=297
    MAX=298
    MIN=299
    NTILE=300
    NTH_VALUE=301
    PERCENT_RANK=302
    RANK=303
    ROW_NUMBER=304
    STD=305
    STDDEV=306
    STDDEV_POP=307
    STDDEV_SAMP=308
    SUM=309
    VAR_POP=310
    VAR_SAMP=311
    VARIANCE=312
    CURRENT_DATE=313
    CURRENT_TIME=314
    CURRENT_TIMESTAMP=315
    LOCALTIME=316
    CURDATE=317
    CURTIME=318
    DATE_ADD=319
    DATE_SUB=320
    EXTRACT=321
    LOCALTIMESTAMP=322
    NOW=323
    POSITION=324
    SUBSTR=325
    SUBSTRING=326
    SYSDATE=327
    TRIM=328
    UTC_DATE=329
    UTC_TIME=330
    UTC_TIMESTAMP=331
    ACCOUNT=332
    ACTION=333
    AFTER=334
    AGGREGATE=335
    ALGORITHM=336
    ANY=337
    AT=338
    AUTHORS=339
    AUTOCOMMIT=340
    AUTOEXTEND_SIZE=341
    AUTO_INCREMENT=342
    AVG_ROW_LENGTH=343
    BEGIN=344
    BINLOG=345
    BIT=346
    BLOCK=347
    BOOL=348
    BOOLEAN=349
    BTREE=350
    CACHE=351
    CASCADED=352
    CHAIN=353
    CHANGED=354
    CHANNEL=355
    CHECKSUM=356
    PAGE_CHECKSUM=357
    CIPHER=358
    CLASS_ORIGIN=359
    CLIENT=360
    CLOSE=361
    CLUSTERING=362
    COALESCE=363
    CODE=364
    COLUMNS=365
    COLUMN_FORMAT=366
    COLUMN_NAME=367
    COMMENT=368
    COMMIT=369
    COMPACT=370
    COMPLETION=371
    COMPRESSED=372
    COMPRESSION=373
    CONCURRENT=374
    CONNECT=375
    CONNECTION=376
    CONSISTENT=377
    CONSTRAINT_CATALOG=378
    CONSTRAINT_SCHEMA=379
    CONSTRAINT_NAME=380
    CONTAINS=381
    CONTEXT=382
    CONTRIBUTORS=383
    COPY=384
    CPU=385
    CYCLE=386
    CURSOR_NAME=387
    DATA=388
    DATAFILE=389
    DEALLOCATE=390
    DEFAULT_AUTH=391
    DEFINER=392
    DELAY_KEY_WRITE=393
    DES_KEY_FILE=394
    DIRECTORY=395
    DISABLE=396
    DISCARD=397
    DISK=398
    DO=399
    DUMPFILE=400
    DUPLICATE=401
    DYNAMIC=402
    ENABLE=403
    ENCRYPTED=404
    ENCRYPTION=405
    ENCRYPTION_KEY_ID=406
    END=407
    ENDS=408
    ENGINE=409
    ENGINES=410
    ERROR=411
    ERRORS=412
    ESCAPE=413
    EVEN=414
    EVENT=415
    EVENTS=416
    EVERY=417
    EXCHANGE=418
    EXCLUSIVE=419
    EXPIRE=420
    EXPORT=421
    EXTENDED=422
    EXTENT_SIZE=423
    FAILED_LOGIN_ATTEMPTS=424
    FAST=425
    FAULTS=426
    FIELDS=427
    FILE_BLOCK_SIZE=428
    FILTER=429
    FIRST=430
    FIXED=431
    FLUSH=432
    FOLLOWING=433
    FOLLOWS=434
    FOUND=435
    FULL=436
    FUNCTION=437
    GENERAL=438
    GLOBAL=439
    GRANTS=440
    GROUP_REPLICATION=441
    HANDLER=442
    HASH=443
    HELP=444
    HISTORY=445
    HOST=446
    HOSTS=447
    IDENTIFIED=448
    IGNORE_SERVER_IDS=449
    IMPORT=450
    INCREMENT=451
    INDEXES=452
    INITIAL_SIZE=453
    INPLACE=454
    INSERT_METHOD=455
    INSTALL=456
    INSTANCE=457
    INSTANT=458
    INVISIBLE=459
    INVOKER=460
    IO=461
    IO_THREAD=462
    IPC=463
    ISOLATION=464
    ISSUER=465
    JSON=466
    KEY_BLOCK_SIZE=467
    LANGUAGE=468
    LAST=469
    LEAVES=470
    LESS=471
    LEVEL=472
    LIST=473
    LOCAL=474
    LOGFILE=475
    LOGS=476
    MASTER=477
    MASTER_AUTO_POSITION=478
    MASTER_CONNECT_RETRY=479
    MASTER_DELAY=480
    MASTER_HEARTBEAT_PERIOD=481
    MASTER_HOST=482
    MASTER_LOG_FILE=483
    MASTER_LOG_POS=484
    MASTER_PASSWORD=485
    MASTER_PORT=486
    MASTER_RETRY_COUNT=487
    MASTER_SSL=488
    MASTER_SSL_CA=489
    MASTER_SSL_CAPATH=490
    MASTER_SSL_CERT=491
    MASTER_SSL_CIPHER=492
    MASTER_SSL_CRL=493
    MASTER_SSL_CRLPATH=494
    MASTER_SSL_KEY=495
    MASTER_TLS_VERSION=496
    MASTER_USER=497
    MAX_CONNECTIONS_PER_HOUR=498
    MAX_QUERIES_PER_HOUR=499
    MAX_ROWS=500
    MAX_SIZE=501
    MAX_UPDATES_PER_HOUR=502
    MAX_USER_CONNECTIONS=503
    MEDIUM=504
    MEMBER=505
    MERGE=506
    MESSAGE_TEXT=507
    MID=508
    MIGRATE=509
    MIN_ROWS=510
    MODE=511
    MODIFY=512
    MUTEX=513
    MYSQL=514
    MYSQL_ERRNO=515
    NAME=516
    NAMES=517
    NCHAR=518
    NEVER=519
    NEXT=520
    NO=521
    NOCACHE=522
    NOCOPY=523
    NOCYCLE=524
    NOMAXVALUE=525
    NOMINVALUE=526
    NOWAIT=527
    NODEGROUP=528
    NONE=529
    ODBC=530
    OFFLINE=531
    OFFSET=532
    OF=533
    OJ=534
    OLD_PASSWORD=535
    ONE=536
    ONLINE=537
    ONLY=538
    OPEN=539
    OPTIMIZER_COSTS=540
    OPTIONS=541
    OWNER=542
    PACK_KEYS=543
    PAGE=544
    PAGE_COMPRESSED=545
    PAGE_COMPRESSION_LEVEL=546
    PARSER=547
    PARTIAL=548
    PARTITIONING=549
    PARTITIONS=550
    PASSWORD=551
    PASSWORD_LOCK_TIME=552
    PHASE=553
    PLUGIN=554
    PLUGIN_DIR=555
    PLUGINS=556
    PORT=557
    PRECEDES=558
    PRECEDING=559
    PREPARE=560
    PRESERVE=561
    PREV=562
    PROCESSLIST=563
    PROFILE=564
    PROFILES=565
    PROXY=566
    QUERY=567
    QUICK=568
    REBUILD=569
    RECOVER=570
    RECURSIVE=571
    REDO_BUFFER_SIZE=572
    REDUNDANT=573
    RELAY=574
    RELAY_LOG_FILE=575
    RELAY_LOG_POS=576
    RELAYLOG=577
    REMOVE=578
    REORGANIZE=579
    REPAIR=580
    REPLICATE_DO_DB=581
    REPLICATE_DO_TABLE=582
    REPLICATE_IGNORE_DB=583
    REPLICATE_IGNORE_TABLE=584
    REPLICATE_REWRITE_DB=585
    REPLICATE_WILD_DO_TABLE=586
    REPLICATE_WILD_IGNORE_TABLE=587
    REPLICATION=588
    RESET=589
    RESTART=590
    RESUME=591
    RETURNED_SQLSTATE=592
    RETURNING=593
    RETURNS=594
    REUSE=595
    ROLE=596
    ROLLBACK=597
    ROLLUP=598
    ROTATE=599
    ROW=600
    ROWS=601
    ROW_FORMAT=602
    RTREE=603
    SAVEPOINT=604
    SCHEDULE=605
    SECURITY=606
    SEQUENCE=607
    SERVER=608
    SESSION=609
    SHARE=610
    SHARED=611
    SIGNED=612
    SIMPLE=613
    SLAVE=614
    SLOW=615
    SNAPSHOT=616
    SOCKET=617
    SOME=618
    SONAME=619
    SOUNDS=620
    SOURCE=621
    SQL_AFTER_GTIDS=622
    SQL_AFTER_MTS_GAPS=623
    SQL_BEFORE_GTIDS=624
    SQL_BUFFER_RESULT=625
    SQL_CACHE=626
    SQL_NO_CACHE=627
    SQL_THREAD=628
    START=629
    STARTS=630
    STATS_AUTO_RECALC=631
    STATS_PERSISTENT=632
    STATS_SAMPLE_PAGES=633
    STATUS=634
    STOP=635
    STORAGE=636
    STORED=637
    STRING=638
    SUBCLASS_ORIGIN=639
    SUBJECT=640
    SUBPARTITION=641
    SUBPARTITIONS=642
    SUSPEND=643
    SWAPS=644
    SWITCHES=645
    TABLE_NAME=646
    TABLESPACE=647
    TABLE_TYPE=648
    TEMPORARY=649
    TEMPTABLE=650
    THAN=651
    TRADITIONAL=652
    TRANSACTION=653
    TRANSACTIONAL=654
    TRIGGERS=655
    TRUNCATE=656
    UNBOUNDED=657
    UNDEFINED=658
    UNDOFILE=659
    UNDO_BUFFER_SIZE=660
    UNINSTALL=661
    UNKNOWN=662
    UNTIL=663
    UPGRADE=664
    USER=665
    USE_FRM=666
    USER_RESOURCES=667
    VALIDATION=668
    VALUE=669
    VARIABLES=670
    VIEW=671
    VIRTUAL=672
    VISIBLE=673
    WAIT=674
    WARNINGS=675
    WINDOW=676
    WITHOUT=677
    WORK=678
    WRAPPER=679
    X509=680
    XA=681
    XML=682
    YES=683
    EUR=684
    USA=685
    JIS=686
    ISO=687
    INTERNAL=688
    QUARTER=689
    MONTH=690
    DAY=691
    HOUR=692
    MINUTE=693
    WEEK=694
    SECOND=695
    MICROSECOND=696
    ADMIN=697
    APPLICATION_PASSWORD_ADMIN=698
    AUDIT_ABORT_EXEMPT=699
    AUDIT_ADMIN=700
    AUTHENTICATION_POLICY_ADMIN=701
    BACKUP_ADMIN=702
    BINLOG_ADMIN=703
    BINLOG_ENCRYPTION_ADMIN=704
    CLONE_ADMIN=705
    CONNECTION_ADMIN=706
    ENCRYPTION_KEY_ADMIN=707
    EXECUTE=708
    FILE=709
    FIREWALL_ADMIN=710
    FIREWALL_EXEMPT=711
    FIREWALL_USER=712
    FLUSH_OPTIMIZER_COSTS=713
    FLUSH_STATUS=714
    FLUSH_TABLES=715
    FLUSH_USER_RESOURCES=716
    GROUP_REPLICATION_ADMIN=717
    INNODB_REDO_LOG_ARCHIVE=718
    INNODB_REDO_LOG_ENABLE=719
    INVOKE=720
    LAMBDA=721
    NDB_STORED_USER=722
    PASSWORDLESS_USER_ADMIN=723
    PERSIST_RO_VARIABLES_ADMIN=724
    PRIVILEGES=725
    PROCESS=726
    RELOAD=727
    REPLICATION_APPLIER=728
    REPLICATION_SLAVE_ADMIN=729
    RESOURCE_GROUP_ADMIN=730
    RESOURCE_GROUP_USER=731
    ROLE_ADMIN=732
    ROUTINE=733
    S3=734
    SERVICE_CONNECTION_ADMIN=735
    SESSION_VARIABLES_ADMIN=736
    SET_USER_ID=737
    SHOW_ROUTINE=738
    SHUTDOWN=739
    SUPER=740
    SYSTEM_VARIABLES_ADMIN=741
    TABLES=742
    TABLE_ENCRYPTION_ADMIN=743
    VERSION_TOKEN_ADMIN=744
    XA_RECOVER_ADMIN=745
    ARMSCII8=746
    ASCII=747
    BIG5=748
    CP1250=749
    CP1251=750
    CP1256=751
    CP1257=752
    CP850=753
    CP852=754
    CP866=755
    CP932=756
    DEC8=757
    EUCJPMS=758
    EUCKR=759
    GB18030=760
    GB2312=761
    GBK=762
    GEOSTD8=763
    GREEK=764
    HEBREW=765
    HP8=766
    KEYBCS2=767
    KOI8R=768
    KOI8U=769
    LATIN1=770
    LATIN2=771
    LATIN5=772
    LATIN7=773
    MACCE=774
    MACROMAN=775
    SJIS=776
    SWE7=777
    TIS620=778
    UCS2=779
    UJIS=780
    UTF16=781
    UTF16LE=782
    UTF32=783
    UTF8=784
    UTF8MB3=785
    UTF8MB4=786
    ARCHIVE=787
    BLACKHOLE=788
    CSV=789
    FEDERATED=790
    INNODB=791
    MEMORY=792
    MRG_MYISAM=793
    MYISAM=794
    NDB=795
    NDBCLUSTER=796
    PERFORMANCE_SCHEMA=797
    TOKUDB=798
    REPEATABLE=799
    COMMITTED=800
    UNCOMMITTED=801
    SERIALIZABLE=802
    GEOMETRYCOLLECTION=803
    GEOMCOLLECTION=804
    GEOMETRY=805
    LINESTRING=806
    MULTILINESTRING=807
    MULTIPOINT=808
    MULTIPOLYGON=809
    POINT=810
    POLYGON=811
    ABS=812
    ACOS=813
    ADDDATE=814
    ADDTIME=815
    AES_DECRYPT=816
    AES_ENCRYPT=817
    AREA=818
    ASBINARY=819
    ASIN=820
    ASTEXT=821
    ASWKB=822
    ASWKT=823
    ASYMMETRIC_DECRYPT=824
    ASYMMETRIC_DERIVE=825
    ASYMMETRIC_ENCRYPT=826
    ASYMMETRIC_SIGN=827
    ASYMMETRIC_VERIFY=828
    ATAN=829
    ATAN2=830
    BENCHMARK=831
    BIN=832
    BIT_COUNT=833
    BIT_LENGTH=834
    BUFFER=835
    CATALOG_NAME=836
    CEIL=837
    CEILING=838
    CENTROID=839
    CHARACTER_LENGTH=840
    CHARSET=841
    CHAR_LENGTH=842
    COERCIBILITY=843
    COLLATION=844
    COMPRESS=845
    CONCAT=846
    CONCAT_WS=847
    CONNECTION_ID=848
    CONV=849
    CONVERT_TZ=850
    COS=851
    COT=852
    CRC32=853
    CREATE_ASYMMETRIC_PRIV_KEY=854
    CREATE_ASYMMETRIC_PUB_KEY=855
    CREATE_DH_PARAMETERS=856
    CREATE_DIGEST=857
    CROSSES=858
    DATEDIFF=859
    DATE_FORMAT=860
    DAYNAME=861
    DAYOFMONTH=862
    DAYOFWEEK=863
    DAYOFYEAR=864
    DECODE=865
    DEGREES=866
    DES_DECRYPT=867
    DES_ENCRYPT=868
    DIMENSION=869
    DISJOINT=870
    ELT=871
    ENCODE=872
    ENCRYPT=873
    ENDPOINT=874
    ENGINE_ATTRIBUTE=875
    ENVELOPE=876
    EQUALS=877
    EXP=878
    EXPORT_SET=879
    EXTERIORRING=880
    EXTRACTVALUE=881
    FIELD=882
    FIND_IN_SET=883
    FLOOR=884
    FORMAT=885
    FOUND_ROWS=886
    FROM_BASE64=887
    FROM_DAYS=888
    FROM_UNIXTIME=889
    GEOMCOLLFROMTEXT=890
    GEOMCOLLFROMWKB=891
    GEOMETRYCOLLECTIONFROMTEXT=892
    GEOMETRYCOLLECTIONFROMWKB=893
    GEOMETRYFROMTEXT=894
    GEOMETRYFROMWKB=895
    GEOMETRYN=896
    GEOMETRYTYPE=897
    GEOMFROMTEXT=898
    GEOMFROMWKB=899
    GET_FORMAT=900
    GET_LOCK=901
    GLENGTH=902
    GREATEST=903
    GTID_SUBSET=904
    GTID_SUBTRACT=905
    HEX=906
    IFNULL=907
    INET6_ATON=908
    INET6_NTOA=909
    INET_ATON=910
    INET_NTOA=911
    INSTR=912
    INTERIORRINGN=913
    INTERSECTS=914
    ISCLOSED=915
    ISEMPTY=916
    ISNULL=917
    ISSIMPLE=918
    IS_FREE_LOCK=919
    IS_IPV4=920
    IS_IPV4_COMPAT=921
    IS_IPV4_MAPPED=922
    IS_IPV6=923
    IS_USED_LOCK=924
    LAST_INSERT_ID=925
    LCASE=926
    LEAST=927
    LENGTH=928
    LINEFROMTEXT=929
    LINEFROMWKB=930
    LINESTRINGFROMTEXT=931
    LINESTRINGFROMWKB=932
    LN=933
    LOAD_FILE=934
    LOCATE=935
    LOG=936
    LOG10=937
    LOG2=938
    LOWER=939
    LPAD=940
    LTRIM=941
    MAKEDATE=942
    MAKETIME=943
    MAKE_SET=944
    MASTER_POS_WAIT=945
    MBRCONTAINS=946
    MBRDISJOINT=947
    MBREQUAL=948
    MBRINTERSECTS=949
    MBROVERLAPS=950
    MBRTOUCHES=951
    MBRWITHIN=952
    MD5=953
    MLINEFROMTEXT=954
    MLINEFROMWKB=955
    MONTHNAME=956
    MPOINTFROMTEXT=957
    MPOINTFROMWKB=958
    MPOLYFROMTEXT=959
    MPOLYFROMWKB=960
    MULTILINESTRINGFROMTEXT=961
    MULTILINESTRINGFROMWKB=962
    MULTIPOINTFROMTEXT=963
    MULTIPOINTFROMWKB=964
    MULTIPOLYGONFROMTEXT=965
    MULTIPOLYGONFROMWKB=966
    NAME_CONST=967
    NULLIF=968
    NUMGEOMETRIES=969
    NUMINTERIORRINGS=970
    NUMPOINTS=971
    OCT=972
    OCTET_LENGTH=973
    ORD=974
    OVERLAPS=975
    PERIOD_ADD=976
    PERIOD_DIFF=977
    PI=978
    POINTFROMTEXT=979
    POINTFROMWKB=980
    POINTN=981
    POLYFROMTEXT=982
    POLYFROMWKB=983
    POLYGONFROMTEXT=984
    POLYGONFROMWKB=985
    POW=986
    POWER=987
    QUOTE=988
    RADIANS=989
    RAND=990
    RANDOM=991
    RANDOM_BYTES=992
    RELEASE_LOCK=993
    REVERSE=994
    ROUND=995
    ROW_COUNT=996
    RPAD=997
    RTRIM=998
    SEC_TO_TIME=999
    SECONDARY_ENGINE_ATTRIBUTE=1000
    SESSION_USER=1001
    SHA=1002
    SHA1=1003
    SHA2=1004
    SCHEMA_NAME=1005
    SIGN=1006
    SIN=1007
    SLEEP=1008
    SOUNDEX=1009
    SQL_THREAD_WAIT_AFTER_GTIDS=1010
    SQRT=1011
    SRID=1012
    STARTPOINT=1013
    STRCMP=1014
    STR_TO_DATE=1015
    ST_AREA=1016
    ST_ASBINARY=1017
    ST_ASTEXT=1018
    ST_ASWKB=1019
    ST_ASWKT=1020
    ST_BUFFER=1021
    ST_CENTROID=1022
    ST_CONTAINS=1023
    ST_CROSSES=1024
    ST_DIFFERENCE=1025
    ST_DIMENSION=1026
    ST_DISJOINT=1027
    ST_DISTANCE=1028
    ST_ENDPOINT=1029
    ST_ENVELOPE=1030
    ST_EQUALS=1031
    ST_EXTERIORRING=1032
    ST_GEOMCOLLFROMTEXT=1033
    ST_GEOMCOLLFROMTXT=1034
    ST_GEOMCOLLFROMWKB=1035
    ST_GEOMETRYCOLLECTIONFROMTEXT=1036
    ST_GEOMETRYCOLLECTIONFROMWKB=1037
    ST_GEOMETRYFROMTEXT=1038
    ST_GEOMETRYFROMWKB=1039
    ST_GEOMETRYN=1040
    ST_GEOMETRYTYPE=1041
    ST_GEOMFROMTEXT=1042
    ST_GEOMFROMWKB=1043
    ST_INTERIORRINGN=1044
    ST_INTERSECTION=1045
    ST_INTERSECTS=1046
    ST_ISCLOSED=1047
    ST_ISEMPTY=1048
    ST_ISSIMPLE=1049
    ST_LINEFROMTEXT=1050
    ST_LINEFROMWKB=1051
    ST_LINESTRINGFROMTEXT=1052
    ST_LINESTRINGFROMWKB=1053
    ST_NUMGEOMETRIES=1054
    ST_NUMINTERIORRING=1055
    ST_NUMINTERIORRINGS=1056
    ST_NUMPOINTS=1057
    ST_OVERLAPS=1058
    ST_POINTFROMTEXT=1059
    ST_POINTFROMWKB=1060
    ST_POINTN=1061
    ST_POLYFROMTEXT=1062
    ST_POLYFROMWKB=1063
    ST_POLYGONFROMTEXT=1064
    ST_POLYGONFROMWKB=1065
    ST_SRID=1066
    ST_STARTPOINT=1067
    ST_SYMDIFFERENCE=1068
    ST_TOUCHES=1069
    ST_UNION=1070
    ST_WITHIN=1071
    ST_X=1072
    ST_Y=1073
    SUBDATE=1074
    SUBSTRING_INDEX=1075
    SUBTIME=1076
    SYSTEM_USER=1077
    TAN=1078
    TIMEDIFF=1079
    TIMESTAMPADD=1080
    TIMESTAMPDIFF=1081
    TIME_FORMAT=1082
    TIME_TO_SEC=1083
    TOUCHES=1084
    TO_BASE64=1085
    TO_DAYS=1086
    TO_SECONDS=1087
    TP_CONNECTION_ADMIN=1088
    UCASE=1089
    UNCOMPRESS=1090
    UNCOMPRESSED_LENGTH=1091
    UNHEX=1092
    UNIX_TIMESTAMP=1093
    UPDATEXML=1094
    UPPER=1095
    UUID=1096
    UUID_SHORT=1097
    VALIDATE_PASSWORD_STRENGTH=1098
    VERSION=1099
    WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS=1100
    WEEKDAY=1101
    WEEKOFYEAR=1102
    WEIGHT_STRING=1103
    WITHIN=1104
    YEARWEEK=1105
    Y_FUNCTION=1106
    X_FUNCTION=1107
    VAR_ASSIGN=1108
    PLUS_ASSIGN=1109
    MINUS_ASSIGN=1110
    MULT_ASSIGN=1111
    DIV_ASSIGN=1112
    MOD_ASSIGN=1113
    AND_ASSIGN=1114
    XOR_ASSIGN=1115
    OR_ASSIGN=1116
    STAR=1117
    DIVIDE=1118
    MODULE=1119
    PLUS=1120
    MINUS=1121
    DIV=1122
    MOD=1123
    EQUAL_SYMBOL=1124
    GREATER_SYMBOL=1125
    LESS_SYMBOL=1126
    EXCLAMATION_SYMBOL=1127
    BIT_NOT_OP=1128
    BIT_OR_OP=1129
    BIT_AND_OP=1130
    BIT_XOR_OP=1131
    DOT=1132
    LR_BRACKET=1133
    RR_BRACKET=1134
    COMMA=1135
    SEMI=1136
    AT_SIGN=1137
    ZERO_DECIMAL=1138
    ONE_DECIMAL=1139
    TWO_DECIMAL=1140
    SINGLE_QUOTE_SYMB=1141
    DOUBLE_QUOTE_SYMB=1142
    REVERSE_QUOTE_SYMB=1143
    COLON_SYMB=1144
    CHARSET_REVERSE_QOUTE_STRING=1145
    FILESIZE_LITERAL=1146
    START_NATIONAL_STRING_LITERAL=1147
    STRING_LITERAL=1148
    DECIMAL_LITERAL=1149
    HEXADECIMAL_LITERAL=1150
    REAL_LITERAL=1151
    NULL_SPEC_LITERAL=1152
    BIT_STRING=1153
    STRING_CHARSET_NAME=1154
    DOT_ID=1155
    ID=1156
    REVERSE_QUOTE_ID=1157
    HOST_IP_ADDRESS=1158
    LOCAL_ID=1159
    GLOBAL_ID=1160
    ERROR_RECONGNIGION=1161
    DQUOTA_STRING=1162
    SQUOTA_STRING=1163

    def __init__(self, input:TokenStream, output:TextIO = sys.stdout):
        super().__init__(input, output)
        self.checkVersion("4.13.1")
        self._interp = ParserATNSimulator(self, self.atn, self.decisionsToDFA, self.sharedContextCache)
        self._predicates = None




    class RootContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def EOF(self):
            return self.getToken(MySqlParser.EOF, 0)

        def sqlStatements(self):
            return self.getTypedRuleContext(MySqlParser.SqlStatementsContext,0)


        def MINUS(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.MINUS)
            else:
                return self.getToken(MySqlParser.MINUS, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_root

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRoot" ):
                listener.enterRoot(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRoot" ):
                listener.exitRoot(self)




    def root(self):

        localctx = MySqlParser.RootContext(self, self._ctx, self.state)
        self.enterRule(localctx, 0, self.RULE_root)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 723
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & 4614060972218253952) != 0) or ((((_la - 71)) & ~0x3f) == 0 and ((1 << (_la - 71)) & 2306124490637066243) != 0) or ((((_la - 138)) & ~0x3f) == 0 and ((1 << (_la - 138)) & 19509751503569451) != 0) or ((((_la - 344)) & ~0x3f) == 0 and ((1 << (_la - 344)) & 36099165796700291) != 0) or ((((_la - 432)) & ~0x3f) == 0 and ((1 << (_la - 432)) & 16782337) != 0) or ((((_la - 560)) & ~0x3f) == 0 and ((1 << (_la - 560)) & 17730162917377) != 0) or ((((_la - 629)) & ~0x3f) == 0 and ((1 << (_la - 629)) & 4503604056555585) != 0) or _la==708 or _la==739 or _la==1133 or _la==1136:
                self.state = 722
                self.sqlStatements()


            self.state = 727
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1121:
                self.state = 725
                self.match(MySqlParser.MINUS)
                self.state = 726
                self.match(MySqlParser.MINUS)


            self.state = 729
            self.match(MySqlParser.EOF)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class SqlStatementsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def sqlStatement(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.SqlStatementContext)
            else:
                return self.getTypedRuleContext(MySqlParser.SqlStatementContext,i)


        def emptyStatement_(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.EmptyStatement_Context)
            else:
                return self.getTypedRuleContext(MySqlParser.EmptyStatement_Context,i)


        def SEMI(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.SEMI)
            else:
                return self.getToken(MySqlParser.SEMI, i)

        def MINUS(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.MINUS)
            else:
                return self.getToken(MySqlParser.MINUS, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_sqlStatements

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSqlStatements" ):
                listener.enterSqlStatements(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSqlStatements" ):
                listener.exitSqlStatements(self)




    def sqlStatements(self):

        localctx = MySqlParser.SqlStatementsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2, self.RULE_sqlStatements)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 742
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,5,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 740
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [7, 9, 20, 24, 26, 33, 44, 45, 46, 51, 62, 71, 72, 85, 93, 102, 103, 119, 132, 138, 139, 141, 143, 147, 152, 153, 155, 156, 172, 182, 184, 186, 188, 192, 344, 345, 351, 356, 369, 390, 399, 432, 442, 444, 456, 560, 580, 589, 597, 604, 629, 635, 656, 661, 681, 708, 739, 1133]:
                        self.state = 731
                        self.sqlStatement()
                        self.state = 734
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if _la==1121:
                            self.state = 732
                            self.match(MySqlParser.MINUS)
                            self.state = 733
                            self.match(MySqlParser.MINUS)


                        self.state = 737
                        self._errHandler.sync(self)
                        la_ = self._interp.adaptivePredict(self._input,3,self._ctx)
                        if la_ == 1:
                            self.state = 736
                            self.match(MySqlParser.SEMI)


                        pass
                    elif token in [1136]:
                        self.state = 739
                        self.emptyStatement_()
                        pass
                    else:
                        raise NoViableAltException(self)
             
                self.state = 744
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,5,self._ctx)

            self.state = 754
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [7, 9, 20, 24, 26, 33, 44, 45, 46, 51, 62, 71, 72, 85, 93, 102, 103, 119, 132, 138, 139, 141, 143, 147, 152, 153, 155, 156, 172, 182, 184, 186, 188, 192, 344, 345, 351, 356, 369, 390, 399, 432, 442, 444, 456, 560, 580, 589, 597, 604, 629, 635, 656, 661, 681, 708, 739, 1133]:
                self.state = 745
                self.sqlStatement()
                self.state = 751
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,7,self._ctx)
                if la_ == 1:
                    self.state = 748
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==1121:
                        self.state = 746
                        self.match(MySqlParser.MINUS)
                        self.state = 747
                        self.match(MySqlParser.MINUS)


                    self.state = 750
                    self.match(MySqlParser.SEMI)


                pass
            elif token in [1136]:
                self.state = 753
                self.emptyStatement_()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class SqlStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ddlStatement(self):
            return self.getTypedRuleContext(MySqlParser.DdlStatementContext,0)


        def dmlStatement(self):
            return self.getTypedRuleContext(MySqlParser.DmlStatementContext,0)


        def transactionStatement(self):
            return self.getTypedRuleContext(MySqlParser.TransactionStatementContext,0)


        def replicationStatement(self):
            return self.getTypedRuleContext(MySqlParser.ReplicationStatementContext,0)


        def preparedStatement(self):
            return self.getTypedRuleContext(MySqlParser.PreparedStatementContext,0)


        def administrationStatement(self):
            return self.getTypedRuleContext(MySqlParser.AdministrationStatementContext,0)


        def utilityStatement(self):
            return self.getTypedRuleContext(MySqlParser.UtilityStatementContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_sqlStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSqlStatement" ):
                listener.enterSqlStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSqlStatement" ):
                listener.exitSqlStatement(self)




    def sqlStatement(self):

        localctx = MySqlParser.SqlStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 4, self.RULE_sqlStatement)
        try:
            self.state = 763
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,9,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 756
                self.ddlStatement()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 757
                self.dmlStatement()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 758
                self.transactionStatement()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 759
                self.replicationStatement()
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 760
                self.preparedStatement()
                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 761
                self.administrationStatement()
                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 762
                self.utilityStatement()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class EmptyStatement_Context(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SEMI(self):
            return self.getToken(MySqlParser.SEMI, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_emptyStatement_

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterEmptyStatement_" ):
                listener.enterEmptyStatement_(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitEmptyStatement_" ):
                listener.exitEmptyStatement_(self)




    def emptyStatement_(self):

        localctx = MySqlParser.EmptyStatement_Context(self, self._ctx, self.state)
        self.enterRule(localctx, 6, self.RULE_emptyStatement_)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 765
            self.match(MySqlParser.SEMI)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DdlStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def createDatabase(self):
            return self.getTypedRuleContext(MySqlParser.CreateDatabaseContext,0)


        def createEvent(self):
            return self.getTypedRuleContext(MySqlParser.CreateEventContext,0)


        def createIndex(self):
            return self.getTypedRuleContext(MySqlParser.CreateIndexContext,0)


        def createLogfileGroup(self):
            return self.getTypedRuleContext(MySqlParser.CreateLogfileGroupContext,0)


        def createProcedure(self):
            return self.getTypedRuleContext(MySqlParser.CreateProcedureContext,0)


        def createFunction(self):
            return self.getTypedRuleContext(MySqlParser.CreateFunctionContext,0)


        def createServer(self):
            return self.getTypedRuleContext(MySqlParser.CreateServerContext,0)


        def createTable(self):
            return self.getTypedRuleContext(MySqlParser.CreateTableContext,0)


        def createTablespaceInnodb(self):
            return self.getTypedRuleContext(MySqlParser.CreateTablespaceInnodbContext,0)


        def createTablespaceNdb(self):
            return self.getTypedRuleContext(MySqlParser.CreateTablespaceNdbContext,0)


        def createTrigger(self):
            return self.getTypedRuleContext(MySqlParser.CreateTriggerContext,0)


        def createView(self):
            return self.getTypedRuleContext(MySqlParser.CreateViewContext,0)


        def createRole(self):
            return self.getTypedRuleContext(MySqlParser.CreateRoleContext,0)


        def alterDatabase(self):
            return self.getTypedRuleContext(MySqlParser.AlterDatabaseContext,0)


        def alterEvent(self):
            return self.getTypedRuleContext(MySqlParser.AlterEventContext,0)


        def alterFunction(self):
            return self.getTypedRuleContext(MySqlParser.AlterFunctionContext,0)


        def alterInstance(self):
            return self.getTypedRuleContext(MySqlParser.AlterInstanceContext,0)


        def alterLogfileGroup(self):
            return self.getTypedRuleContext(MySqlParser.AlterLogfileGroupContext,0)


        def alterProcedure(self):
            return self.getTypedRuleContext(MySqlParser.AlterProcedureContext,0)


        def alterServer(self):
            return self.getTypedRuleContext(MySqlParser.AlterServerContext,0)


        def alterTable(self):
            return self.getTypedRuleContext(MySqlParser.AlterTableContext,0)


        def alterTablespace(self):
            return self.getTypedRuleContext(MySqlParser.AlterTablespaceContext,0)


        def alterView(self):
            return self.getTypedRuleContext(MySqlParser.AlterViewContext,0)


        def dropDatabase(self):
            return self.getTypedRuleContext(MySqlParser.DropDatabaseContext,0)


        def dropEvent(self):
            return self.getTypedRuleContext(MySqlParser.DropEventContext,0)


        def dropIndex(self):
            return self.getTypedRuleContext(MySqlParser.DropIndexContext,0)


        def dropLogfileGroup(self):
            return self.getTypedRuleContext(MySqlParser.DropLogfileGroupContext,0)


        def dropProcedure(self):
            return self.getTypedRuleContext(MySqlParser.DropProcedureContext,0)


        def dropFunction(self):
            return self.getTypedRuleContext(MySqlParser.DropFunctionContext,0)


        def dropServer(self):
            return self.getTypedRuleContext(MySqlParser.DropServerContext,0)


        def dropTable(self):
            return self.getTypedRuleContext(MySqlParser.DropTableContext,0)


        def dropTablespace(self):
            return self.getTypedRuleContext(MySqlParser.DropTablespaceContext,0)


        def dropTrigger(self):
            return self.getTypedRuleContext(MySqlParser.DropTriggerContext,0)


        def dropView(self):
            return self.getTypedRuleContext(MySqlParser.DropViewContext,0)


        def dropRole(self):
            return self.getTypedRuleContext(MySqlParser.DropRoleContext,0)


        def setRole(self):
            return self.getTypedRuleContext(MySqlParser.SetRoleContext,0)


        def renameTable(self):
            return self.getTypedRuleContext(MySqlParser.RenameTableContext,0)


        def truncateTable(self):
            return self.getTypedRuleContext(MySqlParser.TruncateTableContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_ddlStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDdlStatement" ):
                listener.enterDdlStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDdlStatement" ):
                listener.exitDdlStatement(self)




    def ddlStatement(self):

        localctx = MySqlParser.DdlStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 8, self.RULE_ddlStatement)
        try:
            self.state = 805
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,10,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 767
                self.createDatabase()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 768
                self.createEvent()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 769
                self.createIndex()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 770
                self.createLogfileGroup()
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 771
                self.createProcedure()
                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 772
                self.createFunction()
                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 773
                self.createServer()
                pass

            elif la_ == 8:
                self.enterOuterAlt(localctx, 8)
                self.state = 774
                self.createTable()
                pass

            elif la_ == 9:
                self.enterOuterAlt(localctx, 9)
                self.state = 775
                self.createTablespaceInnodb()
                pass

            elif la_ == 10:
                self.enterOuterAlt(localctx, 10)
                self.state = 776
                self.createTablespaceNdb()
                pass

            elif la_ == 11:
                self.enterOuterAlt(localctx, 11)
                self.state = 777
                self.createTrigger()
                pass

            elif la_ == 12:
                self.enterOuterAlt(localctx, 12)
                self.state = 778
                self.createView()
                pass

            elif la_ == 13:
                self.enterOuterAlt(localctx, 13)
                self.state = 779
                self.createRole()
                pass

            elif la_ == 14:
                self.enterOuterAlt(localctx, 14)
                self.state = 780
                self.alterDatabase()
                pass

            elif la_ == 15:
                self.enterOuterAlt(localctx, 15)
                self.state = 781
                self.alterEvent()
                pass

            elif la_ == 16:
                self.enterOuterAlt(localctx, 16)
                self.state = 782
                self.alterFunction()
                pass

            elif la_ == 17:
                self.enterOuterAlt(localctx, 17)
                self.state = 783
                self.alterInstance()
                pass

            elif la_ == 18:
                self.enterOuterAlt(localctx, 18)
                self.state = 784
                self.alterLogfileGroup()
                pass

            elif la_ == 19:
                self.enterOuterAlt(localctx, 19)
                self.state = 785
                self.alterProcedure()
                pass

            elif la_ == 20:
                self.enterOuterAlt(localctx, 20)
                self.state = 786
                self.alterServer()
                pass

            elif la_ == 21:
                self.enterOuterAlt(localctx, 21)
                self.state = 787
                self.alterTable()
                pass

            elif la_ == 22:
                self.enterOuterAlt(localctx, 22)
                self.state = 788
                self.alterTablespace()
                pass

            elif la_ == 23:
                self.enterOuterAlt(localctx, 23)
                self.state = 789
                self.alterView()
                pass

            elif la_ == 24:
                self.enterOuterAlt(localctx, 24)
                self.state = 790
                self.dropDatabase()
                pass

            elif la_ == 25:
                self.enterOuterAlt(localctx, 25)
                self.state = 791
                self.dropEvent()
                pass

            elif la_ == 26:
                self.enterOuterAlt(localctx, 26)
                self.state = 792
                self.dropIndex()
                pass

            elif la_ == 27:
                self.enterOuterAlt(localctx, 27)
                self.state = 793
                self.dropLogfileGroup()
                pass

            elif la_ == 28:
                self.enterOuterAlt(localctx, 28)
                self.state = 794
                self.dropProcedure()
                pass

            elif la_ == 29:
                self.enterOuterAlt(localctx, 29)
                self.state = 795
                self.dropFunction()
                pass

            elif la_ == 30:
                self.enterOuterAlt(localctx, 30)
                self.state = 796
                self.dropServer()
                pass

            elif la_ == 31:
                self.enterOuterAlt(localctx, 31)
                self.state = 797
                self.dropTable()
                pass

            elif la_ == 32:
                self.enterOuterAlt(localctx, 32)
                self.state = 798
                self.dropTablespace()
                pass

            elif la_ == 33:
                self.enterOuterAlt(localctx, 33)
                self.state = 799
                self.dropTrigger()
                pass

            elif la_ == 34:
                self.enterOuterAlt(localctx, 34)
                self.state = 800
                self.dropView()
                pass

            elif la_ == 35:
                self.enterOuterAlt(localctx, 35)
                self.state = 801
                self.dropRole()
                pass

            elif la_ == 36:
                self.enterOuterAlt(localctx, 36)
                self.state = 802
                self.setRole()
                pass

            elif la_ == 37:
                self.enterOuterAlt(localctx, 37)
                self.state = 803
                self.renameTable()
                pass

            elif la_ == 38:
                self.enterOuterAlt(localctx, 38)
                self.state = 804
                self.truncateTable()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DmlStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def selectStatement(self):
            return self.getTypedRuleContext(MySqlParser.SelectStatementContext,0)


        def insertStatement(self):
            return self.getTypedRuleContext(MySqlParser.InsertStatementContext,0)


        def updateStatement(self):
            return self.getTypedRuleContext(MySqlParser.UpdateStatementContext,0)


        def deleteStatement(self):
            return self.getTypedRuleContext(MySqlParser.DeleteStatementContext,0)


        def replaceStatement(self):
            return self.getTypedRuleContext(MySqlParser.ReplaceStatementContext,0)


        def callStatement(self):
            return self.getTypedRuleContext(MySqlParser.CallStatementContext,0)


        def loadDataStatement(self):
            return self.getTypedRuleContext(MySqlParser.LoadDataStatementContext,0)


        def loadXmlStatement(self):
            return self.getTypedRuleContext(MySqlParser.LoadXmlStatementContext,0)


        def doStatement(self):
            return self.getTypedRuleContext(MySqlParser.DoStatementContext,0)


        def handlerStatement(self):
            return self.getTypedRuleContext(MySqlParser.HandlerStatementContext,0)


        def valuesStatement(self):
            return self.getTypedRuleContext(MySqlParser.ValuesStatementContext,0)


        def withStatement(self):
            return self.getTypedRuleContext(MySqlParser.WithStatementContext,0)


        def tableStatement(self):
            return self.getTypedRuleContext(MySqlParser.TableStatementContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_dmlStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDmlStatement" ):
                listener.enterDmlStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDmlStatement" ):
                listener.exitDmlStatement(self)




    def dmlStatement(self):

        localctx = MySqlParser.DmlStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 10, self.RULE_dmlStatement)
        try:
            self.state = 820
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,11,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 807
                self.selectStatement()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 808
                self.insertStatement()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 809
                self.updateStatement()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 810
                self.deleteStatement()
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 811
                self.replaceStatement()
                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 812
                self.callStatement()
                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 813
                self.loadDataStatement()
                pass

            elif la_ == 8:
                self.enterOuterAlt(localctx, 8)
                self.state = 814
                self.loadXmlStatement()
                pass

            elif la_ == 9:
                self.enterOuterAlt(localctx, 9)
                self.state = 815
                self.doStatement()
                pass

            elif la_ == 10:
                self.enterOuterAlt(localctx, 10)
                self.state = 816
                self.handlerStatement()
                pass

            elif la_ == 11:
                self.enterOuterAlt(localctx, 11)
                self.state = 817
                self.valuesStatement()
                pass

            elif la_ == 12:
                self.enterOuterAlt(localctx, 12)
                self.state = 818
                self.withStatement()
                pass

            elif la_ == 13:
                self.enterOuterAlt(localctx, 13)
                self.state = 819
                self.tableStatement()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class TransactionStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def startTransaction(self):
            return self.getTypedRuleContext(MySqlParser.StartTransactionContext,0)


        def beginWork(self):
            return self.getTypedRuleContext(MySqlParser.BeginWorkContext,0)


        def commitWork(self):
            return self.getTypedRuleContext(MySqlParser.CommitWorkContext,0)


        def rollbackWork(self):
            return self.getTypedRuleContext(MySqlParser.RollbackWorkContext,0)


        def savepointStatement(self):
            return self.getTypedRuleContext(MySqlParser.SavepointStatementContext,0)


        def rollbackStatement(self):
            return self.getTypedRuleContext(MySqlParser.RollbackStatementContext,0)


        def releaseStatement(self):
            return self.getTypedRuleContext(MySqlParser.ReleaseStatementContext,0)


        def lockTables(self):
            return self.getTypedRuleContext(MySqlParser.LockTablesContext,0)


        def unlockTables(self):
            return self.getTypedRuleContext(MySqlParser.UnlockTablesContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_transactionStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTransactionStatement" ):
                listener.enterTransactionStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTransactionStatement" ):
                listener.exitTransactionStatement(self)




    def transactionStatement(self):

        localctx = MySqlParser.TransactionStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 12, self.RULE_transactionStatement)
        try:
            self.state = 831
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,12,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 822
                self.startTransaction()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 823
                self.beginWork()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 824
                self.commitWork()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 825
                self.rollbackWork()
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 826
                self.savepointStatement()
                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 827
                self.rollbackStatement()
                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 828
                self.releaseStatement()
                pass

            elif la_ == 8:
                self.enterOuterAlt(localctx, 8)
                self.state = 829
                self.lockTables()
                pass

            elif la_ == 9:
                self.enterOuterAlt(localctx, 9)
                self.state = 830
                self.unlockTables()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ReplicationStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def changeMaster(self):
            return self.getTypedRuleContext(MySqlParser.ChangeMasterContext,0)


        def changeReplicationFilter(self):
            return self.getTypedRuleContext(MySqlParser.ChangeReplicationFilterContext,0)


        def purgeBinaryLogs(self):
            return self.getTypedRuleContext(MySqlParser.PurgeBinaryLogsContext,0)


        def resetMaster(self):
            return self.getTypedRuleContext(MySqlParser.ResetMasterContext,0)


        def resetSlave(self):
            return self.getTypedRuleContext(MySqlParser.ResetSlaveContext,0)


        def startSlave(self):
            return self.getTypedRuleContext(MySqlParser.StartSlaveContext,0)


        def stopSlave(self):
            return self.getTypedRuleContext(MySqlParser.StopSlaveContext,0)


        def startGroupReplication(self):
            return self.getTypedRuleContext(MySqlParser.StartGroupReplicationContext,0)


        def stopGroupReplication(self):
            return self.getTypedRuleContext(MySqlParser.StopGroupReplicationContext,0)


        def xaStartTransaction(self):
            return self.getTypedRuleContext(MySqlParser.XaStartTransactionContext,0)


        def xaEndTransaction(self):
            return self.getTypedRuleContext(MySqlParser.XaEndTransactionContext,0)


        def xaPrepareStatement(self):
            return self.getTypedRuleContext(MySqlParser.XaPrepareStatementContext,0)


        def xaCommitWork(self):
            return self.getTypedRuleContext(MySqlParser.XaCommitWorkContext,0)


        def xaRollbackWork(self):
            return self.getTypedRuleContext(MySqlParser.XaRollbackWorkContext,0)


        def xaRecoverWork(self):
            return self.getTypedRuleContext(MySqlParser.XaRecoverWorkContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_replicationStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterReplicationStatement" ):
                listener.enterReplicationStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitReplicationStatement" ):
                listener.exitReplicationStatement(self)




    def replicationStatement(self):

        localctx = MySqlParser.ReplicationStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 14, self.RULE_replicationStatement)
        try:
            self.state = 848
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,13,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 833
                self.changeMaster()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 834
                self.changeReplicationFilter()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 835
                self.purgeBinaryLogs()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 836
                self.resetMaster()
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 837
                self.resetSlave()
                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 838
                self.startSlave()
                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 839
                self.stopSlave()
                pass

            elif la_ == 8:
                self.enterOuterAlt(localctx, 8)
                self.state = 840
                self.startGroupReplication()
                pass

            elif la_ == 9:
                self.enterOuterAlt(localctx, 9)
                self.state = 841
                self.stopGroupReplication()
                pass

            elif la_ == 10:
                self.enterOuterAlt(localctx, 10)
                self.state = 842
                self.xaStartTransaction()
                pass

            elif la_ == 11:
                self.enterOuterAlt(localctx, 11)
                self.state = 843
                self.xaEndTransaction()
                pass

            elif la_ == 12:
                self.enterOuterAlt(localctx, 12)
                self.state = 844
                self.xaPrepareStatement()
                pass

            elif la_ == 13:
                self.enterOuterAlt(localctx, 13)
                self.state = 845
                self.xaCommitWork()
                pass

            elif la_ == 14:
                self.enterOuterAlt(localctx, 14)
                self.state = 846
                self.xaRollbackWork()
                pass

            elif la_ == 15:
                self.enterOuterAlt(localctx, 15)
                self.state = 847
                self.xaRecoverWork()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class PreparedStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def prepareStatement(self):
            return self.getTypedRuleContext(MySqlParser.PrepareStatementContext,0)


        def executeStatement(self):
            return self.getTypedRuleContext(MySqlParser.ExecuteStatementContext,0)


        def deallocatePrepare(self):
            return self.getTypedRuleContext(MySqlParser.DeallocatePrepareContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_preparedStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPreparedStatement" ):
                listener.enterPreparedStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPreparedStatement" ):
                listener.exitPreparedStatement(self)




    def preparedStatement(self):

        localctx = MySqlParser.PreparedStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 16, self.RULE_preparedStatement)
        try:
            self.state = 853
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [560]:
                self.enterOuterAlt(localctx, 1)
                self.state = 850
                self.prepareStatement()
                pass
            elif token in [708]:
                self.enterOuterAlt(localctx, 2)
                self.state = 851
                self.executeStatement()
                pass
            elif token in [51, 390]:
                self.enterOuterAlt(localctx, 3)
                self.state = 852
                self.deallocatePrepare()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CompoundStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def blockStatement(self):
            return self.getTypedRuleContext(MySqlParser.BlockStatementContext,0)


        def caseStatement(self):
            return self.getTypedRuleContext(MySqlParser.CaseStatementContext,0)


        def ifStatement(self):
            return self.getTypedRuleContext(MySqlParser.IfStatementContext,0)


        def leaveStatement(self):
            return self.getTypedRuleContext(MySqlParser.LeaveStatementContext,0)


        def loopStatement(self):
            return self.getTypedRuleContext(MySqlParser.LoopStatementContext,0)


        def repeatStatement(self):
            return self.getTypedRuleContext(MySqlParser.RepeatStatementContext,0)


        def whileStatement(self):
            return self.getTypedRuleContext(MySqlParser.WhileStatementContext,0)


        def iterateStatement(self):
            return self.getTypedRuleContext(MySqlParser.IterateStatementContext,0)


        def returnStatement(self):
            return self.getTypedRuleContext(MySqlParser.ReturnStatementContext,0)


        def cursorStatement(self):
            return self.getTypedRuleContext(MySqlParser.CursorStatementContext,0)


        def withStatement(self):
            return self.getTypedRuleContext(MySqlParser.WithStatementContext,0)


        def dmlStatement(self):
            return self.getTypedRuleContext(MySqlParser.DmlStatementContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_compoundStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCompoundStatement" ):
                listener.enterCompoundStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCompoundStatement" ):
                listener.exitCompoundStatement(self)




    def compoundStatement(self):

        localctx = MySqlParser.CompoundStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 18, self.RULE_compoundStatement)
        try:
            self.state = 868
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,15,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 855
                self.blockStatement()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 856
                self.caseStatement()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 857
                self.ifStatement()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 858
                self.leaveStatement()
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 859
                self.loopStatement()
                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 860
                self.repeatStatement()
                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 861
                self.whileStatement()
                pass

            elif la_ == 8:
                self.enterOuterAlt(localctx, 8)
                self.state = 862
                self.iterateStatement()
                pass

            elif la_ == 9:
                self.enterOuterAlt(localctx, 9)
                self.state = 863
                self.returnStatement()
                pass

            elif la_ == 10:
                self.enterOuterAlt(localctx, 10)
                self.state = 864
                self.cursorStatement()
                pass

            elif la_ == 11:
                self.enterOuterAlt(localctx, 11)
                self.state = 865
                self.withStatement()
                self.state = 866
                self.dmlStatement()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class AdministrationStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def alterUser(self):
            return self.getTypedRuleContext(MySqlParser.AlterUserContext,0)


        def createUser(self):
            return self.getTypedRuleContext(MySqlParser.CreateUserContext,0)


        def dropUser(self):
            return self.getTypedRuleContext(MySqlParser.DropUserContext,0)


        def grantStatement(self):
            return self.getTypedRuleContext(MySqlParser.GrantStatementContext,0)


        def grantProxy(self):
            return self.getTypedRuleContext(MySqlParser.GrantProxyContext,0)


        def renameUser(self):
            return self.getTypedRuleContext(MySqlParser.RenameUserContext,0)


        def revokeStatement(self):
            return self.getTypedRuleContext(MySqlParser.RevokeStatementContext,0)


        def revokeProxy(self):
            return self.getTypedRuleContext(MySqlParser.RevokeProxyContext,0)


        def analyzeTable(self):
            return self.getTypedRuleContext(MySqlParser.AnalyzeTableContext,0)


        def checkTable(self):
            return self.getTypedRuleContext(MySqlParser.CheckTableContext,0)


        def checksumTable(self):
            return self.getTypedRuleContext(MySqlParser.ChecksumTableContext,0)


        def optimizeTable(self):
            return self.getTypedRuleContext(MySqlParser.OptimizeTableContext,0)


        def repairTable(self):
            return self.getTypedRuleContext(MySqlParser.RepairTableContext,0)


        def createUdfunction(self):
            return self.getTypedRuleContext(MySqlParser.CreateUdfunctionContext,0)


        def installPlugin(self):
            return self.getTypedRuleContext(MySqlParser.InstallPluginContext,0)


        def uninstallPlugin(self):
            return self.getTypedRuleContext(MySqlParser.UninstallPluginContext,0)


        def setStatement(self):
            return self.getTypedRuleContext(MySqlParser.SetStatementContext,0)


        def showStatement(self):
            return self.getTypedRuleContext(MySqlParser.ShowStatementContext,0)


        def binlogStatement(self):
            return self.getTypedRuleContext(MySqlParser.BinlogStatementContext,0)


        def cacheIndexStatement(self):
            return self.getTypedRuleContext(MySqlParser.CacheIndexStatementContext,0)


        def flushStatement(self):
            return self.getTypedRuleContext(MySqlParser.FlushStatementContext,0)


        def killStatement(self):
            return self.getTypedRuleContext(MySqlParser.KillStatementContext,0)


        def loadIndexIntoCache(self):
            return self.getTypedRuleContext(MySqlParser.LoadIndexIntoCacheContext,0)


        def resetStatement(self):
            return self.getTypedRuleContext(MySqlParser.ResetStatementContext,0)


        def shutdownStatement(self):
            return self.getTypedRuleContext(MySqlParser.ShutdownStatementContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_administrationStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAdministrationStatement" ):
                listener.enterAdministrationStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAdministrationStatement" ):
                listener.exitAdministrationStatement(self)




    def administrationStatement(self):

        localctx = MySqlParser.AdministrationStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 20, self.RULE_administrationStatement)
        try:
            self.state = 895
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,16,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 870
                self.alterUser()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 871
                self.createUser()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 872
                self.dropUser()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 873
                self.grantStatement()
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 874
                self.grantProxy()
                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 875
                self.renameUser()
                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 876
                self.revokeStatement()
                pass

            elif la_ == 8:
                self.enterOuterAlt(localctx, 8)
                self.state = 877
                self.revokeProxy()
                pass

            elif la_ == 9:
                self.enterOuterAlt(localctx, 9)
                self.state = 878
                self.analyzeTable()
                pass

            elif la_ == 10:
                self.enterOuterAlt(localctx, 10)
                self.state = 879
                self.checkTable()
                pass

            elif la_ == 11:
                self.enterOuterAlt(localctx, 11)
                self.state = 880
                self.checksumTable()
                pass

            elif la_ == 12:
                self.enterOuterAlt(localctx, 12)
                self.state = 881
                self.optimizeTable()
                pass

            elif la_ == 13:
                self.enterOuterAlt(localctx, 13)
                self.state = 882
                self.repairTable()
                pass

            elif la_ == 14:
                self.enterOuterAlt(localctx, 14)
                self.state = 883
                self.createUdfunction()
                pass

            elif la_ == 15:
                self.enterOuterAlt(localctx, 15)
                self.state = 884
                self.installPlugin()
                pass

            elif la_ == 16:
                self.enterOuterAlt(localctx, 16)
                self.state = 885
                self.uninstallPlugin()
                pass

            elif la_ == 17:
                self.enterOuterAlt(localctx, 17)
                self.state = 886
                self.setStatement()
                pass

            elif la_ == 18:
                self.enterOuterAlt(localctx, 18)
                self.state = 887
                self.showStatement()
                pass

            elif la_ == 19:
                self.enterOuterAlt(localctx, 19)
                self.state = 888
                self.binlogStatement()
                pass

            elif la_ == 20:
                self.enterOuterAlt(localctx, 20)
                self.state = 889
                self.cacheIndexStatement()
                pass

            elif la_ == 21:
                self.enterOuterAlt(localctx, 21)
                self.state = 890
                self.flushStatement()
                pass

            elif la_ == 22:
                self.enterOuterAlt(localctx, 22)
                self.state = 891
                self.killStatement()
                pass

            elif la_ == 23:
                self.enterOuterAlt(localctx, 23)
                self.state = 892
                self.loadIndexIntoCache()
                pass

            elif la_ == 24:
                self.enterOuterAlt(localctx, 24)
                self.state = 893
                self.resetStatement()
                pass

            elif la_ == 25:
                self.enterOuterAlt(localctx, 25)
                self.state = 894
                self.shutdownStatement()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class UtilityStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def simpleDescribeStatement(self):
            return self.getTypedRuleContext(MySqlParser.SimpleDescribeStatementContext,0)


        def fullDescribeStatement(self):
            return self.getTypedRuleContext(MySqlParser.FullDescribeStatementContext,0)


        def helpStatement(self):
            return self.getTypedRuleContext(MySqlParser.HelpStatementContext,0)


        def useStatement(self):
            return self.getTypedRuleContext(MySqlParser.UseStatementContext,0)


        def signalStatement(self):
            return self.getTypedRuleContext(MySqlParser.SignalStatementContext,0)


        def resignalStatement(self):
            return self.getTypedRuleContext(MySqlParser.ResignalStatementContext,0)


        def diagnosticsStatement(self):
            return self.getTypedRuleContext(MySqlParser.DiagnosticsStatementContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_utilityStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUtilityStatement" ):
                listener.enterUtilityStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUtilityStatement" ):
                listener.exitUtilityStatement(self)




    def utilityStatement(self):

        localctx = MySqlParser.UtilityStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 22, self.RULE_utilityStatement)
        try:
            self.state = 904
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,17,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 897
                self.simpleDescribeStatement()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 898
                self.fullDescribeStatement()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 899
                self.helpStatement()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 900
                self.useStatement()
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 901
                self.signalStatement()
                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 902
                self.resignalStatement()
                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 903
                self.diagnosticsStatement()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CreateDatabaseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.dbFormat = None # Token

        def CREATE(self):
            return self.getToken(MySqlParser.CREATE, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def DATABASE(self):
            return self.getToken(MySqlParser.DATABASE, 0)

        def SCHEMA(self):
            return self.getToken(MySqlParser.SCHEMA, 0)

        def ifNotExists(self):
            return self.getTypedRuleContext(MySqlParser.IfNotExistsContext,0)


        def createDatabaseOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.CreateDatabaseOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.CreateDatabaseOptionContext,i)


        def getRuleIndex(self):
            return MySqlParser.RULE_createDatabase

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreateDatabase" ):
                listener.enterCreateDatabase(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreateDatabase" ):
                listener.exitCreateDatabase(self)




    def createDatabase(self):

        localctx = MySqlParser.CreateDatabaseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 24, self.RULE_createDatabase)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 906
            self.match(MySqlParser.CREATE)
            self.state = 907
            localctx.dbFormat = self._input.LT(1)
            _la = self._input.LA(1)
            if not(_la==39 or _la==150):
                localctx.dbFormat = self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 909
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,18,self._ctx)
            if la_ == 1:
                self.state = 908
                self.ifNotExists()


            self.state = 911
            self.uid()
            self.state = 915
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while (((_la) & ~0x3f) == 0 and ((1 << _la) & 4398214283264) != 0) or _la==134 or _la==222 or _la==405 or _la==841:
                self.state = 912
                self.createDatabaseOption()
                self.state = 917
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CreateEventContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(MySqlParser.CREATE, 0)

        def EVENT(self):
            return self.getToken(MySqlParser.EVENT, 0)

        def fullId(self):
            return self.getTypedRuleContext(MySqlParser.FullIdContext,0)


        def ON(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.ON)
            else:
                return self.getToken(MySqlParser.ON, i)

        def SCHEDULE(self):
            return self.getToken(MySqlParser.SCHEDULE, 0)

        def scheduleExpression(self):
            return self.getTypedRuleContext(MySqlParser.ScheduleExpressionContext,0)


        def DO(self):
            return self.getToken(MySqlParser.DO, 0)

        def routineBody(self):
            return self.getTypedRuleContext(MySqlParser.RoutineBodyContext,0)


        def ownerStatement(self):
            return self.getTypedRuleContext(MySqlParser.OwnerStatementContext,0)


        def ifNotExists(self):
            return self.getTypedRuleContext(MySqlParser.IfNotExistsContext,0)


        def COMPLETION(self):
            return self.getToken(MySqlParser.COMPLETION, 0)

        def PRESERVE(self):
            return self.getToken(MySqlParser.PRESERVE, 0)

        def enableType(self):
            return self.getTypedRuleContext(MySqlParser.EnableTypeContext,0)


        def COMMENT(self):
            return self.getToken(MySqlParser.COMMENT, 0)

        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def NOT(self):
            return self.getToken(MySqlParser.NOT, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_createEvent

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreateEvent" ):
                listener.enterCreateEvent(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreateEvent" ):
                listener.exitCreateEvent(self)




    def createEvent(self):

        localctx = MySqlParser.CreateEventContext(self, self._ctx, self.state)
        self.enterRule(localctx, 26, self.RULE_createEvent)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 918
            self.match(MySqlParser.CREATE)
            self.state = 920
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==392:
                self.state = 919
                self.ownerStatement()


            self.state = 922
            self.match(MySqlParser.EVENT)
            self.state = 924
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,21,self._ctx)
            if la_ == 1:
                self.state = 923
                self.ifNotExists()


            self.state = 926
            self.fullId()
            self.state = 927
            self.match(MySqlParser.ON)
            self.state = 928
            self.match(MySqlParser.SCHEDULE)
            self.state = 929
            self.scheduleExpression()
            self.state = 936
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==118:
                self.state = 930
                self.match(MySqlParser.ON)
                self.state = 931
                self.match(MySqlParser.COMPLETION)
                self.state = 933
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==114:
                    self.state = 932
                    self.match(MySqlParser.NOT)


                self.state = 935
                self.match(MySqlParser.PRESERVE)


            self.state = 939
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==396 or _la==403:
                self.state = 938
                self.enableType()


            self.state = 943
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==368:
                self.state = 941
                self.match(MySqlParser.COMMENT)
                self.state = 942
                self.match(MySqlParser.STRING_LITERAL)


            self.state = 945
            self.match(MySqlParser.DO)
            self.state = 946
            self.routineBody()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CreateIndexContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.intimeAction = None # Token
            self.indexCategory = None # Token
            self.algType = None # Token
            self.lockType = None # Token

        def CREATE(self):
            return self.getToken(MySqlParser.CREATE, 0)

        def INDEX(self):
            return self.getToken(MySqlParser.INDEX, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def ON(self):
            return self.getToken(MySqlParser.ON, 0)

        def tableName(self):
            return self.getTypedRuleContext(MySqlParser.TableNameContext,0)


        def indexColumnNames(self):
            return self.getTypedRuleContext(MySqlParser.IndexColumnNamesContext,0)


        def indexType(self):
            return self.getTypedRuleContext(MySqlParser.IndexTypeContext,0)


        def indexOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.IndexOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.IndexOptionContext,i)


        def ALGORITHM(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.ALGORITHM)
            else:
                return self.getToken(MySqlParser.ALGORITHM, i)

        def LOCK(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.LOCK)
            else:
                return self.getToken(MySqlParser.LOCK, i)

        def ONLINE(self):
            return self.getToken(MySqlParser.ONLINE, 0)

        def OFFLINE(self):
            return self.getToken(MySqlParser.OFFLINE, 0)

        def UNIQUE(self):
            return self.getToken(MySqlParser.UNIQUE, 0)

        def FULLTEXT(self):
            return self.getToken(MySqlParser.FULLTEXT, 0)

        def SPATIAL(self):
            return self.getToken(MySqlParser.SPATIAL, 0)

        def DEFAULT(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.DEFAULT)
            else:
                return self.getToken(MySqlParser.DEFAULT, i)

        def INPLACE(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.INPLACE)
            else:
                return self.getToken(MySqlParser.INPLACE, i)

        def COPY(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COPY)
            else:
                return self.getToken(MySqlParser.COPY, i)

        def NONE(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.NONE)
            else:
                return self.getToken(MySqlParser.NONE, i)

        def SHARED(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.SHARED)
            else:
                return self.getToken(MySqlParser.SHARED, i)

        def EXCLUSIVE(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.EXCLUSIVE)
            else:
                return self.getToken(MySqlParser.EXCLUSIVE, i)

        def EQUAL_SYMBOL(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.EQUAL_SYMBOL)
            else:
                return self.getToken(MySqlParser.EQUAL_SYMBOL, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_createIndex

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreateIndex" ):
                listener.enterCreateIndex(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreateIndex" ):
                listener.exitCreateIndex(self)




    def createIndex(self):

        localctx = MySqlParser.CreateIndexContext(self, self._ctx, self.state)
        self.enterRule(localctx, 28, self.RULE_createIndex)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 948
            self.match(MySqlParser.CREATE)
            self.state = 950
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==531 or _la==537:
                self.state = 949
                localctx.intimeAction = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==531 or _la==537):
                    localctx.intimeAction = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 953
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==69 or _la==159 or _la==181:
                self.state = 952
                localctx.indexCategory = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==69 or _la==159 or _la==181):
                    localctx.indexCategory = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 955
            self.match(MySqlParser.INDEX)
            self.state = 956
            self.uid()
            self.state = 958
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==187:
                self.state = 957
                self.indexType()


            self.state = 960
            self.match(MySqlParser.ON)
            self.state = 961
            self.tableName()
            self.state = 962
            self.indexColumnNames()
            self.state = 966
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,29,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 963
                    self.indexOption() 
                self.state = 968
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,29,self._ctx)

            self.state = 981
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,33,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 979
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [336]:
                        self.state = 969
                        self.match(MySqlParser.ALGORITHM)
                        self.state = 971
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if _la==1124:
                            self.state = 970
                            self.match(MySqlParser.EQUAL_SYMBOL)


                        self.state = 973
                        localctx.algType = self._input.LT(1)
                        _la = self._input.LA(1)
                        if not(_la==42 or _la==384 or _la==454):
                            localctx.algType = self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()
                        pass
                    elif token in [103]:
                        self.state = 974
                        self.match(MySqlParser.LOCK)
                        self.state = 976
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if _la==1124:
                            self.state = 975
                            self.match(MySqlParser.EQUAL_SYMBOL)


                        self.state = 978
                        localctx.lockType = self._input.LT(1)
                        _la = self._input.LA(1)
                        if not(_la==42 or _la==419 or _la==529 or _la==611):
                            localctx.lockType = self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()
                        pass
                    else:
                        raise NoViableAltException(self)
             
                self.state = 983
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,33,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CreateLogfileGroupContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.undoFile = None # Token
            self.initSize = None # FileSizeLiteralContext
            self.undoSize = None # FileSizeLiteralContext
            self.redoSize = None # FileSizeLiteralContext
            self.comment = None # Token

        def CREATE(self):
            return self.getToken(MySqlParser.CREATE, 0)

        def LOGFILE(self):
            return self.getToken(MySqlParser.LOGFILE, 0)

        def GROUP(self):
            return self.getToken(MySqlParser.GROUP, 0)

        def uid(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UidContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UidContext,i)


        def ADD(self):
            return self.getToken(MySqlParser.ADD, 0)

        def UNDOFILE(self):
            return self.getToken(MySqlParser.UNDOFILE, 0)

        def ENGINE(self):
            return self.getToken(MySqlParser.ENGINE, 0)

        def engineName(self):
            return self.getTypedRuleContext(MySqlParser.EngineNameContext,0)


        def STRING_LITERAL(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.STRING_LITERAL)
            else:
                return self.getToken(MySqlParser.STRING_LITERAL, i)

        def INITIAL_SIZE(self):
            return self.getToken(MySqlParser.INITIAL_SIZE, 0)

        def UNDO_BUFFER_SIZE(self):
            return self.getToken(MySqlParser.UNDO_BUFFER_SIZE, 0)

        def REDO_BUFFER_SIZE(self):
            return self.getToken(MySqlParser.REDO_BUFFER_SIZE, 0)

        def NODEGROUP(self):
            return self.getToken(MySqlParser.NODEGROUP, 0)

        def WAIT(self):
            return self.getToken(MySqlParser.WAIT, 0)

        def COMMENT(self):
            return self.getToken(MySqlParser.COMMENT, 0)

        def EQUAL_SYMBOL(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.EQUAL_SYMBOL)
            else:
                return self.getToken(MySqlParser.EQUAL_SYMBOL, i)

        def fileSizeLiteral(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.FileSizeLiteralContext)
            else:
                return self.getTypedRuleContext(MySqlParser.FileSizeLiteralContext,i)


        def getRuleIndex(self):
            return MySqlParser.RULE_createLogfileGroup

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreateLogfileGroup" ):
                listener.enterCreateLogfileGroup(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreateLogfileGroup" ):
                listener.exitCreateLogfileGroup(self)




    def createLogfileGroup(self):

        localctx = MySqlParser.CreateLogfileGroupContext(self, self._ctx, self.state)
        self.enterRule(localctx, 30, self.RULE_createLogfileGroup)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 984
            self.match(MySqlParser.CREATE)
            self.state = 985
            self.match(MySqlParser.LOGFILE)
            self.state = 986
            self.match(MySqlParser.GROUP)
            self.state = 987
            self.uid()
            self.state = 988
            self.match(MySqlParser.ADD)
            self.state = 989
            self.match(MySqlParser.UNDOFILE)
            self.state = 990
            localctx.undoFile = self.match(MySqlParser.STRING_LITERAL)
            self.state = 996
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==453:
                self.state = 991
                self.match(MySqlParser.INITIAL_SIZE)
                self.state = 993
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 992
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 995
                localctx.initSize = self.fileSizeLiteral()


            self.state = 1003
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==660:
                self.state = 998
                self.match(MySqlParser.UNDO_BUFFER_SIZE)
                self.state = 1000
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 999
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1002
                localctx.undoSize = self.fileSizeLiteral()


            self.state = 1010
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==572:
                self.state = 1005
                self.match(MySqlParser.REDO_BUFFER_SIZE)
                self.state = 1007
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1006
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1009
                localctx.redoSize = self.fileSizeLiteral()


            self.state = 1017
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==528:
                self.state = 1012
                self.match(MySqlParser.NODEGROUP)
                self.state = 1014
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1013
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1016
                self.uid()


            self.state = 1020
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==674:
                self.state = 1019
                self.match(MySqlParser.WAIT)


            self.state = 1027
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==368:
                self.state = 1022
                self.match(MySqlParser.COMMENT)
                self.state = 1024
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1023
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1026
                localctx.comment = self.match(MySqlParser.STRING_LITERAL)


            self.state = 1029
            self.match(MySqlParser.ENGINE)
            self.state = 1031
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1124:
                self.state = 1030
                self.match(MySqlParser.EQUAL_SYMBOL)


            self.state = 1033
            self.engineName()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CreateProcedureContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(MySqlParser.CREATE, 0)

        def PROCEDURE(self):
            return self.getToken(MySqlParser.PROCEDURE, 0)

        def fullId(self):
            return self.getTypedRuleContext(MySqlParser.FullIdContext,0)


        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def routineBody(self):
            return self.getTypedRuleContext(MySqlParser.RoutineBodyContext,0)


        def ownerStatement(self):
            return self.getTypedRuleContext(MySqlParser.OwnerStatementContext,0)


        def procedureParameter(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ProcedureParameterContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ProcedureParameterContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def routineOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.RoutineOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.RoutineOptionContext,i)


        def getRuleIndex(self):
            return MySqlParser.RULE_createProcedure

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreateProcedure" ):
                listener.enterCreateProcedure(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreateProcedure" ):
                listener.exitCreateProcedure(self)




    def createProcedure(self):

        localctx = MySqlParser.CreateProcedureContext(self, self._ctx, self.state)
        self.enterRule(localctx, 32, self.RULE_createProcedure)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 1035
            self.match(MySqlParser.CREATE)
            self.state = 1037
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==392:
                self.state = 1036
                self.ownerStatement()


            self.state = 1039
            self.match(MySqlParser.PROCEDURE)
            self.state = 1040
            self.fullId()
            self.state = 1041
            self.match(MySqlParser.LR_BRACKET)
            self.state = 1043
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513122304) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 151169654698547409) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                self.state = 1042
                self.procedureParameter()


            self.state = 1049
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 1045
                self.match(MySqlParser.COMMA)
                self.state = 1046
                self.procedureParameter()
                self.state = 1051
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 1052
            self.match(MySqlParser.RR_BRACKET)
            self.state = 1056
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,49,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 1053
                    self.routineOption() 
                self.state = 1058
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,49,self._ctx)

            self.state = 1059
            self.routineBody()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CreateFunctionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(MySqlParser.CREATE, 0)

        def FUNCTION(self):
            return self.getToken(MySqlParser.FUNCTION, 0)

        def fullId(self):
            return self.getTypedRuleContext(MySqlParser.FullIdContext,0)


        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def RETURNS(self):
            return self.getToken(MySqlParser.RETURNS, 0)

        def dataType(self):
            return self.getTypedRuleContext(MySqlParser.DataTypeContext,0)


        def routineBody(self):
            return self.getTypedRuleContext(MySqlParser.RoutineBodyContext,0)


        def returnStatement(self):
            return self.getTypedRuleContext(MySqlParser.ReturnStatementContext,0)


        def ownerStatement(self):
            return self.getTypedRuleContext(MySqlParser.OwnerStatementContext,0)


        def AGGREGATE(self):
            return self.getToken(MySqlParser.AGGREGATE, 0)

        def ifNotExists(self):
            return self.getTypedRuleContext(MySqlParser.IfNotExistsContext,0)


        def functionParameter(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.FunctionParameterContext)
            else:
                return self.getTypedRuleContext(MySqlParser.FunctionParameterContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def routineOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.RoutineOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.RoutineOptionContext,i)


        def getRuleIndex(self):
            return MySqlParser.RULE_createFunction

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreateFunction" ):
                listener.enterCreateFunction(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreateFunction" ):
                listener.exitCreateFunction(self)




    def createFunction(self):

        localctx = MySqlParser.CreateFunctionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 34, self.RULE_createFunction)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 1061
            self.match(MySqlParser.CREATE)
            self.state = 1063
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==392:
                self.state = 1062
                self.ownerStatement()


            self.state = 1066
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==335:
                self.state = 1065
                self.match(MySqlParser.AGGREGATE)


            self.state = 1068
            self.match(MySqlParser.FUNCTION)
            self.state = 1070
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,52,self._ctx)
            if la_ == 1:
                self.state = 1069
                self.ifNotExists()


            self.state = 1072
            self.fullId()
            self.state = 1073
            self.match(MySqlParser.LR_BRACKET)
            self.state = 1075
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513122304) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055071174737) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                self.state = 1074
                self.functionParameter()


            self.state = 1081
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 1077
                self.match(MySqlParser.COMMA)
                self.state = 1078
                self.functionParameter()
                self.state = 1083
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 1084
            self.match(MySqlParser.RR_BRACKET)
            self.state = 1085
            self.match(MySqlParser.RETURNS)
            self.state = 1086
            self.dataType()
            self.state = 1090
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,55,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 1087
                    self.routineOption() 
                self.state = 1092
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,55,self._ctx)

            self.state = 1095
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [7, 9, 11, 14, 18, 20, 24, 26, 29, 33, 35, 37, 39, 42, 44, 45, 46, 48, 51, 55, 57, 59, 62, 71, 72, 73, 77, 79, 85, 93, 94, 97, 102, 103, 117, 119, 121, 124, 130, 132, 138, 139, 140, 141, 143, 147, 148, 150, 152, 153, 155, 156, 158, 168, 172, 182, 184, 186, 188, 192, 217, 218, 219, 220, 221, 226, 234, 237, 239, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 405, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 523, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 677, 678, 679, 680, 681, 682, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 717, 718, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1123, 1133, 1145, 1148, 1156]:
                self.state = 1093
                self.routineBody()
                pass
            elif token in [146]:
                self.state = 1094
                self.returnStatement()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CreateRoleContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(MySqlParser.CREATE, 0)

        def ROLE(self):
            return self.getToken(MySqlParser.ROLE, 0)

        def roleName(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.RoleNameContext)
            else:
                return self.getTypedRuleContext(MySqlParser.RoleNameContext,i)


        def ifNotExists(self):
            return self.getTypedRuleContext(MySqlParser.IfNotExistsContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_createRole

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreateRole" ):
                listener.enterCreateRole(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreateRole" ):
                listener.exitCreateRole(self)




    def createRole(self):

        localctx = MySqlParser.CreateRoleContext(self, self._ctx, self.state)
        self.enterRule(localctx, 36, self.RULE_createRole)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 1097
            self.match(MySqlParser.CREATE)
            self.state = 1098
            self.match(MySqlParser.ROLE)
            self.state = 1100
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,57,self._ctx)
            if la_ == 1:
                self.state = 1099
                self.ifNotExists()


            self.state = 1102
            self.roleName()
            self.state = 1107
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 1103
                self.match(MySqlParser.COMMA)
                self.state = 1104
                self.roleName()
                self.state = 1109
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CreateServerContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.wrapperName = None # Token

        def CREATE(self):
            return self.getToken(MySqlParser.CREATE, 0)

        def SERVER(self):
            return self.getToken(MySqlParser.SERVER, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def FOREIGN(self):
            return self.getToken(MySqlParser.FOREIGN, 0)

        def DATA(self):
            return self.getToken(MySqlParser.DATA, 0)

        def WRAPPER(self):
            return self.getToken(MySqlParser.WRAPPER, 0)

        def OPTIONS(self):
            return self.getToken(MySqlParser.OPTIONS, 0)

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def serverOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ServerOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ServerOptionContext,i)


        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def MYSQL(self):
            return self.getToken(MySqlParser.MYSQL, 0)

        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_createServer

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreateServer" ):
                listener.enterCreateServer(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreateServer" ):
                listener.exitCreateServer(self)




    def createServer(self):

        localctx = MySqlParser.CreateServerContext(self, self._ctx, self.state)
        self.enterRule(localctx, 38, self.RULE_createServer)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 1110
            self.match(MySqlParser.CREATE)
            self.state = 1111
            self.match(MySqlParser.SERVER)
            self.state = 1112
            self.uid()
            self.state = 1113
            self.match(MySqlParser.FOREIGN)
            self.state = 1114
            self.match(MySqlParser.DATA)
            self.state = 1115
            self.match(MySqlParser.WRAPPER)
            self.state = 1116
            localctx.wrapperName = self._input.LT(1)
            _la = self._input.LA(1)
            if not(_la==514 or _la==1148):
                localctx.wrapperName = self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 1117
            self.match(MySqlParser.OPTIONS)
            self.state = 1118
            self.match(MySqlParser.LR_BRACKET)
            self.state = 1119
            self.serverOption()
            self.state = 1124
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 1120
                self.match(MySqlParser.COMMA)
                self.state = 1121
                self.serverOption()
                self.state = 1126
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 1127
            self.match(MySqlParser.RR_BRACKET)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CreateTableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_createTable

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class CopyCreateTableContext(CreateTableContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.CreateTableContext
            super().__init__(parser)
            self.parenthesisTable = None # TableNameContext
            self.copyFrom(ctx)

        def CREATE(self):
            return self.getToken(MySqlParser.CREATE, 0)
        def TABLE(self):
            return self.getToken(MySqlParser.TABLE, 0)
        def tableName(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.TableNameContext)
            else:
                return self.getTypedRuleContext(MySqlParser.TableNameContext,i)

        def LIKE(self):
            return self.getToken(MySqlParser.LIKE, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def TEMPORARY(self):
            return self.getToken(MySqlParser.TEMPORARY, 0)
        def ifNotExists(self):
            return self.getTypedRuleContext(MySqlParser.IfNotExistsContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCopyCreateTable" ):
                listener.enterCopyCreateTable(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCopyCreateTable" ):
                listener.exitCopyCreateTable(self)


    class ColumnCreateTableContext(CreateTableContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.CreateTableContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def CREATE(self):
            return self.getToken(MySqlParser.CREATE, 0)
        def TABLE(self):
            return self.getToken(MySqlParser.TABLE, 0)
        def tableName(self):
            return self.getTypedRuleContext(MySqlParser.TableNameContext,0)

        def createDefinitions(self):
            return self.getTypedRuleContext(MySqlParser.CreateDefinitionsContext,0)

        def TEMPORARY(self):
            return self.getToken(MySqlParser.TEMPORARY, 0)
        def ifNotExists(self):
            return self.getTypedRuleContext(MySqlParser.IfNotExistsContext,0)

        def tableOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.TableOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.TableOptionContext,i)

        def partitionDefinitions(self):
            return self.getTypedRuleContext(MySqlParser.PartitionDefinitionsContext,0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterColumnCreateTable" ):
                listener.enterColumnCreateTable(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitColumnCreateTable" ):
                listener.exitColumnCreateTable(self)


    class QueryCreateTableContext(CreateTableContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.CreateTableContext
            super().__init__(parser)
            self.keyViolate = None # Token
            self.copyFrom(ctx)

        def CREATE(self):
            return self.getToken(MySqlParser.CREATE, 0)
        def TABLE(self):
            return self.getToken(MySqlParser.TABLE, 0)
        def tableName(self):
            return self.getTypedRuleContext(MySqlParser.TableNameContext,0)

        def selectStatement(self):
            return self.getTypedRuleContext(MySqlParser.SelectStatementContext,0)

        def TEMPORARY(self):
            return self.getToken(MySqlParser.TEMPORARY, 0)
        def ifNotExists(self):
            return self.getTypedRuleContext(MySqlParser.IfNotExistsContext,0)

        def createDefinitions(self):
            return self.getTypedRuleContext(MySqlParser.CreateDefinitionsContext,0)

        def tableOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.TableOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.TableOptionContext,i)

        def partitionDefinitions(self):
            return self.getTypedRuleContext(MySqlParser.PartitionDefinitionsContext,0)

        def AS(self):
            return self.getToken(MySqlParser.AS, 0)
        def IGNORE(self):
            return self.getToken(MySqlParser.IGNORE, 0)
        def REPLACE(self):
            return self.getToken(MySqlParser.REPLACE, 0)
        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterQueryCreateTable" ):
                listener.enterQueryCreateTable(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitQueryCreateTable" ):
                listener.exitQueryCreateTable(self)



    def createTable(self):

        localctx = MySqlParser.CreateTableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 40, self.RULE_createTable)
        self._la = 0 # Token type
        try:
            self.state = 1207
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,78,self._ctx)
            if la_ == 1:
                localctx = MySqlParser.CopyCreateTableContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 1129
                self.match(MySqlParser.CREATE)
                self.state = 1131
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==649:
                    self.state = 1130
                    self.match(MySqlParser.TEMPORARY)


                self.state = 1133
                self.match(MySqlParser.TABLE)
                self.state = 1135
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,61,self._ctx)
                if la_ == 1:
                    self.state = 1134
                    self.ifNotExists()


                self.state = 1137
                self.tableName()
                self.state = 1145
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [98]:
                    self.state = 1138
                    self.match(MySqlParser.LIKE)
                    self.state = 1139
                    self.tableName()
                    pass
                elif token in [1133]:
                    self.state = 1140
                    self.match(MySqlParser.LR_BRACKET)
                    self.state = 1141
                    self.match(MySqlParser.LIKE)
                    self.state = 1142
                    localctx.parenthesisTable = self.tableName()
                    self.state = 1143
                    self.match(MySqlParser.RR_BRACKET)
                    pass
                else:
                    raise NoViableAltException(self)

                pass

            elif la_ == 2:
                localctx = MySqlParser.QueryCreateTableContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 1147
                self.match(MySqlParser.CREATE)
                self.state = 1149
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==649:
                    self.state = 1148
                    self.match(MySqlParser.TEMPORARY)


                self.state = 1151
                self.match(MySqlParser.TABLE)
                self.state = 1153
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,64,self._ctx)
                if la_ == 1:
                    self.state = 1152
                    self.ifNotExists()


                self.state = 1155
                self.tableName()
                self.state = 1157
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,65,self._ctx)
                if la_ == 1:
                    self.state = 1156
                    self.createDefinitions()


                self.state = 1169
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if ((((_la - 25)) & ~0x3f) == 0 and ((1 << (_la - 25)) & 72057594038059013) != 0) or _la==180 or _la==222 or ((((_la - 341)) & ~0x3f) == 0 and ((1 << (_la - 341)) & 4644375904747527) != 0) or ((((_la - 405)) & ~0x3f) == 0 and ((1 << (_la - 405)) & 4612811918334230547) != 0) or ((((_la - 500)) & ~0x3f) == 0 and ((1 << (_la - 500)) & 2366149022974977) != 0) or ((((_la - 602)) & ~0x3f) == 0 and ((1 << (_la - 602)) & 4609173815820289) != 0) or _la==841 or _la==875 or _la==1000 or _la==1148:
                    self.state = 1159
                    self.tableOption()
                    self.state = 1166
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while ((((_la - 25)) & ~0x3f) == 0 and ((1 << (_la - 25)) & 72057594038059013) != 0) or _la==180 or _la==222 or ((((_la - 341)) & ~0x3f) == 0 and ((1 << (_la - 341)) & 4644375904747527) != 0) or ((((_la - 405)) & ~0x3f) == 0 and ((1 << (_la - 405)) & 4612811918334230547) != 0) or ((((_la - 500)) & ~0x3f) == 0 and ((1 << (_la - 500)) & 2366149022974977) != 0) or ((((_la - 602)) & ~0x3f) == 0 and ((1 << (_la - 602)) & 4609173815820289) != 0) or _la==841 or _la==875 or _la==1000 or _la==1135 or _la==1148:
                        self.state = 1161
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if _la==1135:
                            self.state = 1160
                            self.match(MySqlParser.COMMA)


                        self.state = 1163
                        self.tableOption()
                        self.state = 1168
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)



                self.state = 1172
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==129:
                    self.state = 1171
                    self.partitionDefinitions()


                self.state = 1175
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==78 or _la==141:
                    self.state = 1174
                    localctx.keyViolate = self._input.LT(1)
                    _la = self._input.LA(1)
                    if not(_la==78 or _la==141):
                        localctx.keyViolate = self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 1178
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==12:
                    self.state = 1177
                    self.match(MySqlParser.AS)


                self.state = 1180
                self.selectStatement()
                pass

            elif la_ == 3:
                localctx = MySqlParser.ColumnCreateTableContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 1182
                self.match(MySqlParser.CREATE)
                self.state = 1184
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==649:
                    self.state = 1183
                    self.match(MySqlParser.TEMPORARY)


                self.state = 1186
                self.match(MySqlParser.TABLE)
                self.state = 1188
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,73,self._ctx)
                if la_ == 1:
                    self.state = 1187
                    self.ifNotExists()


                self.state = 1190
                self.tableName()
                self.state = 1191
                self.createDefinitions()
                self.state = 1202
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,76,self._ctx)
                if la_ == 1:
                    self.state = 1192
                    self.tableOption()
                    self.state = 1199
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,75,self._ctx)
                    while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                        if _alt==1:
                            self.state = 1194
                            self._errHandler.sync(self)
                            _la = self._input.LA(1)
                            if _la==1135:
                                self.state = 1193
                                self.match(MySqlParser.COMMA)


                            self.state = 1196
                            self.tableOption() 
                        self.state = 1201
                        self._errHandler.sync(self)
                        _alt = self._interp.adaptivePredict(self._input,75,self._ctx)



                self.state = 1205
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==129:
                    self.state = 1204
                    self.partitionDefinitions()


                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CreateTablespaceInnodbContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.datafile = None # Token
            self.fileBlockSize = None # FileSizeLiteralContext

        def CREATE(self):
            return self.getToken(MySqlParser.CREATE, 0)

        def TABLESPACE(self):
            return self.getToken(MySqlParser.TABLESPACE, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def ADD(self):
            return self.getToken(MySqlParser.ADD, 0)

        def DATAFILE(self):
            return self.getToken(MySqlParser.DATAFILE, 0)

        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def FILE_BLOCK_SIZE(self):
            return self.getToken(MySqlParser.FILE_BLOCK_SIZE, 0)

        def EQUAL_SYMBOL(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.EQUAL_SYMBOL)
            else:
                return self.getToken(MySqlParser.EQUAL_SYMBOL, i)

        def ENGINE(self):
            return self.getToken(MySqlParser.ENGINE, 0)

        def engineName(self):
            return self.getTypedRuleContext(MySqlParser.EngineNameContext,0)


        def fileSizeLiteral(self):
            return self.getTypedRuleContext(MySqlParser.FileSizeLiteralContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_createTablespaceInnodb

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreateTablespaceInnodb" ):
                listener.enterCreateTablespaceInnodb(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreateTablespaceInnodb" ):
                listener.exitCreateTablespaceInnodb(self)




    def createTablespaceInnodb(self):

        localctx = MySqlParser.CreateTablespaceInnodbContext(self, self._ctx, self.state)
        self.enterRule(localctx, 42, self.RULE_createTablespaceInnodb)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 1209
            self.match(MySqlParser.CREATE)
            self.state = 1210
            self.match(MySqlParser.TABLESPACE)
            self.state = 1211
            self.uid()
            self.state = 1212
            self.match(MySqlParser.ADD)
            self.state = 1213
            self.match(MySqlParser.DATAFILE)
            self.state = 1214
            localctx.datafile = self.match(MySqlParser.STRING_LITERAL)
            self.state = 1218
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==428:
                self.state = 1215
                self.match(MySqlParser.FILE_BLOCK_SIZE)
                self.state = 1216
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 1217
                localctx.fileBlockSize = self.fileSizeLiteral()


            self.state = 1225
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==409:
                self.state = 1220
                self.match(MySqlParser.ENGINE)
                self.state = 1222
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1221
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1224
                self.engineName()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CreateTablespaceNdbContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.datafile = None # Token
            self.extentSize = None # FileSizeLiteralContext
            self.initialSize = None # FileSizeLiteralContext
            self.autoextendSize = None # FileSizeLiteralContext
            self.maxSize = None # FileSizeLiteralContext
            self.comment = None # Token

        def CREATE(self):
            return self.getToken(MySqlParser.CREATE, 0)

        def TABLESPACE(self):
            return self.getToken(MySqlParser.TABLESPACE, 0)

        def uid(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UidContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UidContext,i)


        def ADD(self):
            return self.getToken(MySqlParser.ADD, 0)

        def DATAFILE(self):
            return self.getToken(MySqlParser.DATAFILE, 0)

        def USE(self):
            return self.getToken(MySqlParser.USE, 0)

        def LOGFILE(self):
            return self.getToken(MySqlParser.LOGFILE, 0)

        def GROUP(self):
            return self.getToken(MySqlParser.GROUP, 0)

        def ENGINE(self):
            return self.getToken(MySqlParser.ENGINE, 0)

        def engineName(self):
            return self.getTypedRuleContext(MySqlParser.EngineNameContext,0)


        def STRING_LITERAL(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.STRING_LITERAL)
            else:
                return self.getToken(MySqlParser.STRING_LITERAL, i)

        def EXTENT_SIZE(self):
            return self.getToken(MySqlParser.EXTENT_SIZE, 0)

        def INITIAL_SIZE(self):
            return self.getToken(MySqlParser.INITIAL_SIZE, 0)

        def AUTOEXTEND_SIZE(self):
            return self.getToken(MySqlParser.AUTOEXTEND_SIZE, 0)

        def MAX_SIZE(self):
            return self.getToken(MySqlParser.MAX_SIZE, 0)

        def NODEGROUP(self):
            return self.getToken(MySqlParser.NODEGROUP, 0)

        def WAIT(self):
            return self.getToken(MySqlParser.WAIT, 0)

        def COMMENT(self):
            return self.getToken(MySqlParser.COMMENT, 0)

        def EQUAL_SYMBOL(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.EQUAL_SYMBOL)
            else:
                return self.getToken(MySqlParser.EQUAL_SYMBOL, i)

        def fileSizeLiteral(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.FileSizeLiteralContext)
            else:
                return self.getTypedRuleContext(MySqlParser.FileSizeLiteralContext,i)


        def getRuleIndex(self):
            return MySqlParser.RULE_createTablespaceNdb

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreateTablespaceNdb" ):
                listener.enterCreateTablespaceNdb(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreateTablespaceNdb" ):
                listener.exitCreateTablespaceNdb(self)




    def createTablespaceNdb(self):

        localctx = MySqlParser.CreateTablespaceNdbContext(self, self._ctx, self.state)
        self.enterRule(localctx, 44, self.RULE_createTablespaceNdb)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 1227
            self.match(MySqlParser.CREATE)
            self.state = 1228
            self.match(MySqlParser.TABLESPACE)
            self.state = 1229
            self.uid()
            self.state = 1230
            self.match(MySqlParser.ADD)
            self.state = 1231
            self.match(MySqlParser.DATAFILE)
            self.state = 1232
            localctx.datafile = self.match(MySqlParser.STRING_LITERAL)
            self.state = 1233
            self.match(MySqlParser.USE)
            self.state = 1234
            self.match(MySqlParser.LOGFILE)
            self.state = 1235
            self.match(MySqlParser.GROUP)
            self.state = 1236
            self.uid()
            self.state = 1242
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==423:
                self.state = 1237
                self.match(MySqlParser.EXTENT_SIZE)
                self.state = 1239
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1238
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1241
                localctx.extentSize = self.fileSizeLiteral()


            self.state = 1249
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==453:
                self.state = 1244
                self.match(MySqlParser.INITIAL_SIZE)
                self.state = 1246
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1245
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1248
                localctx.initialSize = self.fileSizeLiteral()


            self.state = 1256
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==341:
                self.state = 1251
                self.match(MySqlParser.AUTOEXTEND_SIZE)
                self.state = 1253
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1252
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1255
                localctx.autoextendSize = self.fileSizeLiteral()


            self.state = 1263
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==501:
                self.state = 1258
                self.match(MySqlParser.MAX_SIZE)
                self.state = 1260
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1259
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1262
                localctx.maxSize = self.fileSizeLiteral()


            self.state = 1270
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==528:
                self.state = 1265
                self.match(MySqlParser.NODEGROUP)
                self.state = 1267
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1266
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1269
                self.uid()


            self.state = 1273
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==674:
                self.state = 1272
                self.match(MySqlParser.WAIT)


            self.state = 1280
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==368:
                self.state = 1275
                self.match(MySqlParser.COMMENT)
                self.state = 1277
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1276
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1279
                localctx.comment = self.match(MySqlParser.STRING_LITERAL)


            self.state = 1282
            self.match(MySqlParser.ENGINE)
            self.state = 1284
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1124:
                self.state = 1283
                self.match(MySqlParser.EQUAL_SYMBOL)


            self.state = 1286
            self.engineName()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CreateTriggerContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.thisTrigger = None # FullIdContext
            self.triggerTime = None # Token
            self.triggerEvent = None # Token
            self.triggerPlace = None # Token
            self.otherTrigger = None # FullIdContext

        def CREATE(self):
            return self.getToken(MySqlParser.CREATE, 0)

        def TRIGGER(self):
            return self.getToken(MySqlParser.TRIGGER, 0)

        def ON(self):
            return self.getToken(MySqlParser.ON, 0)

        def tableName(self):
            return self.getTypedRuleContext(MySqlParser.TableNameContext,0)


        def FOR(self):
            return self.getToken(MySqlParser.FOR, 0)

        def EACH(self):
            return self.getToken(MySqlParser.EACH, 0)

        def ROW(self):
            return self.getToken(MySqlParser.ROW, 0)

        def routineBody(self):
            return self.getTypedRuleContext(MySqlParser.RoutineBodyContext,0)


        def fullId(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.FullIdContext)
            else:
                return self.getTypedRuleContext(MySqlParser.FullIdContext,i)


        def BEFORE(self):
            return self.getToken(MySqlParser.BEFORE, 0)

        def AFTER(self):
            return self.getToken(MySqlParser.AFTER, 0)

        def INSERT(self):
            return self.getToken(MySqlParser.INSERT, 0)

        def UPDATE(self):
            return self.getToken(MySqlParser.UPDATE, 0)

        def DELETE(self):
            return self.getToken(MySqlParser.DELETE, 0)

        def ownerStatement(self):
            return self.getTypedRuleContext(MySqlParser.OwnerStatementContext,0)


        def FOLLOWS(self):
            return self.getToken(MySqlParser.FOLLOWS, 0)

        def PRECEDES(self):
            return self.getToken(MySqlParser.PRECEDES, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_createTrigger

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreateTrigger" ):
                listener.enterCreateTrigger(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreateTrigger" ):
                listener.exitCreateTrigger(self)




    def createTrigger(self):

        localctx = MySqlParser.CreateTriggerContext(self, self._ctx, self.state)
        self.enterRule(localctx, 46, self.RULE_createTrigger)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 1288
            self.match(MySqlParser.CREATE)
            self.state = 1290
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==392:
                self.state = 1289
                self.ownerStatement()


            self.state = 1292
            self.match(MySqlParser.TRIGGER)
            self.state = 1293
            localctx.thisTrigger = self.fullId()
            self.state = 1294
            localctx.triggerTime = self._input.LT(1)
            _la = self._input.LA(1)
            if not(_la==15 or _la==334):
                localctx.triggerTime = self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 1295
            localctx.triggerEvent = self._input.LT(1)
            _la = self._input.LA(1)
            if not(_la==44 or _la==85 or _la==184):
                localctx.triggerEvent = self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 1296
            self.match(MySqlParser.ON)
            self.state = 1297
            self.tableName()
            self.state = 1298
            self.match(MySqlParser.FOR)
            self.state = 1299
            self.match(MySqlParser.EACH)
            self.state = 1300
            self.match(MySqlParser.ROW)
            self.state = 1303
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,97,self._ctx)
            if la_ == 1:
                self.state = 1301
                localctx.triggerPlace = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==434 or _la==558):
                    localctx.triggerPlace = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 1302
                localctx.otherTrigger = self.fullId()


            self.state = 1305
            self.routineBody()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class WithClauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def WITH(self):
            return self.getToken(MySqlParser.WITH, 0)

        def commonTableExpressions(self):
            return self.getTypedRuleContext(MySqlParser.CommonTableExpressionsContext,0)


        def RECURSIVE(self):
            return self.getToken(MySqlParser.RECURSIVE, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_withClause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterWithClause" ):
                listener.enterWithClause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitWithClause" ):
                listener.exitWithClause(self)




    def withClause(self):

        localctx = MySqlParser.WithClauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 48, self.RULE_withClause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 1307
            self.match(MySqlParser.WITH)
            self.state = 1309
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,98,self._ctx)
            if la_ == 1:
                self.state = 1308
                self.match(MySqlParser.RECURSIVE)


            self.state = 1311
            self.commonTableExpressions()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CommonTableExpressionsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def cteName(self):
            return self.getTypedRuleContext(MySqlParser.CteNameContext,0)


        def AS(self):
            return self.getToken(MySqlParser.AS, 0)

        def LR_BRACKET(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.LR_BRACKET)
            else:
                return self.getToken(MySqlParser.LR_BRACKET, i)

        def dmlStatement(self):
            return self.getTypedRuleContext(MySqlParser.DmlStatementContext,0)


        def RR_BRACKET(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.RR_BRACKET)
            else:
                return self.getToken(MySqlParser.RR_BRACKET, i)

        def cteColumnName(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.CteColumnNameContext)
            else:
                return self.getTypedRuleContext(MySqlParser.CteColumnNameContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def commonTableExpressions(self):
            return self.getTypedRuleContext(MySqlParser.CommonTableExpressionsContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_commonTableExpressions

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCommonTableExpressions" ):
                listener.enterCommonTableExpressions(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCommonTableExpressions" ):
                listener.exitCommonTableExpressions(self)




    def commonTableExpressions(self):

        localctx = MySqlParser.CommonTableExpressionsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 50, self.RULE_commonTableExpressions)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 1313
            self.cteName()
            self.state = 1325
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1133:
                self.state = 1314
                self.match(MySqlParser.LR_BRACKET)
                self.state = 1315
                self.cteColumnName()
                self.state = 1320
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 1316
                    self.match(MySqlParser.COMMA)
                    self.state = 1317
                    self.cteColumnName()
                    self.state = 1322
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 1323
                self.match(MySqlParser.RR_BRACKET)


            self.state = 1327
            self.match(MySqlParser.AS)
            self.state = 1328
            self.match(MySqlParser.LR_BRACKET)
            self.state = 1329
            self.dmlStatement()
            self.state = 1330
            self.match(MySqlParser.RR_BRACKET)
            self.state = 1333
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,101,self._ctx)
            if la_ == 1:
                self.state = 1331
                self.match(MySqlParser.COMMA)
                self.state = 1332
                self.commonTableExpressions()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CteNameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_cteName

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCteName" ):
                listener.enterCteName(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCteName" ):
                listener.exitCteName(self)




    def cteName(self):

        localctx = MySqlParser.CteNameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 52, self.RULE_cteName)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 1335
            self.uid()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CteColumnNameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_cteColumnName

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCteColumnName" ):
                listener.enterCteColumnName(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCteColumnName" ):
                listener.exitCteColumnName(self)




    def cteColumnName(self):

        localctx = MySqlParser.CteColumnNameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 54, self.RULE_cteColumnName)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 1337
            self.uid()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CreateViewContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.algType = None # Token
            self.secContext = None # Token
            self.checkOption = None # Token

        def CREATE(self):
            return self.getToken(MySqlParser.CREATE, 0)

        def VIEW(self):
            return self.getToken(MySqlParser.VIEW, 0)

        def fullId(self):
            return self.getTypedRuleContext(MySqlParser.FullIdContext,0)


        def AS(self):
            return self.getToken(MySqlParser.AS, 0)

        def LR_BRACKET(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.LR_BRACKET)
            else:
                return self.getToken(MySqlParser.LR_BRACKET, i)

        def selectStatement(self):
            return self.getTypedRuleContext(MySqlParser.SelectStatementContext,0)


        def RR_BRACKET(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.RR_BRACKET)
            else:
                return self.getToken(MySqlParser.RR_BRACKET, i)

        def orReplace(self):
            return self.getTypedRuleContext(MySqlParser.OrReplaceContext,0)


        def ALGORITHM(self):
            return self.getToken(MySqlParser.ALGORITHM, 0)

        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def ownerStatement(self):
            return self.getTypedRuleContext(MySqlParser.OwnerStatementContext,0)


        def SQL(self):
            return self.getToken(MySqlParser.SQL, 0)

        def SECURITY(self):
            return self.getToken(MySqlParser.SECURITY, 0)

        def uidList(self):
            return self.getTypedRuleContext(MySqlParser.UidListContext,0)


        def UNDEFINED(self):
            return self.getToken(MySqlParser.UNDEFINED, 0)

        def MERGE(self):
            return self.getToken(MySqlParser.MERGE, 0)

        def TEMPTABLE(self):
            return self.getToken(MySqlParser.TEMPTABLE, 0)

        def DEFINER(self):
            return self.getToken(MySqlParser.DEFINER, 0)

        def INVOKER(self):
            return self.getToken(MySqlParser.INVOKER, 0)

        def withClause(self):
            return self.getTypedRuleContext(MySqlParser.WithClauseContext,0)


        def WITH(self):
            return self.getToken(MySqlParser.WITH, 0)

        def CHECK(self):
            return self.getToken(MySqlParser.CHECK, 0)

        def OPTION(self):
            return self.getToken(MySqlParser.OPTION, 0)

        def CASCADED(self):
            return self.getToken(MySqlParser.CASCADED, 0)

        def LOCAL(self):
            return self.getToken(MySqlParser.LOCAL, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_createView

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreateView" ):
                listener.enterCreateView(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreateView" ):
                listener.exitCreateView(self)




    def createView(self):

        localctx = MySqlParser.CreateViewContext(self, self._ctx, self.state)
        self.enterRule(localctx, 56, self.RULE_createView)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 1339
            self.match(MySqlParser.CREATE)
            self.state = 1341
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==123:
                self.state = 1340
                self.orReplace()


            self.state = 1346
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==336:
                self.state = 1343
                self.match(MySqlParser.ALGORITHM)
                self.state = 1344
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 1345
                localctx.algType = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==506 or _la==650 or _la==658):
                    localctx.algType = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 1349
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==392:
                self.state = 1348
                self.ownerStatement()


            self.state = 1354
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==160:
                self.state = 1351
                self.match(MySqlParser.SQL)
                self.state = 1352
                self.match(MySqlParser.SECURITY)
                self.state = 1353
                localctx.secContext = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==392 or _la==460):
                    localctx.secContext = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 1356
            self.match(MySqlParser.VIEW)
            self.state = 1357
            self.fullId()
            self.state = 1362
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1133:
                self.state = 1358
                self.match(MySqlParser.LR_BRACKET)
                self.state = 1359
                self.uidList()
                self.state = 1360
                self.match(MySqlParser.RR_BRACKET)


            self.state = 1364
            self.match(MySqlParser.AS)
            self.state = 1384
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,111,self._ctx)
            if la_ == 1:
                self.state = 1365
                self.match(MySqlParser.LR_BRACKET)
                self.state = 1367
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==192:
                    self.state = 1366
                    self.withClause()


                self.state = 1369
                self.selectStatement()
                self.state = 1370
                self.match(MySqlParser.RR_BRACKET)
                pass

            elif la_ == 2:
                self.state = 1373
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==192:
                    self.state = 1372
                    self.withClause()


                self.state = 1375
                self.selectStatement()
                self.state = 1382
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,110,self._ctx)
                if la_ == 1:
                    self.state = 1376
                    self.match(MySqlParser.WITH)
                    self.state = 1378
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==352 or _la==474:
                        self.state = 1377
                        localctx.checkOption = self._input.LT(1)
                        _la = self._input.LA(1)
                        if not(_la==352 or _la==474):
                            localctx.checkOption = self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()


                    self.state = 1380
                    self.match(MySqlParser.CHECK)
                    self.state = 1381
                    self.match(MySqlParser.OPTION)


                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CreateDatabaseOptionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def charSet(self):
            return self.getTypedRuleContext(MySqlParser.CharSetContext,0)


        def charsetName(self):
            return self.getTypedRuleContext(MySqlParser.CharsetNameContext,0)


        def DEFAULT(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.DEFAULT)
            else:
                return self.getToken(MySqlParser.DEFAULT, i)

        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def COLLATE(self):
            return self.getToken(MySqlParser.COLLATE, 0)

        def collationName(self):
            return self.getTypedRuleContext(MySqlParser.CollationNameContext,0)


        def ENCRYPTION(self):
            return self.getToken(MySqlParser.ENCRYPTION, 0)

        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def READ(self):
            return self.getToken(MySqlParser.READ, 0)

        def ONLY(self):
            return self.getToken(MySqlParser.ONLY, 0)

        def ZERO_DECIMAL(self):
            return self.getToken(MySqlParser.ZERO_DECIMAL, 0)

        def ONE_DECIMAL(self):
            return self.getToken(MySqlParser.ONE_DECIMAL, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_createDatabaseOption

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreateDatabaseOption" ):
                listener.enterCreateDatabaseOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreateDatabaseOption" ):
                listener.exitCreateDatabaseOption(self)




    def createDatabaseOption(self):

        localctx = MySqlParser.CreateDatabaseOptionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 58, self.RULE_createDatabaseOption)
        self._la = 0 # Token type
        try:
            self.state = 1419
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,120,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 1387
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==42:
                    self.state = 1386
                    self.match(MySqlParser.DEFAULT)


                self.state = 1389
                self.charSet()
                self.state = 1391
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1390
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1395
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [226, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 1145, 1148]:
                    self.state = 1393
                    self.charsetName()
                    pass
                elif token in [42]:
                    self.state = 1394
                    self.match(MySqlParser.DEFAULT)
                    pass
                else:
                    raise NoViableAltException(self)

                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 1398
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==42:
                    self.state = 1397
                    self.match(MySqlParser.DEFAULT)


                self.state = 1400
                self.match(MySqlParser.COLLATE)
                self.state = 1402
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1401
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1404
                self.collationName()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 1406
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==42:
                    self.state = 1405
                    self.match(MySqlParser.DEFAULT)


                self.state = 1408
                self.match(MySqlParser.ENCRYPTION)
                self.state = 1410
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1409
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1412
                self.match(MySqlParser.STRING_LITERAL)
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 1413
                self.match(MySqlParser.READ)
                self.state = 1414
                self.match(MySqlParser.ONLY)
                self.state = 1416
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1415
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1418
                _la = self._input.LA(1)
                if not(_la==42 or _la==1138 or _la==1139):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CharSetContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CHARACTER(self):
            return self.getToken(MySqlParser.CHARACTER, 0)

        def SET(self):
            return self.getToken(MySqlParser.SET, 0)

        def CHARSET(self):
            return self.getToken(MySqlParser.CHARSET, 0)

        def CHAR(self):
            return self.getToken(MySqlParser.CHAR, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_charSet

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCharSet" ):
                listener.enterCharSet(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCharSet" ):
                listener.exitCharSet(self)




    def charSet(self):

        localctx = MySqlParser.CharSetContext(self, self._ctx, self.state)
        self.enterRule(localctx, 60, self.RULE_charSet)
        try:
            self.state = 1426
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [25]:
                self.enterOuterAlt(localctx, 1)
                self.state = 1421
                self.match(MySqlParser.CHARACTER)
                self.state = 1422
                self.match(MySqlParser.SET)
                pass
            elif token in [841]:
                self.enterOuterAlt(localctx, 2)
                self.state = 1423
                self.match(MySqlParser.CHARSET)
                pass
            elif token in [222]:
                self.enterOuterAlt(localctx, 3)
                self.state = 1424
                self.match(MySqlParser.CHAR)
                self.state = 1425
                self.match(MySqlParser.SET)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CurrentUserExpressionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CURRENT_USER(self):
            return self.getToken(MySqlParser.CURRENT_USER, 0)

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_currentUserExpression

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCurrentUserExpression" ):
                listener.enterCurrentUserExpression(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCurrentUserExpression" ):
                listener.exitCurrentUserExpression(self)




    def currentUserExpression(self):

        localctx = MySqlParser.CurrentUserExpressionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 62, self.RULE_currentUserExpression)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 1428
            self.match(MySqlParser.CURRENT_USER)
            self.state = 1431
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,122,self._ctx)
            if la_ == 1:
                self.state = 1429
                self.match(MySqlParser.LR_BRACKET)
                self.state = 1430
                self.match(MySqlParser.RR_BRACKET)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class OwnerStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DEFINER(self):
            return self.getToken(MySqlParser.DEFINER, 0)

        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def userName(self):
            return self.getTypedRuleContext(MySqlParser.UserNameContext,0)


        def currentUserExpression(self):
            return self.getTypedRuleContext(MySqlParser.CurrentUserExpressionContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_ownerStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOwnerStatement" ):
                listener.enterOwnerStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOwnerStatement" ):
                listener.exitOwnerStatement(self)




    def ownerStatement(self):

        localctx = MySqlParser.OwnerStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 64, self.RULE_ownerStatement)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 1433
            self.match(MySqlParser.DEFINER)
            self.state = 1434
            self.match(MySqlParser.EQUAL_SYMBOL)
            self.state = 1437
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,123,self._ctx)
            if la_ == 1:
                self.state = 1435
                self.userName()
                pass

            elif la_ == 2:
                self.state = 1436
                self.currentUserExpression()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ScheduleExpressionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_scheduleExpression

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class PreciseScheduleContext(ScheduleExpressionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ScheduleExpressionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def AT(self):
            return self.getToken(MySqlParser.AT, 0)
        def timestampValue(self):
            return self.getTypedRuleContext(MySqlParser.TimestampValueContext,0)

        def intervalExpr(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.IntervalExprContext)
            else:
                return self.getTypedRuleContext(MySqlParser.IntervalExprContext,i)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPreciseSchedule" ):
                listener.enterPreciseSchedule(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPreciseSchedule" ):
                listener.exitPreciseSchedule(self)


    class IntervalScheduleContext(ScheduleExpressionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ScheduleExpressionContext
            super().__init__(parser)
            self.startTimestamp = None # TimestampValueContext
            self._intervalExpr = None # IntervalExprContext
            self.startIntervals = list() # of IntervalExprContexts
            self.endTimestamp = None # TimestampValueContext
            self.endIntervals = list() # of IntervalExprContexts
            self.copyFrom(ctx)

        def EVERY(self):
            return self.getToken(MySqlParser.EVERY, 0)
        def intervalType(self):
            return self.getTypedRuleContext(MySqlParser.IntervalTypeContext,0)

        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)

        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)

        def STARTS(self):
            return self.getToken(MySqlParser.STARTS, 0)
        def ENDS(self):
            return self.getToken(MySqlParser.ENDS, 0)
        def timestampValue(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.TimestampValueContext)
            else:
                return self.getTypedRuleContext(MySqlParser.TimestampValueContext,i)

        def intervalExpr(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.IntervalExprContext)
            else:
                return self.getTypedRuleContext(MySqlParser.IntervalExprContext,i)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIntervalSchedule" ):
                listener.enterIntervalSchedule(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIntervalSchedule" ):
                listener.exitIntervalSchedule(self)



    def scheduleExpression(self):

        localctx = MySqlParser.ScheduleExpressionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 66, self.RULE_scheduleExpression)
        self._la = 0 # Token type
        try:
            self.state = 1473
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [338]:
                localctx = MySqlParser.PreciseScheduleContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 1439
                self.match(MySqlParser.AT)
                self.state = 1440
                self.timestampValue()
                self.state = 1444
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1120:
                    self.state = 1441
                    self.intervalExpr()
                    self.state = 1446
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [417]:
                localctx = MySqlParser.IntervalScheduleContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 1447
                self.match(MySqlParser.EVERY)
                self.state = 1450
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,125,self._ctx)
                if la_ == 1:
                    self.state = 1448
                    self.decimalLiteral()
                    pass

                elif la_ == 2:
                    self.state = 1449
                    self.expression(0)
                    pass


                self.state = 1452
                self.intervalType()
                self.state = 1461
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==630:
                    self.state = 1453
                    self.match(MySqlParser.STARTS)
                    self.state = 1454
                    localctx.startTimestamp = self.timestampValue()
                    self.state = 1458
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==1120:
                        self.state = 1455
                        localctx._intervalExpr = self.intervalExpr()
                        localctx.startIntervals.append(localctx._intervalExpr)
                        self.state = 1460
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)



                self.state = 1471
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==408:
                    self.state = 1463
                    self.match(MySqlParser.ENDS)
                    self.state = 1464
                    localctx.endTimestamp = self.timestampValue()
                    self.state = 1468
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==1120:
                        self.state = 1465
                        localctx._intervalExpr = self.intervalExpr()
                        localctx.endIntervals.append(localctx._intervalExpr)
                        self.state = 1470
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)



                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class TimestampValueContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CURRENT_TIMESTAMP(self):
            return self.getToken(MySqlParser.CURRENT_TIMESTAMP, 0)

        def stringLiteral(self):
            return self.getTypedRuleContext(MySqlParser.StringLiteralContext,0)


        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)


        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_timestampValue

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTimestampValue" ):
                listener.enterTimestampValue(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTimestampValue" ):
                listener.exitTimestampValue(self)




    def timestampValue(self):

        localctx = MySqlParser.TimestampValueContext(self, self._ctx, self.state)
        self.enterRule(localctx, 68, self.RULE_timestampValue)
        try:
            self.state = 1479
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,131,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 1475
                self.match(MySqlParser.CURRENT_TIMESTAMP)
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 1476
                self.stringLiteral()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 1477
                self.decimalLiteral()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 1478
                self.expression(0)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class IntervalExprContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PLUS(self):
            return self.getToken(MySqlParser.PLUS, 0)

        def INTERVAL(self):
            return self.getToken(MySqlParser.INTERVAL, 0)

        def intervalType(self):
            return self.getTypedRuleContext(MySqlParser.IntervalTypeContext,0)


        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)


        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_intervalExpr

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIntervalExpr" ):
                listener.enterIntervalExpr(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIntervalExpr" ):
                listener.exitIntervalExpr(self)




    def intervalExpr(self):

        localctx = MySqlParser.IntervalExprContext(self, self._ctx, self.state)
        self.enterRule(localctx, 70, self.RULE_intervalExpr)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 1481
            self.match(MySqlParser.PLUS)
            self.state = 1482
            self.match(MySqlParser.INTERVAL)
            self.state = 1485
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,132,self._ctx)
            if la_ == 1:
                self.state = 1483
                self.decimalLiteral()
                pass

            elif la_ == 2:
                self.state = 1484
                self.expression(0)
                pass


            self.state = 1487
            self.intervalType()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class IntervalTypeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def intervalTypeBase(self):
            return self.getTypedRuleContext(MySqlParser.IntervalTypeBaseContext,0)


        def YEAR(self):
            return self.getToken(MySqlParser.YEAR, 0)

        def YEAR_MONTH(self):
            return self.getToken(MySqlParser.YEAR_MONTH, 0)

        def DAY_HOUR(self):
            return self.getToken(MySqlParser.DAY_HOUR, 0)

        def DAY_MINUTE(self):
            return self.getToken(MySqlParser.DAY_MINUTE, 0)

        def DAY_SECOND(self):
            return self.getToken(MySqlParser.DAY_SECOND, 0)

        def HOUR_MINUTE(self):
            return self.getToken(MySqlParser.HOUR_MINUTE, 0)

        def HOUR_SECOND(self):
            return self.getToken(MySqlParser.HOUR_SECOND, 0)

        def MINUTE_SECOND(self):
            return self.getToken(MySqlParser.MINUTE_SECOND, 0)

        def SECOND_MICROSECOND(self):
            return self.getToken(MySqlParser.SECOND_MICROSECOND, 0)

        def MINUTE_MICROSECOND(self):
            return self.getToken(MySqlParser.MINUTE_MICROSECOND, 0)

        def HOUR_MICROSECOND(self):
            return self.getToken(MySqlParser.HOUR_MICROSECOND, 0)

        def DAY_MICROSECOND(self):
            return self.getToken(MySqlParser.DAY_MICROSECOND, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_intervalType

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIntervalType" ):
                listener.enterIntervalType(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIntervalType" ):
                listener.exitIntervalType(self)




    def intervalType(self):

        localctx = MySqlParser.IntervalTypeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 72, self.RULE_intervalType)
        try:
            self.state = 1502
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [689, 690, 691, 692, 693, 694, 695, 696]:
                self.enterOuterAlt(localctx, 1)
                self.state = 1489
                self.intervalTypeBase()
                pass
            elif token in [221]:
                self.enterOuterAlt(localctx, 2)
                self.state = 1490
                self.match(MySqlParser.YEAR)
                pass
            elif token in [240]:
                self.enterOuterAlt(localctx, 3)
                self.state = 1491
                self.match(MySqlParser.YEAR_MONTH)
                pass
            elif token in [241]:
                self.enterOuterAlt(localctx, 4)
                self.state = 1492
                self.match(MySqlParser.DAY_HOUR)
                pass
            elif token in [242]:
                self.enterOuterAlt(localctx, 5)
                self.state = 1493
                self.match(MySqlParser.DAY_MINUTE)
                pass
            elif token in [243]:
                self.enterOuterAlt(localctx, 6)
                self.state = 1494
                self.match(MySqlParser.DAY_SECOND)
                pass
            elif token in [244]:
                self.enterOuterAlt(localctx, 7)
                self.state = 1495
                self.match(MySqlParser.HOUR_MINUTE)
                pass
            elif token in [245]:
                self.enterOuterAlt(localctx, 8)
                self.state = 1496
                self.match(MySqlParser.HOUR_SECOND)
                pass
            elif token in [246]:
                self.enterOuterAlt(localctx, 9)
                self.state = 1497
                self.match(MySqlParser.MINUTE_SECOND)
                pass
            elif token in [247]:
                self.enterOuterAlt(localctx, 10)
                self.state = 1498
                self.match(MySqlParser.SECOND_MICROSECOND)
                pass
            elif token in [248]:
                self.enterOuterAlt(localctx, 11)
                self.state = 1499
                self.match(MySqlParser.MINUTE_MICROSECOND)
                pass
            elif token in [249]:
                self.enterOuterAlt(localctx, 12)
                self.state = 1500
                self.match(MySqlParser.HOUR_MICROSECOND)
                pass
            elif token in [250]:
                self.enterOuterAlt(localctx, 13)
                self.state = 1501
                self.match(MySqlParser.DAY_MICROSECOND)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class EnableTypeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ENABLE(self):
            return self.getToken(MySqlParser.ENABLE, 0)

        def DISABLE(self):
            return self.getToken(MySqlParser.DISABLE, 0)

        def ON(self):
            return self.getToken(MySqlParser.ON, 0)

        def SLAVE(self):
            return self.getToken(MySqlParser.SLAVE, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_enableType

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterEnableType" ):
                listener.enterEnableType(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitEnableType" ):
                listener.exitEnableType(self)




    def enableType(self):

        localctx = MySqlParser.EnableTypeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 74, self.RULE_enableType)
        try:
            self.state = 1509
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,134,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 1504
                self.match(MySqlParser.ENABLE)
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 1505
                self.match(MySqlParser.DISABLE)
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 1506
                self.match(MySqlParser.DISABLE)
                self.state = 1507
                self.match(MySqlParser.ON)
                self.state = 1508
                self.match(MySqlParser.SLAVE)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class IndexTypeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def USING(self):
            return self.getToken(MySqlParser.USING, 0)

        def BTREE(self):
            return self.getToken(MySqlParser.BTREE, 0)

        def HASH(self):
            return self.getToken(MySqlParser.HASH, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_indexType

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIndexType" ):
                listener.enterIndexType(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIndexType" ):
                listener.exitIndexType(self)




    def indexType(self):

        localctx = MySqlParser.IndexTypeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 76, self.RULE_indexType)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 1511
            self.match(MySqlParser.USING)
            self.state = 1512
            _la = self._input.LA(1)
            if not(_la==350 or _la==443):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class IndexOptionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def KEY_BLOCK_SIZE(self):
            return self.getToken(MySqlParser.KEY_BLOCK_SIZE, 0)

        def fileSizeLiteral(self):
            return self.getTypedRuleContext(MySqlParser.FileSizeLiteralContext,0)


        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def indexType(self):
            return self.getTypedRuleContext(MySqlParser.IndexTypeContext,0)


        def WITH(self):
            return self.getToken(MySqlParser.WITH, 0)

        def PARSER(self):
            return self.getToken(MySqlParser.PARSER, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def COMMENT(self):
            return self.getToken(MySqlParser.COMMENT, 0)

        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def VISIBLE(self):
            return self.getToken(MySqlParser.VISIBLE, 0)

        def INVISIBLE(self):
            return self.getToken(MySqlParser.INVISIBLE, 0)

        def ENGINE_ATTRIBUTE(self):
            return self.getToken(MySqlParser.ENGINE_ATTRIBUTE, 0)

        def SECONDARY_ENGINE_ATTRIBUTE(self):
            return self.getToken(MySqlParser.SECONDARY_ENGINE_ATTRIBUTE, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_indexOption

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIndexOption" ):
                listener.enterIndexOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIndexOption" ):
                listener.exitIndexOption(self)




    def indexOption(self):

        localctx = MySqlParser.IndexOptionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 78, self.RULE_indexOption)
        self._la = 0 # Token type
        try:
            self.state = 1536
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [467]:
                self.enterOuterAlt(localctx, 1)
                self.state = 1514
                self.match(MySqlParser.KEY_BLOCK_SIZE)
                self.state = 1516
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1515
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1518
                self.fileSizeLiteral()
                pass
            elif token in [187]:
                self.enterOuterAlt(localctx, 2)
                self.state = 1519
                self.indexType()
                pass
            elif token in [192]:
                self.enterOuterAlt(localctx, 3)
                self.state = 1520
                self.match(MySqlParser.WITH)
                self.state = 1521
                self.match(MySqlParser.PARSER)
                self.state = 1522
                self.uid()
                pass
            elif token in [368]:
                self.enterOuterAlt(localctx, 4)
                self.state = 1523
                self.match(MySqlParser.COMMENT)
                self.state = 1524
                self.match(MySqlParser.STRING_LITERAL)
                pass
            elif token in [459, 673]:
                self.enterOuterAlt(localctx, 5)
                self.state = 1525
                _la = self._input.LA(1)
                if not(_la==459 or _la==673):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass
            elif token in [875]:
                self.enterOuterAlt(localctx, 6)
                self.state = 1526
                self.match(MySqlParser.ENGINE_ATTRIBUTE)
                self.state = 1528
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1527
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1530
                self.match(MySqlParser.STRING_LITERAL)
                pass
            elif token in [1000]:
                self.enterOuterAlt(localctx, 7)
                self.state = 1531
                self.match(MySqlParser.SECONDARY_ENGINE_ATTRIBUTE)
                self.state = 1533
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1532
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1535
                self.match(MySqlParser.STRING_LITERAL)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ProcedureParameterContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.direction = None # Token

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def dataType(self):
            return self.getTypedRuleContext(MySqlParser.DataTypeContext,0)


        def IN(self):
            return self.getToken(MySqlParser.IN, 0)

        def OUT(self):
            return self.getToken(MySqlParser.OUT, 0)

        def INOUT(self):
            return self.getToken(MySqlParser.INOUT, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_procedureParameter

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterProcedureParameter" ):
                listener.enterProcedureParameter(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitProcedureParameter" ):
                listener.exitProcedureParameter(self)




    def procedureParameter(self):

        localctx = MySqlParser.ProcedureParameterContext(self, self._ctx, self.state)
        self.enterRule(localctx, 80, self.RULE_procedureParameter)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 1539
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if ((((_la - 80)) & ~0x3f) == 0 and ((1 << (_la - 80)) & 35184372088849) != 0):
                self.state = 1538
                localctx.direction = self._input.LT(1)
                _la = self._input.LA(1)
                if not(((((_la - 80)) & ~0x3f) == 0 and ((1 << (_la - 80)) & 35184372088849) != 0)):
                    localctx.direction = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 1541
            self.uid()
            self.state = 1542
            self.dataType()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class FunctionParameterContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def dataType(self):
            return self.getTypedRuleContext(MySqlParser.DataTypeContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_functionParameter

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFunctionParameter" ):
                listener.enterFunctionParameter(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFunctionParameter" ):
                listener.exitFunctionParameter(self)




    def functionParameter(self):

        localctx = MySqlParser.FunctionParameterContext(self, self._ctx, self.state)
        self.enterRule(localctx, 82, self.RULE_functionParameter)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 1544
            self.uid()
            self.state = 1545
            self.dataType()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class RoutineOptionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_routineOption

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class RoutineBehaviorContext(RoutineOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.RoutineOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def DETERMINISTIC(self):
            return self.getToken(MySqlParser.DETERMINISTIC, 0)
        def NOT(self):
            return self.getToken(MySqlParser.NOT, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRoutineBehavior" ):
                listener.enterRoutineBehavior(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRoutineBehavior" ):
                listener.exitRoutineBehavior(self)


    class RoutineLanguageContext(RoutineOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.RoutineOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def LANGUAGE(self):
            return self.getToken(MySqlParser.LANGUAGE, 0)
        def SQL(self):
            return self.getToken(MySqlParser.SQL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRoutineLanguage" ):
                listener.enterRoutineLanguage(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRoutineLanguage" ):
                listener.exitRoutineLanguage(self)


    class RoutineCommentContext(RoutineOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.RoutineOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def COMMENT(self):
            return self.getToken(MySqlParser.COMMENT, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRoutineComment" ):
                listener.enterRoutineComment(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRoutineComment" ):
                listener.exitRoutineComment(self)


    class RoutineSecurityContext(RoutineOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.RoutineOptionContext
            super().__init__(parser)
            self.context = None # Token
            self.copyFrom(ctx)

        def SQL(self):
            return self.getToken(MySqlParser.SQL, 0)
        def SECURITY(self):
            return self.getToken(MySqlParser.SECURITY, 0)
        def DEFINER(self):
            return self.getToken(MySqlParser.DEFINER, 0)
        def INVOKER(self):
            return self.getToken(MySqlParser.INVOKER, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRoutineSecurity" ):
                listener.enterRoutineSecurity(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRoutineSecurity" ):
                listener.exitRoutineSecurity(self)


    class RoutineDataContext(RoutineOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.RoutineOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def CONTAINS(self):
            return self.getToken(MySqlParser.CONTAINS, 0)
        def SQL(self):
            return self.getToken(MySqlParser.SQL, 0)
        def NO(self):
            return self.getToken(MySqlParser.NO, 0)
        def READS(self):
            return self.getToken(MySqlParser.READS, 0)
        def DATA(self):
            return self.getToken(MySqlParser.DATA, 0)
        def MODIFIES(self):
            return self.getToken(MySqlParser.MODIFIES, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRoutineData" ):
                listener.enterRoutineData(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRoutineData" ):
                listener.exitRoutineData(self)



    def routineOption(self):

        localctx = MySqlParser.RoutineOptionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 84, self.RULE_routineOption)
        self._la = 0 # Token type
        try:
            self.state = 1570
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [368]:
                localctx = MySqlParser.RoutineCommentContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 1547
                self.match(MySqlParser.COMMENT)
                self.state = 1548
                self.match(MySqlParser.STRING_LITERAL)
                pass
            elif token in [468]:
                localctx = MySqlParser.RoutineLanguageContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 1549
                self.match(MySqlParser.LANGUAGE)
                self.state = 1550
                self.match(MySqlParser.SQL)
                pass
            elif token in [47, 114]:
                localctx = MySqlParser.RoutineBehaviorContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 1552
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==114:
                    self.state = 1551
                    self.match(MySqlParser.NOT)


                self.state = 1554
                self.match(MySqlParser.DETERMINISTIC)
                pass
            elif token in [112, 135, 381, 521]:
                localctx = MySqlParser.RoutineDataContext(self, localctx)
                self.enterOuterAlt(localctx, 4)
                self.state = 1565
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [381]:
                    self.state = 1555
                    self.match(MySqlParser.CONTAINS)
                    self.state = 1556
                    self.match(MySqlParser.SQL)
                    pass
                elif token in [521]:
                    self.state = 1557
                    self.match(MySqlParser.NO)
                    self.state = 1558
                    self.match(MySqlParser.SQL)
                    pass
                elif token in [135]:
                    self.state = 1559
                    self.match(MySqlParser.READS)
                    self.state = 1560
                    self.match(MySqlParser.SQL)
                    self.state = 1561
                    self.match(MySqlParser.DATA)
                    pass
                elif token in [112]:
                    self.state = 1562
                    self.match(MySqlParser.MODIFIES)
                    self.state = 1563
                    self.match(MySqlParser.SQL)
                    self.state = 1564
                    self.match(MySqlParser.DATA)
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            elif token in [160]:
                localctx = MySqlParser.RoutineSecurityContext(self, localctx)
                self.enterOuterAlt(localctx, 5)
                self.state = 1567
                self.match(MySqlParser.SQL)
                self.state = 1568
                self.match(MySqlParser.SECURITY)
                self.state = 1569
                localctx.context = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==392 or _la==460):
                    localctx.context = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ServerOptionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def HOST(self):
            return self.getToken(MySqlParser.HOST, 0)

        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def DATABASE(self):
            return self.getToken(MySqlParser.DATABASE, 0)

        def USER(self):
            return self.getToken(MySqlParser.USER, 0)

        def PASSWORD(self):
            return self.getToken(MySqlParser.PASSWORD, 0)

        def SOCKET(self):
            return self.getToken(MySqlParser.SOCKET, 0)

        def OWNER(self):
            return self.getToken(MySqlParser.OWNER, 0)

        def PORT(self):
            return self.getToken(MySqlParser.PORT, 0)

        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_serverOption

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterServerOption" ):
                listener.enterServerOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitServerOption" ):
                listener.exitServerOption(self)




    def serverOption(self):

        localctx = MySqlParser.ServerOptionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 86, self.RULE_serverOption)
        try:
            self.state = 1586
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [446]:
                self.enterOuterAlt(localctx, 1)
                self.state = 1572
                self.match(MySqlParser.HOST)
                self.state = 1573
                self.match(MySqlParser.STRING_LITERAL)
                pass
            elif token in [39]:
                self.enterOuterAlt(localctx, 2)
                self.state = 1574
                self.match(MySqlParser.DATABASE)
                self.state = 1575
                self.match(MySqlParser.STRING_LITERAL)
                pass
            elif token in [665]:
                self.enterOuterAlt(localctx, 3)
                self.state = 1576
                self.match(MySqlParser.USER)
                self.state = 1577
                self.match(MySqlParser.STRING_LITERAL)
                pass
            elif token in [551]:
                self.enterOuterAlt(localctx, 4)
                self.state = 1578
                self.match(MySqlParser.PASSWORD)
                self.state = 1579
                self.match(MySqlParser.STRING_LITERAL)
                pass
            elif token in [617]:
                self.enterOuterAlt(localctx, 5)
                self.state = 1580
                self.match(MySqlParser.SOCKET)
                self.state = 1581
                self.match(MySqlParser.STRING_LITERAL)
                pass
            elif token in [542]:
                self.enterOuterAlt(localctx, 6)
                self.state = 1582
                self.match(MySqlParser.OWNER)
                self.state = 1583
                self.match(MySqlParser.STRING_LITERAL)
                pass
            elif token in [557]:
                self.enterOuterAlt(localctx, 7)
                self.state = 1584
                self.match(MySqlParser.PORT)
                self.state = 1585
                self.decimalLiteral()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CreateDefinitionsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def createDefinition(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.CreateDefinitionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.CreateDefinitionContext,i)


        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_createDefinitions

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreateDefinitions" ):
                listener.enterCreateDefinitions(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreateDefinitions" ):
                listener.exitCreateDefinitions(self)




    def createDefinitions(self):

        localctx = MySqlParser.CreateDefinitionsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 88, self.RULE_createDefinitions)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 1588
            self.match(MySqlParser.LR_BRACKET)
            self.state = 1589
            self.createDefinition()
            self.state = 1594
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 1590
                self.match(MySqlParser.COMMA)
                self.state = 1591
                self.createDefinition()
                self.state = 1596
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 1597
            self.match(MySqlParser.RR_BRACKET)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CreateDefinitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_createDefinition

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class ColumnDeclarationContext(CreateDefinitionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.CreateDefinitionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def fullColumnName(self):
            return self.getTypedRuleContext(MySqlParser.FullColumnNameContext,0)

        def columnDefinition(self):
            return self.getTypedRuleContext(MySqlParser.ColumnDefinitionContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterColumnDeclaration" ):
                listener.enterColumnDeclaration(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitColumnDeclaration" ):
                listener.exitColumnDeclaration(self)


    class ConstraintDeclarationContext(CreateDefinitionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.CreateDefinitionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def tableConstraint(self):
            return self.getTypedRuleContext(MySqlParser.TableConstraintContext,0)

        def NOT(self):
            return self.getToken(MySqlParser.NOT, 0)
        def ENFORCED(self):
            return self.getToken(MySqlParser.ENFORCED, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterConstraintDeclaration" ):
                listener.enterConstraintDeclaration(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitConstraintDeclaration" ):
                listener.exitConstraintDeclaration(self)


    class IndexDeclarationContext(CreateDefinitionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.CreateDefinitionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def indexColumnDefinition(self):
            return self.getTypedRuleContext(MySqlParser.IndexColumnDefinitionContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIndexDeclaration" ):
                listener.enterIndexDeclaration(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIndexDeclaration" ):
                listener.exitIndexDeclaration(self)



    def createDefinition(self):

        localctx = MySqlParser.CreateDefinitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 90, self.RULE_createDefinition)
        self._la = 0 # Token type
        try:
            self.state = 1610
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,147,self._ctx)
            if la_ == 1:
                localctx = MySqlParser.ColumnDeclarationContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 1599
                self.fullColumnName()
                self.state = 1600
                self.columnDefinition()
                pass

            elif la_ == 2:
                localctx = MySqlParser.ConstraintDeclarationContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 1602
                self.tableConstraint()
                self.state = 1604
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==114:
                    self.state = 1603
                    self.match(MySqlParser.NOT)


                self.state = 1607
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==57:
                    self.state = 1606
                    self.match(MySqlParser.ENFORCED)


                pass

            elif la_ == 3:
                localctx = MySqlParser.IndexDeclarationContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 1609
                self.indexColumnDefinition()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ColumnDefinitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def dataType(self):
            return self.getTypedRuleContext(MySqlParser.DataTypeContext,0)


        def columnConstraint(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ColumnConstraintContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ColumnConstraintContext,i)


        def NOT(self):
            return self.getToken(MySqlParser.NOT, 0)

        def ENFORCED(self):
            return self.getToken(MySqlParser.ENFORCED, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_columnDefinition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterColumnDefinition" ):
                listener.enterColumnDefinition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitColumnDefinition" ):
                listener.exitColumnDefinition(self)




    def columnDefinition(self):

        localctx = MySqlParser.ColumnDefinitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 92, self.RULE_columnDefinition)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 1612
            self.dataType()
            self.state = 1616
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,148,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 1613
                    self.columnConstraint() 
                self.state = 1618
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,148,self._ctx)

            self.state = 1620
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==114:
                self.state = 1619
                self.match(MySqlParser.NOT)


            self.state = 1623
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==57:
                self.state = 1622
                self.match(MySqlParser.ENFORCED)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ColumnConstraintContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_columnConstraint

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class StorageColumnConstraintContext(ColumnConstraintContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ColumnConstraintContext
            super().__init__(parser)
            self.storageval = None # Token
            self.copyFrom(ctx)

        def STORAGE(self):
            return self.getToken(MySqlParser.STORAGE, 0)
        def DISK(self):
            return self.getToken(MySqlParser.DISK, 0)
        def MEMORY(self):
            return self.getToken(MySqlParser.MEMORY, 0)
        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStorageColumnConstraint" ):
                listener.enterStorageColumnConstraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStorageColumnConstraint" ):
                listener.exitStorageColumnConstraint(self)


    class VisibilityColumnConstraintContext(ColumnConstraintContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ColumnConstraintContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def VISIBLE(self):
            return self.getToken(MySqlParser.VISIBLE, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterVisibilityColumnConstraint" ):
                listener.enterVisibilityColumnConstraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitVisibilityColumnConstraint" ):
                listener.exitVisibilityColumnConstraint(self)


    class AutoIncrementColumnConstraintContext(ColumnConstraintContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ColumnConstraintContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def AUTO_INCREMENT(self):
            return self.getToken(MySqlParser.AUTO_INCREMENT, 0)
        def ON(self):
            return self.getToken(MySqlParser.ON, 0)
        def UPDATE(self):
            return self.getToken(MySqlParser.UPDATE, 0)
        def currentTimestamp(self):
            return self.getTypedRuleContext(MySqlParser.CurrentTimestampContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAutoIncrementColumnConstraint" ):
                listener.enterAutoIncrementColumnConstraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAutoIncrementColumnConstraint" ):
                listener.exitAutoIncrementColumnConstraint(self)


    class CommentColumnConstraintContext(ColumnConstraintContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ColumnConstraintContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def COMMENT(self):
            return self.getToken(MySqlParser.COMMENT, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCommentColumnConstraint" ):
                listener.enterCommentColumnConstraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCommentColumnConstraint" ):
                listener.exitCommentColumnConstraint(self)


    class UniqueKeyColumnConstraintContext(ColumnConstraintContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ColumnConstraintContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def UNIQUE(self):
            return self.getToken(MySqlParser.UNIQUE, 0)
        def KEY(self):
            return self.getToken(MySqlParser.KEY, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUniqueKeyColumnConstraint" ):
                listener.enterUniqueKeyColumnConstraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUniqueKeyColumnConstraint" ):
                listener.exitUniqueKeyColumnConstraint(self)


    class SerialDefaultColumnConstraintContext(ColumnConstraintContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ColumnConstraintContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def SERIAL(self):
            return self.getToken(MySqlParser.SERIAL, 0)
        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)
        def VALUE(self):
            return self.getToken(MySqlParser.VALUE, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSerialDefaultColumnConstraint" ):
                listener.enterSerialDefaultColumnConstraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSerialDefaultColumnConstraint" ):
                listener.exitSerialDefaultColumnConstraint(self)


    class GeneratedColumnConstraintContext(ColumnConstraintContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ColumnConstraintContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def AS(self):
            return self.getToken(MySqlParser.AS, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def GENERATED(self):
            return self.getToken(MySqlParser.GENERATED, 0)
        def ALWAYS(self):
            return self.getToken(MySqlParser.ALWAYS, 0)
        def VIRTUAL(self):
            return self.getToken(MySqlParser.VIRTUAL, 0)
        def STORED(self):
            return self.getToken(MySqlParser.STORED, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterGeneratedColumnConstraint" ):
                listener.enterGeneratedColumnConstraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitGeneratedColumnConstraint" ):
                listener.exitGeneratedColumnConstraint(self)


    class FormatColumnConstraintContext(ColumnConstraintContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ColumnConstraintContext
            super().__init__(parser)
            self.colformat = None # Token
            self.copyFrom(ctx)

        def COLUMN_FORMAT(self):
            return self.getToken(MySqlParser.COLUMN_FORMAT, 0)
        def FIXED(self):
            return self.getToken(MySqlParser.FIXED, 0)
        def DYNAMIC(self):
            return self.getToken(MySqlParser.DYNAMIC, 0)
        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFormatColumnConstraint" ):
                listener.enterFormatColumnConstraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFormatColumnConstraint" ):
                listener.exitFormatColumnConstraint(self)


    class CollateColumnConstraintContext(ColumnConstraintContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ColumnConstraintContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def COLLATE(self):
            return self.getToken(MySqlParser.COLLATE, 0)
        def collationName(self):
            return self.getTypedRuleContext(MySqlParser.CollationNameContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCollateColumnConstraint" ):
                listener.enterCollateColumnConstraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCollateColumnConstraint" ):
                listener.exitCollateColumnConstraint(self)


    class PrimaryKeyColumnConstraintContext(ColumnConstraintContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ColumnConstraintContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def KEY(self):
            return self.getToken(MySqlParser.KEY, 0)
        def PRIMARY(self):
            return self.getToken(MySqlParser.PRIMARY, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPrimaryKeyColumnConstraint" ):
                listener.enterPrimaryKeyColumnConstraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPrimaryKeyColumnConstraint" ):
                listener.exitPrimaryKeyColumnConstraint(self)


    class CheckColumnConstraintContext(ColumnConstraintContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ColumnConstraintContext
            super().__init__(parser)
            self.name = None # UidContext
            self.copyFrom(ctx)

        def CHECK(self):
            return self.getToken(MySqlParser.CHECK, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def CONSTRAINT(self):
            return self.getToken(MySqlParser.CONSTRAINT, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCheckColumnConstraint" ):
                listener.enterCheckColumnConstraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCheckColumnConstraint" ):
                listener.exitCheckColumnConstraint(self)


    class NullColumnConstraintContext(ColumnConstraintContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ColumnConstraintContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def nullNotnull(self):
            return self.getTypedRuleContext(MySqlParser.NullNotnullContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNullColumnConstraint" ):
                listener.enterNullColumnConstraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNullColumnConstraint" ):
                listener.exitNullColumnConstraint(self)


    class DefaultColumnConstraintContext(ColumnConstraintContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ColumnConstraintContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)
        def defaultValue(self):
            return self.getTypedRuleContext(MySqlParser.DefaultValueContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDefaultColumnConstraint" ):
                listener.enterDefaultColumnConstraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDefaultColumnConstraint" ):
                listener.exitDefaultColumnConstraint(self)


    class ReferenceColumnConstraintContext(ColumnConstraintContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ColumnConstraintContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def referenceDefinition(self):
            return self.getTypedRuleContext(MySqlParser.ReferenceDefinitionContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterReferenceColumnConstraint" ):
                listener.enterReferenceColumnConstraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitReferenceColumnConstraint" ):
                listener.exitReferenceColumnConstraint(self)


    class InvisibilityColumnConstraintContext(ColumnConstraintContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ColumnConstraintContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def INVISIBLE(self):
            return self.getToken(MySqlParser.INVISIBLE, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterInvisibilityColumnConstraint" ):
                listener.enterInvisibilityColumnConstraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitInvisibilityColumnConstraint" ):
                listener.exitInvisibilityColumnConstraint(self)



    def columnConstraint(self):

        localctx = MySqlParser.ColumnConstraintContext(self, self._ctx, self.state)
        self.enterRule(localctx, 94, self.RULE_columnConstraint)
        self._la = 0 # Token type
        try:
            self.state = 1678
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [114, 116, 1152]:
                localctx = MySqlParser.NullColumnConstraintContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 1625
                self.nullNotnull()
                pass
            elif token in [42]:
                localctx = MySqlParser.DefaultColumnConstraintContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 1626
                self.match(MySqlParser.DEFAULT)
                self.state = 1627
                self.defaultValue()
                pass
            elif token in [673]:
                localctx = MySqlParser.VisibilityColumnConstraintContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 1628
                self.match(MySqlParser.VISIBLE)
                pass
            elif token in [459]:
                localctx = MySqlParser.InvisibilityColumnConstraintContext(self, localctx)
                self.enterOuterAlt(localctx, 4)
                self.state = 1629
                self.match(MySqlParser.INVISIBLE)
                pass
            elif token in [118, 342]:
                localctx = MySqlParser.AutoIncrementColumnConstraintContext(self, localctx)
                self.enterOuterAlt(localctx, 5)
                self.state = 1634
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [342]:
                    self.state = 1630
                    self.match(MySqlParser.AUTO_INCREMENT)
                    pass
                elif token in [118]:
                    self.state = 1631
                    self.match(MySqlParser.ON)
                    self.state = 1632
                    self.match(MySqlParser.UPDATE)
                    self.state = 1633
                    self.currentTimestamp()
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            elif token in [91, 130]:
                localctx = MySqlParser.PrimaryKeyColumnConstraintContext(self, localctx)
                self.enterOuterAlt(localctx, 6)
                self.state = 1637
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==130:
                    self.state = 1636
                    self.match(MySqlParser.PRIMARY)


                self.state = 1639
                self.match(MySqlParser.KEY)
                pass
            elif token in [181]:
                localctx = MySqlParser.UniqueKeyColumnConstraintContext(self, localctx)
                self.enterOuterAlt(localctx, 7)
                self.state = 1640
                self.match(MySqlParser.UNIQUE)
                self.state = 1642
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,153,self._ctx)
                if la_ == 1:
                    self.state = 1641
                    self.match(MySqlParser.KEY)


                pass
            elif token in [368]:
                localctx = MySqlParser.CommentColumnConstraintContext(self, localctx)
                self.enterOuterAlt(localctx, 8)
                self.state = 1644
                self.match(MySqlParser.COMMENT)
                self.state = 1645
                self.match(MySqlParser.STRING_LITERAL)
                pass
            elif token in [366]:
                localctx = MySqlParser.FormatColumnConstraintContext(self, localctx)
                self.enterOuterAlt(localctx, 9)
                self.state = 1646
                self.match(MySqlParser.COLUMN_FORMAT)
                self.state = 1647
                localctx.colformat = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==42 or _la==402 or _la==431):
                    localctx.colformat = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass
            elif token in [636]:
                localctx = MySqlParser.StorageColumnConstraintContext(self, localctx)
                self.enterOuterAlt(localctx, 10)
                self.state = 1648
                self.match(MySqlParser.STORAGE)
                self.state = 1649
                localctx.storageval = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==42 or _la==398 or _la==792):
                    localctx.storageval = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass
            elif token in [136]:
                localctx = MySqlParser.ReferenceColumnConstraintContext(self, localctx)
                self.enterOuterAlt(localctx, 11)
                self.state = 1650
                self.referenceDefinition()
                pass
            elif token in [27]:
                localctx = MySqlParser.CollateColumnConstraintContext(self, localctx)
                self.enterOuterAlt(localctx, 12)
                self.state = 1651
                self.match(MySqlParser.COLLATE)
                self.state = 1652
                self.collationName()
                pass
            elif token in [12, 70]:
                localctx = MySqlParser.GeneratedColumnConstraintContext(self, localctx)
                self.enterOuterAlt(localctx, 13)
                self.state = 1655
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==70:
                    self.state = 1653
                    self.match(MySqlParser.GENERATED)
                    self.state = 1654
                    self.match(MySqlParser.ALWAYS)


                self.state = 1657
                self.match(MySqlParser.AS)
                self.state = 1658
                self.match(MySqlParser.LR_BRACKET)
                self.state = 1659
                self.expression(0)
                self.state = 1660
                self.match(MySqlParser.RR_BRACKET)
                self.state = 1662
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==637 or _la==672:
                    self.state = 1661
                    _la = self._input.LA(1)
                    if not(_la==637 or _la==672):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                pass
            elif token in [239]:
                localctx = MySqlParser.SerialDefaultColumnConstraintContext(self, localctx)
                self.enterOuterAlt(localctx, 14)
                self.state = 1664
                self.match(MySqlParser.SERIAL)
                self.state = 1665
                self.match(MySqlParser.DEFAULT)
                self.state = 1666
                self.match(MySqlParser.VALUE)
                pass
            elif token in [26, 30]:
                localctx = MySqlParser.CheckColumnConstraintContext(self, localctx)
                self.enterOuterAlt(localctx, 15)
                self.state = 1671
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==30:
                    self.state = 1667
                    self.match(MySqlParser.CONSTRAINT)
                    self.state = 1669
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513122304) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055071174737) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                        self.state = 1668
                        localctx.name = self.uid()




                self.state = 1673
                self.match(MySqlParser.CHECK)
                self.state = 1674
                self.match(MySqlParser.LR_BRACKET)
                self.state = 1675
                self.expression(0)
                self.state = 1676
                self.match(MySqlParser.RR_BRACKET)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class TableConstraintContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_tableConstraint

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class UniqueKeyTableConstraintContext(TableConstraintContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableConstraintContext
            super().__init__(parser)
            self.name = None # UidContext
            self.indexFormat = None # Token
            self.index = None # UidContext
            self.copyFrom(ctx)

        def UNIQUE(self):
            return self.getToken(MySqlParser.UNIQUE, 0)
        def indexColumnNames(self):
            return self.getTypedRuleContext(MySqlParser.IndexColumnNamesContext,0)

        def CONSTRAINT(self):
            return self.getToken(MySqlParser.CONSTRAINT, 0)
        def indexType(self):
            return self.getTypedRuleContext(MySqlParser.IndexTypeContext,0)

        def indexOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.IndexOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.IndexOptionContext,i)

        def uid(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UidContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UidContext,i)

        def INDEX(self):
            return self.getToken(MySqlParser.INDEX, 0)
        def KEY(self):
            return self.getToken(MySqlParser.KEY, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUniqueKeyTableConstraint" ):
                listener.enterUniqueKeyTableConstraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUniqueKeyTableConstraint" ):
                listener.exitUniqueKeyTableConstraint(self)


    class CheckTableConstraintContext(TableConstraintContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableConstraintContext
            super().__init__(parser)
            self.name = None # UidContext
            self.copyFrom(ctx)

        def CHECK(self):
            return self.getToken(MySqlParser.CHECK, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def CONSTRAINT(self):
            return self.getToken(MySqlParser.CONSTRAINT, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCheckTableConstraint" ):
                listener.enterCheckTableConstraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCheckTableConstraint" ):
                listener.exitCheckTableConstraint(self)


    class PrimaryKeyTableConstraintContext(TableConstraintContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableConstraintContext
            super().__init__(parser)
            self.name = None # UidContext
            self.index = None # UidContext
            self.copyFrom(ctx)

        def PRIMARY(self):
            return self.getToken(MySqlParser.PRIMARY, 0)
        def KEY(self):
            return self.getToken(MySqlParser.KEY, 0)
        def indexColumnNames(self):
            return self.getTypedRuleContext(MySqlParser.IndexColumnNamesContext,0)

        def CONSTRAINT(self):
            return self.getToken(MySqlParser.CONSTRAINT, 0)
        def indexType(self):
            return self.getTypedRuleContext(MySqlParser.IndexTypeContext,0)

        def indexOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.IndexOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.IndexOptionContext,i)

        def uid(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UidContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UidContext,i)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPrimaryKeyTableConstraint" ):
                listener.enterPrimaryKeyTableConstraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPrimaryKeyTableConstraint" ):
                listener.exitPrimaryKeyTableConstraint(self)


    class ForeignKeyTableConstraintContext(TableConstraintContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableConstraintContext
            super().__init__(parser)
            self.name = None # UidContext
            self.index = None # UidContext
            self.copyFrom(ctx)

        def FOREIGN(self):
            return self.getToken(MySqlParser.FOREIGN, 0)
        def KEY(self):
            return self.getToken(MySqlParser.KEY, 0)
        def indexColumnNames(self):
            return self.getTypedRuleContext(MySqlParser.IndexColumnNamesContext,0)

        def referenceDefinition(self):
            return self.getTypedRuleContext(MySqlParser.ReferenceDefinitionContext,0)

        def CONSTRAINT(self):
            return self.getToken(MySqlParser.CONSTRAINT, 0)
        def uid(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UidContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UidContext,i)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterForeignKeyTableConstraint" ):
                listener.enterForeignKeyTableConstraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitForeignKeyTableConstraint" ):
                listener.exitForeignKeyTableConstraint(self)



    def tableConstraint(self):

        localctx = MySqlParser.TableConstraintContext(self, self._ctx, self.state)
        self.enterRule(localctx, 96, self.RULE_tableConstraint)
        self._la = 0 # Token type
        try:
            self.state = 1749
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,175,self._ctx)
            if la_ == 1:
                localctx = MySqlParser.PrimaryKeyTableConstraintContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 1684
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==30:
                    self.state = 1680
                    self.match(MySqlParser.CONSTRAINT)
                    self.state = 1682
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,159,self._ctx)
                    if la_ == 1:
                        self.state = 1681
                        localctx.name = self.uid()




                self.state = 1686
                self.match(MySqlParser.PRIMARY)
                self.state = 1687
                self.match(MySqlParser.KEY)
                self.state = 1689
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513122304) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055071174737) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                    self.state = 1688
                    localctx.index = self.uid()


                self.state = 1692
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==187:
                    self.state = 1691
                    self.indexType()


                self.state = 1694
                self.indexColumnNames()
                self.state = 1698
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==187 or _la==192 or _la==368 or _la==459 or _la==467 or _la==673 or _la==875 or _la==1000:
                    self.state = 1695
                    self.indexOption()
                    self.state = 1700
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass

            elif la_ == 2:
                localctx = MySqlParser.UniqueKeyTableConstraintContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 1705
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==30:
                    self.state = 1701
                    self.match(MySqlParser.CONSTRAINT)
                    self.state = 1703
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513122304) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055071174737) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                        self.state = 1702
                        localctx.name = self.uid()




                self.state = 1707
                self.match(MySqlParser.UNIQUE)
                self.state = 1709
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==81 or _la==91:
                    self.state = 1708
                    localctx.indexFormat = self._input.LT(1)
                    _la = self._input.LA(1)
                    if not(_la==81 or _la==91):
                        localctx.indexFormat = self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 1712
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513122304) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055071174737) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                    self.state = 1711
                    localctx.index = self.uid()


                self.state = 1715
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==187:
                    self.state = 1714
                    self.indexType()


                self.state = 1717
                self.indexColumnNames()
                self.state = 1721
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==187 or _la==192 or _la==368 or _la==459 or _la==467 or _la==673 or _la==875 or _la==1000:
                    self.state = 1718
                    self.indexOption()
                    self.state = 1723
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass

            elif la_ == 3:
                localctx = MySqlParser.ForeignKeyTableConstraintContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 1728
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==30:
                    self.state = 1724
                    self.match(MySqlParser.CONSTRAINT)
                    self.state = 1726
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513122304) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055071174737) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                        self.state = 1725
                        localctx.name = self.uid()




                self.state = 1730
                self.match(MySqlParser.FOREIGN)
                self.state = 1731
                self.match(MySqlParser.KEY)
                self.state = 1733
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513122304) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055071174737) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                    self.state = 1732
                    localctx.index = self.uid()


                self.state = 1735
                self.indexColumnNames()
                self.state = 1736
                self.referenceDefinition()
                pass

            elif la_ == 4:
                localctx = MySqlParser.CheckTableConstraintContext(self, localctx)
                self.enterOuterAlt(localctx, 4)
                self.state = 1742
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==30:
                    self.state = 1738
                    self.match(MySqlParser.CONSTRAINT)
                    self.state = 1740
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513122304) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055071174737) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                        self.state = 1739
                        localctx.name = self.uid()




                self.state = 1744
                self.match(MySqlParser.CHECK)
                self.state = 1745
                self.match(MySqlParser.LR_BRACKET)
                self.state = 1746
                self.expression(0)
                self.state = 1747
                self.match(MySqlParser.RR_BRACKET)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ReferenceDefinitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.matchType = None # Token

        def REFERENCES(self):
            return self.getToken(MySqlParser.REFERENCES, 0)

        def tableName(self):
            return self.getTypedRuleContext(MySqlParser.TableNameContext,0)


        def indexColumnNames(self):
            return self.getTypedRuleContext(MySqlParser.IndexColumnNamesContext,0)


        def MATCH(self):
            return self.getToken(MySqlParser.MATCH, 0)

        def referenceAction(self):
            return self.getTypedRuleContext(MySqlParser.ReferenceActionContext,0)


        def FULL(self):
            return self.getToken(MySqlParser.FULL, 0)

        def PARTIAL(self):
            return self.getToken(MySqlParser.PARTIAL, 0)

        def SIMPLE(self):
            return self.getToken(MySqlParser.SIMPLE, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_referenceDefinition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterReferenceDefinition" ):
                listener.enterReferenceDefinition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitReferenceDefinition" ):
                listener.exitReferenceDefinition(self)




    def referenceDefinition(self):

        localctx = MySqlParser.ReferenceDefinitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 98, self.RULE_referenceDefinition)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 1751
            self.match(MySqlParser.REFERENCES)
            self.state = 1752
            self.tableName()
            self.state = 1754
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,176,self._ctx)
            if la_ == 1:
                self.state = 1753
                self.indexColumnNames()


            self.state = 1758
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==109:
                self.state = 1756
                self.match(MySqlParser.MATCH)
                self.state = 1757
                localctx.matchType = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==436 or _la==548 or _la==613):
                    localctx.matchType = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 1761
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,178,self._ctx)
            if la_ == 1:
                self.state = 1760
                self.referenceAction()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ReferenceActionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.onDelete = None # ReferenceControlTypeContext
            self.onUpdate = None # ReferenceControlTypeContext

        def ON(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.ON)
            else:
                return self.getToken(MySqlParser.ON, i)

        def DELETE(self):
            return self.getToken(MySqlParser.DELETE, 0)

        def referenceControlType(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ReferenceControlTypeContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ReferenceControlTypeContext,i)


        def UPDATE(self):
            return self.getToken(MySqlParser.UPDATE, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_referenceAction

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterReferenceAction" ):
                listener.enterReferenceAction(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitReferenceAction" ):
                listener.exitReferenceAction(self)




    def referenceAction(self):

        localctx = MySqlParser.ReferenceActionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 100, self.RULE_referenceAction)
        try:
            self.state = 1779
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,181,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 1763
                self.match(MySqlParser.ON)
                self.state = 1764
                self.match(MySqlParser.DELETE)
                self.state = 1765
                localctx.onDelete = self.referenceControlType()
                self.state = 1769
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,179,self._ctx)
                if la_ == 1:
                    self.state = 1766
                    self.match(MySqlParser.ON)
                    self.state = 1767
                    self.match(MySqlParser.UPDATE)
                    self.state = 1768
                    localctx.onUpdate = self.referenceControlType()


                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 1771
                self.match(MySqlParser.ON)
                self.state = 1772
                self.match(MySqlParser.UPDATE)
                self.state = 1773
                localctx.onUpdate = self.referenceControlType()
                self.state = 1777
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,180,self._ctx)
                if la_ == 1:
                    self.state = 1774
                    self.match(MySqlParser.ON)
                    self.state = 1775
                    self.match(MySqlParser.DELETE)
                    self.state = 1776
                    localctx.onDelete = self.referenceControlType()


                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ReferenceControlTypeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RESTRICT(self):
            return self.getToken(MySqlParser.RESTRICT, 0)

        def CASCADE(self):
            return self.getToken(MySqlParser.CASCADE, 0)

        def SET(self):
            return self.getToken(MySqlParser.SET, 0)

        def NULL_LITERAL(self):
            return self.getToken(MySqlParser.NULL_LITERAL, 0)

        def NO(self):
            return self.getToken(MySqlParser.NO, 0)

        def ACTION(self):
            return self.getToken(MySqlParser.ACTION, 0)

        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_referenceControlType

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterReferenceControlType" ):
                listener.enterReferenceControlType(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitReferenceControlType" ):
                listener.exitReferenceControlType(self)




    def referenceControlType(self):

        localctx = MySqlParser.ReferenceControlTypeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 102, self.RULE_referenceControlType)
        try:
            self.state = 1789
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,182,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 1781
                self.match(MySqlParser.RESTRICT)
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 1782
                self.match(MySqlParser.CASCADE)
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 1783
                self.match(MySqlParser.SET)
                self.state = 1784
                self.match(MySqlParser.NULL_LITERAL)
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 1785
                self.match(MySqlParser.NO)
                self.state = 1786
                self.match(MySqlParser.ACTION)
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 1787
                self.match(MySqlParser.SET)
                self.state = 1788
                self.match(MySqlParser.DEFAULT)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class IndexColumnDefinitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_indexColumnDefinition

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class SpecialIndexDeclarationContext(IndexColumnDefinitionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.IndexColumnDefinitionContext
            super().__init__(parser)
            self.indexFormat = None # Token
            self.copyFrom(ctx)

        def indexColumnNames(self):
            return self.getTypedRuleContext(MySqlParser.IndexColumnNamesContext,0)

        def FULLTEXT(self):
            return self.getToken(MySqlParser.FULLTEXT, 0)
        def SPATIAL(self):
            return self.getToken(MySqlParser.SPATIAL, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def indexOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.IndexOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.IndexOptionContext,i)

        def INDEX(self):
            return self.getToken(MySqlParser.INDEX, 0)
        def KEY(self):
            return self.getToken(MySqlParser.KEY, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSpecialIndexDeclaration" ):
                listener.enterSpecialIndexDeclaration(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSpecialIndexDeclaration" ):
                listener.exitSpecialIndexDeclaration(self)


    class SimpleIndexDeclarationContext(IndexColumnDefinitionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.IndexColumnDefinitionContext
            super().__init__(parser)
            self.indexFormat = None # Token
            self.copyFrom(ctx)

        def indexColumnNames(self):
            return self.getTypedRuleContext(MySqlParser.IndexColumnNamesContext,0)

        def INDEX(self):
            return self.getToken(MySqlParser.INDEX, 0)
        def KEY(self):
            return self.getToken(MySqlParser.KEY, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def indexType(self):
            return self.getTypedRuleContext(MySqlParser.IndexTypeContext,0)

        def indexOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.IndexOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.IndexOptionContext,i)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSimpleIndexDeclaration" ):
                listener.enterSimpleIndexDeclaration(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSimpleIndexDeclaration" ):
                listener.exitSimpleIndexDeclaration(self)



    def indexColumnDefinition(self):

        localctx = MySqlParser.IndexColumnDefinitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 104, self.RULE_indexColumnDefinition)
        self._la = 0 # Token type
        try:
            self.state = 1819
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [81, 91]:
                localctx = MySqlParser.SimpleIndexDeclarationContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 1791
                localctx.indexFormat = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==81 or _la==91):
                    localctx.indexFormat = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 1793
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513122304) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055071174737) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                    self.state = 1792
                    self.uid()


                self.state = 1796
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==187:
                    self.state = 1795
                    self.indexType()


                self.state = 1798
                self.indexColumnNames()
                self.state = 1802
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==187 or _la==192 or _la==368 or _la==459 or _la==467 or _la==673 or _la==875 or _la==1000:
                    self.state = 1799
                    self.indexOption()
                    self.state = 1804
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [69, 159]:
                localctx = MySqlParser.SpecialIndexDeclarationContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 1805
                _la = self._input.LA(1)
                if not(_la==69 or _la==159):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 1807
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==81 or _la==91:
                    self.state = 1806
                    localctx.indexFormat = self._input.LT(1)
                    _la = self._input.LA(1)
                    if not(_la==81 or _la==91):
                        localctx.indexFormat = self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 1810
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513122304) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055071174737) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                    self.state = 1809
                    self.uid()


                self.state = 1812
                self.indexColumnNames()
                self.state = 1816
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==187 or _la==192 or _la==368 or _la==459 or _la==467 or _la==673 or _la==875 or _la==1000:
                    self.state = 1813
                    self.indexOption()
                    self.state = 1818
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class TableOptionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_tableOption

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class TableOptionEngineContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def ENGINE(self):
            return self.getToken(MySqlParser.ENGINE, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)
        def engineName(self):
            return self.getTypedRuleContext(MySqlParser.EngineNameContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionEngine" ):
                listener.enterTableOptionEngine(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionEngine" ):
                listener.exitTableOptionEngine(self)


    class TableOptionMaxRowsContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def MAX_ROWS(self):
            return self.getToken(MySqlParser.MAX_ROWS, 0)
        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)

        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionMaxRows" ):
                listener.enterTableOptionMaxRows(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionMaxRows" ):
                listener.exitTableOptionMaxRows(self)


    class TableOptionCollateContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def COLLATE(self):
            return self.getToken(MySqlParser.COLLATE, 0)
        def collationName(self):
            return self.getTypedRuleContext(MySqlParser.CollationNameContext,0)

        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionCollate" ):
                listener.enterTableOptionCollate(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionCollate" ):
                listener.exitTableOptionCollate(self)


    class TableOptionPersistentContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.extBoolValue = None # Token
            self.copyFrom(ctx)

        def STATS_PERSISTENT(self):
            return self.getToken(MySqlParser.STATS_PERSISTENT, 0)
        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)
        def ZERO_DECIMAL(self):
            return self.getToken(MySqlParser.ZERO_DECIMAL, 0)
        def ONE_DECIMAL(self):
            return self.getToken(MySqlParser.ONE_DECIMAL, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionPersistent" ):
                listener.enterTableOptionPersistent(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionPersistent" ):
                listener.exitTableOptionPersistent(self)


    class TableOptionTablespaceContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def TABLESPACE(self):
            return self.getToken(MySqlParser.TABLESPACE, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def tablespaceStorage(self):
            return self.getTypedRuleContext(MySqlParser.TablespaceStorageContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionTablespace" ):
                listener.enterTableOptionTablespace(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionTablespace" ):
                listener.exitTableOptionTablespace(self)


    class TableOptionAutoextendSizeContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def AUTOEXTEND_SIZE(self):
            return self.getToken(MySqlParser.AUTOEXTEND_SIZE, 0)
        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)

        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionAutoextendSize" ):
                listener.enterTableOptionAutoextendSize(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionAutoextendSize" ):
                listener.exitTableOptionAutoextendSize(self)


    class TableOptionPageCompressedContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def PAGE_COMPRESSED(self):
            return self.getToken(MySqlParser.PAGE_COMPRESSED, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)
        def ZERO_DECIMAL(self):
            return self.getToken(MySqlParser.ZERO_DECIMAL, 0)
        def ONE_DECIMAL(self):
            return self.getToken(MySqlParser.ONE_DECIMAL, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionPageCompressed" ):
                listener.enterTableOptionPageCompressed(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionPageCompressed" ):
                listener.exitTableOptionPageCompressed(self)


    class TableOptionStartTransactionContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def START(self):
            return self.getToken(MySqlParser.START, 0)
        def TRANSACTION(self):
            return self.getToken(MySqlParser.TRANSACTION, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionStartTransaction" ):
                listener.enterTableOptionStartTransaction(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionStartTransaction" ):
                listener.exitTableOptionStartTransaction(self)


    class TableOptionPackKeysContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.extBoolValue = None # Token
            self.copyFrom(ctx)

        def PACK_KEYS(self):
            return self.getToken(MySqlParser.PACK_KEYS, 0)
        def ZERO_DECIMAL(self):
            return self.getToken(MySqlParser.ZERO_DECIMAL, 0)
        def ONE_DECIMAL(self):
            return self.getToken(MySqlParser.ONE_DECIMAL, 0)
        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionPackKeys" ):
                listener.enterTableOptionPackKeys(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionPackKeys" ):
                listener.exitTableOptionPackKeys(self)


    class TableOptionPasswordContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def PASSWORD(self):
            return self.getToken(MySqlParser.PASSWORD, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionPassword" ):
                listener.enterTableOptionPassword(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionPassword" ):
                listener.exitTableOptionPassword(self)


    class TableOptionUnionContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def UNION(self):
            return self.getToken(MySqlParser.UNION, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def tables(self):
            return self.getTypedRuleContext(MySqlParser.TablesContext,0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionUnion" ):
                listener.enterTableOptionUnion(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionUnion" ):
                listener.exitTableOptionUnion(self)


    class TableOptionSamplePageContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def STATS_SAMPLE_PAGES(self):
            return self.getToken(MySqlParser.STATS_SAMPLE_PAGES, 0)
        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)
        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)

        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionSamplePage" ):
                listener.enterTableOptionSamplePage(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionSamplePage" ):
                listener.exitTableOptionSamplePage(self)


    class TableOptionCharsetContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def charSet(self):
            return self.getTypedRuleContext(MySqlParser.CharSetContext,0)

        def charsetName(self):
            return self.getTypedRuleContext(MySqlParser.CharsetNameContext,0)

        def DEFAULT(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.DEFAULT)
            else:
                return self.getToken(MySqlParser.DEFAULT, i)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionCharset" ):
                listener.enterTableOptionCharset(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionCharset" ):
                listener.exitTableOptionCharset(self)


    class TableOptionIndexDirectoryContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def INDEX(self):
            return self.getToken(MySqlParser.INDEX, 0)
        def DIRECTORY(self):
            return self.getToken(MySqlParser.DIRECTORY, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionIndexDirectory" ):
                listener.enterTableOptionIndexDirectory(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionIndexDirectory" ):
                listener.exitTableOptionIndexDirectory(self)


    class TableOptionTableTypeContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def TABLE_TYPE(self):
            return self.getToken(MySqlParser.TABLE_TYPE, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)
        def tableType(self):
            return self.getTypedRuleContext(MySqlParser.TableTypeContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionTableType" ):
                listener.enterTableOptionTableType(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionTableType" ):
                listener.exitTableOptionTableType(self)


    class TableOptionKeyBlockSizeContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def KEY_BLOCK_SIZE(self):
            return self.getToken(MySqlParser.KEY_BLOCK_SIZE, 0)
        def fileSizeLiteral(self):
            return self.getTypedRuleContext(MySqlParser.FileSizeLiteralContext,0)

        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionKeyBlockSize" ):
                listener.enterTableOptionKeyBlockSize(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionKeyBlockSize" ):
                listener.exitTableOptionKeyBlockSize(self)


    class TableOptionEncryptionContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def ENCRYPTION(self):
            return self.getToken(MySqlParser.ENCRYPTION, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionEncryption" ):
                listener.enterTableOptionEncryption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionEncryption" ):
                listener.exitTableOptionEncryption(self)


    class TableOptionDataDirectoryContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def DIRECTORY(self):
            return self.getToken(MySqlParser.DIRECTORY, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)
        def DATA(self):
            return self.getToken(MySqlParser.DATA, 0)
        def INDEX(self):
            return self.getToken(MySqlParser.INDEX, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionDataDirectory" ):
                listener.enterTableOptionDataDirectory(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionDataDirectory" ):
                listener.exitTableOptionDataDirectory(self)


    class TableOptionRecalculationContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.extBoolValue = None # Token
            self.copyFrom(ctx)

        def STATS_AUTO_RECALC(self):
            return self.getToken(MySqlParser.STATS_AUTO_RECALC, 0)
        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)
        def ZERO_DECIMAL(self):
            return self.getToken(MySqlParser.ZERO_DECIMAL, 0)
        def ONE_DECIMAL(self):
            return self.getToken(MySqlParser.ONE_DECIMAL, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionRecalculation" ):
                listener.enterTableOptionRecalculation(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionRecalculation" ):
                listener.exitTableOptionRecalculation(self)


    class TableOptionAutoIncrementContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def AUTO_INCREMENT(self):
            return self.getToken(MySqlParser.AUTO_INCREMENT, 0)
        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)

        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionAutoIncrement" ):
                listener.enterTableOptionAutoIncrement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionAutoIncrement" ):
                listener.exitTableOptionAutoIncrement(self)


    class TableOptionEncryptionKeyIdContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def ENCRYPTION_KEY_ID(self):
            return self.getToken(MySqlParser.ENCRYPTION_KEY_ID, 0)
        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)

        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionEncryptionKeyId" ):
                listener.enterTableOptionEncryptionKeyId(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionEncryptionKeyId" ):
                listener.exitTableOptionEncryptionKeyId(self)


    class TableOptionChecksumContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.boolValue = None # Token
            self.copyFrom(ctx)

        def CHECKSUM(self):
            return self.getToken(MySqlParser.CHECKSUM, 0)
        def PAGE_CHECKSUM(self):
            return self.getToken(MySqlParser.PAGE_CHECKSUM, 0)
        def ZERO_DECIMAL(self):
            return self.getToken(MySqlParser.ZERO_DECIMAL, 0)
        def ONE_DECIMAL(self):
            return self.getToken(MySqlParser.ONE_DECIMAL, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionChecksum" ):
                listener.enterTableOptionChecksum(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionChecksum" ):
                listener.exitTableOptionChecksum(self)


    class TableOptionDelayContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.boolValue = None # Token
            self.copyFrom(ctx)

        def DELAY_KEY_WRITE(self):
            return self.getToken(MySqlParser.DELAY_KEY_WRITE, 0)
        def ZERO_DECIMAL(self):
            return self.getToken(MySqlParser.ZERO_DECIMAL, 0)
        def ONE_DECIMAL(self):
            return self.getToken(MySqlParser.ONE_DECIMAL, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionDelay" ):
                listener.enterTableOptionDelay(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionDelay" ):
                listener.exitTableOptionDelay(self)


    class TableOptionConnectionContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def CONNECTION(self):
            return self.getToken(MySqlParser.CONNECTION, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionConnection" ):
                listener.enterTableOptionConnection(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionConnection" ):
                listener.exitTableOptionConnection(self)


    class TableOptionTransactionalContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def TRANSACTIONAL(self):
            return self.getToken(MySqlParser.TRANSACTIONAL, 0)
        def ZERO_DECIMAL(self):
            return self.getToken(MySqlParser.ZERO_DECIMAL, 0)
        def ONE_DECIMAL(self):
            return self.getToken(MySqlParser.ONE_DECIMAL, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionTransactional" ):
                listener.enterTableOptionTransactional(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionTransactional" ):
                listener.exitTableOptionTransactional(self)


    class TableOptionPageCompressionLevelContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)

        def PAGE_COMPRESSION_LEVEL(self):
            return self.getToken(MySqlParser.PAGE_COMPRESSION_LEVEL, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionPageCompressionLevel" ):
                listener.enterTableOptionPageCompressionLevel(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionPageCompressionLevel" ):
                listener.exitTableOptionPageCompressionLevel(self)


    class TableOptionSecondaryEngineAttributeContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def SECONDARY_ENGINE_ATTRIBUTE(self):
            return self.getToken(MySqlParser.SECONDARY_ENGINE_ATTRIBUTE, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionSecondaryEngineAttribute" ):
                listener.enterTableOptionSecondaryEngineAttribute(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionSecondaryEngineAttribute" ):
                listener.exitTableOptionSecondaryEngineAttribute(self)


    class TableOptionCommentContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def COMMENT(self):
            return self.getToken(MySqlParser.COMMENT, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionComment" ):
                listener.enterTableOptionComment(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionComment" ):
                listener.exitTableOptionComment(self)


    class TableOptionAverageContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def AVG_ROW_LENGTH(self):
            return self.getToken(MySqlParser.AVG_ROW_LENGTH, 0)
        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)

        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionAverage" ):
                listener.enterTableOptionAverage(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionAverage" ):
                listener.exitTableOptionAverage(self)


    class TableOptionRowFormatContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.rowFormat = None # Token
            self.copyFrom(ctx)

        def ROW_FORMAT(self):
            return self.getToken(MySqlParser.ROW_FORMAT, 0)
        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)
        def DYNAMIC(self):
            return self.getToken(MySqlParser.DYNAMIC, 0)
        def FIXED(self):
            return self.getToken(MySqlParser.FIXED, 0)
        def COMPRESSED(self):
            return self.getToken(MySqlParser.COMPRESSED, 0)
        def REDUNDANT(self):
            return self.getToken(MySqlParser.REDUNDANT, 0)
        def COMPACT(self):
            return self.getToken(MySqlParser.COMPACT, 0)
        def ID(self):
            return self.getToken(MySqlParser.ID, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionRowFormat" ):
                listener.enterTableOptionRowFormat(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionRowFormat" ):
                listener.exitTableOptionRowFormat(self)


    class TableOptionCompressionContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def COMPRESSION(self):
            return self.getToken(MySqlParser.COMPRESSION, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)
        def ID(self):
            return self.getToken(MySqlParser.ID, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionCompression" ):
                listener.enterTableOptionCompression(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionCompression" ):
                listener.exitTableOptionCompression(self)


    class TableOptionInsertMethodContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.insertMethod = None # Token
            self.copyFrom(ctx)

        def INSERT_METHOD(self):
            return self.getToken(MySqlParser.INSERT_METHOD, 0)
        def NO(self):
            return self.getToken(MySqlParser.NO, 0)
        def FIRST(self):
            return self.getToken(MySqlParser.FIRST, 0)
        def LAST(self):
            return self.getToken(MySqlParser.LAST, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionInsertMethod" ):
                listener.enterTableOptionInsertMethod(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionInsertMethod" ):
                listener.exitTableOptionInsertMethod(self)


    class TableOptionEngineAttributeContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def ENGINE_ATTRIBUTE(self):
            return self.getToken(MySqlParser.ENGINE_ATTRIBUTE, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionEngineAttribute" ):
                listener.enterTableOptionEngineAttribute(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionEngineAttribute" ):
                listener.exitTableOptionEngineAttribute(self)


    class TableOptionMinRowsContext(TableOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def MIN_ROWS(self):
            return self.getToken(MySqlParser.MIN_ROWS, 0)
        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)

        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableOptionMinRows" ):
                listener.enterTableOptionMinRows(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableOptionMinRows" ):
                listener.exitTableOptionMinRows(self)



    def tableOption(self):

        localctx = MySqlParser.TableOptionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 106, self.RULE_tableOption)
        self._la = 0 # Token type
        try:
            self.state = 2006
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,227,self._ctx)
            if la_ == 1:
                localctx = MySqlParser.TableOptionEngineContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 1821
                self.match(MySqlParser.ENGINE)
                self.state = 1823
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1822
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1826
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,191,self._ctx)
                if la_ == 1:
                    self.state = 1825
                    self.engineName()


                pass

            elif la_ == 2:
                localctx = MySqlParser.TableOptionEngineAttributeContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 1828
                self.match(MySqlParser.ENGINE_ATTRIBUTE)
                self.state = 1830
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1829
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1832
                self.match(MySqlParser.STRING_LITERAL)
                pass

            elif la_ == 3:
                localctx = MySqlParser.TableOptionAutoextendSizeContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 1833
                self.match(MySqlParser.AUTOEXTEND_SIZE)
                self.state = 1835
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1834
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1837
                self.decimalLiteral()
                pass

            elif la_ == 4:
                localctx = MySqlParser.TableOptionAutoIncrementContext(self, localctx)
                self.enterOuterAlt(localctx, 4)
                self.state = 1838
                self.match(MySqlParser.AUTO_INCREMENT)
                self.state = 1840
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1839
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1842
                self.decimalLiteral()
                pass

            elif la_ == 5:
                localctx = MySqlParser.TableOptionAverageContext(self, localctx)
                self.enterOuterAlt(localctx, 5)
                self.state = 1843
                self.match(MySqlParser.AVG_ROW_LENGTH)
                self.state = 1845
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1844
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1847
                self.decimalLiteral()
                pass

            elif la_ == 6:
                localctx = MySqlParser.TableOptionCharsetContext(self, localctx)
                self.enterOuterAlt(localctx, 6)
                self.state = 1849
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==42:
                    self.state = 1848
                    self.match(MySqlParser.DEFAULT)


                self.state = 1851
                self.charSet()
                self.state = 1853
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1852
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1857
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [226, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 1145, 1148]:
                    self.state = 1855
                    self.charsetName()
                    pass
                elif token in [42]:
                    self.state = 1856
                    self.match(MySqlParser.DEFAULT)
                    pass
                else:
                    raise NoViableAltException(self)

                pass

            elif la_ == 7:
                localctx = MySqlParser.TableOptionChecksumContext(self, localctx)
                self.enterOuterAlt(localctx, 7)
                self.state = 1859
                _la = self._input.LA(1)
                if not(_la==356 or _la==357):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 1861
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1860
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1863
                localctx.boolValue = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==1138 or _la==1139):
                    localctx.boolValue = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass

            elif la_ == 8:
                localctx = MySqlParser.TableOptionCollateContext(self, localctx)
                self.enterOuterAlt(localctx, 8)
                self.state = 1865
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==42:
                    self.state = 1864
                    self.match(MySqlParser.DEFAULT)


                self.state = 1867
                self.match(MySqlParser.COLLATE)
                self.state = 1869
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1868
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1871
                self.collationName()
                pass

            elif la_ == 9:
                localctx = MySqlParser.TableOptionCommentContext(self, localctx)
                self.enterOuterAlt(localctx, 9)
                self.state = 1872
                self.match(MySqlParser.COMMENT)
                self.state = 1874
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1873
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1876
                self.match(MySqlParser.STRING_LITERAL)
                pass

            elif la_ == 10:
                localctx = MySqlParser.TableOptionCompressionContext(self, localctx)
                self.enterOuterAlt(localctx, 10)
                self.state = 1877
                self.match(MySqlParser.COMPRESSION)
                self.state = 1879
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1878
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1881
                _la = self._input.LA(1)
                if not(_la==1148 or _la==1156):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass

            elif la_ == 11:
                localctx = MySqlParser.TableOptionConnectionContext(self, localctx)
                self.enterOuterAlt(localctx, 11)
                self.state = 1882
                self.match(MySqlParser.CONNECTION)
                self.state = 1884
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1883
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1886
                self.match(MySqlParser.STRING_LITERAL)
                pass

            elif la_ == 12:
                localctx = MySqlParser.TableOptionDataDirectoryContext(self, localctx)
                self.enterOuterAlt(localctx, 12)
                self.state = 1887
                _la = self._input.LA(1)
                if not(_la==81 or _la==388):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 1888
                self.match(MySqlParser.DIRECTORY)
                self.state = 1890
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1889
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1892
                self.match(MySqlParser.STRING_LITERAL)
                pass

            elif la_ == 13:
                localctx = MySqlParser.TableOptionDelayContext(self, localctx)
                self.enterOuterAlt(localctx, 13)
                self.state = 1893
                self.match(MySqlParser.DELAY_KEY_WRITE)
                self.state = 1895
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1894
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1897
                localctx.boolValue = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==1138 or _la==1139):
                    localctx.boolValue = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass

            elif la_ == 14:
                localctx = MySqlParser.TableOptionEncryptionContext(self, localctx)
                self.enterOuterAlt(localctx, 14)
                self.state = 1898
                self.match(MySqlParser.ENCRYPTION)
                self.state = 1900
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1899
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1902
                self.match(MySqlParser.STRING_LITERAL)
                pass

            elif la_ == 15:
                localctx = MySqlParser.TableOptionPageCompressedContext(self, localctx)
                self.enterOuterAlt(localctx, 15)
                self.state = 1903
                _la = self._input.LA(1)
                if not(_la==545 or _la==1148):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 1905
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1904
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1907
                _la = self._input.LA(1)
                if not(_la==1138 or _la==1139):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass

            elif la_ == 16:
                localctx = MySqlParser.TableOptionPageCompressionLevelContext(self, localctx)
                self.enterOuterAlt(localctx, 16)
                self.state = 1908
                _la = self._input.LA(1)
                if not(_la==546 or _la==1148):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 1910
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1909
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1912
                self.decimalLiteral()
                pass

            elif la_ == 17:
                localctx = MySqlParser.TableOptionEncryptionKeyIdContext(self, localctx)
                self.enterOuterAlt(localctx, 17)
                self.state = 1913
                self.match(MySqlParser.ENCRYPTION_KEY_ID)
                self.state = 1915
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1914
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1917
                self.decimalLiteral()
                pass

            elif la_ == 18:
                localctx = MySqlParser.TableOptionIndexDirectoryContext(self, localctx)
                self.enterOuterAlt(localctx, 18)
                self.state = 1918
                self.match(MySqlParser.INDEX)
                self.state = 1919
                self.match(MySqlParser.DIRECTORY)
                self.state = 1921
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1920
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1923
                self.match(MySqlParser.STRING_LITERAL)
                pass

            elif la_ == 19:
                localctx = MySqlParser.TableOptionInsertMethodContext(self, localctx)
                self.enterOuterAlt(localctx, 19)
                self.state = 1924
                self.match(MySqlParser.INSERT_METHOD)
                self.state = 1926
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1925
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1928
                localctx.insertMethod = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==430 or _la==469 or _la==521):
                    localctx.insertMethod = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass

            elif la_ == 20:
                localctx = MySqlParser.TableOptionKeyBlockSizeContext(self, localctx)
                self.enterOuterAlt(localctx, 20)
                self.state = 1929
                self.match(MySqlParser.KEY_BLOCK_SIZE)
                self.state = 1931
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1930
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1933
                self.fileSizeLiteral()
                pass

            elif la_ == 21:
                localctx = MySqlParser.TableOptionMaxRowsContext(self, localctx)
                self.enterOuterAlt(localctx, 21)
                self.state = 1934
                self.match(MySqlParser.MAX_ROWS)
                self.state = 1936
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1935
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1938
                self.decimalLiteral()
                pass

            elif la_ == 22:
                localctx = MySqlParser.TableOptionMinRowsContext(self, localctx)
                self.enterOuterAlt(localctx, 22)
                self.state = 1939
                self.match(MySqlParser.MIN_ROWS)
                self.state = 1941
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1940
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1943
                self.decimalLiteral()
                pass

            elif la_ == 23:
                localctx = MySqlParser.TableOptionPackKeysContext(self, localctx)
                self.enterOuterAlt(localctx, 23)
                self.state = 1944
                self.match(MySqlParser.PACK_KEYS)
                self.state = 1946
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1945
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1948
                localctx.extBoolValue = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==42 or _la==1138 or _la==1139):
                    localctx.extBoolValue = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass

            elif la_ == 24:
                localctx = MySqlParser.TableOptionPasswordContext(self, localctx)
                self.enterOuterAlt(localctx, 24)
                self.state = 1949
                self.match(MySqlParser.PASSWORD)
                self.state = 1951
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1950
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1953
                self.match(MySqlParser.STRING_LITERAL)
                pass

            elif la_ == 25:
                localctx = MySqlParser.TableOptionRowFormatContext(self, localctx)
                self.enterOuterAlt(localctx, 25)
                self.state = 1954
                self.match(MySqlParser.ROW_FORMAT)
                self.state = 1956
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1955
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1958
                localctx.rowFormat = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==42 or ((((_la - 370)) & ~0x3f) == 0 and ((1 << (_la - 370)) & 2305843013508661253) != 0) or _la==573 or _la==1156):
                    localctx.rowFormat = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass

            elif la_ == 26:
                localctx = MySqlParser.TableOptionStartTransactionContext(self, localctx)
                self.enterOuterAlt(localctx, 26)
                self.state = 1959
                self.match(MySqlParser.START)
                self.state = 1960
                self.match(MySqlParser.TRANSACTION)
                pass

            elif la_ == 27:
                localctx = MySqlParser.TableOptionSecondaryEngineAttributeContext(self, localctx)
                self.enterOuterAlt(localctx, 27)
                self.state = 1961
                self.match(MySqlParser.SECONDARY_ENGINE_ATTRIBUTE)
                self.state = 1963
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1962
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1965
                self.match(MySqlParser.STRING_LITERAL)
                pass

            elif la_ == 28:
                localctx = MySqlParser.TableOptionRecalculationContext(self, localctx)
                self.enterOuterAlt(localctx, 28)
                self.state = 1966
                self.match(MySqlParser.STATS_AUTO_RECALC)
                self.state = 1968
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1967
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1970
                localctx.extBoolValue = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==42 or _la==1138 or _la==1139):
                    localctx.extBoolValue = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass

            elif la_ == 29:
                localctx = MySqlParser.TableOptionPersistentContext(self, localctx)
                self.enterOuterAlt(localctx, 29)
                self.state = 1971
                self.match(MySqlParser.STATS_PERSISTENT)
                self.state = 1973
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1972
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1975
                localctx.extBoolValue = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==42 or _la==1138 or _la==1139):
                    localctx.extBoolValue = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass

            elif la_ == 30:
                localctx = MySqlParser.TableOptionSamplePageContext(self, localctx)
                self.enterOuterAlt(localctx, 30)
                self.state = 1976
                self.match(MySqlParser.STATS_SAMPLE_PAGES)
                self.state = 1978
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1977
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1982
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [42]:
                    self.state = 1980
                    self.match(MySqlParser.DEFAULT)
                    pass
                elif token in [1138, 1139, 1140, 1149, 1151]:
                    self.state = 1981
                    self.decimalLiteral()
                    pass
                else:
                    raise NoViableAltException(self)

                pass

            elif la_ == 31:
                localctx = MySqlParser.TableOptionTablespaceContext(self, localctx)
                self.enterOuterAlt(localctx, 31)
                self.state = 1984
                self.match(MySqlParser.TABLESPACE)
                self.state = 1985
                self.uid()
                self.state = 1987
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,224,self._ctx)
                if la_ == 1:
                    self.state = 1986
                    self.tablespaceStorage()


                pass

            elif la_ == 32:
                localctx = MySqlParser.TableOptionTableTypeContext(self, localctx)
                self.enterOuterAlt(localctx, 32)
                self.state = 1989
                self.match(MySqlParser.TABLE_TYPE)
                self.state = 1990
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 1991
                self.tableType()
                pass

            elif la_ == 33:
                localctx = MySqlParser.TableOptionTablespaceContext(self, localctx)
                self.enterOuterAlt(localctx, 33)
                self.state = 1992
                self.tablespaceStorage()
                pass

            elif la_ == 34:
                localctx = MySqlParser.TableOptionTransactionalContext(self, localctx)
                self.enterOuterAlt(localctx, 34)
                self.state = 1993
                self.match(MySqlParser.TRANSACTIONAL)
                self.state = 1995
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1994
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 1997
                _la = self._input.LA(1)
                if not(_la==1138 or _la==1139):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass

            elif la_ == 35:
                localctx = MySqlParser.TableOptionUnionContext(self, localctx)
                self.enterOuterAlt(localctx, 35)
                self.state = 1998
                self.match(MySqlParser.UNION)
                self.state = 2000
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 1999
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 2002
                self.match(MySqlParser.LR_BRACKET)
                self.state = 2003
                self.tables()
                self.state = 2004
                self.match(MySqlParser.RR_BRACKET)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class TableTypeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MYSQL(self):
            return self.getToken(MySqlParser.MYSQL, 0)

        def ODBC(self):
            return self.getToken(MySqlParser.ODBC, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_tableType

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableType" ):
                listener.enterTableType(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableType" ):
                listener.exitTableType(self)




    def tableType(self):

        localctx = MySqlParser.TableTypeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 108, self.RULE_tableType)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2008
            _la = self._input.LA(1)
            if not(_la==514 or _la==530):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class TablespaceStorageContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def STORAGE(self):
            return self.getToken(MySqlParser.STORAGE, 0)

        def DISK(self):
            return self.getToken(MySqlParser.DISK, 0)

        def MEMORY(self):
            return self.getToken(MySqlParser.MEMORY, 0)

        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_tablespaceStorage

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTablespaceStorage" ):
                listener.enterTablespaceStorage(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTablespaceStorage" ):
                listener.exitTablespaceStorage(self)




    def tablespaceStorage(self):

        localctx = MySqlParser.TablespaceStorageContext(self, self._ctx, self.state)
        self.enterRule(localctx, 110, self.RULE_tablespaceStorage)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2010
            self.match(MySqlParser.STORAGE)
            self.state = 2011
            _la = self._input.LA(1)
            if not(_la==42 or _la==398 or _la==792):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class PartitionDefinitionsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.count = None # DecimalLiteralContext
            self.subCount = None # DecimalLiteralContext

        def PARTITION(self):
            return self.getToken(MySqlParser.PARTITION, 0)

        def BY(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.BY)
            else:
                return self.getToken(MySqlParser.BY, i)

        def partitionFunctionDefinition(self):
            return self.getTypedRuleContext(MySqlParser.PartitionFunctionDefinitionContext,0)


        def PARTITIONS(self):
            return self.getToken(MySqlParser.PARTITIONS, 0)

        def SUBPARTITION(self):
            return self.getToken(MySqlParser.SUBPARTITION, 0)

        def subpartitionFunctionDefinition(self):
            return self.getTypedRuleContext(MySqlParser.SubpartitionFunctionDefinitionContext,0)


        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def partitionDefinition(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.PartitionDefinitionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.PartitionDefinitionContext,i)


        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def decimalLiteral(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.DecimalLiteralContext)
            else:
                return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,i)


        def SUBPARTITIONS(self):
            return self.getToken(MySqlParser.SUBPARTITIONS, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_partitionDefinitions

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartitionDefinitions" ):
                listener.enterPartitionDefinitions(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartitionDefinitions" ):
                listener.exitPartitionDefinitions(self)




    def partitionDefinitions(self):

        localctx = MySqlParser.PartitionDefinitionsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 112, self.RULE_partitionDefinitions)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2013
            self.match(MySqlParser.PARTITION)
            self.state = 2014
            self.match(MySqlParser.BY)
            self.state = 2015
            self.partitionFunctionDefinition()
            self.state = 2018
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==550:
                self.state = 2016
                self.match(MySqlParser.PARTITIONS)
                self.state = 2017
                localctx.count = self.decimalLiteral()


            self.state = 2027
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==641:
                self.state = 2020
                self.match(MySqlParser.SUBPARTITION)
                self.state = 2021
                self.match(MySqlParser.BY)
                self.state = 2022
                self.subpartitionFunctionDefinition()
                self.state = 2025
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==642:
                    self.state = 2023
                    self.match(MySqlParser.SUBPARTITIONS)
                    self.state = 2024
                    localctx.subCount = self.decimalLiteral()




            self.state = 2040
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,232,self._ctx)
            if la_ == 1:
                self.state = 2029
                self.match(MySqlParser.LR_BRACKET)
                self.state = 2030
                self.partitionDefinition()
                self.state = 2035
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 2031
                    self.match(MySqlParser.COMMA)
                    self.state = 2032
                    self.partitionDefinition()
                    self.state = 2037
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 2038
                self.match(MySqlParser.RR_BRACKET)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class PartitionFunctionDefinitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_partitionFunctionDefinition

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class PartitionFunctionKeyContext(PartitionFunctionDefinitionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PartitionFunctionDefinitionContext
            super().__init__(parser)
            self.algType = None # Token
            self.copyFrom(ctx)

        def KEY(self):
            return self.getToken(MySqlParser.KEY, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def LINEAR(self):
            return self.getToken(MySqlParser.LINEAR, 0)
        def ALGORITHM(self):
            return self.getToken(MySqlParser.ALGORITHM, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)
        def uidList(self):
            return self.getTypedRuleContext(MySqlParser.UidListContext,0)

        def ONE_DECIMAL(self):
            return self.getToken(MySqlParser.ONE_DECIMAL, 0)
        def TWO_DECIMAL(self):
            return self.getToken(MySqlParser.TWO_DECIMAL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartitionFunctionKey" ):
                listener.enterPartitionFunctionKey(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartitionFunctionKey" ):
                listener.exitPartitionFunctionKey(self)


    class PartitionFunctionHashContext(PartitionFunctionDefinitionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PartitionFunctionDefinitionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def HASH(self):
            return self.getToken(MySqlParser.HASH, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def LINEAR(self):
            return self.getToken(MySqlParser.LINEAR, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartitionFunctionHash" ):
                listener.enterPartitionFunctionHash(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartitionFunctionHash" ):
                listener.exitPartitionFunctionHash(self)


    class PartitionFunctionListContext(PartitionFunctionDefinitionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PartitionFunctionDefinitionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def LIST(self):
            return self.getToken(MySqlParser.LIST, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def COLUMNS(self):
            return self.getToken(MySqlParser.COLUMNS, 0)
        def uidList(self):
            return self.getTypedRuleContext(MySqlParser.UidListContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartitionFunctionList" ):
                listener.enterPartitionFunctionList(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartitionFunctionList" ):
                listener.exitPartitionFunctionList(self)


    class PartitionFunctionRangeContext(PartitionFunctionDefinitionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PartitionFunctionDefinitionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def RANGE(self):
            return self.getToken(MySqlParser.RANGE, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def COLUMNS(self):
            return self.getToken(MySqlParser.COLUMNS, 0)
        def uidList(self):
            return self.getTypedRuleContext(MySqlParser.UidListContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartitionFunctionRange" ):
                listener.enterPartitionFunctionRange(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartitionFunctionRange" ):
                listener.exitPartitionFunctionRange(self)



    def partitionFunctionDefinition(self):

        localctx = MySqlParser.PartitionFunctionDefinitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 114, self.RULE_partitionFunctionDefinition)
        self._la = 0 # Token type
        try:
            self.state = 2088
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,239,self._ctx)
            if la_ == 1:
                localctx = MySqlParser.PartitionFunctionHashContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 2043
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==100:
                    self.state = 2042
                    self.match(MySqlParser.LINEAR)


                self.state = 2045
                self.match(MySqlParser.HASH)
                self.state = 2046
                self.match(MySqlParser.LR_BRACKET)
                self.state = 2047
                self.expression(0)
                self.state = 2048
                self.match(MySqlParser.RR_BRACKET)
                pass

            elif la_ == 2:
                localctx = MySqlParser.PartitionFunctionKeyContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 2051
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==100:
                    self.state = 2050
                    self.match(MySqlParser.LINEAR)


                self.state = 2053
                self.match(MySqlParser.KEY)
                self.state = 2057
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==336:
                    self.state = 2054
                    self.match(MySqlParser.ALGORITHM)
                    self.state = 2055
                    self.match(MySqlParser.EQUAL_SYMBOL)
                    self.state = 2056
                    localctx.algType = self._input.LT(1)
                    _la = self._input.LA(1)
                    if not(_la==1139 or _la==1140):
                        localctx.algType = self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 2059
                self.match(MySqlParser.LR_BRACKET)
                self.state = 2061
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513122304) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055071174737) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                    self.state = 2060
                    self.uidList()


                self.state = 2063
                self.match(MySqlParser.RR_BRACKET)
                pass

            elif la_ == 3:
                localctx = MySqlParser.PartitionFunctionRangeContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 2064
                self.match(MySqlParser.RANGE)
                self.state = 2074
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [1133]:
                    self.state = 2065
                    self.match(MySqlParser.LR_BRACKET)
                    self.state = 2066
                    self.expression(0)
                    self.state = 2067
                    self.match(MySqlParser.RR_BRACKET)
                    pass
                elif token in [365]:
                    self.state = 2069
                    self.match(MySqlParser.COLUMNS)
                    self.state = 2070
                    self.match(MySqlParser.LR_BRACKET)
                    self.state = 2071
                    self.uidList()
                    self.state = 2072
                    self.match(MySqlParser.RR_BRACKET)
                    pass
                else:
                    raise NoViableAltException(self)

                pass

            elif la_ == 4:
                localctx = MySqlParser.PartitionFunctionListContext(self, localctx)
                self.enterOuterAlt(localctx, 4)
                self.state = 2076
                self.match(MySqlParser.LIST)
                self.state = 2086
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [1133]:
                    self.state = 2077
                    self.match(MySqlParser.LR_BRACKET)
                    self.state = 2078
                    self.expression(0)
                    self.state = 2079
                    self.match(MySqlParser.RR_BRACKET)
                    pass
                elif token in [365]:
                    self.state = 2081
                    self.match(MySqlParser.COLUMNS)
                    self.state = 2082
                    self.match(MySqlParser.LR_BRACKET)
                    self.state = 2083
                    self.uidList()
                    self.state = 2084
                    self.match(MySqlParser.RR_BRACKET)
                    pass
                else:
                    raise NoViableAltException(self)

                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class SubpartitionFunctionDefinitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_subpartitionFunctionDefinition

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class SubPartitionFunctionHashContext(SubpartitionFunctionDefinitionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SubpartitionFunctionDefinitionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def HASH(self):
            return self.getToken(MySqlParser.HASH, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def LINEAR(self):
            return self.getToken(MySqlParser.LINEAR, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSubPartitionFunctionHash" ):
                listener.enterSubPartitionFunctionHash(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSubPartitionFunctionHash" ):
                listener.exitSubPartitionFunctionHash(self)


    class SubPartitionFunctionKeyContext(SubpartitionFunctionDefinitionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SubpartitionFunctionDefinitionContext
            super().__init__(parser)
            self.algType = None # Token
            self.copyFrom(ctx)

        def KEY(self):
            return self.getToken(MySqlParser.KEY, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def uidList(self):
            return self.getTypedRuleContext(MySqlParser.UidListContext,0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def LINEAR(self):
            return self.getToken(MySqlParser.LINEAR, 0)
        def ALGORITHM(self):
            return self.getToken(MySqlParser.ALGORITHM, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)
        def ONE_DECIMAL(self):
            return self.getToken(MySqlParser.ONE_DECIMAL, 0)
        def TWO_DECIMAL(self):
            return self.getToken(MySqlParser.TWO_DECIMAL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSubPartitionFunctionKey" ):
                listener.enterSubPartitionFunctionKey(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSubPartitionFunctionKey" ):
                listener.exitSubPartitionFunctionKey(self)



    def subpartitionFunctionDefinition(self):

        localctx = MySqlParser.SubpartitionFunctionDefinitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 116, self.RULE_subpartitionFunctionDefinition)
        self._la = 0 # Token type
        try:
            self.state = 2111
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,243,self._ctx)
            if la_ == 1:
                localctx = MySqlParser.SubPartitionFunctionHashContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 2091
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==100:
                    self.state = 2090
                    self.match(MySqlParser.LINEAR)


                self.state = 2093
                self.match(MySqlParser.HASH)
                self.state = 2094
                self.match(MySqlParser.LR_BRACKET)
                self.state = 2095
                self.expression(0)
                self.state = 2096
                self.match(MySqlParser.RR_BRACKET)
                pass

            elif la_ == 2:
                localctx = MySqlParser.SubPartitionFunctionKeyContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 2099
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==100:
                    self.state = 2098
                    self.match(MySqlParser.LINEAR)


                self.state = 2101
                self.match(MySqlParser.KEY)
                self.state = 2105
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==336:
                    self.state = 2102
                    self.match(MySqlParser.ALGORITHM)
                    self.state = 2103
                    self.match(MySqlParser.EQUAL_SYMBOL)
                    self.state = 2104
                    localctx.algType = self._input.LT(1)
                    _la = self._input.LA(1)
                    if not(_la==1139 or _la==1140):
                        localctx.algType = self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 2107
                self.match(MySqlParser.LR_BRACKET)
                self.state = 2108
                self.uidList()
                self.state = 2109
                self.match(MySqlParser.RR_BRACKET)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class PartitionDefinitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_partitionDefinition

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class PartitionComparisonContext(PartitionDefinitionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PartitionDefinitionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def PARTITION(self):
            return self.getToken(MySqlParser.PARTITION, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def VALUES(self):
            return self.getToken(MySqlParser.VALUES, 0)
        def LESS(self):
            return self.getToken(MySqlParser.LESS, 0)
        def THAN(self):
            return self.getToken(MySqlParser.THAN, 0)
        def LR_BRACKET(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.LR_BRACKET)
            else:
                return self.getToken(MySqlParser.LR_BRACKET, i)
        def partitionDefinerAtom(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.PartitionDefinerAtomContext)
            else:
                return self.getTypedRuleContext(MySqlParser.PartitionDefinerAtomContext,i)

        def RR_BRACKET(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.RR_BRACKET)
            else:
                return self.getToken(MySqlParser.RR_BRACKET, i)
        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)
        def partitionOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.PartitionOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.PartitionOptionContext,i)

        def subpartitionDefinition(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.SubpartitionDefinitionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.SubpartitionDefinitionContext,i)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartitionComparison" ):
                listener.enterPartitionComparison(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartitionComparison" ):
                listener.exitPartitionComparison(self)


    class PartitionListAtomContext(PartitionDefinitionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PartitionDefinitionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def PARTITION(self):
            return self.getToken(MySqlParser.PARTITION, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def VALUES(self):
            return self.getToken(MySqlParser.VALUES, 0)
        def IN(self):
            return self.getToken(MySqlParser.IN, 0)
        def LR_BRACKET(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.LR_BRACKET)
            else:
                return self.getToken(MySqlParser.LR_BRACKET, i)
        def partitionDefinerAtom(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.PartitionDefinerAtomContext)
            else:
                return self.getTypedRuleContext(MySqlParser.PartitionDefinerAtomContext,i)

        def RR_BRACKET(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.RR_BRACKET)
            else:
                return self.getToken(MySqlParser.RR_BRACKET, i)
        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)
        def partitionOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.PartitionOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.PartitionOptionContext,i)

        def subpartitionDefinition(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.SubpartitionDefinitionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.SubpartitionDefinitionContext,i)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartitionListAtom" ):
                listener.enterPartitionListAtom(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartitionListAtom" ):
                listener.exitPartitionListAtom(self)


    class PartitionListVectorContext(PartitionDefinitionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PartitionDefinitionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def PARTITION(self):
            return self.getToken(MySqlParser.PARTITION, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def VALUES(self):
            return self.getToken(MySqlParser.VALUES, 0)
        def IN(self):
            return self.getToken(MySqlParser.IN, 0)
        def LR_BRACKET(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.LR_BRACKET)
            else:
                return self.getToken(MySqlParser.LR_BRACKET, i)
        def partitionDefinerVector(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.PartitionDefinerVectorContext)
            else:
                return self.getTypedRuleContext(MySqlParser.PartitionDefinerVectorContext,i)

        def RR_BRACKET(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.RR_BRACKET)
            else:
                return self.getToken(MySqlParser.RR_BRACKET, i)
        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)
        def partitionOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.PartitionOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.PartitionOptionContext,i)

        def subpartitionDefinition(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.SubpartitionDefinitionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.SubpartitionDefinitionContext,i)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartitionListVector" ):
                listener.enterPartitionListVector(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartitionListVector" ):
                listener.exitPartitionListVector(self)


    class PartitionSimpleContext(PartitionDefinitionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PartitionDefinitionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def PARTITION(self):
            return self.getToken(MySqlParser.PARTITION, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def partitionOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.PartitionOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.PartitionOptionContext,i)

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def subpartitionDefinition(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.SubpartitionDefinitionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.SubpartitionDefinitionContext,i)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartitionSimple" ):
                listener.enterPartitionSimple(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartitionSimple" ):
                listener.exitPartitionSimple(self)



    def partitionDefinition(self):

        localctx = MySqlParser.PartitionDefinitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 118, self.RULE_partitionDefinition)
        self._la = 0 # Token type
        try:
            self.state = 2259
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,262,self._ctx)
            if la_ == 1:
                localctx = MySqlParser.PartitionComparisonContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 2113
                self.match(MySqlParser.PARTITION)
                self.state = 2114
                self.uid()
                self.state = 2115
                self.match(MySqlParser.VALUES)
                self.state = 2116
                self.match(MySqlParser.LESS)
                self.state = 2117
                self.match(MySqlParser.THAN)
                self.state = 2118
                self.match(MySqlParser.LR_BRACKET)
                self.state = 2119
                self.partitionDefinerAtom()
                self.state = 2124
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 2120
                    self.match(MySqlParser.COMMA)
                    self.state = 2121
                    self.partitionDefinerAtom()
                    self.state = 2126
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 2127
                self.match(MySqlParser.RR_BRACKET)
                self.state = 2131
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==42 or _la==81 or ((((_la - 368)) & ~0x3f) == 0 and ((1 << (_la - 368)) & 2199024304129) != 0) or ((((_la - 500)) & ~0x3f) == 0 and ((1 << (_la - 500)) & 268436481) != 0) or _la==636 or _la==647:
                    self.state = 2128
                    self.partitionOption()
                    self.state = 2133
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 2145
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1133:
                    self.state = 2134
                    self.match(MySqlParser.LR_BRACKET)
                    self.state = 2135
                    self.subpartitionDefinition()
                    self.state = 2140
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==1135:
                        self.state = 2136
                        self.match(MySqlParser.COMMA)
                        self.state = 2137
                        self.subpartitionDefinition()
                        self.state = 2142
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)

                    self.state = 2143
                    self.match(MySqlParser.RR_BRACKET)


                pass

            elif la_ == 2:
                localctx = MySqlParser.PartitionComparisonContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 2147
                self.match(MySqlParser.PARTITION)
                self.state = 2148
                self.uid()
                self.state = 2149
                self.match(MySqlParser.VALUES)
                self.state = 2150
                self.match(MySqlParser.LESS)
                self.state = 2151
                self.match(MySqlParser.THAN)
                self.state = 2152
                self.partitionDefinerAtom()
                self.state = 2156
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==42 or _la==81 or ((((_la - 368)) & ~0x3f) == 0 and ((1 << (_la - 368)) & 2199024304129) != 0) or ((((_la - 500)) & ~0x3f) == 0 and ((1 << (_la - 500)) & 268436481) != 0) or _la==636 or _la==647:
                    self.state = 2153
                    self.partitionOption()
                    self.state = 2158
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 2170
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1133:
                    self.state = 2159
                    self.match(MySqlParser.LR_BRACKET)
                    self.state = 2160
                    self.subpartitionDefinition()
                    self.state = 2165
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==1135:
                        self.state = 2161
                        self.match(MySqlParser.COMMA)
                        self.state = 2162
                        self.subpartitionDefinition()
                        self.state = 2167
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)

                    self.state = 2168
                    self.match(MySqlParser.RR_BRACKET)


                pass

            elif la_ == 3:
                localctx = MySqlParser.PartitionListAtomContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 2172
                self.match(MySqlParser.PARTITION)
                self.state = 2173
                self.uid()
                self.state = 2174
                self.match(MySqlParser.VALUES)
                self.state = 2175
                self.match(MySqlParser.IN)
                self.state = 2176
                self.match(MySqlParser.LR_BRACKET)
                self.state = 2177
                self.partitionDefinerAtom()
                self.state = 2182
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 2178
                    self.match(MySqlParser.COMMA)
                    self.state = 2179
                    self.partitionDefinerAtom()
                    self.state = 2184
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 2185
                self.match(MySqlParser.RR_BRACKET)
                self.state = 2189
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==42 or _la==81 or ((((_la - 368)) & ~0x3f) == 0 and ((1 << (_la - 368)) & 2199024304129) != 0) or ((((_la - 500)) & ~0x3f) == 0 and ((1 << (_la - 500)) & 268436481) != 0) or _la==636 or _la==647:
                    self.state = 2186
                    self.partitionOption()
                    self.state = 2191
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 2203
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1133:
                    self.state = 2192
                    self.match(MySqlParser.LR_BRACKET)
                    self.state = 2193
                    self.subpartitionDefinition()
                    self.state = 2198
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==1135:
                        self.state = 2194
                        self.match(MySqlParser.COMMA)
                        self.state = 2195
                        self.subpartitionDefinition()
                        self.state = 2200
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)

                    self.state = 2201
                    self.match(MySqlParser.RR_BRACKET)


                pass

            elif la_ == 4:
                localctx = MySqlParser.PartitionListVectorContext(self, localctx)
                self.enterOuterAlt(localctx, 4)
                self.state = 2205
                self.match(MySqlParser.PARTITION)
                self.state = 2206
                self.uid()
                self.state = 2207
                self.match(MySqlParser.VALUES)
                self.state = 2208
                self.match(MySqlParser.IN)
                self.state = 2209
                self.match(MySqlParser.LR_BRACKET)
                self.state = 2210
                self.partitionDefinerVector()
                self.state = 2215
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 2211
                    self.match(MySqlParser.COMMA)
                    self.state = 2212
                    self.partitionDefinerVector()
                    self.state = 2217
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 2218
                self.match(MySqlParser.RR_BRACKET)
                self.state = 2222
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==42 or _la==81 or ((((_la - 368)) & ~0x3f) == 0 and ((1 << (_la - 368)) & 2199024304129) != 0) or ((((_la - 500)) & ~0x3f) == 0 and ((1 << (_la - 500)) & 268436481) != 0) or _la==636 or _la==647:
                    self.state = 2219
                    self.partitionOption()
                    self.state = 2224
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 2236
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1133:
                    self.state = 2225
                    self.match(MySqlParser.LR_BRACKET)
                    self.state = 2226
                    self.subpartitionDefinition()
                    self.state = 2231
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==1135:
                        self.state = 2227
                        self.match(MySqlParser.COMMA)
                        self.state = 2228
                        self.subpartitionDefinition()
                        self.state = 2233
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)

                    self.state = 2234
                    self.match(MySqlParser.RR_BRACKET)


                pass

            elif la_ == 5:
                localctx = MySqlParser.PartitionSimpleContext(self, localctx)
                self.enterOuterAlt(localctx, 5)
                self.state = 2238
                self.match(MySqlParser.PARTITION)
                self.state = 2239
                self.uid()
                self.state = 2243
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==42 or _la==81 or ((((_la - 368)) & ~0x3f) == 0 and ((1 << (_la - 368)) & 2199024304129) != 0) or ((((_la - 500)) & ~0x3f) == 0 and ((1 << (_la - 500)) & 268436481) != 0) or _la==636 or _la==647:
                    self.state = 2240
                    self.partitionOption()
                    self.state = 2245
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 2257
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1133:
                    self.state = 2246
                    self.match(MySqlParser.LR_BRACKET)
                    self.state = 2247
                    self.subpartitionDefinition()
                    self.state = 2252
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==1135:
                        self.state = 2248
                        self.match(MySqlParser.COMMA)
                        self.state = 2249
                        self.subpartitionDefinition()
                        self.state = 2254
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)

                    self.state = 2255
                    self.match(MySqlParser.RR_BRACKET)


                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class PartitionDefinerAtomContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def constant(self):
            return self.getTypedRuleContext(MySqlParser.ConstantContext,0)


        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def MAXVALUE(self):
            return self.getToken(MySqlParser.MAXVALUE, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_partitionDefinerAtom

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartitionDefinerAtom" ):
                listener.enterPartitionDefinerAtom(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartitionDefinerAtom" ):
                listener.exitPartitionDefinerAtom(self)




    def partitionDefinerAtom(self):

        localctx = MySqlParser.PartitionDefinerAtomContext(self, self._ctx, self.state)
        self.enterRule(localctx, 120, self.RULE_partitionDefinerAtom)
        try:
            self.state = 2264
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,263,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 2261
                self.constant()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 2262
                self.expression(0)
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 2263
                self.match(MySqlParser.MAXVALUE)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class PartitionDefinerVectorContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def partitionDefinerAtom(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.PartitionDefinerAtomContext)
            else:
                return self.getTypedRuleContext(MySqlParser.PartitionDefinerAtomContext,i)


        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_partitionDefinerVector

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartitionDefinerVector" ):
                listener.enterPartitionDefinerVector(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartitionDefinerVector" ):
                listener.exitPartitionDefinerVector(self)




    def partitionDefinerVector(self):

        localctx = MySqlParser.PartitionDefinerVectorContext(self, self._ctx, self.state)
        self.enterRule(localctx, 122, self.RULE_partitionDefinerVector)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2266
            self.match(MySqlParser.LR_BRACKET)
            self.state = 2267
            self.partitionDefinerAtom()
            self.state = 2270 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 2268
                self.match(MySqlParser.COMMA)
                self.state = 2269
                self.partitionDefinerAtom()
                self.state = 2272 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==1135):
                    break

            self.state = 2274
            self.match(MySqlParser.RR_BRACKET)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class SubpartitionDefinitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SUBPARTITION(self):
            return self.getToken(MySqlParser.SUBPARTITION, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def partitionOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.PartitionOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.PartitionOptionContext,i)


        def getRuleIndex(self):
            return MySqlParser.RULE_subpartitionDefinition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSubpartitionDefinition" ):
                listener.enterSubpartitionDefinition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSubpartitionDefinition" ):
                listener.exitSubpartitionDefinition(self)




    def subpartitionDefinition(self):

        localctx = MySqlParser.SubpartitionDefinitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 124, self.RULE_subpartitionDefinition)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2276
            self.match(MySqlParser.SUBPARTITION)
            self.state = 2277
            self.uid()
            self.state = 2281
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==42 or _la==81 or ((((_la - 368)) & ~0x3f) == 0 and ((1 << (_la - 368)) & 2199024304129) != 0) or ((((_la - 500)) & ~0x3f) == 0 and ((1 << (_la - 500)) & 268436481) != 0) or _la==636 or _la==647:
                self.state = 2278
                self.partitionOption()
                self.state = 2283
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class PartitionOptionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_partitionOption

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class PartitionOptionCommentContext(PartitionOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PartitionOptionContext
            super().__init__(parser)
            self.comment = None # Token
            self.copyFrom(ctx)

        def COMMENT(self):
            return self.getToken(MySqlParser.COMMENT, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartitionOptionComment" ):
                listener.enterPartitionOptionComment(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartitionOptionComment" ):
                listener.exitPartitionOptionComment(self)


    class PartitionOptionNodeGroupContext(PartitionOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PartitionOptionContext
            super().__init__(parser)
            self.nodegroup = None # UidContext
            self.copyFrom(ctx)

        def NODEGROUP(self):
            return self.getToken(MySqlParser.NODEGROUP, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartitionOptionNodeGroup" ):
                listener.enterPartitionOptionNodeGroup(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartitionOptionNodeGroup" ):
                listener.exitPartitionOptionNodeGroup(self)


    class PartitionOptionIndexDirectoryContext(PartitionOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PartitionOptionContext
            super().__init__(parser)
            self.indexDirectory = None # Token
            self.copyFrom(ctx)

        def INDEX(self):
            return self.getToken(MySqlParser.INDEX, 0)
        def DIRECTORY(self):
            return self.getToken(MySqlParser.DIRECTORY, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartitionOptionIndexDirectory" ):
                listener.enterPartitionOptionIndexDirectory(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartitionOptionIndexDirectory" ):
                listener.exitPartitionOptionIndexDirectory(self)


    class PartitionOptionMaxRowsContext(PartitionOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PartitionOptionContext
            super().__init__(parser)
            self.maxRows = None # DecimalLiteralContext
            self.copyFrom(ctx)

        def MAX_ROWS(self):
            return self.getToken(MySqlParser.MAX_ROWS, 0)
        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)

        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartitionOptionMaxRows" ):
                listener.enterPartitionOptionMaxRows(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartitionOptionMaxRows" ):
                listener.exitPartitionOptionMaxRows(self)


    class PartitionOptionTablespaceContext(PartitionOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PartitionOptionContext
            super().__init__(parser)
            self.tablespace = None # UidContext
            self.copyFrom(ctx)

        def TABLESPACE(self):
            return self.getToken(MySqlParser.TABLESPACE, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartitionOptionTablespace" ):
                listener.enterPartitionOptionTablespace(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartitionOptionTablespace" ):
                listener.exitPartitionOptionTablespace(self)


    class PartitionOptionEngineContext(PartitionOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PartitionOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def ENGINE(self):
            return self.getToken(MySqlParser.ENGINE, 0)
        def engineName(self):
            return self.getTypedRuleContext(MySqlParser.EngineNameContext,0)

        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)
        def STORAGE(self):
            return self.getToken(MySqlParser.STORAGE, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartitionOptionEngine" ):
                listener.enterPartitionOptionEngine(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartitionOptionEngine" ):
                listener.exitPartitionOptionEngine(self)


    class PartitionOptionMinRowsContext(PartitionOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PartitionOptionContext
            super().__init__(parser)
            self.minRows = None # DecimalLiteralContext
            self.copyFrom(ctx)

        def MIN_ROWS(self):
            return self.getToken(MySqlParser.MIN_ROWS, 0)
        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)

        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartitionOptionMinRows" ):
                listener.enterPartitionOptionMinRows(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartitionOptionMinRows" ):
                listener.exitPartitionOptionMinRows(self)


    class PartitionOptionDataDirectoryContext(PartitionOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PartitionOptionContext
            super().__init__(parser)
            self.dataDirectory = None # Token
            self.copyFrom(ctx)

        def DATA(self):
            return self.getToken(MySqlParser.DATA, 0)
        def DIRECTORY(self):
            return self.getToken(MySqlParser.DIRECTORY, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartitionOptionDataDirectory" ):
                listener.enterPartitionOptionDataDirectory(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartitionOptionDataDirectory" ):
                listener.exitPartitionOptionDataDirectory(self)



    def partitionOption(self):

        localctx = MySqlParser.PartitionOptionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 126, self.RULE_partitionOption)
        self._la = 0 # Token type
        try:
            self.state = 2332
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [42, 409, 636]:
                localctx = MySqlParser.PartitionOptionEngineContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 2285
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==42:
                    self.state = 2284
                    self.match(MySqlParser.DEFAULT)


                self.state = 2288
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==636:
                    self.state = 2287
                    self.match(MySqlParser.STORAGE)


                self.state = 2290
                self.match(MySqlParser.ENGINE)
                self.state = 2292
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 2291
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 2294
                self.engineName()
                pass
            elif token in [368]:
                localctx = MySqlParser.PartitionOptionCommentContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 2295
                self.match(MySqlParser.COMMENT)
                self.state = 2297
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 2296
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 2299
                localctx.comment = self.match(MySqlParser.STRING_LITERAL)
                pass
            elif token in [388]:
                localctx = MySqlParser.PartitionOptionDataDirectoryContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 2300
                self.match(MySqlParser.DATA)
                self.state = 2301
                self.match(MySqlParser.DIRECTORY)
                self.state = 2303
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 2302
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 2305
                localctx.dataDirectory = self.match(MySqlParser.STRING_LITERAL)
                pass
            elif token in [81]:
                localctx = MySqlParser.PartitionOptionIndexDirectoryContext(self, localctx)
                self.enterOuterAlt(localctx, 4)
                self.state = 2306
                self.match(MySqlParser.INDEX)
                self.state = 2307
                self.match(MySqlParser.DIRECTORY)
                self.state = 2309
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 2308
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 2311
                localctx.indexDirectory = self.match(MySqlParser.STRING_LITERAL)
                pass
            elif token in [500]:
                localctx = MySqlParser.PartitionOptionMaxRowsContext(self, localctx)
                self.enterOuterAlt(localctx, 5)
                self.state = 2312
                self.match(MySqlParser.MAX_ROWS)
                self.state = 2314
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 2313
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 2316
                localctx.maxRows = self.decimalLiteral()
                pass
            elif token in [510]:
                localctx = MySqlParser.PartitionOptionMinRowsContext(self, localctx)
                self.enterOuterAlt(localctx, 6)
                self.state = 2317
                self.match(MySqlParser.MIN_ROWS)
                self.state = 2319
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 2318
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 2321
                localctx.minRows = self.decimalLiteral()
                pass
            elif token in [647]:
                localctx = MySqlParser.PartitionOptionTablespaceContext(self, localctx)
                self.enterOuterAlt(localctx, 7)
                self.state = 2322
                self.match(MySqlParser.TABLESPACE)
                self.state = 2324
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 2323
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 2326
                localctx.tablespace = self.uid()
                pass
            elif token in [528]:
                localctx = MySqlParser.PartitionOptionNodeGroupContext(self, localctx)
                self.enterOuterAlt(localctx, 8)
                self.state = 2327
                self.match(MySqlParser.NODEGROUP)
                self.state = 2329
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 2328
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 2331
                localctx.nodegroup = self.uid()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class AlterDatabaseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_alterDatabase

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class AlterUpgradeNameContext(AlterDatabaseContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterDatabaseContext
            super().__init__(parser)
            self.dbFormat = None # Token
            self.copyFrom(ctx)

        def ALTER(self):
            return self.getToken(MySqlParser.ALTER, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def UPGRADE(self):
            return self.getToken(MySqlParser.UPGRADE, 0)
        def DATA(self):
            return self.getToken(MySqlParser.DATA, 0)
        def DIRECTORY(self):
            return self.getToken(MySqlParser.DIRECTORY, 0)
        def NAME(self):
            return self.getToken(MySqlParser.NAME, 0)
        def DATABASE(self):
            return self.getToken(MySqlParser.DATABASE, 0)
        def SCHEMA(self):
            return self.getToken(MySqlParser.SCHEMA, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterUpgradeName" ):
                listener.enterAlterUpgradeName(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterUpgradeName" ):
                listener.exitAlterUpgradeName(self)


    class AlterSimpleDatabaseContext(AlterDatabaseContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterDatabaseContext
            super().__init__(parser)
            self.dbFormat = None # Token
            self.copyFrom(ctx)

        def ALTER(self):
            return self.getToken(MySqlParser.ALTER, 0)
        def DATABASE(self):
            return self.getToken(MySqlParser.DATABASE, 0)
        def SCHEMA(self):
            return self.getToken(MySqlParser.SCHEMA, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def createDatabaseOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.CreateDatabaseOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.CreateDatabaseOptionContext,i)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterSimpleDatabase" ):
                listener.enterAlterSimpleDatabase(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterSimpleDatabase" ):
                listener.exitAlterSimpleDatabase(self)



    def alterDatabase(self):

        localctx = MySqlParser.AlterDatabaseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 128, self.RULE_alterDatabase)
        self._la = 0 # Token type
        try:
            self.state = 2352
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,279,self._ctx)
            if la_ == 1:
                localctx = MySqlParser.AlterSimpleDatabaseContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 2334
                self.match(MySqlParser.ALTER)
                self.state = 2335
                localctx.dbFormat = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==39 or _la==150):
                    localctx.dbFormat = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 2337
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,277,self._ctx)
                if la_ == 1:
                    self.state = 2336
                    self.uid()


                self.state = 2340 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 2339
                    self.createDatabaseOption()
                    self.state = 2342 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & 4398214283264) != 0) or _la==134 or _la==222 or _la==405 or _la==841):
                        break

                pass

            elif la_ == 2:
                localctx = MySqlParser.AlterUpgradeNameContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 2344
                self.match(MySqlParser.ALTER)
                self.state = 2345
                localctx.dbFormat = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==39 or _la==150):
                    localctx.dbFormat = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 2346
                self.uid()
                self.state = 2347
                self.match(MySqlParser.UPGRADE)
                self.state = 2348
                self.match(MySqlParser.DATA)
                self.state = 2349
                self.match(MySqlParser.DIRECTORY)
                self.state = 2350
                self.match(MySqlParser.NAME)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class AlterEventContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(MySqlParser.ALTER, 0)

        def EVENT(self):
            return self.getToken(MySqlParser.EVENT, 0)

        def fullId(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.FullIdContext)
            else:
                return self.getTypedRuleContext(MySqlParser.FullIdContext,i)


        def ownerStatement(self):
            return self.getTypedRuleContext(MySqlParser.OwnerStatementContext,0)


        def ON(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.ON)
            else:
                return self.getToken(MySqlParser.ON, i)

        def SCHEDULE(self):
            return self.getToken(MySqlParser.SCHEDULE, 0)

        def scheduleExpression(self):
            return self.getTypedRuleContext(MySqlParser.ScheduleExpressionContext,0)


        def COMPLETION(self):
            return self.getToken(MySqlParser.COMPLETION, 0)

        def PRESERVE(self):
            return self.getToken(MySqlParser.PRESERVE, 0)

        def RENAME(self):
            return self.getToken(MySqlParser.RENAME, 0)

        def TO(self):
            return self.getToken(MySqlParser.TO, 0)

        def enableType(self):
            return self.getTypedRuleContext(MySqlParser.EnableTypeContext,0)


        def COMMENT(self):
            return self.getToken(MySqlParser.COMMENT, 0)

        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def DO(self):
            return self.getToken(MySqlParser.DO, 0)

        def routineBody(self):
            return self.getTypedRuleContext(MySqlParser.RoutineBodyContext,0)


        def NOT(self):
            return self.getToken(MySqlParser.NOT, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_alterEvent

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterEvent" ):
                listener.enterAlterEvent(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterEvent" ):
                listener.exitAlterEvent(self)




    def alterEvent(self):

        localctx = MySqlParser.AlterEventContext(self, self._ctx, self.state)
        self.enterRule(localctx, 130, self.RULE_alterEvent)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2354
            self.match(MySqlParser.ALTER)
            self.state = 2356
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==392:
                self.state = 2355
                self.ownerStatement()


            self.state = 2358
            self.match(MySqlParser.EVENT)
            self.state = 2359
            self.fullId()
            self.state = 2363
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,281,self._ctx)
            if la_ == 1:
                self.state = 2360
                self.match(MySqlParser.ON)
                self.state = 2361
                self.match(MySqlParser.SCHEDULE)
                self.state = 2362
                self.scheduleExpression()


            self.state = 2371
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==118:
                self.state = 2365
                self.match(MySqlParser.ON)
                self.state = 2366
                self.match(MySqlParser.COMPLETION)
                self.state = 2368
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==114:
                    self.state = 2367
                    self.match(MySqlParser.NOT)


                self.state = 2370
                self.match(MySqlParser.PRESERVE)


            self.state = 2376
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,284,self._ctx)
            if la_ == 1:
                self.state = 2373
                self.match(MySqlParser.RENAME)
                self.state = 2374
                self.match(MySqlParser.TO)
                self.state = 2375
                self.fullId()


            self.state = 2379
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==396 or _la==403:
                self.state = 2378
                self.enableType()


            self.state = 2383
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==368:
                self.state = 2381
                self.match(MySqlParser.COMMENT)
                self.state = 2382
                self.match(MySqlParser.STRING_LITERAL)


            self.state = 2387
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,287,self._ctx)
            if la_ == 1:
                self.state = 2385
                self.match(MySqlParser.DO)
                self.state = 2386
                self.routineBody()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class AlterFunctionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(MySqlParser.ALTER, 0)

        def FUNCTION(self):
            return self.getToken(MySqlParser.FUNCTION, 0)

        def fullId(self):
            return self.getTypedRuleContext(MySqlParser.FullIdContext,0)


        def routineOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.RoutineOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.RoutineOptionContext,i)


        def getRuleIndex(self):
            return MySqlParser.RULE_alterFunction

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterFunction" ):
                listener.enterAlterFunction(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterFunction" ):
                listener.exitAlterFunction(self)




    def alterFunction(self):

        localctx = MySqlParser.AlterFunctionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 132, self.RULE_alterFunction)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2389
            self.match(MySqlParser.ALTER)
            self.state = 2390
            self.match(MySqlParser.FUNCTION)
            self.state = 2391
            self.fullId()
            self.state = 2395
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==47 or ((((_la - 112)) & ~0x3f) == 0 and ((1 << (_la - 112)) & 281474985099269) != 0) or _la==368 or _la==381 or _la==468 or _la==521:
                self.state = 2392
                self.routineOption()
                self.state = 2397
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class AlterInstanceContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(MySqlParser.ALTER, 0)

        def INSTANCE(self):
            return self.getToken(MySqlParser.INSTANCE, 0)

        def ROTATE(self):
            return self.getToken(MySqlParser.ROTATE, 0)

        def INNODB(self):
            return self.getToken(MySqlParser.INNODB, 0)

        def MASTER(self):
            return self.getToken(MySqlParser.MASTER, 0)

        def KEY(self):
            return self.getToken(MySqlParser.KEY, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_alterInstance

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterInstance" ):
                listener.enterAlterInstance(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterInstance" ):
                listener.exitAlterInstance(self)




    def alterInstance(self):

        localctx = MySqlParser.AlterInstanceContext(self, self._ctx, self.state)
        self.enterRule(localctx, 134, self.RULE_alterInstance)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2398
            self.match(MySqlParser.ALTER)
            self.state = 2399
            self.match(MySqlParser.INSTANCE)
            self.state = 2400
            self.match(MySqlParser.ROTATE)
            self.state = 2401
            self.match(MySqlParser.INNODB)
            self.state = 2402
            self.match(MySqlParser.MASTER)
            self.state = 2403
            self.match(MySqlParser.KEY)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class AlterLogfileGroupContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(MySqlParser.ALTER, 0)

        def LOGFILE(self):
            return self.getToken(MySqlParser.LOGFILE, 0)

        def GROUP(self):
            return self.getToken(MySqlParser.GROUP, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def ADD(self):
            return self.getToken(MySqlParser.ADD, 0)

        def UNDOFILE(self):
            return self.getToken(MySqlParser.UNDOFILE, 0)

        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def ENGINE(self):
            return self.getToken(MySqlParser.ENGINE, 0)

        def engineName(self):
            return self.getTypedRuleContext(MySqlParser.EngineNameContext,0)


        def INITIAL_SIZE(self):
            return self.getToken(MySqlParser.INITIAL_SIZE, 0)

        def fileSizeLiteral(self):
            return self.getTypedRuleContext(MySqlParser.FileSizeLiteralContext,0)


        def WAIT(self):
            return self.getToken(MySqlParser.WAIT, 0)

        def EQUAL_SYMBOL(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.EQUAL_SYMBOL)
            else:
                return self.getToken(MySqlParser.EQUAL_SYMBOL, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_alterLogfileGroup

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterLogfileGroup" ):
                listener.enterAlterLogfileGroup(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterLogfileGroup" ):
                listener.exitAlterLogfileGroup(self)




    def alterLogfileGroup(self):

        localctx = MySqlParser.AlterLogfileGroupContext(self, self._ctx, self.state)
        self.enterRule(localctx, 136, self.RULE_alterLogfileGroup)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2405
            self.match(MySqlParser.ALTER)
            self.state = 2406
            self.match(MySqlParser.LOGFILE)
            self.state = 2407
            self.match(MySqlParser.GROUP)
            self.state = 2408
            self.uid()
            self.state = 2409
            self.match(MySqlParser.ADD)
            self.state = 2410
            self.match(MySqlParser.UNDOFILE)
            self.state = 2411
            self.match(MySqlParser.STRING_LITERAL)
            self.state = 2417
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==453:
                self.state = 2412
                self.match(MySqlParser.INITIAL_SIZE)
                self.state = 2414
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 2413
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 2416
                self.fileSizeLiteral()


            self.state = 2420
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==674:
                self.state = 2419
                self.match(MySqlParser.WAIT)


            self.state = 2422
            self.match(MySqlParser.ENGINE)
            self.state = 2424
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1124:
                self.state = 2423
                self.match(MySqlParser.EQUAL_SYMBOL)


            self.state = 2426
            self.engineName()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class AlterProcedureContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(MySqlParser.ALTER, 0)

        def PROCEDURE(self):
            return self.getToken(MySqlParser.PROCEDURE, 0)

        def fullId(self):
            return self.getTypedRuleContext(MySqlParser.FullIdContext,0)


        def routineOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.RoutineOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.RoutineOptionContext,i)


        def getRuleIndex(self):
            return MySqlParser.RULE_alterProcedure

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterProcedure" ):
                listener.enterAlterProcedure(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterProcedure" ):
                listener.exitAlterProcedure(self)




    def alterProcedure(self):

        localctx = MySqlParser.AlterProcedureContext(self, self._ctx, self.state)
        self.enterRule(localctx, 138, self.RULE_alterProcedure)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2428
            self.match(MySqlParser.ALTER)
            self.state = 2429
            self.match(MySqlParser.PROCEDURE)
            self.state = 2430
            self.fullId()
            self.state = 2434
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==47 or ((((_la - 112)) & ~0x3f) == 0 and ((1 << (_la - 112)) & 281474985099269) != 0) or _la==368 or _la==381 or _la==468 or _la==521:
                self.state = 2431
                self.routineOption()
                self.state = 2436
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class AlterServerContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(MySqlParser.ALTER, 0)

        def SERVER(self):
            return self.getToken(MySqlParser.SERVER, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def OPTIONS(self):
            return self.getToken(MySqlParser.OPTIONS, 0)

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def serverOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ServerOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ServerOptionContext,i)


        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_alterServer

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterServer" ):
                listener.enterAlterServer(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterServer" ):
                listener.exitAlterServer(self)




    def alterServer(self):

        localctx = MySqlParser.AlterServerContext(self, self._ctx, self.state)
        self.enterRule(localctx, 140, self.RULE_alterServer)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2437
            self.match(MySqlParser.ALTER)
            self.state = 2438
            self.match(MySqlParser.SERVER)
            self.state = 2439
            self.uid()
            self.state = 2440
            self.match(MySqlParser.OPTIONS)
            self.state = 2441
            self.match(MySqlParser.LR_BRACKET)
            self.state = 2442
            self.serverOption()
            self.state = 2447
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 2443
                self.match(MySqlParser.COMMA)
                self.state = 2444
                self.serverOption()
                self.state = 2449
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 2450
            self.match(MySqlParser.RR_BRACKET)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class AlterTableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.intimeAction = None # Token

        def ALTER(self):
            return self.getToken(MySqlParser.ALTER, 0)

        def TABLE(self):
            return self.getToken(MySqlParser.TABLE, 0)

        def tableName(self):
            return self.getTypedRuleContext(MySqlParser.TableNameContext,0)


        def IGNORE(self):
            return self.getToken(MySqlParser.IGNORE, 0)

        def waitNowaitClause(self):
            return self.getTypedRuleContext(MySqlParser.WaitNowaitClauseContext,0)


        def alterSpecification(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.AlterSpecificationContext)
            else:
                return self.getTypedRuleContext(MySqlParser.AlterSpecificationContext,i)


        def partitionDefinitions(self):
            return self.getTypedRuleContext(MySqlParser.PartitionDefinitionsContext,0)


        def ONLINE(self):
            return self.getToken(MySqlParser.ONLINE, 0)

        def OFFLINE(self):
            return self.getToken(MySqlParser.OFFLINE, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_alterTable

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterTable" ):
                listener.enterAlterTable(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterTable" ):
                listener.exitAlterTable(self)




    def alterTable(self):

        localctx = MySqlParser.AlterTableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 142, self.RULE_alterTable)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2452
            self.match(MySqlParser.ALTER)
            self.state = 2454
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==531 or _la==537:
                self.state = 2453
                localctx.intimeAction = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==531 or _la==537):
                    localctx.intimeAction = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 2457
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==78:
                self.state = 2456
                self.match(MySqlParser.IGNORE)


            self.state = 2459
            self.match(MySqlParser.TABLE)
            self.state = 2460
            self.tableName()
            self.state = 2462
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==527 or _la==674:
                self.state = 2461
                self.waitNowaitClause()


            self.state = 2472
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,299,self._ctx)
            if la_ == 1:
                self.state = 2464
                self.alterSpecification()
                self.state = 2469
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 2465
                    self.match(MySqlParser.COMMA)
                    self.state = 2466
                    self.alterSpecification()
                    self.state = 2471
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)



            self.state = 2475
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==129:
                self.state = 2474
                self.partitionDefinitions()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class AlterTablespaceContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.objectAction = None # Token

        def ALTER(self):
            return self.getToken(MySqlParser.ALTER, 0)

        def TABLESPACE(self):
            return self.getToken(MySqlParser.TABLESPACE, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def DATAFILE(self):
            return self.getToken(MySqlParser.DATAFILE, 0)

        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def ENGINE(self):
            return self.getToken(MySqlParser.ENGINE, 0)

        def engineName(self):
            return self.getTypedRuleContext(MySqlParser.EngineNameContext,0)


        def ADD(self):
            return self.getToken(MySqlParser.ADD, 0)

        def DROP(self):
            return self.getToken(MySqlParser.DROP, 0)

        def INITIAL_SIZE(self):
            return self.getToken(MySqlParser.INITIAL_SIZE, 0)

        def EQUAL_SYMBOL(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.EQUAL_SYMBOL)
            else:
                return self.getToken(MySqlParser.EQUAL_SYMBOL, i)

        def fileSizeLiteral(self):
            return self.getTypedRuleContext(MySqlParser.FileSizeLiteralContext,0)


        def WAIT(self):
            return self.getToken(MySqlParser.WAIT, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_alterTablespace

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterTablespace" ):
                listener.enterAlterTablespace(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterTablespace" ):
                listener.exitAlterTablespace(self)




    def alterTablespace(self):

        localctx = MySqlParser.AlterTablespaceContext(self, self._ctx, self.state)
        self.enterRule(localctx, 144, self.RULE_alterTablespace)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2477
            self.match(MySqlParser.ALTER)
            self.state = 2478
            self.match(MySqlParser.TABLESPACE)
            self.state = 2479
            self.uid()
            self.state = 2480
            localctx.objectAction = self._input.LT(1)
            _la = self._input.LA(1)
            if not(_la==5 or _la==51):
                localctx.objectAction = self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 2481
            self.match(MySqlParser.DATAFILE)
            self.state = 2482
            self.match(MySqlParser.STRING_LITERAL)
            self.state = 2486
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==453:
                self.state = 2483
                self.match(MySqlParser.INITIAL_SIZE)
                self.state = 2484
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 2485
                self.fileSizeLiteral()


            self.state = 2489
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==674:
                self.state = 2488
                self.match(MySqlParser.WAIT)


            self.state = 2491
            self.match(MySqlParser.ENGINE)
            self.state = 2493
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1124:
                self.state = 2492
                self.match(MySqlParser.EQUAL_SYMBOL)


            self.state = 2495
            self.engineName()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class AlterViewContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.algType = None # Token
            self.secContext = None # Token
            self.checkOpt = None # Token

        def ALTER(self):
            return self.getToken(MySqlParser.ALTER, 0)

        def VIEW(self):
            return self.getToken(MySqlParser.VIEW, 0)

        def fullId(self):
            return self.getTypedRuleContext(MySqlParser.FullIdContext,0)


        def AS(self):
            return self.getToken(MySqlParser.AS, 0)

        def selectStatement(self):
            return self.getTypedRuleContext(MySqlParser.SelectStatementContext,0)


        def ALGORITHM(self):
            return self.getToken(MySqlParser.ALGORITHM, 0)

        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def ownerStatement(self):
            return self.getTypedRuleContext(MySqlParser.OwnerStatementContext,0)


        def SQL(self):
            return self.getToken(MySqlParser.SQL, 0)

        def SECURITY(self):
            return self.getToken(MySqlParser.SECURITY, 0)

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def uidList(self):
            return self.getTypedRuleContext(MySqlParser.UidListContext,0)


        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def WITH(self):
            return self.getToken(MySqlParser.WITH, 0)

        def CHECK(self):
            return self.getToken(MySqlParser.CHECK, 0)

        def OPTION(self):
            return self.getToken(MySqlParser.OPTION, 0)

        def UNDEFINED(self):
            return self.getToken(MySqlParser.UNDEFINED, 0)

        def MERGE(self):
            return self.getToken(MySqlParser.MERGE, 0)

        def TEMPTABLE(self):
            return self.getToken(MySqlParser.TEMPTABLE, 0)

        def DEFINER(self):
            return self.getToken(MySqlParser.DEFINER, 0)

        def INVOKER(self):
            return self.getToken(MySqlParser.INVOKER, 0)

        def CASCADED(self):
            return self.getToken(MySqlParser.CASCADED, 0)

        def LOCAL(self):
            return self.getToken(MySqlParser.LOCAL, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_alterView

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterView" ):
                listener.enterAlterView(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterView" ):
                listener.exitAlterView(self)




    def alterView(self):

        localctx = MySqlParser.AlterViewContext(self, self._ctx, self.state)
        self.enterRule(localctx, 146, self.RULE_alterView)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2497
            self.match(MySqlParser.ALTER)
            self.state = 2501
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==336:
                self.state = 2498
                self.match(MySqlParser.ALGORITHM)
                self.state = 2499
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 2500
                localctx.algType = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==506 or _la==650 or _la==658):
                    localctx.algType = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 2504
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==392:
                self.state = 2503
                self.ownerStatement()


            self.state = 2509
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==160:
                self.state = 2506
                self.match(MySqlParser.SQL)
                self.state = 2507
                self.match(MySqlParser.SECURITY)
                self.state = 2508
                localctx.secContext = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==392 or _la==460):
                    localctx.secContext = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 2511
            self.match(MySqlParser.VIEW)
            self.state = 2512
            self.fullId()
            self.state = 2517
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1133:
                self.state = 2513
                self.match(MySqlParser.LR_BRACKET)
                self.state = 2514
                self.uidList()
                self.state = 2515
                self.match(MySqlParser.RR_BRACKET)


            self.state = 2519
            self.match(MySqlParser.AS)
            self.state = 2520
            self.selectStatement()
            self.state = 2527
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,309,self._ctx)
            if la_ == 1:
                self.state = 2521
                self.match(MySqlParser.WITH)
                self.state = 2523
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==352 or _la==474:
                    self.state = 2522
                    localctx.checkOpt = self._input.LT(1)
                    _la = self._input.LA(1)
                    if not(_la==352 or _la==474):
                        localctx.checkOpt = self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 2525
                self.match(MySqlParser.CHECK)
                self.state = 2526
                self.match(MySqlParser.OPTION)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class AlterSpecificationContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_alterSpecification

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class AlterByAlterColumnDefaultContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def ALTER(self):
            return self.getToken(MySqlParser.ALTER, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def SET(self):
            return self.getToken(MySqlParser.SET, 0)
        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)
        def DROP(self):
            return self.getToken(MySqlParser.DROP, 0)
        def COLUMN(self):
            return self.getToken(MySqlParser.COLUMN, 0)
        def VISIBLE(self):
            return self.getToken(MySqlParser.VISIBLE, 0)
        def INVISIBLE(self):
            return self.getToken(MySqlParser.INVISIBLE, 0)
        def stringLiteral(self):
            return self.getTypedRuleContext(MySqlParser.StringLiteralContext,0)

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByAlterColumnDefault" ):
                listener.enterAlterByAlterColumnDefault(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByAlterColumnDefault" ):
                listener.exitAlterByAlterColumnDefault(self)


    class AlterByDisableKeysContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def DISABLE(self):
            return self.getToken(MySqlParser.DISABLE, 0)
        def KEYS(self):
            return self.getToken(MySqlParser.KEYS, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByDisableKeys" ):
                listener.enterAlterByDisableKeys(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByDisableKeys" ):
                listener.exitAlterByDisableKeys(self)


    class AlterByDefaultCharsetContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def CHARACTER(self):
            return self.getToken(MySqlParser.CHARACTER, 0)
        def SET(self):
            return self.getToken(MySqlParser.SET, 0)
        def EQUAL_SYMBOL(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.EQUAL_SYMBOL)
            else:
                return self.getToken(MySqlParser.EQUAL_SYMBOL, i)
        def charsetName(self):
            return self.getTypedRuleContext(MySqlParser.CharsetNameContext,0)

        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)
        def COLLATE(self):
            return self.getToken(MySqlParser.COLLATE, 0)
        def collationName(self):
            return self.getTypedRuleContext(MySqlParser.CollationNameContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByDefaultCharset" ):
                listener.enterAlterByDefaultCharset(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByDefaultCharset" ):
                listener.exitAlterByDefaultCharset(self)


    class AlterByRenameColumnContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.oldColumn = None # UidContext
            self.newColumn = None # UidContext
            self.copyFrom(ctx)

        def RENAME(self):
            return self.getToken(MySqlParser.RENAME, 0)
        def COLUMN(self):
            return self.getToken(MySqlParser.COLUMN, 0)
        def TO(self):
            return self.getToken(MySqlParser.TO, 0)
        def uid(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UidContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UidContext,i)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByRenameColumn" ):
                listener.enterAlterByRenameColumn(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByRenameColumn" ):
                listener.exitAlterByRenameColumn(self)


    class AlterByConvertCharsetContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def CONVERT(self):
            return self.getToken(MySqlParser.CONVERT, 0)
        def TO(self):
            return self.getToken(MySqlParser.TO, 0)
        def charsetName(self):
            return self.getTypedRuleContext(MySqlParser.CharsetNameContext,0)

        def CHARSET(self):
            return self.getToken(MySqlParser.CHARSET, 0)
        def CHARACTER(self):
            return self.getToken(MySqlParser.CHARACTER, 0)
        def SET(self):
            return self.getToken(MySqlParser.SET, 0)
        def COLLATE(self):
            return self.getToken(MySqlParser.COLLATE, 0)
        def collationName(self):
            return self.getTypedRuleContext(MySqlParser.CollationNameContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByConvertCharset" ):
                listener.enterAlterByConvertCharset(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByConvertCharset" ):
                listener.exitAlterByConvertCharset(self)


    class AlterByAddForeignKeyContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.name = None # UidContext
            self.indexName = None # UidContext
            self.copyFrom(ctx)

        def ADD(self):
            return self.getToken(MySqlParser.ADD, 0)
        def FOREIGN(self):
            return self.getToken(MySqlParser.FOREIGN, 0)
        def KEY(self):
            return self.getToken(MySqlParser.KEY, 0)
        def indexColumnNames(self):
            return self.getTypedRuleContext(MySqlParser.IndexColumnNamesContext,0)

        def referenceDefinition(self):
            return self.getTypedRuleContext(MySqlParser.ReferenceDefinitionContext,0)

        def CONSTRAINT(self):
            return self.getToken(MySqlParser.CONSTRAINT, 0)
        def uid(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UidContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UidContext,i)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByAddForeignKey" ):
                listener.enterAlterByAddForeignKey(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByAddForeignKey" ):
                listener.exitAlterByAddForeignKey(self)


    class AlterByRenameIndexContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.indexFormat = None # Token
            self.copyFrom(ctx)

        def RENAME(self):
            return self.getToken(MySqlParser.RENAME, 0)
        def uid(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UidContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UidContext,i)

        def TO(self):
            return self.getToken(MySqlParser.TO, 0)
        def INDEX(self):
            return self.getToken(MySqlParser.INDEX, 0)
        def KEY(self):
            return self.getToken(MySqlParser.KEY, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByRenameIndex" ):
                listener.enterAlterByRenameIndex(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByRenameIndex" ):
                listener.exitAlterByRenameIndex(self)


    class AlterByRenameContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.renameFormat = None # Token
            self.copyFrom(ctx)

        def RENAME(self):
            return self.getToken(MySqlParser.RENAME, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def fullId(self):
            return self.getTypedRuleContext(MySqlParser.FullIdContext,0)

        def TO(self):
            return self.getToken(MySqlParser.TO, 0)
        def AS(self):
            return self.getToken(MySqlParser.AS, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByRename" ):
                listener.enterAlterByRename(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByRename" ):
                listener.exitAlterByRename(self)


    class AlterByImportTablespaceContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def IMPORT(self):
            return self.getToken(MySqlParser.IMPORT, 0)
        def TABLESPACE(self):
            return self.getToken(MySqlParser.TABLESPACE, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByImportTablespace" ):
                listener.enterAlterByImportTablespace(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByImportTablespace" ):
                listener.exitAlterByImportTablespace(self)


    class AlterByAddDefinitionsContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def ADD(self):
            return self.getToken(MySqlParser.ADD, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def createDefinition(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.CreateDefinitionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.CreateDefinitionContext,i)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def COLUMN(self):
            return self.getToken(MySqlParser.COLUMN, 0)
        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByAddDefinitions" ):
                listener.enterAlterByAddDefinitions(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByAddDefinitions" ):
                listener.exitAlterByAddDefinitions(self)


    class AlterByAlterCheckTableConstraintContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.name = None # UidContext
            self.copyFrom(ctx)

        def ALTER(self):
            return self.getToken(MySqlParser.ALTER, 0)
        def CHECK(self):
            return self.getToken(MySqlParser.CHECK, 0)
        def uid(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UidContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UidContext,i)

        def stringLiteral(self):
            return self.getTypedRuleContext(MySqlParser.StringLiteralContext,0)

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def CONSTRAINT(self):
            return self.getToken(MySqlParser.CONSTRAINT, 0)
        def NOT(self):
            return self.getToken(MySqlParser.NOT, 0)
        def ENFORCED(self):
            return self.getToken(MySqlParser.ENFORCED, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByAlterCheckTableConstraint" ):
                listener.enterAlterByAlterCheckTableConstraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByAlterCheckTableConstraint" ):
                listener.exitAlterByAlterCheckTableConstraint(self)


    class AlterByDropConstraintCheckContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def DROP(self):
            return self.getToken(MySqlParser.DROP, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def CONSTRAINT(self):
            return self.getToken(MySqlParser.CONSTRAINT, 0)
        def CHECK(self):
            return self.getToken(MySqlParser.CHECK, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByDropConstraintCheck" ):
                listener.enterAlterByDropConstraintCheck(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByDropConstraintCheck" ):
                listener.exitAlterByDropConstraintCheck(self)


    class AlterByAddColumnsContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def ADD(self):
            return self.getToken(MySqlParser.ADD, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def uid(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UidContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UidContext,i)

        def columnDefinition(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ColumnDefinitionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ColumnDefinitionContext,i)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def COLUMN(self):
            return self.getToken(MySqlParser.COLUMN, 0)
        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByAddColumns" ):
                listener.enterAlterByAddColumns(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByAddColumns" ):
                listener.exitAlterByAddColumns(self)


    class AlterByAlterIndexVisibilityContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def ALTER(self):
            return self.getToken(MySqlParser.ALTER, 0)
        def INDEX(self):
            return self.getToken(MySqlParser.INDEX, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def VISIBLE(self):
            return self.getToken(MySqlParser.VISIBLE, 0)
        def INVISIBLE(self):
            return self.getToken(MySqlParser.INVISIBLE, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByAlterIndexVisibility" ):
                listener.enterAlterByAlterIndexVisibility(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByAlterIndexVisibility" ):
                listener.exitAlterByAlterIndexVisibility(self)


    class AlterByDropForeignKeyContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def DROP(self):
            return self.getToken(MySqlParser.DROP, 0)
        def FOREIGN(self):
            return self.getToken(MySqlParser.FOREIGN, 0)
        def KEY(self):
            return self.getToken(MySqlParser.KEY, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByDropForeignKey" ):
                listener.enterAlterByDropForeignKey(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByDropForeignKey" ):
                listener.exitAlterByDropForeignKey(self)


    class AlterByAddCheckTableConstraintContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.name = None # UidContext
            self.copyFrom(ctx)

        def ADD(self):
            return self.getToken(MySqlParser.ADD, 0)
        def CHECK(self):
            return self.getToken(MySqlParser.CHECK, 0)
        def uid(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UidContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UidContext,i)

        def stringLiteral(self):
            return self.getTypedRuleContext(MySqlParser.StringLiteralContext,0)

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def CONSTRAINT(self):
            return self.getToken(MySqlParser.CONSTRAINT, 0)
        def NOT(self):
            return self.getToken(MySqlParser.NOT, 0)
        def ENFORCED(self):
            return self.getToken(MySqlParser.ENFORCED, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByAddCheckTableConstraint" ):
                listener.enterAlterByAddCheckTableConstraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByAddCheckTableConstraint" ):
                listener.exitAlterByAddCheckTableConstraint(self)


    class AlterPartitionContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def alterPartitionSpecification(self):
            return self.getTypedRuleContext(MySqlParser.AlterPartitionSpecificationContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterPartition" ):
                listener.enterAlterPartition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterPartition" ):
                listener.exitAlterPartition(self)


    class AlterByAddIndexContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.indexFormat = None # Token
            self.copyFrom(ctx)

        def ADD(self):
            return self.getToken(MySqlParser.ADD, 0)
        def indexColumnNames(self):
            return self.getTypedRuleContext(MySqlParser.IndexColumnNamesContext,0)

        def INDEX(self):
            return self.getToken(MySqlParser.INDEX, 0)
        def KEY(self):
            return self.getToken(MySqlParser.KEY, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def indexType(self):
            return self.getTypedRuleContext(MySqlParser.IndexTypeContext,0)

        def indexOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.IndexOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.IndexOptionContext,i)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByAddIndex" ):
                listener.enterAlterByAddIndex(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByAddIndex" ):
                listener.exitAlterByAddIndex(self)


    class AlterByDropColumnContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def DROP(self):
            return self.getToken(MySqlParser.DROP, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def COLUMN(self):
            return self.getToken(MySqlParser.COLUMN, 0)
        def RESTRICT(self):
            return self.getToken(MySqlParser.RESTRICT, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByDropColumn" ):
                listener.enterAlterByDropColumn(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByDropColumn" ):
                listener.exitAlterByDropColumn(self)


    class AlterByChangeDefaultContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def ALTER(self):
            return self.getToken(MySqlParser.ALTER, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def SET(self):
            return self.getToken(MySqlParser.SET, 0)
        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)
        def defaultValue(self):
            return self.getTypedRuleContext(MySqlParser.DefaultValueContext,0)

        def DROP(self):
            return self.getToken(MySqlParser.DROP, 0)
        def COLUMN(self):
            return self.getToken(MySqlParser.COLUMN, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByChangeDefault" ):
                listener.enterAlterByChangeDefault(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByChangeDefault" ):
                listener.exitAlterByChangeDefault(self)


    class AlterByForceContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def FORCE(self):
            return self.getToken(MySqlParser.FORCE, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByForce" ):
                listener.enterAlterByForce(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByForce" ):
                listener.exitAlterByForce(self)


    class AlterByAddSpecialIndexContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.keyType = None # Token
            self.indexFormat = None # Token
            self.copyFrom(ctx)

        def ADD(self):
            return self.getToken(MySqlParser.ADD, 0)
        def indexColumnNames(self):
            return self.getTypedRuleContext(MySqlParser.IndexColumnNamesContext,0)

        def FULLTEXT(self):
            return self.getToken(MySqlParser.FULLTEXT, 0)
        def SPATIAL(self):
            return self.getToken(MySqlParser.SPATIAL, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def indexOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.IndexOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.IndexOptionContext,i)

        def INDEX(self):
            return self.getToken(MySqlParser.INDEX, 0)
        def KEY(self):
            return self.getToken(MySqlParser.KEY, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByAddSpecialIndex" ):
                listener.enterAlterByAddSpecialIndex(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByAddSpecialIndex" ):
                listener.exitAlterByAddSpecialIndex(self)


    class AlterByModifyColumnContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def MODIFY(self):
            return self.getToken(MySqlParser.MODIFY, 0)
        def uid(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UidContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UidContext,i)

        def columnDefinition(self):
            return self.getTypedRuleContext(MySqlParser.ColumnDefinitionContext,0)

        def COLUMN(self):
            return self.getToken(MySqlParser.COLUMN, 0)
        def FIRST(self):
            return self.getToken(MySqlParser.FIRST, 0)
        def AFTER(self):
            return self.getToken(MySqlParser.AFTER, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByModifyColumn" ):
                listener.enterAlterByModifyColumn(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByModifyColumn" ):
                listener.exitAlterByModifyColumn(self)


    class AlterByTableOptionContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def tableOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.TableOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.TableOptionContext,i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByTableOption" ):
                listener.enterAlterByTableOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByTableOption" ):
                listener.exitAlterByTableOption(self)


    class AlterByDropPrimaryKeyContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def DROP(self):
            return self.getToken(MySqlParser.DROP, 0)
        def PRIMARY(self):
            return self.getToken(MySqlParser.PRIMARY, 0)
        def KEY(self):
            return self.getToken(MySqlParser.KEY, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByDropPrimaryKey" ):
                listener.enterAlterByDropPrimaryKey(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByDropPrimaryKey" ):
                listener.exitAlterByDropPrimaryKey(self)


    class AlterByLockContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.lockType = None # Token
            self.copyFrom(ctx)

        def LOCK(self):
            return self.getToken(MySqlParser.LOCK, 0)
        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)
        def NONE(self):
            return self.getToken(MySqlParser.NONE, 0)
        def SHARED(self):
            return self.getToken(MySqlParser.SHARED, 0)
        def EXCLUSIVE(self):
            return self.getToken(MySqlParser.EXCLUSIVE, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByLock" ):
                listener.enterAlterByLock(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByLock" ):
                listener.exitAlterByLock(self)


    class AlterByDiscardTablespaceContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def DISCARD(self):
            return self.getToken(MySqlParser.DISCARD, 0)
        def TABLESPACE(self):
            return self.getToken(MySqlParser.TABLESPACE, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByDiscardTablespace" ):
                listener.enterAlterByDiscardTablespace(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByDiscardTablespace" ):
                listener.exitAlterByDiscardTablespace(self)


    class AlterByValidateContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.validationFormat = None # Token
            self.copyFrom(ctx)

        def VALIDATION(self):
            return self.getToken(MySqlParser.VALIDATION, 0)
        def WITHOUT(self):
            return self.getToken(MySqlParser.WITHOUT, 0)
        def WITH(self):
            return self.getToken(MySqlParser.WITH, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByValidate" ):
                listener.enterAlterByValidate(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByValidate" ):
                listener.exitAlterByValidate(self)


    class AlterByAddPrimaryKeyContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.name = None # UidContext
            self.index = None # UidContext
            self.copyFrom(ctx)

        def ADD(self):
            return self.getToken(MySqlParser.ADD, 0)
        def PRIMARY(self):
            return self.getToken(MySqlParser.PRIMARY, 0)
        def KEY(self):
            return self.getToken(MySqlParser.KEY, 0)
        def indexColumnNames(self):
            return self.getTypedRuleContext(MySqlParser.IndexColumnNamesContext,0)

        def CONSTRAINT(self):
            return self.getToken(MySqlParser.CONSTRAINT, 0)
        def indexType(self):
            return self.getTypedRuleContext(MySqlParser.IndexTypeContext,0)

        def indexOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.IndexOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.IndexOptionContext,i)

        def uid(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UidContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UidContext,i)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByAddPrimaryKey" ):
                listener.enterAlterByAddPrimaryKey(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByAddPrimaryKey" ):
                listener.exitAlterByAddPrimaryKey(self)


    class AlterByEnableKeysContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def ENABLE(self):
            return self.getToken(MySqlParser.ENABLE, 0)
        def KEYS(self):
            return self.getToken(MySqlParser.KEYS, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByEnableKeys" ):
                listener.enterAlterByEnableKeys(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByEnableKeys" ):
                listener.exitAlterByEnableKeys(self)


    class AlterBySetAlgorithmContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.algType = None # Token
            self.copyFrom(ctx)

        def ALGORITHM(self):
            return self.getToken(MySqlParser.ALGORITHM, 0)
        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)
        def INSTANT(self):
            return self.getToken(MySqlParser.INSTANT, 0)
        def INPLACE(self):
            return self.getToken(MySqlParser.INPLACE, 0)
        def COPY(self):
            return self.getToken(MySqlParser.COPY, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterBySetAlgorithm" ):
                listener.enterAlterBySetAlgorithm(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterBySetAlgorithm" ):
                listener.exitAlterBySetAlgorithm(self)


    class AlterByChangeColumnContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.oldColumn = None # UidContext
            self.newColumn = None # UidContext
            self.afterColumn = None # UidContext
            self.copyFrom(ctx)

        def CHANGE(self):
            return self.getToken(MySqlParser.CHANGE, 0)
        def columnDefinition(self):
            return self.getTypedRuleContext(MySqlParser.ColumnDefinitionContext,0)

        def uid(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UidContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UidContext,i)

        def COLUMN(self):
            return self.getToken(MySqlParser.COLUMN, 0)
        def FIRST(self):
            return self.getToken(MySqlParser.FIRST, 0)
        def AFTER(self):
            return self.getToken(MySqlParser.AFTER, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByChangeColumn" ):
                listener.enterAlterByChangeColumn(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByChangeColumn" ):
                listener.exitAlterByChangeColumn(self)


    class AlterByAddUniqueKeyContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.name = None # UidContext
            self.indexFormat = None # Token
            self.indexName = None # UidContext
            self.copyFrom(ctx)

        def ADD(self):
            return self.getToken(MySqlParser.ADD, 0)
        def UNIQUE(self):
            return self.getToken(MySqlParser.UNIQUE, 0)
        def indexColumnNames(self):
            return self.getTypedRuleContext(MySqlParser.IndexColumnNamesContext,0)

        def CONSTRAINT(self):
            return self.getToken(MySqlParser.CONSTRAINT, 0)
        def indexType(self):
            return self.getTypedRuleContext(MySqlParser.IndexTypeContext,0)

        def indexOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.IndexOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.IndexOptionContext,i)

        def uid(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UidContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UidContext,i)

        def INDEX(self):
            return self.getToken(MySqlParser.INDEX, 0)
        def KEY(self):
            return self.getToken(MySqlParser.KEY, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByAddUniqueKey" ):
                listener.enterAlterByAddUniqueKey(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByAddUniqueKey" ):
                listener.exitAlterByAddUniqueKey(self)


    class AlterByDropIndexContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.indexFormat = None # Token
            self.copyFrom(ctx)

        def DROP(self):
            return self.getToken(MySqlParser.DROP, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def INDEX(self):
            return self.getToken(MySqlParser.INDEX, 0)
        def KEY(self):
            return self.getToken(MySqlParser.KEY, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByDropIndex" ):
                listener.enterAlterByDropIndex(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByDropIndex" ):
                listener.exitAlterByDropIndex(self)


    class AlterByAddColumnContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def ADD(self):
            return self.getToken(MySqlParser.ADD, 0)
        def uid(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UidContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UidContext,i)

        def columnDefinition(self):
            return self.getTypedRuleContext(MySqlParser.ColumnDefinitionContext,0)

        def COLUMN(self):
            return self.getToken(MySqlParser.COLUMN, 0)
        def FIRST(self):
            return self.getToken(MySqlParser.FIRST, 0)
        def AFTER(self):
            return self.getToken(MySqlParser.AFTER, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByAddColumn" ):
                listener.enterAlterByAddColumn(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByAddColumn" ):
                listener.exitAlterByAddColumn(self)


    class AlterByOrderContext(AlterSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def ORDER(self):
            return self.getToken(MySqlParser.ORDER, 0)
        def BY(self):
            return self.getToken(MySqlParser.BY, 0)
        def uidList(self):
            return self.getTypedRuleContext(MySqlParser.UidListContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByOrder" ):
                listener.enterAlterByOrder(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByOrder" ):
                listener.exitAlterByOrder(self)



    def alterSpecification(self):

        localctx = MySqlParser.AlterSpecificationContext(self, self._ctx, self.state)
        self.enterRule(localctx, 148, self.RULE_alterSpecification)
        self._la = 0 # Token type
        try:
            self.state = 2880
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,369,self._ctx)
            if la_ == 1:
                localctx = MySqlParser.AlterByTableOptionContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 2529
                self.tableOption()
                self.state = 2536
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,311,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 2531
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if _la==1135:
                            self.state = 2530
                            self.match(MySqlParser.COMMA)


                        self.state = 2533
                        self.tableOption() 
                    self.state = 2538
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,311,self._ctx)

                pass

            elif la_ == 2:
                localctx = MySqlParser.AlterByAddColumnContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 2539
                self.match(MySqlParser.ADD)
                self.state = 2541
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==28:
                    self.state = 2540
                    self.match(MySqlParser.COLUMN)


                self.state = 2543
                self.uid()
                self.state = 2544
                self.columnDefinition()
                self.state = 2548
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [430]:
                    self.state = 2545
                    self.match(MySqlParser.FIRST)
                    pass
                elif token in [334]:
                    self.state = 2546
                    self.match(MySqlParser.AFTER)
                    self.state = 2547
                    self.uid()
                    pass
                elif token in [-1, 7, 9, 20, 24, 26, 33, 44, 45, 46, 51, 62, 71, 72, 85, 93, 102, 103, 119, 129, 132, 138, 139, 141, 143, 147, 152, 153, 155, 156, 172, 182, 184, 186, 188, 192, 344, 345, 351, 356, 369, 390, 399, 432, 442, 444, 456, 560, 580, 589, 597, 604, 629, 635, 656, 661, 681, 708, 739, 1121, 1133, 1135, 1136]:
                    pass
                else:
                    pass
                pass

            elif la_ == 3:
                localctx = MySqlParser.AlterByAddColumnsContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 2550
                self.match(MySqlParser.ADD)
                self.state = 2552
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==28:
                    self.state = 2551
                    self.match(MySqlParser.COLUMN)


                self.state = 2554
                self.match(MySqlParser.LR_BRACKET)
                self.state = 2555
                self.uid()
                self.state = 2556
                self.columnDefinition()
                self.state = 2563
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 2557
                    self.match(MySqlParser.COMMA)
                    self.state = 2558
                    self.uid()
                    self.state = 2559
                    self.columnDefinition()
                    self.state = 2565
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 2566
                self.match(MySqlParser.RR_BRACKET)
                pass

            elif la_ == 4:
                localctx = MySqlParser.AlterByAddIndexContext(self, localctx)
                self.enterOuterAlt(localctx, 4)
                self.state = 2568
                self.match(MySqlParser.ADD)
                self.state = 2569
                localctx.indexFormat = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==81 or _la==91):
                    localctx.indexFormat = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 2571
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513122304) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055071174737) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                    self.state = 2570
                    self.uid()


                self.state = 2574
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==187:
                    self.state = 2573
                    self.indexType()


                self.state = 2576
                self.indexColumnNames()
                self.state = 2580
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,318,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 2577
                        self.indexOption() 
                    self.state = 2582
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,318,self._ctx)

                pass

            elif la_ == 5:
                localctx = MySqlParser.AlterByAddPrimaryKeyContext(self, localctx)
                self.enterOuterAlt(localctx, 5)
                self.state = 2583
                self.match(MySqlParser.ADD)
                self.state = 2588
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==30:
                    self.state = 2584
                    self.match(MySqlParser.CONSTRAINT)
                    self.state = 2586
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,319,self._ctx)
                    if la_ == 1:
                        self.state = 2585
                        localctx.name = self.uid()




                self.state = 2590
                self.match(MySqlParser.PRIMARY)
                self.state = 2591
                self.match(MySqlParser.KEY)
                self.state = 2593
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513122304) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055071174737) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                    self.state = 2592
                    localctx.index = self.uid()


                self.state = 2596
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==187:
                    self.state = 2595
                    self.indexType()


                self.state = 2598
                self.indexColumnNames()
                self.state = 2602
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,323,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 2599
                        self.indexOption() 
                    self.state = 2604
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,323,self._ctx)

                pass

            elif la_ == 6:
                localctx = MySqlParser.AlterByAddUniqueKeyContext(self, localctx)
                self.enterOuterAlt(localctx, 6)
                self.state = 2605
                self.match(MySqlParser.ADD)
                self.state = 2610
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==30:
                    self.state = 2606
                    self.match(MySqlParser.CONSTRAINT)
                    self.state = 2608
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513122304) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055071174737) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                        self.state = 2607
                        localctx.name = self.uid()




                self.state = 2612
                self.match(MySqlParser.UNIQUE)
                self.state = 2614
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==81 or _la==91:
                    self.state = 2613
                    localctx.indexFormat = self._input.LT(1)
                    _la = self._input.LA(1)
                    if not(_la==81 or _la==91):
                        localctx.indexFormat = self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 2617
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513122304) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055071174737) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                    self.state = 2616
                    localctx.indexName = self.uid()


                self.state = 2620
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==187:
                    self.state = 2619
                    self.indexType()


                self.state = 2622
                self.indexColumnNames()
                self.state = 2626
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,329,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 2623
                        self.indexOption() 
                    self.state = 2628
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,329,self._ctx)

                pass

            elif la_ == 7:
                localctx = MySqlParser.AlterByAddSpecialIndexContext(self, localctx)
                self.enterOuterAlt(localctx, 7)
                self.state = 2629
                self.match(MySqlParser.ADD)
                self.state = 2630
                localctx.keyType = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==69 or _la==159):
                    localctx.keyType = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 2632
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==81 or _la==91:
                    self.state = 2631
                    localctx.indexFormat = self._input.LT(1)
                    _la = self._input.LA(1)
                    if not(_la==81 or _la==91):
                        localctx.indexFormat = self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 2635
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513122304) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055071174737) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                    self.state = 2634
                    self.uid()


                self.state = 2637
                self.indexColumnNames()
                self.state = 2641
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,332,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 2638
                        self.indexOption() 
                    self.state = 2643
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,332,self._ctx)

                pass

            elif la_ == 8:
                localctx = MySqlParser.AlterByAddForeignKeyContext(self, localctx)
                self.enterOuterAlt(localctx, 8)
                self.state = 2644
                self.match(MySqlParser.ADD)
                self.state = 2649
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==30:
                    self.state = 2645
                    self.match(MySqlParser.CONSTRAINT)
                    self.state = 2647
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513122304) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055071174737) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                        self.state = 2646
                        localctx.name = self.uid()




                self.state = 2651
                self.match(MySqlParser.FOREIGN)
                self.state = 2652
                self.match(MySqlParser.KEY)
                self.state = 2654
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513122304) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055071174737) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                    self.state = 2653
                    localctx.indexName = self.uid()


                self.state = 2656
                self.indexColumnNames()
                self.state = 2657
                self.referenceDefinition()
                pass

            elif la_ == 9:
                localctx = MySqlParser.AlterByAddCheckTableConstraintContext(self, localctx)
                self.enterOuterAlt(localctx, 9)
                self.state = 2659
                self.match(MySqlParser.ADD)
                self.state = 2664
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==30:
                    self.state = 2660
                    self.match(MySqlParser.CONSTRAINT)
                    self.state = 2662
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513122304) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055071174737) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                        self.state = 2661
                        localctx.name = self.uid()




                self.state = 2666
                self.match(MySqlParser.CHECK)
                self.state = 2673
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,338,self._ctx)
                if la_ == 1:
                    self.state = 2667
                    self.uid()
                    pass

                elif la_ == 2:
                    self.state = 2668
                    self.stringLiteral()
                    pass

                elif la_ == 3:
                    self.state = 2669
                    self.match(MySqlParser.LR_BRACKET)
                    self.state = 2670
                    self.expression(0)
                    self.state = 2671
                    self.match(MySqlParser.RR_BRACKET)
                    pass


                self.state = 2676
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==114:
                    self.state = 2675
                    self.match(MySqlParser.NOT)


                self.state = 2679
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==57:
                    self.state = 2678
                    self.match(MySqlParser.ENFORCED)


                pass

            elif la_ == 10:
                localctx = MySqlParser.AlterByAlterCheckTableConstraintContext(self, localctx)
                self.enterOuterAlt(localctx, 10)
                self.state = 2681
                self.match(MySqlParser.ALTER)
                self.state = 2686
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==30:
                    self.state = 2682
                    self.match(MySqlParser.CONSTRAINT)
                    self.state = 2684
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513122304) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055071174737) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                        self.state = 2683
                        localctx.name = self.uid()




                self.state = 2688
                self.match(MySqlParser.CHECK)
                self.state = 2695
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,343,self._ctx)
                if la_ == 1:
                    self.state = 2689
                    self.uid()
                    pass

                elif la_ == 2:
                    self.state = 2690
                    self.stringLiteral()
                    pass

                elif la_ == 3:
                    self.state = 2691
                    self.match(MySqlParser.LR_BRACKET)
                    self.state = 2692
                    self.expression(0)
                    self.state = 2693
                    self.match(MySqlParser.RR_BRACKET)
                    pass


                self.state = 2698
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==114:
                    self.state = 2697
                    self.match(MySqlParser.NOT)


                self.state = 2701
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==57:
                    self.state = 2700
                    self.match(MySqlParser.ENFORCED)


                pass

            elif la_ == 11:
                localctx = MySqlParser.AlterByAddCheckTableConstraintContext(self, localctx)
                self.enterOuterAlt(localctx, 11)
                self.state = 2703
                self.match(MySqlParser.ADD)
                self.state = 2708
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==30:
                    self.state = 2704
                    self.match(MySqlParser.CONSTRAINT)
                    self.state = 2706
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513122304) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055071174737) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                        self.state = 2705
                        localctx.name = self.uid()




                self.state = 2710
                self.match(MySqlParser.CHECK)
                self.state = 2711
                self.match(MySqlParser.LR_BRACKET)
                self.state = 2712
                self.expression(0)
                self.state = 2713
                self.match(MySqlParser.RR_BRACKET)
                pass

            elif la_ == 12:
                localctx = MySqlParser.AlterBySetAlgorithmContext(self, localctx)
                self.enterOuterAlt(localctx, 12)
                self.state = 2715
                self.match(MySqlParser.ALGORITHM)
                self.state = 2717
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 2716
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 2719
                localctx.algType = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==42 or _la==384 or _la==454 or _la==458):
                    localctx.algType = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass

            elif la_ == 13:
                localctx = MySqlParser.AlterByChangeDefaultContext(self, localctx)
                self.enterOuterAlt(localctx, 13)
                self.state = 2720
                self.match(MySqlParser.ALTER)
                self.state = 2722
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==28:
                    self.state = 2721
                    self.match(MySqlParser.COLUMN)


                self.state = 2724
                self.uid()
                self.state = 2730
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [153]:
                    self.state = 2725
                    self.match(MySqlParser.SET)
                    self.state = 2726
                    self.match(MySqlParser.DEFAULT)
                    self.state = 2727
                    self.defaultValue()
                    pass
                elif token in [51]:
                    self.state = 2728
                    self.match(MySqlParser.DROP)
                    self.state = 2729
                    self.match(MySqlParser.DEFAULT)
                    pass
                else:
                    raise NoViableAltException(self)

                pass

            elif la_ == 14:
                localctx = MySqlParser.AlterByChangeColumnContext(self, localctx)
                self.enterOuterAlt(localctx, 14)
                self.state = 2732
                self.match(MySqlParser.CHANGE)
                self.state = 2734
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==28:
                    self.state = 2733
                    self.match(MySqlParser.COLUMN)


                self.state = 2736
                localctx.oldColumn = self.uid()
                self.state = 2737
                localctx.newColumn = self.uid()
                self.state = 2738
                self.columnDefinition()
                self.state = 2742
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [430]:
                    self.state = 2739
                    self.match(MySqlParser.FIRST)
                    pass
                elif token in [334]:
                    self.state = 2740
                    self.match(MySqlParser.AFTER)
                    self.state = 2741
                    localctx.afterColumn = self.uid()
                    pass
                elif token in [-1, 7, 9, 20, 24, 26, 33, 44, 45, 46, 51, 62, 71, 72, 85, 93, 102, 103, 119, 129, 132, 138, 139, 141, 143, 147, 152, 153, 155, 156, 172, 182, 184, 186, 188, 192, 344, 345, 351, 356, 369, 390, 399, 432, 442, 444, 456, 560, 580, 589, 597, 604, 629, 635, 656, 661, 681, 708, 739, 1121, 1133, 1135, 1136]:
                    pass
                else:
                    pass
                pass

            elif la_ == 15:
                localctx = MySqlParser.AlterByRenameColumnContext(self, localctx)
                self.enterOuterAlt(localctx, 15)
                self.state = 2744
                self.match(MySqlParser.RENAME)
                self.state = 2745
                self.match(MySqlParser.COLUMN)
                self.state = 2746
                localctx.oldColumn = self.uid()
                self.state = 2747
                self.match(MySqlParser.TO)
                self.state = 2748
                localctx.newColumn = self.uid()
                pass

            elif la_ == 16:
                localctx = MySqlParser.AlterByLockContext(self, localctx)
                self.enterOuterAlt(localctx, 16)
                self.state = 2750
                self.match(MySqlParser.LOCK)
                self.state = 2752
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 2751
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 2754
                localctx.lockType = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==42 or _la==419 or _la==529 or _la==611):
                    localctx.lockType = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass

            elif la_ == 17:
                localctx = MySqlParser.AlterByModifyColumnContext(self, localctx)
                self.enterOuterAlt(localctx, 17)
                self.state = 2755
                self.match(MySqlParser.MODIFY)
                self.state = 2757
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==28:
                    self.state = 2756
                    self.match(MySqlParser.COLUMN)


                self.state = 2759
                self.uid()
                self.state = 2760
                self.columnDefinition()
                self.state = 2764
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [430]:
                    self.state = 2761
                    self.match(MySqlParser.FIRST)
                    pass
                elif token in [334]:
                    self.state = 2762
                    self.match(MySqlParser.AFTER)
                    self.state = 2763
                    self.uid()
                    pass
                elif token in [-1, 7, 9, 20, 24, 26, 33, 44, 45, 46, 51, 62, 71, 72, 85, 93, 102, 103, 119, 129, 132, 138, 139, 141, 143, 147, 152, 153, 155, 156, 172, 182, 184, 186, 188, 192, 344, 345, 351, 356, 369, 390, 399, 432, 442, 444, 456, 560, 580, 589, 597, 604, 629, 635, 656, 661, 681, 708, 739, 1121, 1133, 1135, 1136]:
                    pass
                else:
                    pass
                pass

            elif la_ == 18:
                localctx = MySqlParser.AlterByDropColumnContext(self, localctx)
                self.enterOuterAlt(localctx, 18)
                self.state = 2766
                self.match(MySqlParser.DROP)
                self.state = 2768
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==28:
                    self.state = 2767
                    self.match(MySqlParser.COLUMN)


                self.state = 2770
                self.uid()
                self.state = 2772
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==144:
                    self.state = 2771
                    self.match(MySqlParser.RESTRICT)


                pass

            elif la_ == 19:
                localctx = MySqlParser.AlterByDropConstraintCheckContext(self, localctx)
                self.enterOuterAlt(localctx, 19)
                self.state = 2774
                self.match(MySqlParser.DROP)
                self.state = 2775
                _la = self._input.LA(1)
                if not(_la==26 or _la==30):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 2776
                self.uid()
                pass

            elif la_ == 20:
                localctx = MySqlParser.AlterByDropPrimaryKeyContext(self, localctx)
                self.enterOuterAlt(localctx, 20)
                self.state = 2777
                self.match(MySqlParser.DROP)
                self.state = 2778
                self.match(MySqlParser.PRIMARY)
                self.state = 2779
                self.match(MySqlParser.KEY)
                pass

            elif la_ == 21:
                localctx = MySqlParser.AlterByDropIndexContext(self, localctx)
                self.enterOuterAlt(localctx, 21)
                self.state = 2780
                self.match(MySqlParser.DROP)
                self.state = 2781
                localctx.indexFormat = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==81 or _la==91):
                    localctx.indexFormat = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 2782
                self.uid()
                pass

            elif la_ == 22:
                localctx = MySqlParser.AlterByRenameIndexContext(self, localctx)
                self.enterOuterAlt(localctx, 22)
                self.state = 2783
                self.match(MySqlParser.RENAME)
                self.state = 2784
                localctx.indexFormat = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==81 or _la==91):
                    localctx.indexFormat = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 2785
                self.uid()
                self.state = 2786
                self.match(MySqlParser.TO)
                self.state = 2787
                self.uid()
                pass

            elif la_ == 23:
                localctx = MySqlParser.AlterByAlterColumnDefaultContext(self, localctx)
                self.enterOuterAlt(localctx, 23)
                self.state = 2789
                self.match(MySqlParser.ALTER)
                self.state = 2791
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==28:
                    self.state = 2790
                    self.match(MySqlParser.COLUMN)


                self.state = 2793
                self.uid()
                self.state = 2807
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,360,self._ctx)
                if la_ == 1:
                    self.state = 2794
                    self.match(MySqlParser.SET)
                    self.state = 2795
                    self.match(MySqlParser.DEFAULT)
                    self.state = 2801
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [1147, 1148, 1154]:
                        self.state = 2796
                        self.stringLiteral()
                        pass
                    elif token in [1133]:
                        self.state = 2797
                        self.match(MySqlParser.LR_BRACKET)
                        self.state = 2798
                        self.expression(0)
                        self.state = 2799
                        self.match(MySqlParser.RR_BRACKET)
                        pass
                    else:
                        raise NoViableAltException(self)

                    pass

                elif la_ == 2:
                    self.state = 2803
                    self.match(MySqlParser.SET)
                    self.state = 2804
                    _la = self._input.LA(1)
                    if not(_la==459 or _la==673):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    pass

                elif la_ == 3:
                    self.state = 2805
                    self.match(MySqlParser.DROP)
                    self.state = 2806
                    self.match(MySqlParser.DEFAULT)
                    pass


                pass

            elif la_ == 24:
                localctx = MySqlParser.AlterByAlterIndexVisibilityContext(self, localctx)
                self.enterOuterAlt(localctx, 24)
                self.state = 2809
                self.match(MySqlParser.ALTER)
                self.state = 2810
                self.match(MySqlParser.INDEX)
                self.state = 2811
                self.uid()
                self.state = 2812
                _la = self._input.LA(1)
                if not(_la==459 or _la==673):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass

            elif la_ == 25:
                localctx = MySqlParser.AlterByDropForeignKeyContext(self, localctx)
                self.enterOuterAlt(localctx, 25)
                self.state = 2814
                self.match(MySqlParser.DROP)
                self.state = 2815
                self.match(MySqlParser.FOREIGN)
                self.state = 2816
                self.match(MySqlParser.KEY)
                self.state = 2817
                self.uid()
                pass

            elif la_ == 26:
                localctx = MySqlParser.AlterByDisableKeysContext(self, localctx)
                self.enterOuterAlt(localctx, 26)
                self.state = 2818
                self.match(MySqlParser.DISABLE)
                self.state = 2819
                self.match(MySqlParser.KEYS)
                pass

            elif la_ == 27:
                localctx = MySqlParser.AlterByEnableKeysContext(self, localctx)
                self.enterOuterAlt(localctx, 27)
                self.state = 2820
                self.match(MySqlParser.ENABLE)
                self.state = 2821
                self.match(MySqlParser.KEYS)
                pass

            elif la_ == 28:
                localctx = MySqlParser.AlterByRenameContext(self, localctx)
                self.enterOuterAlt(localctx, 28)
                self.state = 2822
                self.match(MySqlParser.RENAME)
                self.state = 2824
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==12 or _la==175:
                    self.state = 2823
                    localctx.renameFormat = self._input.LT(1)
                    _la = self._input.LA(1)
                    if not(_la==12 or _la==175):
                        localctx.renameFormat = self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 2828
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,362,self._ctx)
                if la_ == 1:
                    self.state = 2826
                    self.uid()
                    pass

                elif la_ == 2:
                    self.state = 2827
                    self.fullId()
                    pass


                pass

            elif la_ == 29:
                localctx = MySqlParser.AlterByOrderContext(self, localctx)
                self.enterOuterAlt(localctx, 29)
                self.state = 2830
                self.match(MySqlParser.ORDER)
                self.state = 2831
                self.match(MySqlParser.BY)
                self.state = 2832
                self.uidList()
                pass

            elif la_ == 30:
                localctx = MySqlParser.AlterByConvertCharsetContext(self, localctx)
                self.enterOuterAlt(localctx, 30)
                self.state = 2833
                self.match(MySqlParser.CONVERT)
                self.state = 2834
                self.match(MySqlParser.TO)
                self.state = 2838
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [841]:
                    self.state = 2835
                    self.match(MySqlParser.CHARSET)
                    pass
                elif token in [25]:
                    self.state = 2836
                    self.match(MySqlParser.CHARACTER)
                    self.state = 2837
                    self.match(MySqlParser.SET)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 2840
                self.charsetName()
                self.state = 2843
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==27:
                    self.state = 2841
                    self.match(MySqlParser.COLLATE)
                    self.state = 2842
                    self.collationName()


                pass

            elif la_ == 31:
                localctx = MySqlParser.AlterByDefaultCharsetContext(self, localctx)
                self.enterOuterAlt(localctx, 31)
                self.state = 2846
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==42:
                    self.state = 2845
                    self.match(MySqlParser.DEFAULT)


                self.state = 2848
                self.match(MySqlParser.CHARACTER)
                self.state = 2849
                self.match(MySqlParser.SET)
                self.state = 2850
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 2851
                self.charsetName()
                self.state = 2855
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==27:
                    self.state = 2852
                    self.match(MySqlParser.COLLATE)
                    self.state = 2853
                    self.match(MySqlParser.EQUAL_SYMBOL)
                    self.state = 2854
                    self.collationName()


                pass

            elif la_ == 32:
                localctx = MySqlParser.AlterByDiscardTablespaceContext(self, localctx)
                self.enterOuterAlt(localctx, 32)
                self.state = 2857
                self.match(MySqlParser.DISCARD)
                self.state = 2858
                self.match(MySqlParser.TABLESPACE)
                pass

            elif la_ == 33:
                localctx = MySqlParser.AlterByImportTablespaceContext(self, localctx)
                self.enterOuterAlt(localctx, 33)
                self.state = 2859
                self.match(MySqlParser.IMPORT)
                self.state = 2860
                self.match(MySqlParser.TABLESPACE)
                pass

            elif la_ == 34:
                localctx = MySqlParser.AlterByForceContext(self, localctx)
                self.enterOuterAlt(localctx, 34)
                self.state = 2861
                self.match(MySqlParser.FORCE)
                pass

            elif la_ == 35:
                localctx = MySqlParser.AlterByValidateContext(self, localctx)
                self.enterOuterAlt(localctx, 35)
                self.state = 2862
                localctx.validationFormat = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==192 or _la==677):
                    localctx.validationFormat = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 2863
                self.match(MySqlParser.VALIDATION)
                pass

            elif la_ == 36:
                localctx = MySqlParser.AlterByAddDefinitionsContext(self, localctx)
                self.enterOuterAlt(localctx, 36)
                self.state = 2864
                self.match(MySqlParser.ADD)
                self.state = 2866
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==28:
                    self.state = 2865
                    self.match(MySqlParser.COLUMN)


                self.state = 2868
                self.match(MySqlParser.LR_BRACKET)
                self.state = 2869
                self.createDefinition()
                self.state = 2874
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 2870
                    self.match(MySqlParser.COMMA)
                    self.state = 2871
                    self.createDefinition()
                    self.state = 2876
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 2877
                self.match(MySqlParser.RR_BRACKET)
                pass

            elif la_ == 37:
                localctx = MySqlParser.AlterPartitionContext(self, localctx)
                self.enterOuterAlt(localctx, 37)
                self.state = 2879
                self.alterPartitionSpecification()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class AlterPartitionSpecificationContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_alterPartitionSpecification

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class AlterByImportPartitionContext(AlterPartitionSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterPartitionSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def IMPORT(self):
            return self.getToken(MySqlParser.IMPORT, 0)
        def PARTITION(self):
            return self.getToken(MySqlParser.PARTITION, 0)
        def TABLESPACE(self):
            return self.getToken(MySqlParser.TABLESPACE, 0)
        def uidList(self):
            return self.getTypedRuleContext(MySqlParser.UidListContext,0)

        def ALL(self):
            return self.getToken(MySqlParser.ALL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByImportPartition" ):
                listener.enterAlterByImportPartition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByImportPartition" ):
                listener.exitAlterByImportPartition(self)


    class AlterByDropPartitionContext(AlterPartitionSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterPartitionSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def DROP(self):
            return self.getToken(MySqlParser.DROP, 0)
        def PARTITION(self):
            return self.getToken(MySqlParser.PARTITION, 0)
        def uidList(self):
            return self.getTypedRuleContext(MySqlParser.UidListContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByDropPartition" ):
                listener.enterAlterByDropPartition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByDropPartition" ):
                listener.exitAlterByDropPartition(self)


    class AlterByDiscardPartitionContext(AlterPartitionSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterPartitionSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def DISCARD(self):
            return self.getToken(MySqlParser.DISCARD, 0)
        def PARTITION(self):
            return self.getToken(MySqlParser.PARTITION, 0)
        def TABLESPACE(self):
            return self.getToken(MySqlParser.TABLESPACE, 0)
        def uidList(self):
            return self.getTypedRuleContext(MySqlParser.UidListContext,0)

        def ALL(self):
            return self.getToken(MySqlParser.ALL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByDiscardPartition" ):
                listener.enterAlterByDiscardPartition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByDiscardPartition" ):
                listener.exitAlterByDiscardPartition(self)


    class AlterByAddPartitionContext(AlterPartitionSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterPartitionSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def ADD(self):
            return self.getToken(MySqlParser.ADD, 0)
        def PARTITION(self):
            return self.getToken(MySqlParser.PARTITION, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def partitionDefinition(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.PartitionDefinitionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.PartitionDefinitionContext,i)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByAddPartition" ):
                listener.enterAlterByAddPartition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByAddPartition" ):
                listener.exitAlterByAddPartition(self)


    class AlterByRemovePartitioningContext(AlterPartitionSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterPartitionSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def REMOVE(self):
            return self.getToken(MySqlParser.REMOVE, 0)
        def PARTITIONING(self):
            return self.getToken(MySqlParser.PARTITIONING, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByRemovePartitioning" ):
                listener.enterAlterByRemovePartitioning(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByRemovePartitioning" ):
                listener.exitAlterByRemovePartitioning(self)


    class AlterByOptimizePartitionContext(AlterPartitionSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterPartitionSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def OPTIMIZE(self):
            return self.getToken(MySqlParser.OPTIMIZE, 0)
        def PARTITION(self):
            return self.getToken(MySqlParser.PARTITION, 0)
        def uidList(self):
            return self.getTypedRuleContext(MySqlParser.UidListContext,0)

        def ALL(self):
            return self.getToken(MySqlParser.ALL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByOptimizePartition" ):
                listener.enterAlterByOptimizePartition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByOptimizePartition" ):
                listener.exitAlterByOptimizePartition(self)


    class AlterByCheckPartitionContext(AlterPartitionSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterPartitionSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def CHECK(self):
            return self.getToken(MySqlParser.CHECK, 0)
        def PARTITION(self):
            return self.getToken(MySqlParser.PARTITION, 0)
        def uidList(self):
            return self.getTypedRuleContext(MySqlParser.UidListContext,0)

        def ALL(self):
            return self.getToken(MySqlParser.ALL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByCheckPartition" ):
                listener.enterAlterByCheckPartition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByCheckPartition" ):
                listener.exitAlterByCheckPartition(self)


    class AlterByCoalescePartitionContext(AlterPartitionSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterPartitionSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def COALESCE(self):
            return self.getToken(MySqlParser.COALESCE, 0)
        def PARTITION(self):
            return self.getToken(MySqlParser.PARTITION, 0)
        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByCoalescePartition" ):
                listener.enterAlterByCoalescePartition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByCoalescePartition" ):
                listener.exitAlterByCoalescePartition(self)


    class AlterByReorganizePartitionContext(AlterPartitionSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterPartitionSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def REORGANIZE(self):
            return self.getToken(MySqlParser.REORGANIZE, 0)
        def PARTITION(self):
            return self.getToken(MySqlParser.PARTITION, 0)
        def uidList(self):
            return self.getTypedRuleContext(MySqlParser.UidListContext,0)

        def INTO(self):
            return self.getToken(MySqlParser.INTO, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def partitionDefinition(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.PartitionDefinitionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.PartitionDefinitionContext,i)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByReorganizePartition" ):
                listener.enterAlterByReorganizePartition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByReorganizePartition" ):
                listener.exitAlterByReorganizePartition(self)


    class AlterByAnalyzePartitionContext(AlterPartitionSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterPartitionSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def ANALYZE(self):
            return self.getToken(MySqlParser.ANALYZE, 0)
        def PARTITION(self):
            return self.getToken(MySqlParser.PARTITION, 0)
        def uidList(self):
            return self.getTypedRuleContext(MySqlParser.UidListContext,0)

        def ALL(self):
            return self.getToken(MySqlParser.ALL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByAnalyzePartition" ):
                listener.enterAlterByAnalyzePartition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByAnalyzePartition" ):
                listener.exitAlterByAnalyzePartition(self)


    class AlterByRebuildPartitionContext(AlterPartitionSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterPartitionSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def REBUILD(self):
            return self.getToken(MySqlParser.REBUILD, 0)
        def PARTITION(self):
            return self.getToken(MySqlParser.PARTITION, 0)
        def uidList(self):
            return self.getTypedRuleContext(MySqlParser.UidListContext,0)

        def ALL(self):
            return self.getToken(MySqlParser.ALL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByRebuildPartition" ):
                listener.enterAlterByRebuildPartition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByRebuildPartition" ):
                listener.exitAlterByRebuildPartition(self)


    class AlterByUpgradePartitioningContext(AlterPartitionSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterPartitionSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def UPGRADE(self):
            return self.getToken(MySqlParser.UPGRADE, 0)
        def PARTITIONING(self):
            return self.getToken(MySqlParser.PARTITIONING, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByUpgradePartitioning" ):
                listener.enterAlterByUpgradePartitioning(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByUpgradePartitioning" ):
                listener.exitAlterByUpgradePartitioning(self)


    class AlterByTruncatePartitionContext(AlterPartitionSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterPartitionSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def TRUNCATE(self):
            return self.getToken(MySqlParser.TRUNCATE, 0)
        def PARTITION(self):
            return self.getToken(MySqlParser.PARTITION, 0)
        def uidList(self):
            return self.getTypedRuleContext(MySqlParser.UidListContext,0)

        def ALL(self):
            return self.getToken(MySqlParser.ALL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByTruncatePartition" ):
                listener.enterAlterByTruncatePartition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByTruncatePartition" ):
                listener.exitAlterByTruncatePartition(self)


    class AlterByRepairPartitionContext(AlterPartitionSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterPartitionSpecificationContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def REPAIR(self):
            return self.getToken(MySqlParser.REPAIR, 0)
        def PARTITION(self):
            return self.getToken(MySqlParser.PARTITION, 0)
        def uidList(self):
            return self.getTypedRuleContext(MySqlParser.UidListContext,0)

        def ALL(self):
            return self.getToken(MySqlParser.ALL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByRepairPartition" ):
                listener.enterAlterByRepairPartition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByRepairPartition" ):
                listener.exitAlterByRepairPartition(self)


    class AlterByExchangePartitionContext(AlterPartitionSpecificationContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterPartitionSpecificationContext
            super().__init__(parser)
            self.validationFormat = None # Token
            self.copyFrom(ctx)

        def EXCHANGE(self):
            return self.getToken(MySqlParser.EXCHANGE, 0)
        def PARTITION(self):
            return self.getToken(MySqlParser.PARTITION, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def WITH(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.WITH)
            else:
                return self.getToken(MySqlParser.WITH, i)
        def TABLE(self):
            return self.getToken(MySqlParser.TABLE, 0)
        def tableName(self):
            return self.getTypedRuleContext(MySqlParser.TableNameContext,0)

        def VALIDATION(self):
            return self.getToken(MySqlParser.VALIDATION, 0)
        def WITHOUT(self):
            return self.getToken(MySqlParser.WITHOUT, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterByExchangePartition" ):
                listener.enterAlterByExchangePartition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterByExchangePartition" ):
                listener.exitAlterByExchangePartition(self)



    def alterPartitionSpecification(self):

        localctx = MySqlParser.AlterPartitionSpecificationContext(self, self._ctx, self.state)
        self.enterRule(localctx, 150, self.RULE_alterPartitionSpecification)
        self._la = 0 # Token type
        try:
            self.state = 2980
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [5]:
                localctx = MySqlParser.AlterByAddPartitionContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 2882
                self.match(MySqlParser.ADD)
                self.state = 2883
                self.match(MySqlParser.PARTITION)
                self.state = 2884
                self.match(MySqlParser.LR_BRACKET)
                self.state = 2885
                self.partitionDefinition()
                self.state = 2890
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 2886
                    self.match(MySqlParser.COMMA)
                    self.state = 2887
                    self.partitionDefinition()
                    self.state = 2892
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 2893
                self.match(MySqlParser.RR_BRACKET)
                pass
            elif token in [51]:
                localctx = MySqlParser.AlterByDropPartitionContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 2895
                self.match(MySqlParser.DROP)
                self.state = 2896
                self.match(MySqlParser.PARTITION)
                self.state = 2897
                self.uidList()
                pass
            elif token in [397]:
                localctx = MySqlParser.AlterByDiscardPartitionContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 2898
                self.match(MySqlParser.DISCARD)
                self.state = 2899
                self.match(MySqlParser.PARTITION)
                self.state = 2902
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [11, 14, 18, 29, 35, 37, 39, 42, 48, 55, 57, 59, 73, 77, 79, 85, 94, 97, 117, 121, 124, 130, 140, 141, 148, 150, 158, 168, 217, 218, 219, 220, 221, 226, 234, 237, 239, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 405, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 523, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 677, 678, 679, 680, 681, 682, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 717, 718, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1123, 1145, 1148, 1156]:
                    self.state = 2900
                    self.uidList()
                    pass
                elif token in [6]:
                    self.state = 2901
                    self.match(MySqlParser.ALL)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 2904
                self.match(MySqlParser.TABLESPACE)
                pass
            elif token in [450]:
                localctx = MySqlParser.AlterByImportPartitionContext(self, localctx)
                self.enterOuterAlt(localctx, 4)
                self.state = 2905
                self.match(MySqlParser.IMPORT)
                self.state = 2906
                self.match(MySqlParser.PARTITION)
                self.state = 2909
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [11, 14, 18, 29, 35, 37, 39, 42, 48, 55, 57, 59, 73, 77, 79, 85, 94, 97, 117, 121, 124, 130, 140, 141, 148, 150, 158, 168, 217, 218, 219, 220, 221, 226, 234, 237, 239, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 405, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 523, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 677, 678, 679, 680, 681, 682, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 717, 718, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1123, 1145, 1148, 1156]:
                    self.state = 2907
                    self.uidList()
                    pass
                elif token in [6]:
                    self.state = 2908
                    self.match(MySqlParser.ALL)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 2911
                self.match(MySqlParser.TABLESPACE)
                pass
            elif token in [656]:
                localctx = MySqlParser.AlterByTruncatePartitionContext(self, localctx)
                self.enterOuterAlt(localctx, 5)
                self.state = 2912
                self.match(MySqlParser.TRUNCATE)
                self.state = 2913
                self.match(MySqlParser.PARTITION)
                self.state = 2916
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [11, 14, 18, 29, 35, 37, 39, 42, 48, 55, 57, 59, 73, 77, 79, 85, 94, 97, 117, 121, 124, 130, 140, 141, 148, 150, 158, 168, 217, 218, 219, 220, 221, 226, 234, 237, 239, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 405, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 523, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 677, 678, 679, 680, 681, 682, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 717, 718, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1123, 1145, 1148, 1156]:
                    self.state = 2914
                    self.uidList()
                    pass
                elif token in [6]:
                    self.state = 2915
                    self.match(MySqlParser.ALL)
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            elif token in [363]:
                localctx = MySqlParser.AlterByCoalescePartitionContext(self, localctx)
                self.enterOuterAlt(localctx, 6)
                self.state = 2918
                self.match(MySqlParser.COALESCE)
                self.state = 2919
                self.match(MySqlParser.PARTITION)
                self.state = 2920
                self.decimalLiteral()
                pass
            elif token in [579]:
                localctx = MySqlParser.AlterByReorganizePartitionContext(self, localctx)
                self.enterOuterAlt(localctx, 7)
                self.state = 2921
                self.match(MySqlParser.REORGANIZE)
                self.state = 2922
                self.match(MySqlParser.PARTITION)
                self.state = 2923
                self.uidList()
                self.state = 2924
                self.match(MySqlParser.INTO)
                self.state = 2925
                self.match(MySqlParser.LR_BRACKET)
                self.state = 2926
                self.partitionDefinition()
                self.state = 2931
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 2927
                    self.match(MySqlParser.COMMA)
                    self.state = 2928
                    self.partitionDefinition()
                    self.state = 2933
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 2934
                self.match(MySqlParser.RR_BRACKET)
                pass
            elif token in [418]:
                localctx = MySqlParser.AlterByExchangePartitionContext(self, localctx)
                self.enterOuterAlt(localctx, 8)
                self.state = 2936
                self.match(MySqlParser.EXCHANGE)
                self.state = 2937
                self.match(MySqlParser.PARTITION)
                self.state = 2938
                self.uid()
                self.state = 2939
                self.match(MySqlParser.WITH)
                self.state = 2940
                self.match(MySqlParser.TABLE)
                self.state = 2941
                self.tableName()
                self.state = 2944
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,375,self._ctx)
                if la_ == 1:
                    self.state = 2942
                    localctx.validationFormat = self._input.LT(1)
                    _la = self._input.LA(1)
                    if not(_la==192 or _la==677):
                        localctx.validationFormat = self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 2943
                    self.match(MySqlParser.VALIDATION)


                pass
            elif token in [9]:
                localctx = MySqlParser.AlterByAnalyzePartitionContext(self, localctx)
                self.enterOuterAlt(localctx, 9)
                self.state = 2946
                self.match(MySqlParser.ANALYZE)
                self.state = 2947
                self.match(MySqlParser.PARTITION)
                self.state = 2950
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [11, 14, 18, 29, 35, 37, 39, 42, 48, 55, 57, 59, 73, 77, 79, 85, 94, 97, 117, 121, 124, 130, 140, 141, 148, 150, 158, 168, 217, 218, 219, 220, 221, 226, 234, 237, 239, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 405, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 523, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 677, 678, 679, 680, 681, 682, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 717, 718, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1123, 1145, 1148, 1156]:
                    self.state = 2948
                    self.uidList()
                    pass
                elif token in [6]:
                    self.state = 2949
                    self.match(MySqlParser.ALL)
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            elif token in [26]:
                localctx = MySqlParser.AlterByCheckPartitionContext(self, localctx)
                self.enterOuterAlt(localctx, 10)
                self.state = 2952
                self.match(MySqlParser.CHECK)
                self.state = 2953
                self.match(MySqlParser.PARTITION)
                self.state = 2956
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [11, 14, 18, 29, 35, 37, 39, 42, 48, 55, 57, 59, 73, 77, 79, 85, 94, 97, 117, 121, 124, 130, 140, 141, 148, 150, 158, 168, 217, 218, 219, 220, 221, 226, 234, 237, 239, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 405, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 523, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 677, 678, 679, 680, 681, 682, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 717, 718, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1123, 1145, 1148, 1156]:
                    self.state = 2954
                    self.uidList()
                    pass
                elif token in [6]:
                    self.state = 2955
                    self.match(MySqlParser.ALL)
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            elif token in [119]:
                localctx = MySqlParser.AlterByOptimizePartitionContext(self, localctx)
                self.enterOuterAlt(localctx, 11)
                self.state = 2958
                self.match(MySqlParser.OPTIMIZE)
                self.state = 2959
                self.match(MySqlParser.PARTITION)
                self.state = 2962
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [11, 14, 18, 29, 35, 37, 39, 42, 48, 55, 57, 59, 73, 77, 79, 85, 94, 97, 117, 121, 124, 130, 140, 141, 148, 150, 158, 168, 217, 218, 219, 220, 221, 226, 234, 237, 239, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 405, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 523, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 677, 678, 679, 680, 681, 682, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 717, 718, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1123, 1145, 1148, 1156]:
                    self.state = 2960
                    self.uidList()
                    pass
                elif token in [6]:
                    self.state = 2961
                    self.match(MySqlParser.ALL)
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            elif token in [569]:
                localctx = MySqlParser.AlterByRebuildPartitionContext(self, localctx)
                self.enterOuterAlt(localctx, 12)
                self.state = 2964
                self.match(MySqlParser.REBUILD)
                self.state = 2965
                self.match(MySqlParser.PARTITION)
                self.state = 2968
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [11, 14, 18, 29, 35, 37, 39, 42, 48, 55, 57, 59, 73, 77, 79, 85, 94, 97, 117, 121, 124, 130, 140, 141, 148, 150, 158, 168, 217, 218, 219, 220, 221, 226, 234, 237, 239, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 405, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 523, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 677, 678, 679, 680, 681, 682, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 717, 718, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1123, 1145, 1148, 1156]:
                    self.state = 2966
                    self.uidList()
                    pass
                elif token in [6]:
                    self.state = 2967
                    self.match(MySqlParser.ALL)
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            elif token in [580]:
                localctx = MySqlParser.AlterByRepairPartitionContext(self, localctx)
                self.enterOuterAlt(localctx, 13)
                self.state = 2970
                self.match(MySqlParser.REPAIR)
                self.state = 2971
                self.match(MySqlParser.PARTITION)
                self.state = 2974
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [11, 14, 18, 29, 35, 37, 39, 42, 48, 55, 57, 59, 73, 77, 79, 85, 94, 97, 117, 121, 124, 130, 140, 141, 148, 150, 158, 168, 217, 218, 219, 220, 221, 226, 234, 237, 239, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 405, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 523, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 677, 678, 679, 680, 681, 682, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 717, 718, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1123, 1145, 1148, 1156]:
                    self.state = 2972
                    self.uidList()
                    pass
                elif token in [6]:
                    self.state = 2973
                    self.match(MySqlParser.ALL)
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            elif token in [578]:
                localctx = MySqlParser.AlterByRemovePartitioningContext(self, localctx)
                self.enterOuterAlt(localctx, 14)
                self.state = 2976
                self.match(MySqlParser.REMOVE)
                self.state = 2977
                self.match(MySqlParser.PARTITIONING)
                pass
            elif token in [664]:
                localctx = MySqlParser.AlterByUpgradePartitioningContext(self, localctx)
                self.enterOuterAlt(localctx, 15)
                self.state = 2978
                self.match(MySqlParser.UPGRADE)
                self.state = 2979
                self.match(MySqlParser.PARTITIONING)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DropDatabaseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.dbFormat = None # Token

        def DROP(self):
            return self.getToken(MySqlParser.DROP, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def DATABASE(self):
            return self.getToken(MySqlParser.DATABASE, 0)

        def SCHEMA(self):
            return self.getToken(MySqlParser.SCHEMA, 0)

        def ifExists(self):
            return self.getTypedRuleContext(MySqlParser.IfExistsContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_dropDatabase

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDropDatabase" ):
                listener.enterDropDatabase(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDropDatabase" ):
                listener.exitDropDatabase(self)




    def dropDatabase(self):

        localctx = MySqlParser.DropDatabaseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 152, self.RULE_dropDatabase)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2982
            self.match(MySqlParser.DROP)
            self.state = 2983
            localctx.dbFormat = self._input.LT(1)
            _la = self._input.LA(1)
            if not(_la==39 or _la==150):
                localctx.dbFormat = self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 2985
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,382,self._ctx)
            if la_ == 1:
                self.state = 2984
                self.ifExists()


            self.state = 2987
            self.uid()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DropEventContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(MySqlParser.DROP, 0)

        def EVENT(self):
            return self.getToken(MySqlParser.EVENT, 0)

        def fullId(self):
            return self.getTypedRuleContext(MySqlParser.FullIdContext,0)


        def ifExists(self):
            return self.getTypedRuleContext(MySqlParser.IfExistsContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_dropEvent

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDropEvent" ):
                listener.enterDropEvent(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDropEvent" ):
                listener.exitDropEvent(self)




    def dropEvent(self):

        localctx = MySqlParser.DropEventContext(self, self._ctx, self.state)
        self.enterRule(localctx, 154, self.RULE_dropEvent)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2989
            self.match(MySqlParser.DROP)
            self.state = 2990
            self.match(MySqlParser.EVENT)
            self.state = 2992
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,383,self._ctx)
            if la_ == 1:
                self.state = 2991
                self.ifExists()


            self.state = 2994
            self.fullId()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DropIndexContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.intimeAction = None # Token
            self.algType = None # Token
            self.lockType = None # Token

        def DROP(self):
            return self.getToken(MySqlParser.DROP, 0)

        def INDEX(self):
            return self.getToken(MySqlParser.INDEX, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def ON(self):
            return self.getToken(MySqlParser.ON, 0)

        def tableName(self):
            return self.getTypedRuleContext(MySqlParser.TableNameContext,0)


        def ALGORITHM(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.ALGORITHM)
            else:
                return self.getToken(MySqlParser.ALGORITHM, i)

        def LOCK(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.LOCK)
            else:
                return self.getToken(MySqlParser.LOCK, i)

        def ONLINE(self):
            return self.getToken(MySqlParser.ONLINE, 0)

        def OFFLINE(self):
            return self.getToken(MySqlParser.OFFLINE, 0)

        def DEFAULT(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.DEFAULT)
            else:
                return self.getToken(MySqlParser.DEFAULT, i)

        def INPLACE(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.INPLACE)
            else:
                return self.getToken(MySqlParser.INPLACE, i)

        def COPY(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COPY)
            else:
                return self.getToken(MySqlParser.COPY, i)

        def NONE(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.NONE)
            else:
                return self.getToken(MySqlParser.NONE, i)

        def SHARED(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.SHARED)
            else:
                return self.getToken(MySqlParser.SHARED, i)

        def EXCLUSIVE(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.EXCLUSIVE)
            else:
                return self.getToken(MySqlParser.EXCLUSIVE, i)

        def EQUAL_SYMBOL(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.EQUAL_SYMBOL)
            else:
                return self.getToken(MySqlParser.EQUAL_SYMBOL, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_dropIndex

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDropIndex" ):
                listener.enterDropIndex(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDropIndex" ):
                listener.exitDropIndex(self)




    def dropIndex(self):

        localctx = MySqlParser.DropIndexContext(self, self._ctx, self.state)
        self.enterRule(localctx, 156, self.RULE_dropIndex)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2996
            self.match(MySqlParser.DROP)
            self.state = 2997
            self.match(MySqlParser.INDEX)
            self.state = 2999
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,384,self._ctx)
            if la_ == 1:
                self.state = 2998
                localctx.intimeAction = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==531 or _la==537):
                    localctx.intimeAction = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 3001
            self.uid()
            self.state = 3002
            self.match(MySqlParser.ON)
            self.state = 3003
            self.tableName()
            self.state = 3016
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,388,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 3014
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [336]:
                        self.state = 3004
                        self.match(MySqlParser.ALGORITHM)
                        self.state = 3006
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if _la==1124:
                            self.state = 3005
                            self.match(MySqlParser.EQUAL_SYMBOL)


                        self.state = 3008
                        localctx.algType = self._input.LT(1)
                        _la = self._input.LA(1)
                        if not(_la==42 or _la==384 or _la==454):
                            localctx.algType = self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()
                        pass
                    elif token in [103]:
                        self.state = 3009
                        self.match(MySqlParser.LOCK)
                        self.state = 3011
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if _la==1124:
                            self.state = 3010
                            self.match(MySqlParser.EQUAL_SYMBOL)


                        self.state = 3013
                        localctx.lockType = self._input.LT(1)
                        _la = self._input.LA(1)
                        if not(_la==42 or _la==419 or _la==529 or _la==611):
                            localctx.lockType = self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()
                        pass
                    else:
                        raise NoViableAltException(self)
             
                self.state = 3018
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,388,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DropLogfileGroupContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(MySqlParser.DROP, 0)

        def LOGFILE(self):
            return self.getToken(MySqlParser.LOGFILE, 0)

        def GROUP(self):
            return self.getToken(MySqlParser.GROUP, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def ENGINE(self):
            return self.getToken(MySqlParser.ENGINE, 0)

        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def engineName(self):
            return self.getTypedRuleContext(MySqlParser.EngineNameContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_dropLogfileGroup

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDropLogfileGroup" ):
                listener.enterDropLogfileGroup(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDropLogfileGroup" ):
                listener.exitDropLogfileGroup(self)




    def dropLogfileGroup(self):

        localctx = MySqlParser.DropLogfileGroupContext(self, self._ctx, self.state)
        self.enterRule(localctx, 158, self.RULE_dropLogfileGroup)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3019
            self.match(MySqlParser.DROP)
            self.state = 3020
            self.match(MySqlParser.LOGFILE)
            self.state = 3021
            self.match(MySqlParser.GROUP)
            self.state = 3022
            self.uid()
            self.state = 3023
            self.match(MySqlParser.ENGINE)
            self.state = 3024
            self.match(MySqlParser.EQUAL_SYMBOL)
            self.state = 3025
            self.engineName()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DropProcedureContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(MySqlParser.DROP, 0)

        def PROCEDURE(self):
            return self.getToken(MySqlParser.PROCEDURE, 0)

        def fullId(self):
            return self.getTypedRuleContext(MySqlParser.FullIdContext,0)


        def ifExists(self):
            return self.getTypedRuleContext(MySqlParser.IfExistsContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_dropProcedure

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDropProcedure" ):
                listener.enterDropProcedure(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDropProcedure" ):
                listener.exitDropProcedure(self)




    def dropProcedure(self):

        localctx = MySqlParser.DropProcedureContext(self, self._ctx, self.state)
        self.enterRule(localctx, 160, self.RULE_dropProcedure)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3027
            self.match(MySqlParser.DROP)
            self.state = 3028
            self.match(MySqlParser.PROCEDURE)
            self.state = 3030
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,389,self._ctx)
            if la_ == 1:
                self.state = 3029
                self.ifExists()


            self.state = 3032
            self.fullId()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DropFunctionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(MySqlParser.DROP, 0)

        def FUNCTION(self):
            return self.getToken(MySqlParser.FUNCTION, 0)

        def fullId(self):
            return self.getTypedRuleContext(MySqlParser.FullIdContext,0)


        def ifExists(self):
            return self.getTypedRuleContext(MySqlParser.IfExistsContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_dropFunction

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDropFunction" ):
                listener.enterDropFunction(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDropFunction" ):
                listener.exitDropFunction(self)




    def dropFunction(self):

        localctx = MySqlParser.DropFunctionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 162, self.RULE_dropFunction)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3034
            self.match(MySqlParser.DROP)
            self.state = 3035
            self.match(MySqlParser.FUNCTION)
            self.state = 3037
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,390,self._ctx)
            if la_ == 1:
                self.state = 3036
                self.ifExists()


            self.state = 3039
            self.fullId()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DropServerContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(MySqlParser.DROP, 0)

        def SERVER(self):
            return self.getToken(MySqlParser.SERVER, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def ifExists(self):
            return self.getTypedRuleContext(MySqlParser.IfExistsContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_dropServer

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDropServer" ):
                listener.enterDropServer(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDropServer" ):
                listener.exitDropServer(self)




    def dropServer(self):

        localctx = MySqlParser.DropServerContext(self, self._ctx, self.state)
        self.enterRule(localctx, 164, self.RULE_dropServer)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3041
            self.match(MySqlParser.DROP)
            self.state = 3042
            self.match(MySqlParser.SERVER)
            self.state = 3044
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,391,self._ctx)
            if la_ == 1:
                self.state = 3043
                self.ifExists()


            self.state = 3046
            self.uid()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DropTableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.dropType = None # Token

        def DROP(self):
            return self.getToken(MySqlParser.DROP, 0)

        def TABLE(self):
            return self.getToken(MySqlParser.TABLE, 0)

        def tables(self):
            return self.getTypedRuleContext(MySqlParser.TablesContext,0)


        def TEMPORARY(self):
            return self.getToken(MySqlParser.TEMPORARY, 0)

        def ifExists(self):
            return self.getTypedRuleContext(MySqlParser.IfExistsContext,0)


        def RESTRICT(self):
            return self.getToken(MySqlParser.RESTRICT, 0)

        def CASCADE(self):
            return self.getToken(MySqlParser.CASCADE, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_dropTable

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDropTable" ):
                listener.enterDropTable(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDropTable" ):
                listener.exitDropTable(self)




    def dropTable(self):

        localctx = MySqlParser.DropTableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 166, self.RULE_dropTable)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3048
            self.match(MySqlParser.DROP)
            self.state = 3050
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==649:
                self.state = 3049
                self.match(MySqlParser.TEMPORARY)


            self.state = 3052
            self.match(MySqlParser.TABLE)
            self.state = 3054
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,393,self._ctx)
            if la_ == 1:
                self.state = 3053
                self.ifExists()


            self.state = 3056
            self.tables()
            self.state = 3058
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==21 or _la==144:
                self.state = 3057
                localctx.dropType = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==21 or _la==144):
                    localctx.dropType = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DropTablespaceContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(MySqlParser.DROP, 0)

        def TABLESPACE(self):
            return self.getToken(MySqlParser.TABLESPACE, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def ENGINE(self):
            return self.getToken(MySqlParser.ENGINE, 0)

        def engineName(self):
            return self.getTypedRuleContext(MySqlParser.EngineNameContext,0)


        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_dropTablespace

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDropTablespace" ):
                listener.enterDropTablespace(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDropTablespace" ):
                listener.exitDropTablespace(self)




    def dropTablespace(self):

        localctx = MySqlParser.DropTablespaceContext(self, self._ctx, self.state)
        self.enterRule(localctx, 168, self.RULE_dropTablespace)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3060
            self.match(MySqlParser.DROP)
            self.state = 3061
            self.match(MySqlParser.TABLESPACE)
            self.state = 3062
            self.uid()
            self.state = 3068
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==409:
                self.state = 3063
                self.match(MySqlParser.ENGINE)
                self.state = 3065
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1124:
                    self.state = 3064
                    self.match(MySqlParser.EQUAL_SYMBOL)


                self.state = 3067
                self.engineName()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DropTriggerContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(MySqlParser.DROP, 0)

        def TRIGGER(self):
            return self.getToken(MySqlParser.TRIGGER, 0)

        def fullId(self):
            return self.getTypedRuleContext(MySqlParser.FullIdContext,0)


        def ifExists(self):
            return self.getTypedRuleContext(MySqlParser.IfExistsContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_dropTrigger

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDropTrigger" ):
                listener.enterDropTrigger(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDropTrigger" ):
                listener.exitDropTrigger(self)




    def dropTrigger(self):

        localctx = MySqlParser.DropTriggerContext(self, self._ctx, self.state)
        self.enterRule(localctx, 170, self.RULE_dropTrigger)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3070
            self.match(MySqlParser.DROP)
            self.state = 3071
            self.match(MySqlParser.TRIGGER)
            self.state = 3073
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,397,self._ctx)
            if la_ == 1:
                self.state = 3072
                self.ifExists()


            self.state = 3075
            self.fullId()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DropViewContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.dropType = None # Token

        def DROP(self):
            return self.getToken(MySqlParser.DROP, 0)

        def VIEW(self):
            return self.getToken(MySqlParser.VIEW, 0)

        def fullId(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.FullIdContext)
            else:
                return self.getTypedRuleContext(MySqlParser.FullIdContext,i)


        def ifExists(self):
            return self.getTypedRuleContext(MySqlParser.IfExistsContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def RESTRICT(self):
            return self.getToken(MySqlParser.RESTRICT, 0)

        def CASCADE(self):
            return self.getToken(MySqlParser.CASCADE, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_dropView

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDropView" ):
                listener.enterDropView(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDropView" ):
                listener.exitDropView(self)




    def dropView(self):

        localctx = MySqlParser.DropViewContext(self, self._ctx, self.state)
        self.enterRule(localctx, 172, self.RULE_dropView)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3077
            self.match(MySqlParser.DROP)
            self.state = 3078
            self.match(MySqlParser.VIEW)
            self.state = 3080
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,398,self._ctx)
            if la_ == 1:
                self.state = 3079
                self.ifExists()


            self.state = 3082
            self.fullId()
            self.state = 3087
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 3083
                self.match(MySqlParser.COMMA)
                self.state = 3084
                self.fullId()
                self.state = 3089
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 3091
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==21 or _la==144:
                self.state = 3090
                localctx.dropType = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==21 or _la==144):
                    localctx.dropType = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DropRoleContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(MySqlParser.DROP, 0)

        def ROLE(self):
            return self.getToken(MySqlParser.ROLE, 0)

        def roleName(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.RoleNameContext)
            else:
                return self.getTypedRuleContext(MySqlParser.RoleNameContext,i)


        def ifExists(self):
            return self.getTypedRuleContext(MySqlParser.IfExistsContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_dropRole

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDropRole" ):
                listener.enterDropRole(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDropRole" ):
                listener.exitDropRole(self)




    def dropRole(self):

        localctx = MySqlParser.DropRoleContext(self, self._ctx, self.state)
        self.enterRule(localctx, 174, self.RULE_dropRole)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3093
            self.match(MySqlParser.DROP)
            self.state = 3094
            self.match(MySqlParser.ROLE)
            self.state = 3096
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,401,self._ctx)
            if la_ == 1:
                self.state = 3095
                self.ifExists()


            self.state = 3098
            self.roleName()
            self.state = 3103
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 3099
                self.match(MySqlParser.COMMA)
                self.state = 3100
                self.roleName()
                self.state = 3105
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class SetRoleContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SET(self):
            return self.getToken(MySqlParser.SET, 0)

        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)

        def ROLE(self):
            return self.getToken(MySqlParser.ROLE, 0)

        def TO(self):
            return self.getToken(MySqlParser.TO, 0)

        def NONE(self):
            return self.getToken(MySqlParser.NONE, 0)

        def ALL(self):
            return self.getToken(MySqlParser.ALL, 0)

        def roleName(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.RoleNameContext)
            else:
                return self.getTypedRuleContext(MySqlParser.RoleNameContext,i)


        def userName(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UserNameContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UserNameContext,i)


        def uid(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UidContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UidContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def roleOption(self):
            return self.getTypedRuleContext(MySqlParser.RoleOptionContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_setRole

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSetRole" ):
                listener.enterSetRole(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSetRole" ):
                listener.exitSetRole(self)




    def setRole(self):

        localctx = MySqlParser.SetRoleContext(self, self._ctx, self.state)
        self.enterRule(localctx, 176, self.RULE_setRole)
        self._la = 0 # Token type
        try:
            self.state = 3139
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,408,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 3106
                self.match(MySqlParser.SET)
                self.state = 3107
                self.match(MySqlParser.DEFAULT)
                self.state = 3108
                self.match(MySqlParser.ROLE)
                self.state = 3119
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,404,self._ctx)
                if la_ == 1:
                    self.state = 3109
                    self.match(MySqlParser.NONE)
                    pass

                elif la_ == 2:
                    self.state = 3110
                    self.match(MySqlParser.ALL)
                    pass

                elif la_ == 3:
                    self.state = 3111
                    self.roleName()
                    self.state = 3116
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==1135:
                        self.state = 3112
                        self.match(MySqlParser.COMMA)
                        self.state = 3113
                        self.roleName()
                        self.state = 3118
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)

                    pass


                self.state = 3121
                self.match(MySqlParser.TO)
                self.state = 3124
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,405,self._ctx)
                if la_ == 1:
                    self.state = 3122
                    self.userName()
                    pass

                elif la_ == 2:
                    self.state = 3123
                    self.uid()
                    pass


                self.state = 3133
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 3126
                    self.match(MySqlParser.COMMA)
                    self.state = 3129
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,406,self._ctx)
                    if la_ == 1:
                        self.state = 3127
                        self.userName()
                        pass

                    elif la_ == 2:
                        self.state = 3128
                        self.uid()
                        pass


                    self.state = 3135
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 3136
                self.match(MySqlParser.SET)
                self.state = 3137
                self.match(MySqlParser.ROLE)
                self.state = 3138
                self.roleOption()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class RenameTableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RENAME(self):
            return self.getToken(MySqlParser.RENAME, 0)

        def TABLE(self):
            return self.getToken(MySqlParser.TABLE, 0)

        def renameTableClause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.RenameTableClauseContext)
            else:
                return self.getTypedRuleContext(MySqlParser.RenameTableClauseContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_renameTable

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRenameTable" ):
                listener.enterRenameTable(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRenameTable" ):
                listener.exitRenameTable(self)




    def renameTable(self):

        localctx = MySqlParser.RenameTableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 178, self.RULE_renameTable)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3141
            self.match(MySqlParser.RENAME)
            self.state = 3142
            self.match(MySqlParser.TABLE)
            self.state = 3143
            self.renameTableClause()
            self.state = 3148
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 3144
                self.match(MySqlParser.COMMA)
                self.state = 3145
                self.renameTableClause()
                self.state = 3150
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class RenameTableClauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def tableName(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.TableNameContext)
            else:
                return self.getTypedRuleContext(MySqlParser.TableNameContext,i)


        def TO(self):
            return self.getToken(MySqlParser.TO, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_renameTableClause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRenameTableClause" ):
                listener.enterRenameTableClause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRenameTableClause" ):
                listener.exitRenameTableClause(self)




    def renameTableClause(self):

        localctx = MySqlParser.RenameTableClauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 180, self.RULE_renameTableClause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3151
            self.tableName()
            self.state = 3152
            self.match(MySqlParser.TO)
            self.state = 3153
            self.tableName()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class TruncateTableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def TRUNCATE(self):
            return self.getToken(MySqlParser.TRUNCATE, 0)

        def tableName(self):
            return self.getTypedRuleContext(MySqlParser.TableNameContext,0)


        def TABLE(self):
            return self.getToken(MySqlParser.TABLE, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_truncateTable

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTruncateTable" ):
                listener.enterTruncateTable(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTruncateTable" ):
                listener.exitTruncateTable(self)




    def truncateTable(self):

        localctx = MySqlParser.TruncateTableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 182, self.RULE_truncateTable)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3155
            self.match(MySqlParser.TRUNCATE)
            self.state = 3157
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==172:
                self.state = 3156
                self.match(MySqlParser.TABLE)


            self.state = 3159
            self.tableName()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CallStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CALL(self):
            return self.getToken(MySqlParser.CALL, 0)

        def fullId(self):
            return self.getTypedRuleContext(MySqlParser.FullIdContext,0)


        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def constants(self):
            return self.getTypedRuleContext(MySqlParser.ConstantsContext,0)


        def expressions(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionsContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_callStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCallStatement" ):
                listener.enterCallStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCallStatement" ):
                listener.exitCallStatement(self)




    def callStatement(self):

        localctx = MySqlParser.CallStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 184, self.RULE_callStatement)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3161
            self.match(MySqlParser.CALL)
            self.state = 3162
            self.fullId()
            self.state = 3169
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,412,self._ctx)
            if la_ == 1:
                self.state = 3163
                self.match(MySqlParser.LR_BRACKET)
                self.state = 3166
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,411,self._ctx)
                if la_ == 1:
                    self.state = 3164
                    self.constants()

                elif la_ == 2:
                    self.state = 3165
                    self.expressions()


                self.state = 3168
                self.match(MySqlParser.RR_BRACKET)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DeleteStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def singleDeleteStatement(self):
            return self.getTypedRuleContext(MySqlParser.SingleDeleteStatementContext,0)


        def multipleDeleteStatement(self):
            return self.getTypedRuleContext(MySqlParser.MultipleDeleteStatementContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_deleteStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDeleteStatement" ):
                listener.enterDeleteStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDeleteStatement" ):
                listener.exitDeleteStatement(self)




    def deleteStatement(self):

        localctx = MySqlParser.DeleteStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 186, self.RULE_deleteStatement)
        try:
            self.state = 3173
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,413,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 3171
                self.singleDeleteStatement()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 3172
                self.multipleDeleteStatement()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DoStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DO(self):
            return self.getToken(MySqlParser.DO, 0)

        def expressions(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionsContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_doStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDoStatement" ):
                listener.enterDoStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDoStatement" ):
                listener.exitDoStatement(self)




    def doStatement(self):

        localctx = MySqlParser.DoStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 188, self.RULE_doStatement)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3175
            self.match(MySqlParser.DO)
            self.state = 3176
            self.expressions()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class HandlerStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def handlerOpenStatement(self):
            return self.getTypedRuleContext(MySqlParser.HandlerOpenStatementContext,0)


        def handlerReadIndexStatement(self):
            return self.getTypedRuleContext(MySqlParser.HandlerReadIndexStatementContext,0)


        def handlerReadStatement(self):
            return self.getTypedRuleContext(MySqlParser.HandlerReadStatementContext,0)


        def handlerCloseStatement(self):
            return self.getTypedRuleContext(MySqlParser.HandlerCloseStatementContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_handlerStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHandlerStatement" ):
                listener.enterHandlerStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHandlerStatement" ):
                listener.exitHandlerStatement(self)




    def handlerStatement(self):

        localctx = MySqlParser.HandlerStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 190, self.RULE_handlerStatement)
        try:
            self.state = 3182
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,414,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 3178
                self.handlerOpenStatement()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 3179
                self.handlerReadIndexStatement()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 3180
                self.handlerReadStatement()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 3181
                self.handlerCloseStatement()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class InsertStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.priority = None # Token
            self.partitions = None # UidListContext
            self.columns = None # FullColumnNameListContext
            self.setFirst = None # UpdatedElementContext
            self._updatedElement = None # UpdatedElementContext
            self.setElements = list() # of UpdatedElementContexts
            self.duplicatedFirst = None # UpdatedElementContext
            self.duplicatedElements = list() # of UpdatedElementContexts

        def INSERT(self):
            return self.getToken(MySqlParser.INSERT, 0)

        def tableName(self):
            return self.getTypedRuleContext(MySqlParser.TableNameContext,0)


        def insertStatementValue(self):
            return self.getTypedRuleContext(MySqlParser.InsertStatementValueContext,0)


        def SET(self):
            return self.getToken(MySqlParser.SET, 0)

        def IGNORE(self):
            return self.getToken(MySqlParser.IGNORE, 0)

        def INTO(self):
            return self.getToken(MySqlParser.INTO, 0)

        def PARTITION(self):
            return self.getToken(MySqlParser.PARTITION, 0)

        def LR_BRACKET(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.LR_BRACKET)
            else:
                return self.getToken(MySqlParser.LR_BRACKET, i)

        def RR_BRACKET(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.RR_BRACKET)
            else:
                return self.getToken(MySqlParser.RR_BRACKET, i)

        def updatedElement(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UpdatedElementContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UpdatedElementContext,i)


        def ON(self):
            return self.getToken(MySqlParser.ON, 0)

        def DUPLICATE(self):
            return self.getToken(MySqlParser.DUPLICATE, 0)

        def KEY(self):
            return self.getToken(MySqlParser.KEY, 0)

        def UPDATE(self):
            return self.getToken(MySqlParser.UPDATE, 0)

        def LOW_PRIORITY(self):
            return self.getToken(MySqlParser.LOW_PRIORITY, 0)

        def DELAYED(self):
            return self.getToken(MySqlParser.DELAYED, 0)

        def HIGH_PRIORITY(self):
            return self.getToken(MySqlParser.HIGH_PRIORITY, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def uidList(self):
            return self.getTypedRuleContext(MySqlParser.UidListContext,0)


        def AS(self):
            return self.getToken(MySqlParser.AS, 0)

        def fullColumnNameList(self):
            return self.getTypedRuleContext(MySqlParser.FullColumnNameListContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_insertStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterInsertStatement" ):
                listener.enterInsertStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitInsertStatement" ):
                listener.exitInsertStatement(self)




    def insertStatement(self):

        localctx = MySqlParser.InsertStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 192, self.RULE_insertStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3184
            self.match(MySqlParser.INSERT)
            self.state = 3186
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if ((((_la - 43)) & ~0x3f) == 0 and ((1 << (_la - 43)) & -9223372032559808511) != 0):
                self.state = 3185
                localctx.priority = self._input.LT(1)
                _la = self._input.LA(1)
                if not(((((_la - 43)) & ~0x3f) == 0 and ((1 << (_la - 43)) & -9223372032559808511) != 0)):
                    localctx.priority = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 3189
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==78:
                self.state = 3188
                self.match(MySqlParser.IGNORE)


            self.state = 3192
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==87:
                self.state = 3191
                self.match(MySqlParser.INTO)


            self.state = 3194
            self.tableName()
            self.state = 3201
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==129:
                self.state = 3195
                self.match(MySqlParser.PARTITION)
                self.state = 3196
                self.match(MySqlParser.LR_BRACKET)
                self.state = 3198
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513122304) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055071174737) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                    self.state = 3197
                    localctx.partitions = self.uidList()


                self.state = 3200
                self.match(MySqlParser.RR_BRACKET)


            self.state = 3226
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [152, 188, 669, 1133]:
                self.state = 3208
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,421,self._ctx)
                if la_ == 1:
                    self.state = 3203
                    self.match(MySqlParser.LR_BRACKET)
                    self.state = 3205
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,420,self._ctx)
                    if la_ == 1:
                        self.state = 3204
                        localctx.columns = self.fullColumnNameList()


                    self.state = 3207
                    self.match(MySqlParser.RR_BRACKET)


                self.state = 3210
                self.insertStatementValue()
                self.state = 3215
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,423,self._ctx)
                if la_ == 1:
                    self.state = 3212
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==12:
                        self.state = 3211
                        self.match(MySqlParser.AS)


                    self.state = 3214
                    self.uid()


                pass
            elif token in [153]:
                self.state = 3217
                self.match(MySqlParser.SET)
                self.state = 3218
                localctx.setFirst = self.updatedElement()
                self.state = 3223
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 3219
                    self.match(MySqlParser.COMMA)
                    self.state = 3220
                    localctx._updatedElement = self.updatedElement()
                    localctx.setElements.append(localctx._updatedElement)
                    self.state = 3225
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            else:
                raise NoViableAltException(self)

            self.state = 3240
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==118:
                self.state = 3228
                self.match(MySqlParser.ON)
                self.state = 3229
                self.match(MySqlParser.DUPLICATE)
                self.state = 3230
                self.match(MySqlParser.KEY)
                self.state = 3231
                self.match(MySqlParser.UPDATE)
                self.state = 3232
                localctx.duplicatedFirst = self.updatedElement()
                self.state = 3237
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 3233
                    self.match(MySqlParser.COMMA)
                    self.state = 3234
                    localctx._updatedElement = self.updatedElement()
                    localctx.duplicatedElements.append(localctx._updatedElement)
                    self.state = 3239
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)



        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class LoadDataStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.priority = None # Token
            self.filename = None # Token
            self.violation = None # Token
            self.charset = None # CharsetNameContext
            self.fieldsFormat = None # Token
            self.linesFormat = None # Token

        def LOAD(self):
            return self.getToken(MySqlParser.LOAD, 0)

        def DATA(self):
            return self.getToken(MySqlParser.DATA, 0)

        def INFILE(self):
            return self.getToken(MySqlParser.INFILE, 0)

        def INTO(self):
            return self.getToken(MySqlParser.INTO, 0)

        def TABLE(self):
            return self.getToken(MySqlParser.TABLE, 0)

        def tableName(self):
            return self.getTypedRuleContext(MySqlParser.TableNameContext,0)


        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def LOCAL(self):
            return self.getToken(MySqlParser.LOCAL, 0)

        def PARTITION(self):
            return self.getToken(MySqlParser.PARTITION, 0)

        def LR_BRACKET(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.LR_BRACKET)
            else:
                return self.getToken(MySqlParser.LR_BRACKET, i)

        def uidList(self):
            return self.getTypedRuleContext(MySqlParser.UidListContext,0)


        def RR_BRACKET(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.RR_BRACKET)
            else:
                return self.getToken(MySqlParser.RR_BRACKET, i)

        def CHARACTER(self):
            return self.getToken(MySqlParser.CHARACTER, 0)

        def SET(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.SET)
            else:
                return self.getToken(MySqlParser.SET, i)

        def LINES(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.LINES)
            else:
                return self.getToken(MySqlParser.LINES, i)

        def IGNORE(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.IGNORE)
            else:
                return self.getToken(MySqlParser.IGNORE, i)

        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)


        def assignmentField(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.AssignmentFieldContext)
            else:
                return self.getTypedRuleContext(MySqlParser.AssignmentFieldContext,i)


        def updatedElement(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UpdatedElementContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UpdatedElementContext,i)


        def charsetName(self):
            return self.getTypedRuleContext(MySqlParser.CharsetNameContext,0)


        def LOW_PRIORITY(self):
            return self.getToken(MySqlParser.LOW_PRIORITY, 0)

        def CONCURRENT(self):
            return self.getToken(MySqlParser.CONCURRENT, 0)

        def REPLACE(self):
            return self.getToken(MySqlParser.REPLACE, 0)

        def FIELDS(self):
            return self.getToken(MySqlParser.FIELDS, 0)

        def COLUMNS(self):
            return self.getToken(MySqlParser.COLUMNS, 0)

        def ROWS(self):
            return self.getToken(MySqlParser.ROWS, 0)

        def selectFieldsInto(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.SelectFieldsIntoContext)
            else:
                return self.getTypedRuleContext(MySqlParser.SelectFieldsIntoContext,i)


        def selectLinesInto(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.SelectLinesIntoContext)
            else:
                return self.getTypedRuleContext(MySqlParser.SelectLinesIntoContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_loadDataStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLoadDataStatement" ):
                listener.enterLoadDataStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLoadDataStatement" ):
                listener.exitLoadDataStatement(self)




    def loadDataStatement(self):

        localctx = MySqlParser.LoadDataStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 194, self.RULE_loadDataStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3242
            self.match(MySqlParser.LOAD)
            self.state = 3243
            self.match(MySqlParser.DATA)
            self.state = 3245
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==106 or _la==374:
                self.state = 3244
                localctx.priority = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==106 or _la==374):
                    localctx.priority = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 3248
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==474:
                self.state = 3247
                self.match(MySqlParser.LOCAL)


            self.state = 3250
            self.match(MySqlParser.INFILE)
            self.state = 3251
            localctx.filename = self.match(MySqlParser.STRING_LITERAL)
            self.state = 3253
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==78 or _la==141:
                self.state = 3252
                localctx.violation = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==78 or _la==141):
                    localctx.violation = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 3255
            self.match(MySqlParser.INTO)
            self.state = 3256
            self.match(MySqlParser.TABLE)
            self.state = 3257
            self.tableName()
            self.state = 3263
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==129:
                self.state = 3258
                self.match(MySqlParser.PARTITION)
                self.state = 3259
                self.match(MySqlParser.LR_BRACKET)
                self.state = 3260
                self.uidList()
                self.state = 3261
                self.match(MySqlParser.RR_BRACKET)


            self.state = 3268
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==25:
                self.state = 3265
                self.match(MySqlParser.CHARACTER)
                self.state = 3266
                self.match(MySqlParser.SET)
                self.state = 3267
                localctx.charset = self.charsetName()


            self.state = 3276
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==365 or _la==427:
                self.state = 3270
                localctx.fieldsFormat = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==365 or _la==427):
                    localctx.fieldsFormat = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 3272 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 3271
                    self.selectFieldsInto()
                    self.state = 3274 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==56 or _la==58 or _la==122 or _la==173):
                        break



            self.state = 3284
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==101:
                self.state = 3278
                self.match(MySqlParser.LINES)
                self.state = 3280 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 3279
                    self.selectLinesInto()
                    self.state = 3282 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==169 or _la==173):
                        break



            self.state = 3290
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==78:
                self.state = 3286
                self.match(MySqlParser.IGNORE)
                self.state = 3287
                self.decimalLiteral()
                self.state = 3288
                localctx.linesFormat = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==101 or _la==601):
                    localctx.linesFormat = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 3303
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,439,self._ctx)
            if la_ == 1:
                self.state = 3292
                self.match(MySqlParser.LR_BRACKET)
                self.state = 3293
                self.assignmentField()
                self.state = 3298
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 3294
                    self.match(MySqlParser.COMMA)
                    self.state = 3295
                    self.assignmentField()
                    self.state = 3300
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 3301
                self.match(MySqlParser.RR_BRACKET)


            self.state = 3314
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,441,self._ctx)
            if la_ == 1:
                self.state = 3305
                self.match(MySqlParser.SET)
                self.state = 3306
                self.updatedElement()
                self.state = 3311
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 3307
                    self.match(MySqlParser.COMMA)
                    self.state = 3308
                    self.updatedElement()
                    self.state = 3313
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)



        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class LoadXmlStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.priority = None # Token
            self.filename = None # Token
            self.violation = None # Token
            self.charset = None # CharsetNameContext
            self.tag = None # Token
            self.linesFormat = None # Token

        def LOAD(self):
            return self.getToken(MySqlParser.LOAD, 0)

        def XML(self):
            return self.getToken(MySqlParser.XML, 0)

        def INFILE(self):
            return self.getToken(MySqlParser.INFILE, 0)

        def INTO(self):
            return self.getToken(MySqlParser.INTO, 0)

        def TABLE(self):
            return self.getToken(MySqlParser.TABLE, 0)

        def tableName(self):
            return self.getTypedRuleContext(MySqlParser.TableNameContext,0)


        def STRING_LITERAL(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.STRING_LITERAL)
            else:
                return self.getToken(MySqlParser.STRING_LITERAL, i)

        def LOCAL(self):
            return self.getToken(MySqlParser.LOCAL, 0)

        def CHARACTER(self):
            return self.getToken(MySqlParser.CHARACTER, 0)

        def SET(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.SET)
            else:
                return self.getToken(MySqlParser.SET, i)

        def ROWS(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.ROWS)
            else:
                return self.getToken(MySqlParser.ROWS, i)

        def IDENTIFIED(self):
            return self.getToken(MySqlParser.IDENTIFIED, 0)

        def BY(self):
            return self.getToken(MySqlParser.BY, 0)

        def LESS_SYMBOL(self):
            return self.getToken(MySqlParser.LESS_SYMBOL, 0)

        def GREATER_SYMBOL(self):
            return self.getToken(MySqlParser.GREATER_SYMBOL, 0)

        def IGNORE(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.IGNORE)
            else:
                return self.getToken(MySqlParser.IGNORE, i)

        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)


        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def assignmentField(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.AssignmentFieldContext)
            else:
                return self.getTypedRuleContext(MySqlParser.AssignmentFieldContext,i)


        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def updatedElement(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UpdatedElementContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UpdatedElementContext,i)


        def charsetName(self):
            return self.getTypedRuleContext(MySqlParser.CharsetNameContext,0)


        def LOW_PRIORITY(self):
            return self.getToken(MySqlParser.LOW_PRIORITY, 0)

        def CONCURRENT(self):
            return self.getToken(MySqlParser.CONCURRENT, 0)

        def REPLACE(self):
            return self.getToken(MySqlParser.REPLACE, 0)

        def LINES(self):
            return self.getToken(MySqlParser.LINES, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_loadXmlStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLoadXmlStatement" ):
                listener.enterLoadXmlStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLoadXmlStatement" ):
                listener.exitLoadXmlStatement(self)




    def loadXmlStatement(self):

        localctx = MySqlParser.LoadXmlStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 196, self.RULE_loadXmlStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3316
            self.match(MySqlParser.LOAD)
            self.state = 3317
            self.match(MySqlParser.XML)
            self.state = 3319
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==106 or _la==374:
                self.state = 3318
                localctx.priority = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==106 or _la==374):
                    localctx.priority = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 3322
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==474:
                self.state = 3321
                self.match(MySqlParser.LOCAL)


            self.state = 3324
            self.match(MySqlParser.INFILE)
            self.state = 3325
            localctx.filename = self.match(MySqlParser.STRING_LITERAL)
            self.state = 3327
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==78 or _la==141:
                self.state = 3326
                localctx.violation = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==78 or _la==141):
                    localctx.violation = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 3329
            self.match(MySqlParser.INTO)
            self.state = 3330
            self.match(MySqlParser.TABLE)
            self.state = 3331
            self.tableName()
            self.state = 3335
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==25:
                self.state = 3332
                self.match(MySqlParser.CHARACTER)
                self.state = 3333
                self.match(MySqlParser.SET)
                self.state = 3334
                localctx.charset = self.charsetName()


            self.state = 3343
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==601:
                self.state = 3337
                self.match(MySqlParser.ROWS)
                self.state = 3338
                self.match(MySqlParser.IDENTIFIED)
                self.state = 3339
                self.match(MySqlParser.BY)
                self.state = 3340
                self.match(MySqlParser.LESS_SYMBOL)
                self.state = 3341
                localctx.tag = self.match(MySqlParser.STRING_LITERAL)
                self.state = 3342
                self.match(MySqlParser.GREATER_SYMBOL)


            self.state = 3349
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==78:
                self.state = 3345
                self.match(MySqlParser.IGNORE)
                self.state = 3346
                self.decimalLiteral()
                self.state = 3347
                localctx.linesFormat = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==101 or _la==601):
                    localctx.linesFormat = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 3362
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,449,self._ctx)
            if la_ == 1:
                self.state = 3351
                self.match(MySqlParser.LR_BRACKET)
                self.state = 3352
                self.assignmentField()
                self.state = 3357
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 3353
                    self.match(MySqlParser.COMMA)
                    self.state = 3354
                    self.assignmentField()
                    self.state = 3359
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 3360
                self.match(MySqlParser.RR_BRACKET)


            self.state = 3373
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,451,self._ctx)
            if la_ == 1:
                self.state = 3364
                self.match(MySqlParser.SET)
                self.state = 3365
                self.updatedElement()
                self.state = 3370
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 3366
                    self.match(MySqlParser.COMMA)
                    self.state = 3367
                    self.updatedElement()
                    self.state = 3372
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)



        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ReplaceStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.priority = None # Token
            self.partitions = None # UidListContext
            self.columns = None # UidListContext
            self.setFirst = None # UpdatedElementContext
            self._updatedElement = None # UpdatedElementContext
            self.setElements = list() # of UpdatedElementContexts

        def REPLACE(self):
            return self.getToken(MySqlParser.REPLACE, 0)

        def tableName(self):
            return self.getTypedRuleContext(MySqlParser.TableNameContext,0)


        def insertStatementValue(self):
            return self.getTypedRuleContext(MySqlParser.InsertStatementValueContext,0)


        def SET(self):
            return self.getToken(MySqlParser.SET, 0)

        def INTO(self):
            return self.getToken(MySqlParser.INTO, 0)

        def PARTITION(self):
            return self.getToken(MySqlParser.PARTITION, 0)

        def LR_BRACKET(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.LR_BRACKET)
            else:
                return self.getToken(MySqlParser.LR_BRACKET, i)

        def RR_BRACKET(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.RR_BRACKET)
            else:
                return self.getToken(MySqlParser.RR_BRACKET, i)

        def updatedElement(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UpdatedElementContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UpdatedElementContext,i)


        def uidList(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UidListContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UidListContext,i)


        def LOW_PRIORITY(self):
            return self.getToken(MySqlParser.LOW_PRIORITY, 0)

        def DELAYED(self):
            return self.getToken(MySqlParser.DELAYED, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_replaceStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterReplaceStatement" ):
                listener.enterReplaceStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitReplaceStatement" ):
                listener.exitReplaceStatement(self)




    def replaceStatement(self):

        localctx = MySqlParser.ReplaceStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 198, self.RULE_replaceStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3375
            self.match(MySqlParser.REPLACE)
            self.state = 3377
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==43 or _la==106:
                self.state = 3376
                localctx.priority = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==43 or _la==106):
                    localctx.priority = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 3380
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==87:
                self.state = 3379
                self.match(MySqlParser.INTO)


            self.state = 3382
            self.tableName()
            self.state = 3388
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==129:
                self.state = 3383
                self.match(MySqlParser.PARTITION)
                self.state = 3384
                self.match(MySqlParser.LR_BRACKET)
                self.state = 3385
                localctx.partitions = self.uidList()
                self.state = 3386
                self.match(MySqlParser.RR_BRACKET)


            self.state = 3406
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [152, 188, 669, 1133]:
                self.state = 3394
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,455,self._ctx)
                if la_ == 1:
                    self.state = 3390
                    self.match(MySqlParser.LR_BRACKET)
                    self.state = 3391
                    localctx.columns = self.uidList()
                    self.state = 3392
                    self.match(MySqlParser.RR_BRACKET)


                self.state = 3396
                self.insertStatementValue()
                pass
            elif token in [153]:
                self.state = 3397
                self.match(MySqlParser.SET)
                self.state = 3398
                localctx.setFirst = self.updatedElement()
                self.state = 3403
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 3399
                    self.match(MySqlParser.COMMA)
                    self.state = 3400
                    localctx._updatedElement = self.updatedElement()
                    localctx.setElements.append(localctx._updatedElement)
                    self.state = 3405
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class SelectStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_selectStatement

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class UnionSelectContext(SelectStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SelectStatementContext
            super().__init__(parser)
            self.unionType = None # Token
            self.copyFrom(ctx)

        def querySpecificationNointo(self):
            return self.getTypedRuleContext(MySqlParser.QuerySpecificationNointoContext,0)

        def queryExpressionNointo(self):
            return self.getTypedRuleContext(MySqlParser.QueryExpressionNointoContext,0)

        def unionStatement(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UnionStatementContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UnionStatementContext,i)

        def UNION(self):
            return self.getToken(MySqlParser.UNION, 0)
        def orderByClause(self):
            return self.getTypedRuleContext(MySqlParser.OrderByClauseContext,0)

        def limitClause(self):
            return self.getTypedRuleContext(MySqlParser.LimitClauseContext,0)

        def lockClause(self):
            return self.getTypedRuleContext(MySqlParser.LockClauseContext,0)

        def querySpecification(self):
            return self.getTypedRuleContext(MySqlParser.QuerySpecificationContext,0)

        def queryExpression(self):
            return self.getTypedRuleContext(MySqlParser.QueryExpressionContext,0)

        def ALL(self):
            return self.getToken(MySqlParser.ALL, 0)
        def DISTINCT(self):
            return self.getToken(MySqlParser.DISTINCT, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUnionSelect" ):
                listener.enterUnionSelect(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUnionSelect" ):
                listener.exitUnionSelect(self)


    class UnionParenthesisSelectContext(SelectStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SelectStatementContext
            super().__init__(parser)
            self.unionType = None # Token
            self.copyFrom(ctx)

        def queryExpressionNointo(self):
            return self.getTypedRuleContext(MySqlParser.QueryExpressionNointoContext,0)

        def unionParenthesis(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UnionParenthesisContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UnionParenthesisContext,i)

        def UNION(self):
            return self.getToken(MySqlParser.UNION, 0)
        def queryExpression(self):
            return self.getTypedRuleContext(MySqlParser.QueryExpressionContext,0)

        def orderByClause(self):
            return self.getTypedRuleContext(MySqlParser.OrderByClauseContext,0)

        def limitClause(self):
            return self.getTypedRuleContext(MySqlParser.LimitClauseContext,0)

        def lockClause(self):
            return self.getTypedRuleContext(MySqlParser.LockClauseContext,0)

        def ALL(self):
            return self.getToken(MySqlParser.ALL, 0)
        def DISTINCT(self):
            return self.getToken(MySqlParser.DISTINCT, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUnionParenthesisSelect" ):
                listener.enterUnionParenthesisSelect(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUnionParenthesisSelect" ):
                listener.exitUnionParenthesisSelect(self)


    class SimpleSelectContext(SelectStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SelectStatementContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def querySpecification(self):
            return self.getTypedRuleContext(MySqlParser.QuerySpecificationContext,0)

        def lockClause(self):
            return self.getTypedRuleContext(MySqlParser.LockClauseContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSimpleSelect" ):
                listener.enterSimpleSelect(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSimpleSelect" ):
                listener.exitSimpleSelect(self)


    class ParenthesisSelectContext(SelectStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SelectStatementContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def queryExpression(self):
            return self.getTypedRuleContext(MySqlParser.QueryExpressionContext,0)

        def lockClause(self):
            return self.getTypedRuleContext(MySqlParser.LockClauseContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterParenthesisSelect" ):
                listener.enterParenthesisSelect(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitParenthesisSelect" ):
                listener.exitParenthesisSelect(self)


    class WithLateralStatementContext(SelectStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SelectStatementContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def querySpecificationNointo(self):
            return self.getTypedRuleContext(MySqlParser.QuerySpecificationNointoContext,0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)
        def lateralStatement(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.LateralStatementContext)
            else:
                return self.getTypedRuleContext(MySqlParser.LateralStatementContext,i)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterWithLateralStatement" ):
                listener.enterWithLateralStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitWithLateralStatement" ):
                listener.exitWithLateralStatement(self)



    def selectStatement(self):

        localctx = MySqlParser.SelectStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 200, self.RULE_selectStatement)
        self._la = 0 # Token type
        try:
            self.state = 3473
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,475,self._ctx)
            if la_ == 1:
                localctx = MySqlParser.SimpleSelectContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 3408
                self.querySpecification()
                self.state = 3410
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,458,self._ctx)
                if la_ == 1:
                    self.state = 3409
                    self.lockClause()


                pass

            elif la_ == 2:
                localctx = MySqlParser.ParenthesisSelectContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 3412
                self.queryExpression()
                self.state = 3414
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,459,self._ctx)
                if la_ == 1:
                    self.state = 3413
                    self.lockClause()


                pass

            elif la_ == 3:
                localctx = MySqlParser.UnionSelectContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 3418
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [152]:
                    self.state = 3416
                    self.querySpecificationNointo()
                    pass
                elif token in [1133]:
                    self.state = 3417
                    self.queryExpressionNointo()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 3421 
                self._errHandler.sync(self)
                _alt = 1
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt == 1:
                        self.state = 3420
                        self.unionStatement()

                    else:
                        raise NoViableAltException(self)
                    self.state = 3423 
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,461,self._ctx)

                self.state = 3433
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==180:
                    self.state = 3425
                    self.match(MySqlParser.UNION)
                    self.state = 3427
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==6 or _la==49:
                        self.state = 3426
                        localctx.unionType = self._input.LT(1)
                        _la = self._input.LA(1)
                        if not(_la==6 or _la==49):
                            localctx.unionType = self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()


                    self.state = 3431
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [152]:
                        self.state = 3429
                        self.querySpecification()
                        pass
                    elif token in [1133]:
                        self.state = 3430
                        self.queryExpression()
                        pass
                    else:
                        raise NoViableAltException(self)



                self.state = 3436
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,465,self._ctx)
                if la_ == 1:
                    self.state = 3435
                    self.orderByClause()


                self.state = 3439
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==99:
                    self.state = 3438
                    self.limitClause()


                self.state = 3442
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,467,self._ctx)
                if la_ == 1:
                    self.state = 3441
                    self.lockClause()


                pass

            elif la_ == 4:
                localctx = MySqlParser.UnionParenthesisSelectContext(self, localctx)
                self.enterOuterAlt(localctx, 4)
                self.state = 3444
                self.queryExpressionNointo()
                self.state = 3446 
                self._errHandler.sync(self)
                _alt = 1
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt == 1:
                        self.state = 3445
                        self.unionParenthesis()

                    else:
                        raise NoViableAltException(self)
                    self.state = 3448 
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,468,self._ctx)

                self.state = 3455
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==180:
                    self.state = 3450
                    self.match(MySqlParser.UNION)
                    self.state = 3452
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==6 or _la==49:
                        self.state = 3451
                        localctx.unionType = self._input.LT(1)
                        _la = self._input.LA(1)
                        if not(_la==6 or _la==49):
                            localctx.unionType = self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()


                    self.state = 3454
                    self.queryExpression()


                self.state = 3458
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,471,self._ctx)
                if la_ == 1:
                    self.state = 3457
                    self.orderByClause()


                self.state = 3461
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==99:
                    self.state = 3460
                    self.limitClause()


                self.state = 3464
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,473,self._ctx)
                if la_ == 1:
                    self.state = 3463
                    self.lockClause()


                pass

            elif la_ == 5:
                localctx = MySqlParser.WithLateralStatementContext(self, localctx)
                self.enterOuterAlt(localctx, 5)
                self.state = 3466
                self.querySpecificationNointo()
                self.state = 3469 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 3467
                    self.match(MySqlParser.COMMA)
                    self.state = 3468
                    self.lateralStatement()
                    self.state = 3471 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==1135):
                        break

                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class UpdateStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def singleUpdateStatement(self):
            return self.getTypedRuleContext(MySqlParser.SingleUpdateStatementContext,0)


        def multipleUpdateStatement(self):
            return self.getTypedRuleContext(MySqlParser.MultipleUpdateStatementContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_updateStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUpdateStatement" ):
                listener.enterUpdateStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUpdateStatement" ):
                listener.exitUpdateStatement(self)




    def updateStatement(self):

        localctx = MySqlParser.UpdateStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 202, self.RULE_updateStatement)
        try:
            self.state = 3477
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,476,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 3475
                self.singleUpdateStatement()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 3476
                self.multipleUpdateStatement()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ValuesStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def VALUES(self):
            return self.getToken(MySqlParser.VALUES, 0)

        def LR_BRACKET(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.LR_BRACKET)
            else:
                return self.getToken(MySqlParser.LR_BRACKET, i)

        def RR_BRACKET(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.RR_BRACKET)
            else:
                return self.getToken(MySqlParser.RR_BRACKET, i)

        def expressionsWithDefaults(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ExpressionsWithDefaultsContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ExpressionsWithDefaultsContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_valuesStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterValuesStatement" ):
                listener.enterValuesStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitValuesStatement" ):
                listener.exitValuesStatement(self)




    def valuesStatement(self):

        localctx = MySqlParser.ValuesStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 204, self.RULE_valuesStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3479
            self.match(MySqlParser.VALUES)
            self.state = 3480
            self.match(MySqlParser.LR_BRACKET)
            self.state = 3482
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,477,self._ctx)
            if la_ == 1:
                self.state = 3481
                self.expressionsWithDefaults()


            self.state = 3484
            self.match(MySqlParser.RR_BRACKET)
            self.state = 3493
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 3485
                self.match(MySqlParser.COMMA)
                self.state = 3486
                self.match(MySqlParser.LR_BRACKET)
                self.state = 3488
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,478,self._ctx)
                if la_ == 1:
                    self.state = 3487
                    self.expressionsWithDefaults()


                self.state = 3490
                self.match(MySqlParser.RR_BRACKET)
                self.state = 3495
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class InsertStatementValueContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.insertFormat = None # Token

        def selectStatement(self):
            return self.getTypedRuleContext(MySqlParser.SelectStatementContext,0)


        def LR_BRACKET(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.LR_BRACKET)
            else:
                return self.getToken(MySqlParser.LR_BRACKET, i)

        def RR_BRACKET(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.RR_BRACKET)
            else:
                return self.getToken(MySqlParser.RR_BRACKET, i)

        def VALUES(self):
            return self.getToken(MySqlParser.VALUES, 0)

        def VALUE(self):
            return self.getToken(MySqlParser.VALUE, 0)

        def expressionsWithDefaults(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ExpressionsWithDefaultsContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ExpressionsWithDefaultsContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_insertStatementValue

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterInsertStatementValue" ):
                listener.enterInsertStatementValue(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitInsertStatementValue" ):
                listener.exitInsertStatementValue(self)




    def insertStatementValue(self):

        localctx = MySqlParser.InsertStatementValueContext(self, self._ctx, self.state)
        self.enterRule(localctx, 206, self.RULE_insertStatementValue)
        self._la = 0 # Token type
        try:
            self.state = 3514
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [152, 1133]:
                self.enterOuterAlt(localctx, 1)
                self.state = 3496
                self.selectStatement()
                pass
            elif token in [188, 669]:
                self.enterOuterAlt(localctx, 2)
                self.state = 3497
                localctx.insertFormat = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==188 or _la==669):
                    localctx.insertFormat = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 3498
                self.match(MySqlParser.LR_BRACKET)
                self.state = 3500
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,480,self._ctx)
                if la_ == 1:
                    self.state = 3499
                    self.expressionsWithDefaults()


                self.state = 3502
                self.match(MySqlParser.RR_BRACKET)
                self.state = 3511
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 3503
                    self.match(MySqlParser.COMMA)
                    self.state = 3504
                    self.match(MySqlParser.LR_BRACKET)
                    self.state = 3506
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,481,self._ctx)
                    if la_ == 1:
                        self.state = 3505
                        self.expressionsWithDefaults()


                    self.state = 3508
                    self.match(MySqlParser.RR_BRACKET)
                    self.state = 3513
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class UpdatedElementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def fullColumnName(self):
            return self.getTypedRuleContext(MySqlParser.FullColumnNameContext,0)


        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_updatedElement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUpdatedElement" ):
                listener.enterUpdatedElement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUpdatedElement" ):
                listener.exitUpdatedElement(self)




    def updatedElement(self):

        localctx = MySqlParser.UpdatedElementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 208, self.RULE_updatedElement)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3516
            self.fullColumnName()
            self.state = 3517
            self.match(MySqlParser.EQUAL_SYMBOL)
            self.state = 3520
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,484,self._ctx)
            if la_ == 1:
                self.state = 3518
                self.expression(0)
                pass

            elif la_ == 2:
                self.state = 3519
                self.match(MySqlParser.DEFAULT)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class AssignmentFieldContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def LOCAL_ID(self):
            return self.getToken(MySqlParser.LOCAL_ID, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_assignmentField

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAssignmentField" ):
                listener.enterAssignmentField(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAssignmentField" ):
                listener.exitAssignmentField(self)




    def assignmentField(self):

        localctx = MySqlParser.AssignmentFieldContext(self, self._ctx, self.state)
        self.enterRule(localctx, 210, self.RULE_assignmentField)
        try:
            self.state = 3524
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [11, 14, 18, 29, 35, 37, 39, 42, 48, 55, 57, 59, 73, 77, 79, 85, 94, 97, 117, 121, 124, 130, 140, 141, 148, 150, 158, 168, 217, 218, 219, 220, 221, 226, 234, 237, 239, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 405, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 523, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 677, 678, 679, 680, 681, 682, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 717, 718, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1123, 1145, 1148, 1156]:
                self.enterOuterAlt(localctx, 1)
                self.state = 3522
                self.uid()
                pass
            elif token in [1159]:
                self.enterOuterAlt(localctx, 2)
                self.state = 3523
                self.match(MySqlParser.LOCAL_ID)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class LockClauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FOR(self):
            return self.getToken(MySqlParser.FOR, 0)

        def UPDATE(self):
            return self.getToken(MySqlParser.UPDATE, 0)

        def LOCK(self):
            return self.getToken(MySqlParser.LOCK, 0)

        def IN(self):
            return self.getToken(MySqlParser.IN, 0)

        def SHARE(self):
            return self.getToken(MySqlParser.SHARE, 0)

        def MODE(self):
            return self.getToken(MySqlParser.MODE, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_lockClause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLockClause" ):
                listener.enterLockClause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLockClause" ):
                listener.exitLockClause(self)




    def lockClause(self):

        localctx = MySqlParser.LockClauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 212, self.RULE_lockClause)
        try:
            self.state = 3532
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [65]:
                self.enterOuterAlt(localctx, 1)
                self.state = 3526
                self.match(MySqlParser.FOR)
                self.state = 3527
                self.match(MySqlParser.UPDATE)
                pass
            elif token in [103]:
                self.enterOuterAlt(localctx, 2)
                self.state = 3528
                self.match(MySqlParser.LOCK)
                self.state = 3529
                self.match(MySqlParser.IN)
                self.state = 3530
                self.match(MySqlParser.SHARE)
                self.state = 3531
                self.match(MySqlParser.MODE)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class SingleDeleteStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.priority = None # Token

        def DELETE(self):
            return self.getToken(MySqlParser.DELETE, 0)

        def FROM(self):
            return self.getToken(MySqlParser.FROM, 0)

        def tableName(self):
            return self.getTypedRuleContext(MySqlParser.TableNameContext,0)


        def QUICK(self):
            return self.getToken(MySqlParser.QUICK, 0)

        def IGNORE(self):
            return self.getToken(MySqlParser.IGNORE, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def PARTITION(self):
            return self.getToken(MySqlParser.PARTITION, 0)

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def uidList(self):
            return self.getTypedRuleContext(MySqlParser.UidListContext,0)


        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def WHERE(self):
            return self.getToken(MySqlParser.WHERE, 0)

        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def orderByClause(self):
            return self.getTypedRuleContext(MySqlParser.OrderByClauseContext,0)


        def LIMIT(self):
            return self.getToken(MySqlParser.LIMIT, 0)

        def limitClauseAtom(self):
            return self.getTypedRuleContext(MySqlParser.LimitClauseAtomContext,0)


        def LOW_PRIORITY(self):
            return self.getToken(MySqlParser.LOW_PRIORITY, 0)

        def AS(self):
            return self.getToken(MySqlParser.AS, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_singleDeleteStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSingleDeleteStatement" ):
                listener.enterSingleDeleteStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSingleDeleteStatement" ):
                listener.exitSingleDeleteStatement(self)




    def singleDeleteStatement(self):

        localctx = MySqlParser.SingleDeleteStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 214, self.RULE_singleDeleteStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3534
            self.match(MySqlParser.DELETE)
            self.state = 3536
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==106:
                self.state = 3535
                localctx.priority = self.match(MySqlParser.LOW_PRIORITY)


            self.state = 3539
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==568:
                self.state = 3538
                self.match(MySqlParser.QUICK)


            self.state = 3542
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==78:
                self.state = 3541
                self.match(MySqlParser.IGNORE)


            self.state = 3544
            self.match(MySqlParser.FROM)
            self.state = 3545
            self.tableName()
            self.state = 3550
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,491,self._ctx)
            if la_ == 1:
                self.state = 3547
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==12:
                    self.state = 3546
                    self.match(MySqlParser.AS)


                self.state = 3549
                self.uid()


            self.state = 3557
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==129:
                self.state = 3552
                self.match(MySqlParser.PARTITION)
                self.state = 3553
                self.match(MySqlParser.LR_BRACKET)
                self.state = 3554
                self.uidList()
                self.state = 3555
                self.match(MySqlParser.RR_BRACKET)


            self.state = 3561
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==190:
                self.state = 3559
                self.match(MySqlParser.WHERE)
                self.state = 3560
                self.expression(0)


            self.state = 3564
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==124:
                self.state = 3563
                self.orderByClause()


            self.state = 3568
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==99:
                self.state = 3566
                self.match(MySqlParser.LIMIT)
                self.state = 3567
                self.limitClauseAtom()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class MultipleDeleteStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.priority = None # Token

        def DELETE(self):
            return self.getToken(MySqlParser.DELETE, 0)

        def tableName(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.TableNameContext)
            else:
                return self.getTypedRuleContext(MySqlParser.TableNameContext,i)


        def FROM(self):
            return self.getToken(MySqlParser.FROM, 0)

        def tableSources(self):
            return self.getTypedRuleContext(MySqlParser.TableSourcesContext,0)


        def USING(self):
            return self.getToken(MySqlParser.USING, 0)

        def QUICK(self):
            return self.getToken(MySqlParser.QUICK, 0)

        def IGNORE(self):
            return self.getToken(MySqlParser.IGNORE, 0)

        def WHERE(self):
            return self.getToken(MySqlParser.WHERE, 0)

        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def LOW_PRIORITY(self):
            return self.getToken(MySqlParser.LOW_PRIORITY, 0)

        def DOT(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.DOT)
            else:
                return self.getToken(MySqlParser.DOT, i)

        def STAR(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.STAR)
            else:
                return self.getToken(MySqlParser.STAR, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_multipleDeleteStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMultipleDeleteStatement" ):
                listener.enterMultipleDeleteStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMultipleDeleteStatement" ):
                listener.exitMultipleDeleteStatement(self)




    def multipleDeleteStatement(self):

        localctx = MySqlParser.MultipleDeleteStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 216, self.RULE_multipleDeleteStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3570
            self.match(MySqlParser.DELETE)
            self.state = 3572
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==106:
                self.state = 3571
                localctx.priority = self.match(MySqlParser.LOW_PRIORITY)


            self.state = 3575
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,497,self._ctx)
            if la_ == 1:
                self.state = 3574
                self.match(MySqlParser.QUICK)


            self.state = 3578
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==78:
                self.state = 3577
                self.match(MySqlParser.IGNORE)


            self.state = 3619
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [11, 14, 18, 29, 35, 37, 39, 42, 48, 55, 57, 59, 73, 77, 79, 85, 94, 97, 117, 121, 124, 130, 140, 141, 148, 150, 158, 168, 217, 218, 219, 220, 221, 226, 234, 237, 239, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 405, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 523, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 677, 678, 679, 680, 681, 682, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 717, 718, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1123, 1145, 1148, 1156]:
                self.state = 3580
                self.tableName()
                self.state = 3583
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1132:
                    self.state = 3581
                    self.match(MySqlParser.DOT)
                    self.state = 3582
                    self.match(MySqlParser.STAR)


                self.state = 3593
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 3585
                    self.match(MySqlParser.COMMA)
                    self.state = 3586
                    self.tableName()
                    self.state = 3589
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==1132:
                        self.state = 3587
                        self.match(MySqlParser.DOT)
                        self.state = 3588
                        self.match(MySqlParser.STAR)


                    self.state = 3595
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 3596
                self.match(MySqlParser.FROM)
                self.state = 3597
                self.tableSources()
                pass
            elif token in [68]:
                self.state = 3599
                self.match(MySqlParser.FROM)
                self.state = 3600
                self.tableName()
                self.state = 3603
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1132:
                    self.state = 3601
                    self.match(MySqlParser.DOT)
                    self.state = 3602
                    self.match(MySqlParser.STAR)


                self.state = 3613
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 3605
                    self.match(MySqlParser.COMMA)
                    self.state = 3606
                    self.tableName()
                    self.state = 3609
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==1132:
                        self.state = 3607
                        self.match(MySqlParser.DOT)
                        self.state = 3608
                        self.match(MySqlParser.STAR)


                    self.state = 3615
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 3616
                self.match(MySqlParser.USING)
                self.state = 3617
                self.tableSources()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 3623
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==190:
                self.state = 3621
                self.match(MySqlParser.WHERE)
                self.state = 3622
                self.expression(0)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class HandlerOpenStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def HANDLER(self):
            return self.getToken(MySqlParser.HANDLER, 0)

        def tableName(self):
            return self.getTypedRuleContext(MySqlParser.TableNameContext,0)


        def OPEN(self):
            return self.getToken(MySqlParser.OPEN, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def AS(self):
            return self.getToken(MySqlParser.AS, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_handlerOpenStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHandlerOpenStatement" ):
                listener.enterHandlerOpenStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHandlerOpenStatement" ):
                listener.exitHandlerOpenStatement(self)




    def handlerOpenStatement(self):

        localctx = MySqlParser.HandlerOpenStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 218, self.RULE_handlerOpenStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3625
            self.match(MySqlParser.HANDLER)
            self.state = 3626
            self.tableName()
            self.state = 3627
            self.match(MySqlParser.OPEN)
            self.state = 3632
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,508,self._ctx)
            if la_ == 1:
                self.state = 3629
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==12:
                    self.state = 3628
                    self.match(MySqlParser.AS)


                self.state = 3631
                self.uid()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class HandlerReadIndexStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.index = None # UidContext
            self.moveOrder = None # Token

        def HANDLER(self):
            return self.getToken(MySqlParser.HANDLER, 0)

        def tableName(self):
            return self.getTypedRuleContext(MySqlParser.TableNameContext,0)


        def READ(self):
            return self.getToken(MySqlParser.READ, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def comparisonOperator(self):
            return self.getTypedRuleContext(MySqlParser.ComparisonOperatorContext,0)


        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def constants(self):
            return self.getTypedRuleContext(MySqlParser.ConstantsContext,0)


        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def WHERE(self):
            return self.getToken(MySqlParser.WHERE, 0)

        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def LIMIT(self):
            return self.getToken(MySqlParser.LIMIT, 0)

        def limitClauseAtom(self):
            return self.getTypedRuleContext(MySqlParser.LimitClauseAtomContext,0)


        def FIRST(self):
            return self.getToken(MySqlParser.FIRST, 0)

        def NEXT(self):
            return self.getToken(MySqlParser.NEXT, 0)

        def PREV(self):
            return self.getToken(MySqlParser.PREV, 0)

        def LAST(self):
            return self.getToken(MySqlParser.LAST, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_handlerReadIndexStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHandlerReadIndexStatement" ):
                listener.enterHandlerReadIndexStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHandlerReadIndexStatement" ):
                listener.exitHandlerReadIndexStatement(self)




    def handlerReadIndexStatement(self):

        localctx = MySqlParser.HandlerReadIndexStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 220, self.RULE_handlerReadIndexStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3634
            self.match(MySqlParser.HANDLER)
            self.state = 3635
            self.tableName()
            self.state = 3636
            self.match(MySqlParser.READ)
            self.state = 3637
            localctx.index = self.uid()
            self.state = 3644
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1124, 1125, 1126, 1127]:
                self.state = 3638
                self.comparisonOperator()
                self.state = 3639
                self.match(MySqlParser.LR_BRACKET)
                self.state = 3640
                self.constants()
                self.state = 3641
                self.match(MySqlParser.RR_BRACKET)
                pass
            elif token in [430, 469, 520, 562]:
                self.state = 3643
                localctx.moveOrder = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==430 or _la==469 or _la==520 or _la==562):
                    localctx.moveOrder = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 3648
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==190:
                self.state = 3646
                self.match(MySqlParser.WHERE)
                self.state = 3647
                self.expression(0)


            self.state = 3652
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==99:
                self.state = 3650
                self.match(MySqlParser.LIMIT)
                self.state = 3651
                self.limitClauseAtom()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class HandlerReadStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.moveOrder = None # Token

        def HANDLER(self):
            return self.getToken(MySqlParser.HANDLER, 0)

        def tableName(self):
            return self.getTypedRuleContext(MySqlParser.TableNameContext,0)


        def READ(self):
            return self.getToken(MySqlParser.READ, 0)

        def FIRST(self):
            return self.getToken(MySqlParser.FIRST, 0)

        def NEXT(self):
            return self.getToken(MySqlParser.NEXT, 0)

        def WHERE(self):
            return self.getToken(MySqlParser.WHERE, 0)

        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def LIMIT(self):
            return self.getToken(MySqlParser.LIMIT, 0)

        def limitClauseAtom(self):
            return self.getTypedRuleContext(MySqlParser.LimitClauseAtomContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_handlerReadStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHandlerReadStatement" ):
                listener.enterHandlerReadStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHandlerReadStatement" ):
                listener.exitHandlerReadStatement(self)




    def handlerReadStatement(self):

        localctx = MySqlParser.HandlerReadStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 222, self.RULE_handlerReadStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3654
            self.match(MySqlParser.HANDLER)
            self.state = 3655
            self.tableName()
            self.state = 3656
            self.match(MySqlParser.READ)
            self.state = 3657
            localctx.moveOrder = self._input.LT(1)
            _la = self._input.LA(1)
            if not(_la==430 or _la==520):
                localctx.moveOrder = self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 3660
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==190:
                self.state = 3658
                self.match(MySqlParser.WHERE)
                self.state = 3659
                self.expression(0)


            self.state = 3664
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==99:
                self.state = 3662
                self.match(MySqlParser.LIMIT)
                self.state = 3663
                self.limitClauseAtom()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class HandlerCloseStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def HANDLER(self):
            return self.getToken(MySqlParser.HANDLER, 0)

        def tableName(self):
            return self.getTypedRuleContext(MySqlParser.TableNameContext,0)


        def CLOSE(self):
            return self.getToken(MySqlParser.CLOSE, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_handlerCloseStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHandlerCloseStatement" ):
                listener.enterHandlerCloseStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHandlerCloseStatement" ):
                listener.exitHandlerCloseStatement(self)




    def handlerCloseStatement(self):

        localctx = MySqlParser.HandlerCloseStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 224, self.RULE_handlerCloseStatement)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3666
            self.match(MySqlParser.HANDLER)
            self.state = 3667
            self.tableName()
            self.state = 3668
            self.match(MySqlParser.CLOSE)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class SingleUpdateStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.priority = None # Token

        def UPDATE(self):
            return self.getToken(MySqlParser.UPDATE, 0)

        def tableName(self):
            return self.getTypedRuleContext(MySqlParser.TableNameContext,0)


        def SET(self):
            return self.getToken(MySqlParser.SET, 0)

        def updatedElement(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UpdatedElementContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UpdatedElementContext,i)


        def IGNORE(self):
            return self.getToken(MySqlParser.IGNORE, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def WHERE(self):
            return self.getToken(MySqlParser.WHERE, 0)

        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def orderByClause(self):
            return self.getTypedRuleContext(MySqlParser.OrderByClauseContext,0)


        def limitClause(self):
            return self.getTypedRuleContext(MySqlParser.LimitClauseContext,0)


        def LOW_PRIORITY(self):
            return self.getToken(MySqlParser.LOW_PRIORITY, 0)

        def AS(self):
            return self.getToken(MySqlParser.AS, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_singleUpdateStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSingleUpdateStatement" ):
                listener.enterSingleUpdateStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSingleUpdateStatement" ):
                listener.exitSingleUpdateStatement(self)




    def singleUpdateStatement(self):

        localctx = MySqlParser.SingleUpdateStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 226, self.RULE_singleUpdateStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3670
            self.match(MySqlParser.UPDATE)
            self.state = 3672
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==106:
                self.state = 3671
                localctx.priority = self.match(MySqlParser.LOW_PRIORITY)


            self.state = 3675
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==78:
                self.state = 3674
                self.match(MySqlParser.IGNORE)


            self.state = 3677
            self.tableName()
            self.state = 3682
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513126400) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055071174737) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                self.state = 3679
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==12:
                    self.state = 3678
                    self.match(MySqlParser.AS)


                self.state = 3681
                self.uid()


            self.state = 3684
            self.match(MySqlParser.SET)
            self.state = 3685
            self.updatedElement()
            self.state = 3690
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 3686
                self.match(MySqlParser.COMMA)
                self.state = 3687
                self.updatedElement()
                self.state = 3692
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 3695
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==190:
                self.state = 3693
                self.match(MySqlParser.WHERE)
                self.state = 3694
                self.expression(0)


            self.state = 3698
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==124:
                self.state = 3697
                self.orderByClause()


            self.state = 3701
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==99:
                self.state = 3700
                self.limitClause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class MultipleUpdateStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.priority = None # Token

        def UPDATE(self):
            return self.getToken(MySqlParser.UPDATE, 0)

        def tableSources(self):
            return self.getTypedRuleContext(MySqlParser.TableSourcesContext,0)


        def SET(self):
            return self.getToken(MySqlParser.SET, 0)

        def updatedElement(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UpdatedElementContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UpdatedElementContext,i)


        def IGNORE(self):
            return self.getToken(MySqlParser.IGNORE, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def WHERE(self):
            return self.getToken(MySqlParser.WHERE, 0)

        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def LOW_PRIORITY(self):
            return self.getToken(MySqlParser.LOW_PRIORITY, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_multipleUpdateStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMultipleUpdateStatement" ):
                listener.enterMultipleUpdateStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMultipleUpdateStatement" ):
                listener.exitMultipleUpdateStatement(self)




    def multipleUpdateStatement(self):

        localctx = MySqlParser.MultipleUpdateStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 228, self.RULE_multipleUpdateStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3703
            self.match(MySqlParser.UPDATE)
            self.state = 3705
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==106:
                self.state = 3704
                localctx.priority = self.match(MySqlParser.LOW_PRIORITY)


            self.state = 3708
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==78:
                self.state = 3707
                self.match(MySqlParser.IGNORE)


            self.state = 3710
            self.tableSources()
            self.state = 3711
            self.match(MySqlParser.SET)
            self.state = 3712
            self.updatedElement()
            self.state = 3717
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 3713
                self.match(MySqlParser.COMMA)
                self.state = 3714
                self.updatedElement()
                self.state = 3719
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 3722
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==190:
                self.state = 3720
                self.match(MySqlParser.WHERE)
                self.state = 3721
                self.expression(0)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class OrderByClauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ORDER(self):
            return self.getToken(MySqlParser.ORDER, 0)

        def BY(self):
            return self.getToken(MySqlParser.BY, 0)

        def orderByExpression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.OrderByExpressionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.OrderByExpressionContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_orderByClause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOrderByClause" ):
                listener.enterOrderByClause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOrderByClause" ):
                listener.exitOrderByClause(self)




    def orderByClause(self):

        localctx = MySqlParser.OrderByClauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 230, self.RULE_orderByClause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3724
            self.match(MySqlParser.ORDER)
            self.state = 3725
            self.match(MySqlParser.BY)
            self.state = 3726
            self.orderByExpression()
            self.state = 3731
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,526,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 3727
                    self.match(MySqlParser.COMMA)
                    self.state = 3728
                    self.orderByExpression() 
                self.state = 3733
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,526,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class OrderByExpressionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.order = None # Token

        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def ASC(self):
            return self.getToken(MySqlParser.ASC, 0)

        def DESC(self):
            return self.getToken(MySqlParser.DESC, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_orderByExpression

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOrderByExpression" ):
                listener.enterOrderByExpression(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOrderByExpression" ):
                listener.exitOrderByExpression(self)




    def orderByExpression(self):

        localctx = MySqlParser.OrderByExpressionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 232, self.RULE_orderByExpression)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3734
            self.expression(0)
            self.state = 3736
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,527,self._ctx)
            if la_ == 1:
                self.state = 3735
                localctx.order = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==13 or _la==45):
                    localctx.order = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class TableSourcesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def tableSource(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.TableSourceContext)
            else:
                return self.getTypedRuleContext(MySqlParser.TableSourceContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_tableSources

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableSources" ):
                listener.enterTableSources(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableSources" ):
                listener.exitTableSources(self)




    def tableSources(self):

        localctx = MySqlParser.TableSourcesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 234, self.RULE_tableSources)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3738
            self.tableSource()
            self.state = 3743
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,528,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 3739
                    self.match(MySqlParser.COMMA)
                    self.state = 3740
                    self.tableSource() 
                self.state = 3745
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,528,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class TableSourceContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_tableSource

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class TableJsonContext(TableSourceContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableSourceContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def jsonTable(self):
            return self.getTypedRuleContext(MySqlParser.JsonTableContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableJson" ):
                listener.enterTableJson(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableJson" ):
                listener.exitTableJson(self)


    class TableSourceNestedContext(TableSourceContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableSourceContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def tableSourceItem(self):
            return self.getTypedRuleContext(MySqlParser.TableSourceItemContext,0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def joinPart(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.JoinPartContext)
            else:
                return self.getTypedRuleContext(MySqlParser.JoinPartContext,i)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableSourceNested" ):
                listener.enterTableSourceNested(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableSourceNested" ):
                listener.exitTableSourceNested(self)


    class TableSourceBaseContext(TableSourceContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableSourceContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def tableSourceItem(self):
            return self.getTypedRuleContext(MySqlParser.TableSourceItemContext,0)

        def joinPart(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.JoinPartContext)
            else:
                return self.getTypedRuleContext(MySqlParser.JoinPartContext,i)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableSourceBase" ):
                listener.enterTableSourceBase(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableSourceBase" ):
                listener.exitTableSourceBase(self)



    def tableSource(self):

        localctx = MySqlParser.TableSourceContext(self, self._ctx, self.state)
        self.enterRule(localctx, 236, self.RULE_tableSource)
        self._la = 0 # Token type
        try:
            self.state = 3764
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,531,self._ctx)
            if la_ == 1:
                localctx = MySqlParser.TableSourceBaseContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 3746
                self.tableSourceItem()
                self.state = 3750
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,529,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 3747
                        self.joinPart() 
                    self.state = 3752
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,529,self._ctx)

                pass

            elif la_ == 2:
                localctx = MySqlParser.TableSourceNestedContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 3753
                self.match(MySqlParser.LR_BRACKET)
                self.state = 3754
                self.tableSourceItem()
                self.state = 3758
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while ((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & -9150751492863426559) != 0) or ((((_la - 113)) & ~0x3f) == 0 and ((1 << (_la - 113)) & 288230410511450113) != 0):
                    self.state = 3755
                    self.joinPart()
                    self.state = 3760
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 3761
                self.match(MySqlParser.RR_BRACKET)
                pass

            elif la_ == 3:
                localctx = MySqlParser.TableJsonContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 3763
                self.jsonTable()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class TableSourceItemContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_tableSourceItem

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class SubqueryTableItemContext(TableSourceItemContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableSourceItemContext
            super().__init__(parser)
            self.parenthesisSubquery = None # SelectStatementContext
            self.alias = None # UidContext
            self.copyFrom(ctx)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def selectStatement(self):
            return self.getTypedRuleContext(MySqlParser.SelectStatementContext,0)

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def AS(self):
            return self.getToken(MySqlParser.AS, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSubqueryTableItem" ):
                listener.enterSubqueryTableItem(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSubqueryTableItem" ):
                listener.exitSubqueryTableItem(self)


    class AtomTableItemContext(TableSourceItemContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableSourceItemContext
            super().__init__(parser)
            self.alias = None # UidContext
            self.copyFrom(ctx)

        def tableName(self):
            return self.getTypedRuleContext(MySqlParser.TableNameContext,0)

        def PARTITION(self):
            return self.getToken(MySqlParser.PARTITION, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def uidList(self):
            return self.getTypedRuleContext(MySqlParser.UidListContext,0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def indexHint(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.IndexHintContext)
            else:
                return self.getTypedRuleContext(MySqlParser.IndexHintContext,i)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def AS(self):
            return self.getToken(MySqlParser.AS, 0)
        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAtomTableItem" ):
                listener.enterAtomTableItem(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAtomTableItem" ):
                listener.exitAtomTableItem(self)


    class TableSourcesItemContext(TableSourceItemContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.TableSourceItemContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def tableSources(self):
            return self.getTypedRuleContext(MySqlParser.TableSourcesContext,0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableSourcesItem" ):
                listener.enterTableSourcesItem(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableSourcesItem" ):
                listener.exitTableSourcesItem(self)



    def tableSourceItem(self):

        localctx = MySqlParser.TableSourceItemContext(self, self._ctx, self.state)
        self.enterRule(localctx, 238, self.RULE_tableSourceItem)
        self._la = 0 # Token type
        try:
            self.state = 3806
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,539,self._ctx)
            if la_ == 1:
                localctx = MySqlParser.AtomTableItemContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 3766
                self.tableName()
                self.state = 3772
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==129:
                    self.state = 3767
                    self.match(MySqlParser.PARTITION)
                    self.state = 3768
                    self.match(MySqlParser.LR_BRACKET)
                    self.state = 3769
                    self.uidList()
                    self.state = 3770
                    self.match(MySqlParser.RR_BRACKET)


                self.state = 3778
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,534,self._ctx)
                if la_ == 1:
                    self.state = 3775
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==12:
                        self.state = 3774
                        self.match(MySqlParser.AS)


                    self.state = 3777
                    localctx.alias = self.uid()


                self.state = 3788
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,536,self._ctx)
                if la_ == 1:
                    self.state = 3780
                    self.indexHint()
                    self.state = 3785
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,535,self._ctx)
                    while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                        if _alt==1:
                            self.state = 3781
                            self.match(MySqlParser.COMMA)
                            self.state = 3782
                            self.indexHint() 
                        self.state = 3787
                        self._errHandler.sync(self)
                        _alt = self._interp.adaptivePredict(self._input,535,self._ctx)



                pass

            elif la_ == 2:
                localctx = MySqlParser.SubqueryTableItemContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 3795
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,537,self._ctx)
                if la_ == 1:
                    self.state = 3790
                    self.selectStatement()
                    pass

                elif la_ == 2:
                    self.state = 3791
                    self.match(MySqlParser.LR_BRACKET)
                    self.state = 3792
                    localctx.parenthesisSubquery = self.selectStatement()
                    self.state = 3793
                    self.match(MySqlParser.RR_BRACKET)
                    pass


                self.state = 3798
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==12:
                    self.state = 3797
                    self.match(MySqlParser.AS)


                self.state = 3800
                localctx.alias = self.uid()
                pass

            elif la_ == 3:
                localctx = MySqlParser.TableSourcesItemContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 3802
                self.match(MySqlParser.LR_BRACKET)
                self.state = 3803
                self.tableSources()
                self.state = 3804
                self.match(MySqlParser.RR_BRACKET)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class IndexHintContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.indexHintAction = None # Token
            self.keyFormat = None # Token

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def uidList(self):
            return self.getTypedRuleContext(MySqlParser.UidListContext,0)


        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def USE(self):
            return self.getToken(MySqlParser.USE, 0)

        def IGNORE(self):
            return self.getToken(MySqlParser.IGNORE, 0)

        def FORCE(self):
            return self.getToken(MySqlParser.FORCE, 0)

        def INDEX(self):
            return self.getToken(MySqlParser.INDEX, 0)

        def KEY(self):
            return self.getToken(MySqlParser.KEY, 0)

        def FOR(self):
            return self.getToken(MySqlParser.FOR, 0)

        def indexHintType(self):
            return self.getTypedRuleContext(MySqlParser.IndexHintTypeContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_indexHint

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIndexHint" ):
                listener.enterIndexHint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIndexHint" ):
                listener.exitIndexHint(self)




    def indexHint(self):

        localctx = MySqlParser.IndexHintContext(self, self._ctx, self.state)
        self.enterRule(localctx, 240, self.RULE_indexHint)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3808
            localctx.indexHintAction = self._input.LT(1)
            _la = self._input.LA(1)
            if not(_la==66 or _la==78 or _la==186):
                localctx.indexHintAction = self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 3809
            localctx.keyFormat = self._input.LT(1)
            _la = self._input.LA(1)
            if not(_la==81 or _la==91):
                localctx.keyFormat = self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 3812
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==65:
                self.state = 3810
                self.match(MySqlParser.FOR)
                self.state = 3811
                self.indexHintType()


            self.state = 3814
            self.match(MySqlParser.LR_BRACKET)
            self.state = 3815
            self.uidList()
            self.state = 3816
            self.match(MySqlParser.RR_BRACKET)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class IndexHintTypeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def JOIN(self):
            return self.getToken(MySqlParser.JOIN, 0)

        def ORDER(self):
            return self.getToken(MySqlParser.ORDER, 0)

        def BY(self):
            return self.getToken(MySqlParser.BY, 0)

        def GROUP(self):
            return self.getToken(MySqlParser.GROUP, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_indexHintType

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIndexHintType" ):
                listener.enterIndexHintType(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIndexHintType" ):
                listener.exitIndexHintType(self)




    def indexHintType(self):

        localctx = MySqlParser.IndexHintTypeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 242, self.RULE_indexHintType)
        try:
            self.state = 3823
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [90]:
                self.enterOuterAlt(localctx, 1)
                self.state = 3818
                self.match(MySqlParser.JOIN)
                pass
            elif token in [124]:
                self.enterOuterAlt(localctx, 2)
                self.state = 3819
                self.match(MySqlParser.ORDER)
                self.state = 3820
                self.match(MySqlParser.BY)
                pass
            elif token in [73]:
                self.enterOuterAlt(localctx, 3)
                self.state = 3821
                self.match(MySqlParser.GROUP)
                self.state = 3822
                self.match(MySqlParser.BY)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class JoinPartContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_joinPart

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class InnerJoinContext(JoinPartContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.JoinPartContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def JOIN(self):
            return self.getToken(MySqlParser.JOIN, 0)
        def tableSourceItem(self):
            return self.getTypedRuleContext(MySqlParser.TableSourceItemContext,0)

        def LATERAL(self):
            return self.getToken(MySqlParser.LATERAL, 0)
        def joinSpec(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.JoinSpecContext)
            else:
                return self.getTypedRuleContext(MySqlParser.JoinSpecContext,i)

        def INNER(self):
            return self.getToken(MySqlParser.INNER, 0)
        def CROSS(self):
            return self.getToken(MySqlParser.CROSS, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterInnerJoin" ):
                listener.enterInnerJoin(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitInnerJoin" ):
                listener.exitInnerJoin(self)


    class NaturalJoinContext(JoinPartContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.JoinPartContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def NATURAL(self):
            return self.getToken(MySqlParser.NATURAL, 0)
        def JOIN(self):
            return self.getToken(MySqlParser.JOIN, 0)
        def tableSourceItem(self):
            return self.getTypedRuleContext(MySqlParser.TableSourceItemContext,0)

        def LEFT(self):
            return self.getToken(MySqlParser.LEFT, 0)
        def RIGHT(self):
            return self.getToken(MySqlParser.RIGHT, 0)
        def OUTER(self):
            return self.getToken(MySqlParser.OUTER, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNaturalJoin" ):
                listener.enterNaturalJoin(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNaturalJoin" ):
                listener.exitNaturalJoin(self)


    class OuterJoinContext(JoinPartContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.JoinPartContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def JOIN(self):
            return self.getToken(MySqlParser.JOIN, 0)
        def tableSourceItem(self):
            return self.getTypedRuleContext(MySqlParser.TableSourceItemContext,0)

        def LEFT(self):
            return self.getToken(MySqlParser.LEFT, 0)
        def RIGHT(self):
            return self.getToken(MySqlParser.RIGHT, 0)
        def OUTER(self):
            return self.getToken(MySqlParser.OUTER, 0)
        def LATERAL(self):
            return self.getToken(MySqlParser.LATERAL, 0)
        def joinSpec(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.JoinSpecContext)
            else:
                return self.getTypedRuleContext(MySqlParser.JoinSpecContext,i)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOuterJoin" ):
                listener.enterOuterJoin(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOuterJoin" ):
                listener.exitOuterJoin(self)


    class StraightJoinContext(JoinPartContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.JoinPartContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def STRAIGHT_JOIN(self):
            return self.getToken(MySqlParser.STRAIGHT_JOIN, 0)
        def tableSourceItem(self):
            return self.getTypedRuleContext(MySqlParser.TableSourceItemContext,0)

        def ON(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.ON)
            else:
                return self.getToken(MySqlParser.ON, i)
        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ExpressionContext,i)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStraightJoin" ):
                listener.enterStraightJoin(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStraightJoin" ):
                listener.exitStraightJoin(self)



    def joinPart(self):

        localctx = MySqlParser.JoinPartContext(self, self._ctx, self.state)
        self.enterRule(localctx, 244, self.RULE_joinPart)
        self._la = 0 # Token type
        try:
            self.state = 3872
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [34, 83, 90]:
                localctx = MySqlParser.InnerJoinContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 3826
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==34 or _la==83:
                    self.state = 3825
                    _la = self._input.LA(1)
                    if not(_la==34 or _la==83):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 3828
                self.match(MySqlParser.JOIN)
                self.state = 3830
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,543,self._ctx)
                if la_ == 1:
                    self.state = 3829
                    self.match(MySqlParser.LATERAL)


                self.state = 3832
                self.tableSourceItem()
                self.state = 3836
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,544,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 3833
                        self.joinSpec() 
                    self.state = 3838
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,544,self._ctx)

                pass
            elif token in [171]:
                localctx = MySqlParser.StraightJoinContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 3839
                self.match(MySqlParser.STRAIGHT_JOIN)
                self.state = 3840
                self.tableSourceItem()
                self.state = 3845
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,545,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 3841
                        self.match(MySqlParser.ON)
                        self.state = 3842
                        self.expression(0) 
                    self.state = 3847
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,545,self._ctx)

                pass
            elif token in [97, 148]:
                localctx = MySqlParser.OuterJoinContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 3848
                _la = self._input.LA(1)
                if not(_la==97 or _la==148):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 3850
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==126:
                    self.state = 3849
                    self.match(MySqlParser.OUTER)


                self.state = 3852
                self.match(MySqlParser.JOIN)
                self.state = 3854
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,547,self._ctx)
                if la_ == 1:
                    self.state = 3853
                    self.match(MySqlParser.LATERAL)


                self.state = 3856
                self.tableSourceItem()
                self.state = 3860
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,548,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 3857
                        self.joinSpec() 
                    self.state = 3862
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,548,self._ctx)

                pass
            elif token in [113]:
                localctx = MySqlParser.NaturalJoinContext(self, localctx)
                self.enterOuterAlt(localctx, 4)
                self.state = 3863
                self.match(MySqlParser.NATURAL)
                self.state = 3868
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==97 or _la==148:
                    self.state = 3864
                    _la = self._input.LA(1)
                    if not(_la==97 or _la==148):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 3866
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==126:
                        self.state = 3865
                        self.match(MySqlParser.OUTER)




                self.state = 3870
                self.match(MySqlParser.JOIN)
                self.state = 3871
                self.tableSourceItem()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class JoinSpecContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ON(self):
            return self.getToken(MySqlParser.ON, 0)

        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def USING(self):
            return self.getToken(MySqlParser.USING, 0)

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def uidList(self):
            return self.getTypedRuleContext(MySqlParser.UidListContext,0)


        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_joinSpec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJoinSpec" ):
                listener.enterJoinSpec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJoinSpec" ):
                listener.exitJoinSpec(self)




    def joinSpec(self):

        localctx = MySqlParser.JoinSpecContext(self, self._ctx, self.state)
        self.enterRule(localctx, 246, self.RULE_joinSpec)
        try:
            self.state = 3881
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [118]:
                self.enterOuterAlt(localctx, 1)
                self.state = 3874
                self.match(MySqlParser.ON)
                self.state = 3875
                self.expression(0)
                pass
            elif token in [187]:
                self.enterOuterAlt(localctx, 2)
                self.state = 3876
                self.match(MySqlParser.USING)
                self.state = 3877
                self.match(MySqlParser.LR_BRACKET)
                self.state = 3878
                self.uidList()
                self.state = 3879
                self.match(MySqlParser.RR_BRACKET)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class QueryExpressionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def querySpecification(self):
            return self.getTypedRuleContext(MySqlParser.QuerySpecificationContext,0)


        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def queryExpression(self):
            return self.getTypedRuleContext(MySqlParser.QueryExpressionContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_queryExpression

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterQueryExpression" ):
                listener.enterQueryExpression(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitQueryExpression" ):
                listener.exitQueryExpression(self)




    def queryExpression(self):

        localctx = MySqlParser.QueryExpressionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 248, self.RULE_queryExpression)
        try:
            self.state = 3891
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,553,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 3883
                self.match(MySqlParser.LR_BRACKET)
                self.state = 3884
                self.querySpecification()
                self.state = 3885
                self.match(MySqlParser.RR_BRACKET)
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 3887
                self.match(MySqlParser.LR_BRACKET)
                self.state = 3888
                self.queryExpression()
                self.state = 3889
                self.match(MySqlParser.RR_BRACKET)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class QueryExpressionNointoContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def querySpecificationNointo(self):
            return self.getTypedRuleContext(MySqlParser.QuerySpecificationNointoContext,0)


        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def queryExpressionNointo(self):
            return self.getTypedRuleContext(MySqlParser.QueryExpressionNointoContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_queryExpressionNointo

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterQueryExpressionNointo" ):
                listener.enterQueryExpressionNointo(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitQueryExpressionNointo" ):
                listener.exitQueryExpressionNointo(self)




    def queryExpressionNointo(self):

        localctx = MySqlParser.QueryExpressionNointoContext(self, self._ctx, self.state)
        self.enterRule(localctx, 250, self.RULE_queryExpressionNointo)
        try:
            self.state = 3901
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,554,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 3893
                self.match(MySqlParser.LR_BRACKET)
                self.state = 3894
                self.querySpecificationNointo()
                self.state = 3895
                self.match(MySqlParser.RR_BRACKET)
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 3897
                self.match(MySqlParser.LR_BRACKET)
                self.state = 3898
                self.queryExpressionNointo()
                self.state = 3899
                self.match(MySqlParser.RR_BRACKET)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class QuerySpecificationContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SELECT(self):
            return self.getToken(MySqlParser.SELECT, 0)

        def selectElements(self):
            return self.getTypedRuleContext(MySqlParser.SelectElementsContext,0)


        def fromClause(self):
            return self.getTypedRuleContext(MySqlParser.FromClauseContext,0)


        def selectSpec(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.SelectSpecContext)
            else:
                return self.getTypedRuleContext(MySqlParser.SelectSpecContext,i)


        def selectIntoExpression(self):
            return self.getTypedRuleContext(MySqlParser.SelectIntoExpressionContext,0)


        def groupByClause(self):
            return self.getTypedRuleContext(MySqlParser.GroupByClauseContext,0)


        def havingClause(self):
            return self.getTypedRuleContext(MySqlParser.HavingClauseContext,0)


        def windowClause(self):
            return self.getTypedRuleContext(MySqlParser.WindowClauseContext,0)


        def orderByClause(self):
            return self.getTypedRuleContext(MySqlParser.OrderByClauseContext,0)


        def limitClause(self):
            return self.getTypedRuleContext(MySqlParser.LimitClauseContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_querySpecification

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterQuerySpecification" ):
                listener.enterQuerySpecification(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitQuerySpecification" ):
                listener.exitQuerySpecification(self)




    def querySpecification(self):

        localctx = MySqlParser.QuerySpecificationContext(self, self._ctx, self.state)
        self.enterRule(localctx, 252, self.RULE_querySpecification)
        self._la = 0 # Token type
        try:
            self.state = 3957
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,569,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 3903
                self.match(MySqlParser.SELECT)
                self.state = 3907
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,555,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 3904
                        self.selectSpec() 
                    self.state = 3909
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,555,self._ctx)

                self.state = 3910
                self.selectElements()
                self.state = 3912
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==87:
                    self.state = 3911
                    self.selectIntoExpression()


                self.state = 3914
                self.fromClause()
                self.state = 3916
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,557,self._ctx)
                if la_ == 1:
                    self.state = 3915
                    self.groupByClause()


                self.state = 3919
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==74:
                    self.state = 3918
                    self.havingClause()


                self.state = 3922
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==676:
                    self.state = 3921
                    self.windowClause()


                self.state = 3925
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,560,self._ctx)
                if la_ == 1:
                    self.state = 3924
                    self.orderByClause()


                self.state = 3928
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,561,self._ctx)
                if la_ == 1:
                    self.state = 3927
                    self.limitClause()


                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 3930
                self.match(MySqlParser.SELECT)
                self.state = 3934
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,562,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 3931
                        self.selectSpec() 
                    self.state = 3936
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,562,self._ctx)

                self.state = 3937
                self.selectElements()
                self.state = 3938
                self.fromClause()
                self.state = 3940
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,563,self._ctx)
                if la_ == 1:
                    self.state = 3939
                    self.groupByClause()


                self.state = 3943
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==74:
                    self.state = 3942
                    self.havingClause()


                self.state = 3946
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==676:
                    self.state = 3945
                    self.windowClause()


                self.state = 3949
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,566,self._ctx)
                if la_ == 1:
                    self.state = 3948
                    self.orderByClause()


                self.state = 3952
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,567,self._ctx)
                if la_ == 1:
                    self.state = 3951
                    self.limitClause()


                self.state = 3955
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==87:
                    self.state = 3954
                    self.selectIntoExpression()


                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class QuerySpecificationNointoContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SELECT(self):
            return self.getToken(MySqlParser.SELECT, 0)

        def selectElements(self):
            return self.getTypedRuleContext(MySqlParser.SelectElementsContext,0)


        def fromClause(self):
            return self.getTypedRuleContext(MySqlParser.FromClauseContext,0)


        def selectSpec(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.SelectSpecContext)
            else:
                return self.getTypedRuleContext(MySqlParser.SelectSpecContext,i)


        def groupByClause(self):
            return self.getTypedRuleContext(MySqlParser.GroupByClauseContext,0)


        def havingClause(self):
            return self.getTypedRuleContext(MySqlParser.HavingClauseContext,0)


        def windowClause(self):
            return self.getTypedRuleContext(MySqlParser.WindowClauseContext,0)


        def orderByClause(self):
            return self.getTypedRuleContext(MySqlParser.OrderByClauseContext,0)


        def limitClause(self):
            return self.getTypedRuleContext(MySqlParser.LimitClauseContext,0)


        def unionStatement(self):
            return self.getTypedRuleContext(MySqlParser.UnionStatementContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_querySpecificationNointo

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterQuerySpecificationNointo" ):
                listener.enterQuerySpecificationNointo(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitQuerySpecificationNointo" ):
                listener.exitQuerySpecificationNointo(self)




    def querySpecificationNointo(self):

        localctx = MySqlParser.QuerySpecificationNointoContext(self, self._ctx, self.state)
        self.enterRule(localctx, 254, self.RULE_querySpecificationNointo)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3959
            self.match(MySqlParser.SELECT)
            self.state = 3963
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,570,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 3960
                    self.selectSpec() 
                self.state = 3965
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,570,self._ctx)

            self.state = 3966
            self.selectElements()
            self.state = 3967
            self.fromClause()
            self.state = 3969
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,571,self._ctx)
            if la_ == 1:
                self.state = 3968
                self.groupByClause()


            self.state = 3972
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==74:
                self.state = 3971
                self.havingClause()


            self.state = 3975
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==676:
                self.state = 3974
                self.windowClause()


            self.state = 3978
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,574,self._ctx)
            if la_ == 1:
                self.state = 3977
                self.orderByClause()


            self.state = 3981
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,575,self._ctx)
            if la_ == 1:
                self.state = 3980
                self.limitClause()


            self.state = 3984
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,576,self._ctx)
            if la_ == 1:
                self.state = 3983
                self.unionStatement()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class UnionParenthesisContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.unionType = None # Token

        def UNION(self):
            return self.getToken(MySqlParser.UNION, 0)

        def queryExpressionNointo(self):
            return self.getTypedRuleContext(MySqlParser.QueryExpressionNointoContext,0)


        def ALL(self):
            return self.getToken(MySqlParser.ALL, 0)

        def DISTINCT(self):
            return self.getToken(MySqlParser.DISTINCT, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_unionParenthesis

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUnionParenthesis" ):
                listener.enterUnionParenthesis(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUnionParenthesis" ):
                listener.exitUnionParenthesis(self)




    def unionParenthesis(self):

        localctx = MySqlParser.UnionParenthesisContext(self, self._ctx, self.state)
        self.enterRule(localctx, 256, self.RULE_unionParenthesis)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3986
            self.match(MySqlParser.UNION)
            self.state = 3988
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==6 or _la==49:
                self.state = 3987
                localctx.unionType = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==6 or _la==49):
                    localctx.unionType = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 3990
            self.queryExpressionNointo()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class UnionStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.unionType = None # Token

        def UNION(self):
            return self.getToken(MySqlParser.UNION, 0)

        def querySpecificationNointo(self):
            return self.getTypedRuleContext(MySqlParser.QuerySpecificationNointoContext,0)


        def queryExpressionNointo(self):
            return self.getTypedRuleContext(MySqlParser.QueryExpressionNointoContext,0)


        def ALL(self):
            return self.getToken(MySqlParser.ALL, 0)

        def DISTINCT(self):
            return self.getToken(MySqlParser.DISTINCT, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_unionStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUnionStatement" ):
                listener.enterUnionStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUnionStatement" ):
                listener.exitUnionStatement(self)




    def unionStatement(self):

        localctx = MySqlParser.UnionStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 258, self.RULE_unionStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3992
            self.match(MySqlParser.UNION)
            self.state = 3994
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==6 or _la==49:
                self.state = 3993
                localctx.unionType = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==6 or _la==49):
                    localctx.unionType = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 3998
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [152]:
                self.state = 3996
                self.querySpecificationNointo()
                pass
            elif token in [1133]:
                self.state = 3997
                self.queryExpressionNointo()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class LateralStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LATERAL(self):
            return self.getToken(MySqlParser.LATERAL, 0)

        def querySpecificationNointo(self):
            return self.getTypedRuleContext(MySqlParser.QuerySpecificationNointoContext,0)


        def queryExpressionNointo(self):
            return self.getTypedRuleContext(MySqlParser.QueryExpressionNointoContext,0)


        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def AS(self):
            return self.getToken(MySqlParser.AS, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_lateralStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLateralStatement" ):
                listener.enterLateralStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLateralStatement" ):
                listener.exitLateralStatement(self)




    def lateralStatement(self):

        localctx = MySqlParser.LateralStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 260, self.RULE_lateralStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4000
            self.match(MySqlParser.LATERAL)
            self.state = 4015
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,583,self._ctx)
            if la_ == 1:
                self.state = 4001
                self.querySpecificationNointo()
                pass

            elif la_ == 2:
                self.state = 4002
                self.queryExpressionNointo()
                pass

            elif la_ == 3:
                self.state = 4003
                self.match(MySqlParser.LR_BRACKET)
                self.state = 4006
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [152]:
                    self.state = 4004
                    self.querySpecificationNointo()
                    pass
                elif token in [1133]:
                    self.state = 4005
                    self.queryExpressionNointo()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 4008
                self.match(MySqlParser.RR_BRACKET)
                self.state = 4013
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,582,self._ctx)
                if la_ == 1:
                    self.state = 4010
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==12:
                        self.state = 4009
                        self.match(MySqlParser.AS)


                    self.state = 4012
                    self.uid()


                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class JsonTableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def JSON_TABLE(self):
            return self.getToken(MySqlParser.JSON_TABLE, 0)

        def LR_BRACKET(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.LR_BRACKET)
            else:
                return self.getToken(MySqlParser.LR_BRACKET, i)

        def STRING_LITERAL(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.STRING_LITERAL)
            else:
                return self.getToken(MySqlParser.STRING_LITERAL, i)

        def COMMA(self):
            return self.getToken(MySqlParser.COMMA, 0)

        def COLUMNS(self):
            return self.getToken(MySqlParser.COLUMNS, 0)

        def jsonColumnList(self):
            return self.getTypedRuleContext(MySqlParser.JsonColumnListContext,0)


        def RR_BRACKET(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.RR_BRACKET)
            else:
                return self.getToken(MySqlParser.RR_BRACKET, i)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def AS(self):
            return self.getToken(MySqlParser.AS, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_jsonTable

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJsonTable" ):
                listener.enterJsonTable(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJsonTable" ):
                listener.exitJsonTable(self)




    def jsonTable(self):

        localctx = MySqlParser.JsonTableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 262, self.RULE_jsonTable)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4017
            self.match(MySqlParser.JSON_TABLE)
            self.state = 4018
            self.match(MySqlParser.LR_BRACKET)
            self.state = 4019
            self.match(MySqlParser.STRING_LITERAL)
            self.state = 4020
            self.match(MySqlParser.COMMA)
            self.state = 4021
            self.match(MySqlParser.STRING_LITERAL)
            self.state = 4022
            self.match(MySqlParser.COLUMNS)
            self.state = 4023
            self.match(MySqlParser.LR_BRACKET)
            self.state = 4024
            self.jsonColumnList()
            self.state = 4025
            self.match(MySqlParser.RR_BRACKET)
            self.state = 4026
            self.match(MySqlParser.RR_BRACKET)
            self.state = 4031
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,585,self._ctx)
            if la_ == 1:
                self.state = 4028
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==12:
                    self.state = 4027
                    self.match(MySqlParser.AS)


                self.state = 4030
                self.uid()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class JsonColumnListContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def jsonColumn(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.JsonColumnContext)
            else:
                return self.getTypedRuleContext(MySqlParser.JsonColumnContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_jsonColumnList

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJsonColumnList" ):
                listener.enterJsonColumnList(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJsonColumnList" ):
                listener.exitJsonColumnList(self)




    def jsonColumnList(self):

        localctx = MySqlParser.JsonColumnListContext(self, self._ctx, self.state)
        self.enterRule(localctx, 264, self.RULE_jsonColumnList)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4033
            self.jsonColumn()
            self.state = 4038
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 4034
                self.match(MySqlParser.COMMA)
                self.state = 4035
                self.jsonColumn()
                self.state = 4040
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class JsonColumnContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def fullColumnName(self):
            return self.getTypedRuleContext(MySqlParser.FullColumnNameContext,0)


        def FOR(self):
            return self.getToken(MySqlParser.FOR, 0)

        def ORDINALITY(self):
            return self.getToken(MySqlParser.ORDINALITY, 0)

        def dataType(self):
            return self.getTypedRuleContext(MySqlParser.DataTypeContext,0)


        def PATH(self):
            return self.getToken(MySqlParser.PATH, 0)

        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def EXISTS(self):
            return self.getToken(MySqlParser.EXISTS, 0)

        def jsonOnEmpty(self):
            return self.getTypedRuleContext(MySqlParser.JsonOnEmptyContext,0)


        def jsonOnError(self):
            return self.getTypedRuleContext(MySqlParser.JsonOnErrorContext,0)


        def NESTED(self):
            return self.getToken(MySqlParser.NESTED, 0)

        def COLUMNS(self):
            return self.getToken(MySqlParser.COLUMNS, 0)

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def jsonColumnList(self):
            return self.getTypedRuleContext(MySqlParser.JsonColumnListContext,0)


        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_jsonColumn

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJsonColumn" ):
                listener.enterJsonColumn(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJsonColumn" ):
                listener.exitJsonColumn(self)




    def jsonColumn(self):

        localctx = MySqlParser.JsonColumnContext(self, self._ctx, self.state)
        self.enterRule(localctx, 266, self.RULE_jsonColumn)
        self._la = 0 # Token type
        try:
            self.state = 4070
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,592,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 4041
                self.fullColumnName()
                self.state = 4058
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [65]:
                    self.state = 4042
                    self.match(MySqlParser.FOR)
                    self.state = 4043
                    self.match(MySqlParser.ORDINALITY)
                    pass
                elif token in [25, 153, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 239, 346, 348, 349, 431, 466, 518, 803, 804, 805, 806, 807, 808, 809, 810, 811]:
                    self.state = 4044
                    self.dataType()
                    self.state = 4056
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [285]:
                        self.state = 4045
                        self.match(MySqlParser.PATH)
                        self.state = 4046
                        self.match(MySqlParser.STRING_LITERAL)
                        self.state = 4048
                        self._errHandler.sync(self)
                        la_ = self._interp.adaptivePredict(self._input,587,self._ctx)
                        if la_ == 1:
                            self.state = 4047
                            self.jsonOnEmpty()


                        self.state = 4051
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if _la==42 or _la==116 or _la==411:
                            self.state = 4050
                            self.jsonOnError()


                        pass
                    elif token in [60]:
                        self.state = 4053
                        self.match(MySqlParser.EXISTS)
                        self.state = 4054
                        self.match(MySqlParser.PATH)
                        self.state = 4055
                        self.match(MySqlParser.STRING_LITERAL)
                        pass
                    else:
                        raise NoViableAltException(self)

                    pass
                else:
                    raise NoViableAltException(self)

                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 4060
                self.match(MySqlParser.NESTED)
                self.state = 4062
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==285:
                    self.state = 4061
                    self.match(MySqlParser.PATH)


                self.state = 4064
                self.match(MySqlParser.STRING_LITERAL)
                self.state = 4065
                self.match(MySqlParser.COLUMNS)
                self.state = 4066
                self.match(MySqlParser.LR_BRACKET)
                self.state = 4067
                self.jsonColumnList()
                self.state = 4068
                self.match(MySqlParser.RR_BRACKET)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class JsonOnEmptyContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ON(self):
            return self.getToken(MySqlParser.ON, 0)

        def EMPTY(self):
            return self.getToken(MySqlParser.EMPTY, 0)

        def NULL_LITERAL(self):
            return self.getToken(MySqlParser.NULL_LITERAL, 0)

        def ERROR(self):
            return self.getToken(MySqlParser.ERROR, 0)

        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)

        def defaultValue(self):
            return self.getTypedRuleContext(MySqlParser.DefaultValueContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_jsonOnEmpty

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJsonOnEmpty" ):
                listener.enterJsonOnEmpty(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJsonOnEmpty" ):
                listener.exitJsonOnEmpty(self)




    def jsonOnEmpty(self):

        localctx = MySqlParser.JsonOnEmptyContext(self, self._ctx, self.state)
        self.enterRule(localctx, 268, self.RULE_jsonOnEmpty)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4076
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [116]:
                self.state = 4072
                self.match(MySqlParser.NULL_LITERAL)
                pass
            elif token in [411]:
                self.state = 4073
                self.match(MySqlParser.ERROR)
                pass
            elif token in [42]:
                self.state = 4074
                self.match(MySqlParser.DEFAULT)
                self.state = 4075
                self.defaultValue()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 4078
            self.match(MySqlParser.ON)
            self.state = 4079
            self.match(MySqlParser.EMPTY)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class JsonOnErrorContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ON(self):
            return self.getToken(MySqlParser.ON, 0)

        def ERROR(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.ERROR)
            else:
                return self.getToken(MySqlParser.ERROR, i)

        def NULL_LITERAL(self):
            return self.getToken(MySqlParser.NULL_LITERAL, 0)

        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)

        def defaultValue(self):
            return self.getTypedRuleContext(MySqlParser.DefaultValueContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_jsonOnError

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJsonOnError" ):
                listener.enterJsonOnError(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJsonOnError" ):
                listener.exitJsonOnError(self)




    def jsonOnError(self):

        localctx = MySqlParser.JsonOnErrorContext(self, self._ctx, self.state)
        self.enterRule(localctx, 270, self.RULE_jsonOnError)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4085
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [116]:
                self.state = 4081
                self.match(MySqlParser.NULL_LITERAL)
                pass
            elif token in [411]:
                self.state = 4082
                self.match(MySqlParser.ERROR)
                pass
            elif token in [42]:
                self.state = 4083
                self.match(MySqlParser.DEFAULT)
                self.state = 4084
                self.defaultValue()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 4087
            self.match(MySqlParser.ON)
            self.state = 4088
            self.match(MySqlParser.ERROR)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class SelectSpecContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALL(self):
            return self.getToken(MySqlParser.ALL, 0)

        def DISTINCT(self):
            return self.getToken(MySqlParser.DISTINCT, 0)

        def DISTINCTROW(self):
            return self.getToken(MySqlParser.DISTINCTROW, 0)

        def HIGH_PRIORITY(self):
            return self.getToken(MySqlParser.HIGH_PRIORITY, 0)

        def STRAIGHT_JOIN(self):
            return self.getToken(MySqlParser.STRAIGHT_JOIN, 0)

        def SQL_SMALL_RESULT(self):
            return self.getToken(MySqlParser.SQL_SMALL_RESULT, 0)

        def SQL_BIG_RESULT(self):
            return self.getToken(MySqlParser.SQL_BIG_RESULT, 0)

        def SQL_BUFFER_RESULT(self):
            return self.getToken(MySqlParser.SQL_BUFFER_RESULT, 0)

        def SQL_CACHE(self):
            return self.getToken(MySqlParser.SQL_CACHE, 0)

        def SQL_NO_CACHE(self):
            return self.getToken(MySqlParser.SQL_NO_CACHE, 0)

        def SQL_CALC_FOUND_ROWS(self):
            return self.getToken(MySqlParser.SQL_CALC_FOUND_ROWS, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_selectSpec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSelectSpec" ):
                listener.enterSelectSpec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSelectSpec" ):
                listener.exitSelectSpec(self)




    def selectSpec(self):

        localctx = MySqlParser.SelectSpecContext(self, self._ctx, self.state)
        self.enterRule(localctx, 272, self.RULE_selectSpec)
        self._la = 0 # Token type
        try:
            self.state = 4098
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [6, 49, 50]:
                self.enterOuterAlt(localctx, 1)
                self.state = 4090
                _la = self._input.LA(1)
                if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 1688849860264000) != 0)):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass
            elif token in [75]:
                self.enterOuterAlt(localctx, 2)
                self.state = 4091
                self.match(MySqlParser.HIGH_PRIORITY)
                pass
            elif token in [171]:
                self.enterOuterAlt(localctx, 3)
                self.state = 4092
                self.match(MySqlParser.STRAIGHT_JOIN)
                pass
            elif token in [166]:
                self.enterOuterAlt(localctx, 4)
                self.state = 4093
                self.match(MySqlParser.SQL_SMALL_RESULT)
                pass
            elif token in [164]:
                self.enterOuterAlt(localctx, 5)
                self.state = 4094
                self.match(MySqlParser.SQL_BIG_RESULT)
                pass
            elif token in [625]:
                self.enterOuterAlt(localctx, 6)
                self.state = 4095
                self.match(MySqlParser.SQL_BUFFER_RESULT)
                pass
            elif token in [626, 627]:
                self.enterOuterAlt(localctx, 7)
                self.state = 4096
                _la = self._input.LA(1)
                if not(_la==626 or _la==627):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass
            elif token in [165]:
                self.enterOuterAlt(localctx, 8)
                self.state = 4097
                self.match(MySqlParser.SQL_CALC_FOUND_ROWS)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class SelectElementsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.star = None # Token

        def selectElement(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.SelectElementContext)
            else:
                return self.getTypedRuleContext(MySqlParser.SelectElementContext,i)


        def STAR(self):
            return self.getToken(MySqlParser.STAR, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_selectElements

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSelectElements" ):
                listener.enterSelectElements(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSelectElements" ):
                listener.exitSelectElements(self)




    def selectElements(self):

        localctx = MySqlParser.SelectElementsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 274, self.RULE_selectElements)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4102
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,596,self._ctx)
            if la_ == 1:
                self.state = 4100
                localctx.star = self.match(MySqlParser.STAR)
                pass

            elif la_ == 2:
                self.state = 4101
                self.selectElement()
                pass


            self.state = 4108
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,597,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 4104
                    self.match(MySqlParser.COMMA)
                    self.state = 4105
                    self.selectElement() 
                self.state = 4110
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,597,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class SelectElementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_selectElement

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class SelectExpressionElementContext(SelectElementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SelectElementContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)

        def LOCAL_ID(self):
            return self.getToken(MySqlParser.LOCAL_ID, 0)
        def VAR_ASSIGN(self):
            return self.getToken(MySqlParser.VAR_ASSIGN, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def AS(self):
            return self.getToken(MySqlParser.AS, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSelectExpressionElement" ):
                listener.enterSelectExpressionElement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSelectExpressionElement" ):
                listener.exitSelectExpressionElement(self)


    class SelectFunctionElementContext(SelectElementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SelectElementContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def functionCall(self):
            return self.getTypedRuleContext(MySqlParser.FunctionCallContext,0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def AS(self):
            return self.getToken(MySqlParser.AS, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSelectFunctionElement" ):
                listener.enterSelectFunctionElement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSelectFunctionElement" ):
                listener.exitSelectFunctionElement(self)


    class SelectStarElementContext(SelectElementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SelectElementContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def fullId(self):
            return self.getTypedRuleContext(MySqlParser.FullIdContext,0)

        def DOT(self):
            return self.getToken(MySqlParser.DOT, 0)
        def STAR(self):
            return self.getToken(MySqlParser.STAR, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSelectStarElement" ):
                listener.enterSelectStarElement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSelectStarElement" ):
                listener.exitSelectStarElement(self)


    class SelectColumnElementContext(SelectElementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SelectElementContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def fullColumnName(self):
            return self.getTypedRuleContext(MySqlParser.FullColumnNameContext,0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def AS(self):
            return self.getToken(MySqlParser.AS, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSelectColumnElement" ):
                listener.enterSelectColumnElement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSelectColumnElement" ):
                listener.exitSelectColumnElement(self)



    def selectElement(self):

        localctx = MySqlParser.SelectElementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 276, self.RULE_selectElement)
        self._la = 0 # Token type
        try:
            self.state = 4140
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,605,self._ctx)
            if la_ == 1:
                localctx = MySqlParser.SelectStarElementContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 4111
                self.fullId()
                self.state = 4112
                self.match(MySqlParser.DOT)
                self.state = 4113
                self.match(MySqlParser.STAR)
                pass

            elif la_ == 2:
                localctx = MySqlParser.SelectColumnElementContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 4115
                self.fullColumnName()
                self.state = 4120
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,599,self._ctx)
                if la_ == 1:
                    self.state = 4117
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==12:
                        self.state = 4116
                        self.match(MySqlParser.AS)


                    self.state = 4119
                    self.uid()


                pass

            elif la_ == 3:
                localctx = MySqlParser.SelectFunctionElementContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 4122
                self.functionCall()
                self.state = 4127
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,601,self._ctx)
                if la_ == 1:
                    self.state = 4124
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==12:
                        self.state = 4123
                        self.match(MySqlParser.AS)


                    self.state = 4126
                    self.uid()


                pass

            elif la_ == 4:
                localctx = MySqlParser.SelectExpressionElementContext(self, localctx)
                self.enterOuterAlt(localctx, 4)
                self.state = 4131
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,602,self._ctx)
                if la_ == 1:
                    self.state = 4129
                    self.match(MySqlParser.LOCAL_ID)
                    self.state = 4130
                    self.match(MySqlParser.VAR_ASSIGN)


                self.state = 4133
                self.expression(0)
                self.state = 4138
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,604,self._ctx)
                if la_ == 1:
                    self.state = 4135
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==12:
                        self.state = 4134
                        self.match(MySqlParser.AS)


                    self.state = 4137
                    self.uid()


                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class SelectIntoExpressionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_selectIntoExpression

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class SelectIntoVariablesContext(SelectIntoExpressionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SelectIntoExpressionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def INTO(self):
            return self.getToken(MySqlParser.INTO, 0)
        def assignmentField(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.AssignmentFieldContext)
            else:
                return self.getTypedRuleContext(MySqlParser.AssignmentFieldContext,i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSelectIntoVariables" ):
                listener.enterSelectIntoVariables(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSelectIntoVariables" ):
                listener.exitSelectIntoVariables(self)


    class SelectIntoTextFileContext(SelectIntoExpressionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SelectIntoExpressionContext
            super().__init__(parser)
            self.filename = None # Token
            self.charset = None # CharsetNameContext
            self.fieldsFormat = None # Token
            self.copyFrom(ctx)

        def INTO(self):
            return self.getToken(MySqlParser.INTO, 0)
        def OUTFILE(self):
            return self.getToken(MySqlParser.OUTFILE, 0)
        def DQUOTA_STRING(self):
            return self.getToken(MySqlParser.DQUOTA_STRING, 0)
        def SQUOTA_STRING(self):
            return self.getToken(MySqlParser.SQUOTA_STRING, 0)
        def CHARACTER(self):
            return self.getToken(MySqlParser.CHARACTER, 0)
        def SET(self):
            return self.getToken(MySqlParser.SET, 0)
        def LINES(self):
            return self.getToken(MySqlParser.LINES, 0)
        def charsetName(self):
            return self.getTypedRuleContext(MySqlParser.CharsetNameContext,0)

        def FIELDS(self):
            return self.getToken(MySqlParser.FIELDS, 0)
        def COLUMNS(self):
            return self.getToken(MySqlParser.COLUMNS, 0)
        def selectFieldsInto(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.SelectFieldsIntoContext)
            else:
                return self.getTypedRuleContext(MySqlParser.SelectFieldsIntoContext,i)

        def selectLinesInto(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.SelectLinesIntoContext)
            else:
                return self.getTypedRuleContext(MySqlParser.SelectLinesIntoContext,i)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSelectIntoTextFile" ):
                listener.enterSelectIntoTextFile(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSelectIntoTextFile" ):
                listener.exitSelectIntoTextFile(self)


    class SelectIntoDumpFileContext(SelectIntoExpressionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SelectIntoExpressionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def INTO(self):
            return self.getToken(MySqlParser.INTO, 0)
        def DUMPFILE(self):
            return self.getToken(MySqlParser.DUMPFILE, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSelectIntoDumpFile" ):
                listener.enterSelectIntoDumpFile(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSelectIntoDumpFile" ):
                listener.exitSelectIntoDumpFile(self)



    def selectIntoExpression(self):

        localctx = MySqlParser.SelectIntoExpressionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 278, self.RULE_selectIntoExpression)
        self._la = 0 # Token type
        try:
            self.state = 4178
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,612,self._ctx)
            if la_ == 1:
                localctx = MySqlParser.SelectIntoVariablesContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 4142
                self.match(MySqlParser.INTO)
                self.state = 4143
                self.assignmentField()
                self.state = 4148
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 4144
                    self.match(MySqlParser.COMMA)
                    self.state = 4145
                    self.assignmentField()
                    self.state = 4150
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass

            elif la_ == 2:
                localctx = MySqlParser.SelectIntoDumpFileContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 4151
                self.match(MySqlParser.INTO)
                self.state = 4152
                self.match(MySqlParser.DUMPFILE)
                self.state = 4153
                self.match(MySqlParser.STRING_LITERAL)
                pass

            elif la_ == 3:
                localctx = MySqlParser.SelectIntoTextFileContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 4154
                self.match(MySqlParser.INTO)
                self.state = 4155
                self.match(MySqlParser.OUTFILE)
                self.state = 4156
                localctx.filename = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==1162 or _la==1163):
                    localctx.filename = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 4160
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==25:
                    self.state = 4157
                    self.match(MySqlParser.CHARACTER)
                    self.state = 4158
                    self.match(MySqlParser.SET)
                    self.state = 4159
                    localctx.charset = self.charsetName()


                self.state = 4168
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,609,self._ctx)
                if la_ == 1:
                    self.state = 4162
                    localctx.fieldsFormat = self._input.LT(1)
                    _la = self._input.LA(1)
                    if not(_la==365 or _la==427):
                        localctx.fieldsFormat = self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 4164 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while True:
                        self.state = 4163
                        self.selectFieldsInto()
                        self.state = 4166 
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if not (_la==56 or _la==58 or _la==122 or _la==173):
                            break



                self.state = 4176
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==101:
                    self.state = 4170
                    self.match(MySqlParser.LINES)
                    self.state = 4172 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while True:
                        self.state = 4171
                        self.selectLinesInto()
                        self.state = 4174 
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if not (_la==169 or _la==173):
                            break



                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class SelectFieldsIntoContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.terminationField = None # Token
            self.enclosion = None # Token
            self.escaping = None # Token

        def TERMINATED(self):
            return self.getToken(MySqlParser.TERMINATED, 0)

        def BY(self):
            return self.getToken(MySqlParser.BY, 0)

        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def ENCLOSED(self):
            return self.getToken(MySqlParser.ENCLOSED, 0)

        def OPTIONALLY(self):
            return self.getToken(MySqlParser.OPTIONALLY, 0)

        def ESCAPED(self):
            return self.getToken(MySqlParser.ESCAPED, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_selectFieldsInto

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSelectFieldsInto" ):
                listener.enterSelectFieldsInto(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSelectFieldsInto" ):
                listener.exitSelectFieldsInto(self)




    def selectFieldsInto(self):

        localctx = MySqlParser.SelectFieldsIntoContext(self, self._ctx, self.state)
        self.enterRule(localctx, 280, self.RULE_selectFieldsInto)
        self._la = 0 # Token type
        try:
            self.state = 4192
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [173]:
                self.enterOuterAlt(localctx, 1)
                self.state = 4180
                self.match(MySqlParser.TERMINATED)
                self.state = 4181
                self.match(MySqlParser.BY)
                self.state = 4182
                localctx.terminationField = self.match(MySqlParser.STRING_LITERAL)
                pass
            elif token in [56, 122]:
                self.enterOuterAlt(localctx, 2)
                self.state = 4184
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==122:
                    self.state = 4183
                    self.match(MySqlParser.OPTIONALLY)


                self.state = 4186
                self.match(MySqlParser.ENCLOSED)
                self.state = 4187
                self.match(MySqlParser.BY)
                self.state = 4188
                localctx.enclosion = self.match(MySqlParser.STRING_LITERAL)
                pass
            elif token in [58]:
                self.enterOuterAlt(localctx, 3)
                self.state = 4189
                self.match(MySqlParser.ESCAPED)
                self.state = 4190
                self.match(MySqlParser.BY)
                self.state = 4191
                localctx.escaping = self.match(MySqlParser.STRING_LITERAL)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class SelectLinesIntoContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.starting = None # Token
            self.terminationLine = None # Token

        def STARTING(self):
            return self.getToken(MySqlParser.STARTING, 0)

        def BY(self):
            return self.getToken(MySqlParser.BY, 0)

        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def TERMINATED(self):
            return self.getToken(MySqlParser.TERMINATED, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_selectLinesInto

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSelectLinesInto" ):
                listener.enterSelectLinesInto(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSelectLinesInto" ):
                listener.exitSelectLinesInto(self)




    def selectLinesInto(self):

        localctx = MySqlParser.SelectLinesIntoContext(self, self._ctx, self.state)
        self.enterRule(localctx, 282, self.RULE_selectLinesInto)
        try:
            self.state = 4200
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [169]:
                self.enterOuterAlt(localctx, 1)
                self.state = 4194
                self.match(MySqlParser.STARTING)
                self.state = 4195
                self.match(MySqlParser.BY)
                self.state = 4196
                localctx.starting = self.match(MySqlParser.STRING_LITERAL)
                pass
            elif token in [173]:
                self.enterOuterAlt(localctx, 2)
                self.state = 4197
                self.match(MySqlParser.TERMINATED)
                self.state = 4198
                self.match(MySqlParser.BY)
                self.state = 4199
                localctx.terminationLine = self.match(MySqlParser.STRING_LITERAL)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class FromClauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.whereExpr = None # ExpressionContext

        def FROM(self):
            return self.getToken(MySqlParser.FROM, 0)

        def tableSources(self):
            return self.getTypedRuleContext(MySqlParser.TableSourcesContext,0)


        def WHERE(self):
            return self.getToken(MySqlParser.WHERE, 0)

        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_fromClause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFromClause" ):
                listener.enterFromClause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFromClause" ):
                listener.exitFromClause(self)




    def fromClause(self):

        localctx = MySqlParser.FromClauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 284, self.RULE_fromClause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4204
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==68:
                self.state = 4202
                self.match(MySqlParser.FROM)
                self.state = 4203
                self.tableSources()


            self.state = 4208
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==190:
                self.state = 4206
                self.match(MySqlParser.WHERE)
                self.state = 4207
                localctx.whereExpr = self.expression(0)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class GroupByClauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def GROUP(self):
            return self.getToken(MySqlParser.GROUP, 0)

        def BY(self):
            return self.getToken(MySqlParser.BY, 0)

        def groupByItem(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.GroupByItemContext)
            else:
                return self.getTypedRuleContext(MySqlParser.GroupByItemContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def WITH(self):
            return self.getToken(MySqlParser.WITH, 0)

        def ROLLUP(self):
            return self.getToken(MySqlParser.ROLLUP, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_groupByClause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterGroupByClause" ):
                listener.enterGroupByClause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitGroupByClause" ):
                listener.exitGroupByClause(self)




    def groupByClause(self):

        localctx = MySqlParser.GroupByClauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 286, self.RULE_groupByClause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4210
            self.match(MySqlParser.GROUP)
            self.state = 4211
            self.match(MySqlParser.BY)
            self.state = 4212
            self.groupByItem()
            self.state = 4217
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,618,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 4213
                    self.match(MySqlParser.COMMA)
                    self.state = 4214
                    self.groupByItem() 
                self.state = 4219
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,618,self._ctx)

            self.state = 4222
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,619,self._ctx)
            if la_ == 1:
                self.state = 4220
                self.match(MySqlParser.WITH)
                self.state = 4221
                self.match(MySqlParser.ROLLUP)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class HavingClauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.havingExpr = None # ExpressionContext

        def HAVING(self):
            return self.getToken(MySqlParser.HAVING, 0)

        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_havingClause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHavingClause" ):
                listener.enterHavingClause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHavingClause" ):
                listener.exitHavingClause(self)




    def havingClause(self):

        localctx = MySqlParser.HavingClauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 288, self.RULE_havingClause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4224
            self.match(MySqlParser.HAVING)
            self.state = 4225
            localctx.havingExpr = self.expression(0)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class WindowClauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def WINDOW(self):
            return self.getToken(MySqlParser.WINDOW, 0)

        def windowName(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.WindowNameContext)
            else:
                return self.getTypedRuleContext(MySqlParser.WindowNameContext,i)


        def AS(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.AS)
            else:
                return self.getToken(MySqlParser.AS, i)

        def LR_BRACKET(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.LR_BRACKET)
            else:
                return self.getToken(MySqlParser.LR_BRACKET, i)

        def windowSpec(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.WindowSpecContext)
            else:
                return self.getTypedRuleContext(MySqlParser.WindowSpecContext,i)


        def RR_BRACKET(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.RR_BRACKET)
            else:
                return self.getToken(MySqlParser.RR_BRACKET, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_windowClause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterWindowClause" ):
                listener.enterWindowClause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitWindowClause" ):
                listener.exitWindowClause(self)




    def windowClause(self):

        localctx = MySqlParser.WindowClauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 290, self.RULE_windowClause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4227
            self.match(MySqlParser.WINDOW)
            self.state = 4228
            self.windowName()
            self.state = 4229
            self.match(MySqlParser.AS)
            self.state = 4230
            self.match(MySqlParser.LR_BRACKET)
            self.state = 4231
            self.windowSpec()
            self.state = 4232
            self.match(MySqlParser.RR_BRACKET)
            self.state = 4242
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,620,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 4233
                    self.match(MySqlParser.COMMA)
                    self.state = 4234
                    self.windowName()
                    self.state = 4235
                    self.match(MySqlParser.AS)
                    self.state = 4236
                    self.match(MySqlParser.LR_BRACKET)
                    self.state = 4237
                    self.windowSpec()
                    self.state = 4238
                    self.match(MySqlParser.RR_BRACKET) 
                self.state = 4244
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,620,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class GroupByItemContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.order = None # Token

        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def ASC(self):
            return self.getToken(MySqlParser.ASC, 0)

        def DESC(self):
            return self.getToken(MySqlParser.DESC, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_groupByItem

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterGroupByItem" ):
                listener.enterGroupByItem(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitGroupByItem" ):
                listener.exitGroupByItem(self)




    def groupByItem(self):

        localctx = MySqlParser.GroupByItemContext(self, self._ctx, self.state)
        self.enterRule(localctx, 292, self.RULE_groupByItem)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4245
            self.expression(0)
            self.state = 4247
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,621,self._ctx)
            if la_ == 1:
                self.state = 4246
                localctx.order = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==13 or _la==45):
                    localctx.order = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class LimitClauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.offset = None # LimitClauseAtomContext
            self.limit = None # LimitClauseAtomContext

        def LIMIT(self):
            return self.getToken(MySqlParser.LIMIT, 0)

        def OFFSET(self):
            return self.getToken(MySqlParser.OFFSET, 0)

        def limitClauseAtom(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.LimitClauseAtomContext)
            else:
                return self.getTypedRuleContext(MySqlParser.LimitClauseAtomContext,i)


        def COMMA(self):
            return self.getToken(MySqlParser.COMMA, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_limitClause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLimitClause" ):
                listener.enterLimitClause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLimitClause" ):
                listener.exitLimitClause(self)




    def limitClause(self):

        localctx = MySqlParser.LimitClauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 294, self.RULE_limitClause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4249
            self.match(MySqlParser.LIMIT)
            self.state = 4260
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,623,self._ctx)
            if la_ == 1:
                self.state = 4253
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,622,self._ctx)
                if la_ == 1:
                    self.state = 4250
                    localctx.offset = self.limitClauseAtom()
                    self.state = 4251
                    self.match(MySqlParser.COMMA)


                self.state = 4255
                localctx.limit = self.limitClauseAtom()
                pass

            elif la_ == 2:
                self.state = 4256
                localctx.limit = self.limitClauseAtom()
                self.state = 4257
                self.match(MySqlParser.OFFSET)
                self.state = 4258
                localctx.offset = self.limitClauseAtom()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class LimitClauseAtomContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)


        def mysqlVariable(self):
            return self.getTypedRuleContext(MySqlParser.MysqlVariableContext,0)


        def simpleId(self):
            return self.getTypedRuleContext(MySqlParser.SimpleIdContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_limitClauseAtom

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLimitClauseAtom" ):
                listener.enterLimitClauseAtom(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLimitClauseAtom" ):
                listener.exitLimitClauseAtom(self)




    def limitClauseAtom(self):

        localctx = MySqlParser.LimitClauseAtomContext(self, self._ctx, self.state)
        self.enterRule(localctx, 296, self.RULE_limitClauseAtom)
        try:
            self.state = 4265
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1138, 1139, 1140, 1149, 1151]:
                self.enterOuterAlt(localctx, 1)
                self.state = 4262
                self.decimalLiteral()
                pass
            elif token in [1159, 1160]:
                self.enterOuterAlt(localctx, 2)
                self.state = 4263
                self.mysqlVariable()
                pass
            elif token in [11, 14, 18, 29, 35, 37, 39, 42, 48, 55, 57, 59, 73, 77, 79, 85, 94, 97, 117, 121, 124, 130, 140, 141, 148, 150, 158, 168, 217, 218, 219, 220, 221, 226, 234, 237, 239, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 405, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 523, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 677, 678, 679, 680, 681, 682, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 717, 718, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1123, 1156]:
                self.enterOuterAlt(localctx, 3)
                self.state = 4264
                self.simpleId()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class StartTransactionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def START(self):
            return self.getToken(MySqlParser.START, 0)

        def TRANSACTION(self):
            return self.getToken(MySqlParser.TRANSACTION, 0)

        def transactionMode(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.TransactionModeContext)
            else:
                return self.getTypedRuleContext(MySqlParser.TransactionModeContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_startTransaction

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStartTransaction" ):
                listener.enterStartTransaction(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStartTransaction" ):
                listener.exitStartTransaction(self)




    def startTransaction(self):

        localctx = MySqlParser.StartTransactionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 298, self.RULE_startTransaction)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4267
            self.match(MySqlParser.START)
            self.state = 4268
            self.match(MySqlParser.TRANSACTION)
            self.state = 4277
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,626,self._ctx)
            if la_ == 1:
                self.state = 4269
                self.transactionMode()
                self.state = 4274
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 4270
                    self.match(MySqlParser.COMMA)
                    self.state = 4271
                    self.transactionMode()
                    self.state = 4276
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)



        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class BeginWorkContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def BEGIN(self):
            return self.getToken(MySqlParser.BEGIN, 0)

        def WORK(self):
            return self.getToken(MySqlParser.WORK, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_beginWork

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterBeginWork" ):
                listener.enterBeginWork(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitBeginWork" ):
                listener.exitBeginWork(self)




    def beginWork(self):

        localctx = MySqlParser.BeginWorkContext(self, self._ctx, self.state)
        self.enterRule(localctx, 300, self.RULE_beginWork)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4279
            self.match(MySqlParser.BEGIN)
            self.state = 4281
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==678:
                self.state = 4280
                self.match(MySqlParser.WORK)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CommitWorkContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.nochain = None # Token
            self.norelease = None # Token

        def COMMIT(self):
            return self.getToken(MySqlParser.COMMIT, 0)

        def WORK(self):
            return self.getToken(MySqlParser.WORK, 0)

        def AND(self):
            return self.getToken(MySqlParser.AND, 0)

        def CHAIN(self):
            return self.getToken(MySqlParser.CHAIN, 0)

        def RELEASE(self):
            return self.getToken(MySqlParser.RELEASE, 0)

        def NO(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.NO)
            else:
                return self.getToken(MySqlParser.NO, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_commitWork

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCommitWork" ):
                listener.enterCommitWork(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCommitWork" ):
                listener.exitCommitWork(self)




    def commitWork(self):

        localctx = MySqlParser.CommitWorkContext(self, self._ctx, self.state)
        self.enterRule(localctx, 302, self.RULE_commitWork)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4283
            self.match(MySqlParser.COMMIT)
            self.state = 4285
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==678:
                self.state = 4284
                self.match(MySqlParser.WORK)


            self.state = 4292
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==10:
                self.state = 4287
                self.match(MySqlParser.AND)
                self.state = 4289
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==521:
                    self.state = 4288
                    localctx.nochain = self.match(MySqlParser.NO)


                self.state = 4291
                self.match(MySqlParser.CHAIN)


            self.state = 4298
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,632,self._ctx)
            if la_ == 1:
                self.state = 4295
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==521:
                    self.state = 4294
                    localctx.norelease = self.match(MySqlParser.NO)


                self.state = 4297
                self.match(MySqlParser.RELEASE)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class RollbackWorkContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.nochain = None # Token
            self.norelease = None # Token

        def ROLLBACK(self):
            return self.getToken(MySqlParser.ROLLBACK, 0)

        def WORK(self):
            return self.getToken(MySqlParser.WORK, 0)

        def AND(self):
            return self.getToken(MySqlParser.AND, 0)

        def CHAIN(self):
            return self.getToken(MySqlParser.CHAIN, 0)

        def RELEASE(self):
            return self.getToken(MySqlParser.RELEASE, 0)

        def NO(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.NO)
            else:
                return self.getToken(MySqlParser.NO, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_rollbackWork

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRollbackWork" ):
                listener.enterRollbackWork(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRollbackWork" ):
                listener.exitRollbackWork(self)




    def rollbackWork(self):

        localctx = MySqlParser.RollbackWorkContext(self, self._ctx, self.state)
        self.enterRule(localctx, 304, self.RULE_rollbackWork)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4300
            self.match(MySqlParser.ROLLBACK)
            self.state = 4302
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==678:
                self.state = 4301
                self.match(MySqlParser.WORK)


            self.state = 4309
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==10:
                self.state = 4304
                self.match(MySqlParser.AND)
                self.state = 4306
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==521:
                    self.state = 4305
                    localctx.nochain = self.match(MySqlParser.NO)


                self.state = 4308
                self.match(MySqlParser.CHAIN)


            self.state = 4315
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,637,self._ctx)
            if la_ == 1:
                self.state = 4312
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==521:
                    self.state = 4311
                    localctx.norelease = self.match(MySqlParser.NO)


                self.state = 4314
                self.match(MySqlParser.RELEASE)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class SavepointStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SAVEPOINT(self):
            return self.getToken(MySqlParser.SAVEPOINT, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_savepointStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSavepointStatement" ):
                listener.enterSavepointStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSavepointStatement" ):
                listener.exitSavepointStatement(self)




    def savepointStatement(self):

        localctx = MySqlParser.SavepointStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 306, self.RULE_savepointStatement)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4317
            self.match(MySqlParser.SAVEPOINT)
            self.state = 4318
            self.uid()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class RollbackStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ROLLBACK(self):
            return self.getToken(MySqlParser.ROLLBACK, 0)

        def TO(self):
            return self.getToken(MySqlParser.TO, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def WORK(self):
            return self.getToken(MySqlParser.WORK, 0)

        def SAVEPOINT(self):
            return self.getToken(MySqlParser.SAVEPOINT, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_rollbackStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRollbackStatement" ):
                listener.enterRollbackStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRollbackStatement" ):
                listener.exitRollbackStatement(self)




    def rollbackStatement(self):

        localctx = MySqlParser.RollbackStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 308, self.RULE_rollbackStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4320
            self.match(MySqlParser.ROLLBACK)
            self.state = 4322
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==678:
                self.state = 4321
                self.match(MySqlParser.WORK)


            self.state = 4324
            self.match(MySqlParser.TO)
            self.state = 4326
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,639,self._ctx)
            if la_ == 1:
                self.state = 4325
                self.match(MySqlParser.SAVEPOINT)


            self.state = 4328
            self.uid()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ReleaseStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RELEASE(self):
            return self.getToken(MySqlParser.RELEASE, 0)

        def SAVEPOINT(self):
            return self.getToken(MySqlParser.SAVEPOINT, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_releaseStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterReleaseStatement" ):
                listener.enterReleaseStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitReleaseStatement" ):
                listener.exitReleaseStatement(self)




    def releaseStatement(self):

        localctx = MySqlParser.ReleaseStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 310, self.RULE_releaseStatement)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4330
            self.match(MySqlParser.RELEASE)
            self.state = 4331
            self.match(MySqlParser.SAVEPOINT)
            self.state = 4332
            self.uid()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class LockTablesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LOCK(self):
            return self.getToken(MySqlParser.LOCK, 0)

        def lockTableElement(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.LockTableElementContext)
            else:
                return self.getTypedRuleContext(MySqlParser.LockTableElementContext,i)


        def TABLE(self):
            return self.getToken(MySqlParser.TABLE, 0)

        def TABLES(self):
            return self.getToken(MySqlParser.TABLES, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def waitNowaitClause(self):
            return self.getTypedRuleContext(MySqlParser.WaitNowaitClauseContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_lockTables

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLockTables" ):
                listener.enterLockTables(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLockTables" ):
                listener.exitLockTables(self)




    def lockTables(self):

        localctx = MySqlParser.LockTablesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 312, self.RULE_lockTables)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4334
            self.match(MySqlParser.LOCK)
            self.state = 4335
            _la = self._input.LA(1)
            if not(_la==172 or _la==742):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 4336
            self.lockTableElement()
            self.state = 4341
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 4337
                self.match(MySqlParser.COMMA)
                self.state = 4338
                self.lockTableElement()
                self.state = 4343
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 4345
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==527 or _la==674:
                self.state = 4344
                self.waitNowaitClause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class UnlockTablesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def UNLOCK(self):
            return self.getToken(MySqlParser.UNLOCK, 0)

        def TABLES(self):
            return self.getToken(MySqlParser.TABLES, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_unlockTables

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUnlockTables" ):
                listener.enterUnlockTables(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUnlockTables" ):
                listener.exitUnlockTables(self)




    def unlockTables(self):

        localctx = MySqlParser.UnlockTablesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 314, self.RULE_unlockTables)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4347
            self.match(MySqlParser.UNLOCK)
            self.state = 4348
            self.match(MySqlParser.TABLES)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class SetAutocommitStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.autocommitValue = None # Token

        def SET(self):
            return self.getToken(MySqlParser.SET, 0)

        def AUTOCOMMIT(self):
            return self.getToken(MySqlParser.AUTOCOMMIT, 0)

        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def ZERO_DECIMAL(self):
            return self.getToken(MySqlParser.ZERO_DECIMAL, 0)

        def ONE_DECIMAL(self):
            return self.getToken(MySqlParser.ONE_DECIMAL, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_setAutocommitStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSetAutocommitStatement" ):
                listener.enterSetAutocommitStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSetAutocommitStatement" ):
                listener.exitSetAutocommitStatement(self)




    def setAutocommitStatement(self):

        localctx = MySqlParser.SetAutocommitStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 316, self.RULE_setAutocommitStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4350
            self.match(MySqlParser.SET)
            self.state = 4351
            self.match(MySqlParser.AUTOCOMMIT)
            self.state = 4352
            self.match(MySqlParser.EQUAL_SYMBOL)
            self.state = 4353
            localctx.autocommitValue = self._input.LT(1)
            _la = self._input.LA(1)
            if not(_la==1138 or _la==1139):
                localctx.autocommitValue = self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class SetTransactionStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.transactionContext = None # Token

        def SET(self):
            return self.getToken(MySqlParser.SET, 0)

        def TRANSACTION(self):
            return self.getToken(MySqlParser.TRANSACTION, 0)

        def transactionOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.TransactionOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.TransactionOptionContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def GLOBAL(self):
            return self.getToken(MySqlParser.GLOBAL, 0)

        def SESSION(self):
            return self.getToken(MySqlParser.SESSION, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_setTransactionStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSetTransactionStatement" ):
                listener.enterSetTransactionStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSetTransactionStatement" ):
                listener.exitSetTransactionStatement(self)




    def setTransactionStatement(self):

        localctx = MySqlParser.SetTransactionStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 318, self.RULE_setTransactionStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4355
            self.match(MySqlParser.SET)
            self.state = 4357
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==439 or _la==609:
                self.state = 4356
                localctx.transactionContext = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==439 or _la==609):
                    localctx.transactionContext = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 4359
            self.match(MySqlParser.TRANSACTION)
            self.state = 4360
            self.transactionOption()
            self.state = 4365
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 4361
                self.match(MySqlParser.COMMA)
                self.state = 4362
                self.transactionOption()
                self.state = 4367
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class TransactionModeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def WITH(self):
            return self.getToken(MySqlParser.WITH, 0)

        def CONSISTENT(self):
            return self.getToken(MySqlParser.CONSISTENT, 0)

        def SNAPSHOT(self):
            return self.getToken(MySqlParser.SNAPSHOT, 0)

        def READ(self):
            return self.getToken(MySqlParser.READ, 0)

        def WRITE(self):
            return self.getToken(MySqlParser.WRITE, 0)

        def ONLY(self):
            return self.getToken(MySqlParser.ONLY, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_transactionMode

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTransactionMode" ):
                listener.enterTransactionMode(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTransactionMode" ):
                listener.exitTransactionMode(self)




    def transactionMode(self):

        localctx = MySqlParser.TransactionModeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 320, self.RULE_transactionMode)
        try:
            self.state = 4375
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,644,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 4368
                self.match(MySqlParser.WITH)
                self.state = 4369
                self.match(MySqlParser.CONSISTENT)
                self.state = 4370
                self.match(MySqlParser.SNAPSHOT)
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 4371
                self.match(MySqlParser.READ)
                self.state = 4372
                self.match(MySqlParser.WRITE)
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 4373
                self.match(MySqlParser.READ)
                self.state = 4374
                self.match(MySqlParser.ONLY)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class LockTableElementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def tableName(self):
            return self.getTypedRuleContext(MySqlParser.TableNameContext,0)


        def lockAction(self):
            return self.getTypedRuleContext(MySqlParser.LockActionContext,0)


        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def AS(self):
            return self.getToken(MySqlParser.AS, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_lockTableElement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLockTableElement" ):
                listener.enterLockTableElement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLockTableElement" ):
                listener.exitLockTableElement(self)




    def lockTableElement(self):

        localctx = MySqlParser.LockTableElementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 322, self.RULE_lockTableElement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4377
            self.tableName()
            self.state = 4382
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513126400) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055071174737) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                self.state = 4379
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==12:
                    self.state = 4378
                    self.match(MySqlParser.AS)


                self.state = 4381
                self.uid()


            self.state = 4384
            self.lockAction()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class LockActionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def READ(self):
            return self.getToken(MySqlParser.READ, 0)

        def LOCAL(self):
            return self.getToken(MySqlParser.LOCAL, 0)

        def WRITE(self):
            return self.getToken(MySqlParser.WRITE, 0)

        def LOW_PRIORITY(self):
            return self.getToken(MySqlParser.LOW_PRIORITY, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_lockAction

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLockAction" ):
                listener.enterLockAction(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLockAction" ):
                listener.exitLockAction(self)




    def lockAction(self):

        localctx = MySqlParser.LockActionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 324, self.RULE_lockAction)
        self._la = 0 # Token type
        try:
            self.state = 4394
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [134]:
                self.enterOuterAlt(localctx, 1)
                self.state = 4386
                self.match(MySqlParser.READ)
                self.state = 4388
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==474:
                    self.state = 4387
                    self.match(MySqlParser.LOCAL)


                pass
            elif token in [106, 193]:
                self.enterOuterAlt(localctx, 2)
                self.state = 4391
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==106:
                    self.state = 4390
                    self.match(MySqlParser.LOW_PRIORITY)


                self.state = 4393
                self.match(MySqlParser.WRITE)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class TransactionOptionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ISOLATION(self):
            return self.getToken(MySqlParser.ISOLATION, 0)

        def LEVEL(self):
            return self.getToken(MySqlParser.LEVEL, 0)

        def transactionLevel(self):
            return self.getTypedRuleContext(MySqlParser.TransactionLevelContext,0)


        def READ(self):
            return self.getToken(MySqlParser.READ, 0)

        def WRITE(self):
            return self.getToken(MySqlParser.WRITE, 0)

        def ONLY(self):
            return self.getToken(MySqlParser.ONLY, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_transactionOption

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTransactionOption" ):
                listener.enterTransactionOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTransactionOption" ):
                listener.exitTransactionOption(self)




    def transactionOption(self):

        localctx = MySqlParser.TransactionOptionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 326, self.RULE_transactionOption)
        try:
            self.state = 4403
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,650,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 4396
                self.match(MySqlParser.ISOLATION)
                self.state = 4397
                self.match(MySqlParser.LEVEL)
                self.state = 4398
                self.transactionLevel()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 4399
                self.match(MySqlParser.READ)
                self.state = 4400
                self.match(MySqlParser.WRITE)
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 4401
                self.match(MySqlParser.READ)
                self.state = 4402
                self.match(MySqlParser.ONLY)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class TransactionLevelContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def REPEATABLE(self):
            return self.getToken(MySqlParser.REPEATABLE, 0)

        def READ(self):
            return self.getToken(MySqlParser.READ, 0)

        def COMMITTED(self):
            return self.getToken(MySqlParser.COMMITTED, 0)

        def UNCOMMITTED(self):
            return self.getToken(MySqlParser.UNCOMMITTED, 0)

        def SERIALIZABLE(self):
            return self.getToken(MySqlParser.SERIALIZABLE, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_transactionLevel

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTransactionLevel" ):
                listener.enterTransactionLevel(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTransactionLevel" ):
                listener.exitTransactionLevel(self)




    def transactionLevel(self):

        localctx = MySqlParser.TransactionLevelContext(self, self._ctx, self.state)
        self.enterRule(localctx, 328, self.RULE_transactionLevel)
        try:
            self.state = 4412
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,651,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 4405
                self.match(MySqlParser.REPEATABLE)
                self.state = 4406
                self.match(MySqlParser.READ)
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 4407
                self.match(MySqlParser.READ)
                self.state = 4408
                self.match(MySqlParser.COMMITTED)
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 4409
                self.match(MySqlParser.READ)
                self.state = 4410
                self.match(MySqlParser.UNCOMMITTED)
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 4411
                self.match(MySqlParser.SERIALIZABLE)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ChangeMasterContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CHANGE(self):
            return self.getToken(MySqlParser.CHANGE, 0)

        def MASTER(self):
            return self.getToken(MySqlParser.MASTER, 0)

        def TO(self):
            return self.getToken(MySqlParser.TO, 0)

        def masterOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.MasterOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.MasterOptionContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def channelOption(self):
            return self.getTypedRuleContext(MySqlParser.ChannelOptionContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_changeMaster

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterChangeMaster" ):
                listener.enterChangeMaster(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitChangeMaster" ):
                listener.exitChangeMaster(self)




    def changeMaster(self):

        localctx = MySqlParser.ChangeMasterContext(self, self._ctx, self.state)
        self.enterRule(localctx, 330, self.RULE_changeMaster)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4414
            self.match(MySqlParser.CHANGE)
            self.state = 4415
            self.match(MySqlParser.MASTER)
            self.state = 4416
            self.match(MySqlParser.TO)
            self.state = 4417
            self.masterOption()
            self.state = 4422
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 4418
                self.match(MySqlParser.COMMA)
                self.state = 4419
                self.masterOption()
                self.state = 4424
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 4426
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==65:
                self.state = 4425
                self.channelOption()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ChangeReplicationFilterContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CHANGE(self):
            return self.getToken(MySqlParser.CHANGE, 0)

        def REPLICATION(self):
            return self.getToken(MySqlParser.REPLICATION, 0)

        def FILTER(self):
            return self.getToken(MySqlParser.FILTER, 0)

        def replicationFilter(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ReplicationFilterContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ReplicationFilterContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_changeReplicationFilter

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterChangeReplicationFilter" ):
                listener.enterChangeReplicationFilter(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitChangeReplicationFilter" ):
                listener.exitChangeReplicationFilter(self)




    def changeReplicationFilter(self):

        localctx = MySqlParser.ChangeReplicationFilterContext(self, self._ctx, self.state)
        self.enterRule(localctx, 332, self.RULE_changeReplicationFilter)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4428
            self.match(MySqlParser.CHANGE)
            self.state = 4429
            self.match(MySqlParser.REPLICATION)
            self.state = 4430
            self.match(MySqlParser.FILTER)
            self.state = 4431
            self.replicationFilter()
            self.state = 4436
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 4432
                self.match(MySqlParser.COMMA)
                self.state = 4433
                self.replicationFilter()
                self.state = 4438
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class PurgeBinaryLogsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.purgeFormat = None # Token
            self.fileName = None # Token
            self.timeValue = None # Token

        def PURGE(self):
            return self.getToken(MySqlParser.PURGE, 0)

        def LOGS(self):
            return self.getToken(MySqlParser.LOGS, 0)

        def BINARY(self):
            return self.getToken(MySqlParser.BINARY, 0)

        def MASTER(self):
            return self.getToken(MySqlParser.MASTER, 0)

        def TO(self):
            return self.getToken(MySqlParser.TO, 0)

        def BEFORE(self):
            return self.getToken(MySqlParser.BEFORE, 0)

        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_purgeBinaryLogs

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPurgeBinaryLogs" ):
                listener.enterPurgeBinaryLogs(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPurgeBinaryLogs" ):
                listener.exitPurgeBinaryLogs(self)




    def purgeBinaryLogs(self):

        localctx = MySqlParser.PurgeBinaryLogsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 334, self.RULE_purgeBinaryLogs)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4439
            self.match(MySqlParser.PURGE)
            self.state = 4440
            localctx.purgeFormat = self._input.LT(1)
            _la = self._input.LA(1)
            if not(_la==226 or _la==477):
                localctx.purgeFormat = self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 4441
            self.match(MySqlParser.LOGS)
            self.state = 4446
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [175]:
                self.state = 4442
                self.match(MySqlParser.TO)
                self.state = 4443
                localctx.fileName = self.match(MySqlParser.STRING_LITERAL)
                pass
            elif token in [15]:
                self.state = 4444
                self.match(MySqlParser.BEFORE)
                self.state = 4445
                localctx.timeValue = self.match(MySqlParser.STRING_LITERAL)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ResetMasterContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RESET(self):
            return self.getToken(MySqlParser.RESET, 0)

        def MASTER(self):
            return self.getToken(MySqlParser.MASTER, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_resetMaster

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterResetMaster" ):
                listener.enterResetMaster(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitResetMaster" ):
                listener.exitResetMaster(self)




    def resetMaster(self):

        localctx = MySqlParser.ResetMasterContext(self, self._ctx, self.state)
        self.enterRule(localctx, 336, self.RULE_resetMaster)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4448
            self.match(MySqlParser.RESET)
            self.state = 4449
            self.match(MySqlParser.MASTER)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ResetSlaveContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RESET(self):
            return self.getToken(MySqlParser.RESET, 0)

        def SLAVE(self):
            return self.getToken(MySqlParser.SLAVE, 0)

        def ALL(self):
            return self.getToken(MySqlParser.ALL, 0)

        def channelOption(self):
            return self.getTypedRuleContext(MySqlParser.ChannelOptionContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_resetSlave

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterResetSlave" ):
                listener.enterResetSlave(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitResetSlave" ):
                listener.exitResetSlave(self)




    def resetSlave(self):

        localctx = MySqlParser.ResetSlaveContext(self, self._ctx, self.state)
        self.enterRule(localctx, 338, self.RULE_resetSlave)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4451
            self.match(MySqlParser.RESET)
            self.state = 4452
            self.match(MySqlParser.SLAVE)
            self.state = 4454
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==6:
                self.state = 4453
                self.match(MySqlParser.ALL)


            self.state = 4457
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==65:
                self.state = 4456
                self.channelOption()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class StartSlaveContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def START(self):
            return self.getToken(MySqlParser.START, 0)

        def SLAVE(self):
            return self.getToken(MySqlParser.SLAVE, 0)

        def threadType(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ThreadTypeContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ThreadTypeContext,i)


        def UNTIL(self):
            return self.getToken(MySqlParser.UNTIL, 0)

        def untilOption(self):
            return self.getTypedRuleContext(MySqlParser.UntilOptionContext,0)


        def connectionOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ConnectionOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ConnectionOptionContext,i)


        def channelOption(self):
            return self.getTypedRuleContext(MySqlParser.ChannelOptionContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_startSlave

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStartSlave" ):
                listener.enterStartSlave(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStartSlave" ):
                listener.exitStartSlave(self)




    def startSlave(self):

        localctx = MySqlParser.StartSlaveContext(self, self._ctx, self.state)
        self.enterRule(localctx, 340, self.RULE_startSlave)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4459
            self.match(MySqlParser.START)
            self.state = 4460
            self.match(MySqlParser.SLAVE)
            self.state = 4469
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==462 or _la==628:
                self.state = 4461
                self.threadType()
                self.state = 4466
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 4462
                    self.match(MySqlParser.COMMA)
                    self.state = 4463
                    self.threadType()
                    self.state = 4468
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)



            self.state = 4473
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==663:
                self.state = 4471
                self.match(MySqlParser.UNTIL)
                self.state = 4472
                self.untilOption()


            self.state = 4478
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==391 or _la==551 or _la==555 or _la==665:
                self.state = 4475
                self.connectionOption()
                self.state = 4480
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 4482
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==65:
                self.state = 4481
                self.channelOption()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class StopSlaveContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def STOP(self):
            return self.getToken(MySqlParser.STOP, 0)

        def SLAVE(self):
            return self.getToken(MySqlParser.SLAVE, 0)

        def threadType(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ThreadTypeContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ThreadTypeContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_stopSlave

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStopSlave" ):
                listener.enterStopSlave(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStopSlave" ):
                listener.exitStopSlave(self)




    def stopSlave(self):

        localctx = MySqlParser.StopSlaveContext(self, self._ctx, self.state)
        self.enterRule(localctx, 342, self.RULE_stopSlave)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4484
            self.match(MySqlParser.STOP)
            self.state = 4485
            self.match(MySqlParser.SLAVE)
            self.state = 4494
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==462 or _la==628:
                self.state = 4486
                self.threadType()
                self.state = 4491
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 4487
                    self.match(MySqlParser.COMMA)
                    self.state = 4488
                    self.threadType()
                    self.state = 4493
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)



        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class StartGroupReplicationContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def START(self):
            return self.getToken(MySqlParser.START, 0)

        def GROUP_REPLICATION(self):
            return self.getToken(MySqlParser.GROUP_REPLICATION, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_startGroupReplication

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStartGroupReplication" ):
                listener.enterStartGroupReplication(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStartGroupReplication" ):
                listener.exitStartGroupReplication(self)




    def startGroupReplication(self):

        localctx = MySqlParser.StartGroupReplicationContext(self, self._ctx, self.state)
        self.enterRule(localctx, 344, self.RULE_startGroupReplication)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4496
            self.match(MySqlParser.START)
            self.state = 4497
            self.match(MySqlParser.GROUP_REPLICATION)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class StopGroupReplicationContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def STOP(self):
            return self.getToken(MySqlParser.STOP, 0)

        def GROUP_REPLICATION(self):
            return self.getToken(MySqlParser.GROUP_REPLICATION, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_stopGroupReplication

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStopGroupReplication" ):
                listener.enterStopGroupReplication(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStopGroupReplication" ):
                listener.exitStopGroupReplication(self)




    def stopGroupReplication(self):

        localctx = MySqlParser.StopGroupReplicationContext(self, self._ctx, self.state)
        self.enterRule(localctx, 346, self.RULE_stopGroupReplication)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4499
            self.match(MySqlParser.STOP)
            self.state = 4500
            self.match(MySqlParser.GROUP_REPLICATION)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class MasterOptionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_masterOption

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class MasterStringOptionContext(MasterOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.MasterOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def stringMasterOption(self):
            return self.getTypedRuleContext(MySqlParser.StringMasterOptionContext,0)

        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMasterStringOption" ):
                listener.enterMasterStringOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMasterStringOption" ):
                listener.exitMasterStringOption(self)


    class MasterRealOptionContext(MasterOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.MasterOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def MASTER_HEARTBEAT_PERIOD(self):
            return self.getToken(MySqlParser.MASTER_HEARTBEAT_PERIOD, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)
        def REAL_LITERAL(self):
            return self.getToken(MySqlParser.REAL_LITERAL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMasterRealOption" ):
                listener.enterMasterRealOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMasterRealOption" ):
                listener.exitMasterRealOption(self)


    class MasterBoolOptionContext(MasterOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.MasterOptionContext
            super().__init__(parser)
            self.boolVal = None # Token
            self.copyFrom(ctx)

        def boolMasterOption(self):
            return self.getTypedRuleContext(MySqlParser.BoolMasterOptionContext,0)

        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)
        def ZERO_DECIMAL(self):
            return self.getToken(MySqlParser.ZERO_DECIMAL, 0)
        def ONE_DECIMAL(self):
            return self.getToken(MySqlParser.ONE_DECIMAL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMasterBoolOption" ):
                listener.enterMasterBoolOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMasterBoolOption" ):
                listener.exitMasterBoolOption(self)


    class MasterUidListOptionContext(MasterOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.MasterOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def IGNORE_SERVER_IDS(self):
            return self.getToken(MySqlParser.IGNORE_SERVER_IDS, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def uid(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UidContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UidContext,i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMasterUidListOption" ):
                listener.enterMasterUidListOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMasterUidListOption" ):
                listener.exitMasterUidListOption(self)


    class MasterDecimalOptionContext(MasterOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.MasterOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def decimalMasterOption(self):
            return self.getTypedRuleContext(MySqlParser.DecimalMasterOptionContext,0)

        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)
        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMasterDecimalOption" ):
                listener.enterMasterDecimalOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMasterDecimalOption" ):
                listener.exitMasterDecimalOption(self)



    def masterOption(self):

        localctx = MySqlParser.MasterOptionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 348, self.RULE_masterOption)
        self._la = 0 # Token type
        try:
            self.state = 4531
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [107, 482, 483, 485, 489, 490, 491, 492, 493, 494, 495, 496, 497, 575]:
                localctx = MySqlParser.MasterStringOptionContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 4502
                self.stringMasterOption()
                self.state = 4503
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 4504
                self.match(MySqlParser.STRING_LITERAL)
                pass
            elif token in [479, 480, 484, 486, 487, 576]:
                localctx = MySqlParser.MasterDecimalOptionContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 4506
                self.decimalMasterOption()
                self.state = 4507
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 4508
                self.decimalLiteral()
                pass
            elif token in [108, 478, 488]:
                localctx = MySqlParser.MasterBoolOptionContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 4510
                self.boolMasterOption()
                self.state = 4511
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 4512
                localctx.boolVal = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==1138 or _la==1139):
                    localctx.boolVal = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass
            elif token in [481]:
                localctx = MySqlParser.MasterRealOptionContext(self, localctx)
                self.enterOuterAlt(localctx, 4)
                self.state = 4514
                self.match(MySqlParser.MASTER_HEARTBEAT_PERIOD)
                self.state = 4515
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 4516
                self.match(MySqlParser.REAL_LITERAL)
                pass
            elif token in [449]:
                localctx = MySqlParser.MasterUidListOptionContext(self, localctx)
                self.enterOuterAlt(localctx, 5)
                self.state = 4517
                self.match(MySqlParser.IGNORE_SERVER_IDS)
                self.state = 4518
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 4519
                self.match(MySqlParser.LR_BRACKET)
                self.state = 4528
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513122304) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055071174737) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                    self.state = 4520
                    self.uid()
                    self.state = 4525
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==1135:
                        self.state = 4521
                        self.match(MySqlParser.COMMA)
                        self.state = 4522
                        self.uid()
                        self.state = 4527
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)



                self.state = 4530
                self.match(MySqlParser.RR_BRACKET)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class StringMasterOptionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MASTER_BIND(self):
            return self.getToken(MySqlParser.MASTER_BIND, 0)

        def MASTER_HOST(self):
            return self.getToken(MySqlParser.MASTER_HOST, 0)

        def MASTER_USER(self):
            return self.getToken(MySqlParser.MASTER_USER, 0)

        def MASTER_PASSWORD(self):
            return self.getToken(MySqlParser.MASTER_PASSWORD, 0)

        def MASTER_LOG_FILE(self):
            return self.getToken(MySqlParser.MASTER_LOG_FILE, 0)

        def RELAY_LOG_FILE(self):
            return self.getToken(MySqlParser.RELAY_LOG_FILE, 0)

        def MASTER_SSL_CA(self):
            return self.getToken(MySqlParser.MASTER_SSL_CA, 0)

        def MASTER_SSL_CAPATH(self):
            return self.getToken(MySqlParser.MASTER_SSL_CAPATH, 0)

        def MASTER_SSL_CERT(self):
            return self.getToken(MySqlParser.MASTER_SSL_CERT, 0)

        def MASTER_SSL_CRL(self):
            return self.getToken(MySqlParser.MASTER_SSL_CRL, 0)

        def MASTER_SSL_CRLPATH(self):
            return self.getToken(MySqlParser.MASTER_SSL_CRLPATH, 0)

        def MASTER_SSL_KEY(self):
            return self.getToken(MySqlParser.MASTER_SSL_KEY, 0)

        def MASTER_SSL_CIPHER(self):
            return self.getToken(MySqlParser.MASTER_SSL_CIPHER, 0)

        def MASTER_TLS_VERSION(self):
            return self.getToken(MySqlParser.MASTER_TLS_VERSION, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_stringMasterOption

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStringMasterOption" ):
                listener.enterStringMasterOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStringMasterOption" ):
                listener.exitStringMasterOption(self)




    def stringMasterOption(self):

        localctx = MySqlParser.StringMasterOptionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 350, self.RULE_stringMasterOption)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4533
            _la = self._input.LA(1)
            if not(_la==107 or ((((_la - 482)) & ~0x3f) == 0 and ((1 << (_la - 482)) & 65419) != 0) or _la==575):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DecimalMasterOptionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MASTER_PORT(self):
            return self.getToken(MySqlParser.MASTER_PORT, 0)

        def MASTER_CONNECT_RETRY(self):
            return self.getToken(MySqlParser.MASTER_CONNECT_RETRY, 0)

        def MASTER_RETRY_COUNT(self):
            return self.getToken(MySqlParser.MASTER_RETRY_COUNT, 0)

        def MASTER_DELAY(self):
            return self.getToken(MySqlParser.MASTER_DELAY, 0)

        def MASTER_LOG_POS(self):
            return self.getToken(MySqlParser.MASTER_LOG_POS, 0)

        def RELAY_LOG_POS(self):
            return self.getToken(MySqlParser.RELAY_LOG_POS, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_decimalMasterOption

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDecimalMasterOption" ):
                listener.enterDecimalMasterOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDecimalMasterOption" ):
                listener.exitDecimalMasterOption(self)




    def decimalMasterOption(self):

        localctx = MySqlParser.DecimalMasterOptionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 352, self.RULE_decimalMasterOption)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4535
            _la = self._input.LA(1)
            if not(((((_la - 479)) & ~0x3f) == 0 and ((1 << (_la - 479)) & 419) != 0) or _la==576):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class BoolMasterOptionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MASTER_AUTO_POSITION(self):
            return self.getToken(MySqlParser.MASTER_AUTO_POSITION, 0)

        def MASTER_SSL(self):
            return self.getToken(MySqlParser.MASTER_SSL, 0)

        def MASTER_SSL_VERIFY_SERVER_CERT(self):
            return self.getToken(MySqlParser.MASTER_SSL_VERIFY_SERVER_CERT, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_boolMasterOption

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterBoolMasterOption" ):
                listener.enterBoolMasterOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitBoolMasterOption" ):
                listener.exitBoolMasterOption(self)




    def boolMasterOption(self):

        localctx = MySqlParser.BoolMasterOptionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 354, self.RULE_boolMasterOption)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4537
            _la = self._input.LA(1)
            if not(_la==108 or _la==478 or _la==488):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ChannelOptionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FOR(self):
            return self.getToken(MySqlParser.FOR, 0)

        def CHANNEL(self):
            return self.getToken(MySqlParser.CHANNEL, 0)

        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_channelOption

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterChannelOption" ):
                listener.enterChannelOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitChannelOption" ):
                listener.exitChannelOption(self)




    def channelOption(self):

        localctx = MySqlParser.ChannelOptionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 356, self.RULE_channelOption)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4539
            self.match(MySqlParser.FOR)
            self.state = 4540
            self.match(MySqlParser.CHANNEL)
            self.state = 4541
            self.match(MySqlParser.STRING_LITERAL)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ReplicationFilterContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_replicationFilter

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class WildIgnoreTableReplicationContext(ReplicationFilterContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ReplicationFilterContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def REPLICATE_WILD_IGNORE_TABLE(self):
            return self.getToken(MySqlParser.REPLICATE_WILD_IGNORE_TABLE, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def simpleStrings(self):
            return self.getTypedRuleContext(MySqlParser.SimpleStringsContext,0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterWildIgnoreTableReplication" ):
                listener.enterWildIgnoreTableReplication(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitWildIgnoreTableReplication" ):
                listener.exitWildIgnoreTableReplication(self)


    class DoTableReplicationContext(ReplicationFilterContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ReplicationFilterContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def REPLICATE_DO_TABLE(self):
            return self.getToken(MySqlParser.REPLICATE_DO_TABLE, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def tables(self):
            return self.getTypedRuleContext(MySqlParser.TablesContext,0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDoTableReplication" ):
                listener.enterDoTableReplication(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDoTableReplication" ):
                listener.exitDoTableReplication(self)


    class IgnoreTableReplicationContext(ReplicationFilterContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ReplicationFilterContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def REPLICATE_IGNORE_TABLE(self):
            return self.getToken(MySqlParser.REPLICATE_IGNORE_TABLE, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def tables(self):
            return self.getTypedRuleContext(MySqlParser.TablesContext,0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIgnoreTableReplication" ):
                listener.enterIgnoreTableReplication(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIgnoreTableReplication" ):
                listener.exitIgnoreTableReplication(self)


    class RewriteDbReplicationContext(ReplicationFilterContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ReplicationFilterContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def REPLICATE_REWRITE_DB(self):
            return self.getToken(MySqlParser.REPLICATE_REWRITE_DB, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def tablePair(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.TablePairContext)
            else:
                return self.getTypedRuleContext(MySqlParser.TablePairContext,i)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRewriteDbReplication" ):
                listener.enterRewriteDbReplication(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRewriteDbReplication" ):
                listener.exitRewriteDbReplication(self)


    class DoDbReplicationContext(ReplicationFilterContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ReplicationFilterContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def REPLICATE_DO_DB(self):
            return self.getToken(MySqlParser.REPLICATE_DO_DB, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def uidList(self):
            return self.getTypedRuleContext(MySqlParser.UidListContext,0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDoDbReplication" ):
                listener.enterDoDbReplication(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDoDbReplication" ):
                listener.exitDoDbReplication(self)


    class IgnoreDbReplicationContext(ReplicationFilterContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ReplicationFilterContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def REPLICATE_IGNORE_DB(self):
            return self.getToken(MySqlParser.REPLICATE_IGNORE_DB, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def uidList(self):
            return self.getTypedRuleContext(MySqlParser.UidListContext,0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIgnoreDbReplication" ):
                listener.enterIgnoreDbReplication(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIgnoreDbReplication" ):
                listener.exitIgnoreDbReplication(self)


    class WildDoTableReplicationContext(ReplicationFilterContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ReplicationFilterContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def REPLICATE_WILD_DO_TABLE(self):
            return self.getToken(MySqlParser.REPLICATE_WILD_DO_TABLE, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def simpleStrings(self):
            return self.getTypedRuleContext(MySqlParser.SimpleStringsContext,0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterWildDoTableReplication" ):
                listener.enterWildDoTableReplication(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitWildDoTableReplication" ):
                listener.exitWildDoTableReplication(self)



    def replicationFilter(self):

        localctx = MySqlParser.ReplicationFilterContext(self, self._ctx, self.state)
        self.enterRule(localctx, 358, self.RULE_replicationFilter)
        self._la = 0 # Token type
        try:
            self.state = 4592
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [581]:
                localctx = MySqlParser.DoDbReplicationContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 4543
                self.match(MySqlParser.REPLICATE_DO_DB)
                self.state = 4544
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 4545
                self.match(MySqlParser.LR_BRACKET)
                self.state = 4546
                self.uidList()
                self.state = 4547
                self.match(MySqlParser.RR_BRACKET)
                pass
            elif token in [583]:
                localctx = MySqlParser.IgnoreDbReplicationContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 4549
                self.match(MySqlParser.REPLICATE_IGNORE_DB)
                self.state = 4550
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 4551
                self.match(MySqlParser.LR_BRACKET)
                self.state = 4552
                self.uidList()
                self.state = 4553
                self.match(MySqlParser.RR_BRACKET)
                pass
            elif token in [582]:
                localctx = MySqlParser.DoTableReplicationContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 4555
                self.match(MySqlParser.REPLICATE_DO_TABLE)
                self.state = 4556
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 4557
                self.match(MySqlParser.LR_BRACKET)
                self.state = 4558
                self.tables()
                self.state = 4559
                self.match(MySqlParser.RR_BRACKET)
                pass
            elif token in [584]:
                localctx = MySqlParser.IgnoreTableReplicationContext(self, localctx)
                self.enterOuterAlt(localctx, 4)
                self.state = 4561
                self.match(MySqlParser.REPLICATE_IGNORE_TABLE)
                self.state = 4562
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 4563
                self.match(MySqlParser.LR_BRACKET)
                self.state = 4564
                self.tables()
                self.state = 4565
                self.match(MySqlParser.RR_BRACKET)
                pass
            elif token in [586]:
                localctx = MySqlParser.WildDoTableReplicationContext(self, localctx)
                self.enterOuterAlt(localctx, 5)
                self.state = 4567
                self.match(MySqlParser.REPLICATE_WILD_DO_TABLE)
                self.state = 4568
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 4569
                self.match(MySqlParser.LR_BRACKET)
                self.state = 4570
                self.simpleStrings()
                self.state = 4571
                self.match(MySqlParser.RR_BRACKET)
                pass
            elif token in [587]:
                localctx = MySqlParser.WildIgnoreTableReplicationContext(self, localctx)
                self.enterOuterAlt(localctx, 6)
                self.state = 4573
                self.match(MySqlParser.REPLICATE_WILD_IGNORE_TABLE)
                self.state = 4574
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 4575
                self.match(MySqlParser.LR_BRACKET)
                self.state = 4576
                self.simpleStrings()
                self.state = 4577
                self.match(MySqlParser.RR_BRACKET)
                pass
            elif token in [585]:
                localctx = MySqlParser.RewriteDbReplicationContext(self, localctx)
                self.enterOuterAlt(localctx, 7)
                self.state = 4579
                self.match(MySqlParser.REPLICATE_REWRITE_DB)
                self.state = 4580
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 4581
                self.match(MySqlParser.LR_BRACKET)
                self.state = 4582
                self.tablePair()
                self.state = 4587
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 4583
                    self.match(MySqlParser.COMMA)
                    self.state = 4584
                    self.tablePair()
                    self.state = 4589
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 4590
                self.match(MySqlParser.RR_BRACKET)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class TablePairContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.firstTable = None # TableNameContext
            self.secondTable = None # TableNameContext

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def COMMA(self):
            return self.getToken(MySqlParser.COMMA, 0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def tableName(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.TableNameContext)
            else:
                return self.getTypedRuleContext(MySqlParser.TableNameContext,i)


        def getRuleIndex(self):
            return MySqlParser.RULE_tablePair

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTablePair" ):
                listener.enterTablePair(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTablePair" ):
                listener.exitTablePair(self)




    def tablePair(self):

        localctx = MySqlParser.TablePairContext(self, self._ctx, self.state)
        self.enterRule(localctx, 360, self.RULE_tablePair)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4594
            self.match(MySqlParser.LR_BRACKET)
            self.state = 4595
            localctx.firstTable = self.tableName()
            self.state = 4596
            self.match(MySqlParser.COMMA)
            self.state = 4597
            localctx.secondTable = self.tableName()
            self.state = 4598
            self.match(MySqlParser.RR_BRACKET)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ThreadTypeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def IO_THREAD(self):
            return self.getToken(MySqlParser.IO_THREAD, 0)

        def SQL_THREAD(self):
            return self.getToken(MySqlParser.SQL_THREAD, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_threadType

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterThreadType" ):
                listener.enterThreadType(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitThreadType" ):
                listener.exitThreadType(self)




    def threadType(self):

        localctx = MySqlParser.ThreadTypeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 362, self.RULE_threadType)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4600
            _la = self._input.LA(1)
            if not(_la==462 or _la==628):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class UntilOptionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_untilOption

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class GtidsUntilOptionContext(UntilOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.UntilOptionContext
            super().__init__(parser)
            self.gtids = None # Token
            self.copyFrom(ctx)

        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)
        def gtuidSet(self):
            return self.getTypedRuleContext(MySqlParser.GtuidSetContext,0)

        def SQL_BEFORE_GTIDS(self):
            return self.getToken(MySqlParser.SQL_BEFORE_GTIDS, 0)
        def SQL_AFTER_GTIDS(self):
            return self.getToken(MySqlParser.SQL_AFTER_GTIDS, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterGtidsUntilOption" ):
                listener.enterGtidsUntilOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitGtidsUntilOption" ):
                listener.exitGtidsUntilOption(self)


    class SqlGapsUntilOptionContext(UntilOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.UntilOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def SQL_AFTER_MTS_GAPS(self):
            return self.getToken(MySqlParser.SQL_AFTER_MTS_GAPS, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSqlGapsUntilOption" ):
                listener.enterSqlGapsUntilOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSqlGapsUntilOption" ):
                listener.exitSqlGapsUntilOption(self)


    class MasterLogUntilOptionContext(UntilOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.UntilOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def MASTER_LOG_FILE(self):
            return self.getToken(MySqlParser.MASTER_LOG_FILE, 0)
        def EQUAL_SYMBOL(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.EQUAL_SYMBOL)
            else:
                return self.getToken(MySqlParser.EQUAL_SYMBOL, i)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)
        def COMMA(self):
            return self.getToken(MySqlParser.COMMA, 0)
        def MASTER_LOG_POS(self):
            return self.getToken(MySqlParser.MASTER_LOG_POS, 0)
        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMasterLogUntilOption" ):
                listener.enterMasterLogUntilOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMasterLogUntilOption" ):
                listener.exitMasterLogUntilOption(self)


    class RelayLogUntilOptionContext(UntilOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.UntilOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def RELAY_LOG_FILE(self):
            return self.getToken(MySqlParser.RELAY_LOG_FILE, 0)
        def EQUAL_SYMBOL(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.EQUAL_SYMBOL)
            else:
                return self.getToken(MySqlParser.EQUAL_SYMBOL, i)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)
        def COMMA(self):
            return self.getToken(MySqlParser.COMMA, 0)
        def RELAY_LOG_POS(self):
            return self.getToken(MySqlParser.RELAY_LOG_POS, 0)
        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRelayLogUntilOption" ):
                listener.enterRelayLogUntilOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRelayLogUntilOption" ):
                listener.exitRelayLogUntilOption(self)



    def untilOption(self):

        localctx = MySqlParser.UntilOptionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 364, self.RULE_untilOption)
        self._la = 0 # Token type
        try:
            self.state = 4620
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [622, 624]:
                localctx = MySqlParser.GtidsUntilOptionContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 4602
                localctx.gtids = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==622 or _la==624):
                    localctx.gtids = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 4603
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 4604
                self.gtuidSet()
                pass
            elif token in [483]:
                localctx = MySqlParser.MasterLogUntilOptionContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 4605
                self.match(MySqlParser.MASTER_LOG_FILE)
                self.state = 4606
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 4607
                self.match(MySqlParser.STRING_LITERAL)
                self.state = 4608
                self.match(MySqlParser.COMMA)
                self.state = 4609
                self.match(MySqlParser.MASTER_LOG_POS)
                self.state = 4610
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 4611
                self.decimalLiteral()
                pass
            elif token in [575]:
                localctx = MySqlParser.RelayLogUntilOptionContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 4612
                self.match(MySqlParser.RELAY_LOG_FILE)
                self.state = 4613
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 4614
                self.match(MySqlParser.STRING_LITERAL)
                self.state = 4615
                self.match(MySqlParser.COMMA)
                self.state = 4616
                self.match(MySqlParser.RELAY_LOG_POS)
                self.state = 4617
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 4618
                self.decimalLiteral()
                pass
            elif token in [623]:
                localctx = MySqlParser.SqlGapsUntilOptionContext(self, localctx)
                self.enterOuterAlt(localctx, 4)
                self.state = 4619
                self.match(MySqlParser.SQL_AFTER_MTS_GAPS)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ConnectionOptionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_connectionOption

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class PluginDirConnectionOptionContext(ConnectionOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ConnectionOptionContext
            super().__init__(parser)
            self.conOptPluginDir = None # Token
            self.copyFrom(ctx)

        def PLUGIN_DIR(self):
            return self.getToken(MySqlParser.PLUGIN_DIR, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPluginDirConnectionOption" ):
                listener.enterPluginDirConnectionOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPluginDirConnectionOption" ):
                listener.exitPluginDirConnectionOption(self)


    class UserConnectionOptionContext(ConnectionOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ConnectionOptionContext
            super().__init__(parser)
            self.conOptUser = None # Token
            self.copyFrom(ctx)

        def USER(self):
            return self.getToken(MySqlParser.USER, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUserConnectionOption" ):
                listener.enterUserConnectionOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUserConnectionOption" ):
                listener.exitUserConnectionOption(self)


    class DefaultAuthConnectionOptionContext(ConnectionOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ConnectionOptionContext
            super().__init__(parser)
            self.conOptDefAuth = None # Token
            self.copyFrom(ctx)

        def DEFAULT_AUTH(self):
            return self.getToken(MySqlParser.DEFAULT_AUTH, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDefaultAuthConnectionOption" ):
                listener.enterDefaultAuthConnectionOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDefaultAuthConnectionOption" ):
                listener.exitDefaultAuthConnectionOption(self)


    class PasswordConnectionOptionContext(ConnectionOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ConnectionOptionContext
            super().__init__(parser)
            self.conOptPassword = None # Token
            self.copyFrom(ctx)

        def PASSWORD(self):
            return self.getToken(MySqlParser.PASSWORD, 0)
        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPasswordConnectionOption" ):
                listener.enterPasswordConnectionOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPasswordConnectionOption" ):
                listener.exitPasswordConnectionOption(self)



    def connectionOption(self):

        localctx = MySqlParser.ConnectionOptionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 366, self.RULE_connectionOption)
        try:
            self.state = 4634
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [665]:
                localctx = MySqlParser.UserConnectionOptionContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 4622
                self.match(MySqlParser.USER)
                self.state = 4623
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 4624
                localctx.conOptUser = self.match(MySqlParser.STRING_LITERAL)
                pass
            elif token in [551]:
                localctx = MySqlParser.PasswordConnectionOptionContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 4625
                self.match(MySqlParser.PASSWORD)
                self.state = 4626
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 4627
                localctx.conOptPassword = self.match(MySqlParser.STRING_LITERAL)
                pass
            elif token in [391]:
                localctx = MySqlParser.DefaultAuthConnectionOptionContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 4628
                self.match(MySqlParser.DEFAULT_AUTH)
                self.state = 4629
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 4630
                localctx.conOptDefAuth = self.match(MySqlParser.STRING_LITERAL)
                pass
            elif token in [555]:
                localctx = MySqlParser.PluginDirConnectionOptionContext(self, localctx)
                self.enterOuterAlt(localctx, 4)
                self.state = 4631
                self.match(MySqlParser.PLUGIN_DIR)
                self.state = 4632
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 4633
                localctx.conOptPluginDir = self.match(MySqlParser.STRING_LITERAL)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class GtuidSetContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def uuidSet(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UuidSetContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UuidSetContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_gtuidSet

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterGtuidSet" ):
                listener.enterGtuidSet(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitGtuidSet" ):
                listener.exitGtuidSet(self)




    def gtuidSet(self):

        localctx = MySqlParser.GtuidSetContext(self, self._ctx, self.state)
        self.enterRule(localctx, 368, self.RULE_gtuidSet)
        self._la = 0 # Token type
        try:
            self.state = 4645
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1138, 1139, 1140, 1149, 1151]:
                self.enterOuterAlt(localctx, 1)
                self.state = 4636
                self.uuidSet()
                self.state = 4641
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 4637
                    self.match(MySqlParser.COMMA)
                    self.state = 4638
                    self.uuidSet()
                    self.state = 4643
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [1148]:
                self.enterOuterAlt(localctx, 2)
                self.state = 4644
                self.match(MySqlParser.STRING_LITERAL)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class XaStartTransactionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.xaStart = None # Token
            self.xaAction = None # Token

        def XA(self):
            return self.getToken(MySqlParser.XA, 0)

        def xid(self):
            return self.getTypedRuleContext(MySqlParser.XidContext,0)


        def START(self):
            return self.getToken(MySqlParser.START, 0)

        def BEGIN(self):
            return self.getToken(MySqlParser.BEGIN, 0)

        def JOIN(self):
            return self.getToken(MySqlParser.JOIN, 0)

        def RESUME(self):
            return self.getToken(MySqlParser.RESUME, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_xaStartTransaction

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterXaStartTransaction" ):
                listener.enterXaStartTransaction(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitXaStartTransaction" ):
                listener.exitXaStartTransaction(self)




    def xaStartTransaction(self):

        localctx = MySqlParser.XaStartTransactionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 370, self.RULE_xaStartTransaction)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4647
            self.match(MySqlParser.XA)
            self.state = 4648
            localctx.xaStart = self._input.LT(1)
            _la = self._input.LA(1)
            if not(_la==344 or _la==629):
                localctx.xaStart = self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 4649
            self.xid()
            self.state = 4651
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==90 or _la==591:
                self.state = 4650
                localctx.xaAction = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==90 or _la==591):
                    localctx.xaAction = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class XaEndTransactionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def XA(self):
            return self.getToken(MySqlParser.XA, 0)

        def END(self):
            return self.getToken(MySqlParser.END, 0)

        def xid(self):
            return self.getTypedRuleContext(MySqlParser.XidContext,0)


        def SUSPEND(self):
            return self.getToken(MySqlParser.SUSPEND, 0)

        def FOR(self):
            return self.getToken(MySqlParser.FOR, 0)

        def MIGRATE(self):
            return self.getToken(MySqlParser.MIGRATE, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_xaEndTransaction

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterXaEndTransaction" ):
                listener.enterXaEndTransaction(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitXaEndTransaction" ):
                listener.exitXaEndTransaction(self)




    def xaEndTransaction(self):

        localctx = MySqlParser.XaEndTransactionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 372, self.RULE_xaEndTransaction)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4653
            self.match(MySqlParser.XA)
            self.state = 4654
            self.match(MySqlParser.END)
            self.state = 4655
            self.xid()
            self.state = 4661
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==643:
                self.state = 4656
                self.match(MySqlParser.SUSPEND)
                self.state = 4659
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==65:
                    self.state = 4657
                    self.match(MySqlParser.FOR)
                    self.state = 4658
                    self.match(MySqlParser.MIGRATE)




        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class XaPrepareStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def XA(self):
            return self.getToken(MySqlParser.XA, 0)

        def PREPARE(self):
            return self.getToken(MySqlParser.PREPARE, 0)

        def xid(self):
            return self.getTypedRuleContext(MySqlParser.XidContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_xaPrepareStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterXaPrepareStatement" ):
                listener.enterXaPrepareStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitXaPrepareStatement" ):
                listener.exitXaPrepareStatement(self)




    def xaPrepareStatement(self):

        localctx = MySqlParser.XaPrepareStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 374, self.RULE_xaPrepareStatement)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4663
            self.match(MySqlParser.XA)
            self.state = 4664
            self.match(MySqlParser.PREPARE)
            self.state = 4665
            self.xid()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class XaCommitWorkContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def XA(self):
            return self.getToken(MySqlParser.XA, 0)

        def COMMIT(self):
            return self.getToken(MySqlParser.COMMIT, 0)

        def xid(self):
            return self.getTypedRuleContext(MySqlParser.XidContext,0)


        def ONE(self):
            return self.getToken(MySqlParser.ONE, 0)

        def PHASE(self):
            return self.getToken(MySqlParser.PHASE, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_xaCommitWork

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterXaCommitWork" ):
                listener.enterXaCommitWork(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitXaCommitWork" ):
                listener.exitXaCommitWork(self)




    def xaCommitWork(self):

        localctx = MySqlParser.XaCommitWorkContext(self, self._ctx, self.state)
        self.enterRule(localctx, 376, self.RULE_xaCommitWork)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4667
            self.match(MySqlParser.XA)
            self.state = 4668
            self.match(MySqlParser.COMMIT)
            self.state = 4669
            self.xid()
            self.state = 4672
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==536:
                self.state = 4670
                self.match(MySqlParser.ONE)
                self.state = 4671
                self.match(MySqlParser.PHASE)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class XaRollbackWorkContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def XA(self):
            return self.getToken(MySqlParser.XA, 0)

        def ROLLBACK(self):
            return self.getToken(MySqlParser.ROLLBACK, 0)

        def xid(self):
            return self.getTypedRuleContext(MySqlParser.XidContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_xaRollbackWork

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterXaRollbackWork" ):
                listener.enterXaRollbackWork(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitXaRollbackWork" ):
                listener.exitXaRollbackWork(self)




    def xaRollbackWork(self):

        localctx = MySqlParser.XaRollbackWorkContext(self, self._ctx, self.state)
        self.enterRule(localctx, 378, self.RULE_xaRollbackWork)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4674
            self.match(MySqlParser.XA)
            self.state = 4675
            self.match(MySqlParser.ROLLBACK)
            self.state = 4676
            self.xid()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class XaRecoverWorkContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def XA(self):
            return self.getToken(MySqlParser.XA, 0)

        def RECOVER(self):
            return self.getToken(MySqlParser.RECOVER, 0)

        def CONVERT(self):
            return self.getToken(MySqlParser.CONVERT, 0)

        def xid(self):
            return self.getTypedRuleContext(MySqlParser.XidContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_xaRecoverWork

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterXaRecoverWork" ):
                listener.enterXaRecoverWork(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitXaRecoverWork" ):
                listener.exitXaRecoverWork(self)




    def xaRecoverWork(self):

        localctx = MySqlParser.XaRecoverWorkContext(self, self._ctx, self.state)
        self.enterRule(localctx, 380, self.RULE_xaRecoverWork)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4678
            self.match(MySqlParser.XA)
            self.state = 4679
            self.match(MySqlParser.RECOVER)
            self.state = 4682
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==32:
                self.state = 4680
                self.match(MySqlParser.CONVERT)
                self.state = 4681
                self.xid()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class PrepareStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.query = None # Token
            self.variable = None # Token

        def PREPARE(self):
            return self.getToken(MySqlParser.PREPARE, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def FROM(self):
            return self.getToken(MySqlParser.FROM, 0)

        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def LOCAL_ID(self):
            return self.getToken(MySqlParser.LOCAL_ID, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_prepareStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPrepareStatement" ):
                listener.enterPrepareStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPrepareStatement" ):
                listener.exitPrepareStatement(self)




    def prepareStatement(self):

        localctx = MySqlParser.PrepareStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 382, self.RULE_prepareStatement)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4684
            self.match(MySqlParser.PREPARE)
            self.state = 4685
            self.uid()
            self.state = 4686
            self.match(MySqlParser.FROM)
            self.state = 4689
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1148]:
                self.state = 4687
                localctx.query = self.match(MySqlParser.STRING_LITERAL)
                pass
            elif token in [1159]:
                self.state = 4688
                localctx.variable = self.match(MySqlParser.LOCAL_ID)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ExecuteStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def EXECUTE(self):
            return self.getToken(MySqlParser.EXECUTE, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def USING(self):
            return self.getToken(MySqlParser.USING, 0)

        def userVariables(self):
            return self.getTypedRuleContext(MySqlParser.UserVariablesContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_executeStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterExecuteStatement" ):
                listener.enterExecuteStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitExecuteStatement" ):
                listener.exitExecuteStatement(self)




    def executeStatement(self):

        localctx = MySqlParser.ExecuteStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 384, self.RULE_executeStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4691
            self.match(MySqlParser.EXECUTE)
            self.state = 4692
            self.uid()
            self.state = 4695
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==187:
                self.state = 4693
                self.match(MySqlParser.USING)
                self.state = 4694
                self.userVariables()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DeallocatePrepareContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.dropFormat = None # Token

        def PREPARE(self):
            return self.getToken(MySqlParser.PREPARE, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def DEALLOCATE(self):
            return self.getToken(MySqlParser.DEALLOCATE, 0)

        def DROP(self):
            return self.getToken(MySqlParser.DROP, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_deallocatePrepare

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDeallocatePrepare" ):
                listener.enterDeallocatePrepare(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDeallocatePrepare" ):
                listener.exitDeallocatePrepare(self)




    def deallocatePrepare(self):

        localctx = MySqlParser.DeallocatePrepareContext(self, self._ctx, self.state)
        self.enterRule(localctx, 386, self.RULE_deallocatePrepare)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4697
            localctx.dropFormat = self._input.LT(1)
            _la = self._input.LA(1)
            if not(_la==51 or _la==390):
                localctx.dropFormat = self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 4698
            self.match(MySqlParser.PREPARE)
            self.state = 4699
            self.uid()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class RoutineBodyContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def blockStatement(self):
            return self.getTypedRuleContext(MySqlParser.BlockStatementContext,0)


        def sqlStatement(self):
            return self.getTypedRuleContext(MySqlParser.SqlStatementContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_routineBody

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRoutineBody" ):
                listener.enterRoutineBody(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRoutineBody" ):
                listener.exitRoutineBody(self)




    def routineBody(self):

        localctx = MySqlParser.RoutineBodyContext(self, self._ctx, self.state)
        self.enterRule(localctx, 388, self.RULE_routineBody)
        try:
            self.state = 4703
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,681,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 4701
                self.blockStatement()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 4702
                self.sqlStatement()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class BlockStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def BEGIN(self):
            return self.getToken(MySqlParser.BEGIN, 0)

        def END(self):
            return self.getToken(MySqlParser.END, 0)

        def uid(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UidContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UidContext,i)


        def COLON_SYMB(self):
            return self.getToken(MySqlParser.COLON_SYMB, 0)

        def declareVariable(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.DeclareVariableContext)
            else:
                return self.getTypedRuleContext(MySqlParser.DeclareVariableContext,i)


        def SEMI(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.SEMI)
            else:
                return self.getToken(MySqlParser.SEMI, i)

        def declareCondition(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.DeclareConditionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.DeclareConditionContext,i)


        def declareCursor(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.DeclareCursorContext)
            else:
                return self.getTypedRuleContext(MySqlParser.DeclareCursorContext,i)


        def declareHandler(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.DeclareHandlerContext)
            else:
                return self.getTypedRuleContext(MySqlParser.DeclareHandlerContext,i)


        def procedureSqlStatement(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ProcedureSqlStatementContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ProcedureSqlStatementContext,i)


        def getRuleIndex(self):
            return MySqlParser.RULE_blockStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterBlockStatement" ):
                listener.enterBlockStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitBlockStatement" ):
                listener.exitBlockStatement(self)




    def blockStatement(self):

        localctx = MySqlParser.BlockStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 390, self.RULE_blockStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4708
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,682,self._ctx)
            if la_ == 1:
                self.state = 4705
                self.uid()
                self.state = 4706
                self.match(MySqlParser.COLON_SYMB)


            self.state = 4710
            self.match(MySqlParser.BEGIN)
            self.state = 4716
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,683,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 4711
                    self.declareVariable()
                    self.state = 4712
                    self.match(MySqlParser.SEMI) 
                self.state = 4718
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,683,self._ctx)

            self.state = 4724
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,684,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 4719
                    self.declareCondition()
                    self.state = 4720
                    self.match(MySqlParser.SEMI) 
                self.state = 4726
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,684,self._ctx)

            self.state = 4732
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,685,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 4727
                    self.declareCursor()
                    self.state = 4728
                    self.match(MySqlParser.SEMI) 
                self.state = 4734
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,685,self._ctx)

            self.state = 4740
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==41:
                self.state = 4735
                self.declareHandler()
                self.state = 4736
                self.match(MySqlParser.SEMI)
                self.state = 4742
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 4746
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,687,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 4743
                    self.procedureSqlStatement() 
                self.state = 4748
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,687,self._ctx)

            self.state = 4749
            self.match(MySqlParser.END)
            self.state = 4751
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,688,self._ctx)
            if la_ == 1:
                self.state = 4750
                self.uid()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CaseStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CASE(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.CASE)
            else:
                return self.getToken(MySqlParser.CASE, i)

        def END(self):
            return self.getToken(MySqlParser.END, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def caseAlternative(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.CaseAlternativeContext)
            else:
                return self.getTypedRuleContext(MySqlParser.CaseAlternativeContext,i)


        def ELSE(self):
            return self.getToken(MySqlParser.ELSE, 0)

        def procedureSqlStatement(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ProcedureSqlStatementContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ProcedureSqlStatementContext,i)


        def getRuleIndex(self):
            return MySqlParser.RULE_caseStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCaseStatement" ):
                listener.enterCaseStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCaseStatement" ):
                listener.exitCaseStatement(self)




    def caseStatement(self):

        localctx = MySqlParser.CaseStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 392, self.RULE_caseStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4753
            self.match(MySqlParser.CASE)
            self.state = 4756
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,689,self._ctx)
            if la_ == 1:
                self.state = 4754
                self.uid()

            elif la_ == 2:
                self.state = 4755
                self.expression(0)


            self.state = 4759 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 4758
                self.caseAlternative()
                self.state = 4761 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==189):
                    break

            self.state = 4769
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==53:
                self.state = 4763
                self.match(MySqlParser.ELSE)
                self.state = 4765 
                self._errHandler.sync(self)
                _alt = 1
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt == 1:
                        self.state = 4764
                        self.procedureSqlStatement()

                    else:
                        raise NoViableAltException(self)
                    self.state = 4767 
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,691,self._ctx)



            self.state = 4771
            self.match(MySqlParser.END)
            self.state = 4772
            self.match(MySqlParser.CASE)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class IfStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self._procedureSqlStatement = None # ProcedureSqlStatementContext
            self.thenStatements = list() # of ProcedureSqlStatementContexts
            self.elseStatements = list() # of ProcedureSqlStatementContexts

        def IF(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.IF)
            else:
                return self.getToken(MySqlParser.IF, i)

        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def THEN(self):
            return self.getToken(MySqlParser.THEN, 0)

        def END(self):
            return self.getToken(MySqlParser.END, 0)

        def elifAlternative(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ElifAlternativeContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ElifAlternativeContext,i)


        def ELSE(self):
            return self.getToken(MySqlParser.ELSE, 0)

        def procedureSqlStatement(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ProcedureSqlStatementContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ProcedureSqlStatementContext,i)


        def getRuleIndex(self):
            return MySqlParser.RULE_ifStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIfStatement" ):
                listener.enterIfStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIfStatement" ):
                listener.exitIfStatement(self)




    def ifStatement(self):

        localctx = MySqlParser.IfStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 394, self.RULE_ifStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4774
            self.match(MySqlParser.IF)
            self.state = 4775
            self.expression(0)
            self.state = 4776
            self.match(MySqlParser.THEN)
            self.state = 4778 
            self._errHandler.sync(self)
            _alt = 1
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt == 1:
                    self.state = 4777
                    localctx._procedureSqlStatement = self.procedureSqlStatement()
                    localctx.thenStatements.append(localctx._procedureSqlStatement)

                else:
                    raise NoViableAltException(self)
                self.state = 4780 
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,693,self._ctx)

            self.state = 4785
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==54:
                self.state = 4782
                self.elifAlternative()
                self.state = 4787
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 4794
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==53:
                self.state = 4788
                self.match(MySqlParser.ELSE)
                self.state = 4790 
                self._errHandler.sync(self)
                _alt = 1
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt == 1:
                        self.state = 4789
                        localctx._procedureSqlStatement = self.procedureSqlStatement()
                        localctx.elseStatements.append(localctx._procedureSqlStatement)

                    else:
                        raise NoViableAltException(self)
                    self.state = 4792 
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,695,self._ctx)



            self.state = 4796
            self.match(MySqlParser.END)
            self.state = 4797
            self.match(MySqlParser.IF)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class IterateStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ITERATE(self):
            return self.getToken(MySqlParser.ITERATE, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_iterateStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIterateStatement" ):
                listener.enterIterateStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIterateStatement" ):
                listener.exitIterateStatement(self)




    def iterateStatement(self):

        localctx = MySqlParser.IterateStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 396, self.RULE_iterateStatement)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4799
            self.match(MySqlParser.ITERATE)
            self.state = 4800
            self.uid()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class LeaveStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LEAVE(self):
            return self.getToken(MySqlParser.LEAVE, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_leaveStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLeaveStatement" ):
                listener.enterLeaveStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLeaveStatement" ):
                listener.exitLeaveStatement(self)




    def leaveStatement(self):

        localctx = MySqlParser.LeaveStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 398, self.RULE_leaveStatement)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4802
            self.match(MySqlParser.LEAVE)
            self.state = 4803
            self.uid()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class LoopStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LOOP(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.LOOP)
            else:
                return self.getToken(MySqlParser.LOOP, i)

        def END(self):
            return self.getToken(MySqlParser.END, 0)

        def uid(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UidContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UidContext,i)


        def COLON_SYMB(self):
            return self.getToken(MySqlParser.COLON_SYMB, 0)

        def procedureSqlStatement(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ProcedureSqlStatementContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ProcedureSqlStatementContext,i)


        def getRuleIndex(self):
            return MySqlParser.RULE_loopStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLoopStatement" ):
                listener.enterLoopStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLoopStatement" ):
                listener.exitLoopStatement(self)




    def loopStatement(self):

        localctx = MySqlParser.LoopStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 400, self.RULE_loopStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4808
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513122304) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055071174737) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                self.state = 4805
                self.uid()
                self.state = 4806
                self.match(MySqlParser.COLON_SYMB)


            self.state = 4810
            self.match(MySqlParser.LOOP)
            self.state = 4812 
            self._errHandler.sync(self)
            _alt = 1
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt == 1:
                    self.state = 4811
                    self.procedureSqlStatement()

                else:
                    raise NoViableAltException(self)
                self.state = 4814 
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,698,self._ctx)

            self.state = 4816
            self.match(MySqlParser.END)
            self.state = 4817
            self.match(MySqlParser.LOOP)
            self.state = 4819
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513122304) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055071174737) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                self.state = 4818
                self.uid()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class RepeatStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def REPEAT(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.REPEAT)
            else:
                return self.getToken(MySqlParser.REPEAT, i)

        def UNTIL(self):
            return self.getToken(MySqlParser.UNTIL, 0)

        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def END(self):
            return self.getToken(MySqlParser.END, 0)

        def uid(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UidContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UidContext,i)


        def COLON_SYMB(self):
            return self.getToken(MySqlParser.COLON_SYMB, 0)

        def procedureSqlStatement(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ProcedureSqlStatementContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ProcedureSqlStatementContext,i)


        def getRuleIndex(self):
            return MySqlParser.RULE_repeatStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRepeatStatement" ):
                listener.enterRepeatStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRepeatStatement" ):
                listener.exitRepeatStatement(self)




    def repeatStatement(self):

        localctx = MySqlParser.RepeatStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 402, self.RULE_repeatStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4824
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,700,self._ctx)
            if la_ == 1:
                self.state = 4821
                self.uid()
                self.state = 4822
                self.match(MySqlParser.COLON_SYMB)


            self.state = 4826
            self.match(MySqlParser.REPEAT)
            self.state = 4828 
            self._errHandler.sync(self)
            _alt = 1
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt == 1:
                    self.state = 4827
                    self.procedureSqlStatement()

                else:
                    raise NoViableAltException(self)
                self.state = 4830 
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,701,self._ctx)

            self.state = 4832
            self.match(MySqlParser.UNTIL)
            self.state = 4833
            self.expression(0)
            self.state = 4834
            self.match(MySqlParser.END)
            self.state = 4835
            self.match(MySqlParser.REPEAT)
            self.state = 4837
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513122304) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055071174737) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                self.state = 4836
                self.uid()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ReturnStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RETURN(self):
            return self.getToken(MySqlParser.RETURN, 0)

        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_returnStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterReturnStatement" ):
                listener.enterReturnStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitReturnStatement" ):
                listener.exitReturnStatement(self)




    def returnStatement(self):

        localctx = MySqlParser.ReturnStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 404, self.RULE_returnStatement)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4839
            self.match(MySqlParser.RETURN)
            self.state = 4840
            self.expression(0)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class WhileStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def WHILE(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.WHILE)
            else:
                return self.getToken(MySqlParser.WHILE, i)

        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def DO(self):
            return self.getToken(MySqlParser.DO, 0)

        def END(self):
            return self.getToken(MySqlParser.END, 0)

        def uid(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UidContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UidContext,i)


        def COLON_SYMB(self):
            return self.getToken(MySqlParser.COLON_SYMB, 0)

        def procedureSqlStatement(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ProcedureSqlStatementContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ProcedureSqlStatementContext,i)


        def getRuleIndex(self):
            return MySqlParser.RULE_whileStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterWhileStatement" ):
                listener.enterWhileStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitWhileStatement" ):
                listener.exitWhileStatement(self)




    def whileStatement(self):

        localctx = MySqlParser.WhileStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 406, self.RULE_whileStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4845
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513122304) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055071174737) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                self.state = 4842
                self.uid()
                self.state = 4843
                self.match(MySqlParser.COLON_SYMB)


            self.state = 4847
            self.match(MySqlParser.WHILE)
            self.state = 4848
            self.expression(0)
            self.state = 4849
            self.match(MySqlParser.DO)
            self.state = 4851 
            self._errHandler.sync(self)
            _alt = 1
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt == 1:
                    self.state = 4850
                    self.procedureSqlStatement()

                else:
                    raise NoViableAltException(self)
                self.state = 4853 
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,704,self._ctx)

            self.state = 4855
            self.match(MySqlParser.END)
            self.state = 4856
            self.match(MySqlParser.WHILE)
            self.state = 4858
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & 756891332513122304) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055071174737) != 0) or ((((_la - 140)) & ~0x3f) == 0 and ((1 << (_la - 140)) & 268698883) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17174494689) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & -1099511627777) != 0) or ((((_la - 345)) & ~0x3f) == 0 and ((1 << (_la - 345)) & -2882305960540372993) != 0) or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & -4398063288321) != 0) or ((((_la - 473)) & ~0x3f) == 0 and ((1 << (_la - 473)) & -16325548649218049) != 0) or ((((_la - 537)) & ~0x3f) == 0 and ((1 << (_la - 537)) & -9007199258936065) != 0) or ((((_la - 601)) & ~0x3f) == 0 and ((1 << (_la - 601)) & -68719476801) != 0) or ((((_la - 665)) & ~0x3f) == 0 and ((1 << (_la - 665)) & -22236531750340609) != 0) or ((((_la - 729)) & ~0x3f) == 0 and ((1 << (_la - 729)) & -65) != 0) or ((((_la - 793)) & ~0x3f) == 0 and ((1 << (_la - 793)) & -6145) != 0) or ((((_la - 857)) & ~0x3f) == 0 and ((1 << (_la - 857)) & -1) != 0) or ((((_la - 921)) & ~0x3f) == 0 and ((1 << (_la - 921)) & -1) != 0) or ((((_la - 985)) & ~0x3f) == 0 and ((1 << (_la - 985)) & -1) != 0) or ((((_la - 1049)) & ~0x3f) == 0 and ((1 << (_la - 1049)) & 576460752303423487) != 0) or ((((_la - 1123)) & ~0x3f) == 0 and ((1 << (_la - 1123)) & 8627683329) != 0):
                self.state = 4857
                self.uid()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CursorStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_cursorStatement

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class CloseCursorContext(CursorStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.CursorStatementContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def CLOSE(self):
            return self.getToken(MySqlParser.CLOSE, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCloseCursor" ):
                listener.enterCloseCursor(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCloseCursor" ):
                listener.exitCloseCursor(self)


    class OpenCursorContext(CursorStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.CursorStatementContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def OPEN(self):
            return self.getToken(MySqlParser.OPEN, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOpenCursor" ):
                listener.enterOpenCursor(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOpenCursor" ):
                listener.exitOpenCursor(self)


    class FetchCursorContext(CursorStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.CursorStatementContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def FETCH(self):
            return self.getToken(MySqlParser.FETCH, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def INTO(self):
            return self.getToken(MySqlParser.INTO, 0)
        def uidList(self):
            return self.getTypedRuleContext(MySqlParser.UidListContext,0)

        def FROM(self):
            return self.getToken(MySqlParser.FROM, 0)
        def NEXT(self):
            return self.getToken(MySqlParser.NEXT, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFetchCursor" ):
                listener.enterFetchCursor(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFetchCursor" ):
                listener.exitFetchCursor(self)



    def cursorStatement(self):

        localctx = MySqlParser.CursorStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 408, self.RULE_cursorStatement)
        self._la = 0 # Token type
        try:
            self.state = 4875
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [361]:
                localctx = MySqlParser.CloseCursorContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 4860
                self.match(MySqlParser.CLOSE)
                self.state = 4861
                self.uid()
                pass
            elif token in [64]:
                localctx = MySqlParser.FetchCursorContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 4862
                self.match(MySqlParser.FETCH)
                self.state = 4867
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,707,self._ctx)
                if la_ == 1:
                    self.state = 4864
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==520:
                        self.state = 4863
                        self.match(MySqlParser.NEXT)


                    self.state = 4866
                    self.match(MySqlParser.FROM)


                self.state = 4869
                self.uid()
                self.state = 4870
                self.match(MySqlParser.INTO)
                self.state = 4871
                self.uidList()
                pass
            elif token in [539]:
                localctx = MySqlParser.OpenCursorContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 4873
                self.match(MySqlParser.OPEN)
                self.state = 4874
                self.uid()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DeclareVariableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DECLARE(self):
            return self.getToken(MySqlParser.DECLARE, 0)

        def uidList(self):
            return self.getTypedRuleContext(MySqlParser.UidListContext,0)


        def dataType(self):
            return self.getTypedRuleContext(MySqlParser.DataTypeContext,0)


        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)

        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_declareVariable

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDeclareVariable" ):
                listener.enterDeclareVariable(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDeclareVariable" ):
                listener.exitDeclareVariable(self)




    def declareVariable(self):

        localctx = MySqlParser.DeclareVariableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 410, self.RULE_declareVariable)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4877
            self.match(MySqlParser.DECLARE)
            self.state = 4878
            self.uidList()
            self.state = 4879
            self.dataType()
            self.state = 4882
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==42:
                self.state = 4880
                self.match(MySqlParser.DEFAULT)
                self.state = 4881
                self.expression(0)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DeclareConditionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DECLARE(self):
            return self.getToken(MySqlParser.DECLARE, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def CONDITION(self):
            return self.getToken(MySqlParser.CONDITION, 0)

        def FOR(self):
            return self.getToken(MySqlParser.FOR, 0)

        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)


        def SQLSTATE(self):
            return self.getToken(MySqlParser.SQLSTATE, 0)

        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def VALUE(self):
            return self.getToken(MySqlParser.VALUE, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_declareCondition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDeclareCondition" ):
                listener.enterDeclareCondition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDeclareCondition" ):
                listener.exitDeclareCondition(self)




    def declareCondition(self):

        localctx = MySqlParser.DeclareConditionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 412, self.RULE_declareCondition)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4884
            self.match(MySqlParser.DECLARE)
            self.state = 4885
            self.uid()
            self.state = 4886
            self.match(MySqlParser.CONDITION)
            self.state = 4887
            self.match(MySqlParser.FOR)
            self.state = 4894
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1138, 1139, 1140, 1149, 1151]:
                self.state = 4888
                self.decimalLiteral()
                pass
            elif token in [162]:
                self.state = 4889
                self.match(MySqlParser.SQLSTATE)
                self.state = 4891
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==669:
                    self.state = 4890
                    self.match(MySqlParser.VALUE)


                self.state = 4893
                self.match(MySqlParser.STRING_LITERAL)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DeclareCursorContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DECLARE(self):
            return self.getToken(MySqlParser.DECLARE, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def CURSOR(self):
            return self.getToken(MySqlParser.CURSOR, 0)

        def FOR(self):
            return self.getToken(MySqlParser.FOR, 0)

        def selectStatement(self):
            return self.getTypedRuleContext(MySqlParser.SelectStatementContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_declareCursor

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDeclareCursor" ):
                listener.enterDeclareCursor(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDeclareCursor" ):
                listener.exitDeclareCursor(self)




    def declareCursor(self):

        localctx = MySqlParser.DeclareCursorContext(self, self._ctx, self.state)
        self.enterRule(localctx, 414, self.RULE_declareCursor)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4896
            self.match(MySqlParser.DECLARE)
            self.state = 4897
            self.uid()
            self.state = 4898
            self.match(MySqlParser.CURSOR)
            self.state = 4899
            self.match(MySqlParser.FOR)
            self.state = 4900
            self.selectStatement()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DeclareHandlerContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.handlerAction = None # Token

        def DECLARE(self):
            return self.getToken(MySqlParser.DECLARE, 0)

        def HANDLER(self):
            return self.getToken(MySqlParser.HANDLER, 0)

        def FOR(self):
            return self.getToken(MySqlParser.FOR, 0)

        def handlerConditionValue(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.HandlerConditionValueContext)
            else:
                return self.getTypedRuleContext(MySqlParser.HandlerConditionValueContext,i)


        def routineBody(self):
            return self.getTypedRuleContext(MySqlParser.RoutineBodyContext,0)


        def CONTINUE(self):
            return self.getToken(MySqlParser.CONTINUE, 0)

        def EXIT(self):
            return self.getToken(MySqlParser.EXIT, 0)

        def UNDO(self):
            return self.getToken(MySqlParser.UNDO, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_declareHandler

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDeclareHandler" ):
                listener.enterDeclareHandler(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDeclareHandler" ):
                listener.exitDeclareHandler(self)




    def declareHandler(self):

        localctx = MySqlParser.DeclareHandlerContext(self, self._ctx, self.state)
        self.enterRule(localctx, 416, self.RULE_declareHandler)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4902
            self.match(MySqlParser.DECLARE)
            self.state = 4903
            localctx.handlerAction = self._input.LT(1)
            _la = self._input.LA(1)
            if not(_la==31 or _la==61 or _la==179):
                localctx.handlerAction = self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 4904
            self.match(MySqlParser.HANDLER)
            self.state = 4905
            self.match(MySqlParser.FOR)
            self.state = 4906
            self.handlerConditionValue()
            self.state = 4911
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 4907
                self.match(MySqlParser.COMMA)
                self.state = 4908
                self.handlerConditionValue()
                self.state = 4913
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 4914
            self.routineBody()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class HandlerConditionValueContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_handlerConditionValue

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class HandlerConditionWarningContext(HandlerConditionValueContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.HandlerConditionValueContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def SQLWARNING(self):
            return self.getToken(MySqlParser.SQLWARNING, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHandlerConditionWarning" ):
                listener.enterHandlerConditionWarning(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHandlerConditionWarning" ):
                listener.exitHandlerConditionWarning(self)


    class HandlerConditionCodeContext(HandlerConditionValueContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.HandlerConditionValueContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHandlerConditionCode" ):
                listener.enterHandlerConditionCode(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHandlerConditionCode" ):
                listener.exitHandlerConditionCode(self)


    class HandlerConditionNotfoundContext(HandlerConditionValueContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.HandlerConditionValueContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def NOT(self):
            return self.getToken(MySqlParser.NOT, 0)
        def FOUND(self):
            return self.getToken(MySqlParser.FOUND, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHandlerConditionNotfound" ):
                listener.enterHandlerConditionNotfound(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHandlerConditionNotfound" ):
                listener.exitHandlerConditionNotfound(self)


    class HandlerConditionStateContext(HandlerConditionValueContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.HandlerConditionValueContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def SQLSTATE(self):
            return self.getToken(MySqlParser.SQLSTATE, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)
        def VALUE(self):
            return self.getToken(MySqlParser.VALUE, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHandlerConditionState" ):
                listener.enterHandlerConditionState(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHandlerConditionState" ):
                listener.exitHandlerConditionState(self)


    class HandlerConditionExceptionContext(HandlerConditionValueContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.HandlerConditionValueContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def SQLEXCEPTION(self):
            return self.getToken(MySqlParser.SQLEXCEPTION, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHandlerConditionException" ):
                listener.enterHandlerConditionException(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHandlerConditionException" ):
                listener.exitHandlerConditionException(self)


    class HandlerConditionNameContext(HandlerConditionValueContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.HandlerConditionValueContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHandlerConditionName" ):
                listener.enterHandlerConditionName(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHandlerConditionName" ):
                listener.exitHandlerConditionName(self)



    def handlerConditionValue(self):

        localctx = MySqlParser.HandlerConditionValueContext(self, self._ctx, self.state)
        self.enterRule(localctx, 418, self.RULE_handlerConditionValue)
        self._la = 0 # Token type
        try:
            self.state = 4927
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1138, 1139, 1140, 1149, 1151]:
                localctx = MySqlParser.HandlerConditionCodeContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 4916
                self.decimalLiteral()
                pass
            elif token in [162]:
                localctx = MySqlParser.HandlerConditionStateContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 4917
                self.match(MySqlParser.SQLSTATE)
                self.state = 4919
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==669:
                    self.state = 4918
                    self.match(MySqlParser.VALUE)


                self.state = 4921
                self.match(MySqlParser.STRING_LITERAL)
                pass
            elif token in [11, 14, 18, 29, 35, 37, 39, 42, 48, 55, 57, 59, 73, 77, 79, 85, 94, 97, 117, 121, 124, 130, 140, 141, 148, 150, 158, 168, 217, 218, 219, 220, 221, 226, 234, 237, 239, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 405, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 523, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 677, 678, 679, 680, 681, 682, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 717, 718, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1123, 1145, 1148, 1156]:
                localctx = MySqlParser.HandlerConditionNameContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 4922
                self.uid()
                pass
            elif token in [163]:
                localctx = MySqlParser.HandlerConditionWarningContext(self, localctx)
                self.enterOuterAlt(localctx, 4)
                self.state = 4923
                self.match(MySqlParser.SQLWARNING)
                pass
            elif token in [114]:
                localctx = MySqlParser.HandlerConditionNotfoundContext(self, localctx)
                self.enterOuterAlt(localctx, 5)
                self.state = 4924
                self.match(MySqlParser.NOT)
                self.state = 4925
                self.match(MySqlParser.FOUND)
                pass
            elif token in [161]:
                localctx = MySqlParser.HandlerConditionExceptionContext(self, localctx)
                self.enterOuterAlt(localctx, 6)
                self.state = 4926
                self.match(MySqlParser.SQLEXCEPTION)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ProcedureSqlStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SEMI(self):
            return self.getToken(MySqlParser.SEMI, 0)

        def compoundStatement(self):
            return self.getTypedRuleContext(MySqlParser.CompoundStatementContext,0)


        def sqlStatement(self):
            return self.getTypedRuleContext(MySqlParser.SqlStatementContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_procedureSqlStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterProcedureSqlStatement" ):
                listener.enterProcedureSqlStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitProcedureSqlStatement" ):
                listener.exitProcedureSqlStatement(self)




    def procedureSqlStatement(self):

        localctx = MySqlParser.ProcedureSqlStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 420, self.RULE_procedureSqlStatement)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4931
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,715,self._ctx)
            if la_ == 1:
                self.state = 4929
                self.compoundStatement()
                pass

            elif la_ == 2:
                self.state = 4930
                self.sqlStatement()
                pass


            self.state = 4933
            self.match(MySqlParser.SEMI)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CaseAlternativeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def WHEN(self):
            return self.getToken(MySqlParser.WHEN, 0)

        def THEN(self):
            return self.getToken(MySqlParser.THEN, 0)

        def constant(self):
            return self.getTypedRuleContext(MySqlParser.ConstantContext,0)


        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def procedureSqlStatement(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ProcedureSqlStatementContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ProcedureSqlStatementContext,i)


        def getRuleIndex(self):
            return MySqlParser.RULE_caseAlternative

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCaseAlternative" ):
                listener.enterCaseAlternative(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCaseAlternative" ):
                listener.exitCaseAlternative(self)




    def caseAlternative(self):

        localctx = MySqlParser.CaseAlternativeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 422, self.RULE_caseAlternative)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4935
            self.match(MySqlParser.WHEN)
            self.state = 4938
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,716,self._ctx)
            if la_ == 1:
                self.state = 4936
                self.constant()
                pass

            elif la_ == 2:
                self.state = 4937
                self.expression(0)
                pass


            self.state = 4940
            self.match(MySqlParser.THEN)
            self.state = 4942 
            self._errHandler.sync(self)
            _alt = 1
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt == 1:
                    self.state = 4941
                    self.procedureSqlStatement()

                else:
                    raise NoViableAltException(self)
                self.state = 4944 
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,717,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ElifAlternativeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ELSEIF(self):
            return self.getToken(MySqlParser.ELSEIF, 0)

        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def THEN(self):
            return self.getToken(MySqlParser.THEN, 0)

        def procedureSqlStatement(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ProcedureSqlStatementContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ProcedureSqlStatementContext,i)


        def getRuleIndex(self):
            return MySqlParser.RULE_elifAlternative

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterElifAlternative" ):
                listener.enterElifAlternative(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitElifAlternative" ):
                listener.exitElifAlternative(self)




    def elifAlternative(self):

        localctx = MySqlParser.ElifAlternativeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 424, self.RULE_elifAlternative)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4946
            self.match(MySqlParser.ELSEIF)
            self.state = 4947
            self.expression(0)
            self.state = 4948
            self.match(MySqlParser.THEN)
            self.state = 4950 
            self._errHandler.sync(self)
            _alt = 1
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt == 1:
                    self.state = 4949
                    self.procedureSqlStatement()

                else:
                    raise NoViableAltException(self)
                self.state = 4952 
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,718,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class AlterUserContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_alterUser

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class AlterUserMysqlV80Context(AlterUserContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterUserContext
            super().__init__(parser)
            self.tlsNone = None # Token
            self.copyFrom(ctx)

        def ALTER(self):
            return self.getToken(MySqlParser.ALTER, 0)
        def USER(self):
            return self.getToken(MySqlParser.USER, 0)
        def userAuthOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UserAuthOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UserAuthOptionContext,i)

        def ifExists(self):
            return self.getTypedRuleContext(MySqlParser.IfExistsContext,0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)
        def REQUIRE(self):
            return self.getToken(MySqlParser.REQUIRE, 0)
        def WITH(self):
            return self.getToken(MySqlParser.WITH, 0)
        def userPasswordOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UserPasswordOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UserPasswordOptionContext,i)

        def userLockOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UserLockOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UserLockOptionContext,i)

        def COMMENT(self):
            return self.getToken(MySqlParser.COMMENT, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)
        def ATTRIBUTE(self):
            return self.getToken(MySqlParser.ATTRIBUTE, 0)
        def tlsOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.TlsOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.TlsOptionContext,i)

        def NONE(self):
            return self.getToken(MySqlParser.NONE, 0)
        def userResourceOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UserResourceOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UserResourceOptionContext,i)

        def AND(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.AND)
            else:
                return self.getToken(MySqlParser.AND, i)
        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)
        def ROLE(self):
            return self.getToken(MySqlParser.ROLE, 0)
        def roleOption(self):
            return self.getTypedRuleContext(MySqlParser.RoleOptionContext,0)

        def userName(self):
            return self.getTypedRuleContext(MySqlParser.UserNameContext,0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterUserMysqlV80" ):
                listener.enterAlterUserMysqlV80(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterUserMysqlV80" ):
                listener.exitAlterUserMysqlV80(self)


    class AlterUserMysqlV56Context(AlterUserContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AlterUserContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def ALTER(self):
            return self.getToken(MySqlParser.ALTER, 0)
        def USER(self):
            return self.getToken(MySqlParser.USER, 0)
        def userSpecification(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UserSpecificationContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UserSpecificationContext,i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlterUserMysqlV56" ):
                listener.enterAlterUserMysqlV56(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlterUserMysqlV56" ):
                listener.exitAlterUserMysqlV56(self)



    def alterUser(self):

        localctx = MySqlParser.AlterUserContext(self, self._ctx, self.state)
        self.enterRule(localctx, 426, self.RULE_alterUser)
        self._la = 0 # Token type
        try:
            self.state = 5027
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,733,self._ctx)
            if la_ == 1:
                localctx = MySqlParser.AlterUserMysqlV56Context(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 4954
                self.match(MySqlParser.ALTER)
                self.state = 4955
                self.match(MySqlParser.USER)
                self.state = 4956
                self.userSpecification()
                self.state = 4961
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 4957
                    self.match(MySqlParser.COMMA)
                    self.state = 4958
                    self.userSpecification()
                    self.state = 4963
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass

            elif la_ == 2:
                localctx = MySqlParser.AlterUserMysqlV80Context(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 4964
                self.match(MySqlParser.ALTER)
                self.state = 4965
                self.match(MySqlParser.USER)
                self.state = 4967
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==77:
                    self.state = 4966
                    self.ifExists()


                self.state = 4969
                self.userAuthOption()
                self.state = 4974
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 4970
                    self.match(MySqlParser.COMMA)
                    self.state = 4971
                    self.userAuthOption()
                    self.state = 4976
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 4991
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==142:
                    self.state = 4977
                    self.match(MySqlParser.REQUIRE)
                    self.state = 4989
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [529]:
                        self.state = 4978
                        localctx.tlsNone = self.match(MySqlParser.NONE)
                        pass
                    elif token in [167, 358, 465, 640, 680]:
                        self.state = 4979
                        self.tlsOption()
                        self.state = 4986
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        while _la==10 or _la==167 or _la==358 or _la==465 or _la==640 or _la==680:
                            self.state = 4981
                            self._errHandler.sync(self)
                            _la = self._input.LA(1)
                            if _la==10:
                                self.state = 4980
                                self.match(MySqlParser.AND)


                            self.state = 4983
                            self.tlsOption()
                            self.state = 4988
                            self._errHandler.sync(self)
                            _la = self._input.LA(1)

                        pass
                    else:
                        raise NoViableAltException(self)



                self.state = 4999
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,727,self._ctx)
                if la_ == 1:
                    self.state = 4993
                    self.match(MySqlParser.WITH)
                    self.state = 4995 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while True:
                        self.state = 4994
                        self.userResourceOption()
                        self.state = 4997 
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if not (((((_la - 498)) & ~0x3f) == 0 and ((1 << (_la - 498)) & 51) != 0)):
                            break



                self.state = 5005
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==332 or _la==424 or _la==551 or _la==552:
                    self.state = 5003
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [424, 551, 552]:
                        self.state = 5001
                        self.userPasswordOption()
                        pass
                    elif token in [332]:
                        self.state = 5002
                        self.userLockOption()
                        pass
                    else:
                        raise NoViableAltException(self)

                    self.state = 5007
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 5012
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [368]:
                    self.state = 5008
                    self.match(MySqlParser.COMMENT)
                    self.state = 5009
                    self.match(MySqlParser.STRING_LITERAL)
                    pass
                elif token in [14]:
                    self.state = 5010
                    self.match(MySqlParser.ATTRIBUTE)
                    self.state = 5011
                    self.match(MySqlParser.STRING_LITERAL)
                    pass
                elif token in [-1, 7, 9, 20, 24, 26, 33, 44, 45, 46, 51, 62, 71, 72, 85, 93, 102, 103, 119, 132, 138, 139, 141, 143, 147, 152, 153, 155, 156, 172, 182, 184, 186, 188, 192, 344, 345, 351, 356, 369, 390, 399, 432, 442, 444, 456, 560, 580, 589, 597, 604, 629, 635, 656, 661, 681, 708, 739, 1121, 1133, 1136]:
                    pass
                else:
                    pass
                pass

            elif la_ == 3:
                localctx = MySqlParser.AlterUserMysqlV80Context(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 5014
                self.match(MySqlParser.ALTER)
                self.state = 5015
                self.match(MySqlParser.USER)
                self.state = 5017
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,731,self._ctx)
                if la_ == 1:
                    self.state = 5016
                    self.ifExists()


                self.state = 5021
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,732,self._ctx)
                if la_ == 1:
                    self.state = 5019
                    self.userName()
                    pass

                elif la_ == 2:
                    self.state = 5020
                    self.uid()
                    pass


                self.state = 5023
                self.match(MySqlParser.DEFAULT)
                self.state = 5024
                self.match(MySqlParser.ROLE)
                self.state = 5025
                self.roleOption()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CreateUserContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_createUser

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class CreateUserMysqlV56Context(CreateUserContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.CreateUserContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def CREATE(self):
            return self.getToken(MySqlParser.CREATE, 0)
        def USER(self):
            return self.getToken(MySqlParser.USER, 0)
        def userAuthOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UserAuthOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UserAuthOptionContext,i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreateUserMysqlV56" ):
                listener.enterCreateUserMysqlV56(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreateUserMysqlV56" ):
                listener.exitCreateUserMysqlV56(self)


    class CreateUserMysqlV80Context(CreateUserContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.CreateUserContext
            super().__init__(parser)
            self.tlsNone = None # Token
            self.copyFrom(ctx)

        def CREATE(self):
            return self.getToken(MySqlParser.CREATE, 0)
        def USER(self):
            return self.getToken(MySqlParser.USER, 0)
        def userAuthOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UserAuthOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UserAuthOptionContext,i)

        def ifNotExists(self):
            return self.getTypedRuleContext(MySqlParser.IfNotExistsContext,0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)
        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)
        def ROLE(self):
            return self.getToken(MySqlParser.ROLE, 0)
        def roleOption(self):
            return self.getTypedRuleContext(MySqlParser.RoleOptionContext,0)

        def REQUIRE(self):
            return self.getToken(MySqlParser.REQUIRE, 0)
        def WITH(self):
            return self.getToken(MySqlParser.WITH, 0)
        def userPasswordOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UserPasswordOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UserPasswordOptionContext,i)

        def userLockOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UserLockOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UserLockOptionContext,i)

        def COMMENT(self):
            return self.getToken(MySqlParser.COMMENT, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)
        def ATTRIBUTE(self):
            return self.getToken(MySqlParser.ATTRIBUTE, 0)
        def tlsOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.TlsOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.TlsOptionContext,i)

        def NONE(self):
            return self.getToken(MySqlParser.NONE, 0)
        def userResourceOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UserResourceOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UserResourceOptionContext,i)

        def AND(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.AND)
            else:
                return self.getToken(MySqlParser.AND, i)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreateUserMysqlV80" ):
                listener.enterCreateUserMysqlV80(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreateUserMysqlV80" ):
                listener.exitCreateUserMysqlV80(self)



    def createUser(self):

        localctx = MySqlParser.CreateUserContext(self, self._ctx, self.state)
        self.enterRule(localctx, 428, self.RULE_createUser)
        self._la = 0 # Token type
        try:
            self.state = 5094
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,747,self._ctx)
            if la_ == 1:
                localctx = MySqlParser.CreateUserMysqlV56Context(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 5029
                self.match(MySqlParser.CREATE)
                self.state = 5030
                self.match(MySqlParser.USER)
                self.state = 5031
                self.userAuthOption()
                self.state = 5036
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 5032
                    self.match(MySqlParser.COMMA)
                    self.state = 5033
                    self.userAuthOption()
                    self.state = 5038
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass

            elif la_ == 2:
                localctx = MySqlParser.CreateUserMysqlV80Context(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 5039
                self.match(MySqlParser.CREATE)
                self.state = 5040
                self.match(MySqlParser.USER)
                self.state = 5042
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==77:
                    self.state = 5041
                    self.ifNotExists()


                self.state = 5044
                self.userAuthOption()
                self.state = 5049
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 5045
                    self.match(MySqlParser.COMMA)
                    self.state = 5046
                    self.userAuthOption()
                    self.state = 5051
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 5055
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==42:
                    self.state = 5052
                    self.match(MySqlParser.DEFAULT)
                    self.state = 5053
                    self.match(MySqlParser.ROLE)
                    self.state = 5054
                    self.roleOption()


                self.state = 5071
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==142:
                    self.state = 5057
                    self.match(MySqlParser.REQUIRE)
                    self.state = 5069
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [529]:
                        self.state = 5058
                        localctx.tlsNone = self.match(MySqlParser.NONE)
                        pass
                    elif token in [167, 358, 465, 640, 680]:
                        self.state = 5059
                        self.tlsOption()
                        self.state = 5066
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        while _la==10 or _la==167 or _la==358 or _la==465 or _la==640 or _la==680:
                            self.state = 5061
                            self._errHandler.sync(self)
                            _la = self._input.LA(1)
                            if _la==10:
                                self.state = 5060
                                self.match(MySqlParser.AND)


                            self.state = 5063
                            self.tlsOption()
                            self.state = 5068
                            self._errHandler.sync(self)
                            _la = self._input.LA(1)

                        pass
                    else:
                        raise NoViableAltException(self)



                self.state = 5079
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,743,self._ctx)
                if la_ == 1:
                    self.state = 5073
                    self.match(MySqlParser.WITH)
                    self.state = 5075 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while True:
                        self.state = 5074
                        self.userResourceOption()
                        self.state = 5077 
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if not (((((_la - 498)) & ~0x3f) == 0 and ((1 << (_la - 498)) & 51) != 0)):
                            break



                self.state = 5085
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==332 or _la==424 or _la==551 or _la==552:
                    self.state = 5083
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [424, 551, 552]:
                        self.state = 5081
                        self.userPasswordOption()
                        pass
                    elif token in [332]:
                        self.state = 5082
                        self.userLockOption()
                        pass
                    else:
                        raise NoViableAltException(self)

                    self.state = 5087
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 5092
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [368]:
                    self.state = 5088
                    self.match(MySqlParser.COMMENT)
                    self.state = 5089
                    self.match(MySqlParser.STRING_LITERAL)
                    pass
                elif token in [14]:
                    self.state = 5090
                    self.match(MySqlParser.ATTRIBUTE)
                    self.state = 5091
                    self.match(MySqlParser.STRING_LITERAL)
                    pass
                elif token in [-1, 7, 9, 20, 24, 26, 33, 44, 45, 46, 51, 62, 71, 72, 85, 93, 102, 103, 119, 132, 138, 139, 141, 143, 147, 152, 153, 155, 156, 172, 182, 184, 186, 188, 192, 344, 345, 351, 356, 369, 390, 399, 432, 442, 444, 456, 560, 580, 589, 597, 604, 629, 635, 656, 661, 681, 708, 739, 1121, 1133, 1136]:
                    pass
                else:
                    pass
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DropUserContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(MySqlParser.DROP, 0)

        def USER(self):
            return self.getToken(MySqlParser.USER, 0)

        def userName(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UserNameContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UserNameContext,i)


        def ifExists(self):
            return self.getTypedRuleContext(MySqlParser.IfExistsContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_dropUser

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDropUser" ):
                listener.enterDropUser(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDropUser" ):
                listener.exitDropUser(self)




    def dropUser(self):

        localctx = MySqlParser.DropUserContext(self, self._ctx, self.state)
        self.enterRule(localctx, 430, self.RULE_dropUser)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5096
            self.match(MySqlParser.DROP)
            self.state = 5097
            self.match(MySqlParser.USER)
            self.state = 5099
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==77:
                self.state = 5098
                self.ifExists()


            self.state = 5101
            self.userName()
            self.state = 5106
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 5102
                self.match(MySqlParser.COMMA)
                self.state = 5103
                self.userName()
                self.state = 5108
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class GrantStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.privilegeObject = None # Token
            self.tlsNone = None # Token

        def GRANT(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.GRANT)
            else:
                return self.getToken(MySqlParser.GRANT, i)

        def privelegeClause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.PrivelegeClauseContext)
            else:
                return self.getTypedRuleContext(MySqlParser.PrivelegeClauseContext,i)


        def ON(self):
            return self.getToken(MySqlParser.ON, 0)

        def privilegeLevel(self):
            return self.getTypedRuleContext(MySqlParser.PrivilegeLevelContext,0)


        def TO(self):
            return self.getToken(MySqlParser.TO, 0)

        def userAuthOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UserAuthOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UserAuthOptionContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def REQUIRE(self):
            return self.getToken(MySqlParser.REQUIRE, 0)

        def WITH(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.WITH)
            else:
                return self.getToken(MySqlParser.WITH, i)

        def AS(self):
            return self.getToken(MySqlParser.AS, 0)

        def userName(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UserNameContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UserNameContext,i)


        def ROLE(self):
            return self.getToken(MySqlParser.ROLE, 0)

        def roleOption(self):
            return self.getTypedRuleContext(MySqlParser.RoleOptionContext,0)


        def TABLE(self):
            return self.getToken(MySqlParser.TABLE, 0)

        def FUNCTION(self):
            return self.getToken(MySqlParser.FUNCTION, 0)

        def PROCEDURE(self):
            return self.getToken(MySqlParser.PROCEDURE, 0)

        def tlsOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.TlsOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.TlsOptionContext,i)


        def NONE(self):
            return self.getToken(MySqlParser.NONE, 0)

        def OPTION(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.OPTION)
            else:
                return self.getToken(MySqlParser.OPTION, i)

        def userResourceOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UserResourceOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UserResourceOptionContext,i)


        def AND(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.AND)
            else:
                return self.getToken(MySqlParser.AND, i)

        def uid(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UidContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UidContext,i)


        def ADMIN(self):
            return self.getToken(MySqlParser.ADMIN, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_grantStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterGrantStatement" ):
                listener.enterGrantStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitGrantStatement" ):
                listener.exitGrantStatement(self)




    def grantStatement(self):

        localctx = MySqlParser.GrantStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 432, self.RULE_grantStatement)
        self._la = 0 # Token type
        try:
            self.state = 5202
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,768,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 5109
                self.match(MySqlParser.GRANT)
                self.state = 5110
                self.privelegeClause()
                self.state = 5115
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 5111
                    self.match(MySqlParser.COMMA)
                    self.state = 5112
                    self.privelegeClause()
                    self.state = 5117
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 5118
                self.match(MySqlParser.ON)
                self.state = 5120
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,751,self._ctx)
                if la_ == 1:
                    self.state = 5119
                    localctx.privilegeObject = self._input.LT(1)
                    _la = self._input.LA(1)
                    if not(_la==131 or _la==172 or _la==437):
                        localctx.privilegeObject = self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 5122
                self.privilegeLevel()
                self.state = 5123
                self.match(MySqlParser.TO)
                self.state = 5124
                self.userAuthOption()
                self.state = 5129
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 5125
                    self.match(MySqlParser.COMMA)
                    self.state = 5126
                    self.userAuthOption()
                    self.state = 5131
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 5146
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==142:
                    self.state = 5132
                    self.match(MySqlParser.REQUIRE)
                    self.state = 5144
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [529]:
                        self.state = 5133
                        localctx.tlsNone = self.match(MySqlParser.NONE)
                        pass
                    elif token in [167, 358, 465, 640, 680]:
                        self.state = 5134
                        self.tlsOption()
                        self.state = 5141
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        while _la==10 or _la==167 or _la==358 or _la==465 or _la==640 or _la==680:
                            self.state = 5136
                            self._errHandler.sync(self)
                            _la = self._input.LA(1)
                            if _la==10:
                                self.state = 5135
                                self.match(MySqlParser.AND)


                            self.state = 5138
                            self.tlsOption()
                            self.state = 5143
                            self._errHandler.sync(self)
                            _la = self._input.LA(1)

                        pass
                    else:
                        raise NoViableAltException(self)



                self.state = 5157
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,759,self._ctx)
                if la_ == 1:
                    self.state = 5148
                    self.match(MySqlParser.WITH)
                    self.state = 5154
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,758,self._ctx)
                    while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                        if _alt==1:
                            self.state = 5152
                            self._errHandler.sync(self)
                            token = self._input.LA(1)
                            if token in [72]:
                                self.state = 5149
                                self.match(MySqlParser.GRANT)
                                self.state = 5150
                                self.match(MySqlParser.OPTION)
                                pass
                            elif token in [498, 499, 502, 503]:
                                self.state = 5151
                                self.userResourceOption()
                                pass
                            else:
                                raise NoViableAltException(self)
                     
                        self.state = 5156
                        self._errHandler.sync(self)
                        _alt = self._interp.adaptivePredict(self._input,758,self._ctx)



                self.state = 5165
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==12:
                    self.state = 5159
                    self.match(MySqlParser.AS)
                    self.state = 5160
                    self.userName()
                    self.state = 5161
                    self.match(MySqlParser.WITH)
                    self.state = 5162
                    self.match(MySqlParser.ROLE)
                    self.state = 5163
                    self.roleOption()


                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 5167
                self.match(MySqlParser.GRANT)
                self.state = 5170
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,761,self._ctx)
                if la_ == 1:
                    self.state = 5168
                    self.userName()
                    pass

                elif la_ == 2:
                    self.state = 5169
                    self.uid()
                    pass


                self.state = 5179
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 5172
                    self.match(MySqlParser.COMMA)
                    self.state = 5175
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,762,self._ctx)
                    if la_ == 1:
                        self.state = 5173
                        self.userName()
                        pass

                    elif la_ == 2:
                        self.state = 5174
                        self.uid()
                        pass


                    self.state = 5181
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 5182
                self.match(MySqlParser.TO)
                self.state = 5185
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,764,self._ctx)
                if la_ == 1:
                    self.state = 5183
                    self.userName()
                    pass

                elif la_ == 2:
                    self.state = 5184
                    self.uid()
                    pass


                self.state = 5194
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 5187
                    self.match(MySqlParser.COMMA)
                    self.state = 5190
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,765,self._ctx)
                    if la_ == 1:
                        self.state = 5188
                        self.userName()
                        pass

                    elif la_ == 2:
                        self.state = 5189
                        self.uid()
                        pass


                    self.state = 5196
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 5200
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,767,self._ctx)
                if la_ == 1:
                    self.state = 5197
                    self.match(MySqlParser.WITH)
                    self.state = 5198
                    self.match(MySqlParser.ADMIN)
                    self.state = 5199
                    self.match(MySqlParser.OPTION)


                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class RoleOptionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)

        def NONE(self):
            return self.getToken(MySqlParser.NONE, 0)

        def ALL(self):
            return self.getToken(MySqlParser.ALL, 0)

        def EXCEPT(self):
            return self.getToken(MySqlParser.EXCEPT, 0)

        def userName(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UserNameContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UserNameContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_roleOption

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRoleOption" ):
                listener.enterRoleOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRoleOption" ):
                listener.exitRoleOption(self)




    def roleOption(self):

        localctx = MySqlParser.RoleOptionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 434, self.RULE_roleOption)
        self._la = 0 # Token type
        try:
            self.state = 5226
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,772,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 5204
                self.match(MySqlParser.DEFAULT)
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 5205
                self.match(MySqlParser.NONE)
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 5206
                self.match(MySqlParser.ALL)
                self.state = 5216
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==59:
                    self.state = 5207
                    self.match(MySqlParser.EXCEPT)
                    self.state = 5208
                    self.userName()
                    self.state = 5213
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==1135:
                        self.state = 5209
                        self.match(MySqlParser.COMMA)
                        self.state = 5210
                        self.userName()
                        self.state = 5215
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)



                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 5218
                self.userName()
                self.state = 5223
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 5219
                    self.match(MySqlParser.COMMA)
                    self.state = 5220
                    self.userName()
                    self.state = 5225
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class GrantProxyContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.fromFirst = None # UserNameContext
            self.toFirst = None # UserNameContext
            self._userName = None # UserNameContext
            self.toOther = list() # of UserNameContexts

        def GRANT(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.GRANT)
            else:
                return self.getToken(MySqlParser.GRANT, i)

        def PROXY(self):
            return self.getToken(MySqlParser.PROXY, 0)

        def ON(self):
            return self.getToken(MySqlParser.ON, 0)

        def TO(self):
            return self.getToken(MySqlParser.TO, 0)

        def userName(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UserNameContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UserNameContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def WITH(self):
            return self.getToken(MySqlParser.WITH, 0)

        def OPTION(self):
            return self.getToken(MySqlParser.OPTION, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_grantProxy

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterGrantProxy" ):
                listener.enterGrantProxy(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitGrantProxy" ):
                listener.exitGrantProxy(self)




    def grantProxy(self):

        localctx = MySqlParser.GrantProxyContext(self, self._ctx, self.state)
        self.enterRule(localctx, 436, self.RULE_grantProxy)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5228
            self.match(MySqlParser.GRANT)
            self.state = 5229
            self.match(MySqlParser.PROXY)
            self.state = 5230
            self.match(MySqlParser.ON)
            self.state = 5231
            localctx.fromFirst = self.userName()
            self.state = 5232
            self.match(MySqlParser.TO)
            self.state = 5233
            localctx.toFirst = self.userName()
            self.state = 5238
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 5234
                self.match(MySqlParser.COMMA)
                self.state = 5235
                localctx._userName = self.userName()
                localctx.toOther.append(localctx._userName)
                self.state = 5240
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 5244
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,774,self._ctx)
            if la_ == 1:
                self.state = 5241
                self.match(MySqlParser.WITH)
                self.state = 5242
                self.match(MySqlParser.GRANT)
                self.state = 5243
                self.match(MySqlParser.OPTION)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class RenameUserContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RENAME(self):
            return self.getToken(MySqlParser.RENAME, 0)

        def USER(self):
            return self.getToken(MySqlParser.USER, 0)

        def renameUserClause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.RenameUserClauseContext)
            else:
                return self.getTypedRuleContext(MySqlParser.RenameUserClauseContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_renameUser

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRenameUser" ):
                listener.enterRenameUser(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRenameUser" ):
                listener.exitRenameUser(self)




    def renameUser(self):

        localctx = MySqlParser.RenameUserContext(self, self._ctx, self.state)
        self.enterRule(localctx, 438, self.RULE_renameUser)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5246
            self.match(MySqlParser.RENAME)
            self.state = 5247
            self.match(MySqlParser.USER)
            self.state = 5248
            self.renameUserClause()
            self.state = 5253
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 5249
                self.match(MySqlParser.COMMA)
                self.state = 5250
                self.renameUserClause()
                self.state = 5255
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class RevokeStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_revokeStatement

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class DetailRevokeContext(RevokeStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.RevokeStatementContext
            super().__init__(parser)
            self.privilegeObject = None # Token
            self.copyFrom(ctx)

        def REVOKE(self):
            return self.getToken(MySqlParser.REVOKE, 0)
        def privelegeClause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.PrivelegeClauseContext)
            else:
                return self.getTypedRuleContext(MySqlParser.PrivelegeClauseContext,i)

        def ON(self):
            return self.getToken(MySqlParser.ON, 0)
        def privilegeLevel(self):
            return self.getTypedRuleContext(MySqlParser.PrivilegeLevelContext,0)

        def FROM(self):
            return self.getToken(MySqlParser.FROM, 0)
        def userName(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UserNameContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UserNameContext,i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)
        def TABLE(self):
            return self.getToken(MySqlParser.TABLE, 0)
        def FUNCTION(self):
            return self.getToken(MySqlParser.FUNCTION, 0)
        def PROCEDURE(self):
            return self.getToken(MySqlParser.PROCEDURE, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDetailRevoke" ):
                listener.enterDetailRevoke(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDetailRevoke" ):
                listener.exitDetailRevoke(self)


    class RoleRevokeContext(RevokeStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.RevokeStatementContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def REVOKE(self):
            return self.getToken(MySqlParser.REVOKE, 0)
        def FROM(self):
            return self.getToken(MySqlParser.FROM, 0)
        def userName(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UserNameContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UserNameContext,i)

        def uid(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UidContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UidContext,i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRoleRevoke" ):
                listener.enterRoleRevoke(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRoleRevoke" ):
                listener.exitRoleRevoke(self)


    class ShortRevokeContext(RevokeStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.RevokeStatementContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def REVOKE(self):
            return self.getToken(MySqlParser.REVOKE, 0)
        def ALL(self):
            return self.getToken(MySqlParser.ALL, 0)
        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)
        def GRANT(self):
            return self.getToken(MySqlParser.GRANT, 0)
        def OPTION(self):
            return self.getToken(MySqlParser.OPTION, 0)
        def FROM(self):
            return self.getToken(MySqlParser.FROM, 0)
        def userName(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UserNameContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UserNameContext,i)

        def PRIVILEGES(self):
            return self.getToken(MySqlParser.PRIVILEGES, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterShortRevoke" ):
                listener.enterShortRevoke(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitShortRevoke" ):
                listener.exitShortRevoke(self)



    def revokeStatement(self):

        localctx = MySqlParser.RevokeStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 440, self.RULE_revokeStatement)
        self._la = 0 # Token type
        try:
            self.state = 5326
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,787,self._ctx)
            if la_ == 1:
                localctx = MySqlParser.DetailRevokeContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 5256
                self.match(MySqlParser.REVOKE)
                self.state = 5257
                self.privelegeClause()
                self.state = 5262
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 5258
                    self.match(MySqlParser.COMMA)
                    self.state = 5259
                    self.privelegeClause()
                    self.state = 5264
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 5265
                self.match(MySqlParser.ON)
                self.state = 5267
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,777,self._ctx)
                if la_ == 1:
                    self.state = 5266
                    localctx.privilegeObject = self._input.LT(1)
                    _la = self._input.LA(1)
                    if not(_la==131 or _la==172 or _la==437):
                        localctx.privilegeObject = self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 5269
                self.privilegeLevel()
                self.state = 5270
                self.match(MySqlParser.FROM)
                self.state = 5271
                self.userName()
                self.state = 5276
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 5272
                    self.match(MySqlParser.COMMA)
                    self.state = 5273
                    self.userName()
                    self.state = 5278
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass

            elif la_ == 2:
                localctx = MySqlParser.ShortRevokeContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 5279
                self.match(MySqlParser.REVOKE)
                self.state = 5280
                self.match(MySqlParser.ALL)
                self.state = 5282
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==725:
                    self.state = 5281
                    self.match(MySqlParser.PRIVILEGES)


                self.state = 5284
                self.match(MySqlParser.COMMA)
                self.state = 5285
                self.match(MySqlParser.GRANT)
                self.state = 5286
                self.match(MySqlParser.OPTION)
                self.state = 5287
                self.match(MySqlParser.FROM)
                self.state = 5288
                self.userName()
                self.state = 5293
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 5289
                    self.match(MySqlParser.COMMA)
                    self.state = 5290
                    self.userName()
                    self.state = 5295
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass

            elif la_ == 3:
                localctx = MySqlParser.RoleRevokeContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 5296
                self.match(MySqlParser.REVOKE)
                self.state = 5299
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,781,self._ctx)
                if la_ == 1:
                    self.state = 5297
                    self.userName()
                    pass

                elif la_ == 2:
                    self.state = 5298
                    self.uid()
                    pass


                self.state = 5308
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 5301
                    self.match(MySqlParser.COMMA)
                    self.state = 5304
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,782,self._ctx)
                    if la_ == 1:
                        self.state = 5302
                        self.userName()
                        pass

                    elif la_ == 2:
                        self.state = 5303
                        self.uid()
                        pass


                    self.state = 5310
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 5311
                self.match(MySqlParser.FROM)
                self.state = 5314
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,784,self._ctx)
                if la_ == 1:
                    self.state = 5312
                    self.userName()
                    pass

                elif la_ == 2:
                    self.state = 5313
                    self.uid()
                    pass


                self.state = 5323
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 5316
                    self.match(MySqlParser.COMMA)
                    self.state = 5319
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,785,self._ctx)
                    if la_ == 1:
                        self.state = 5317
                        self.userName()
                        pass

                    elif la_ == 2:
                        self.state = 5318
                        self.uid()
                        pass


                    self.state = 5325
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class RevokeProxyContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.onUser = None # UserNameContext
            self.fromFirst = None # UserNameContext
            self._userName = None # UserNameContext
            self.fromOther = list() # of UserNameContexts

        def REVOKE(self):
            return self.getToken(MySqlParser.REVOKE, 0)

        def PROXY(self):
            return self.getToken(MySqlParser.PROXY, 0)

        def ON(self):
            return self.getToken(MySqlParser.ON, 0)

        def FROM(self):
            return self.getToken(MySqlParser.FROM, 0)

        def userName(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UserNameContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UserNameContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_revokeProxy

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRevokeProxy" ):
                listener.enterRevokeProxy(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRevokeProxy" ):
                listener.exitRevokeProxy(self)




    def revokeProxy(self):

        localctx = MySqlParser.RevokeProxyContext(self, self._ctx, self.state)
        self.enterRule(localctx, 442, self.RULE_revokeProxy)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5328
            self.match(MySqlParser.REVOKE)
            self.state = 5329
            self.match(MySqlParser.PROXY)
            self.state = 5330
            self.match(MySqlParser.ON)
            self.state = 5331
            localctx.onUser = self.userName()
            self.state = 5332
            self.match(MySqlParser.FROM)
            self.state = 5333
            localctx.fromFirst = self.userName()
            self.state = 5338
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 5334
                self.match(MySqlParser.COMMA)
                self.state = 5335
                localctx._userName = self.userName()
                localctx.fromOther.append(localctx._userName)
                self.state = 5340
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class SetPasswordStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SET(self):
            return self.getToken(MySqlParser.SET, 0)

        def PASSWORD(self):
            return self.getToken(MySqlParser.PASSWORD, 0)

        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def passwordFunctionClause(self):
            return self.getTypedRuleContext(MySqlParser.PasswordFunctionClauseContext,0)


        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def FOR(self):
            return self.getToken(MySqlParser.FOR, 0)

        def userName(self):
            return self.getTypedRuleContext(MySqlParser.UserNameContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_setPasswordStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSetPasswordStatement" ):
                listener.enterSetPasswordStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSetPasswordStatement" ):
                listener.exitSetPasswordStatement(self)




    def setPasswordStatement(self):

        localctx = MySqlParser.SetPasswordStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 444, self.RULE_setPasswordStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5341
            self.match(MySqlParser.SET)
            self.state = 5342
            self.match(MySqlParser.PASSWORD)
            self.state = 5345
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==65:
                self.state = 5343
                self.match(MySqlParser.FOR)
                self.state = 5344
                self.userName()


            self.state = 5347
            self.match(MySqlParser.EQUAL_SYMBOL)
            self.state = 5350
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [535, 551]:
                self.state = 5348
                self.passwordFunctionClause()
                pass
            elif token in [1148]:
                self.state = 5349
                self.match(MySqlParser.STRING_LITERAL)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class UserSpecificationContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def userName(self):
            return self.getTypedRuleContext(MySqlParser.UserNameContext,0)


        def userPasswordOption(self):
            return self.getTypedRuleContext(MySqlParser.UserPasswordOptionContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_userSpecification

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUserSpecification" ):
                listener.enterUserSpecification(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUserSpecification" ):
                listener.exitUserSpecification(self)




    def userSpecification(self):

        localctx = MySqlParser.UserSpecificationContext(self, self._ctx, self.state)
        self.enterRule(localctx, 446, self.RULE_userSpecification)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5352
            self.userName()
            self.state = 5353
            self.userPasswordOption()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class UserAuthOptionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_userAuthOption

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class SimpleAuthOptionContext(UserAuthOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.UserAuthOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def userName(self):
            return self.getTypedRuleContext(MySqlParser.UserNameContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSimpleAuthOption" ):
                listener.enterSimpleAuthOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSimpleAuthOption" ):
                listener.exitSimpleAuthOption(self)


    class ModuleAuthOptionContext(UserAuthOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.UserAuthOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def userName(self):
            return self.getTypedRuleContext(MySqlParser.UserNameContext,0)

        def IDENTIFIED(self):
            return self.getToken(MySqlParser.IDENTIFIED, 0)
        def WITH(self):
            return self.getToken(MySqlParser.WITH, 0)
        def authenticationRule(self):
            return self.getTypedRuleContext(MySqlParser.AuthenticationRuleContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModuleAuthOption" ):
                listener.enterModuleAuthOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModuleAuthOption" ):
                listener.exitModuleAuthOption(self)


    class RandomAuthOptionContext(UserAuthOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.UserAuthOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def userName(self):
            return self.getTypedRuleContext(MySqlParser.UserNameContext,0)

        def IDENTIFIED(self):
            return self.getToken(MySqlParser.IDENTIFIED, 0)
        def BY(self):
            return self.getToken(MySqlParser.BY, 0)
        def RANDOM(self):
            return self.getToken(MySqlParser.RANDOM, 0)
        def PASSWORD(self):
            return self.getToken(MySqlParser.PASSWORD, 0)
        def authOptionClause(self):
            return self.getTypedRuleContext(MySqlParser.AuthOptionClauseContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRandomAuthOption" ):
                listener.enterRandomAuthOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRandomAuthOption" ):
                listener.exitRandomAuthOption(self)


    class StringAuthOptionContext(UserAuthOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.UserAuthOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def userName(self):
            return self.getTypedRuleContext(MySqlParser.UserNameContext,0)

        def IDENTIFIED(self):
            return self.getToken(MySqlParser.IDENTIFIED, 0)
        def BY(self):
            return self.getToken(MySqlParser.BY, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)
        def authOptionClause(self):
            return self.getTypedRuleContext(MySqlParser.AuthOptionClauseContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStringAuthOption" ):
                listener.enterStringAuthOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStringAuthOption" ):
                listener.exitStringAuthOption(self)


    class HashAuthOptionContext(UserAuthOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.UserAuthOptionContext
            super().__init__(parser)
            self.hashed = None # Token
            self.copyFrom(ctx)

        def userName(self):
            return self.getTypedRuleContext(MySqlParser.UserNameContext,0)

        def IDENTIFIED(self):
            return self.getToken(MySqlParser.IDENTIFIED, 0)
        def BY(self):
            return self.getToken(MySqlParser.BY, 0)
        def PASSWORD(self):
            return self.getToken(MySqlParser.PASSWORD, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHashAuthOption" ):
                listener.enterHashAuthOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHashAuthOption" ):
                listener.exitHashAuthOption(self)



    def userAuthOption(self):

        localctx = MySqlParser.UserAuthOptionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 448, self.RULE_userAuthOption)
        try:
            self.state = 5380
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,791,self._ctx)
            if la_ == 1:
                localctx = MySqlParser.HashAuthOptionContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 5355
                self.userName()
                self.state = 5356
                self.match(MySqlParser.IDENTIFIED)
                self.state = 5357
                self.match(MySqlParser.BY)
                self.state = 5358
                self.match(MySqlParser.PASSWORD)
                self.state = 5359
                localctx.hashed = self.match(MySqlParser.STRING_LITERAL)
                pass

            elif la_ == 2:
                localctx = MySqlParser.RandomAuthOptionContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 5361
                self.userName()
                self.state = 5362
                self.match(MySqlParser.IDENTIFIED)
                self.state = 5363
                self.match(MySqlParser.BY)
                self.state = 5364
                self.match(MySqlParser.RANDOM)
                self.state = 5365
                self.match(MySqlParser.PASSWORD)
                self.state = 5366
                self.authOptionClause()
                pass

            elif la_ == 3:
                localctx = MySqlParser.StringAuthOptionContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 5368
                self.userName()
                self.state = 5369
                self.match(MySqlParser.IDENTIFIED)
                self.state = 5370
                self.match(MySqlParser.BY)
                self.state = 5371
                self.match(MySqlParser.STRING_LITERAL)
                self.state = 5372
                self.authOptionClause()
                pass

            elif la_ == 4:
                localctx = MySqlParser.ModuleAuthOptionContext(self, localctx)
                self.enterOuterAlt(localctx, 4)
                self.state = 5374
                self.userName()
                self.state = 5375
                self.match(MySqlParser.IDENTIFIED)
                self.state = 5376
                self.match(MySqlParser.WITH)
                self.state = 5377
                self.authenticationRule()
                pass

            elif la_ == 5:
                localctx = MySqlParser.SimpleAuthOptionContext(self, localctx)
                self.enterOuterAlt(localctx, 5)
                self.state = 5379
                self.userName()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class AuthOptionClauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def REPLACE(self):
            return self.getToken(MySqlParser.REPLACE, 0)

        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def RETAIN(self):
            return self.getToken(MySqlParser.RETAIN, 0)

        def CURRENT(self):
            return self.getToken(MySqlParser.CURRENT, 0)

        def PASSWORD(self):
            return self.getToken(MySqlParser.PASSWORD, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_authOptionClause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAuthOptionClause" ):
                listener.enterAuthOptionClause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAuthOptionClause" ):
                listener.exitAuthOptionClause(self)




    def authOptionClause(self):

        localctx = MySqlParser.AuthOptionClauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 450, self.RULE_authOptionClause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5384
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,792,self._ctx)
            if la_ == 1:
                self.state = 5382
                self.match(MySqlParser.REPLACE)
                self.state = 5383
                self.match(MySqlParser.STRING_LITERAL)


            self.state = 5389
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==145:
                self.state = 5386
                self.match(MySqlParser.RETAIN)
                self.state = 5387
                self.match(MySqlParser.CURRENT)
                self.state = 5388
                self.match(MySqlParser.PASSWORD)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class AuthenticationRuleContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_authenticationRule

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class PasswordModuleOptionContext(AuthenticationRuleContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AuthenticationRuleContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def authPlugin(self):
            return self.getTypedRuleContext(MySqlParser.AuthPluginContext,0)

        def USING(self):
            return self.getToken(MySqlParser.USING, 0)
        def passwordFunctionClause(self):
            return self.getTypedRuleContext(MySqlParser.PasswordFunctionClauseContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPasswordModuleOption" ):
                listener.enterPasswordModuleOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPasswordModuleOption" ):
                listener.exitPasswordModuleOption(self)


    class ModuleContext(AuthenticationRuleContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.AuthenticationRuleContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def authPlugin(self):
            return self.getTypedRuleContext(MySqlParser.AuthPluginContext,0)

        def authOptionClause(self):
            return self.getTypedRuleContext(MySqlParser.AuthOptionClauseContext,0)

        def BY(self):
            return self.getToken(MySqlParser.BY, 0)
        def USING(self):
            return self.getToken(MySqlParser.USING, 0)
        def AS(self):
            return self.getToken(MySqlParser.AS, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)
        def RANDOM(self):
            return self.getToken(MySqlParser.RANDOM, 0)
        def PASSWORD(self):
            return self.getToken(MySqlParser.PASSWORD, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModule" ):
                listener.enterModule(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModule" ):
                listener.exitModule(self)



    def authenticationRule(self):

        localctx = MySqlParser.AuthenticationRuleContext(self, self._ctx, self.state)
        self.enterRule(localctx, 452, self.RULE_authenticationRule)
        self._la = 0 # Token type
        try:
            self.state = 5405
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,796,self._ctx)
            if la_ == 1:
                localctx = MySqlParser.ModuleContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 5391
                self.authPlugin()
                self.state = 5399
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,795,self._ctx)
                if la_ == 1:
                    self.state = 5392
                    _la = self._input.LA(1)
                    if not(_la==12 or _la==19 or _la==187):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 5396
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [1148]:
                        self.state = 5393
                        self.match(MySqlParser.STRING_LITERAL)
                        pass
                    elif token in [991]:
                        self.state = 5394
                        self.match(MySqlParser.RANDOM)
                        self.state = 5395
                        self.match(MySqlParser.PASSWORD)
                        pass
                    else:
                        raise NoViableAltException(self)

                    self.state = 5398
                    self.authOptionClause()


                pass

            elif la_ == 2:
                localctx = MySqlParser.PasswordModuleOptionContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 5401
                self.authPlugin()
                self.state = 5402
                self.match(MySqlParser.USING)
                self.state = 5403
                self.passwordFunctionClause()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class TlsOptionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SSL(self):
            return self.getToken(MySqlParser.SSL, 0)

        def X509(self):
            return self.getToken(MySqlParser.X509, 0)

        def CIPHER(self):
            return self.getToken(MySqlParser.CIPHER, 0)

        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def ISSUER(self):
            return self.getToken(MySqlParser.ISSUER, 0)

        def SUBJECT(self):
            return self.getToken(MySqlParser.SUBJECT, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_tlsOption

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTlsOption" ):
                listener.enterTlsOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTlsOption" ):
                listener.exitTlsOption(self)




    def tlsOption(self):

        localctx = MySqlParser.TlsOptionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 454, self.RULE_tlsOption)
        try:
            self.state = 5415
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [167]:
                self.enterOuterAlt(localctx, 1)
                self.state = 5407
                self.match(MySqlParser.SSL)
                pass
            elif token in [680]:
                self.enterOuterAlt(localctx, 2)
                self.state = 5408
                self.match(MySqlParser.X509)
                pass
            elif token in [358]:
                self.enterOuterAlt(localctx, 3)
                self.state = 5409
                self.match(MySqlParser.CIPHER)
                self.state = 5410
                self.match(MySqlParser.STRING_LITERAL)
                pass
            elif token in [465]:
                self.enterOuterAlt(localctx, 4)
                self.state = 5411
                self.match(MySqlParser.ISSUER)
                self.state = 5412
                self.match(MySqlParser.STRING_LITERAL)
                pass
            elif token in [640]:
                self.enterOuterAlt(localctx, 5)
                self.state = 5413
                self.match(MySqlParser.SUBJECT)
                self.state = 5414
                self.match(MySqlParser.STRING_LITERAL)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class UserResourceOptionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MAX_QUERIES_PER_HOUR(self):
            return self.getToken(MySqlParser.MAX_QUERIES_PER_HOUR, 0)

        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)


        def MAX_UPDATES_PER_HOUR(self):
            return self.getToken(MySqlParser.MAX_UPDATES_PER_HOUR, 0)

        def MAX_CONNECTIONS_PER_HOUR(self):
            return self.getToken(MySqlParser.MAX_CONNECTIONS_PER_HOUR, 0)

        def MAX_USER_CONNECTIONS(self):
            return self.getToken(MySqlParser.MAX_USER_CONNECTIONS, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_userResourceOption

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUserResourceOption" ):
                listener.enterUserResourceOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUserResourceOption" ):
                listener.exitUserResourceOption(self)




    def userResourceOption(self):

        localctx = MySqlParser.UserResourceOptionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 456, self.RULE_userResourceOption)
        try:
            self.state = 5425
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [499]:
                self.enterOuterAlt(localctx, 1)
                self.state = 5417
                self.match(MySqlParser.MAX_QUERIES_PER_HOUR)
                self.state = 5418
                self.decimalLiteral()
                pass
            elif token in [502]:
                self.enterOuterAlt(localctx, 2)
                self.state = 5419
                self.match(MySqlParser.MAX_UPDATES_PER_HOUR)
                self.state = 5420
                self.decimalLiteral()
                pass
            elif token in [498]:
                self.enterOuterAlt(localctx, 3)
                self.state = 5421
                self.match(MySqlParser.MAX_CONNECTIONS_PER_HOUR)
                self.state = 5422
                self.decimalLiteral()
                pass
            elif token in [503]:
                self.enterOuterAlt(localctx, 4)
                self.state = 5423
                self.match(MySqlParser.MAX_USER_CONNECTIONS)
                self.state = 5424
                self.decimalLiteral()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class UserPasswordOptionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.expireType = None # Token

        def PASSWORD(self):
            return self.getToken(MySqlParser.PASSWORD, 0)

        def EXPIRE(self):
            return self.getToken(MySqlParser.EXPIRE, 0)

        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)


        def DAY(self):
            return self.getToken(MySqlParser.DAY, 0)

        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)

        def NEVER(self):
            return self.getToken(MySqlParser.NEVER, 0)

        def INTERVAL(self):
            return self.getToken(MySqlParser.INTERVAL, 0)

        def HISTORY(self):
            return self.getToken(MySqlParser.HISTORY, 0)

        def REUSE(self):
            return self.getToken(MySqlParser.REUSE, 0)

        def REQUIRE(self):
            return self.getToken(MySqlParser.REQUIRE, 0)

        def CURRENT(self):
            return self.getToken(MySqlParser.CURRENT, 0)

        def OPTIONAL(self):
            return self.getToken(MySqlParser.OPTIONAL, 0)

        def FAILED_LOGIN_ATTEMPTS(self):
            return self.getToken(MySqlParser.FAILED_LOGIN_ATTEMPTS, 0)

        def PASSWORD_LOCK_TIME(self):
            return self.getToken(MySqlParser.PASSWORD_LOCK_TIME, 0)

        def UNBOUNDED(self):
            return self.getToken(MySqlParser.UNBOUNDED, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_userPasswordOption

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUserPasswordOption" ):
                listener.enterUserPasswordOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUserPasswordOption" ):
                listener.exitUserPasswordOption(self)




    def userPasswordOption(self):

        localctx = MySqlParser.UserPasswordOptionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 458, self.RULE_userPasswordOption)
        self._la = 0 # Token type
        try:
            self.state = 5465
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,804,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 5427
                self.match(MySqlParser.PASSWORD)
                self.state = 5428
                self.match(MySqlParser.EXPIRE)
                self.state = 5435
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [42]:
                    self.state = 5429
                    localctx.expireType = self.match(MySqlParser.DEFAULT)
                    pass
                elif token in [519]:
                    self.state = 5430
                    localctx.expireType = self.match(MySqlParser.NEVER)
                    pass
                elif token in [86]:
                    self.state = 5431
                    localctx.expireType = self.match(MySqlParser.INTERVAL)
                    self.state = 5432
                    self.decimalLiteral()
                    self.state = 5433
                    self.match(MySqlParser.DAY)
                    pass
                elif token in [-1, 7, 9, 14, 20, 24, 26, 33, 44, 45, 46, 51, 62, 71, 72, 85, 93, 102, 103, 119, 132, 138, 139, 141, 143, 147, 152, 153, 155, 156, 172, 182, 184, 186, 188, 192, 332, 344, 345, 351, 356, 368, 369, 390, 399, 424, 432, 442, 444, 456, 551, 552, 560, 580, 589, 597, 604, 629, 635, 656, 661, 681, 708, 739, 1121, 1133, 1135, 1136]:
                    pass
                else:
                    pass
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 5437
                self.match(MySqlParser.PASSWORD)
                self.state = 5438
                self.match(MySqlParser.HISTORY)
                self.state = 5441
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [42]:
                    self.state = 5439
                    self.match(MySqlParser.DEFAULT)
                    pass
                elif token in [1138, 1139, 1140, 1149, 1151]:
                    self.state = 5440
                    self.decimalLiteral()
                    pass
                else:
                    raise NoViableAltException(self)

                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 5443
                self.match(MySqlParser.PASSWORD)
                self.state = 5444
                self.match(MySqlParser.REUSE)
                self.state = 5445
                self.match(MySqlParser.INTERVAL)
                self.state = 5450
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [42]:
                    self.state = 5446
                    self.match(MySqlParser.DEFAULT)
                    pass
                elif token in [1138, 1139, 1140, 1149, 1151]:
                    self.state = 5447
                    self.decimalLiteral()
                    self.state = 5448
                    self.match(MySqlParser.DAY)
                    pass
                else:
                    raise NoViableAltException(self)

                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 5452
                self.match(MySqlParser.PASSWORD)
                self.state = 5453
                self.match(MySqlParser.REQUIRE)
                self.state = 5454
                self.match(MySqlParser.CURRENT)
                self.state = 5456
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==42 or _la==121:
                    self.state = 5455
                    _la = self._input.LA(1)
                    if not(_la==42 or _la==121):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 5458
                self.match(MySqlParser.FAILED_LOGIN_ATTEMPTS)
                self.state = 5459
                self.decimalLiteral()
                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 5460
                self.match(MySqlParser.PASSWORD_LOCK_TIME)
                self.state = 5463
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [1138, 1139, 1140, 1149, 1151]:
                    self.state = 5461
                    self.decimalLiteral()
                    pass
                elif token in [657]:
                    self.state = 5462
                    self.match(MySqlParser.UNBOUNDED)
                    pass
                else:
                    raise NoViableAltException(self)

                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class UserLockOptionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.lockType = None # Token

        def ACCOUNT(self):
            return self.getToken(MySqlParser.ACCOUNT, 0)

        def LOCK(self):
            return self.getToken(MySqlParser.LOCK, 0)

        def UNLOCK(self):
            return self.getToken(MySqlParser.UNLOCK, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_userLockOption

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUserLockOption" ):
                listener.enterUserLockOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUserLockOption" ):
                listener.exitUserLockOption(self)




    def userLockOption(self):

        localctx = MySqlParser.UserLockOptionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 460, self.RULE_userLockOption)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5467
            self.match(MySqlParser.ACCOUNT)
            self.state = 5468
            localctx.lockType = self._input.LT(1)
            _la = self._input.LA(1)
            if not(_la==103 or _la==182):
                localctx.lockType = self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class PrivelegeClauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def privilege(self):
            return self.getTypedRuleContext(MySqlParser.PrivilegeContext,0)


        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def uidList(self):
            return self.getTypedRuleContext(MySqlParser.UidListContext,0)


        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_privelegeClause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPrivelegeClause" ):
                listener.enterPrivelegeClause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPrivelegeClause" ):
                listener.exitPrivelegeClause(self)




    def privelegeClause(self):

        localctx = MySqlParser.PrivelegeClauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 462, self.RULE_privelegeClause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5470
            self.privilege()
            self.state = 5475
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1133:
                self.state = 5471
                self.match(MySqlParser.LR_BRACKET)
                self.state = 5472
                self.uidList()
                self.state = 5473
                self.match(MySqlParser.RR_BRACKET)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class PrivilegeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALL(self):
            return self.getToken(MySqlParser.ALL, 0)

        def PRIVILEGES(self):
            return self.getToken(MySqlParser.PRIVILEGES, 0)

        def ALTER(self):
            return self.getToken(MySqlParser.ALTER, 0)

        def ROUTINE(self):
            return self.getToken(MySqlParser.ROUTINE, 0)

        def CREATE(self):
            return self.getToken(MySqlParser.CREATE, 0)

        def TEMPORARY(self):
            return self.getToken(MySqlParser.TEMPORARY, 0)

        def TABLES(self):
            return self.getToken(MySqlParser.TABLES, 0)

        def VIEW(self):
            return self.getToken(MySqlParser.VIEW, 0)

        def USER(self):
            return self.getToken(MySqlParser.USER, 0)

        def TABLESPACE(self):
            return self.getToken(MySqlParser.TABLESPACE, 0)

        def ROLE(self):
            return self.getToken(MySqlParser.ROLE, 0)

        def DELETE(self):
            return self.getToken(MySqlParser.DELETE, 0)

        def DROP(self):
            return self.getToken(MySqlParser.DROP, 0)

        def EVENT(self):
            return self.getToken(MySqlParser.EVENT, 0)

        def EXECUTE(self):
            return self.getToken(MySqlParser.EXECUTE, 0)

        def FILE(self):
            return self.getToken(MySqlParser.FILE, 0)

        def GRANT(self):
            return self.getToken(MySqlParser.GRANT, 0)

        def OPTION(self):
            return self.getToken(MySqlParser.OPTION, 0)

        def INDEX(self):
            return self.getToken(MySqlParser.INDEX, 0)

        def INSERT(self):
            return self.getToken(MySqlParser.INSERT, 0)

        def LOCK(self):
            return self.getToken(MySqlParser.LOCK, 0)

        def PROCESS(self):
            return self.getToken(MySqlParser.PROCESS, 0)

        def PROXY(self):
            return self.getToken(MySqlParser.PROXY, 0)

        def REFERENCES(self):
            return self.getToken(MySqlParser.REFERENCES, 0)

        def RELOAD(self):
            return self.getToken(MySqlParser.RELOAD, 0)

        def REPLICATION(self):
            return self.getToken(MySqlParser.REPLICATION, 0)

        def CLIENT(self):
            return self.getToken(MySqlParser.CLIENT, 0)

        def SLAVE(self):
            return self.getToken(MySqlParser.SLAVE, 0)

        def SELECT(self):
            return self.getToken(MySqlParser.SELECT, 0)

        def SHOW(self):
            return self.getToken(MySqlParser.SHOW, 0)

        def DATABASES(self):
            return self.getToken(MySqlParser.DATABASES, 0)

        def SHUTDOWN(self):
            return self.getToken(MySqlParser.SHUTDOWN, 0)

        def SUPER(self):
            return self.getToken(MySqlParser.SUPER, 0)

        def TRIGGER(self):
            return self.getToken(MySqlParser.TRIGGER, 0)

        def UPDATE(self):
            return self.getToken(MySqlParser.UPDATE, 0)

        def USAGE(self):
            return self.getToken(MySqlParser.USAGE, 0)

        def APPLICATION_PASSWORD_ADMIN(self):
            return self.getToken(MySqlParser.APPLICATION_PASSWORD_ADMIN, 0)

        def AUDIT_ABORT_EXEMPT(self):
            return self.getToken(MySqlParser.AUDIT_ABORT_EXEMPT, 0)

        def AUDIT_ADMIN(self):
            return self.getToken(MySqlParser.AUDIT_ADMIN, 0)

        def AUTHENTICATION_POLICY_ADMIN(self):
            return self.getToken(MySqlParser.AUTHENTICATION_POLICY_ADMIN, 0)

        def BACKUP_ADMIN(self):
            return self.getToken(MySqlParser.BACKUP_ADMIN, 0)

        def BINLOG_ADMIN(self):
            return self.getToken(MySqlParser.BINLOG_ADMIN, 0)

        def BINLOG_ENCRYPTION_ADMIN(self):
            return self.getToken(MySqlParser.BINLOG_ENCRYPTION_ADMIN, 0)

        def CLONE_ADMIN(self):
            return self.getToken(MySqlParser.CLONE_ADMIN, 0)

        def CONNECTION_ADMIN(self):
            return self.getToken(MySqlParser.CONNECTION_ADMIN, 0)

        def ENCRYPTION_KEY_ADMIN(self):
            return self.getToken(MySqlParser.ENCRYPTION_KEY_ADMIN, 0)

        def FIREWALL_ADMIN(self):
            return self.getToken(MySqlParser.FIREWALL_ADMIN, 0)

        def FIREWALL_EXEMPT(self):
            return self.getToken(MySqlParser.FIREWALL_EXEMPT, 0)

        def FIREWALL_USER(self):
            return self.getToken(MySqlParser.FIREWALL_USER, 0)

        def FLUSH_OPTIMIZER_COSTS(self):
            return self.getToken(MySqlParser.FLUSH_OPTIMIZER_COSTS, 0)

        def FLUSH_STATUS(self):
            return self.getToken(MySqlParser.FLUSH_STATUS, 0)

        def FLUSH_TABLES(self):
            return self.getToken(MySqlParser.FLUSH_TABLES, 0)

        def FLUSH_USER_RESOURCES(self):
            return self.getToken(MySqlParser.FLUSH_USER_RESOURCES, 0)

        def GROUP_REPLICATION_ADMIN(self):
            return self.getToken(MySqlParser.GROUP_REPLICATION_ADMIN, 0)

        def INNODB_REDO_LOG_ARCHIVE(self):
            return self.getToken(MySqlParser.INNODB_REDO_LOG_ARCHIVE, 0)

        def INNODB_REDO_LOG_ENABLE(self):
            return self.getToken(MySqlParser.INNODB_REDO_LOG_ENABLE, 0)

        def NDB_STORED_USER(self):
            return self.getToken(MySqlParser.NDB_STORED_USER, 0)

        def PASSWORDLESS_USER_ADMIN(self):
            return self.getToken(MySqlParser.PASSWORDLESS_USER_ADMIN, 0)

        def PERSIST_RO_VARIABLES_ADMIN(self):
            return self.getToken(MySqlParser.PERSIST_RO_VARIABLES_ADMIN, 0)

        def REPLICATION_APPLIER(self):
            return self.getToken(MySqlParser.REPLICATION_APPLIER, 0)

        def REPLICATION_SLAVE_ADMIN(self):
            return self.getToken(MySqlParser.REPLICATION_SLAVE_ADMIN, 0)

        def RESOURCE_GROUP_ADMIN(self):
            return self.getToken(MySqlParser.RESOURCE_GROUP_ADMIN, 0)

        def RESOURCE_GROUP_USER(self):
            return self.getToken(MySqlParser.RESOURCE_GROUP_USER, 0)

        def ROLE_ADMIN(self):
            return self.getToken(MySqlParser.ROLE_ADMIN, 0)

        def SERVICE_CONNECTION_ADMIN(self):
            return self.getToken(MySqlParser.SERVICE_CONNECTION_ADMIN, 0)

        def SESSION_VARIABLES_ADMIN(self):
            return self.getToken(MySqlParser.SESSION_VARIABLES_ADMIN, 0)

        def SET_USER_ID(self):
            return self.getToken(MySqlParser.SET_USER_ID, 0)

        def SKIP_QUERY_REWRITE(self):
            return self.getToken(MySqlParser.SKIP_QUERY_REWRITE, 0)

        def SHOW_ROUTINE(self):
            return self.getToken(MySqlParser.SHOW_ROUTINE, 0)

        def SYSTEM_USER(self):
            return self.getToken(MySqlParser.SYSTEM_USER, 0)

        def SYSTEM_VARIABLES_ADMIN(self):
            return self.getToken(MySqlParser.SYSTEM_VARIABLES_ADMIN, 0)

        def TABLE_ENCRYPTION_ADMIN(self):
            return self.getToken(MySqlParser.TABLE_ENCRYPTION_ADMIN, 0)

        def TP_CONNECTION_ADMIN(self):
            return self.getToken(MySqlParser.TP_CONNECTION_ADMIN, 0)

        def VERSION_TOKEN_ADMIN(self):
            return self.getToken(MySqlParser.VERSION_TOKEN_ADMIN, 0)

        def XA_RECOVER_ADMIN(self):
            return self.getToken(MySqlParser.XA_RECOVER_ADMIN, 0)

        def LOAD(self):
            return self.getToken(MySqlParser.LOAD, 0)

        def FROM(self):
            return self.getToken(MySqlParser.FROM, 0)

        def S3(self):
            return self.getToken(MySqlParser.S3, 0)

        def INTO(self):
            return self.getToken(MySqlParser.INTO, 0)

        def INVOKE(self):
            return self.getToken(MySqlParser.INVOKE, 0)

        def LAMBDA(self):
            return self.getToken(MySqlParser.LAMBDA, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_privilege

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPrivilege" ):
                listener.enterPrivilege(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPrivilege" ):
                listener.exitPrivilege(self)




    def privilege(self):

        localctx = MySqlParser.PrivilegeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 464, self.RULE_privilege)
        self._la = 0 # Token type
        try:
            self.state = 5570
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,810,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 5477
                self.match(MySqlParser.ALL)
                self.state = 5479
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==725:
                    self.state = 5478
                    self.match(MySqlParser.PRIVILEGES)


                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 5481
                self.match(MySqlParser.ALTER)
                self.state = 5483
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==733:
                    self.state = 5482
                    self.match(MySqlParser.ROUTINE)


                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 5485
                self.match(MySqlParser.CREATE)
                self.state = 5493
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [649]:
                    self.state = 5486
                    self.match(MySqlParser.TEMPORARY)
                    self.state = 5487
                    self.match(MySqlParser.TABLES)
                    pass
                elif token in [733]:
                    self.state = 5488
                    self.match(MySqlParser.ROUTINE)
                    pass
                elif token in [671]:
                    self.state = 5489
                    self.match(MySqlParser.VIEW)
                    pass
                elif token in [665]:
                    self.state = 5490
                    self.match(MySqlParser.USER)
                    pass
                elif token in [647]:
                    self.state = 5491
                    self.match(MySqlParser.TABLESPACE)
                    pass
                elif token in [596]:
                    self.state = 5492
                    self.match(MySqlParser.ROLE)
                    pass
                elif token in [118, 1133, 1135]:
                    pass
                else:
                    pass
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 5495
                self.match(MySqlParser.DELETE)
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 5496
                self.match(MySqlParser.DROP)
                self.state = 5498
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==596:
                    self.state = 5497
                    self.match(MySqlParser.ROLE)


                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 5500
                self.match(MySqlParser.EVENT)
                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 5501
                self.match(MySqlParser.EXECUTE)
                pass

            elif la_ == 8:
                self.enterOuterAlt(localctx, 8)
                self.state = 5502
                self.match(MySqlParser.FILE)
                pass

            elif la_ == 9:
                self.enterOuterAlt(localctx, 9)
                self.state = 5503
                self.match(MySqlParser.GRANT)
                self.state = 5504
                self.match(MySqlParser.OPTION)
                pass

            elif la_ == 10:
                self.enterOuterAlt(localctx, 10)
                self.state = 5505
                self.match(MySqlParser.INDEX)
                pass

            elif la_ == 11:
                self.enterOuterAlt(localctx, 11)
                self.state = 5506
                self.match(MySqlParser.INSERT)
                pass

            elif la_ == 12:
                self.enterOuterAlt(localctx, 12)
                self.state = 5507
                self.match(MySqlParser.LOCK)
                self.state = 5508
                self.match(MySqlParser.TABLES)
                pass

            elif la_ == 13:
                self.enterOuterAlt(localctx, 13)
                self.state = 5509
                self.match(MySqlParser.PROCESS)
                pass

            elif la_ == 14:
                self.enterOuterAlt(localctx, 14)
                self.state = 5510
                self.match(MySqlParser.PROXY)
                pass

            elif la_ == 15:
                self.enterOuterAlt(localctx, 15)
                self.state = 5511
                self.match(MySqlParser.REFERENCES)
                pass

            elif la_ == 16:
                self.enterOuterAlt(localctx, 16)
                self.state = 5512
                self.match(MySqlParser.RELOAD)
                pass

            elif la_ == 17:
                self.enterOuterAlt(localctx, 17)
                self.state = 5513
                self.match(MySqlParser.REPLICATION)
                self.state = 5514
                _la = self._input.LA(1)
                if not(_la==360 or _la==614):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass

            elif la_ == 18:
                self.enterOuterAlt(localctx, 18)
                self.state = 5515
                self.match(MySqlParser.SELECT)
                pass

            elif la_ == 19:
                self.enterOuterAlt(localctx, 19)
                self.state = 5516
                self.match(MySqlParser.SHOW)
                self.state = 5517
                _la = self._input.LA(1)
                if not(_la==40 or _la==671):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass

            elif la_ == 20:
                self.enterOuterAlt(localctx, 20)
                self.state = 5518
                self.match(MySqlParser.SHUTDOWN)
                pass

            elif la_ == 21:
                self.enterOuterAlt(localctx, 21)
                self.state = 5519
                self.match(MySqlParser.SUPER)
                pass

            elif la_ == 22:
                self.enterOuterAlt(localctx, 22)
                self.state = 5520
                self.match(MySqlParser.TRIGGER)
                pass

            elif la_ == 23:
                self.enterOuterAlt(localctx, 23)
                self.state = 5521
                self.match(MySqlParser.UPDATE)
                pass

            elif la_ == 24:
                self.enterOuterAlt(localctx, 24)
                self.state = 5522
                self.match(MySqlParser.USAGE)
                pass

            elif la_ == 25:
                self.enterOuterAlt(localctx, 25)
                self.state = 5523
                self.match(MySqlParser.APPLICATION_PASSWORD_ADMIN)
                pass

            elif la_ == 26:
                self.enterOuterAlt(localctx, 26)
                self.state = 5524
                self.match(MySqlParser.AUDIT_ABORT_EXEMPT)
                pass

            elif la_ == 27:
                self.enterOuterAlt(localctx, 27)
                self.state = 5525
                self.match(MySqlParser.AUDIT_ADMIN)
                pass

            elif la_ == 28:
                self.enterOuterAlt(localctx, 28)
                self.state = 5526
                self.match(MySqlParser.AUTHENTICATION_POLICY_ADMIN)
                pass

            elif la_ == 29:
                self.enterOuterAlt(localctx, 29)
                self.state = 5527
                self.match(MySqlParser.BACKUP_ADMIN)
                pass

            elif la_ == 30:
                self.enterOuterAlt(localctx, 30)
                self.state = 5528
                self.match(MySqlParser.BINLOG_ADMIN)
                pass

            elif la_ == 31:
                self.enterOuterAlt(localctx, 31)
                self.state = 5529
                self.match(MySqlParser.BINLOG_ENCRYPTION_ADMIN)
                pass

            elif la_ == 32:
                self.enterOuterAlt(localctx, 32)
                self.state = 5530
                self.match(MySqlParser.CLONE_ADMIN)
                pass

            elif la_ == 33:
                self.enterOuterAlt(localctx, 33)
                self.state = 5531
                self.match(MySqlParser.CONNECTION_ADMIN)
                pass

            elif la_ == 34:
                self.enterOuterAlt(localctx, 34)
                self.state = 5532
                self.match(MySqlParser.ENCRYPTION_KEY_ADMIN)
                pass

            elif la_ == 35:
                self.enterOuterAlt(localctx, 35)
                self.state = 5533
                self.match(MySqlParser.FIREWALL_ADMIN)
                pass

            elif la_ == 36:
                self.enterOuterAlt(localctx, 36)
                self.state = 5534
                self.match(MySqlParser.FIREWALL_EXEMPT)
                pass

            elif la_ == 37:
                self.enterOuterAlt(localctx, 37)
                self.state = 5535
                self.match(MySqlParser.FIREWALL_USER)
                pass

            elif la_ == 38:
                self.enterOuterAlt(localctx, 38)
                self.state = 5536
                self.match(MySqlParser.FLUSH_OPTIMIZER_COSTS)
                pass

            elif la_ == 39:
                self.enterOuterAlt(localctx, 39)
                self.state = 5537
                self.match(MySqlParser.FLUSH_STATUS)
                pass

            elif la_ == 40:
                self.enterOuterAlt(localctx, 40)
                self.state = 5538
                self.match(MySqlParser.FLUSH_TABLES)
                pass

            elif la_ == 41:
                self.enterOuterAlt(localctx, 41)
                self.state = 5539
                self.match(MySqlParser.FLUSH_USER_RESOURCES)
                pass

            elif la_ == 42:
                self.enterOuterAlt(localctx, 42)
                self.state = 5540
                self.match(MySqlParser.GROUP_REPLICATION_ADMIN)
                pass

            elif la_ == 43:
                self.enterOuterAlt(localctx, 43)
                self.state = 5541
                self.match(MySqlParser.INNODB_REDO_LOG_ARCHIVE)
                pass

            elif la_ == 44:
                self.enterOuterAlt(localctx, 44)
                self.state = 5542
                self.match(MySqlParser.INNODB_REDO_LOG_ENABLE)
                pass

            elif la_ == 45:
                self.enterOuterAlt(localctx, 45)
                self.state = 5543
                self.match(MySqlParser.NDB_STORED_USER)
                pass

            elif la_ == 46:
                self.enterOuterAlt(localctx, 46)
                self.state = 5544
                self.match(MySqlParser.PASSWORDLESS_USER_ADMIN)
                pass

            elif la_ == 47:
                self.enterOuterAlt(localctx, 47)
                self.state = 5545
                self.match(MySqlParser.PERSIST_RO_VARIABLES_ADMIN)
                pass

            elif la_ == 48:
                self.enterOuterAlt(localctx, 48)
                self.state = 5546
                self.match(MySqlParser.REPLICATION_APPLIER)
                pass

            elif la_ == 49:
                self.enterOuterAlt(localctx, 49)
                self.state = 5547
                self.match(MySqlParser.REPLICATION_SLAVE_ADMIN)
                pass

            elif la_ == 50:
                self.enterOuterAlt(localctx, 50)
                self.state = 5548
                self.match(MySqlParser.RESOURCE_GROUP_ADMIN)
                pass

            elif la_ == 51:
                self.enterOuterAlt(localctx, 51)
                self.state = 5549
                self.match(MySqlParser.RESOURCE_GROUP_USER)
                pass

            elif la_ == 52:
                self.enterOuterAlt(localctx, 52)
                self.state = 5550
                self.match(MySqlParser.ROLE_ADMIN)
                pass

            elif la_ == 53:
                self.enterOuterAlt(localctx, 53)
                self.state = 5551
                self.match(MySqlParser.SERVICE_CONNECTION_ADMIN)
                pass

            elif la_ == 54:
                self.enterOuterAlt(localctx, 54)
                self.state = 5552
                self.match(MySqlParser.SESSION_VARIABLES_ADMIN)
                pass

            elif la_ == 55:
                self.enterOuterAlt(localctx, 55)
                self.state = 5553
                self.match(MySqlParser.SET_USER_ID)
                pass

            elif la_ == 56:
                self.enterOuterAlt(localctx, 56)
                self.state = 5554
                self.match(MySqlParser.SKIP_QUERY_REWRITE)
                pass

            elif la_ == 57:
                self.enterOuterAlt(localctx, 57)
                self.state = 5555
                self.match(MySqlParser.SHOW_ROUTINE)
                pass

            elif la_ == 58:
                self.enterOuterAlt(localctx, 58)
                self.state = 5556
                self.match(MySqlParser.SYSTEM_USER)
                pass

            elif la_ == 59:
                self.enterOuterAlt(localctx, 59)
                self.state = 5557
                self.match(MySqlParser.SYSTEM_VARIABLES_ADMIN)
                pass

            elif la_ == 60:
                self.enterOuterAlt(localctx, 60)
                self.state = 5558
                self.match(MySqlParser.TABLE_ENCRYPTION_ADMIN)
                pass

            elif la_ == 61:
                self.enterOuterAlt(localctx, 61)
                self.state = 5559
                self.match(MySqlParser.TP_CONNECTION_ADMIN)
                pass

            elif la_ == 62:
                self.enterOuterAlt(localctx, 62)
                self.state = 5560
                self.match(MySqlParser.VERSION_TOKEN_ADMIN)
                pass

            elif la_ == 63:
                self.enterOuterAlt(localctx, 63)
                self.state = 5561
                self.match(MySqlParser.XA_RECOVER_ADMIN)
                pass

            elif la_ == 64:
                self.enterOuterAlt(localctx, 64)
                self.state = 5562
                self.match(MySqlParser.LOAD)
                self.state = 5563
                self.match(MySqlParser.FROM)
                self.state = 5564
                self.match(MySqlParser.S3)
                pass

            elif la_ == 65:
                self.enterOuterAlt(localctx, 65)
                self.state = 5565
                self.match(MySqlParser.SELECT)
                self.state = 5566
                self.match(MySqlParser.INTO)
                self.state = 5567
                self.match(MySqlParser.S3)
                pass

            elif la_ == 66:
                self.enterOuterAlt(localctx, 66)
                self.state = 5568
                self.match(MySqlParser.INVOKE)
                self.state = 5569
                self.match(MySqlParser.LAMBDA)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class PrivilegeLevelContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_privilegeLevel

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class DefiniteSchemaPrivLevelContext(PrivilegeLevelContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PrivilegeLevelContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def DOT(self):
            return self.getToken(MySqlParser.DOT, 0)
        def STAR(self):
            return self.getToken(MySqlParser.STAR, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDefiniteSchemaPrivLevel" ):
                listener.enterDefiniteSchemaPrivLevel(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDefiniteSchemaPrivLevel" ):
                listener.exitDefiniteSchemaPrivLevel(self)


    class DefiniteFullTablePrivLevel2Context(PrivilegeLevelContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PrivilegeLevelContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def dottedId(self):
            return self.getTypedRuleContext(MySqlParser.DottedIdContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDefiniteFullTablePrivLevel2" ):
                listener.enterDefiniteFullTablePrivLevel2(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDefiniteFullTablePrivLevel2" ):
                listener.exitDefiniteFullTablePrivLevel2(self)


    class DefiniteFullTablePrivLevelContext(PrivilegeLevelContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PrivilegeLevelContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def uid(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UidContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UidContext,i)

        def DOT(self):
            return self.getToken(MySqlParser.DOT, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDefiniteFullTablePrivLevel" ):
                listener.enterDefiniteFullTablePrivLevel(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDefiniteFullTablePrivLevel" ):
                listener.exitDefiniteFullTablePrivLevel(self)


    class GlobalPrivLevelContext(PrivilegeLevelContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PrivilegeLevelContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def STAR(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.STAR)
            else:
                return self.getToken(MySqlParser.STAR, i)
        def DOT(self):
            return self.getToken(MySqlParser.DOT, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterGlobalPrivLevel" ):
                listener.enterGlobalPrivLevel(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitGlobalPrivLevel" ):
                listener.exitGlobalPrivLevel(self)


    class DefiniteTablePrivLevelContext(PrivilegeLevelContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PrivilegeLevelContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDefiniteTablePrivLevel" ):
                listener.enterDefiniteTablePrivLevel(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDefiniteTablePrivLevel" ):
                listener.exitDefiniteTablePrivLevel(self)


    class CurrentSchemaPriviLevelContext(PrivilegeLevelContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PrivilegeLevelContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def STAR(self):
            return self.getToken(MySqlParser.STAR, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCurrentSchemaPriviLevel" ):
                listener.enterCurrentSchemaPriviLevel(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCurrentSchemaPriviLevel" ):
                listener.exitCurrentSchemaPriviLevel(self)



    def privilegeLevel(self):

        localctx = MySqlParser.PrivilegeLevelContext(self, self._ctx, self.state)
        self.enterRule(localctx, 466, self.RULE_privilegeLevel)
        try:
            self.state = 5588
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,811,self._ctx)
            if la_ == 1:
                localctx = MySqlParser.CurrentSchemaPriviLevelContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 5572
                self.match(MySqlParser.STAR)
                pass

            elif la_ == 2:
                localctx = MySqlParser.GlobalPrivLevelContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 5573
                self.match(MySqlParser.STAR)
                self.state = 5574
                self.match(MySqlParser.DOT)
                self.state = 5575
                self.match(MySqlParser.STAR)
                pass

            elif la_ == 3:
                localctx = MySqlParser.DefiniteSchemaPrivLevelContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 5576
                self.uid()
                self.state = 5577
                self.match(MySqlParser.DOT)
                self.state = 5578
                self.match(MySqlParser.STAR)
                pass

            elif la_ == 4:
                localctx = MySqlParser.DefiniteFullTablePrivLevelContext(self, localctx)
                self.enterOuterAlt(localctx, 4)
                self.state = 5580
                self.uid()
                self.state = 5581
                self.match(MySqlParser.DOT)
                self.state = 5582
                self.uid()
                pass

            elif la_ == 5:
                localctx = MySqlParser.DefiniteFullTablePrivLevel2Context(self, localctx)
                self.enterOuterAlt(localctx, 5)
                self.state = 5584
                self.uid()
                self.state = 5585
                self.dottedId()
                pass

            elif la_ == 6:
                localctx = MySqlParser.DefiniteTablePrivLevelContext(self, localctx)
                self.enterOuterAlt(localctx, 6)
                self.state = 5587
                self.uid()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class RenameUserClauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.fromFirst = None # UserNameContext
            self.toFirst = None # UserNameContext

        def TO(self):
            return self.getToken(MySqlParser.TO, 0)

        def userName(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UserNameContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UserNameContext,i)


        def getRuleIndex(self):
            return MySqlParser.RULE_renameUserClause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRenameUserClause" ):
                listener.enterRenameUserClause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRenameUserClause" ):
                listener.exitRenameUserClause(self)




    def renameUserClause(self):

        localctx = MySqlParser.RenameUserClauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 468, self.RULE_renameUserClause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5590
            localctx.fromFirst = self.userName()
            self.state = 5591
            self.match(MySqlParser.TO)
            self.state = 5592
            localctx.toFirst = self.userName()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class AnalyzeTableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.actionOption = None # Token

        def ANALYZE(self):
            return self.getToken(MySqlParser.ANALYZE, 0)

        def tables(self):
            return self.getTypedRuleContext(MySqlParser.TablesContext,0)


        def TABLE(self):
            return self.getToken(MySqlParser.TABLE, 0)

        def TABLES(self):
            return self.getToken(MySqlParser.TABLES, 0)

        def UPDATE(self):
            return self.getToken(MySqlParser.UPDATE, 0)

        def HISTOGRAM(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.HISTOGRAM)
            else:
                return self.getToken(MySqlParser.HISTOGRAM, i)

        def ON(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.ON)
            else:
                return self.getToken(MySqlParser.ON, i)

        def fullColumnName(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.FullColumnNameContext)
            else:
                return self.getTypedRuleContext(MySqlParser.FullColumnNameContext,i)


        def DROP(self):
            return self.getToken(MySqlParser.DROP, 0)

        def NO_WRITE_TO_BINLOG(self):
            return self.getToken(MySqlParser.NO_WRITE_TO_BINLOG, 0)

        def LOCAL(self):
            return self.getToken(MySqlParser.LOCAL, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def WITH(self):
            return self.getToken(MySqlParser.WITH, 0)

        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)


        def BUCKETS(self):
            return self.getToken(MySqlParser.BUCKETS, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_analyzeTable

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAnalyzeTable" ):
                listener.enterAnalyzeTable(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAnalyzeTable" ):
                listener.exitAnalyzeTable(self)




    def analyzeTable(self):

        localctx = MySqlParser.AnalyzeTableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 470, self.RULE_analyzeTable)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5594
            self.match(MySqlParser.ANALYZE)
            self.state = 5596
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==115 or _la==474:
                self.state = 5595
                localctx.actionOption = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==115 or _la==474):
                    localctx.actionOption = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 5598
            _la = self._input.LA(1)
            if not(_la==172 or _la==742):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 5599
            self.tables()
            self.state = 5617
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,815,self._ctx)
            if la_ == 1:
                self.state = 5600
                self.match(MySqlParser.UPDATE)
                self.state = 5601
                self.match(MySqlParser.HISTOGRAM)
                self.state = 5602
                self.match(MySqlParser.ON)
                self.state = 5603
                self.fullColumnName()
                self.state = 5608
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 5604
                    self.match(MySqlParser.COMMA)
                    self.state = 5605
                    self.fullColumnName()
                    self.state = 5610
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 5615
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,814,self._ctx)
                if la_ == 1:
                    self.state = 5611
                    self.match(MySqlParser.WITH)
                    self.state = 5612
                    self.decimalLiteral()
                    self.state = 5613
                    self.match(MySqlParser.BUCKETS)




            self.state = 5630
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,817,self._ctx)
            if la_ == 1:
                self.state = 5619
                self.match(MySqlParser.DROP)
                self.state = 5620
                self.match(MySqlParser.HISTOGRAM)
                self.state = 5621
                self.match(MySqlParser.ON)
                self.state = 5622
                self.fullColumnName()
                self.state = 5627
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 5623
                    self.match(MySqlParser.COMMA)
                    self.state = 5624
                    self.fullColumnName()
                    self.state = 5629
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)



        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CheckTableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CHECK(self):
            return self.getToken(MySqlParser.CHECK, 0)

        def TABLE(self):
            return self.getToken(MySqlParser.TABLE, 0)

        def tables(self):
            return self.getTypedRuleContext(MySqlParser.TablesContext,0)


        def checkTableOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.CheckTableOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.CheckTableOptionContext,i)


        def getRuleIndex(self):
            return MySqlParser.RULE_checkTable

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCheckTable" ):
                listener.enterCheckTable(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCheckTable" ):
                listener.exitCheckTable(self)




    def checkTable(self):

        localctx = MySqlParser.CheckTableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 472, self.RULE_checkTable)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5632
            self.match(MySqlParser.CHECK)
            self.state = 5633
            self.match(MySqlParser.TABLE)
            self.state = 5634
            self.tables()
            self.state = 5638
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==65 or _la==354 or _la==422 or _la==425 or _la==504 or _la==568:
                self.state = 5635
                self.checkTableOption()
                self.state = 5640
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ChecksumTableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.actionOption = None # Token

        def CHECKSUM(self):
            return self.getToken(MySqlParser.CHECKSUM, 0)

        def TABLE(self):
            return self.getToken(MySqlParser.TABLE, 0)

        def tables(self):
            return self.getTypedRuleContext(MySqlParser.TablesContext,0)


        def QUICK(self):
            return self.getToken(MySqlParser.QUICK, 0)

        def EXTENDED(self):
            return self.getToken(MySqlParser.EXTENDED, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_checksumTable

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterChecksumTable" ):
                listener.enterChecksumTable(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitChecksumTable" ):
                listener.exitChecksumTable(self)




    def checksumTable(self):

        localctx = MySqlParser.ChecksumTableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 474, self.RULE_checksumTable)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5641
            self.match(MySqlParser.CHECKSUM)
            self.state = 5642
            self.match(MySqlParser.TABLE)
            self.state = 5643
            self.tables()
            self.state = 5645
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==422 or _la==568:
                self.state = 5644
                localctx.actionOption = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==422 or _la==568):
                    localctx.actionOption = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class OptimizeTableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.actionOption = None # Token

        def OPTIMIZE(self):
            return self.getToken(MySqlParser.OPTIMIZE, 0)

        def tables(self):
            return self.getTypedRuleContext(MySqlParser.TablesContext,0)


        def TABLE(self):
            return self.getToken(MySqlParser.TABLE, 0)

        def TABLES(self):
            return self.getToken(MySqlParser.TABLES, 0)

        def NO_WRITE_TO_BINLOG(self):
            return self.getToken(MySqlParser.NO_WRITE_TO_BINLOG, 0)

        def LOCAL(self):
            return self.getToken(MySqlParser.LOCAL, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_optimizeTable

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOptimizeTable" ):
                listener.enterOptimizeTable(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOptimizeTable" ):
                listener.exitOptimizeTable(self)




    def optimizeTable(self):

        localctx = MySqlParser.OptimizeTableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 476, self.RULE_optimizeTable)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5647
            self.match(MySqlParser.OPTIMIZE)
            self.state = 5649
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==115 or _la==474:
                self.state = 5648
                localctx.actionOption = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==115 or _la==474):
                    localctx.actionOption = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 5651
            _la = self._input.LA(1)
            if not(_la==172 or _la==742):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 5652
            self.tables()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class RepairTableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.actionOption = None # Token

        def REPAIR(self):
            return self.getToken(MySqlParser.REPAIR, 0)

        def TABLE(self):
            return self.getToken(MySqlParser.TABLE, 0)

        def tables(self):
            return self.getTypedRuleContext(MySqlParser.TablesContext,0)


        def QUICK(self):
            return self.getToken(MySqlParser.QUICK, 0)

        def EXTENDED(self):
            return self.getToken(MySqlParser.EXTENDED, 0)

        def USE_FRM(self):
            return self.getToken(MySqlParser.USE_FRM, 0)

        def NO_WRITE_TO_BINLOG(self):
            return self.getToken(MySqlParser.NO_WRITE_TO_BINLOG, 0)

        def LOCAL(self):
            return self.getToken(MySqlParser.LOCAL, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_repairTable

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRepairTable" ):
                listener.enterRepairTable(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRepairTable" ):
                listener.exitRepairTable(self)




    def repairTable(self):

        localctx = MySqlParser.RepairTableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 478, self.RULE_repairTable)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5654
            self.match(MySqlParser.REPAIR)
            self.state = 5656
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==115 or _la==474:
                self.state = 5655
                localctx.actionOption = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==115 or _la==474):
                    localctx.actionOption = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 5658
            self.match(MySqlParser.TABLE)
            self.state = 5659
            self.tables()
            self.state = 5661
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==568:
                self.state = 5660
                self.match(MySqlParser.QUICK)


            self.state = 5664
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==422:
                self.state = 5663
                self.match(MySqlParser.EXTENDED)


            self.state = 5667
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==666:
                self.state = 5666
                self.match(MySqlParser.USE_FRM)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CheckTableOptionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FOR(self):
            return self.getToken(MySqlParser.FOR, 0)

        def UPGRADE(self):
            return self.getToken(MySqlParser.UPGRADE, 0)

        def QUICK(self):
            return self.getToken(MySqlParser.QUICK, 0)

        def FAST(self):
            return self.getToken(MySqlParser.FAST, 0)

        def MEDIUM(self):
            return self.getToken(MySqlParser.MEDIUM, 0)

        def EXTENDED(self):
            return self.getToken(MySqlParser.EXTENDED, 0)

        def CHANGED(self):
            return self.getToken(MySqlParser.CHANGED, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_checkTableOption

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCheckTableOption" ):
                listener.enterCheckTableOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCheckTableOption" ):
                listener.exitCheckTableOption(self)




    def checkTableOption(self):

        localctx = MySqlParser.CheckTableOptionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 480, self.RULE_checkTableOption)
        try:
            self.state = 5676
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [65]:
                self.enterOuterAlt(localctx, 1)
                self.state = 5669
                self.match(MySqlParser.FOR)
                self.state = 5670
                self.match(MySqlParser.UPGRADE)
                pass
            elif token in [568]:
                self.enterOuterAlt(localctx, 2)
                self.state = 5671
                self.match(MySqlParser.QUICK)
                pass
            elif token in [425]:
                self.enterOuterAlt(localctx, 3)
                self.state = 5672
                self.match(MySqlParser.FAST)
                pass
            elif token in [504]:
                self.enterOuterAlt(localctx, 4)
                self.state = 5673
                self.match(MySqlParser.MEDIUM)
                pass
            elif token in [422]:
                self.enterOuterAlt(localctx, 5)
                self.state = 5674
                self.match(MySqlParser.EXTENDED)
                pass
            elif token in [354]:
                self.enterOuterAlt(localctx, 6)
                self.state = 5675
                self.match(MySqlParser.CHANGED)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CreateUdfunctionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.returnType = None # Token

        def CREATE(self):
            return self.getToken(MySqlParser.CREATE, 0)

        def FUNCTION(self):
            return self.getToken(MySqlParser.FUNCTION, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def RETURNS(self):
            return self.getToken(MySqlParser.RETURNS, 0)

        def SONAME(self):
            return self.getToken(MySqlParser.SONAME, 0)

        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def STRING(self):
            return self.getToken(MySqlParser.STRING, 0)

        def INTEGER(self):
            return self.getToken(MySqlParser.INTEGER, 0)

        def REAL(self):
            return self.getToken(MySqlParser.REAL, 0)

        def DECIMAL(self):
            return self.getToken(MySqlParser.DECIMAL, 0)

        def AGGREGATE(self):
            return self.getToken(MySqlParser.AGGREGATE, 0)

        def ifNotExists(self):
            return self.getTypedRuleContext(MySqlParser.IfNotExistsContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_createUdfunction

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreateUdfunction" ):
                listener.enterCreateUdfunction(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreateUdfunction" ):
                listener.exitCreateUdfunction(self)




    def createUdfunction(self):

        localctx = MySqlParser.CreateUdfunctionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 482, self.RULE_createUdfunction)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5678
            self.match(MySqlParser.CREATE)
            self.state = 5680
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==335:
                self.state = 5679
                self.match(MySqlParser.AGGREGATE)


            self.state = 5682
            self.match(MySqlParser.FUNCTION)
            self.state = 5684
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,827,self._ctx)
            if la_ == 1:
                self.state = 5683
                self.ifNotExists()


            self.state = 5686
            self.uid()
            self.state = 5687
            self.match(MySqlParser.RETURNS)
            self.state = 5688
            localctx.returnType = self._input.LT(1)
            _la = self._input.LA(1)
            if not(((((_la - 206)) & ~0x3f) == 0 and ((1 << (_la - 206)) & 261) != 0) or _la==638):
                localctx.returnType = self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 5689
            self.match(MySqlParser.SONAME)
            self.state = 5690
            self.match(MySqlParser.STRING_LITERAL)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class InstallPluginContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def INSTALL(self):
            return self.getToken(MySqlParser.INSTALL, 0)

        def PLUGIN(self):
            return self.getToken(MySqlParser.PLUGIN, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def SONAME(self):
            return self.getToken(MySqlParser.SONAME, 0)

        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_installPlugin

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterInstallPlugin" ):
                listener.enterInstallPlugin(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitInstallPlugin" ):
                listener.exitInstallPlugin(self)




    def installPlugin(self):

        localctx = MySqlParser.InstallPluginContext(self, self._ctx, self.state)
        self.enterRule(localctx, 484, self.RULE_installPlugin)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5692
            self.match(MySqlParser.INSTALL)
            self.state = 5693
            self.match(MySqlParser.PLUGIN)
            self.state = 5694
            self.uid()
            self.state = 5695
            self.match(MySqlParser.SONAME)
            self.state = 5696
            self.match(MySqlParser.STRING_LITERAL)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class UninstallPluginContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def UNINSTALL(self):
            return self.getToken(MySqlParser.UNINSTALL, 0)

        def PLUGIN(self):
            return self.getToken(MySqlParser.PLUGIN, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_uninstallPlugin

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUninstallPlugin" ):
                listener.enterUninstallPlugin(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUninstallPlugin" ):
                listener.exitUninstallPlugin(self)




    def uninstallPlugin(self):

        localctx = MySqlParser.UninstallPluginContext(self, self._ctx, self.state)
        self.enterRule(localctx, 486, self.RULE_uninstallPlugin)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5698
            self.match(MySqlParser.UNINSTALL)
            self.state = 5699
            self.match(MySqlParser.PLUGIN)
            self.state = 5700
            self.uid()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class SetStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_setStatement

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class SetTransactionContext(SetStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SetStatementContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def setTransactionStatement(self):
            return self.getTypedRuleContext(MySqlParser.SetTransactionStatementContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSetTransaction" ):
                listener.enterSetTransaction(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSetTransaction" ):
                listener.exitSetTransaction(self)


    class SetCharsetContext(SetStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SetStatementContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def SET(self):
            return self.getToken(MySqlParser.SET, 0)
        def charSet(self):
            return self.getTypedRuleContext(MySqlParser.CharSetContext,0)

        def charsetName(self):
            return self.getTypedRuleContext(MySqlParser.CharsetNameContext,0)

        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSetCharset" ):
                listener.enterSetCharset(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSetCharset" ):
                listener.exitSetCharset(self)


    class SetNamesContext(SetStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SetStatementContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def SET(self):
            return self.getToken(MySqlParser.SET, 0)
        def NAMES(self):
            return self.getToken(MySqlParser.NAMES, 0)
        def charsetName(self):
            return self.getTypedRuleContext(MySqlParser.CharsetNameContext,0)

        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)
        def COLLATE(self):
            return self.getToken(MySqlParser.COLLATE, 0)
        def collationName(self):
            return self.getTypedRuleContext(MySqlParser.CollationNameContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSetNames" ):
                listener.enterSetNames(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSetNames" ):
                listener.exitSetNames(self)


    class SetPasswordContext(SetStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SetStatementContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def setPasswordStatement(self):
            return self.getTypedRuleContext(MySqlParser.SetPasswordStatementContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSetPassword" ):
                listener.enterSetPassword(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSetPassword" ):
                listener.exitSetPassword(self)


    class SetAutocommitContext(SetStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SetStatementContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def setAutocommitStatement(self):
            return self.getTypedRuleContext(MySqlParser.SetAutocommitStatementContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSetAutocommit" ):
                listener.enterSetAutocommit(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSetAutocommit" ):
                listener.exitSetAutocommit(self)


    class SetNewValueInsideTriggerContext(SetStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SetStatementContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def SET(self):
            return self.getToken(MySqlParser.SET, 0)
        def fullId(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.FullIdContext)
            else:
                return self.getTypedRuleContext(MySqlParser.FullIdContext,i)

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ExpressionContext,i)

        def EQUAL_SYMBOL(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.EQUAL_SYMBOL)
            else:
                return self.getToken(MySqlParser.EQUAL_SYMBOL, i)
        def VAR_ASSIGN(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.VAR_ASSIGN)
            else:
                return self.getToken(MySqlParser.VAR_ASSIGN, i)
        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSetNewValueInsideTrigger" ):
                listener.enterSetNewValueInsideTrigger(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSetNewValueInsideTrigger" ):
                listener.exitSetNewValueInsideTrigger(self)


    class SetVariableContext(SetStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SetStatementContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def SET(self):
            return self.getToken(MySqlParser.SET, 0)
        def variableClause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.VariableClauseContext)
            else:
                return self.getTypedRuleContext(MySqlParser.VariableClauseContext,i)

        def EQUAL_SYMBOL(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.EQUAL_SYMBOL)
            else:
                return self.getToken(MySqlParser.EQUAL_SYMBOL, i)
        def VAR_ASSIGN(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.VAR_ASSIGN)
            else:
                return self.getToken(MySqlParser.VAR_ASSIGN, i)
        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ExpressionContext,i)

        def ON(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.ON)
            else:
                return self.getToken(MySqlParser.ON, i)
        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSetVariable" ):
                listener.enterSetVariable(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSetVariable" ):
                listener.exitSetVariable(self)



    def setStatement(self):

        localctx = MySqlParser.SetStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 488, self.RULE_setStatement)
        self._la = 0 # Token type
        try:
            self.state = 5754
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,835,self._ctx)
            if la_ == 1:
                localctx = MySqlParser.SetVariableContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 5702
                self.match(MySqlParser.SET)
                self.state = 5703
                self.variableClause()
                self.state = 5704
                _la = self._input.LA(1)
                if not(_la==1108 or _la==1124):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 5707
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,828,self._ctx)
                if la_ == 1:
                    self.state = 5705
                    self.expression(0)
                    pass

                elif la_ == 2:
                    self.state = 5706
                    self.match(MySqlParser.ON)
                    pass


                self.state = 5718
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 5709
                    self.match(MySqlParser.COMMA)
                    self.state = 5710
                    self.variableClause()
                    self.state = 5711
                    _la = self._input.LA(1)
                    if not(_la==1108 or _la==1124):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 5714
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,829,self._ctx)
                    if la_ == 1:
                        self.state = 5712
                        self.expression(0)
                        pass

                    elif la_ == 2:
                        self.state = 5713
                        self.match(MySqlParser.ON)
                        pass


                    self.state = 5720
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass

            elif la_ == 2:
                localctx = MySqlParser.SetCharsetContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 5721
                self.match(MySqlParser.SET)
                self.state = 5722
                self.charSet()
                self.state = 5725
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [226, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 1145, 1148]:
                    self.state = 5723
                    self.charsetName()
                    pass
                elif token in [42]:
                    self.state = 5724
                    self.match(MySqlParser.DEFAULT)
                    pass
                else:
                    raise NoViableAltException(self)

                pass

            elif la_ == 3:
                localctx = MySqlParser.SetNamesContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 5727
                self.match(MySqlParser.SET)
                self.state = 5728
                self.match(MySqlParser.NAMES)
                self.state = 5735
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [226, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 1145, 1148]:
                    self.state = 5729
                    self.charsetName()
                    self.state = 5732
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==27:
                        self.state = 5730
                        self.match(MySqlParser.COLLATE)
                        self.state = 5731
                        self.collationName()


                    pass
                elif token in [42]:
                    self.state = 5734
                    self.match(MySqlParser.DEFAULT)
                    pass
                else:
                    raise NoViableAltException(self)

                pass

            elif la_ == 4:
                localctx = MySqlParser.SetPasswordContext(self, localctx)
                self.enterOuterAlt(localctx, 4)
                self.state = 5737
                self.setPasswordStatement()
                pass

            elif la_ == 5:
                localctx = MySqlParser.SetTransactionContext(self, localctx)
                self.enterOuterAlt(localctx, 5)
                self.state = 5738
                self.setTransactionStatement()
                pass

            elif la_ == 6:
                localctx = MySqlParser.SetAutocommitContext(self, localctx)
                self.enterOuterAlt(localctx, 6)
                self.state = 5739
                self.setAutocommitStatement()
                pass

            elif la_ == 7:
                localctx = MySqlParser.SetNewValueInsideTriggerContext(self, localctx)
                self.enterOuterAlt(localctx, 7)
                self.state = 5740
                self.match(MySqlParser.SET)
                self.state = 5741
                self.fullId()
                self.state = 5742
                _la = self._input.LA(1)
                if not(_la==1108 or _la==1124):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 5743
                self.expression(0)
                self.state = 5751
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 5744
                    self.match(MySqlParser.COMMA)
                    self.state = 5745
                    self.fullId()
                    self.state = 5746
                    _la = self._input.LA(1)
                    if not(_la==1108 or _la==1124):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 5747
                    self.expression(0)
                    self.state = 5753
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ShowStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_showStatement

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class ShowOpenTablesContext(ShowStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ShowStatementContext
            super().__init__(parser)
            self.schemaFormat = None # Token
            self.copyFrom(ctx)

        def SHOW(self):
            return self.getToken(MySqlParser.SHOW, 0)
        def OPEN(self):
            return self.getToken(MySqlParser.OPEN, 0)
        def TABLES(self):
            return self.getToken(MySqlParser.TABLES, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def showFilter(self):
            return self.getTypedRuleContext(MySqlParser.ShowFilterContext,0)

        def FROM(self):
            return self.getToken(MySqlParser.FROM, 0)
        def IN(self):
            return self.getToken(MySqlParser.IN, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterShowOpenTables" ):
                listener.enterShowOpenTables(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitShowOpenTables" ):
                listener.exitShowOpenTables(self)


    class ShowGlobalInfoContext(ShowStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ShowStatementContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def SHOW(self):
            return self.getToken(MySqlParser.SHOW, 0)
        def showGlobalInfoClause(self):
            return self.getTypedRuleContext(MySqlParser.ShowGlobalInfoClauseContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterShowGlobalInfo" ):
                listener.enterShowGlobalInfo(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitShowGlobalInfo" ):
                listener.exitShowGlobalInfo(self)


    class ShowCreateFullIdObjectContext(ShowStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ShowStatementContext
            super().__init__(parser)
            self.namedEntity = None # Token
            self.copyFrom(ctx)

        def SHOW(self):
            return self.getToken(MySqlParser.SHOW, 0)
        def CREATE(self):
            return self.getToken(MySqlParser.CREATE, 0)
        def fullId(self):
            return self.getTypedRuleContext(MySqlParser.FullIdContext,0)

        def EVENT(self):
            return self.getToken(MySqlParser.EVENT, 0)
        def FUNCTION(self):
            return self.getToken(MySqlParser.FUNCTION, 0)
        def PROCEDURE(self):
            return self.getToken(MySqlParser.PROCEDURE, 0)
        def TABLE(self):
            return self.getToken(MySqlParser.TABLE, 0)
        def TRIGGER(self):
            return self.getToken(MySqlParser.TRIGGER, 0)
        def VIEW(self):
            return self.getToken(MySqlParser.VIEW, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterShowCreateFullIdObject" ):
                listener.enterShowCreateFullIdObject(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitShowCreateFullIdObject" ):
                listener.exitShowCreateFullIdObject(self)


    class ShowCreateUserContext(ShowStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ShowStatementContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def SHOW(self):
            return self.getToken(MySqlParser.SHOW, 0)
        def CREATE(self):
            return self.getToken(MySqlParser.CREATE, 0)
        def USER(self):
            return self.getToken(MySqlParser.USER, 0)
        def userName(self):
            return self.getTypedRuleContext(MySqlParser.UserNameContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterShowCreateUser" ):
                listener.enterShowCreateUser(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitShowCreateUser" ):
                listener.exitShowCreateUser(self)


    class ShowErrorsContext(ShowStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ShowStatementContext
            super().__init__(parser)
            self.errorFormat = None # Token
            self.offset = None # DecimalLiteralContext
            self.rowCount = None # DecimalLiteralContext
            self.copyFrom(ctx)

        def SHOW(self):
            return self.getToken(MySqlParser.SHOW, 0)
        def ERRORS(self):
            return self.getToken(MySqlParser.ERRORS, 0)
        def WARNINGS(self):
            return self.getToken(MySqlParser.WARNINGS, 0)
        def LIMIT(self):
            return self.getToken(MySqlParser.LIMIT, 0)
        def decimalLiteral(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.DecimalLiteralContext)
            else:
                return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,i)

        def COMMA(self):
            return self.getToken(MySqlParser.COMMA, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterShowErrors" ):
                listener.enterShowErrors(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitShowErrors" ):
                listener.exitShowErrors(self)


    class ShowCountErrorsContext(ShowStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ShowStatementContext
            super().__init__(parser)
            self.errorFormat = None # Token
            self.copyFrom(ctx)

        def SHOW(self):
            return self.getToken(MySqlParser.SHOW, 0)
        def COUNT(self):
            return self.getToken(MySqlParser.COUNT, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def STAR(self):
            return self.getToken(MySqlParser.STAR, 0)
        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def ERRORS(self):
            return self.getToken(MySqlParser.ERRORS, 0)
        def WARNINGS(self):
            return self.getToken(MySqlParser.WARNINGS, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterShowCountErrors" ):
                listener.enterShowCountErrors(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitShowCountErrors" ):
                listener.exitShowCountErrors(self)


    class ShowObjectFilterContext(ShowStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ShowStatementContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def SHOW(self):
            return self.getToken(MySqlParser.SHOW, 0)
        def showCommonEntity(self):
            return self.getTypedRuleContext(MySqlParser.ShowCommonEntityContext,0)

        def showFilter(self):
            return self.getTypedRuleContext(MySqlParser.ShowFilterContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterShowObjectFilter" ):
                listener.enterShowObjectFilter(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitShowObjectFilter" ):
                listener.exitShowObjectFilter(self)


    class ShowCreateDbContext(ShowStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ShowStatementContext
            super().__init__(parser)
            self.schemaFormat = None # Token
            self.copyFrom(ctx)

        def SHOW(self):
            return self.getToken(MySqlParser.SHOW, 0)
        def CREATE(self):
            return self.getToken(MySqlParser.CREATE, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def DATABASE(self):
            return self.getToken(MySqlParser.DATABASE, 0)
        def SCHEMA(self):
            return self.getToken(MySqlParser.SCHEMA, 0)
        def ifNotExists(self):
            return self.getTypedRuleContext(MySqlParser.IfNotExistsContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterShowCreateDb" ):
                listener.enterShowCreateDb(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitShowCreateDb" ):
                listener.exitShowCreateDb(self)


    class ShowEngineContext(ShowStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ShowStatementContext
            super().__init__(parser)
            self.engineOption = None # Token
            self.copyFrom(ctx)

        def SHOW(self):
            return self.getToken(MySqlParser.SHOW, 0)
        def ENGINE(self):
            return self.getToken(MySqlParser.ENGINE, 0)
        def engineName(self):
            return self.getTypedRuleContext(MySqlParser.EngineNameContext,0)

        def STATUS(self):
            return self.getToken(MySqlParser.STATUS, 0)
        def MUTEX(self):
            return self.getToken(MySqlParser.MUTEX, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterShowEngine" ):
                listener.enterShowEngine(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitShowEngine" ):
                listener.exitShowEngine(self)


    class ShowSchemaFilterContext(ShowStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ShowStatementContext
            super().__init__(parser)
            self.schemaFormat = None # Token
            self.copyFrom(ctx)

        def SHOW(self):
            return self.getToken(MySqlParser.SHOW, 0)
        def showSchemaEntity(self):
            return self.getTypedRuleContext(MySqlParser.ShowSchemaEntityContext,0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def showFilter(self):
            return self.getTypedRuleContext(MySqlParser.ShowFilterContext,0)

        def FROM(self):
            return self.getToken(MySqlParser.FROM, 0)
        def IN(self):
            return self.getToken(MySqlParser.IN, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterShowSchemaFilter" ):
                listener.enterShowSchemaFilter(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitShowSchemaFilter" ):
                listener.exitShowSchemaFilter(self)


    class ShowIndexesContext(ShowStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ShowStatementContext
            super().__init__(parser)
            self.indexFormat = None # Token
            self.tableFormat = None # Token
            self.schemaFormat = None # Token
            self.copyFrom(ctx)

        def SHOW(self):
            return self.getToken(MySqlParser.SHOW, 0)
        def tableName(self):
            return self.getTypedRuleContext(MySqlParser.TableNameContext,0)

        def INDEX(self):
            return self.getToken(MySqlParser.INDEX, 0)
        def INDEXES(self):
            return self.getToken(MySqlParser.INDEXES, 0)
        def KEYS(self):
            return self.getToken(MySqlParser.KEYS, 0)
        def FROM(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.FROM)
            else:
                return self.getToken(MySqlParser.FROM, i)
        def IN(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.IN)
            else:
                return self.getToken(MySqlParser.IN, i)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def WHERE(self):
            return self.getToken(MySqlParser.WHERE, 0)
        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterShowIndexes" ):
                listener.enterShowIndexes(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitShowIndexes" ):
                listener.exitShowIndexes(self)


    class ShowLogEventsContext(ShowStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ShowStatementContext
            super().__init__(parser)
            self.logFormat = None # Token
            self.filename = None # Token
            self.fromPosition = None # DecimalLiteralContext
            self.offset = None # DecimalLiteralContext
            self.rowCount = None # DecimalLiteralContext
            self.copyFrom(ctx)

        def SHOW(self):
            return self.getToken(MySqlParser.SHOW, 0)
        def EVENTS(self):
            return self.getToken(MySqlParser.EVENTS, 0)
        def BINLOG(self):
            return self.getToken(MySqlParser.BINLOG, 0)
        def RELAYLOG(self):
            return self.getToken(MySqlParser.RELAYLOG, 0)
        def IN(self):
            return self.getToken(MySqlParser.IN, 0)
        def FROM(self):
            return self.getToken(MySqlParser.FROM, 0)
        def LIMIT(self):
            return self.getToken(MySqlParser.LIMIT, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)
        def decimalLiteral(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.DecimalLiteralContext)
            else:
                return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,i)

        def COMMA(self):
            return self.getToken(MySqlParser.COMMA, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterShowLogEvents" ):
                listener.enterShowLogEvents(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitShowLogEvents" ):
                listener.exitShowLogEvents(self)


    class ShowMasterLogsContext(ShowStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ShowStatementContext
            super().__init__(parser)
            self.logFormat = None # Token
            self.copyFrom(ctx)

        def SHOW(self):
            return self.getToken(MySqlParser.SHOW, 0)
        def LOGS(self):
            return self.getToken(MySqlParser.LOGS, 0)
        def BINARY(self):
            return self.getToken(MySqlParser.BINARY, 0)
        def MASTER(self):
            return self.getToken(MySqlParser.MASTER, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterShowMasterLogs" ):
                listener.enterShowMasterLogs(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitShowMasterLogs" ):
                listener.exitShowMasterLogs(self)


    class ShowGrantsContext(ShowStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ShowStatementContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def SHOW(self):
            return self.getToken(MySqlParser.SHOW, 0)
        def GRANTS(self):
            return self.getToken(MySqlParser.GRANTS, 0)
        def FOR(self):
            return self.getToken(MySqlParser.FOR, 0)
        def userName(self):
            return self.getTypedRuleContext(MySqlParser.UserNameContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterShowGrants" ):
                listener.enterShowGrants(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitShowGrants" ):
                listener.exitShowGrants(self)


    class ShowSlaveStatusContext(ShowStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ShowStatementContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def SHOW(self):
            return self.getToken(MySqlParser.SHOW, 0)
        def SLAVE(self):
            return self.getToken(MySqlParser.SLAVE, 0)
        def STATUS(self):
            return self.getToken(MySqlParser.STATUS, 0)
        def FOR(self):
            return self.getToken(MySqlParser.FOR, 0)
        def CHANNEL(self):
            return self.getToken(MySqlParser.CHANNEL, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterShowSlaveStatus" ):
                listener.enterShowSlaveStatus(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitShowSlaveStatus" ):
                listener.exitShowSlaveStatus(self)


    class ShowRoutineContext(ShowStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ShowStatementContext
            super().__init__(parser)
            self.routine = None # Token
            self.copyFrom(ctx)

        def SHOW(self):
            return self.getToken(MySqlParser.SHOW, 0)
        def CODE(self):
            return self.getToken(MySqlParser.CODE, 0)
        def fullId(self):
            return self.getTypedRuleContext(MySqlParser.FullIdContext,0)

        def FUNCTION(self):
            return self.getToken(MySqlParser.FUNCTION, 0)
        def PROCEDURE(self):
            return self.getToken(MySqlParser.PROCEDURE, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterShowRoutine" ):
                listener.enterShowRoutine(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitShowRoutine" ):
                listener.exitShowRoutine(self)


    class ShowProfileContext(ShowStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ShowStatementContext
            super().__init__(parser)
            self.queryCount = None # DecimalLiteralContext
            self.offset = None # DecimalLiteralContext
            self.rowCount = None # DecimalLiteralContext
            self.copyFrom(ctx)

        def SHOW(self):
            return self.getToken(MySqlParser.SHOW, 0)
        def PROFILE(self):
            return self.getToken(MySqlParser.PROFILE, 0)
        def showProfileType(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ShowProfileTypeContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ShowProfileTypeContext,i)

        def LIMIT(self):
            return self.getToken(MySqlParser.LIMIT, 0)
        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)
        def FOR(self):
            return self.getToken(MySqlParser.FOR, 0)
        def QUERY(self):
            return self.getToken(MySqlParser.QUERY, 0)
        def decimalLiteral(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.DecimalLiteralContext)
            else:
                return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,i)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterShowProfile" ):
                listener.enterShowProfile(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitShowProfile" ):
                listener.exitShowProfile(self)


    class ShowColumnsContext(ShowStatementContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ShowStatementContext
            super().__init__(parser)
            self.columnsFormat = None # Token
            self.tableFormat = None # Token
            self.schemaFormat = None # Token
            self.copyFrom(ctx)

        def SHOW(self):
            return self.getToken(MySqlParser.SHOW, 0)
        def tableName(self):
            return self.getTypedRuleContext(MySqlParser.TableNameContext,0)

        def COLUMNS(self):
            return self.getToken(MySqlParser.COLUMNS, 0)
        def FIELDS(self):
            return self.getToken(MySqlParser.FIELDS, 0)
        def FROM(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.FROM)
            else:
                return self.getToken(MySqlParser.FROM, i)
        def IN(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.IN)
            else:
                return self.getToken(MySqlParser.IN, i)
        def FULL(self):
            return self.getToken(MySqlParser.FULL, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)

        def showFilter(self):
            return self.getTypedRuleContext(MySqlParser.ShowFilterContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterShowColumns" ):
                listener.enterShowColumns(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitShowColumns" ):
                listener.exitShowColumns(self)



    def showStatement(self):

        localctx = MySqlParser.ShowStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 490, self.RULE_showStatement)
        self._la = 0 # Token type
        try:
            self.state = 5909
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,858,self._ctx)
            if la_ == 1:
                localctx = MySqlParser.ShowMasterLogsContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 5756
                self.match(MySqlParser.SHOW)
                self.state = 5757
                localctx.logFormat = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==226 or _la==477):
                    localctx.logFormat = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 5758
                self.match(MySqlParser.LOGS)
                pass

            elif la_ == 2:
                localctx = MySqlParser.ShowLogEventsContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 5759
                self.match(MySqlParser.SHOW)
                self.state = 5760
                localctx.logFormat = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==345 or _la==577):
                    localctx.logFormat = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 5761
                self.match(MySqlParser.EVENTS)
                self.state = 5764
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==80:
                    self.state = 5762
                    self.match(MySqlParser.IN)
                    self.state = 5763
                    localctx.filename = self.match(MySqlParser.STRING_LITERAL)


                self.state = 5768
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==68:
                    self.state = 5766
                    self.match(MySqlParser.FROM)
                    self.state = 5767
                    localctx.fromPosition = self.decimalLiteral()


                self.state = 5777
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==99:
                    self.state = 5770
                    self.match(MySqlParser.LIMIT)
                    self.state = 5774
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,838,self._ctx)
                    if la_ == 1:
                        self.state = 5771
                        localctx.offset = self.decimalLiteral()
                        self.state = 5772
                        self.match(MySqlParser.COMMA)


                    self.state = 5776
                    localctx.rowCount = self.decimalLiteral()


                pass

            elif la_ == 3:
                localctx = MySqlParser.ShowObjectFilterContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 5779
                self.match(MySqlParser.SHOW)
                self.state = 5780
                self.showCommonEntity()
                self.state = 5782
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==98 or _la==190:
                    self.state = 5781
                    self.showFilter()


                pass

            elif la_ == 4:
                localctx = MySqlParser.ShowColumnsContext(self, localctx)
                self.enterOuterAlt(localctx, 4)
                self.state = 5784
                self.match(MySqlParser.SHOW)
                self.state = 5786
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==436:
                    self.state = 5785
                    self.match(MySqlParser.FULL)


                self.state = 5788
                localctx.columnsFormat = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==365 or _la==427):
                    localctx.columnsFormat = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 5789
                localctx.tableFormat = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==68 or _la==80):
                    localctx.tableFormat = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 5790
                self.tableName()
                self.state = 5793
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==68 or _la==80:
                    self.state = 5791
                    localctx.schemaFormat = self._input.LT(1)
                    _la = self._input.LA(1)
                    if not(_la==68 or _la==80):
                        localctx.schemaFormat = self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 5792
                    self.uid()


                self.state = 5796
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==98 or _la==190:
                    self.state = 5795
                    self.showFilter()


                pass

            elif la_ == 5:
                localctx = MySqlParser.ShowCreateDbContext(self, localctx)
                self.enterOuterAlt(localctx, 5)
                self.state = 5798
                self.match(MySqlParser.SHOW)
                self.state = 5799
                self.match(MySqlParser.CREATE)
                self.state = 5800
                localctx.schemaFormat = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==39 or _la==150):
                    localctx.schemaFormat = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 5802
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,844,self._ctx)
                if la_ == 1:
                    self.state = 5801
                    self.ifNotExists()


                self.state = 5804
                self.uid()
                pass

            elif la_ == 6:
                localctx = MySqlParser.ShowCreateFullIdObjectContext(self, localctx)
                self.enterOuterAlt(localctx, 6)
                self.state = 5805
                self.match(MySqlParser.SHOW)
                self.state = 5806
                self.match(MySqlParser.CREATE)
                self.state = 5807
                localctx.namedEntity = self._input.LT(1)
                _la = self._input.LA(1)
                if not(((((_la - 131)) & ~0x3f) == 0 and ((1 << (_la - 131)) & 72567767433217) != 0) or _la==415 or _la==437 or _la==671):
                    localctx.namedEntity = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 5808
                self.fullId()
                pass

            elif la_ == 7:
                localctx = MySqlParser.ShowCreateUserContext(self, localctx)
                self.enterOuterAlt(localctx, 7)
                self.state = 5809
                self.match(MySqlParser.SHOW)
                self.state = 5810
                self.match(MySqlParser.CREATE)
                self.state = 5811
                self.match(MySqlParser.USER)
                self.state = 5812
                self.userName()
                pass

            elif la_ == 8:
                localctx = MySqlParser.ShowEngineContext(self, localctx)
                self.enterOuterAlt(localctx, 8)
                self.state = 5813
                self.match(MySqlParser.SHOW)
                self.state = 5814
                self.match(MySqlParser.ENGINE)
                self.state = 5815
                self.engineName()
                self.state = 5816
                localctx.engineOption = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==513 or _la==634):
                    localctx.engineOption = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass

            elif la_ == 9:
                localctx = MySqlParser.ShowGlobalInfoContext(self, localctx)
                self.enterOuterAlt(localctx, 9)
                self.state = 5818
                self.match(MySqlParser.SHOW)
                self.state = 5819
                self.showGlobalInfoClause()
                pass

            elif la_ == 10:
                localctx = MySqlParser.ShowErrorsContext(self, localctx)
                self.enterOuterAlt(localctx, 10)
                self.state = 5820
                self.match(MySqlParser.SHOW)
                self.state = 5821
                localctx.errorFormat = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==412 or _la==675):
                    localctx.errorFormat = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 5829
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==99:
                    self.state = 5822
                    self.match(MySqlParser.LIMIT)
                    self.state = 5826
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,845,self._ctx)
                    if la_ == 1:
                        self.state = 5823
                        localctx.offset = self.decimalLiteral()
                        self.state = 5824
                        self.match(MySqlParser.COMMA)


                    self.state = 5828
                    localctx.rowCount = self.decimalLiteral()


                pass

            elif la_ == 11:
                localctx = MySqlParser.ShowCountErrorsContext(self, localctx)
                self.enterOuterAlt(localctx, 11)
                self.state = 5831
                self.match(MySqlParser.SHOW)
                self.state = 5832
                self.match(MySqlParser.COUNT)
                self.state = 5833
                self.match(MySqlParser.LR_BRACKET)
                self.state = 5834
                self.match(MySqlParser.STAR)
                self.state = 5835
                self.match(MySqlParser.RR_BRACKET)
                self.state = 5836
                localctx.errorFormat = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==412 or _la==675):
                    localctx.errorFormat = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass

            elif la_ == 12:
                localctx = MySqlParser.ShowSchemaFilterContext(self, localctx)
                self.enterOuterAlt(localctx, 12)
                self.state = 5837
                self.match(MySqlParser.SHOW)
                self.state = 5838
                self.showSchemaEntity()
                self.state = 5841
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==68 or _la==80:
                    self.state = 5839
                    localctx.schemaFormat = self._input.LT(1)
                    _la = self._input.LA(1)
                    if not(_la==68 or _la==80):
                        localctx.schemaFormat = self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 5840
                    self.uid()


                self.state = 5844
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==98 or _la==190:
                    self.state = 5843
                    self.showFilter()


                pass

            elif la_ == 13:
                localctx = MySqlParser.ShowRoutineContext(self, localctx)
                self.enterOuterAlt(localctx, 13)
                self.state = 5846
                self.match(MySqlParser.SHOW)
                self.state = 5847
                localctx.routine = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==131 or _la==437):
                    localctx.routine = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 5848
                self.match(MySqlParser.CODE)
                self.state = 5849
                self.fullId()
                pass

            elif la_ == 14:
                localctx = MySqlParser.ShowGrantsContext(self, localctx)
                self.enterOuterAlt(localctx, 14)
                self.state = 5850
                self.match(MySqlParser.SHOW)
                self.state = 5851
                self.match(MySqlParser.GRANTS)
                self.state = 5854
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==65:
                    self.state = 5852
                    self.match(MySqlParser.FOR)
                    self.state = 5853
                    self.userName()


                pass

            elif la_ == 15:
                localctx = MySqlParser.ShowIndexesContext(self, localctx)
                self.enterOuterAlt(localctx, 15)
                self.state = 5856
                self.match(MySqlParser.SHOW)
                self.state = 5857
                localctx.indexFormat = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==81 or _la==92 or _la==452):
                    localctx.indexFormat = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 5858
                localctx.tableFormat = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==68 or _la==80):
                    localctx.tableFormat = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 5859
                self.tableName()
                self.state = 5862
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==68 or _la==80:
                    self.state = 5860
                    localctx.schemaFormat = self._input.LT(1)
                    _la = self._input.LA(1)
                    if not(_la==68 or _la==80):
                        localctx.schemaFormat = self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 5861
                    self.uid()


                self.state = 5866
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==190:
                    self.state = 5864
                    self.match(MySqlParser.WHERE)
                    self.state = 5865
                    self.expression(0)


                pass

            elif la_ == 16:
                localctx = MySqlParser.ShowOpenTablesContext(self, localctx)
                self.enterOuterAlt(localctx, 16)
                self.state = 5868
                self.match(MySqlParser.SHOW)
                self.state = 5869
                self.match(MySqlParser.OPEN)
                self.state = 5870
                self.match(MySqlParser.TABLES)
                self.state = 5873
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==68 or _la==80:
                    self.state = 5871
                    localctx.schemaFormat = self._input.LT(1)
                    _la = self._input.LA(1)
                    if not(_la==68 or _la==80):
                        localctx.schemaFormat = self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 5872
                    self.uid()


                self.state = 5876
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==98 or _la==190:
                    self.state = 5875
                    self.showFilter()


                pass

            elif la_ == 17:
                localctx = MySqlParser.ShowProfileContext(self, localctx)
                self.enterOuterAlt(localctx, 17)
                self.state = 5878
                self.match(MySqlParser.SHOW)
                self.state = 5879
                self.match(MySqlParser.PROFILE)
                self.state = 5880
                self.showProfileType()
                self.state = 5885
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 5881
                    self.match(MySqlParser.COMMA)
                    self.state = 5882
                    self.showProfileType()
                    self.state = 5887
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 5891
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==65:
                    self.state = 5888
                    self.match(MySqlParser.FOR)
                    self.state = 5889
                    self.match(MySqlParser.QUERY)
                    self.state = 5890
                    localctx.queryCount = self.decimalLiteral()


                self.state = 5893
                self.match(MySqlParser.LIMIT)
                self.state = 5897
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,856,self._ctx)
                if la_ == 1:
                    self.state = 5894
                    localctx.offset = self.decimalLiteral()
                    self.state = 5895
                    self.match(MySqlParser.COMMA)


                self.state = 5899
                localctx.rowCount = self.decimalLiteral()
                pass

            elif la_ == 18:
                localctx = MySqlParser.ShowSlaveStatusContext(self, localctx)
                self.enterOuterAlt(localctx, 18)
                self.state = 5901
                self.match(MySqlParser.SHOW)
                self.state = 5902
                self.match(MySqlParser.SLAVE)
                self.state = 5903
                self.match(MySqlParser.STATUS)
                self.state = 5907
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==65:
                    self.state = 5904
                    self.match(MySqlParser.FOR)
                    self.state = 5905
                    self.match(MySqlParser.CHANNEL)
                    self.state = 5906
                    self.match(MySqlParser.STRING_LITERAL)


                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class VariableClauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LOCAL_ID(self):
            return self.getToken(MySqlParser.LOCAL_ID, 0)

        def GLOBAL_ID(self):
            return self.getToken(MySqlParser.GLOBAL_ID, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def GLOBAL(self):
            return self.getToken(MySqlParser.GLOBAL, 0)

        def SESSION(self):
            return self.getToken(MySqlParser.SESSION, 0)

        def LOCAL(self):
            return self.getToken(MySqlParser.LOCAL, 0)

        def AT_SIGN(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.AT_SIGN)
            else:
                return self.getToken(MySqlParser.AT_SIGN, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_variableClause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterVariableClause" ):
                listener.enterVariableClause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitVariableClause" ):
                listener.exitVariableClause(self)




    def variableClause(self):

        localctx = MySqlParser.VariableClauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 492, self.RULE_variableClause)
        self._la = 0 # Token type
        try:
            self.state = 5921
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1159]:
                self.enterOuterAlt(localctx, 1)
                self.state = 5911
                self.match(MySqlParser.LOCAL_ID)
                pass
            elif token in [1160]:
                self.enterOuterAlt(localctx, 2)
                self.state = 5912
                self.match(MySqlParser.GLOBAL_ID)
                pass
            elif token in [11, 14, 18, 29, 35, 37, 39, 42, 48, 55, 57, 59, 73, 77, 79, 85, 94, 97, 117, 121, 124, 130, 140, 141, 148, 150, 158, 168, 217, 218, 219, 220, 221, 226, 234, 237, 239, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 405, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 523, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 677, 678, 679, 680, 681, 682, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 717, 718, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1123, 1137, 1145, 1148, 1156]:
                self.enterOuterAlt(localctx, 3)
                self.state = 5918
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,860,self._ctx)
                if la_ == 1:
                    self.state = 5915
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==1137:
                        self.state = 5913
                        self.match(MySqlParser.AT_SIGN)
                        self.state = 5914
                        self.match(MySqlParser.AT_SIGN)


                    self.state = 5917
                    _la = self._input.LA(1)
                    if not(_la==439 or _la==474 or _la==609):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 5920
                self.uid()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ShowCommonEntityContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CHARACTER(self):
            return self.getToken(MySqlParser.CHARACTER, 0)

        def SET(self):
            return self.getToken(MySqlParser.SET, 0)

        def COLLATION(self):
            return self.getToken(MySqlParser.COLLATION, 0)

        def DATABASES(self):
            return self.getToken(MySqlParser.DATABASES, 0)

        def SCHEMAS(self):
            return self.getToken(MySqlParser.SCHEMAS, 0)

        def FUNCTION(self):
            return self.getToken(MySqlParser.FUNCTION, 0)

        def STATUS(self):
            return self.getToken(MySqlParser.STATUS, 0)

        def PROCEDURE(self):
            return self.getToken(MySqlParser.PROCEDURE, 0)

        def VARIABLES(self):
            return self.getToken(MySqlParser.VARIABLES, 0)

        def GLOBAL(self):
            return self.getToken(MySqlParser.GLOBAL, 0)

        def SESSION(self):
            return self.getToken(MySqlParser.SESSION, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_showCommonEntity

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterShowCommonEntity" ):
                listener.enterShowCommonEntity(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitShowCommonEntity" ):
                listener.exitShowCommonEntity(self)




    def showCommonEntity(self):

        localctx = MySqlParser.ShowCommonEntityContext(self, self._ctx, self.state)
        self.enterRule(localctx, 494, self.RULE_showCommonEntity)
        self._la = 0 # Token type
        try:
            self.state = 5936
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [25]:
                self.enterOuterAlt(localctx, 1)
                self.state = 5923
                self.match(MySqlParser.CHARACTER)
                self.state = 5924
                self.match(MySqlParser.SET)
                pass
            elif token in [844]:
                self.enterOuterAlt(localctx, 2)
                self.state = 5925
                self.match(MySqlParser.COLLATION)
                pass
            elif token in [40]:
                self.enterOuterAlt(localctx, 3)
                self.state = 5926
                self.match(MySqlParser.DATABASES)
                pass
            elif token in [151]:
                self.enterOuterAlt(localctx, 4)
                self.state = 5927
                self.match(MySqlParser.SCHEMAS)
                pass
            elif token in [437]:
                self.enterOuterAlt(localctx, 5)
                self.state = 5928
                self.match(MySqlParser.FUNCTION)
                self.state = 5929
                self.match(MySqlParser.STATUS)
                pass
            elif token in [131]:
                self.enterOuterAlt(localctx, 6)
                self.state = 5930
                self.match(MySqlParser.PROCEDURE)
                self.state = 5931
                self.match(MySqlParser.STATUS)
                pass
            elif token in [439, 609, 634, 670]:
                self.enterOuterAlt(localctx, 7)
                self.state = 5933
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==439 or _la==609:
                    self.state = 5932
                    _la = self._input.LA(1)
                    if not(_la==439 or _la==609):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 5935
                _la = self._input.LA(1)
                if not(_la==634 or _la==670):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ShowFilterContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LIKE(self):
            return self.getToken(MySqlParser.LIKE, 0)

        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def WHERE(self):
            return self.getToken(MySqlParser.WHERE, 0)

        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_showFilter

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterShowFilter" ):
                listener.enterShowFilter(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitShowFilter" ):
                listener.exitShowFilter(self)




    def showFilter(self):

        localctx = MySqlParser.ShowFilterContext(self, self._ctx, self.state)
        self.enterRule(localctx, 496, self.RULE_showFilter)
        try:
            self.state = 5942
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [98]:
                self.enterOuterAlt(localctx, 1)
                self.state = 5938
                self.match(MySqlParser.LIKE)
                self.state = 5939
                self.match(MySqlParser.STRING_LITERAL)
                pass
            elif token in [190]:
                self.enterOuterAlt(localctx, 2)
                self.state = 5940
                self.match(MySqlParser.WHERE)
                self.state = 5941
                self.expression(0)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ShowGlobalInfoClauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ENGINES(self):
            return self.getToken(MySqlParser.ENGINES, 0)

        def STORAGE(self):
            return self.getToken(MySqlParser.STORAGE, 0)

        def MASTER(self):
            return self.getToken(MySqlParser.MASTER, 0)

        def STATUS(self):
            return self.getToken(MySqlParser.STATUS, 0)

        def PLUGINS(self):
            return self.getToken(MySqlParser.PLUGINS, 0)

        def PRIVILEGES(self):
            return self.getToken(MySqlParser.PRIVILEGES, 0)

        def PROCESSLIST(self):
            return self.getToken(MySqlParser.PROCESSLIST, 0)

        def FULL(self):
            return self.getToken(MySqlParser.FULL, 0)

        def PROFILES(self):
            return self.getToken(MySqlParser.PROFILES, 0)

        def SLAVE(self):
            return self.getToken(MySqlParser.SLAVE, 0)

        def HOSTS(self):
            return self.getToken(MySqlParser.HOSTS, 0)

        def AUTHORS(self):
            return self.getToken(MySqlParser.AUTHORS, 0)

        def CONTRIBUTORS(self):
            return self.getToken(MySqlParser.CONTRIBUTORS, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_showGlobalInfoClause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterShowGlobalInfoClause" ):
                listener.enterShowGlobalInfoClause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitShowGlobalInfoClause" ):
                listener.exitShowGlobalInfoClause(self)




    def showGlobalInfoClause(self):

        localctx = MySqlParser.ShowGlobalInfoClauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 498, self.RULE_showGlobalInfoClause)
        self._la = 0 # Token type
        try:
            self.state = 5961
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [410, 636]:
                self.enterOuterAlt(localctx, 1)
                self.state = 5945
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==636:
                    self.state = 5944
                    self.match(MySqlParser.STORAGE)


                self.state = 5947
                self.match(MySqlParser.ENGINES)
                pass
            elif token in [477]:
                self.enterOuterAlt(localctx, 2)
                self.state = 5948
                self.match(MySqlParser.MASTER)
                self.state = 5949
                self.match(MySqlParser.STATUS)
                pass
            elif token in [556]:
                self.enterOuterAlt(localctx, 3)
                self.state = 5950
                self.match(MySqlParser.PLUGINS)
                pass
            elif token in [725]:
                self.enterOuterAlt(localctx, 4)
                self.state = 5951
                self.match(MySqlParser.PRIVILEGES)
                pass
            elif token in [436, 563]:
                self.enterOuterAlt(localctx, 5)
                self.state = 5953
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==436:
                    self.state = 5952
                    self.match(MySqlParser.FULL)


                self.state = 5955
                self.match(MySqlParser.PROCESSLIST)
                pass
            elif token in [565]:
                self.enterOuterAlt(localctx, 6)
                self.state = 5956
                self.match(MySqlParser.PROFILES)
                pass
            elif token in [614]:
                self.enterOuterAlt(localctx, 7)
                self.state = 5957
                self.match(MySqlParser.SLAVE)
                self.state = 5958
                self.match(MySqlParser.HOSTS)
                pass
            elif token in [339]:
                self.enterOuterAlt(localctx, 8)
                self.state = 5959
                self.match(MySqlParser.AUTHORS)
                pass
            elif token in [383]:
                self.enterOuterAlt(localctx, 9)
                self.state = 5960
                self.match(MySqlParser.CONTRIBUTORS)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ShowSchemaEntityContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def EVENTS(self):
            return self.getToken(MySqlParser.EVENTS, 0)

        def TABLE(self):
            return self.getToken(MySqlParser.TABLE, 0)

        def STATUS(self):
            return self.getToken(MySqlParser.STATUS, 0)

        def TABLES(self):
            return self.getToken(MySqlParser.TABLES, 0)

        def FULL(self):
            return self.getToken(MySqlParser.FULL, 0)

        def TRIGGERS(self):
            return self.getToken(MySqlParser.TRIGGERS, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_showSchemaEntity

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterShowSchemaEntity" ):
                listener.enterShowSchemaEntity(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitShowSchemaEntity" ):
                listener.exitShowSchemaEntity(self)




    def showSchemaEntity(self):

        localctx = MySqlParser.ShowSchemaEntityContext(self, self._ctx, self.state)
        self.enterRule(localctx, 500, self.RULE_showSchemaEntity)
        self._la = 0 # Token type
        try:
            self.state = 5971
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [416]:
                self.enterOuterAlt(localctx, 1)
                self.state = 5963
                self.match(MySqlParser.EVENTS)
                pass
            elif token in [172]:
                self.enterOuterAlt(localctx, 2)
                self.state = 5964
                self.match(MySqlParser.TABLE)
                self.state = 5965
                self.match(MySqlParser.STATUS)
                pass
            elif token in [436, 742]:
                self.enterOuterAlt(localctx, 3)
                self.state = 5967
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==436:
                    self.state = 5966
                    self.match(MySqlParser.FULL)


                self.state = 5969
                self.match(MySqlParser.TABLES)
                pass
            elif token in [655]:
                self.enterOuterAlt(localctx, 4)
                self.state = 5970
                self.match(MySqlParser.TRIGGERS)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ShowProfileTypeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALL(self):
            return self.getToken(MySqlParser.ALL, 0)

        def BLOCK(self):
            return self.getToken(MySqlParser.BLOCK, 0)

        def IO(self):
            return self.getToken(MySqlParser.IO, 0)

        def CONTEXT(self):
            return self.getToken(MySqlParser.CONTEXT, 0)

        def SWITCHES(self):
            return self.getToken(MySqlParser.SWITCHES, 0)

        def CPU(self):
            return self.getToken(MySqlParser.CPU, 0)

        def IPC(self):
            return self.getToken(MySqlParser.IPC, 0)

        def MEMORY(self):
            return self.getToken(MySqlParser.MEMORY, 0)

        def PAGE(self):
            return self.getToken(MySqlParser.PAGE, 0)

        def FAULTS(self):
            return self.getToken(MySqlParser.FAULTS, 0)

        def SOURCE(self):
            return self.getToken(MySqlParser.SOURCE, 0)

        def SWAPS(self):
            return self.getToken(MySqlParser.SWAPS, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_showProfileType

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterShowProfileType" ):
                listener.enterShowProfileType(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitShowProfileType" ):
                listener.exitShowProfileType(self)




    def showProfileType(self):

        localctx = MySqlParser.ShowProfileTypeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 502, self.RULE_showProfileType)
        try:
            self.state = 5985
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [6]:
                self.enterOuterAlt(localctx, 1)
                self.state = 5973
                self.match(MySqlParser.ALL)
                pass
            elif token in [347]:
                self.enterOuterAlt(localctx, 2)
                self.state = 5974
                self.match(MySqlParser.BLOCK)
                self.state = 5975
                self.match(MySqlParser.IO)
                pass
            elif token in [382]:
                self.enterOuterAlt(localctx, 3)
                self.state = 5976
                self.match(MySqlParser.CONTEXT)
                self.state = 5977
                self.match(MySqlParser.SWITCHES)
                pass
            elif token in [385]:
                self.enterOuterAlt(localctx, 4)
                self.state = 5978
                self.match(MySqlParser.CPU)
                pass
            elif token in [463]:
                self.enterOuterAlt(localctx, 5)
                self.state = 5979
                self.match(MySqlParser.IPC)
                pass
            elif token in [792]:
                self.enterOuterAlt(localctx, 6)
                self.state = 5980
                self.match(MySqlParser.MEMORY)
                pass
            elif token in [544]:
                self.enterOuterAlt(localctx, 7)
                self.state = 5981
                self.match(MySqlParser.PAGE)
                self.state = 5982
                self.match(MySqlParser.FAULTS)
                pass
            elif token in [621]:
                self.enterOuterAlt(localctx, 8)
                self.state = 5983
                self.match(MySqlParser.SOURCE)
                pass
            elif token in [644]:
                self.enterOuterAlt(localctx, 9)
                self.state = 5984
                self.match(MySqlParser.SWAPS)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class BinlogStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def BINLOG(self):
            return self.getToken(MySqlParser.BINLOG, 0)

        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_binlogStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterBinlogStatement" ):
                listener.enterBinlogStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitBinlogStatement" ):
                listener.exitBinlogStatement(self)




    def binlogStatement(self):

        localctx = MySqlParser.BinlogStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 504, self.RULE_binlogStatement)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5987
            self.match(MySqlParser.BINLOG)
            self.state = 5988
            self.match(MySqlParser.STRING_LITERAL)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CacheIndexStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.schema = None # UidContext

        def CACHE(self):
            return self.getToken(MySqlParser.CACHE, 0)

        def INDEX(self):
            return self.getToken(MySqlParser.INDEX, 0)

        def tableIndexes(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.TableIndexesContext)
            else:
                return self.getTypedRuleContext(MySqlParser.TableIndexesContext,i)


        def IN(self):
            return self.getToken(MySqlParser.IN, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def PARTITION(self):
            return self.getToken(MySqlParser.PARTITION, 0)

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def uidList(self):
            return self.getTypedRuleContext(MySqlParser.UidListContext,0)


        def ALL(self):
            return self.getToken(MySqlParser.ALL, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_cacheIndexStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCacheIndexStatement" ):
                listener.enterCacheIndexStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCacheIndexStatement" ):
                listener.exitCacheIndexStatement(self)




    def cacheIndexStatement(self):

        localctx = MySqlParser.CacheIndexStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 506, self.RULE_cacheIndexStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5990
            self.match(MySqlParser.CACHE)
            self.state = 5991
            self.match(MySqlParser.INDEX)
            self.state = 5992
            self.tableIndexes()
            self.state = 5997
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 5993
                self.match(MySqlParser.COMMA)
                self.state = 5994
                self.tableIndexes()
                self.state = 5999
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 6007
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==129:
                self.state = 6000
                self.match(MySqlParser.PARTITION)
                self.state = 6001
                self.match(MySqlParser.LR_BRACKET)
                self.state = 6004
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [11, 14, 18, 29, 35, 37, 39, 42, 48, 55, 57, 59, 73, 77, 79, 85, 94, 97, 117, 121, 124, 130, 140, 141, 148, 150, 158, 168, 217, 218, 219, 220, 221, 226, 234, 237, 239, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 405, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 523, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 677, 678, 679, 680, 681, 682, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 717, 718, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1123, 1145, 1148, 1156]:
                    self.state = 6002
                    self.uidList()
                    pass
                elif token in [6]:
                    self.state = 6003
                    self.match(MySqlParser.ALL)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 6006
                self.match(MySqlParser.RR_BRACKET)


            self.state = 6009
            self.match(MySqlParser.IN)
            self.state = 6010
            localctx.schema = self.uid()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class FlushStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.flushFormat = None # Token

        def FLUSH(self):
            return self.getToken(MySqlParser.FLUSH, 0)

        def flushOption(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.FlushOptionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.FlushOptionContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def NO_WRITE_TO_BINLOG(self):
            return self.getToken(MySqlParser.NO_WRITE_TO_BINLOG, 0)

        def LOCAL(self):
            return self.getToken(MySqlParser.LOCAL, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_flushStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFlushStatement" ):
                listener.enterFlushStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFlushStatement" ):
                listener.exitFlushStatement(self)




    def flushStatement(self):

        localctx = MySqlParser.FlushStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 508, self.RULE_flushStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6012
            self.match(MySqlParser.FLUSH)
            self.state = 6014
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==115 or _la==474:
                self.state = 6013
                localctx.flushFormat = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==115 or _la==474):
                    localctx.flushFormat = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 6016
            self.flushOption()
            self.state = 6021
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 6017
                self.match(MySqlParser.COMMA)
                self.state = 6018
                self.flushOption()
                self.state = 6023
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class KillStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.connectionFormat = None # Token

        def KILL(self):
            return self.getToken(MySqlParser.KILL, 0)

        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def CONNECTION(self):
            return self.getToken(MySqlParser.CONNECTION, 0)

        def QUERY(self):
            return self.getToken(MySqlParser.QUERY, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_killStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterKillStatement" ):
                listener.enterKillStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitKillStatement" ):
                listener.exitKillStatement(self)




    def killStatement(self):

        localctx = MySqlParser.KillStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 510, self.RULE_killStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6024
            self.match(MySqlParser.KILL)
            self.state = 6026
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,876,self._ctx)
            if la_ == 1:
                self.state = 6025
                localctx.connectionFormat = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==376 or _la==567):
                    localctx.connectionFormat = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 6028
            self.expression(0)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class LoadIndexIntoCacheContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LOAD(self):
            return self.getToken(MySqlParser.LOAD, 0)

        def INDEX(self):
            return self.getToken(MySqlParser.INDEX, 0)

        def INTO(self):
            return self.getToken(MySqlParser.INTO, 0)

        def CACHE(self):
            return self.getToken(MySqlParser.CACHE, 0)

        def loadedTableIndexes(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.LoadedTableIndexesContext)
            else:
                return self.getTypedRuleContext(MySqlParser.LoadedTableIndexesContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_loadIndexIntoCache

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLoadIndexIntoCache" ):
                listener.enterLoadIndexIntoCache(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLoadIndexIntoCache" ):
                listener.exitLoadIndexIntoCache(self)




    def loadIndexIntoCache(self):

        localctx = MySqlParser.LoadIndexIntoCacheContext(self, self._ctx, self.state)
        self.enterRule(localctx, 512, self.RULE_loadIndexIntoCache)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6030
            self.match(MySqlParser.LOAD)
            self.state = 6031
            self.match(MySqlParser.INDEX)
            self.state = 6032
            self.match(MySqlParser.INTO)
            self.state = 6033
            self.match(MySqlParser.CACHE)
            self.state = 6034
            self.loadedTableIndexes()
            self.state = 6039
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 6035
                self.match(MySqlParser.COMMA)
                self.state = 6036
                self.loadedTableIndexes()
                self.state = 6041
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ResetStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RESET(self):
            return self.getToken(MySqlParser.RESET, 0)

        def QUERY(self):
            return self.getToken(MySqlParser.QUERY, 0)

        def CACHE(self):
            return self.getToken(MySqlParser.CACHE, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_resetStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterResetStatement" ):
                listener.enterResetStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitResetStatement" ):
                listener.exitResetStatement(self)




    def resetStatement(self):

        localctx = MySqlParser.ResetStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 514, self.RULE_resetStatement)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6042
            self.match(MySqlParser.RESET)
            self.state = 6043
            self.match(MySqlParser.QUERY)
            self.state = 6044
            self.match(MySqlParser.CACHE)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ShutdownStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SHUTDOWN(self):
            return self.getToken(MySqlParser.SHUTDOWN, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_shutdownStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterShutdownStatement" ):
                listener.enterShutdownStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitShutdownStatement" ):
                listener.exitShutdownStatement(self)




    def shutdownStatement(self):

        localctx = MySqlParser.ShutdownStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 516, self.RULE_shutdownStatement)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6046
            self.match(MySqlParser.SHUTDOWN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class TableIndexesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.indexFormat = None # Token

        def tableName(self):
            return self.getTypedRuleContext(MySqlParser.TableNameContext,0)


        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def uidList(self):
            return self.getTypedRuleContext(MySqlParser.UidListContext,0)


        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def INDEX(self):
            return self.getToken(MySqlParser.INDEX, 0)

        def KEY(self):
            return self.getToken(MySqlParser.KEY, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_tableIndexes

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableIndexes" ):
                listener.enterTableIndexes(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableIndexes" ):
                listener.exitTableIndexes(self)




    def tableIndexes(self):

        localctx = MySqlParser.TableIndexesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 518, self.RULE_tableIndexes)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6048
            self.tableName()
            self.state = 6056
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==81 or _la==91 or _la==1133:
                self.state = 6050
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==81 or _la==91:
                    self.state = 6049
                    localctx.indexFormat = self._input.LT(1)
                    _la = self._input.LA(1)
                    if not(_la==81 or _la==91):
                        localctx.indexFormat = self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 6052
                self.match(MySqlParser.LR_BRACKET)
                self.state = 6053
                self.uidList()
                self.state = 6054
                self.match(MySqlParser.RR_BRACKET)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class FlushOptionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_flushOption

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class TableFlushOptionContext(FlushOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.FlushOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def TABLE(self):
            return self.getToken(MySqlParser.TABLE, 0)
        def TABLES(self):
            return self.getToken(MySqlParser.TABLES, 0)
        def tables(self):
            return self.getTypedRuleContext(MySqlParser.TablesContext,0)

        def flushTableOption(self):
            return self.getTypedRuleContext(MySqlParser.FlushTableOptionContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableFlushOption" ):
                listener.enterTableFlushOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableFlushOption" ):
                listener.exitTableFlushOption(self)


    class ChannelFlushOptionContext(FlushOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.FlushOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def RELAY(self):
            return self.getToken(MySqlParser.RELAY, 0)
        def LOGS(self):
            return self.getToken(MySqlParser.LOGS, 0)
        def channelOption(self):
            return self.getTypedRuleContext(MySqlParser.ChannelOptionContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterChannelFlushOption" ):
                listener.enterChannelFlushOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitChannelFlushOption" ):
                listener.exitChannelFlushOption(self)


    class SimpleFlushOptionContext(FlushOptionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.FlushOptionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def DES_KEY_FILE(self):
            return self.getToken(MySqlParser.DES_KEY_FILE, 0)
        def HOSTS(self):
            return self.getToken(MySqlParser.HOSTS, 0)
        def LOGS(self):
            return self.getToken(MySqlParser.LOGS, 0)
        def OPTIMIZER_COSTS(self):
            return self.getToken(MySqlParser.OPTIMIZER_COSTS, 0)
        def PRIVILEGES(self):
            return self.getToken(MySqlParser.PRIVILEGES, 0)
        def QUERY(self):
            return self.getToken(MySqlParser.QUERY, 0)
        def CACHE(self):
            return self.getToken(MySqlParser.CACHE, 0)
        def STATUS(self):
            return self.getToken(MySqlParser.STATUS, 0)
        def USER_RESOURCES(self):
            return self.getToken(MySqlParser.USER_RESOURCES, 0)
        def TABLES(self):
            return self.getToken(MySqlParser.TABLES, 0)
        def WITH(self):
            return self.getToken(MySqlParser.WITH, 0)
        def READ(self):
            return self.getToken(MySqlParser.READ, 0)
        def LOCK(self):
            return self.getToken(MySqlParser.LOCK, 0)
        def BINARY(self):
            return self.getToken(MySqlParser.BINARY, 0)
        def ENGINE(self):
            return self.getToken(MySqlParser.ENGINE, 0)
        def ERROR(self):
            return self.getToken(MySqlParser.ERROR, 0)
        def GENERAL(self):
            return self.getToken(MySqlParser.GENERAL, 0)
        def RELAY(self):
            return self.getToken(MySqlParser.RELAY, 0)
        def SLOW(self):
            return self.getToken(MySqlParser.SLOW, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSimpleFlushOption" ):
                listener.enterSimpleFlushOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSimpleFlushOption" ):
                listener.exitSimpleFlushOption(self)



    def flushOption(self):

        localctx = MySqlParser.FlushOptionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 520, self.RULE_flushOption)
        self._la = 0 # Token type
        try:
            self.state = 6090
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,886,self._ctx)
            if la_ == 1:
                localctx = MySqlParser.SimpleFlushOptionContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 6076
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [394]:
                    self.state = 6058
                    self.match(MySqlParser.DES_KEY_FILE)
                    pass
                elif token in [447]:
                    self.state = 6059
                    self.match(MySqlParser.HOSTS)
                    pass
                elif token in [226, 409, 411, 438, 476, 574, 615]:
                    self.state = 6061
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==226 or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & 536870917) != 0) or _la==574 or _la==615:
                        self.state = 6060
                        _la = self._input.LA(1)
                        if not(_la==226 or ((((_la - 409)) & ~0x3f) == 0 and ((1 << (_la - 409)) & 536870917) != 0) or _la==574 or _la==615):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()


                    self.state = 6063
                    self.match(MySqlParser.LOGS)
                    pass
                elif token in [540]:
                    self.state = 6064
                    self.match(MySqlParser.OPTIMIZER_COSTS)
                    pass
                elif token in [725]:
                    self.state = 6065
                    self.match(MySqlParser.PRIVILEGES)
                    pass
                elif token in [567]:
                    self.state = 6066
                    self.match(MySqlParser.QUERY)
                    self.state = 6067
                    self.match(MySqlParser.CACHE)
                    pass
                elif token in [634]:
                    self.state = 6068
                    self.match(MySqlParser.STATUS)
                    pass
                elif token in [667]:
                    self.state = 6069
                    self.match(MySqlParser.USER_RESOURCES)
                    pass
                elif token in [742]:
                    self.state = 6070
                    self.match(MySqlParser.TABLES)
                    self.state = 6074
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,881,self._ctx)
                    if la_ == 1:
                        self.state = 6071
                        self.match(MySqlParser.WITH)
                        self.state = 6072
                        self.match(MySqlParser.READ)
                        self.state = 6073
                        self.match(MySqlParser.LOCK)


                    pass
                else:
                    raise NoViableAltException(self)

                pass

            elif la_ == 2:
                localctx = MySqlParser.ChannelFlushOptionContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 6078
                self.match(MySqlParser.RELAY)
                self.state = 6079
                self.match(MySqlParser.LOGS)
                self.state = 6081
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==65:
                    self.state = 6080
                    self.channelOption()


                pass

            elif la_ == 3:
                localctx = MySqlParser.TableFlushOptionContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 6083
                _la = self._input.LA(1)
                if not(_la==172 or _la==742):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 6085
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,884,self._ctx)
                if la_ == 1:
                    self.state = 6084
                    self.tables()


                self.state = 6088
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,885,self._ctx)
                if la_ == 1:
                    self.state = 6087
                    self.flushTableOption()


                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class FlushTableOptionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def WITH(self):
            return self.getToken(MySqlParser.WITH, 0)

        def READ(self):
            return self.getToken(MySqlParser.READ, 0)

        def LOCK(self):
            return self.getToken(MySqlParser.LOCK, 0)

        def FOR(self):
            return self.getToken(MySqlParser.FOR, 0)

        def EXPORT(self):
            return self.getToken(MySqlParser.EXPORT, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_flushTableOption

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFlushTableOption" ):
                listener.enterFlushTableOption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFlushTableOption" ):
                listener.exitFlushTableOption(self)




    def flushTableOption(self):

        localctx = MySqlParser.FlushTableOptionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 522, self.RULE_flushTableOption)
        try:
            self.state = 6097
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [192]:
                self.enterOuterAlt(localctx, 1)
                self.state = 6092
                self.match(MySqlParser.WITH)
                self.state = 6093
                self.match(MySqlParser.READ)
                self.state = 6094
                self.match(MySqlParser.LOCK)
                pass
            elif token in [65]:
                self.enterOuterAlt(localctx, 2)
                self.state = 6095
                self.match(MySqlParser.FOR)
                self.state = 6096
                self.match(MySqlParser.EXPORT)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class LoadedTableIndexesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.partitionList = None # UidListContext
            self.indexFormat = None # Token
            self.indexList = None # UidListContext

        def tableName(self):
            return self.getTypedRuleContext(MySqlParser.TableNameContext,0)


        def PARTITION(self):
            return self.getToken(MySqlParser.PARTITION, 0)

        def LR_BRACKET(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.LR_BRACKET)
            else:
                return self.getToken(MySqlParser.LR_BRACKET, i)

        def RR_BRACKET(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.RR_BRACKET)
            else:
                return self.getToken(MySqlParser.RR_BRACKET, i)

        def IGNORE(self):
            return self.getToken(MySqlParser.IGNORE, 0)

        def LEAVES(self):
            return self.getToken(MySqlParser.LEAVES, 0)

        def uidList(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UidListContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UidListContext,i)


        def ALL(self):
            return self.getToken(MySqlParser.ALL, 0)

        def INDEX(self):
            return self.getToken(MySqlParser.INDEX, 0)

        def KEY(self):
            return self.getToken(MySqlParser.KEY, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_loadedTableIndexes

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLoadedTableIndexes" ):
                listener.enterLoadedTableIndexes(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLoadedTableIndexes" ):
                listener.exitLoadedTableIndexes(self)




    def loadedTableIndexes(self):

        localctx = MySqlParser.LoadedTableIndexesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 524, self.RULE_loadedTableIndexes)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6099
            self.tableName()
            self.state = 6107
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==129:
                self.state = 6100
                self.match(MySqlParser.PARTITION)
                self.state = 6101
                self.match(MySqlParser.LR_BRACKET)
                self.state = 6104
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [11, 14, 18, 29, 35, 37, 39, 42, 48, 55, 57, 59, 73, 77, 79, 85, 94, 97, 117, 121, 124, 130, 140, 141, 148, 150, 158, 168, 217, 218, 219, 220, 221, 226, 234, 237, 239, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 405, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 523, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 677, 678, 679, 680, 681, 682, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 717, 718, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1123, 1145, 1148, 1156]:
                    self.state = 6102
                    localctx.partitionList = self.uidList()
                    pass
                elif token in [6]:
                    self.state = 6103
                    self.match(MySqlParser.ALL)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 6106
                self.match(MySqlParser.RR_BRACKET)


            self.state = 6116
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,891,self._ctx)
            if la_ == 1:
                self.state = 6110
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==81 or _la==91:
                    self.state = 6109
                    localctx.indexFormat = self._input.LT(1)
                    _la = self._input.LA(1)
                    if not(_la==81 or _la==91):
                        localctx.indexFormat = self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 6112
                self.match(MySqlParser.LR_BRACKET)
                self.state = 6113
                localctx.indexList = self.uidList()
                self.state = 6114
                self.match(MySqlParser.RR_BRACKET)


            self.state = 6120
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==78:
                self.state = 6118
                self.match(MySqlParser.IGNORE)
                self.state = 6119
                self.match(MySqlParser.LEAVES)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class SimpleDescribeStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.command = None # Token
            self.column = None # UidContext
            self.pattern = None # Token

        def tableName(self):
            return self.getTypedRuleContext(MySqlParser.TableNameContext,0)


        def EXPLAIN(self):
            return self.getToken(MySqlParser.EXPLAIN, 0)

        def DESCRIBE(self):
            return self.getToken(MySqlParser.DESCRIBE, 0)

        def DESC(self):
            return self.getToken(MySqlParser.DESC, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_simpleDescribeStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSimpleDescribeStatement" ):
                listener.enterSimpleDescribeStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSimpleDescribeStatement" ):
                listener.exitSimpleDescribeStatement(self)




    def simpleDescribeStatement(self):

        localctx = MySqlParser.SimpleDescribeStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 526, self.RULE_simpleDescribeStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6122
            localctx.command = self._input.LT(1)
            _la = self._input.LA(1)
            if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 4611791571543654400) != 0)):
                localctx.command = self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 6123
            self.tableName()
            self.state = 6126
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,893,self._ctx)
            if la_ == 1:
                self.state = 6124
                localctx.column = self.uid()

            elif la_ == 2:
                self.state = 6125
                localctx.pattern = self.match(MySqlParser.STRING_LITERAL)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class FullDescribeStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.command = None # Token
            self.formatType = None # Token
            self.formatValue = None # Token

        def describeObjectClause(self):
            return self.getTypedRuleContext(MySqlParser.DescribeObjectClauseContext,0)


        def EXPLAIN(self):
            return self.getToken(MySqlParser.EXPLAIN, 0)

        def DESCRIBE(self):
            return self.getToken(MySqlParser.DESCRIBE, 0)

        def DESC(self):
            return self.getToken(MySqlParser.DESC, 0)

        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def EXTENDED(self):
            return self.getToken(MySqlParser.EXTENDED, 0)

        def PARTITIONS(self):
            return self.getToken(MySqlParser.PARTITIONS, 0)

        def FORMAT(self):
            return self.getToken(MySqlParser.FORMAT, 0)

        def TRADITIONAL(self):
            return self.getToken(MySqlParser.TRADITIONAL, 0)

        def JSON(self):
            return self.getToken(MySqlParser.JSON, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_fullDescribeStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFullDescribeStatement" ):
                listener.enterFullDescribeStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFullDescribeStatement" ):
                listener.exitFullDescribeStatement(self)




    def fullDescribeStatement(self):

        localctx = MySqlParser.FullDescribeStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 528, self.RULE_fullDescribeStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6128
            localctx.command = self._input.LT(1)
            _la = self._input.LA(1)
            if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 4611791571543654400) != 0)):
                localctx.command = self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 6132
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==422 or _la==550 or _la==885:
                self.state = 6129
                localctx.formatType = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==422 or _la==550 or _la==885):
                    localctx.formatType = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 6130
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 6131
                localctx.formatValue = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==466 or _la==652):
                    localctx.formatValue = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 6134
            self.describeObjectClause()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class HelpStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def HELP(self):
            return self.getToken(MySqlParser.HELP, 0)

        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_helpStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHelpStatement" ):
                listener.enterHelpStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHelpStatement" ):
                listener.exitHelpStatement(self)




    def helpStatement(self):

        localctx = MySqlParser.HelpStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 530, self.RULE_helpStatement)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6136
            self.match(MySqlParser.HELP)
            self.state = 6137
            self.match(MySqlParser.STRING_LITERAL)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class UseStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def USE(self):
            return self.getToken(MySqlParser.USE, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_useStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUseStatement" ):
                listener.enterUseStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUseStatement" ):
                listener.exitUseStatement(self)




    def useStatement(self):

        localctx = MySqlParser.UseStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 532, self.RULE_useStatement)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6139
            self.match(MySqlParser.USE)
            self.state = 6140
            self.uid()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class SignalStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SIGNAL(self):
            return self.getToken(MySqlParser.SIGNAL, 0)

        def ID(self):
            return self.getToken(MySqlParser.ID, 0)

        def REVERSE_QUOTE_ID(self):
            return self.getToken(MySqlParser.REVERSE_QUOTE_ID, 0)

        def SET(self):
            return self.getToken(MySqlParser.SET, 0)

        def signalConditionInformation(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.SignalConditionInformationContext)
            else:
                return self.getTypedRuleContext(MySqlParser.SignalConditionInformationContext,i)


        def SQLSTATE(self):
            return self.getToken(MySqlParser.SQLSTATE, 0)

        def stringLiteral(self):
            return self.getTypedRuleContext(MySqlParser.StringLiteralContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def VALUE(self):
            return self.getToken(MySqlParser.VALUE, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_signalStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSignalStatement" ):
                listener.enterSignalStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSignalStatement" ):
                listener.exitSignalStatement(self)




    def signalStatement(self):

        localctx = MySqlParser.SignalStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 534, self.RULE_signalStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6142
            self.match(MySqlParser.SIGNAL)
            self.state = 6150
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [162]:
                self.state = 6143
                self.match(MySqlParser.SQLSTATE)
                self.state = 6145
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==669:
                    self.state = 6144
                    self.match(MySqlParser.VALUE)


                self.state = 6147
                self.stringLiteral()
                pass
            elif token in [1156]:
                self.state = 6148
                self.match(MySqlParser.ID)
                pass
            elif token in [1157]:
                self.state = 6149
                self.match(MySqlParser.REVERSE_QUOTE_ID)
                pass
            else:
                raise NoViableAltException(self)

            self.state = 6161
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,898,self._ctx)
            if la_ == 1:
                self.state = 6152
                self.match(MySqlParser.SET)
                self.state = 6153
                self.signalConditionInformation()
                self.state = 6158
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 6154
                    self.match(MySqlParser.COMMA)
                    self.state = 6155
                    self.signalConditionInformation()
                    self.state = 6160
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)



        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ResignalStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RESIGNAL(self):
            return self.getToken(MySqlParser.RESIGNAL, 0)

        def ID(self):
            return self.getToken(MySqlParser.ID, 0)

        def REVERSE_QUOTE_ID(self):
            return self.getToken(MySqlParser.REVERSE_QUOTE_ID, 0)

        def SET(self):
            return self.getToken(MySqlParser.SET, 0)

        def signalConditionInformation(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.SignalConditionInformationContext)
            else:
                return self.getTypedRuleContext(MySqlParser.SignalConditionInformationContext,i)


        def SQLSTATE(self):
            return self.getToken(MySqlParser.SQLSTATE, 0)

        def stringLiteral(self):
            return self.getTypedRuleContext(MySqlParser.StringLiteralContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def VALUE(self):
            return self.getToken(MySqlParser.VALUE, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_resignalStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterResignalStatement" ):
                listener.enterResignalStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitResignalStatement" ):
                listener.exitResignalStatement(self)




    def resignalStatement(self):

        localctx = MySqlParser.ResignalStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 536, self.RULE_resignalStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6163
            self.match(MySqlParser.RESIGNAL)
            self.state = 6171
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [162]:
                self.state = 6164
                self.match(MySqlParser.SQLSTATE)
                self.state = 6166
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==669:
                    self.state = 6165
                    self.match(MySqlParser.VALUE)


                self.state = 6168
                self.stringLiteral()
                pass
            elif token in [1156]:
                self.state = 6169
                self.match(MySqlParser.ID)
                pass
            elif token in [1157]:
                self.state = 6170
                self.match(MySqlParser.REVERSE_QUOTE_ID)
                pass
            elif token in [-1, 7, 9, 20, 24, 26, 33, 44, 45, 46, 51, 62, 71, 72, 85, 93, 102, 103, 119, 132, 138, 139, 141, 143, 147, 152, 153, 155, 156, 172, 182, 184, 186, 188, 192, 344, 345, 351, 356, 369, 390, 399, 432, 442, 444, 456, 560, 580, 589, 597, 604, 629, 635, 656, 661, 681, 708, 739, 1121, 1133, 1136]:
                pass
            else:
                pass
            self.state = 6182
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,902,self._ctx)
            if la_ == 1:
                self.state = 6173
                self.match(MySqlParser.SET)
                self.state = 6174
                self.signalConditionInformation()
                self.state = 6179
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 6175
                    self.match(MySqlParser.COMMA)
                    self.state = 6176
                    self.signalConditionInformation()
                    self.state = 6181
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)



        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class SignalConditionInformationContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def CLASS_ORIGIN(self):
            return self.getToken(MySqlParser.CLASS_ORIGIN, 0)

        def SUBCLASS_ORIGIN(self):
            return self.getToken(MySqlParser.SUBCLASS_ORIGIN, 0)

        def MESSAGE_TEXT(self):
            return self.getToken(MySqlParser.MESSAGE_TEXT, 0)

        def MYSQL_ERRNO(self):
            return self.getToken(MySqlParser.MYSQL_ERRNO, 0)

        def CONSTRAINT_CATALOG(self):
            return self.getToken(MySqlParser.CONSTRAINT_CATALOG, 0)

        def CONSTRAINT_SCHEMA(self):
            return self.getToken(MySqlParser.CONSTRAINT_SCHEMA, 0)

        def CONSTRAINT_NAME(self):
            return self.getToken(MySqlParser.CONSTRAINT_NAME, 0)

        def CATALOG_NAME(self):
            return self.getToken(MySqlParser.CATALOG_NAME, 0)

        def SCHEMA_NAME(self):
            return self.getToken(MySqlParser.SCHEMA_NAME, 0)

        def TABLE_NAME(self):
            return self.getToken(MySqlParser.TABLE_NAME, 0)

        def COLUMN_NAME(self):
            return self.getToken(MySqlParser.COLUMN_NAME, 0)

        def CURSOR_NAME(self):
            return self.getToken(MySqlParser.CURSOR_NAME, 0)

        def stringLiteral(self):
            return self.getTypedRuleContext(MySqlParser.StringLiteralContext,0)


        def DECIMAL_LITERAL(self):
            return self.getToken(MySqlParser.DECIMAL_LITERAL, 0)

        def mysqlVariable(self):
            return self.getTypedRuleContext(MySqlParser.MysqlVariableContext,0)


        def simpleId(self):
            return self.getTypedRuleContext(MySqlParser.SimpleIdContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_signalConditionInformation

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSignalConditionInformation" ):
                listener.enterSignalConditionInformation(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSignalConditionInformation" ):
                listener.exitSignalConditionInformation(self)




    def signalConditionInformation(self):

        localctx = MySqlParser.SignalConditionInformationContext(self, self._ctx, self.state)
        self.enterRule(localctx, 538, self.RULE_signalConditionInformation)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6184
            _la = self._input.LA(1)
            if not(((((_la - 359)) & ~0x3f) == 0 and ((1 << (_la - 359)) & 272105729) != 0) or _la==507 or _la==515 or _la==639 or _la==646 or _la==836 or _la==1005):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 6185
            self.match(MySqlParser.EQUAL_SYMBOL)
            self.state = 6190
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1147, 1148, 1154]:
                self.state = 6186
                self.stringLiteral()
                pass
            elif token in [1149]:
                self.state = 6187
                self.match(MySqlParser.DECIMAL_LITERAL)
                pass
            elif token in [1159, 1160]:
                self.state = 6188
                self.mysqlVariable()
                pass
            elif token in [11, 14, 18, 29, 35, 37, 39, 42, 48, 55, 57, 59, 73, 77, 79, 85, 94, 97, 117, 121, 124, 130, 140, 141, 148, 150, 158, 168, 217, 218, 219, 220, 221, 226, 234, 237, 239, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 405, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 523, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 677, 678, 679, 680, 681, 682, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 717, 718, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1123, 1156]:
                self.state = 6189
                self.simpleId()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class WithStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def WITH(self):
            return self.getToken(MySqlParser.WITH, 0)

        def commonTableExpressions(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.CommonTableExpressionsContext)
            else:
                return self.getTypedRuleContext(MySqlParser.CommonTableExpressionsContext,i)


        def RECURSIVE(self):
            return self.getToken(MySqlParser.RECURSIVE, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_withStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterWithStatement" ):
                listener.enterWithStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitWithStatement" ):
                listener.exitWithStatement(self)




    def withStatement(self):

        localctx = MySqlParser.WithStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 540, self.RULE_withStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6192
            self.match(MySqlParser.WITH)
            self.state = 6194
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,904,self._ctx)
            if la_ == 1:
                self.state = 6193
                self.match(MySqlParser.RECURSIVE)


            self.state = 6196
            self.commonTableExpressions()
            self.state = 6201
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 6197
                self.match(MySqlParser.COMMA)
                self.state = 6198
                self.commonTableExpressions()
                self.state = 6203
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class TableStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def TABLE(self):
            return self.getToken(MySqlParser.TABLE, 0)

        def tableName(self):
            return self.getTypedRuleContext(MySqlParser.TableNameContext,0)


        def orderByClause(self):
            return self.getTypedRuleContext(MySqlParser.OrderByClauseContext,0)


        def limitClause(self):
            return self.getTypedRuleContext(MySqlParser.LimitClauseContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_tableStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableStatement" ):
                listener.enterTableStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableStatement" ):
                listener.exitTableStatement(self)




    def tableStatement(self):

        localctx = MySqlParser.TableStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 542, self.RULE_tableStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6204
            self.match(MySqlParser.TABLE)
            self.state = 6205
            self.tableName()
            self.state = 6207
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==124:
                self.state = 6206
                self.orderByClause()


            self.state = 6210
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==99:
                self.state = 6209
                self.limitClause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DiagnosticsStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def GET(self):
            return self.getToken(MySqlParser.GET, 0)

        def DIAGNOSTICS(self):
            return self.getToken(MySqlParser.DIAGNOSTICS, 0)

        def CURRENT(self):
            return self.getToken(MySqlParser.CURRENT, 0)

        def STACKED(self):
            return self.getToken(MySqlParser.STACKED, 0)

        def variableClause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.VariableClauseContext)
            else:
                return self.getTypedRuleContext(MySqlParser.VariableClauseContext,i)


        def EQUAL_SYMBOL(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.EQUAL_SYMBOL)
            else:
                return self.getToken(MySqlParser.EQUAL_SYMBOL, i)

        def CONDITION(self):
            return self.getToken(MySqlParser.CONDITION, 0)

        def diagnosticsConditionInformationName(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.DiagnosticsConditionInformationNameContext)
            else:
                return self.getTypedRuleContext(MySqlParser.DiagnosticsConditionInformationNameContext,i)


        def NUMBER(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.NUMBER)
            else:
                return self.getToken(MySqlParser.NUMBER, i)

        def ROW_COUNT(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.ROW_COUNT)
            else:
                return self.getToken(MySqlParser.ROW_COUNT, i)

        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_diagnosticsStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDiagnosticsStatement" ):
                listener.enterDiagnosticsStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDiagnosticsStatement" ):
                listener.exitDiagnosticsStatement(self)




    def diagnosticsStatement(self):

        localctx = MySqlParser.DiagnosticsStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 544, self.RULE_diagnosticsStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6212
            self.match(MySqlParser.GET)
            self.state = 6214
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==35 or _la==168:
                self.state = 6213
                _la = self._input.LA(1)
                if not(_la==35 or _la==168):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 6216
            self.match(MySqlParser.DIAGNOSTICS)
            self.state = 6248
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,912,self._ctx)
            if la_ == 1:
                self.state = 6217
                self.variableClause()
                self.state = 6218
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 6219
                _la = self._input.LA(1)
                if not(_la==117 or _la==996):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 6227
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 6220
                    self.match(MySqlParser.COMMA)
                    self.state = 6221
                    self.variableClause()
                    self.state = 6222
                    self.match(MySqlParser.EQUAL_SYMBOL)
                    self.state = 6223
                    _la = self._input.LA(1)
                    if not(_la==117 or _la==996):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 6229
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass

            elif la_ == 2:
                self.state = 6230
                self.match(MySqlParser.CONDITION)
                self.state = 6233
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [1138, 1139, 1140, 1149, 1151]:
                    self.state = 6231
                    self.decimalLiteral()
                    pass
                elif token in [11, 14, 18, 29, 35, 37, 39, 42, 48, 55, 57, 59, 73, 77, 79, 85, 94, 97, 117, 121, 124, 130, 140, 141, 148, 150, 158, 168, 217, 218, 219, 220, 221, 226, 234, 237, 239, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 405, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 523, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 677, 678, 679, 680, 681, 682, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 717, 718, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1123, 1137, 1145, 1148, 1156, 1159, 1160]:
                    self.state = 6232
                    self.variableClause()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 6235
                self.variableClause()
                self.state = 6236
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 6237
                self.diagnosticsConditionInformationName()
                self.state = 6245
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 6238
                    self.match(MySqlParser.COMMA)
                    self.state = 6239
                    self.variableClause()
                    self.state = 6240
                    self.match(MySqlParser.EQUAL_SYMBOL)
                    self.state = 6241
                    self.diagnosticsConditionInformationName()
                    self.state = 6247
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DiagnosticsConditionInformationNameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CLASS_ORIGIN(self):
            return self.getToken(MySqlParser.CLASS_ORIGIN, 0)

        def SUBCLASS_ORIGIN(self):
            return self.getToken(MySqlParser.SUBCLASS_ORIGIN, 0)

        def RETURNED_SQLSTATE(self):
            return self.getToken(MySqlParser.RETURNED_SQLSTATE, 0)

        def MESSAGE_TEXT(self):
            return self.getToken(MySqlParser.MESSAGE_TEXT, 0)

        def MYSQL_ERRNO(self):
            return self.getToken(MySqlParser.MYSQL_ERRNO, 0)

        def CONSTRAINT_CATALOG(self):
            return self.getToken(MySqlParser.CONSTRAINT_CATALOG, 0)

        def CONSTRAINT_SCHEMA(self):
            return self.getToken(MySqlParser.CONSTRAINT_SCHEMA, 0)

        def CONSTRAINT_NAME(self):
            return self.getToken(MySqlParser.CONSTRAINT_NAME, 0)

        def CATALOG_NAME(self):
            return self.getToken(MySqlParser.CATALOG_NAME, 0)

        def SCHEMA_NAME(self):
            return self.getToken(MySqlParser.SCHEMA_NAME, 0)

        def TABLE_NAME(self):
            return self.getToken(MySqlParser.TABLE_NAME, 0)

        def COLUMN_NAME(self):
            return self.getToken(MySqlParser.COLUMN_NAME, 0)

        def CURSOR_NAME(self):
            return self.getToken(MySqlParser.CURSOR_NAME, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_diagnosticsConditionInformationName

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDiagnosticsConditionInformationName" ):
                listener.enterDiagnosticsConditionInformationName(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDiagnosticsConditionInformationName" ):
                listener.exitDiagnosticsConditionInformationName(self)




    def diagnosticsConditionInformationName(self):

        localctx = MySqlParser.DiagnosticsConditionInformationNameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 546, self.RULE_diagnosticsConditionInformationName)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6250
            _la = self._input.LA(1)
            if not(((((_la - 359)) & ~0x3f) == 0 and ((1 << (_la - 359)) & 272105729) != 0) or _la==507 or _la==515 or ((((_la - 592)) & ~0x3f) == 0 and ((1 << (_la - 592)) & 18155135997837313) != 0) or _la==836 or _la==1005):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DescribeObjectClauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_describeObjectClause

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class DescribeStatementsContext(DescribeObjectClauseContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.DescribeObjectClauseContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def selectStatement(self):
            return self.getTypedRuleContext(MySqlParser.SelectStatementContext,0)

        def deleteStatement(self):
            return self.getTypedRuleContext(MySqlParser.DeleteStatementContext,0)

        def insertStatement(self):
            return self.getTypedRuleContext(MySqlParser.InsertStatementContext,0)

        def replaceStatement(self):
            return self.getTypedRuleContext(MySqlParser.ReplaceStatementContext,0)

        def updateStatement(self):
            return self.getTypedRuleContext(MySqlParser.UpdateStatementContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDescribeStatements" ):
                listener.enterDescribeStatements(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDescribeStatements" ):
                listener.exitDescribeStatements(self)


    class DescribeConnectionContext(DescribeObjectClauseContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.DescribeObjectClauseContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def FOR(self):
            return self.getToken(MySqlParser.FOR, 0)
        def CONNECTION(self):
            return self.getToken(MySqlParser.CONNECTION, 0)
        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDescribeConnection" ):
                listener.enterDescribeConnection(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDescribeConnection" ):
                listener.exitDescribeConnection(self)



    def describeObjectClause(self):

        localctx = MySqlParser.DescribeObjectClauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 548, self.RULE_describeObjectClause)
        try:
            self.state = 6262
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [44, 85, 141, 152, 184, 1133]:
                localctx = MySqlParser.DescribeStatementsContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 6257
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [152, 1133]:
                    self.state = 6252
                    self.selectStatement()
                    pass
                elif token in [44]:
                    self.state = 6253
                    self.deleteStatement()
                    pass
                elif token in [85]:
                    self.state = 6254
                    self.insertStatement()
                    pass
                elif token in [141]:
                    self.state = 6255
                    self.replaceStatement()
                    pass
                elif token in [184]:
                    self.state = 6256
                    self.updateStatement()
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            elif token in [65]:
                localctx = MySqlParser.DescribeConnectionContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 6259
                self.match(MySqlParser.FOR)
                self.state = 6260
                self.match(MySqlParser.CONNECTION)
                self.state = 6261
                self.uid()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class FullIdContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def uid(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UidContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UidContext,i)


        def DOT_ID(self):
            return self.getToken(MySqlParser.DOT_ID, 0)

        def DOT(self):
            return self.getToken(MySqlParser.DOT, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_fullId

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFullId" ):
                listener.enterFullId(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFullId" ):
                listener.exitFullId(self)




    def fullId(self):

        localctx = MySqlParser.FullIdContext(self, self._ctx, self.state)
        self.enterRule(localctx, 550, self.RULE_fullId)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6264
            self.uid()
            self.state = 6268
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,915,self._ctx)
            if la_ == 1:
                self.state = 6265
                self.match(MySqlParser.DOT_ID)

            elif la_ == 2:
                self.state = 6266
                self.match(MySqlParser.DOT)
                self.state = 6267
                self.uid()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class TableNameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def fullId(self):
            return self.getTypedRuleContext(MySqlParser.FullIdContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_tableName

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableName" ):
                listener.enterTableName(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableName" ):
                listener.exitTableName(self)




    def tableName(self):

        localctx = MySqlParser.TableNameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 552, self.RULE_tableName)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6270
            self.fullId()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class RoleNameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def userName(self):
            return self.getTypedRuleContext(MySqlParser.UserNameContext,0)


        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_roleName

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRoleName" ):
                listener.enterRoleName(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRoleName" ):
                listener.exitRoleName(self)




    def roleName(self):

        localctx = MySqlParser.RoleNameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 554, self.RULE_roleName)
        try:
            self.state = 6274
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,916,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 6272
                self.userName()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 6273
                self.uid()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class FullColumnNameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def dottedId(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.DottedIdContext)
            else:
                return self.getTypedRuleContext(MySqlParser.DottedIdContext,i)


        def getRuleIndex(self):
            return MySqlParser.RULE_fullColumnName

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFullColumnName" ):
                listener.enterFullColumnName(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFullColumnName" ):
                listener.exitFullColumnName(self)




    def fullColumnName(self):

        localctx = MySqlParser.FullColumnNameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 556, self.RULE_fullColumnName)
        try:
            self.state = 6290
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,921,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 6276
                self.uid()
                self.state = 6281
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,918,self._ctx)
                if la_ == 1:
                    self.state = 6277
                    self.dottedId()
                    self.state = 6279
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,917,self._ctx)
                    if la_ == 1:
                        self.state = 6278
                        self.dottedId()




                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 6284
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,919,self._ctx)
                if la_ == 1:
                    self.state = 6283
                    self.matchWildcard()


                self.state = 6286
                self.dottedId()
                self.state = 6288
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,920,self._ctx)
                if la_ == 1:
                    self.state = 6287
                    self.dottedId()


                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class IndexColumnNameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.sortType = None # Token

        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)


        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def ASC(self):
            return self.getToken(MySqlParser.ASC, 0)

        def DESC(self):
            return self.getToken(MySqlParser.DESC, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_indexColumnName

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIndexColumnName" ):
                listener.enterIndexColumnName(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIndexColumnName" ):
                listener.exitIndexColumnName(self)




    def indexColumnName(self):

        localctx = MySqlParser.IndexColumnNameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 558, self.RULE_indexColumnName)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6303
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,924,self._ctx)
            if la_ == 1:
                self.state = 6294
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,922,self._ctx)
                if la_ == 1:
                    self.state = 6292
                    self.uid()
                    pass

                elif la_ == 2:
                    self.state = 6293
                    self.match(MySqlParser.STRING_LITERAL)
                    pass


                self.state = 6300
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1133:
                    self.state = 6296
                    self.match(MySqlParser.LR_BRACKET)
                    self.state = 6297
                    self.decimalLiteral()
                    self.state = 6298
                    self.match(MySqlParser.RR_BRACKET)


                pass

            elif la_ == 2:
                self.state = 6302
                self.expression(0)
                pass


            self.state = 6306
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==13 or _la==45:
                self.state = 6305
                localctx.sortType = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==13 or _la==45):
                    localctx.sortType = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class SimpleUserNameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def ID(self):
            return self.getToken(MySqlParser.ID, 0)

        def ADMIN(self):
            return self.getToken(MySqlParser.ADMIN, 0)

        def keywordsCanBeId(self):
            return self.getTypedRuleContext(MySqlParser.KeywordsCanBeIdContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_simpleUserName

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSimpleUserName" ):
                listener.enterSimpleUserName(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSimpleUserName" ):
                listener.exitSimpleUserName(self)




    def simpleUserName(self):

        localctx = MySqlParser.SimpleUserNameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 560, self.RULE_simpleUserName)
        try:
            self.state = 6312
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,926,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 6308
                self.match(MySqlParser.STRING_LITERAL)
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 6309
                self.match(MySqlParser.ID)
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 6310
                self.match(MySqlParser.ADMIN)
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 6311
                self.keywordsCanBeId()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class HostNameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LOCAL_ID(self):
            return self.getToken(MySqlParser.LOCAL_ID, 0)

        def HOST_IP_ADDRESS(self):
            return self.getToken(MySqlParser.HOST_IP_ADDRESS, 0)

        def AT_SIGN(self):
            return self.getToken(MySqlParser.AT_SIGN, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_hostName

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHostName" ):
                listener.enterHostName(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHostName" ):
                listener.exitHostName(self)




    def hostName(self):

        localctx = MySqlParser.HostNameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 562, self.RULE_hostName)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6314
            _la = self._input.LA(1)
            if not(((((_la - 1137)) & ~0x3f) == 0 and ((1 << (_la - 1137)) & 6291457) != 0)):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class UserNameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def simpleUserName(self):
            return self.getTypedRuleContext(MySqlParser.SimpleUserNameContext,0)


        def hostName(self):
            return self.getTypedRuleContext(MySqlParser.HostNameContext,0)


        def currentUserExpression(self):
            return self.getTypedRuleContext(MySqlParser.CurrentUserExpressionContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_userName

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUserName" ):
                listener.enterUserName(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUserName" ):
                listener.exitUserName(self)




    def userName(self):

        localctx = MySqlParser.UserNameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 564, self.RULE_userName)
        try:
            self.state = 6321
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,927,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 6316
                self.simpleUserName()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 6317
                self.simpleUserName()
                self.state = 6318
                self.hostName()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 6320
                self.currentUserExpression()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class MysqlVariableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LOCAL_ID(self):
            return self.getToken(MySqlParser.LOCAL_ID, 0)

        def GLOBAL_ID(self):
            return self.getToken(MySqlParser.GLOBAL_ID, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_mysqlVariable

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMysqlVariable" ):
                listener.enterMysqlVariable(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMysqlVariable" ):
                listener.exitMysqlVariable(self)




    def mysqlVariable(self):

        localctx = MySqlParser.MysqlVariableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 566, self.RULE_mysqlVariable)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6323
            _la = self._input.LA(1)
            if not(_la==1159 or _la==1160):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CharsetNameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def BINARY(self):
            return self.getToken(MySqlParser.BINARY, 0)

        def charsetNameBase(self):
            return self.getTypedRuleContext(MySqlParser.CharsetNameBaseContext,0)


        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def CHARSET_REVERSE_QOUTE_STRING(self):
            return self.getToken(MySqlParser.CHARSET_REVERSE_QOUTE_STRING, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_charsetName

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCharsetName" ):
                listener.enterCharsetName(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCharsetName" ):
                listener.exitCharsetName(self)




    def charsetName(self):

        localctx = MySqlParser.CharsetNameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 568, self.RULE_charsetName)
        try:
            self.state = 6329
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,928,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 6325
                self.match(MySqlParser.BINARY)
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 6326
                self.charsetNameBase()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 6327
                self.match(MySqlParser.STRING_LITERAL)
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 6328
                self.match(MySqlParser.CHARSET_REVERSE_QOUTE_STRING)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CollationNameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_collationName

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCollationName" ):
                listener.enterCollationName(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCollationName" ):
                listener.exitCollationName(self)




    def collationName(self):

        localctx = MySqlParser.CollationNameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 570, self.RULE_collationName)
        try:
            self.state = 6333
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,929,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 6331
                self.uid()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 6332
                self.match(MySqlParser.STRING_LITERAL)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class EngineNameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def engineNameBase(self):
            return self.getTypedRuleContext(MySqlParser.EngineNameBaseContext,0)


        def ID(self):
            return self.getToken(MySqlParser.ID, 0)

        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_engineName

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterEngineName" ):
                listener.enterEngineName(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitEngineName" ):
                listener.exitEngineName(self)




    def engineName(self):

        localctx = MySqlParser.EngineNameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 572, self.RULE_engineName)
        try:
            self.state = 6338
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [375, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798]:
                self.enterOuterAlt(localctx, 1)
                self.state = 6335
                self.engineNameBase()
                pass
            elif token in [1156]:
                self.enterOuterAlt(localctx, 2)
                self.state = 6336
                self.match(MySqlParser.ID)
                pass
            elif token in [1148]:
                self.enterOuterAlt(localctx, 3)
                self.state = 6337
                self.match(MySqlParser.STRING_LITERAL)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class EngineNameBaseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ARCHIVE(self):
            return self.getToken(MySqlParser.ARCHIVE, 0)

        def BLACKHOLE(self):
            return self.getToken(MySqlParser.BLACKHOLE, 0)

        def CONNECT(self):
            return self.getToken(MySqlParser.CONNECT, 0)

        def CSV(self):
            return self.getToken(MySqlParser.CSV, 0)

        def FEDERATED(self):
            return self.getToken(MySqlParser.FEDERATED, 0)

        def INNODB(self):
            return self.getToken(MySqlParser.INNODB, 0)

        def MEMORY(self):
            return self.getToken(MySqlParser.MEMORY, 0)

        def MRG_MYISAM(self):
            return self.getToken(MySqlParser.MRG_MYISAM, 0)

        def MYISAM(self):
            return self.getToken(MySqlParser.MYISAM, 0)

        def NDB(self):
            return self.getToken(MySqlParser.NDB, 0)

        def NDBCLUSTER(self):
            return self.getToken(MySqlParser.NDBCLUSTER, 0)

        def PERFORMANCE_SCHEMA(self):
            return self.getToken(MySqlParser.PERFORMANCE_SCHEMA, 0)

        def TOKUDB(self):
            return self.getToken(MySqlParser.TOKUDB, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_engineNameBase

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterEngineNameBase" ):
                listener.enterEngineNameBase(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitEngineNameBase" ):
                listener.exitEngineNameBase(self)




    def engineNameBase(self):

        localctx = MySqlParser.EngineNameBaseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 574, self.RULE_engineNameBase)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6340
            _la = self._input.LA(1)
            if not(_la==375 or ((((_la - 787)) & ~0x3f) == 0 and ((1 << (_la - 787)) & 4095) != 0)):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class UuidSetContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def decimalLiteral(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.DecimalLiteralContext)
            else:
                return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,i)


        def MINUS(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.MINUS)
            else:
                return self.getToken(MySqlParser.MINUS, i)

        def COLON_SYMB(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COLON_SYMB)
            else:
                return self.getToken(MySqlParser.COLON_SYMB, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_uuidSet

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUuidSet" ):
                listener.enterUuidSet(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUuidSet" ):
                listener.exitUuidSet(self)




    def uuidSet(self):

        localctx = MySqlParser.UuidSetContext(self, self._ctx, self.state)
        self.enterRule(localctx, 576, self.RULE_uuidSet)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6342
            self.decimalLiteral()
            self.state = 6343
            self.match(MySqlParser.MINUS)
            self.state = 6344
            self.decimalLiteral()
            self.state = 6345
            self.match(MySqlParser.MINUS)
            self.state = 6346
            self.decimalLiteral()
            self.state = 6347
            self.match(MySqlParser.MINUS)
            self.state = 6348
            self.decimalLiteral()
            self.state = 6349
            self.match(MySqlParser.MINUS)
            self.state = 6350
            self.decimalLiteral()
            self.state = 6356 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 6351
                self.match(MySqlParser.COLON_SYMB)
                self.state = 6352
                self.decimalLiteral()
                self.state = 6353
                self.match(MySqlParser.MINUS)
                self.state = 6354
                self.decimalLiteral()
                self.state = 6358 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==1144):
                    break

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class XidContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.globalTableUid = None # XuidStringIdContext
            self.qualifier = None # XuidStringIdContext
            self.idFormat = None # DecimalLiteralContext

        def xuidStringId(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.XuidStringIdContext)
            else:
                return self.getTypedRuleContext(MySqlParser.XuidStringIdContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_xid

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterXid" ):
                listener.enterXid(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitXid" ):
                listener.exitXid(self)




    def xid(self):

        localctx = MySqlParser.XidContext(self, self._ctx, self.state)
        self.enterRule(localctx, 578, self.RULE_xid)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6360
            localctx.globalTableUid = self.xuidStringId()
            self.state = 6367
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1135:
                self.state = 6361
                self.match(MySqlParser.COMMA)
                self.state = 6362
                localctx.qualifier = self.xuidStringId()
                self.state = 6365
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1135:
                    self.state = 6363
                    self.match(MySqlParser.COMMA)
                    self.state = 6364
                    localctx.idFormat = self.decimalLiteral()




        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class XuidStringIdContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def BIT_STRING(self):
            return self.getToken(MySqlParser.BIT_STRING, 0)

        def HEXADECIMAL_LITERAL(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.HEXADECIMAL_LITERAL)
            else:
                return self.getToken(MySqlParser.HEXADECIMAL_LITERAL, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_xuidStringId

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterXuidStringId" ):
                listener.enterXuidStringId(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitXuidStringId" ):
                listener.exitXuidStringId(self)




    def xuidStringId(self):

        localctx = MySqlParser.XuidStringIdContext(self, self._ctx, self.state)
        self.enterRule(localctx, 580, self.RULE_xuidStringId)
        self._la = 0 # Token type
        try:
            self.state = 6376
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1148]:
                self.enterOuterAlt(localctx, 1)
                self.state = 6369
                self.match(MySqlParser.STRING_LITERAL)
                pass
            elif token in [1153]:
                self.enterOuterAlt(localctx, 2)
                self.state = 6370
                self.match(MySqlParser.BIT_STRING)
                pass
            elif token in [1150]:
                self.enterOuterAlt(localctx, 3)
                self.state = 6372 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 6371
                    self.match(MySqlParser.HEXADECIMAL_LITERAL)
                    self.state = 6374 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==1150):
                        break

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class AuthPluginContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_authPlugin

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAuthPlugin" ):
                listener.enterAuthPlugin(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAuthPlugin" ):
                listener.exitAuthPlugin(self)




    def authPlugin(self):

        localctx = MySqlParser.AuthPluginContext(self, self._ctx, self.state)
        self.enterRule(localctx, 582, self.RULE_authPlugin)
        try:
            self.state = 6380
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,936,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 6378
                self.uid()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 6379
                self.match(MySqlParser.STRING_LITERAL)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class UidContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def simpleId(self):
            return self.getTypedRuleContext(MySqlParser.SimpleIdContext,0)


        def CHARSET_REVERSE_QOUTE_STRING(self):
            return self.getToken(MySqlParser.CHARSET_REVERSE_QOUTE_STRING, 0)

        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_uid

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUid" ):
                listener.enterUid(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUid" ):
                listener.exitUid(self)




    def uid(self):

        localctx = MySqlParser.UidContext(self, self._ctx, self.state)
        self.enterRule(localctx, 584, self.RULE_uid)
        try:
            self.state = 6385
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [11, 14, 18, 29, 35, 37, 39, 42, 48, 55, 57, 59, 73, 77, 79, 85, 94, 97, 117, 121, 124, 130, 140, 141, 148, 150, 158, 168, 217, 218, 219, 220, 221, 226, 234, 237, 239, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 405, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 523, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 677, 678, 679, 680, 681, 682, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 717, 718, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1123, 1156]:
                self.enterOuterAlt(localctx, 1)
                self.state = 6382
                self.simpleId()
                pass
            elif token in [1145]:
                self.enterOuterAlt(localctx, 2)
                self.state = 6383
                self.match(MySqlParser.CHARSET_REVERSE_QOUTE_STRING)
                pass
            elif token in [1148]:
                self.enterOuterAlt(localctx, 3)
                self.state = 6384
                self.match(MySqlParser.STRING_LITERAL)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class SimpleIdContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ID(self):
            return self.getToken(MySqlParser.ID, 0)

        def charsetNameBase(self):
            return self.getTypedRuleContext(MySqlParser.CharsetNameBaseContext,0)


        def transactionLevelBase(self):
            return self.getTypedRuleContext(MySqlParser.TransactionLevelBaseContext,0)


        def engineNameBase(self):
            return self.getTypedRuleContext(MySqlParser.EngineNameBaseContext,0)


        def privilegesBase(self):
            return self.getTypedRuleContext(MySqlParser.PrivilegesBaseContext,0)


        def intervalTypeBase(self):
            return self.getTypedRuleContext(MySqlParser.IntervalTypeBaseContext,0)


        def dataTypeBase(self):
            return self.getTypedRuleContext(MySqlParser.DataTypeBaseContext,0)


        def keywordsCanBeId(self):
            return self.getTypedRuleContext(MySqlParser.KeywordsCanBeIdContext,0)


        def scalarFunctionName(self):
            return self.getTypedRuleContext(MySqlParser.ScalarFunctionNameContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_simpleId

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSimpleId" ):
                listener.enterSimpleId(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSimpleId" ):
                listener.exitSimpleId(self)




    def simpleId(self):

        localctx = MySqlParser.SimpleIdContext(self, self._ctx, self.state)
        self.enterRule(localctx, 586, self.RULE_simpleId)
        try:
            self.state = 6396
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,938,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 6387
                self.match(MySqlParser.ID)
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 6388
                self.charsetNameBase()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 6389
                self.transactionLevelBase()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 6390
                self.engineNameBase()
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 6391
                self.privilegesBase()
                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 6392
                self.intervalTypeBase()
                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 6393
                self.dataTypeBase()
                pass

            elif la_ == 8:
                self.enterOuterAlt(localctx, 8)
                self.state = 6394
                self.keywordsCanBeId()
                pass

            elif la_ == 9:
                self.enterOuterAlt(localctx, 9)
                self.state = 6395
                self.scalarFunctionName()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DottedIdContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DOT_ID(self):
            return self.getToken(MySqlParser.DOT_ID, 0)

        def DOT(self):
            return self.getToken(MySqlParser.DOT, 0)

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_dottedId

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDottedId" ):
                listener.enterDottedId(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDottedId" ):
                listener.exitDottedId(self)




    def dottedId(self):

        localctx = MySqlParser.DottedIdContext(self, self._ctx, self.state)
        self.enterRule(localctx, 588, self.RULE_dottedId)
        try:
            self.state = 6401
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1155]:
                self.enterOuterAlt(localctx, 1)
                self.state = 6398
                self.match(MySqlParser.DOT_ID)
                pass
            elif token in [1132]:
                self.enterOuterAlt(localctx, 2)
                self.state = 6399
                self.match(MySqlParser.DOT)
                self.state = 6400
                self.uid()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DecimalLiteralContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DECIMAL_LITERAL(self):
            return self.getToken(MySqlParser.DECIMAL_LITERAL, 0)

        def ZERO_DECIMAL(self):
            return self.getToken(MySqlParser.ZERO_DECIMAL, 0)

        def ONE_DECIMAL(self):
            return self.getToken(MySqlParser.ONE_DECIMAL, 0)

        def TWO_DECIMAL(self):
            return self.getToken(MySqlParser.TWO_DECIMAL, 0)

        def REAL_LITERAL(self):
            return self.getToken(MySqlParser.REAL_LITERAL, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_decimalLiteral

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDecimalLiteral" ):
                listener.enterDecimalLiteral(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDecimalLiteral" ):
                listener.exitDecimalLiteral(self)




    def decimalLiteral(self):

        localctx = MySqlParser.DecimalLiteralContext(self, self._ctx, self.state)
        self.enterRule(localctx, 590, self.RULE_decimalLiteral)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6403
            _la = self._input.LA(1)
            if not(((((_la - 1138)) & ~0x3f) == 0 and ((1 << (_la - 1138)) & 10247) != 0)):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class FileSizeLiteralContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FILESIZE_LITERAL(self):
            return self.getToken(MySqlParser.FILESIZE_LITERAL, 0)

        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_fileSizeLiteral

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFileSizeLiteral" ):
                listener.enterFileSizeLiteral(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFileSizeLiteral" ):
                listener.exitFileSizeLiteral(self)




    def fileSizeLiteral(self):

        localctx = MySqlParser.FileSizeLiteralContext(self, self._ctx, self.state)
        self.enterRule(localctx, 592, self.RULE_fileSizeLiteral)
        try:
            self.state = 6407
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1146]:
                self.enterOuterAlt(localctx, 1)
                self.state = 6405
                self.match(MySqlParser.FILESIZE_LITERAL)
                pass
            elif token in [1138, 1139, 1140, 1149, 1151]:
                self.enterOuterAlt(localctx, 2)
                self.state = 6406
                self.decimalLiteral()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class StringLiteralContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def STRING_LITERAL(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.STRING_LITERAL)
            else:
                return self.getToken(MySqlParser.STRING_LITERAL, i)

        def START_NATIONAL_STRING_LITERAL(self):
            return self.getToken(MySqlParser.START_NATIONAL_STRING_LITERAL, 0)

        def STRING_CHARSET_NAME(self):
            return self.getToken(MySqlParser.STRING_CHARSET_NAME, 0)

        def COLLATE(self):
            return self.getToken(MySqlParser.COLLATE, 0)

        def collationName(self):
            return self.getTypedRuleContext(MySqlParser.CollationNameContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_stringLiteral

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStringLiteral" ):
                listener.enterStringLiteral(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStringLiteral" ):
                listener.exitStringLiteral(self)




    def stringLiteral(self):

        localctx = MySqlParser.StringLiteralContext(self, self._ctx, self.state)
        self.enterRule(localctx, 594, self.RULE_stringLiteral)
        self._la = 0 # Token type
        try:
            self.state = 6432
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,947,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 6414
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [1148, 1154]:
                    self.state = 6410
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==1154:
                        self.state = 6409
                        self.match(MySqlParser.STRING_CHARSET_NAME)


                    self.state = 6412
                    self.match(MySqlParser.STRING_LITERAL)
                    pass
                elif token in [1147]:
                    self.state = 6413
                    self.match(MySqlParser.START_NATIONAL_STRING_LITERAL)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 6417 
                self._errHandler.sync(self)
                _alt = 1
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt == 1:
                        self.state = 6416
                        self.match(MySqlParser.STRING_LITERAL)

                    else:
                        raise NoViableAltException(self)
                    self.state = 6419 
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,943,self._ctx)

                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 6426
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [1148, 1154]:
                    self.state = 6422
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==1154:
                        self.state = 6421
                        self.match(MySqlParser.STRING_CHARSET_NAME)


                    self.state = 6424
                    self.match(MySqlParser.STRING_LITERAL)
                    pass
                elif token in [1147]:
                    self.state = 6425
                    self.match(MySqlParser.START_NATIONAL_STRING_LITERAL)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 6430
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,946,self._ctx)
                if la_ == 1:
                    self.state = 6428
                    self.match(MySqlParser.COLLATE)
                    self.state = 6429
                    self.collationName()


                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class BooleanLiteralContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def TRUE(self):
            return self.getToken(MySqlParser.TRUE, 0)

        def FALSE(self):
            return self.getToken(MySqlParser.FALSE, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_booleanLiteral

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterBooleanLiteral" ):
                listener.enterBooleanLiteral(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitBooleanLiteral" ):
                listener.exitBooleanLiteral(self)




    def booleanLiteral(self):

        localctx = MySqlParser.BooleanLiteralContext(self, self._ctx, self.state)
        self.enterRule(localctx, 596, self.RULE_booleanLiteral)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6434
            _la = self._input.LA(1)
            if not(_la==63 or _la==178):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class HexadecimalLiteralContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def HEXADECIMAL_LITERAL(self):
            return self.getToken(MySqlParser.HEXADECIMAL_LITERAL, 0)

        def STRING_CHARSET_NAME(self):
            return self.getToken(MySqlParser.STRING_CHARSET_NAME, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_hexadecimalLiteral

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHexadecimalLiteral" ):
                listener.enterHexadecimalLiteral(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHexadecimalLiteral" ):
                listener.exitHexadecimalLiteral(self)




    def hexadecimalLiteral(self):

        localctx = MySqlParser.HexadecimalLiteralContext(self, self._ctx, self.state)
        self.enterRule(localctx, 598, self.RULE_hexadecimalLiteral)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6437
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1154:
                self.state = 6436
                self.match(MySqlParser.STRING_CHARSET_NAME)


            self.state = 6439
            self.match(MySqlParser.HEXADECIMAL_LITERAL)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class NullNotnullContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def NULL_LITERAL(self):
            return self.getToken(MySqlParser.NULL_LITERAL, 0)

        def NULL_SPEC_LITERAL(self):
            return self.getToken(MySqlParser.NULL_SPEC_LITERAL, 0)

        def NOT(self):
            return self.getToken(MySqlParser.NOT, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_nullNotnull

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNullNotnull" ):
                listener.enterNullNotnull(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNullNotnull" ):
                listener.exitNullNotnull(self)




    def nullNotnull(self):

        localctx = MySqlParser.NullNotnullContext(self, self._ctx, self.state)
        self.enterRule(localctx, 600, self.RULE_nullNotnull)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6442
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==114:
                self.state = 6441
                self.match(MySqlParser.NOT)


            self.state = 6444
            _la = self._input.LA(1)
            if not(_la==116 or _la==1152):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ConstantContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.nullLiteral = None # Token

        def stringLiteral(self):
            return self.getTypedRuleContext(MySqlParser.StringLiteralContext,0)


        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)


        def MINUS(self):
            return self.getToken(MySqlParser.MINUS, 0)

        def hexadecimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.HexadecimalLiteralContext,0)


        def booleanLiteral(self):
            return self.getTypedRuleContext(MySqlParser.BooleanLiteralContext,0)


        def REAL_LITERAL(self):
            return self.getToken(MySqlParser.REAL_LITERAL, 0)

        def BIT_STRING(self):
            return self.getToken(MySqlParser.BIT_STRING, 0)

        def NULL_LITERAL(self):
            return self.getToken(MySqlParser.NULL_LITERAL, 0)

        def NULL_SPEC_LITERAL(self):
            return self.getToken(MySqlParser.NULL_SPEC_LITERAL, 0)

        def NOT(self):
            return self.getToken(MySqlParser.NOT, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_constant

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterConstant" ):
                listener.enterConstant(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitConstant" ):
                listener.exitConstant(self)




    def constant(self):

        localctx = MySqlParser.ConstantContext(self, self._ctx, self.state)
        self.enterRule(localctx, 602, self.RULE_constant)
        self._la = 0 # Token type
        try:
            self.state = 6458
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,951,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 6446
                self.stringLiteral()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 6447
                self.decimalLiteral()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 6448
                self.match(MySqlParser.MINUS)
                self.state = 6449
                self.decimalLiteral()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 6450
                self.hexadecimalLiteral()
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 6451
                self.booleanLiteral()
                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 6452
                self.match(MySqlParser.REAL_LITERAL)
                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 6453
                self.match(MySqlParser.BIT_STRING)
                pass

            elif la_ == 8:
                self.enterOuterAlt(localctx, 8)
                self.state = 6455
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==114:
                    self.state = 6454
                    self.match(MySqlParser.NOT)


                self.state = 6457
                localctx.nullLiteral = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==116 or _la==1152):
                    localctx.nullLiteral = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DataTypeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_dataType

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class SpatialDataTypeContext(DataTypeContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.DataTypeContext
            super().__init__(parser)
            self.typeName = None # Token
            self.copyFrom(ctx)

        def GEOMETRYCOLLECTION(self):
            return self.getToken(MySqlParser.GEOMETRYCOLLECTION, 0)
        def GEOMCOLLECTION(self):
            return self.getToken(MySqlParser.GEOMCOLLECTION, 0)
        def LINESTRING(self):
            return self.getToken(MySqlParser.LINESTRING, 0)
        def MULTILINESTRING(self):
            return self.getToken(MySqlParser.MULTILINESTRING, 0)
        def MULTIPOINT(self):
            return self.getToken(MySqlParser.MULTIPOINT, 0)
        def MULTIPOLYGON(self):
            return self.getToken(MySqlParser.MULTIPOLYGON, 0)
        def POINT(self):
            return self.getToken(MySqlParser.POINT, 0)
        def POLYGON(self):
            return self.getToken(MySqlParser.POLYGON, 0)
        def JSON(self):
            return self.getToken(MySqlParser.JSON, 0)
        def GEOMETRY(self):
            return self.getToken(MySqlParser.GEOMETRY, 0)
        def SRID(self):
            return self.getToken(MySqlParser.SRID, 0)
        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSpatialDataType" ):
                listener.enterSpatialDataType(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSpatialDataType" ):
                listener.exitSpatialDataType(self)


    class LongVarbinaryDataTypeContext(DataTypeContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.DataTypeContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def LONG(self):
            return self.getToken(MySqlParser.LONG, 0)
        def VARBINARY(self):
            return self.getToken(MySqlParser.VARBINARY, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLongVarbinaryDataType" ):
                listener.enterLongVarbinaryDataType(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLongVarbinaryDataType" ):
                listener.exitLongVarbinaryDataType(self)


    class CollectionDataTypeContext(DataTypeContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.DataTypeContext
            super().__init__(parser)
            self.typeName = None # Token
            self.copyFrom(ctx)

        def collectionOptions(self):
            return self.getTypedRuleContext(MySqlParser.CollectionOptionsContext,0)

        def ENUM(self):
            return self.getToken(MySqlParser.ENUM, 0)
        def SET(self):
            return self.getToken(MySqlParser.SET, 0)
        def BINARY(self):
            return self.getToken(MySqlParser.BINARY, 0)
        def charSet(self):
            return self.getTypedRuleContext(MySqlParser.CharSetContext,0)

        def charsetName(self):
            return self.getTypedRuleContext(MySqlParser.CharsetNameContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCollectionDataType" ):
                listener.enterCollectionDataType(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCollectionDataType" ):
                listener.exitCollectionDataType(self)


    class NationalVaryingStringDataTypeContext(DataTypeContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.DataTypeContext
            super().__init__(parser)
            self.typeName = None # Token
            self.copyFrom(ctx)

        def NATIONAL(self):
            return self.getToken(MySqlParser.NATIONAL, 0)
        def VARYING(self):
            return self.getToken(MySqlParser.VARYING, 0)
        def CHAR(self):
            return self.getToken(MySqlParser.CHAR, 0)
        def CHARACTER(self):
            return self.getToken(MySqlParser.CHARACTER, 0)
        def lengthOneDimension(self):
            return self.getTypedRuleContext(MySqlParser.LengthOneDimensionContext,0)

        def BINARY(self):
            return self.getToken(MySqlParser.BINARY, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNationalVaryingStringDataType" ):
                listener.enterNationalVaryingStringDataType(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNationalVaryingStringDataType" ):
                listener.exitNationalVaryingStringDataType(self)


    class DimensionDataTypeContext(DataTypeContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.DataTypeContext
            super().__init__(parser)
            self.typeName = None # Token
            self.copyFrom(ctx)

        def TINYINT(self):
            return self.getToken(MySqlParser.TINYINT, 0)
        def SMALLINT(self):
            return self.getToken(MySqlParser.SMALLINT, 0)
        def MEDIUMINT(self):
            return self.getToken(MySqlParser.MEDIUMINT, 0)
        def INT(self):
            return self.getToken(MySqlParser.INT, 0)
        def INTEGER(self):
            return self.getToken(MySqlParser.INTEGER, 0)
        def BIGINT(self):
            return self.getToken(MySqlParser.BIGINT, 0)
        def MIDDLEINT(self):
            return self.getToken(MySqlParser.MIDDLEINT, 0)
        def INT1(self):
            return self.getToken(MySqlParser.INT1, 0)
        def INT2(self):
            return self.getToken(MySqlParser.INT2, 0)
        def INT3(self):
            return self.getToken(MySqlParser.INT3, 0)
        def INT4(self):
            return self.getToken(MySqlParser.INT4, 0)
        def INT8(self):
            return self.getToken(MySqlParser.INT8, 0)
        def lengthOneDimension(self):
            return self.getTypedRuleContext(MySqlParser.LengthOneDimensionContext,0)

        def SIGNED(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.SIGNED)
            else:
                return self.getToken(MySqlParser.SIGNED, i)
        def UNSIGNED(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.UNSIGNED)
            else:
                return self.getToken(MySqlParser.UNSIGNED, i)
        def ZEROFILL(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.ZEROFILL)
            else:
                return self.getToken(MySqlParser.ZEROFILL, i)
        def REAL(self):
            return self.getToken(MySqlParser.REAL, 0)
        def lengthTwoDimension(self):
            return self.getTypedRuleContext(MySqlParser.LengthTwoDimensionContext,0)

        def DOUBLE(self):
            return self.getToken(MySqlParser.DOUBLE, 0)
        def PRECISION(self):
            return self.getToken(MySqlParser.PRECISION, 0)
        def DECIMAL(self):
            return self.getToken(MySqlParser.DECIMAL, 0)
        def DEC(self):
            return self.getToken(MySqlParser.DEC, 0)
        def FIXED(self):
            return self.getToken(MySqlParser.FIXED, 0)
        def NUMERIC(self):
            return self.getToken(MySqlParser.NUMERIC, 0)
        def FLOAT(self):
            return self.getToken(MySqlParser.FLOAT, 0)
        def FLOAT4(self):
            return self.getToken(MySqlParser.FLOAT4, 0)
        def FLOAT8(self):
            return self.getToken(MySqlParser.FLOAT8, 0)
        def lengthTwoOptionalDimension(self):
            return self.getTypedRuleContext(MySqlParser.LengthTwoOptionalDimensionContext,0)

        def BIT(self):
            return self.getToken(MySqlParser.BIT, 0)
        def TIME(self):
            return self.getToken(MySqlParser.TIME, 0)
        def TIMESTAMP(self):
            return self.getToken(MySqlParser.TIMESTAMP, 0)
        def DATETIME(self):
            return self.getToken(MySqlParser.DATETIME, 0)
        def BINARY(self):
            return self.getToken(MySqlParser.BINARY, 0)
        def VARBINARY(self):
            return self.getToken(MySqlParser.VARBINARY, 0)
        def BLOB(self):
            return self.getToken(MySqlParser.BLOB, 0)
        def YEAR(self):
            return self.getToken(MySqlParser.YEAR, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDimensionDataType" ):
                listener.enterDimensionDataType(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDimensionDataType" ):
                listener.exitDimensionDataType(self)


    class StringDataTypeContext(DataTypeContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.DataTypeContext
            super().__init__(parser)
            self.typeName = None # Token
            self.copyFrom(ctx)

        def CHAR(self):
            return self.getToken(MySqlParser.CHAR, 0)
        def CHARACTER(self):
            return self.getToken(MySqlParser.CHARACTER, 0)
        def VARCHAR(self):
            return self.getToken(MySqlParser.VARCHAR, 0)
        def TINYTEXT(self):
            return self.getToken(MySqlParser.TINYTEXT, 0)
        def TEXT(self):
            return self.getToken(MySqlParser.TEXT, 0)
        def MEDIUMTEXT(self):
            return self.getToken(MySqlParser.MEDIUMTEXT, 0)
        def LONGTEXT(self):
            return self.getToken(MySqlParser.LONGTEXT, 0)
        def NCHAR(self):
            return self.getToken(MySqlParser.NCHAR, 0)
        def NVARCHAR(self):
            return self.getToken(MySqlParser.NVARCHAR, 0)
        def LONG(self):
            return self.getToken(MySqlParser.LONG, 0)
        def VARYING(self):
            return self.getToken(MySqlParser.VARYING, 0)
        def lengthOneDimension(self):
            return self.getTypedRuleContext(MySqlParser.LengthOneDimensionContext,0)

        def BINARY(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.BINARY)
            else:
                return self.getToken(MySqlParser.BINARY, i)
        def charSet(self):
            return self.getTypedRuleContext(MySqlParser.CharSetContext,0)

        def charsetName(self):
            return self.getTypedRuleContext(MySqlParser.CharsetNameContext,0)

        def COLLATE(self):
            return self.getToken(MySqlParser.COLLATE, 0)
        def collationName(self):
            return self.getTypedRuleContext(MySqlParser.CollationNameContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStringDataType" ):
                listener.enterStringDataType(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStringDataType" ):
                listener.exitStringDataType(self)


    class LongVarcharDataTypeContext(DataTypeContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.DataTypeContext
            super().__init__(parser)
            self.typeName = None # Token
            self.copyFrom(ctx)

        def LONG(self):
            return self.getToken(MySqlParser.LONG, 0)
        def VARCHAR(self):
            return self.getToken(MySqlParser.VARCHAR, 0)
        def BINARY(self):
            return self.getToken(MySqlParser.BINARY, 0)
        def charSet(self):
            return self.getTypedRuleContext(MySqlParser.CharSetContext,0)

        def charsetName(self):
            return self.getTypedRuleContext(MySqlParser.CharsetNameContext,0)

        def COLLATE(self):
            return self.getToken(MySqlParser.COLLATE, 0)
        def collationName(self):
            return self.getTypedRuleContext(MySqlParser.CollationNameContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLongVarcharDataType" ):
                listener.enterLongVarcharDataType(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLongVarcharDataType" ):
                listener.exitLongVarcharDataType(self)


    class NationalStringDataTypeContext(DataTypeContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.DataTypeContext
            super().__init__(parser)
            self.typeName = None # Token
            self.copyFrom(ctx)

        def NATIONAL(self):
            return self.getToken(MySqlParser.NATIONAL, 0)
        def VARCHAR(self):
            return self.getToken(MySqlParser.VARCHAR, 0)
        def CHARACTER(self):
            return self.getToken(MySqlParser.CHARACTER, 0)
        def CHAR(self):
            return self.getToken(MySqlParser.CHAR, 0)
        def lengthOneDimension(self):
            return self.getTypedRuleContext(MySqlParser.LengthOneDimensionContext,0)

        def BINARY(self):
            return self.getToken(MySqlParser.BINARY, 0)
        def NCHAR(self):
            return self.getToken(MySqlParser.NCHAR, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNationalStringDataType" ):
                listener.enterNationalStringDataType(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNationalStringDataType" ):
                listener.exitNationalStringDataType(self)


    class SimpleDataTypeContext(DataTypeContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.DataTypeContext
            super().__init__(parser)
            self.typeName = None # Token
            self.copyFrom(ctx)

        def DATE(self):
            return self.getToken(MySqlParser.DATE, 0)
        def TINYBLOB(self):
            return self.getToken(MySqlParser.TINYBLOB, 0)
        def MEDIUMBLOB(self):
            return self.getToken(MySqlParser.MEDIUMBLOB, 0)
        def LONGBLOB(self):
            return self.getToken(MySqlParser.LONGBLOB, 0)
        def BOOL(self):
            return self.getToken(MySqlParser.BOOL, 0)
        def BOOLEAN(self):
            return self.getToken(MySqlParser.BOOLEAN, 0)
        def SERIAL(self):
            return self.getToken(MySqlParser.SERIAL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSimpleDataType" ):
                listener.enterSimpleDataType(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSimpleDataType" ):
                listener.exitSimpleDataType(self)



    def dataType(self):

        localctx = MySqlParser.DataTypeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 604, self.RULE_dataType)
        self._la = 0 # Token type
        try:
            self.state = 6586
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,980,self._ctx)
            if la_ == 1:
                localctx = MySqlParser.StringDataTypeContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 6460
                localctx.typeName = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==25 or ((((_la - 222)) & ~0x3f) == 0 and ((1 << (_la - 222)) & 31239) != 0) or _la==518):
                    localctx.typeName = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 6462
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==238:
                    self.state = 6461
                    self.match(MySqlParser.VARYING)


                self.state = 6465
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,953,self._ctx)
                if la_ == 1:
                    self.state = 6464
                    self.lengthOneDimension()


                self.state = 6468
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,954,self._ctx)
                if la_ == 1:
                    self.state = 6467
                    self.match(MySqlParser.BINARY)


                self.state = 6473
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,955,self._ctx)
                if la_ == 1:
                    self.state = 6470
                    self.charSet()
                    self.state = 6471
                    self.charsetName()


                self.state = 6478
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,956,self._ctx)
                if la_ == 1:
                    self.state = 6475
                    self.match(MySqlParser.COLLATE)
                    self.state = 6476
                    self.collationName()

                elif la_ == 2:
                    self.state = 6477
                    self.match(MySqlParser.BINARY)


                pass

            elif la_ == 2:
                localctx = MySqlParser.NationalVaryingStringDataTypeContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 6480
                self.match(MySqlParser.NATIONAL)
                self.state = 6481
                localctx.typeName = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==25 or _la==222):
                    localctx.typeName = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 6482
                self.match(MySqlParser.VARYING)
                self.state = 6484
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,957,self._ctx)
                if la_ == 1:
                    self.state = 6483
                    self.lengthOneDimension()


                self.state = 6487
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,958,self._ctx)
                if la_ == 1:
                    self.state = 6486
                    self.match(MySqlParser.BINARY)


                pass

            elif la_ == 3:
                localctx = MySqlParser.NationalStringDataTypeContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 6489
                self.match(MySqlParser.NATIONAL)
                self.state = 6490
                localctx.typeName = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==25 or _la==222 or _la==223):
                    localctx.typeName = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 6492
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,959,self._ctx)
                if la_ == 1:
                    self.state = 6491
                    self.lengthOneDimension()


                self.state = 6495
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,960,self._ctx)
                if la_ == 1:
                    self.state = 6494
                    self.match(MySqlParser.BINARY)


                pass

            elif la_ == 4:
                localctx = MySqlParser.NationalStringDataTypeContext(self, localctx)
                self.enterOuterAlt(localctx, 4)
                self.state = 6497
                self.match(MySqlParser.NCHAR)
                self.state = 6498
                localctx.typeName = self.match(MySqlParser.VARCHAR)
                self.state = 6500
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,961,self._ctx)
                if la_ == 1:
                    self.state = 6499
                    self.lengthOneDimension()


                self.state = 6503
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,962,self._ctx)
                if la_ == 1:
                    self.state = 6502
                    self.match(MySqlParser.BINARY)


                pass

            elif la_ == 5:
                localctx = MySqlParser.DimensionDataTypeContext(self, localctx)
                self.enterOuterAlt(localctx, 5)
                self.state = 6505
                localctx.typeName = self._input.LT(1)
                _la = self._input.LA(1)
                if not(((((_la - 196)) & ~0x3f) == 0 and ((1 << (_la - 196)) & 4095) != 0)):
                    localctx.typeName = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 6507
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,963,self._ctx)
                if la_ == 1:
                    self.state = 6506
                    self.lengthOneDimension()


                self.state = 6512
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,964,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 6509
                        _la = self._input.LA(1)
                        if not(_la==183 or _la==195 or _la==612):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume() 
                    self.state = 6514
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,964,self._ctx)

                pass

            elif la_ == 6:
                localctx = MySqlParser.DimensionDataTypeContext(self, localctx)
                self.enterOuterAlt(localctx, 6)
                self.state = 6515
                localctx.typeName = self.match(MySqlParser.REAL)
                self.state = 6517
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,965,self._ctx)
                if la_ == 1:
                    self.state = 6516
                    self.lengthTwoDimension()


                self.state = 6522
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,966,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 6519
                        _la = self._input.LA(1)
                        if not(_la==183 or _la==195 or _la==612):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume() 
                    self.state = 6524
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,966,self._ctx)

                pass

            elif la_ == 7:
                localctx = MySqlParser.DimensionDataTypeContext(self, localctx)
                self.enterOuterAlt(localctx, 7)
                self.state = 6525
                localctx.typeName = self.match(MySqlParser.DOUBLE)
                self.state = 6527
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==210:
                    self.state = 6526
                    self.match(MySqlParser.PRECISION)


                self.state = 6530
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,968,self._ctx)
                if la_ == 1:
                    self.state = 6529
                    self.lengthTwoDimension()


                self.state = 6535
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,969,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 6532
                        _la = self._input.LA(1)
                        if not(_la==183 or _la==195 or _la==612):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume() 
                    self.state = 6537
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,969,self._ctx)

                pass

            elif la_ == 8:
                localctx = MySqlParser.DimensionDataTypeContext(self, localctx)
                self.enterOuterAlt(localctx, 8)
                self.state = 6538
                localctx.typeName = self._input.LT(1)
                _la = self._input.LA(1)
                if not(((((_la - 211)) & ~0x3f) == 0 and ((1 << (_la - 211)) & 63) != 0) or _la==431):
                    localctx.typeName = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 6540
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,970,self._ctx)
                if la_ == 1:
                    self.state = 6539
                    self.lengthTwoOptionalDimension()


                self.state = 6545
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,971,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 6542
                        _la = self._input.LA(1)
                        if not(_la==183 or _la==195 or _la==612):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume() 
                    self.state = 6547
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,971,self._ctx)

                pass

            elif la_ == 9:
                localctx = MySqlParser.SimpleDataTypeContext(self, localctx)
                self.enterOuterAlt(localctx, 9)
                self.state = 6548
                localctx.typeName = self._input.LT(1)
                _la = self._input.LA(1)
                if not(((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & 4237313) != 0) or _la==348 or _la==349):
                    localctx.typeName = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass

            elif la_ == 10:
                localctx = MySqlParser.DimensionDataTypeContext(self, localctx)
                self.enterOuterAlt(localctx, 10)
                self.state = 6549
                localctx.typeName = self._input.LT(1)
                _la = self._input.LA(1)
                if not(((((_la - 218)) & ~0x3f) == 0 and ((1 << (_la - 218)) & 2831) != 0) or _la==346):
                    localctx.typeName = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 6551
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,972,self._ctx)
                if la_ == 1:
                    self.state = 6550
                    self.lengthOneDimension()


                pass

            elif la_ == 11:
                localctx = MySqlParser.CollectionDataTypeContext(self, localctx)
                self.enterOuterAlt(localctx, 11)
                self.state = 6553
                localctx.typeName = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==153 or _la==237):
                    localctx.typeName = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 6554
                self.collectionOptions()
                self.state = 6556
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,973,self._ctx)
                if la_ == 1:
                    self.state = 6555
                    self.match(MySqlParser.BINARY)


                self.state = 6561
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,974,self._ctx)
                if la_ == 1:
                    self.state = 6558
                    self.charSet()
                    self.state = 6559
                    self.charsetName()


                pass

            elif la_ == 12:
                localctx = MySqlParser.SpatialDataTypeContext(self, localctx)
                self.enterOuterAlt(localctx, 12)
                self.state = 6563
                localctx.typeName = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==466 or ((((_la - 803)) & ~0x3f) == 0 and ((1 << (_la - 803)) & 511) != 0)):
                    localctx.typeName = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 6566
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,975,self._ctx)
                if la_ == 1:
                    self.state = 6564
                    self.match(MySqlParser.SRID)
                    self.state = 6565
                    self.decimalLiteral()


                pass

            elif la_ == 13:
                localctx = MySqlParser.LongVarcharDataTypeContext(self, localctx)
                self.enterOuterAlt(localctx, 13)
                self.state = 6568
                localctx.typeName = self.match(MySqlParser.LONG)
                self.state = 6570
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==223:
                    self.state = 6569
                    self.match(MySqlParser.VARCHAR)


                self.state = 6573
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,977,self._ctx)
                if la_ == 1:
                    self.state = 6572
                    self.match(MySqlParser.BINARY)


                self.state = 6578
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,978,self._ctx)
                if la_ == 1:
                    self.state = 6575
                    self.charSet()
                    self.state = 6576
                    self.charsetName()


                self.state = 6582
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,979,self._ctx)
                if la_ == 1:
                    self.state = 6580
                    self.match(MySqlParser.COLLATE)
                    self.state = 6581
                    self.collationName()


                pass

            elif la_ == 14:
                localctx = MySqlParser.LongVarbinaryDataTypeContext(self, localctx)
                self.enterOuterAlt(localctx, 14)
                self.state = 6584
                self.match(MySqlParser.LONG)
                self.state = 6585
                self.match(MySqlParser.VARBINARY)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CollectionOptionsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def STRING_LITERAL(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.STRING_LITERAL)
            else:
                return self.getToken(MySqlParser.STRING_LITERAL, i)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_collectionOptions

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCollectionOptions" ):
                listener.enterCollectionOptions(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCollectionOptions" ):
                listener.exitCollectionOptions(self)




    def collectionOptions(self):

        localctx = MySqlParser.CollectionOptionsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 606, self.RULE_collectionOptions)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6588
            self.match(MySqlParser.LR_BRACKET)
            self.state = 6589
            self.match(MySqlParser.STRING_LITERAL)
            self.state = 6594
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 6590
                self.match(MySqlParser.COMMA)
                self.state = 6591
                self.match(MySqlParser.STRING_LITERAL)
                self.state = 6596
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 6597
            self.match(MySqlParser.RR_BRACKET)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ConvertedDataTypeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.typeName = None # Token

        def CHAR(self):
            return self.getToken(MySqlParser.CHAR, 0)

        def SIGNED(self):
            return self.getToken(MySqlParser.SIGNED, 0)

        def UNSIGNED(self):
            return self.getToken(MySqlParser.UNSIGNED, 0)

        def ARRAY(self):
            return self.getToken(MySqlParser.ARRAY, 0)

        def BINARY(self):
            return self.getToken(MySqlParser.BINARY, 0)

        def NCHAR(self):
            return self.getToken(MySqlParser.NCHAR, 0)

        def FLOAT(self):
            return self.getToken(MySqlParser.FLOAT, 0)

        def DATE(self):
            return self.getToken(MySqlParser.DATE, 0)

        def DATETIME(self):
            return self.getToken(MySqlParser.DATETIME, 0)

        def TIME(self):
            return self.getToken(MySqlParser.TIME, 0)

        def YEAR(self):
            return self.getToken(MySqlParser.YEAR, 0)

        def JSON(self):
            return self.getToken(MySqlParser.JSON, 0)

        def INT(self):
            return self.getToken(MySqlParser.INT, 0)

        def INTEGER(self):
            return self.getToken(MySqlParser.INTEGER, 0)

        def DOUBLE(self):
            return self.getToken(MySqlParser.DOUBLE, 0)

        def DECIMAL(self):
            return self.getToken(MySqlParser.DECIMAL, 0)

        def DEC(self):
            return self.getToken(MySqlParser.DEC, 0)

        def lengthOneDimension(self):
            return self.getTypedRuleContext(MySqlParser.LengthOneDimensionContext,0)


        def charSet(self):
            return self.getTypedRuleContext(MySqlParser.CharSetContext,0)


        def charsetName(self):
            return self.getTypedRuleContext(MySqlParser.CharsetNameContext,0)


        def lengthTwoOptionalDimension(self):
            return self.getTypedRuleContext(MySqlParser.LengthTwoOptionalDimensionContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_convertedDataType

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterConvertedDataType" ):
                listener.enterConvertedDataType(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitConvertedDataType" ):
                listener.exitConvertedDataType(self)




    def convertedDataType(self):

        localctx = MySqlParser.ConvertedDataTypeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 608, self.RULE_convertedDataType)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6621
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [211, 226, 518]:
                self.state = 6599
                localctx.typeName = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==211 or _la==226 or _la==518):
                    localctx.typeName = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 6601
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1133:
                    self.state = 6600
                    self.lengthOneDimension()


                pass
            elif token in [222]:
                self.state = 6603
                localctx.typeName = self.match(MySqlParser.CHAR)
                self.state = 6605
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1133:
                    self.state = 6604
                    self.lengthOneDimension()


                self.state = 6610
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==25 or _la==222 or _la==841:
                    self.state = 6607
                    self.charSet()
                    self.state = 6608
                    self.charsetName()


                pass
            elif token in [200, 206, 209, 217, 218, 220, 221, 466]:
                self.state = 6612
                localctx.typeName = self._input.LT(1)
                _la = self._input.LA(1)
                if not(((((_la - 200)) & ~0x3f) == 0 and ((1 << (_la - 200)) & 3539521) != 0) or _la==466):
                    localctx.typeName = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass
            elif token in [214, 215]:
                self.state = 6613
                localctx.typeName = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==214 or _la==215):
                    localctx.typeName = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 6615
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1133:
                    self.state = 6614
                    self.lengthTwoOptionalDimension()


                pass
            elif token in [183, 612]:
                self.state = 6617
                _la = self._input.LA(1)
                if not(_la==183 or _la==612):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 6619
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==200 or _la==206:
                    self.state = 6618
                    _la = self._input.LA(1)
                    if not(_la==200 or _la==206):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                pass
            else:
                raise NoViableAltException(self)

            self.state = 6624
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==11:
                self.state = 6623
                self.match(MySqlParser.ARRAY)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class LengthOneDimensionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)


        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_lengthOneDimension

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLengthOneDimension" ):
                listener.enterLengthOneDimension(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLengthOneDimension" ):
                listener.exitLengthOneDimension(self)




    def lengthOneDimension(self):

        localctx = MySqlParser.LengthOneDimensionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 610, self.RULE_lengthOneDimension)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6626
            self.match(MySqlParser.LR_BRACKET)
            self.state = 6627
            self.decimalLiteral()
            self.state = 6628
            self.match(MySqlParser.RR_BRACKET)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class LengthTwoDimensionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def decimalLiteral(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.DecimalLiteralContext)
            else:
                return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,i)


        def COMMA(self):
            return self.getToken(MySqlParser.COMMA, 0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_lengthTwoDimension

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLengthTwoDimension" ):
                listener.enterLengthTwoDimension(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLengthTwoDimension" ):
                listener.exitLengthTwoDimension(self)




    def lengthTwoDimension(self):

        localctx = MySqlParser.LengthTwoDimensionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 612, self.RULE_lengthTwoDimension)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6630
            self.match(MySqlParser.LR_BRACKET)
            self.state = 6631
            self.decimalLiteral()
            self.state = 6632
            self.match(MySqlParser.COMMA)
            self.state = 6633
            self.decimalLiteral()
            self.state = 6634
            self.match(MySqlParser.RR_BRACKET)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class LengthTwoOptionalDimensionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def decimalLiteral(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.DecimalLiteralContext)
            else:
                return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,i)


        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def COMMA(self):
            return self.getToken(MySqlParser.COMMA, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_lengthTwoOptionalDimension

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLengthTwoOptionalDimension" ):
                listener.enterLengthTwoOptionalDimension(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLengthTwoOptionalDimension" ):
                listener.exitLengthTwoOptionalDimension(self)




    def lengthTwoOptionalDimension(self):

        localctx = MySqlParser.LengthTwoOptionalDimensionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 614, self.RULE_lengthTwoOptionalDimension)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6636
            self.match(MySqlParser.LR_BRACKET)
            self.state = 6637
            self.decimalLiteral()
            self.state = 6640
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1135:
                self.state = 6638
                self.match(MySqlParser.COMMA)
                self.state = 6639
                self.decimalLiteral()


            self.state = 6642
            self.match(MySqlParser.RR_BRACKET)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class UidListContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def uid(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.UidContext)
            else:
                return self.getTypedRuleContext(MySqlParser.UidContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_uidList

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUidList" ):
                listener.enterUidList(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUidList" ):
                listener.exitUidList(self)




    def uidList(self):

        localctx = MySqlParser.UidListContext(self, self._ctx, self.state)
        self.enterRule(localctx, 616, self.RULE_uidList)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6644
            self.uid()
            self.state = 6649
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,990,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 6645
                    self.match(MySqlParser.COMMA)
                    self.state = 6646
                    self.uid() 
                self.state = 6651
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,990,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class FullColumnNameListContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def fullColumnName(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.FullColumnNameContext)
            else:
                return self.getTypedRuleContext(MySqlParser.FullColumnNameContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_fullColumnNameList

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFullColumnNameList" ):
                listener.enterFullColumnNameList(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFullColumnNameList" ):
                listener.exitFullColumnNameList(self)




    def fullColumnNameList(self):

        localctx = MySqlParser.FullColumnNameListContext(self, self._ctx, self.state)
        self.enterRule(localctx, 618, self.RULE_fullColumnNameList)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6652
            self.fullColumnName()
            self.state = 6657
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 6653
                self.match(MySqlParser.COMMA)
                self.state = 6654
                self.fullColumnName()
                self.state = 6659
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class TablesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def tableName(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.TableNameContext)
            else:
                return self.getTypedRuleContext(MySqlParser.TableNameContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_tables

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTables" ):
                listener.enterTables(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTables" ):
                listener.exitTables(self)




    def tables(self):

        localctx = MySqlParser.TablesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 620, self.RULE_tables)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6660
            self.tableName()
            self.state = 6665
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,992,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 6661
                    self.match(MySqlParser.COMMA)
                    self.state = 6662
                    self.tableName() 
                self.state = 6667
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,992,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class IndexColumnNamesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def indexColumnName(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.IndexColumnNameContext)
            else:
                return self.getTypedRuleContext(MySqlParser.IndexColumnNameContext,i)


        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_indexColumnNames

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIndexColumnNames" ):
                listener.enterIndexColumnNames(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIndexColumnNames" ):
                listener.exitIndexColumnNames(self)




    def indexColumnNames(self):

        localctx = MySqlParser.IndexColumnNamesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 622, self.RULE_indexColumnNames)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6668
            self.match(MySqlParser.LR_BRACKET)
            self.state = 6669
            self.indexColumnName()
            self.state = 6674
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 6670
                self.match(MySqlParser.COMMA)
                self.state = 6671
                self.indexColumnName()
                self.state = 6676
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 6677
            self.match(MySqlParser.RR_BRACKET)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ExpressionsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ExpressionContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_expressions

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterExpressions" ):
                listener.enterExpressions(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitExpressions" ):
                listener.exitExpressions(self)




    def expressions(self):

        localctx = MySqlParser.ExpressionsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 624, self.RULE_expressions)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6679
            self.expression(0)
            self.state = 6684
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 6680
                self.match(MySqlParser.COMMA)
                self.state = 6681
                self.expression(0)
                self.state = 6686
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ExpressionsWithDefaultsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def expressionOrDefault(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ExpressionOrDefaultContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ExpressionOrDefaultContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_expressionsWithDefaults

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterExpressionsWithDefaults" ):
                listener.enterExpressionsWithDefaults(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitExpressionsWithDefaults" ):
                listener.exitExpressionsWithDefaults(self)




    def expressionsWithDefaults(self):

        localctx = MySqlParser.ExpressionsWithDefaultsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 626, self.RULE_expressionsWithDefaults)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6687
            self.expressionOrDefault()
            self.state = 6692
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 6688
                self.match(MySqlParser.COMMA)
                self.state = 6689
                self.expressionOrDefault()
                self.state = 6694
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ConstantsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def constant(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ConstantContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ConstantContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_constants

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterConstants" ):
                listener.enterConstants(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitConstants" ):
                listener.exitConstants(self)




    def constants(self):

        localctx = MySqlParser.ConstantsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 628, self.RULE_constants)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6695
            self.constant()
            self.state = 6700
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 6696
                self.match(MySqlParser.COMMA)
                self.state = 6697
                self.constant()
                self.state = 6702
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class SimpleStringsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def STRING_LITERAL(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.STRING_LITERAL)
            else:
                return self.getToken(MySqlParser.STRING_LITERAL, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_simpleStrings

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSimpleStrings" ):
                listener.enterSimpleStrings(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSimpleStrings" ):
                listener.exitSimpleStrings(self)




    def simpleStrings(self):

        localctx = MySqlParser.SimpleStringsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 630, self.RULE_simpleStrings)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6703
            self.match(MySqlParser.STRING_LITERAL)
            self.state = 6708
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 6704
                self.match(MySqlParser.COMMA)
                self.state = 6705
                self.match(MySqlParser.STRING_LITERAL)
                self.state = 6710
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class UserVariablesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LOCAL_ID(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.LOCAL_ID)
            else:
                return self.getToken(MySqlParser.LOCAL_ID, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_userVariables

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUserVariables" ):
                listener.enterUserVariables(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUserVariables" ):
                listener.exitUserVariables(self)




    def userVariables(self):

        localctx = MySqlParser.UserVariablesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 632, self.RULE_userVariables)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6711
            self.match(MySqlParser.LOCAL_ID)
            self.state = 6716
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 6712
                self.match(MySqlParser.COMMA)
                self.state = 6713
                self.match(MySqlParser.LOCAL_ID)
                self.state = 6718
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DefaultValueContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def NULL_LITERAL(self):
            return self.getToken(MySqlParser.NULL_LITERAL, 0)

        def CAST(self):
            return self.getToken(MySqlParser.CAST, 0)

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def AS(self):
            return self.getToken(MySqlParser.AS, 0)

        def convertedDataType(self):
            return self.getTypedRuleContext(MySqlParser.ConvertedDataTypeContext,0)


        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def constant(self):
            return self.getTypedRuleContext(MySqlParser.ConstantContext,0)


        def unaryOperator(self):
            return self.getTypedRuleContext(MySqlParser.UnaryOperatorContext,0)


        def currentTimestamp(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.CurrentTimestampContext)
            else:
                return self.getTypedRuleContext(MySqlParser.CurrentTimestampContext,i)


        def ON(self):
            return self.getToken(MySqlParser.ON, 0)

        def UPDATE(self):
            return self.getToken(MySqlParser.UPDATE, 0)

        def fullId(self):
            return self.getTypedRuleContext(MySqlParser.FullIdContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_defaultValue

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDefaultValue" ):
                listener.enterDefaultValue(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDefaultValue" ):
                listener.exitDefaultValue(self)




    def defaultValue(self):

        localctx = MySqlParser.DefaultValueContext(self, self._ctx, self.state)
        self.enterRule(localctx, 634, self.RULE_defaultValue)
        try:
            self.state = 6745
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1001,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 6719
                self.match(MySqlParser.NULL_LITERAL)
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 6720
                self.match(MySqlParser.CAST)
                self.state = 6721
                self.match(MySqlParser.LR_BRACKET)
                self.state = 6722
                self.expression(0)
                self.state = 6723
                self.match(MySqlParser.AS)
                self.state = 6724
                self.convertedDataType()
                self.state = 6725
                self.match(MySqlParser.RR_BRACKET)
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 6728
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,999,self._ctx)
                if la_ == 1:
                    self.state = 6727
                    self.unaryOperator()


                self.state = 6730
                self.constant()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 6731
                self.currentTimestamp()
                self.state = 6735
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1000,self._ctx)
                if la_ == 1:
                    self.state = 6732
                    self.match(MySqlParser.ON)
                    self.state = 6733
                    self.match(MySqlParser.UPDATE)
                    self.state = 6734
                    self.currentTimestamp()


                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 6737
                self.match(MySqlParser.LR_BRACKET)
                self.state = 6738
                self.expression(0)
                self.state = 6739
                self.match(MySqlParser.RR_BRACKET)
                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 6741
                self.match(MySqlParser.LR_BRACKET)
                self.state = 6742
                self.fullId()
                self.state = 6743
                self.match(MySqlParser.RR_BRACKET)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CurrentTimestampContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def NOW(self):
            return self.getToken(MySqlParser.NOW, 0)

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def CURRENT_TIMESTAMP(self):
            return self.getToken(MySqlParser.CURRENT_TIMESTAMP, 0)

        def LOCALTIME(self):
            return self.getToken(MySqlParser.LOCALTIME, 0)

        def LOCALTIMESTAMP(self):
            return self.getToken(MySqlParser.LOCALTIMESTAMP, 0)

        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_currentTimestamp

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCurrentTimestamp" ):
                listener.enterCurrentTimestamp(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCurrentTimestamp" ):
                listener.exitCurrentTimestamp(self)




    def currentTimestamp(self):

        localctx = MySqlParser.CurrentTimestampContext(self, self._ctx, self.state)
        self.enterRule(localctx, 636, self.RULE_currentTimestamp)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6761
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [315, 316, 322]:
                self.state = 6747
                _la = self._input.LA(1)
                if not(((((_la - 315)) & ~0x3f) == 0 and ((1 << (_la - 315)) & 131) != 0)):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 6753
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1003,self._ctx)
                if la_ == 1:
                    self.state = 6748
                    self.match(MySqlParser.LR_BRACKET)
                    self.state = 6750
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if ((((_la - 1138)) & ~0x3f) == 0 and ((1 << (_la - 1138)) & 10247) != 0):
                        self.state = 6749
                        self.decimalLiteral()


                    self.state = 6752
                    self.match(MySqlParser.RR_BRACKET)


                pass
            elif token in [323]:
                self.state = 6755
                self.match(MySqlParser.NOW)
                self.state = 6756
                self.match(MySqlParser.LR_BRACKET)
                self.state = 6758
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if ((((_la - 1138)) & ~0x3f) == 0 and ((1 << (_la - 1138)) & 10247) != 0):
                    self.state = 6757
                    self.decimalLiteral()


                self.state = 6760
                self.match(MySqlParser.RR_BRACKET)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ExpressionOrDefaultContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_expressionOrDefault

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterExpressionOrDefault" ):
                listener.enterExpressionOrDefault(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitExpressionOrDefault" ):
                listener.exitExpressionOrDefault(self)




    def expressionOrDefault(self):

        localctx = MySqlParser.ExpressionOrDefaultContext(self, self._ctx, self.state)
        self.enterRule(localctx, 638, self.RULE_expressionOrDefault)
        try:
            self.state = 6765
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1006,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 6763
                self.expression(0)
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 6764
                self.match(MySqlParser.DEFAULT)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class IfExistsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def IF(self):
            return self.getToken(MySqlParser.IF, 0)

        def EXISTS(self):
            return self.getToken(MySqlParser.EXISTS, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_ifExists

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIfExists" ):
                listener.enterIfExists(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIfExists" ):
                listener.exitIfExists(self)




    def ifExists(self):

        localctx = MySqlParser.IfExistsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 640, self.RULE_ifExists)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6767
            self.match(MySqlParser.IF)
            self.state = 6768
            self.match(MySqlParser.EXISTS)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class IfNotExistsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def IF(self):
            return self.getToken(MySqlParser.IF, 0)

        def NOT(self):
            return self.getToken(MySqlParser.NOT, 0)

        def EXISTS(self):
            return self.getToken(MySqlParser.EXISTS, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_ifNotExists

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIfNotExists" ):
                listener.enterIfNotExists(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIfNotExists" ):
                listener.exitIfNotExists(self)




    def ifNotExists(self):

        localctx = MySqlParser.IfNotExistsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 642, self.RULE_ifNotExists)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6770
            self.match(MySqlParser.IF)
            self.state = 6771
            self.match(MySqlParser.NOT)
            self.state = 6772
            self.match(MySqlParser.EXISTS)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class OrReplaceContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def OR(self):
            return self.getToken(MySqlParser.OR, 0)

        def REPLACE(self):
            return self.getToken(MySqlParser.REPLACE, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_orReplace

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOrReplace" ):
                listener.enterOrReplace(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOrReplace" ):
                listener.exitOrReplace(self)




    def orReplace(self):

        localctx = MySqlParser.OrReplaceContext(self, self._ctx, self.state)
        self.enterRule(localctx, 644, self.RULE_orReplace)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6774
            self.match(MySqlParser.OR)
            self.state = 6775
            self.match(MySqlParser.REPLACE)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class WaitNowaitClauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def WAIT(self):
            return self.getToken(MySqlParser.WAIT, 0)

        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)


        def NOWAIT(self):
            return self.getToken(MySqlParser.NOWAIT, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_waitNowaitClause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterWaitNowaitClause" ):
                listener.enterWaitNowaitClause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitWaitNowaitClause" ):
                listener.exitWaitNowaitClause(self)




    def waitNowaitClause(self):

        localctx = MySqlParser.WaitNowaitClauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 646, self.RULE_waitNowaitClause)
        try:
            self.state = 6780
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [674]:
                self.enterOuterAlt(localctx, 1)
                self.state = 6777
                self.match(MySqlParser.WAIT)
                self.state = 6778
                self.decimalLiteral()
                pass
            elif token in [527]:
                self.enterOuterAlt(localctx, 2)
                self.state = 6779
                self.match(MySqlParser.NOWAIT)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class FunctionCallContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_functionCall

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class SpecificFunctionCallContext(FunctionCallContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.FunctionCallContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def specificFunction(self):
            return self.getTypedRuleContext(MySqlParser.SpecificFunctionContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSpecificFunctionCall" ):
                listener.enterSpecificFunctionCall(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSpecificFunctionCall" ):
                listener.exitSpecificFunctionCall(self)


    class PasswordFunctionCallContext(FunctionCallContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.FunctionCallContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def passwordFunctionClause(self):
            return self.getTypedRuleContext(MySqlParser.PasswordFunctionClauseContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPasswordFunctionCall" ):
                listener.enterPasswordFunctionCall(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPasswordFunctionCall" ):
                listener.exitPasswordFunctionCall(self)


    class UdfFunctionCallContext(FunctionCallContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.FunctionCallContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def fullId(self):
            return self.getTypedRuleContext(MySqlParser.FullIdContext,0)

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def functionArgs(self):
            return self.getTypedRuleContext(MySqlParser.FunctionArgsContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUdfFunctionCall" ):
                listener.enterUdfFunctionCall(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUdfFunctionCall" ):
                listener.exitUdfFunctionCall(self)


    class NonAggregateFunctionCallContext(FunctionCallContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.FunctionCallContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def nonAggregateWindowedFunction(self):
            return self.getTypedRuleContext(MySqlParser.NonAggregateWindowedFunctionContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNonAggregateFunctionCall" ):
                listener.enterNonAggregateFunctionCall(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNonAggregateFunctionCall" ):
                listener.exitNonAggregateFunctionCall(self)


    class AggregateFunctionCallContext(FunctionCallContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.FunctionCallContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def aggregateWindowedFunction(self):
            return self.getTypedRuleContext(MySqlParser.AggregateWindowedFunctionContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAggregateFunctionCall" ):
                listener.enterAggregateFunctionCall(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAggregateFunctionCall" ):
                listener.exitAggregateFunctionCall(self)


    class ScalarFunctionCallContext(FunctionCallContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.FunctionCallContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def scalarFunctionName(self):
            return self.getTypedRuleContext(MySqlParser.ScalarFunctionNameContext,0)

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def functionArgs(self):
            return self.getTypedRuleContext(MySqlParser.FunctionArgsContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterScalarFunctionCall" ):
                listener.enterScalarFunctionCall(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitScalarFunctionCall" ):
                listener.exitScalarFunctionCall(self)



    def functionCall(self):

        localctx = MySqlParser.FunctionCallContext(self, self._ctx, self.state)
        self.enterRule(localctx, 648, self.RULE_functionCall)
        try:
            self.state = 6800
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1010,self._ctx)
            if la_ == 1:
                localctx = MySqlParser.SpecificFunctionCallContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 6782
                self.specificFunction()
                pass

            elif la_ == 2:
                localctx = MySqlParser.AggregateFunctionCallContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 6783
                self.aggregateWindowedFunction()
                pass

            elif la_ == 3:
                localctx = MySqlParser.NonAggregateFunctionCallContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 6784
                self.nonAggregateWindowedFunction()
                pass

            elif la_ == 4:
                localctx = MySqlParser.ScalarFunctionCallContext(self, localctx)
                self.enterOuterAlt(localctx, 4)
                self.state = 6785
                self.scalarFunctionName()
                self.state = 6786
                self.match(MySqlParser.LR_BRACKET)
                self.state = 6788
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1008,self._ctx)
                if la_ == 1:
                    self.state = 6787
                    self.functionArgs()


                self.state = 6790
                self.match(MySqlParser.RR_BRACKET)
                pass

            elif la_ == 5:
                localctx = MySqlParser.UdfFunctionCallContext(self, localctx)
                self.enterOuterAlt(localctx, 5)
                self.state = 6792
                self.fullId()
                self.state = 6793
                self.match(MySqlParser.LR_BRACKET)
                self.state = 6795
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1009,self._ctx)
                if la_ == 1:
                    self.state = 6794
                    self.functionArgs()


                self.state = 6797
                self.match(MySqlParser.RR_BRACKET)
                pass

            elif la_ == 6:
                localctx = MySqlParser.PasswordFunctionCallContext(self, localctx)
                self.enterOuterAlt(localctx, 6)
                self.state = 6799
                self.passwordFunctionClause()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class SpecificFunctionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_specificFunction

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class PositionFunctionCallContext(SpecificFunctionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SpecificFunctionContext
            super().__init__(parser)
            self.positionString = None # StringLiteralContext
            self.positionExpression = None # ExpressionContext
            self.inString = None # StringLiteralContext
            self.inExpression = None # ExpressionContext
            self.copyFrom(ctx)

        def POSITION(self):
            return self.getToken(MySqlParser.POSITION, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def IN(self):
            return self.getToken(MySqlParser.IN, 0)
        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def stringLiteral(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.StringLiteralContext)
            else:
                return self.getTypedRuleContext(MySqlParser.StringLiteralContext,i)

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ExpressionContext,i)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPositionFunctionCall" ):
                listener.enterPositionFunctionCall(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPositionFunctionCall" ):
                listener.exitPositionFunctionCall(self)


    class TrimFunctionCallContext(SpecificFunctionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SpecificFunctionContext
            super().__init__(parser)
            self.positioinForm = None # Token
            self.sourceString = None # StringLiteralContext
            self.sourceExpression = None # ExpressionContext
            self.fromString = None # StringLiteralContext
            self.fromExpression = None # ExpressionContext
            self.copyFrom(ctx)

        def TRIM(self):
            return self.getToken(MySqlParser.TRIM, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def FROM(self):
            return self.getToken(MySqlParser.FROM, 0)
        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def BOTH(self):
            return self.getToken(MySqlParser.BOTH, 0)
        def LEADING(self):
            return self.getToken(MySqlParser.LEADING, 0)
        def TRAILING(self):
            return self.getToken(MySqlParser.TRAILING, 0)
        def stringLiteral(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.StringLiteralContext)
            else:
                return self.getTypedRuleContext(MySqlParser.StringLiteralContext,i)

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ExpressionContext,i)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTrimFunctionCall" ):
                listener.enterTrimFunctionCall(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTrimFunctionCall" ):
                listener.exitTrimFunctionCall(self)


    class JsonValueFunctionCallContext(SpecificFunctionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SpecificFunctionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def JSON_VALUE(self):
            return self.getToken(MySqlParser.JSON_VALUE, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ExpressionContext,i)

        def COMMA(self):
            return self.getToken(MySqlParser.COMMA, 0)
        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def RETURNING(self):
            return self.getToken(MySqlParser.RETURNING, 0)
        def convertedDataType(self):
            return self.getTypedRuleContext(MySqlParser.ConvertedDataTypeContext,0)

        def jsonOnEmpty(self):
            return self.getTypedRuleContext(MySqlParser.JsonOnEmptyContext,0)

        def jsonOnError(self):
            return self.getTypedRuleContext(MySqlParser.JsonOnErrorContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJsonValueFunctionCall" ):
                listener.enterJsonValueFunctionCall(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJsonValueFunctionCall" ):
                listener.exitJsonValueFunctionCall(self)


    class CaseFunctionCallContext(SpecificFunctionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SpecificFunctionContext
            super().__init__(parser)
            self.elseArg = None # FunctionArgContext
            self.copyFrom(ctx)

        def CASE(self):
            return self.getToken(MySqlParser.CASE, 0)
        def END(self):
            return self.getToken(MySqlParser.END, 0)
        def caseFuncAlternative(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.CaseFuncAlternativeContext)
            else:
                return self.getTypedRuleContext(MySqlParser.CaseFuncAlternativeContext,i)

        def ELSE(self):
            return self.getToken(MySqlParser.ELSE, 0)
        def functionArg(self):
            return self.getTypedRuleContext(MySqlParser.FunctionArgContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCaseFunctionCall" ):
                listener.enterCaseFunctionCall(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCaseFunctionCall" ):
                listener.exitCaseFunctionCall(self)


    class ExtractFunctionCallContext(SpecificFunctionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SpecificFunctionContext
            super().__init__(parser)
            self.sourceString = None # StringLiteralContext
            self.sourceExpression = None # ExpressionContext
            self.copyFrom(ctx)

        def EXTRACT(self):
            return self.getToken(MySqlParser.EXTRACT, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def intervalType(self):
            return self.getTypedRuleContext(MySqlParser.IntervalTypeContext,0)

        def FROM(self):
            return self.getToken(MySqlParser.FROM, 0)
        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def stringLiteral(self):
            return self.getTypedRuleContext(MySqlParser.StringLiteralContext,0)

        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterExtractFunctionCall" ):
                listener.enterExtractFunctionCall(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitExtractFunctionCall" ):
                listener.exitExtractFunctionCall(self)


    class DataTypeFunctionCallContext(SpecificFunctionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SpecificFunctionContext
            super().__init__(parser)
            self.separator = None # Token
            self.copyFrom(ctx)

        def CONVERT(self):
            return self.getToken(MySqlParser.CONVERT, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)

        def convertedDataType(self):
            return self.getTypedRuleContext(MySqlParser.ConvertedDataTypeContext,0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def COMMA(self):
            return self.getToken(MySqlParser.COMMA, 0)
        def USING(self):
            return self.getToken(MySqlParser.USING, 0)
        def charsetName(self):
            return self.getTypedRuleContext(MySqlParser.CharsetNameContext,0)

        def CAST(self):
            return self.getToken(MySqlParser.CAST, 0)
        def AS(self):
            return self.getToken(MySqlParser.AS, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDataTypeFunctionCall" ):
                listener.enterDataTypeFunctionCall(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDataTypeFunctionCall" ):
                listener.exitDataTypeFunctionCall(self)


    class ValuesFunctionCallContext(SpecificFunctionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SpecificFunctionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def VALUES(self):
            return self.getToken(MySqlParser.VALUES, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def fullColumnName(self):
            return self.getTypedRuleContext(MySqlParser.FullColumnNameContext,0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterValuesFunctionCall" ):
                listener.enterValuesFunctionCall(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitValuesFunctionCall" ):
                listener.exitValuesFunctionCall(self)


    class CaseExpressionFunctionCallContext(SpecificFunctionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SpecificFunctionContext
            super().__init__(parser)
            self.elseArg = None # FunctionArgContext
            self.copyFrom(ctx)

        def CASE(self):
            return self.getToken(MySqlParser.CASE, 0)
        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)

        def END(self):
            return self.getToken(MySqlParser.END, 0)
        def caseFuncAlternative(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.CaseFuncAlternativeContext)
            else:
                return self.getTypedRuleContext(MySqlParser.CaseFuncAlternativeContext,i)

        def ELSE(self):
            return self.getToken(MySqlParser.ELSE, 0)
        def functionArg(self):
            return self.getTypedRuleContext(MySqlParser.FunctionArgContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCaseExpressionFunctionCall" ):
                listener.enterCaseExpressionFunctionCall(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCaseExpressionFunctionCall" ):
                listener.exitCaseExpressionFunctionCall(self)


    class CurrentUserContext(SpecificFunctionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SpecificFunctionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def currentUserExpression(self):
            return self.getTypedRuleContext(MySqlParser.CurrentUserExpressionContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCurrentUser" ):
                listener.enterCurrentUser(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCurrentUser" ):
                listener.exitCurrentUser(self)


    class SimpleFunctionCallContext(SpecificFunctionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SpecificFunctionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def CURRENT_DATE(self):
            return self.getToken(MySqlParser.CURRENT_DATE, 0)
        def CURRENT_TIME(self):
            return self.getToken(MySqlParser.CURRENT_TIME, 0)
        def CURRENT_TIMESTAMP(self):
            return self.getToken(MySqlParser.CURRENT_TIMESTAMP, 0)
        def LOCALTIME(self):
            return self.getToken(MySqlParser.LOCALTIME, 0)
        def UTC_TIMESTAMP(self):
            return self.getToken(MySqlParser.UTC_TIMESTAMP, 0)
        def SCHEMA(self):
            return self.getToken(MySqlParser.SCHEMA, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSimpleFunctionCall" ):
                listener.enterSimpleFunctionCall(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSimpleFunctionCall" ):
                listener.exitSimpleFunctionCall(self)


    class CharFunctionCallContext(SpecificFunctionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SpecificFunctionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def CHAR(self):
            return self.getToken(MySqlParser.CHAR, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def functionArgs(self):
            return self.getTypedRuleContext(MySqlParser.FunctionArgsContext,0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def USING(self):
            return self.getToken(MySqlParser.USING, 0)
        def charsetName(self):
            return self.getTypedRuleContext(MySqlParser.CharsetNameContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCharFunctionCall" ):
                listener.enterCharFunctionCall(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCharFunctionCall" ):
                listener.exitCharFunctionCall(self)


    class WeightFunctionCallContext(SpecificFunctionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SpecificFunctionContext
            super().__init__(parser)
            self.stringFormat = None # Token
            self.copyFrom(ctx)

        def WEIGHT_STRING(self):
            return self.getToken(MySqlParser.WEIGHT_STRING, 0)
        def LR_BRACKET(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.LR_BRACKET)
            else:
                return self.getToken(MySqlParser.LR_BRACKET, i)
        def RR_BRACKET(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.RR_BRACKET)
            else:
                return self.getToken(MySqlParser.RR_BRACKET, i)
        def stringLiteral(self):
            return self.getTypedRuleContext(MySqlParser.StringLiteralContext,0)

        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)

        def AS(self):
            return self.getToken(MySqlParser.AS, 0)
        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)

        def levelsInWeightString(self):
            return self.getTypedRuleContext(MySqlParser.LevelsInWeightStringContext,0)

        def CHAR(self):
            return self.getToken(MySqlParser.CHAR, 0)
        def BINARY(self):
            return self.getToken(MySqlParser.BINARY, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterWeightFunctionCall" ):
                listener.enterWeightFunctionCall(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitWeightFunctionCall" ):
                listener.exitWeightFunctionCall(self)


    class GetFormatFunctionCallContext(SpecificFunctionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SpecificFunctionContext
            super().__init__(parser)
            self.datetimeFormat = None # Token
            self.copyFrom(ctx)

        def GET_FORMAT(self):
            return self.getToken(MySqlParser.GET_FORMAT, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def COMMA(self):
            return self.getToken(MySqlParser.COMMA, 0)
        def stringLiteral(self):
            return self.getTypedRuleContext(MySqlParser.StringLiteralContext,0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def DATE(self):
            return self.getToken(MySqlParser.DATE, 0)
        def TIME(self):
            return self.getToken(MySqlParser.TIME, 0)
        def DATETIME(self):
            return self.getToken(MySqlParser.DATETIME, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterGetFormatFunctionCall" ):
                listener.enterGetFormatFunctionCall(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitGetFormatFunctionCall" ):
                listener.exitGetFormatFunctionCall(self)


    class SubstrFunctionCallContext(SpecificFunctionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.SpecificFunctionContext
            super().__init__(parser)
            self.sourceString = None # StringLiteralContext
            self.sourceExpression = None # ExpressionContext
            self.fromDecimal = None # DecimalLiteralContext
            self.fromExpression = None # ExpressionContext
            self.forDecimal = None # DecimalLiteralContext
            self.forExpression = None # ExpressionContext
            self.copyFrom(ctx)

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def FROM(self):
            return self.getToken(MySqlParser.FROM, 0)
        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def SUBSTR(self):
            return self.getToken(MySqlParser.SUBSTR, 0)
        def SUBSTRING(self):
            return self.getToken(MySqlParser.SUBSTRING, 0)
        def stringLiteral(self):
            return self.getTypedRuleContext(MySqlParser.StringLiteralContext,0)

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ExpressionContext,i)

        def decimalLiteral(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.DecimalLiteralContext)
            else:
                return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,i)

        def FOR(self):
            return self.getToken(MySqlParser.FOR, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSubstrFunctionCall" ):
                listener.enterSubstrFunctionCall(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSubstrFunctionCall" ):
                listener.exitSubstrFunctionCall(self)



    def specificFunction(self):

        localctx = MySqlParser.SpecificFunctionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 650, self.RULE_specificFunction)
        self._la = 0 # Token type
        try:
            self.state = 6981
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1034,self._ctx)
            if la_ == 1:
                localctx = MySqlParser.SimpleFunctionCallContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 6802
                _la = self._input.LA(1)
                if not(_la==150 or ((((_la - 313)) & ~0x3f) == 0 and ((1 << (_la - 313)) & 262159) != 0)):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 6805
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1011,self._ctx)
                if la_ == 1:
                    self.state = 6803
                    self.match(MySqlParser.LR_BRACKET)
                    self.state = 6804
                    self.match(MySqlParser.RR_BRACKET)


                pass

            elif la_ == 2:
                localctx = MySqlParser.CurrentUserContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 6807
                self.currentUserExpression()
                pass

            elif la_ == 3:
                localctx = MySqlParser.DataTypeFunctionCallContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 6808
                self.match(MySqlParser.CONVERT)
                self.state = 6809
                self.match(MySqlParser.LR_BRACKET)
                self.state = 6810
                self.expression(0)
                self.state = 6811
                localctx.separator = self.match(MySqlParser.COMMA)
                self.state = 6812
                self.convertedDataType()
                self.state = 6813
                self.match(MySqlParser.RR_BRACKET)
                pass

            elif la_ == 4:
                localctx = MySqlParser.DataTypeFunctionCallContext(self, localctx)
                self.enterOuterAlt(localctx, 4)
                self.state = 6815
                self.match(MySqlParser.CONVERT)
                self.state = 6816
                self.match(MySqlParser.LR_BRACKET)
                self.state = 6817
                self.expression(0)
                self.state = 6818
                self.match(MySqlParser.USING)
                self.state = 6819
                self.charsetName()
                self.state = 6820
                self.match(MySqlParser.RR_BRACKET)
                pass

            elif la_ == 5:
                localctx = MySqlParser.DataTypeFunctionCallContext(self, localctx)
                self.enterOuterAlt(localctx, 5)
                self.state = 6822
                self.match(MySqlParser.CAST)
                self.state = 6823
                self.match(MySqlParser.LR_BRACKET)
                self.state = 6824
                self.expression(0)
                self.state = 6825
                self.match(MySqlParser.AS)
                self.state = 6826
                self.convertedDataType()
                self.state = 6827
                self.match(MySqlParser.RR_BRACKET)
                pass

            elif la_ == 6:
                localctx = MySqlParser.ValuesFunctionCallContext(self, localctx)
                self.enterOuterAlt(localctx, 6)
                self.state = 6829
                self.match(MySqlParser.VALUES)
                self.state = 6830
                self.match(MySqlParser.LR_BRACKET)
                self.state = 6831
                self.fullColumnName()
                self.state = 6832
                self.match(MySqlParser.RR_BRACKET)
                pass

            elif la_ == 7:
                localctx = MySqlParser.CaseExpressionFunctionCallContext(self, localctx)
                self.enterOuterAlt(localctx, 7)
                self.state = 6834
                self.match(MySqlParser.CASE)
                self.state = 6835
                self.expression(0)
                self.state = 6837 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 6836
                    self.caseFuncAlternative()
                    self.state = 6839 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==189):
                        break

                self.state = 6843
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==53:
                    self.state = 6841
                    self.match(MySqlParser.ELSE)
                    self.state = 6842
                    localctx.elseArg = self.functionArg()


                self.state = 6845
                self.match(MySqlParser.END)
                pass

            elif la_ == 8:
                localctx = MySqlParser.CaseFunctionCallContext(self, localctx)
                self.enterOuterAlt(localctx, 8)
                self.state = 6847
                self.match(MySqlParser.CASE)
                self.state = 6849 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 6848
                    self.caseFuncAlternative()
                    self.state = 6851 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==189):
                        break

                self.state = 6855
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==53:
                    self.state = 6853
                    self.match(MySqlParser.ELSE)
                    self.state = 6854
                    localctx.elseArg = self.functionArg()


                self.state = 6857
                self.match(MySqlParser.END)
                pass

            elif la_ == 9:
                localctx = MySqlParser.CharFunctionCallContext(self, localctx)
                self.enterOuterAlt(localctx, 9)
                self.state = 6859
                self.match(MySqlParser.CHAR)
                self.state = 6860
                self.match(MySqlParser.LR_BRACKET)
                self.state = 6861
                self.functionArgs()
                self.state = 6864
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==187:
                    self.state = 6862
                    self.match(MySqlParser.USING)
                    self.state = 6863
                    self.charsetName()


                self.state = 6866
                self.match(MySqlParser.RR_BRACKET)
                pass

            elif la_ == 10:
                localctx = MySqlParser.PositionFunctionCallContext(self, localctx)
                self.enterOuterAlt(localctx, 10)
                self.state = 6868
                self.match(MySqlParser.POSITION)
                self.state = 6869
                self.match(MySqlParser.LR_BRACKET)
                self.state = 6872
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1017,self._ctx)
                if la_ == 1:
                    self.state = 6870
                    localctx.positionString = self.stringLiteral()
                    pass

                elif la_ == 2:
                    self.state = 6871
                    localctx.positionExpression = self.expression(0)
                    pass


                self.state = 6874
                self.match(MySqlParser.IN)
                self.state = 6877
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1018,self._ctx)
                if la_ == 1:
                    self.state = 6875
                    localctx.inString = self.stringLiteral()
                    pass

                elif la_ == 2:
                    self.state = 6876
                    localctx.inExpression = self.expression(0)
                    pass


                self.state = 6879
                self.match(MySqlParser.RR_BRACKET)
                pass

            elif la_ == 11:
                localctx = MySqlParser.SubstrFunctionCallContext(self, localctx)
                self.enterOuterAlt(localctx, 11)
                self.state = 6881
                _la = self._input.LA(1)
                if not(_la==325 or _la==326):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 6882
                self.match(MySqlParser.LR_BRACKET)
                self.state = 6885
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1019,self._ctx)
                if la_ == 1:
                    self.state = 6883
                    localctx.sourceString = self.stringLiteral()
                    pass

                elif la_ == 2:
                    self.state = 6884
                    localctx.sourceExpression = self.expression(0)
                    pass


                self.state = 6887
                self.match(MySqlParser.FROM)
                self.state = 6890
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1020,self._ctx)
                if la_ == 1:
                    self.state = 6888
                    localctx.fromDecimal = self.decimalLiteral()
                    pass

                elif la_ == 2:
                    self.state = 6889
                    localctx.fromExpression = self.expression(0)
                    pass


                self.state = 6897
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==65:
                    self.state = 6892
                    self.match(MySqlParser.FOR)
                    self.state = 6895
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,1021,self._ctx)
                    if la_ == 1:
                        self.state = 6893
                        localctx.forDecimal = self.decimalLiteral()
                        pass

                    elif la_ == 2:
                        self.state = 6894
                        localctx.forExpression = self.expression(0)
                        pass




                self.state = 6899
                self.match(MySqlParser.RR_BRACKET)
                pass

            elif la_ == 12:
                localctx = MySqlParser.TrimFunctionCallContext(self, localctx)
                self.enterOuterAlt(localctx, 12)
                self.state = 6901
                self.match(MySqlParser.TRIM)
                self.state = 6902
                self.match(MySqlParser.LR_BRACKET)
                self.state = 6903
                localctx.positioinForm = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==17 or _la==95 or _la==176):
                    localctx.positioinForm = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 6906
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1023,self._ctx)
                if la_ == 1:
                    self.state = 6904
                    localctx.sourceString = self.stringLiteral()

                elif la_ == 2:
                    self.state = 6905
                    localctx.sourceExpression = self.expression(0)


                self.state = 6908
                self.match(MySqlParser.FROM)
                self.state = 6911
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1024,self._ctx)
                if la_ == 1:
                    self.state = 6909
                    localctx.fromString = self.stringLiteral()
                    pass

                elif la_ == 2:
                    self.state = 6910
                    localctx.fromExpression = self.expression(0)
                    pass


                self.state = 6913
                self.match(MySqlParser.RR_BRACKET)
                pass

            elif la_ == 13:
                localctx = MySqlParser.TrimFunctionCallContext(self, localctx)
                self.enterOuterAlt(localctx, 13)
                self.state = 6915
                self.match(MySqlParser.TRIM)
                self.state = 6916
                self.match(MySqlParser.LR_BRACKET)
                self.state = 6919
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1025,self._ctx)
                if la_ == 1:
                    self.state = 6917
                    localctx.sourceString = self.stringLiteral()
                    pass

                elif la_ == 2:
                    self.state = 6918
                    localctx.sourceExpression = self.expression(0)
                    pass


                self.state = 6921
                self.match(MySqlParser.FROM)
                self.state = 6924
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1026,self._ctx)
                if la_ == 1:
                    self.state = 6922
                    localctx.fromString = self.stringLiteral()
                    pass

                elif la_ == 2:
                    self.state = 6923
                    localctx.fromExpression = self.expression(0)
                    pass


                self.state = 6926
                self.match(MySqlParser.RR_BRACKET)
                pass

            elif la_ == 14:
                localctx = MySqlParser.WeightFunctionCallContext(self, localctx)
                self.enterOuterAlt(localctx, 14)
                self.state = 6928
                self.match(MySqlParser.WEIGHT_STRING)
                self.state = 6929
                self.match(MySqlParser.LR_BRACKET)
                self.state = 6932
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1027,self._ctx)
                if la_ == 1:
                    self.state = 6930
                    self.stringLiteral()
                    pass

                elif la_ == 2:
                    self.state = 6931
                    self.expression(0)
                    pass


                self.state = 6940
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==12:
                    self.state = 6934
                    self.match(MySqlParser.AS)
                    self.state = 6935
                    localctx.stringFormat = self._input.LT(1)
                    _la = self._input.LA(1)
                    if not(_la==222 or _la==226):
                        localctx.stringFormat = self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 6936
                    self.match(MySqlParser.LR_BRACKET)
                    self.state = 6937
                    self.decimalLiteral()
                    self.state = 6938
                    self.match(MySqlParser.RR_BRACKET)


                self.state = 6943
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==472:
                    self.state = 6942
                    self.levelsInWeightString()


                self.state = 6945
                self.match(MySqlParser.RR_BRACKET)
                pass

            elif la_ == 15:
                localctx = MySqlParser.ExtractFunctionCallContext(self, localctx)
                self.enterOuterAlt(localctx, 15)
                self.state = 6947
                self.match(MySqlParser.EXTRACT)
                self.state = 6948
                self.match(MySqlParser.LR_BRACKET)
                self.state = 6949
                self.intervalType()
                self.state = 6950
                self.match(MySqlParser.FROM)
                self.state = 6953
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1030,self._ctx)
                if la_ == 1:
                    self.state = 6951
                    localctx.sourceString = self.stringLiteral()
                    pass

                elif la_ == 2:
                    self.state = 6952
                    localctx.sourceExpression = self.expression(0)
                    pass


                self.state = 6955
                self.match(MySqlParser.RR_BRACKET)
                pass

            elif la_ == 16:
                localctx = MySqlParser.GetFormatFunctionCallContext(self, localctx)
                self.enterOuterAlt(localctx, 16)
                self.state = 6957
                self.match(MySqlParser.GET_FORMAT)
                self.state = 6958
                self.match(MySqlParser.LR_BRACKET)
                self.state = 6959
                localctx.datetimeFormat = self._input.LT(1)
                _la = self._input.LA(1)
                if not(((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & 11) != 0)):
                    localctx.datetimeFormat = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 6960
                self.match(MySqlParser.COMMA)
                self.state = 6961
                self.stringLiteral()
                self.state = 6962
                self.match(MySqlParser.RR_BRACKET)
                pass

            elif la_ == 17:
                localctx = MySqlParser.JsonValueFunctionCallContext(self, localctx)
                self.enterOuterAlt(localctx, 17)
                self.state = 6964
                self.match(MySqlParser.JSON_VALUE)
                self.state = 6965
                self.match(MySqlParser.LR_BRACKET)
                self.state = 6966
                self.expression(0)
                self.state = 6967
                self.match(MySqlParser.COMMA)
                self.state = 6968
                self.expression(0)
                self.state = 6971
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==593:
                    self.state = 6969
                    self.match(MySqlParser.RETURNING)
                    self.state = 6970
                    self.convertedDataType()


                self.state = 6974
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1032,self._ctx)
                if la_ == 1:
                    self.state = 6973
                    self.jsonOnEmpty()


                self.state = 6977
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==42 or _la==116 or _la==411:
                    self.state = 6976
                    self.jsonOnError()


                self.state = 6979
                self.match(MySqlParser.RR_BRACKET)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CaseFuncAlternativeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.condition = None # FunctionArgContext
            self.consequent = None # FunctionArgContext

        def WHEN(self):
            return self.getToken(MySqlParser.WHEN, 0)

        def THEN(self):
            return self.getToken(MySqlParser.THEN, 0)

        def functionArg(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.FunctionArgContext)
            else:
                return self.getTypedRuleContext(MySqlParser.FunctionArgContext,i)


        def getRuleIndex(self):
            return MySqlParser.RULE_caseFuncAlternative

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCaseFuncAlternative" ):
                listener.enterCaseFuncAlternative(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCaseFuncAlternative" ):
                listener.exitCaseFuncAlternative(self)




    def caseFuncAlternative(self):

        localctx = MySqlParser.CaseFuncAlternativeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 652, self.RULE_caseFuncAlternative)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6983
            self.match(MySqlParser.WHEN)
            self.state = 6984
            localctx.condition = self.functionArg()
            self.state = 6985
            self.match(MySqlParser.THEN)
            self.state = 6986
            localctx.consequent = self.functionArg()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class LevelsInWeightStringContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_levelsInWeightString

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class LevelWeightRangeContext(LevelsInWeightStringContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.LevelsInWeightStringContext
            super().__init__(parser)
            self.firstLevel = None # DecimalLiteralContext
            self.lastLevel = None # DecimalLiteralContext
            self.copyFrom(ctx)

        def LEVEL(self):
            return self.getToken(MySqlParser.LEVEL, 0)
        def MINUS(self):
            return self.getToken(MySqlParser.MINUS, 0)
        def decimalLiteral(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.DecimalLiteralContext)
            else:
                return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,i)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLevelWeightRange" ):
                listener.enterLevelWeightRange(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLevelWeightRange" ):
                listener.exitLevelWeightRange(self)


    class LevelWeightListContext(LevelsInWeightStringContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.LevelsInWeightStringContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def LEVEL(self):
            return self.getToken(MySqlParser.LEVEL, 0)
        def levelInWeightListElement(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.LevelInWeightListElementContext)
            else:
                return self.getTypedRuleContext(MySqlParser.LevelInWeightListElementContext,i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLevelWeightList" ):
                listener.enterLevelWeightList(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLevelWeightList" ):
                listener.exitLevelWeightList(self)



    def levelsInWeightString(self):

        localctx = MySqlParser.LevelsInWeightStringContext(self, self._ctx, self.state)
        self.enterRule(localctx, 654, self.RULE_levelsInWeightString)
        self._la = 0 # Token type
        try:
            self.state = 7002
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1036,self._ctx)
            if la_ == 1:
                localctx = MySqlParser.LevelWeightListContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 6988
                self.match(MySqlParser.LEVEL)
                self.state = 6989
                self.levelInWeightListElement()
                self.state = 6994
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 6990
                    self.match(MySqlParser.COMMA)
                    self.state = 6991
                    self.levelInWeightListElement()
                    self.state = 6996
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass

            elif la_ == 2:
                localctx = MySqlParser.LevelWeightRangeContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 6997
                self.match(MySqlParser.LEVEL)
                self.state = 6998
                localctx.firstLevel = self.decimalLiteral()
                self.state = 6999
                self.match(MySqlParser.MINUS)
                self.state = 7000
                localctx.lastLevel = self.decimalLiteral()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class LevelInWeightListElementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.orderType = None # Token

        def decimalLiteral(self):
            return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,0)


        def ASC(self):
            return self.getToken(MySqlParser.ASC, 0)

        def DESC(self):
            return self.getToken(MySqlParser.DESC, 0)

        def REVERSE(self):
            return self.getToken(MySqlParser.REVERSE, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_levelInWeightListElement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLevelInWeightListElement" ):
                listener.enterLevelInWeightListElement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLevelInWeightListElement" ):
                listener.exitLevelInWeightListElement(self)




    def levelInWeightListElement(self):

        localctx = MySqlParser.LevelInWeightListElementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 656, self.RULE_levelInWeightListElement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7004
            self.decimalLiteral()
            self.state = 7006
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==13 or _la==45 or _la==994:
                self.state = 7005
                localctx.orderType = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==13 or _la==45 or _la==994):
                    localctx.orderType = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class AggregateWindowedFunctionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.aggregator = None # Token
            self.starArg = None # Token
            self.separator = None # Token

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def functionArg(self):
            return self.getTypedRuleContext(MySqlParser.FunctionArgContext,0)


        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def AVG(self):
            return self.getToken(MySqlParser.AVG, 0)

        def MAX(self):
            return self.getToken(MySqlParser.MAX, 0)

        def MIN(self):
            return self.getToken(MySqlParser.MIN, 0)

        def SUM(self):
            return self.getToken(MySqlParser.SUM, 0)

        def overClause(self):
            return self.getTypedRuleContext(MySqlParser.OverClauseContext,0)


        def ALL(self):
            return self.getToken(MySqlParser.ALL, 0)

        def DISTINCT(self):
            return self.getToken(MySqlParser.DISTINCT, 0)

        def COUNT(self):
            return self.getToken(MySqlParser.COUNT, 0)

        def functionArgs(self):
            return self.getTypedRuleContext(MySqlParser.FunctionArgsContext,0)


        def STAR(self):
            return self.getToken(MySqlParser.STAR, 0)

        def BIT_AND(self):
            return self.getToken(MySqlParser.BIT_AND, 0)

        def BIT_OR(self):
            return self.getToken(MySqlParser.BIT_OR, 0)

        def BIT_XOR(self):
            return self.getToken(MySqlParser.BIT_XOR, 0)

        def STD(self):
            return self.getToken(MySqlParser.STD, 0)

        def STDDEV(self):
            return self.getToken(MySqlParser.STDDEV, 0)

        def STDDEV_POP(self):
            return self.getToken(MySqlParser.STDDEV_POP, 0)

        def STDDEV_SAMP(self):
            return self.getToken(MySqlParser.STDDEV_SAMP, 0)

        def VAR_POP(self):
            return self.getToken(MySqlParser.VAR_POP, 0)

        def VAR_SAMP(self):
            return self.getToken(MySqlParser.VAR_SAMP, 0)

        def VARIANCE(self):
            return self.getToken(MySqlParser.VARIANCE, 0)

        def GROUP_CONCAT(self):
            return self.getToken(MySqlParser.GROUP_CONCAT, 0)

        def ORDER(self):
            return self.getToken(MySqlParser.ORDER, 0)

        def BY(self):
            return self.getToken(MySqlParser.BY, 0)

        def orderByExpression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.OrderByExpressionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.OrderByExpressionContext,i)


        def SEPARATOR(self):
            return self.getToken(MySqlParser.SEPARATOR, 0)

        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_aggregateWindowedFunction

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAggregateWindowedFunction" ):
                listener.enterAggregateWindowedFunction(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAggregateWindowedFunction" ):
                listener.exitAggregateWindowedFunction(self)




    def aggregateWindowedFunction(self):

        localctx = MySqlParser.AggregateWindowedFunctionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 658, self.RULE_aggregateWindowedFunction)
        self._la = 0 # Token type
        try:
            self.state = 7067
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [286, 298, 299, 309]:
                self.enterOuterAlt(localctx, 1)
                self.state = 7008
                _la = self._input.LA(1)
                if not(((((_la - 286)) & ~0x3f) == 0 and ((1 << (_la - 286)) & 8400897) != 0)):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 7009
                self.match(MySqlParser.LR_BRACKET)
                self.state = 7011
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1038,self._ctx)
                if la_ == 1:
                    self.state = 7010
                    localctx.aggregator = self._input.LT(1)
                    _la = self._input.LA(1)
                    if not(_la==6 or _la==49):
                        localctx.aggregator = self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 7013
                self.functionArg()
                self.state = 7014
                self.match(MySqlParser.RR_BRACKET)
                self.state = 7016
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1039,self._ctx)
                if la_ == 1:
                    self.state = 7015
                    self.overClause()


                pass
            elif token in [290]:
                self.enterOuterAlt(localctx, 2)
                self.state = 7018
                self.match(MySqlParser.COUNT)
                self.state = 7019
                self.match(MySqlParser.LR_BRACKET)
                self.state = 7027
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1041,self._ctx)
                if la_ == 1:
                    self.state = 7020
                    localctx.starArg = self.match(MySqlParser.STAR)
                    pass

                elif la_ == 2:
                    self.state = 7022
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,1040,self._ctx)
                    if la_ == 1:
                        self.state = 7021
                        localctx.aggregator = self.match(MySqlParser.ALL)


                    self.state = 7024
                    self.functionArg()
                    pass

                elif la_ == 3:
                    self.state = 7025
                    localctx.aggregator = self.match(MySqlParser.DISTINCT)
                    self.state = 7026
                    self.functionArgs()
                    pass


                self.state = 7029
                self.match(MySqlParser.RR_BRACKET)
                self.state = 7031
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1042,self._ctx)
                if la_ == 1:
                    self.state = 7030
                    self.overClause()


                pass
            elif token in [287, 288, 289, 305, 306, 307, 308, 310, 311, 312]:
                self.enterOuterAlt(localctx, 3)
                self.state = 7033
                _la = self._input.LA(1)
                if not(((((_la - 287)) & ~0x3f) == 0 and ((1 << (_la - 287)) & 62652423) != 0)):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 7034
                self.match(MySqlParser.LR_BRACKET)
                self.state = 7036
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1043,self._ctx)
                if la_ == 1:
                    self.state = 7035
                    localctx.aggregator = self.match(MySqlParser.ALL)


                self.state = 7038
                self.functionArg()
                self.state = 7039
                self.match(MySqlParser.RR_BRACKET)
                self.state = 7041
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1044,self._ctx)
                if la_ == 1:
                    self.state = 7040
                    self.overClause()


                pass
            elif token in [294]:
                self.enterOuterAlt(localctx, 4)
                self.state = 7043
                self.match(MySqlParser.GROUP_CONCAT)
                self.state = 7044
                self.match(MySqlParser.LR_BRACKET)
                self.state = 7046
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1045,self._ctx)
                if la_ == 1:
                    self.state = 7045
                    localctx.aggregator = self.match(MySqlParser.DISTINCT)


                self.state = 7048
                self.functionArgs()
                self.state = 7059
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==124:
                    self.state = 7049
                    self.match(MySqlParser.ORDER)
                    self.state = 7050
                    self.match(MySqlParser.BY)
                    self.state = 7051
                    self.orderByExpression()
                    self.state = 7056
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==1135:
                        self.state = 7052
                        self.match(MySqlParser.COMMA)
                        self.state = 7053
                        self.orderByExpression()
                        self.state = 7058
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)



                self.state = 7063
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==154:
                    self.state = 7061
                    self.match(MySqlParser.SEPARATOR)
                    self.state = 7062
                    localctx.separator = self.match(MySqlParser.STRING_LITERAL)


                self.state = 7065
                self.match(MySqlParser.RR_BRACKET)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class NonAggregateWindowedFunctionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def overClause(self):
            return self.getTypedRuleContext(MySqlParser.OverClauseContext,0)


        def LAG(self):
            return self.getToken(MySqlParser.LAG, 0)

        def LEAD(self):
            return self.getToken(MySqlParser.LEAD, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def decimalLiteral(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.DecimalLiteralContext)
            else:
                return self.getTypedRuleContext(MySqlParser.DecimalLiteralContext,i)


        def FIRST_VALUE(self):
            return self.getToken(MySqlParser.FIRST_VALUE, 0)

        def LAST_VALUE(self):
            return self.getToken(MySqlParser.LAST_VALUE, 0)

        def CUME_DIST(self):
            return self.getToken(MySqlParser.CUME_DIST, 0)

        def DENSE_RANK(self):
            return self.getToken(MySqlParser.DENSE_RANK, 0)

        def PERCENT_RANK(self):
            return self.getToken(MySqlParser.PERCENT_RANK, 0)

        def RANK(self):
            return self.getToken(MySqlParser.RANK, 0)

        def ROW_NUMBER(self):
            return self.getToken(MySqlParser.ROW_NUMBER, 0)

        def NTH_VALUE(self):
            return self.getToken(MySqlParser.NTH_VALUE, 0)

        def NTILE(self):
            return self.getToken(MySqlParser.NTILE, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_nonAggregateWindowedFunction

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNonAggregateWindowedFunction" ):
                listener.enterNonAggregateWindowedFunction(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNonAggregateWindowedFunction" ):
                listener.exitNonAggregateWindowedFunction(self)




    def nonAggregateWindowedFunction(self):

        localctx = MySqlParser.NonAggregateWindowedFunctionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 660, self.RULE_nonAggregateWindowedFunction)
        self._la = 0 # Token type
        try:
            self.state = 7107
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [295, 297]:
                self.enterOuterAlt(localctx, 1)
                self.state = 7069
                _la = self._input.LA(1)
                if not(_la==295 or _la==297):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 7070
                self.match(MySqlParser.LR_BRACKET)
                self.state = 7071
                self.expression(0)
                self.state = 7074
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1050,self._ctx)
                if la_ == 1:
                    self.state = 7072
                    self.match(MySqlParser.COMMA)
                    self.state = 7073
                    self.decimalLiteral()


                self.state = 7078
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1135:
                    self.state = 7076
                    self.match(MySqlParser.COMMA)
                    self.state = 7077
                    self.decimalLiteral()


                self.state = 7080
                self.match(MySqlParser.RR_BRACKET)
                self.state = 7081
                self.overClause()
                pass
            elif token in [293, 296]:
                self.enterOuterAlt(localctx, 2)
                self.state = 7083
                _la = self._input.LA(1)
                if not(_la==293 or _la==296):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 7084
                self.match(MySqlParser.LR_BRACKET)
                self.state = 7085
                self.expression(0)
                self.state = 7086
                self.match(MySqlParser.RR_BRACKET)
                self.state = 7087
                self.overClause()
                pass
            elif token in [291, 292, 302, 303, 304]:
                self.enterOuterAlt(localctx, 3)
                self.state = 7089
                _la = self._input.LA(1)
                if not(((((_la - 291)) & ~0x3f) == 0 and ((1 << (_la - 291)) & 14339) != 0)):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 7090
                self.match(MySqlParser.LR_BRACKET)
                self.state = 7091
                self.match(MySqlParser.RR_BRACKET)
                self.state = 7092
                self.overClause()
                pass
            elif token in [301]:
                self.enterOuterAlt(localctx, 4)
                self.state = 7093
                self.match(MySqlParser.NTH_VALUE)
                self.state = 7094
                self.match(MySqlParser.LR_BRACKET)
                self.state = 7095
                self.expression(0)
                self.state = 7096
                self.match(MySqlParser.COMMA)
                self.state = 7097
                self.decimalLiteral()
                self.state = 7098
                self.match(MySqlParser.RR_BRACKET)
                self.state = 7099
                self.overClause()
                pass
            elif token in [300]:
                self.enterOuterAlt(localctx, 5)
                self.state = 7101
                self.match(MySqlParser.NTILE)
                self.state = 7102
                self.match(MySqlParser.LR_BRACKET)
                self.state = 7103
                self.decimalLiteral()
                self.state = 7104
                self.match(MySqlParser.RR_BRACKET)
                self.state = 7105
                self.overClause()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class OverClauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def OVER(self):
            return self.getToken(MySqlParser.OVER, 0)

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def windowSpec(self):
            return self.getTypedRuleContext(MySqlParser.WindowSpecContext,0)


        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def windowName(self):
            return self.getTypedRuleContext(MySqlParser.WindowNameContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_overClause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOverClause" ):
                listener.enterOverClause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOverClause" ):
                listener.exitOverClause(self)




    def overClause(self):

        localctx = MySqlParser.OverClauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 662, self.RULE_overClause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7109
            self.match(MySqlParser.OVER)
            self.state = 7115
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1133]:
                self.state = 7110
                self.match(MySqlParser.LR_BRACKET)
                self.state = 7111
                self.windowSpec()
                self.state = 7112
                self.match(MySqlParser.RR_BRACKET)
                pass
            elif token in [11, 14, 18, 29, 35, 37, 39, 42, 48, 55, 57, 59, 73, 77, 79, 85, 94, 97, 117, 121, 124, 130, 140, 141, 148, 150, 158, 168, 217, 218, 219, 220, 221, 226, 234, 237, 239, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 405, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 523, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 677, 678, 679, 680, 681, 682, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 717, 718, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1123, 1145, 1148, 1156]:
                self.state = 7114
                self.windowName()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class WindowSpecContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def windowName(self):
            return self.getTypedRuleContext(MySqlParser.WindowNameContext,0)


        def partitionClause(self):
            return self.getTypedRuleContext(MySqlParser.PartitionClauseContext,0)


        def orderByClause(self):
            return self.getTypedRuleContext(MySqlParser.OrderByClauseContext,0)


        def frameClause(self):
            return self.getTypedRuleContext(MySqlParser.FrameClauseContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_windowSpec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterWindowSpec" ):
                listener.enterWindowSpec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitWindowSpec" ):
                listener.exitWindowSpec(self)




    def windowSpec(self):

        localctx = MySqlParser.WindowSpecContext(self, self._ctx, self.state)
        self.enterRule(localctx, 664, self.RULE_windowSpec)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7118
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1054,self._ctx)
            if la_ == 1:
                self.state = 7117
                self.windowName()


            self.state = 7121
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==129:
                self.state = 7120
                self.partitionClause()


            self.state = 7124
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==124:
                self.state = 7123
                self.orderByClause()


            self.state = 7127
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==133 or _la==601:
                self.state = 7126
                self.frameClause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class WindowNameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def uid(self):
            return self.getTypedRuleContext(MySqlParser.UidContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_windowName

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterWindowName" ):
                listener.enterWindowName(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitWindowName" ):
                listener.exitWindowName(self)




    def windowName(self):

        localctx = MySqlParser.WindowNameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 666, self.RULE_windowName)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7129
            self.uid()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class FrameClauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def frameUnits(self):
            return self.getTypedRuleContext(MySqlParser.FrameUnitsContext,0)


        def frameExtent(self):
            return self.getTypedRuleContext(MySqlParser.FrameExtentContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_frameClause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFrameClause" ):
                listener.enterFrameClause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFrameClause" ):
                listener.exitFrameClause(self)




    def frameClause(self):

        localctx = MySqlParser.FrameClauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 668, self.RULE_frameClause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7131
            self.frameUnits()
            self.state = 7132
            self.frameExtent()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class FrameUnitsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ROWS(self):
            return self.getToken(MySqlParser.ROWS, 0)

        def RANGE(self):
            return self.getToken(MySqlParser.RANGE, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_frameUnits

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFrameUnits" ):
                listener.enterFrameUnits(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFrameUnits" ):
                listener.exitFrameUnits(self)




    def frameUnits(self):

        localctx = MySqlParser.FrameUnitsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 670, self.RULE_frameUnits)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7134
            _la = self._input.LA(1)
            if not(_la==133 or _la==601):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class FrameExtentContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def frameRange(self):
            return self.getTypedRuleContext(MySqlParser.FrameRangeContext,0)


        def frameBetween(self):
            return self.getTypedRuleContext(MySqlParser.FrameBetweenContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_frameExtent

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFrameExtent" ):
                listener.enterFrameExtent(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFrameExtent" ):
                listener.exitFrameExtent(self)




    def frameExtent(self):

        localctx = MySqlParser.FrameExtentContext(self, self._ctx, self.state)
        self.enterRule(localctx, 672, self.RULE_frameExtent)
        try:
            self.state = 7138
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1058,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 7136
                self.frameRange()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 7137
                self.frameBetween()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class FrameBetweenContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def BETWEEN(self):
            return self.getToken(MySqlParser.BETWEEN, 0)

        def frameRange(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.FrameRangeContext)
            else:
                return self.getTypedRuleContext(MySqlParser.FrameRangeContext,i)


        def AND(self):
            return self.getToken(MySqlParser.AND, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_frameBetween

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFrameBetween" ):
                listener.enterFrameBetween(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFrameBetween" ):
                listener.exitFrameBetween(self)




    def frameBetween(self):

        localctx = MySqlParser.FrameBetweenContext(self, self._ctx, self.state)
        self.enterRule(localctx, 674, self.RULE_frameBetween)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7140
            self.match(MySqlParser.BETWEEN)
            self.state = 7141
            self.frameRange()
            self.state = 7142
            self.match(MySqlParser.AND)
            self.state = 7143
            self.frameRange()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class FrameRangeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CURRENT(self):
            return self.getToken(MySqlParser.CURRENT, 0)

        def ROW(self):
            return self.getToken(MySqlParser.ROW, 0)

        def UNBOUNDED(self):
            return self.getToken(MySqlParser.UNBOUNDED, 0)

        def PRECEDING(self):
            return self.getToken(MySqlParser.PRECEDING, 0)

        def FOLLOWING(self):
            return self.getToken(MySqlParser.FOLLOWING, 0)

        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_frameRange

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFrameRange" ):
                listener.enterFrameRange(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFrameRange" ):
                listener.exitFrameRange(self)




    def frameRange(self):

        localctx = MySqlParser.FrameRangeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 676, self.RULE_frameRange)
        self._la = 0 # Token type
        try:
            self.state = 7152
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1059,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 7145
                self.match(MySqlParser.CURRENT)
                self.state = 7146
                self.match(MySqlParser.ROW)
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 7147
                self.match(MySqlParser.UNBOUNDED)
                self.state = 7148
                _la = self._input.LA(1)
                if not(_la==433 or _la==559):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 7149
                self.expression(0)
                self.state = 7150
                _la = self._input.LA(1)
                if not(_la==433 or _la==559):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class PartitionClauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PARTITION(self):
            return self.getToken(MySqlParser.PARTITION, 0)

        def BY(self):
            return self.getToken(MySqlParser.BY, 0)

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ExpressionContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_partitionClause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartitionClause" ):
                listener.enterPartitionClause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartitionClause" ):
                listener.exitPartitionClause(self)




    def partitionClause(self):

        localctx = MySqlParser.PartitionClauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 678, self.RULE_partitionClause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7154
            self.match(MySqlParser.PARTITION)
            self.state = 7155
            self.match(MySqlParser.BY)
            self.state = 7156
            self.expression(0)
            self.state = 7161
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 7157
                self.match(MySqlParser.COMMA)
                self.state = 7158
                self.expression(0)
                self.state = 7163
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ScalarFunctionNameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def functionNameBase(self):
            return self.getTypedRuleContext(MySqlParser.FunctionNameBaseContext,0)


        def ASCII(self):
            return self.getToken(MySqlParser.ASCII, 0)

        def CURDATE(self):
            return self.getToken(MySqlParser.CURDATE, 0)

        def CURRENT_DATE(self):
            return self.getToken(MySqlParser.CURRENT_DATE, 0)

        def CURRENT_TIME(self):
            return self.getToken(MySqlParser.CURRENT_TIME, 0)

        def CURRENT_TIMESTAMP(self):
            return self.getToken(MySqlParser.CURRENT_TIMESTAMP, 0)

        def CURTIME(self):
            return self.getToken(MySqlParser.CURTIME, 0)

        def DATE_ADD(self):
            return self.getToken(MySqlParser.DATE_ADD, 0)

        def DATE_SUB(self):
            return self.getToken(MySqlParser.DATE_SUB, 0)

        def IF(self):
            return self.getToken(MySqlParser.IF, 0)

        def INSERT(self):
            return self.getToken(MySqlParser.INSERT, 0)

        def LOCALTIME(self):
            return self.getToken(MySqlParser.LOCALTIME, 0)

        def LOCALTIMESTAMP(self):
            return self.getToken(MySqlParser.LOCALTIMESTAMP, 0)

        def MID(self):
            return self.getToken(MySqlParser.MID, 0)

        def NOW(self):
            return self.getToken(MySqlParser.NOW, 0)

        def REPEAT(self):
            return self.getToken(MySqlParser.REPEAT, 0)

        def REPLACE(self):
            return self.getToken(MySqlParser.REPLACE, 0)

        def SUBSTR(self):
            return self.getToken(MySqlParser.SUBSTR, 0)

        def SUBSTRING(self):
            return self.getToken(MySqlParser.SUBSTRING, 0)

        def SYSDATE(self):
            return self.getToken(MySqlParser.SYSDATE, 0)

        def TRIM(self):
            return self.getToken(MySqlParser.TRIM, 0)

        def UTC_DATE(self):
            return self.getToken(MySqlParser.UTC_DATE, 0)

        def UTC_TIME(self):
            return self.getToken(MySqlParser.UTC_TIME, 0)

        def UTC_TIMESTAMP(self):
            return self.getToken(MySqlParser.UTC_TIMESTAMP, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_scalarFunctionName

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterScalarFunctionName" ):
                listener.enterScalarFunctionName(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitScalarFunctionName" ):
                listener.exitScalarFunctionName(self)




    def scalarFunctionName(self):

        localctx = MySqlParser.ScalarFunctionNameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 680, self.RULE_scalarFunctionName)
        try:
            self.state = 7188
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [39, 97, 148, 150, 217, 218, 219, 221, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 290, 291, 292, 293, 295, 296, 297, 300, 301, 302, 303, 304, 324, 459, 673, 689, 690, 691, 692, 693, 694, 695, 696, 736, 803, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1001, 1002, 1003, 1004, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1123]:
                self.enterOuterAlt(localctx, 1)
                self.state = 7164
                self.functionNameBase()
                pass
            elif token in [747]:
                self.enterOuterAlt(localctx, 2)
                self.state = 7165
                self.match(MySqlParser.ASCII)
                pass
            elif token in [317]:
                self.enterOuterAlt(localctx, 3)
                self.state = 7166
                self.match(MySqlParser.CURDATE)
                pass
            elif token in [313]:
                self.enterOuterAlt(localctx, 4)
                self.state = 7167
                self.match(MySqlParser.CURRENT_DATE)
                pass
            elif token in [314]:
                self.enterOuterAlt(localctx, 5)
                self.state = 7168
                self.match(MySqlParser.CURRENT_TIME)
                pass
            elif token in [315]:
                self.enterOuterAlt(localctx, 6)
                self.state = 7169
                self.match(MySqlParser.CURRENT_TIMESTAMP)
                pass
            elif token in [318]:
                self.enterOuterAlt(localctx, 7)
                self.state = 7170
                self.match(MySqlParser.CURTIME)
                pass
            elif token in [319]:
                self.enterOuterAlt(localctx, 8)
                self.state = 7171
                self.match(MySqlParser.DATE_ADD)
                pass
            elif token in [320]:
                self.enterOuterAlt(localctx, 9)
                self.state = 7172
                self.match(MySqlParser.DATE_SUB)
                pass
            elif token in [77]:
                self.enterOuterAlt(localctx, 10)
                self.state = 7173
                self.match(MySqlParser.IF)
                pass
            elif token in [85]:
                self.enterOuterAlt(localctx, 11)
                self.state = 7174
                self.match(MySqlParser.INSERT)
                pass
            elif token in [316]:
                self.enterOuterAlt(localctx, 12)
                self.state = 7175
                self.match(MySqlParser.LOCALTIME)
                pass
            elif token in [322]:
                self.enterOuterAlt(localctx, 13)
                self.state = 7176
                self.match(MySqlParser.LOCALTIMESTAMP)
                pass
            elif token in [508]:
                self.enterOuterAlt(localctx, 14)
                self.state = 7177
                self.match(MySqlParser.MID)
                pass
            elif token in [323]:
                self.enterOuterAlt(localctx, 15)
                self.state = 7178
                self.match(MySqlParser.NOW)
                pass
            elif token in [140]:
                self.enterOuterAlt(localctx, 16)
                self.state = 7179
                self.match(MySqlParser.REPEAT)
                pass
            elif token in [141]:
                self.enterOuterAlt(localctx, 17)
                self.state = 7180
                self.match(MySqlParser.REPLACE)
                pass
            elif token in [325]:
                self.enterOuterAlt(localctx, 18)
                self.state = 7181
                self.match(MySqlParser.SUBSTR)
                pass
            elif token in [326]:
                self.enterOuterAlt(localctx, 19)
                self.state = 7182
                self.match(MySqlParser.SUBSTRING)
                pass
            elif token in [327]:
                self.enterOuterAlt(localctx, 20)
                self.state = 7183
                self.match(MySqlParser.SYSDATE)
                pass
            elif token in [328]:
                self.enterOuterAlt(localctx, 21)
                self.state = 7184
                self.match(MySqlParser.TRIM)
                pass
            elif token in [329]:
                self.enterOuterAlt(localctx, 22)
                self.state = 7185
                self.match(MySqlParser.UTC_DATE)
                pass
            elif token in [330]:
                self.enterOuterAlt(localctx, 23)
                self.state = 7186
                self.match(MySqlParser.UTC_TIME)
                pass
            elif token in [331]:
                self.enterOuterAlt(localctx, 24)
                self.state = 7187
                self.match(MySqlParser.UTC_TIMESTAMP)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class PasswordFunctionClauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.functionName = None # Token

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)

        def functionArg(self):
            return self.getTypedRuleContext(MySqlParser.FunctionArgContext,0)


        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def PASSWORD(self):
            return self.getToken(MySqlParser.PASSWORD, 0)

        def OLD_PASSWORD(self):
            return self.getToken(MySqlParser.OLD_PASSWORD, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_passwordFunctionClause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPasswordFunctionClause" ):
                listener.enterPasswordFunctionClause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPasswordFunctionClause" ):
                listener.exitPasswordFunctionClause(self)




    def passwordFunctionClause(self):

        localctx = MySqlParser.PasswordFunctionClauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 682, self.RULE_passwordFunctionClause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7190
            localctx.functionName = self._input.LT(1)
            _la = self._input.LA(1)
            if not(_la==535 or _la==551):
                localctx.functionName = self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 7191
            self.match(MySqlParser.LR_BRACKET)
            self.state = 7192
            self.functionArg()
            self.state = 7193
            self.match(MySqlParser.RR_BRACKET)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class FunctionArgsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def constant(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ConstantContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ConstantContext,i)


        def fullColumnName(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.FullColumnNameContext)
            else:
                return self.getTypedRuleContext(MySqlParser.FullColumnNameContext,i)


        def functionCall(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.FunctionCallContext)
            else:
                return self.getTypedRuleContext(MySqlParser.FunctionCallContext,i)


        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ExpressionContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_functionArgs

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFunctionArgs" ):
                listener.enterFunctionArgs(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFunctionArgs" ):
                listener.exitFunctionArgs(self)




    def functionArgs(self):

        localctx = MySqlParser.FunctionArgsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 684, self.RULE_functionArgs)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7199
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1062,self._ctx)
            if la_ == 1:
                self.state = 7195
                self.constant()
                pass

            elif la_ == 2:
                self.state = 7196
                self.fullColumnName()
                pass

            elif la_ == 3:
                self.state = 7197
                self.functionCall()
                pass

            elif la_ == 4:
                self.state = 7198
                self.expression(0)
                pass


            self.state = 7210
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1135:
                self.state = 7201
                self.match(MySqlParser.COMMA)
                self.state = 7206
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1063,self._ctx)
                if la_ == 1:
                    self.state = 7202
                    self.constant()
                    pass

                elif la_ == 2:
                    self.state = 7203
                    self.fullColumnName()
                    pass

                elif la_ == 3:
                    self.state = 7204
                    self.functionCall()
                    pass

                elif la_ == 4:
                    self.state = 7205
                    self.expression(0)
                    pass


                self.state = 7212
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class FunctionArgContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def constant(self):
            return self.getTypedRuleContext(MySqlParser.ConstantContext,0)


        def fullColumnName(self):
            return self.getTypedRuleContext(MySqlParser.FullColumnNameContext,0)


        def functionCall(self):
            return self.getTypedRuleContext(MySqlParser.FunctionCallContext,0)


        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)


        def getRuleIndex(self):
            return MySqlParser.RULE_functionArg

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFunctionArg" ):
                listener.enterFunctionArg(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFunctionArg" ):
                listener.exitFunctionArg(self)




    def functionArg(self):

        localctx = MySqlParser.FunctionArgContext(self, self._ctx, self.state)
        self.enterRule(localctx, 686, self.RULE_functionArg)
        try:
            self.state = 7217
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1065,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 7213
                self.constant()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 7214
                self.fullColumnName()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 7215
                self.functionCall()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 7216
                self.expression(0)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ExpressionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_expression

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)


    class IsExpressionContext(ExpressionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ExpressionContext
            super().__init__(parser)
            self.testValue = None # Token
            self.copyFrom(ctx)

        def predicate(self):
            return self.getTypedRuleContext(MySqlParser.PredicateContext,0)

        def IS(self):
            return self.getToken(MySqlParser.IS, 0)
        def TRUE(self):
            return self.getToken(MySqlParser.TRUE, 0)
        def FALSE(self):
            return self.getToken(MySqlParser.FALSE, 0)
        def UNKNOWN(self):
            return self.getToken(MySqlParser.UNKNOWN, 0)
        def NOT(self):
            return self.getToken(MySqlParser.NOT, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIsExpression" ):
                listener.enterIsExpression(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIsExpression" ):
                listener.exitIsExpression(self)


    class NotExpressionContext(ExpressionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ExpressionContext
            super().__init__(parser)
            self.notOperator = None # Token
            self.copyFrom(ctx)

        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)

        def NOT(self):
            return self.getToken(MySqlParser.NOT, 0)
        def EXCLAMATION_SYMBOL(self):
            return self.getToken(MySqlParser.EXCLAMATION_SYMBOL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNotExpression" ):
                listener.enterNotExpression(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNotExpression" ):
                listener.exitNotExpression(self)


    class LogicalExpressionContext(ExpressionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ExpressionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ExpressionContext,i)

        def logicalOperator(self):
            return self.getTypedRuleContext(MySqlParser.LogicalOperatorContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLogicalExpression" ):
                listener.enterLogicalExpression(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLogicalExpression" ):
                listener.exitLogicalExpression(self)


    class PredicateExpressionContext(ExpressionContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ExpressionContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def predicate(self):
            return self.getTypedRuleContext(MySqlParser.PredicateContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPredicateExpression" ):
                listener.enterPredicateExpression(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPredicateExpression" ):
                listener.exitPredicateExpression(self)



    def expression(self, _p:int=0):
        _parentctx = self._ctx
        _parentState = self.state
        localctx = MySqlParser.ExpressionContext(self, self._ctx, _parentState)
        _prevctx = localctx
        _startState = 688
        self.enterRecursionRule(localctx, 688, self.RULE_expression, _p)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7230
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1067,self._ctx)
            if la_ == 1:
                localctx = MySqlParser.NotExpressionContext(self, localctx)
                self._ctx = localctx
                _prevctx = localctx

                self.state = 7220
                localctx.notOperator = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==114 or _la==1127):
                    localctx.notOperator = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 7221
                self.expression(4)
                pass

            elif la_ == 2:
                localctx = MySqlParser.IsExpressionContext(self, localctx)
                self._ctx = localctx
                _prevctx = localctx
                self.state = 7222
                self.predicate(0)
                self.state = 7223
                self.match(MySqlParser.IS)
                self.state = 7225
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==114:
                    self.state = 7224
                    self.match(MySqlParser.NOT)


                self.state = 7227
                localctx.testValue = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==63 or _la==178 or _la==662):
                    localctx.testValue = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass

            elif la_ == 3:
                localctx = MySqlParser.PredicateExpressionContext(self, localctx)
                self._ctx = localctx
                _prevctx = localctx
                self.state = 7229
                self.predicate(0)
                pass


            self._ctx.stop = self._input.LT(-1)
            self.state = 7238
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,1068,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    if self._parseListeners is not None:
                        self.triggerExitRuleEvent()
                    _prevctx = localctx
                    localctx = MySqlParser.LogicalExpressionContext(self, MySqlParser.ExpressionContext(self, _parentctx, _parentState))
                    self.pushNewRecursionContext(localctx, _startState, self.RULE_expression)
                    self.state = 7232
                    if not self.precpred(self._ctx, 3):
                        from antlr4.error.Errors import FailedPredicateException
                        raise FailedPredicateException(self, "self.precpred(self._ctx, 3)")
                    self.state = 7233
                    self.logicalOperator()
                    self.state = 7234
                    self.expression(4) 
                self.state = 7240
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,1068,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.unrollRecursionContexts(_parentctx)
        return localctx


    class PredicateContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_predicate

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)


    class SoundsLikePredicateContext(PredicateContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PredicateContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def predicate(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.PredicateContext)
            else:
                return self.getTypedRuleContext(MySqlParser.PredicateContext,i)

        def SOUNDS(self):
            return self.getToken(MySqlParser.SOUNDS, 0)
        def LIKE(self):
            return self.getToken(MySqlParser.LIKE, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSoundsLikePredicate" ):
                listener.enterSoundsLikePredicate(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSoundsLikePredicate" ):
                listener.exitSoundsLikePredicate(self)


    class ExpressionAtomPredicateContext(PredicateContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PredicateContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def expressionAtom(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionAtomContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterExpressionAtomPredicate" ):
                listener.enterExpressionAtomPredicate(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitExpressionAtomPredicate" ):
                listener.exitExpressionAtomPredicate(self)


    class SubqueryComparisonPredicateContext(PredicateContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PredicateContext
            super().__init__(parser)
            self.quantifier = None # Token
            self.copyFrom(ctx)

        def predicate(self):
            return self.getTypedRuleContext(MySqlParser.PredicateContext,0)

        def comparisonOperator(self):
            return self.getTypedRuleContext(MySqlParser.ComparisonOperatorContext,0)

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def selectStatement(self):
            return self.getTypedRuleContext(MySqlParser.SelectStatementContext,0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def ALL(self):
            return self.getToken(MySqlParser.ALL, 0)
        def ANY(self):
            return self.getToken(MySqlParser.ANY, 0)
        def SOME(self):
            return self.getToken(MySqlParser.SOME, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSubqueryComparisonPredicate" ):
                listener.enterSubqueryComparisonPredicate(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSubqueryComparisonPredicate" ):
                listener.exitSubqueryComparisonPredicate(self)


    class JsonMemberOfPredicateContext(PredicateContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PredicateContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def predicate(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.PredicateContext)
            else:
                return self.getTypedRuleContext(MySqlParser.PredicateContext,i)

        def MEMBER(self):
            return self.getToken(MySqlParser.MEMBER, 0)
        def OF(self):
            return self.getToken(MySqlParser.OF, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJsonMemberOfPredicate" ):
                listener.enterJsonMemberOfPredicate(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJsonMemberOfPredicate" ):
                listener.exitJsonMemberOfPredicate(self)


    class BinaryComparisonPredicateContext(PredicateContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PredicateContext
            super().__init__(parser)
            self.left = None # PredicateContext
            self.right = None # PredicateContext
            self.copyFrom(ctx)

        def comparisonOperator(self):
            return self.getTypedRuleContext(MySqlParser.ComparisonOperatorContext,0)

        def predicate(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.PredicateContext)
            else:
                return self.getTypedRuleContext(MySqlParser.PredicateContext,i)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterBinaryComparisonPredicate" ):
                listener.enterBinaryComparisonPredicate(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitBinaryComparisonPredicate" ):
                listener.exitBinaryComparisonPredicate(self)


    class InPredicateContext(PredicateContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PredicateContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def predicate(self):
            return self.getTypedRuleContext(MySqlParser.PredicateContext,0)

        def IN(self):
            return self.getToken(MySqlParser.IN, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def selectStatement(self):
            return self.getTypedRuleContext(MySqlParser.SelectStatementContext,0)

        def expressions(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionsContext,0)

        def NOT(self):
            return self.getToken(MySqlParser.NOT, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterInPredicate" ):
                listener.enterInPredicate(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitInPredicate" ):
                listener.exitInPredicate(self)


    class BetweenPredicateContext(PredicateContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PredicateContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def predicate(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.PredicateContext)
            else:
                return self.getTypedRuleContext(MySqlParser.PredicateContext,i)

        def BETWEEN(self):
            return self.getToken(MySqlParser.BETWEEN, 0)
        def AND(self):
            return self.getToken(MySqlParser.AND, 0)
        def NOT(self):
            return self.getToken(MySqlParser.NOT, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterBetweenPredicate" ):
                listener.enterBetweenPredicate(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitBetweenPredicate" ):
                listener.exitBetweenPredicate(self)


    class IsNullPredicateContext(PredicateContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PredicateContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def predicate(self):
            return self.getTypedRuleContext(MySqlParser.PredicateContext,0)

        def IS(self):
            return self.getToken(MySqlParser.IS, 0)
        def nullNotnull(self):
            return self.getTypedRuleContext(MySqlParser.NullNotnullContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIsNullPredicate" ):
                listener.enterIsNullPredicate(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIsNullPredicate" ):
                listener.exitIsNullPredicate(self)


    class LikePredicateContext(PredicateContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PredicateContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def predicate(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.PredicateContext)
            else:
                return self.getTypedRuleContext(MySqlParser.PredicateContext,i)

        def LIKE(self):
            return self.getToken(MySqlParser.LIKE, 0)
        def NOT(self):
            return self.getToken(MySqlParser.NOT, 0)
        def ESCAPE(self):
            return self.getToken(MySqlParser.ESCAPE, 0)
        def STRING_LITERAL(self):
            return self.getToken(MySqlParser.STRING_LITERAL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLikePredicate" ):
                listener.enterLikePredicate(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLikePredicate" ):
                listener.exitLikePredicate(self)


    class RegexpPredicateContext(PredicateContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.PredicateContext
            super().__init__(parser)
            self.regex = None # Token
            self.copyFrom(ctx)

        def predicate(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.PredicateContext)
            else:
                return self.getTypedRuleContext(MySqlParser.PredicateContext,i)

        def REGEXP(self):
            return self.getToken(MySqlParser.REGEXP, 0)
        def RLIKE(self):
            return self.getToken(MySqlParser.RLIKE, 0)
        def NOT(self):
            return self.getToken(MySqlParser.NOT, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRegexpPredicate" ):
                listener.enterRegexpPredicate(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRegexpPredicate" ):
                listener.exitRegexpPredicate(self)



    def predicate(self, _p:int=0):
        _parentctx = self._ctx
        _parentState = self.state
        localctx = MySqlParser.PredicateContext(self, self._ctx, _parentState)
        _prevctx = localctx
        _startState = 690
        self.enterRecursionRule(localctx, 690, self.RULE_predicate, _p)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            localctx = MySqlParser.ExpressionAtomPredicateContext(self, localctx)
            self._ctx = localctx
            _prevctx = localctx

            self.state = 7242
            self.expressionAtom(0)
            self._ctx.stop = self._input.LT(-1)
            self.state = 7308
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,1076,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 = 7306
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,1075,self._ctx)
                    if la_ == 1:
                        localctx = MySqlParser.BinaryComparisonPredicateContext(self, MySqlParser.PredicateContext(self, _parentctx, _parentState))
                        localctx.left = _prevctx
                        self.pushNewRecursionContext(localctx, _startState, self.RULE_predicate)
                        self.state = 7244
                        if not self.precpred(self._ctx, 8):
                            from antlr4.error.Errors import FailedPredicateException
                            raise FailedPredicateException(self, "self.precpred(self._ctx, 8)")
                        self.state = 7245
                        self.comparisonOperator()
                        self.state = 7246
                        localctx.right = self.predicate(9)
                        pass

                    elif la_ == 2:
                        localctx = MySqlParser.BetweenPredicateContext(self, MySqlParser.PredicateContext(self, _parentctx, _parentState))
                        self.pushNewRecursionContext(localctx, _startState, self.RULE_predicate)
                        self.state = 7248
                        if not self.precpred(self._ctx, 6):
                            from antlr4.error.Errors import FailedPredicateException
                            raise FailedPredicateException(self, "self.precpred(self._ctx, 6)")
                        self.state = 7250
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if _la==114:
                            self.state = 7249
                            self.match(MySqlParser.NOT)


                        self.state = 7252
                        self.match(MySqlParser.BETWEEN)
                        self.state = 7253
                        self.predicate(0)
                        self.state = 7254
                        self.match(MySqlParser.AND)
                        self.state = 7255
                        self.predicate(7)
                        pass

                    elif la_ == 3:
                        localctx = MySqlParser.SoundsLikePredicateContext(self, MySqlParser.PredicateContext(self, _parentctx, _parentState))
                        self.pushNewRecursionContext(localctx, _startState, self.RULE_predicate)
                        self.state = 7257
                        if not self.precpred(self._ctx, 5):
                            from antlr4.error.Errors import FailedPredicateException
                            raise FailedPredicateException(self, "self.precpred(self._ctx, 5)")
                        self.state = 7258
                        self.match(MySqlParser.SOUNDS)
                        self.state = 7259
                        self.match(MySqlParser.LIKE)
                        self.state = 7260
                        self.predicate(6)
                        pass

                    elif la_ == 4:
                        localctx = MySqlParser.RegexpPredicateContext(self, MySqlParser.PredicateContext(self, _parentctx, _parentState))
                        self.pushNewRecursionContext(localctx, _startState, self.RULE_predicate)
                        self.state = 7261
                        if not self.precpred(self._ctx, 3):
                            from antlr4.error.Errors import FailedPredicateException
                            raise FailedPredicateException(self, "self.precpred(self._ctx, 3)")
                        self.state = 7263
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if _la==114:
                            self.state = 7262
                            self.match(MySqlParser.NOT)


                        self.state = 7265
                        localctx.regex = self._input.LT(1)
                        _la = self._input.LA(1)
                        if not(_la==137 or _la==149):
                            localctx.regex = self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()
                        self.state = 7266
                        self.predicate(4)
                        pass

                    elif la_ == 5:
                        localctx = MySqlParser.InPredicateContext(self, MySqlParser.PredicateContext(self, _parentctx, _parentState))
                        self.pushNewRecursionContext(localctx, _startState, self.RULE_predicate)
                        self.state = 7267
                        if not self.precpred(self._ctx, 10):
                            from antlr4.error.Errors import FailedPredicateException
                            raise FailedPredicateException(self, "self.precpred(self._ctx, 10)")
                        self.state = 7269
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if _la==114:
                            self.state = 7268
                            self.match(MySqlParser.NOT)


                        self.state = 7271
                        self.match(MySqlParser.IN)
                        self.state = 7272
                        self.match(MySqlParser.LR_BRACKET)
                        self.state = 7275
                        self._errHandler.sync(self)
                        la_ = self._interp.adaptivePredict(self._input,1072,self._ctx)
                        if la_ == 1:
                            self.state = 7273
                            self.selectStatement()
                            pass

                        elif la_ == 2:
                            self.state = 7274
                            self.expressions()
                            pass


                        self.state = 7277
                        self.match(MySqlParser.RR_BRACKET)
                        pass

                    elif la_ == 6:
                        localctx = MySqlParser.IsNullPredicateContext(self, MySqlParser.PredicateContext(self, _parentctx, _parentState))
                        self.pushNewRecursionContext(localctx, _startState, self.RULE_predicate)
                        self.state = 7279
                        if not self.precpred(self._ctx, 9):
                            from antlr4.error.Errors import FailedPredicateException
                            raise FailedPredicateException(self, "self.precpred(self._ctx, 9)")
                        self.state = 7280
                        self.match(MySqlParser.IS)
                        self.state = 7281
                        self.nullNotnull()
                        pass

                    elif la_ == 7:
                        localctx = MySqlParser.SubqueryComparisonPredicateContext(self, MySqlParser.PredicateContext(self, _parentctx, _parentState))
                        self.pushNewRecursionContext(localctx, _startState, self.RULE_predicate)
                        self.state = 7282
                        if not self.precpred(self._ctx, 7):
                            from antlr4.error.Errors import FailedPredicateException
                            raise FailedPredicateException(self, "self.precpred(self._ctx, 7)")
                        self.state = 7283
                        self.comparisonOperator()
                        self.state = 7284
                        localctx.quantifier = self._input.LT(1)
                        _la = self._input.LA(1)
                        if not(_la==6 or _la==337 or _la==618):
                            localctx.quantifier = self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()
                        self.state = 7285
                        self.match(MySqlParser.LR_BRACKET)
                        self.state = 7286
                        self.selectStatement()
                        self.state = 7287
                        self.match(MySqlParser.RR_BRACKET)
                        pass

                    elif la_ == 8:
                        localctx = MySqlParser.LikePredicateContext(self, MySqlParser.PredicateContext(self, _parentctx, _parentState))
                        self.pushNewRecursionContext(localctx, _startState, self.RULE_predicate)
                        self.state = 7289
                        if not self.precpred(self._ctx, 4):
                            from antlr4.error.Errors import FailedPredicateException
                            raise FailedPredicateException(self, "self.precpred(self._ctx, 4)")
                        self.state = 7291
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if _la==114:
                            self.state = 7290
                            self.match(MySqlParser.NOT)


                        self.state = 7293
                        self.match(MySqlParser.LIKE)
                        self.state = 7294
                        self.predicate(0)
                        self.state = 7297
                        self._errHandler.sync(self)
                        la_ = self._interp.adaptivePredict(self._input,1074,self._ctx)
                        if la_ == 1:
                            self.state = 7295
                            self.match(MySqlParser.ESCAPE)
                            self.state = 7296
                            self.match(MySqlParser.STRING_LITERAL)


                        pass

                    elif la_ == 9:
                        localctx = MySqlParser.JsonMemberOfPredicateContext(self, MySqlParser.PredicateContext(self, _parentctx, _parentState))
                        self.pushNewRecursionContext(localctx, _startState, self.RULE_predicate)
                        self.state = 7299
                        if not self.precpred(self._ctx, 2):
                            from antlr4.error.Errors import FailedPredicateException
                            raise FailedPredicateException(self, "self.precpred(self._ctx, 2)")
                        self.state = 7300
                        self.match(MySqlParser.MEMBER)
                        self.state = 7301
                        self.match(MySqlParser.OF)
                        self.state = 7302
                        self.match(MySqlParser.LR_BRACKET)
                        self.state = 7303
                        self.predicate(0)
                        self.state = 7304
                        self.match(MySqlParser.RR_BRACKET)
                        pass

             
                self.state = 7310
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,1076,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.unrollRecursionContexts(_parentctx)
        return localctx


    class ExpressionAtomContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return MySqlParser.RULE_expressionAtom

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)


    class UnaryExpressionAtomContext(ExpressionAtomContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ExpressionAtomContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def unaryOperator(self):
            return self.getTypedRuleContext(MySqlParser.UnaryOperatorContext,0)

        def expressionAtom(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionAtomContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUnaryExpressionAtom" ):
                listener.enterUnaryExpressionAtom(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUnaryExpressionAtom" ):
                listener.exitUnaryExpressionAtom(self)


    class CollateExpressionAtomContext(ExpressionAtomContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ExpressionAtomContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def expressionAtom(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionAtomContext,0)

        def COLLATE(self):
            return self.getToken(MySqlParser.COLLATE, 0)
        def collationName(self):
            return self.getTypedRuleContext(MySqlParser.CollationNameContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCollateExpressionAtom" ):
                listener.enterCollateExpressionAtom(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCollateExpressionAtom" ):
                listener.exitCollateExpressionAtom(self)


    class VariableAssignExpressionAtomContext(ExpressionAtomContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ExpressionAtomContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def LOCAL_ID(self):
            return self.getToken(MySqlParser.LOCAL_ID, 0)
        def VAR_ASSIGN(self):
            return self.getToken(MySqlParser.VAR_ASSIGN, 0)
        def expressionAtom(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionAtomContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterVariableAssignExpressionAtom" ):
                listener.enterVariableAssignExpressionAtom(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitVariableAssignExpressionAtom" ):
                listener.exitVariableAssignExpressionAtom(self)


    class MysqlVariableExpressionAtomContext(ExpressionAtomContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ExpressionAtomContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def mysqlVariable(self):
            return self.getTypedRuleContext(MySqlParser.MysqlVariableContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMysqlVariableExpressionAtom" ):
                listener.enterMysqlVariableExpressionAtom(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMysqlVariableExpressionAtom" ):
                listener.exitMysqlVariableExpressionAtom(self)


    class NestedExpressionAtomContext(ExpressionAtomContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ExpressionAtomContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ExpressionContext,i)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNestedExpressionAtom" ):
                listener.enterNestedExpressionAtom(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNestedExpressionAtom" ):
                listener.exitNestedExpressionAtom(self)


    class NestedRowExpressionAtomContext(ExpressionAtomContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ExpressionAtomContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def ROW(self):
            return self.getToken(MySqlParser.ROW, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ExpressionContext,i)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)
        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.COMMA)
            else:
                return self.getToken(MySqlParser.COMMA, i)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNestedRowExpressionAtom" ):
                listener.enterNestedRowExpressionAtom(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNestedRowExpressionAtom" ):
                listener.exitNestedRowExpressionAtom(self)


    class MathExpressionAtomContext(ExpressionAtomContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ExpressionAtomContext
            super().__init__(parser)
            self.left = None # ExpressionAtomContext
            self.right = None # ExpressionAtomContext
            self.copyFrom(ctx)

        def multOperator(self):
            return self.getTypedRuleContext(MySqlParser.MultOperatorContext,0)

        def expressionAtom(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ExpressionAtomContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ExpressionAtomContext,i)

        def addOperator(self):
            return self.getTypedRuleContext(MySqlParser.AddOperatorContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMathExpressionAtom" ):
                listener.enterMathExpressionAtom(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMathExpressionAtom" ):
                listener.exitMathExpressionAtom(self)


    class ExistsExpressionAtomContext(ExpressionAtomContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ExpressionAtomContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def EXISTS(self):
            return self.getToken(MySqlParser.EXISTS, 0)
        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def selectStatement(self):
            return self.getTypedRuleContext(MySqlParser.SelectStatementContext,0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterExistsExpressionAtom" ):
                listener.enterExistsExpressionAtom(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitExistsExpressionAtom" ):
                listener.exitExistsExpressionAtom(self)


    class IntervalExpressionAtomContext(ExpressionAtomContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ExpressionAtomContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def INTERVAL(self):
            return self.getToken(MySqlParser.INTERVAL, 0)
        def expression(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionContext,0)

        def intervalType(self):
            return self.getTypedRuleContext(MySqlParser.IntervalTypeContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIntervalExpressionAtom" ):
                listener.enterIntervalExpressionAtom(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIntervalExpressionAtom" ):
                listener.exitIntervalExpressionAtom(self)


    class JsonExpressionAtomContext(ExpressionAtomContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ExpressionAtomContext
            super().__init__(parser)
            self.left = None # ExpressionAtomContext
            self.right = None # ExpressionAtomContext
            self.copyFrom(ctx)

        def jsonOperator(self):
            return self.getTypedRuleContext(MySqlParser.JsonOperatorContext,0)

        def expressionAtom(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ExpressionAtomContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ExpressionAtomContext,i)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJsonExpressionAtom" ):
                listener.enterJsonExpressionAtom(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJsonExpressionAtom" ):
                listener.exitJsonExpressionAtom(self)


    class SubqueryExpressionAtomContext(ExpressionAtomContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ExpressionAtomContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def LR_BRACKET(self):
            return self.getToken(MySqlParser.LR_BRACKET, 0)
        def selectStatement(self):
            return self.getTypedRuleContext(MySqlParser.SelectStatementContext,0)

        def RR_BRACKET(self):
            return self.getToken(MySqlParser.RR_BRACKET, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSubqueryExpressionAtom" ):
                listener.enterSubqueryExpressionAtom(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSubqueryExpressionAtom" ):
                listener.exitSubqueryExpressionAtom(self)


    class ConstantExpressionAtomContext(ExpressionAtomContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ExpressionAtomContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def constant(self):
            return self.getTypedRuleContext(MySqlParser.ConstantContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterConstantExpressionAtom" ):
                listener.enterConstantExpressionAtom(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitConstantExpressionAtom" ):
                listener.exitConstantExpressionAtom(self)


    class FunctionCallExpressionAtomContext(ExpressionAtomContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ExpressionAtomContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def functionCall(self):
            return self.getTypedRuleContext(MySqlParser.FunctionCallContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFunctionCallExpressionAtom" ):
                listener.enterFunctionCallExpressionAtom(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFunctionCallExpressionAtom" ):
                listener.exitFunctionCallExpressionAtom(self)


    class BinaryExpressionAtomContext(ExpressionAtomContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ExpressionAtomContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def BINARY(self):
            return self.getToken(MySqlParser.BINARY, 0)
        def expressionAtom(self):
            return self.getTypedRuleContext(MySqlParser.ExpressionAtomContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterBinaryExpressionAtom" ):
                listener.enterBinaryExpressionAtom(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitBinaryExpressionAtom" ):
                listener.exitBinaryExpressionAtom(self)


    class FullColumnNameExpressionAtomContext(ExpressionAtomContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ExpressionAtomContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def fullColumnName(self):
            return self.getTypedRuleContext(MySqlParser.FullColumnNameContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFullColumnNameExpressionAtom" ):
                listener.enterFullColumnNameExpressionAtom(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFullColumnNameExpressionAtom" ):
                listener.exitFullColumnNameExpressionAtom(self)


    class BitExpressionAtomContext(ExpressionAtomContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a MySqlParser.ExpressionAtomContext
            super().__init__(parser)
            self.left = None # ExpressionAtomContext
            self.right = None # ExpressionAtomContext
            self.copyFrom(ctx)

        def bitOperator(self):
            return self.getTypedRuleContext(MySqlParser.BitOperatorContext,0)

        def expressionAtom(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(MySqlParser.ExpressionAtomContext)
            else:
                return self.getTypedRuleContext(MySqlParser.ExpressionAtomContext,i)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterBitExpressionAtom" ):
                listener.enterBitExpressionAtom(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitBitExpressionAtom" ):
                listener.exitBitExpressionAtom(self)



    def expressionAtom(self, _p:int=0):
        _parentctx = self._ctx
        _parentState = self.state
        localctx = MySqlParser.ExpressionAtomContext(self, self._ctx, _parentState)
        _prevctx = localctx
        _startState = 692
        self.enterRecursionRule(localctx, 692, self.RULE_expressionAtom, _p)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7359
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1079,self._ctx)
            if la_ == 1:
                localctx = MySqlParser.ConstantExpressionAtomContext(self, localctx)
                self._ctx = localctx
                _prevctx = localctx

                self.state = 7312
                self.constant()
                pass

            elif la_ == 2:
                localctx = MySqlParser.FullColumnNameExpressionAtomContext(self, localctx)
                self._ctx = localctx
                _prevctx = localctx
                self.state = 7313
                self.fullColumnName()
                pass

            elif la_ == 3:
                localctx = MySqlParser.FunctionCallExpressionAtomContext(self, localctx)
                self._ctx = localctx
                _prevctx = localctx
                self.state = 7314
                self.functionCall()
                pass

            elif la_ == 4:
                localctx = MySqlParser.MysqlVariableExpressionAtomContext(self, localctx)
                self._ctx = localctx
                _prevctx = localctx
                self.state = 7315
                self.mysqlVariable()
                pass

            elif la_ == 5:
                localctx = MySqlParser.UnaryExpressionAtomContext(self, localctx)
                self._ctx = localctx
                _prevctx = localctx
                self.state = 7316
                self.unaryOperator()
                self.state = 7317
                self.expressionAtom(12)
                pass

            elif la_ == 6:
                localctx = MySqlParser.BinaryExpressionAtomContext(self, localctx)
                self._ctx = localctx
                _prevctx = localctx
                self.state = 7319
                self.match(MySqlParser.BINARY)
                self.state = 7320
                self.expressionAtom(11)
                pass

            elif la_ == 7:
                localctx = MySqlParser.VariableAssignExpressionAtomContext(self, localctx)
                self._ctx = localctx
                _prevctx = localctx
                self.state = 7321
                self.match(MySqlParser.LOCAL_ID)
                self.state = 7322
                self.match(MySqlParser.VAR_ASSIGN)
                self.state = 7323
                self.expressionAtom(10)
                pass

            elif la_ == 8:
                localctx = MySqlParser.NestedExpressionAtomContext(self, localctx)
                self._ctx = localctx
                _prevctx = localctx
                self.state = 7324
                self.match(MySqlParser.LR_BRACKET)
                self.state = 7325
                self.expression(0)
                self.state = 7330
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==1135:
                    self.state = 7326
                    self.match(MySqlParser.COMMA)
                    self.state = 7327
                    self.expression(0)
                    self.state = 7332
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 7333
                self.match(MySqlParser.RR_BRACKET)
                pass

            elif la_ == 9:
                localctx = MySqlParser.NestedRowExpressionAtomContext(self, localctx)
                self._ctx = localctx
                _prevctx = localctx
                self.state = 7335
                self.match(MySqlParser.ROW)
                self.state = 7336
                self.match(MySqlParser.LR_BRACKET)
                self.state = 7337
                self.expression(0)
                self.state = 7340 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 7338
                    self.match(MySqlParser.COMMA)
                    self.state = 7339
                    self.expression(0)
                    self.state = 7342 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==1135):
                        break

                self.state = 7344
                self.match(MySqlParser.RR_BRACKET)
                pass

            elif la_ == 10:
                localctx = MySqlParser.ExistsExpressionAtomContext(self, localctx)
                self._ctx = localctx
                _prevctx = localctx
                self.state = 7346
                self.match(MySqlParser.EXISTS)
                self.state = 7347
                self.match(MySqlParser.LR_BRACKET)
                self.state = 7348
                self.selectStatement()
                self.state = 7349
                self.match(MySqlParser.RR_BRACKET)
                pass

            elif la_ == 11:
                localctx = MySqlParser.SubqueryExpressionAtomContext(self, localctx)
                self._ctx = localctx
                _prevctx = localctx
                self.state = 7351
                self.match(MySqlParser.LR_BRACKET)
                self.state = 7352
                self.selectStatement()
                self.state = 7353
                self.match(MySqlParser.RR_BRACKET)
                pass

            elif la_ == 12:
                localctx = MySqlParser.IntervalExpressionAtomContext(self, localctx)
                self._ctx = localctx
                _prevctx = localctx
                self.state = 7355
                self.match(MySqlParser.INTERVAL)
                self.state = 7356
                self.expression(0)
                self.state = 7357
                self.intervalType()
                pass


            self._ctx.stop = self._input.LT(-1)
            self.state = 7382
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,1081,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 = 7380
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,1080,self._ctx)
                    if la_ == 1:
                        localctx = MySqlParser.BitExpressionAtomContext(self, MySqlParser.ExpressionAtomContext(self, _parentctx, _parentState))
                        localctx.left = _prevctx
                        self.pushNewRecursionContext(localctx, _startState, self.RULE_expressionAtom)
                        self.state = 7361
                        if not self.precpred(self._ctx, 4):
                            from antlr4.error.Errors import FailedPredicateException
                            raise FailedPredicateException(self, "self.precpred(self._ctx, 4)")
                        self.state = 7362
                        self.bitOperator()
                        self.state = 7363
                        localctx.right = self.expressionAtom(5)
                        pass

                    elif la_ == 2:
                        localctx = MySqlParser.MathExpressionAtomContext(self, MySqlParser.ExpressionAtomContext(self, _parentctx, _parentState))
                        localctx.left = _prevctx
                        self.pushNewRecursionContext(localctx, _startState, self.RULE_expressionAtom)
                        self.state = 7365
                        if not self.precpred(self._ctx, 3):
                            from antlr4.error.Errors import FailedPredicateException
                            raise FailedPredicateException(self, "self.precpred(self._ctx, 3)")
                        self.state = 7366
                        self.multOperator()
                        self.state = 7367
                        localctx.right = self.expressionAtom(4)
                        pass

                    elif la_ == 3:
                        localctx = MySqlParser.MathExpressionAtomContext(self, MySqlParser.ExpressionAtomContext(self, _parentctx, _parentState))
                        localctx.left = _prevctx
                        self.pushNewRecursionContext(localctx, _startState, self.RULE_expressionAtom)
                        self.state = 7369
                        if not self.precpred(self._ctx, 2):
                            from antlr4.error.Errors import FailedPredicateException
                            raise FailedPredicateException(self, "self.precpred(self._ctx, 2)")
                        self.state = 7370
                        self.addOperator()
                        self.state = 7371
                        localctx.right = self.expressionAtom(3)
                        pass

                    elif la_ == 4:
                        localctx = MySqlParser.JsonExpressionAtomContext(self, MySqlParser.ExpressionAtomContext(self, _parentctx, _parentState))
                        localctx.left = _prevctx
                        self.pushNewRecursionContext(localctx, _startState, self.RULE_expressionAtom)
                        self.state = 7373
                        if not self.precpred(self._ctx, 1):
                            from antlr4.error.Errors import FailedPredicateException
                            raise FailedPredicateException(self, "self.precpred(self._ctx, 1)")
                        self.state = 7374
                        self.jsonOperator()
                        self.state = 7375
                        localctx.right = self.expressionAtom(2)
                        pass

                    elif la_ == 5:
                        localctx = MySqlParser.CollateExpressionAtomContext(self, MySqlParser.ExpressionAtomContext(self, _parentctx, _parentState))
                        self.pushNewRecursionContext(localctx, _startState, self.RULE_expressionAtom)
                        self.state = 7377
                        if not self.precpred(self._ctx, 14):
                            from antlr4.error.Errors import FailedPredicateException
                            raise FailedPredicateException(self, "self.precpred(self._ctx, 14)")
                        self.state = 7378
                        self.match(MySqlParser.COLLATE)
                        self.state = 7379
                        self.collationName()
                        pass

             
                self.state = 7384
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,1081,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.unrollRecursionContexts(_parentctx)
        return localctx


    class UnaryOperatorContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def EXCLAMATION_SYMBOL(self):
            return self.getToken(MySqlParser.EXCLAMATION_SYMBOL, 0)

        def BIT_NOT_OP(self):
            return self.getToken(MySqlParser.BIT_NOT_OP, 0)

        def PLUS(self):
            return self.getToken(MySqlParser.PLUS, 0)

        def MINUS(self):
            return self.getToken(MySqlParser.MINUS, 0)

        def NOT(self):
            return self.getToken(MySqlParser.NOT, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_unaryOperator

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUnaryOperator" ):
                listener.enterUnaryOperator(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUnaryOperator" ):
                listener.exitUnaryOperator(self)




    def unaryOperator(self):

        localctx = MySqlParser.UnaryOperatorContext(self, self._ctx, self.state)
        self.enterRule(localctx, 694, self.RULE_unaryOperator)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7385
            _la = self._input.LA(1)
            if not(_la==114 or ((((_la - 1120)) & ~0x3f) == 0 and ((1 << (_la - 1120)) & 387) != 0)):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ComparisonOperatorContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def EQUAL_SYMBOL(self):
            return self.getToken(MySqlParser.EQUAL_SYMBOL, 0)

        def GREATER_SYMBOL(self):
            return self.getToken(MySqlParser.GREATER_SYMBOL, 0)

        def LESS_SYMBOL(self):
            return self.getToken(MySqlParser.LESS_SYMBOL, 0)

        def EXCLAMATION_SYMBOL(self):
            return self.getToken(MySqlParser.EXCLAMATION_SYMBOL, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_comparisonOperator

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterComparisonOperator" ):
                listener.enterComparisonOperator(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitComparisonOperator" ):
                listener.exitComparisonOperator(self)




    def comparisonOperator(self):

        localctx = MySqlParser.ComparisonOperatorContext(self, self._ctx, self.state)
        self.enterRule(localctx, 696, self.RULE_comparisonOperator)
        try:
            self.state = 7401
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1082,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 7387
                self.match(MySqlParser.EQUAL_SYMBOL)
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 7388
                self.match(MySqlParser.GREATER_SYMBOL)
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 7389
                self.match(MySqlParser.LESS_SYMBOL)
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 7390
                self.match(MySqlParser.LESS_SYMBOL)
                self.state = 7391
                self.match(MySqlParser.EQUAL_SYMBOL)
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 7392
                self.match(MySqlParser.GREATER_SYMBOL)
                self.state = 7393
                self.match(MySqlParser.EQUAL_SYMBOL)
                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 7394
                self.match(MySqlParser.LESS_SYMBOL)
                self.state = 7395
                self.match(MySqlParser.GREATER_SYMBOL)
                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 7396
                self.match(MySqlParser.EXCLAMATION_SYMBOL)
                self.state = 7397
                self.match(MySqlParser.EQUAL_SYMBOL)
                pass

            elif la_ == 8:
                self.enterOuterAlt(localctx, 8)
                self.state = 7398
                self.match(MySqlParser.LESS_SYMBOL)
                self.state = 7399
                self.match(MySqlParser.EQUAL_SYMBOL)
                self.state = 7400
                self.match(MySqlParser.GREATER_SYMBOL)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class LogicalOperatorContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def AND(self):
            return self.getToken(MySqlParser.AND, 0)

        def BIT_AND_OP(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.BIT_AND_OP)
            else:
                return self.getToken(MySqlParser.BIT_AND_OP, i)

        def XOR(self):
            return self.getToken(MySqlParser.XOR, 0)

        def OR(self):
            return self.getToken(MySqlParser.OR, 0)

        def BIT_OR_OP(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.BIT_OR_OP)
            else:
                return self.getToken(MySqlParser.BIT_OR_OP, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_logicalOperator

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLogicalOperator" ):
                listener.enterLogicalOperator(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLogicalOperator" ):
                listener.exitLogicalOperator(self)




    def logicalOperator(self):

        localctx = MySqlParser.LogicalOperatorContext(self, self._ctx, self.state)
        self.enterRule(localctx, 698, self.RULE_logicalOperator)
        try:
            self.state = 7410
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [10]:
                self.enterOuterAlt(localctx, 1)
                self.state = 7403
                self.match(MySqlParser.AND)
                pass
            elif token in [1130]:
                self.enterOuterAlt(localctx, 2)
                self.state = 7404
                self.match(MySqlParser.BIT_AND_OP)
                self.state = 7405
                self.match(MySqlParser.BIT_AND_OP)
                pass
            elif token in [194]:
                self.enterOuterAlt(localctx, 3)
                self.state = 7406
                self.match(MySqlParser.XOR)
                pass
            elif token in [123]:
                self.enterOuterAlt(localctx, 4)
                self.state = 7407
                self.match(MySqlParser.OR)
                pass
            elif token in [1129]:
                self.enterOuterAlt(localctx, 5)
                self.state = 7408
                self.match(MySqlParser.BIT_OR_OP)
                self.state = 7409
                self.match(MySqlParser.BIT_OR_OP)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class BitOperatorContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LESS_SYMBOL(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.LESS_SYMBOL)
            else:
                return self.getToken(MySqlParser.LESS_SYMBOL, i)

        def GREATER_SYMBOL(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.GREATER_SYMBOL)
            else:
                return self.getToken(MySqlParser.GREATER_SYMBOL, i)

        def BIT_AND_OP(self):
            return self.getToken(MySqlParser.BIT_AND_OP, 0)

        def BIT_XOR_OP(self):
            return self.getToken(MySqlParser.BIT_XOR_OP, 0)

        def BIT_OR_OP(self):
            return self.getToken(MySqlParser.BIT_OR_OP, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_bitOperator

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterBitOperator" ):
                listener.enterBitOperator(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitBitOperator" ):
                listener.exitBitOperator(self)




    def bitOperator(self):

        localctx = MySqlParser.BitOperatorContext(self, self._ctx, self.state)
        self.enterRule(localctx, 700, self.RULE_bitOperator)
        try:
            self.state = 7419
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1126]:
                self.enterOuterAlt(localctx, 1)
                self.state = 7412
                self.match(MySqlParser.LESS_SYMBOL)
                self.state = 7413
                self.match(MySqlParser.LESS_SYMBOL)
                pass
            elif token in [1125]:
                self.enterOuterAlt(localctx, 2)
                self.state = 7414
                self.match(MySqlParser.GREATER_SYMBOL)
                self.state = 7415
                self.match(MySqlParser.GREATER_SYMBOL)
                pass
            elif token in [1130]:
                self.enterOuterAlt(localctx, 3)
                self.state = 7416
                self.match(MySqlParser.BIT_AND_OP)
                pass
            elif token in [1131]:
                self.enterOuterAlt(localctx, 4)
                self.state = 7417
                self.match(MySqlParser.BIT_XOR_OP)
                pass
            elif token in [1129]:
                self.enterOuterAlt(localctx, 5)
                self.state = 7418
                self.match(MySqlParser.BIT_OR_OP)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class MultOperatorContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def STAR(self):
            return self.getToken(MySqlParser.STAR, 0)

        def DIVIDE(self):
            return self.getToken(MySqlParser.DIVIDE, 0)

        def MODULE(self):
            return self.getToken(MySqlParser.MODULE, 0)

        def DIV(self):
            return self.getToken(MySqlParser.DIV, 0)

        def MOD(self):
            return self.getToken(MySqlParser.MOD, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_multOperator

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMultOperator" ):
                listener.enterMultOperator(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMultOperator" ):
                listener.exitMultOperator(self)




    def multOperator(self):

        localctx = MySqlParser.MultOperatorContext(self, self._ctx, self.state)
        self.enterRule(localctx, 702, self.RULE_multOperator)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7421
            _la = self._input.LA(1)
            if not(((((_la - 1117)) & ~0x3f) == 0 and ((1 << (_la - 1117)) & 103) != 0)):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class AddOperatorContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PLUS(self):
            return self.getToken(MySqlParser.PLUS, 0)

        def MINUS(self):
            return self.getToken(MySqlParser.MINUS, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_addOperator

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAddOperator" ):
                listener.enterAddOperator(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAddOperator" ):
                listener.exitAddOperator(self)




    def addOperator(self):

        localctx = MySqlParser.AddOperatorContext(self, self._ctx, self.state)
        self.enterRule(localctx, 704, self.RULE_addOperator)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7423
            _la = self._input.LA(1)
            if not(_la==1120 or _la==1121):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class JsonOperatorContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MINUS(self):
            return self.getToken(MySqlParser.MINUS, 0)

        def GREATER_SYMBOL(self, i:int=None):
            if i is None:
                return self.getTokens(MySqlParser.GREATER_SYMBOL)
            else:
                return self.getToken(MySqlParser.GREATER_SYMBOL, i)

        def getRuleIndex(self):
            return MySqlParser.RULE_jsonOperator

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJsonOperator" ):
                listener.enterJsonOperator(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJsonOperator" ):
                listener.exitJsonOperator(self)




    def jsonOperator(self):

        localctx = MySqlParser.JsonOperatorContext(self, self._ctx, self.state)
        self.enterRule(localctx, 706, self.RULE_jsonOperator)
        try:
            self.state = 7430
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1085,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 7425
                self.match(MySqlParser.MINUS)
                self.state = 7426
                self.match(MySqlParser.GREATER_SYMBOL)
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 7427
                self.match(MySqlParser.MINUS)
                self.state = 7428
                self.match(MySqlParser.GREATER_SYMBOL)
                self.state = 7429
                self.match(MySqlParser.GREATER_SYMBOL)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class CharsetNameBaseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ARMSCII8(self):
            return self.getToken(MySqlParser.ARMSCII8, 0)

        def ASCII(self):
            return self.getToken(MySqlParser.ASCII, 0)

        def BIG5(self):
            return self.getToken(MySqlParser.BIG5, 0)

        def BINARY(self):
            return self.getToken(MySqlParser.BINARY, 0)

        def CP1250(self):
            return self.getToken(MySqlParser.CP1250, 0)

        def CP1251(self):
            return self.getToken(MySqlParser.CP1251, 0)

        def CP1256(self):
            return self.getToken(MySqlParser.CP1256, 0)

        def CP1257(self):
            return self.getToken(MySqlParser.CP1257, 0)

        def CP850(self):
            return self.getToken(MySqlParser.CP850, 0)

        def CP852(self):
            return self.getToken(MySqlParser.CP852, 0)

        def CP866(self):
            return self.getToken(MySqlParser.CP866, 0)

        def CP932(self):
            return self.getToken(MySqlParser.CP932, 0)

        def DEC8(self):
            return self.getToken(MySqlParser.DEC8, 0)

        def EUCJPMS(self):
            return self.getToken(MySqlParser.EUCJPMS, 0)

        def EUCKR(self):
            return self.getToken(MySqlParser.EUCKR, 0)

        def GB18030(self):
            return self.getToken(MySqlParser.GB18030, 0)

        def GB2312(self):
            return self.getToken(MySqlParser.GB2312, 0)

        def GBK(self):
            return self.getToken(MySqlParser.GBK, 0)

        def GEOSTD8(self):
            return self.getToken(MySqlParser.GEOSTD8, 0)

        def GREEK(self):
            return self.getToken(MySqlParser.GREEK, 0)

        def HEBREW(self):
            return self.getToken(MySqlParser.HEBREW, 0)

        def HP8(self):
            return self.getToken(MySqlParser.HP8, 0)

        def KEYBCS2(self):
            return self.getToken(MySqlParser.KEYBCS2, 0)

        def KOI8R(self):
            return self.getToken(MySqlParser.KOI8R, 0)

        def KOI8U(self):
            return self.getToken(MySqlParser.KOI8U, 0)

        def LATIN1(self):
            return self.getToken(MySqlParser.LATIN1, 0)

        def LATIN2(self):
            return self.getToken(MySqlParser.LATIN2, 0)

        def LATIN5(self):
            return self.getToken(MySqlParser.LATIN5, 0)

        def LATIN7(self):
            return self.getToken(MySqlParser.LATIN7, 0)

        def MACCE(self):
            return self.getToken(MySqlParser.MACCE, 0)

        def MACROMAN(self):
            return self.getToken(MySqlParser.MACROMAN, 0)

        def SJIS(self):
            return self.getToken(MySqlParser.SJIS, 0)

        def SWE7(self):
            return self.getToken(MySqlParser.SWE7, 0)

        def TIS620(self):
            return self.getToken(MySqlParser.TIS620, 0)

        def UCS2(self):
            return self.getToken(MySqlParser.UCS2, 0)

        def UJIS(self):
            return self.getToken(MySqlParser.UJIS, 0)

        def UTF16(self):
            return self.getToken(MySqlParser.UTF16, 0)

        def UTF16LE(self):
            return self.getToken(MySqlParser.UTF16LE, 0)

        def UTF32(self):
            return self.getToken(MySqlParser.UTF32, 0)

        def UTF8(self):
            return self.getToken(MySqlParser.UTF8, 0)

        def UTF8MB3(self):
            return self.getToken(MySqlParser.UTF8MB3, 0)

        def UTF8MB4(self):
            return self.getToken(MySqlParser.UTF8MB4, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_charsetNameBase

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCharsetNameBase" ):
                listener.enterCharsetNameBase(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCharsetNameBase" ):
                listener.exitCharsetNameBase(self)




    def charsetNameBase(self):

        localctx = MySqlParser.CharsetNameBaseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 708, self.RULE_charsetNameBase)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7432
            _la = self._input.LA(1)
            if not(_la==226 or ((((_la - 746)) & ~0x3f) == 0 and ((1 << (_la - 746)) & 2199023255551) != 0)):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class TransactionLevelBaseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def REPEATABLE(self):
            return self.getToken(MySqlParser.REPEATABLE, 0)

        def COMMITTED(self):
            return self.getToken(MySqlParser.COMMITTED, 0)

        def UNCOMMITTED(self):
            return self.getToken(MySqlParser.UNCOMMITTED, 0)

        def SERIALIZABLE(self):
            return self.getToken(MySqlParser.SERIALIZABLE, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_transactionLevelBase

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTransactionLevelBase" ):
                listener.enterTransactionLevelBase(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTransactionLevelBase" ):
                listener.exitTransactionLevelBase(self)




    def transactionLevelBase(self):

        localctx = MySqlParser.TransactionLevelBaseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 710, self.RULE_transactionLevelBase)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7434
            _la = self._input.LA(1)
            if not(((((_la - 799)) & ~0x3f) == 0 and ((1 << (_la - 799)) & 15) != 0)):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class PrivilegesBaseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def TABLES(self):
            return self.getToken(MySqlParser.TABLES, 0)

        def ROUTINE(self):
            return self.getToken(MySqlParser.ROUTINE, 0)

        def EXECUTE(self):
            return self.getToken(MySqlParser.EXECUTE, 0)

        def FILE(self):
            return self.getToken(MySqlParser.FILE, 0)

        def PROCESS(self):
            return self.getToken(MySqlParser.PROCESS, 0)

        def RELOAD(self):
            return self.getToken(MySqlParser.RELOAD, 0)

        def SHUTDOWN(self):
            return self.getToken(MySqlParser.SHUTDOWN, 0)

        def SUPER(self):
            return self.getToken(MySqlParser.SUPER, 0)

        def PRIVILEGES(self):
            return self.getToken(MySqlParser.PRIVILEGES, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_privilegesBase

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPrivilegesBase" ):
                listener.enterPrivilegesBase(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPrivilegesBase" ):
                listener.exitPrivilegesBase(self)




    def privilegesBase(self):

        localctx = MySqlParser.PrivilegesBaseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 712, self.RULE_privilegesBase)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7436
            _la = self._input.LA(1)
            if not(((((_la - 708)) & ~0x3f) == 0 and ((1 << (_la - 708)) & 23656792067) != 0)):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class IntervalTypeBaseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def QUARTER(self):
            return self.getToken(MySqlParser.QUARTER, 0)

        def MONTH(self):
            return self.getToken(MySqlParser.MONTH, 0)

        def DAY(self):
            return self.getToken(MySqlParser.DAY, 0)

        def HOUR(self):
            return self.getToken(MySqlParser.HOUR, 0)

        def MINUTE(self):
            return self.getToken(MySqlParser.MINUTE, 0)

        def WEEK(self):
            return self.getToken(MySqlParser.WEEK, 0)

        def SECOND(self):
            return self.getToken(MySqlParser.SECOND, 0)

        def MICROSECOND(self):
            return self.getToken(MySqlParser.MICROSECOND, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_intervalTypeBase

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIntervalTypeBase" ):
                listener.enterIntervalTypeBase(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIntervalTypeBase" ):
                listener.exitIntervalTypeBase(self)




    def intervalTypeBase(self):

        localctx = MySqlParser.IntervalTypeBaseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 714, self.RULE_intervalTypeBase)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7438
            _la = self._input.LA(1)
            if not(((((_la - 689)) & ~0x3f) == 0 and ((1 << (_la - 689)) & 255) != 0)):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DataTypeBaseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DATE(self):
            return self.getToken(MySqlParser.DATE, 0)

        def TIME(self):
            return self.getToken(MySqlParser.TIME, 0)

        def TIMESTAMP(self):
            return self.getToken(MySqlParser.TIMESTAMP, 0)

        def DATETIME(self):
            return self.getToken(MySqlParser.DATETIME, 0)

        def YEAR(self):
            return self.getToken(MySqlParser.YEAR, 0)

        def ENUM(self):
            return self.getToken(MySqlParser.ENUM, 0)

        def TEXT(self):
            return self.getToken(MySqlParser.TEXT, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_dataTypeBase

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDataTypeBase" ):
                listener.enterDataTypeBase(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDataTypeBase" ):
                listener.exitDataTypeBase(self)




    def dataTypeBase(self):

        localctx = MySqlParser.DataTypeBaseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 716, self.RULE_dataTypeBase)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7440
            _la = self._input.LA(1)
            if not(((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & 1179679) != 0)):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class KeywordsCanBeIdContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ACCOUNT(self):
            return self.getToken(MySqlParser.ACCOUNT, 0)

        def ACTION(self):
            return self.getToken(MySqlParser.ACTION, 0)

        def ADMIN(self):
            return self.getToken(MySqlParser.ADMIN, 0)

        def AFTER(self):
            return self.getToken(MySqlParser.AFTER, 0)

        def AGGREGATE(self):
            return self.getToken(MySqlParser.AGGREGATE, 0)

        def ALGORITHM(self):
            return self.getToken(MySqlParser.ALGORITHM, 0)

        def ANY(self):
            return self.getToken(MySqlParser.ANY, 0)

        def ARRAY(self):
            return self.getToken(MySqlParser.ARRAY, 0)

        def AT(self):
            return self.getToken(MySqlParser.AT, 0)

        def AUDIT_ADMIN(self):
            return self.getToken(MySqlParser.AUDIT_ADMIN, 0)

        def AUDIT_ABORT_EXEMPT(self):
            return self.getToken(MySqlParser.AUDIT_ABORT_EXEMPT, 0)

        def AUTHORS(self):
            return self.getToken(MySqlParser.AUTHORS, 0)

        def AUTOCOMMIT(self):
            return self.getToken(MySqlParser.AUTOCOMMIT, 0)

        def AUTOEXTEND_SIZE(self):
            return self.getToken(MySqlParser.AUTOEXTEND_SIZE, 0)

        def AUTO_INCREMENT(self):
            return self.getToken(MySqlParser.AUTO_INCREMENT, 0)

        def AUTHENTICATION_POLICY_ADMIN(self):
            return self.getToken(MySqlParser.AUTHENTICATION_POLICY_ADMIN, 0)

        def AVG(self):
            return self.getToken(MySqlParser.AVG, 0)

        def AVG_ROW_LENGTH(self):
            return self.getToken(MySqlParser.AVG_ROW_LENGTH, 0)

        def ATTRIBUTE(self):
            return self.getToken(MySqlParser.ATTRIBUTE, 0)

        def BACKUP_ADMIN(self):
            return self.getToken(MySqlParser.BACKUP_ADMIN, 0)

        def BEGIN(self):
            return self.getToken(MySqlParser.BEGIN, 0)

        def BINLOG(self):
            return self.getToken(MySqlParser.BINLOG, 0)

        def BINLOG_ADMIN(self):
            return self.getToken(MySqlParser.BINLOG_ADMIN, 0)

        def BINLOG_ENCRYPTION_ADMIN(self):
            return self.getToken(MySqlParser.BINLOG_ENCRYPTION_ADMIN, 0)

        def BIT(self):
            return self.getToken(MySqlParser.BIT, 0)

        def BIT_AND(self):
            return self.getToken(MySqlParser.BIT_AND, 0)

        def BIT_OR(self):
            return self.getToken(MySqlParser.BIT_OR, 0)

        def BIT_XOR(self):
            return self.getToken(MySqlParser.BIT_XOR, 0)

        def BLOCK(self):
            return self.getToken(MySqlParser.BLOCK, 0)

        def BOOL(self):
            return self.getToken(MySqlParser.BOOL, 0)

        def BOOLEAN(self):
            return self.getToken(MySqlParser.BOOLEAN, 0)

        def BTREE(self):
            return self.getToken(MySqlParser.BTREE, 0)

        def BUCKETS(self):
            return self.getToken(MySqlParser.BUCKETS, 0)

        def CACHE(self):
            return self.getToken(MySqlParser.CACHE, 0)

        def CASCADED(self):
            return self.getToken(MySqlParser.CASCADED, 0)

        def CHAIN(self):
            return self.getToken(MySqlParser.CHAIN, 0)

        def CHANGED(self):
            return self.getToken(MySqlParser.CHANGED, 0)

        def CHANNEL(self):
            return self.getToken(MySqlParser.CHANNEL, 0)

        def CHECKSUM(self):
            return self.getToken(MySqlParser.CHECKSUM, 0)

        def PAGE_CHECKSUM(self):
            return self.getToken(MySqlParser.PAGE_CHECKSUM, 0)

        def CATALOG_NAME(self):
            return self.getToken(MySqlParser.CATALOG_NAME, 0)

        def CIPHER(self):
            return self.getToken(MySqlParser.CIPHER, 0)

        def CLASS_ORIGIN(self):
            return self.getToken(MySqlParser.CLASS_ORIGIN, 0)

        def CLIENT(self):
            return self.getToken(MySqlParser.CLIENT, 0)

        def CLONE_ADMIN(self):
            return self.getToken(MySqlParser.CLONE_ADMIN, 0)

        def CLOSE(self):
            return self.getToken(MySqlParser.CLOSE, 0)

        def CLUSTERING(self):
            return self.getToken(MySqlParser.CLUSTERING, 0)

        def COALESCE(self):
            return self.getToken(MySqlParser.COALESCE, 0)

        def CODE(self):
            return self.getToken(MySqlParser.CODE, 0)

        def COLUMNS(self):
            return self.getToken(MySqlParser.COLUMNS, 0)

        def COLUMN_FORMAT(self):
            return self.getToken(MySqlParser.COLUMN_FORMAT, 0)

        def COLUMN_NAME(self):
            return self.getToken(MySqlParser.COLUMN_NAME, 0)

        def COMMENT(self):
            return self.getToken(MySqlParser.COMMENT, 0)

        def COMMIT(self):
            return self.getToken(MySqlParser.COMMIT, 0)

        def COMPACT(self):
            return self.getToken(MySqlParser.COMPACT, 0)

        def COMPLETION(self):
            return self.getToken(MySqlParser.COMPLETION, 0)

        def COMPRESSED(self):
            return self.getToken(MySqlParser.COMPRESSED, 0)

        def COMPRESSION(self):
            return self.getToken(MySqlParser.COMPRESSION, 0)

        def CONCURRENT(self):
            return self.getToken(MySqlParser.CONCURRENT, 0)

        def CONDITION(self):
            return self.getToken(MySqlParser.CONDITION, 0)

        def CONNECT(self):
            return self.getToken(MySqlParser.CONNECT, 0)

        def CONNECTION(self):
            return self.getToken(MySqlParser.CONNECTION, 0)

        def CONNECTION_ADMIN(self):
            return self.getToken(MySqlParser.CONNECTION_ADMIN, 0)

        def CONSISTENT(self):
            return self.getToken(MySqlParser.CONSISTENT, 0)

        def CONSTRAINT_CATALOG(self):
            return self.getToken(MySqlParser.CONSTRAINT_CATALOG, 0)

        def CONSTRAINT_NAME(self):
            return self.getToken(MySqlParser.CONSTRAINT_NAME, 0)

        def CONSTRAINT_SCHEMA(self):
            return self.getToken(MySqlParser.CONSTRAINT_SCHEMA, 0)

        def CONTAINS(self):
            return self.getToken(MySqlParser.CONTAINS, 0)

        def CONTEXT(self):
            return self.getToken(MySqlParser.CONTEXT, 0)

        def CONTRIBUTORS(self):
            return self.getToken(MySqlParser.CONTRIBUTORS, 0)

        def COPY(self):
            return self.getToken(MySqlParser.COPY, 0)

        def COUNT(self):
            return self.getToken(MySqlParser.COUNT, 0)

        def CPU(self):
            return self.getToken(MySqlParser.CPU, 0)

        def CURRENT(self):
            return self.getToken(MySqlParser.CURRENT, 0)

        def CURRENT_USER(self):
            return self.getToken(MySqlParser.CURRENT_USER, 0)

        def CURSOR_NAME(self):
            return self.getToken(MySqlParser.CURSOR_NAME, 0)

        def DATA(self):
            return self.getToken(MySqlParser.DATA, 0)

        def DATAFILE(self):
            return self.getToken(MySqlParser.DATAFILE, 0)

        def DEALLOCATE(self):
            return self.getToken(MySqlParser.DEALLOCATE, 0)

        def DEFAULT(self):
            return self.getToken(MySqlParser.DEFAULT, 0)

        def DEFAULT_AUTH(self):
            return self.getToken(MySqlParser.DEFAULT_AUTH, 0)

        def DEFINER(self):
            return self.getToken(MySqlParser.DEFINER, 0)

        def DELAY_KEY_WRITE(self):
            return self.getToken(MySqlParser.DELAY_KEY_WRITE, 0)

        def DES_KEY_FILE(self):
            return self.getToken(MySqlParser.DES_KEY_FILE, 0)

        def DIAGNOSTICS(self):
            return self.getToken(MySqlParser.DIAGNOSTICS, 0)

        def DIRECTORY(self):
            return self.getToken(MySqlParser.DIRECTORY, 0)

        def DISABLE(self):
            return self.getToken(MySqlParser.DISABLE, 0)

        def DISCARD(self):
            return self.getToken(MySqlParser.DISCARD, 0)

        def DISK(self):
            return self.getToken(MySqlParser.DISK, 0)

        def DO(self):
            return self.getToken(MySqlParser.DO, 0)

        def DUMPFILE(self):
            return self.getToken(MySqlParser.DUMPFILE, 0)

        def DUPLICATE(self):
            return self.getToken(MySqlParser.DUPLICATE, 0)

        def DYNAMIC(self):
            return self.getToken(MySqlParser.DYNAMIC, 0)

        def EMPTY(self):
            return self.getToken(MySqlParser.EMPTY, 0)

        def ENABLE(self):
            return self.getToken(MySqlParser.ENABLE, 0)

        def ENCRYPTION(self):
            return self.getToken(MySqlParser.ENCRYPTION, 0)

        def ENCRYPTION_KEY_ADMIN(self):
            return self.getToken(MySqlParser.ENCRYPTION_KEY_ADMIN, 0)

        def END(self):
            return self.getToken(MySqlParser.END, 0)

        def ENDS(self):
            return self.getToken(MySqlParser.ENDS, 0)

        def ENGINE(self):
            return self.getToken(MySqlParser.ENGINE, 0)

        def ENGINE_ATTRIBUTE(self):
            return self.getToken(MySqlParser.ENGINE_ATTRIBUTE, 0)

        def ENGINES(self):
            return self.getToken(MySqlParser.ENGINES, 0)

        def ENFORCED(self):
            return self.getToken(MySqlParser.ENFORCED, 0)

        def ERROR(self):
            return self.getToken(MySqlParser.ERROR, 0)

        def ERRORS(self):
            return self.getToken(MySqlParser.ERRORS, 0)

        def ESCAPE(self):
            return self.getToken(MySqlParser.ESCAPE, 0)

        def EUR(self):
            return self.getToken(MySqlParser.EUR, 0)

        def EVEN(self):
            return self.getToken(MySqlParser.EVEN, 0)

        def EVENT(self):
            return self.getToken(MySqlParser.EVENT, 0)

        def EVENTS(self):
            return self.getToken(MySqlParser.EVENTS, 0)

        def EVERY(self):
            return self.getToken(MySqlParser.EVERY, 0)

        def EXCEPT(self):
            return self.getToken(MySqlParser.EXCEPT, 0)

        def EXCHANGE(self):
            return self.getToken(MySqlParser.EXCHANGE, 0)

        def EXCLUSIVE(self):
            return self.getToken(MySqlParser.EXCLUSIVE, 0)

        def EXPIRE(self):
            return self.getToken(MySqlParser.EXPIRE, 0)

        def EXPORT(self):
            return self.getToken(MySqlParser.EXPORT, 0)

        def EXTENDED(self):
            return self.getToken(MySqlParser.EXTENDED, 0)

        def EXTENT_SIZE(self):
            return self.getToken(MySqlParser.EXTENT_SIZE, 0)

        def FAILED_LOGIN_ATTEMPTS(self):
            return self.getToken(MySqlParser.FAILED_LOGIN_ATTEMPTS, 0)

        def FAST(self):
            return self.getToken(MySqlParser.FAST, 0)

        def FAULTS(self):
            return self.getToken(MySqlParser.FAULTS, 0)

        def FIELDS(self):
            return self.getToken(MySqlParser.FIELDS, 0)

        def FILE_BLOCK_SIZE(self):
            return self.getToken(MySqlParser.FILE_BLOCK_SIZE, 0)

        def FILTER(self):
            return self.getToken(MySqlParser.FILTER, 0)

        def FIREWALL_ADMIN(self):
            return self.getToken(MySqlParser.FIREWALL_ADMIN, 0)

        def FIREWALL_EXEMPT(self):
            return self.getToken(MySqlParser.FIREWALL_EXEMPT, 0)

        def FIREWALL_USER(self):
            return self.getToken(MySqlParser.FIREWALL_USER, 0)

        def FIRST(self):
            return self.getToken(MySqlParser.FIRST, 0)

        def FIXED(self):
            return self.getToken(MySqlParser.FIXED, 0)

        def FLUSH(self):
            return self.getToken(MySqlParser.FLUSH, 0)

        def FOLLOWS(self):
            return self.getToken(MySqlParser.FOLLOWS, 0)

        def FOUND(self):
            return self.getToken(MySqlParser.FOUND, 0)

        def FULL(self):
            return self.getToken(MySqlParser.FULL, 0)

        def FUNCTION(self):
            return self.getToken(MySqlParser.FUNCTION, 0)

        def GENERAL(self):
            return self.getToken(MySqlParser.GENERAL, 0)

        def GLOBAL(self):
            return self.getToken(MySqlParser.GLOBAL, 0)

        def GRANTS(self):
            return self.getToken(MySqlParser.GRANTS, 0)

        def GROUP(self):
            return self.getToken(MySqlParser.GROUP, 0)

        def GROUP_CONCAT(self):
            return self.getToken(MySqlParser.GROUP_CONCAT, 0)

        def GROUP_REPLICATION(self):
            return self.getToken(MySqlParser.GROUP_REPLICATION, 0)

        def GROUP_REPLICATION_ADMIN(self):
            return self.getToken(MySqlParser.GROUP_REPLICATION_ADMIN, 0)

        def HANDLER(self):
            return self.getToken(MySqlParser.HANDLER, 0)

        def HASH(self):
            return self.getToken(MySqlParser.HASH, 0)

        def HELP(self):
            return self.getToken(MySqlParser.HELP, 0)

        def HISTORY(self):
            return self.getToken(MySqlParser.HISTORY, 0)

        def HOST(self):
            return self.getToken(MySqlParser.HOST, 0)

        def HOSTS(self):
            return self.getToken(MySqlParser.HOSTS, 0)

        def IDENTIFIED(self):
            return self.getToken(MySqlParser.IDENTIFIED, 0)

        def IGNORED(self):
            return self.getToken(MySqlParser.IGNORED, 0)

        def IGNORE_SERVER_IDS(self):
            return self.getToken(MySqlParser.IGNORE_SERVER_IDS, 0)

        def IMPORT(self):
            return self.getToken(MySqlParser.IMPORT, 0)

        def INDEXES(self):
            return self.getToken(MySqlParser.INDEXES, 0)

        def INITIAL_SIZE(self):
            return self.getToken(MySqlParser.INITIAL_SIZE, 0)

        def INNODB_REDO_LOG_ARCHIVE(self):
            return self.getToken(MySqlParser.INNODB_REDO_LOG_ARCHIVE, 0)

        def INPLACE(self):
            return self.getToken(MySqlParser.INPLACE, 0)

        def INSERT_METHOD(self):
            return self.getToken(MySqlParser.INSERT_METHOD, 0)

        def INSTALL(self):
            return self.getToken(MySqlParser.INSTALL, 0)

        def INSTANCE(self):
            return self.getToken(MySqlParser.INSTANCE, 0)

        def INSTANT(self):
            return self.getToken(MySqlParser.INSTANT, 0)

        def INTERNAL(self):
            return self.getToken(MySqlParser.INTERNAL, 0)

        def INVOKE(self):
            return self.getToken(MySqlParser.INVOKE, 0)

        def INVOKER(self):
            return self.getToken(MySqlParser.INVOKER, 0)

        def IO(self):
            return self.getToken(MySqlParser.IO, 0)

        def IO_THREAD(self):
            return self.getToken(MySqlParser.IO_THREAD, 0)

        def IPC(self):
            return self.getToken(MySqlParser.IPC, 0)

        def ISO(self):
            return self.getToken(MySqlParser.ISO, 0)

        def ISOLATION(self):
            return self.getToken(MySqlParser.ISOLATION, 0)

        def ISSUER(self):
            return self.getToken(MySqlParser.ISSUER, 0)

        def JIS(self):
            return self.getToken(MySqlParser.JIS, 0)

        def JSON(self):
            return self.getToken(MySqlParser.JSON, 0)

        def KEY_BLOCK_SIZE(self):
            return self.getToken(MySqlParser.KEY_BLOCK_SIZE, 0)

        def LAMBDA(self):
            return self.getToken(MySqlParser.LAMBDA, 0)

        def LANGUAGE(self):
            return self.getToken(MySqlParser.LANGUAGE, 0)

        def LAST(self):
            return self.getToken(MySqlParser.LAST, 0)

        def LATERAL(self):
            return self.getToken(MySqlParser.LATERAL, 0)

        def LEAVES(self):
            return self.getToken(MySqlParser.LEAVES, 0)

        def LESS(self):
            return self.getToken(MySqlParser.LESS, 0)

        def LEVEL(self):
            return self.getToken(MySqlParser.LEVEL, 0)

        def LIST(self):
            return self.getToken(MySqlParser.LIST, 0)

        def LOCAL(self):
            return self.getToken(MySqlParser.LOCAL, 0)

        def LOGFILE(self):
            return self.getToken(MySqlParser.LOGFILE, 0)

        def LOGS(self):
            return self.getToken(MySqlParser.LOGS, 0)

        def MASTER(self):
            return self.getToken(MySqlParser.MASTER, 0)

        def MASTER_AUTO_POSITION(self):
            return self.getToken(MySqlParser.MASTER_AUTO_POSITION, 0)

        def MASTER_CONNECT_RETRY(self):
            return self.getToken(MySqlParser.MASTER_CONNECT_RETRY, 0)

        def MASTER_DELAY(self):
            return self.getToken(MySqlParser.MASTER_DELAY, 0)

        def MASTER_HEARTBEAT_PERIOD(self):
            return self.getToken(MySqlParser.MASTER_HEARTBEAT_PERIOD, 0)

        def MASTER_HOST(self):
            return self.getToken(MySqlParser.MASTER_HOST, 0)

        def MASTER_LOG_FILE(self):
            return self.getToken(MySqlParser.MASTER_LOG_FILE, 0)

        def MASTER_LOG_POS(self):
            return self.getToken(MySqlParser.MASTER_LOG_POS, 0)

        def MASTER_PASSWORD(self):
            return self.getToken(MySqlParser.MASTER_PASSWORD, 0)

        def MASTER_PORT(self):
            return self.getToken(MySqlParser.MASTER_PORT, 0)

        def MASTER_RETRY_COUNT(self):
            return self.getToken(MySqlParser.MASTER_RETRY_COUNT, 0)

        def MASTER_SSL(self):
            return self.getToken(MySqlParser.MASTER_SSL, 0)

        def MASTER_SSL_CA(self):
            return self.getToken(MySqlParser.MASTER_SSL_CA, 0)

        def MASTER_SSL_CAPATH(self):
            return self.getToken(MySqlParser.MASTER_SSL_CAPATH, 0)

        def MASTER_SSL_CERT(self):
            return self.getToken(MySqlParser.MASTER_SSL_CERT, 0)

        def MASTER_SSL_CIPHER(self):
            return self.getToken(MySqlParser.MASTER_SSL_CIPHER, 0)

        def MASTER_SSL_CRL(self):
            return self.getToken(MySqlParser.MASTER_SSL_CRL, 0)

        def MASTER_SSL_CRLPATH(self):
            return self.getToken(MySqlParser.MASTER_SSL_CRLPATH, 0)

        def MASTER_SSL_KEY(self):
            return self.getToken(MySqlParser.MASTER_SSL_KEY, 0)

        def MASTER_TLS_VERSION(self):
            return self.getToken(MySqlParser.MASTER_TLS_VERSION, 0)

        def MASTER_USER(self):
            return self.getToken(MySqlParser.MASTER_USER, 0)

        def MAX_CONNECTIONS_PER_HOUR(self):
            return self.getToken(MySqlParser.MAX_CONNECTIONS_PER_HOUR, 0)

        def MAX_QUERIES_PER_HOUR(self):
            return self.getToken(MySqlParser.MAX_QUERIES_PER_HOUR, 0)

        def MAX(self):
            return self.getToken(MySqlParser.MAX, 0)

        def MAX_ROWS(self):
            return self.getToken(MySqlParser.MAX_ROWS, 0)

        def MAX_SIZE(self):
            return self.getToken(MySqlParser.MAX_SIZE, 0)

        def MAX_UPDATES_PER_HOUR(self):
            return self.getToken(MySqlParser.MAX_UPDATES_PER_HOUR, 0)

        def MAX_USER_CONNECTIONS(self):
            return self.getToken(MySqlParser.MAX_USER_CONNECTIONS, 0)

        def MEDIUM(self):
            return self.getToken(MySqlParser.MEDIUM, 0)

        def MEMBER(self):
            return self.getToken(MySqlParser.MEMBER, 0)

        def MEMORY(self):
            return self.getToken(MySqlParser.MEMORY, 0)

        def MERGE(self):
            return self.getToken(MySqlParser.MERGE, 0)

        def MESSAGE_TEXT(self):
            return self.getToken(MySqlParser.MESSAGE_TEXT, 0)

        def MID(self):
            return self.getToken(MySqlParser.MID, 0)

        def MIGRATE(self):
            return self.getToken(MySqlParser.MIGRATE, 0)

        def MIN(self):
            return self.getToken(MySqlParser.MIN, 0)

        def MIN_ROWS(self):
            return self.getToken(MySqlParser.MIN_ROWS, 0)

        def MODE(self):
            return self.getToken(MySqlParser.MODE, 0)

        def MODIFY(self):
            return self.getToken(MySqlParser.MODIFY, 0)

        def MUTEX(self):
            return self.getToken(MySqlParser.MUTEX, 0)

        def MYSQL(self):
            return self.getToken(MySqlParser.MYSQL, 0)

        def MYSQL_ERRNO(self):
            return self.getToken(MySqlParser.MYSQL_ERRNO, 0)

        def NAME(self):
            return self.getToken(MySqlParser.NAME, 0)

        def NAMES(self):
            return self.getToken(MySqlParser.NAMES, 0)

        def NCHAR(self):
            return self.getToken(MySqlParser.NCHAR, 0)

        def NDB_STORED_USER(self):
            return self.getToken(MySqlParser.NDB_STORED_USER, 0)

        def NESTED(self):
            return self.getToken(MySqlParser.NESTED, 0)

        def NEVER(self):
            return self.getToken(MySqlParser.NEVER, 0)

        def NEXT(self):
            return self.getToken(MySqlParser.NEXT, 0)

        def NO(self):
            return self.getToken(MySqlParser.NO, 0)

        def NOCOPY(self):
            return self.getToken(MySqlParser.NOCOPY, 0)

        def NODEGROUP(self):
            return self.getToken(MySqlParser.NODEGROUP, 0)

        def NONE(self):
            return self.getToken(MySqlParser.NONE, 0)

        def NOWAIT(self):
            return self.getToken(MySqlParser.NOWAIT, 0)

        def NUMBER(self):
            return self.getToken(MySqlParser.NUMBER, 0)

        def ODBC(self):
            return self.getToken(MySqlParser.ODBC, 0)

        def OFFLINE(self):
            return self.getToken(MySqlParser.OFFLINE, 0)

        def OFFSET(self):
            return self.getToken(MySqlParser.OFFSET, 0)

        def OF(self):
            return self.getToken(MySqlParser.OF, 0)

        def OJ(self):
            return self.getToken(MySqlParser.OJ, 0)

        def OLD_PASSWORD(self):
            return self.getToken(MySqlParser.OLD_PASSWORD, 0)

        def ONE(self):
            return self.getToken(MySqlParser.ONE, 0)

        def ONLINE(self):
            return self.getToken(MySqlParser.ONLINE, 0)

        def ONLY(self):
            return self.getToken(MySqlParser.ONLY, 0)

        def OPEN(self):
            return self.getToken(MySqlParser.OPEN, 0)

        def OPTIMIZER_COSTS(self):
            return self.getToken(MySqlParser.OPTIMIZER_COSTS, 0)

        def OPTIONAL(self):
            return self.getToken(MySqlParser.OPTIONAL, 0)

        def OPTIONS(self):
            return self.getToken(MySqlParser.OPTIONS, 0)

        def ORDER(self):
            return self.getToken(MySqlParser.ORDER, 0)

        def ORDINALITY(self):
            return self.getToken(MySqlParser.ORDINALITY, 0)

        def OWNER(self):
            return self.getToken(MySqlParser.OWNER, 0)

        def PACK_KEYS(self):
            return self.getToken(MySqlParser.PACK_KEYS, 0)

        def PAGE(self):
            return self.getToken(MySqlParser.PAGE, 0)

        def PARSER(self):
            return self.getToken(MySqlParser.PARSER, 0)

        def PARTIAL(self):
            return self.getToken(MySqlParser.PARTIAL, 0)

        def PARTITIONING(self):
            return self.getToken(MySqlParser.PARTITIONING, 0)

        def PARTITIONS(self):
            return self.getToken(MySqlParser.PARTITIONS, 0)

        def PASSWORD(self):
            return self.getToken(MySqlParser.PASSWORD, 0)

        def PASSWORDLESS_USER_ADMIN(self):
            return self.getToken(MySqlParser.PASSWORDLESS_USER_ADMIN, 0)

        def PASSWORD_LOCK_TIME(self):
            return self.getToken(MySqlParser.PASSWORD_LOCK_TIME, 0)

        def PATH(self):
            return self.getToken(MySqlParser.PATH, 0)

        def PERSIST_RO_VARIABLES_ADMIN(self):
            return self.getToken(MySqlParser.PERSIST_RO_VARIABLES_ADMIN, 0)

        def PHASE(self):
            return self.getToken(MySqlParser.PHASE, 0)

        def PLUGINS(self):
            return self.getToken(MySqlParser.PLUGINS, 0)

        def PLUGIN_DIR(self):
            return self.getToken(MySqlParser.PLUGIN_DIR, 0)

        def PLUGIN(self):
            return self.getToken(MySqlParser.PLUGIN, 0)

        def PORT(self):
            return self.getToken(MySqlParser.PORT, 0)

        def PRECEDES(self):
            return self.getToken(MySqlParser.PRECEDES, 0)

        def PREPARE(self):
            return self.getToken(MySqlParser.PREPARE, 0)

        def PRESERVE(self):
            return self.getToken(MySqlParser.PRESERVE, 0)

        def PREV(self):
            return self.getToken(MySqlParser.PREV, 0)

        def PRIMARY(self):
            return self.getToken(MySqlParser.PRIMARY, 0)

        def PROCESSLIST(self):
            return self.getToken(MySqlParser.PROCESSLIST, 0)

        def PROFILE(self):
            return self.getToken(MySqlParser.PROFILE, 0)

        def PROFILES(self):
            return self.getToken(MySqlParser.PROFILES, 0)

        def PROXY(self):
            return self.getToken(MySqlParser.PROXY, 0)

        def QUERY(self):
            return self.getToken(MySqlParser.QUERY, 0)

        def QUICK(self):
            return self.getToken(MySqlParser.QUICK, 0)

        def REBUILD(self):
            return self.getToken(MySqlParser.REBUILD, 0)

        def RECOVER(self):
            return self.getToken(MySqlParser.RECOVER, 0)

        def RECURSIVE(self):
            return self.getToken(MySqlParser.RECURSIVE, 0)

        def REDO_BUFFER_SIZE(self):
            return self.getToken(MySqlParser.REDO_BUFFER_SIZE, 0)

        def REDUNDANT(self):
            return self.getToken(MySqlParser.REDUNDANT, 0)

        def RELAY(self):
            return self.getToken(MySqlParser.RELAY, 0)

        def RELAYLOG(self):
            return self.getToken(MySqlParser.RELAYLOG, 0)

        def RELAY_LOG_FILE(self):
            return self.getToken(MySqlParser.RELAY_LOG_FILE, 0)

        def RELAY_LOG_POS(self):
            return self.getToken(MySqlParser.RELAY_LOG_POS, 0)

        def REMOVE(self):
            return self.getToken(MySqlParser.REMOVE, 0)

        def REORGANIZE(self):
            return self.getToken(MySqlParser.REORGANIZE, 0)

        def REPAIR(self):
            return self.getToken(MySqlParser.REPAIR, 0)

        def REPLICATE_DO_DB(self):
            return self.getToken(MySqlParser.REPLICATE_DO_DB, 0)

        def REPLICATE_DO_TABLE(self):
            return self.getToken(MySqlParser.REPLICATE_DO_TABLE, 0)

        def REPLICATE_IGNORE_DB(self):
            return self.getToken(MySqlParser.REPLICATE_IGNORE_DB, 0)

        def REPLICATE_IGNORE_TABLE(self):
            return self.getToken(MySqlParser.REPLICATE_IGNORE_TABLE, 0)

        def REPLICATE_REWRITE_DB(self):
            return self.getToken(MySqlParser.REPLICATE_REWRITE_DB, 0)

        def REPLICATE_WILD_DO_TABLE(self):
            return self.getToken(MySqlParser.REPLICATE_WILD_DO_TABLE, 0)

        def REPLICATE_WILD_IGNORE_TABLE(self):
            return self.getToken(MySqlParser.REPLICATE_WILD_IGNORE_TABLE, 0)

        def REPLICATION(self):
            return self.getToken(MySqlParser.REPLICATION, 0)

        def REPLICATION_APPLIER(self):
            return self.getToken(MySqlParser.REPLICATION_APPLIER, 0)

        def REPLICATION_SLAVE_ADMIN(self):
            return self.getToken(MySqlParser.REPLICATION_SLAVE_ADMIN, 0)

        def RESET(self):
            return self.getToken(MySqlParser.RESET, 0)

        def RESOURCE_GROUP_ADMIN(self):
            return self.getToken(MySqlParser.RESOURCE_GROUP_ADMIN, 0)

        def RESOURCE_GROUP_USER(self):
            return self.getToken(MySqlParser.RESOURCE_GROUP_USER, 0)

        def RESUME(self):
            return self.getToken(MySqlParser.RESUME, 0)

        def RETURNED_SQLSTATE(self):
            return self.getToken(MySqlParser.RETURNED_SQLSTATE, 0)

        def RETURNING(self):
            return self.getToken(MySqlParser.RETURNING, 0)

        def RETURNS(self):
            return self.getToken(MySqlParser.RETURNS, 0)

        def REUSE(self):
            return self.getToken(MySqlParser.REUSE, 0)

        def ROLE(self):
            return self.getToken(MySqlParser.ROLE, 0)

        def ROLE_ADMIN(self):
            return self.getToken(MySqlParser.ROLE_ADMIN, 0)

        def ROLLBACK(self):
            return self.getToken(MySqlParser.ROLLBACK, 0)

        def ROLLUP(self):
            return self.getToken(MySqlParser.ROLLUP, 0)

        def ROTATE(self):
            return self.getToken(MySqlParser.ROTATE, 0)

        def ROW(self):
            return self.getToken(MySqlParser.ROW, 0)

        def ROWS(self):
            return self.getToken(MySqlParser.ROWS, 0)

        def ROW_FORMAT(self):
            return self.getToken(MySqlParser.ROW_FORMAT, 0)

        def RTREE(self):
            return self.getToken(MySqlParser.RTREE, 0)

        def S3(self):
            return self.getToken(MySqlParser.S3, 0)

        def SAVEPOINT(self):
            return self.getToken(MySqlParser.SAVEPOINT, 0)

        def SCHEDULE(self):
            return self.getToken(MySqlParser.SCHEDULE, 0)

        def SCHEMA_NAME(self):
            return self.getToken(MySqlParser.SCHEMA_NAME, 0)

        def SECURITY(self):
            return self.getToken(MySqlParser.SECURITY, 0)

        def SECONDARY_ENGINE_ATTRIBUTE(self):
            return self.getToken(MySqlParser.SECONDARY_ENGINE_ATTRIBUTE, 0)

        def SERIAL(self):
            return self.getToken(MySqlParser.SERIAL, 0)

        def SERVER(self):
            return self.getToken(MySqlParser.SERVER, 0)

        def SESSION(self):
            return self.getToken(MySqlParser.SESSION, 0)

        def SESSION_VARIABLES_ADMIN(self):
            return self.getToken(MySqlParser.SESSION_VARIABLES_ADMIN, 0)

        def SET_USER_ID(self):
            return self.getToken(MySqlParser.SET_USER_ID, 0)

        def SHARE(self):
            return self.getToken(MySqlParser.SHARE, 0)

        def SHARED(self):
            return self.getToken(MySqlParser.SHARED, 0)

        def SHOW_ROUTINE(self):
            return self.getToken(MySqlParser.SHOW_ROUTINE, 0)

        def SIGNED(self):
            return self.getToken(MySqlParser.SIGNED, 0)

        def SIMPLE(self):
            return self.getToken(MySqlParser.SIMPLE, 0)

        def SLAVE(self):
            return self.getToken(MySqlParser.SLAVE, 0)

        def SLOW(self):
            return self.getToken(MySqlParser.SLOW, 0)

        def SKIP_QUERY_REWRITE(self):
            return self.getToken(MySqlParser.SKIP_QUERY_REWRITE, 0)

        def SNAPSHOT(self):
            return self.getToken(MySqlParser.SNAPSHOT, 0)

        def SOCKET(self):
            return self.getToken(MySqlParser.SOCKET, 0)

        def SOME(self):
            return self.getToken(MySqlParser.SOME, 0)

        def SONAME(self):
            return self.getToken(MySqlParser.SONAME, 0)

        def SOUNDS(self):
            return self.getToken(MySqlParser.SOUNDS, 0)

        def SOURCE(self):
            return self.getToken(MySqlParser.SOURCE, 0)

        def SQL_AFTER_GTIDS(self):
            return self.getToken(MySqlParser.SQL_AFTER_GTIDS, 0)

        def SQL_AFTER_MTS_GAPS(self):
            return self.getToken(MySqlParser.SQL_AFTER_MTS_GAPS, 0)

        def SQL_BEFORE_GTIDS(self):
            return self.getToken(MySqlParser.SQL_BEFORE_GTIDS, 0)

        def SQL_BUFFER_RESULT(self):
            return self.getToken(MySqlParser.SQL_BUFFER_RESULT, 0)

        def SQL_CACHE(self):
            return self.getToken(MySqlParser.SQL_CACHE, 0)

        def SQL_NO_CACHE(self):
            return self.getToken(MySqlParser.SQL_NO_CACHE, 0)

        def SQL_THREAD(self):
            return self.getToken(MySqlParser.SQL_THREAD, 0)

        def STACKED(self):
            return self.getToken(MySqlParser.STACKED, 0)

        def START(self):
            return self.getToken(MySqlParser.START, 0)

        def STARTS(self):
            return self.getToken(MySqlParser.STARTS, 0)

        def STATS_AUTO_RECALC(self):
            return self.getToken(MySqlParser.STATS_AUTO_RECALC, 0)

        def STATS_PERSISTENT(self):
            return self.getToken(MySqlParser.STATS_PERSISTENT, 0)

        def STATS_SAMPLE_PAGES(self):
            return self.getToken(MySqlParser.STATS_SAMPLE_PAGES, 0)

        def STATUS(self):
            return self.getToken(MySqlParser.STATUS, 0)

        def STD(self):
            return self.getToken(MySqlParser.STD, 0)

        def STDDEV(self):
            return self.getToken(MySqlParser.STDDEV, 0)

        def STDDEV_POP(self):
            return self.getToken(MySqlParser.STDDEV_POP, 0)

        def STDDEV_SAMP(self):
            return self.getToken(MySqlParser.STDDEV_SAMP, 0)

        def STOP(self):
            return self.getToken(MySqlParser.STOP, 0)

        def STORAGE(self):
            return self.getToken(MySqlParser.STORAGE, 0)

        def STRING(self):
            return self.getToken(MySqlParser.STRING, 0)

        def SUBCLASS_ORIGIN(self):
            return self.getToken(MySqlParser.SUBCLASS_ORIGIN, 0)

        def SUBJECT(self):
            return self.getToken(MySqlParser.SUBJECT, 0)

        def SUBPARTITION(self):
            return self.getToken(MySqlParser.SUBPARTITION, 0)

        def SUBPARTITIONS(self):
            return self.getToken(MySqlParser.SUBPARTITIONS, 0)

        def SUM(self):
            return self.getToken(MySqlParser.SUM, 0)

        def SUSPEND(self):
            return self.getToken(MySqlParser.SUSPEND, 0)

        def SWAPS(self):
            return self.getToken(MySqlParser.SWAPS, 0)

        def SWITCHES(self):
            return self.getToken(MySqlParser.SWITCHES, 0)

        def SYSTEM_VARIABLES_ADMIN(self):
            return self.getToken(MySqlParser.SYSTEM_VARIABLES_ADMIN, 0)

        def TABLE_NAME(self):
            return self.getToken(MySqlParser.TABLE_NAME, 0)

        def TABLESPACE(self):
            return self.getToken(MySqlParser.TABLESPACE, 0)

        def TABLE_ENCRYPTION_ADMIN(self):
            return self.getToken(MySqlParser.TABLE_ENCRYPTION_ADMIN, 0)

        def TABLE_TYPE(self):
            return self.getToken(MySqlParser.TABLE_TYPE, 0)

        def TEMPORARY(self):
            return self.getToken(MySqlParser.TEMPORARY, 0)

        def TEMPTABLE(self):
            return self.getToken(MySqlParser.TEMPTABLE, 0)

        def THAN(self):
            return self.getToken(MySqlParser.THAN, 0)

        def TP_CONNECTION_ADMIN(self):
            return self.getToken(MySqlParser.TP_CONNECTION_ADMIN, 0)

        def TRADITIONAL(self):
            return self.getToken(MySqlParser.TRADITIONAL, 0)

        def TRANSACTION(self):
            return self.getToken(MySqlParser.TRANSACTION, 0)

        def TRANSACTIONAL(self):
            return self.getToken(MySqlParser.TRANSACTIONAL, 0)

        def TRIGGERS(self):
            return self.getToken(MySqlParser.TRIGGERS, 0)

        def TRUNCATE(self):
            return self.getToken(MySqlParser.TRUNCATE, 0)

        def UNBOUNDED(self):
            return self.getToken(MySqlParser.UNBOUNDED, 0)

        def UNDEFINED(self):
            return self.getToken(MySqlParser.UNDEFINED, 0)

        def UNDOFILE(self):
            return self.getToken(MySqlParser.UNDOFILE, 0)

        def UNDO_BUFFER_SIZE(self):
            return self.getToken(MySqlParser.UNDO_BUFFER_SIZE, 0)

        def UNINSTALL(self):
            return self.getToken(MySqlParser.UNINSTALL, 0)

        def UNKNOWN(self):
            return self.getToken(MySqlParser.UNKNOWN, 0)

        def UNTIL(self):
            return self.getToken(MySqlParser.UNTIL, 0)

        def UPGRADE(self):
            return self.getToken(MySqlParser.UPGRADE, 0)

        def USA(self):
            return self.getToken(MySqlParser.USA, 0)

        def USER(self):
            return self.getToken(MySqlParser.USER, 0)

        def USE_FRM(self):
            return self.getToken(MySqlParser.USE_FRM, 0)

        def USER_RESOURCES(self):
            return self.getToken(MySqlParser.USER_RESOURCES, 0)

        def VALIDATION(self):
            return self.getToken(MySqlParser.VALIDATION, 0)

        def VALUE(self):
            return self.getToken(MySqlParser.VALUE, 0)

        def VAR_POP(self):
            return self.getToken(MySqlParser.VAR_POP, 0)

        def VAR_SAMP(self):
            return self.getToken(MySqlParser.VAR_SAMP, 0)

        def VARIABLES(self):
            return self.getToken(MySqlParser.VARIABLES, 0)

        def VARIANCE(self):
            return self.getToken(MySqlParser.VARIANCE, 0)

        def VERSION_TOKEN_ADMIN(self):
            return self.getToken(MySqlParser.VERSION_TOKEN_ADMIN, 0)

        def VIEW(self):
            return self.getToken(MySqlParser.VIEW, 0)

        def VIRTUAL(self):
            return self.getToken(MySqlParser.VIRTUAL, 0)

        def WAIT(self):
            return self.getToken(MySqlParser.WAIT, 0)

        def WARNINGS(self):
            return self.getToken(MySqlParser.WARNINGS, 0)

        def WITHOUT(self):
            return self.getToken(MySqlParser.WITHOUT, 0)

        def WORK(self):
            return self.getToken(MySqlParser.WORK, 0)

        def WRAPPER(self):
            return self.getToken(MySqlParser.WRAPPER, 0)

        def X509(self):
            return self.getToken(MySqlParser.X509, 0)

        def XA(self):
            return self.getToken(MySqlParser.XA, 0)

        def XA_RECOVER_ADMIN(self):
            return self.getToken(MySqlParser.XA_RECOVER_ADMIN, 0)

        def XML(self):
            return self.getToken(MySqlParser.XML, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_keywordsCanBeId

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterKeywordsCanBeId" ):
                listener.enterKeywordsCanBeId(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitKeywordsCanBeId" ):
                listener.exitKeywordsCanBeId(self)




    def keywordsCanBeId(self):

        localctx = MySqlParser.KeywordsCanBeIdContext(self, self._ctx, self.state)
        self.enterRule(localctx, 718, self.RULE_keywordsCanBeId)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7442
            _la = self._input.LA(1)
            if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 756890782757308416) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 146666055054393409) != 0) or _la==158 or _la==168 or ((((_la - 239)) & ~0x3f) == 0 and ((1 << (_la - 239)) & 1769897061370560513) != 0) or ((((_la - 305)) & ~0x3f) == 0 and ((1 << (_la - 305)) & -134217473) != 0) or ((((_la - 369)) & ~0x3f) == 0 and ((1 << (_la - 369)) & -171798822913) != 0) or ((((_la - 434)) & ~0x3f) == 0 and ((1 << (_la - 434)) & -33685505) != 0) or ((((_la - 498)) & ~0x3f) == 0 and ((1 << (_la - 498)) & -2306265222165299201) != 0) or ((((_la - 562)) & ~0x3f) == 0 and ((1 << (_la - 562)) & -35184640524289) != 0) or ((((_la - 626)) & ~0x3f) == 0 and ((1 << (_la - 626)) & 9077990211383719935) != 0) or ((((_la - 697)) & ~0x3f) == 0 and ((1 << (_la - 697)) & 514225960183805) != 0) or _la==792 or _la==836 or _la==875 or _la==1000 or _la==1005 or _la==1088):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class FunctionNameBaseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ABS(self):
            return self.getToken(MySqlParser.ABS, 0)

        def ACOS(self):
            return self.getToken(MySqlParser.ACOS, 0)

        def ADDDATE(self):
            return self.getToken(MySqlParser.ADDDATE, 0)

        def ADDTIME(self):
            return self.getToken(MySqlParser.ADDTIME, 0)

        def AES_DECRYPT(self):
            return self.getToken(MySqlParser.AES_DECRYPT, 0)

        def AES_ENCRYPT(self):
            return self.getToken(MySqlParser.AES_ENCRYPT, 0)

        def AREA(self):
            return self.getToken(MySqlParser.AREA, 0)

        def ASBINARY(self):
            return self.getToken(MySqlParser.ASBINARY, 0)

        def ASIN(self):
            return self.getToken(MySqlParser.ASIN, 0)

        def ASTEXT(self):
            return self.getToken(MySqlParser.ASTEXT, 0)

        def ASWKB(self):
            return self.getToken(MySqlParser.ASWKB, 0)

        def ASWKT(self):
            return self.getToken(MySqlParser.ASWKT, 0)

        def ASYMMETRIC_DECRYPT(self):
            return self.getToken(MySqlParser.ASYMMETRIC_DECRYPT, 0)

        def ASYMMETRIC_DERIVE(self):
            return self.getToken(MySqlParser.ASYMMETRIC_DERIVE, 0)

        def ASYMMETRIC_ENCRYPT(self):
            return self.getToken(MySqlParser.ASYMMETRIC_ENCRYPT, 0)

        def ASYMMETRIC_SIGN(self):
            return self.getToken(MySqlParser.ASYMMETRIC_SIGN, 0)

        def ASYMMETRIC_VERIFY(self):
            return self.getToken(MySqlParser.ASYMMETRIC_VERIFY, 0)

        def ATAN(self):
            return self.getToken(MySqlParser.ATAN, 0)

        def ATAN2(self):
            return self.getToken(MySqlParser.ATAN2, 0)

        def BENCHMARK(self):
            return self.getToken(MySqlParser.BENCHMARK, 0)

        def BIN(self):
            return self.getToken(MySqlParser.BIN, 0)

        def BIT_COUNT(self):
            return self.getToken(MySqlParser.BIT_COUNT, 0)

        def BIT_LENGTH(self):
            return self.getToken(MySqlParser.BIT_LENGTH, 0)

        def BUFFER(self):
            return self.getToken(MySqlParser.BUFFER, 0)

        def CEIL(self):
            return self.getToken(MySqlParser.CEIL, 0)

        def CEILING(self):
            return self.getToken(MySqlParser.CEILING, 0)

        def CENTROID(self):
            return self.getToken(MySqlParser.CENTROID, 0)

        def CHARACTER_LENGTH(self):
            return self.getToken(MySqlParser.CHARACTER_LENGTH, 0)

        def CHARSET(self):
            return self.getToken(MySqlParser.CHARSET, 0)

        def CHAR_LENGTH(self):
            return self.getToken(MySqlParser.CHAR_LENGTH, 0)

        def COERCIBILITY(self):
            return self.getToken(MySqlParser.COERCIBILITY, 0)

        def COLLATION(self):
            return self.getToken(MySqlParser.COLLATION, 0)

        def COMPRESS(self):
            return self.getToken(MySqlParser.COMPRESS, 0)

        def CONCAT(self):
            return self.getToken(MySqlParser.CONCAT, 0)

        def CONCAT_WS(self):
            return self.getToken(MySqlParser.CONCAT_WS, 0)

        def CONNECTION_ID(self):
            return self.getToken(MySqlParser.CONNECTION_ID, 0)

        def CONV(self):
            return self.getToken(MySqlParser.CONV, 0)

        def CONVERT_TZ(self):
            return self.getToken(MySqlParser.CONVERT_TZ, 0)

        def COS(self):
            return self.getToken(MySqlParser.COS, 0)

        def COT(self):
            return self.getToken(MySqlParser.COT, 0)

        def COUNT(self):
            return self.getToken(MySqlParser.COUNT, 0)

        def CRC32(self):
            return self.getToken(MySqlParser.CRC32, 0)

        def CREATE_ASYMMETRIC_PRIV_KEY(self):
            return self.getToken(MySqlParser.CREATE_ASYMMETRIC_PRIV_KEY, 0)

        def CREATE_ASYMMETRIC_PUB_KEY(self):
            return self.getToken(MySqlParser.CREATE_ASYMMETRIC_PUB_KEY, 0)

        def CREATE_DH_PARAMETERS(self):
            return self.getToken(MySqlParser.CREATE_DH_PARAMETERS, 0)

        def CREATE_DIGEST(self):
            return self.getToken(MySqlParser.CREATE_DIGEST, 0)

        def CROSSES(self):
            return self.getToken(MySqlParser.CROSSES, 0)

        def CUME_DIST(self):
            return self.getToken(MySqlParser.CUME_DIST, 0)

        def DATABASE(self):
            return self.getToken(MySqlParser.DATABASE, 0)

        def DATE(self):
            return self.getToken(MySqlParser.DATE, 0)

        def DATEDIFF(self):
            return self.getToken(MySqlParser.DATEDIFF, 0)

        def DATE_FORMAT(self):
            return self.getToken(MySqlParser.DATE_FORMAT, 0)

        def DAY(self):
            return self.getToken(MySqlParser.DAY, 0)

        def DAYNAME(self):
            return self.getToken(MySqlParser.DAYNAME, 0)

        def DAYOFMONTH(self):
            return self.getToken(MySqlParser.DAYOFMONTH, 0)

        def DAYOFWEEK(self):
            return self.getToken(MySqlParser.DAYOFWEEK, 0)

        def DAYOFYEAR(self):
            return self.getToken(MySqlParser.DAYOFYEAR, 0)

        def DECODE(self):
            return self.getToken(MySqlParser.DECODE, 0)

        def DEGREES(self):
            return self.getToken(MySqlParser.DEGREES, 0)

        def DENSE_RANK(self):
            return self.getToken(MySqlParser.DENSE_RANK, 0)

        def DES_DECRYPT(self):
            return self.getToken(MySqlParser.DES_DECRYPT, 0)

        def DES_ENCRYPT(self):
            return self.getToken(MySqlParser.DES_ENCRYPT, 0)

        def DIMENSION(self):
            return self.getToken(MySqlParser.DIMENSION, 0)

        def DISJOINT(self):
            return self.getToken(MySqlParser.DISJOINT, 0)

        def ELT(self):
            return self.getToken(MySqlParser.ELT, 0)

        def ENCODE(self):
            return self.getToken(MySqlParser.ENCODE, 0)

        def ENCRYPT(self):
            return self.getToken(MySqlParser.ENCRYPT, 0)

        def ENDPOINT(self):
            return self.getToken(MySqlParser.ENDPOINT, 0)

        def ENVELOPE(self):
            return self.getToken(MySqlParser.ENVELOPE, 0)

        def EQUALS(self):
            return self.getToken(MySqlParser.EQUALS, 0)

        def EXP(self):
            return self.getToken(MySqlParser.EXP, 0)

        def EXPORT_SET(self):
            return self.getToken(MySqlParser.EXPORT_SET, 0)

        def EXTERIORRING(self):
            return self.getToken(MySqlParser.EXTERIORRING, 0)

        def EXTRACTVALUE(self):
            return self.getToken(MySqlParser.EXTRACTVALUE, 0)

        def FIELD(self):
            return self.getToken(MySqlParser.FIELD, 0)

        def FIND_IN_SET(self):
            return self.getToken(MySqlParser.FIND_IN_SET, 0)

        def FIRST_VALUE(self):
            return self.getToken(MySqlParser.FIRST_VALUE, 0)

        def FLOOR(self):
            return self.getToken(MySqlParser.FLOOR, 0)

        def FORMAT(self):
            return self.getToken(MySqlParser.FORMAT, 0)

        def FOUND_ROWS(self):
            return self.getToken(MySqlParser.FOUND_ROWS, 0)

        def FROM_BASE64(self):
            return self.getToken(MySqlParser.FROM_BASE64, 0)

        def FROM_DAYS(self):
            return self.getToken(MySqlParser.FROM_DAYS, 0)

        def FROM_UNIXTIME(self):
            return self.getToken(MySqlParser.FROM_UNIXTIME, 0)

        def GEOMCOLLFROMTEXT(self):
            return self.getToken(MySqlParser.GEOMCOLLFROMTEXT, 0)

        def GEOMCOLLFROMWKB(self):
            return self.getToken(MySqlParser.GEOMCOLLFROMWKB, 0)

        def GEOMETRYCOLLECTION(self):
            return self.getToken(MySqlParser.GEOMETRYCOLLECTION, 0)

        def GEOMETRYCOLLECTIONFROMTEXT(self):
            return self.getToken(MySqlParser.GEOMETRYCOLLECTIONFROMTEXT, 0)

        def GEOMETRYCOLLECTIONFROMWKB(self):
            return self.getToken(MySqlParser.GEOMETRYCOLLECTIONFROMWKB, 0)

        def GEOMETRYFROMTEXT(self):
            return self.getToken(MySqlParser.GEOMETRYFROMTEXT, 0)

        def GEOMETRYFROMWKB(self):
            return self.getToken(MySqlParser.GEOMETRYFROMWKB, 0)

        def GEOMETRYN(self):
            return self.getToken(MySqlParser.GEOMETRYN, 0)

        def GEOMETRYTYPE(self):
            return self.getToken(MySqlParser.GEOMETRYTYPE, 0)

        def GEOMFROMTEXT(self):
            return self.getToken(MySqlParser.GEOMFROMTEXT, 0)

        def GEOMFROMWKB(self):
            return self.getToken(MySqlParser.GEOMFROMWKB, 0)

        def GET_FORMAT(self):
            return self.getToken(MySqlParser.GET_FORMAT, 0)

        def GET_LOCK(self):
            return self.getToken(MySqlParser.GET_LOCK, 0)

        def GLENGTH(self):
            return self.getToken(MySqlParser.GLENGTH, 0)

        def GREATEST(self):
            return self.getToken(MySqlParser.GREATEST, 0)

        def GTID_SUBSET(self):
            return self.getToken(MySqlParser.GTID_SUBSET, 0)

        def GTID_SUBTRACT(self):
            return self.getToken(MySqlParser.GTID_SUBTRACT, 0)

        def HEX(self):
            return self.getToken(MySqlParser.HEX, 0)

        def HOUR(self):
            return self.getToken(MySqlParser.HOUR, 0)

        def IFNULL(self):
            return self.getToken(MySqlParser.IFNULL, 0)

        def INET6_ATON(self):
            return self.getToken(MySqlParser.INET6_ATON, 0)

        def INET6_NTOA(self):
            return self.getToken(MySqlParser.INET6_NTOA, 0)

        def INET_ATON(self):
            return self.getToken(MySqlParser.INET_ATON, 0)

        def INET_NTOA(self):
            return self.getToken(MySqlParser.INET_NTOA, 0)

        def INSTR(self):
            return self.getToken(MySqlParser.INSTR, 0)

        def INTERIORRINGN(self):
            return self.getToken(MySqlParser.INTERIORRINGN, 0)

        def INTERSECTS(self):
            return self.getToken(MySqlParser.INTERSECTS, 0)

        def INVISIBLE(self):
            return self.getToken(MySqlParser.INVISIBLE, 0)

        def ISCLOSED(self):
            return self.getToken(MySqlParser.ISCLOSED, 0)

        def ISEMPTY(self):
            return self.getToken(MySqlParser.ISEMPTY, 0)

        def ISNULL(self):
            return self.getToken(MySqlParser.ISNULL, 0)

        def ISSIMPLE(self):
            return self.getToken(MySqlParser.ISSIMPLE, 0)

        def IS_FREE_LOCK(self):
            return self.getToken(MySqlParser.IS_FREE_LOCK, 0)

        def IS_IPV4(self):
            return self.getToken(MySqlParser.IS_IPV4, 0)

        def IS_IPV4_COMPAT(self):
            return self.getToken(MySqlParser.IS_IPV4_COMPAT, 0)

        def IS_IPV4_MAPPED(self):
            return self.getToken(MySqlParser.IS_IPV4_MAPPED, 0)

        def IS_IPV6(self):
            return self.getToken(MySqlParser.IS_IPV6, 0)

        def IS_USED_LOCK(self):
            return self.getToken(MySqlParser.IS_USED_LOCK, 0)

        def LAG(self):
            return self.getToken(MySqlParser.LAG, 0)

        def LAST_INSERT_ID(self):
            return self.getToken(MySqlParser.LAST_INSERT_ID, 0)

        def LAST_VALUE(self):
            return self.getToken(MySqlParser.LAST_VALUE, 0)

        def LCASE(self):
            return self.getToken(MySqlParser.LCASE, 0)

        def LEAD(self):
            return self.getToken(MySqlParser.LEAD, 0)

        def LEAST(self):
            return self.getToken(MySqlParser.LEAST, 0)

        def LEFT(self):
            return self.getToken(MySqlParser.LEFT, 0)

        def LENGTH(self):
            return self.getToken(MySqlParser.LENGTH, 0)

        def LINEFROMTEXT(self):
            return self.getToken(MySqlParser.LINEFROMTEXT, 0)

        def LINEFROMWKB(self):
            return self.getToken(MySqlParser.LINEFROMWKB, 0)

        def LINESTRING(self):
            return self.getToken(MySqlParser.LINESTRING, 0)

        def LINESTRINGFROMTEXT(self):
            return self.getToken(MySqlParser.LINESTRINGFROMTEXT, 0)

        def LINESTRINGFROMWKB(self):
            return self.getToken(MySqlParser.LINESTRINGFROMWKB, 0)

        def LN(self):
            return self.getToken(MySqlParser.LN, 0)

        def LOAD_FILE(self):
            return self.getToken(MySqlParser.LOAD_FILE, 0)

        def LOCATE(self):
            return self.getToken(MySqlParser.LOCATE, 0)

        def LOG(self):
            return self.getToken(MySqlParser.LOG, 0)

        def LOG10(self):
            return self.getToken(MySqlParser.LOG10, 0)

        def LOG2(self):
            return self.getToken(MySqlParser.LOG2, 0)

        def LOWER(self):
            return self.getToken(MySqlParser.LOWER, 0)

        def LPAD(self):
            return self.getToken(MySqlParser.LPAD, 0)

        def LTRIM(self):
            return self.getToken(MySqlParser.LTRIM, 0)

        def MAKEDATE(self):
            return self.getToken(MySqlParser.MAKEDATE, 0)

        def MAKETIME(self):
            return self.getToken(MySqlParser.MAKETIME, 0)

        def MAKE_SET(self):
            return self.getToken(MySqlParser.MAKE_SET, 0)

        def MASTER_POS_WAIT(self):
            return self.getToken(MySqlParser.MASTER_POS_WAIT, 0)

        def MBRCONTAINS(self):
            return self.getToken(MySqlParser.MBRCONTAINS, 0)

        def MBRDISJOINT(self):
            return self.getToken(MySqlParser.MBRDISJOINT, 0)

        def MBREQUAL(self):
            return self.getToken(MySqlParser.MBREQUAL, 0)

        def MBRINTERSECTS(self):
            return self.getToken(MySqlParser.MBRINTERSECTS, 0)

        def MBROVERLAPS(self):
            return self.getToken(MySqlParser.MBROVERLAPS, 0)

        def MBRTOUCHES(self):
            return self.getToken(MySqlParser.MBRTOUCHES, 0)

        def MBRWITHIN(self):
            return self.getToken(MySqlParser.MBRWITHIN, 0)

        def MD5(self):
            return self.getToken(MySqlParser.MD5, 0)

        def MICROSECOND(self):
            return self.getToken(MySqlParser.MICROSECOND, 0)

        def MINUTE(self):
            return self.getToken(MySqlParser.MINUTE, 0)

        def MLINEFROMTEXT(self):
            return self.getToken(MySqlParser.MLINEFROMTEXT, 0)

        def MLINEFROMWKB(self):
            return self.getToken(MySqlParser.MLINEFROMWKB, 0)

        def MOD(self):
            return self.getToken(MySqlParser.MOD, 0)

        def MONTH(self):
            return self.getToken(MySqlParser.MONTH, 0)

        def MONTHNAME(self):
            return self.getToken(MySqlParser.MONTHNAME, 0)

        def MPOINTFROMTEXT(self):
            return self.getToken(MySqlParser.MPOINTFROMTEXT, 0)

        def MPOINTFROMWKB(self):
            return self.getToken(MySqlParser.MPOINTFROMWKB, 0)

        def MPOLYFROMTEXT(self):
            return self.getToken(MySqlParser.MPOLYFROMTEXT, 0)

        def MPOLYFROMWKB(self):
            return self.getToken(MySqlParser.MPOLYFROMWKB, 0)

        def MULTILINESTRING(self):
            return self.getToken(MySqlParser.MULTILINESTRING, 0)

        def MULTILINESTRINGFROMTEXT(self):
            return self.getToken(MySqlParser.MULTILINESTRINGFROMTEXT, 0)

        def MULTILINESTRINGFROMWKB(self):
            return self.getToken(MySqlParser.MULTILINESTRINGFROMWKB, 0)

        def MULTIPOINT(self):
            return self.getToken(MySqlParser.MULTIPOINT, 0)

        def MULTIPOINTFROMTEXT(self):
            return self.getToken(MySqlParser.MULTIPOINTFROMTEXT, 0)

        def MULTIPOINTFROMWKB(self):
            return self.getToken(MySqlParser.MULTIPOINTFROMWKB, 0)

        def MULTIPOLYGON(self):
            return self.getToken(MySqlParser.MULTIPOLYGON, 0)

        def MULTIPOLYGONFROMTEXT(self):
            return self.getToken(MySqlParser.MULTIPOLYGONFROMTEXT, 0)

        def MULTIPOLYGONFROMWKB(self):
            return self.getToken(MySqlParser.MULTIPOLYGONFROMWKB, 0)

        def NAME_CONST(self):
            return self.getToken(MySqlParser.NAME_CONST, 0)

        def NTH_VALUE(self):
            return self.getToken(MySqlParser.NTH_VALUE, 0)

        def NTILE(self):
            return self.getToken(MySqlParser.NTILE, 0)

        def NULLIF(self):
            return self.getToken(MySqlParser.NULLIF, 0)

        def NUMGEOMETRIES(self):
            return self.getToken(MySqlParser.NUMGEOMETRIES, 0)

        def NUMINTERIORRINGS(self):
            return self.getToken(MySqlParser.NUMINTERIORRINGS, 0)

        def NUMPOINTS(self):
            return self.getToken(MySqlParser.NUMPOINTS, 0)

        def OCT(self):
            return self.getToken(MySqlParser.OCT, 0)

        def OCTET_LENGTH(self):
            return self.getToken(MySqlParser.OCTET_LENGTH, 0)

        def ORD(self):
            return self.getToken(MySqlParser.ORD, 0)

        def OVERLAPS(self):
            return self.getToken(MySqlParser.OVERLAPS, 0)

        def PERCENT_RANK(self):
            return self.getToken(MySqlParser.PERCENT_RANK, 0)

        def PERIOD_ADD(self):
            return self.getToken(MySqlParser.PERIOD_ADD, 0)

        def PERIOD_DIFF(self):
            return self.getToken(MySqlParser.PERIOD_DIFF, 0)

        def PI(self):
            return self.getToken(MySqlParser.PI, 0)

        def POINT(self):
            return self.getToken(MySqlParser.POINT, 0)

        def POINTFROMTEXT(self):
            return self.getToken(MySqlParser.POINTFROMTEXT, 0)

        def POINTFROMWKB(self):
            return self.getToken(MySqlParser.POINTFROMWKB, 0)

        def POINTN(self):
            return self.getToken(MySqlParser.POINTN, 0)

        def POLYFROMTEXT(self):
            return self.getToken(MySqlParser.POLYFROMTEXT, 0)

        def POLYFROMWKB(self):
            return self.getToken(MySqlParser.POLYFROMWKB, 0)

        def POLYGON(self):
            return self.getToken(MySqlParser.POLYGON, 0)

        def POLYGONFROMTEXT(self):
            return self.getToken(MySqlParser.POLYGONFROMTEXT, 0)

        def POLYGONFROMWKB(self):
            return self.getToken(MySqlParser.POLYGONFROMWKB, 0)

        def POSITION(self):
            return self.getToken(MySqlParser.POSITION, 0)

        def POW(self):
            return self.getToken(MySqlParser.POW, 0)

        def POWER(self):
            return self.getToken(MySqlParser.POWER, 0)

        def QUARTER(self):
            return self.getToken(MySqlParser.QUARTER, 0)

        def QUOTE(self):
            return self.getToken(MySqlParser.QUOTE, 0)

        def RADIANS(self):
            return self.getToken(MySqlParser.RADIANS, 0)

        def RAND(self):
            return self.getToken(MySqlParser.RAND, 0)

        def RANDOM(self):
            return self.getToken(MySqlParser.RANDOM, 0)

        def RANK(self):
            return self.getToken(MySqlParser.RANK, 0)

        def RANDOM_BYTES(self):
            return self.getToken(MySqlParser.RANDOM_BYTES, 0)

        def RELEASE_LOCK(self):
            return self.getToken(MySqlParser.RELEASE_LOCK, 0)

        def REVERSE(self):
            return self.getToken(MySqlParser.REVERSE, 0)

        def RIGHT(self):
            return self.getToken(MySqlParser.RIGHT, 0)

        def ROUND(self):
            return self.getToken(MySqlParser.ROUND, 0)

        def ROW_COUNT(self):
            return self.getToken(MySqlParser.ROW_COUNT, 0)

        def ROW_NUMBER(self):
            return self.getToken(MySqlParser.ROW_NUMBER, 0)

        def RPAD(self):
            return self.getToken(MySqlParser.RPAD, 0)

        def RTRIM(self):
            return self.getToken(MySqlParser.RTRIM, 0)

        def SCHEMA(self):
            return self.getToken(MySqlParser.SCHEMA, 0)

        def SECOND(self):
            return self.getToken(MySqlParser.SECOND, 0)

        def SEC_TO_TIME(self):
            return self.getToken(MySqlParser.SEC_TO_TIME, 0)

        def SESSION_USER(self):
            return self.getToken(MySqlParser.SESSION_USER, 0)

        def SESSION_VARIABLES_ADMIN(self):
            return self.getToken(MySqlParser.SESSION_VARIABLES_ADMIN, 0)

        def SHA(self):
            return self.getToken(MySqlParser.SHA, 0)

        def SHA1(self):
            return self.getToken(MySqlParser.SHA1, 0)

        def SHA2(self):
            return self.getToken(MySqlParser.SHA2, 0)

        def SIGN(self):
            return self.getToken(MySqlParser.SIGN, 0)

        def SIN(self):
            return self.getToken(MySqlParser.SIN, 0)

        def SLEEP(self):
            return self.getToken(MySqlParser.SLEEP, 0)

        def SOUNDEX(self):
            return self.getToken(MySqlParser.SOUNDEX, 0)

        def SQL_THREAD_WAIT_AFTER_GTIDS(self):
            return self.getToken(MySqlParser.SQL_THREAD_WAIT_AFTER_GTIDS, 0)

        def SQRT(self):
            return self.getToken(MySqlParser.SQRT, 0)

        def SRID(self):
            return self.getToken(MySqlParser.SRID, 0)

        def STARTPOINT(self):
            return self.getToken(MySqlParser.STARTPOINT, 0)

        def STRCMP(self):
            return self.getToken(MySqlParser.STRCMP, 0)

        def STR_TO_DATE(self):
            return self.getToken(MySqlParser.STR_TO_DATE, 0)

        def ST_AREA(self):
            return self.getToken(MySqlParser.ST_AREA, 0)

        def ST_ASBINARY(self):
            return self.getToken(MySqlParser.ST_ASBINARY, 0)

        def ST_ASTEXT(self):
            return self.getToken(MySqlParser.ST_ASTEXT, 0)

        def ST_ASWKB(self):
            return self.getToken(MySqlParser.ST_ASWKB, 0)

        def ST_ASWKT(self):
            return self.getToken(MySqlParser.ST_ASWKT, 0)

        def ST_BUFFER(self):
            return self.getToken(MySqlParser.ST_BUFFER, 0)

        def ST_CENTROID(self):
            return self.getToken(MySqlParser.ST_CENTROID, 0)

        def ST_CONTAINS(self):
            return self.getToken(MySqlParser.ST_CONTAINS, 0)

        def ST_CROSSES(self):
            return self.getToken(MySqlParser.ST_CROSSES, 0)

        def ST_DIFFERENCE(self):
            return self.getToken(MySqlParser.ST_DIFFERENCE, 0)

        def ST_DIMENSION(self):
            return self.getToken(MySqlParser.ST_DIMENSION, 0)

        def ST_DISJOINT(self):
            return self.getToken(MySqlParser.ST_DISJOINT, 0)

        def ST_DISTANCE(self):
            return self.getToken(MySqlParser.ST_DISTANCE, 0)

        def ST_ENDPOINT(self):
            return self.getToken(MySqlParser.ST_ENDPOINT, 0)

        def ST_ENVELOPE(self):
            return self.getToken(MySqlParser.ST_ENVELOPE, 0)

        def ST_EQUALS(self):
            return self.getToken(MySqlParser.ST_EQUALS, 0)

        def ST_EXTERIORRING(self):
            return self.getToken(MySqlParser.ST_EXTERIORRING, 0)

        def ST_GEOMCOLLFROMTEXT(self):
            return self.getToken(MySqlParser.ST_GEOMCOLLFROMTEXT, 0)

        def ST_GEOMCOLLFROMTXT(self):
            return self.getToken(MySqlParser.ST_GEOMCOLLFROMTXT, 0)

        def ST_GEOMCOLLFROMWKB(self):
            return self.getToken(MySqlParser.ST_GEOMCOLLFROMWKB, 0)

        def ST_GEOMETRYCOLLECTIONFROMTEXT(self):
            return self.getToken(MySqlParser.ST_GEOMETRYCOLLECTIONFROMTEXT, 0)

        def ST_GEOMETRYCOLLECTIONFROMWKB(self):
            return self.getToken(MySqlParser.ST_GEOMETRYCOLLECTIONFROMWKB, 0)

        def ST_GEOMETRYFROMTEXT(self):
            return self.getToken(MySqlParser.ST_GEOMETRYFROMTEXT, 0)

        def ST_GEOMETRYFROMWKB(self):
            return self.getToken(MySqlParser.ST_GEOMETRYFROMWKB, 0)

        def ST_GEOMETRYN(self):
            return self.getToken(MySqlParser.ST_GEOMETRYN, 0)

        def ST_GEOMETRYTYPE(self):
            return self.getToken(MySqlParser.ST_GEOMETRYTYPE, 0)

        def ST_GEOMFROMTEXT(self):
            return self.getToken(MySqlParser.ST_GEOMFROMTEXT, 0)

        def ST_GEOMFROMWKB(self):
            return self.getToken(MySqlParser.ST_GEOMFROMWKB, 0)

        def ST_INTERIORRINGN(self):
            return self.getToken(MySqlParser.ST_INTERIORRINGN, 0)

        def ST_INTERSECTION(self):
            return self.getToken(MySqlParser.ST_INTERSECTION, 0)

        def ST_INTERSECTS(self):
            return self.getToken(MySqlParser.ST_INTERSECTS, 0)

        def ST_ISCLOSED(self):
            return self.getToken(MySqlParser.ST_ISCLOSED, 0)

        def ST_ISEMPTY(self):
            return self.getToken(MySqlParser.ST_ISEMPTY, 0)

        def ST_ISSIMPLE(self):
            return self.getToken(MySqlParser.ST_ISSIMPLE, 0)

        def ST_LINEFROMTEXT(self):
            return self.getToken(MySqlParser.ST_LINEFROMTEXT, 0)

        def ST_LINEFROMWKB(self):
            return self.getToken(MySqlParser.ST_LINEFROMWKB, 0)

        def ST_LINESTRINGFROMTEXT(self):
            return self.getToken(MySqlParser.ST_LINESTRINGFROMTEXT, 0)

        def ST_LINESTRINGFROMWKB(self):
            return self.getToken(MySqlParser.ST_LINESTRINGFROMWKB, 0)

        def ST_NUMGEOMETRIES(self):
            return self.getToken(MySqlParser.ST_NUMGEOMETRIES, 0)

        def ST_NUMINTERIORRING(self):
            return self.getToken(MySqlParser.ST_NUMINTERIORRING, 0)

        def ST_NUMINTERIORRINGS(self):
            return self.getToken(MySqlParser.ST_NUMINTERIORRINGS, 0)

        def ST_NUMPOINTS(self):
            return self.getToken(MySqlParser.ST_NUMPOINTS, 0)

        def ST_OVERLAPS(self):
            return self.getToken(MySqlParser.ST_OVERLAPS, 0)

        def ST_POINTFROMTEXT(self):
            return self.getToken(MySqlParser.ST_POINTFROMTEXT, 0)

        def ST_POINTFROMWKB(self):
            return self.getToken(MySqlParser.ST_POINTFROMWKB, 0)

        def ST_POINTN(self):
            return self.getToken(MySqlParser.ST_POINTN, 0)

        def ST_POLYFROMTEXT(self):
            return self.getToken(MySqlParser.ST_POLYFROMTEXT, 0)

        def ST_POLYFROMWKB(self):
            return self.getToken(MySqlParser.ST_POLYFROMWKB, 0)

        def ST_POLYGONFROMTEXT(self):
            return self.getToken(MySqlParser.ST_POLYGONFROMTEXT, 0)

        def ST_POLYGONFROMWKB(self):
            return self.getToken(MySqlParser.ST_POLYGONFROMWKB, 0)

        def ST_SRID(self):
            return self.getToken(MySqlParser.ST_SRID, 0)

        def ST_STARTPOINT(self):
            return self.getToken(MySqlParser.ST_STARTPOINT, 0)

        def ST_SYMDIFFERENCE(self):
            return self.getToken(MySqlParser.ST_SYMDIFFERENCE, 0)

        def ST_TOUCHES(self):
            return self.getToken(MySqlParser.ST_TOUCHES, 0)

        def ST_UNION(self):
            return self.getToken(MySqlParser.ST_UNION, 0)

        def ST_WITHIN(self):
            return self.getToken(MySqlParser.ST_WITHIN, 0)

        def ST_X(self):
            return self.getToken(MySqlParser.ST_X, 0)

        def ST_Y(self):
            return self.getToken(MySqlParser.ST_Y, 0)

        def SUBDATE(self):
            return self.getToken(MySqlParser.SUBDATE, 0)

        def SUBSTRING_INDEX(self):
            return self.getToken(MySqlParser.SUBSTRING_INDEX, 0)

        def SUBTIME(self):
            return self.getToken(MySqlParser.SUBTIME, 0)

        def SYSTEM_USER(self):
            return self.getToken(MySqlParser.SYSTEM_USER, 0)

        def TAN(self):
            return self.getToken(MySqlParser.TAN, 0)

        def TIME(self):
            return self.getToken(MySqlParser.TIME, 0)

        def TIMEDIFF(self):
            return self.getToken(MySqlParser.TIMEDIFF, 0)

        def TIMESTAMP(self):
            return self.getToken(MySqlParser.TIMESTAMP, 0)

        def TIMESTAMPADD(self):
            return self.getToken(MySqlParser.TIMESTAMPADD, 0)

        def TIMESTAMPDIFF(self):
            return self.getToken(MySqlParser.TIMESTAMPDIFF, 0)

        def TIME_FORMAT(self):
            return self.getToken(MySqlParser.TIME_FORMAT, 0)

        def TIME_TO_SEC(self):
            return self.getToken(MySqlParser.TIME_TO_SEC, 0)

        def TOUCHES(self):
            return self.getToken(MySqlParser.TOUCHES, 0)

        def TO_BASE64(self):
            return self.getToken(MySqlParser.TO_BASE64, 0)

        def TO_DAYS(self):
            return self.getToken(MySqlParser.TO_DAYS, 0)

        def TO_SECONDS(self):
            return self.getToken(MySqlParser.TO_SECONDS, 0)

        def UCASE(self):
            return self.getToken(MySqlParser.UCASE, 0)

        def UNCOMPRESS(self):
            return self.getToken(MySqlParser.UNCOMPRESS, 0)

        def UNCOMPRESSED_LENGTH(self):
            return self.getToken(MySqlParser.UNCOMPRESSED_LENGTH, 0)

        def UNHEX(self):
            return self.getToken(MySqlParser.UNHEX, 0)

        def UNIX_TIMESTAMP(self):
            return self.getToken(MySqlParser.UNIX_TIMESTAMP, 0)

        def UPDATEXML(self):
            return self.getToken(MySqlParser.UPDATEXML, 0)

        def UPPER(self):
            return self.getToken(MySqlParser.UPPER, 0)

        def UUID(self):
            return self.getToken(MySqlParser.UUID, 0)

        def UUID_SHORT(self):
            return self.getToken(MySqlParser.UUID_SHORT, 0)

        def VALIDATE_PASSWORD_STRENGTH(self):
            return self.getToken(MySqlParser.VALIDATE_PASSWORD_STRENGTH, 0)

        def VERSION(self):
            return self.getToken(MySqlParser.VERSION, 0)

        def VISIBLE(self):
            return self.getToken(MySqlParser.VISIBLE, 0)

        def WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS(self):
            return self.getToken(MySqlParser.WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS, 0)

        def WEEK(self):
            return self.getToken(MySqlParser.WEEK, 0)

        def WEEKDAY(self):
            return self.getToken(MySqlParser.WEEKDAY, 0)

        def WEEKOFYEAR(self):
            return self.getToken(MySqlParser.WEEKOFYEAR, 0)

        def WEIGHT_STRING(self):
            return self.getToken(MySqlParser.WEIGHT_STRING, 0)

        def WITHIN(self):
            return self.getToken(MySqlParser.WITHIN, 0)

        def YEAR(self):
            return self.getToken(MySqlParser.YEAR, 0)

        def YEARWEEK(self):
            return self.getToken(MySqlParser.YEARWEEK, 0)

        def Y_FUNCTION(self):
            return self.getToken(MySqlParser.Y_FUNCTION, 0)

        def X_FUNCTION(self):
            return self.getToken(MySqlParser.X_FUNCTION, 0)

        def JSON_ARRAY(self):
            return self.getToken(MySqlParser.JSON_ARRAY, 0)

        def JSON_OBJECT(self):
            return self.getToken(MySqlParser.JSON_OBJECT, 0)

        def JSON_QUOTE(self):
            return self.getToken(MySqlParser.JSON_QUOTE, 0)

        def JSON_CONTAINS(self):
            return self.getToken(MySqlParser.JSON_CONTAINS, 0)

        def JSON_CONTAINS_PATH(self):
            return self.getToken(MySqlParser.JSON_CONTAINS_PATH, 0)

        def JSON_EXTRACT(self):
            return self.getToken(MySqlParser.JSON_EXTRACT, 0)

        def JSON_KEYS(self):
            return self.getToken(MySqlParser.JSON_KEYS, 0)

        def JSON_OVERLAPS(self):
            return self.getToken(MySqlParser.JSON_OVERLAPS, 0)

        def JSON_SEARCH(self):
            return self.getToken(MySqlParser.JSON_SEARCH, 0)

        def JSON_VALUE(self):
            return self.getToken(MySqlParser.JSON_VALUE, 0)

        def JSON_ARRAY_APPEND(self):
            return self.getToken(MySqlParser.JSON_ARRAY_APPEND, 0)

        def JSON_ARRAY_INSERT(self):
            return self.getToken(MySqlParser.JSON_ARRAY_INSERT, 0)

        def JSON_INSERT(self):
            return self.getToken(MySqlParser.JSON_INSERT, 0)

        def JSON_MERGE(self):
            return self.getToken(MySqlParser.JSON_MERGE, 0)

        def JSON_MERGE_PATCH(self):
            return self.getToken(MySqlParser.JSON_MERGE_PATCH, 0)

        def JSON_MERGE_PRESERVE(self):
            return self.getToken(MySqlParser.JSON_MERGE_PRESERVE, 0)

        def JSON_REMOVE(self):
            return self.getToken(MySqlParser.JSON_REMOVE, 0)

        def JSON_REPLACE(self):
            return self.getToken(MySqlParser.JSON_REPLACE, 0)

        def JSON_SET(self):
            return self.getToken(MySqlParser.JSON_SET, 0)

        def JSON_UNQUOTE(self):
            return self.getToken(MySqlParser.JSON_UNQUOTE, 0)

        def JSON_DEPTH(self):
            return self.getToken(MySqlParser.JSON_DEPTH, 0)

        def JSON_LENGTH(self):
            return self.getToken(MySqlParser.JSON_LENGTH, 0)

        def JSON_TYPE(self):
            return self.getToken(MySqlParser.JSON_TYPE, 0)

        def JSON_VALID(self):
            return self.getToken(MySqlParser.JSON_VALID, 0)

        def JSON_TABLE(self):
            return self.getToken(MySqlParser.JSON_TABLE, 0)

        def JSON_SCHEMA_VALID(self):
            return self.getToken(MySqlParser.JSON_SCHEMA_VALID, 0)

        def JSON_SCHEMA_VALIDATION_REPORT(self):
            return self.getToken(MySqlParser.JSON_SCHEMA_VALIDATION_REPORT, 0)

        def JSON_PRETTY(self):
            return self.getToken(MySqlParser.JSON_PRETTY, 0)

        def JSON_STORAGE_FREE(self):
            return self.getToken(MySqlParser.JSON_STORAGE_FREE, 0)

        def JSON_STORAGE_SIZE(self):
            return self.getToken(MySqlParser.JSON_STORAGE_SIZE, 0)

        def JSON_ARRAYAGG(self):
            return self.getToken(MySqlParser.JSON_ARRAYAGG, 0)

        def JSON_OBJECTAGG(self):
            return self.getToken(MySqlParser.JSON_OBJECTAGG, 0)

        def getRuleIndex(self):
            return MySqlParser.RULE_functionNameBase

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFunctionNameBase" ):
                listener.enterFunctionNameBase(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFunctionNameBase" ):
                listener.exitFunctionNameBase(self)




    def functionNameBase(self):

        localctx = MySqlParser.FunctionNameBaseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 720, self.RULE_functionNameBase)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7444
            _la = self._input.LA(1)
            if not(_la==39 or ((((_la - 97)) & ~0x3f) == 0 and ((1 << (_la - 97)) & 11258999068426241) != 0) or ((((_la - 217)) & ~0x3f) == 0 and ((1 << (_la - 217)) & -17179869161) != 0) or ((((_la - 281)) & ~0x3f) == 0 and ((1 << (_la - 281)) & 8796109397507) != 0) or _la==459 or ((((_la - 673)) & ~0x3f) == 0 and ((1 << (_la - 673)) & -9223372036838064127) != 0) or ((((_la - 803)) & ~0x3f) == 0 and ((1 << (_la - 803)) & -8589934599) != 0) or ((((_la - 867)) & ~0x3f) == 0 and ((1 << (_la - 867)) & -257) != 0) or ((((_la - 931)) & ~0x3f) == 0 and ((1 << (_la - 931)) & -1) != 0) or ((((_la - 995)) & ~0x3f) == 0 and ((1 << (_la - 995)) & -1057) != 0) or ((((_la - 1059)) & ~0x3f) == 0 and ((1 << (_la - 1059)) & 562949416550399) != 0) or _la==1123):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx



    def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int):
        if self._predicates == None:
            self._predicates = dict()
        self._predicates[344] = self.expression_sempred
        self._predicates[345] = self.predicate_sempred
        self._predicates[346] = self.expressionAtom_sempred
        pred = self._predicates.get(ruleIndex, None)
        if pred is None:
            raise Exception("No predicate with index:" + str(ruleIndex))
        else:
            return pred(localctx, predIndex)

    def expression_sempred(self, localctx:ExpressionContext, predIndex:int):
            if predIndex == 0:
                return self.precpred(self._ctx, 3)
         

    def predicate_sempred(self, localctx:PredicateContext, predIndex:int):
            if predIndex == 1:
                return self.precpred(self._ctx, 8)
         

            if predIndex == 2:
                return self.precpred(self._ctx, 6)
         

            if predIndex == 3:
                return self.precpred(self._ctx, 5)
         

            if predIndex == 4:
                return self.precpred(self._ctx, 3)
         

            if predIndex == 5:
                return self.precpred(self._ctx, 10)
         

            if predIndex == 6:
                return self.precpred(self._ctx, 9)
         

            if predIndex == 7:
                return self.precpred(self._ctx, 7)
         

            if predIndex == 8:
                return self.precpred(self._ctx, 4)
         

            if predIndex == 9:
                return self.precpred(self._ctx, 2)
         

    def expressionAtom_sempred(self, localctx:ExpressionAtomContext, predIndex:int):
            if predIndex == 10:
                return self.precpred(self._ctx, 4)
         

            if predIndex == 11:
                return self.precpred(self._ctx, 3)
         

            if predIndex == 12:
                return self.precpred(self._ctx, 2)
         

            if predIndex == 13:
                return self.precpred(self._ctx, 1)
         

            if predIndex == 14:
                return self.precpred(self._ctx, 14)
         




