// dt-sql-parser/src/grammar/pgsql/PostgreSQLParser.g4 by ANTLR 4.12.0
// noinspection ES6UnusedImports,JSUnusedGlobalSymbols,JSUnusedLocalSymbols

import {
	ATN,
	ATNDeserializer, DecisionState, DFA, FailedPredicateException,
	RecognitionException, NoViableAltException,
	ParserATNSimulator,
	RuleContext, ParserRuleContext, PredictionContextCache,
	TerminalNode,
	Token, TokenStream,
} from 'antlr4';
import PostgreSQLParserListener from "./PostgreSQLParserListener.js";
import PostgreSQLParserVisitor from "./PostgreSQLParserVisitor.js";

import PostgreSQLParserBase from './base/PostgreSQLParserBase';

export default class PostgreSQLParser extends PostgreSQLParserBase {
	public static readonly Dollar = 1;
	public static readonly OPEN_PAREN = 2;
	public static readonly CLOSE_PAREN = 3;
	public static readonly OPEN_BRACKET = 4;
	public static readonly CLOSE_BRACKET = 5;
	public static readonly COMMA = 6;
	public static readonly SEMI = 7;
	public static readonly COLON = 8;
	public static readonly STAR = 9;
	public static readonly EQUAL = 10;
	public static readonly DOT = 11;
	public static readonly PLUS = 12;
	public static readonly MINUS = 13;
	public static readonly SLASH = 14;
	public static readonly CARET = 15;
	public static readonly LT = 16;
	public static readonly GT = 17;
	public static readonly LESS_LESS = 18;
	public static readonly GREATER_GREATER = 19;
	public static readonly COLON_EQUALS = 20;
	public static readonly LESS_EQUALS = 21;
	public static readonly EQUALS_GREATER = 22;
	public static readonly GREATER_EQUALS = 23;
	public static readonly DOT_DOT = 24;
	public static readonly NOT_EQUALS = 25;
	public static readonly TYPECAST = 26;
	public static readonly PERCENT = 27;
	public static readonly PARAM = 28;
	public static readonly Operator = 29;
	public static readonly ALL = 30;
	public static readonly ANALYSE = 31;
	public static readonly ANALYZE = 32;
	public static readonly AND = 33;
	public static readonly ANY = 34;
	public static readonly ARRAY = 35;
	public static readonly AS = 36;
	public static readonly ASC = 37;
	public static readonly ASYMMETRIC = 38;
	public static readonly BOTH = 39;
	public static readonly CASE = 40;
	public static readonly CAST = 41;
	public static readonly CHECK = 42;
	public static readonly COLLATE = 43;
	public static readonly COLUMN = 44;
	public static readonly CONSTRAINT = 45;
	public static readonly CREATE = 46;
	public static readonly CURRENT_CATALOG = 47;
	public static readonly CURRENT_DATE = 48;
	public static readonly CURRENT_ROLE = 49;
	public static readonly CURRENT_TIME = 50;
	public static readonly CURRENT_TIMESTAMP = 51;
	public static readonly CURRENT_USER = 52;
	public static readonly DEFAULT = 53;
	public static readonly DEFERRABLE = 54;
	public static readonly DESC = 55;
	public static readonly DISTINCT = 56;
	public static readonly DO = 57;
	public static readonly ELSE = 58;
	public static readonly EXCEPT = 59;
	public static readonly FALSE_P = 60;
	public static readonly FETCH = 61;
	public static readonly FOR = 62;
	public static readonly FOREIGN = 63;
	public static readonly FROM = 64;
	public static readonly GRANT = 65;
	public static readonly GROUP_P = 66;
	public static readonly HAVING = 67;
	public static readonly IN_P = 68;
	public static readonly INITIALLY = 69;
	public static readonly INTERSECT = 70;
	public static readonly INTO = 71;
	public static readonly LATERAL_P = 72;
	public static readonly LEADING = 73;
	public static readonly LIMIT = 74;
	public static readonly LOCALTIME = 75;
	public static readonly LOCALTIMESTAMP = 76;
	public static readonly NOT = 77;
	public static readonly NULL_P = 78;
	public static readonly OFFSET = 79;
	public static readonly ON = 80;
	public static readonly ONLY = 81;
	public static readonly OR = 82;
	public static readonly ORDER = 83;
	public static readonly PLACING = 84;
	public static readonly PRIMARY = 85;
	public static readonly REFERENCES = 86;
	public static readonly RETURNING = 87;
	public static readonly SELECT = 88;
	public static readonly SESSION_USER = 89;
	public static readonly SOME = 90;
	public static readonly SYMMETRIC = 91;
	public static readonly TABLE = 92;
	public static readonly THEN = 93;
	public static readonly TO = 94;
	public static readonly TRAILING = 95;
	public static readonly TRUE_P = 96;
	public static readonly UNION = 97;
	public static readonly UNIQUE = 98;
	public static readonly USER = 99;
	public static readonly USING = 100;
	public static readonly VARIADIC = 101;
	public static readonly WHEN = 102;
	public static readonly WHERE = 103;
	public static readonly WINDOW = 104;
	public static readonly WITH = 105;
	public static readonly AUTHORIZATION = 106;
	public static readonly BINARY = 107;
	public static readonly COLLATION = 108;
	public static readonly CONCURRENTLY = 109;
	public static readonly CROSS = 110;
	public static readonly CURRENT_SCHEMA = 111;
	public static readonly FREEZE = 112;
	public static readonly FULL = 113;
	public static readonly ILIKE = 114;
	public static readonly INNER_P = 115;
	public static readonly IS = 116;
	public static readonly ISNULL = 117;
	public static readonly JOIN = 118;
	public static readonly LEFT = 119;
	public static readonly LIKE = 120;
	public static readonly NATURAL = 121;
	public static readonly NOTNULL = 122;
	public static readonly OUTER_P = 123;
	public static readonly OVER = 124;
	public static readonly OVERLAPS = 125;
	public static readonly RIGHT = 126;
	public static readonly SIMILAR = 127;
	public static readonly VERBOSE = 128;
	public static readonly ABORT_P = 129;
	public static readonly ABSOLUTE_P = 130;
	public static readonly ACCESS = 131;
	public static readonly ACTION = 132;
	public static readonly ADD_P = 133;
	public static readonly ADMIN = 134;
	public static readonly AFTER = 135;
	public static readonly AGGREGATE = 136;
	public static readonly ALSO = 137;
	public static readonly ALTER = 138;
	public static readonly ALWAYS = 139;
	public static readonly ASSERTION = 140;
	public static readonly ASSIGNMENT = 141;
	public static readonly AT = 142;
	public static readonly ATTRIBUTE = 143;
	public static readonly BACKWARD = 144;
	public static readonly BEFORE = 145;
	public static readonly BEGIN_P = 146;
	public static readonly BY = 147;
	public static readonly CACHE = 148;
	public static readonly CALLED = 149;
	public static readonly CASCADE = 150;
	public static readonly CASCADED = 151;
	public static readonly CATALOG = 152;
	public static readonly CHAIN = 153;
	public static readonly CHARACTERISTICS = 154;
	public static readonly CHECKPOINT = 155;
	public static readonly CLASS = 156;
	public static readonly CLOSE = 157;
	public static readonly CLUSTER = 158;
	public static readonly COMMENT = 159;
	public static readonly COMMENTS = 160;
	public static readonly COMMIT = 161;
	public static readonly COMMITTED = 162;
	public static readonly CONFIGURATION = 163;
	public static readonly CONNECTION = 164;
	public static readonly CONSTRAINTS = 165;
	public static readonly CONTENT_P = 166;
	public static readonly CONTINUE_P = 167;
	public static readonly CONVERSION_P = 168;
	public static readonly COPY = 169;
	public static readonly COST = 170;
	public static readonly CSV = 171;
	public static readonly CURSOR = 172;
	public static readonly CYCLE = 173;
	public static readonly DATA_P = 174;
	public static readonly DATABASE = 175;
	public static readonly DAY_P = 176;
	public static readonly DEALLOCATE = 177;
	public static readonly DECLARE = 178;
	public static readonly DEFAULTS = 179;
	public static readonly DEFERRED = 180;
	public static readonly DEFINER = 181;
	public static readonly DELETE_P = 182;
	public static readonly DELIMITER = 183;
	public static readonly DELIMITERS = 184;
	public static readonly DICTIONARY = 185;
	public static readonly DISABLE_P = 186;
	public static readonly DISCARD = 187;
	public static readonly DOCUMENT_P = 188;
	public static readonly DOMAIN_P = 189;
	public static readonly DOUBLE_P = 190;
	public static readonly DROP = 191;
	public static readonly EACH = 192;
	public static readonly ENABLE_P = 193;
	public static readonly ENCODING = 194;
	public static readonly ENCRYPTED = 195;
	public static readonly ENUM_P = 196;
	public static readonly ESCAPE = 197;
	public static readonly EVENT = 198;
	public static readonly EXCLUDE = 199;
	public static readonly EXCLUDING = 200;
	public static readonly EXCLUSIVE = 201;
	public static readonly EXECUTE = 202;
	public static readonly EXPLAIN = 203;
	public static readonly EXTENSION = 204;
	public static readonly EXTERNAL = 205;
	public static readonly FAMILY = 206;
	public static readonly FIRST_P = 207;
	public static readonly FOLLOWING = 208;
	public static readonly FORCE = 209;
	public static readonly FORWARD = 210;
	public static readonly FUNCTION = 211;
	public static readonly FUNCTIONS = 212;
	public static readonly GLOBAL = 213;
	public static readonly GRANTED = 214;
	public static readonly HANDLER = 215;
	public static readonly HEADER_P = 216;
	public static readonly HOLD = 217;
	public static readonly HOUR_P = 218;
	public static readonly IDENTITY_P = 219;
	public static readonly IF_P = 220;
	public static readonly IMMEDIATE = 221;
	public static readonly IMMUTABLE = 222;
	public static readonly IMPLICIT_P = 223;
	public static readonly INCLUDING = 224;
	public static readonly INCREMENT = 225;
	public static readonly INDEX = 226;
	public static readonly INDEXES = 227;
	public static readonly INHERIT = 228;
	public static readonly INHERITS = 229;
	public static readonly INLINE_P = 230;
	public static readonly INSENSITIVE = 231;
	public static readonly INSERT = 232;
	public static readonly INSTEAD = 233;
	public static readonly INVOKER = 234;
	public static readonly ISOLATION = 235;
	public static readonly KEY = 236;
	public static readonly LABEL = 237;
	public static readonly LANGUAGE = 238;
	public static readonly LARGE_P = 239;
	public static readonly LAST_P = 240;
	public static readonly LEAKPROOF = 241;
	public static readonly LEVEL = 242;
	public static readonly LISTEN = 243;
	public static readonly LOAD = 244;
	public static readonly LOCAL = 245;
	public static readonly LOCATION = 246;
	public static readonly LOCK_P = 247;
	public static readonly MAPPING = 248;
	public static readonly MATCH = 249;
	public static readonly MATERIALIZED = 250;
	public static readonly MAXVALUE = 251;
	public static readonly MINUTE_P = 252;
	public static readonly MINVALUE = 253;
	public static readonly MODE = 254;
	public static readonly MONTH_P = 255;
	public static readonly MOVE = 256;
	public static readonly NAME_P = 257;
	public static readonly NAMES = 258;
	public static readonly NEXT = 259;
	public static readonly NO = 260;
	public static readonly NOTHING = 261;
	public static readonly NOTIFY = 262;
	public static readonly NOWAIT = 263;
	public static readonly NULLS_P = 264;
	public static readonly OBJECT_P = 265;
	public static readonly OF = 266;
	public static readonly OFF = 267;
	public static readonly OIDS = 268;
	public static readonly OPERATOR = 269;
	public static readonly OPTION = 270;
	public static readonly OPTIONS = 271;
	public static readonly OWNED = 272;
	public static readonly OWNER = 273;
	public static readonly PARSER = 274;
	public static readonly PARTIAL = 275;
	public static readonly PARTITION = 276;
	public static readonly PASSING = 277;
	public static readonly PASSWORD = 278;
	public static readonly PLANS = 279;
	public static readonly PRECEDING = 280;
	public static readonly PREPARE = 281;
	public static readonly PREPARED = 282;
	public static readonly PRESERVE = 283;
	public static readonly PRIOR = 284;
	public static readonly PRIVILEGES = 285;
	public static readonly PROCEDURAL = 286;
	public static readonly PROCEDURE = 287;
	public static readonly PROGRAM = 288;
	public static readonly QUOTE = 289;
	public static readonly RANGE = 290;
	public static readonly READ = 291;
	public static readonly REASSIGN = 292;
	public static readonly RECHECK = 293;
	public static readonly RECURSIVE = 294;
	public static readonly REF = 295;
	public static readonly REFRESH = 296;
	public static readonly REINDEX = 297;
	public static readonly RELATIVE_P = 298;
	public static readonly RELEASE = 299;
	public static readonly RENAME = 300;
	public static readonly REPEATABLE = 301;
	public static readonly REPLACE = 302;
	public static readonly REPLICA = 303;
	public static readonly RESET = 304;
	public static readonly RESTART = 305;
	public static readonly RESTRICT = 306;
	public static readonly RETURNS = 307;
	public static readonly REVOKE = 308;
	public static readonly ROLE = 309;
	public static readonly ROLLBACK = 310;
	public static readonly ROWS = 311;
	public static readonly RULE = 312;
	public static readonly SAVEPOINT = 313;
	public static readonly SCHEMA = 314;
	public static readonly SCROLL = 315;
	public static readonly SEARCH = 316;
	public static readonly SECOND_P = 317;
	public static readonly SECURITY = 318;
	public static readonly SEQUENCE = 319;
	public static readonly SEQUENCES = 320;
	public static readonly SERIALIZABLE = 321;
	public static readonly SERVER = 322;
	public static readonly SESSION = 323;
	public static readonly SET = 324;
	public static readonly SHARE = 325;
	public static readonly SHOW = 326;
	public static readonly SIMPLE = 327;
	public static readonly SNAPSHOT = 328;
	public static readonly STABLE = 329;
	public static readonly STANDALONE_P = 330;
	public static readonly START = 331;
	public static readonly STATEMENT = 332;
	public static readonly STATISTICS = 333;
	public static readonly STDIN = 334;
	public static readonly STDOUT = 335;
	public static readonly STORAGE = 336;
	public static readonly STRICT_P = 337;
	public static readonly STRIP_P = 338;
	public static readonly SYSID = 339;
	public static readonly SYSTEM_P = 340;
	public static readonly TABLES = 341;
	public static readonly TABLESPACE = 342;
	public static readonly TEMP = 343;
	public static readonly TEMPLATE = 344;
	public static readonly TEMPORARY = 345;
	public static readonly TEXT_P = 346;
	public static readonly TRANSACTION = 347;
	public static readonly TRIGGER = 348;
	public static readonly TRUNCATE = 349;
	public static readonly TRUSTED = 350;
	public static readonly TYPE_P = 351;
	public static readonly TYPES_P = 352;
	public static readonly UNBOUNDED = 353;
	public static readonly UNCOMMITTED = 354;
	public static readonly UNENCRYPTED = 355;
	public static readonly UNKNOWN = 356;
	public static readonly UNLISTEN = 357;
	public static readonly UNLOGGED = 358;
	public static readonly UNTIL = 359;
	public static readonly UPDATE = 360;
	public static readonly VACUUM = 361;
	public static readonly VALID = 362;
	public static readonly VALIDATE = 363;
	public static readonly VALIDATOR = 364;
	public static readonly VARYING = 365;
	public static readonly VERSION_P = 366;
	public static readonly VIEW = 367;
	public static readonly VOLATILE = 368;
	public static readonly WHITESPACE_P = 369;
	public static readonly WITHOUT = 370;
	public static readonly WORK = 371;
	public static readonly WRAPPER = 372;
	public static readonly WRITE = 373;
	public static readonly XML_P = 374;
	public static readonly YEAR_P = 375;
	public static readonly YES_P = 376;
	public static readonly ZONE = 377;
	public static readonly BETWEEN = 378;
	public static readonly BIGINT = 379;
	public static readonly BIT = 380;
	public static readonly BOOLEAN_P = 381;
	public static readonly CHAR_P = 382;
	public static readonly CHARACTER = 383;
	public static readonly COALESCE = 384;
	public static readonly DEC = 385;
	public static readonly DECIMAL_P = 386;
	public static readonly EXISTS = 387;
	public static readonly EXTRACT = 388;
	public static readonly FLOAT_P = 389;
	public static readonly GREATEST = 390;
	public static readonly INOUT = 391;
	public static readonly INT_P = 392;
	public static readonly INTEGER = 393;
	public static readonly INTERVAL = 394;
	public static readonly LEAST = 395;
	public static readonly NATIONAL = 396;
	public static readonly NCHAR = 397;
	public static readonly NONE = 398;
	public static readonly NULLIF = 399;
	public static readonly NUMERIC = 400;
	public static readonly OVERLAY = 401;
	public static readonly POSITION = 402;
	public static readonly PRECISION = 403;
	public static readonly REAL = 404;
	public static readonly ROW = 405;
	public static readonly SETOF = 406;
	public static readonly SMALLINT = 407;
	public static readonly SUBSTRING = 408;
	public static readonly TIME = 409;
	public static readonly TIMESTAMP = 410;
	public static readonly TREAT = 411;
	public static readonly TRIM = 412;
	public static readonly VALUES = 413;
	public static readonly VARCHAR = 414;
	public static readonly XMLATTRIBUTES = 415;
	public static readonly XMLCONCAT = 416;
	public static readonly XMLELEMENT = 417;
	public static readonly XMLEXISTS = 418;
	public static readonly XMLFOREST = 419;
	public static readonly XMLPARSE = 420;
	public static readonly XMLPI = 421;
	public static readonly XMLROOT = 422;
	public static readonly XMLSERIALIZE = 423;
	public static readonly CALL = 424;
	public static readonly CURRENT_P = 425;
	public static readonly ATTACH = 426;
	public static readonly DETACH = 427;
	public static readonly EXPRESSION = 428;
	public static readonly GENERATED = 429;
	public static readonly LOGGED = 430;
	public static readonly STORED = 431;
	public static readonly INCLUDE = 432;
	public static readonly ROUTINE = 433;
	public static readonly TRANSFORM = 434;
	public static readonly IMPORT_P = 435;
	public static readonly POLICY = 436;
	public static readonly METHOD = 437;
	public static readonly REFERENCING = 438;
	public static readonly NEW = 439;
	public static readonly OLD = 440;
	public static readonly VALUE_P = 441;
	public static readonly SUBSCRIPTION = 442;
	public static readonly PUBLICATION = 443;
	public static readonly OUT_P = 444;
	public static readonly END_P = 445;
	public static readonly ROUTINES = 446;
	public static readonly SCHEMAS = 447;
	public static readonly PROCEDURES = 448;
	public static readonly INPUT_P = 449;
	public static readonly SUPPORT = 450;
	public static readonly PARALLEL = 451;
	public static readonly SQL_P = 452;
	public static readonly DEPENDS = 453;
	public static readonly OVERRIDING = 454;
	public static readonly CONFLICT = 455;
	public static readonly SKIP_P = 456;
	public static readonly LOCKED = 457;
	public static readonly TIES = 458;
	public static readonly ROLLUP = 459;
	public static readonly CUBE = 460;
	public static readonly GROUPING = 461;
	public static readonly SETS = 462;
	public static readonly TABLESAMPLE = 463;
	public static readonly ORDINALITY = 464;
	public static readonly XMLTABLE = 465;
	public static readonly COLUMNS = 466;
	public static readonly XMLNAMESPACES = 467;
	public static readonly ROWTYPE = 468;
	public static readonly NORMALIZED = 469;
	public static readonly WITHIN = 470;
	public static readonly FILTER = 471;
	public static readonly GROUPS = 472;
	public static readonly OTHERS = 473;
	public static readonly NFC = 474;
	public static readonly NFD = 475;
	public static readonly NFKC = 476;
	public static readonly NFKD = 477;
	public static readonly UESCAPE = 478;
	public static readonly VIEWS = 479;
	public static readonly NORMALIZE = 480;
	public static readonly DUMP = 481;
	public static readonly PRINT_STRICT_PARAMS = 482;
	public static readonly VARIABLE_CONFLICT = 483;
	public static readonly ERROR = 484;
	public static readonly USE_VARIABLE = 485;
	public static readonly USE_COLUMN = 486;
	public static readonly ALIAS = 487;
	public static readonly CONSTANT = 488;
	public static readonly PERFORM = 489;
	public static readonly GET = 490;
	public static readonly DIAGNOSTICS = 491;
	public static readonly STACKED = 492;
	public static readonly ELSIF = 493;
	public static readonly WHILE = 494;
	public static readonly REVERSE = 495;
	public static readonly FOREACH = 496;
	public static readonly SLICE = 497;
	public static readonly EXIT = 498;
	public static readonly RETURN = 499;
	public static readonly QUERY = 500;
	public static readonly RAISE = 501;
	public static readonly SQLSTATE = 502;
	public static readonly DEBUG = 503;
	public static readonly LOG = 504;
	public static readonly INFO = 505;
	public static readonly NOTICE = 506;
	public static readonly WARNING = 507;
	public static readonly EXCEPTION = 508;
	public static readonly ASSERT = 509;
	public static readonly LOOP = 510;
	public static readonly OPEN = 511;
	public static readonly Identifier = 512;
	public static readonly QuotedIdentifier = 513;
	public static readonly UnterminatedQuotedIdentifier = 514;
	public static readonly InvalidQuotedIdentifier = 515;
	public static readonly InvalidUnterminatedQuotedIdentifier = 516;
	public static readonly UnicodeQuotedIdentifier = 517;
	public static readonly UnterminatedUnicodeQuotedIdentifier = 518;
	public static readonly InvalidUnicodeQuotedIdentifier = 519;
	public static readonly InvalidUnterminatedUnicodeQuotedIdentifier = 520;
	public static readonly StringConstant = 521;
	public static readonly UnterminatedStringConstant = 522;
	public static readonly UnicodeEscapeStringConstant = 523;
	public static readonly UnterminatedUnicodeEscapeStringConstant = 524;
	public static readonly BeginDollarStringConstant = 525;
	public static readonly BinaryStringConstant = 526;
	public static readonly UnterminatedBinaryStringConstant = 527;
	public static readonly InvalidBinaryStringConstant = 528;
	public static readonly InvalidUnterminatedBinaryStringConstant = 529;
	public static readonly HexadecimalStringConstant = 530;
	public static readonly UnterminatedHexadecimalStringConstant = 531;
	public static readonly InvalidHexadecimalStringConstant = 532;
	public static readonly InvalidUnterminatedHexadecimalStringConstant = 533;
	public static readonly Integral = 534;
	public static readonly NumericFail = 535;
	public static readonly Numeric = 536;
	public static readonly PLSQLVARIABLENAME = 537;
	public static readonly PLSQLIDENTIFIER = 538;
	public static readonly Whitespace = 539;
	public static readonly Newline = 540;
	public static readonly LineComment = 541;
	public static readonly BlockComment = 542;
	public static readonly UnterminatedBlockComment = 543;
	public static readonly MetaCommand = 544;
	public static readonly EndMetaCommand = 545;
	public static readonly ErrorCharacter = 546;
	public static readonly EscapeStringConstant = 547;
	public static readonly UnterminatedEscapeStringConstant = 548;
	public static readonly InvalidEscapeStringConstant = 549;
	public static readonly InvalidUnterminatedEscapeStringConstant = 550;
	public static readonly AfterEscapeStringConstantMode_NotContinued = 551;
	public static readonly AfterEscapeStringConstantWithNewlineMode_NotContinued = 552;
	public static readonly DollarText = 553;
	public static readonly EndDollarStringConstant = 554;
	public static readonly AfterEscapeStringConstantWithNewlineMode_Continued = 555;
	public static readonly EOF = Token.EOF;
	public static readonly RULE_program = 0;
	public static readonly RULE_plsqlroot = 1;
	public static readonly RULE_stmtblock = 2;
	public static readonly RULE_stmtmulti = 3;
	public static readonly RULE_stmt = 4;
	public static readonly RULE_plsqlconsolecommand = 5;
	public static readonly RULE_callstmt = 6;
	public static readonly RULE_createrolestmt = 7;
	public static readonly RULE_opt_with = 8;
	public static readonly RULE_optrolelist = 9;
	public static readonly RULE_alteroptrolelist = 10;
	public static readonly RULE_alteroptroleelem = 11;
	public static readonly RULE_createoptroleelem = 12;
	public static readonly RULE_createuserstmt = 13;
	public static readonly RULE_alterrolestmt = 14;
	public static readonly RULE_opt_in_database = 15;
	public static readonly RULE_alterrolesetstmt = 16;
	public static readonly RULE_droprolestmt = 17;
	public static readonly RULE_creategroupstmt = 18;
	public static readonly RULE_altergroupstmt = 19;
	public static readonly RULE_add_drop = 20;
	public static readonly RULE_createschemastmt = 21;
	public static readonly RULE_optschemaname = 22;
	public static readonly RULE_optschemaeltlist = 23;
	public static readonly RULE_schema_stmt = 24;
	public static readonly RULE_variablesetstmt = 25;
	public static readonly RULE_set_rest = 26;
	public static readonly RULE_generic_set = 27;
	public static readonly RULE_set_rest_more = 28;
	public static readonly RULE_var_name = 29;
	public static readonly RULE_var_list = 30;
	public static readonly RULE_var_value = 31;
	public static readonly RULE_iso_level = 32;
	public static readonly RULE_opt_boolean_or_string = 33;
	public static readonly RULE_zone_value = 34;
	public static readonly RULE_opt_encoding = 35;
	public static readonly RULE_nonreservedword_or_sconst = 36;
	public static readonly RULE_variableresetstmt = 37;
	public static readonly RULE_reset_rest = 38;
	public static readonly RULE_generic_reset = 39;
	public static readonly RULE_setresetclause = 40;
	public static readonly RULE_functionsetresetclause = 41;
	public static readonly RULE_variableshowstmt = 42;
	public static readonly RULE_constraintssetstmt = 43;
	public static readonly RULE_constraints_set_list = 44;
	public static readonly RULE_constraints_set_mode = 45;
	public static readonly RULE_checkpointstmt = 46;
	public static readonly RULE_discardstmt = 47;
	public static readonly RULE_altertablestmt = 48;
	public static readonly RULE_alter_table_cmds = 49;
	public static readonly RULE_partition_cmd = 50;
	public static readonly RULE_index_partition_cmd = 51;
	public static readonly RULE_alter_table_cmd = 52;
	public static readonly RULE_alter_column_default = 53;
	public static readonly RULE_opt_drop_behavior = 54;
	public static readonly RULE_opt_collate_clause = 55;
	public static readonly RULE_alter_using = 56;
	public static readonly RULE_replica_identity = 57;
	public static readonly RULE_reloptions = 58;
	public static readonly RULE_opt_reloptions = 59;
	public static readonly RULE_reloption_list = 60;
	public static readonly RULE_reloption_elem = 61;
	public static readonly RULE_alter_identity_column_option_list = 62;
	public static readonly RULE_alter_identity_column_option = 63;
	public static readonly RULE_partitionboundspec = 64;
	public static readonly RULE_hash_partbound_elem = 65;
	public static readonly RULE_hash_partbound = 66;
	public static readonly RULE_altercompositetypestmt = 67;
	public static readonly RULE_alter_type_cmds = 68;
	public static readonly RULE_alter_type_cmd = 69;
	public static readonly RULE_closeportalstmt = 70;
	public static readonly RULE_copystmt = 71;
	public static readonly RULE_copy_from = 72;
	public static readonly RULE_opt_program = 73;
	public static readonly RULE_copy_file_name = 74;
	public static readonly RULE_copy_options = 75;
	public static readonly RULE_copy_opt_list = 76;
	public static readonly RULE_copy_opt_item = 77;
	public static readonly RULE_opt_binary = 78;
	public static readonly RULE_copy_delimiter = 79;
	public static readonly RULE_opt_using = 80;
	public static readonly RULE_copy_generic_opt_list = 81;
	public static readonly RULE_copy_generic_opt_elem = 82;
	public static readonly RULE_copy_generic_opt_arg = 83;
	public static readonly RULE_copy_generic_opt_arg_list = 84;
	public static readonly RULE_copy_generic_opt_arg_list_item = 85;
	public static readonly RULE_createstmt = 86;
	public static readonly RULE_opttemp = 87;
	public static readonly RULE_opttableelementlist = 88;
	public static readonly RULE_opttypedtableelementlist = 89;
	public static readonly RULE_tableelementlist = 90;
	public static readonly RULE_typedtableelementlist = 91;
	public static readonly RULE_tableelement = 92;
	public static readonly RULE_typedtableelement = 93;
	public static readonly RULE_columnDef = 94;
	public static readonly RULE_columnOptions = 95;
	public static readonly RULE_colquallist = 96;
	public static readonly RULE_colconstraint = 97;
	public static readonly RULE_colconstraintelem = 98;
	public static readonly RULE_generated_when = 99;
	public static readonly RULE_constraintattr = 100;
	public static readonly RULE_tablelikeclause = 101;
	public static readonly RULE_tablelikeoptionlist = 102;
	public static readonly RULE_tablelikeoption = 103;
	public static readonly RULE_tableconstraint = 104;
	public static readonly RULE_constraintelem = 105;
	public static readonly RULE_opt_no_inherit = 106;
	public static readonly RULE_opt_column_list = 107;
	public static readonly RULE_columnlist = 108;
	public static readonly RULE_columnElem = 109;
	public static readonly RULE_opt_c_include = 110;
	public static readonly RULE_key_match = 111;
	public static readonly RULE_exclusionconstraintlist = 112;
	public static readonly RULE_exclusionconstraintelem = 113;
	public static readonly RULE_exclusionwhereclause = 114;
	public static readonly RULE_key_actions = 115;
	public static readonly RULE_key_update = 116;
	public static readonly RULE_key_delete = 117;
	public static readonly RULE_key_action = 118;
	public static readonly RULE_optinherit = 119;
	public static readonly RULE_optpartitionspec = 120;
	public static readonly RULE_partitionspec = 121;
	public static readonly RULE_part_params = 122;
	public static readonly RULE_part_elem = 123;
	public static readonly RULE_table_access_method_clause = 124;
	public static readonly RULE_optwith = 125;
	public static readonly RULE_oncommitoption = 126;
	public static readonly RULE_opttablespace = 127;
	public static readonly RULE_optconstablespace = 128;
	public static readonly RULE_existingindex = 129;
	public static readonly RULE_createstatsstmt = 130;
	public static readonly RULE_alterstatsstmt = 131;
	public static readonly RULE_createasstmt = 132;
	public static readonly RULE_create_as_target = 133;
	public static readonly RULE_opt_with_data = 134;
	public static readonly RULE_creatematviewstmt = 135;
	public static readonly RULE_create_mv_target = 136;
	public static readonly RULE_optnolog = 137;
	public static readonly RULE_refreshmatviewstmt = 138;
	public static readonly RULE_createseqstmt = 139;
	public static readonly RULE_alterseqstmt = 140;
	public static readonly RULE_optseqoptlist = 141;
	public static readonly RULE_optparenthesizedseqoptlist = 142;
	public static readonly RULE_seqoptlist = 143;
	public static readonly RULE_seqoptelem = 144;
	public static readonly RULE_opt_by = 145;
	public static readonly RULE_numericonly = 146;
	public static readonly RULE_numericonly_list = 147;
	public static readonly RULE_createplangstmt = 148;
	public static readonly RULE_opt_trusted = 149;
	public static readonly RULE_handler_name = 150;
	public static readonly RULE_opt_inline_handler = 151;
	public static readonly RULE_validator_clause = 152;
	public static readonly RULE_opt_validator = 153;
	public static readonly RULE_opt_procedural = 154;
	public static readonly RULE_createtablespacestmt = 155;
	public static readonly RULE_opttablespaceowner = 156;
	public static readonly RULE_droptablespacestmt = 157;
	public static readonly RULE_createextensionstmt = 158;
	public static readonly RULE_create_extension_opt_list = 159;
	public static readonly RULE_create_extension_opt_item = 160;
	public static readonly RULE_alterextensionstmt = 161;
	public static readonly RULE_alter_extension_opt_list = 162;
	public static readonly RULE_alter_extension_opt_item = 163;
	public static readonly RULE_alterextensioncontentsstmt = 164;
	public static readonly RULE_createfdwstmt = 165;
	public static readonly RULE_fdw_option = 166;
	public static readonly RULE_fdw_options = 167;
	public static readonly RULE_opt_fdw_options = 168;
	public static readonly RULE_alterfdwstmt = 169;
	public static readonly RULE_create_generic_options = 170;
	public static readonly RULE_generic_option_list = 171;
	public static readonly RULE_alter_generic_options = 172;
	public static readonly RULE_alter_generic_option_list = 173;
	public static readonly RULE_alter_generic_option_elem = 174;
	public static readonly RULE_generic_option_elem = 175;
	public static readonly RULE_generic_option_name = 176;
	public static readonly RULE_generic_option_arg = 177;
	public static readonly RULE_createforeignserverstmt = 178;
	public static readonly RULE_opt_type = 179;
	public static readonly RULE_foreign_server_version = 180;
	public static readonly RULE_opt_foreign_server_version = 181;
	public static readonly RULE_alterforeignserverstmt = 182;
	public static readonly RULE_createforeigntablestmt = 183;
	public static readonly RULE_importforeignschemastmt = 184;
	public static readonly RULE_import_qualification_type = 185;
	public static readonly RULE_import_qualification = 186;
	public static readonly RULE_createusermappingstmt = 187;
	public static readonly RULE_auth_ident = 188;
	public static readonly RULE_dropusermappingstmt = 189;
	public static readonly RULE_alterusermappingstmt = 190;
	public static readonly RULE_createpolicystmt = 191;
	public static readonly RULE_alterpolicystmt = 192;
	public static readonly RULE_rowsecurityoptionalexpr = 193;
	public static readonly RULE_rowsecurityoptionalwithcheck = 194;
	public static readonly RULE_rowsecuritydefaulttorole = 195;
	public static readonly RULE_rowsecurityoptionaltorole = 196;
	public static readonly RULE_rowsecuritydefaultpermissive = 197;
	public static readonly RULE_rowsecuritydefaultforcmd = 198;
	public static readonly RULE_row_security_cmd = 199;
	public static readonly RULE_createamstmt = 200;
	public static readonly RULE_am_type = 201;
	public static readonly RULE_createtrigstmt = 202;
	public static readonly RULE_triggeractiontime = 203;
	public static readonly RULE_triggerevents = 204;
	public static readonly RULE_triggeroneevent = 205;
	public static readonly RULE_triggerreferencing = 206;
	public static readonly RULE_triggertransitions = 207;
	public static readonly RULE_triggertransition = 208;
	public static readonly RULE_transitionoldornew = 209;
	public static readonly RULE_transitionrowortable = 210;
	public static readonly RULE_transitionrelname = 211;
	public static readonly RULE_triggerforspec = 212;
	public static readonly RULE_triggerforopteach = 213;
	public static readonly RULE_triggerfortype = 214;
	public static readonly RULE_triggerwhen = 215;
	public static readonly RULE_function_or_procedure = 216;
	public static readonly RULE_triggerfuncargs = 217;
	public static readonly RULE_triggerfuncarg = 218;
	public static readonly RULE_optconstrfromtable = 219;
	public static readonly RULE_constraintattributespec = 220;
	public static readonly RULE_constraintattributeElem = 221;
	public static readonly RULE_createeventtrigstmt = 222;
	public static readonly RULE_event_trigger_when_list = 223;
	public static readonly RULE_event_trigger_when_item = 224;
	public static readonly RULE_event_trigger_value_list = 225;
	public static readonly RULE_altereventtrigstmt = 226;
	public static readonly RULE_enable_trigger = 227;
	public static readonly RULE_createassertionstmt = 228;
	public static readonly RULE_definestmt = 229;
	public static readonly RULE_definition = 230;
	public static readonly RULE_def_list = 231;
	public static readonly RULE_def_elem = 232;
	public static readonly RULE_def_arg = 233;
	public static readonly RULE_old_aggr_definition = 234;
	public static readonly RULE_old_aggr_list = 235;
	public static readonly RULE_old_aggr_elem = 236;
	public static readonly RULE_opt_enum_val_list = 237;
	public static readonly RULE_enum_val_list = 238;
	public static readonly RULE_alterenumstmt = 239;
	public static readonly RULE_opt_if_not_exists = 240;
	public static readonly RULE_createopclassstmt = 241;
	public static readonly RULE_opclass_item_list = 242;
	public static readonly RULE_opclass_item = 243;
	public static readonly RULE_opt_default = 244;
	public static readonly RULE_opt_opfamily = 245;
	public static readonly RULE_opclass_purpose = 246;
	public static readonly RULE_opt_recheck = 247;
	public static readonly RULE_createopfamilystmt = 248;
	public static readonly RULE_alteropfamilystmt = 249;
	public static readonly RULE_opclass_drop_list = 250;
	public static readonly RULE_opclass_drop = 251;
	public static readonly RULE_dropopclassstmt = 252;
	public static readonly RULE_dropopfamilystmt = 253;
	public static readonly RULE_dropownedstmt = 254;
	public static readonly RULE_reassignownedstmt = 255;
	public static readonly RULE_dropstmt = 256;
	public static readonly RULE_object_type_any_name = 257;
	public static readonly RULE_object_type_name = 258;
	public static readonly RULE_drop_type_name = 259;
	public static readonly RULE_object_type_name_on_any_name = 260;
	public static readonly RULE_any_name_list = 261;
	public static readonly RULE_any_name = 262;
	public static readonly RULE_attrs = 263;
	public static readonly RULE_type_name_list = 264;
	public static readonly RULE_truncatestmt = 265;
	public static readonly RULE_opt_restart_seqs = 266;
	public static readonly RULE_commentstmt = 267;
	public static readonly RULE_comment_text = 268;
	public static readonly RULE_seclabelstmt = 269;
	public static readonly RULE_opt_provider = 270;
	public static readonly RULE_security_label = 271;
	public static readonly RULE_fetchstmt = 272;
	public static readonly RULE_fetch_args = 273;
	public static readonly RULE_from_in = 274;
	public static readonly RULE_opt_from_in = 275;
	public static readonly RULE_grantstmt = 276;
	public static readonly RULE_revokestmt = 277;
	public static readonly RULE_privileges = 278;
	public static readonly RULE_privilege_list = 279;
	public static readonly RULE_privilege = 280;
	public static readonly RULE_privilege_target = 281;
	public static readonly RULE_grantee_list = 282;
	public static readonly RULE_grantee = 283;
	public static readonly RULE_opt_grant_grant_option = 284;
	public static readonly RULE_grantrolestmt = 285;
	public static readonly RULE_revokerolestmt = 286;
	public static readonly RULE_opt_grant_admin_option = 287;
	public static readonly RULE_opt_granted_by = 288;
	public static readonly RULE_alterdefaultprivilegesstmt = 289;
	public static readonly RULE_defacloptionlist = 290;
	public static readonly RULE_defacloption = 291;
	public static readonly RULE_defaclaction = 292;
	public static readonly RULE_defacl_privilege_target = 293;
	public static readonly RULE_indexstmt = 294;
	public static readonly RULE_opt_unique = 295;
	public static readonly RULE_opt_concurrently = 296;
	public static readonly RULE_opt_index_name = 297;
	public static readonly RULE_access_method_clause = 298;
	public static readonly RULE_index_params = 299;
	public static readonly RULE_index_elem_options = 300;
	public static readonly RULE_index_elem = 301;
	public static readonly RULE_opt_include = 302;
	public static readonly RULE_index_including_params = 303;
	public static readonly RULE_opt_collate = 304;
	public static readonly RULE_opt_class = 305;
	public static readonly RULE_opt_asc_desc = 306;
	public static readonly RULE_opt_nulls_order = 307;
	public static readonly RULE_createfunctionstmt = 308;
	public static readonly RULE_opt_or_replace = 309;
	public static readonly RULE_func_args = 310;
	public static readonly RULE_func_args_list = 311;
	public static readonly RULE_function_with_argtypes_list = 312;
	public static readonly RULE_function_with_argtypes = 313;
	public static readonly RULE_func_args_with_defaults = 314;
	public static readonly RULE_func_args_with_defaults_list = 315;
	public static readonly RULE_func_arg = 316;
	public static readonly RULE_arg_class = 317;
	public static readonly RULE_param_name = 318;
	public static readonly RULE_func_return = 319;
	public static readonly RULE_func_type = 320;
	public static readonly RULE_func_arg_with_default = 321;
	public static readonly RULE_aggr_arg = 322;
	public static readonly RULE_aggr_args = 323;
	public static readonly RULE_aggr_args_list = 324;
	public static readonly RULE_aggregate_with_argtypes = 325;
	public static readonly RULE_aggregate_with_argtypes_list = 326;
	public static readonly RULE_createfunc_opt_list = 327;
	public static readonly RULE_common_func_opt_item = 328;
	public static readonly RULE_createfunc_opt_item = 329;
	public static readonly RULE_func_as = 330;
	public static readonly RULE_transform_type_list = 331;
	public static readonly RULE_opt_definition = 332;
	public static readonly RULE_table_func_column = 333;
	public static readonly RULE_table_func_column_list = 334;
	public static readonly RULE_alterfunctionstmt = 335;
	public static readonly RULE_alterfunc_opt_list = 336;
	public static readonly RULE_opt_restrict = 337;
	public static readonly RULE_removefuncstmt = 338;
	public static readonly RULE_removeaggrstmt = 339;
	public static readonly RULE_removeoperstmt = 340;
	public static readonly RULE_oper_argtypes = 341;
	public static readonly RULE_any_operator = 342;
	public static readonly RULE_operator_with_argtypes_list = 343;
	public static readonly RULE_operator_with_argtypes = 344;
	public static readonly RULE_dostmt = 345;
	public static readonly RULE_dostmt_opt_list = 346;
	public static readonly RULE_dostmt_opt_item = 347;
	public static readonly RULE_createcaststmt = 348;
	public static readonly RULE_cast_context = 349;
	public static readonly RULE_dropcaststmt = 350;
	public static readonly RULE_opt_if_exists = 351;
	public static readonly RULE_createtransformstmt = 352;
	public static readonly RULE_transform_element_list = 353;
	public static readonly RULE_droptransformstmt = 354;
	public static readonly RULE_reindexstmt = 355;
	public static readonly RULE_reindex_target_type = 356;
	public static readonly RULE_reindex_target_multitable = 357;
	public static readonly RULE_reindex_option_list = 358;
	public static readonly RULE_reindex_option_elem = 359;
	public static readonly RULE_altertblspcstmt = 360;
	public static readonly RULE_renamestmt = 361;
	public static readonly RULE_opt_column = 362;
	public static readonly RULE_opt_set_data = 363;
	public static readonly RULE_alterobjectdependsstmt = 364;
	public static readonly RULE_opt_no = 365;
	public static readonly RULE_alterobjectschemastmt = 366;
	public static readonly RULE_alteroperatorstmt = 367;
	public static readonly RULE_operator_def_list = 368;
	public static readonly RULE_operator_def_elem = 369;
	public static readonly RULE_operator_def_arg = 370;
	public static readonly RULE_altertypestmt = 371;
	public static readonly RULE_alterownerstmt = 372;
	public static readonly RULE_createpublicationstmt = 373;
	public static readonly RULE_opt_publication_for_tables = 374;
	public static readonly RULE_publication_for_tables = 375;
	public static readonly RULE_alterpublicationstmt = 376;
	public static readonly RULE_createsubscriptionstmt = 377;
	public static readonly RULE_publication_name_list = 378;
	public static readonly RULE_publication_name_item = 379;
	public static readonly RULE_altersubscriptionstmt = 380;
	public static readonly RULE_dropsubscriptionstmt = 381;
	public static readonly RULE_rulestmt = 382;
	public static readonly RULE_ruleactionlist = 383;
	public static readonly RULE_ruleactionmulti = 384;
	public static readonly RULE_ruleactionstmt = 385;
	public static readonly RULE_ruleactionstmtOrEmpty = 386;
	public static readonly RULE_event = 387;
	public static readonly RULE_opt_instead = 388;
	public static readonly RULE_notifystmt = 389;
	public static readonly RULE_notify_payload = 390;
	public static readonly RULE_listenstmt = 391;
	public static readonly RULE_unlistenstmt = 392;
	public static readonly RULE_transactionstmt = 393;
	public static readonly RULE_opt_transaction = 394;
	public static readonly RULE_transaction_mode_item = 395;
	public static readonly RULE_transaction_mode_list = 396;
	public static readonly RULE_transaction_mode_list_or_empty = 397;
	public static readonly RULE_opt_transaction_chain = 398;
	public static readonly RULE_viewstmt = 399;
	public static readonly RULE_opt_check_option = 400;
	public static readonly RULE_loadstmt = 401;
	public static readonly RULE_createdbstmt = 402;
	public static readonly RULE_createdb_opt_list = 403;
	public static readonly RULE_createdb_opt_items = 404;
	public static readonly RULE_createdb_opt_item = 405;
	public static readonly RULE_createdb_opt_name = 406;
	public static readonly RULE_opt_equal = 407;
	public static readonly RULE_alterdatabasestmt = 408;
	public static readonly RULE_alterdatabasesetstmt = 409;
	public static readonly RULE_dropdbstmt = 410;
	public static readonly RULE_drop_option_list = 411;
	public static readonly RULE_drop_option = 412;
	public static readonly RULE_altercollationstmt = 413;
	public static readonly RULE_altersystemstmt = 414;
	public static readonly RULE_createdomainstmt = 415;
	public static readonly RULE_alterdomainstmt = 416;
	public static readonly RULE_opt_as = 417;
	public static readonly RULE_altertsdictionarystmt = 418;
	public static readonly RULE_altertsconfigurationstmt = 419;
	public static readonly RULE_any_with = 420;
	public static readonly RULE_createconversionstmt = 421;
	public static readonly RULE_clusterstmt = 422;
	public static readonly RULE_cluster_index_specification = 423;
	public static readonly RULE_vacuumstmt = 424;
	public static readonly RULE_analyzestmt = 425;
	public static readonly RULE_vac_analyze_option_list = 426;
	public static readonly RULE_analyze_keyword = 427;
	public static readonly RULE_vac_analyze_option_elem = 428;
	public static readonly RULE_vac_analyze_option_name = 429;
	public static readonly RULE_vac_analyze_option_arg = 430;
	public static readonly RULE_opt_analyze = 431;
	public static readonly RULE_opt_verbose = 432;
	public static readonly RULE_opt_full = 433;
	public static readonly RULE_opt_freeze = 434;
	public static readonly RULE_opt_name_list = 435;
	public static readonly RULE_vacuum_relation = 436;
	public static readonly RULE_vacuum_relation_list = 437;
	public static readonly RULE_opt_vacuum_relation_list = 438;
	public static readonly RULE_explainstmt = 439;
	public static readonly RULE_explainablestmt = 440;
	public static readonly RULE_explain_option_list = 441;
	public static readonly RULE_explain_option_elem = 442;
	public static readonly RULE_explain_option_name = 443;
	public static readonly RULE_explain_option_arg = 444;
	public static readonly RULE_preparestmt = 445;
	public static readonly RULE_prep_type_clause = 446;
	public static readonly RULE_preparablestmt = 447;
	public static readonly RULE_executestmt = 448;
	public static readonly RULE_execute_param_clause = 449;
	public static readonly RULE_deallocatestmt = 450;
	public static readonly RULE_insertstmt = 451;
	public static readonly RULE_insert_target = 452;
	public static readonly RULE_insert_rest = 453;
	public static readonly RULE_override_kind = 454;
	public static readonly RULE_insert_column_list = 455;
	public static readonly RULE_insert_column_item = 456;
	public static readonly RULE_opt_on_conflict = 457;
	public static readonly RULE_opt_conf_expr = 458;
	public static readonly RULE_returning_clause = 459;
	public static readonly RULE_deletestmt = 460;
	public static readonly RULE_using_clause = 461;
	public static readonly RULE_lockstmt = 462;
	public static readonly RULE_opt_lock = 463;
	public static readonly RULE_lock_type = 464;
	public static readonly RULE_opt_nowait = 465;
	public static readonly RULE_opt_nowait_or_skip = 466;
	public static readonly RULE_updatestmt = 467;
	public static readonly RULE_set_clause_list = 468;
	public static readonly RULE_set_clause = 469;
	public static readonly RULE_set_target = 470;
	public static readonly RULE_set_target_list = 471;
	public static readonly RULE_declarecursorstmt = 472;
	public static readonly RULE_cursor_name = 473;
	public static readonly RULE_cursor_options = 474;
	public static readonly RULE_opt_hold = 475;
	public static readonly RULE_selectstmt = 476;
	public static readonly RULE_select_with_parens = 477;
	public static readonly RULE_select_no_parens = 478;
	public static readonly RULE_select_clause = 479;
	public static readonly RULE_simple_select = 480;
	public static readonly RULE_set_operator = 481;
	public static readonly RULE_set_operator_with_all_or_distinct = 482;
	public static readonly RULE_with_clause = 483;
	public static readonly RULE_cte_list = 484;
	public static readonly RULE_common_table_expr = 485;
	public static readonly RULE_opt_materialized = 486;
	public static readonly RULE_opt_with_clause = 487;
	public static readonly RULE_into_clause = 488;
	public static readonly RULE_opt_strict = 489;
	public static readonly RULE_opttempTableName = 490;
	public static readonly RULE_opt_table = 491;
	public static readonly RULE_all_or_distinct = 492;
	public static readonly RULE_distinct_clause = 493;
	public static readonly RULE_opt_all_clause = 494;
	public static readonly RULE_opt_sort_clause = 495;
	public static readonly RULE_sort_clause = 496;
	public static readonly RULE_sortby_list = 497;
	public static readonly RULE_sortby = 498;
	public static readonly RULE_select_limit = 499;
	public static readonly RULE_opt_select_limit = 500;
	public static readonly RULE_limit_clause = 501;
	public static readonly RULE_offset_clause = 502;
	public static readonly RULE_select_limit_value = 503;
	public static readonly RULE_select_offset_value = 504;
	public static readonly RULE_select_fetch_first_value = 505;
	public static readonly RULE_i_or_f_const = 506;
	public static readonly RULE_row_or_rows = 507;
	public static readonly RULE_first_or_next = 508;
	public static readonly RULE_group_clause = 509;
	public static readonly RULE_group_by_list = 510;
	public static readonly RULE_group_by_item = 511;
	public static readonly RULE_empty_grouping_set = 512;
	public static readonly RULE_rollup_clause = 513;
	public static readonly RULE_cube_clause = 514;
	public static readonly RULE_grouping_sets_clause = 515;
	public static readonly RULE_having_clause = 516;
	public static readonly RULE_for_locking_clause = 517;
	public static readonly RULE_opt_for_locking_clause = 518;
	public static readonly RULE_for_locking_items = 519;
	public static readonly RULE_for_locking_item = 520;
	public static readonly RULE_for_locking_strength = 521;
	public static readonly RULE_locked_rels_list = 522;
	public static readonly RULE_values_clause = 523;
	public static readonly RULE_from_clause = 524;
	public static readonly RULE_from_list = 525;
	public static readonly RULE_table_ref = 526;
	public static readonly RULE_alias_clause = 527;
	public static readonly RULE_opt_alias_clause = 528;
	public static readonly RULE_func_alias_clause = 529;
	public static readonly RULE_join_type = 530;
	public static readonly RULE_join_qual = 531;
	public static readonly RULE_relation_expr = 532;
	public static readonly RULE_relation_expr_list = 533;
	public static readonly RULE_relation_expr_opt_alias = 534;
	public static readonly RULE_tablesample_clause = 535;
	public static readonly RULE_opt_repeatable_clause = 536;
	public static readonly RULE_func_table = 537;
	public static readonly RULE_rowsfrom_item = 538;
	public static readonly RULE_rowsfrom_list = 539;
	public static readonly RULE_opt_col_def_list = 540;
	public static readonly RULE_opt_ordinality = 541;
	public static readonly RULE_where_clause = 542;
	public static readonly RULE_where_or_current_clause = 543;
	public static readonly RULE_opttablefuncelementlist = 544;
	public static readonly RULE_tablefuncelementlist = 545;
	public static readonly RULE_tablefuncelement = 546;
	public static readonly RULE_xmltable = 547;
	public static readonly RULE_xmltable_column_list = 548;
	public static readonly RULE_xmltable_column_el = 549;
	public static readonly RULE_xmltable_column_option_list = 550;
	public static readonly RULE_xmltable_column_option_el = 551;
	public static readonly RULE_xml_namespace_list = 552;
	public static readonly RULE_xml_namespace_el = 553;
	public static readonly RULE_typename = 554;
	public static readonly RULE_opt_array_bounds = 555;
	public static readonly RULE_simpletypename = 556;
	public static readonly RULE_consttypename = 557;
	public static readonly RULE_generictype = 558;
	public static readonly RULE_opt_type_modifiers = 559;
	public static readonly RULE_numeric = 560;
	public static readonly RULE_opt_float = 561;
	public static readonly RULE_bit = 562;
	public static readonly RULE_constbit = 563;
	public static readonly RULE_bitwithlength = 564;
	public static readonly RULE_bitwithoutlength = 565;
	public static readonly RULE_character = 566;
	public static readonly RULE_constcharacter = 567;
	public static readonly RULE_character_c = 568;
	public static readonly RULE_opt_varying = 569;
	public static readonly RULE_constdatetime = 570;
	public static readonly RULE_constinterval = 571;
	public static readonly RULE_opt_timezone = 572;
	public static readonly RULE_opt_interval = 573;
	public static readonly RULE_interval_second = 574;
	public static readonly RULE_opt_escape = 575;
	public static readonly RULE_a_expr = 576;
	public static readonly RULE_a_expr_qual = 577;
	public static readonly RULE_a_expr_lessless = 578;
	public static readonly RULE_a_expr_or = 579;
	public static readonly RULE_a_expr_and = 580;
	public static readonly RULE_a_expr_in = 581;
	public static readonly RULE_a_expr_unary_not = 582;
	public static readonly RULE_a_expr_isnull = 583;
	public static readonly RULE_a_expr_is_not = 584;
	public static readonly RULE_a_expr_compare = 585;
	public static readonly RULE_a_expr_like = 586;
	public static readonly RULE_a_expr_qual_op = 587;
	public static readonly RULE_a_expr_unary_qualop = 588;
	public static readonly RULE_a_expr_add = 589;
	public static readonly RULE_a_expr_mul = 590;
	public static readonly RULE_a_expr_caret = 591;
	public static readonly RULE_a_expr_unary_sign = 592;
	public static readonly RULE_a_expr_at_time_zone = 593;
	public static readonly RULE_a_expr_collate = 594;
	public static readonly RULE_a_expr_typecast = 595;
	public static readonly RULE_b_expr = 596;
	public static readonly RULE_c_expr = 597;
	public static readonly RULE_plsqlvariablename = 598;
	public static readonly RULE_func_application = 599;
	public static readonly RULE_func_expr = 600;
	public static readonly RULE_func_expr_windowless = 601;
	public static readonly RULE_func_expr_common_subexpr = 602;
	public static readonly RULE_xml_root_version = 603;
	public static readonly RULE_opt_xml_root_standalone = 604;
	public static readonly RULE_xml_attributes = 605;
	public static readonly RULE_xml_attribute_list = 606;
	public static readonly RULE_xml_attribute_el = 607;
	public static readonly RULE_document_or_content = 608;
	public static readonly RULE_xml_whitespace_option = 609;
	public static readonly RULE_xmlexists_argument = 610;
	public static readonly RULE_xml_passing_mech = 611;
	public static readonly RULE_within_group_clause = 612;
	public static readonly RULE_filter_clause = 613;
	public static readonly RULE_window_clause = 614;
	public static readonly RULE_window_definition_list = 615;
	public static readonly RULE_window_definition = 616;
	public static readonly RULE_over_clause = 617;
	public static readonly RULE_window_specification = 618;
	public static readonly RULE_opt_existing_window_name = 619;
	public static readonly RULE_opt_partition_clause = 620;
	public static readonly RULE_opt_frame_clause = 621;
	public static readonly RULE_frame_extent = 622;
	public static readonly RULE_frame_bound = 623;
	public static readonly RULE_opt_window_exclusion_clause = 624;
	public static readonly RULE_row = 625;
	public static readonly RULE_explicit_row = 626;
	public static readonly RULE_implicit_row = 627;
	public static readonly RULE_sub_type = 628;
	public static readonly RULE_all_op = 629;
	public static readonly RULE_mathop = 630;
	public static readonly RULE_qual_op = 631;
	public static readonly RULE_qual_all_op = 632;
	public static readonly RULE_subquery_Op = 633;
	public static readonly RULE_expr_list = 634;
	public static readonly RULE_func_arg_list = 635;
	public static readonly RULE_func_arg_expr = 636;
	public static readonly RULE_type_list = 637;
	public static readonly RULE_array_expr = 638;
	public static readonly RULE_array_expr_list = 639;
	public static readonly RULE_extract_list = 640;
	public static readonly RULE_extract_arg = 641;
	public static readonly RULE_unicode_normal_form = 642;
	public static readonly RULE_overlay_list = 643;
	public static readonly RULE_position_list = 644;
	public static readonly RULE_substr_list = 645;
	public static readonly RULE_trim_list = 646;
	public static readonly RULE_in_expr = 647;
	public static readonly RULE_case_expr = 648;
	public static readonly RULE_when_clause_list = 649;
	public static readonly RULE_when_clause = 650;
	public static readonly RULE_case_default = 651;
	public static readonly RULE_case_arg = 652;
	public static readonly RULE_columnref = 653;
	public static readonly RULE_indirection_el = 654;
	public static readonly RULE_opt_slice_bound = 655;
	public static readonly RULE_indirection = 656;
	public static readonly RULE_opt_indirection = 657;
	public static readonly RULE_opt_target_list = 658;
	public static readonly RULE_target_list = 659;
	public static readonly RULE_target_el = 660;
	public static readonly RULE_qualified_name_list = 661;
	public static readonly RULE_qualified_name = 662;
	public static readonly RULE_name_list = 663;
	public static readonly RULE_name = 664;
	public static readonly RULE_attr_name = 665;
	public static readonly RULE_file_name = 666;
	public static readonly RULE_func_name = 667;
	public static readonly RULE_aexprconst = 668;
	public static readonly RULE_xconst = 669;
	public static readonly RULE_bconst = 670;
	public static readonly RULE_fconst = 671;
	public static readonly RULE_iconst = 672;
	public static readonly RULE_sconst = 673;
	public static readonly RULE_anysconst = 674;
	public static readonly RULE_opt_uescape = 675;
	public static readonly RULE_signediconst = 676;
	public static readonly RULE_roleid = 677;
	public static readonly RULE_rolespec = 678;
	public static readonly RULE_role_list = 679;
	public static readonly RULE_colid = 680;
	public static readonly RULE_type_function_name = 681;
	public static readonly RULE_nonreservedword = 682;
	public static readonly RULE_collabel = 683;
	public static readonly RULE_identifier = 684;
	public static readonly RULE_plsqlidentifier = 685;
	public static readonly RULE_unreserved_keyword = 686;
	public static readonly RULE_col_name_keyword = 687;
	public static readonly RULE_type_func_name_keyword = 688;
	public static readonly RULE_reserved_keyword = 689;
	public static readonly RULE_pl_function = 690;
	public static readonly RULE_comp_options = 691;
	public static readonly RULE_comp_option = 692;
	public static readonly RULE_sharp = 693;
	public static readonly RULE_option_value = 694;
	public static readonly RULE_opt_semi = 695;
	public static readonly RULE_pl_block = 696;
	public static readonly RULE_decl_sect = 697;
	public static readonly RULE_decl_start = 698;
	public static readonly RULE_decl_stmts = 699;
	public static readonly RULE_label_decl = 700;
	public static readonly RULE_decl_stmt = 701;
	public static readonly RULE_decl_statement = 702;
	public static readonly RULE_opt_scrollable = 703;
	public static readonly RULE_decl_cursor_query = 704;
	public static readonly RULE_decl_cursor_args = 705;
	public static readonly RULE_decl_cursor_arglist = 706;
	public static readonly RULE_decl_cursor_arg = 707;
	public static readonly RULE_decl_is_for = 708;
	public static readonly RULE_decl_aliasitem = 709;
	public static readonly RULE_decl_varname = 710;
	public static readonly RULE_decl_const = 711;
	public static readonly RULE_decl_datatype = 712;
	public static readonly RULE_decl_collate = 713;
	public static readonly RULE_decl_notnull = 714;
	public static readonly RULE_decl_defval = 715;
	public static readonly RULE_decl_defkey = 716;
	public static readonly RULE_assign_operator = 717;
	public static readonly RULE_proc_sect = 718;
	public static readonly RULE_proc_stmt = 719;
	public static readonly RULE_stmt_perform = 720;
	public static readonly RULE_stmt_call = 721;
	public static readonly RULE_opt_expr_list = 722;
	public static readonly RULE_stmt_assign = 723;
	public static readonly RULE_stmt_getdiag = 724;
	public static readonly RULE_getdiag_area_opt = 725;
	public static readonly RULE_getdiag_list = 726;
	public static readonly RULE_getdiag_list_item = 727;
	public static readonly RULE_getdiag_item = 728;
	public static readonly RULE_getdiag_target = 729;
	public static readonly RULE_assign_var = 730;
	public static readonly RULE_stmt_if = 731;
	public static readonly RULE_stmt_elsifs = 732;
	public static readonly RULE_stmt_else = 733;
	public static readonly RULE_stmt_case = 734;
	public static readonly RULE_opt_expr_until_when = 735;
	public static readonly RULE_case_when_list = 736;
	public static readonly RULE_case_when = 737;
	public static readonly RULE_opt_case_else = 738;
	public static readonly RULE_stmt_loop = 739;
	public static readonly RULE_stmt_while = 740;
	public static readonly RULE_stmt_for = 741;
	public static readonly RULE_for_control = 742;
	public static readonly RULE_opt_for_using_expression = 743;
	public static readonly RULE_opt_cursor_parameters = 744;
	public static readonly RULE_opt_reverse = 745;
	public static readonly RULE_opt_by_expression = 746;
	public static readonly RULE_for_variable = 747;
	public static readonly RULE_stmt_foreach_a = 748;
	public static readonly RULE_foreach_slice = 749;
	public static readonly RULE_stmt_exit = 750;
	public static readonly RULE_exit_type = 751;
	public static readonly RULE_stmt_return = 752;
	public static readonly RULE_opt_return_result = 753;
	public static readonly RULE_stmt_raise = 754;
	public static readonly RULE_opt_stmt_raise_level = 755;
	public static readonly RULE_opt_raise_list = 756;
	public static readonly RULE_opt_raise_using = 757;
	public static readonly RULE_opt_raise_using_elem = 758;
	public static readonly RULE_opt_raise_using_elem_list = 759;
	public static readonly RULE_stmt_assert = 760;
	public static readonly RULE_opt_stmt_assert_message = 761;
	public static readonly RULE_loop_body = 762;
	public static readonly RULE_stmt_execsql = 763;
	public static readonly RULE_stmt_dynexecute = 764;
	public static readonly RULE_opt_execute_using = 765;
	public static readonly RULE_opt_execute_using_list = 766;
	public static readonly RULE_opt_execute_into = 767;
	public static readonly RULE_stmt_open = 768;
	public static readonly RULE_opt_open_bound_list_item = 769;
	public static readonly RULE_opt_open_bound_list = 770;
	public static readonly RULE_opt_open_using = 771;
	public static readonly RULE_opt_scroll_option = 772;
	public static readonly RULE_opt_scroll_option_no = 773;
	public static readonly RULE_stmt_fetch = 774;
	public static readonly RULE_into_target = 775;
	public static readonly RULE_opt_cursor_from = 776;
	public static readonly RULE_opt_fetch_direction = 777;
	public static readonly RULE_stmt_move = 778;
	public static readonly RULE_stmt_close = 779;
	public static readonly RULE_stmt_null = 780;
	public static readonly RULE_stmt_commit = 781;
	public static readonly RULE_stmt_rollback = 782;
	public static readonly RULE_plsql_opt_transaction_chain = 783;
	public static readonly RULE_stmt_set = 784;
	public static readonly RULE_cursor_variable = 785;
	public static readonly RULE_exception_sect = 786;
	public static readonly RULE_proc_exceptions = 787;
	public static readonly RULE_proc_exception = 788;
	public static readonly RULE_proc_conditions = 789;
	public static readonly RULE_proc_condition = 790;
	public static readonly RULE_opt_block_label = 791;
	public static readonly RULE_opt_loop_label = 792;
	public static readonly RULE_opt_label = 793;
	public static readonly RULE_opt_exitcond = 794;
	public static readonly RULE_any_identifier = 795;
	public static readonly RULE_plsql_unreserved_keyword = 796;
	public static readonly RULE_sql_expression = 797;
	public static readonly RULE_expr_until_then = 798;
	public static readonly RULE_expr_until_semi = 799;
	public static readonly RULE_expr_until_rightbracket = 800;
	public static readonly RULE_expr_until_loop = 801;
	public static readonly RULE_make_execsql_stmt = 802;
	public static readonly RULE_opt_returning_clause_into = 803;
	public static readonly literalNames: (string | null)[] = [ null, "'$'", 
                                                            "'('", "')'", 
                                                            "'['", "']'", 
                                                            "','", "';'", 
                                                            "':'", "'*'", 
                                                            "'='", "'.'", 
                                                            "'+'", "'-'", 
                                                            "'/'", "'^'", 
                                                            "'<'", "'>'", 
                                                            "'<<'", "'>>'", 
                                                            "':='", "'<='", 
                                                            "'=>'", "'>='", 
                                                            "'..'", "'<>'", 
                                                            "'::'", "'%'", 
                                                            null, null, 
                                                            "'ALL'", "'ANALYSE'", 
                                                            "'ANALYZE'", 
                                                            "'AND'", "'ANY'", 
                                                            "'ARRAY'", "'AS'", 
                                                            "'ASC'", "'ASYMMETRIC'", 
                                                            "'BOTH'", "'CASE'", 
                                                            "'CAST'", "'CHECK'", 
                                                            "'COLLATE'", 
                                                            "'COLUMN'", 
                                                            "'CONSTRAINT'", 
                                                            "'CREATE'", 
                                                            "'CURRENT_CATALOG'", 
                                                            "'CURRENT_DATE'", 
                                                            "'CURRENT_ROLE'", 
                                                            "'CURRENT_TIME'", 
                                                            "'CURRENT_TIMESTAMP'", 
                                                            "'CURRENT_USER'", 
                                                            "'DEFAULT'", 
                                                            "'DEFERRABLE'", 
                                                            "'DESC'", "'DISTINCT'", 
                                                            "'DO'", "'ELSE'", 
                                                            "'EXCEPT'", 
                                                            "'FALSE'", "'FETCH'", 
                                                            "'FOR'", "'FOREIGN'", 
                                                            "'FROM'", "'GRANT'", 
                                                            "'GROUP'", "'HAVING'", 
                                                            "'IN'", "'INITIALLY'", 
                                                            "'INTERSECT'", 
                                                            "'INTO'", "'LATERAL'", 
                                                            "'LEADING'", 
                                                            "'LIMIT'", "'LOCALTIME'", 
                                                            "'LOCALTIMESTAMP'", 
                                                            "'NOT'", "'NULL'", 
                                                            "'OFFSET'", 
                                                            "'ON'", "'ONLY'", 
                                                            "'OR'", "'ORDER'", 
                                                            "'PLACING'", 
                                                            "'PRIMARY'", 
                                                            "'REFERENCES'", 
                                                            "'RETURNING'", 
                                                            "'SELECT'", 
                                                            "'SESSION_USER'", 
                                                            "'SOME'", "'SYMMETRIC'", 
                                                            "'TABLE'", "'THEN'", 
                                                            "'TO'", "'TRAILING'", 
                                                            "'TRUE'", "'UNION'", 
                                                            "'UNIQUE'", 
                                                            "'USER'", "'USING'", 
                                                            "'VARIADIC'", 
                                                            "'WHEN'", "'WHERE'", 
                                                            "'WINDOW'", 
                                                            "'WITH'", "'AUTHORIZATION'", 
                                                            "'BINARY'", 
                                                            "'COLLATION'", 
                                                            "'CONCURRENTLY'", 
                                                            "'CROSS'", "'CURRENT_SCHEMA'", 
                                                            "'FREEZE'", 
                                                            "'FULL'", "'ILIKE'", 
                                                            "'INNER'", "'IS'", 
                                                            "'ISNULL'", 
                                                            "'JOIN'", "'LEFT'", 
                                                            "'LIKE'", "'NATURAL'", 
                                                            "'NOTNULL'", 
                                                            "'OUTER'", "'OVER'", 
                                                            "'OVERLAPS'", 
                                                            "'RIGHT'", "'SIMILAR'", 
                                                            "'VERBOSE'", 
                                                            "'ABORT'", "'ABSOLUTE'", 
                                                            "'ACCESS'", 
                                                            "'ACTION'", 
                                                            "'ADD'", "'ADMIN'", 
                                                            "'AFTER'", "'AGGREGATE'", 
                                                            "'ALSO'", "'ALTER'", 
                                                            "'ALWAYS'", 
                                                            "'ASSERTION'", 
                                                            "'ASSIGNMENT'", 
                                                            "'AT'", "'ATTRIBUTE'", 
                                                            "'BACKWARD'", 
                                                            "'BEFORE'", 
                                                            "'BEGIN'", "'BY'", 
                                                            "'CACHE'", "'CALLED'", 
                                                            "'CASCADE'", 
                                                            "'CASCADED'", 
                                                            "'CATALOG'", 
                                                            "'CHAIN'", "'CHARACTERISTICS'", 
                                                            "'CHECKPOINT'", 
                                                            "'CLASS'", "'CLOSE'", 
                                                            "'CLUSTER'", 
                                                            "'COMMENT'", 
                                                            "'COMMENTS'", 
                                                            "'COMMIT'", 
                                                            "'COMMITTED'", 
                                                            "'CONFIGURATION'", 
                                                            "'CONNECTION'", 
                                                            "'CONSTRAINTS'", 
                                                            "'CONTENT'", 
                                                            "'CONTINUE'", 
                                                            "'CONVERSION'", 
                                                            "'COPY'", "'COST'", 
                                                            "'CSV'", "'CURSOR'", 
                                                            "'CYCLE'", "'DATA'", 
                                                            "'DATABASE'", 
                                                            "'DAY'", "'DEALLOCATE'", 
                                                            "'DECLARE'", 
                                                            "'DEFAULTS'", 
                                                            "'DEFERRED'", 
                                                            "'DEFINER'", 
                                                            "'DELETE'", 
                                                            "'DELIMITER'", 
                                                            "'DELIMITERS'", 
                                                            "'DICTIONARY'", 
                                                            "'DISABLE'", 
                                                            "'DISCARD'", 
                                                            "'DOCUMENT'", 
                                                            "'DOMAIN'", 
                                                            "'DOUBLE'", 
                                                            "'DROP'", "'EACH'", 
                                                            "'ENABLE'", 
                                                            "'ENCODING'", 
                                                            "'ENCRYPTED'", 
                                                            "'ENUM'", "'ESCAPE'", 
                                                            "'EVENT'", "'EXCLUDE'", 
                                                            "'EXCLUDING'", 
                                                            "'EXCLUSIVE'", 
                                                            "'EXECUTE'", 
                                                            "'EXPLAIN'", 
                                                            "'EXTENSION'", 
                                                            "'EXTERNAL'", 
                                                            "'FAMILY'", 
                                                            "'FIRST'", "'FOLLOWING'", 
                                                            "'FORCE'", "'FORWARD'", 
                                                            "'FUNCTION'", 
                                                            "'FUNCTIONS'", 
                                                            "'GLOBAL'", 
                                                            "'GRANTED'", 
                                                            "'HANDLER'", 
                                                            "'HEADER'", 
                                                            "'HOLD'", "'HOUR'", 
                                                            "'IDENTITY'", 
                                                            "'IF'", "'IMMEDIATE'", 
                                                            "'IMMUTABLE'", 
                                                            "'IMPLICIT'", 
                                                            "'INCLUDING'", 
                                                            "'INCREMENT'", 
                                                            "'INDEX'", "'INDEXES'", 
                                                            "'INHERIT'", 
                                                            "'INHERITS'", 
                                                            "'INLINE'", 
                                                            "'INSENSITIVE'", 
                                                            "'INSERT'", 
                                                            "'INSTEAD'", 
                                                            "'INVOKER'", 
                                                            "'ISOLATION'", 
                                                            "'KEY'", "'LABEL'", 
                                                            "'LANGUAGE'", 
                                                            "'LARGE'", "'LAST'", 
                                                            "'LEAKPROOF'", 
                                                            "'LEVEL'", "'LISTEN'", 
                                                            "'LOAD'", "'LOCAL'", 
                                                            "'LOCATION'", 
                                                            "'LOCK'", "'MAPPING'", 
                                                            "'MATCH'", "'MATERIALIZED'", 
                                                            "'MAXVALUE'", 
                                                            "'MINUTE'", 
                                                            "'MINVALUE'", 
                                                            "'MODE'", "'MONTH'", 
                                                            "'MOVE'", "'NAME'", 
                                                            "'NAMES'", "'NEXT'", 
                                                            "'NO'", "'NOTHING'", 
                                                            "'NOTIFY'", 
                                                            "'NOWAIT'", 
                                                            "'NULLS'", "'OBJECT'", 
                                                            "'OF'", "'OFF'", 
                                                            "'OIDS'", "'OPERATOR'", 
                                                            "'OPTION'", 
                                                            "'OPTIONS'", 
                                                            "'OWNED'", "'OWNER'", 
                                                            "'PARSER'", 
                                                            "'PARTIAL'", 
                                                            "'PARTITION'", 
                                                            "'PASSING'", 
                                                            "'PASSWORD'", 
                                                            "'PLANS'", "'PRECEDING'", 
                                                            "'PREPARE'", 
                                                            "'PREPARED'", 
                                                            "'PRESERVE'", 
                                                            "'PRIOR'", "'PRIVILEGES'", 
                                                            "'PROCEDURAL'", 
                                                            "'PROCEDURE'", 
                                                            "'PROGRAM'", 
                                                            "'QUOTE'", "'RANGE'", 
                                                            "'READ'", "'REASSIGN'", 
                                                            "'RECHECK'", 
                                                            "'RECURSIVE'", 
                                                            "'REF'", "'REFRESH'", 
                                                            "'REINDEX'", 
                                                            "'RELATIVE'", 
                                                            "'RELEASE'", 
                                                            "'RENAME'", 
                                                            "'REPEATABLE'", 
                                                            "'REPLACE'", 
                                                            "'REPLICA'", 
                                                            "'RESET'", "'RESTART'", 
                                                            "'RESTRICT'", 
                                                            "'RETURNS'", 
                                                            "'REVOKE'", 
                                                            "'ROLE'", "'ROLLBACK'", 
                                                            "'ROWS'", "'RULE'", 
                                                            "'SAVEPOINT'", 
                                                            "'SCHEMA'", 
                                                            "'SCROLL'", 
                                                            "'SEARCH'", 
                                                            "'SECOND'", 
                                                            "'SECURITY'", 
                                                            "'SEQUENCE'", 
                                                            "'SEQUENCES'", 
                                                            "'SERIALIZABLE'", 
                                                            "'SERVER'", 
                                                            "'SESSION'", 
                                                            "'SET'", "'SHARE'", 
                                                            "'SHOW'", "'SIMPLE'", 
                                                            "'SNAPSHOT'", 
                                                            "'STABLE'", 
                                                            "'STANDALONE'", 
                                                            "'START'", "'STATEMENT'", 
                                                            "'STATISTICS'", 
                                                            "'STDIN'", "'STDOUT'", 
                                                            "'STORAGE'", 
                                                            "'STRICT'", 
                                                            "'STRIP'", "'SYSID'", 
                                                            "'SYSTEM'", 
                                                            "'TABLES'", 
                                                            "'TABLESPACE'", 
                                                            "'TEMP'", "'TEMPLATE'", 
                                                            "'TEMPORARY'", 
                                                            "'TEXT'", "'TRANSACTION'", 
                                                            "'TRIGGER'", 
                                                            "'TRUNCATE'", 
                                                            "'TRUSTED'", 
                                                            "'TYPE'", "'TYPES'", 
                                                            "'UNBOUNDED'", 
                                                            "'UNCOMMITTED'", 
                                                            "'UNENCRYPTED'", 
                                                            "'UNKNOWN'", 
                                                            "'UNLISTEN'", 
                                                            "'UNLOGGED'", 
                                                            "'UNTIL'", "'UPDATE'", 
                                                            "'VACUUM'", 
                                                            "'VALID'", "'VALIDATE'", 
                                                            "'VALIDATOR'", 
                                                            "'VARYING'", 
                                                            "'VERSION'", 
                                                            "'VIEW'", "'VOLATILE'", 
                                                            "'WHITESPACE'", 
                                                            "'WITHOUT'", 
                                                            "'WORK'", "'WRAPPER'", 
                                                            "'WRITE'", "'XML'", 
                                                            "'YEAR'", "'YES'", 
                                                            "'ZONE'", "'BETWEEN'", 
                                                            "'BIGINT'", 
                                                            "'BIT'", "'BOOLEAN'", 
                                                            "'CHAR'", "'CHARACTER'", 
                                                            "'COALESCE'", 
                                                            "'DEC'", "'DECIMAL'", 
                                                            "'EXISTS'", 
                                                            "'EXTRACT'", 
                                                            "'FLOAT'", "'GREATEST'", 
                                                            "'INOUT'", "'INT'", 
                                                            "'INTEGER'", 
                                                            "'INTERVAL'", 
                                                            "'LEAST'", "'NATIONAL'", 
                                                            "'NCHAR'", "'NONE'", 
                                                            "'NULLIF'", 
                                                            "'NUMERIC'", 
                                                            "'OVERLAY'", 
                                                            "'POSITION'", 
                                                            "'PRECISION'", 
                                                            "'REAL'", "'ROW'", 
                                                            "'SETOF'", "'SMALLINT'", 
                                                            "'SUBSTRING'", 
                                                            "'TIME'", "'TIMESTAMP'", 
                                                            "'TREAT'", "'TRIM'", 
                                                            "'VALUES'", 
                                                            "'VARCHAR'", 
                                                            "'XMLATTRIBUTES'", 
                                                            "'XMLCONCAT'", 
                                                            "'XMLELEMENT'", 
                                                            "'XMLEXISTS'", 
                                                            "'XMLFOREST'", 
                                                            "'XMLPARSE'", 
                                                            "'XMLPI'", "'XMLROOT'", 
                                                            "'XMLSERIALIZE'", 
                                                            "'CALL'", "'CURRENT'", 
                                                            "'ATTACH'", 
                                                            "'DETACH'", 
                                                            "'EXPRESSION'", 
                                                            "'GENERATED'", 
                                                            "'LOGGED'", 
                                                            "'STORED'", 
                                                            "'INCLUDE'", 
                                                            "'ROUTINE'", 
                                                            "'TRANSFORM'", 
                                                            "'IMPORT'", 
                                                            "'POLICY'", 
                                                            "'METHOD'", 
                                                            "'REFERENCING'", 
                                                            "'NEW'", "'OLD'", 
                                                            "'VALUE'", "'SUBSCRIPTION'", 
                                                            "'PUBLICATION'", 
                                                            "'OUT'", "'END'", 
                                                            "'ROUTINES'", 
                                                            "'SCHEMAS'", 
                                                            "'PROCEDURES'", 
                                                            "'INPUT'", "'SUPPORT'", 
                                                            "'PARALLEL'", 
                                                            "'SQL'", "'DEPENDS'", 
                                                            "'OVERRIDING'", 
                                                            "'CONFLICT'", 
                                                            "'SKIP'", "'LOCKED'", 
                                                            "'TIES'", "'ROLLUP'", 
                                                            "'CUBE'", "'GROUPING'", 
                                                            "'SETS'", "'TABLESAMPLE'", 
                                                            "'ORDINALITY'", 
                                                            "'XMLTABLE'", 
                                                            "'COLUMNS'", 
                                                            "'XMLNAMESPACES'", 
                                                            "'ROWTYPE'", 
                                                            "'NORMALIZED'", 
                                                            "'WITHIN'", 
                                                            "'FILTER'", 
                                                            "'GROUPS'", 
                                                            "'OTHERS'", 
                                                            "'NFC'", "'NFD'", 
                                                            "'NFKC'", "'NFKD'", 
                                                            "'UESCAPE'", 
                                                            "'VIEWS'", "'NORMALIZE'", 
                                                            "'DUMP'", "'PRINT_STRICT_PARAMS'", 
                                                            "'VARIABLE_CONFLICT'", 
                                                            "'ERROR'", "'USE_VARIABLE'", 
                                                            "'USE_COLUMN'", 
                                                            "'ALIAS'", "'CONSTANT'", 
                                                            "'PERFORM'", 
                                                            "'GET'", "'DIAGNOSTICS'", 
                                                            "'STACKED'", 
                                                            "'ELSIF'", "'WHILE'", 
                                                            "'REVERSE'", 
                                                            "'FOREACH'", 
                                                            "'SLICE'", "'EXIT'", 
                                                            "'RETURN'", 
                                                            "'QUERY'", "'RAISE'", 
                                                            "'SQLSTATE'", 
                                                            "'DEBUG'", "'LOG'", 
                                                            "'INFO'", "'NOTICE'", 
                                                            "'WARNING'", 
                                                            "'EXCEPTION'", 
                                                            "'ASSERT'", 
                                                            "'LOOP'", "'OPEN'", 
                                                            null, null, 
                                                            null, null, 
                                                            null, null, 
                                                            null, null, 
                                                            null, null, 
                                                            null, null, 
                                                            null, null, 
                                                            null, null, 
                                                            null, null, 
                                                            null, null, 
                                                            null, null, 
                                                            null, null, 
                                                            null, null, 
                                                            null, null, 
                                                            null, null, 
                                                            null, null, 
                                                            null, "'\\\\'", 
                                                            null, null, 
                                                            null, null, 
                                                            null, null, 
                                                            null, null, 
                                                            null, "'''" ];
	public static readonly symbolicNames: (string | null)[] = [ null, "Dollar", 
                                                             "OPEN_PAREN", 
                                                             "CLOSE_PAREN", 
                                                             "OPEN_BRACKET", 
                                                             "CLOSE_BRACKET", 
                                                             "COMMA", "SEMI", 
                                                             "COLON", "STAR", 
                                                             "EQUAL", "DOT", 
                                                             "PLUS", "MINUS", 
                                                             "SLASH", "CARET", 
                                                             "LT", "GT", 
                                                             "LESS_LESS", 
                                                             "GREATER_GREATER", 
                                                             "COLON_EQUALS", 
                                                             "LESS_EQUALS", 
                                                             "EQUALS_GREATER", 
                                                             "GREATER_EQUALS", 
                                                             "DOT_DOT", 
                                                             "NOT_EQUALS", 
                                                             "TYPECAST", 
                                                             "PERCENT", 
                                                             "PARAM", "Operator", 
                                                             "ALL", "ANALYSE", 
                                                             "ANALYZE", 
                                                             "AND", "ANY", 
                                                             "ARRAY", "AS", 
                                                             "ASC", "ASYMMETRIC", 
                                                             "BOTH", "CASE", 
                                                             "CAST", "CHECK", 
                                                             "COLLATE", 
                                                             "COLUMN", "CONSTRAINT", 
                                                             "CREATE", "CURRENT_CATALOG", 
                                                             "CURRENT_DATE", 
                                                             "CURRENT_ROLE", 
                                                             "CURRENT_TIME", 
                                                             "CURRENT_TIMESTAMP", 
                                                             "CURRENT_USER", 
                                                             "DEFAULT", 
                                                             "DEFERRABLE", 
                                                             "DESC", "DISTINCT", 
                                                             "DO", "ELSE", 
                                                             "EXCEPT", "FALSE_P", 
                                                             "FETCH", "FOR", 
                                                             "FOREIGN", 
                                                             "FROM", "GRANT", 
                                                             "GROUP_P", 
                                                             "HAVING", "IN_P", 
                                                             "INITIALLY", 
                                                             "INTERSECT", 
                                                             "INTO", "LATERAL_P", 
                                                             "LEADING", 
                                                             "LIMIT", "LOCALTIME", 
                                                             "LOCALTIMESTAMP", 
                                                             "NOT", "NULL_P", 
                                                             "OFFSET", "ON", 
                                                             "ONLY", "OR", 
                                                             "ORDER", "PLACING", 
                                                             "PRIMARY", 
                                                             "REFERENCES", 
                                                             "RETURNING", 
                                                             "SELECT", "SESSION_USER", 
                                                             "SOME", "SYMMETRIC", 
                                                             "TABLE", "THEN", 
                                                             "TO", "TRAILING", 
                                                             "TRUE_P", "UNION", 
                                                             "UNIQUE", "USER", 
                                                             "USING", "VARIADIC", 
                                                             "WHEN", "WHERE", 
                                                             "WINDOW", "WITH", 
                                                             "AUTHORIZATION", 
                                                             "BINARY", "COLLATION", 
                                                             "CONCURRENTLY", 
                                                             "CROSS", "CURRENT_SCHEMA", 
                                                             "FREEZE", "FULL", 
                                                             "ILIKE", "INNER_P", 
                                                             "IS", "ISNULL", 
                                                             "JOIN", "LEFT", 
                                                             "LIKE", "NATURAL", 
                                                             "NOTNULL", 
                                                             "OUTER_P", 
                                                             "OVER", "OVERLAPS", 
                                                             "RIGHT", "SIMILAR", 
                                                             "VERBOSE", 
                                                             "ABORT_P", 
                                                             "ABSOLUTE_P", 
                                                             "ACCESS", "ACTION", 
                                                             "ADD_P", "ADMIN", 
                                                             "AFTER", "AGGREGATE", 
                                                             "ALSO", "ALTER", 
                                                             "ALWAYS", "ASSERTION", 
                                                             "ASSIGNMENT", 
                                                             "AT", "ATTRIBUTE", 
                                                             "BACKWARD", 
                                                             "BEFORE", "BEGIN_P", 
                                                             "BY", "CACHE", 
                                                             "CALLED", "CASCADE", 
                                                             "CASCADED", 
                                                             "CATALOG", 
                                                             "CHAIN", "CHARACTERISTICS", 
                                                             "CHECKPOINT", 
                                                             "CLASS", "CLOSE", 
                                                             "CLUSTER", 
                                                             "COMMENT", 
                                                             "COMMENTS", 
                                                             "COMMIT", "COMMITTED", 
                                                             "CONFIGURATION", 
                                                             "CONNECTION", 
                                                             "CONSTRAINTS", 
                                                             "CONTENT_P", 
                                                             "CONTINUE_P", 
                                                             "CONVERSION_P", 
                                                             "COPY", "COST", 
                                                             "CSV", "CURSOR", 
                                                             "CYCLE", "DATA_P", 
                                                             "DATABASE", 
                                                             "DAY_P", "DEALLOCATE", 
                                                             "DECLARE", 
                                                             "DEFAULTS", 
                                                             "DEFERRED", 
                                                             "DEFINER", 
                                                             "DELETE_P", 
                                                             "DELIMITER", 
                                                             "DELIMITERS", 
                                                             "DICTIONARY", 
                                                             "DISABLE_P", 
                                                             "DISCARD", 
                                                             "DOCUMENT_P", 
                                                             "DOMAIN_P", 
                                                             "DOUBLE_P", 
                                                             "DROP", "EACH", 
                                                             "ENABLE_P", 
                                                             "ENCODING", 
                                                             "ENCRYPTED", 
                                                             "ENUM_P", "ESCAPE", 
                                                             "EVENT", "EXCLUDE", 
                                                             "EXCLUDING", 
                                                             "EXCLUSIVE", 
                                                             "EXECUTE", 
                                                             "EXPLAIN", 
                                                             "EXTENSION", 
                                                             "EXTERNAL", 
                                                             "FAMILY", "FIRST_P", 
                                                             "FOLLOWING", 
                                                             "FORCE", "FORWARD", 
                                                             "FUNCTION", 
                                                             "FUNCTIONS", 
                                                             "GLOBAL", "GRANTED", 
                                                             "HANDLER", 
                                                             "HEADER_P", 
                                                             "HOLD", "HOUR_P", 
                                                             "IDENTITY_P", 
                                                             "IF_P", "IMMEDIATE", 
                                                             "IMMUTABLE", 
                                                             "IMPLICIT_P", 
                                                             "INCLUDING", 
                                                             "INCREMENT", 
                                                             "INDEX", "INDEXES", 
                                                             "INHERIT", 
                                                             "INHERITS", 
                                                             "INLINE_P", 
                                                             "INSENSITIVE", 
                                                             "INSERT", "INSTEAD", 
                                                             "INVOKER", 
                                                             "ISOLATION", 
                                                             "KEY", "LABEL", 
                                                             "LANGUAGE", 
                                                             "LARGE_P", 
                                                             "LAST_P", "LEAKPROOF", 
                                                             "LEVEL", "LISTEN", 
                                                             "LOAD", "LOCAL", 
                                                             "LOCATION", 
                                                             "LOCK_P", "MAPPING", 
                                                             "MATCH", "MATERIALIZED", 
                                                             "MAXVALUE", 
                                                             "MINUTE_P", 
                                                             "MINVALUE", 
                                                             "MODE", "MONTH_P", 
                                                             "MOVE", "NAME_P", 
                                                             "NAMES", "NEXT", 
                                                             "NO", "NOTHING", 
                                                             "NOTIFY", "NOWAIT", 
                                                             "NULLS_P", 
                                                             "OBJECT_P", 
                                                             "OF", "OFF", 
                                                             "OIDS", "OPERATOR", 
                                                             "OPTION", "OPTIONS", 
                                                             "OWNED", "OWNER", 
                                                             "PARSER", "PARTIAL", 
                                                             "PARTITION", 
                                                             "PASSING", 
                                                             "PASSWORD", 
                                                             "PLANS", "PRECEDING", 
                                                             "PREPARE", 
                                                             "PREPARED", 
                                                             "PRESERVE", 
                                                             "PRIOR", "PRIVILEGES", 
                                                             "PROCEDURAL", 
                                                             "PROCEDURE", 
                                                             "PROGRAM", 
                                                             "QUOTE", "RANGE", 
                                                             "READ", "REASSIGN", 
                                                             "RECHECK", 
                                                             "RECURSIVE", 
                                                             "REF", "REFRESH", 
                                                             "REINDEX", 
                                                             "RELATIVE_P", 
                                                             "RELEASE", 
                                                             "RENAME", "REPEATABLE", 
                                                             "REPLACE", 
                                                             "REPLICA", 
                                                             "RESET", "RESTART", 
                                                             "RESTRICT", 
                                                             "RETURNS", 
                                                             "REVOKE", "ROLE", 
                                                             "ROLLBACK", 
                                                             "ROWS", "RULE", 
                                                             "SAVEPOINT", 
                                                             "SCHEMA", "SCROLL", 
                                                             "SEARCH", "SECOND_P", 
                                                             "SECURITY", 
                                                             "SEQUENCE", 
                                                             "SEQUENCES", 
                                                             "SERIALIZABLE", 
                                                             "SERVER", "SESSION", 
                                                             "SET", "SHARE", 
                                                             "SHOW", "SIMPLE", 
                                                             "SNAPSHOT", 
                                                             "STABLE", "STANDALONE_P", 
                                                             "START", "STATEMENT", 
                                                             "STATISTICS", 
                                                             "STDIN", "STDOUT", 
                                                             "STORAGE", 
                                                             "STRICT_P", 
                                                             "STRIP_P", 
                                                             "SYSID", "SYSTEM_P", 
                                                             "TABLES", "TABLESPACE", 
                                                             "TEMP", "TEMPLATE", 
                                                             "TEMPORARY", 
                                                             "TEXT_P", "TRANSACTION", 
                                                             "TRIGGER", 
                                                             "TRUNCATE", 
                                                             "TRUSTED", 
                                                             "TYPE_P", "TYPES_P", 
                                                             "UNBOUNDED", 
                                                             "UNCOMMITTED", 
                                                             "UNENCRYPTED", 
                                                             "UNKNOWN", 
                                                             "UNLISTEN", 
                                                             "UNLOGGED", 
                                                             "UNTIL", "UPDATE", 
                                                             "VACUUM", "VALID", 
                                                             "VALIDATE", 
                                                             "VALIDATOR", 
                                                             "VARYING", 
                                                             "VERSION_P", 
                                                             "VIEW", "VOLATILE", 
                                                             "WHITESPACE_P", 
                                                             "WITHOUT", 
                                                             "WORK", "WRAPPER", 
                                                             "WRITE", "XML_P", 
                                                             "YEAR_P", "YES_P", 
                                                             "ZONE", "BETWEEN", 
                                                             "BIGINT", "BIT", 
                                                             "BOOLEAN_P", 
                                                             "CHAR_P", "CHARACTER", 
                                                             "COALESCE", 
                                                             "DEC", "DECIMAL_P", 
                                                             "EXISTS", "EXTRACT", 
                                                             "FLOAT_P", 
                                                             "GREATEST", 
                                                             "INOUT", "INT_P", 
                                                             "INTEGER", 
                                                             "INTERVAL", 
                                                             "LEAST", "NATIONAL", 
                                                             "NCHAR", "NONE", 
                                                             "NULLIF", "NUMERIC", 
                                                             "OVERLAY", 
                                                             "POSITION", 
                                                             "PRECISION", 
                                                             "REAL", "ROW", 
                                                             "SETOF", "SMALLINT", 
                                                             "SUBSTRING", 
                                                             "TIME", "TIMESTAMP", 
                                                             "TREAT", "TRIM", 
                                                             "VALUES", "VARCHAR", 
                                                             "XMLATTRIBUTES", 
                                                             "XMLCONCAT", 
                                                             "XMLELEMENT", 
                                                             "XMLEXISTS", 
                                                             "XMLFOREST", 
                                                             "XMLPARSE", 
                                                             "XMLPI", "XMLROOT", 
                                                             "XMLSERIALIZE", 
                                                             "CALL", "CURRENT_P", 
                                                             "ATTACH", "DETACH", 
                                                             "EXPRESSION", 
                                                             "GENERATED", 
                                                             "LOGGED", "STORED", 
                                                             "INCLUDE", 
                                                             "ROUTINE", 
                                                             "TRANSFORM", 
                                                             "IMPORT_P", 
                                                             "POLICY", "METHOD", 
                                                             "REFERENCING", 
                                                             "NEW", "OLD", 
                                                             "VALUE_P", 
                                                             "SUBSCRIPTION", 
                                                             "PUBLICATION", 
                                                             "OUT_P", "END_P", 
                                                             "ROUTINES", 
                                                             "SCHEMAS", 
                                                             "PROCEDURES", 
                                                             "INPUT_P", 
                                                             "SUPPORT", 
                                                             "PARALLEL", 
                                                             "SQL_P", "DEPENDS", 
                                                             "OVERRIDING", 
                                                             "CONFLICT", 
                                                             "SKIP_P", "LOCKED", 
                                                             "TIES", "ROLLUP", 
                                                             "CUBE", "GROUPING", 
                                                             "SETS", "TABLESAMPLE", 
                                                             "ORDINALITY", 
                                                             "XMLTABLE", 
                                                             "COLUMNS", 
                                                             "XMLNAMESPACES", 
                                                             "ROWTYPE", 
                                                             "NORMALIZED", 
                                                             "WITHIN", "FILTER", 
                                                             "GROUPS", "OTHERS", 
                                                             "NFC", "NFD", 
                                                             "NFKC", "NFKD", 
                                                             "UESCAPE", 
                                                             "VIEWS", "NORMALIZE", 
                                                             "DUMP", "PRINT_STRICT_PARAMS", 
                                                             "VARIABLE_CONFLICT", 
                                                             "ERROR", "USE_VARIABLE", 
                                                             "USE_COLUMN", 
                                                             "ALIAS", "CONSTANT", 
                                                             "PERFORM", 
                                                             "GET", "DIAGNOSTICS", 
                                                             "STACKED", 
                                                             "ELSIF", "WHILE", 
                                                             "REVERSE", 
                                                             "FOREACH", 
                                                             "SLICE", "EXIT", 
                                                             "RETURN", "QUERY", 
                                                             "RAISE", "SQLSTATE", 
                                                             "DEBUG", "LOG", 
                                                             "INFO", "NOTICE", 
                                                             "WARNING", 
                                                             "EXCEPTION", 
                                                             "ASSERT", "LOOP", 
                                                             "OPEN", "Identifier", 
                                                             "QuotedIdentifier", 
                                                             "UnterminatedQuotedIdentifier", 
                                                             "InvalidQuotedIdentifier", 
                                                             "InvalidUnterminatedQuotedIdentifier", 
                                                             "UnicodeQuotedIdentifier", 
                                                             "UnterminatedUnicodeQuotedIdentifier", 
                                                             "InvalidUnicodeQuotedIdentifier", 
                                                             "InvalidUnterminatedUnicodeQuotedIdentifier", 
                                                             "StringConstant", 
                                                             "UnterminatedStringConstant", 
                                                             "UnicodeEscapeStringConstant", 
                                                             "UnterminatedUnicodeEscapeStringConstant", 
                                                             "BeginDollarStringConstant", 
                                                             "BinaryStringConstant", 
                                                             "UnterminatedBinaryStringConstant", 
                                                             "InvalidBinaryStringConstant", 
                                                             "InvalidUnterminatedBinaryStringConstant", 
                                                             "HexadecimalStringConstant", 
                                                             "UnterminatedHexadecimalStringConstant", 
                                                             "InvalidHexadecimalStringConstant", 
                                                             "InvalidUnterminatedHexadecimalStringConstant", 
                                                             "Integral", 
                                                             "NumericFail", 
                                                             "Numeric", 
                                                             "PLSQLVARIABLENAME", 
                                                             "PLSQLIDENTIFIER", 
                                                             "Whitespace", 
                                                             "Newline", 
                                                             "LineComment", 
                                                             "BlockComment", 
                                                             "UnterminatedBlockComment", 
                                                             "MetaCommand", 
                                                             "EndMetaCommand", 
                                                             "ErrorCharacter", 
                                                             "EscapeStringConstant", 
                                                             "UnterminatedEscapeStringConstant", 
                                                             "InvalidEscapeStringConstant", 
                                                             "InvalidUnterminatedEscapeStringConstant", 
                                                             "AfterEscapeStringConstantMode_NotContinued", 
                                                             "AfterEscapeStringConstantWithNewlineMode_NotContinued", 
                                                             "DollarText", 
                                                             "EndDollarStringConstant", 
                                                             "AfterEscapeStringConstantWithNewlineMode_Continued" ];
	// tslint:disable:no-trailing-whitespace
	public static readonly ruleNames: string[] = [
		"program", "plsqlroot", "stmtblock", "stmtmulti", "stmt", "plsqlconsolecommand", 
		"callstmt", "createrolestmt", "opt_with", "optrolelist", "alteroptrolelist", 
		"alteroptroleelem", "createoptroleelem", "createuserstmt", "alterrolestmt", 
		"opt_in_database", "alterrolesetstmt", "droprolestmt", "creategroupstmt", 
		"altergroupstmt", "add_drop", "createschemastmt", "optschemaname", "optschemaeltlist", 
		"schema_stmt", "variablesetstmt", "set_rest", "generic_set", "set_rest_more", 
		"var_name", "var_list", "var_value", "iso_level", "opt_boolean_or_string", 
		"zone_value", "opt_encoding", "nonreservedword_or_sconst", "variableresetstmt", 
		"reset_rest", "generic_reset", "setresetclause", "functionsetresetclause", 
		"variableshowstmt", "constraintssetstmt", "constraints_set_list", "constraints_set_mode", 
		"checkpointstmt", "discardstmt", "altertablestmt", "alter_table_cmds", 
		"partition_cmd", "index_partition_cmd", "alter_table_cmd", "alter_column_default", 
		"opt_drop_behavior", "opt_collate_clause", "alter_using", "replica_identity", 
		"reloptions", "opt_reloptions", "reloption_list", "reloption_elem", "alter_identity_column_option_list", 
		"alter_identity_column_option", "partitionboundspec", "hash_partbound_elem", 
		"hash_partbound", "altercompositetypestmt", "alter_type_cmds", "alter_type_cmd", 
		"closeportalstmt", "copystmt", "copy_from", "opt_program", "copy_file_name", 
		"copy_options", "copy_opt_list", "copy_opt_item", "opt_binary", "copy_delimiter", 
		"opt_using", "copy_generic_opt_list", "copy_generic_opt_elem", "copy_generic_opt_arg", 
		"copy_generic_opt_arg_list", "copy_generic_opt_arg_list_item", "createstmt", 
		"opttemp", "opttableelementlist", "opttypedtableelementlist", "tableelementlist", 
		"typedtableelementlist", "tableelement", "typedtableelement", "columnDef", 
		"columnOptions", "colquallist", "colconstraint", "colconstraintelem", 
		"generated_when", "constraintattr", "tablelikeclause", "tablelikeoptionlist", 
		"tablelikeoption", "tableconstraint", "constraintelem", "opt_no_inherit", 
		"opt_column_list", "columnlist", "columnElem", "opt_c_include", "key_match", 
		"exclusionconstraintlist", "exclusionconstraintelem", "exclusionwhereclause", 
		"key_actions", "key_update", "key_delete", "key_action", "optinherit", 
		"optpartitionspec", "partitionspec", "part_params", "part_elem", "table_access_method_clause", 
		"optwith", "oncommitoption", "opttablespace", "optconstablespace", "existingindex", 
		"createstatsstmt", "alterstatsstmt", "createasstmt", "create_as_target", 
		"opt_with_data", "creatematviewstmt", "create_mv_target", "optnolog", 
		"refreshmatviewstmt", "createseqstmt", "alterseqstmt", "optseqoptlist", 
		"optparenthesizedseqoptlist", "seqoptlist", "seqoptelem", "opt_by", "numericonly", 
		"numericonly_list", "createplangstmt", "opt_trusted", "handler_name", 
		"opt_inline_handler", "validator_clause", "opt_validator", "opt_procedural", 
		"createtablespacestmt", "opttablespaceowner", "droptablespacestmt", "createextensionstmt", 
		"create_extension_opt_list", "create_extension_opt_item", "alterextensionstmt", 
		"alter_extension_opt_list", "alter_extension_opt_item", "alterextensioncontentsstmt", 
		"createfdwstmt", "fdw_option", "fdw_options", "opt_fdw_options", "alterfdwstmt", 
		"create_generic_options", "generic_option_list", "alter_generic_options", 
		"alter_generic_option_list", "alter_generic_option_elem", "generic_option_elem", 
		"generic_option_name", "generic_option_arg", "createforeignserverstmt", 
		"opt_type", "foreign_server_version", "opt_foreign_server_version", "alterforeignserverstmt", 
		"createforeigntablestmt", "importforeignschemastmt", "import_qualification_type", 
		"import_qualification", "createusermappingstmt", "auth_ident", "dropusermappingstmt", 
		"alterusermappingstmt", "createpolicystmt", "alterpolicystmt", "rowsecurityoptionalexpr", 
		"rowsecurityoptionalwithcheck", "rowsecuritydefaulttorole", "rowsecurityoptionaltorole", 
		"rowsecuritydefaultpermissive", "rowsecuritydefaultforcmd", "row_security_cmd", 
		"createamstmt", "am_type", "createtrigstmt", "triggeractiontime", "triggerevents", 
		"triggeroneevent", "triggerreferencing", "triggertransitions", "triggertransition", 
		"transitionoldornew", "transitionrowortable", "transitionrelname", "triggerforspec", 
		"triggerforopteach", "triggerfortype", "triggerwhen", "function_or_procedure", 
		"triggerfuncargs", "triggerfuncarg", "optconstrfromtable", "constraintattributespec", 
		"constraintattributeElem", "createeventtrigstmt", "event_trigger_when_list", 
		"event_trigger_when_item", "event_trigger_value_list", "altereventtrigstmt", 
		"enable_trigger", "createassertionstmt", "definestmt", "definition", "def_list", 
		"def_elem", "def_arg", "old_aggr_definition", "old_aggr_list", "old_aggr_elem", 
		"opt_enum_val_list", "enum_val_list", "alterenumstmt", "opt_if_not_exists", 
		"createopclassstmt", "opclass_item_list", "opclass_item", "opt_default", 
		"opt_opfamily", "opclass_purpose", "opt_recheck", "createopfamilystmt", 
		"alteropfamilystmt", "opclass_drop_list", "opclass_drop", "dropopclassstmt", 
		"dropopfamilystmt", "dropownedstmt", "reassignownedstmt", "dropstmt", 
		"object_type_any_name", "object_type_name", "drop_type_name", "object_type_name_on_any_name", 
		"any_name_list", "any_name", "attrs", "type_name_list", "truncatestmt", 
		"opt_restart_seqs", "commentstmt", "comment_text", "seclabelstmt", "opt_provider", 
		"security_label", "fetchstmt", "fetch_args", "from_in", "opt_from_in", 
		"grantstmt", "revokestmt", "privileges", "privilege_list", "privilege", 
		"privilege_target", "grantee_list", "grantee", "opt_grant_grant_option", 
		"grantrolestmt", "revokerolestmt", "opt_grant_admin_option", "opt_granted_by", 
		"alterdefaultprivilegesstmt", "defacloptionlist", "defacloption", "defaclaction", 
		"defacl_privilege_target", "indexstmt", "opt_unique", "opt_concurrently", 
		"opt_index_name", "access_method_clause", "index_params", "index_elem_options", 
		"index_elem", "opt_include", "index_including_params", "opt_collate", 
		"opt_class", "opt_asc_desc", "opt_nulls_order", "createfunctionstmt", 
		"opt_or_replace", "func_args", "func_args_list", "function_with_argtypes_list", 
		"function_with_argtypes", "func_args_with_defaults", "func_args_with_defaults_list", 
		"func_arg", "arg_class", "param_name", "func_return", "func_type", "func_arg_with_default", 
		"aggr_arg", "aggr_args", "aggr_args_list", "aggregate_with_argtypes", 
		"aggregate_with_argtypes_list", "createfunc_opt_list", "common_func_opt_item", 
		"createfunc_opt_item", "func_as", "transform_type_list", "opt_definition", 
		"table_func_column", "table_func_column_list", "alterfunctionstmt", "alterfunc_opt_list", 
		"opt_restrict", "removefuncstmt", "removeaggrstmt", "removeoperstmt", 
		"oper_argtypes", "any_operator", "operator_with_argtypes_list", "operator_with_argtypes", 
		"dostmt", "dostmt_opt_list", "dostmt_opt_item", "createcaststmt", "cast_context", 
		"dropcaststmt", "opt_if_exists", "createtransformstmt", "transform_element_list", 
		"droptransformstmt", "reindexstmt", "reindex_target_type", "reindex_target_multitable", 
		"reindex_option_list", "reindex_option_elem", "altertblspcstmt", "renamestmt", 
		"opt_column", "opt_set_data", "alterobjectdependsstmt", "opt_no", "alterobjectschemastmt", 
		"alteroperatorstmt", "operator_def_list", "operator_def_elem", "operator_def_arg", 
		"altertypestmt", "alterownerstmt", "createpublicationstmt", "opt_publication_for_tables", 
		"publication_for_tables", "alterpublicationstmt", "createsubscriptionstmt", 
		"publication_name_list", "publication_name_item", "altersubscriptionstmt", 
		"dropsubscriptionstmt", "rulestmt", "ruleactionlist", "ruleactionmulti", 
		"ruleactionstmt", "ruleactionstmtOrEmpty", "event", "opt_instead", "notifystmt", 
		"notify_payload", "listenstmt", "unlistenstmt", "transactionstmt", "opt_transaction", 
		"transaction_mode_item", "transaction_mode_list", "transaction_mode_list_or_empty", 
		"opt_transaction_chain", "viewstmt", "opt_check_option", "loadstmt", "createdbstmt", 
		"createdb_opt_list", "createdb_opt_items", "createdb_opt_item", "createdb_opt_name", 
		"opt_equal", "alterdatabasestmt", "alterdatabasesetstmt", "dropdbstmt", 
		"drop_option_list", "drop_option", "altercollationstmt", "altersystemstmt", 
		"createdomainstmt", "alterdomainstmt", "opt_as", "altertsdictionarystmt", 
		"altertsconfigurationstmt", "any_with", "createconversionstmt", "clusterstmt", 
		"cluster_index_specification", "vacuumstmt", "analyzestmt", "vac_analyze_option_list", 
		"analyze_keyword", "vac_analyze_option_elem", "vac_analyze_option_name", 
		"vac_analyze_option_arg", "opt_analyze", "opt_verbose", "opt_full", "opt_freeze", 
		"opt_name_list", "vacuum_relation", "vacuum_relation_list", "opt_vacuum_relation_list", 
		"explainstmt", "explainablestmt", "explain_option_list", "explain_option_elem", 
		"explain_option_name", "explain_option_arg", "preparestmt", "prep_type_clause", 
		"preparablestmt", "executestmt", "execute_param_clause", "deallocatestmt", 
		"insertstmt", "insert_target", "insert_rest", "override_kind", "insert_column_list", 
		"insert_column_item", "opt_on_conflict", "opt_conf_expr", "returning_clause", 
		"deletestmt", "using_clause", "lockstmt", "opt_lock", "lock_type", "opt_nowait", 
		"opt_nowait_or_skip", "updatestmt", "set_clause_list", "set_clause", "set_target", 
		"set_target_list", "declarecursorstmt", "cursor_name", "cursor_options", 
		"opt_hold", "selectstmt", "select_with_parens", "select_no_parens", "select_clause", 
		"simple_select", "set_operator", "set_operator_with_all_or_distinct", 
		"with_clause", "cte_list", "common_table_expr", "opt_materialized", "opt_with_clause", 
		"into_clause", "opt_strict", "opttempTableName", "opt_table", "all_or_distinct", 
		"distinct_clause", "opt_all_clause", "opt_sort_clause", "sort_clause", 
		"sortby_list", "sortby", "select_limit", "opt_select_limit", "limit_clause", 
		"offset_clause", "select_limit_value", "select_offset_value", "select_fetch_first_value", 
		"i_or_f_const", "row_or_rows", "first_or_next", "group_clause", "group_by_list", 
		"group_by_item", "empty_grouping_set", "rollup_clause", "cube_clause", 
		"grouping_sets_clause", "having_clause", "for_locking_clause", "opt_for_locking_clause", 
		"for_locking_items", "for_locking_item", "for_locking_strength", "locked_rels_list", 
		"values_clause", "from_clause", "from_list", "table_ref", "alias_clause", 
		"opt_alias_clause", "func_alias_clause", "join_type", "join_qual", "relation_expr", 
		"relation_expr_list", "relation_expr_opt_alias", "tablesample_clause", 
		"opt_repeatable_clause", "func_table", "rowsfrom_item", "rowsfrom_list", 
		"opt_col_def_list", "opt_ordinality", "where_clause", "where_or_current_clause", 
		"opttablefuncelementlist", "tablefuncelementlist", "tablefuncelement", 
		"xmltable", "xmltable_column_list", "xmltable_column_el", "xmltable_column_option_list", 
		"xmltable_column_option_el", "xml_namespace_list", "xml_namespace_el", 
		"typename", "opt_array_bounds", "simpletypename", "consttypename", "generictype", 
		"opt_type_modifiers", "numeric", "opt_float", "bit", "constbit", "bitwithlength", 
		"bitwithoutlength", "character", "constcharacter", "character_c", "opt_varying", 
		"constdatetime", "constinterval", "opt_timezone", "opt_interval", "interval_second", 
		"opt_escape", "a_expr", "a_expr_qual", "a_expr_lessless", "a_expr_or", 
		"a_expr_and", "a_expr_in", "a_expr_unary_not", "a_expr_isnull", "a_expr_is_not", 
		"a_expr_compare", "a_expr_like", "a_expr_qual_op", "a_expr_unary_qualop", 
		"a_expr_add", "a_expr_mul", "a_expr_caret", "a_expr_unary_sign", "a_expr_at_time_zone", 
		"a_expr_collate", "a_expr_typecast", "b_expr", "c_expr", "plsqlvariablename", 
		"func_application", "func_expr", "func_expr_windowless", "func_expr_common_subexpr", 
		"xml_root_version", "opt_xml_root_standalone", "xml_attributes", "xml_attribute_list", 
		"xml_attribute_el", "document_or_content", "xml_whitespace_option", "xmlexists_argument", 
		"xml_passing_mech", "within_group_clause", "filter_clause", "window_clause", 
		"window_definition_list", "window_definition", "over_clause", "window_specification", 
		"opt_existing_window_name", "opt_partition_clause", "opt_frame_clause", 
		"frame_extent", "frame_bound", "opt_window_exclusion_clause", "row", "explicit_row", 
		"implicit_row", "sub_type", "all_op", "mathop", "qual_op", "qual_all_op", 
		"subquery_Op", "expr_list", "func_arg_list", "func_arg_expr", "type_list", 
		"array_expr", "array_expr_list", "extract_list", "extract_arg", "unicode_normal_form", 
		"overlay_list", "position_list", "substr_list", "trim_list", "in_expr", 
		"case_expr", "when_clause_list", "when_clause", "case_default", "case_arg", 
		"columnref", "indirection_el", "opt_slice_bound", "indirection", "opt_indirection", 
		"opt_target_list", "target_list", "target_el", "qualified_name_list", 
		"qualified_name", "name_list", "name", "attr_name", "file_name", "func_name", 
		"aexprconst", "xconst", "bconst", "fconst", "iconst", "sconst", "anysconst", 
		"opt_uescape", "signediconst", "roleid", "rolespec", "role_list", "colid", 
		"type_function_name", "nonreservedword", "collabel", "identifier", "plsqlidentifier", 
		"unreserved_keyword", "col_name_keyword", "type_func_name_keyword", "reserved_keyword", 
		"pl_function", "comp_options", "comp_option", "sharp", "option_value", 
		"opt_semi", "pl_block", "decl_sect", "decl_start", "decl_stmts", "label_decl", 
		"decl_stmt", "decl_statement", "opt_scrollable", "decl_cursor_query", 
		"decl_cursor_args", "decl_cursor_arglist", "decl_cursor_arg", "decl_is_for", 
		"decl_aliasitem", "decl_varname", "decl_const", "decl_datatype", "decl_collate", 
		"decl_notnull", "decl_defval", "decl_defkey", "assign_operator", "proc_sect", 
		"proc_stmt", "stmt_perform", "stmt_call", "opt_expr_list", "stmt_assign", 
		"stmt_getdiag", "getdiag_area_opt", "getdiag_list", "getdiag_list_item", 
		"getdiag_item", "getdiag_target", "assign_var", "stmt_if", "stmt_elsifs", 
		"stmt_else", "stmt_case", "opt_expr_until_when", "case_when_list", "case_when", 
		"opt_case_else", "stmt_loop", "stmt_while", "stmt_for", "for_control", 
		"opt_for_using_expression", "opt_cursor_parameters", "opt_reverse", "opt_by_expression", 
		"for_variable", "stmt_foreach_a", "foreach_slice", "stmt_exit", "exit_type", 
		"stmt_return", "opt_return_result", "stmt_raise", "opt_stmt_raise_level", 
		"opt_raise_list", "opt_raise_using", "opt_raise_using_elem", "opt_raise_using_elem_list", 
		"stmt_assert", "opt_stmt_assert_message", "loop_body", "stmt_execsql", 
		"stmt_dynexecute", "opt_execute_using", "opt_execute_using_list", "opt_execute_into", 
		"stmt_open", "opt_open_bound_list_item", "opt_open_bound_list", "opt_open_using", 
		"opt_scroll_option", "opt_scroll_option_no", "stmt_fetch", "into_target", 
		"opt_cursor_from", "opt_fetch_direction", "stmt_move", "stmt_close", "stmt_null", 
		"stmt_commit", "stmt_rollback", "plsql_opt_transaction_chain", "stmt_set", 
		"cursor_variable", "exception_sect", "proc_exceptions", "proc_exception", 
		"proc_conditions", "proc_condition", "opt_block_label", "opt_loop_label", 
		"opt_label", "opt_exitcond", "any_identifier", "plsql_unreserved_keyword", 
		"sql_expression", "expr_until_then", "expr_until_semi", "expr_until_rightbracket", 
		"expr_until_loop", "make_execsql_stmt", "opt_returning_clause_into",
	];
	public get grammarFileName(): string { return "PostgreSQLParser.g4"; }
	public get literalNames(): (string | null)[] { return PostgreSQLParser.literalNames; }
	public get symbolicNames(): (string | null)[] { return PostgreSQLParser.symbolicNames; }
	public get ruleNames(): string[] { return PostgreSQLParser.ruleNames; }
	public get serializedATN(): number[] { return PostgreSQLParser._serializedATN; }

	protected createFailedPredicateException(predicate?: string, message?: string): FailedPredicateException {
		return new FailedPredicateException(this, predicate, message);
	}



	constructor(input: TokenStream) {
		super(input);
		this._interp = new ParserATNSimulator(this, PostgreSQLParser._ATN, PostgreSQLParser.DecisionsToDFA, new PredictionContextCache());
	}
	// @RuleVersion(0)
	public program(): ProgramContext {
		let localctx: ProgramContext = new ProgramContext(this, this._ctx, this.state);
		this.enterRule(localctx, 0, PostgreSQLParser.RULE_program);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 1608;
			this.stmtblock();
			this.state = 1609;
			this.match(PostgreSQLParser.EOF);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public plsqlroot(): PlsqlrootContext {
		let localctx: PlsqlrootContext = new PlsqlrootContext(this, this._ctx, this.state);
		this.enterRule(localctx, 2, PostgreSQLParser.RULE_plsqlroot);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 1611;
			this.pl_function();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public stmtblock(): StmtblockContext {
		let localctx: StmtblockContext = new StmtblockContext(this, this._ctx, this.state);
		this.enterRule(localctx, 4, PostgreSQLParser.RULE_stmtblock);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 1613;
			this.stmtmulti();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public stmtmulti(): StmtmultiContext {
		let localctx: StmtmultiContext = new StmtmultiContext(this, this._ctx, this.state);
		this.enterRule(localctx, 6, PostgreSQLParser.RULE_stmtmulti);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 1621;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===2 || _la===31 || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 570441729) !== 0) || ((((_la - 65)) & ~0x1F) === 0 && ((1 << (_la - 65)) & 142606337) !== 0) || _la===105 || _la===129 || ((((_la - 138)) & ~0x1F) === 0 && ((1 << (_la - 138)) & 2159673601) !== 0) || ((((_la - 177)) & ~0x1F) === 0 && ((1 << (_la - 177)) & 100680739) !== 0) || ((((_la - 232)) & ~0x1F) === 0 && ((1 << (_la - 232)) & 1090557953) !== 0) || ((((_la - 281)) & ~0x1F) === 0 && ((1 << (_la - 281)) & 679839745) !== 0) || ((((_la - 313)) & ~0x1F) === 0 && ((1 << (_la - 313)) & 272417) !== 0) || ((((_la - 349)) & ~0x1F) === 0 && ((1 << (_la - 349)) & 6401) !== 0) || ((((_la - 413)) & ~0x1F) === 0 && ((1 << (_la - 413)) & 4196353) !== 0) || _la===445 || _la===544) {
				{
				{
				this.state = 1615;
				this.stmt();
				this.state = 1617;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===7) {
					{
					this.state = 1616;
					this.match(PostgreSQLParser.SEMI);
					}
				}

				}
				}
				this.state = 1623;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public stmt(): StmtContext {
		let localctx: StmtContext = new StmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 8, PostgreSQLParser.RULE_stmt);
		try {
			this.state = 1748;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 2, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 1624;
				this.altereventtrigstmt();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 1625;
				this.altercollationstmt();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 1626;
				this.alterdatabasestmt();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 1627;
				this.alterdatabasesetstmt();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 1628;
				this.alterdefaultprivilegesstmt();
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 1629;
				this.alterdomainstmt();
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 1630;
				this.alterenumstmt();
				}
				break;
			case 8:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 1631;
				this.alterextensionstmt();
				}
				break;
			case 9:
				this.enterOuterAlt(localctx, 9);
				{
				this.state = 1632;
				this.alterextensioncontentsstmt();
				}
				break;
			case 10:
				this.enterOuterAlt(localctx, 10);
				{
				this.state = 1633;
				this.alterfdwstmt();
				}
				break;
			case 11:
				this.enterOuterAlt(localctx, 11);
				{
				this.state = 1634;
				this.alterforeignserverstmt();
				}
				break;
			case 12:
				this.enterOuterAlt(localctx, 12);
				{
				this.state = 1635;
				this.alterfunctionstmt();
				}
				break;
			case 13:
				this.enterOuterAlt(localctx, 13);
				{
				this.state = 1636;
				this.altergroupstmt();
				}
				break;
			case 14:
				this.enterOuterAlt(localctx, 14);
				{
				this.state = 1637;
				this.alterobjectdependsstmt();
				}
				break;
			case 15:
				this.enterOuterAlt(localctx, 15);
				{
				this.state = 1638;
				this.alterobjectschemastmt();
				}
				break;
			case 16:
				this.enterOuterAlt(localctx, 16);
				{
				this.state = 1639;
				this.alterownerstmt();
				}
				break;
			case 17:
				this.enterOuterAlt(localctx, 17);
				{
				this.state = 1640;
				this.alteroperatorstmt();
				}
				break;
			case 18:
				this.enterOuterAlt(localctx, 18);
				{
				this.state = 1641;
				this.altertypestmt();
				}
				break;
			case 19:
				this.enterOuterAlt(localctx, 19);
				{
				this.state = 1642;
				this.alterpolicystmt();
				}
				break;
			case 20:
				this.enterOuterAlt(localctx, 20);
				{
				this.state = 1643;
				this.alterseqstmt();
				}
				break;
			case 21:
				this.enterOuterAlt(localctx, 21);
				{
				this.state = 1644;
				this.altersystemstmt();
				}
				break;
			case 22:
				this.enterOuterAlt(localctx, 22);
				{
				this.state = 1645;
				this.altertablestmt();
				}
				break;
			case 23:
				this.enterOuterAlt(localctx, 23);
				{
				this.state = 1646;
				this.altertblspcstmt();
				}
				break;
			case 24:
				this.enterOuterAlt(localctx, 24);
				{
				this.state = 1647;
				this.altercompositetypestmt();
				}
				break;
			case 25:
				this.enterOuterAlt(localctx, 25);
				{
				this.state = 1648;
				this.alterpublicationstmt();
				}
				break;
			case 26:
				this.enterOuterAlt(localctx, 26);
				{
				this.state = 1649;
				this.alterrolesetstmt();
				}
				break;
			case 27:
				this.enterOuterAlt(localctx, 27);
				{
				this.state = 1650;
				this.alterrolestmt();
				}
				break;
			case 28:
				this.enterOuterAlt(localctx, 28);
				{
				this.state = 1651;
				this.altersubscriptionstmt();
				}
				break;
			case 29:
				this.enterOuterAlt(localctx, 29);
				{
				this.state = 1652;
				this.alterstatsstmt();
				}
				break;
			case 30:
				this.enterOuterAlt(localctx, 30);
				{
				this.state = 1653;
				this.altertsconfigurationstmt();
				}
				break;
			case 31:
				this.enterOuterAlt(localctx, 31);
				{
				this.state = 1654;
				this.altertsdictionarystmt();
				}
				break;
			case 32:
				this.enterOuterAlt(localctx, 32);
				{
				this.state = 1655;
				this.alterusermappingstmt();
				}
				break;
			case 33:
				this.enterOuterAlt(localctx, 33);
				{
				this.state = 1656;
				this.analyzestmt();
				}
				break;
			case 34:
				this.enterOuterAlt(localctx, 34);
				{
				this.state = 1657;
				this.callstmt();
				}
				break;
			case 35:
				this.enterOuterAlt(localctx, 35);
				{
				this.state = 1658;
				this.checkpointstmt();
				}
				break;
			case 36:
				this.enterOuterAlt(localctx, 36);
				{
				this.state = 1659;
				this.closeportalstmt();
				}
				break;
			case 37:
				this.enterOuterAlt(localctx, 37);
				{
				this.state = 1660;
				this.clusterstmt();
				}
				break;
			case 38:
				this.enterOuterAlt(localctx, 38);
				{
				this.state = 1661;
				this.commentstmt();
				}
				break;
			case 39:
				this.enterOuterAlt(localctx, 39);
				{
				this.state = 1662;
				this.constraintssetstmt();
				}
				break;
			case 40:
				this.enterOuterAlt(localctx, 40);
				{
				this.state = 1663;
				this.copystmt();
				}
				break;
			case 41:
				this.enterOuterAlt(localctx, 41);
				{
				this.state = 1664;
				this.createamstmt();
				}
				break;
			case 42:
				this.enterOuterAlt(localctx, 42);
				{
				this.state = 1665;
				this.createasstmt();
				}
				break;
			case 43:
				this.enterOuterAlt(localctx, 43);
				{
				this.state = 1666;
				this.createassertionstmt();
				}
				break;
			case 44:
				this.enterOuterAlt(localctx, 44);
				{
				this.state = 1667;
				this.createcaststmt();
				}
				break;
			case 45:
				this.enterOuterAlt(localctx, 45);
				{
				this.state = 1668;
				this.createconversionstmt();
				}
				break;
			case 46:
				this.enterOuterAlt(localctx, 46);
				{
				this.state = 1669;
				this.createdomainstmt();
				}
				break;
			case 47:
				this.enterOuterAlt(localctx, 47);
				{
				this.state = 1670;
				this.createextensionstmt();
				}
				break;
			case 48:
				this.enterOuterAlt(localctx, 48);
				{
				this.state = 1671;
				this.createfdwstmt();
				}
				break;
			case 49:
				this.enterOuterAlt(localctx, 49);
				{
				this.state = 1672;
				this.createforeignserverstmt();
				}
				break;
			case 50:
				this.enterOuterAlt(localctx, 50);
				{
				this.state = 1673;
				this.createforeigntablestmt();
				}
				break;
			case 51:
				this.enterOuterAlt(localctx, 51);
				{
				this.state = 1674;
				this.createfunctionstmt();
				}
				break;
			case 52:
				this.enterOuterAlt(localctx, 52);
				{
				this.state = 1675;
				this.creategroupstmt();
				}
				break;
			case 53:
				this.enterOuterAlt(localctx, 53);
				{
				this.state = 1676;
				this.creatematviewstmt();
				}
				break;
			case 54:
				this.enterOuterAlt(localctx, 54);
				{
				this.state = 1677;
				this.createopclassstmt();
				}
				break;
			case 55:
				this.enterOuterAlt(localctx, 55);
				{
				this.state = 1678;
				this.createopfamilystmt();
				}
				break;
			case 56:
				this.enterOuterAlt(localctx, 56);
				{
				this.state = 1679;
				this.createpublicationstmt();
				}
				break;
			case 57:
				this.enterOuterAlt(localctx, 57);
				{
				this.state = 1680;
				this.alteropfamilystmt();
				}
				break;
			case 58:
				this.enterOuterAlt(localctx, 58);
				{
				this.state = 1681;
				this.createpolicystmt();
				}
				break;
			case 59:
				this.enterOuterAlt(localctx, 59);
				{
				this.state = 1682;
				this.createplangstmt();
				}
				break;
			case 60:
				this.enterOuterAlt(localctx, 60);
				{
				this.state = 1683;
				this.createschemastmt();
				}
				break;
			case 61:
				this.enterOuterAlt(localctx, 61);
				{
				this.state = 1684;
				this.createseqstmt();
				}
				break;
			case 62:
				this.enterOuterAlt(localctx, 62);
				{
				this.state = 1685;
				this.createstmt();
				}
				break;
			case 63:
				this.enterOuterAlt(localctx, 63);
				{
				this.state = 1686;
				this.createsubscriptionstmt();
				}
				break;
			case 64:
				this.enterOuterAlt(localctx, 64);
				{
				this.state = 1687;
				this.createstatsstmt();
				}
				break;
			case 65:
				this.enterOuterAlt(localctx, 65);
				{
				this.state = 1688;
				this.createtablespacestmt();
				}
				break;
			case 66:
				this.enterOuterAlt(localctx, 66);
				{
				this.state = 1689;
				this.createtransformstmt();
				}
				break;
			case 67:
				this.enterOuterAlt(localctx, 67);
				{
				this.state = 1690;
				this.createtrigstmt();
				}
				break;
			case 68:
				this.enterOuterAlt(localctx, 68);
				{
				this.state = 1691;
				this.createeventtrigstmt();
				}
				break;
			case 69:
				this.enterOuterAlt(localctx, 69);
				{
				this.state = 1692;
				this.createrolestmt();
				}
				break;
			case 70:
				this.enterOuterAlt(localctx, 70);
				{
				this.state = 1693;
				this.createuserstmt();
				}
				break;
			case 71:
				this.enterOuterAlt(localctx, 71);
				{
				this.state = 1694;
				this.createusermappingstmt();
				}
				break;
			case 72:
				this.enterOuterAlt(localctx, 72);
				{
				this.state = 1695;
				this.createdbstmt();
				}
				break;
			case 73:
				this.enterOuterAlt(localctx, 73);
				{
				this.state = 1696;
				this.deallocatestmt();
				}
				break;
			case 74:
				this.enterOuterAlt(localctx, 74);
				{
				this.state = 1697;
				this.declarecursorstmt();
				}
				break;
			case 75:
				this.enterOuterAlt(localctx, 75);
				{
				this.state = 1698;
				this.definestmt();
				}
				break;
			case 76:
				this.enterOuterAlt(localctx, 76);
				{
				this.state = 1699;
				this.deletestmt();
				}
				break;
			case 77:
				this.enterOuterAlt(localctx, 77);
				{
				this.state = 1700;
				this.discardstmt();
				}
				break;
			case 78:
				this.enterOuterAlt(localctx, 78);
				{
				this.state = 1701;
				this.dostmt();
				}
				break;
			case 79:
				this.enterOuterAlt(localctx, 79);
				{
				this.state = 1702;
				this.dropcaststmt();
				}
				break;
			case 80:
				this.enterOuterAlt(localctx, 80);
				{
				this.state = 1703;
				this.dropopclassstmt();
				}
				break;
			case 81:
				this.enterOuterAlt(localctx, 81);
				{
				this.state = 1704;
				this.dropopfamilystmt();
				}
				break;
			case 82:
				this.enterOuterAlt(localctx, 82);
				{
				this.state = 1705;
				this.dropownedstmt();
				}
				break;
			case 83:
				this.enterOuterAlt(localctx, 83);
				{
				this.state = 1706;
				this.dropstmt();
				}
				break;
			case 84:
				this.enterOuterAlt(localctx, 84);
				{
				this.state = 1707;
				this.dropsubscriptionstmt();
				}
				break;
			case 85:
				this.enterOuterAlt(localctx, 85);
				{
				this.state = 1708;
				this.droptablespacestmt();
				}
				break;
			case 86:
				this.enterOuterAlt(localctx, 86);
				{
				this.state = 1709;
				this.droptransformstmt();
				}
				break;
			case 87:
				this.enterOuterAlt(localctx, 87);
				{
				this.state = 1710;
				this.droprolestmt();
				}
				break;
			case 88:
				this.enterOuterAlt(localctx, 88);
				{
				this.state = 1711;
				this.dropusermappingstmt();
				}
				break;
			case 89:
				this.enterOuterAlt(localctx, 89);
				{
				this.state = 1712;
				this.dropdbstmt();
				}
				break;
			case 90:
				this.enterOuterAlt(localctx, 90);
				{
				this.state = 1713;
				this.executestmt();
				}
				break;
			case 91:
				this.enterOuterAlt(localctx, 91);
				{
				this.state = 1714;
				this.explainstmt();
				}
				break;
			case 92:
				this.enterOuterAlt(localctx, 92);
				{
				this.state = 1715;
				this.fetchstmt();
				}
				break;
			case 93:
				this.enterOuterAlt(localctx, 93);
				{
				this.state = 1716;
				this.grantstmt();
				}
				break;
			case 94:
				this.enterOuterAlt(localctx, 94);
				{
				this.state = 1717;
				this.grantrolestmt();
				}
				break;
			case 95:
				this.enterOuterAlt(localctx, 95);
				{
				this.state = 1718;
				this.importforeignschemastmt();
				}
				break;
			case 96:
				this.enterOuterAlt(localctx, 96);
				{
				this.state = 1719;
				this.indexstmt();
				}
				break;
			case 97:
				this.enterOuterAlt(localctx, 97);
				{
				this.state = 1720;
				this.insertstmt();
				}
				break;
			case 98:
				this.enterOuterAlt(localctx, 98);
				{
				this.state = 1721;
				this.listenstmt();
				}
				break;
			case 99:
				this.enterOuterAlt(localctx, 99);
				{
				this.state = 1722;
				this.refreshmatviewstmt();
				}
				break;
			case 100:
				this.enterOuterAlt(localctx, 100);
				{
				this.state = 1723;
				this.loadstmt();
				}
				break;
			case 101:
				this.enterOuterAlt(localctx, 101);
				{
				this.state = 1724;
				this.lockstmt();
				}
				break;
			case 102:
				this.enterOuterAlt(localctx, 102);
				{
				this.state = 1725;
				this.notifystmt();
				}
				break;
			case 103:
				this.enterOuterAlt(localctx, 103);
				{
				this.state = 1726;
				this.preparestmt();
				}
				break;
			case 104:
				this.enterOuterAlt(localctx, 104);
				{
				this.state = 1727;
				this.reassignownedstmt();
				}
				break;
			case 105:
				this.enterOuterAlt(localctx, 105);
				{
				this.state = 1728;
				this.reindexstmt();
				}
				break;
			case 106:
				this.enterOuterAlt(localctx, 106);
				{
				this.state = 1729;
				this.removeaggrstmt();
				}
				break;
			case 107:
				this.enterOuterAlt(localctx, 107);
				{
				this.state = 1730;
				this.removefuncstmt();
				}
				break;
			case 108:
				this.enterOuterAlt(localctx, 108);
				{
				this.state = 1731;
				this.removeoperstmt();
				}
				break;
			case 109:
				this.enterOuterAlt(localctx, 109);
				{
				this.state = 1732;
				this.renamestmt();
				}
				break;
			case 110:
				this.enterOuterAlt(localctx, 110);
				{
				this.state = 1733;
				this.revokestmt();
				}
				break;
			case 111:
				this.enterOuterAlt(localctx, 111);
				{
				this.state = 1734;
				this.revokerolestmt();
				}
				break;
			case 112:
				this.enterOuterAlt(localctx, 112);
				{
				this.state = 1735;
				this.rulestmt();
				}
				break;
			case 113:
				this.enterOuterAlt(localctx, 113);
				{
				this.state = 1736;
				this.seclabelstmt();
				}
				break;
			case 114:
				this.enterOuterAlt(localctx, 114);
				{
				this.state = 1737;
				this.selectstmt();
				}
				break;
			case 115:
				this.enterOuterAlt(localctx, 115);
				{
				this.state = 1738;
				this.transactionstmt();
				}
				break;
			case 116:
				this.enterOuterAlt(localctx, 116);
				{
				this.state = 1739;
				this.truncatestmt();
				}
				break;
			case 117:
				this.enterOuterAlt(localctx, 117);
				{
				this.state = 1740;
				this.unlistenstmt();
				}
				break;
			case 118:
				this.enterOuterAlt(localctx, 118);
				{
				this.state = 1741;
				this.updatestmt();
				}
				break;
			case 119:
				this.enterOuterAlt(localctx, 119);
				{
				this.state = 1742;
				this.vacuumstmt();
				}
				break;
			case 120:
				this.enterOuterAlt(localctx, 120);
				{
				this.state = 1743;
				this.variableresetstmt();
				}
				break;
			case 121:
				this.enterOuterAlt(localctx, 121);
				{
				this.state = 1744;
				this.variablesetstmt();
				}
				break;
			case 122:
				this.enterOuterAlt(localctx, 122);
				{
				this.state = 1745;
				this.variableshowstmt();
				}
				break;
			case 123:
				this.enterOuterAlt(localctx, 123);
				{
				this.state = 1746;
				this.viewstmt();
				}
				break;
			case 124:
				this.enterOuterAlt(localctx, 124);
				{
				this.state = 1747;
				this.plsqlconsolecommand();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public plsqlconsolecommand(): PlsqlconsolecommandContext {
		let localctx: PlsqlconsolecommandContext = new PlsqlconsolecommandContext(this, this._ctx, this.state);
		this.enterRule(localctx, 10, PostgreSQLParser.RULE_plsqlconsolecommand);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 1750;
			this.match(PostgreSQLParser.MetaCommand);
			this.state = 1752;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			if (_la===545) {
				{
				this.state = 1751;
				this.match(PostgreSQLParser.EndMetaCommand);
				}
			}

			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public callstmt(): CallstmtContext {
		let localctx: CallstmtContext = new CallstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 12, PostgreSQLParser.RULE_callstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 1754;
			this.match(PostgreSQLParser.CALL);
			this.state = 1755;
			this.func_application();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createrolestmt(): CreaterolestmtContext {
		let localctx: CreaterolestmtContext = new CreaterolestmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 14, PostgreSQLParser.RULE_createrolestmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 1757;
			this.match(PostgreSQLParser.CREATE);
			this.state = 1758;
			this.match(PostgreSQLParser.ROLE);
			this.state = 1759;
			this.roleid();
			this.state = 1760;
			this.opt_with();
			this.state = 1761;
			this.optrolelist();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_with(): Opt_withContext {
		let localctx: Opt_withContext = new Opt_withContext(this, this._ctx, this.state);
		this.enterRule(localctx, 16, PostgreSQLParser.RULE_opt_with);
		try {
			this.state = 1765;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 4, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 1763;
				this.match(PostgreSQLParser.WITH);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public optrolelist(): OptrolelistContext {
		let localctx: OptrolelistContext = new OptrolelistContext(this, this._ctx, this.state);
		this.enterRule(localctx, 18, PostgreSQLParser.RULE_optrolelist);
		try {
			let _alt: number;
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 1770;
			this._errHandler.sync(this);
			_alt = this._interp.adaptivePredict(this._input, 5, this._ctx);
			while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) {
				if (_alt === 1) {
					{
					{
					this.state = 1767;
					this.createoptroleelem();
					}
					}
				}
				this.state = 1772;
				this._errHandler.sync(this);
				_alt = this._interp.adaptivePredict(this._input, 5, this._ctx);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alteroptrolelist(): AlteroptrolelistContext {
		let localctx: AlteroptrolelistContext = new AlteroptrolelistContext(this, this._ctx, this.state);
		this.enterRule(localctx, 20, PostgreSQLParser.RULE_alteroptrolelist);
		try {
			let _alt: number;
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 1776;
			this._errHandler.sync(this);
			_alt = this._interp.adaptivePredict(this._input, 6, this._ctx);
			while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) {
				if (_alt === 1) {
					{
					{
					this.state = 1773;
					this.alteroptroleelem();
					}
					}
				}
				this.state = 1778;
				this._errHandler.sync(this);
				_alt = this._interp.adaptivePredict(this._input, 6, this._ctx);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alteroptroleelem(): AlteroptroleelemContext {
		let localctx: AlteroptroleelemContext = new AlteroptroleelemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 22, PostgreSQLParser.RULE_alteroptroleelem);
		let _la: number;
		try {
			this.state = 1797;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 278:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 1779;
				this.match(PostgreSQLParser.PASSWORD);
				this.state = 1782;
				this._errHandler.sync(this);
				switch (this._input.LA(1)) {
				case 521:
				case 523:
				case 525:
				case 547:
					{
					this.state = 1780;
					this.sconst();
					}
					break;
				case 78:
					{
					this.state = 1781;
					this.match(PostgreSQLParser.NULL_P);
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				break;
			case 195:
			case 355:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 1784;
				_la = this._input.LA(1);
				if(!(_la===195 || _la===355)) {
				this._errHandler.recoverInline(this);
				}
				else {
					this._errHandler.reportMatch(this);
				    this.consume();
				}
				this.state = 1785;
				this.match(PostgreSQLParser.PASSWORD);
				this.state = 1786;
				this.sconst();
				}
				break;
			case 228:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 1787;
				this.match(PostgreSQLParser.INHERIT);
				}
				break;
			case 164:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 1788;
				this.match(PostgreSQLParser.CONNECTION);
				this.state = 1789;
				this.match(PostgreSQLParser.LIMIT);
				this.state = 1790;
				this.signediconst();
				}
				break;
			case 362:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 1791;
				this.match(PostgreSQLParser.VALID);
				this.state = 1792;
				this.match(PostgreSQLParser.UNTIL);
				this.state = 1793;
				this.sconst();
				}
				break;
			case 99:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 1794;
				this.match(PostgreSQLParser.USER);
				this.state = 1795;
				this.role_list();
				}
				break;
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 92:
			case 116:
			case 123:
			case 130:
			case 144:
			case 153:
			case 157:
			case 161:
			case 167:
			case 172:
			case 207:
			case 210:
			case 232:
			case 240:
			case 256:
			case 259:
			case 260:
			case 270:
			case 284:
			case 298:
			case 304:
			case 310:
			case 314:
			case 315:
			case 324:
			case 351:
			case 424:
			case 425:
			case 468:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 1796;
				this.identifier();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createoptroleelem(): CreateoptroleelemContext {
		let localctx: CreateoptroleelemContext = new CreateoptroleelemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 24, PostgreSQLParser.RULE_createoptroleelem);
		let _la: number;
		try {
			this.state = 1809;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 92:
			case 99:
			case 116:
			case 123:
			case 130:
			case 144:
			case 153:
			case 157:
			case 161:
			case 164:
			case 167:
			case 172:
			case 195:
			case 207:
			case 210:
			case 228:
			case 232:
			case 240:
			case 256:
			case 259:
			case 260:
			case 270:
			case 278:
			case 284:
			case 298:
			case 304:
			case 310:
			case 314:
			case 315:
			case 324:
			case 351:
			case 355:
			case 362:
			case 424:
			case 425:
			case 468:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 1799;
				this.alteroptroleelem();
				}
				break;
			case 339:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 1800;
				this.match(PostgreSQLParser.SYSID);
				this.state = 1801;
				this.iconst();
				}
				break;
			case 134:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 1802;
				this.match(PostgreSQLParser.ADMIN);
				this.state = 1803;
				this.role_list();
				}
				break;
			case 309:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 1804;
				this.match(PostgreSQLParser.ROLE);
				this.state = 1805;
				this.role_list();
				}
				break;
			case 68:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 1806;
				this.match(PostgreSQLParser.IN_P);
				this.state = 1807;
				_la = this._input.LA(1);
				if(!(_la===66 || _la===309)) {
				this._errHandler.recoverInline(this);
				}
				else {
					this._errHandler.reportMatch(this);
				    this.consume();
				}
				this.state = 1808;
				this.role_list();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createuserstmt(): CreateuserstmtContext {
		let localctx: CreateuserstmtContext = new CreateuserstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 26, PostgreSQLParser.RULE_createuserstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 1811;
			this.match(PostgreSQLParser.CREATE);
			this.state = 1812;
			this.match(PostgreSQLParser.USER);
			this.state = 1813;
			this.roleid();
			this.state = 1814;
			this.opt_with();
			this.state = 1815;
			this.optrolelist();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alterrolestmt(): AlterrolestmtContext {
		let localctx: AlterrolestmtContext = new AlterrolestmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 28, PostgreSQLParser.RULE_alterrolestmt);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 1817;
			this.match(PostgreSQLParser.ALTER);
			this.state = 1818;
			_la = this._input.LA(1);
			if(!(_la===99 || _la===309)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			this.state = 1819;
			this.rolespec();
			this.state = 1820;
			this.opt_with();
			this.state = 1821;
			this.alteroptrolelist();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_in_database(): Opt_in_databaseContext {
		let localctx: Opt_in_databaseContext = new Opt_in_databaseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 30, PostgreSQLParser.RULE_opt_in_database);
		try {
			this.state = 1827;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 304:
			case 324:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 68:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 1824;
				this.match(PostgreSQLParser.IN_P);
				this.state = 1825;
				this.match(PostgreSQLParser.DATABASE);
				this.state = 1826;
				this.name();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alterrolesetstmt(): AlterrolesetstmtContext {
		let localctx: AlterrolesetstmtContext = new AlterrolesetstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 32, PostgreSQLParser.RULE_alterrolesetstmt);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 1829;
			this.match(PostgreSQLParser.ALTER);
			this.state = 1830;
			_la = this._input.LA(1);
			if(!(_la===99 || _la===309)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			this.state = 1832;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			if (_la===30) {
				{
				this.state = 1831;
				this.match(PostgreSQLParser.ALL);
				}
			}

			this.state = 1834;
			this.rolespec();
			this.state = 1835;
			this.opt_in_database();
			this.state = 1836;
			this.setresetclause();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public droprolestmt(): DroprolestmtContext {
		let localctx: DroprolestmtContext = new DroprolestmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 34, PostgreSQLParser.RULE_droprolestmt);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 1838;
			this.match(PostgreSQLParser.DROP);
			this.state = 1839;
			_la = this._input.LA(1);
			if(!(_la===66 || _la===99 || _la===309)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			this.state = 1842;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 12, this._ctx) ) {
			case 1:
				{
				this.state = 1840;
				this.match(PostgreSQLParser.IF_P);
				this.state = 1841;
				this.match(PostgreSQLParser.EXISTS);
				}
				break;
			}
			this.state = 1844;
			this.role_list();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public creategroupstmt(): CreategroupstmtContext {
		let localctx: CreategroupstmtContext = new CreategroupstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 36, PostgreSQLParser.RULE_creategroupstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 1846;
			this.match(PostgreSQLParser.CREATE);
			this.state = 1847;
			this.match(PostgreSQLParser.GROUP_P);
			this.state = 1848;
			this.roleid();
			this.state = 1849;
			this.opt_with();
			this.state = 1850;
			this.optrolelist();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public altergroupstmt(): AltergroupstmtContext {
		let localctx: AltergroupstmtContext = new AltergroupstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 38, PostgreSQLParser.RULE_altergroupstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 1852;
			this.match(PostgreSQLParser.ALTER);
			this.state = 1853;
			this.match(PostgreSQLParser.GROUP_P);
			this.state = 1854;
			this.rolespec();
			this.state = 1855;
			this.add_drop();
			this.state = 1856;
			this.match(PostgreSQLParser.USER);
			this.state = 1857;
			this.role_list();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public add_drop(): Add_dropContext {
		let localctx: Add_dropContext = new Add_dropContext(this, this._ctx, this.state);
		this.enterRule(localctx, 40, PostgreSQLParser.RULE_add_drop);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 1859;
			_la = this._input.LA(1);
			if(!(_la===133 || _la===191)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createschemastmt(): CreateschemastmtContext {
		let localctx: CreateschemastmtContext = new CreateschemastmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 42, PostgreSQLParser.RULE_createschemastmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 1861;
			this.match(PostgreSQLParser.CREATE);
			this.state = 1862;
			this.match(PostgreSQLParser.SCHEMA);
			this.state = 1866;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 13, this._ctx) ) {
			case 1:
				{
				this.state = 1863;
				this.match(PostgreSQLParser.IF_P);
				this.state = 1864;
				this.match(PostgreSQLParser.NOT);
				this.state = 1865;
				this.match(PostgreSQLParser.EXISTS);
				}
				break;
			}
			this.state = 1873;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 14, this._ctx) ) {
			case 1:
				{
				this.state = 1868;
				this.optschemaname();
				this.state = 1869;
				this.match(PostgreSQLParser.AUTHORIZATION);
				this.state = 1870;
				this.rolespec();
				}
				break;
			case 2:
				{
				this.state = 1872;
				this.colid();
				}
				break;
			}
			this.state = 1875;
			this.optschemaeltlist();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public optschemaname(): OptschemanameContext {
		let localctx: OptschemanameContext = new OptschemanameContext(this, this._ctx, this.state);
		this.enterRule(localctx, 44, PostgreSQLParser.RULE_optschemaname);
		try {
			this.state = 1879;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 92:
			case 116:
			case 123:
			case 124:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 1877;
				this.colid();
				}
				break;
			case 106:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public optschemaeltlist(): OptschemaeltlistContext {
		let localctx: OptschemaeltlistContext = new OptschemaeltlistContext(this, this._ctx, this.state);
		this.enterRule(localctx, 46, PostgreSQLParser.RULE_optschemaeltlist);
		try {
			let _alt: number;
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 1884;
			this._errHandler.sync(this);
			_alt = this._interp.adaptivePredict(this._input, 16, this._ctx);
			while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) {
				if (_alt === 1) {
					{
					{
					this.state = 1881;
					this.schema_stmt();
					}
					}
				}
				this.state = 1886;
				this._errHandler.sync(this);
				_alt = this._interp.adaptivePredict(this._input, 16, this._ctx);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public schema_stmt(): Schema_stmtContext {
		let localctx: Schema_stmtContext = new Schema_stmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 48, PostgreSQLParser.RULE_schema_stmt);
		try {
			this.state = 1893;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 17, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 1887;
				this.createstmt();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 1888;
				this.indexstmt();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 1889;
				this.createseqstmt();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 1890;
				this.createtrigstmt();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 1891;
				this.grantstmt();
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 1892;
				this.viewstmt();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public variablesetstmt(): VariablesetstmtContext {
		let localctx: VariablesetstmtContext = new VariablesetstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 50, PostgreSQLParser.RULE_variablesetstmt);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 1895;
			this.match(PostgreSQLParser.SET);
			this.state = 1897;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 18, this._ctx) ) {
			case 1:
				{
				this.state = 1896;
				_la = this._input.LA(1);
				if(!(_la===245 || _la===323)) {
				this._errHandler.recoverInline(this);
				}
				else {
					this._errHandler.reportMatch(this);
				    this.consume();
				}
				}
				break;
			}
			this.state = 1899;
			this.set_rest();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public set_rest(): Set_restContext {
		let localctx: Set_restContext = new Set_restContext(this, this._ctx, this.state);
		this.enterRule(localctx, 52, PostgreSQLParser.RULE_set_rest);
		try {
			this.state = 1909;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 19, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 1901;
				this.match(PostgreSQLParser.TRANSACTION);
				this.state = 1902;
				this.transaction_mode_list();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 1903;
				this.match(PostgreSQLParser.SESSION);
				this.state = 1904;
				this.match(PostgreSQLParser.CHARACTERISTICS);
				this.state = 1905;
				this.match(PostgreSQLParser.AS);
				this.state = 1906;
				this.match(PostgreSQLParser.TRANSACTION);
				this.state = 1907;
				this.transaction_mode_list();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 1908;
				this.set_rest_more();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public generic_set(): Generic_setContext {
		let localctx: Generic_setContext = new Generic_setContext(this, this._ctx, this.state);
		this.enterRule(localctx, 54, PostgreSQLParser.RULE_generic_set);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 1911;
			this.var_name();
			this.state = 1912;
			_la = this._input.LA(1);
			if(!(_la===10 || _la===94)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			this.state = 1913;
			this.var_list();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public set_rest_more(): Set_rest_moreContext {
		let localctx: Set_rest_moreContext = new Set_rest_moreContext(this, this._ctx, this.state);
		this.enterRule(localctx, 56, PostgreSQLParser.RULE_set_rest_more);
		try {
			this.state = 1940;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 20, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 1915;
				this.generic_set();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 1916;
				this.var_name();
				this.state = 1917;
				this.match(PostgreSQLParser.FROM);
				this.state = 1918;
				this.match(PostgreSQLParser.CURRENT_P);
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 1920;
				this.match(PostgreSQLParser.TIME);
				this.state = 1921;
				this.match(PostgreSQLParser.ZONE);
				this.state = 1922;
				this.zone_value();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 1923;
				this.match(PostgreSQLParser.CATALOG);
				this.state = 1924;
				this.sconst();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 1925;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 1926;
				this.sconst();
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 1927;
				this.match(PostgreSQLParser.NAMES);
				this.state = 1928;
				this.opt_encoding();
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 1929;
				this.match(PostgreSQLParser.ROLE);
				this.state = 1930;
				this.nonreservedword_or_sconst();
				}
				break;
			case 8:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 1931;
				this.match(PostgreSQLParser.SESSION);
				this.state = 1932;
				this.match(PostgreSQLParser.AUTHORIZATION);
				this.state = 1933;
				this.nonreservedword_or_sconst();
				}
				break;
			case 9:
				this.enterOuterAlt(localctx, 9);
				{
				this.state = 1934;
				this.match(PostgreSQLParser.XML_P);
				this.state = 1935;
				this.match(PostgreSQLParser.OPTION);
				this.state = 1936;
				this.document_or_content();
				}
				break;
			case 10:
				this.enterOuterAlt(localctx, 10);
				{
				this.state = 1937;
				this.match(PostgreSQLParser.TRANSACTION);
				this.state = 1938;
				this.match(PostgreSQLParser.SNAPSHOT);
				this.state = 1939;
				this.sconst();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public var_name(): Var_nameContext {
		let localctx: Var_nameContext = new Var_nameContext(this, this._ctx, this.state);
		this.enterRule(localctx, 58, PostgreSQLParser.RULE_var_name);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 1942;
			this.colid();
			this.state = 1947;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===11) {
				{
				{
				this.state = 1943;
				this.match(PostgreSQLParser.DOT);
				this.state = 1944;
				this.colid();
				}
				}
				this.state = 1949;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public var_list(): Var_listContext {
		let localctx: Var_listContext = new Var_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 60, PostgreSQLParser.RULE_var_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 1950;
			this.var_value();
			this.state = 1955;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 1951;
				this.match(PostgreSQLParser.COMMA);
				this.state = 1952;
				this.var_value();
				}
				}
				this.state = 1957;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public var_value(): Var_valueContext {
		let localctx: Var_valueContext = new Var_valueContext(this, this._ctx, this.state);
		this.enterRule(localctx, 62, PostgreSQLParser.RULE_var_value);
		try {
			this.state = 1960;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 60:
			case 61:
			case 80:
			case 92:
			case 96:
			case 106:
			case 107:
			case 108:
			case 109:
			case 110:
			case 111:
			case 112:
			case 113:
			case 114:
			case 115:
			case 116:
			case 117:
			case 118:
			case 119:
			case 120:
			case 121:
			case 122:
			case 123:
			case 124:
			case 125:
			case 126:
			case 127:
			case 128:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 463:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 521:
			case 523:
			case 525:
			case 537:
			case 538:
			case 547:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 1958;
				this.opt_boolean_or_string();
				}
				break;
			case 12:
			case 13:
			case 534:
			case 536:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 1959;
				this.numericonly();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public iso_level(): Iso_levelContext {
		let localctx: Iso_levelContext = new Iso_levelContext(this, this._ctx, this.state);
		this.enterRule(localctx, 64, PostgreSQLParser.RULE_iso_level);
		let _la: number;
		try {
			this.state = 1967;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 291:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 1962;
				this.match(PostgreSQLParser.READ);
				this.state = 1963;
				_la = this._input.LA(1);
				if(!(_la===162 || _la===354)) {
				this._errHandler.recoverInline(this);
				}
				else {
					this._errHandler.reportMatch(this);
				    this.consume();
				}
				}
				break;
			case 301:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 1964;
				this.match(PostgreSQLParser.REPEATABLE);
				this.state = 1965;
				this.match(PostgreSQLParser.READ);
				}
				break;
			case 321:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 1966;
				this.match(PostgreSQLParser.SERIALIZABLE);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_boolean_or_string(): Opt_boolean_or_stringContext {
		let localctx: Opt_boolean_or_stringContext = new Opt_boolean_or_stringContext(this, this._ctx, this.state);
		this.enterRule(localctx, 66, PostgreSQLParser.RULE_opt_boolean_or_string);
		try {
			this.state = 1973;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 96:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 1969;
				this.match(PostgreSQLParser.TRUE_P);
				}
				break;
			case 60:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 1970;
				this.match(PostgreSQLParser.FALSE_P);
				}
				break;
			case 80:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 1971;
				this.match(PostgreSQLParser.ON);
				}
				break;
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 92:
			case 106:
			case 107:
			case 108:
			case 109:
			case 110:
			case 111:
			case 112:
			case 113:
			case 114:
			case 115:
			case 116:
			case 117:
			case 118:
			case 119:
			case 120:
			case 121:
			case 122:
			case 123:
			case 124:
			case 125:
			case 126:
			case 127:
			case 128:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 463:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 521:
			case 523:
			case 525:
			case 537:
			case 538:
			case 547:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 1972;
				this.nonreservedword_or_sconst();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public zone_value(): Zone_valueContext {
		let localctx: Zone_valueContext = new Zone_valueContext(this, this._ctx, this.state);
		this.enterRule(localctx, 68, PostgreSQLParser.RULE_zone_value);
		try {
			this.state = 1990;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 26, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 1975;
				this.sconst();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 1976;
				this.identifier();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 1977;
				this.constinterval();
				this.state = 1978;
				this.sconst();
				this.state = 1979;
				this.opt_interval();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 1981;
				this.constinterval();
				this.state = 1982;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 1983;
				this.iconst();
				this.state = 1984;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 1985;
				this.sconst();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 1987;
				this.numericonly();
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 1988;
				this.match(PostgreSQLParser.DEFAULT);
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 1989;
				this.match(PostgreSQLParser.LOCAL);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_encoding(): Opt_encodingContext {
		let localctx: Opt_encodingContext = new Opt_encodingContext(this, this._ctx, this.state);
		this.enterRule(localctx, 70, PostgreSQLParser.RULE_opt_encoding);
		try {
			this.state = 1995;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 521:
			case 523:
			case 525:
			case 547:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 1992;
				this.sconst();
				}
				break;
			case 53:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 1993;
				this.match(PostgreSQLParser.DEFAULT);
				}
				break;
			case -1:
			case 2:
			case 7:
			case 31:
			case 32:
			case 36:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 77:
			case 88:
			case 92:
			case 104:
			case 105:
			case 129:
			case 138:
			case 146:
			case 149:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 170:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 205:
			case 222:
			case 232:
			case 238:
			case 241:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 306:
			case 307:
			case 308:
			case 310:
			case 311:
			case 313:
			case 318:
			case 324:
			case 326:
			case 329:
			case 331:
			case 337:
			case 349:
			case 357:
			case 360:
			case 361:
			case 368:
			case 413:
			case 424:
			case 434:
			case 435:
			case 445:
			case 450:
			case 451:
			case 544:
				this.enterOuterAlt(localctx, 3);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public nonreservedword_or_sconst(): Nonreservedword_or_sconstContext {
		let localctx: Nonreservedword_or_sconstContext = new Nonreservedword_or_sconstContext(this, this._ctx, this.state);
		this.enterRule(localctx, 72, PostgreSQLParser.RULE_nonreservedword_or_sconst);
		try {
			this.state = 1999;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 92:
			case 106:
			case 107:
			case 108:
			case 109:
			case 110:
			case 111:
			case 112:
			case 113:
			case 114:
			case 115:
			case 116:
			case 117:
			case 118:
			case 119:
			case 120:
			case 121:
			case 122:
			case 123:
			case 124:
			case 125:
			case 126:
			case 127:
			case 128:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 463:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 1997;
				this.nonreservedword();
				}
				break;
			case 521:
			case 523:
			case 525:
			case 547:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 1998;
				this.sconst();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public variableresetstmt(): VariableresetstmtContext {
		let localctx: VariableresetstmtContext = new VariableresetstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 74, PostgreSQLParser.RULE_variableresetstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2001;
			this.match(PostgreSQLParser.RESET);
			this.state = 2002;
			this.reset_rest();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public reset_rest(): Reset_restContext {
		let localctx: Reset_restContext = new Reset_restContext(this, this._ctx, this.state);
		this.enterRule(localctx, 76, PostgreSQLParser.RULE_reset_rest);
		try {
			this.state = 2012;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 29, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2004;
				this.generic_reset();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 2005;
				this.match(PostgreSQLParser.TIME);
				this.state = 2006;
				this.match(PostgreSQLParser.ZONE);
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 2007;
				this.match(PostgreSQLParser.TRANSACTION);
				this.state = 2008;
				this.match(PostgreSQLParser.ISOLATION);
				this.state = 2009;
				this.match(PostgreSQLParser.LEVEL);
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 2010;
				this.match(PostgreSQLParser.SESSION);
				this.state = 2011;
				this.match(PostgreSQLParser.AUTHORIZATION);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public generic_reset(): Generic_resetContext {
		let localctx: Generic_resetContext = new Generic_resetContext(this, this._ctx, this.state);
		this.enterRule(localctx, 78, PostgreSQLParser.RULE_generic_reset);
		try {
			this.state = 2016;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 92:
			case 116:
			case 123:
			case 124:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2014;
				this.var_name();
				}
				break;
			case 30:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 2015;
				this.match(PostgreSQLParser.ALL);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public setresetclause(): SetresetclauseContext {
		let localctx: SetresetclauseContext = new SetresetclauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 80, PostgreSQLParser.RULE_setresetclause);
		try {
			this.state = 2021;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 324:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2018;
				this.match(PostgreSQLParser.SET);
				this.state = 2019;
				this.set_rest();
				}
				break;
			case 304:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 2020;
				this.variableresetstmt();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public functionsetresetclause(): FunctionsetresetclauseContext {
		let localctx: FunctionsetresetclauseContext = new FunctionsetresetclauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 82, PostgreSQLParser.RULE_functionsetresetclause);
		try {
			this.state = 2026;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 324:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2023;
				this.match(PostgreSQLParser.SET);
				this.state = 2024;
				this.set_rest_more();
				}
				break;
			case 304:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 2025;
				this.variableresetstmt();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public variableshowstmt(): VariableshowstmtContext {
		let localctx: VariableshowstmtContext = new VariableshowstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 84, PostgreSQLParser.RULE_variableshowstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2028;
			this.match(PostgreSQLParser.SHOW);
			this.state = 2038;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 33, this._ctx) ) {
			case 1:
				{
				this.state = 2029;
				this.var_name();
				}
				break;
			case 2:
				{
				this.state = 2030;
				this.match(PostgreSQLParser.TIME);
				this.state = 2031;
				this.match(PostgreSQLParser.ZONE);
				}
				break;
			case 3:
				{
				this.state = 2032;
				this.match(PostgreSQLParser.TRANSACTION);
				this.state = 2033;
				this.match(PostgreSQLParser.ISOLATION);
				this.state = 2034;
				this.match(PostgreSQLParser.LEVEL);
				}
				break;
			case 4:
				{
				this.state = 2035;
				this.match(PostgreSQLParser.SESSION);
				this.state = 2036;
				this.match(PostgreSQLParser.AUTHORIZATION);
				}
				break;
			case 5:
				{
				this.state = 2037;
				this.match(PostgreSQLParser.ALL);
				}
				break;
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public constraintssetstmt(): ConstraintssetstmtContext {
		let localctx: ConstraintssetstmtContext = new ConstraintssetstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 86, PostgreSQLParser.RULE_constraintssetstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2040;
			this.match(PostgreSQLParser.SET);
			this.state = 2041;
			this.match(PostgreSQLParser.CONSTRAINTS);
			this.state = 2042;
			this.constraints_set_list();
			this.state = 2043;
			this.constraints_set_mode();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public constraints_set_list(): Constraints_set_listContext {
		let localctx: Constraints_set_listContext = new Constraints_set_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 88, PostgreSQLParser.RULE_constraints_set_list);
		try {
			this.state = 2047;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 30:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2045;
				this.match(PostgreSQLParser.ALL);
				}
				break;
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 92:
			case 116:
			case 123:
			case 124:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 2046;
				this.qualified_name_list();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public constraints_set_mode(): Constraints_set_modeContext {
		let localctx: Constraints_set_modeContext = new Constraints_set_modeContext(this, this._ctx, this.state);
		this.enterRule(localctx, 90, PostgreSQLParser.RULE_constraints_set_mode);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2049;
			_la = this._input.LA(1);
			if(!(_la===180 || _la===221)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public checkpointstmt(): CheckpointstmtContext {
		let localctx: CheckpointstmtContext = new CheckpointstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 92, PostgreSQLParser.RULE_checkpointstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2051;
			this.match(PostgreSQLParser.CHECKPOINT);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public discardstmt(): DiscardstmtContext {
		let localctx: DiscardstmtContext = new DiscardstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 94, PostgreSQLParser.RULE_discardstmt);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2053;
			this.match(PostgreSQLParser.DISCARD);
			this.state = 2054;
			_la = this._input.LA(1);
			if(!(_la===30 || _la===279 || ((((_la - 320)) & ~0x1F) === 0 && ((1 << (_la - 320)) & 41943041) !== 0))) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public altertablestmt(): AltertablestmtContext {
		let localctx: AltertablestmtContext = new AltertablestmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 96, PostgreSQLParser.RULE_altertablestmt);
		let _la: number;
		try {
			this.state = 2165;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 46, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2056;
				this.match(PostgreSQLParser.ALTER);
				this.state = 2057;
				this.match(PostgreSQLParser.TABLE);
				this.state = 2060;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 35, this._ctx) ) {
				case 1:
					{
					this.state = 2058;
					this.match(PostgreSQLParser.IF_P);
					this.state = 2059;
					this.match(PostgreSQLParser.EXISTS);
					}
					break;
				}
				this.state = 2062;
				this.relation_expr();
				this.state = 2065;
				this._errHandler.sync(this);
				switch (this._input.LA(1)) {
				case 77:
				case 133:
				case 138:
				case 158:
				case 186:
				case 191:
				case 193:
				case 209:
				case 228:
				case 260:
				case 266:
				case 271:
				case 273:
				case 303:
				case 304:
				case 324:
				case 363:
					{
					this.state = 2063;
					this.alter_table_cmds();
					}
					break;
				case 426:
				case 427:
					{
					this.state = 2064;
					this.partition_cmd();
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 2067;
				this.match(PostgreSQLParser.ALTER);
				this.state = 2068;
				this.match(PostgreSQLParser.TABLE);
				this.state = 2069;
				this.match(PostgreSQLParser.ALL);
				this.state = 2070;
				this.match(PostgreSQLParser.IN_P);
				this.state = 2071;
				this.match(PostgreSQLParser.TABLESPACE);
				this.state = 2072;
				this.name();
				this.state = 2076;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===272) {
					{
					this.state = 2073;
					this.match(PostgreSQLParser.OWNED);
					this.state = 2074;
					this.match(PostgreSQLParser.BY);
					this.state = 2075;
					this.role_list();
					}
				}

				this.state = 2078;
				this.match(PostgreSQLParser.SET);
				this.state = 2079;
				this.match(PostgreSQLParser.TABLESPACE);
				this.state = 2080;
				this.name();
				this.state = 2081;
				this.opt_nowait();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 2083;
				this.match(PostgreSQLParser.ALTER);
				this.state = 2084;
				this.match(PostgreSQLParser.INDEX);
				this.state = 2087;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 38, this._ctx) ) {
				case 1:
					{
					this.state = 2085;
					this.match(PostgreSQLParser.IF_P);
					this.state = 2086;
					this.match(PostgreSQLParser.EXISTS);
					}
					break;
				}
				this.state = 2089;
				this.qualified_name();
				this.state = 2092;
				this._errHandler.sync(this);
				switch (this._input.LA(1)) {
				case 77:
				case 133:
				case 138:
				case 158:
				case 186:
				case 191:
				case 193:
				case 209:
				case 228:
				case 260:
				case 266:
				case 271:
				case 273:
				case 303:
				case 304:
				case 324:
				case 363:
					{
					this.state = 2090;
					this.alter_table_cmds();
					}
					break;
				case 426:
					{
					this.state = 2091;
					this.index_partition_cmd();
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 2094;
				this.match(PostgreSQLParser.ALTER);
				this.state = 2095;
				this.match(PostgreSQLParser.INDEX);
				this.state = 2096;
				this.match(PostgreSQLParser.ALL);
				this.state = 2097;
				this.match(PostgreSQLParser.IN_P);
				this.state = 2098;
				this.match(PostgreSQLParser.TABLESPACE);
				this.state = 2099;
				this.name();
				this.state = 2103;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===272) {
					{
					this.state = 2100;
					this.match(PostgreSQLParser.OWNED);
					this.state = 2101;
					this.match(PostgreSQLParser.BY);
					this.state = 2102;
					this.role_list();
					}
				}

				this.state = 2105;
				this.match(PostgreSQLParser.SET);
				this.state = 2106;
				this.match(PostgreSQLParser.TABLESPACE);
				this.state = 2107;
				this.name();
				this.state = 2108;
				this.opt_nowait();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 2110;
				this.match(PostgreSQLParser.ALTER);
				this.state = 2111;
				this.match(PostgreSQLParser.SEQUENCE);
				this.state = 2114;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 41, this._ctx) ) {
				case 1:
					{
					this.state = 2112;
					this.match(PostgreSQLParser.IF_P);
					this.state = 2113;
					this.match(PostgreSQLParser.EXISTS);
					}
					break;
				}
				this.state = 2116;
				this.qualified_name();
				this.state = 2117;
				this.alter_table_cmds();
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 2119;
				this.match(PostgreSQLParser.ALTER);
				this.state = 2120;
				this.match(PostgreSQLParser.VIEW);
				this.state = 2123;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 42, this._ctx) ) {
				case 1:
					{
					this.state = 2121;
					this.match(PostgreSQLParser.IF_P);
					this.state = 2122;
					this.match(PostgreSQLParser.EXISTS);
					}
					break;
				}
				this.state = 2125;
				this.qualified_name();
				this.state = 2126;
				this.alter_table_cmds();
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 2128;
				this.match(PostgreSQLParser.ALTER);
				this.state = 2129;
				this.match(PostgreSQLParser.MATERIALIZED);
				this.state = 2130;
				this.match(PostgreSQLParser.VIEW);
				this.state = 2133;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 43, this._ctx) ) {
				case 1:
					{
					this.state = 2131;
					this.match(PostgreSQLParser.IF_P);
					this.state = 2132;
					this.match(PostgreSQLParser.EXISTS);
					}
					break;
				}
				this.state = 2135;
				this.qualified_name();
				this.state = 2136;
				this.alter_table_cmds();
				}
				break;
			case 8:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 2138;
				this.match(PostgreSQLParser.ALTER);
				this.state = 2139;
				this.match(PostgreSQLParser.MATERIALIZED);
				this.state = 2140;
				this.match(PostgreSQLParser.VIEW);
				this.state = 2141;
				this.match(PostgreSQLParser.ALL);
				this.state = 2142;
				this.match(PostgreSQLParser.IN_P);
				this.state = 2143;
				this.match(PostgreSQLParser.TABLESPACE);
				this.state = 2144;
				this.name();
				this.state = 2148;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===272) {
					{
					this.state = 2145;
					this.match(PostgreSQLParser.OWNED);
					this.state = 2146;
					this.match(PostgreSQLParser.BY);
					this.state = 2147;
					this.role_list();
					}
				}

				this.state = 2150;
				this.match(PostgreSQLParser.SET);
				this.state = 2151;
				this.match(PostgreSQLParser.TABLESPACE);
				this.state = 2152;
				this.name();
				this.state = 2153;
				this.opt_nowait();
				}
				break;
			case 9:
				this.enterOuterAlt(localctx, 9);
				{
				this.state = 2155;
				this.match(PostgreSQLParser.ALTER);
				this.state = 2156;
				this.match(PostgreSQLParser.FOREIGN);
				this.state = 2157;
				this.match(PostgreSQLParser.TABLE);
				this.state = 2160;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 45, this._ctx) ) {
				case 1:
					{
					this.state = 2158;
					this.match(PostgreSQLParser.IF_P);
					this.state = 2159;
					this.match(PostgreSQLParser.EXISTS);
					}
					break;
				}
				this.state = 2162;
				this.relation_expr();
				this.state = 2163;
				this.alter_table_cmds();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alter_table_cmds(): Alter_table_cmdsContext {
		let localctx: Alter_table_cmdsContext = new Alter_table_cmdsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 98, PostgreSQLParser.RULE_alter_table_cmds);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2167;
			this.alter_table_cmd();
			this.state = 2172;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 2168;
				this.match(PostgreSQLParser.COMMA);
				this.state = 2169;
				this.alter_table_cmd();
				}
				}
				this.state = 2174;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public partition_cmd(): Partition_cmdContext {
		let localctx: Partition_cmdContext = new Partition_cmdContext(this, this._ctx, this.state);
		this.enterRule(localctx, 100, PostgreSQLParser.RULE_partition_cmd);
		try {
			this.state = 2183;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 426:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2175;
				this.match(PostgreSQLParser.ATTACH);
				this.state = 2176;
				this.match(PostgreSQLParser.PARTITION);
				this.state = 2177;
				this.qualified_name();
				this.state = 2178;
				this.partitionboundspec();
				}
				break;
			case 427:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 2180;
				this.match(PostgreSQLParser.DETACH);
				this.state = 2181;
				this.match(PostgreSQLParser.PARTITION);
				this.state = 2182;
				this.qualified_name();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public index_partition_cmd(): Index_partition_cmdContext {
		let localctx: Index_partition_cmdContext = new Index_partition_cmdContext(this, this._ctx, this.state);
		this.enterRule(localctx, 102, PostgreSQLParser.RULE_index_partition_cmd);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2185;
			this.match(PostgreSQLParser.ATTACH);
			this.state = 2186;
			this.match(PostgreSQLParser.PARTITION);
			this.state = 2187;
			this.qualified_name();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alter_table_cmd(): Alter_table_cmdContext {
		let localctx: Alter_table_cmdContext = new Alter_table_cmdContext(this, this._ctx, this.state);
		this.enterRule(localctx, 104, PostgreSQLParser.RULE_alter_table_cmd);
		try {
			this.state = 2441;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 49, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2189;
				this.match(PostgreSQLParser.ADD_P);
				this.state = 2190;
				this.columnDef();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 2191;
				this.match(PostgreSQLParser.ADD_P);
				this.state = 2192;
				this.match(PostgreSQLParser.IF_P);
				this.state = 2193;
				this.match(PostgreSQLParser.NOT);
				this.state = 2194;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 2195;
				this.columnDef();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 2196;
				this.match(PostgreSQLParser.ADD_P);
				this.state = 2197;
				this.match(PostgreSQLParser.COLUMN);
				this.state = 2198;
				this.columnDef();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 2199;
				this.match(PostgreSQLParser.ADD_P);
				this.state = 2200;
				this.match(PostgreSQLParser.COLUMN);
				this.state = 2201;
				this.match(PostgreSQLParser.IF_P);
				this.state = 2202;
				this.match(PostgreSQLParser.NOT);
				this.state = 2203;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 2204;
				this.columnDef();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 2205;
				this.match(PostgreSQLParser.ALTER);
				this.state = 2206;
				this.opt_column();
				this.state = 2207;
				this.colid();
				this.state = 2208;
				this.alter_column_default();
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 2210;
				this.match(PostgreSQLParser.ALTER);
				this.state = 2211;
				this.opt_column();
				this.state = 2212;
				this.colid();
				this.state = 2213;
				this.match(PostgreSQLParser.DROP);
				this.state = 2214;
				this.match(PostgreSQLParser.NOT);
				this.state = 2215;
				this.match(PostgreSQLParser.NULL_P);
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 2217;
				this.match(PostgreSQLParser.ALTER);
				this.state = 2218;
				this.opt_column();
				this.state = 2219;
				this.colid();
				this.state = 2220;
				this.match(PostgreSQLParser.SET);
				this.state = 2221;
				this.match(PostgreSQLParser.NOT);
				this.state = 2222;
				this.match(PostgreSQLParser.NULL_P);
				}
				break;
			case 8:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 2224;
				this.match(PostgreSQLParser.ALTER);
				this.state = 2225;
				this.opt_column();
				this.state = 2226;
				this.colid();
				this.state = 2227;
				this.match(PostgreSQLParser.DROP);
				this.state = 2228;
				this.match(PostgreSQLParser.EXPRESSION);
				}
				break;
			case 9:
				this.enterOuterAlt(localctx, 9);
				{
				this.state = 2230;
				this.match(PostgreSQLParser.ALTER);
				this.state = 2231;
				this.opt_column();
				this.state = 2232;
				this.colid();
				this.state = 2233;
				this.match(PostgreSQLParser.DROP);
				this.state = 2234;
				this.match(PostgreSQLParser.EXPRESSION);
				this.state = 2235;
				this.match(PostgreSQLParser.IF_P);
				this.state = 2236;
				this.match(PostgreSQLParser.EXISTS);
				}
				break;
			case 10:
				this.enterOuterAlt(localctx, 10);
				{
				this.state = 2238;
				this.match(PostgreSQLParser.ALTER);
				this.state = 2239;
				this.opt_column();
				this.state = 2240;
				this.colid();
				this.state = 2241;
				this.match(PostgreSQLParser.SET);
				this.state = 2242;
				this.match(PostgreSQLParser.STATISTICS);
				this.state = 2243;
				this.signediconst();
				}
				break;
			case 11:
				this.enterOuterAlt(localctx, 11);
				{
				this.state = 2245;
				this.match(PostgreSQLParser.ALTER);
				this.state = 2246;
				this.opt_column();
				this.state = 2247;
				this.iconst();
				this.state = 2248;
				this.match(PostgreSQLParser.SET);
				this.state = 2249;
				this.match(PostgreSQLParser.STATISTICS);
				this.state = 2250;
				this.signediconst();
				}
				break;
			case 12:
				this.enterOuterAlt(localctx, 12);
				{
				this.state = 2252;
				this.match(PostgreSQLParser.ALTER);
				this.state = 2253;
				this.opt_column();
				this.state = 2254;
				this.colid();
				this.state = 2255;
				this.match(PostgreSQLParser.SET);
				this.state = 2256;
				this.reloptions();
				}
				break;
			case 13:
				this.enterOuterAlt(localctx, 13);
				{
				this.state = 2258;
				this.match(PostgreSQLParser.ALTER);
				this.state = 2259;
				this.opt_column();
				this.state = 2260;
				this.colid();
				this.state = 2261;
				this.match(PostgreSQLParser.RESET);
				this.state = 2262;
				this.reloptions();
				}
				break;
			case 14:
				this.enterOuterAlt(localctx, 14);
				{
				this.state = 2264;
				this.match(PostgreSQLParser.ALTER);
				this.state = 2265;
				this.opt_column();
				this.state = 2266;
				this.colid();
				this.state = 2267;
				this.match(PostgreSQLParser.SET);
				this.state = 2268;
				this.match(PostgreSQLParser.STORAGE);
				this.state = 2269;
				this.colid();
				}
				break;
			case 15:
				this.enterOuterAlt(localctx, 15);
				{
				this.state = 2271;
				this.match(PostgreSQLParser.ALTER);
				this.state = 2272;
				this.opt_column();
				this.state = 2273;
				this.colid();
				this.state = 2274;
				this.match(PostgreSQLParser.ADD_P);
				this.state = 2275;
				this.match(PostgreSQLParser.GENERATED);
				this.state = 2276;
				this.generated_when();
				this.state = 2277;
				this.match(PostgreSQLParser.AS);
				this.state = 2278;
				this.match(PostgreSQLParser.IDENTITY_P);
				this.state = 2279;
				this.optparenthesizedseqoptlist();
				}
				break;
			case 16:
				this.enterOuterAlt(localctx, 16);
				{
				this.state = 2281;
				this.match(PostgreSQLParser.ALTER);
				this.state = 2282;
				this.opt_column();
				this.state = 2283;
				this.colid();
				this.state = 2284;
				this.alter_identity_column_option_list();
				}
				break;
			case 17:
				this.enterOuterAlt(localctx, 17);
				{
				this.state = 2286;
				this.match(PostgreSQLParser.ALTER);
				this.state = 2287;
				this.opt_column();
				this.state = 2288;
				this.colid();
				this.state = 2289;
				this.match(PostgreSQLParser.DROP);
				this.state = 2290;
				this.match(PostgreSQLParser.IDENTITY_P);
				}
				break;
			case 18:
				this.enterOuterAlt(localctx, 18);
				{
				this.state = 2292;
				this.match(PostgreSQLParser.ALTER);
				this.state = 2293;
				this.opt_column();
				this.state = 2294;
				this.colid();
				this.state = 2295;
				this.match(PostgreSQLParser.DROP);
				this.state = 2296;
				this.match(PostgreSQLParser.IDENTITY_P);
				this.state = 2297;
				this.match(PostgreSQLParser.IF_P);
				this.state = 2298;
				this.match(PostgreSQLParser.EXISTS);
				}
				break;
			case 19:
				this.enterOuterAlt(localctx, 19);
				{
				this.state = 2300;
				this.match(PostgreSQLParser.DROP);
				this.state = 2301;
				this.opt_column();
				this.state = 2302;
				this.match(PostgreSQLParser.IF_P);
				this.state = 2303;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 2304;
				this.colid();
				this.state = 2305;
				this.opt_drop_behavior();
				}
				break;
			case 20:
				this.enterOuterAlt(localctx, 20);
				{
				this.state = 2307;
				this.match(PostgreSQLParser.DROP);
				this.state = 2308;
				this.opt_column();
				this.state = 2309;
				this.colid();
				this.state = 2310;
				this.opt_drop_behavior();
				}
				break;
			case 21:
				this.enterOuterAlt(localctx, 21);
				{
				this.state = 2312;
				this.match(PostgreSQLParser.ALTER);
				this.state = 2313;
				this.opt_column();
				this.state = 2314;
				this.colid();
				this.state = 2315;
				this.opt_set_data();
				this.state = 2316;
				this.match(PostgreSQLParser.TYPE_P);
				this.state = 2317;
				this.typename();
				this.state = 2318;
				this.opt_collate_clause();
				this.state = 2319;
				this.alter_using();
				}
				break;
			case 22:
				this.enterOuterAlt(localctx, 22);
				{
				this.state = 2321;
				this.match(PostgreSQLParser.ALTER);
				this.state = 2322;
				this.opt_column();
				this.state = 2323;
				this.colid();
				this.state = 2324;
				this.alter_generic_options();
				}
				break;
			case 23:
				this.enterOuterAlt(localctx, 23);
				{
				this.state = 2326;
				this.match(PostgreSQLParser.ADD_P);
				this.state = 2327;
				this.tableconstraint();
				}
				break;
			case 24:
				this.enterOuterAlt(localctx, 24);
				{
				this.state = 2328;
				this.match(PostgreSQLParser.ALTER);
				this.state = 2329;
				this.match(PostgreSQLParser.CONSTRAINT);
				this.state = 2330;
				this.name();
				this.state = 2331;
				this.constraintattributespec();
				}
				break;
			case 25:
				this.enterOuterAlt(localctx, 25);
				{
				this.state = 2333;
				this.match(PostgreSQLParser.VALIDATE);
				this.state = 2334;
				this.match(PostgreSQLParser.CONSTRAINT);
				this.state = 2335;
				this.name();
				}
				break;
			case 26:
				this.enterOuterAlt(localctx, 26);
				{
				this.state = 2336;
				this.match(PostgreSQLParser.DROP);
				this.state = 2337;
				this.match(PostgreSQLParser.CONSTRAINT);
				this.state = 2338;
				this.match(PostgreSQLParser.IF_P);
				this.state = 2339;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 2340;
				this.name();
				this.state = 2341;
				this.opt_drop_behavior();
				}
				break;
			case 27:
				this.enterOuterAlt(localctx, 27);
				{
				this.state = 2343;
				this.match(PostgreSQLParser.DROP);
				this.state = 2344;
				this.match(PostgreSQLParser.CONSTRAINT);
				this.state = 2345;
				this.name();
				this.state = 2346;
				this.opt_drop_behavior();
				}
				break;
			case 28:
				this.enterOuterAlt(localctx, 28);
				{
				this.state = 2348;
				this.match(PostgreSQLParser.SET);
				this.state = 2349;
				this.match(PostgreSQLParser.WITHOUT);
				this.state = 2350;
				this.match(PostgreSQLParser.OIDS);
				}
				break;
			case 29:
				this.enterOuterAlt(localctx, 29);
				{
				this.state = 2351;
				this.match(PostgreSQLParser.CLUSTER);
				this.state = 2352;
				this.match(PostgreSQLParser.ON);
				this.state = 2353;
				this.name();
				}
				break;
			case 30:
				this.enterOuterAlt(localctx, 30);
				{
				this.state = 2354;
				this.match(PostgreSQLParser.SET);
				this.state = 2355;
				this.match(PostgreSQLParser.WITHOUT);
				this.state = 2356;
				this.match(PostgreSQLParser.CLUSTER);
				}
				break;
			case 31:
				this.enterOuterAlt(localctx, 31);
				{
				this.state = 2357;
				this.match(PostgreSQLParser.SET);
				this.state = 2358;
				this.match(PostgreSQLParser.LOGGED);
				}
				break;
			case 32:
				this.enterOuterAlt(localctx, 32);
				{
				this.state = 2359;
				this.match(PostgreSQLParser.SET);
				this.state = 2360;
				this.match(PostgreSQLParser.UNLOGGED);
				}
				break;
			case 33:
				this.enterOuterAlt(localctx, 33);
				{
				this.state = 2361;
				this.match(PostgreSQLParser.ENABLE_P);
				this.state = 2362;
				this.match(PostgreSQLParser.TRIGGER);
				this.state = 2363;
				this.name();
				}
				break;
			case 34:
				this.enterOuterAlt(localctx, 34);
				{
				this.state = 2364;
				this.match(PostgreSQLParser.ENABLE_P);
				this.state = 2365;
				this.match(PostgreSQLParser.ALWAYS);
				this.state = 2366;
				this.match(PostgreSQLParser.TRIGGER);
				this.state = 2367;
				this.name();
				}
				break;
			case 35:
				this.enterOuterAlt(localctx, 35);
				{
				this.state = 2368;
				this.match(PostgreSQLParser.ENABLE_P);
				this.state = 2369;
				this.match(PostgreSQLParser.REPLICA);
				this.state = 2370;
				this.match(PostgreSQLParser.TRIGGER);
				this.state = 2371;
				this.name();
				}
				break;
			case 36:
				this.enterOuterAlt(localctx, 36);
				{
				this.state = 2372;
				this.match(PostgreSQLParser.ENABLE_P);
				this.state = 2373;
				this.match(PostgreSQLParser.TRIGGER);
				this.state = 2374;
				this.match(PostgreSQLParser.ALL);
				}
				break;
			case 37:
				this.enterOuterAlt(localctx, 37);
				{
				this.state = 2375;
				this.match(PostgreSQLParser.ENABLE_P);
				this.state = 2376;
				this.match(PostgreSQLParser.TRIGGER);
				this.state = 2377;
				this.match(PostgreSQLParser.USER);
				}
				break;
			case 38:
				this.enterOuterAlt(localctx, 38);
				{
				this.state = 2378;
				this.match(PostgreSQLParser.DISABLE_P);
				this.state = 2379;
				this.match(PostgreSQLParser.TRIGGER);
				this.state = 2380;
				this.name();
				}
				break;
			case 39:
				this.enterOuterAlt(localctx, 39);
				{
				this.state = 2381;
				this.match(PostgreSQLParser.DISABLE_P);
				this.state = 2382;
				this.match(PostgreSQLParser.TRIGGER);
				this.state = 2383;
				this.match(PostgreSQLParser.ALL);
				}
				break;
			case 40:
				this.enterOuterAlt(localctx, 40);
				{
				this.state = 2384;
				this.match(PostgreSQLParser.DISABLE_P);
				this.state = 2385;
				this.match(PostgreSQLParser.TRIGGER);
				this.state = 2386;
				this.match(PostgreSQLParser.USER);
				}
				break;
			case 41:
				this.enterOuterAlt(localctx, 41);
				{
				this.state = 2387;
				this.match(PostgreSQLParser.ENABLE_P);
				this.state = 2388;
				this.match(PostgreSQLParser.RULE);
				this.state = 2389;
				this.name();
				}
				break;
			case 42:
				this.enterOuterAlt(localctx, 42);
				{
				this.state = 2390;
				this.match(PostgreSQLParser.ENABLE_P);
				this.state = 2391;
				this.match(PostgreSQLParser.ALWAYS);
				this.state = 2392;
				this.match(PostgreSQLParser.RULE);
				this.state = 2393;
				this.name();
				}
				break;
			case 43:
				this.enterOuterAlt(localctx, 43);
				{
				this.state = 2394;
				this.match(PostgreSQLParser.ENABLE_P);
				this.state = 2395;
				this.match(PostgreSQLParser.REPLICA);
				this.state = 2396;
				this.match(PostgreSQLParser.RULE);
				this.state = 2397;
				this.name();
				}
				break;
			case 44:
				this.enterOuterAlt(localctx, 44);
				{
				this.state = 2398;
				this.match(PostgreSQLParser.DISABLE_P);
				this.state = 2399;
				this.match(PostgreSQLParser.RULE);
				this.state = 2400;
				this.name();
				}
				break;
			case 45:
				this.enterOuterAlt(localctx, 45);
				{
				this.state = 2401;
				this.match(PostgreSQLParser.INHERIT);
				this.state = 2402;
				this.qualified_name();
				}
				break;
			case 46:
				this.enterOuterAlt(localctx, 46);
				{
				this.state = 2403;
				this.match(PostgreSQLParser.NO);
				this.state = 2404;
				this.match(PostgreSQLParser.INHERIT);
				this.state = 2405;
				this.qualified_name();
				}
				break;
			case 47:
				this.enterOuterAlt(localctx, 47);
				{
				this.state = 2406;
				this.match(PostgreSQLParser.OF);
				this.state = 2407;
				this.any_name();
				}
				break;
			case 48:
				this.enterOuterAlt(localctx, 48);
				{
				this.state = 2408;
				this.match(PostgreSQLParser.NOT);
				this.state = 2409;
				this.match(PostgreSQLParser.OF);
				}
				break;
			case 49:
				this.enterOuterAlt(localctx, 49);
				{
				this.state = 2410;
				this.match(PostgreSQLParser.OWNER);
				this.state = 2411;
				this.match(PostgreSQLParser.TO);
				this.state = 2412;
				this.rolespec();
				}
				break;
			case 50:
				this.enterOuterAlt(localctx, 50);
				{
				this.state = 2413;
				this.match(PostgreSQLParser.SET);
				this.state = 2414;
				this.match(PostgreSQLParser.TABLESPACE);
				this.state = 2415;
				this.name();
				}
				break;
			case 51:
				this.enterOuterAlt(localctx, 51);
				{
				this.state = 2416;
				this.match(PostgreSQLParser.SET);
				this.state = 2417;
				this.reloptions();
				}
				break;
			case 52:
				this.enterOuterAlt(localctx, 52);
				{
				this.state = 2418;
				this.match(PostgreSQLParser.RESET);
				this.state = 2419;
				this.reloptions();
				}
				break;
			case 53:
				this.enterOuterAlt(localctx, 53);
				{
				this.state = 2420;
				this.match(PostgreSQLParser.REPLICA);
				this.state = 2421;
				this.match(PostgreSQLParser.IDENTITY_P);
				this.state = 2422;
				this.replica_identity();
				}
				break;
			case 54:
				this.enterOuterAlt(localctx, 54);
				{
				this.state = 2423;
				this.match(PostgreSQLParser.ENABLE_P);
				this.state = 2424;
				this.match(PostgreSQLParser.ROW);
				this.state = 2425;
				this.match(PostgreSQLParser.LEVEL);
				this.state = 2426;
				this.match(PostgreSQLParser.SECURITY);
				}
				break;
			case 55:
				this.enterOuterAlt(localctx, 55);
				{
				this.state = 2427;
				this.match(PostgreSQLParser.DISABLE_P);
				this.state = 2428;
				this.match(PostgreSQLParser.ROW);
				this.state = 2429;
				this.match(PostgreSQLParser.LEVEL);
				this.state = 2430;
				this.match(PostgreSQLParser.SECURITY);
				}
				break;
			case 56:
				this.enterOuterAlt(localctx, 56);
				{
				this.state = 2431;
				this.match(PostgreSQLParser.FORCE);
				this.state = 2432;
				this.match(PostgreSQLParser.ROW);
				this.state = 2433;
				this.match(PostgreSQLParser.LEVEL);
				this.state = 2434;
				this.match(PostgreSQLParser.SECURITY);
				}
				break;
			case 57:
				this.enterOuterAlt(localctx, 57);
				{
				this.state = 2435;
				this.match(PostgreSQLParser.NO);
				this.state = 2436;
				this.match(PostgreSQLParser.FORCE);
				this.state = 2437;
				this.match(PostgreSQLParser.ROW);
				this.state = 2438;
				this.match(PostgreSQLParser.LEVEL);
				this.state = 2439;
				this.match(PostgreSQLParser.SECURITY);
				}
				break;
			case 58:
				this.enterOuterAlt(localctx, 58);
				{
				this.state = 2440;
				this.alter_generic_options();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alter_column_default(): Alter_column_defaultContext {
		let localctx: Alter_column_defaultContext = new Alter_column_defaultContext(this, this._ctx, this.state);
		this.enterRule(localctx, 106, PostgreSQLParser.RULE_alter_column_default);
		try {
			this.state = 2448;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 324:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2443;
				this.match(PostgreSQLParser.SET);
				this.state = 2444;
				this.match(PostgreSQLParser.DEFAULT);
				this.state = 2445;
				this.a_expr();
				}
				break;
			case 191:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 2446;
				this.match(PostgreSQLParser.DROP);
				this.state = 2447;
				this.match(PostgreSQLParser.DEFAULT);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_drop_behavior(): Opt_drop_behaviorContext {
		let localctx: Opt_drop_behaviorContext = new Opt_drop_behaviorContext(this, this._ctx, this.state);
		this.enterRule(localctx, 108, PostgreSQLParser.RULE_opt_drop_behavior);
		try {
			this.state = 2453;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 150:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2450;
				this.match(PostgreSQLParser.CASCADE);
				}
				break;
			case 306:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 2451;
				this.match(PostgreSQLParser.RESTRICT);
				}
				break;
			case -1:
			case 2:
			case 6:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 88:
			case 92:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 3);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_collate_clause(): Opt_collate_clauseContext {
		let localctx: Opt_collate_clauseContext = new Opt_collate_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 110, PostgreSQLParser.RULE_opt_collate_clause);
		try {
			this.state = 2458;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 43:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2455;
				this.match(PostgreSQLParser.COLLATE);
				this.state = 2456;
				this.any_name();
				}
				break;
			case -1:
			case 2:
			case 3:
			case 6:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 88:
			case 92:
			case 100:
			case 105:
			case 129:
			case 138:
			case 146:
			case 150:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 306:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alter_using(): Alter_usingContext {
		let localctx: Alter_usingContext = new Alter_usingContext(this, this._ctx, this.state);
		this.enterRule(localctx, 112, PostgreSQLParser.RULE_alter_using);
		try {
			this.state = 2463;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 100:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2460;
				this.match(PostgreSQLParser.USING);
				this.state = 2461;
				this.a_expr();
				}
				break;
			case -1:
			case 2:
			case 6:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 88:
			case 92:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public replica_identity(): Replica_identityContext {
		let localctx: Replica_identityContext = new Replica_identityContext(this, this._ctx, this.state);
		this.enterRule(localctx, 114, PostgreSQLParser.RULE_replica_identity);
		try {
			this.state = 2471;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 261:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2465;
				this.match(PostgreSQLParser.NOTHING);
				}
				break;
			case 113:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 2466;
				this.match(PostgreSQLParser.FULL);
				}
				break;
			case 53:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 2467;
				this.match(PostgreSQLParser.DEFAULT);
				}
				break;
			case 100:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 2468;
				this.match(PostgreSQLParser.USING);
				this.state = 2469;
				this.match(PostgreSQLParser.INDEX);
				this.state = 2470;
				this.name();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public reloptions(): ReloptionsContext {
		let localctx: ReloptionsContext = new ReloptionsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 116, PostgreSQLParser.RULE_reloptions);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2473;
			this.match(PostgreSQLParser.OPEN_PAREN);
			this.state = 2474;
			this.reloption_list();
			this.state = 2475;
			this.match(PostgreSQLParser.CLOSE_PAREN);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_reloptions(): Opt_reloptionsContext {
		let localctx: Opt_reloptionsContext = new Opt_reloptionsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 118, PostgreSQLParser.RULE_opt_reloptions);
		try {
			this.state = 2480;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 55, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2477;
				this.match(PostgreSQLParser.WITH);
				this.state = 2478;
				this.reloptions();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public reloption_list(): Reloption_listContext {
		let localctx: Reloption_listContext = new Reloption_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 120, PostgreSQLParser.RULE_reloption_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2482;
			this.reloption_elem();
			this.state = 2487;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 2483;
				this.match(PostgreSQLParser.COMMA);
				this.state = 2484;
				this.reloption_elem();
				}
				}
				this.state = 2489;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public reloption_elem(): Reloption_elemContext {
		let localctx: Reloption_elemContext = new Reloption_elemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 122, PostgreSQLParser.RULE_reloption_elem);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2490;
			this.collabel();
			this.state = 2499;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 10:
				{
				this.state = 2491;
				this.match(PostgreSQLParser.EQUAL);
				this.state = 2492;
				this.def_arg();
				}
				break;
			case 11:
				{
				this.state = 2493;
				this.match(PostgreSQLParser.DOT);
				this.state = 2494;
				this.collabel();
				this.state = 2497;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===10) {
					{
					this.state = 2495;
					this.match(PostgreSQLParser.EQUAL);
					this.state = 2496;
					this.def_arg();
					}
				}

				}
				break;
			case 3:
			case 6:
				break;
			default:
				break;
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alter_identity_column_option_list(): Alter_identity_column_option_listContext {
		let localctx: Alter_identity_column_option_listContext = new Alter_identity_column_option_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 124, PostgreSQLParser.RULE_alter_identity_column_option_list);
		try {
			let _alt: number;
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2502;
			this._errHandler.sync(this);
			_alt = 1;
			do {
				switch (_alt) {
				case 1:
					{
					{
					this.state = 2501;
					this.alter_identity_column_option();
					}
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				this.state = 2504;
				this._errHandler.sync(this);
				_alt = this._interp.adaptivePredict(this._input, 59, this._ctx);
			} while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alter_identity_column_option(): Alter_identity_column_optionContext {
		let localctx: Alter_identity_column_optionContext = new Alter_identity_column_optionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 126, PostgreSQLParser.RULE_alter_identity_column_option);
		try {
			this.state = 2518;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 305:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2506;
				this.match(PostgreSQLParser.RESTART);
				this.state = 2510;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 60, this._ctx) ) {
				case 1:
					{
					this.state = 2507;
					this.opt_with();
					this.state = 2508;
					this.numericonly();
					}
					break;
				}
				}
				break;
			case 324:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 2512;
				this.match(PostgreSQLParser.SET);
				this.state = 2516;
				this._errHandler.sync(this);
				switch (this._input.LA(1)) {
				case 36:
				case 148:
				case 173:
				case 225:
				case 251:
				case 253:
				case 260:
				case 272:
				case 305:
				case 319:
				case 331:
					{
					this.state = 2513;
					this.seqoptelem();
					}
					break;
				case 429:
					{
					this.state = 2514;
					this.match(PostgreSQLParser.GENERATED);
					this.state = 2515;
					this.generated_when();
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public partitionboundspec(): PartitionboundspecContext {
		let localctx: PartitionboundspecContext = new PartitionboundspecContext(this, this._ctx, this.state);
		this.enterRule(localctx, 128, PostgreSQLParser.RULE_partitionboundspec);
		try {
			this.state = 2546;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 63, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2520;
				this.match(PostgreSQLParser.FOR);
				this.state = 2521;
				this.match(PostgreSQLParser.VALUES);
				this.state = 2522;
				this.match(PostgreSQLParser.WITH);
				this.state = 2523;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 2524;
				this.hash_partbound();
				this.state = 2525;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 2527;
				this.match(PostgreSQLParser.FOR);
				this.state = 2528;
				this.match(PostgreSQLParser.VALUES);
				this.state = 2529;
				this.match(PostgreSQLParser.IN_P);
				this.state = 2530;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 2531;
				this.expr_list();
				this.state = 2532;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 2534;
				this.match(PostgreSQLParser.FOR);
				this.state = 2535;
				this.match(PostgreSQLParser.VALUES);
				this.state = 2536;
				this.match(PostgreSQLParser.FROM);
				this.state = 2537;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 2538;
				this.expr_list();
				this.state = 2539;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 2540;
				this.match(PostgreSQLParser.TO);
				this.state = 2541;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 2542;
				this.expr_list();
				this.state = 2543;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 2545;
				this.match(PostgreSQLParser.DEFAULT);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public hash_partbound_elem(): Hash_partbound_elemContext {
		let localctx: Hash_partbound_elemContext = new Hash_partbound_elemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 130, PostgreSQLParser.RULE_hash_partbound_elem);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2548;
			this.nonreservedword();
			this.state = 2549;
			this.iconst();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public hash_partbound(): Hash_partboundContext {
		let localctx: Hash_partboundContext = new Hash_partboundContext(this, this._ctx, this.state);
		this.enterRule(localctx, 132, PostgreSQLParser.RULE_hash_partbound);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2551;
			this.hash_partbound_elem();
			this.state = 2556;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 2552;
				this.match(PostgreSQLParser.COMMA);
				this.state = 2553;
				this.hash_partbound_elem();
				}
				}
				this.state = 2558;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public altercompositetypestmt(): AltercompositetypestmtContext {
		let localctx: AltercompositetypestmtContext = new AltercompositetypestmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 134, PostgreSQLParser.RULE_altercompositetypestmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2559;
			this.match(PostgreSQLParser.ALTER);
			this.state = 2560;
			this.match(PostgreSQLParser.TYPE_P);
			this.state = 2561;
			this.any_name();
			this.state = 2562;
			this.alter_type_cmds();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alter_type_cmds(): Alter_type_cmdsContext {
		let localctx: Alter_type_cmdsContext = new Alter_type_cmdsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 136, PostgreSQLParser.RULE_alter_type_cmds);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2564;
			this.alter_type_cmd();
			this.state = 2569;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 2565;
				this.match(PostgreSQLParser.COMMA);
				this.state = 2566;
				this.alter_type_cmd();
				}
				}
				this.state = 2571;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alter_type_cmd(): Alter_type_cmdContext {
		let localctx: Alter_type_cmdContext = new Alter_type_cmdContext(this, this._ctx, this.state);
		this.enterRule(localctx, 138, PostgreSQLParser.RULE_alter_type_cmd);
		try {
			this.state = 2595;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 133:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2572;
				this.match(PostgreSQLParser.ADD_P);
				this.state = 2573;
				this.match(PostgreSQLParser.ATTRIBUTE);
				this.state = 2574;
				this.tablefuncelement();
				this.state = 2575;
				this.opt_drop_behavior();
				}
				break;
			case 191:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 2577;
				this.match(PostgreSQLParser.DROP);
				this.state = 2578;
				this.match(PostgreSQLParser.ATTRIBUTE);
				this.state = 2581;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 66, this._ctx) ) {
				case 1:
					{
					this.state = 2579;
					this.match(PostgreSQLParser.IF_P);
					this.state = 2580;
					this.match(PostgreSQLParser.EXISTS);
					}
					break;
				}
				this.state = 2583;
				this.colid();
				this.state = 2584;
				this.opt_drop_behavior();
				}
				break;
			case 138:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 2586;
				this.match(PostgreSQLParser.ALTER);
				this.state = 2587;
				this.match(PostgreSQLParser.ATTRIBUTE);
				this.state = 2588;
				this.colid();
				this.state = 2589;
				this.opt_set_data();
				this.state = 2590;
				this.match(PostgreSQLParser.TYPE_P);
				this.state = 2591;
				this.typename();
				this.state = 2592;
				this.opt_collate_clause();
				this.state = 2593;
				this.opt_drop_behavior();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public closeportalstmt(): CloseportalstmtContext {
		let localctx: CloseportalstmtContext = new CloseportalstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 140, PostgreSQLParser.RULE_closeportalstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2597;
			this.match(PostgreSQLParser.CLOSE);
			this.state = 2600;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 92:
			case 116:
			case 123:
			case 124:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
				{
				this.state = 2598;
				this.cursor_name();
				}
				break;
			case 30:
				{
				this.state = 2599;
				this.match(PostgreSQLParser.ALL);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public copystmt(): CopystmtContext {
		let localctx: CopystmtContext = new CopystmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 142, PostgreSQLParser.RULE_copystmt);
		try {
			this.state = 2624;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 69, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2602;
				this.match(PostgreSQLParser.COPY);
				this.state = 2603;
				this.opt_binary();
				this.state = 2604;
				this.qualified_name();
				this.state = 2605;
				this.opt_column_list();
				this.state = 2606;
				this.copy_from();
				this.state = 2607;
				this.opt_program();
				this.state = 2608;
				this.copy_file_name();
				this.state = 2609;
				this.copy_delimiter();
				this.state = 2610;
				this.opt_with();
				this.state = 2611;
				this.copy_options();
				this.state = 2612;
				this.where_clause();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 2614;
				this.match(PostgreSQLParser.COPY);
				this.state = 2615;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 2616;
				this.preparablestmt();
				this.state = 2617;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 2618;
				this.match(PostgreSQLParser.TO);
				this.state = 2619;
				this.opt_program();
				this.state = 2620;
				this.copy_file_name();
				this.state = 2621;
				this.opt_with();
				this.state = 2622;
				this.copy_options();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public copy_from(): Copy_fromContext {
		let localctx: Copy_fromContext = new Copy_fromContext(this, this._ctx, this.state);
		this.enterRule(localctx, 144, PostgreSQLParser.RULE_copy_from);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2626;
			_la = this._input.LA(1);
			if(!(_la===64 || _la===94)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_program(): Opt_programContext {
		let localctx: Opt_programContext = new Opt_programContext(this, this._ctx, this.state);
		this.enterRule(localctx, 146, PostgreSQLParser.RULE_opt_program);
		try {
			this.state = 2630;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 288:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2628;
				this.match(PostgreSQLParser.PROGRAM);
				}
				break;
			case 334:
			case 335:
			case 521:
			case 523:
			case 525:
			case 547:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public copy_file_name(): Copy_file_nameContext {
		let localctx: Copy_file_nameContext = new Copy_file_nameContext(this, this._ctx, this.state);
		this.enterRule(localctx, 148, PostgreSQLParser.RULE_copy_file_name);
		try {
			this.state = 2635;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 521:
			case 523:
			case 525:
			case 547:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2632;
				this.sconst();
				}
				break;
			case 334:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 2633;
				this.match(PostgreSQLParser.STDIN);
				}
				break;
			case 335:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 2634;
				this.match(PostgreSQLParser.STDOUT);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public copy_options(): Copy_optionsContext {
		let localctx: Copy_optionsContext = new Copy_optionsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 150, PostgreSQLParser.RULE_copy_options);
		try {
			this.state = 2642;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 72, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2637;
				this.copy_opt_list();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 2638;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 2639;
				this.copy_generic_opt_list();
				this.state = 2640;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public copy_opt_list(): Copy_opt_listContext {
		let localctx: Copy_opt_listContext = new Copy_opt_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 152, PostgreSQLParser.RULE_copy_opt_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2647;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===78 || _la===107 || _la===112 || ((((_la - 171)) & ~0x1F) === 0 && ((1 << (_la - 171)) & 75501569) !== 0) || _la===209 || _la===216 || _la===289) {
				{
				{
				this.state = 2644;
				this.copy_opt_item();
				}
				}
				this.state = 2649;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public copy_opt_item(): Copy_opt_itemContext {
		let localctx: Copy_opt_itemContext = new Copy_opt_itemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 154, PostgreSQLParser.RULE_copy_opt_item);
		try {
			this.state = 2685;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 74, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2650;
				this.match(PostgreSQLParser.BINARY);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 2651;
				this.match(PostgreSQLParser.FREEZE);
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 2652;
				this.match(PostgreSQLParser.DELIMITER);
				this.state = 2653;
				this.opt_as();
				this.state = 2654;
				this.sconst();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 2656;
				this.match(PostgreSQLParser.NULL_P);
				this.state = 2657;
				this.opt_as();
				this.state = 2658;
				this.sconst();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 2660;
				this.match(PostgreSQLParser.CSV);
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 2661;
				this.match(PostgreSQLParser.HEADER_P);
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 2662;
				this.match(PostgreSQLParser.QUOTE);
				this.state = 2663;
				this.opt_as();
				this.state = 2664;
				this.sconst();
				}
				break;
			case 8:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 2666;
				this.match(PostgreSQLParser.ESCAPE);
				this.state = 2667;
				this.opt_as();
				this.state = 2668;
				this.sconst();
				}
				break;
			case 9:
				this.enterOuterAlt(localctx, 9);
				{
				this.state = 2670;
				this.match(PostgreSQLParser.FORCE);
				this.state = 2671;
				this.match(PostgreSQLParser.QUOTE);
				this.state = 2672;
				this.columnlist();
				}
				break;
			case 10:
				this.enterOuterAlt(localctx, 10);
				{
				this.state = 2673;
				this.match(PostgreSQLParser.FORCE);
				this.state = 2674;
				this.match(PostgreSQLParser.QUOTE);
				this.state = 2675;
				this.match(PostgreSQLParser.STAR);
				}
				break;
			case 11:
				this.enterOuterAlt(localctx, 11);
				{
				this.state = 2676;
				this.match(PostgreSQLParser.FORCE);
				this.state = 2677;
				this.match(PostgreSQLParser.NOT);
				this.state = 2678;
				this.match(PostgreSQLParser.NULL_P);
				this.state = 2679;
				this.columnlist();
				}
				break;
			case 12:
				this.enterOuterAlt(localctx, 12);
				{
				this.state = 2680;
				this.match(PostgreSQLParser.FORCE);
				this.state = 2681;
				this.match(PostgreSQLParser.NULL_P);
				this.state = 2682;
				this.columnlist();
				}
				break;
			case 13:
				this.enterOuterAlt(localctx, 13);
				{
				this.state = 2683;
				this.match(PostgreSQLParser.ENCODING);
				this.state = 2684;
				this.sconst();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_binary(): Opt_binaryContext {
		let localctx: Opt_binaryContext = new Opt_binaryContext(this, this._ctx, this.state);
		this.enterRule(localctx, 156, PostgreSQLParser.RULE_opt_binary);
		try {
			this.state = 2689;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 107:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2687;
				this.match(PostgreSQLParser.BINARY);
				}
				break;
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 92:
			case 116:
			case 123:
			case 124:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public copy_delimiter(): Copy_delimiterContext {
		let localctx: Copy_delimiterContext = new Copy_delimiterContext(this, this._ctx, this.state);
		this.enterRule(localctx, 158, PostgreSQLParser.RULE_copy_delimiter);
		try {
			this.state = 2696;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 100:
			case 184:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2691;
				this.opt_using();
				this.state = 2692;
				this.match(PostgreSQLParser.DELIMITERS);
				this.state = 2693;
				this.sconst();
				}
				break;
			case -1:
			case 2:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 78:
			case 88:
			case 92:
			case 103:
			case 105:
			case 107:
			case 112:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 171:
			case 177:
			case 178:
			case 182:
			case 183:
			case 187:
			case 191:
			case 194:
			case 197:
			case 202:
			case 203:
			case 209:
			case 216:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 289:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_using(): Opt_usingContext {
		let localctx: Opt_usingContext = new Opt_usingContext(this, this._ctx, this.state);
		this.enterRule(localctx, 160, PostgreSQLParser.RULE_opt_using);
		try {
			this.state = 2700;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 100:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2698;
				this.match(PostgreSQLParser.USING);
				}
				break;
			case 184:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public copy_generic_opt_list(): Copy_generic_opt_listContext {
		let localctx: Copy_generic_opt_listContext = new Copy_generic_opt_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 162, PostgreSQLParser.RULE_copy_generic_opt_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2702;
			this.copy_generic_opt_elem();
			this.state = 2707;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 2703;
				this.match(PostgreSQLParser.COMMA);
				this.state = 2704;
				this.copy_generic_opt_elem();
				}
				}
				this.state = 2709;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public copy_generic_opt_elem(): Copy_generic_opt_elemContext {
		let localctx: Copy_generic_opt_elemContext = new Copy_generic_opt_elemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 164, PostgreSQLParser.RULE_copy_generic_opt_elem);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2710;
			this.collabel();
			this.state = 2711;
			this.copy_generic_opt_arg();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public copy_generic_opt_arg(): Copy_generic_opt_argContext {
		let localctx: Copy_generic_opt_argContext = new Copy_generic_opt_argContext(this, this._ctx, this.state);
		this.enterRule(localctx, 166, PostgreSQLParser.RULE_copy_generic_opt_arg);
		try {
			this.state = 2721;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 60:
			case 61:
			case 80:
			case 92:
			case 96:
			case 106:
			case 107:
			case 108:
			case 109:
			case 110:
			case 111:
			case 112:
			case 113:
			case 114:
			case 115:
			case 116:
			case 117:
			case 118:
			case 119:
			case 120:
			case 121:
			case 122:
			case 123:
			case 124:
			case 125:
			case 126:
			case 127:
			case 128:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 463:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 521:
			case 523:
			case 525:
			case 537:
			case 538:
			case 547:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2713;
				this.opt_boolean_or_string();
				}
				break;
			case 12:
			case 13:
			case 534:
			case 536:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 2714;
				this.numericonly();
				}
				break;
			case 9:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 2715;
				this.match(PostgreSQLParser.STAR);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 2716;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 2717;
				this.copy_generic_opt_arg_list();
				this.state = 2718;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 3:
			case 6:
				this.enterOuterAlt(localctx, 5);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public copy_generic_opt_arg_list(): Copy_generic_opt_arg_listContext {
		let localctx: Copy_generic_opt_arg_listContext = new Copy_generic_opt_arg_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 168, PostgreSQLParser.RULE_copy_generic_opt_arg_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2723;
			this.copy_generic_opt_arg_list_item();
			this.state = 2728;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 2724;
				this.match(PostgreSQLParser.COMMA);
				this.state = 2725;
				this.copy_generic_opt_arg_list_item();
				}
				}
				this.state = 2730;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public copy_generic_opt_arg_list_item(): Copy_generic_opt_arg_list_itemContext {
		let localctx: Copy_generic_opt_arg_list_itemContext = new Copy_generic_opt_arg_list_itemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 170, PostgreSQLParser.RULE_copy_generic_opt_arg_list_item);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2731;
			this.opt_boolean_or_string();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createstmt(): CreatestmtContext {
		let localctx: CreatestmtContext = new CreatestmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 172, PostgreSQLParser.RULE_createstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2733;
			this.match(PostgreSQLParser.CREATE);
			this.state = 2734;
			this.opttemp();
			this.state = 2735;
			this.match(PostgreSQLParser.TABLE);
			this.state = 2739;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 81, this._ctx) ) {
			case 1:
				{
				this.state = 2736;
				this.match(PostgreSQLParser.IF_P);
				this.state = 2737;
				this.match(PostgreSQLParser.NOT);
				this.state = 2738;
				this.match(PostgreSQLParser.EXISTS);
				}
				break;
			}
			this.state = 2741;
			this.qualified_name();
			this.state = 2772;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 2:
				{
				this.state = 2742;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 2743;
				this.opttableelementlist();
				this.state = 2744;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 2745;
				this.optinherit();
				this.state = 2746;
				this.optpartitionspec();
				this.state = 2747;
				this.table_access_method_clause();
				this.state = 2748;
				this.optwith();
				this.state = 2749;
				this.oncommitoption();
				this.state = 2750;
				this.opttablespace();
				}
				break;
			case 266:
				{
				this.state = 2752;
				this.match(PostgreSQLParser.OF);
				this.state = 2753;
				this.any_name();
				this.state = 2754;
				this.opttypedtableelementlist();
				this.state = 2755;
				this.optpartitionspec();
				this.state = 2756;
				this.table_access_method_clause();
				this.state = 2757;
				this.optwith();
				this.state = 2758;
				this.oncommitoption();
				this.state = 2759;
				this.opttablespace();
				}
				break;
			case 276:
				{
				this.state = 2761;
				this.match(PostgreSQLParser.PARTITION);
				this.state = 2762;
				this.match(PostgreSQLParser.OF);
				this.state = 2763;
				this.qualified_name();
				this.state = 2764;
				this.opttypedtableelementlist();
				this.state = 2765;
				this.partitionboundspec();
				this.state = 2766;
				this.optpartitionspec();
				this.state = 2767;
				this.table_access_method_clause();
				this.state = 2768;
				this.optwith();
				this.state = 2769;
				this.oncommitoption();
				this.state = 2770;
				this.opttablespace();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opttemp(): OpttempContext {
		let localctx: OpttempContext = new OpttempContext(this, this._ctx, this.state);
		this.enterRule(localctx, 174, PostgreSQLParser.RULE_opttemp);
		let _la: number;
		try {
			this.state = 2782;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 345:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2774;
				this.match(PostgreSQLParser.TEMPORARY);
				}
				break;
			case 343:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 2775;
				this.match(PostgreSQLParser.TEMP);
				}
				break;
			case 245:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 2776;
				this.match(PostgreSQLParser.LOCAL);
				this.state = 2777;
				_la = this._input.LA(1);
				if(!(_la===343 || _la===345)) {
				this._errHandler.recoverInline(this);
				}
				else {
					this._errHandler.reportMatch(this);
				    this.consume();
				}
				}
				break;
			case 213:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 2778;
				this.match(PostgreSQLParser.GLOBAL);
				this.state = 2779;
				_la = this._input.LA(1);
				if(!(_la===343 || _la===345)) {
				this._errHandler.recoverInline(this);
				}
				else {
					this._errHandler.reportMatch(this);
				    this.consume();
				}
				}
				break;
			case 358:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 2780;
				this.match(PostgreSQLParser.UNLOGGED);
				}
				break;
			case 92:
			case 294:
			case 319:
			case 367:
				this.enterOuterAlt(localctx, 6);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opttableelementlist(): OpttableelementlistContext {
		let localctx: OpttableelementlistContext = new OpttableelementlistContext(this, this._ctx, this.state);
		this.enterRule(localctx, 176, PostgreSQLParser.RULE_opttableelementlist);
		try {
			this.state = 2786;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 33:
			case 35:
			case 42:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 63:
			case 85:
			case 92:
			case 98:
			case 116:
			case 120:
			case 123:
			case 124:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2784;
				this.tableelementlist();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opttypedtableelementlist(): OpttypedtableelementlistContext {
		let localctx: OpttypedtableelementlistContext = new OpttypedtableelementlistContext(this, this._ctx, this.state);
		this.enterRule(localctx, 178, PostgreSQLParser.RULE_opttypedtableelementlist);
		try {
			this.state = 2793;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 85, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2788;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 2789;
				this.typedtableelementlist();
				this.state = 2790;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public tableelementlist(): TableelementlistContext {
		let localctx: TableelementlistContext = new TableelementlistContext(this, this._ctx, this.state);
		this.enterRule(localctx, 180, PostgreSQLParser.RULE_tableelementlist);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2795;
			this.tableelement();
			this.state = 2800;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 2796;
				this.match(PostgreSQLParser.COMMA);
				this.state = 2797;
				this.tableelement();
				}
				}
				this.state = 2802;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public typedtableelementlist(): TypedtableelementlistContext {
		let localctx: TypedtableelementlistContext = new TypedtableelementlistContext(this, this._ctx, this.state);
		this.enterRule(localctx, 182, PostgreSQLParser.RULE_typedtableelementlist);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2803;
			this.typedtableelement();
			this.state = 2808;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 2804;
				this.match(PostgreSQLParser.COMMA);
				this.state = 2805;
				this.typedtableelement();
				}
				}
				this.state = 2810;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public tableelement(): TableelementContext {
		let localctx: TableelementContext = new TableelementContext(this, this._ctx, this.state);
		this.enterRule(localctx, 184, PostgreSQLParser.RULE_tableelement);
		try {
			this.state = 2814;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 88, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2811;
				this.columnDef();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 2812;
				this.tablelikeclause();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 2813;
				this.tableconstraint();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public typedtableelement(): TypedtableelementContext {
		let localctx: TypedtableelementContext = new TypedtableelementContext(this, this._ctx, this.state);
		this.enterRule(localctx, 186, PostgreSQLParser.RULE_typedtableelement);
		try {
			this.state = 2818;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 89, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2816;
				this.columnOptions();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 2817;
				this.tableconstraint();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public columnDef(): ColumnDefContext {
		let localctx: ColumnDefContext = new ColumnDefContext(this, this._ctx, this.state);
		this.enterRule(localctx, 188, PostgreSQLParser.RULE_columnDef);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2820;
			this.colid();
			this.state = 2821;
			this.typename();
			this.state = 2822;
			this.create_generic_options();
			this.state = 2823;
			this.colquallist();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public columnOptions(): ColumnOptionsContext {
		let localctx: ColumnOptionsContext = new ColumnOptionsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 190, PostgreSQLParser.RULE_columnOptions);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2825;
			this.colid();
			this.state = 2828;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			if (_la===105) {
				{
				this.state = 2826;
				this.match(PostgreSQLParser.WITH);
				this.state = 2827;
				this.match(PostgreSQLParser.OPTIONS);
				}
			}

			this.state = 2830;
			this.colquallist();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public colquallist(): ColquallistContext {
		let localctx: ColquallistContext = new ColquallistContext(this, this._ctx, this.state);
		this.enterRule(localctx, 192, PostgreSQLParser.RULE_colquallist);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2835;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (((((_la - 42)) & ~0x1F) === 0 && ((1 << (_la - 42)) & 134223883) !== 0) || ((((_la - 77)) & ~0x1F) === 0 && ((1 << (_la - 77)) & 2097923) !== 0) || _la===429) {
				{
				{
				this.state = 2832;
				this.colconstraint();
				}
				}
				this.state = 2837;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public colconstraint(): ColconstraintContext {
		let localctx: ColconstraintContext = new ColconstraintContext(this, this._ctx, this.state);
		this.enterRule(localctx, 194, PostgreSQLParser.RULE_colconstraint);
		try {
			this.state = 2846;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 92, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2838;
				this.match(PostgreSQLParser.CONSTRAINT);
				this.state = 2839;
				this.name();
				this.state = 2840;
				this.colconstraintelem();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 2842;
				this.colconstraintelem();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 2843;
				this.constraintattr();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 2844;
				this.match(PostgreSQLParser.COLLATE);
				this.state = 2845;
				this.any_name();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public colconstraintelem(): ColconstraintelemContext {
		let localctx: ColconstraintelemContext = new ColconstraintelemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 196, PostgreSQLParser.RULE_colconstraintelem);
		try {
			this.state = 2886;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 77:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2848;
				this.match(PostgreSQLParser.NOT);
				this.state = 2849;
				this.match(PostgreSQLParser.NULL_P);
				}
				break;
			case 78:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 2850;
				this.match(PostgreSQLParser.NULL_P);
				}
				break;
			case 98:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 2851;
				this.match(PostgreSQLParser.UNIQUE);
				this.state = 2852;
				this.opt_definition();
				this.state = 2853;
				this.optconstablespace();
				}
				break;
			case 85:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 2855;
				this.match(PostgreSQLParser.PRIMARY);
				this.state = 2856;
				this.match(PostgreSQLParser.KEY);
				this.state = 2857;
				this.opt_definition();
				this.state = 2858;
				this.optconstablespace();
				}
				break;
			case 42:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 2860;
				this.match(PostgreSQLParser.CHECK);
				this.state = 2861;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 2862;
				this.a_expr();
				this.state = 2863;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 2864;
				this.opt_no_inherit();
				}
				break;
			case 53:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 2866;
				this.match(PostgreSQLParser.DEFAULT);
				this.state = 2867;
				this.b_expr(0);
				}
				break;
			case 429:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 2868;
				this.match(PostgreSQLParser.GENERATED);
				this.state = 2869;
				this.generated_when();
				this.state = 2870;
				this.match(PostgreSQLParser.AS);
				this.state = 2878;
				this._errHandler.sync(this);
				switch (this._input.LA(1)) {
				case 219:
					{
					this.state = 2871;
					this.match(PostgreSQLParser.IDENTITY_P);
					this.state = 2872;
					this.optparenthesizedseqoptlist();
					}
					break;
				case 2:
					{
					this.state = 2873;
					this.match(PostgreSQLParser.OPEN_PAREN);
					this.state = 2874;
					this.a_expr();
					this.state = 2875;
					this.match(PostgreSQLParser.CLOSE_PAREN);
					this.state = 2876;
					this.match(PostgreSQLParser.STORED);
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				break;
			case 86:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 2880;
				this.match(PostgreSQLParser.REFERENCES);
				this.state = 2881;
				this.qualified_name();
				this.state = 2882;
				this.opt_column_list();
				this.state = 2883;
				this.key_match();
				this.state = 2884;
				this.key_actions();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public generated_when(): Generated_whenContext {
		let localctx: Generated_whenContext = new Generated_whenContext(this, this._ctx, this.state);
		this.enterRule(localctx, 198, PostgreSQLParser.RULE_generated_when);
		try {
			this.state = 2891;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 139:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2888;
				this.match(PostgreSQLParser.ALWAYS);
				}
				break;
			case 147:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 2889;
				this.match(PostgreSQLParser.BY);
				this.state = 2890;
				this.match(PostgreSQLParser.DEFAULT);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public constraintattr(): ConstraintattrContext {
		let localctx: ConstraintattrContext = new ConstraintattrContext(this, this._ctx, this.state);
		this.enterRule(localctx, 200, PostgreSQLParser.RULE_constraintattr);
		let _la: number;
		try {
			this.state = 2898;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 54:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2893;
				this.match(PostgreSQLParser.DEFERRABLE);
				}
				break;
			case 77:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 2894;
				this.match(PostgreSQLParser.NOT);
				this.state = 2895;
				this.match(PostgreSQLParser.DEFERRABLE);
				}
				break;
			case 69:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 2896;
				this.match(PostgreSQLParser.INITIALLY);
				this.state = 2897;
				_la = this._input.LA(1);
				if(!(_la===180 || _la===221)) {
				this._errHandler.recoverInline(this);
				}
				else {
					this._errHandler.reportMatch(this);
				    this.consume();
				}
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public tablelikeclause(): TablelikeclauseContext {
		let localctx: TablelikeclauseContext = new TablelikeclauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 202, PostgreSQLParser.RULE_tablelikeclause);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2900;
			this.match(PostgreSQLParser.LIKE);
			this.state = 2901;
			this.qualified_name();
			this.state = 2902;
			this.tablelikeoptionlist();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public tablelikeoptionlist(): TablelikeoptionlistContext {
		let localctx: TablelikeoptionlistContext = new TablelikeoptionlistContext(this, this._ctx, this.state);
		this.enterRule(localctx, 204, PostgreSQLParser.RULE_tablelikeoptionlist);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2908;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===200 || _la===224) {
				{
				{
				this.state = 2904;
				_la = this._input.LA(1);
				if(!(_la===200 || _la===224)) {
				this._errHandler.recoverInline(this);
				}
				else {
					this._errHandler.reportMatch(this);
				    this.consume();
				}
				this.state = 2905;
				this.tablelikeoption();
				}
				}
				this.state = 2910;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public tablelikeoption(): TablelikeoptionContext {
		let localctx: TablelikeoptionContext = new TablelikeoptionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 206, PostgreSQLParser.RULE_tablelikeoption);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2911;
			_la = this._input.LA(1);
			if(!(_la===30 || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 524321) !== 0) || _la===219 || _la===227 || _la===333 || _la===336 || _la===429)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public tableconstraint(): TableconstraintContext {
		let localctx: TableconstraintContext = new TableconstraintContext(this, this._ctx, this.state);
		this.enterRule(localctx, 208, PostgreSQLParser.RULE_tableconstraint);
		try {
			this.state = 2918;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 45:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2913;
				this.match(PostgreSQLParser.CONSTRAINT);
				this.state = 2914;
				this.name();
				this.state = 2915;
				this.constraintelem();
				}
				break;
			case 42:
			case 63:
			case 85:
			case 98:
			case 199:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 2917;
				this.constraintelem();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public constraintelem(): ConstraintelemContext {
		let localctx: ConstraintelemContext = new ConstraintelemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 210, PostgreSQLParser.RULE_constraintelem);
		try {
			this.state = 2978;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 42:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2920;
				this.match(PostgreSQLParser.CHECK);
				this.state = 2921;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 2922;
				this.a_expr();
				this.state = 2923;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 2924;
				this.constraintattributespec();
				}
				break;
			case 98:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 2926;
				this.match(PostgreSQLParser.UNIQUE);
				this.state = 2938;
				this._errHandler.sync(this);
				switch (this._input.LA(1)) {
				case 2:
					{
					this.state = 2927;
					this.match(PostgreSQLParser.OPEN_PAREN);
					this.state = 2928;
					this.columnlist();
					this.state = 2929;
					this.match(PostgreSQLParser.CLOSE_PAREN);
					this.state = 2930;
					this.opt_c_include();
					this.state = 2931;
					this.opt_definition();
					this.state = 2932;
					this.optconstablespace();
					this.state = 2933;
					this.constraintattributespec();
					}
					break;
				case 100:
					{
					this.state = 2935;
					this.existingindex();
					this.state = 2936;
					this.constraintattributespec();
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				break;
			case 85:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 2940;
				this.match(PostgreSQLParser.PRIMARY);
				this.state = 2941;
				this.match(PostgreSQLParser.KEY);
				this.state = 2953;
				this._errHandler.sync(this);
				switch (this._input.LA(1)) {
				case 2:
					{
					this.state = 2942;
					this.match(PostgreSQLParser.OPEN_PAREN);
					this.state = 2943;
					this.columnlist();
					this.state = 2944;
					this.match(PostgreSQLParser.CLOSE_PAREN);
					this.state = 2945;
					this.opt_c_include();
					this.state = 2946;
					this.opt_definition();
					this.state = 2947;
					this.optconstablespace();
					this.state = 2948;
					this.constraintattributespec();
					}
					break;
				case 100:
					{
					this.state = 2950;
					this.existingindex();
					this.state = 2951;
					this.constraintattributespec();
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				break;
			case 199:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 2955;
				this.match(PostgreSQLParser.EXCLUDE);
				this.state = 2956;
				this.access_method_clause();
				this.state = 2957;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 2958;
				this.exclusionconstraintlist();
				this.state = 2959;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 2960;
				this.opt_c_include();
				this.state = 2961;
				this.opt_definition();
				this.state = 2962;
				this.optconstablespace();
				this.state = 2963;
				this.exclusionwhereclause();
				this.state = 2964;
				this.constraintattributespec();
				}
				break;
			case 63:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 2966;
				this.match(PostgreSQLParser.FOREIGN);
				this.state = 2967;
				this.match(PostgreSQLParser.KEY);
				this.state = 2968;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 2969;
				this.columnlist();
				this.state = 2970;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 2971;
				this.match(PostgreSQLParser.REFERENCES);
				this.state = 2972;
				this.qualified_name();
				this.state = 2973;
				this.opt_column_list();
				this.state = 2974;
				this.key_match();
				this.state = 2975;
				this.key_actions();
				this.state = 2976;
				this.constraintattributespec();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_no_inherit(): Opt_no_inheritContext {
		let localctx: Opt_no_inheritContext = new Opt_no_inheritContext(this, this._ctx, this.state);
		this.enterRule(localctx, 212, PostgreSQLParser.RULE_opt_no_inherit);
		try {
			this.state = 2983;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 260:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2980;
				this.match(PostgreSQLParser.NO);
				this.state = 2981;
				this.match(PostgreSQLParser.INHERIT);
				}
				break;
			case -1:
			case 2:
			case 3:
			case 6:
			case 7:
			case 31:
			case 32:
			case 42:
			case 43:
			case 45:
			case 46:
			case 53:
			case 54:
			case 57:
			case 61:
			case 65:
			case 69:
			case 71:
			case 77:
			case 78:
			case 85:
			case 86:
			case 88:
			case 92:
			case 98:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 429:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_column_list(): Opt_column_listContext {
		let localctx: Opt_column_listContext = new Opt_column_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 214, PostgreSQLParser.RULE_opt_column_list);
		try {
			this.state = 2990;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 103, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 2985;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 2986;
				this.columnlist();
				this.state = 2987;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public columnlist(): ColumnlistContext {
		let localctx: ColumnlistContext = new ColumnlistContext(this, this._ctx, this.state);
		this.enterRule(localctx, 216, PostgreSQLParser.RULE_columnlist);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 2992;
			this.columnElem();
			this.state = 2997;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 2993;
				this.match(PostgreSQLParser.COMMA);
				this.state = 2994;
				this.columnElem();
				}
				}
				this.state = 2999;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public columnElem(): ColumnElemContext {
		let localctx: ColumnElemContext = new ColumnElemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 218, PostgreSQLParser.RULE_columnElem);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3000;
			this.colid();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_c_include(): Opt_c_includeContext {
		let localctx: Opt_c_includeContext = new Opt_c_includeContext(this, this._ctx, this.state);
		this.enterRule(localctx, 220, PostgreSQLParser.RULE_opt_c_include);
		try {
			this.state = 3008;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 432:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3002;
				this.match(PostgreSQLParser.INCLUDE);
				this.state = 3003;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 3004;
				this.columnlist();
				this.state = 3005;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case -1:
			case 2:
			case 3:
			case 6:
			case 7:
			case 31:
			case 32:
			case 46:
			case 54:
			case 57:
			case 61:
			case 65:
			case 69:
			case 71:
			case 77:
			case 88:
			case 92:
			case 100:
			case 103:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 260:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public key_match(): Key_matchContext {
		let localctx: Key_matchContext = new Key_matchContext(this, this._ctx, this.state);
		this.enterRule(localctx, 222, PostgreSQLParser.RULE_key_match);
		let _la: number;
		try {
			this.state = 3013;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 249:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3010;
				this.match(PostgreSQLParser.MATCH);
				this.state = 3011;
				_la = this._input.LA(1);
				if(!(_la===113 || _la===275 || _la===327)) {
				this._errHandler.recoverInline(this);
				}
				else {
					this._errHandler.reportMatch(this);
				    this.consume();
				}
				}
				break;
			case -1:
			case 2:
			case 3:
			case 6:
			case 7:
			case 31:
			case 32:
			case 42:
			case 43:
			case 45:
			case 46:
			case 53:
			case 54:
			case 57:
			case 61:
			case 65:
			case 69:
			case 71:
			case 77:
			case 78:
			case 80:
			case 85:
			case 86:
			case 88:
			case 92:
			case 98:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 260:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 429:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public exclusionconstraintlist(): ExclusionconstraintlistContext {
		let localctx: ExclusionconstraintlistContext = new ExclusionconstraintlistContext(this, this._ctx, this.state);
		this.enterRule(localctx, 224, PostgreSQLParser.RULE_exclusionconstraintlist);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3015;
			this.exclusionconstraintelem();
			this.state = 3020;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 3016;
				this.match(PostgreSQLParser.COMMA);
				this.state = 3017;
				this.exclusionconstraintelem();
				}
				}
				this.state = 3022;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public exclusionconstraintelem(): ExclusionconstraintelemContext {
		let localctx: ExclusionconstraintelemContext = new ExclusionconstraintelemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 226, PostgreSQLParser.RULE_exclusionconstraintelem);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3023;
			this.index_elem();
			this.state = 3024;
			this.match(PostgreSQLParser.WITH);
			this.state = 3031;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 108, this._ctx) ) {
			case 1:
				{
				this.state = 3025;
				this.any_operator();
				}
				break;
			case 2:
				{
				this.state = 3026;
				this.match(PostgreSQLParser.OPERATOR);
				this.state = 3027;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 3028;
				this.any_operator();
				this.state = 3029;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public exclusionwhereclause(): ExclusionwhereclauseContext {
		let localctx: ExclusionwhereclauseContext = new ExclusionwhereclauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 228, PostgreSQLParser.RULE_exclusionwhereclause);
		try {
			this.state = 3039;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 103:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3033;
				this.match(PostgreSQLParser.WHERE);
				this.state = 3034;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 3035;
				this.a_expr();
				this.state = 3036;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case -1:
			case 2:
			case 3:
			case 6:
			case 7:
			case 31:
			case 32:
			case 46:
			case 54:
			case 57:
			case 61:
			case 65:
			case 69:
			case 71:
			case 77:
			case 88:
			case 92:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 260:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public key_actions(): Key_actionsContext {
		let localctx: Key_actionsContext = new Key_actionsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 230, PostgreSQLParser.RULE_key_actions);
		try {
			this.state = 3050;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 110, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3041;
				this.key_update();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 3042;
				this.key_delete();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 3043;
				this.key_update();
				this.state = 3044;
				this.key_delete();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 3046;
				this.key_delete();
				this.state = 3047;
				this.key_update();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public key_update(): Key_updateContext {
		let localctx: Key_updateContext = new Key_updateContext(this, this._ctx, this.state);
		this.enterRule(localctx, 232, PostgreSQLParser.RULE_key_update);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3052;
			this.match(PostgreSQLParser.ON);
			this.state = 3053;
			this.match(PostgreSQLParser.UPDATE);
			this.state = 3054;
			this.key_action();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public key_delete(): Key_deleteContext {
		let localctx: Key_deleteContext = new Key_deleteContext(this, this._ctx, this.state);
		this.enterRule(localctx, 234, PostgreSQLParser.RULE_key_delete);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3056;
			this.match(PostgreSQLParser.ON);
			this.state = 3057;
			this.match(PostgreSQLParser.DELETE_P);
			this.state = 3058;
			this.key_action();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public key_action(): Key_actionContext {
		let localctx: Key_actionContext = new Key_actionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 236, PostgreSQLParser.RULE_key_action);
		let _la: number;
		try {
			this.state = 3066;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 260:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3060;
				this.match(PostgreSQLParser.NO);
				this.state = 3061;
				this.match(PostgreSQLParser.ACTION);
				}
				break;
			case 306:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 3062;
				this.match(PostgreSQLParser.RESTRICT);
				}
				break;
			case 150:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 3063;
				this.match(PostgreSQLParser.CASCADE);
				}
				break;
			case 324:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 3064;
				this.match(PostgreSQLParser.SET);
				this.state = 3065;
				_la = this._input.LA(1);
				if(!(_la===53 || _la===78)) {
				this._errHandler.recoverInline(this);
				}
				else {
					this._errHandler.reportMatch(this);
				    this.consume();
				}
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public optinherit(): OptinheritContext {
		let localctx: OptinheritContext = new OptinheritContext(this, this._ctx, this.state);
		this.enterRule(localctx, 238, PostgreSQLParser.RULE_optinherit);
		try {
			this.state = 3074;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 229:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3068;
				this.match(PostgreSQLParser.INHERITS);
				this.state = 3069;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 3070;
				this.qualified_name_list();
				this.state = 3071;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case -1:
			case 2:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 80:
			case 88:
			case 92:
			case 100:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 276:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 322:
			case 324:
			case 326:
			case 331:
			case 342:
			case 349:
			case 357:
			case 360:
			case 361:
			case 370:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public optpartitionspec(): OptpartitionspecContext {
		let localctx: OptpartitionspecContext = new OptpartitionspecContext(this, this._ctx, this.state);
		this.enterRule(localctx, 240, PostgreSQLParser.RULE_optpartitionspec);
		try {
			this.state = 3078;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 276:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3076;
				this.partitionspec();
				}
				break;
			case -1:
			case 2:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 80:
			case 88:
			case 92:
			case 100:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 342:
			case 349:
			case 357:
			case 360:
			case 361:
			case 370:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public partitionspec(): PartitionspecContext {
		let localctx: PartitionspecContext = new PartitionspecContext(this, this._ctx, this.state);
		this.enterRule(localctx, 242, PostgreSQLParser.RULE_partitionspec);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3080;
			this.match(PostgreSQLParser.PARTITION);
			this.state = 3081;
			this.match(PostgreSQLParser.BY);
			this.state = 3082;
			this.colid();
			this.state = 3083;
			this.match(PostgreSQLParser.OPEN_PAREN);
			this.state = 3084;
			this.part_params();
			this.state = 3085;
			this.match(PostgreSQLParser.CLOSE_PAREN);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public part_params(): Part_paramsContext {
		let localctx: Part_paramsContext = new Part_paramsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 244, PostgreSQLParser.RULE_part_params);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3087;
			this.part_elem();
			this.state = 3092;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 3088;
				this.match(PostgreSQLParser.COMMA);
				this.state = 3089;
				this.part_elem();
				}
				}
				this.state = 3094;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public part_elem(): Part_elemContext {
		let localctx: Part_elemContext = new Part_elemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 246, PostgreSQLParser.RULE_part_elem);
		try {
			this.state = 3109;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 115, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3095;
				this.colid();
				this.state = 3096;
				this.opt_collate();
				this.state = 3097;
				this.opt_class();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 3099;
				this.func_expr_windowless();
				this.state = 3100;
				this.opt_collate();
				this.state = 3101;
				this.opt_class();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 3103;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 3104;
				this.a_expr();
				this.state = 3105;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 3106;
				this.opt_collate();
				this.state = 3107;
				this.opt_class();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public table_access_method_clause(): Table_access_method_clauseContext {
		let localctx: Table_access_method_clauseContext = new Table_access_method_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 248, PostgreSQLParser.RULE_table_access_method_clause);
		try {
			this.state = 3114;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 100:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3111;
				this.match(PostgreSQLParser.USING);
				this.state = 3112;
				this.name();
				}
				break;
			case -1:
			case 2:
			case 7:
			case 31:
			case 32:
			case 36:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 80:
			case 88:
			case 92:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 342:
			case 349:
			case 357:
			case 360:
			case 361:
			case 370:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public optwith(): OptwithContext {
		let localctx: OptwithContext = new OptwithContext(this, this._ctx, this.state);
		this.enterRule(localctx, 250, PostgreSQLParser.RULE_optwith);
		try {
			this.state = 3121;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 117, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3116;
				this.match(PostgreSQLParser.WITH);
				this.state = 3117;
				this.reloptions();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 3118;
				this.match(PostgreSQLParser.WITHOUT);
				this.state = 3119;
				this.match(PostgreSQLParser.OIDS);
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public oncommitoption(): OncommitoptionContext {
		let localctx: OncommitoptionContext = new OncommitoptionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 252, PostgreSQLParser.RULE_oncommitoption);
		try {
			this.state = 3133;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 80:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3123;
				this.match(PostgreSQLParser.ON);
				this.state = 3124;
				this.match(PostgreSQLParser.COMMIT);
				this.state = 3130;
				this._errHandler.sync(this);
				switch (this._input.LA(1)) {
				case 191:
					{
					this.state = 3125;
					this.match(PostgreSQLParser.DROP);
					}
					break;
				case 182:
					{
					this.state = 3126;
					this.match(PostgreSQLParser.DELETE_P);
					this.state = 3127;
					this.match(PostgreSQLParser.ROWS);
					}
					break;
				case 283:
					{
					this.state = 3128;
					this.match(PostgreSQLParser.PRESERVE);
					this.state = 3129;
					this.match(PostgreSQLParser.ROWS);
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				break;
			case -1:
			case 2:
			case 7:
			case 31:
			case 32:
			case 36:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 88:
			case 92:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 342:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opttablespace(): OpttablespaceContext {
		let localctx: OpttablespaceContext = new OpttablespaceContext(this, this._ctx, this.state);
		this.enterRule(localctx, 254, PostgreSQLParser.RULE_opttablespace);
		try {
			this.state = 3138;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 342:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3135;
				this.match(PostgreSQLParser.TABLESPACE);
				this.state = 3136;
				this.name();
				}
				break;
			case -1:
			case 2:
			case 7:
			case 31:
			case 32:
			case 36:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 88:
			case 92:
			case 103:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public optconstablespace(): OptconstablespaceContext {
		let localctx: OptconstablespaceContext = new OptconstablespaceContext(this, this._ctx, this.state);
		this.enterRule(localctx, 256, PostgreSQLParser.RULE_optconstablespace);
		try {
			this.state = 3145;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 100:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3140;
				this.match(PostgreSQLParser.USING);
				this.state = 3141;
				this.match(PostgreSQLParser.INDEX);
				this.state = 3142;
				this.match(PostgreSQLParser.TABLESPACE);
				this.state = 3143;
				this.name();
				}
				break;
			case -1:
			case 2:
			case 3:
			case 6:
			case 7:
			case 31:
			case 32:
			case 42:
			case 43:
			case 45:
			case 46:
			case 53:
			case 54:
			case 57:
			case 61:
			case 65:
			case 69:
			case 71:
			case 77:
			case 78:
			case 85:
			case 86:
			case 88:
			case 92:
			case 98:
			case 103:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 260:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 429:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public existingindex(): ExistingindexContext {
		let localctx: ExistingindexContext = new ExistingindexContext(this, this._ctx, this.state);
		this.enterRule(localctx, 258, PostgreSQLParser.RULE_existingindex);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3147;
			this.match(PostgreSQLParser.USING);
			this.state = 3148;
			this.match(PostgreSQLParser.INDEX);
			this.state = 3149;
			this.name();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createstatsstmt(): CreatestatsstmtContext {
		let localctx: CreatestatsstmtContext = new CreatestatsstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 260, PostgreSQLParser.RULE_createstatsstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3151;
			this.match(PostgreSQLParser.CREATE);
			this.state = 3152;
			this.match(PostgreSQLParser.STATISTICS);
			this.state = 3156;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 122, this._ctx) ) {
			case 1:
				{
				this.state = 3153;
				this.match(PostgreSQLParser.IF_P);
				this.state = 3154;
				this.match(PostgreSQLParser.NOT);
				this.state = 3155;
				this.match(PostgreSQLParser.EXISTS);
				}
				break;
			}
			this.state = 3158;
			this.any_name();
			this.state = 3159;
			this.opt_name_list();
			this.state = 3160;
			this.match(PostgreSQLParser.ON);
			this.state = 3161;
			this.expr_list();
			this.state = 3162;
			this.match(PostgreSQLParser.FROM);
			this.state = 3163;
			this.from_list();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alterstatsstmt(): AlterstatsstmtContext {
		let localctx: AlterstatsstmtContext = new AlterstatsstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 262, PostgreSQLParser.RULE_alterstatsstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3165;
			this.match(PostgreSQLParser.ALTER);
			this.state = 3166;
			this.match(PostgreSQLParser.STATISTICS);
			this.state = 3169;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 123, this._ctx) ) {
			case 1:
				{
				this.state = 3167;
				this.match(PostgreSQLParser.IF_P);
				this.state = 3168;
				this.match(PostgreSQLParser.EXISTS);
				}
				break;
			}
			this.state = 3171;
			this.any_name();
			this.state = 3172;
			this.match(PostgreSQLParser.SET);
			this.state = 3173;
			this.match(PostgreSQLParser.STATISTICS);
			this.state = 3174;
			this.signediconst();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createasstmt(): CreateasstmtContext {
		let localctx: CreateasstmtContext = new CreateasstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 264, PostgreSQLParser.RULE_createasstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3176;
			this.match(PostgreSQLParser.CREATE);
			this.state = 3177;
			this.opttemp();
			this.state = 3178;
			this.match(PostgreSQLParser.TABLE);
			this.state = 3182;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 124, this._ctx) ) {
			case 1:
				{
				this.state = 3179;
				this.match(PostgreSQLParser.IF_P);
				this.state = 3180;
				this.match(PostgreSQLParser.NOT);
				this.state = 3181;
				this.match(PostgreSQLParser.EXISTS);
				}
				break;
			}
			this.state = 3184;
			this.create_as_target();
			this.state = 3185;
			this.match(PostgreSQLParser.AS);
			this.state = 3186;
			this.selectstmt();
			this.state = 3187;
			this.opt_with_data();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public create_as_target(): Create_as_targetContext {
		let localctx: Create_as_targetContext = new Create_as_targetContext(this, this._ctx, this.state);
		this.enterRule(localctx, 266, PostgreSQLParser.RULE_create_as_target);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3189;
			this.qualified_name();
			this.state = 3190;
			this.opt_column_list();
			this.state = 3191;
			this.table_access_method_clause();
			this.state = 3192;
			this.optwith();
			this.state = 3193;
			this.oncommitoption();
			this.state = 3194;
			this.opttablespace();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_with_data(): Opt_with_dataContext {
		let localctx: Opt_with_dataContext = new Opt_with_dataContext(this, this._ctx, this.state);
		this.enterRule(localctx, 268, PostgreSQLParser.RULE_opt_with_data);
		try {
			this.state = 3203;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 126, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3196;
				this.match(PostgreSQLParser.WITH);
				this.state = 3200;
				this._errHandler.sync(this);
				switch (this._input.LA(1)) {
				case 174:
					{
					this.state = 3197;
					this.match(PostgreSQLParser.DATA_P);
					}
					break;
				case 260:
					{
					this.state = 3198;
					this.match(PostgreSQLParser.NO);
					this.state = 3199;
					this.match(PostgreSQLParser.DATA_P);
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public creatematviewstmt(): CreatematviewstmtContext {
		let localctx: CreatematviewstmtContext = new CreatematviewstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 270, PostgreSQLParser.RULE_creatematviewstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3205;
			this.match(PostgreSQLParser.CREATE);
			this.state = 3206;
			this.optnolog();
			this.state = 3207;
			this.match(PostgreSQLParser.MATERIALIZED);
			this.state = 3208;
			this.match(PostgreSQLParser.VIEW);
			this.state = 3212;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 127, this._ctx) ) {
			case 1:
				{
				this.state = 3209;
				this.match(PostgreSQLParser.IF_P);
				this.state = 3210;
				this.match(PostgreSQLParser.NOT);
				this.state = 3211;
				this.match(PostgreSQLParser.EXISTS);
				}
				break;
			}
			this.state = 3214;
			this.create_mv_target();
			this.state = 3215;
			this.match(PostgreSQLParser.AS);
			this.state = 3216;
			this.selectstmt();
			this.state = 3217;
			this.opt_with_data();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public create_mv_target(): Create_mv_targetContext {
		let localctx: Create_mv_targetContext = new Create_mv_targetContext(this, this._ctx, this.state);
		this.enterRule(localctx, 272, PostgreSQLParser.RULE_create_mv_target);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3219;
			this.qualified_name();
			this.state = 3220;
			this.opt_column_list();
			this.state = 3221;
			this.table_access_method_clause();
			this.state = 3222;
			this.opt_reloptions();
			this.state = 3223;
			this.opttablespace();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public optnolog(): OptnologContext {
		let localctx: OptnologContext = new OptnologContext(this, this._ctx, this.state);
		this.enterRule(localctx, 274, PostgreSQLParser.RULE_optnolog);
		try {
			this.state = 3227;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 358:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3225;
				this.match(PostgreSQLParser.UNLOGGED);
				}
				break;
			case 250:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public refreshmatviewstmt(): RefreshmatviewstmtContext {
		let localctx: RefreshmatviewstmtContext = new RefreshmatviewstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 276, PostgreSQLParser.RULE_refreshmatviewstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3229;
			this.match(PostgreSQLParser.REFRESH);
			this.state = 3230;
			this.match(PostgreSQLParser.MATERIALIZED);
			this.state = 3231;
			this.match(PostgreSQLParser.VIEW);
			this.state = 3232;
			this.opt_concurrently();
			this.state = 3233;
			this.qualified_name();
			this.state = 3234;
			this.opt_with_data();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createseqstmt(): CreateseqstmtContext {
		let localctx: CreateseqstmtContext = new CreateseqstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 278, PostgreSQLParser.RULE_createseqstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3236;
			this.match(PostgreSQLParser.CREATE);
			this.state = 3237;
			this.opttemp();
			this.state = 3238;
			this.match(PostgreSQLParser.SEQUENCE);
			this.state = 3242;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 129, this._ctx) ) {
			case 1:
				{
				this.state = 3239;
				this.match(PostgreSQLParser.IF_P);
				this.state = 3240;
				this.match(PostgreSQLParser.NOT);
				this.state = 3241;
				this.match(PostgreSQLParser.EXISTS);
				}
				break;
			}
			this.state = 3244;
			this.qualified_name();
			this.state = 3245;
			this.optseqoptlist();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alterseqstmt(): AlterseqstmtContext {
		let localctx: AlterseqstmtContext = new AlterseqstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 280, PostgreSQLParser.RULE_alterseqstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3247;
			this.match(PostgreSQLParser.ALTER);
			this.state = 3248;
			this.match(PostgreSQLParser.SEQUENCE);
			this.state = 3251;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 130, this._ctx) ) {
			case 1:
				{
				this.state = 3249;
				this.match(PostgreSQLParser.IF_P);
				this.state = 3250;
				this.match(PostgreSQLParser.EXISTS);
				}
				break;
			}
			this.state = 3253;
			this.qualified_name();
			this.state = 3254;
			this.seqoptlist();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public optseqoptlist(): OptseqoptlistContext {
		let localctx: OptseqoptlistContext = new OptseqoptlistContext(this, this._ctx, this.state);
		this.enterRule(localctx, 282, PostgreSQLParser.RULE_optseqoptlist);
		try {
			this.state = 3258;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 131, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3256;
				this.seqoptlist();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public optparenthesizedseqoptlist(): OptparenthesizedseqoptlistContext {
		let localctx: OptparenthesizedseqoptlistContext = new OptparenthesizedseqoptlistContext(this, this._ctx, this.state);
		this.enterRule(localctx, 284, PostgreSQLParser.RULE_optparenthesizedseqoptlist);
		try {
			this.state = 3265;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 132, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3260;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 3261;
				this.seqoptlist();
				this.state = 3262;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public seqoptlist(): SeqoptlistContext {
		let localctx: SeqoptlistContext = new SeqoptlistContext(this, this._ctx, this.state);
		this.enterRule(localctx, 286, PostgreSQLParser.RULE_seqoptlist);
		try {
			let _alt: number;
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3268;
			this._errHandler.sync(this);
			_alt = 1;
			do {
				switch (_alt) {
				case 1:
					{
					{
					this.state = 3267;
					this.seqoptelem();
					}
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				this.state = 3270;
				this._errHandler.sync(this);
				_alt = this._interp.adaptivePredict(this._input, 133, this._ctx);
			} while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public seqoptelem(): SeqoptelemContext {
		let localctx: SeqoptelemContext = new SeqoptelemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 288, PostgreSQLParser.RULE_seqoptelem);
		let _la: number;
		try {
			this.state = 3302;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 36:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3272;
				this.match(PostgreSQLParser.AS);
				this.state = 3273;
				this.simpletypename();
				}
				break;
			case 148:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 3274;
				this.match(PostgreSQLParser.CACHE);
				this.state = 3275;
				this.numericonly();
				}
				break;
			case 173:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 3276;
				this.match(PostgreSQLParser.CYCLE);
				}
				break;
			case 225:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 3277;
				this.match(PostgreSQLParser.INCREMENT);
				this.state = 3278;
				this.opt_by();
				this.state = 3279;
				this.numericonly();
				}
				break;
			case 251:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 3281;
				this.match(PostgreSQLParser.MAXVALUE);
				this.state = 3282;
				this.numericonly();
				}
				break;
			case 253:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 3283;
				this.match(PostgreSQLParser.MINVALUE);
				this.state = 3284;
				this.numericonly();
				}
				break;
			case 260:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 3285;
				this.match(PostgreSQLParser.NO);
				this.state = 3286;
				_la = this._input.LA(1);
				if(!(_la===173 || _la===251 || _la===253)) {
				this._errHandler.recoverInline(this);
				}
				else {
					this._errHandler.reportMatch(this);
				    this.consume();
				}
				}
				break;
			case 272:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 3287;
				this.match(PostgreSQLParser.OWNED);
				this.state = 3288;
				this.match(PostgreSQLParser.BY);
				this.state = 3289;
				this.any_name();
				}
				break;
			case 319:
				this.enterOuterAlt(localctx, 9);
				{
				this.state = 3290;
				this.match(PostgreSQLParser.SEQUENCE);
				this.state = 3291;
				this.match(PostgreSQLParser.NAME_P);
				this.state = 3292;
				this.any_name();
				}
				break;
			case 331:
				this.enterOuterAlt(localctx, 10);
				{
				this.state = 3293;
				this.match(PostgreSQLParser.START);
				this.state = 3294;
				this.opt_with();
				this.state = 3295;
				this.numericonly();
				}
				break;
			case 305:
				this.enterOuterAlt(localctx, 11);
				{
				this.state = 3297;
				this.match(PostgreSQLParser.RESTART);
				this.state = 3298;
				this.opt_with();
				this.state = 3300;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===12 || _la===13 || _la===534 || _la===536) {
					{
					this.state = 3299;
					this.numericonly();
					}
				}

				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_by(): Opt_byContext {
		let localctx: Opt_byContext = new Opt_byContext(this, this._ctx, this.state);
		this.enterRule(localctx, 290, PostgreSQLParser.RULE_opt_by);
		try {
			this.state = 3306;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 147:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3304;
				this.match(PostgreSQLParser.BY);
				}
				break;
			case 12:
			case 13:
			case 534:
			case 536:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public numericonly(): NumericonlyContext {
		let localctx: NumericonlyContext = new NumericonlyContext(this, this._ctx, this.state);
		this.enterRule(localctx, 292, PostgreSQLParser.RULE_numericonly);
		try {
			this.state = 3314;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 137, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3308;
				this.fconst();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 3309;
				this.match(PostgreSQLParser.PLUS);
				this.state = 3310;
				this.fconst();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 3311;
				this.match(PostgreSQLParser.MINUS);
				this.state = 3312;
				this.fconst();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 3313;
				this.signediconst();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public numericonly_list(): Numericonly_listContext {
		let localctx: Numericonly_listContext = new Numericonly_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 294, PostgreSQLParser.RULE_numericonly_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3316;
			this.numericonly();
			this.state = 3321;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 3317;
				this.match(PostgreSQLParser.COMMA);
				this.state = 3318;
				this.numericonly();
				}
				}
				this.state = 3323;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createplangstmt(): CreateplangstmtContext {
		let localctx: CreateplangstmtContext = new CreateplangstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 296, PostgreSQLParser.RULE_createplangstmt);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3324;
			this.match(PostgreSQLParser.CREATE);
			this.state = 3325;
			this.opt_or_replace();
			this.state = 3326;
			this.opt_trusted();
			this.state = 3327;
			this.opt_procedural();
			this.state = 3328;
			this.match(PostgreSQLParser.LANGUAGE);
			this.state = 3329;
			this.name();
			this.state = 3335;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			if (_la===215) {
				{
				this.state = 3330;
				this.match(PostgreSQLParser.HANDLER);
				this.state = 3331;
				this.handler_name();
				this.state = 3332;
				this.opt_inline_handler();
				this.state = 3333;
				this.opt_validator();
				}
			}

			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_trusted(): Opt_trustedContext {
		let localctx: Opt_trustedContext = new Opt_trustedContext(this, this._ctx, this.state);
		this.enterRule(localctx, 298, PostgreSQLParser.RULE_opt_trusted);
		try {
			this.state = 3339;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 350:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3337;
				this.match(PostgreSQLParser.TRUSTED);
				}
				break;
			case 238:
			case 286:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public handler_name(): Handler_nameContext {
		let localctx: Handler_nameContext = new Handler_nameContext(this, this._ctx, this.state);
		this.enterRule(localctx, 300, PostgreSQLParser.RULE_handler_name);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3341;
			this.name();
			this.state = 3343;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			if (_la===11) {
				{
				this.state = 3342;
				this.attrs();
				}
			}

			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_inline_handler(): Opt_inline_handlerContext {
		let localctx: Opt_inline_handlerContext = new Opt_inline_handlerContext(this, this._ctx, this.state);
		this.enterRule(localctx, 302, PostgreSQLParser.RULE_opt_inline_handler);
		try {
			this.state = 3348;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 230:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3345;
				this.match(PostgreSQLParser.INLINE_P);
				this.state = 3346;
				this.handler_name();
				}
				break;
			case -1:
			case 2:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 88:
			case 92:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 260:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 364:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public validator_clause(): Validator_clauseContext {
		let localctx: Validator_clauseContext = new Validator_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 304, PostgreSQLParser.RULE_validator_clause);
		try {
			this.state = 3354;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 364:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3350;
				this.match(PostgreSQLParser.VALIDATOR);
				this.state = 3351;
				this.handler_name();
				}
				break;
			case 260:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 3352;
				this.match(PostgreSQLParser.NO);
				this.state = 3353;
				this.match(PostgreSQLParser.VALIDATOR);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_validator(): Opt_validatorContext {
		let localctx: Opt_validatorContext = new Opt_validatorContext(this, this._ctx, this.state);
		this.enterRule(localctx, 306, PostgreSQLParser.RULE_opt_validator);
		try {
			this.state = 3358;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 260:
			case 364:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3356;
				this.validator_clause();
				}
				break;
			case -1:
			case 2:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 88:
			case 92:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_procedural(): Opt_proceduralContext {
		let localctx: Opt_proceduralContext = new Opt_proceduralContext(this, this._ctx, this.state);
		this.enterRule(localctx, 308, PostgreSQLParser.RULE_opt_procedural);
		try {
			this.state = 3362;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 286:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3360;
				this.match(PostgreSQLParser.PROCEDURAL);
				}
				break;
			case 238:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createtablespacestmt(): CreatetablespacestmtContext {
		let localctx: CreatetablespacestmtContext = new CreatetablespacestmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 310, PostgreSQLParser.RULE_createtablespacestmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3364;
			this.match(PostgreSQLParser.CREATE);
			this.state = 3365;
			this.match(PostgreSQLParser.TABLESPACE);
			this.state = 3366;
			this.name();
			this.state = 3367;
			this.opttablespaceowner();
			this.state = 3368;
			this.match(PostgreSQLParser.LOCATION);
			this.state = 3369;
			this.sconst();
			this.state = 3370;
			this.opt_reloptions();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opttablespaceowner(): OpttablespaceownerContext {
		let localctx: OpttablespaceownerContext = new OpttablespaceownerContext(this, this._ctx, this.state);
		this.enterRule(localctx, 312, PostgreSQLParser.RULE_opttablespaceowner);
		try {
			this.state = 3375;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 273:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3372;
				this.match(PostgreSQLParser.OWNER);
				this.state = 3373;
				this.rolespec();
				}
				break;
			case 246:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public droptablespacestmt(): DroptablespacestmtContext {
		let localctx: DroptablespacestmtContext = new DroptablespacestmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 314, PostgreSQLParser.RULE_droptablespacestmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3377;
			this.match(PostgreSQLParser.DROP);
			this.state = 3378;
			this.match(PostgreSQLParser.TABLESPACE);
			this.state = 3381;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 147, this._ctx) ) {
			case 1:
				{
				this.state = 3379;
				this.match(PostgreSQLParser.IF_P);
				this.state = 3380;
				this.match(PostgreSQLParser.EXISTS);
				}
				break;
			}
			this.state = 3383;
			this.name();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createextensionstmt(): CreateextensionstmtContext {
		let localctx: CreateextensionstmtContext = new CreateextensionstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 316, PostgreSQLParser.RULE_createextensionstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3385;
			this.match(PostgreSQLParser.CREATE);
			this.state = 3386;
			this.match(PostgreSQLParser.EXTENSION);
			this.state = 3390;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 148, this._ctx) ) {
			case 1:
				{
				this.state = 3387;
				this.match(PostgreSQLParser.IF_P);
				this.state = 3388;
				this.match(PostgreSQLParser.NOT);
				this.state = 3389;
				this.match(PostgreSQLParser.EXISTS);
				}
				break;
			}
			this.state = 3392;
			this.name();
			this.state = 3393;
			this.opt_with();
			this.state = 3394;
			this.create_extension_opt_list();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public create_extension_opt_list(): Create_extension_opt_listContext {
		let localctx: Create_extension_opt_listContext = new Create_extension_opt_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 318, PostgreSQLParser.RULE_create_extension_opt_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3399;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===64 || _la===150 || _la===314 || _la===366) {
				{
				{
				this.state = 3396;
				this.create_extension_opt_item();
				}
				}
				this.state = 3401;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public create_extension_opt_item(): Create_extension_opt_itemContext {
		let localctx: Create_extension_opt_itemContext = new Create_extension_opt_itemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 320, PostgreSQLParser.RULE_create_extension_opt_item);
		try {
			this.state = 3409;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 314:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3402;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 3403;
				this.name();
				}
				break;
			case 366:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 3404;
				this.match(PostgreSQLParser.VERSION_P);
				this.state = 3405;
				this.nonreservedword_or_sconst();
				}
				break;
			case 64:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 3406;
				this.match(PostgreSQLParser.FROM);
				this.state = 3407;
				this.nonreservedword_or_sconst();
				}
				break;
			case 150:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 3408;
				this.match(PostgreSQLParser.CASCADE);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alterextensionstmt(): AlterextensionstmtContext {
		let localctx: AlterextensionstmtContext = new AlterextensionstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 322, PostgreSQLParser.RULE_alterextensionstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3411;
			this.match(PostgreSQLParser.ALTER);
			this.state = 3412;
			this.match(PostgreSQLParser.EXTENSION);
			this.state = 3413;
			this.name();
			this.state = 3414;
			this.match(PostgreSQLParser.UPDATE);
			this.state = 3415;
			this.alter_extension_opt_list();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alter_extension_opt_list(): Alter_extension_opt_listContext {
		let localctx: Alter_extension_opt_listContext = new Alter_extension_opt_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 324, PostgreSQLParser.RULE_alter_extension_opt_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3420;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===94) {
				{
				{
				this.state = 3417;
				this.alter_extension_opt_item();
				}
				}
				this.state = 3422;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alter_extension_opt_item(): Alter_extension_opt_itemContext {
		let localctx: Alter_extension_opt_itemContext = new Alter_extension_opt_itemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 326, PostgreSQLParser.RULE_alter_extension_opt_item);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3423;
			this.match(PostgreSQLParser.TO);
			this.state = 3424;
			this.nonreservedword_or_sconst();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alterextensioncontentsstmt(): AlterextensioncontentsstmtContext {
		let localctx: AlterextensioncontentsstmtContext = new AlterextensioncontentsstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 328, PostgreSQLParser.RULE_alterextensioncontentsstmt);
		try {
			this.state = 3530;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 152, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3426;
				this.match(PostgreSQLParser.ALTER);
				this.state = 3427;
				this.match(PostgreSQLParser.EXTENSION);
				this.state = 3428;
				this.name();
				this.state = 3429;
				this.add_drop();
				this.state = 3430;
				this.object_type_name();
				this.state = 3431;
				this.name();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 3433;
				this.match(PostgreSQLParser.ALTER);
				this.state = 3434;
				this.match(PostgreSQLParser.EXTENSION);
				this.state = 3435;
				this.name();
				this.state = 3436;
				this.add_drop();
				this.state = 3437;
				this.object_type_any_name();
				this.state = 3438;
				this.any_name();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 3440;
				this.match(PostgreSQLParser.ALTER);
				this.state = 3441;
				this.match(PostgreSQLParser.EXTENSION);
				this.state = 3442;
				this.name();
				this.state = 3443;
				this.add_drop();
				this.state = 3444;
				this.match(PostgreSQLParser.AGGREGATE);
				this.state = 3445;
				this.aggregate_with_argtypes();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 3447;
				this.match(PostgreSQLParser.ALTER);
				this.state = 3448;
				this.match(PostgreSQLParser.EXTENSION);
				this.state = 3449;
				this.name();
				this.state = 3450;
				this.add_drop();
				this.state = 3451;
				this.match(PostgreSQLParser.CAST);
				this.state = 3452;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 3453;
				this.typename();
				this.state = 3454;
				this.match(PostgreSQLParser.AS);
				this.state = 3455;
				this.typename();
				this.state = 3456;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 3458;
				this.match(PostgreSQLParser.ALTER);
				this.state = 3459;
				this.match(PostgreSQLParser.EXTENSION);
				this.state = 3460;
				this.name();
				this.state = 3461;
				this.add_drop();
				this.state = 3462;
				this.match(PostgreSQLParser.DOMAIN_P);
				this.state = 3463;
				this.typename();
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 3465;
				this.match(PostgreSQLParser.ALTER);
				this.state = 3466;
				this.match(PostgreSQLParser.EXTENSION);
				this.state = 3467;
				this.name();
				this.state = 3468;
				this.add_drop();
				this.state = 3469;
				this.match(PostgreSQLParser.FUNCTION);
				this.state = 3470;
				this.function_with_argtypes();
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 3472;
				this.match(PostgreSQLParser.ALTER);
				this.state = 3473;
				this.match(PostgreSQLParser.EXTENSION);
				this.state = 3474;
				this.name();
				this.state = 3475;
				this.add_drop();
				this.state = 3476;
				this.match(PostgreSQLParser.OPERATOR);
				this.state = 3477;
				this.operator_with_argtypes();
				}
				break;
			case 8:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 3479;
				this.match(PostgreSQLParser.ALTER);
				this.state = 3480;
				this.match(PostgreSQLParser.EXTENSION);
				this.state = 3481;
				this.name();
				this.state = 3482;
				this.add_drop();
				this.state = 3483;
				this.match(PostgreSQLParser.OPERATOR);
				this.state = 3484;
				this.match(PostgreSQLParser.CLASS);
				this.state = 3485;
				this.any_name();
				this.state = 3486;
				this.match(PostgreSQLParser.USING);
				this.state = 3487;
				this.name();
				}
				break;
			case 9:
				this.enterOuterAlt(localctx, 9);
				{
				this.state = 3489;
				this.match(PostgreSQLParser.ALTER);
				this.state = 3490;
				this.match(PostgreSQLParser.EXTENSION);
				this.state = 3491;
				this.name();
				this.state = 3492;
				this.add_drop();
				this.state = 3493;
				this.match(PostgreSQLParser.OPERATOR);
				this.state = 3494;
				this.match(PostgreSQLParser.FAMILY);
				this.state = 3495;
				this.any_name();
				this.state = 3496;
				this.match(PostgreSQLParser.USING);
				this.state = 3497;
				this.name();
				}
				break;
			case 10:
				this.enterOuterAlt(localctx, 10);
				{
				this.state = 3499;
				this.match(PostgreSQLParser.ALTER);
				this.state = 3500;
				this.match(PostgreSQLParser.EXTENSION);
				this.state = 3501;
				this.name();
				this.state = 3502;
				this.add_drop();
				this.state = 3503;
				this.match(PostgreSQLParser.PROCEDURE);
				this.state = 3504;
				this.function_with_argtypes();
				}
				break;
			case 11:
				this.enterOuterAlt(localctx, 11);
				{
				this.state = 3506;
				this.match(PostgreSQLParser.ALTER);
				this.state = 3507;
				this.match(PostgreSQLParser.EXTENSION);
				this.state = 3508;
				this.name();
				this.state = 3509;
				this.add_drop();
				this.state = 3510;
				this.match(PostgreSQLParser.ROUTINE);
				this.state = 3511;
				this.function_with_argtypes();
				}
				break;
			case 12:
				this.enterOuterAlt(localctx, 12);
				{
				this.state = 3513;
				this.match(PostgreSQLParser.ALTER);
				this.state = 3514;
				this.match(PostgreSQLParser.EXTENSION);
				this.state = 3515;
				this.name();
				this.state = 3516;
				this.add_drop();
				this.state = 3517;
				this.match(PostgreSQLParser.TRANSFORM);
				this.state = 3518;
				this.match(PostgreSQLParser.FOR);
				this.state = 3519;
				this.typename();
				this.state = 3520;
				this.match(PostgreSQLParser.LANGUAGE);
				this.state = 3521;
				this.name();
				}
				break;
			case 13:
				this.enterOuterAlt(localctx, 13);
				{
				this.state = 3523;
				this.match(PostgreSQLParser.ALTER);
				this.state = 3524;
				this.match(PostgreSQLParser.EXTENSION);
				this.state = 3525;
				this.name();
				this.state = 3526;
				this.add_drop();
				this.state = 3527;
				this.match(PostgreSQLParser.TYPE_P);
				this.state = 3528;
				this.typename();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createfdwstmt(): CreatefdwstmtContext {
		let localctx: CreatefdwstmtContext = new CreatefdwstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 330, PostgreSQLParser.RULE_createfdwstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3532;
			this.match(PostgreSQLParser.CREATE);
			this.state = 3533;
			this.match(PostgreSQLParser.FOREIGN);
			this.state = 3534;
			this.match(PostgreSQLParser.DATA_P);
			this.state = 3535;
			this.match(PostgreSQLParser.WRAPPER);
			this.state = 3536;
			this.name();
			this.state = 3537;
			this.opt_fdw_options();
			this.state = 3538;
			this.create_generic_options();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public fdw_option(): Fdw_optionContext {
		let localctx: Fdw_optionContext = new Fdw_optionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 332, PostgreSQLParser.RULE_fdw_option);
		try {
			this.state = 3548;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 153, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3540;
				this.match(PostgreSQLParser.HANDLER);
				this.state = 3541;
				this.handler_name();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 3542;
				this.match(PostgreSQLParser.NO);
				this.state = 3543;
				this.match(PostgreSQLParser.HANDLER);
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 3544;
				this.match(PostgreSQLParser.VALIDATOR);
				this.state = 3545;
				this.handler_name();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 3546;
				this.match(PostgreSQLParser.NO);
				this.state = 3547;
				this.match(PostgreSQLParser.VALIDATOR);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public fdw_options(): Fdw_optionsContext {
		let localctx: Fdw_optionsContext = new Fdw_optionsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 334, PostgreSQLParser.RULE_fdw_options);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3551;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			do {
				{
				{
				this.state = 3550;
				this.fdw_option();
				}
				}
				this.state = 3553;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			} while (_la===215 || _la===260 || _la===364);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_fdw_options(): Opt_fdw_optionsContext {
		let localctx: Opt_fdw_optionsContext = new Opt_fdw_optionsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 336, PostgreSQLParser.RULE_opt_fdw_options);
		try {
			this.state = 3557;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 215:
			case 260:
			case 364:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3555;
				this.fdw_options();
				}
				break;
			case -1:
			case 2:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 88:
			case 92:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 271:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alterfdwstmt(): AlterfdwstmtContext {
		let localctx: AlterfdwstmtContext = new AlterfdwstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 338, PostgreSQLParser.RULE_alterfdwstmt);
		try {
			this.state = 3574;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 156, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3559;
				this.match(PostgreSQLParser.ALTER);
				this.state = 3560;
				this.match(PostgreSQLParser.FOREIGN);
				this.state = 3561;
				this.match(PostgreSQLParser.DATA_P);
				this.state = 3562;
				this.match(PostgreSQLParser.WRAPPER);
				this.state = 3563;
				this.name();
				this.state = 3564;
				this.opt_fdw_options();
				this.state = 3565;
				this.alter_generic_options();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 3567;
				this.match(PostgreSQLParser.ALTER);
				this.state = 3568;
				this.match(PostgreSQLParser.FOREIGN);
				this.state = 3569;
				this.match(PostgreSQLParser.DATA_P);
				this.state = 3570;
				this.match(PostgreSQLParser.WRAPPER);
				this.state = 3571;
				this.name();
				this.state = 3572;
				this.fdw_options();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public create_generic_options(): Create_generic_optionsContext {
		let localctx: Create_generic_optionsContext = new Create_generic_optionsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 340, PostgreSQLParser.RULE_create_generic_options);
		try {
			this.state = 3582;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 271:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3576;
				this.match(PostgreSQLParser.OPTIONS);
				this.state = 3577;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 3578;
				this.generic_option_list();
				this.state = 3579;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case -1:
			case 2:
			case 3:
			case 6:
			case 7:
			case 31:
			case 32:
			case 42:
			case 43:
			case 45:
			case 46:
			case 53:
			case 54:
			case 57:
			case 61:
			case 65:
			case 69:
			case 71:
			case 77:
			case 78:
			case 85:
			case 86:
			case 88:
			case 92:
			case 98:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 429:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public generic_option_list(): Generic_option_listContext {
		let localctx: Generic_option_listContext = new Generic_option_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 342, PostgreSQLParser.RULE_generic_option_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3584;
			this.generic_option_elem();
			this.state = 3589;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 3585;
				this.match(PostgreSQLParser.COMMA);
				this.state = 3586;
				this.generic_option_elem();
				}
				}
				this.state = 3591;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alter_generic_options(): Alter_generic_optionsContext {
		let localctx: Alter_generic_optionsContext = new Alter_generic_optionsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 344, PostgreSQLParser.RULE_alter_generic_options);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3592;
			this.match(PostgreSQLParser.OPTIONS);
			this.state = 3593;
			this.match(PostgreSQLParser.OPEN_PAREN);
			this.state = 3594;
			this.alter_generic_option_list();
			this.state = 3595;
			this.match(PostgreSQLParser.CLOSE_PAREN);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alter_generic_option_list(): Alter_generic_option_listContext {
		let localctx: Alter_generic_option_listContext = new Alter_generic_option_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 346, PostgreSQLParser.RULE_alter_generic_option_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3597;
			this.alter_generic_option_elem();
			this.state = 3602;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 3598;
				this.match(PostgreSQLParser.COMMA);
				this.state = 3599;
				this.alter_generic_option_elem();
				}
				}
				this.state = 3604;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alter_generic_option_elem(): Alter_generic_option_elemContext {
		let localctx: Alter_generic_option_elemContext = new Alter_generic_option_elemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 348, PostgreSQLParser.RULE_alter_generic_option_elem);
		try {
			this.state = 3612;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 160, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3605;
				this.generic_option_elem();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 3606;
				this.match(PostgreSQLParser.SET);
				this.state = 3607;
				this.generic_option_elem();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 3608;
				this.match(PostgreSQLParser.ADD_P);
				this.state = 3609;
				this.generic_option_elem();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 3610;
				this.match(PostgreSQLParser.DROP);
				this.state = 3611;
				this.generic_option_name();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public generic_option_elem(): Generic_option_elemContext {
		let localctx: Generic_option_elemContext = new Generic_option_elemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 350, PostgreSQLParser.RULE_generic_option_elem);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3614;
			this.generic_option_name();
			this.state = 3615;
			this.generic_option_arg();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public generic_option_name(): Generic_option_nameContext {
		let localctx: Generic_option_nameContext = new Generic_option_nameContext(this, this._ctx, this.state);
		this.enterRule(localctx, 352, PostgreSQLParser.RULE_generic_option_name);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3617;
			this.collabel();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public generic_option_arg(): Generic_option_argContext {
		let localctx: Generic_option_argContext = new Generic_option_argContext(this, this._ctx, this.state);
		this.enterRule(localctx, 354, PostgreSQLParser.RULE_generic_option_arg);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3619;
			this.sconst();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createforeignserverstmt(): CreateforeignserverstmtContext {
		let localctx: CreateforeignserverstmtContext = new CreateforeignserverstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 356, PostgreSQLParser.RULE_createforeignserverstmt);
		try {
			this.state = 3646;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 161, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3621;
				this.match(PostgreSQLParser.CREATE);
				this.state = 3622;
				this.match(PostgreSQLParser.SERVER);
				this.state = 3623;
				this.name();
				this.state = 3624;
				this.opt_type();
				this.state = 3625;
				this.opt_foreign_server_version();
				this.state = 3626;
				this.match(PostgreSQLParser.FOREIGN);
				this.state = 3627;
				this.match(PostgreSQLParser.DATA_P);
				this.state = 3628;
				this.match(PostgreSQLParser.WRAPPER);
				this.state = 3629;
				this.name();
				this.state = 3630;
				this.create_generic_options();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 3632;
				this.match(PostgreSQLParser.CREATE);
				this.state = 3633;
				this.match(PostgreSQLParser.SERVER);
				this.state = 3634;
				this.match(PostgreSQLParser.IF_P);
				this.state = 3635;
				this.match(PostgreSQLParser.NOT);
				this.state = 3636;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 3637;
				this.name();
				this.state = 3638;
				this.opt_type();
				this.state = 3639;
				this.opt_foreign_server_version();
				this.state = 3640;
				this.match(PostgreSQLParser.FOREIGN);
				this.state = 3641;
				this.match(PostgreSQLParser.DATA_P);
				this.state = 3642;
				this.match(PostgreSQLParser.WRAPPER);
				this.state = 3643;
				this.name();
				this.state = 3644;
				this.create_generic_options();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_type(): Opt_typeContext {
		let localctx: Opt_typeContext = new Opt_typeContext(this, this._ctx, this.state);
		this.enterRule(localctx, 358, PostgreSQLParser.RULE_opt_type);
		try {
			this.state = 3651;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 351:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3648;
				this.match(PostgreSQLParser.TYPE_P);
				this.state = 3649;
				this.sconst();
				}
				break;
			case 63:
			case 366:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public foreign_server_version(): Foreign_server_versionContext {
		let localctx: Foreign_server_versionContext = new Foreign_server_versionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 360, PostgreSQLParser.RULE_foreign_server_version);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3653;
			this.match(PostgreSQLParser.VERSION_P);
			this.state = 3656;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 521:
			case 523:
			case 525:
			case 547:
				{
				this.state = 3654;
				this.sconst();
				}
				break;
			case 78:
				{
				this.state = 3655;
				this.match(PostgreSQLParser.NULL_P);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_foreign_server_version(): Opt_foreign_server_versionContext {
		let localctx: Opt_foreign_server_versionContext = new Opt_foreign_server_versionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 362, PostgreSQLParser.RULE_opt_foreign_server_version);
		try {
			this.state = 3660;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 366:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3658;
				this.foreign_server_version();
				}
				break;
			case 63:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alterforeignserverstmt(): AlterforeignserverstmtContext {
		let localctx: AlterforeignserverstmtContext = new AlterforeignserverstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 364, PostgreSQLParser.RULE_alterforeignserverstmt);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3662;
			this.match(PostgreSQLParser.ALTER);
			this.state = 3663;
			this.match(PostgreSQLParser.SERVER);
			this.state = 3664;
			this.name();
			this.state = 3670;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 271:
				{
				this.state = 3665;
				this.alter_generic_options();
				}
				break;
			case 366:
				{
				this.state = 3666;
				this.foreign_server_version();
				this.state = 3668;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===271) {
					{
					this.state = 3667;
					this.alter_generic_options();
					}
				}

				}
				break;
			default:
				throw new NoViableAltException(this);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createforeigntablestmt(): CreateforeigntablestmtContext {
		let localctx: CreateforeigntablestmtContext = new CreateforeigntablestmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 366, PostgreSQLParser.RULE_createforeigntablestmt);
		try {
			this.state = 3728;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 167, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3672;
				this.match(PostgreSQLParser.CREATE);
				this.state = 3673;
				this.match(PostgreSQLParser.FOREIGN);
				this.state = 3674;
				this.match(PostgreSQLParser.TABLE);
				this.state = 3675;
				this.qualified_name();
				this.state = 3676;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 3677;
				this.opttableelementlist();
				this.state = 3678;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 3679;
				this.optinherit();
				this.state = 3680;
				this.match(PostgreSQLParser.SERVER);
				this.state = 3681;
				this.name();
				this.state = 3682;
				this.create_generic_options();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 3684;
				this.match(PostgreSQLParser.CREATE);
				this.state = 3685;
				this.match(PostgreSQLParser.FOREIGN);
				this.state = 3686;
				this.match(PostgreSQLParser.TABLE);
				this.state = 3687;
				this.match(PostgreSQLParser.IF_P);
				this.state = 3688;
				this.match(PostgreSQLParser.NOT);
				this.state = 3689;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 3690;
				this.qualified_name();
				this.state = 3691;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 3692;
				this.opttableelementlist();
				this.state = 3693;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 3694;
				this.optinherit();
				this.state = 3695;
				this.match(PostgreSQLParser.SERVER);
				this.state = 3696;
				this.name();
				this.state = 3697;
				this.create_generic_options();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 3699;
				this.match(PostgreSQLParser.CREATE);
				this.state = 3700;
				this.match(PostgreSQLParser.FOREIGN);
				this.state = 3701;
				this.match(PostgreSQLParser.TABLE);
				this.state = 3702;
				this.qualified_name();
				this.state = 3703;
				this.match(PostgreSQLParser.PARTITION);
				this.state = 3704;
				this.match(PostgreSQLParser.OF);
				this.state = 3705;
				this.qualified_name();
				this.state = 3706;
				this.opttypedtableelementlist();
				this.state = 3707;
				this.partitionboundspec();
				this.state = 3708;
				this.match(PostgreSQLParser.SERVER);
				this.state = 3709;
				this.name();
				this.state = 3710;
				this.create_generic_options();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 3712;
				this.match(PostgreSQLParser.CREATE);
				this.state = 3713;
				this.match(PostgreSQLParser.FOREIGN);
				this.state = 3714;
				this.match(PostgreSQLParser.TABLE);
				this.state = 3715;
				this.match(PostgreSQLParser.IF_P);
				this.state = 3716;
				this.match(PostgreSQLParser.NOT);
				this.state = 3717;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 3718;
				this.qualified_name();
				this.state = 3719;
				this.match(PostgreSQLParser.PARTITION);
				this.state = 3720;
				this.match(PostgreSQLParser.OF);
				this.state = 3721;
				this.qualified_name();
				this.state = 3722;
				this.opttypedtableelementlist();
				this.state = 3723;
				this.partitionboundspec();
				this.state = 3724;
				this.match(PostgreSQLParser.SERVER);
				this.state = 3725;
				this.name();
				this.state = 3726;
				this.create_generic_options();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public importforeignschemastmt(): ImportforeignschemastmtContext {
		let localctx: ImportforeignschemastmtContext = new ImportforeignschemastmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 368, PostgreSQLParser.RULE_importforeignschemastmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3730;
			this.match(PostgreSQLParser.IMPORT_P);
			this.state = 3731;
			this.match(PostgreSQLParser.FOREIGN);
			this.state = 3732;
			this.match(PostgreSQLParser.SCHEMA);
			this.state = 3733;
			this.name();
			this.state = 3734;
			this.import_qualification();
			this.state = 3735;
			this.match(PostgreSQLParser.FROM);
			this.state = 3736;
			this.match(PostgreSQLParser.SERVER);
			this.state = 3737;
			this.name();
			this.state = 3738;
			this.match(PostgreSQLParser.INTO);
			this.state = 3739;
			this.name();
			this.state = 3740;
			this.create_generic_options();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public import_qualification_type(): Import_qualification_typeContext {
		let localctx: Import_qualification_typeContext = new Import_qualification_typeContext(this, this._ctx, this.state);
		this.enterRule(localctx, 370, PostgreSQLParser.RULE_import_qualification_type);
		try {
			this.state = 3745;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 74:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3742;
				this.match(PostgreSQLParser.LIMIT);
				this.state = 3743;
				this.match(PostgreSQLParser.TO);
				}
				break;
			case 59:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 3744;
				this.match(PostgreSQLParser.EXCEPT);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public import_qualification(): Import_qualificationContext {
		let localctx: Import_qualificationContext = new Import_qualificationContext(this, this._ctx, this.state);
		this.enterRule(localctx, 372, PostgreSQLParser.RULE_import_qualification);
		try {
			this.state = 3753;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 59:
			case 74:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3747;
				this.import_qualification_type();
				this.state = 3748;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 3749;
				this.relation_expr_list();
				this.state = 3750;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 64:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createusermappingstmt(): CreateusermappingstmtContext {
		let localctx: CreateusermappingstmtContext = new CreateusermappingstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 374, PostgreSQLParser.RULE_createusermappingstmt);
		try {
			this.state = 3776;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 170, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3755;
				this.match(PostgreSQLParser.CREATE);
				this.state = 3756;
				this.match(PostgreSQLParser.USER);
				this.state = 3757;
				this.match(PostgreSQLParser.MAPPING);
				this.state = 3758;
				this.match(PostgreSQLParser.FOR);
				this.state = 3759;
				this.auth_ident();
				this.state = 3760;
				this.match(PostgreSQLParser.SERVER);
				this.state = 3761;
				this.name();
				this.state = 3762;
				this.create_generic_options();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 3764;
				this.match(PostgreSQLParser.CREATE);
				this.state = 3765;
				this.match(PostgreSQLParser.USER);
				this.state = 3766;
				this.match(PostgreSQLParser.MAPPING);
				this.state = 3767;
				this.match(PostgreSQLParser.IF_P);
				this.state = 3768;
				this.match(PostgreSQLParser.NOT);
				this.state = 3769;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 3770;
				this.match(PostgreSQLParser.FOR);
				this.state = 3771;
				this.auth_ident();
				this.state = 3772;
				this.match(PostgreSQLParser.SERVER);
				this.state = 3773;
				this.name();
				this.state = 3774;
				this.create_generic_options();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public auth_ident(): Auth_identContext {
		let localctx: Auth_identContext = new Auth_identContext(this, this._ctx, this.state);
		this.enterRule(localctx, 376, PostgreSQLParser.RULE_auth_ident);
		try {
			this.state = 3780;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 52:
			case 53:
			case 57:
			case 61:
			case 89:
			case 92:
			case 106:
			case 107:
			case 108:
			case 109:
			case 110:
			case 111:
			case 112:
			case 113:
			case 114:
			case 115:
			case 116:
			case 117:
			case 118:
			case 119:
			case 120:
			case 121:
			case 122:
			case 123:
			case 124:
			case 125:
			case 126:
			case 127:
			case 128:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 463:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3778;
				this.rolespec();
				}
				break;
			case 99:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 3779;
				this.match(PostgreSQLParser.USER);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public dropusermappingstmt(): DropusermappingstmtContext {
		let localctx: DropusermappingstmtContext = new DropusermappingstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 378, PostgreSQLParser.RULE_dropusermappingstmt);
		try {
			this.state = 3800;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 172, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3782;
				this.match(PostgreSQLParser.DROP);
				this.state = 3783;
				this.match(PostgreSQLParser.USER);
				this.state = 3784;
				this.match(PostgreSQLParser.MAPPING);
				this.state = 3785;
				this.match(PostgreSQLParser.FOR);
				this.state = 3786;
				this.auth_ident();
				this.state = 3787;
				this.match(PostgreSQLParser.SERVER);
				this.state = 3788;
				this.name();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 3790;
				this.match(PostgreSQLParser.DROP);
				this.state = 3791;
				this.match(PostgreSQLParser.USER);
				this.state = 3792;
				this.match(PostgreSQLParser.MAPPING);
				this.state = 3793;
				this.match(PostgreSQLParser.IF_P);
				this.state = 3794;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 3795;
				this.match(PostgreSQLParser.FOR);
				this.state = 3796;
				this.auth_ident();
				this.state = 3797;
				this.match(PostgreSQLParser.SERVER);
				this.state = 3798;
				this.name();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alterusermappingstmt(): AlterusermappingstmtContext {
		let localctx: AlterusermappingstmtContext = new AlterusermappingstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 380, PostgreSQLParser.RULE_alterusermappingstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3802;
			this.match(PostgreSQLParser.ALTER);
			this.state = 3803;
			this.match(PostgreSQLParser.USER);
			this.state = 3804;
			this.match(PostgreSQLParser.MAPPING);
			this.state = 3805;
			this.match(PostgreSQLParser.FOR);
			this.state = 3806;
			this.auth_ident();
			this.state = 3807;
			this.match(PostgreSQLParser.SERVER);
			this.state = 3808;
			this.name();
			this.state = 3809;
			this.alter_generic_options();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createpolicystmt(): CreatepolicystmtContext {
		let localctx: CreatepolicystmtContext = new CreatepolicystmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 382, PostgreSQLParser.RULE_createpolicystmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3811;
			this.match(PostgreSQLParser.CREATE);
			this.state = 3812;
			this.match(PostgreSQLParser.POLICY);
			this.state = 3813;
			this.name();
			this.state = 3814;
			this.match(PostgreSQLParser.ON);
			this.state = 3815;
			this.qualified_name();
			this.state = 3816;
			this.rowsecuritydefaultpermissive();
			this.state = 3817;
			this.rowsecuritydefaultforcmd();
			this.state = 3818;
			this.rowsecuritydefaulttorole();
			this.state = 3819;
			this.rowsecurityoptionalexpr();
			this.state = 3820;
			this.rowsecurityoptionalwithcheck();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alterpolicystmt(): AlterpolicystmtContext {
		let localctx: AlterpolicystmtContext = new AlterpolicystmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 384, PostgreSQLParser.RULE_alterpolicystmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3822;
			this.match(PostgreSQLParser.ALTER);
			this.state = 3823;
			this.match(PostgreSQLParser.POLICY);
			this.state = 3824;
			this.name();
			this.state = 3825;
			this.match(PostgreSQLParser.ON);
			this.state = 3826;
			this.qualified_name();
			this.state = 3827;
			this.rowsecurityoptionaltorole();
			this.state = 3828;
			this.rowsecurityoptionalexpr();
			this.state = 3829;
			this.rowsecurityoptionalwithcheck();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public rowsecurityoptionalexpr(): RowsecurityoptionalexprContext {
		let localctx: RowsecurityoptionalexprContext = new RowsecurityoptionalexprContext(this, this._ctx, this.state);
		this.enterRule(localctx, 386, PostgreSQLParser.RULE_rowsecurityoptionalexpr);
		try {
			this.state = 3837;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 100:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3831;
				this.match(PostgreSQLParser.USING);
				this.state = 3832;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 3833;
				this.a_expr();
				this.state = 3834;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case -1:
			case 2:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 88:
			case 92:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public rowsecurityoptionalwithcheck(): RowsecurityoptionalwithcheckContext {
		let localctx: RowsecurityoptionalwithcheckContext = new RowsecurityoptionalwithcheckContext(this, this._ctx, this.state);
		this.enterRule(localctx, 388, PostgreSQLParser.RULE_rowsecurityoptionalwithcheck);
		try {
			this.state = 3846;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 174, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3839;
				this.match(PostgreSQLParser.WITH);
				this.state = 3840;
				this.match(PostgreSQLParser.CHECK);
				this.state = 3841;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 3842;
				this.a_expr();
				this.state = 3843;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public rowsecuritydefaulttorole(): RowsecuritydefaulttoroleContext {
		let localctx: RowsecuritydefaulttoroleContext = new RowsecuritydefaulttoroleContext(this, this._ctx, this.state);
		this.enterRule(localctx, 390, PostgreSQLParser.RULE_rowsecuritydefaulttorole);
		try {
			this.state = 3851;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 94:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3848;
				this.match(PostgreSQLParser.TO);
				this.state = 3849;
				this.role_list();
				}
				break;
			case -1:
			case 2:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 88:
			case 92:
			case 100:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public rowsecurityoptionaltorole(): RowsecurityoptionaltoroleContext {
		let localctx: RowsecurityoptionaltoroleContext = new RowsecurityoptionaltoroleContext(this, this._ctx, this.state);
		this.enterRule(localctx, 392, PostgreSQLParser.RULE_rowsecurityoptionaltorole);
		try {
			this.state = 3856;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 94:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3853;
				this.match(PostgreSQLParser.TO);
				this.state = 3854;
				this.role_list();
				}
				break;
			case -1:
			case 2:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 88:
			case 92:
			case 100:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public rowsecuritydefaultpermissive(): RowsecuritydefaultpermissiveContext {
		let localctx: RowsecuritydefaultpermissiveContext = new RowsecuritydefaultpermissiveContext(this, this._ctx, this.state);
		this.enterRule(localctx, 394, PostgreSQLParser.RULE_rowsecuritydefaultpermissive);
		try {
			this.state = 3861;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 36:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3858;
				this.match(PostgreSQLParser.AS);
				this.state = 3859;
				this.identifier();
				}
				break;
			case -1:
			case 2:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 62:
			case 65:
			case 71:
			case 88:
			case 92:
			case 94:
			case 100:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public rowsecuritydefaultforcmd(): RowsecuritydefaultforcmdContext {
		let localctx: RowsecuritydefaultforcmdContext = new RowsecuritydefaultforcmdContext(this, this._ctx, this.state);
		this.enterRule(localctx, 396, PostgreSQLParser.RULE_rowsecuritydefaultforcmd);
		try {
			this.state = 3866;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 62:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3863;
				this.match(PostgreSQLParser.FOR);
				this.state = 3864;
				this.row_security_cmd();
				}
				break;
			case -1:
			case 2:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 88:
			case 92:
			case 94:
			case 100:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public row_security_cmd(): Row_security_cmdContext {
		let localctx: Row_security_cmdContext = new Row_security_cmdContext(this, this._ctx, this.state);
		this.enterRule(localctx, 398, PostgreSQLParser.RULE_row_security_cmd);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3868;
			_la = this._input.LA(1);
			if(!(_la===30 || _la===88 || _la===182 || _la===232 || _la===360)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createamstmt(): CreateamstmtContext {
		let localctx: CreateamstmtContext = new CreateamstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 400, PostgreSQLParser.RULE_createamstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3870;
			this.match(PostgreSQLParser.CREATE);
			this.state = 3871;
			this.match(PostgreSQLParser.ACCESS);
			this.state = 3872;
			this.match(PostgreSQLParser.METHOD);
			this.state = 3873;
			this.name();
			this.state = 3874;
			this.match(PostgreSQLParser.TYPE_P);
			this.state = 3875;
			this.am_type();
			this.state = 3876;
			this.match(PostgreSQLParser.HANDLER);
			this.state = 3877;
			this.handler_name();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public am_type(): Am_typeContext {
		let localctx: Am_typeContext = new Am_typeContext(this, this._ctx, this.state);
		this.enterRule(localctx, 402, PostgreSQLParser.RULE_am_type);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3879;
			_la = this._input.LA(1);
			if(!(_la===92 || _la===226)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createtrigstmt(): CreatetrigstmtContext {
		let localctx: CreatetrigstmtContext = new CreatetrigstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 404, PostgreSQLParser.RULE_createtrigstmt);
		try {
			this.state = 3919;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 179, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3881;
				this.match(PostgreSQLParser.CREATE);
				this.state = 3882;
				this.match(PostgreSQLParser.TRIGGER);
				this.state = 3883;
				this.name();
				this.state = 3884;
				this.triggeractiontime();
				this.state = 3885;
				this.triggerevents();
				this.state = 3886;
				this.match(PostgreSQLParser.ON);
				this.state = 3887;
				this.qualified_name();
				this.state = 3888;
				this.triggerreferencing();
				this.state = 3889;
				this.triggerforspec();
				this.state = 3890;
				this.triggerwhen();
				this.state = 3891;
				this.match(PostgreSQLParser.EXECUTE);
				this.state = 3892;
				this.function_or_procedure();
				this.state = 3893;
				this.func_name();
				this.state = 3894;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 3895;
				this.triggerfuncargs();
				this.state = 3896;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 3898;
				this.match(PostgreSQLParser.CREATE);
				this.state = 3899;
				this.match(PostgreSQLParser.CONSTRAINT);
				this.state = 3900;
				this.match(PostgreSQLParser.TRIGGER);
				this.state = 3901;
				this.name();
				this.state = 3902;
				this.match(PostgreSQLParser.AFTER);
				this.state = 3903;
				this.triggerevents();
				this.state = 3904;
				this.match(PostgreSQLParser.ON);
				this.state = 3905;
				this.qualified_name();
				this.state = 3906;
				this.optconstrfromtable();
				this.state = 3907;
				this.constraintattributespec();
				this.state = 3908;
				this.match(PostgreSQLParser.FOR);
				this.state = 3909;
				this.match(PostgreSQLParser.EACH);
				this.state = 3910;
				this.match(PostgreSQLParser.ROW);
				this.state = 3911;
				this.triggerwhen();
				this.state = 3912;
				this.match(PostgreSQLParser.EXECUTE);
				this.state = 3913;
				this.function_or_procedure();
				this.state = 3914;
				this.func_name();
				this.state = 3915;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 3916;
				this.triggerfuncargs();
				this.state = 3917;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public triggeractiontime(): TriggeractiontimeContext {
		let localctx: TriggeractiontimeContext = new TriggeractiontimeContext(this, this._ctx, this.state);
		this.enterRule(localctx, 406, PostgreSQLParser.RULE_triggeractiontime);
		try {
			this.state = 3925;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 145:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3921;
				this.match(PostgreSQLParser.BEFORE);
				}
				break;
			case 135:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 3922;
				this.match(PostgreSQLParser.AFTER);
				}
				break;
			case 233:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 3923;
				this.match(PostgreSQLParser.INSTEAD);
				this.state = 3924;
				this.match(PostgreSQLParser.OF);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public triggerevents(): TriggereventsContext {
		let localctx: TriggereventsContext = new TriggereventsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 408, PostgreSQLParser.RULE_triggerevents);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3927;
			this.triggeroneevent();
			this.state = 3932;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===82) {
				{
				{
				this.state = 3928;
				this.match(PostgreSQLParser.OR);
				this.state = 3929;
				this.triggeroneevent();
				}
				}
				this.state = 3934;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public triggeroneevent(): TriggeroneeventContext {
		let localctx: TriggeroneeventContext = new TriggeroneeventContext(this, this._ctx, this.state);
		this.enterRule(localctx, 410, PostgreSQLParser.RULE_triggeroneevent);
		try {
			this.state = 3942;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 182, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3935;
				this.match(PostgreSQLParser.INSERT);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 3936;
				this.match(PostgreSQLParser.DELETE_P);
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 3937;
				this.match(PostgreSQLParser.UPDATE);
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 3938;
				this.match(PostgreSQLParser.UPDATE);
				this.state = 3939;
				this.match(PostgreSQLParser.OF);
				this.state = 3940;
				this.columnlist();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 3941;
				this.match(PostgreSQLParser.TRUNCATE);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public triggerreferencing(): TriggerreferencingContext {
		let localctx: TriggerreferencingContext = new TriggerreferencingContext(this, this._ctx, this.state);
		this.enterRule(localctx, 412, PostgreSQLParser.RULE_triggerreferencing);
		try {
			this.state = 3947;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 438:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3944;
				this.match(PostgreSQLParser.REFERENCING);
				this.state = 3945;
				this.triggertransitions();
				}
				break;
			case 62:
			case 102:
			case 202:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public triggertransitions(): TriggertransitionsContext {
		let localctx: TriggertransitionsContext = new TriggertransitionsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 414, PostgreSQLParser.RULE_triggertransitions);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3950;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			do {
				{
				{
				this.state = 3949;
				this.triggertransition();
				}
				}
				this.state = 3952;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			} while (_la===439 || _la===440);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public triggertransition(): TriggertransitionContext {
		let localctx: TriggertransitionContext = new TriggertransitionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 416, PostgreSQLParser.RULE_triggertransition);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3954;
			this.transitionoldornew();
			this.state = 3955;
			this.transitionrowortable();
			this.state = 3956;
			this.opt_as();
			this.state = 3957;
			this.transitionrelname();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public transitionoldornew(): TransitionoldornewContext {
		let localctx: TransitionoldornewContext = new TransitionoldornewContext(this, this._ctx, this.state);
		this.enterRule(localctx, 418, PostgreSQLParser.RULE_transitionoldornew);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3959;
			_la = this._input.LA(1);
			if(!(_la===439 || _la===440)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public transitionrowortable(): TransitionrowortableContext {
		let localctx: TransitionrowortableContext = new TransitionrowortableContext(this, this._ctx, this.state);
		this.enterRule(localctx, 420, PostgreSQLParser.RULE_transitionrowortable);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3961;
			_la = this._input.LA(1);
			if(!(_la===92 || _la===405)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public transitionrelname(): TransitionrelnameContext {
		let localctx: TransitionrelnameContext = new TransitionrelnameContext(this, this._ctx, this.state);
		this.enterRule(localctx, 422, PostgreSQLParser.RULE_transitionrelname);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3963;
			this.colid();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public triggerforspec(): TriggerforspecContext {
		let localctx: TriggerforspecContext = new TriggerforspecContext(this, this._ctx, this.state);
		this.enterRule(localctx, 424, PostgreSQLParser.RULE_triggerforspec);
		try {
			this.state = 3970;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 62:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3965;
				this.match(PostgreSQLParser.FOR);
				this.state = 3966;
				this.triggerforopteach();
				this.state = 3967;
				this.triggerfortype();
				}
				break;
			case 102:
			case 202:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public triggerforopteach(): TriggerforopteachContext {
		let localctx: TriggerforopteachContext = new TriggerforopteachContext(this, this._ctx, this.state);
		this.enterRule(localctx, 426, PostgreSQLParser.RULE_triggerforopteach);
		try {
			this.state = 3974;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 192:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3972;
				this.match(PostgreSQLParser.EACH);
				}
				break;
			case 332:
			case 405:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public triggerfortype(): TriggerfortypeContext {
		let localctx: TriggerfortypeContext = new TriggerfortypeContext(this, this._ctx, this.state);
		this.enterRule(localctx, 428, PostgreSQLParser.RULE_triggerfortype);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3976;
			_la = this._input.LA(1);
			if(!(_la===332 || _la===405)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public triggerwhen(): TriggerwhenContext {
		let localctx: TriggerwhenContext = new TriggerwhenContext(this, this._ctx, this.state);
		this.enterRule(localctx, 430, PostgreSQLParser.RULE_triggerwhen);
		try {
			this.state = 3984;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 102:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3978;
				this.match(PostgreSQLParser.WHEN);
				this.state = 3979;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 3980;
				this.a_expr();
				this.state = 3981;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 202:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public function_or_procedure(): Function_or_procedureContext {
		let localctx: Function_or_procedureContext = new Function_or_procedureContext(this, this._ctx, this.state);
		this.enterRule(localctx, 432, PostgreSQLParser.RULE_function_or_procedure);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3986;
			_la = this._input.LA(1);
			if(!(_la===211 || _la===287)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public triggerfuncargs(): TriggerfuncargsContext {
		let localctx: TriggerfuncargsContext = new TriggerfuncargsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 434, PostgreSQLParser.RULE_triggerfuncargs);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 3990;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 30:
			case 31:
			case 32:
			case 33:
			case 34:
			case 35:
			case 36:
			case 37:
			case 38:
			case 39:
			case 40:
			case 41:
			case 42:
			case 43:
			case 44:
			case 45:
			case 46:
			case 47:
			case 48:
			case 49:
			case 50:
			case 51:
			case 52:
			case 53:
			case 54:
			case 55:
			case 56:
			case 57:
			case 58:
			case 59:
			case 60:
			case 61:
			case 62:
			case 63:
			case 64:
			case 65:
			case 66:
			case 67:
			case 68:
			case 69:
			case 70:
			case 72:
			case 73:
			case 74:
			case 75:
			case 76:
			case 77:
			case 78:
			case 79:
			case 80:
			case 81:
			case 82:
			case 83:
			case 84:
			case 85:
			case 86:
			case 87:
			case 88:
			case 89:
			case 90:
			case 91:
			case 92:
			case 93:
			case 94:
			case 95:
			case 96:
			case 97:
			case 98:
			case 99:
			case 100:
			case 101:
			case 102:
			case 103:
			case 104:
			case 105:
			case 106:
			case 107:
			case 108:
			case 109:
			case 110:
			case 111:
			case 112:
			case 113:
			case 114:
			case 115:
			case 116:
			case 117:
			case 118:
			case 119:
			case 120:
			case 121:
			case 122:
			case 123:
			case 124:
			case 125:
			case 126:
			case 127:
			case 128:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 445:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 463:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 521:
			case 523:
			case 525:
			case 534:
			case 536:
			case 537:
			case 538:
			case 547:
				{
				this.state = 3988;
				this.triggerfuncarg();
				}
				break;
			case 3:
			case 6:
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
			this.state = 3996;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 3992;
				this.match(PostgreSQLParser.COMMA);
				this.state = 3993;
				this.triggerfuncarg();
				}
				}
				this.state = 3998;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public triggerfuncarg(): TriggerfuncargContext {
		let localctx: TriggerfuncargContext = new TriggerfuncargContext(this, this._ctx, this.state);
		this.enterRule(localctx, 436, PostgreSQLParser.RULE_triggerfuncarg);
		try {
			this.state = 4003;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 534:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 3999;
				this.iconst();
				}
				break;
			case 536:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 4000;
				this.fconst();
				}
				break;
			case 521:
			case 523:
			case 525:
			case 547:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 4001;
				this.sconst();
				}
				break;
			case 30:
			case 31:
			case 32:
			case 33:
			case 34:
			case 35:
			case 36:
			case 37:
			case 38:
			case 39:
			case 40:
			case 41:
			case 42:
			case 43:
			case 44:
			case 45:
			case 46:
			case 47:
			case 48:
			case 49:
			case 50:
			case 51:
			case 52:
			case 53:
			case 54:
			case 55:
			case 56:
			case 57:
			case 58:
			case 59:
			case 60:
			case 61:
			case 62:
			case 63:
			case 64:
			case 65:
			case 66:
			case 67:
			case 68:
			case 69:
			case 70:
			case 72:
			case 73:
			case 74:
			case 75:
			case 76:
			case 77:
			case 78:
			case 79:
			case 80:
			case 81:
			case 82:
			case 83:
			case 84:
			case 85:
			case 86:
			case 87:
			case 88:
			case 89:
			case 90:
			case 91:
			case 92:
			case 93:
			case 94:
			case 95:
			case 96:
			case 97:
			case 98:
			case 99:
			case 100:
			case 101:
			case 102:
			case 103:
			case 104:
			case 105:
			case 106:
			case 107:
			case 108:
			case 109:
			case 110:
			case 111:
			case 112:
			case 113:
			case 114:
			case 115:
			case 116:
			case 117:
			case 118:
			case 119:
			case 120:
			case 121:
			case 122:
			case 123:
			case 124:
			case 125:
			case 126:
			case 127:
			case 128:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 445:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 463:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 4002;
				this.collabel();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public optconstrfromtable(): OptconstrfromtableContext {
		let localctx: OptconstrfromtableContext = new OptconstrfromtableContext(this, this._ctx, this.state);
		this.enterRule(localctx, 438, PostgreSQLParser.RULE_optconstrfromtable);
		try {
			this.state = 4008;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 64:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4005;
				this.match(PostgreSQLParser.FROM);
				this.state = 4006;
				this.qualified_name();
				}
				break;
			case 54:
			case 62:
			case 69:
			case 77:
			case 260:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public constraintattributespec(): ConstraintattributespecContext {
		let localctx: ConstraintattributespecContext = new ConstraintattributespecContext(this, this._ctx, this.state);
		this.enterRule(localctx, 440, PostgreSQLParser.RULE_constraintattributespec);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 4013;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (((((_la - 54)) & ~0x1F) === 0 && ((1 << (_la - 54)) & 8421377) !== 0) || _la===260) {
				{
				{
				this.state = 4010;
				this.constraintattributeElem();
				}
				}
				this.state = 4015;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public constraintattributeElem(): ConstraintattributeElemContext {
		let localctx: ConstraintattributeElemContext = new ConstraintattributeElemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 442, PostgreSQLParser.RULE_constraintattributeElem);
		try {
			this.state = 4027;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 193, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4016;
				this.match(PostgreSQLParser.NOT);
				this.state = 4017;
				this.match(PostgreSQLParser.DEFERRABLE);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 4018;
				this.match(PostgreSQLParser.DEFERRABLE);
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 4019;
				this.match(PostgreSQLParser.INITIALLY);
				this.state = 4020;
				this.match(PostgreSQLParser.IMMEDIATE);
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 4021;
				this.match(PostgreSQLParser.INITIALLY);
				this.state = 4022;
				this.match(PostgreSQLParser.DEFERRED);
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 4023;
				this.match(PostgreSQLParser.NOT);
				this.state = 4024;
				this.match(PostgreSQLParser.VALID);
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 4025;
				this.match(PostgreSQLParser.NO);
				this.state = 4026;
				this.match(PostgreSQLParser.INHERIT);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createeventtrigstmt(): CreateeventtrigstmtContext {
		let localctx: CreateeventtrigstmtContext = new CreateeventtrigstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 444, PostgreSQLParser.RULE_createeventtrigstmt);
		try {
			this.state = 4055;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 194, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4029;
				this.match(PostgreSQLParser.CREATE);
				this.state = 4030;
				this.match(PostgreSQLParser.EVENT);
				this.state = 4031;
				this.match(PostgreSQLParser.TRIGGER);
				this.state = 4032;
				this.name();
				this.state = 4033;
				this.match(PostgreSQLParser.ON);
				this.state = 4034;
				this.collabel();
				this.state = 4035;
				this.match(PostgreSQLParser.EXECUTE);
				this.state = 4036;
				this.function_or_procedure();
				this.state = 4037;
				this.func_name();
				this.state = 4038;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 4039;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 4041;
				this.match(PostgreSQLParser.CREATE);
				this.state = 4042;
				this.match(PostgreSQLParser.EVENT);
				this.state = 4043;
				this.match(PostgreSQLParser.TRIGGER);
				this.state = 4044;
				this.name();
				this.state = 4045;
				this.match(PostgreSQLParser.ON);
				this.state = 4046;
				this.collabel();
				this.state = 4047;
				this.match(PostgreSQLParser.WHEN);
				this.state = 4048;
				this.event_trigger_when_list();
				this.state = 4049;
				this.match(PostgreSQLParser.EXECUTE);
				this.state = 4050;
				this.function_or_procedure();
				this.state = 4051;
				this.func_name();
				this.state = 4052;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 4053;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public event_trigger_when_list(): Event_trigger_when_listContext {
		let localctx: Event_trigger_when_listContext = new Event_trigger_when_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 446, PostgreSQLParser.RULE_event_trigger_when_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 4057;
			this.event_trigger_when_item();
			this.state = 4062;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===33) {
				{
				{
				this.state = 4058;
				this.match(PostgreSQLParser.AND);
				this.state = 4059;
				this.event_trigger_when_item();
				}
				}
				this.state = 4064;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public event_trigger_when_item(): Event_trigger_when_itemContext {
		let localctx: Event_trigger_when_itemContext = new Event_trigger_when_itemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 448, PostgreSQLParser.RULE_event_trigger_when_item);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 4065;
			this.colid();
			this.state = 4066;
			this.match(PostgreSQLParser.IN_P);
			this.state = 4067;
			this.match(PostgreSQLParser.OPEN_PAREN);
			this.state = 4068;
			this.event_trigger_value_list();
			this.state = 4069;
			this.match(PostgreSQLParser.CLOSE_PAREN);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public event_trigger_value_list(): Event_trigger_value_listContext {
		let localctx: Event_trigger_value_listContext = new Event_trigger_value_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 450, PostgreSQLParser.RULE_event_trigger_value_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 4071;
			this.sconst();
			this.state = 4076;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 4072;
				this.match(PostgreSQLParser.COMMA);
				this.state = 4073;
				this.sconst();
				}
				}
				this.state = 4078;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public altereventtrigstmt(): AltereventtrigstmtContext {
		let localctx: AltereventtrigstmtContext = new AltereventtrigstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 452, PostgreSQLParser.RULE_altereventtrigstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 4079;
			this.match(PostgreSQLParser.ALTER);
			this.state = 4080;
			this.match(PostgreSQLParser.EVENT);
			this.state = 4081;
			this.match(PostgreSQLParser.TRIGGER);
			this.state = 4082;
			this.name();
			this.state = 4083;
			this.enable_trigger();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public enable_trigger(): Enable_triggerContext {
		let localctx: Enable_triggerContext = new Enable_triggerContext(this, this._ctx, this.state);
		this.enterRule(localctx, 454, PostgreSQLParser.RULE_enable_trigger);
		try {
			this.state = 4091;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 197, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4085;
				this.match(PostgreSQLParser.ENABLE_P);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 4086;
				this.match(PostgreSQLParser.ENABLE_P);
				this.state = 4087;
				this.match(PostgreSQLParser.REPLICA);
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 4088;
				this.match(PostgreSQLParser.ENABLE_P);
				this.state = 4089;
				this.match(PostgreSQLParser.ALWAYS);
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 4090;
				this.match(PostgreSQLParser.DISABLE_P);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createassertionstmt(): CreateassertionstmtContext {
		let localctx: CreateassertionstmtContext = new CreateassertionstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 456, PostgreSQLParser.RULE_createassertionstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 4093;
			this.match(PostgreSQLParser.CREATE);
			this.state = 4094;
			this.match(PostgreSQLParser.ASSERTION);
			this.state = 4095;
			this.any_name();
			this.state = 4096;
			this.match(PostgreSQLParser.CHECK);
			this.state = 4097;
			this.match(PostgreSQLParser.OPEN_PAREN);
			this.state = 4098;
			this.a_expr();
			this.state = 4099;
			this.match(PostgreSQLParser.CLOSE_PAREN);
			this.state = 4100;
			this.constraintattributespec();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public definestmt(): DefinestmtContext {
		let localctx: DefinestmtContext = new DefinestmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 458, PostgreSQLParser.RULE_definestmt);
		try {
			this.state = 4208;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 198, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4102;
				this.match(PostgreSQLParser.CREATE);
				this.state = 4103;
				this.opt_or_replace();
				this.state = 4104;
				this.match(PostgreSQLParser.AGGREGATE);
				this.state = 4105;
				this.func_name();
				this.state = 4106;
				this.aggr_args();
				this.state = 4107;
				this.definition();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 4109;
				this.match(PostgreSQLParser.CREATE);
				this.state = 4110;
				this.opt_or_replace();
				this.state = 4111;
				this.match(PostgreSQLParser.AGGREGATE);
				this.state = 4112;
				this.func_name();
				this.state = 4113;
				this.old_aggr_definition();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 4115;
				this.match(PostgreSQLParser.CREATE);
				this.state = 4116;
				this.match(PostgreSQLParser.OPERATOR);
				this.state = 4117;
				this.any_operator();
				this.state = 4118;
				this.definition();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 4120;
				this.match(PostgreSQLParser.CREATE);
				this.state = 4121;
				this.match(PostgreSQLParser.TYPE_P);
				this.state = 4122;
				this.any_name();
				this.state = 4123;
				this.definition();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 4125;
				this.match(PostgreSQLParser.CREATE);
				this.state = 4126;
				this.match(PostgreSQLParser.TYPE_P);
				this.state = 4127;
				this.any_name();
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 4128;
				this.match(PostgreSQLParser.CREATE);
				this.state = 4129;
				this.match(PostgreSQLParser.TYPE_P);
				this.state = 4130;
				this.any_name();
				this.state = 4131;
				this.match(PostgreSQLParser.AS);
				this.state = 4132;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 4133;
				this.opttablefuncelementlist();
				this.state = 4134;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 4136;
				this.match(PostgreSQLParser.CREATE);
				this.state = 4137;
				this.match(PostgreSQLParser.TYPE_P);
				this.state = 4138;
				this.any_name();
				this.state = 4139;
				this.match(PostgreSQLParser.AS);
				this.state = 4140;
				this.match(PostgreSQLParser.ENUM_P);
				this.state = 4141;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 4142;
				this.opt_enum_val_list();
				this.state = 4143;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 8:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 4145;
				this.match(PostgreSQLParser.CREATE);
				this.state = 4146;
				this.match(PostgreSQLParser.TYPE_P);
				this.state = 4147;
				this.any_name();
				this.state = 4148;
				this.match(PostgreSQLParser.AS);
				this.state = 4149;
				this.match(PostgreSQLParser.RANGE);
				this.state = 4150;
				this.definition();
				}
				break;
			case 9:
				this.enterOuterAlt(localctx, 9);
				{
				this.state = 4152;
				this.match(PostgreSQLParser.CREATE);
				this.state = 4153;
				this.match(PostgreSQLParser.TEXT_P);
				this.state = 4154;
				this.match(PostgreSQLParser.SEARCH);
				this.state = 4155;
				this.match(PostgreSQLParser.PARSER);
				this.state = 4156;
				this.any_name();
				this.state = 4157;
				this.definition();
				}
				break;
			case 10:
				this.enterOuterAlt(localctx, 10);
				{
				this.state = 4159;
				this.match(PostgreSQLParser.CREATE);
				this.state = 4160;
				this.match(PostgreSQLParser.TEXT_P);
				this.state = 4161;
				this.match(PostgreSQLParser.SEARCH);
				this.state = 4162;
				this.match(PostgreSQLParser.DICTIONARY);
				this.state = 4163;
				this.any_name();
				this.state = 4164;
				this.definition();
				}
				break;
			case 11:
				this.enterOuterAlt(localctx, 11);
				{
				this.state = 4166;
				this.match(PostgreSQLParser.CREATE);
				this.state = 4167;
				this.match(PostgreSQLParser.TEXT_P);
				this.state = 4168;
				this.match(PostgreSQLParser.SEARCH);
				this.state = 4169;
				this.match(PostgreSQLParser.TEMPLATE);
				this.state = 4170;
				this.any_name();
				this.state = 4171;
				this.definition();
				}
				break;
			case 12:
				this.enterOuterAlt(localctx, 12);
				{
				this.state = 4173;
				this.match(PostgreSQLParser.CREATE);
				this.state = 4174;
				this.match(PostgreSQLParser.TEXT_P);
				this.state = 4175;
				this.match(PostgreSQLParser.SEARCH);
				this.state = 4176;
				this.match(PostgreSQLParser.CONFIGURATION);
				this.state = 4177;
				this.any_name();
				this.state = 4178;
				this.definition();
				}
				break;
			case 13:
				this.enterOuterAlt(localctx, 13);
				{
				this.state = 4180;
				this.match(PostgreSQLParser.CREATE);
				this.state = 4181;
				this.match(PostgreSQLParser.COLLATION);
				this.state = 4182;
				this.any_name();
				this.state = 4183;
				this.definition();
				}
				break;
			case 14:
				this.enterOuterAlt(localctx, 14);
				{
				this.state = 4185;
				this.match(PostgreSQLParser.CREATE);
				this.state = 4186;
				this.match(PostgreSQLParser.COLLATION);
				this.state = 4187;
				this.match(PostgreSQLParser.IF_P);
				this.state = 4188;
				this.match(PostgreSQLParser.NOT);
				this.state = 4189;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 4190;
				this.any_name();
				this.state = 4191;
				this.definition();
				}
				break;
			case 15:
				this.enterOuterAlt(localctx, 15);
				{
				this.state = 4193;
				this.match(PostgreSQLParser.CREATE);
				this.state = 4194;
				this.match(PostgreSQLParser.COLLATION);
				this.state = 4195;
				this.any_name();
				this.state = 4196;
				this.match(PostgreSQLParser.FROM);
				this.state = 4197;
				this.any_name();
				}
				break;
			case 16:
				this.enterOuterAlt(localctx, 16);
				{
				this.state = 4199;
				this.match(PostgreSQLParser.CREATE);
				this.state = 4200;
				this.match(PostgreSQLParser.COLLATION);
				this.state = 4201;
				this.match(PostgreSQLParser.IF_P);
				this.state = 4202;
				this.match(PostgreSQLParser.NOT);
				this.state = 4203;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 4204;
				this.any_name();
				this.state = 4205;
				this.match(PostgreSQLParser.FROM);
				this.state = 4206;
				this.any_name();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public definition(): DefinitionContext {
		let localctx: DefinitionContext = new DefinitionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 460, PostgreSQLParser.RULE_definition);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 4210;
			this.match(PostgreSQLParser.OPEN_PAREN);
			this.state = 4211;
			this.def_list();
			this.state = 4212;
			this.match(PostgreSQLParser.CLOSE_PAREN);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public def_list(): Def_listContext {
		let localctx: Def_listContext = new Def_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 462, PostgreSQLParser.RULE_def_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 4214;
			this.def_elem();
			this.state = 4219;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 4215;
				this.match(PostgreSQLParser.COMMA);
				this.state = 4216;
				this.def_elem();
				}
				}
				this.state = 4221;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public def_elem(): Def_elemContext {
		let localctx: Def_elemContext = new Def_elemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 464, PostgreSQLParser.RULE_def_elem);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 4222;
			this.collabel();
			this.state = 4225;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			if (_la===10) {
				{
				this.state = 4223;
				this.match(PostgreSQLParser.EQUAL);
				this.state = 4224;
				this.def_arg();
				}
			}

			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public def_arg(): Def_argContext {
		let localctx: Def_argContext = new Def_argContext(this, this._ctx, this.state);
		this.enterRule(localctx, 466, PostgreSQLParser.RULE_def_arg);
		try {
			this.state = 4233;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 201, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4227;
				this.func_type();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 4228;
				this.reserved_keyword();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 4229;
				this.qual_all_op();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 4230;
				this.numericonly();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 4231;
				this.sconst();
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 4232;
				this.match(PostgreSQLParser.NONE);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public old_aggr_definition(): Old_aggr_definitionContext {
		let localctx: Old_aggr_definitionContext = new Old_aggr_definitionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 468, PostgreSQLParser.RULE_old_aggr_definition);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 4235;
			this.match(PostgreSQLParser.OPEN_PAREN);
			this.state = 4236;
			this.old_aggr_list();
			this.state = 4237;
			this.match(PostgreSQLParser.CLOSE_PAREN);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public old_aggr_list(): Old_aggr_listContext {
		let localctx: Old_aggr_listContext = new Old_aggr_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 470, PostgreSQLParser.RULE_old_aggr_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 4239;
			this.old_aggr_elem();
			this.state = 4244;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 4240;
				this.match(PostgreSQLParser.COMMA);
				this.state = 4241;
				this.old_aggr_elem();
				}
				}
				this.state = 4246;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public old_aggr_elem(): Old_aggr_elemContext {
		let localctx: Old_aggr_elemContext = new Old_aggr_elemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 472, PostgreSQLParser.RULE_old_aggr_elem);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 4247;
			this.identifier();
			this.state = 4248;
			this.match(PostgreSQLParser.EQUAL);
			this.state = 4249;
			this.def_arg();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_enum_val_list(): Opt_enum_val_listContext {
		let localctx: Opt_enum_val_listContext = new Opt_enum_val_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 474, PostgreSQLParser.RULE_opt_enum_val_list);
		try {
			this.state = 4253;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 521:
			case 523:
			case 525:
			case 547:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4251;
				this.enum_val_list();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public enum_val_list(): Enum_val_listContext {
		let localctx: Enum_val_listContext = new Enum_val_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 476, PostgreSQLParser.RULE_enum_val_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 4255;
			this.sconst();
			this.state = 4260;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 4256;
				this.match(PostgreSQLParser.COMMA);
				this.state = 4257;
				this.sconst();
				}
				}
				this.state = 4262;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alterenumstmt(): AlterenumstmtContext {
		let localctx: AlterenumstmtContext = new AlterenumstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 478, PostgreSQLParser.RULE_alterenumstmt);
		try {
			this.state = 4300;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 205, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4263;
				this.match(PostgreSQLParser.ALTER);
				this.state = 4264;
				this.match(PostgreSQLParser.TYPE_P);
				this.state = 4265;
				this.any_name();
				this.state = 4266;
				this.match(PostgreSQLParser.ADD_P);
				this.state = 4267;
				this.match(PostgreSQLParser.VALUE_P);
				this.state = 4268;
				this.opt_if_not_exists();
				this.state = 4269;
				this.sconst();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 4271;
				this.match(PostgreSQLParser.ALTER);
				this.state = 4272;
				this.match(PostgreSQLParser.TYPE_P);
				this.state = 4273;
				this.any_name();
				this.state = 4274;
				this.match(PostgreSQLParser.ADD_P);
				this.state = 4275;
				this.match(PostgreSQLParser.VALUE_P);
				this.state = 4276;
				this.opt_if_not_exists();
				this.state = 4277;
				this.sconst();
				this.state = 4278;
				this.match(PostgreSQLParser.BEFORE);
				this.state = 4279;
				this.sconst();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 4281;
				this.match(PostgreSQLParser.ALTER);
				this.state = 4282;
				this.match(PostgreSQLParser.TYPE_P);
				this.state = 4283;
				this.any_name();
				this.state = 4284;
				this.match(PostgreSQLParser.ADD_P);
				this.state = 4285;
				this.match(PostgreSQLParser.VALUE_P);
				this.state = 4286;
				this.opt_if_not_exists();
				this.state = 4287;
				this.sconst();
				this.state = 4288;
				this.match(PostgreSQLParser.AFTER);
				this.state = 4289;
				this.sconst();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 4291;
				this.match(PostgreSQLParser.ALTER);
				this.state = 4292;
				this.match(PostgreSQLParser.TYPE_P);
				this.state = 4293;
				this.any_name();
				this.state = 4294;
				this.match(PostgreSQLParser.RENAME);
				this.state = 4295;
				this.match(PostgreSQLParser.VALUE_P);
				this.state = 4296;
				this.sconst();
				this.state = 4297;
				this.match(PostgreSQLParser.TO);
				this.state = 4298;
				this.sconst();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_if_not_exists(): Opt_if_not_existsContext {
		let localctx: Opt_if_not_existsContext = new Opt_if_not_existsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 480, PostgreSQLParser.RULE_opt_if_not_exists);
		try {
			this.state = 4306;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 220:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4302;
				this.match(PostgreSQLParser.IF_P);
				this.state = 4303;
				this.match(PostgreSQLParser.NOT);
				this.state = 4304;
				this.match(PostgreSQLParser.EXISTS);
				}
				break;
			case 521:
			case 523:
			case 525:
			case 547:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createopclassstmt(): CreateopclassstmtContext {
		let localctx: CreateopclassstmtContext = new CreateopclassstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 482, PostgreSQLParser.RULE_createopclassstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 4308;
			this.match(PostgreSQLParser.CREATE);
			this.state = 4309;
			this.match(PostgreSQLParser.OPERATOR);
			this.state = 4310;
			this.match(PostgreSQLParser.CLASS);
			this.state = 4311;
			this.any_name();
			this.state = 4312;
			this.opt_default();
			this.state = 4313;
			this.match(PostgreSQLParser.FOR);
			this.state = 4314;
			this.match(PostgreSQLParser.TYPE_P);
			this.state = 4315;
			this.typename();
			this.state = 4316;
			this.match(PostgreSQLParser.USING);
			this.state = 4317;
			this.name();
			this.state = 4318;
			this.opt_opfamily();
			this.state = 4319;
			this.match(PostgreSQLParser.AS);
			this.state = 4320;
			this.opclass_item_list();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opclass_item_list(): Opclass_item_listContext {
		let localctx: Opclass_item_listContext = new Opclass_item_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 484, PostgreSQLParser.RULE_opclass_item_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 4322;
			this.opclass_item();
			this.state = 4327;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 4323;
				this.match(PostgreSQLParser.COMMA);
				this.state = 4324;
				this.opclass_item();
				}
				}
				this.state = 4329;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opclass_item(): Opclass_itemContext {
		let localctx: Opclass_itemContext = new Opclass_itemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 486, PostgreSQLParser.RULE_opclass_item);
		try {
			this.state = 4355;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 208, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4330;
				this.match(PostgreSQLParser.OPERATOR);
				this.state = 4331;
				this.iconst();
				this.state = 4332;
				this.any_operator();
				this.state = 4333;
				this.opclass_purpose();
				this.state = 4334;
				this.opt_recheck();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 4336;
				this.match(PostgreSQLParser.OPERATOR);
				this.state = 4337;
				this.iconst();
				this.state = 4338;
				this.operator_with_argtypes();
				this.state = 4339;
				this.opclass_purpose();
				this.state = 4340;
				this.opt_recheck();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 4342;
				this.match(PostgreSQLParser.FUNCTION);
				this.state = 4343;
				this.iconst();
				this.state = 4344;
				this.function_with_argtypes();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 4346;
				this.match(PostgreSQLParser.FUNCTION);
				this.state = 4347;
				this.iconst();
				this.state = 4348;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 4349;
				this.type_list();
				this.state = 4350;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 4351;
				this.function_with_argtypes();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 4353;
				this.match(PostgreSQLParser.STORAGE);
				this.state = 4354;
				this.typename();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_default(): Opt_defaultContext {
		let localctx: Opt_defaultContext = new Opt_defaultContext(this, this._ctx, this.state);
		this.enterRule(localctx, 488, PostgreSQLParser.RULE_opt_default);
		try {
			this.state = 4359;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 53:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4357;
				this.match(PostgreSQLParser.DEFAULT);
				}
				break;
			case 62:
			case 168:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_opfamily(): Opt_opfamilyContext {
		let localctx: Opt_opfamilyContext = new Opt_opfamilyContext(this, this._ctx, this.state);
		this.enterRule(localctx, 490, PostgreSQLParser.RULE_opt_opfamily);
		try {
			this.state = 4364;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 206:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4361;
				this.match(PostgreSQLParser.FAMILY);
				this.state = 4362;
				this.any_name();
				}
				break;
			case 36:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opclass_purpose(): Opclass_purposeContext {
		let localctx: Opclass_purposeContext = new Opclass_purposeContext(this, this._ctx, this.state);
		this.enterRule(localctx, 492, PostgreSQLParser.RULE_opclass_purpose);
		try {
			this.state = 4373;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 211, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4366;
				this.match(PostgreSQLParser.FOR);
				this.state = 4367;
				this.match(PostgreSQLParser.SEARCH);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 4368;
				this.match(PostgreSQLParser.FOR);
				this.state = 4369;
				this.match(PostgreSQLParser.ORDER);
				this.state = 4370;
				this.match(PostgreSQLParser.BY);
				this.state = 4371;
				this.any_name();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_recheck(): Opt_recheckContext {
		let localctx: Opt_recheckContext = new Opt_recheckContext(this, this._ctx, this.state);
		this.enterRule(localctx, 494, PostgreSQLParser.RULE_opt_recheck);
		try {
			this.state = 4377;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 293:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4375;
				this.match(PostgreSQLParser.RECHECK);
				}
				break;
			case -1:
			case 2:
			case 6:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 88:
			case 92:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createopfamilystmt(): CreateopfamilystmtContext {
		let localctx: CreateopfamilystmtContext = new CreateopfamilystmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 496, PostgreSQLParser.RULE_createopfamilystmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 4379;
			this.match(PostgreSQLParser.CREATE);
			this.state = 4380;
			this.match(PostgreSQLParser.OPERATOR);
			this.state = 4381;
			this.match(PostgreSQLParser.FAMILY);
			this.state = 4382;
			this.any_name();
			this.state = 4383;
			this.match(PostgreSQLParser.USING);
			this.state = 4384;
			this.name();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alteropfamilystmt(): AlteropfamilystmtContext {
		let localctx: AlteropfamilystmtContext = new AlteropfamilystmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 498, PostgreSQLParser.RULE_alteropfamilystmt);
		try {
			this.state = 4404;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 213, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4386;
				this.match(PostgreSQLParser.ALTER);
				this.state = 4387;
				this.match(PostgreSQLParser.OPERATOR);
				this.state = 4388;
				this.match(PostgreSQLParser.FAMILY);
				this.state = 4389;
				this.any_name();
				this.state = 4390;
				this.match(PostgreSQLParser.USING);
				this.state = 4391;
				this.name();
				this.state = 4392;
				this.match(PostgreSQLParser.ADD_P);
				this.state = 4393;
				this.opclass_item_list();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 4395;
				this.match(PostgreSQLParser.ALTER);
				this.state = 4396;
				this.match(PostgreSQLParser.OPERATOR);
				this.state = 4397;
				this.match(PostgreSQLParser.FAMILY);
				this.state = 4398;
				this.any_name();
				this.state = 4399;
				this.match(PostgreSQLParser.USING);
				this.state = 4400;
				this.name();
				this.state = 4401;
				this.match(PostgreSQLParser.DROP);
				this.state = 4402;
				this.opclass_drop_list();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opclass_drop_list(): Opclass_drop_listContext {
		let localctx: Opclass_drop_listContext = new Opclass_drop_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 500, PostgreSQLParser.RULE_opclass_drop_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 4406;
			this.opclass_drop();
			this.state = 4411;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 4407;
				this.match(PostgreSQLParser.COMMA);
				this.state = 4408;
				this.opclass_drop();
				}
				}
				this.state = 4413;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opclass_drop(): Opclass_dropContext {
		let localctx: Opclass_dropContext = new Opclass_dropContext(this, this._ctx, this.state);
		this.enterRule(localctx, 502, PostgreSQLParser.RULE_opclass_drop);
		try {
			this.state = 4426;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 269:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4414;
				this.match(PostgreSQLParser.OPERATOR);
				this.state = 4415;
				this.iconst();
				this.state = 4416;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 4417;
				this.type_list();
				this.state = 4418;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 211:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 4420;
				this.match(PostgreSQLParser.FUNCTION);
				this.state = 4421;
				this.iconst();
				this.state = 4422;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 4423;
				this.type_list();
				this.state = 4424;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public dropopclassstmt(): DropopclassstmtContext {
		let localctx: DropopclassstmtContext = new DropopclassstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 504, PostgreSQLParser.RULE_dropopclassstmt);
		try {
			this.state = 4446;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 216, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4428;
				this.match(PostgreSQLParser.DROP);
				this.state = 4429;
				this.match(PostgreSQLParser.OPERATOR);
				this.state = 4430;
				this.match(PostgreSQLParser.CLASS);
				this.state = 4431;
				this.any_name();
				this.state = 4432;
				this.match(PostgreSQLParser.USING);
				this.state = 4433;
				this.name();
				this.state = 4434;
				this.opt_drop_behavior();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 4436;
				this.match(PostgreSQLParser.DROP);
				this.state = 4437;
				this.match(PostgreSQLParser.OPERATOR);
				this.state = 4438;
				this.match(PostgreSQLParser.CLASS);
				this.state = 4439;
				this.match(PostgreSQLParser.IF_P);
				this.state = 4440;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 4441;
				this.any_name();
				this.state = 4442;
				this.match(PostgreSQLParser.USING);
				this.state = 4443;
				this.name();
				this.state = 4444;
				this.opt_drop_behavior();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public dropopfamilystmt(): DropopfamilystmtContext {
		let localctx: DropopfamilystmtContext = new DropopfamilystmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 506, PostgreSQLParser.RULE_dropopfamilystmt);
		try {
			this.state = 4466;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 217, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4448;
				this.match(PostgreSQLParser.DROP);
				this.state = 4449;
				this.match(PostgreSQLParser.OPERATOR);
				this.state = 4450;
				this.match(PostgreSQLParser.FAMILY);
				this.state = 4451;
				this.any_name();
				this.state = 4452;
				this.match(PostgreSQLParser.USING);
				this.state = 4453;
				this.name();
				this.state = 4454;
				this.opt_drop_behavior();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 4456;
				this.match(PostgreSQLParser.DROP);
				this.state = 4457;
				this.match(PostgreSQLParser.OPERATOR);
				this.state = 4458;
				this.match(PostgreSQLParser.FAMILY);
				this.state = 4459;
				this.match(PostgreSQLParser.IF_P);
				this.state = 4460;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 4461;
				this.any_name();
				this.state = 4462;
				this.match(PostgreSQLParser.USING);
				this.state = 4463;
				this.name();
				this.state = 4464;
				this.opt_drop_behavior();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public dropownedstmt(): DropownedstmtContext {
		let localctx: DropownedstmtContext = new DropownedstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 508, PostgreSQLParser.RULE_dropownedstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 4468;
			this.match(PostgreSQLParser.DROP);
			this.state = 4469;
			this.match(PostgreSQLParser.OWNED);
			this.state = 4470;
			this.match(PostgreSQLParser.BY);
			this.state = 4471;
			this.role_list();
			this.state = 4472;
			this.opt_drop_behavior();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public reassignownedstmt(): ReassignownedstmtContext {
		let localctx: ReassignownedstmtContext = new ReassignownedstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 510, PostgreSQLParser.RULE_reassignownedstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 4474;
			this.match(PostgreSQLParser.REASSIGN);
			this.state = 4475;
			this.match(PostgreSQLParser.OWNED);
			this.state = 4476;
			this.match(PostgreSQLParser.BY);
			this.state = 4477;
			this.role_list();
			this.state = 4478;
			this.match(PostgreSQLParser.TO);
			this.state = 4479;
			this.rolespec();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public dropstmt(): DropstmtContext {
		let localctx: DropstmtContext = new DropstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 512, PostgreSQLParser.RULE_dropstmt);
		try {
			this.state = 4559;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 218, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4481;
				this.match(PostgreSQLParser.DROP);
				this.state = 4482;
				this.object_type_any_name();
				this.state = 4483;
				this.match(PostgreSQLParser.IF_P);
				this.state = 4484;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 4485;
				this.any_name_list();
				this.state = 4486;
				this.opt_drop_behavior();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 4488;
				this.match(PostgreSQLParser.DROP);
				this.state = 4489;
				this.object_type_any_name();
				this.state = 4490;
				this.any_name_list();
				this.state = 4491;
				this.opt_drop_behavior();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 4493;
				this.match(PostgreSQLParser.DROP);
				this.state = 4494;
				this.drop_type_name();
				this.state = 4495;
				this.match(PostgreSQLParser.IF_P);
				this.state = 4496;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 4497;
				this.name_list();
				this.state = 4498;
				this.opt_drop_behavior();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 4500;
				this.match(PostgreSQLParser.DROP);
				this.state = 4501;
				this.drop_type_name();
				this.state = 4502;
				this.name_list();
				this.state = 4503;
				this.opt_drop_behavior();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 4505;
				this.match(PostgreSQLParser.DROP);
				this.state = 4506;
				this.object_type_name_on_any_name();
				this.state = 4507;
				this.name();
				this.state = 4508;
				this.match(PostgreSQLParser.ON);
				this.state = 4509;
				this.any_name();
				this.state = 4510;
				this.opt_drop_behavior();
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 4512;
				this.match(PostgreSQLParser.DROP);
				this.state = 4513;
				this.object_type_name_on_any_name();
				this.state = 4514;
				this.match(PostgreSQLParser.IF_P);
				this.state = 4515;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 4516;
				this.name();
				this.state = 4517;
				this.match(PostgreSQLParser.ON);
				this.state = 4518;
				this.any_name();
				this.state = 4519;
				this.opt_drop_behavior();
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 4521;
				this.match(PostgreSQLParser.DROP);
				this.state = 4522;
				this.match(PostgreSQLParser.TYPE_P);
				this.state = 4523;
				this.type_name_list();
				this.state = 4524;
				this.opt_drop_behavior();
				}
				break;
			case 8:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 4526;
				this.match(PostgreSQLParser.DROP);
				this.state = 4527;
				this.match(PostgreSQLParser.TYPE_P);
				this.state = 4528;
				this.match(PostgreSQLParser.IF_P);
				this.state = 4529;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 4530;
				this.type_name_list();
				this.state = 4531;
				this.opt_drop_behavior();
				}
				break;
			case 9:
				this.enterOuterAlt(localctx, 9);
				{
				this.state = 4533;
				this.match(PostgreSQLParser.DROP);
				this.state = 4534;
				this.match(PostgreSQLParser.DOMAIN_P);
				this.state = 4535;
				this.type_name_list();
				this.state = 4536;
				this.opt_drop_behavior();
				}
				break;
			case 10:
				this.enterOuterAlt(localctx, 10);
				{
				this.state = 4538;
				this.match(PostgreSQLParser.DROP);
				this.state = 4539;
				this.match(PostgreSQLParser.DOMAIN_P);
				this.state = 4540;
				this.match(PostgreSQLParser.IF_P);
				this.state = 4541;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 4542;
				this.type_name_list();
				this.state = 4543;
				this.opt_drop_behavior();
				}
				break;
			case 11:
				this.enterOuterAlt(localctx, 11);
				{
				this.state = 4545;
				this.match(PostgreSQLParser.DROP);
				this.state = 4546;
				this.match(PostgreSQLParser.INDEX);
				this.state = 4547;
				this.match(PostgreSQLParser.CONCURRENTLY);
				this.state = 4548;
				this.any_name_list();
				this.state = 4549;
				this.opt_drop_behavior();
				}
				break;
			case 12:
				this.enterOuterAlt(localctx, 12);
				{
				this.state = 4551;
				this.match(PostgreSQLParser.DROP);
				this.state = 4552;
				this.match(PostgreSQLParser.INDEX);
				this.state = 4553;
				this.match(PostgreSQLParser.CONCURRENTLY);
				this.state = 4554;
				this.match(PostgreSQLParser.IF_P);
				this.state = 4555;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 4556;
				this.any_name_list();
				this.state = 4557;
				this.opt_drop_behavior();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public object_type_any_name(): Object_type_any_nameContext {
		let localctx: Object_type_any_nameContext = new Object_type_any_nameContext(this, this._ctx, this.state);
		this.enterRule(localctx, 514, PostgreSQLParser.RULE_object_type_any_name);
		try {
			this.state = 4584;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 219, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4561;
				this.match(PostgreSQLParser.TABLE);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 4562;
				this.match(PostgreSQLParser.SEQUENCE);
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 4563;
				this.match(PostgreSQLParser.VIEW);
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 4564;
				this.match(PostgreSQLParser.MATERIALIZED);
				this.state = 4565;
				this.match(PostgreSQLParser.VIEW);
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 4566;
				this.match(PostgreSQLParser.INDEX);
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 4567;
				this.match(PostgreSQLParser.FOREIGN);
				this.state = 4568;
				this.match(PostgreSQLParser.TABLE);
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 4569;
				this.match(PostgreSQLParser.COLLATION);
				}
				break;
			case 8:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 4570;
				this.match(PostgreSQLParser.CONVERSION_P);
				}
				break;
			case 9:
				this.enterOuterAlt(localctx, 9);
				{
				this.state = 4571;
				this.match(PostgreSQLParser.STATISTICS);
				}
				break;
			case 10:
				this.enterOuterAlt(localctx, 10);
				{
				this.state = 4572;
				this.match(PostgreSQLParser.TEXT_P);
				this.state = 4573;
				this.match(PostgreSQLParser.SEARCH);
				this.state = 4574;
				this.match(PostgreSQLParser.PARSER);
				}
				break;
			case 11:
				this.enterOuterAlt(localctx, 11);
				{
				this.state = 4575;
				this.match(PostgreSQLParser.TEXT_P);
				this.state = 4576;
				this.match(PostgreSQLParser.SEARCH);
				this.state = 4577;
				this.match(PostgreSQLParser.DICTIONARY);
				}
				break;
			case 12:
				this.enterOuterAlt(localctx, 12);
				{
				this.state = 4578;
				this.match(PostgreSQLParser.TEXT_P);
				this.state = 4579;
				this.match(PostgreSQLParser.SEARCH);
				this.state = 4580;
				this.match(PostgreSQLParser.TEMPLATE);
				}
				break;
			case 13:
				this.enterOuterAlt(localctx, 13);
				{
				this.state = 4581;
				this.match(PostgreSQLParser.TEXT_P);
				this.state = 4582;
				this.match(PostgreSQLParser.SEARCH);
				this.state = 4583;
				this.match(PostgreSQLParser.CONFIGURATION);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public object_type_name(): Object_type_nameContext {
		let localctx: Object_type_nameContext = new Object_type_nameContext(this, this._ctx, this.state);
		this.enterRule(localctx, 516, PostgreSQLParser.RULE_object_type_name);
		try {
			this.state = 4591;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 63:
			case 131:
			case 198:
			case 204:
			case 238:
			case 286:
			case 314:
			case 322:
			case 443:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4586;
				this.drop_type_name();
				}
				break;
			case 175:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 4587;
				this.match(PostgreSQLParser.DATABASE);
				}
				break;
			case 309:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 4588;
				this.match(PostgreSQLParser.ROLE);
				}
				break;
			case 442:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 4589;
				this.match(PostgreSQLParser.SUBSCRIPTION);
				}
				break;
			case 342:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 4590;
				this.match(PostgreSQLParser.TABLESPACE);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public drop_type_name(): Drop_type_nameContext {
		let localctx: Drop_type_nameContext = new Drop_type_nameContext(this, this._ctx, this.state);
		this.enterRule(localctx, 518, PostgreSQLParser.RULE_drop_type_name);
		try {
			this.state = 4607;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 131:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4593;
				this.match(PostgreSQLParser.ACCESS);
				this.state = 4594;
				this.match(PostgreSQLParser.METHOD);
				}
				break;
			case 198:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 4595;
				this.match(PostgreSQLParser.EVENT);
				this.state = 4596;
				this.match(PostgreSQLParser.TRIGGER);
				}
				break;
			case 204:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 4597;
				this.match(PostgreSQLParser.EXTENSION);
				}
				break;
			case 63:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 4598;
				this.match(PostgreSQLParser.FOREIGN);
				this.state = 4599;
				this.match(PostgreSQLParser.DATA_P);
				this.state = 4600;
				this.match(PostgreSQLParser.WRAPPER);
				}
				break;
			case 238:
			case 286:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 4601;
				this.opt_procedural();
				this.state = 4602;
				this.match(PostgreSQLParser.LANGUAGE);
				}
				break;
			case 443:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 4604;
				this.match(PostgreSQLParser.PUBLICATION);
				}
				break;
			case 314:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 4605;
				this.match(PostgreSQLParser.SCHEMA);
				}
				break;
			case 322:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 4606;
				this.match(PostgreSQLParser.SERVER);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public object_type_name_on_any_name(): Object_type_name_on_any_nameContext {
		let localctx: Object_type_name_on_any_nameContext = new Object_type_name_on_any_nameContext(this, this._ctx, this.state);
		this.enterRule(localctx, 520, PostgreSQLParser.RULE_object_type_name_on_any_name);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 4609;
			_la = this._input.LA(1);
			if(!(_la===312 || _la===348 || _la===436)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public any_name_list(): Any_name_listContext {
		let localctx: Any_name_listContext = new Any_name_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 522, PostgreSQLParser.RULE_any_name_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 4611;
			this.any_name();
			this.state = 4616;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 4612;
				this.match(PostgreSQLParser.COMMA);
				this.state = 4613;
				this.any_name();
				}
				}
				this.state = 4618;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public any_name(): Any_nameContext {
		let localctx: Any_nameContext = new Any_nameContext(this, this._ctx, this.state);
		this.enterRule(localctx, 524, PostgreSQLParser.RULE_any_name);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 4619;
			this.colid();
			this.state = 4621;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			if (_la===11) {
				{
				this.state = 4620;
				this.attrs();
				}
			}

			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public attrs(): AttrsContext {
		let localctx: AttrsContext = new AttrsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 526, PostgreSQLParser.RULE_attrs);
		try {
			let _alt: number;
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 4625;
			this._errHandler.sync(this);
			_alt = 1;
			do {
				switch (_alt) {
				case 1:
					{
					{
					this.state = 4623;
					this.match(PostgreSQLParser.DOT);
					this.state = 4624;
					this.attr_name();
					}
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				this.state = 4627;
				this._errHandler.sync(this);
				_alt = this._interp.adaptivePredict(this._input, 224, this._ctx);
			} while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public type_name_list(): Type_name_listContext {
		let localctx: Type_name_listContext = new Type_name_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 528, PostgreSQLParser.RULE_type_name_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 4629;
			this.typename();
			this.state = 4634;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 4630;
				this.match(PostgreSQLParser.COMMA);
				this.state = 4631;
				this.typename();
				}
				}
				this.state = 4636;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public truncatestmt(): TruncatestmtContext {
		let localctx: TruncatestmtContext = new TruncatestmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 530, PostgreSQLParser.RULE_truncatestmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 4637;
			this.match(PostgreSQLParser.TRUNCATE);
			this.state = 4638;
			this.opt_table();
			this.state = 4639;
			this.relation_expr_list();
			this.state = 4640;
			this.opt_restart_seqs();
			this.state = 4641;
			this.opt_drop_behavior();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_restart_seqs(): Opt_restart_seqsContext {
		let localctx: Opt_restart_seqsContext = new Opt_restart_seqsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 532, PostgreSQLParser.RULE_opt_restart_seqs);
		try {
			this.state = 4648;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 167:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4643;
				this.match(PostgreSQLParser.CONTINUE_P);
				this.state = 4644;
				this.match(PostgreSQLParser.IDENTITY_P);
				}
				break;
			case 305:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 4645;
				this.match(PostgreSQLParser.RESTART);
				this.state = 4646;
				this.match(PostgreSQLParser.IDENTITY_P);
				}
				break;
			case -1:
			case 2:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 88:
			case 92:
			case 105:
			case 129:
			case 138:
			case 146:
			case 150:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 306:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 3);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public commentstmt(): CommentstmtContext {
		let localctx: CommentstmtContext = new CommentstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 534, PostgreSQLParser.RULE_commentstmt);
		try {
			this.state = 4797;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 227, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4650;
				this.match(PostgreSQLParser.COMMENT);
				this.state = 4651;
				this.match(PostgreSQLParser.ON);
				this.state = 4652;
				this.object_type_any_name();
				this.state = 4653;
				this.any_name();
				this.state = 4654;
				this.match(PostgreSQLParser.IS);
				this.state = 4655;
				this.comment_text();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 4657;
				this.match(PostgreSQLParser.COMMENT);
				this.state = 4658;
				this.match(PostgreSQLParser.ON);
				this.state = 4659;
				this.match(PostgreSQLParser.COLUMN);
				this.state = 4660;
				this.any_name();
				this.state = 4661;
				this.match(PostgreSQLParser.IS);
				this.state = 4662;
				this.comment_text();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 4664;
				this.match(PostgreSQLParser.COMMENT);
				this.state = 4665;
				this.match(PostgreSQLParser.ON);
				this.state = 4666;
				this.object_type_name();
				this.state = 4667;
				this.name();
				this.state = 4668;
				this.match(PostgreSQLParser.IS);
				this.state = 4669;
				this.comment_text();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 4671;
				this.match(PostgreSQLParser.COMMENT);
				this.state = 4672;
				this.match(PostgreSQLParser.ON);
				this.state = 4673;
				this.match(PostgreSQLParser.TYPE_P);
				this.state = 4674;
				this.typename();
				this.state = 4675;
				this.match(PostgreSQLParser.IS);
				this.state = 4676;
				this.comment_text();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 4678;
				this.match(PostgreSQLParser.COMMENT);
				this.state = 4679;
				this.match(PostgreSQLParser.ON);
				this.state = 4680;
				this.match(PostgreSQLParser.DOMAIN_P);
				this.state = 4681;
				this.typename();
				this.state = 4682;
				this.match(PostgreSQLParser.IS);
				this.state = 4683;
				this.comment_text();
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 4685;
				this.match(PostgreSQLParser.COMMENT);
				this.state = 4686;
				this.match(PostgreSQLParser.ON);
				this.state = 4687;
				this.match(PostgreSQLParser.AGGREGATE);
				this.state = 4688;
				this.aggregate_with_argtypes();
				this.state = 4689;
				this.match(PostgreSQLParser.IS);
				this.state = 4690;
				this.comment_text();
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 4692;
				this.match(PostgreSQLParser.COMMENT);
				this.state = 4693;
				this.match(PostgreSQLParser.ON);
				this.state = 4694;
				this.match(PostgreSQLParser.FUNCTION);
				this.state = 4695;
				this.function_with_argtypes();
				this.state = 4696;
				this.match(PostgreSQLParser.IS);
				this.state = 4697;
				this.comment_text();
				}
				break;
			case 8:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 4699;
				this.match(PostgreSQLParser.COMMENT);
				this.state = 4700;
				this.match(PostgreSQLParser.ON);
				this.state = 4701;
				this.match(PostgreSQLParser.OPERATOR);
				this.state = 4702;
				this.operator_with_argtypes();
				this.state = 4703;
				this.match(PostgreSQLParser.IS);
				this.state = 4704;
				this.comment_text();
				}
				break;
			case 9:
				this.enterOuterAlt(localctx, 9);
				{
				this.state = 4706;
				this.match(PostgreSQLParser.COMMENT);
				this.state = 4707;
				this.match(PostgreSQLParser.ON);
				this.state = 4708;
				this.match(PostgreSQLParser.CONSTRAINT);
				this.state = 4709;
				this.name();
				this.state = 4710;
				this.match(PostgreSQLParser.ON);
				this.state = 4711;
				this.any_name();
				this.state = 4712;
				this.match(PostgreSQLParser.IS);
				this.state = 4713;
				this.comment_text();
				}
				break;
			case 10:
				this.enterOuterAlt(localctx, 10);
				{
				this.state = 4715;
				this.match(PostgreSQLParser.COMMENT);
				this.state = 4716;
				this.match(PostgreSQLParser.ON);
				this.state = 4717;
				this.match(PostgreSQLParser.CONSTRAINT);
				this.state = 4718;
				this.name();
				this.state = 4719;
				this.match(PostgreSQLParser.ON);
				this.state = 4720;
				this.match(PostgreSQLParser.DOMAIN_P);
				this.state = 4721;
				this.any_name();
				this.state = 4722;
				this.match(PostgreSQLParser.IS);
				this.state = 4723;
				this.comment_text();
				}
				break;
			case 11:
				this.enterOuterAlt(localctx, 11);
				{
				this.state = 4725;
				this.match(PostgreSQLParser.COMMENT);
				this.state = 4726;
				this.match(PostgreSQLParser.ON);
				this.state = 4727;
				this.object_type_name_on_any_name();
				this.state = 4728;
				this.name();
				this.state = 4729;
				this.match(PostgreSQLParser.ON);
				this.state = 4730;
				this.any_name();
				this.state = 4731;
				this.match(PostgreSQLParser.IS);
				this.state = 4732;
				this.comment_text();
				}
				break;
			case 12:
				this.enterOuterAlt(localctx, 12);
				{
				this.state = 4734;
				this.match(PostgreSQLParser.COMMENT);
				this.state = 4735;
				this.match(PostgreSQLParser.ON);
				this.state = 4736;
				this.match(PostgreSQLParser.PROCEDURE);
				this.state = 4737;
				this.function_with_argtypes();
				this.state = 4738;
				this.match(PostgreSQLParser.IS);
				this.state = 4739;
				this.comment_text();
				}
				break;
			case 13:
				this.enterOuterAlt(localctx, 13);
				{
				this.state = 4741;
				this.match(PostgreSQLParser.COMMENT);
				this.state = 4742;
				this.match(PostgreSQLParser.ON);
				this.state = 4743;
				this.match(PostgreSQLParser.ROUTINE);
				this.state = 4744;
				this.function_with_argtypes();
				this.state = 4745;
				this.match(PostgreSQLParser.IS);
				this.state = 4746;
				this.comment_text();
				}
				break;
			case 14:
				this.enterOuterAlt(localctx, 14);
				{
				this.state = 4748;
				this.match(PostgreSQLParser.COMMENT);
				this.state = 4749;
				this.match(PostgreSQLParser.ON);
				this.state = 4750;
				this.match(PostgreSQLParser.TRANSFORM);
				this.state = 4751;
				this.match(PostgreSQLParser.FOR);
				this.state = 4752;
				this.typename();
				this.state = 4753;
				this.match(PostgreSQLParser.LANGUAGE);
				this.state = 4754;
				this.name();
				this.state = 4755;
				this.match(PostgreSQLParser.IS);
				this.state = 4756;
				this.comment_text();
				}
				break;
			case 15:
				this.enterOuterAlt(localctx, 15);
				{
				this.state = 4758;
				this.match(PostgreSQLParser.COMMENT);
				this.state = 4759;
				this.match(PostgreSQLParser.ON);
				this.state = 4760;
				this.match(PostgreSQLParser.OPERATOR);
				this.state = 4761;
				this.match(PostgreSQLParser.CLASS);
				this.state = 4762;
				this.any_name();
				this.state = 4763;
				this.match(PostgreSQLParser.USING);
				this.state = 4764;
				this.name();
				this.state = 4765;
				this.match(PostgreSQLParser.IS);
				this.state = 4766;
				this.comment_text();
				}
				break;
			case 16:
				this.enterOuterAlt(localctx, 16);
				{
				this.state = 4768;
				this.match(PostgreSQLParser.COMMENT);
				this.state = 4769;
				this.match(PostgreSQLParser.ON);
				this.state = 4770;
				this.match(PostgreSQLParser.OPERATOR);
				this.state = 4771;
				this.match(PostgreSQLParser.FAMILY);
				this.state = 4772;
				this.any_name();
				this.state = 4773;
				this.match(PostgreSQLParser.USING);
				this.state = 4774;
				this.name();
				this.state = 4775;
				this.match(PostgreSQLParser.IS);
				this.state = 4776;
				this.comment_text();
				}
				break;
			case 17:
				this.enterOuterAlt(localctx, 17);
				{
				this.state = 4778;
				this.match(PostgreSQLParser.COMMENT);
				this.state = 4779;
				this.match(PostgreSQLParser.ON);
				this.state = 4780;
				this.match(PostgreSQLParser.LARGE_P);
				this.state = 4781;
				this.match(PostgreSQLParser.OBJECT_P);
				this.state = 4782;
				this.numericonly();
				this.state = 4783;
				this.match(PostgreSQLParser.IS);
				this.state = 4784;
				this.comment_text();
				}
				break;
			case 18:
				this.enterOuterAlt(localctx, 18);
				{
				this.state = 4786;
				this.match(PostgreSQLParser.COMMENT);
				this.state = 4787;
				this.match(PostgreSQLParser.ON);
				this.state = 4788;
				this.match(PostgreSQLParser.CAST);
				this.state = 4789;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 4790;
				this.typename();
				this.state = 4791;
				this.match(PostgreSQLParser.AS);
				this.state = 4792;
				this.typename();
				this.state = 4793;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 4794;
				this.match(PostgreSQLParser.IS);
				this.state = 4795;
				this.comment_text();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public comment_text(): Comment_textContext {
		let localctx: Comment_textContext = new Comment_textContext(this, this._ctx, this.state);
		this.enterRule(localctx, 536, PostgreSQLParser.RULE_comment_text);
		try {
			this.state = 4801;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 521:
			case 523:
			case 525:
			case 547:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4799;
				this.sconst();
				}
				break;
			case 78:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 4800;
				this.match(PostgreSQLParser.NULL_P);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public seclabelstmt(): SeclabelstmtContext {
		let localctx: SeclabelstmtContext = new SeclabelstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 538, PostgreSQLParser.RULE_seclabelstmt);
		try {
			this.state = 4894;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 229, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4803;
				this.match(PostgreSQLParser.SECURITY);
				this.state = 4804;
				this.match(PostgreSQLParser.LABEL);
				this.state = 4805;
				this.opt_provider();
				this.state = 4806;
				this.match(PostgreSQLParser.ON);
				this.state = 4807;
				this.object_type_any_name();
				this.state = 4808;
				this.any_name();
				this.state = 4809;
				this.match(PostgreSQLParser.IS);
				this.state = 4810;
				this.security_label();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 4812;
				this.match(PostgreSQLParser.SECURITY);
				this.state = 4813;
				this.match(PostgreSQLParser.LABEL);
				this.state = 4814;
				this.opt_provider();
				this.state = 4815;
				this.match(PostgreSQLParser.ON);
				this.state = 4816;
				this.match(PostgreSQLParser.COLUMN);
				this.state = 4817;
				this.any_name();
				this.state = 4818;
				this.match(PostgreSQLParser.IS);
				this.state = 4819;
				this.security_label();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 4821;
				this.match(PostgreSQLParser.SECURITY);
				this.state = 4822;
				this.match(PostgreSQLParser.LABEL);
				this.state = 4823;
				this.opt_provider();
				this.state = 4824;
				this.match(PostgreSQLParser.ON);
				this.state = 4825;
				this.object_type_name();
				this.state = 4826;
				this.name();
				this.state = 4827;
				this.match(PostgreSQLParser.IS);
				this.state = 4828;
				this.security_label();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 4830;
				this.match(PostgreSQLParser.SECURITY);
				this.state = 4831;
				this.match(PostgreSQLParser.LABEL);
				this.state = 4832;
				this.opt_provider();
				this.state = 4833;
				this.match(PostgreSQLParser.ON);
				this.state = 4834;
				this.match(PostgreSQLParser.TYPE_P);
				this.state = 4835;
				this.typename();
				this.state = 4836;
				this.match(PostgreSQLParser.IS);
				this.state = 4837;
				this.security_label();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 4839;
				this.match(PostgreSQLParser.SECURITY);
				this.state = 4840;
				this.match(PostgreSQLParser.LABEL);
				this.state = 4841;
				this.opt_provider();
				this.state = 4842;
				this.match(PostgreSQLParser.ON);
				this.state = 4843;
				this.match(PostgreSQLParser.DOMAIN_P);
				this.state = 4844;
				this.typename();
				this.state = 4845;
				this.match(PostgreSQLParser.IS);
				this.state = 4846;
				this.security_label();
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 4848;
				this.match(PostgreSQLParser.SECURITY);
				this.state = 4849;
				this.match(PostgreSQLParser.LABEL);
				this.state = 4850;
				this.opt_provider();
				this.state = 4851;
				this.match(PostgreSQLParser.ON);
				this.state = 4852;
				this.match(PostgreSQLParser.AGGREGATE);
				this.state = 4853;
				this.aggregate_with_argtypes();
				this.state = 4854;
				this.match(PostgreSQLParser.IS);
				this.state = 4855;
				this.security_label();
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 4857;
				this.match(PostgreSQLParser.SECURITY);
				this.state = 4858;
				this.match(PostgreSQLParser.LABEL);
				this.state = 4859;
				this.opt_provider();
				this.state = 4860;
				this.match(PostgreSQLParser.ON);
				this.state = 4861;
				this.match(PostgreSQLParser.FUNCTION);
				this.state = 4862;
				this.function_with_argtypes();
				this.state = 4863;
				this.match(PostgreSQLParser.IS);
				this.state = 4864;
				this.security_label();
				}
				break;
			case 8:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 4866;
				this.match(PostgreSQLParser.SECURITY);
				this.state = 4867;
				this.match(PostgreSQLParser.LABEL);
				this.state = 4868;
				this.opt_provider();
				this.state = 4869;
				this.match(PostgreSQLParser.ON);
				this.state = 4870;
				this.match(PostgreSQLParser.LARGE_P);
				this.state = 4871;
				this.match(PostgreSQLParser.OBJECT_P);
				this.state = 4872;
				this.numericonly();
				this.state = 4873;
				this.match(PostgreSQLParser.IS);
				this.state = 4874;
				this.security_label();
				}
				break;
			case 9:
				this.enterOuterAlt(localctx, 9);
				{
				this.state = 4876;
				this.match(PostgreSQLParser.SECURITY);
				this.state = 4877;
				this.match(PostgreSQLParser.LABEL);
				this.state = 4878;
				this.opt_provider();
				this.state = 4879;
				this.match(PostgreSQLParser.ON);
				this.state = 4880;
				this.match(PostgreSQLParser.PROCEDURE);
				this.state = 4881;
				this.function_with_argtypes();
				this.state = 4882;
				this.match(PostgreSQLParser.IS);
				this.state = 4883;
				this.security_label();
				}
				break;
			case 10:
				this.enterOuterAlt(localctx, 10);
				{
				this.state = 4885;
				this.match(PostgreSQLParser.SECURITY);
				this.state = 4886;
				this.match(PostgreSQLParser.LABEL);
				this.state = 4887;
				this.opt_provider();
				this.state = 4888;
				this.match(PostgreSQLParser.ON);
				this.state = 4889;
				this.match(PostgreSQLParser.ROUTINE);
				this.state = 4890;
				this.function_with_argtypes();
				this.state = 4891;
				this.match(PostgreSQLParser.IS);
				this.state = 4892;
				this.security_label();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_provider(): Opt_providerContext {
		let localctx: Opt_providerContext = new Opt_providerContext(this, this._ctx, this.state);
		this.enterRule(localctx, 540, PostgreSQLParser.RULE_opt_provider);
		try {
			this.state = 4899;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 62:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4896;
				this.match(PostgreSQLParser.FOR);
				this.state = 4897;
				this.nonreservedword_or_sconst();
				}
				break;
			case 80:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public security_label(): Security_labelContext {
		let localctx: Security_labelContext = new Security_labelContext(this, this._ctx, this.state);
		this.enterRule(localctx, 542, PostgreSQLParser.RULE_security_label);
		try {
			this.state = 4903;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 521:
			case 523:
			case 525:
			case 547:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4901;
				this.sconst();
				}
				break;
			case 78:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 4902;
				this.match(PostgreSQLParser.NULL_P);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public fetchstmt(): FetchstmtContext {
		let localctx: FetchstmtContext = new FetchstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 544, PostgreSQLParser.RULE_fetchstmt);
		try {
			this.state = 4909;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 61:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4905;
				this.match(PostgreSQLParser.FETCH);
				this.state = 4906;
				this.fetch_args();
				}
				break;
			case 256:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 4907;
				this.match(PostgreSQLParser.MOVE);
				this.state = 4908;
				this.fetch_args();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public fetch_args(): Fetch_argsContext {
		let localctx: Fetch_argsContext = new Fetch_argsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 546, PostgreSQLParser.RULE_fetch_args);
		try {
			this.state = 4977;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 233, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4911;
				this.cursor_name();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 4912;
				this.from_in();
				this.state = 4913;
				this.cursor_name();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 4915;
				this.match(PostgreSQLParser.NEXT);
				this.state = 4916;
				this.opt_from_in();
				this.state = 4917;
				this.cursor_name();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 4919;
				this.match(PostgreSQLParser.PRIOR);
				this.state = 4920;
				this.opt_from_in();
				this.state = 4921;
				this.cursor_name();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 4923;
				this.match(PostgreSQLParser.FIRST_P);
				this.state = 4924;
				this.opt_from_in();
				this.state = 4925;
				this.cursor_name();
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 4927;
				this.match(PostgreSQLParser.LAST_P);
				this.state = 4928;
				this.opt_from_in();
				this.state = 4929;
				this.cursor_name();
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 4931;
				this.match(PostgreSQLParser.ABSOLUTE_P);
				this.state = 4932;
				this.signediconst();
				this.state = 4933;
				this.opt_from_in();
				this.state = 4934;
				this.cursor_name();
				}
				break;
			case 8:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 4936;
				this.match(PostgreSQLParser.RELATIVE_P);
				this.state = 4937;
				this.signediconst();
				this.state = 4938;
				this.opt_from_in();
				this.state = 4939;
				this.cursor_name();
				}
				break;
			case 9:
				this.enterOuterAlt(localctx, 9);
				{
				this.state = 4941;
				this.signediconst();
				this.state = 4942;
				this.opt_from_in();
				this.state = 4943;
				this.cursor_name();
				}
				break;
			case 10:
				this.enterOuterAlt(localctx, 10);
				{
				this.state = 4945;
				this.match(PostgreSQLParser.ALL);
				this.state = 4946;
				this.opt_from_in();
				this.state = 4947;
				this.cursor_name();
				}
				break;
			case 11:
				this.enterOuterAlt(localctx, 11);
				{
				this.state = 4949;
				this.match(PostgreSQLParser.FORWARD);
				this.state = 4950;
				this.opt_from_in();
				this.state = 4951;
				this.cursor_name();
				}
				break;
			case 12:
				this.enterOuterAlt(localctx, 12);
				{
				this.state = 4953;
				this.match(PostgreSQLParser.FORWARD);
				this.state = 4954;
				this.signediconst();
				this.state = 4955;
				this.opt_from_in();
				this.state = 4956;
				this.cursor_name();
				}
				break;
			case 13:
				this.enterOuterAlt(localctx, 13);
				{
				this.state = 4958;
				this.match(PostgreSQLParser.FORWARD);
				this.state = 4959;
				this.match(PostgreSQLParser.ALL);
				this.state = 4960;
				this.opt_from_in();
				this.state = 4961;
				this.cursor_name();
				}
				break;
			case 14:
				this.enterOuterAlt(localctx, 14);
				{
				this.state = 4963;
				this.match(PostgreSQLParser.BACKWARD);
				this.state = 4964;
				this.opt_from_in();
				this.state = 4965;
				this.cursor_name();
				}
				break;
			case 15:
				this.enterOuterAlt(localctx, 15);
				{
				this.state = 4967;
				this.match(PostgreSQLParser.BACKWARD);
				this.state = 4968;
				this.signediconst();
				this.state = 4969;
				this.opt_from_in();
				this.state = 4970;
				this.cursor_name();
				}
				break;
			case 16:
				this.enterOuterAlt(localctx, 16);
				{
				this.state = 4972;
				this.match(PostgreSQLParser.BACKWARD);
				this.state = 4973;
				this.match(PostgreSQLParser.ALL);
				this.state = 4974;
				this.opt_from_in();
				this.state = 4975;
				this.cursor_name();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public from_in(): From_inContext {
		let localctx: From_inContext = new From_inContext(this, this._ctx, this.state);
		this.enterRule(localctx, 548, PostgreSQLParser.RULE_from_in);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 4979;
			_la = this._input.LA(1);
			if(!(_la===64 || _la===68)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_from_in(): Opt_from_inContext {
		let localctx: Opt_from_inContext = new Opt_from_inContext(this, this._ctx, this.state);
		this.enterRule(localctx, 550, PostgreSQLParser.RULE_opt_from_in);
		try {
			this.state = 4983;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 64:
			case 68:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4981;
				this.from_in();
				}
				break;
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 92:
			case 116:
			case 123:
			case 124:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public grantstmt(): GrantstmtContext {
		let localctx: GrantstmtContext = new GrantstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 552, PostgreSQLParser.RULE_grantstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 4985;
			this.match(PostgreSQLParser.GRANT);
			this.state = 4986;
			this.privileges();
			this.state = 4987;
			this.match(PostgreSQLParser.ON);
			this.state = 4988;
			this.privilege_target();
			this.state = 4989;
			this.match(PostgreSQLParser.TO);
			this.state = 4990;
			this.grantee_list();
			this.state = 4991;
			this.opt_grant_grant_option();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public revokestmt(): RevokestmtContext {
		let localctx: RevokestmtContext = new RevokestmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 554, PostgreSQLParser.RULE_revokestmt);
		try {
			this.state = 5012;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 235, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 4993;
				this.match(PostgreSQLParser.REVOKE);
				this.state = 4994;
				this.privileges();
				this.state = 4995;
				this.match(PostgreSQLParser.ON);
				this.state = 4996;
				this.privilege_target();
				this.state = 4997;
				this.match(PostgreSQLParser.FROM);
				this.state = 4998;
				this.grantee_list();
				this.state = 4999;
				this.opt_drop_behavior();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5001;
				this.match(PostgreSQLParser.REVOKE);
				this.state = 5002;
				this.match(PostgreSQLParser.GRANT);
				this.state = 5003;
				this.match(PostgreSQLParser.OPTION);
				this.state = 5004;
				this.match(PostgreSQLParser.FOR);
				this.state = 5005;
				this.privileges();
				this.state = 5006;
				this.match(PostgreSQLParser.ON);
				this.state = 5007;
				this.privilege_target();
				this.state = 5008;
				this.match(PostgreSQLParser.FROM);
				this.state = 5009;
				this.grantee_list();
				this.state = 5010;
				this.opt_drop_behavior();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public privileges(): PrivilegesContext {
		let localctx: PrivilegesContext = new PrivilegesContext(this, this._ctx, this.state);
		this.enterRule(localctx, 556, PostgreSQLParser.RULE_privileges);
		try {
			this.state = 5029;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 236, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5014;
				this.privilege_list();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5015;
				this.match(PostgreSQLParser.ALL);
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 5016;
				this.match(PostgreSQLParser.ALL);
				this.state = 5017;
				this.match(PostgreSQLParser.PRIVILEGES);
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 5018;
				this.match(PostgreSQLParser.ALL);
				this.state = 5019;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 5020;
				this.columnlist();
				this.state = 5021;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 5023;
				this.match(PostgreSQLParser.ALL);
				this.state = 5024;
				this.match(PostgreSQLParser.PRIVILEGES);
				this.state = 5025;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 5026;
				this.columnlist();
				this.state = 5027;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public privilege_list(): Privilege_listContext {
		let localctx: Privilege_listContext = new Privilege_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 558, PostgreSQLParser.RULE_privilege_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5031;
			this.privilege();
			this.state = 5036;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 5032;
				this.match(PostgreSQLParser.COMMA);
				this.state = 5033;
				this.privilege();
				}
				}
				this.state = 5038;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public privilege(): PrivilegeContext {
		let localctx: PrivilegeContext = new PrivilegeContext(this, this._ctx, this.state);
		this.enterRule(localctx, 560, PostgreSQLParser.RULE_privilege);
		try {
			this.state = 5048;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 88:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5039;
				this.match(PostgreSQLParser.SELECT);
				this.state = 5040;
				this.opt_column_list();
				}
				break;
			case 86:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5041;
				this.match(PostgreSQLParser.REFERENCES);
				this.state = 5042;
				this.opt_column_list();
				}
				break;
			case 46:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 5043;
				this.match(PostgreSQLParser.CREATE);
				this.state = 5044;
				this.opt_column_list();
				}
				break;
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 92:
			case 116:
			case 123:
			case 124:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 5045;
				this.colid();
				this.state = 5046;
				this.opt_column_list();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public privilege_target(): Privilege_targetContext {
		let localctx: Privilege_targetContext = new Privilege_targetContext(this, this._ctx, this.state);
		this.enterRule(localctx, 562, PostgreSQLParser.RULE_privilege_target);
		try {
			this.state = 5108;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 239, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5050;
				this.qualified_name_list();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5051;
				this.match(PostgreSQLParser.TABLE);
				this.state = 5052;
				this.qualified_name_list();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 5053;
				this.match(PostgreSQLParser.SEQUENCE);
				this.state = 5054;
				this.qualified_name_list();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 5055;
				this.match(PostgreSQLParser.FOREIGN);
				this.state = 5056;
				this.match(PostgreSQLParser.DATA_P);
				this.state = 5057;
				this.match(PostgreSQLParser.WRAPPER);
				this.state = 5058;
				this.name_list();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 5059;
				this.match(PostgreSQLParser.FOREIGN);
				this.state = 5060;
				this.match(PostgreSQLParser.SERVER);
				this.state = 5061;
				this.name_list();
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 5062;
				this.match(PostgreSQLParser.FUNCTION);
				this.state = 5063;
				this.function_with_argtypes_list();
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 5064;
				this.match(PostgreSQLParser.PROCEDURE);
				this.state = 5065;
				this.function_with_argtypes_list();
				}
				break;
			case 8:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 5066;
				this.match(PostgreSQLParser.ROUTINE);
				this.state = 5067;
				this.function_with_argtypes_list();
				}
				break;
			case 9:
				this.enterOuterAlt(localctx, 9);
				{
				this.state = 5068;
				this.match(PostgreSQLParser.DATABASE);
				this.state = 5069;
				this.name_list();
				}
				break;
			case 10:
				this.enterOuterAlt(localctx, 10);
				{
				this.state = 5070;
				this.match(PostgreSQLParser.DOMAIN_P);
				this.state = 5071;
				this.any_name_list();
				}
				break;
			case 11:
				this.enterOuterAlt(localctx, 11);
				{
				this.state = 5072;
				this.match(PostgreSQLParser.LANGUAGE);
				this.state = 5073;
				this.name_list();
				}
				break;
			case 12:
				this.enterOuterAlt(localctx, 12);
				{
				this.state = 5074;
				this.match(PostgreSQLParser.LARGE_P);
				this.state = 5075;
				this.match(PostgreSQLParser.OBJECT_P);
				this.state = 5076;
				this.numericonly_list();
				}
				break;
			case 13:
				this.enterOuterAlt(localctx, 13);
				{
				this.state = 5077;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 5078;
				this.name_list();
				}
				break;
			case 14:
				this.enterOuterAlt(localctx, 14);
				{
				this.state = 5079;
				this.match(PostgreSQLParser.TABLESPACE);
				this.state = 5080;
				this.name_list();
				}
				break;
			case 15:
				this.enterOuterAlt(localctx, 15);
				{
				this.state = 5081;
				this.match(PostgreSQLParser.TYPE_P);
				this.state = 5082;
				this.any_name_list();
				}
				break;
			case 16:
				this.enterOuterAlt(localctx, 16);
				{
				this.state = 5083;
				this.match(PostgreSQLParser.ALL);
				this.state = 5084;
				this.match(PostgreSQLParser.TABLES);
				this.state = 5085;
				this.match(PostgreSQLParser.IN_P);
				this.state = 5086;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 5087;
				this.name_list();
				}
				break;
			case 17:
				this.enterOuterAlt(localctx, 17);
				{
				this.state = 5088;
				this.match(PostgreSQLParser.ALL);
				this.state = 5089;
				this.match(PostgreSQLParser.SEQUENCES);
				this.state = 5090;
				this.match(PostgreSQLParser.IN_P);
				this.state = 5091;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 5092;
				this.name_list();
				}
				break;
			case 18:
				this.enterOuterAlt(localctx, 18);
				{
				this.state = 5093;
				this.match(PostgreSQLParser.ALL);
				this.state = 5094;
				this.match(PostgreSQLParser.FUNCTIONS);
				this.state = 5095;
				this.match(PostgreSQLParser.IN_P);
				this.state = 5096;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 5097;
				this.name_list();
				}
				break;
			case 19:
				this.enterOuterAlt(localctx, 19);
				{
				this.state = 5098;
				this.match(PostgreSQLParser.ALL);
				this.state = 5099;
				this.match(PostgreSQLParser.PROCEDURES);
				this.state = 5100;
				this.match(PostgreSQLParser.IN_P);
				this.state = 5101;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 5102;
				this.name_list();
				}
				break;
			case 20:
				this.enterOuterAlt(localctx, 20);
				{
				this.state = 5103;
				this.match(PostgreSQLParser.ALL);
				this.state = 5104;
				this.match(PostgreSQLParser.ROUTINES);
				this.state = 5105;
				this.match(PostgreSQLParser.IN_P);
				this.state = 5106;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 5107;
				this.name_list();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public grantee_list(): Grantee_listContext {
		let localctx: Grantee_listContext = new Grantee_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 564, PostgreSQLParser.RULE_grantee_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5110;
			this.grantee();
			this.state = 5115;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 5111;
				this.match(PostgreSQLParser.COMMA);
				this.state = 5112;
				this.grantee();
				}
				}
				this.state = 5117;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public grantee(): GranteeContext {
		let localctx: GranteeContext = new GranteeContext(this, this._ctx, this.state);
		this.enterRule(localctx, 566, PostgreSQLParser.RULE_grantee);
		try {
			this.state = 5121;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 52:
			case 53:
			case 57:
			case 61:
			case 89:
			case 92:
			case 106:
			case 107:
			case 108:
			case 109:
			case 110:
			case 111:
			case 112:
			case 113:
			case 114:
			case 115:
			case 116:
			case 117:
			case 118:
			case 119:
			case 120:
			case 121:
			case 122:
			case 123:
			case 124:
			case 125:
			case 126:
			case 127:
			case 128:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 463:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5118;
				this.rolespec();
				}
				break;
			case 66:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5119;
				this.match(PostgreSQLParser.GROUP_P);
				this.state = 5120;
				this.rolespec();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_grant_grant_option(): Opt_grant_grant_optionContext {
		let localctx: Opt_grant_grant_optionContext = new Opt_grant_grant_optionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 568, PostgreSQLParser.RULE_opt_grant_grant_option);
		try {
			this.state = 5127;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 242, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5123;
				this.match(PostgreSQLParser.WITH);
				this.state = 5124;
				this.match(PostgreSQLParser.GRANT);
				this.state = 5125;
				this.match(PostgreSQLParser.OPTION);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public grantrolestmt(): GrantrolestmtContext {
		let localctx: GrantrolestmtContext = new GrantrolestmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 570, PostgreSQLParser.RULE_grantrolestmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5129;
			this.match(PostgreSQLParser.GRANT);
			this.state = 5130;
			this.privilege_list();
			this.state = 5131;
			this.match(PostgreSQLParser.TO);
			this.state = 5132;
			this.role_list();
			this.state = 5133;
			this.opt_grant_admin_option();
			this.state = 5134;
			this.opt_granted_by();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public revokerolestmt(): RevokerolestmtContext {
		let localctx: RevokerolestmtContext = new RevokerolestmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 572, PostgreSQLParser.RULE_revokerolestmt);
		try {
			this.state = 5153;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 243, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5136;
				this.match(PostgreSQLParser.REVOKE);
				this.state = 5137;
				this.privilege_list();
				this.state = 5138;
				this.match(PostgreSQLParser.FROM);
				this.state = 5139;
				this.role_list();
				this.state = 5140;
				this.opt_granted_by();
				this.state = 5141;
				this.opt_drop_behavior();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5143;
				this.match(PostgreSQLParser.REVOKE);
				this.state = 5144;
				this.match(PostgreSQLParser.ADMIN);
				this.state = 5145;
				this.match(PostgreSQLParser.OPTION);
				this.state = 5146;
				this.match(PostgreSQLParser.FOR);
				this.state = 5147;
				this.privilege_list();
				this.state = 5148;
				this.match(PostgreSQLParser.FROM);
				this.state = 5149;
				this.role_list();
				this.state = 5150;
				this.opt_granted_by();
				this.state = 5151;
				this.opt_drop_behavior();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_grant_admin_option(): Opt_grant_admin_optionContext {
		let localctx: Opt_grant_admin_optionContext = new Opt_grant_admin_optionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 574, PostgreSQLParser.RULE_opt_grant_admin_option);
		try {
			this.state = 5159;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 244, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5155;
				this.match(PostgreSQLParser.WITH);
				this.state = 5156;
				this.match(PostgreSQLParser.ADMIN);
				this.state = 5157;
				this.match(PostgreSQLParser.OPTION);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_granted_by(): Opt_granted_byContext {
		let localctx: Opt_granted_byContext = new Opt_granted_byContext(this, this._ctx, this.state);
		this.enterRule(localctx, 576, PostgreSQLParser.RULE_opt_granted_by);
		try {
			this.state = 5165;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 214:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5161;
				this.match(PostgreSQLParser.GRANTED);
				this.state = 5162;
				this.match(PostgreSQLParser.BY);
				this.state = 5163;
				this.rolespec();
				}
				break;
			case -1:
			case 2:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 88:
			case 92:
			case 105:
			case 129:
			case 138:
			case 146:
			case 150:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 306:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alterdefaultprivilegesstmt(): AlterdefaultprivilegesstmtContext {
		let localctx: AlterdefaultprivilegesstmtContext = new AlterdefaultprivilegesstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 578, PostgreSQLParser.RULE_alterdefaultprivilegesstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5167;
			this.match(PostgreSQLParser.ALTER);
			this.state = 5168;
			this.match(PostgreSQLParser.DEFAULT);
			this.state = 5169;
			this.match(PostgreSQLParser.PRIVILEGES);
			this.state = 5170;
			this.defacloptionlist();
			this.state = 5171;
			this.defaclaction();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public defacloptionlist(): DefacloptionlistContext {
		let localctx: DefacloptionlistContext = new DefacloptionlistContext(this, this._ctx, this.state);
		this.enterRule(localctx, 580, PostgreSQLParser.RULE_defacloptionlist);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5176;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===62 || _la===68) {
				{
				{
				this.state = 5173;
				this.defacloption();
				}
				}
				this.state = 5178;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public defacloption(): DefacloptionContext {
		let localctx: DefacloptionContext = new DefacloptionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 582, PostgreSQLParser.RULE_defacloption);
		try {
			this.state = 5188;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 247, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5179;
				this.match(PostgreSQLParser.IN_P);
				this.state = 5180;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 5181;
				this.name_list();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5182;
				this.match(PostgreSQLParser.FOR);
				this.state = 5183;
				this.match(PostgreSQLParser.ROLE);
				this.state = 5184;
				this.role_list();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 5185;
				this.match(PostgreSQLParser.FOR);
				this.state = 5186;
				this.match(PostgreSQLParser.USER);
				this.state = 5187;
				this.role_list();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public defaclaction(): DefaclactionContext {
		let localctx: DefaclactionContext = new DefaclactionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 584, PostgreSQLParser.RULE_defaclaction);
		try {
			this.state = 5217;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 248, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5190;
				this.match(PostgreSQLParser.GRANT);
				this.state = 5191;
				this.privileges();
				this.state = 5192;
				this.match(PostgreSQLParser.ON);
				this.state = 5193;
				this.defacl_privilege_target();
				this.state = 5194;
				this.match(PostgreSQLParser.TO);
				this.state = 5195;
				this.grantee_list();
				this.state = 5196;
				this.opt_grant_grant_option();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5198;
				this.match(PostgreSQLParser.REVOKE);
				this.state = 5199;
				this.privileges();
				this.state = 5200;
				this.match(PostgreSQLParser.ON);
				this.state = 5201;
				this.defacl_privilege_target();
				this.state = 5202;
				this.match(PostgreSQLParser.FROM);
				this.state = 5203;
				this.grantee_list();
				this.state = 5204;
				this.opt_drop_behavior();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 5206;
				this.match(PostgreSQLParser.REVOKE);
				this.state = 5207;
				this.match(PostgreSQLParser.GRANT);
				this.state = 5208;
				this.match(PostgreSQLParser.OPTION);
				this.state = 5209;
				this.match(PostgreSQLParser.FOR);
				this.state = 5210;
				this.privileges();
				this.state = 5211;
				this.match(PostgreSQLParser.ON);
				this.state = 5212;
				this.defacl_privilege_target();
				this.state = 5213;
				this.match(PostgreSQLParser.FROM);
				this.state = 5214;
				this.grantee_list();
				this.state = 5215;
				this.opt_drop_behavior();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public defacl_privilege_target(): Defacl_privilege_targetContext {
		let localctx: Defacl_privilege_targetContext = new Defacl_privilege_targetContext(this, this._ctx, this.state);
		this.enterRule(localctx, 586, PostgreSQLParser.RULE_defacl_privilege_target);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5219;
			_la = this._input.LA(1);
			if(!(_la===212 || _la===320 || _la===341 || _la===352 || _la===446 || _la===447)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public indexstmt(): IndexstmtContext {
		let localctx: IndexstmtContext = new IndexstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 588, PostgreSQLParser.RULE_indexstmt);
		try {
			this.state = 5256;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 249, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5221;
				this.match(PostgreSQLParser.CREATE);
				this.state = 5222;
				this.opt_unique();
				this.state = 5223;
				this.match(PostgreSQLParser.INDEX);
				this.state = 5224;
				this.opt_concurrently();
				this.state = 5225;
				this.opt_index_name();
				this.state = 5226;
				this.match(PostgreSQLParser.ON);
				this.state = 5227;
				this.relation_expr();
				this.state = 5228;
				this.access_method_clause();
				this.state = 5229;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 5230;
				this.index_params();
				this.state = 5231;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 5232;
				this.opt_include();
				this.state = 5233;
				this.opt_reloptions();
				this.state = 5234;
				this.opttablespace();
				this.state = 5235;
				this.where_clause();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5237;
				this.match(PostgreSQLParser.CREATE);
				this.state = 5238;
				this.opt_unique();
				this.state = 5239;
				this.match(PostgreSQLParser.INDEX);
				this.state = 5240;
				this.opt_concurrently();
				this.state = 5241;
				this.match(PostgreSQLParser.IF_P);
				this.state = 5242;
				this.match(PostgreSQLParser.NOT);
				this.state = 5243;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 5244;
				this.name();
				this.state = 5245;
				this.match(PostgreSQLParser.ON);
				this.state = 5246;
				this.relation_expr();
				this.state = 5247;
				this.access_method_clause();
				this.state = 5248;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 5249;
				this.index_params();
				this.state = 5250;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 5251;
				this.opt_include();
				this.state = 5252;
				this.opt_reloptions();
				this.state = 5253;
				this.opttablespace();
				this.state = 5254;
				this.where_clause();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_unique(): Opt_uniqueContext {
		let localctx: Opt_uniqueContext = new Opt_uniqueContext(this, this._ctx, this.state);
		this.enterRule(localctx, 590, PostgreSQLParser.RULE_opt_unique);
		try {
			this.state = 5260;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 98:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5258;
				this.match(PostgreSQLParser.UNIQUE);
				}
				break;
			case 226:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_concurrently(): Opt_concurrentlyContext {
		let localctx: Opt_concurrentlyContext = new Opt_concurrentlyContext(this, this._ctx, this.state);
		this.enterRule(localctx, 592, PostgreSQLParser.RULE_opt_concurrently);
		try {
			this.state = 5264;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 109:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5262;
				this.match(PostgreSQLParser.CONCURRENTLY);
				}
				break;
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 80:
			case 92:
			case 116:
			case 123:
			case 124:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_index_name(): Opt_index_nameContext {
		let localctx: Opt_index_nameContext = new Opt_index_nameContext(this, this._ctx, this.state);
		this.enterRule(localctx, 594, PostgreSQLParser.RULE_opt_index_name);
		try {
			this.state = 5268;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 92:
			case 116:
			case 123:
			case 124:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5266;
				this.name();
				}
				break;
			case 80:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public access_method_clause(): Access_method_clauseContext {
		let localctx: Access_method_clauseContext = new Access_method_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 596, PostgreSQLParser.RULE_access_method_clause);
		try {
			this.state = 5273;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 100:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5270;
				this.match(PostgreSQLParser.USING);
				this.state = 5271;
				this.name();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public index_params(): Index_paramsContext {
		let localctx: Index_paramsContext = new Index_paramsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 598, PostgreSQLParser.RULE_index_params);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5275;
			this.index_elem();
			this.state = 5280;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 5276;
				this.match(PostgreSQLParser.COMMA);
				this.state = 5277;
				this.index_elem();
				}
				}
				this.state = 5282;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public index_elem_options(): Index_elem_optionsContext {
		let localctx: Index_elem_optionsContext = new Index_elem_optionsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 600, PostgreSQLParser.RULE_index_elem_options);
		try {
			this.state = 5294;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 255, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5283;
				this.opt_collate();
				this.state = 5284;
				this.opt_class();
				this.state = 5285;
				this.opt_asc_desc();
				this.state = 5286;
				this.opt_nulls_order();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5288;
				this.opt_collate();
				this.state = 5289;
				this.any_name();
				this.state = 5290;
				this.reloptions();
				this.state = 5291;
				this.opt_asc_desc();
				this.state = 5292;
				this.opt_nulls_order();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public index_elem(): Index_elemContext {
		let localctx: Index_elemContext = new Index_elemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 602, PostgreSQLParser.RULE_index_elem);
		try {
			this.state = 5307;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 256, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5296;
				this.colid();
				this.state = 5297;
				this.index_elem_options();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5299;
				this.func_expr_windowless();
				this.state = 5300;
				this.index_elem_options();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 5302;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 5303;
				this.a_expr();
				this.state = 5304;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 5305;
				this.index_elem_options();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_include(): Opt_includeContext {
		let localctx: Opt_includeContext = new Opt_includeContext(this, this._ctx, this.state);
		this.enterRule(localctx, 604, PostgreSQLParser.RULE_opt_include);
		try {
			this.state = 5315;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 432:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5309;
				this.match(PostgreSQLParser.INCLUDE);
				this.state = 5310;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 5311;
				this.index_including_params();
				this.state = 5312;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case -1:
			case 2:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 88:
			case 92:
			case 103:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 342:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public index_including_params(): Index_including_paramsContext {
		let localctx: Index_including_paramsContext = new Index_including_paramsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 606, PostgreSQLParser.RULE_index_including_params);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5317;
			this.index_elem();
			this.state = 5322;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 5318;
				this.match(PostgreSQLParser.COMMA);
				this.state = 5319;
				this.index_elem();
				}
				}
				this.state = 5324;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_collate(): Opt_collateContext {
		let localctx: Opt_collateContext = new Opt_collateContext(this, this._ctx, this.state);
		this.enterRule(localctx, 608, PostgreSQLParser.RULE_opt_collate);
		try {
			this.state = 5328;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 259, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5325;
				this.match(PostgreSQLParser.COLLATE);
				this.state = 5326;
				this.any_name();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_class(): Opt_classContext {
		let localctx: Opt_classContext = new Opt_classContext(this, this._ctx, this.state);
		this.enterRule(localctx, 610, PostgreSQLParser.RULE_opt_class);
		try {
			this.state = 5332;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 260, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5330;
				this.any_name();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_asc_desc(): Opt_asc_descContext {
		let localctx: Opt_asc_descContext = new Opt_asc_descContext(this, this._ctx, this.state);
		this.enterRule(localctx, 612, PostgreSQLParser.RULE_opt_asc_desc);
		try {
			this.state = 5337;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 37:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5334;
				this.match(PostgreSQLParser.ASC);
				}
				break;
			case 55:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5335;
				this.match(PostgreSQLParser.DESC);
				}
				break;
			case -1:
			case 2:
			case 3:
			case 6:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 62:
			case 65:
			case 71:
			case 74:
			case 79:
			case 80:
			case 87:
			case 88:
			case 92:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 264:
			case 281:
			case 290:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 311:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 472:
			case 510:
			case 544:
				this.enterOuterAlt(localctx, 3);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_nulls_order(): Opt_nulls_orderContext {
		let localctx: Opt_nulls_orderContext = new Opt_nulls_orderContext(this, this._ctx, this.state);
		this.enterRule(localctx, 614, PostgreSQLParser.RULE_opt_nulls_order);
		try {
			this.state = 5344;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 262, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5339;
				this.match(PostgreSQLParser.NULLS_P);
				this.state = 5340;
				this.match(PostgreSQLParser.FIRST_P);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5341;
				this.match(PostgreSQLParser.NULLS_P);
				this.state = 5342;
				this.match(PostgreSQLParser.LAST_P);
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createfunctionstmt(): CreatefunctionstmtContext {
		let localctx: CreatefunctionstmtContext = new CreatefunctionstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 616, PostgreSQLParser.RULE_createfunctionstmt);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5346;
			this.match(PostgreSQLParser.CREATE);
			this.state = 5347;
			this.opt_or_replace();
			this.state = 5348;
			_la = this._input.LA(1);
			if(!(_la===211 || _la===287)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			this.state = 5349;
			this.func_name();
			this.state = 5350;
			this.func_args_with_defaults();
			this.state = 5360;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 264, this._ctx) ) {
			case 1:
				{
				this.state = 5351;
				this.match(PostgreSQLParser.RETURNS);
				this.state = 5358;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 263, this._ctx) ) {
				case 1:
					{
					this.state = 5352;
					this.func_return();
					}
					break;
				case 2:
					{
					this.state = 5353;
					this.match(PostgreSQLParser.TABLE);
					this.state = 5354;
					this.match(PostgreSQLParser.OPEN_PAREN);
					this.state = 5355;
					this.table_func_column_list();
					this.state = 5356;
					this.match(PostgreSQLParser.CLOSE_PAREN);
					}
					break;
				}
				}
				break;
			}
			this.state = 5362;
			this.createfunc_opt_list();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_or_replace(): Opt_or_replaceContext {
		let localctx: Opt_or_replaceContext = new Opt_or_replaceContext(this, this._ctx, this.state);
		this.enterRule(localctx, 618, PostgreSQLParser.RULE_opt_or_replace);
		try {
			this.state = 5367;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 82:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5364;
				this.match(PostgreSQLParser.OR);
				this.state = 5365;
				this.match(PostgreSQLParser.REPLACE);
				}
				break;
			case 136:
			case 211:
			case 238:
			case 286:
			case 287:
			case 312:
			case 350:
			case 434:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public func_args(): Func_argsContext {
		let localctx: Func_argsContext = new Func_argsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 620, PostgreSQLParser.RULE_func_args);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5369;
			this.match(PostgreSQLParser.OPEN_PAREN);
			this.state = 5371;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			if (((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 286268421) !== 0) || _la===68 || _la===92 || ((((_la - 101)) & ~0x1F) === 0 && ((1 << (_la - 101)) & 4294967265) !== 0) || ((((_la - 133)) & ~0x1F) === 0 && ((1 << (_la - 133)) & 4294967295) !== 0) || ((((_la - 165)) & ~0x1F) === 0 && ((1 << (_la - 165)) & 4294967295) !== 0) || ((((_la - 197)) & ~0x1F) === 0 && ((1 << (_la - 197)) & 4294967295) !== 0) || ((((_la - 229)) & ~0x1F) === 0 && ((1 << (_la - 229)) & 4294967295) !== 0) || ((((_la - 261)) & ~0x1F) === 0 && ((1 << (_la - 261)) & 4294967295) !== 0) || ((((_la - 293)) & ~0x1F) === 0 && ((1 << (_la - 293)) & 4294967295) !== 0) || ((((_la - 325)) & ~0x1F) === 0 && ((1 << (_la - 325)) & 4294967295) !== 0) || ((((_la - 357)) & ~0x1F) === 0 && ((1 << (_la - 357)) & 4294967295) !== 0) || ((((_la - 389)) & ~0x1F) === 0 && ((1 << (_la - 389)) & 4294967295) !== 0) || ((((_la - 421)) & ~0x1F) === 0 && ((1 << (_la - 421)) & 4278190079) !== 0) || ((((_la - 453)) & ~0x1F) === 0 && ((1 << (_la - 453)) & 4294967295) !== 0) || ((((_la - 485)) & ~0x1F) === 0 && ((1 << (_la - 485)) & 503313919) !== 0) || ((((_la - 517)) & ~0x1F) === 0 && ((1 << (_la - 517)) & 3145729) !== 0)) {
				{
				this.state = 5370;
				this.func_args_list();
				}
			}

			this.state = 5373;
			this.match(PostgreSQLParser.CLOSE_PAREN);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public func_args_list(): Func_args_listContext {
		let localctx: Func_args_listContext = new Func_args_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 622, PostgreSQLParser.RULE_func_args_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5375;
			this.func_arg();
			this.state = 5380;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 5376;
				this.match(PostgreSQLParser.COMMA);
				this.state = 5377;
				this.func_arg();
				}
				}
				this.state = 5382;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public function_with_argtypes_list(): Function_with_argtypes_listContext {
		let localctx: Function_with_argtypes_listContext = new Function_with_argtypes_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 624, PostgreSQLParser.RULE_function_with_argtypes_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5383;
			this.function_with_argtypes();
			this.state = 5388;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 5384;
				this.match(PostgreSQLParser.COMMA);
				this.state = 5385;
				this.function_with_argtypes();
				}
				}
				this.state = 5390;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public function_with_argtypes(): Function_with_argtypesContext {
		let localctx: Function_with_argtypesContext = new Function_with_argtypesContext(this, this._ctx, this.state);
		this.enterRule(localctx, 626, PostgreSQLParser.RULE_function_with_argtypes);
		let _la: number;
		try {
			this.state = 5399;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 270, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5391;
				this.func_name();
				this.state = 5392;
				this.func_args();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5394;
				this.type_func_name_keyword();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 5395;
				this.colid();
				this.state = 5397;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===4 || _la===11) {
					{
					this.state = 5396;
					this.indirection();
					}
				}

				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public func_args_with_defaults(): Func_args_with_defaultsContext {
		let localctx: Func_args_with_defaultsContext = new Func_args_with_defaultsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 628, PostgreSQLParser.RULE_func_args_with_defaults);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5401;
			this.match(PostgreSQLParser.OPEN_PAREN);
			this.state = 5403;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			if (((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 286268421) !== 0) || _la===68 || _la===92 || ((((_la - 101)) & ~0x1F) === 0 && ((1 << (_la - 101)) & 4294967265) !== 0) || ((((_la - 133)) & ~0x1F) === 0 && ((1 << (_la - 133)) & 4294967295) !== 0) || ((((_la - 165)) & ~0x1F) === 0 && ((1 << (_la - 165)) & 4294967295) !== 0) || ((((_la - 197)) & ~0x1F) === 0 && ((1 << (_la - 197)) & 4294967295) !== 0) || ((((_la - 229)) & ~0x1F) === 0 && ((1 << (_la - 229)) & 4294967295) !== 0) || ((((_la - 261)) & ~0x1F) === 0 && ((1 << (_la - 261)) & 4294967295) !== 0) || ((((_la - 293)) & ~0x1F) === 0 && ((1 << (_la - 293)) & 4294967295) !== 0) || ((((_la - 325)) & ~0x1F) === 0 && ((1 << (_la - 325)) & 4294967295) !== 0) || ((((_la - 357)) & ~0x1F) === 0 && ((1 << (_la - 357)) & 4294967295) !== 0) || ((((_la - 389)) & ~0x1F) === 0 && ((1 << (_la - 389)) & 4294967295) !== 0) || ((((_la - 421)) & ~0x1F) === 0 && ((1 << (_la - 421)) & 4278190079) !== 0) || ((((_la - 453)) & ~0x1F) === 0 && ((1 << (_la - 453)) & 4294967295) !== 0) || ((((_la - 485)) & ~0x1F) === 0 && ((1 << (_la - 485)) & 503313919) !== 0) || ((((_la - 517)) & ~0x1F) === 0 && ((1 << (_la - 517)) & 3145729) !== 0)) {
				{
				this.state = 5402;
				this.func_args_with_defaults_list();
				}
			}

			this.state = 5405;
			this.match(PostgreSQLParser.CLOSE_PAREN);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public func_args_with_defaults_list(): Func_args_with_defaults_listContext {
		let localctx: Func_args_with_defaults_listContext = new Func_args_with_defaults_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 630, PostgreSQLParser.RULE_func_args_with_defaults_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5407;
			this.func_arg_with_default();
			this.state = 5412;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 5408;
				this.match(PostgreSQLParser.COMMA);
				this.state = 5409;
				this.func_arg_with_default();
				}
				}
				this.state = 5414;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public func_arg(): Func_argContext {
		let localctx: Func_argContext = new Func_argContext(this, this._ctx, this.state);
		this.enterRule(localctx, 632, PostgreSQLParser.RULE_func_arg);
		try {
			this.state = 5428;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 275, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5415;
				this.arg_class();
				this.state = 5417;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 273, this._ctx) ) {
				case 1:
					{
					this.state = 5416;
					this.param_name();
					}
					break;
				}
				this.state = 5419;
				this.func_type();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5421;
				this.param_name();
				this.state = 5423;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 274, this._ctx) ) {
				case 1:
					{
					this.state = 5422;
					this.arg_class();
					}
					break;
				}
				this.state = 5425;
				this.func_type();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 5427;
				this.func_type();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public arg_class(): Arg_classContext {
		let localctx: Arg_classContext = new Arg_classContext(this, this._ctx, this.state);
		this.enterRule(localctx, 634, PostgreSQLParser.RULE_arg_class);
		try {
			this.state = 5437;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 68:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5430;
				this.match(PostgreSQLParser.IN_P);
				this.state = 5432;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 276, this._ctx) ) {
				case 1:
					{
					this.state = 5431;
					this.match(PostgreSQLParser.OUT_P);
					}
					break;
				}
				}
				break;
			case 444:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5434;
				this.match(PostgreSQLParser.OUT_P);
				}
				break;
			case 391:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 5435;
				this.match(PostgreSQLParser.INOUT);
				}
				break;
			case 101:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 5436;
				this.match(PostgreSQLParser.VARIADIC);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public param_name(): Param_nameContext {
		let localctx: Param_nameContext = new Param_nameContext(this, this._ctx, this.state);
		this.enterRule(localctx, 636, PostgreSQLParser.RULE_param_name);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5439;
			this.type_function_name();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public func_return(): Func_returnContext {
		let localctx: Func_returnContext = new Func_returnContext(this, this._ctx, this.state);
		this.enterRule(localctx, 638, PostgreSQLParser.RULE_func_return);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5441;
			this.func_type();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public func_type(): Func_typeContext {
		let localctx: Func_typeContext = new Func_typeContext(this, this._ctx, this.state);
		this.enterRule(localctx, 640, PostgreSQLParser.RULE_func_type);
		try {
			this.state = 5455;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 278, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5443;
				this.typename();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5444;
				this.type_function_name();
				this.state = 5445;
				this.attrs();
				this.state = 5446;
				this.match(PostgreSQLParser.PERCENT);
				this.state = 5447;
				this.match(PostgreSQLParser.TYPE_P);
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 5449;
				this.match(PostgreSQLParser.SETOF);
				this.state = 5450;
				this.type_function_name();
				this.state = 5451;
				this.attrs();
				this.state = 5452;
				this.match(PostgreSQLParser.PERCENT);
				this.state = 5453;
				this.match(PostgreSQLParser.TYPE_P);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public func_arg_with_default(): Func_arg_with_defaultContext {
		let localctx: Func_arg_with_defaultContext = new Func_arg_with_defaultContext(this, this._ctx, this.state);
		this.enterRule(localctx, 642, PostgreSQLParser.RULE_func_arg_with_default);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5457;
			this.func_arg();
			this.state = 5460;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			if (_la===10 || _la===53) {
				{
				this.state = 5458;
				_la = this._input.LA(1);
				if(!(_la===10 || _la===53)) {
				this._errHandler.recoverInline(this);
				}
				else {
					this._errHandler.reportMatch(this);
				    this.consume();
				}
				this.state = 5459;
				this.a_expr();
				}
			}

			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public aggr_arg(): Aggr_argContext {
		let localctx: Aggr_argContext = new Aggr_argContext(this, this._ctx, this.state);
		this.enterRule(localctx, 644, PostgreSQLParser.RULE_aggr_arg);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5462;
			this.func_arg();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public aggr_args(): Aggr_argsContext {
		let localctx: Aggr_argsContext = new Aggr_argsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 646, PostgreSQLParser.RULE_aggr_args);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5464;
			this.match(PostgreSQLParser.OPEN_PAREN);
			this.state = 5475;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 280, this._ctx) ) {
			case 1:
				{
				this.state = 5465;
				this.match(PostgreSQLParser.STAR);
				}
				break;
			case 2:
				{
				this.state = 5466;
				this.aggr_args_list();
				}
				break;
			case 3:
				{
				this.state = 5467;
				this.match(PostgreSQLParser.ORDER);
				this.state = 5468;
				this.match(PostgreSQLParser.BY);
				this.state = 5469;
				this.aggr_args_list();
				}
				break;
			case 4:
				{
				this.state = 5470;
				this.aggr_args_list();
				this.state = 5471;
				this.match(PostgreSQLParser.ORDER);
				this.state = 5472;
				this.match(PostgreSQLParser.BY);
				this.state = 5473;
				this.aggr_args_list();
				}
				break;
			}
			this.state = 5477;
			this.match(PostgreSQLParser.CLOSE_PAREN);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public aggr_args_list(): Aggr_args_listContext {
		let localctx: Aggr_args_listContext = new Aggr_args_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 648, PostgreSQLParser.RULE_aggr_args_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5479;
			this.aggr_arg();
			this.state = 5484;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 5480;
				this.match(PostgreSQLParser.COMMA);
				this.state = 5481;
				this.aggr_arg();
				}
				}
				this.state = 5486;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public aggregate_with_argtypes(): Aggregate_with_argtypesContext {
		let localctx: Aggregate_with_argtypesContext = new Aggregate_with_argtypesContext(this, this._ctx, this.state);
		this.enterRule(localctx, 650, PostgreSQLParser.RULE_aggregate_with_argtypes);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5487;
			this.func_name();
			this.state = 5488;
			this.aggr_args();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public aggregate_with_argtypes_list(): Aggregate_with_argtypes_listContext {
		let localctx: Aggregate_with_argtypes_listContext = new Aggregate_with_argtypes_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 652, PostgreSQLParser.RULE_aggregate_with_argtypes_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5490;
			this.aggregate_with_argtypes();
			this.state = 5495;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 5491;
				this.match(PostgreSQLParser.COMMA);
				this.state = 5492;
				this.aggregate_with_argtypes();
				}
				}
				this.state = 5497;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createfunc_opt_list(): Createfunc_opt_listContext {
		let localctx: Createfunc_opt_listContext = new Createfunc_opt_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 654, PostgreSQLParser.RULE_createfunc_opt_list);
		try {
			let _alt: number;
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5499;
			this._errHandler.sync(this);
			_alt = 1;
			do {
				switch (_alt) {
				case 1:
					{
					{
					this.state = 5498;
					this.createfunc_opt_item();
					}
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				this.state = 5501;
				this._errHandler.sync(this);
				_alt = this._interp.adaptivePredict(this._input, 283, this._ctx);
			} while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER);
			            this.ParseRoutineBody(localctx);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public common_func_opt_item(): Common_func_opt_itemContext {
		let localctx: Common_func_opt_itemContext = new Common_func_opt_itemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 656, PostgreSQLParser.RULE_common_func_opt_item);
		try {
			this.state = 5540;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 284, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5505;
				this.match(PostgreSQLParser.CALLED);
				this.state = 5506;
				this.match(PostgreSQLParser.ON);
				this.state = 5507;
				this.match(PostgreSQLParser.NULL_P);
				this.state = 5508;
				this.match(PostgreSQLParser.INPUT_P);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5509;
				this.match(PostgreSQLParser.RETURNS);
				this.state = 5510;
				this.match(PostgreSQLParser.NULL_P);
				this.state = 5511;
				this.match(PostgreSQLParser.ON);
				this.state = 5512;
				this.match(PostgreSQLParser.NULL_P);
				this.state = 5513;
				this.match(PostgreSQLParser.INPUT_P);
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 5514;
				this.match(PostgreSQLParser.STRICT_P);
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 5515;
				this.match(PostgreSQLParser.IMMUTABLE);
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 5516;
				this.match(PostgreSQLParser.STABLE);
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 5517;
				this.match(PostgreSQLParser.VOLATILE);
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 5518;
				this.match(PostgreSQLParser.EXTERNAL);
				this.state = 5519;
				this.match(PostgreSQLParser.SECURITY);
				this.state = 5520;
				this.match(PostgreSQLParser.DEFINER);
				}
				break;
			case 8:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 5521;
				this.match(PostgreSQLParser.EXTERNAL);
				this.state = 5522;
				this.match(PostgreSQLParser.SECURITY);
				this.state = 5523;
				this.match(PostgreSQLParser.INVOKER);
				}
				break;
			case 9:
				this.enterOuterAlt(localctx, 9);
				{
				this.state = 5524;
				this.match(PostgreSQLParser.SECURITY);
				this.state = 5525;
				this.match(PostgreSQLParser.DEFINER);
				}
				break;
			case 10:
				this.enterOuterAlt(localctx, 10);
				{
				this.state = 5526;
				this.match(PostgreSQLParser.SECURITY);
				this.state = 5527;
				this.match(PostgreSQLParser.INVOKER);
				}
				break;
			case 11:
				this.enterOuterAlt(localctx, 11);
				{
				this.state = 5528;
				this.match(PostgreSQLParser.LEAKPROOF);
				}
				break;
			case 12:
				this.enterOuterAlt(localctx, 12);
				{
				this.state = 5529;
				this.match(PostgreSQLParser.NOT);
				this.state = 5530;
				this.match(PostgreSQLParser.LEAKPROOF);
				}
				break;
			case 13:
				this.enterOuterAlt(localctx, 13);
				{
				this.state = 5531;
				this.match(PostgreSQLParser.COST);
				this.state = 5532;
				this.numericonly();
				}
				break;
			case 14:
				this.enterOuterAlt(localctx, 14);
				{
				this.state = 5533;
				this.match(PostgreSQLParser.ROWS);
				this.state = 5534;
				this.numericonly();
				}
				break;
			case 15:
				this.enterOuterAlt(localctx, 15);
				{
				this.state = 5535;
				this.match(PostgreSQLParser.SUPPORT);
				this.state = 5536;
				this.any_name();
				}
				break;
			case 16:
				this.enterOuterAlt(localctx, 16);
				{
				this.state = 5537;
				this.functionsetresetclause();
				}
				break;
			case 17:
				this.enterOuterAlt(localctx, 17);
				{
				this.state = 5538;
				this.match(PostgreSQLParser.PARALLEL);
				this.state = 5539;
				this.colid();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createfunc_opt_item(): Createfunc_opt_itemContext {
		let localctx: Createfunc_opt_itemContext = new Createfunc_opt_itemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 658, PostgreSQLParser.RULE_createfunc_opt_item);
		try {
			this.state = 5550;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 36:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5542;
				this.match(PostgreSQLParser.AS);
				this.state = 5543;
				this.func_as();
				}
				break;
			case 238:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5544;
				this.match(PostgreSQLParser.LANGUAGE);
				this.state = 5545;
				this.nonreservedword_or_sconst();
				}
				break;
			case 434:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 5546;
				this.match(PostgreSQLParser.TRANSFORM);
				this.state = 5547;
				this.transform_type_list();
				}
				break;
			case 104:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 5548;
				this.match(PostgreSQLParser.WINDOW);
				}
				break;
			case 77:
			case 149:
			case 170:
			case 205:
			case 222:
			case 241:
			case 304:
			case 307:
			case 311:
			case 318:
			case 324:
			case 329:
			case 337:
			case 368:
			case 450:
			case 451:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 5549;
				this.common_func_opt_item();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public func_as(): Func_asContext {
		let localctx: Func_asContext = new Func_asContext(this, this._ctx, this.state);
		this.enterRule(localctx, 660, PostgreSQLParser.RULE_func_as);
		try {
			this.state = 5557;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 286, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5552;
				localctx._def = this.sconst();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5553;
				this.sconst();
				this.state = 5554;
				this.match(PostgreSQLParser.COMMA);
				this.state = 5555;
				this.sconst();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public transform_type_list(): Transform_type_listContext {
		let localctx: Transform_type_listContext = new Transform_type_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 662, PostgreSQLParser.RULE_transform_type_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5559;
			this.match(PostgreSQLParser.FOR);
			this.state = 5560;
			this.match(PostgreSQLParser.TYPE_P);
			this.state = 5561;
			this.typename();
			this.state = 5568;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 5562;
				this.match(PostgreSQLParser.COMMA);
				this.state = 5563;
				this.match(PostgreSQLParser.FOR);
				this.state = 5564;
				this.match(PostgreSQLParser.TYPE_P);
				this.state = 5565;
				this.typename();
				}
				}
				this.state = 5570;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_definition(): Opt_definitionContext {
		let localctx: Opt_definitionContext = new Opt_definitionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 664, PostgreSQLParser.RULE_opt_definition);
		try {
			this.state = 5574;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 288, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5571;
				this.match(PostgreSQLParser.WITH);
				this.state = 5572;
				this.definition();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public table_func_column(): Table_func_columnContext {
		let localctx: Table_func_columnContext = new Table_func_columnContext(this, this._ctx, this.state);
		this.enterRule(localctx, 666, PostgreSQLParser.RULE_table_func_column);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5576;
			this.param_name();
			this.state = 5577;
			this.func_type();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public table_func_column_list(): Table_func_column_listContext {
		let localctx: Table_func_column_listContext = new Table_func_column_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 668, PostgreSQLParser.RULE_table_func_column_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5579;
			this.table_func_column();
			this.state = 5584;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 5580;
				this.match(PostgreSQLParser.COMMA);
				this.state = 5581;
				this.table_func_column();
				}
				}
				this.state = 5586;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alterfunctionstmt(): AlterfunctionstmtContext {
		let localctx: AlterfunctionstmtContext = new AlterfunctionstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 670, PostgreSQLParser.RULE_alterfunctionstmt);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5587;
			this.match(PostgreSQLParser.ALTER);
			this.state = 5588;
			_la = this._input.LA(1);
			if(!(_la===211 || _la===287 || _la===433)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			this.state = 5589;
			this.function_with_argtypes();
			this.state = 5590;
			this.alterfunc_opt_list();
			this.state = 5591;
			this.opt_restrict();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alterfunc_opt_list(): Alterfunc_opt_listContext {
		let localctx: Alterfunc_opt_listContext = new Alterfunc_opt_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 672, PostgreSQLParser.RULE_alterfunc_opt_list);
		try {
			let _alt: number;
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5594;
			this._errHandler.sync(this);
			_alt = 1;
			do {
				switch (_alt) {
				case 1:
					{
					{
					this.state = 5593;
					this.common_func_opt_item();
					}
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				this.state = 5596;
				this._errHandler.sync(this);
				_alt = this._interp.adaptivePredict(this._input, 290, this._ctx);
			} while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_restrict(): Opt_restrictContext {
		let localctx: Opt_restrictContext = new Opt_restrictContext(this, this._ctx, this.state);
		this.enterRule(localctx, 674, PostgreSQLParser.RULE_opt_restrict);
		try {
			this.state = 5600;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 306:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5598;
				this.match(PostgreSQLParser.RESTRICT);
				}
				break;
			case -1:
			case 2:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 88:
			case 92:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public removefuncstmt(): RemovefuncstmtContext {
		let localctx: RemovefuncstmtContext = new RemovefuncstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 676, PostgreSQLParser.RULE_removefuncstmt);
		try {
			this.state = 5638;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 292, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5602;
				this.match(PostgreSQLParser.DROP);
				this.state = 5603;
				this.match(PostgreSQLParser.FUNCTION);
				this.state = 5604;
				this.function_with_argtypes_list();
				this.state = 5605;
				this.opt_drop_behavior();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5607;
				this.match(PostgreSQLParser.DROP);
				this.state = 5608;
				this.match(PostgreSQLParser.FUNCTION);
				this.state = 5609;
				this.match(PostgreSQLParser.IF_P);
				this.state = 5610;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 5611;
				this.function_with_argtypes_list();
				this.state = 5612;
				this.opt_drop_behavior();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 5614;
				this.match(PostgreSQLParser.DROP);
				this.state = 5615;
				this.match(PostgreSQLParser.PROCEDURE);
				this.state = 5616;
				this.function_with_argtypes_list();
				this.state = 5617;
				this.opt_drop_behavior();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 5619;
				this.match(PostgreSQLParser.DROP);
				this.state = 5620;
				this.match(PostgreSQLParser.PROCEDURE);
				this.state = 5621;
				this.match(PostgreSQLParser.IF_P);
				this.state = 5622;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 5623;
				this.function_with_argtypes_list();
				this.state = 5624;
				this.opt_drop_behavior();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 5626;
				this.match(PostgreSQLParser.DROP);
				this.state = 5627;
				this.match(PostgreSQLParser.ROUTINE);
				this.state = 5628;
				this.function_with_argtypes_list();
				this.state = 5629;
				this.opt_drop_behavior();
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 5631;
				this.match(PostgreSQLParser.DROP);
				this.state = 5632;
				this.match(PostgreSQLParser.ROUTINE);
				this.state = 5633;
				this.match(PostgreSQLParser.IF_P);
				this.state = 5634;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 5635;
				this.function_with_argtypes_list();
				this.state = 5636;
				this.opt_drop_behavior();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public removeaggrstmt(): RemoveaggrstmtContext {
		let localctx: RemoveaggrstmtContext = new RemoveaggrstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 678, PostgreSQLParser.RULE_removeaggrstmt);
		try {
			this.state = 5652;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 293, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5640;
				this.match(PostgreSQLParser.DROP);
				this.state = 5641;
				this.match(PostgreSQLParser.AGGREGATE);
				this.state = 5642;
				this.aggregate_with_argtypes_list();
				this.state = 5643;
				this.opt_drop_behavior();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5645;
				this.match(PostgreSQLParser.DROP);
				this.state = 5646;
				this.match(PostgreSQLParser.AGGREGATE);
				this.state = 5647;
				this.match(PostgreSQLParser.IF_P);
				this.state = 5648;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 5649;
				this.aggregate_with_argtypes_list();
				this.state = 5650;
				this.opt_drop_behavior();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public removeoperstmt(): RemoveoperstmtContext {
		let localctx: RemoveoperstmtContext = new RemoveoperstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 680, PostgreSQLParser.RULE_removeoperstmt);
		try {
			this.state = 5666;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 294, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5654;
				this.match(PostgreSQLParser.DROP);
				this.state = 5655;
				this.match(PostgreSQLParser.OPERATOR);
				this.state = 5656;
				this.operator_with_argtypes_list();
				this.state = 5657;
				this.opt_drop_behavior();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5659;
				this.match(PostgreSQLParser.DROP);
				this.state = 5660;
				this.match(PostgreSQLParser.OPERATOR);
				this.state = 5661;
				this.match(PostgreSQLParser.IF_P);
				this.state = 5662;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 5663;
				this.operator_with_argtypes_list();
				this.state = 5664;
				this.opt_drop_behavior();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public oper_argtypes(): Oper_argtypesContext {
		let localctx: Oper_argtypesContext = new Oper_argtypesContext(this, this._ctx, this.state);
		this.enterRule(localctx, 682, PostgreSQLParser.RULE_oper_argtypes);
		try {
			this.state = 5690;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 295, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5668;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 5669;
				this.typename();
				this.state = 5670;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5672;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 5673;
				this.typename();
				this.state = 5674;
				this.match(PostgreSQLParser.COMMA);
				this.state = 5675;
				this.typename();
				this.state = 5676;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 5678;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 5679;
				this.match(PostgreSQLParser.NONE);
				this.state = 5680;
				this.match(PostgreSQLParser.COMMA);
				this.state = 5681;
				this.typename();
				this.state = 5682;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 5684;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 5685;
				this.typename();
				this.state = 5686;
				this.match(PostgreSQLParser.COMMA);
				this.state = 5687;
				this.match(PostgreSQLParser.NONE);
				this.state = 5688;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public any_operator(): Any_operatorContext {
		let localctx: Any_operatorContext = new Any_operatorContext(this, this._ctx, this.state);
		this.enterRule(localctx, 684, PostgreSQLParser.RULE_any_operator);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5697;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 286268421) !== 0) || ((((_la - 92)) & ~0x1F) === 0 && ((1 << (_la - 92)) & 2164260865) !== 0) || ((((_la - 124)) & ~0x1F) === 0 && ((1 << (_la - 124)) & 4294967265) !== 0) || ((((_la - 156)) & ~0x1F) === 0 && ((1 << (_la - 156)) & 4294967295) !== 0) || ((((_la - 188)) & ~0x1F) === 0 && ((1 << (_la - 188)) & 4294967295) !== 0) || ((((_la - 220)) & ~0x1F) === 0 && ((1 << (_la - 220)) & 4294967295) !== 0) || ((((_la - 252)) & ~0x1F) === 0 && ((1 << (_la - 252)) & 4294967295) !== 0) || ((((_la - 284)) & ~0x1F) === 0 && ((1 << (_la - 284)) & 4294967295) !== 0) || ((((_la - 316)) & ~0x1F) === 0 && ((1 << (_la - 316)) & 4294967295) !== 0) || ((((_la - 348)) & ~0x1F) === 0 && ((1 << (_la - 348)) & 4294967295) !== 0) || ((((_la - 380)) & ~0x1F) === 0 && ((1 << (_la - 380)) & 4294967295) !== 0) || ((((_la - 412)) & ~0x1F) === 0 && ((1 << (_la - 412)) & 4294967295) !== 0) || ((((_la - 444)) & ~0x1F) === 0 && ((1 << (_la - 444)) & 4294443005) !== 0) || ((((_la - 476)) & ~0x1F) === 0 && ((1 << (_la - 476)) & 4293656575) !== 0) || ((((_la - 508)) & ~0x1F) === 0 && ((1 << (_la - 508)) & 1610613307) !== 0)) {
				{
				{
				this.state = 5692;
				this.colid();
				this.state = 5693;
				this.match(PostgreSQLParser.DOT);
				}
				}
				this.state = 5699;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			this.state = 5700;
			this.all_op();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public operator_with_argtypes_list(): Operator_with_argtypes_listContext {
		let localctx: Operator_with_argtypes_listContext = new Operator_with_argtypes_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 686, PostgreSQLParser.RULE_operator_with_argtypes_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5702;
			this.operator_with_argtypes();
			this.state = 5707;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 5703;
				this.match(PostgreSQLParser.COMMA);
				this.state = 5704;
				this.operator_with_argtypes();
				}
				}
				this.state = 5709;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public operator_with_argtypes(): Operator_with_argtypesContext {
		let localctx: Operator_with_argtypesContext = new Operator_with_argtypesContext(this, this._ctx, this.state);
		this.enterRule(localctx, 688, PostgreSQLParser.RULE_operator_with_argtypes);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5710;
			this.any_operator();
			this.state = 5711;
			this.oper_argtypes();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public dostmt(): DostmtContext {
		let localctx: DostmtContext = new DostmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 690, PostgreSQLParser.RULE_dostmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5713;
			this.match(PostgreSQLParser.DO);
			this.state = 5714;
			this.dostmt_opt_list();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public dostmt_opt_list(): Dostmt_opt_listContext {
		let localctx: Dostmt_opt_listContext = new Dostmt_opt_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 692, PostgreSQLParser.RULE_dostmt_opt_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5717;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			do {
				{
				{
				this.state = 5716;
				this.dostmt_opt_item();
				}
				}
				this.state = 5719;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			} while (_la===238 || ((((_la - 521)) & ~0x1F) === 0 && ((1 << (_la - 521)) & 67108885) !== 0));
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public dostmt_opt_item(): Dostmt_opt_itemContext {
		let localctx: Dostmt_opt_itemContext = new Dostmt_opt_itemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 694, PostgreSQLParser.RULE_dostmt_opt_item);
		try {
			this.state = 5724;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 521:
			case 523:
			case 525:
			case 547:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5721;
				this.sconst();
				}
				break;
			case 238:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5722;
				this.match(PostgreSQLParser.LANGUAGE);
				this.state = 5723;
				this.nonreservedword_or_sconst();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createcaststmt(): CreatecaststmtContext {
		let localctx: CreatecaststmtContext = new CreatecaststmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 696, PostgreSQLParser.RULE_createcaststmt);
		try {
			this.state = 5760;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 300, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5726;
				this.match(PostgreSQLParser.CREATE);
				this.state = 5727;
				this.match(PostgreSQLParser.CAST);
				this.state = 5728;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 5729;
				this.typename();
				this.state = 5730;
				this.match(PostgreSQLParser.AS);
				this.state = 5731;
				this.typename();
				this.state = 5732;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 5733;
				this.match(PostgreSQLParser.WITH);
				this.state = 5734;
				this.match(PostgreSQLParser.FUNCTION);
				this.state = 5735;
				this.function_with_argtypes();
				this.state = 5736;
				this.cast_context();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5738;
				this.match(PostgreSQLParser.CREATE);
				this.state = 5739;
				this.match(PostgreSQLParser.CAST);
				this.state = 5740;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 5741;
				this.typename();
				this.state = 5742;
				this.match(PostgreSQLParser.AS);
				this.state = 5743;
				this.typename();
				this.state = 5744;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 5745;
				this.match(PostgreSQLParser.WITHOUT);
				this.state = 5746;
				this.match(PostgreSQLParser.FUNCTION);
				this.state = 5747;
				this.cast_context();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 5749;
				this.match(PostgreSQLParser.CREATE);
				this.state = 5750;
				this.match(PostgreSQLParser.CAST);
				this.state = 5751;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 5752;
				this.typename();
				this.state = 5753;
				this.match(PostgreSQLParser.AS);
				this.state = 5754;
				this.typename();
				this.state = 5755;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 5756;
				this.match(PostgreSQLParser.WITH);
				this.state = 5757;
				this.match(PostgreSQLParser.INOUT);
				this.state = 5758;
				this.cast_context();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public cast_context(): Cast_contextContext {
		let localctx: Cast_contextContext = new Cast_contextContext(this, this._ctx, this.state);
		this.enterRule(localctx, 698, PostgreSQLParser.RULE_cast_context);
		try {
			this.state = 5767;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 301, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5762;
				this.match(PostgreSQLParser.AS);
				this.state = 5763;
				this.match(PostgreSQLParser.IMPLICIT_P);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5764;
				this.match(PostgreSQLParser.AS);
				this.state = 5765;
				this.match(PostgreSQLParser.ASSIGNMENT);
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public dropcaststmt(): DropcaststmtContext {
		let localctx: DropcaststmtContext = new DropcaststmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 700, PostgreSQLParser.RULE_dropcaststmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5769;
			this.match(PostgreSQLParser.DROP);
			this.state = 5770;
			this.match(PostgreSQLParser.CAST);
			this.state = 5771;
			this.opt_if_exists();
			this.state = 5772;
			this.match(PostgreSQLParser.OPEN_PAREN);
			this.state = 5773;
			this.typename();
			this.state = 5774;
			this.match(PostgreSQLParser.AS);
			this.state = 5775;
			this.typename();
			this.state = 5776;
			this.match(PostgreSQLParser.CLOSE_PAREN);
			this.state = 5777;
			this.opt_drop_behavior();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_if_exists(): Opt_if_existsContext {
		let localctx: Opt_if_existsContext = new Opt_if_existsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 702, PostgreSQLParser.RULE_opt_if_exists);
		try {
			this.state = 5782;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 220:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5779;
				this.match(PostgreSQLParser.IF_P);
				this.state = 5780;
				this.match(PostgreSQLParser.EXISTS);
				}
				break;
			case 2:
			case 62:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createtransformstmt(): CreatetransformstmtContext {
		let localctx: CreatetransformstmtContext = new CreatetransformstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 704, PostgreSQLParser.RULE_createtransformstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5784;
			this.match(PostgreSQLParser.CREATE);
			this.state = 5785;
			this.opt_or_replace();
			this.state = 5786;
			this.match(PostgreSQLParser.TRANSFORM);
			this.state = 5787;
			this.match(PostgreSQLParser.FOR);
			this.state = 5788;
			this.typename();
			this.state = 5789;
			this.match(PostgreSQLParser.LANGUAGE);
			this.state = 5790;
			this.name();
			this.state = 5791;
			this.match(PostgreSQLParser.OPEN_PAREN);
			this.state = 5792;
			this.transform_element_list();
			this.state = 5793;
			this.match(PostgreSQLParser.CLOSE_PAREN);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public transform_element_list(): Transform_element_listContext {
		let localctx: Transform_element_listContext = new Transform_element_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 706, PostgreSQLParser.RULE_transform_element_list);
		try {
			this.state = 5829;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 303, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5795;
				this.match(PostgreSQLParser.FROM);
				this.state = 5796;
				this.match(PostgreSQLParser.SQL_P);
				this.state = 5797;
				this.match(PostgreSQLParser.WITH);
				this.state = 5798;
				this.match(PostgreSQLParser.FUNCTION);
				this.state = 5799;
				this.function_with_argtypes();
				this.state = 5800;
				this.match(PostgreSQLParser.COMMA);
				this.state = 5801;
				this.match(PostgreSQLParser.TO);
				this.state = 5802;
				this.match(PostgreSQLParser.SQL_P);
				this.state = 5803;
				this.match(PostgreSQLParser.WITH);
				this.state = 5804;
				this.match(PostgreSQLParser.FUNCTION);
				this.state = 5805;
				this.function_with_argtypes();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5807;
				this.match(PostgreSQLParser.TO);
				this.state = 5808;
				this.match(PostgreSQLParser.SQL_P);
				this.state = 5809;
				this.match(PostgreSQLParser.WITH);
				this.state = 5810;
				this.match(PostgreSQLParser.FUNCTION);
				this.state = 5811;
				this.function_with_argtypes();
				this.state = 5812;
				this.match(PostgreSQLParser.COMMA);
				this.state = 5813;
				this.match(PostgreSQLParser.FROM);
				this.state = 5814;
				this.match(PostgreSQLParser.SQL_P);
				this.state = 5815;
				this.match(PostgreSQLParser.WITH);
				this.state = 5816;
				this.match(PostgreSQLParser.FUNCTION);
				this.state = 5817;
				this.function_with_argtypes();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 5819;
				this.match(PostgreSQLParser.FROM);
				this.state = 5820;
				this.match(PostgreSQLParser.SQL_P);
				this.state = 5821;
				this.match(PostgreSQLParser.WITH);
				this.state = 5822;
				this.match(PostgreSQLParser.FUNCTION);
				this.state = 5823;
				this.function_with_argtypes();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 5824;
				this.match(PostgreSQLParser.TO);
				this.state = 5825;
				this.match(PostgreSQLParser.SQL_P);
				this.state = 5826;
				this.match(PostgreSQLParser.WITH);
				this.state = 5827;
				this.match(PostgreSQLParser.FUNCTION);
				this.state = 5828;
				this.function_with_argtypes();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public droptransformstmt(): DroptransformstmtContext {
		let localctx: DroptransformstmtContext = new DroptransformstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 708, PostgreSQLParser.RULE_droptransformstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5831;
			this.match(PostgreSQLParser.DROP);
			this.state = 5832;
			this.match(PostgreSQLParser.TRANSFORM);
			this.state = 5833;
			this.opt_if_exists();
			this.state = 5834;
			this.match(PostgreSQLParser.FOR);
			this.state = 5835;
			this.typename();
			this.state = 5836;
			this.match(PostgreSQLParser.LANGUAGE);
			this.state = 5837;
			this.name();
			this.state = 5838;
			this.opt_drop_behavior();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public reindexstmt(): ReindexstmtContext {
		let localctx: ReindexstmtContext = new ReindexstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 710, PostgreSQLParser.RULE_reindexstmt);
		try {
			this.state = 5866;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 304, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5840;
				this.match(PostgreSQLParser.REINDEX);
				this.state = 5841;
				this.reindex_target_type();
				this.state = 5842;
				this.opt_concurrently();
				this.state = 5843;
				this.qualified_name();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5845;
				this.match(PostgreSQLParser.REINDEX);
				this.state = 5846;
				this.reindex_target_multitable();
				this.state = 5847;
				this.opt_concurrently();
				this.state = 5848;
				this.name();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 5850;
				this.match(PostgreSQLParser.REINDEX);
				this.state = 5851;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 5852;
				this.reindex_option_list();
				this.state = 5853;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 5854;
				this.reindex_target_type();
				this.state = 5855;
				this.opt_concurrently();
				this.state = 5856;
				this.qualified_name();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 5858;
				this.match(PostgreSQLParser.REINDEX);
				this.state = 5859;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 5860;
				this.reindex_option_list();
				this.state = 5861;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 5862;
				this.reindex_target_multitable();
				this.state = 5863;
				this.opt_concurrently();
				this.state = 5864;
				this.name();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public reindex_target_type(): Reindex_target_typeContext {
		let localctx: Reindex_target_typeContext = new Reindex_target_typeContext(this, this._ctx, this.state);
		this.enterRule(localctx, 712, PostgreSQLParser.RULE_reindex_target_type);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5868;
			_la = this._input.LA(1);
			if(!(_la===92 || _la===226)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public reindex_target_multitable(): Reindex_target_multitableContext {
		let localctx: Reindex_target_multitableContext = new Reindex_target_multitableContext(this, this._ctx, this.state);
		this.enterRule(localctx, 714, PostgreSQLParser.RULE_reindex_target_multitable);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5870;
			_la = this._input.LA(1);
			if(!(_la===175 || _la===314 || _la===340)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public reindex_option_list(): Reindex_option_listContext {
		let localctx: Reindex_option_listContext = new Reindex_option_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 716, PostgreSQLParser.RULE_reindex_option_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5872;
			this.reindex_option_elem();
			this.state = 5877;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 5873;
				this.match(PostgreSQLParser.COMMA);
				this.state = 5874;
				this.reindex_option_elem();
				}
				}
				this.state = 5879;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public reindex_option_elem(): Reindex_option_elemContext {
		let localctx: Reindex_option_elemContext = new Reindex_option_elemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 718, PostgreSQLParser.RULE_reindex_option_elem);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 5880;
			this.match(PostgreSQLParser.VERBOSE);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public altertblspcstmt(): AltertblspcstmtContext {
		let localctx: AltertblspcstmtContext = new AltertblspcstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 720, PostgreSQLParser.RULE_altertblspcstmt);
		try {
			this.state = 5894;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 306, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5882;
				this.match(PostgreSQLParser.ALTER);
				this.state = 5883;
				this.match(PostgreSQLParser.TABLESPACE);
				this.state = 5884;
				this.name();
				this.state = 5885;
				this.match(PostgreSQLParser.SET);
				this.state = 5886;
				this.reloptions();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5888;
				this.match(PostgreSQLParser.ALTER);
				this.state = 5889;
				this.match(PostgreSQLParser.TABLESPACE);
				this.state = 5890;
				this.name();
				this.state = 5891;
				this.match(PostgreSQLParser.RESET);
				this.state = 5892;
				this.reloptions();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public renamestmt(): RenamestmtContext {
		let localctx: RenamestmtContext = new RenamestmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 722, PostgreSQLParser.RULE_renamestmt);
		try {
			this.state = 6364;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 307, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 5896;
				this.match(PostgreSQLParser.ALTER);
				this.state = 5897;
				this.match(PostgreSQLParser.AGGREGATE);
				this.state = 5898;
				this.aggregate_with_argtypes();
				this.state = 5899;
				this.match(PostgreSQLParser.RENAME);
				this.state = 5900;
				this.match(PostgreSQLParser.TO);
				this.state = 5901;
				this.name();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 5903;
				this.match(PostgreSQLParser.ALTER);
				this.state = 5904;
				this.match(PostgreSQLParser.COLLATION);
				this.state = 5905;
				this.any_name();
				this.state = 5906;
				this.match(PostgreSQLParser.RENAME);
				this.state = 5907;
				this.match(PostgreSQLParser.TO);
				this.state = 5908;
				this.name();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 5910;
				this.match(PostgreSQLParser.ALTER);
				this.state = 5911;
				this.match(PostgreSQLParser.CONVERSION_P);
				this.state = 5912;
				this.any_name();
				this.state = 5913;
				this.match(PostgreSQLParser.RENAME);
				this.state = 5914;
				this.match(PostgreSQLParser.TO);
				this.state = 5915;
				this.name();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 5917;
				this.match(PostgreSQLParser.ALTER);
				this.state = 5918;
				this.match(PostgreSQLParser.DATABASE);
				this.state = 5919;
				this.name();
				this.state = 5920;
				this.match(PostgreSQLParser.RENAME);
				this.state = 5921;
				this.match(PostgreSQLParser.TO);
				this.state = 5922;
				this.name();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 5924;
				this.match(PostgreSQLParser.ALTER);
				this.state = 5925;
				this.match(PostgreSQLParser.DOMAIN_P);
				this.state = 5926;
				this.any_name();
				this.state = 5927;
				this.match(PostgreSQLParser.RENAME);
				this.state = 5928;
				this.match(PostgreSQLParser.TO);
				this.state = 5929;
				this.name();
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 5931;
				this.match(PostgreSQLParser.ALTER);
				this.state = 5932;
				this.match(PostgreSQLParser.DOMAIN_P);
				this.state = 5933;
				this.any_name();
				this.state = 5934;
				this.match(PostgreSQLParser.RENAME);
				this.state = 5935;
				this.match(PostgreSQLParser.CONSTRAINT);
				this.state = 5936;
				this.name();
				this.state = 5937;
				this.match(PostgreSQLParser.TO);
				this.state = 5938;
				this.name();
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 5940;
				this.match(PostgreSQLParser.ALTER);
				this.state = 5941;
				this.match(PostgreSQLParser.FOREIGN);
				this.state = 5942;
				this.match(PostgreSQLParser.DATA_P);
				this.state = 5943;
				this.match(PostgreSQLParser.WRAPPER);
				this.state = 5944;
				this.name();
				this.state = 5945;
				this.match(PostgreSQLParser.RENAME);
				this.state = 5946;
				this.match(PostgreSQLParser.TO);
				this.state = 5947;
				this.name();
				}
				break;
			case 8:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 5949;
				this.match(PostgreSQLParser.ALTER);
				this.state = 5950;
				this.match(PostgreSQLParser.FUNCTION);
				this.state = 5951;
				this.function_with_argtypes();
				this.state = 5952;
				this.match(PostgreSQLParser.RENAME);
				this.state = 5953;
				this.match(PostgreSQLParser.TO);
				this.state = 5954;
				this.name();
				}
				break;
			case 9:
				this.enterOuterAlt(localctx, 9);
				{
				this.state = 5956;
				this.match(PostgreSQLParser.ALTER);
				this.state = 5957;
				this.match(PostgreSQLParser.GROUP_P);
				this.state = 5958;
				this.roleid();
				this.state = 5959;
				this.match(PostgreSQLParser.RENAME);
				this.state = 5960;
				this.match(PostgreSQLParser.TO);
				this.state = 5961;
				this.roleid();
				}
				break;
			case 10:
				this.enterOuterAlt(localctx, 10);
				{
				this.state = 5963;
				this.match(PostgreSQLParser.ALTER);
				this.state = 5964;
				this.opt_procedural();
				this.state = 5965;
				this.match(PostgreSQLParser.LANGUAGE);
				this.state = 5966;
				this.name();
				this.state = 5967;
				this.match(PostgreSQLParser.RENAME);
				this.state = 5968;
				this.match(PostgreSQLParser.TO);
				this.state = 5969;
				this.name();
				}
				break;
			case 11:
				this.enterOuterAlt(localctx, 11);
				{
				this.state = 5971;
				this.match(PostgreSQLParser.ALTER);
				this.state = 5972;
				this.match(PostgreSQLParser.OPERATOR);
				this.state = 5973;
				this.match(PostgreSQLParser.CLASS);
				this.state = 5974;
				this.any_name();
				this.state = 5975;
				this.match(PostgreSQLParser.USING);
				this.state = 5976;
				this.name();
				this.state = 5977;
				this.match(PostgreSQLParser.RENAME);
				this.state = 5978;
				this.match(PostgreSQLParser.TO);
				this.state = 5979;
				this.name();
				}
				break;
			case 12:
				this.enterOuterAlt(localctx, 12);
				{
				this.state = 5981;
				this.match(PostgreSQLParser.ALTER);
				this.state = 5982;
				this.match(PostgreSQLParser.OPERATOR);
				this.state = 5983;
				this.match(PostgreSQLParser.FAMILY);
				this.state = 5984;
				this.any_name();
				this.state = 5985;
				this.match(PostgreSQLParser.USING);
				this.state = 5986;
				this.name();
				this.state = 5987;
				this.match(PostgreSQLParser.RENAME);
				this.state = 5988;
				this.match(PostgreSQLParser.TO);
				this.state = 5989;
				this.name();
				}
				break;
			case 13:
				this.enterOuterAlt(localctx, 13);
				{
				this.state = 5991;
				this.match(PostgreSQLParser.ALTER);
				this.state = 5992;
				this.match(PostgreSQLParser.POLICY);
				this.state = 5993;
				this.name();
				this.state = 5994;
				this.match(PostgreSQLParser.ON);
				this.state = 5995;
				this.qualified_name();
				this.state = 5996;
				this.match(PostgreSQLParser.RENAME);
				this.state = 5997;
				this.match(PostgreSQLParser.TO);
				this.state = 5998;
				this.name();
				}
				break;
			case 14:
				this.enterOuterAlt(localctx, 14);
				{
				this.state = 6000;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6001;
				this.match(PostgreSQLParser.POLICY);
				this.state = 6002;
				this.match(PostgreSQLParser.IF_P);
				this.state = 6003;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 6004;
				this.name();
				this.state = 6005;
				this.match(PostgreSQLParser.ON);
				this.state = 6006;
				this.qualified_name();
				this.state = 6007;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6008;
				this.match(PostgreSQLParser.TO);
				this.state = 6009;
				this.name();
				}
				break;
			case 15:
				this.enterOuterAlt(localctx, 15);
				{
				this.state = 6011;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6012;
				this.match(PostgreSQLParser.PROCEDURE);
				this.state = 6013;
				this.function_with_argtypes();
				this.state = 6014;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6015;
				this.match(PostgreSQLParser.TO);
				this.state = 6016;
				this.name();
				}
				break;
			case 16:
				this.enterOuterAlt(localctx, 16);
				{
				this.state = 6018;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6019;
				this.match(PostgreSQLParser.PUBLICATION);
				this.state = 6020;
				this.name();
				this.state = 6021;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6022;
				this.match(PostgreSQLParser.TO);
				this.state = 6023;
				this.name();
				}
				break;
			case 17:
				this.enterOuterAlt(localctx, 17);
				{
				this.state = 6025;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6026;
				this.match(PostgreSQLParser.ROUTINE);
				this.state = 6027;
				this.function_with_argtypes();
				this.state = 6028;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6029;
				this.match(PostgreSQLParser.TO);
				this.state = 6030;
				this.name();
				}
				break;
			case 18:
				this.enterOuterAlt(localctx, 18);
				{
				this.state = 6032;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6033;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 6034;
				this.name();
				this.state = 6035;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6036;
				this.match(PostgreSQLParser.TO);
				this.state = 6037;
				this.name();
				}
				break;
			case 19:
				this.enterOuterAlt(localctx, 19);
				{
				this.state = 6039;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6040;
				this.match(PostgreSQLParser.SERVER);
				this.state = 6041;
				this.name();
				this.state = 6042;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6043;
				this.match(PostgreSQLParser.TO);
				this.state = 6044;
				this.name();
				}
				break;
			case 20:
				this.enterOuterAlt(localctx, 20);
				{
				this.state = 6046;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6047;
				this.match(PostgreSQLParser.SUBSCRIPTION);
				this.state = 6048;
				this.name();
				this.state = 6049;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6050;
				this.match(PostgreSQLParser.TO);
				this.state = 6051;
				this.name();
				}
				break;
			case 21:
				this.enterOuterAlt(localctx, 21);
				{
				this.state = 6053;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6054;
				this.match(PostgreSQLParser.TABLE);
				this.state = 6055;
				this.relation_expr();
				this.state = 6056;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6057;
				this.match(PostgreSQLParser.TO);
				this.state = 6058;
				this.name();
				}
				break;
			case 22:
				this.enterOuterAlt(localctx, 22);
				{
				this.state = 6060;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6061;
				this.match(PostgreSQLParser.TABLE);
				this.state = 6062;
				this.match(PostgreSQLParser.IF_P);
				this.state = 6063;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 6064;
				this.relation_expr();
				this.state = 6065;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6066;
				this.match(PostgreSQLParser.TO);
				this.state = 6067;
				this.name();
				}
				break;
			case 23:
				this.enterOuterAlt(localctx, 23);
				{
				this.state = 6069;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6070;
				this.match(PostgreSQLParser.SEQUENCE);
				this.state = 6071;
				this.qualified_name();
				this.state = 6072;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6073;
				this.match(PostgreSQLParser.TO);
				this.state = 6074;
				this.name();
				}
				break;
			case 24:
				this.enterOuterAlt(localctx, 24);
				{
				this.state = 6076;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6077;
				this.match(PostgreSQLParser.SEQUENCE);
				this.state = 6078;
				this.match(PostgreSQLParser.IF_P);
				this.state = 6079;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 6080;
				this.qualified_name();
				this.state = 6081;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6082;
				this.match(PostgreSQLParser.TO);
				this.state = 6083;
				this.name();
				}
				break;
			case 25:
				this.enterOuterAlt(localctx, 25);
				{
				this.state = 6085;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6086;
				this.match(PostgreSQLParser.VIEW);
				this.state = 6087;
				this.qualified_name();
				this.state = 6088;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6089;
				this.match(PostgreSQLParser.TO);
				this.state = 6090;
				this.name();
				}
				break;
			case 26:
				this.enterOuterAlt(localctx, 26);
				{
				this.state = 6092;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6093;
				this.match(PostgreSQLParser.VIEW);
				this.state = 6094;
				this.match(PostgreSQLParser.IF_P);
				this.state = 6095;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 6096;
				this.qualified_name();
				this.state = 6097;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6098;
				this.match(PostgreSQLParser.TO);
				this.state = 6099;
				this.name();
				}
				break;
			case 27:
				this.enterOuterAlt(localctx, 27);
				{
				this.state = 6101;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6102;
				this.match(PostgreSQLParser.MATERIALIZED);
				this.state = 6103;
				this.match(PostgreSQLParser.VIEW);
				this.state = 6104;
				this.qualified_name();
				this.state = 6105;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6106;
				this.match(PostgreSQLParser.TO);
				this.state = 6107;
				this.name();
				}
				break;
			case 28:
				this.enterOuterAlt(localctx, 28);
				{
				this.state = 6109;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6110;
				this.match(PostgreSQLParser.MATERIALIZED);
				this.state = 6111;
				this.match(PostgreSQLParser.VIEW);
				this.state = 6112;
				this.match(PostgreSQLParser.IF_P);
				this.state = 6113;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 6114;
				this.qualified_name();
				this.state = 6115;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6116;
				this.match(PostgreSQLParser.TO);
				this.state = 6117;
				this.name();
				}
				break;
			case 29:
				this.enterOuterAlt(localctx, 29);
				{
				this.state = 6119;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6120;
				this.match(PostgreSQLParser.INDEX);
				this.state = 6121;
				this.qualified_name();
				this.state = 6122;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6123;
				this.match(PostgreSQLParser.TO);
				this.state = 6124;
				this.name();
				}
				break;
			case 30:
				this.enterOuterAlt(localctx, 30);
				{
				this.state = 6126;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6127;
				this.match(PostgreSQLParser.INDEX);
				this.state = 6128;
				this.match(PostgreSQLParser.IF_P);
				this.state = 6129;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 6130;
				this.qualified_name();
				this.state = 6131;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6132;
				this.match(PostgreSQLParser.TO);
				this.state = 6133;
				this.name();
				}
				break;
			case 31:
				this.enterOuterAlt(localctx, 31);
				{
				this.state = 6135;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6136;
				this.match(PostgreSQLParser.FOREIGN);
				this.state = 6137;
				this.match(PostgreSQLParser.TABLE);
				this.state = 6138;
				this.relation_expr();
				this.state = 6139;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6140;
				this.match(PostgreSQLParser.TO);
				this.state = 6141;
				this.name();
				}
				break;
			case 32:
				this.enterOuterAlt(localctx, 32);
				{
				this.state = 6143;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6144;
				this.match(PostgreSQLParser.FOREIGN);
				this.state = 6145;
				this.match(PostgreSQLParser.TABLE);
				this.state = 6146;
				this.match(PostgreSQLParser.IF_P);
				this.state = 6147;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 6148;
				this.relation_expr();
				this.state = 6149;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6150;
				this.match(PostgreSQLParser.TO);
				this.state = 6151;
				this.name();
				}
				break;
			case 33:
				this.enterOuterAlt(localctx, 33);
				{
				this.state = 6153;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6154;
				this.match(PostgreSQLParser.TABLE);
				this.state = 6155;
				this.relation_expr();
				this.state = 6156;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6157;
				this.opt_column();
				this.state = 6158;
				this.name();
				this.state = 6159;
				this.match(PostgreSQLParser.TO);
				this.state = 6160;
				this.name();
				}
				break;
			case 34:
				this.enterOuterAlt(localctx, 34);
				{
				this.state = 6162;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6163;
				this.match(PostgreSQLParser.TABLE);
				this.state = 6164;
				this.match(PostgreSQLParser.IF_P);
				this.state = 6165;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 6166;
				this.relation_expr();
				this.state = 6167;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6168;
				this.opt_column();
				this.state = 6169;
				this.name();
				this.state = 6170;
				this.match(PostgreSQLParser.TO);
				this.state = 6171;
				this.name();
				}
				break;
			case 35:
				this.enterOuterAlt(localctx, 35);
				{
				this.state = 6173;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6174;
				this.match(PostgreSQLParser.VIEW);
				this.state = 6175;
				this.qualified_name();
				this.state = 6176;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6177;
				this.opt_column();
				this.state = 6178;
				this.name();
				this.state = 6179;
				this.match(PostgreSQLParser.TO);
				this.state = 6180;
				this.name();
				}
				break;
			case 36:
				this.enterOuterAlt(localctx, 36);
				{
				this.state = 6182;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6183;
				this.match(PostgreSQLParser.VIEW);
				this.state = 6184;
				this.match(PostgreSQLParser.IF_P);
				this.state = 6185;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 6186;
				this.qualified_name();
				this.state = 6187;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6188;
				this.opt_column();
				this.state = 6189;
				this.name();
				this.state = 6190;
				this.match(PostgreSQLParser.TO);
				this.state = 6191;
				this.name();
				}
				break;
			case 37:
				this.enterOuterAlt(localctx, 37);
				{
				this.state = 6193;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6194;
				this.match(PostgreSQLParser.MATERIALIZED);
				this.state = 6195;
				this.match(PostgreSQLParser.VIEW);
				this.state = 6196;
				this.qualified_name();
				this.state = 6197;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6198;
				this.opt_column();
				this.state = 6199;
				this.name();
				this.state = 6200;
				this.match(PostgreSQLParser.TO);
				this.state = 6201;
				this.name();
				}
				break;
			case 38:
				this.enterOuterAlt(localctx, 38);
				{
				this.state = 6203;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6204;
				this.match(PostgreSQLParser.MATERIALIZED);
				this.state = 6205;
				this.match(PostgreSQLParser.VIEW);
				this.state = 6206;
				this.match(PostgreSQLParser.IF_P);
				this.state = 6207;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 6208;
				this.qualified_name();
				this.state = 6209;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6210;
				this.opt_column();
				this.state = 6211;
				this.name();
				this.state = 6212;
				this.match(PostgreSQLParser.TO);
				this.state = 6213;
				this.name();
				}
				break;
			case 39:
				this.enterOuterAlt(localctx, 39);
				{
				this.state = 6215;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6216;
				this.match(PostgreSQLParser.TABLE);
				this.state = 6217;
				this.relation_expr();
				this.state = 6218;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6219;
				this.match(PostgreSQLParser.CONSTRAINT);
				this.state = 6220;
				this.name();
				this.state = 6221;
				this.match(PostgreSQLParser.TO);
				this.state = 6222;
				this.name();
				}
				break;
			case 40:
				this.enterOuterAlt(localctx, 40);
				{
				this.state = 6224;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6225;
				this.match(PostgreSQLParser.TABLE);
				this.state = 6226;
				this.match(PostgreSQLParser.IF_P);
				this.state = 6227;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 6228;
				this.relation_expr();
				this.state = 6229;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6230;
				this.match(PostgreSQLParser.CONSTRAINT);
				this.state = 6231;
				this.name();
				this.state = 6232;
				this.match(PostgreSQLParser.TO);
				this.state = 6233;
				this.name();
				}
				break;
			case 41:
				this.enterOuterAlt(localctx, 41);
				{
				this.state = 6235;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6236;
				this.match(PostgreSQLParser.FOREIGN);
				this.state = 6237;
				this.match(PostgreSQLParser.TABLE);
				this.state = 6238;
				this.relation_expr();
				this.state = 6239;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6240;
				this.opt_column();
				this.state = 6241;
				this.name();
				this.state = 6242;
				this.match(PostgreSQLParser.TO);
				this.state = 6243;
				this.name();
				}
				break;
			case 42:
				this.enterOuterAlt(localctx, 42);
				{
				this.state = 6245;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6246;
				this.match(PostgreSQLParser.FOREIGN);
				this.state = 6247;
				this.match(PostgreSQLParser.TABLE);
				this.state = 6248;
				this.match(PostgreSQLParser.IF_P);
				this.state = 6249;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 6250;
				this.relation_expr();
				this.state = 6251;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6252;
				this.opt_column();
				this.state = 6253;
				this.name();
				this.state = 6254;
				this.match(PostgreSQLParser.TO);
				this.state = 6255;
				this.name();
				}
				break;
			case 43:
				this.enterOuterAlt(localctx, 43);
				{
				this.state = 6257;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6258;
				this.match(PostgreSQLParser.RULE);
				this.state = 6259;
				this.name();
				this.state = 6260;
				this.match(PostgreSQLParser.ON);
				this.state = 6261;
				this.qualified_name();
				this.state = 6262;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6263;
				this.match(PostgreSQLParser.TO);
				this.state = 6264;
				this.name();
				}
				break;
			case 44:
				this.enterOuterAlt(localctx, 44);
				{
				this.state = 6266;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6267;
				this.match(PostgreSQLParser.TRIGGER);
				this.state = 6268;
				this.name();
				this.state = 6269;
				this.match(PostgreSQLParser.ON);
				this.state = 6270;
				this.qualified_name();
				this.state = 6271;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6272;
				this.match(PostgreSQLParser.TO);
				this.state = 6273;
				this.name();
				}
				break;
			case 45:
				this.enterOuterAlt(localctx, 45);
				{
				this.state = 6275;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6276;
				this.match(PostgreSQLParser.EVENT);
				this.state = 6277;
				this.match(PostgreSQLParser.TRIGGER);
				this.state = 6278;
				this.name();
				this.state = 6279;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6280;
				this.match(PostgreSQLParser.TO);
				this.state = 6281;
				this.name();
				}
				break;
			case 46:
				this.enterOuterAlt(localctx, 46);
				{
				this.state = 6283;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6284;
				this.match(PostgreSQLParser.ROLE);
				this.state = 6285;
				this.roleid();
				this.state = 6286;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6287;
				this.match(PostgreSQLParser.TO);
				this.state = 6288;
				this.roleid();
				}
				break;
			case 47:
				this.enterOuterAlt(localctx, 47);
				{
				this.state = 6290;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6291;
				this.match(PostgreSQLParser.USER);
				this.state = 6292;
				this.roleid();
				this.state = 6293;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6294;
				this.match(PostgreSQLParser.TO);
				this.state = 6295;
				this.roleid();
				}
				break;
			case 48:
				this.enterOuterAlt(localctx, 48);
				{
				this.state = 6297;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6298;
				this.match(PostgreSQLParser.TABLESPACE);
				this.state = 6299;
				this.name();
				this.state = 6300;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6301;
				this.match(PostgreSQLParser.TO);
				this.state = 6302;
				this.name();
				}
				break;
			case 49:
				this.enterOuterAlt(localctx, 49);
				{
				this.state = 6304;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6305;
				this.match(PostgreSQLParser.STATISTICS);
				this.state = 6306;
				this.any_name();
				this.state = 6307;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6308;
				this.match(PostgreSQLParser.TO);
				this.state = 6309;
				this.name();
				}
				break;
			case 50:
				this.enterOuterAlt(localctx, 50);
				{
				this.state = 6311;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6312;
				this.match(PostgreSQLParser.TEXT_P);
				this.state = 6313;
				this.match(PostgreSQLParser.SEARCH);
				this.state = 6314;
				this.match(PostgreSQLParser.PARSER);
				this.state = 6315;
				this.any_name();
				this.state = 6316;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6317;
				this.match(PostgreSQLParser.TO);
				this.state = 6318;
				this.name();
				}
				break;
			case 51:
				this.enterOuterAlt(localctx, 51);
				{
				this.state = 6320;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6321;
				this.match(PostgreSQLParser.TEXT_P);
				this.state = 6322;
				this.match(PostgreSQLParser.SEARCH);
				this.state = 6323;
				this.match(PostgreSQLParser.DICTIONARY);
				this.state = 6324;
				this.any_name();
				this.state = 6325;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6326;
				this.match(PostgreSQLParser.TO);
				this.state = 6327;
				this.name();
				}
				break;
			case 52:
				this.enterOuterAlt(localctx, 52);
				{
				this.state = 6329;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6330;
				this.match(PostgreSQLParser.TEXT_P);
				this.state = 6331;
				this.match(PostgreSQLParser.SEARCH);
				this.state = 6332;
				this.match(PostgreSQLParser.TEMPLATE);
				this.state = 6333;
				this.any_name();
				this.state = 6334;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6335;
				this.match(PostgreSQLParser.TO);
				this.state = 6336;
				this.name();
				}
				break;
			case 53:
				this.enterOuterAlt(localctx, 53);
				{
				this.state = 6338;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6339;
				this.match(PostgreSQLParser.TEXT_P);
				this.state = 6340;
				this.match(PostgreSQLParser.SEARCH);
				this.state = 6341;
				this.match(PostgreSQLParser.CONFIGURATION);
				this.state = 6342;
				this.any_name();
				this.state = 6343;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6344;
				this.match(PostgreSQLParser.TO);
				this.state = 6345;
				this.name();
				}
				break;
			case 54:
				this.enterOuterAlt(localctx, 54);
				{
				this.state = 6347;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6348;
				this.match(PostgreSQLParser.TYPE_P);
				this.state = 6349;
				this.any_name();
				this.state = 6350;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6351;
				this.match(PostgreSQLParser.TO);
				this.state = 6352;
				this.name();
				}
				break;
			case 55:
				this.enterOuterAlt(localctx, 55);
				{
				this.state = 6354;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6355;
				this.match(PostgreSQLParser.TYPE_P);
				this.state = 6356;
				this.any_name();
				this.state = 6357;
				this.match(PostgreSQLParser.RENAME);
				this.state = 6358;
				this.match(PostgreSQLParser.ATTRIBUTE);
				this.state = 6359;
				this.name();
				this.state = 6360;
				this.match(PostgreSQLParser.TO);
				this.state = 6361;
				this.name();
				this.state = 6362;
				this.opt_drop_behavior();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_column(): Opt_columnContext {
		let localctx: Opt_columnContext = new Opt_columnContext(this, this._ctx, this.state);
		this.enterRule(localctx, 724, PostgreSQLParser.RULE_opt_column);
		try {
			this.state = 6368;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 308, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 6366;
				this.match(PostgreSQLParser.COLUMN);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_set_data(): Opt_set_dataContext {
		let localctx: Opt_set_dataContext = new Opt_set_dataContext(this, this._ctx, this.state);
		this.enterRule(localctx, 726, PostgreSQLParser.RULE_opt_set_data);
		try {
			this.state = 6373;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 324:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 6370;
				this.match(PostgreSQLParser.SET);
				this.state = 6371;
				this.match(PostgreSQLParser.DATA_P);
				}
				break;
			case 351:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alterobjectdependsstmt(): AlterobjectdependsstmtContext {
		let localctx: AlterobjectdependsstmtContext = new AlterobjectdependsstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 728, PostgreSQLParser.RULE_alterobjectdependsstmt);
		try {
			this.state = 6432;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 310, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 6375;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6376;
				this.match(PostgreSQLParser.FUNCTION);
				this.state = 6377;
				this.function_with_argtypes();
				this.state = 6378;
				this.opt_no();
				this.state = 6379;
				this.match(PostgreSQLParser.DEPENDS);
				this.state = 6380;
				this.match(PostgreSQLParser.ON);
				this.state = 6381;
				this.match(PostgreSQLParser.EXTENSION);
				this.state = 6382;
				this.name();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 6384;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6385;
				this.match(PostgreSQLParser.PROCEDURE);
				this.state = 6386;
				this.function_with_argtypes();
				this.state = 6387;
				this.opt_no();
				this.state = 6388;
				this.match(PostgreSQLParser.DEPENDS);
				this.state = 6389;
				this.match(PostgreSQLParser.ON);
				this.state = 6390;
				this.match(PostgreSQLParser.EXTENSION);
				this.state = 6391;
				this.name();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 6393;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6394;
				this.match(PostgreSQLParser.ROUTINE);
				this.state = 6395;
				this.function_with_argtypes();
				this.state = 6396;
				this.opt_no();
				this.state = 6397;
				this.match(PostgreSQLParser.DEPENDS);
				this.state = 6398;
				this.match(PostgreSQLParser.ON);
				this.state = 6399;
				this.match(PostgreSQLParser.EXTENSION);
				this.state = 6400;
				this.name();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 6402;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6403;
				this.match(PostgreSQLParser.TRIGGER);
				this.state = 6404;
				this.name();
				this.state = 6405;
				this.match(PostgreSQLParser.ON);
				this.state = 6406;
				this.qualified_name();
				this.state = 6407;
				this.opt_no();
				this.state = 6408;
				this.match(PostgreSQLParser.DEPENDS);
				this.state = 6409;
				this.match(PostgreSQLParser.ON);
				this.state = 6410;
				this.match(PostgreSQLParser.EXTENSION);
				this.state = 6411;
				this.name();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 6413;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6414;
				this.match(PostgreSQLParser.MATERIALIZED);
				this.state = 6415;
				this.match(PostgreSQLParser.VIEW);
				this.state = 6416;
				this.qualified_name();
				this.state = 6417;
				this.opt_no();
				this.state = 6418;
				this.match(PostgreSQLParser.DEPENDS);
				this.state = 6419;
				this.match(PostgreSQLParser.ON);
				this.state = 6420;
				this.match(PostgreSQLParser.EXTENSION);
				this.state = 6421;
				this.name();
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 6423;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6424;
				this.match(PostgreSQLParser.INDEX);
				this.state = 6425;
				this.qualified_name();
				this.state = 6426;
				this.opt_no();
				this.state = 6427;
				this.match(PostgreSQLParser.DEPENDS);
				this.state = 6428;
				this.match(PostgreSQLParser.ON);
				this.state = 6429;
				this.match(PostgreSQLParser.EXTENSION);
				this.state = 6430;
				this.name();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_no(): Opt_noContext {
		let localctx: Opt_noContext = new Opt_noContext(this, this._ctx, this.state);
		this.enterRule(localctx, 730, PostgreSQLParser.RULE_opt_no);
		try {
			this.state = 6436;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 260:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 6434;
				this.match(PostgreSQLParser.NO);
				}
				break;
			case 453:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alterobjectschemastmt(): AlterobjectschemastmtContext {
		let localctx: AlterobjectschemastmtContext = new AlterobjectschemastmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 732, PostgreSQLParser.RULE_alterobjectschemastmt);
		try {
			this.state = 6655;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 312, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 6438;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6439;
				this.match(PostgreSQLParser.AGGREGATE);
				this.state = 6440;
				this.aggregate_with_argtypes();
				this.state = 6441;
				this.match(PostgreSQLParser.SET);
				this.state = 6442;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 6443;
				this.name();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 6445;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6446;
				this.match(PostgreSQLParser.COLLATION);
				this.state = 6447;
				this.any_name();
				this.state = 6448;
				this.match(PostgreSQLParser.SET);
				this.state = 6449;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 6450;
				this.name();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 6452;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6453;
				this.match(PostgreSQLParser.CONVERSION_P);
				this.state = 6454;
				this.any_name();
				this.state = 6455;
				this.match(PostgreSQLParser.SET);
				this.state = 6456;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 6457;
				this.name();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 6459;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6460;
				this.match(PostgreSQLParser.DOMAIN_P);
				this.state = 6461;
				this.any_name();
				this.state = 6462;
				this.match(PostgreSQLParser.SET);
				this.state = 6463;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 6464;
				this.name();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 6466;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6467;
				this.match(PostgreSQLParser.EXTENSION);
				this.state = 6468;
				this.name();
				this.state = 6469;
				this.match(PostgreSQLParser.SET);
				this.state = 6470;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 6471;
				this.name();
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 6473;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6474;
				this.match(PostgreSQLParser.FUNCTION);
				this.state = 6475;
				this.function_with_argtypes();
				this.state = 6476;
				this.match(PostgreSQLParser.SET);
				this.state = 6477;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 6478;
				this.name();
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 6480;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6481;
				this.match(PostgreSQLParser.OPERATOR);
				this.state = 6482;
				this.operator_with_argtypes();
				this.state = 6483;
				this.match(PostgreSQLParser.SET);
				this.state = 6484;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 6485;
				this.name();
				}
				break;
			case 8:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 6487;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6488;
				this.match(PostgreSQLParser.OPERATOR);
				this.state = 6489;
				this.match(PostgreSQLParser.CLASS);
				this.state = 6490;
				this.any_name();
				this.state = 6491;
				this.match(PostgreSQLParser.USING);
				this.state = 6492;
				this.name();
				this.state = 6493;
				this.match(PostgreSQLParser.SET);
				this.state = 6494;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 6495;
				this.name();
				}
				break;
			case 9:
				this.enterOuterAlt(localctx, 9);
				{
				this.state = 6497;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6498;
				this.match(PostgreSQLParser.OPERATOR);
				this.state = 6499;
				this.match(PostgreSQLParser.FAMILY);
				this.state = 6500;
				this.any_name();
				this.state = 6501;
				this.match(PostgreSQLParser.USING);
				this.state = 6502;
				this.name();
				this.state = 6503;
				this.match(PostgreSQLParser.SET);
				this.state = 6504;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 6505;
				this.name();
				}
				break;
			case 10:
				this.enterOuterAlt(localctx, 10);
				{
				this.state = 6507;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6508;
				this.match(PostgreSQLParser.PROCEDURE);
				this.state = 6509;
				this.function_with_argtypes();
				this.state = 6510;
				this.match(PostgreSQLParser.SET);
				this.state = 6511;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 6512;
				this.name();
				}
				break;
			case 11:
				this.enterOuterAlt(localctx, 11);
				{
				this.state = 6514;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6515;
				this.match(PostgreSQLParser.ROUTINE);
				this.state = 6516;
				this.function_with_argtypes();
				this.state = 6517;
				this.match(PostgreSQLParser.SET);
				this.state = 6518;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 6519;
				this.name();
				}
				break;
			case 12:
				this.enterOuterAlt(localctx, 12);
				{
				this.state = 6521;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6522;
				this.match(PostgreSQLParser.TABLE);
				this.state = 6523;
				this.relation_expr();
				this.state = 6524;
				this.match(PostgreSQLParser.SET);
				this.state = 6525;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 6526;
				this.name();
				}
				break;
			case 13:
				this.enterOuterAlt(localctx, 13);
				{
				this.state = 6528;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6529;
				this.match(PostgreSQLParser.TABLE);
				this.state = 6530;
				this.match(PostgreSQLParser.IF_P);
				this.state = 6531;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 6532;
				this.relation_expr();
				this.state = 6533;
				this.match(PostgreSQLParser.SET);
				this.state = 6534;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 6535;
				this.name();
				}
				break;
			case 14:
				this.enterOuterAlt(localctx, 14);
				{
				this.state = 6537;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6538;
				this.match(PostgreSQLParser.STATISTICS);
				this.state = 6539;
				this.any_name();
				this.state = 6540;
				this.match(PostgreSQLParser.SET);
				this.state = 6541;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 6542;
				this.name();
				}
				break;
			case 15:
				this.enterOuterAlt(localctx, 15);
				{
				this.state = 6544;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6545;
				this.match(PostgreSQLParser.TEXT_P);
				this.state = 6546;
				this.match(PostgreSQLParser.SEARCH);
				this.state = 6547;
				this.match(PostgreSQLParser.PARSER);
				this.state = 6548;
				this.any_name();
				this.state = 6549;
				this.match(PostgreSQLParser.SET);
				this.state = 6550;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 6551;
				this.name();
				}
				break;
			case 16:
				this.enterOuterAlt(localctx, 16);
				{
				this.state = 6553;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6554;
				this.match(PostgreSQLParser.TEXT_P);
				this.state = 6555;
				this.match(PostgreSQLParser.SEARCH);
				this.state = 6556;
				this.match(PostgreSQLParser.DICTIONARY);
				this.state = 6557;
				this.any_name();
				this.state = 6558;
				this.match(PostgreSQLParser.SET);
				this.state = 6559;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 6560;
				this.name();
				}
				break;
			case 17:
				this.enterOuterAlt(localctx, 17);
				{
				this.state = 6562;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6563;
				this.match(PostgreSQLParser.TEXT_P);
				this.state = 6564;
				this.match(PostgreSQLParser.SEARCH);
				this.state = 6565;
				this.match(PostgreSQLParser.TEMPLATE);
				this.state = 6566;
				this.any_name();
				this.state = 6567;
				this.match(PostgreSQLParser.SET);
				this.state = 6568;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 6569;
				this.name();
				}
				break;
			case 18:
				this.enterOuterAlt(localctx, 18);
				{
				this.state = 6571;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6572;
				this.match(PostgreSQLParser.TEXT_P);
				this.state = 6573;
				this.match(PostgreSQLParser.SEARCH);
				this.state = 6574;
				this.match(PostgreSQLParser.CONFIGURATION);
				this.state = 6575;
				this.any_name();
				this.state = 6576;
				this.match(PostgreSQLParser.SET);
				this.state = 6577;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 6578;
				this.name();
				}
				break;
			case 19:
				this.enterOuterAlt(localctx, 19);
				{
				this.state = 6580;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6581;
				this.match(PostgreSQLParser.SEQUENCE);
				this.state = 6582;
				this.qualified_name();
				this.state = 6583;
				this.match(PostgreSQLParser.SET);
				this.state = 6584;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 6585;
				this.name();
				}
				break;
			case 20:
				this.enterOuterAlt(localctx, 20);
				{
				this.state = 6587;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6588;
				this.match(PostgreSQLParser.SEQUENCE);
				this.state = 6589;
				this.match(PostgreSQLParser.IF_P);
				this.state = 6590;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 6591;
				this.qualified_name();
				this.state = 6592;
				this.match(PostgreSQLParser.SET);
				this.state = 6593;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 6594;
				this.name();
				}
				break;
			case 21:
				this.enterOuterAlt(localctx, 21);
				{
				this.state = 6596;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6597;
				this.match(PostgreSQLParser.VIEW);
				this.state = 6598;
				this.qualified_name();
				this.state = 6599;
				this.match(PostgreSQLParser.SET);
				this.state = 6600;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 6601;
				this.name();
				}
				break;
			case 22:
				this.enterOuterAlt(localctx, 22);
				{
				this.state = 6603;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6604;
				this.match(PostgreSQLParser.VIEW);
				this.state = 6605;
				this.match(PostgreSQLParser.IF_P);
				this.state = 6606;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 6607;
				this.qualified_name();
				this.state = 6608;
				this.match(PostgreSQLParser.SET);
				this.state = 6609;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 6610;
				this.name();
				}
				break;
			case 23:
				this.enterOuterAlt(localctx, 23);
				{
				this.state = 6612;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6613;
				this.match(PostgreSQLParser.MATERIALIZED);
				this.state = 6614;
				this.match(PostgreSQLParser.VIEW);
				this.state = 6615;
				this.qualified_name();
				this.state = 6616;
				this.match(PostgreSQLParser.SET);
				this.state = 6617;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 6618;
				this.name();
				}
				break;
			case 24:
				this.enterOuterAlt(localctx, 24);
				{
				this.state = 6620;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6621;
				this.match(PostgreSQLParser.MATERIALIZED);
				this.state = 6622;
				this.match(PostgreSQLParser.VIEW);
				this.state = 6623;
				this.match(PostgreSQLParser.IF_P);
				this.state = 6624;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 6625;
				this.qualified_name();
				this.state = 6626;
				this.match(PostgreSQLParser.SET);
				this.state = 6627;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 6628;
				this.name();
				}
				break;
			case 25:
				this.enterOuterAlt(localctx, 25);
				{
				this.state = 6630;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6631;
				this.match(PostgreSQLParser.FOREIGN);
				this.state = 6632;
				this.match(PostgreSQLParser.TABLE);
				this.state = 6633;
				this.relation_expr();
				this.state = 6634;
				this.match(PostgreSQLParser.SET);
				this.state = 6635;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 6636;
				this.name();
				}
				break;
			case 26:
				this.enterOuterAlt(localctx, 26);
				{
				this.state = 6638;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6639;
				this.match(PostgreSQLParser.FOREIGN);
				this.state = 6640;
				this.match(PostgreSQLParser.TABLE);
				this.state = 6641;
				this.match(PostgreSQLParser.IF_P);
				this.state = 6642;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 6643;
				this.relation_expr();
				this.state = 6644;
				this.match(PostgreSQLParser.SET);
				this.state = 6645;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 6646;
				this.name();
				}
				break;
			case 27:
				this.enterOuterAlt(localctx, 27);
				{
				this.state = 6648;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6649;
				this.match(PostgreSQLParser.TYPE_P);
				this.state = 6650;
				this.any_name();
				this.state = 6651;
				this.match(PostgreSQLParser.SET);
				this.state = 6652;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 6653;
				this.name();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alteroperatorstmt(): AlteroperatorstmtContext {
		let localctx: AlteroperatorstmtContext = new AlteroperatorstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 734, PostgreSQLParser.RULE_alteroperatorstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 6657;
			this.match(PostgreSQLParser.ALTER);
			this.state = 6658;
			this.match(PostgreSQLParser.OPERATOR);
			this.state = 6659;
			this.operator_with_argtypes();
			this.state = 6660;
			this.match(PostgreSQLParser.SET);
			this.state = 6661;
			this.match(PostgreSQLParser.OPEN_PAREN);
			this.state = 6662;
			this.operator_def_list();
			this.state = 6663;
			this.match(PostgreSQLParser.CLOSE_PAREN);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public operator_def_list(): Operator_def_listContext {
		let localctx: Operator_def_listContext = new Operator_def_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 736, PostgreSQLParser.RULE_operator_def_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 6665;
			this.operator_def_elem();
			this.state = 6670;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 6666;
				this.match(PostgreSQLParser.COMMA);
				this.state = 6667;
				this.operator_def_elem();
				}
				}
				this.state = 6672;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public operator_def_elem(): Operator_def_elemContext {
		let localctx: Operator_def_elemContext = new Operator_def_elemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 738, PostgreSQLParser.RULE_operator_def_elem);
		try {
			this.state = 6681;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 314, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 6673;
				this.collabel();
				this.state = 6674;
				this.match(PostgreSQLParser.EQUAL);
				this.state = 6675;
				this.match(PostgreSQLParser.NONE);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 6677;
				this.collabel();
				this.state = 6678;
				this.match(PostgreSQLParser.EQUAL);
				this.state = 6679;
				this.operator_def_arg();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public operator_def_arg(): Operator_def_argContext {
		let localctx: Operator_def_argContext = new Operator_def_argContext(this, this._ctx, this.state);
		this.enterRule(localctx, 740, PostgreSQLParser.RULE_operator_def_arg);
		try {
			this.state = 6688;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 315, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 6683;
				this.func_type();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 6684;
				this.reserved_keyword();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 6685;
				this.qual_all_op();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 6686;
				this.numericonly();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 6687;
				this.sconst();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public altertypestmt(): AltertypestmtContext {
		let localctx: AltertypestmtContext = new AltertypestmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 742, PostgreSQLParser.RULE_altertypestmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 6690;
			this.match(PostgreSQLParser.ALTER);
			this.state = 6691;
			this.match(PostgreSQLParser.TYPE_P);
			this.state = 6692;
			this.any_name();
			this.state = 6693;
			this.match(PostgreSQLParser.SET);
			this.state = 6694;
			this.match(PostgreSQLParser.OPEN_PAREN);
			this.state = 6695;
			this.operator_def_list();
			this.state = 6696;
			this.match(PostgreSQLParser.CLOSE_PAREN);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alterownerstmt(): AlterownerstmtContext {
		let localctx: AlterownerstmtContext = new AlterownerstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 744, PostgreSQLParser.RULE_alterownerstmt);
		try {
			this.state = 6881;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 316, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 6698;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6699;
				this.match(PostgreSQLParser.AGGREGATE);
				this.state = 6700;
				this.aggregate_with_argtypes();
				this.state = 6701;
				this.match(PostgreSQLParser.OWNER);
				this.state = 6702;
				this.match(PostgreSQLParser.TO);
				this.state = 6703;
				this.rolespec();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 6705;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6706;
				this.match(PostgreSQLParser.COLLATION);
				this.state = 6707;
				this.any_name();
				this.state = 6708;
				this.match(PostgreSQLParser.OWNER);
				this.state = 6709;
				this.match(PostgreSQLParser.TO);
				this.state = 6710;
				this.rolespec();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 6712;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6713;
				this.match(PostgreSQLParser.CONVERSION_P);
				this.state = 6714;
				this.any_name();
				this.state = 6715;
				this.match(PostgreSQLParser.OWNER);
				this.state = 6716;
				this.match(PostgreSQLParser.TO);
				this.state = 6717;
				this.rolespec();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 6719;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6720;
				this.match(PostgreSQLParser.DATABASE);
				this.state = 6721;
				this.name();
				this.state = 6722;
				this.match(PostgreSQLParser.OWNER);
				this.state = 6723;
				this.match(PostgreSQLParser.TO);
				this.state = 6724;
				this.rolespec();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 6726;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6727;
				this.match(PostgreSQLParser.DOMAIN_P);
				this.state = 6728;
				this.any_name();
				this.state = 6729;
				this.match(PostgreSQLParser.OWNER);
				this.state = 6730;
				this.match(PostgreSQLParser.TO);
				this.state = 6731;
				this.rolespec();
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 6733;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6734;
				this.match(PostgreSQLParser.FUNCTION);
				this.state = 6735;
				this.function_with_argtypes();
				this.state = 6736;
				this.match(PostgreSQLParser.OWNER);
				this.state = 6737;
				this.match(PostgreSQLParser.TO);
				this.state = 6738;
				this.rolespec();
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 6740;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6741;
				this.opt_procedural();
				this.state = 6742;
				this.match(PostgreSQLParser.LANGUAGE);
				this.state = 6743;
				this.name();
				this.state = 6744;
				this.match(PostgreSQLParser.OWNER);
				this.state = 6745;
				this.match(PostgreSQLParser.TO);
				this.state = 6746;
				this.rolespec();
				}
				break;
			case 8:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 6748;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6749;
				this.match(PostgreSQLParser.LARGE_P);
				this.state = 6750;
				this.match(PostgreSQLParser.OBJECT_P);
				this.state = 6751;
				this.numericonly();
				this.state = 6752;
				this.match(PostgreSQLParser.OWNER);
				this.state = 6753;
				this.match(PostgreSQLParser.TO);
				this.state = 6754;
				this.rolespec();
				}
				break;
			case 9:
				this.enterOuterAlt(localctx, 9);
				{
				this.state = 6756;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6757;
				this.match(PostgreSQLParser.OPERATOR);
				this.state = 6758;
				this.operator_with_argtypes();
				this.state = 6759;
				this.match(PostgreSQLParser.OWNER);
				this.state = 6760;
				this.match(PostgreSQLParser.TO);
				this.state = 6761;
				this.rolespec();
				}
				break;
			case 10:
				this.enterOuterAlt(localctx, 10);
				{
				this.state = 6763;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6764;
				this.match(PostgreSQLParser.OPERATOR);
				this.state = 6765;
				this.match(PostgreSQLParser.CLASS);
				this.state = 6766;
				this.any_name();
				this.state = 6767;
				this.match(PostgreSQLParser.USING);
				this.state = 6768;
				this.name();
				this.state = 6769;
				this.match(PostgreSQLParser.OWNER);
				this.state = 6770;
				this.match(PostgreSQLParser.TO);
				this.state = 6771;
				this.rolespec();
				}
				break;
			case 11:
				this.enterOuterAlt(localctx, 11);
				{
				this.state = 6773;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6774;
				this.match(PostgreSQLParser.OPERATOR);
				this.state = 6775;
				this.match(PostgreSQLParser.FAMILY);
				this.state = 6776;
				this.any_name();
				this.state = 6777;
				this.match(PostgreSQLParser.USING);
				this.state = 6778;
				this.name();
				this.state = 6779;
				this.match(PostgreSQLParser.OWNER);
				this.state = 6780;
				this.match(PostgreSQLParser.TO);
				this.state = 6781;
				this.rolespec();
				}
				break;
			case 12:
				this.enterOuterAlt(localctx, 12);
				{
				this.state = 6783;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6784;
				this.match(PostgreSQLParser.PROCEDURE);
				this.state = 6785;
				this.function_with_argtypes();
				this.state = 6786;
				this.match(PostgreSQLParser.OWNER);
				this.state = 6787;
				this.match(PostgreSQLParser.TO);
				this.state = 6788;
				this.rolespec();
				}
				break;
			case 13:
				this.enterOuterAlt(localctx, 13);
				{
				this.state = 6790;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6791;
				this.match(PostgreSQLParser.ROUTINE);
				this.state = 6792;
				this.function_with_argtypes();
				this.state = 6793;
				this.match(PostgreSQLParser.OWNER);
				this.state = 6794;
				this.match(PostgreSQLParser.TO);
				this.state = 6795;
				this.rolespec();
				}
				break;
			case 14:
				this.enterOuterAlt(localctx, 14);
				{
				this.state = 6797;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6798;
				this.match(PostgreSQLParser.SCHEMA);
				this.state = 6799;
				this.name();
				this.state = 6800;
				this.match(PostgreSQLParser.OWNER);
				this.state = 6801;
				this.match(PostgreSQLParser.TO);
				this.state = 6802;
				this.rolespec();
				}
				break;
			case 15:
				this.enterOuterAlt(localctx, 15);
				{
				this.state = 6804;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6805;
				this.match(PostgreSQLParser.TYPE_P);
				this.state = 6806;
				this.any_name();
				this.state = 6807;
				this.match(PostgreSQLParser.OWNER);
				this.state = 6808;
				this.match(PostgreSQLParser.TO);
				this.state = 6809;
				this.rolespec();
				}
				break;
			case 16:
				this.enterOuterAlt(localctx, 16);
				{
				this.state = 6811;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6812;
				this.match(PostgreSQLParser.TABLESPACE);
				this.state = 6813;
				this.name();
				this.state = 6814;
				this.match(PostgreSQLParser.OWNER);
				this.state = 6815;
				this.match(PostgreSQLParser.TO);
				this.state = 6816;
				this.rolespec();
				}
				break;
			case 17:
				this.enterOuterAlt(localctx, 17);
				{
				this.state = 6818;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6819;
				this.match(PostgreSQLParser.STATISTICS);
				this.state = 6820;
				this.any_name();
				this.state = 6821;
				this.match(PostgreSQLParser.OWNER);
				this.state = 6822;
				this.match(PostgreSQLParser.TO);
				this.state = 6823;
				this.rolespec();
				}
				break;
			case 18:
				this.enterOuterAlt(localctx, 18);
				{
				this.state = 6825;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6826;
				this.match(PostgreSQLParser.TEXT_P);
				this.state = 6827;
				this.match(PostgreSQLParser.SEARCH);
				this.state = 6828;
				this.match(PostgreSQLParser.DICTIONARY);
				this.state = 6829;
				this.any_name();
				this.state = 6830;
				this.match(PostgreSQLParser.OWNER);
				this.state = 6831;
				this.match(PostgreSQLParser.TO);
				this.state = 6832;
				this.rolespec();
				}
				break;
			case 19:
				this.enterOuterAlt(localctx, 19);
				{
				this.state = 6834;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6835;
				this.match(PostgreSQLParser.TEXT_P);
				this.state = 6836;
				this.match(PostgreSQLParser.SEARCH);
				this.state = 6837;
				this.match(PostgreSQLParser.CONFIGURATION);
				this.state = 6838;
				this.any_name();
				this.state = 6839;
				this.match(PostgreSQLParser.OWNER);
				this.state = 6840;
				this.match(PostgreSQLParser.TO);
				this.state = 6841;
				this.rolespec();
				}
				break;
			case 20:
				this.enterOuterAlt(localctx, 20);
				{
				this.state = 6843;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6844;
				this.match(PostgreSQLParser.FOREIGN);
				this.state = 6845;
				this.match(PostgreSQLParser.DATA_P);
				this.state = 6846;
				this.match(PostgreSQLParser.WRAPPER);
				this.state = 6847;
				this.name();
				this.state = 6848;
				this.match(PostgreSQLParser.OWNER);
				this.state = 6849;
				this.match(PostgreSQLParser.TO);
				this.state = 6850;
				this.rolespec();
				}
				break;
			case 21:
				this.enterOuterAlt(localctx, 21);
				{
				this.state = 6852;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6853;
				this.match(PostgreSQLParser.SERVER);
				this.state = 6854;
				this.name();
				this.state = 6855;
				this.match(PostgreSQLParser.OWNER);
				this.state = 6856;
				this.match(PostgreSQLParser.TO);
				this.state = 6857;
				this.rolespec();
				}
				break;
			case 22:
				this.enterOuterAlt(localctx, 22);
				{
				this.state = 6859;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6860;
				this.match(PostgreSQLParser.EVENT);
				this.state = 6861;
				this.match(PostgreSQLParser.TRIGGER);
				this.state = 6862;
				this.name();
				this.state = 6863;
				this.match(PostgreSQLParser.OWNER);
				this.state = 6864;
				this.match(PostgreSQLParser.TO);
				this.state = 6865;
				this.rolespec();
				}
				break;
			case 23:
				this.enterOuterAlt(localctx, 23);
				{
				this.state = 6867;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6868;
				this.match(PostgreSQLParser.PUBLICATION);
				this.state = 6869;
				this.name();
				this.state = 6870;
				this.match(PostgreSQLParser.OWNER);
				this.state = 6871;
				this.match(PostgreSQLParser.TO);
				this.state = 6872;
				this.rolespec();
				}
				break;
			case 24:
				this.enterOuterAlt(localctx, 24);
				{
				this.state = 6874;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6875;
				this.match(PostgreSQLParser.SUBSCRIPTION);
				this.state = 6876;
				this.name();
				this.state = 6877;
				this.match(PostgreSQLParser.OWNER);
				this.state = 6878;
				this.match(PostgreSQLParser.TO);
				this.state = 6879;
				this.rolespec();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createpublicationstmt(): CreatepublicationstmtContext {
		let localctx: CreatepublicationstmtContext = new CreatepublicationstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 746, PostgreSQLParser.RULE_createpublicationstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 6883;
			this.match(PostgreSQLParser.CREATE);
			this.state = 6884;
			this.match(PostgreSQLParser.PUBLICATION);
			this.state = 6885;
			this.name();
			this.state = 6886;
			this.opt_publication_for_tables();
			this.state = 6887;
			this.opt_definition();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_publication_for_tables(): Opt_publication_for_tablesContext {
		let localctx: Opt_publication_for_tablesContext = new Opt_publication_for_tablesContext(this, this._ctx, this.state);
		this.enterRule(localctx, 748, PostgreSQLParser.RULE_opt_publication_for_tables);
		try {
			this.state = 6891;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 62:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 6889;
				this.publication_for_tables();
				}
				break;
			case -1:
			case 2:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 88:
			case 92:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public publication_for_tables(): Publication_for_tablesContext {
		let localctx: Publication_for_tablesContext = new Publication_for_tablesContext(this, this._ctx, this.state);
		this.enterRule(localctx, 750, PostgreSQLParser.RULE_publication_for_tables);
		try {
			this.state = 6899;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 318, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 6893;
				this.match(PostgreSQLParser.FOR);
				this.state = 6894;
				this.match(PostgreSQLParser.TABLE);
				this.state = 6895;
				this.relation_expr_list();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 6896;
				this.match(PostgreSQLParser.FOR);
				this.state = 6897;
				this.match(PostgreSQLParser.ALL);
				this.state = 6898;
				this.match(PostgreSQLParser.TABLES);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alterpublicationstmt(): AlterpublicationstmtContext {
		let localctx: AlterpublicationstmtContext = new AlterpublicationstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 752, PostgreSQLParser.RULE_alterpublicationstmt);
		try {
			this.state = 6928;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 319, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 6901;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6902;
				this.match(PostgreSQLParser.PUBLICATION);
				this.state = 6903;
				this.name();
				this.state = 6904;
				this.match(PostgreSQLParser.SET);
				this.state = 6905;
				this.definition();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 6907;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6908;
				this.match(PostgreSQLParser.PUBLICATION);
				this.state = 6909;
				this.name();
				this.state = 6910;
				this.match(PostgreSQLParser.ADD_P);
				this.state = 6911;
				this.match(PostgreSQLParser.TABLE);
				this.state = 6912;
				this.relation_expr_list();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 6914;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6915;
				this.match(PostgreSQLParser.PUBLICATION);
				this.state = 6916;
				this.name();
				this.state = 6917;
				this.match(PostgreSQLParser.SET);
				this.state = 6918;
				this.match(PostgreSQLParser.TABLE);
				this.state = 6919;
				this.relation_expr_list();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 6921;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6922;
				this.match(PostgreSQLParser.PUBLICATION);
				this.state = 6923;
				this.name();
				this.state = 6924;
				this.match(PostgreSQLParser.DROP);
				this.state = 6925;
				this.match(PostgreSQLParser.TABLE);
				this.state = 6926;
				this.relation_expr_list();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createsubscriptionstmt(): CreatesubscriptionstmtContext {
		let localctx: CreatesubscriptionstmtContext = new CreatesubscriptionstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 754, PostgreSQLParser.RULE_createsubscriptionstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 6930;
			this.match(PostgreSQLParser.CREATE);
			this.state = 6931;
			this.match(PostgreSQLParser.SUBSCRIPTION);
			this.state = 6932;
			this.name();
			this.state = 6933;
			this.match(PostgreSQLParser.CONNECTION);
			this.state = 6934;
			this.sconst();
			this.state = 6935;
			this.match(PostgreSQLParser.PUBLICATION);
			this.state = 6936;
			this.publication_name_list();
			this.state = 6937;
			this.opt_definition();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public publication_name_list(): Publication_name_listContext {
		let localctx: Publication_name_listContext = new Publication_name_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 756, PostgreSQLParser.RULE_publication_name_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 6939;
			this.publication_name_item();
			this.state = 6944;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 6940;
				this.match(PostgreSQLParser.COMMA);
				this.state = 6941;
				this.publication_name_item();
				}
				}
				this.state = 6946;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public publication_name_item(): Publication_name_itemContext {
		let localctx: Publication_name_itemContext = new Publication_name_itemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 758, PostgreSQLParser.RULE_publication_name_item);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 6947;
			this.collabel();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public altersubscriptionstmt(): AltersubscriptionstmtContext {
		let localctx: AltersubscriptionstmtContext = new AltersubscriptionstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 760, PostgreSQLParser.RULE_altersubscriptionstmt);
		try {
			this.state = 6986;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 321, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 6949;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6950;
				this.match(PostgreSQLParser.SUBSCRIPTION);
				this.state = 6951;
				this.name();
				this.state = 6952;
				this.match(PostgreSQLParser.SET);
				this.state = 6953;
				this.definition();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 6955;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6956;
				this.match(PostgreSQLParser.SUBSCRIPTION);
				this.state = 6957;
				this.name();
				this.state = 6958;
				this.match(PostgreSQLParser.CONNECTION);
				this.state = 6959;
				this.sconst();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 6961;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6962;
				this.match(PostgreSQLParser.SUBSCRIPTION);
				this.state = 6963;
				this.name();
				this.state = 6964;
				this.match(PostgreSQLParser.REFRESH);
				this.state = 6965;
				this.match(PostgreSQLParser.PUBLICATION);
				this.state = 6966;
				this.opt_definition();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 6968;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6969;
				this.match(PostgreSQLParser.SUBSCRIPTION);
				this.state = 6970;
				this.name();
				this.state = 6971;
				this.match(PostgreSQLParser.SET);
				this.state = 6972;
				this.match(PostgreSQLParser.PUBLICATION);
				this.state = 6973;
				this.publication_name_list();
				this.state = 6974;
				this.opt_definition();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 6976;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6977;
				this.match(PostgreSQLParser.SUBSCRIPTION);
				this.state = 6978;
				this.name();
				this.state = 6979;
				this.match(PostgreSQLParser.ENABLE_P);
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 6981;
				this.match(PostgreSQLParser.ALTER);
				this.state = 6982;
				this.match(PostgreSQLParser.SUBSCRIPTION);
				this.state = 6983;
				this.name();
				this.state = 6984;
				this.match(PostgreSQLParser.DISABLE_P);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public dropsubscriptionstmt(): DropsubscriptionstmtContext {
		let localctx: DropsubscriptionstmtContext = new DropsubscriptionstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 762, PostgreSQLParser.RULE_dropsubscriptionstmt);
		try {
			this.state = 7000;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 322, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 6988;
				this.match(PostgreSQLParser.DROP);
				this.state = 6989;
				this.match(PostgreSQLParser.SUBSCRIPTION);
				this.state = 6990;
				this.name();
				this.state = 6991;
				this.opt_drop_behavior();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 6993;
				this.match(PostgreSQLParser.DROP);
				this.state = 6994;
				this.match(PostgreSQLParser.SUBSCRIPTION);
				this.state = 6995;
				this.match(PostgreSQLParser.IF_P);
				this.state = 6996;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 6997;
				this.name();
				this.state = 6998;
				this.opt_drop_behavior();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public rulestmt(): RulestmtContext {
		let localctx: RulestmtContext = new RulestmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 764, PostgreSQLParser.RULE_rulestmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7002;
			this.match(PostgreSQLParser.CREATE);
			this.state = 7003;
			this.opt_or_replace();
			this.state = 7004;
			this.match(PostgreSQLParser.RULE);
			this.state = 7005;
			this.name();
			this.state = 7006;
			this.match(PostgreSQLParser.AS);
			this.state = 7007;
			this.match(PostgreSQLParser.ON);
			this.state = 7008;
			this.event();
			this.state = 7009;
			this.match(PostgreSQLParser.TO);
			this.state = 7010;
			this.qualified_name();
			this.state = 7011;
			this.where_clause();
			this.state = 7012;
			this.match(PostgreSQLParser.DO);
			this.state = 7013;
			this.opt_instead();
			this.state = 7014;
			this.ruleactionlist();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public ruleactionlist(): RuleactionlistContext {
		let localctx: RuleactionlistContext = new RuleactionlistContext(this, this._ctx, this.state);
		this.enterRule(localctx, 766, PostgreSQLParser.RULE_ruleactionlist);
		try {
			this.state = 7022;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 323, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7016;
				this.match(PostgreSQLParser.NOTHING);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7017;
				this.ruleactionstmt();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 7018;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 7019;
				this.ruleactionmulti();
				this.state = 7020;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public ruleactionmulti(): RuleactionmultiContext {
		let localctx: RuleactionmultiContext = new RuleactionmultiContext(this, this._ctx, this.state);
		this.enterRule(localctx, 768, PostgreSQLParser.RULE_ruleactionmulti);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7024;
			this.ruleactionstmtOrEmpty();
			this.state = 7029;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===7) {
				{
				{
				this.state = 7025;
				this.match(PostgreSQLParser.SEMI);
				this.state = 7026;
				this.ruleactionstmtOrEmpty();
				}
				}
				this.state = 7031;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public ruleactionstmt(): RuleactionstmtContext {
		let localctx: RuleactionstmtContext = new RuleactionstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 770, PostgreSQLParser.RULE_ruleactionstmt);
		try {
			this.state = 7037;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 325, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7032;
				this.selectstmt();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7033;
				this.insertstmt();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 7034;
				this.updatestmt();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 7035;
				this.deletestmt();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 7036;
				this.notifystmt();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public ruleactionstmtOrEmpty(): RuleactionstmtOrEmptyContext {
		let localctx: RuleactionstmtOrEmptyContext = new RuleactionstmtOrEmptyContext(this, this._ctx, this.state);
		this.enterRule(localctx, 772, PostgreSQLParser.RULE_ruleactionstmtOrEmpty);
		try {
			this.state = 7041;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 2:
			case 88:
			case 92:
			case 105:
			case 182:
			case 232:
			case 262:
			case 360:
			case 413:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7039;
				this.ruleactionstmt();
				}
				break;
			case 3:
			case 7:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public event(): EventContext {
		let localctx: EventContext = new EventContext(this, this._ctx, this.state);
		this.enterRule(localctx, 774, PostgreSQLParser.RULE_event);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7043;
			_la = this._input.LA(1);
			if(!(_la===88 || _la===182 || _la===232 || _la===360)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_instead(): Opt_insteadContext {
		let localctx: Opt_insteadContext = new Opt_insteadContext(this, this._ctx, this.state);
		this.enterRule(localctx, 776, PostgreSQLParser.RULE_opt_instead);
		try {
			this.state = 7048;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 233:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7045;
				this.match(PostgreSQLParser.INSTEAD);
				}
				break;
			case 137:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7046;
				this.match(PostgreSQLParser.ALSO);
				}
				break;
			case 2:
			case 88:
			case 92:
			case 105:
			case 182:
			case 232:
			case 261:
			case 262:
			case 360:
			case 413:
				this.enterOuterAlt(localctx, 3);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public notifystmt(): NotifystmtContext {
		let localctx: NotifystmtContext = new NotifystmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 778, PostgreSQLParser.RULE_notifystmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7050;
			this.match(PostgreSQLParser.NOTIFY);
			this.state = 7051;
			this.colid();
			this.state = 7052;
			this.notify_payload();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public notify_payload(): Notify_payloadContext {
		let localctx: Notify_payloadContext = new Notify_payloadContext(this, this._ctx, this.state);
		this.enterRule(localctx, 780, PostgreSQLParser.RULE_notify_payload);
		try {
			this.state = 7057;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 6:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7054;
				this.match(PostgreSQLParser.COMMA);
				this.state = 7055;
				this.sconst();
				}
				break;
			case -1:
			case 2:
			case 3:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 88:
			case 92:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public listenstmt(): ListenstmtContext {
		let localctx: ListenstmtContext = new ListenstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 782, PostgreSQLParser.RULE_listenstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7059;
			this.match(PostgreSQLParser.LISTEN);
			this.state = 7060;
			this.colid();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public unlistenstmt(): UnlistenstmtContext {
		let localctx: UnlistenstmtContext = new UnlistenstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 784, PostgreSQLParser.RULE_unlistenstmt);
		try {
			this.state = 7066;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 329, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7062;
				this.match(PostgreSQLParser.UNLISTEN);
				this.state = 7063;
				this.colid();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7064;
				this.match(PostgreSQLParser.UNLISTEN);
				this.state = 7065;
				this.match(PostgreSQLParser.STAR);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public transactionstmt(): TransactionstmtContext {
		let localctx: TransactionstmtContext = new TransactionstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 786, PostgreSQLParser.RULE_transactionstmt);
		try {
			this.state = 7118;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 330, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7068;
				this.match(PostgreSQLParser.ABORT_P);
				this.state = 7069;
				this.opt_transaction();
				this.state = 7070;
				this.opt_transaction_chain();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7072;
				this.match(PostgreSQLParser.BEGIN_P);
				this.state = 7073;
				this.opt_transaction();
				this.state = 7074;
				this.transaction_mode_list_or_empty();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 7076;
				this.match(PostgreSQLParser.START);
				this.state = 7077;
				this.match(PostgreSQLParser.TRANSACTION);
				this.state = 7078;
				this.transaction_mode_list_or_empty();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 7079;
				this.match(PostgreSQLParser.COMMIT);
				this.state = 7080;
				this.opt_transaction();
				this.state = 7081;
				this.opt_transaction_chain();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 7083;
				this.match(PostgreSQLParser.END_P);
				this.state = 7084;
				this.opt_transaction();
				this.state = 7085;
				this.opt_transaction_chain();
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 7087;
				this.match(PostgreSQLParser.ROLLBACK);
				this.state = 7088;
				this.opt_transaction();
				this.state = 7089;
				this.opt_transaction_chain();
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 7091;
				this.match(PostgreSQLParser.SAVEPOINT);
				this.state = 7092;
				this.colid();
				}
				break;
			case 8:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 7093;
				this.match(PostgreSQLParser.RELEASE);
				this.state = 7094;
				this.match(PostgreSQLParser.SAVEPOINT);
				this.state = 7095;
				this.colid();
				}
				break;
			case 9:
				this.enterOuterAlt(localctx, 9);
				{
				this.state = 7096;
				this.match(PostgreSQLParser.RELEASE);
				this.state = 7097;
				this.colid();
				}
				break;
			case 10:
				this.enterOuterAlt(localctx, 10);
				{
				this.state = 7098;
				this.match(PostgreSQLParser.ROLLBACK);
				this.state = 7099;
				this.opt_transaction();
				this.state = 7100;
				this.match(PostgreSQLParser.TO);
				this.state = 7101;
				this.match(PostgreSQLParser.SAVEPOINT);
				this.state = 7102;
				this.colid();
				}
				break;
			case 11:
				this.enterOuterAlt(localctx, 11);
				{
				this.state = 7104;
				this.match(PostgreSQLParser.ROLLBACK);
				this.state = 7105;
				this.opt_transaction();
				this.state = 7106;
				this.match(PostgreSQLParser.TO);
				this.state = 7107;
				this.colid();
				}
				break;
			case 12:
				this.enterOuterAlt(localctx, 12);
				{
				this.state = 7109;
				this.match(PostgreSQLParser.PREPARE);
				this.state = 7110;
				this.match(PostgreSQLParser.TRANSACTION);
				this.state = 7111;
				this.sconst();
				}
				break;
			case 13:
				this.enterOuterAlt(localctx, 13);
				{
				this.state = 7112;
				this.match(PostgreSQLParser.COMMIT);
				this.state = 7113;
				this.match(PostgreSQLParser.PREPARED);
				this.state = 7114;
				this.sconst();
				}
				break;
			case 14:
				this.enterOuterAlt(localctx, 14);
				{
				this.state = 7115;
				this.match(PostgreSQLParser.ROLLBACK);
				this.state = 7116;
				this.match(PostgreSQLParser.PREPARED);
				this.state = 7117;
				this.sconst();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_transaction(): Opt_transactionContext {
		let localctx: Opt_transactionContext = new Opt_transactionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 788, PostgreSQLParser.RULE_opt_transaction);
		try {
			this.state = 7123;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 371:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7120;
				this.match(PostgreSQLParser.WORK);
				}
				break;
			case 347:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7121;
				this.match(PostgreSQLParser.TRANSACTION);
				}
				break;
			case -1:
			case 2:
			case 7:
			case 31:
			case 32:
			case 33:
			case 46:
			case 54:
			case 57:
			case 61:
			case 65:
			case 71:
			case 77:
			case 88:
			case 92:
			case 94:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 235:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 291:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 3);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public transaction_mode_item(): Transaction_mode_itemContext {
		let localctx: Transaction_mode_itemContext = new Transaction_mode_itemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 790, PostgreSQLParser.RULE_transaction_mode_item);
		try {
			this.state = 7135;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 332, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7125;
				this.match(PostgreSQLParser.ISOLATION);
				this.state = 7126;
				this.match(PostgreSQLParser.LEVEL);
				this.state = 7127;
				this.iso_level();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7128;
				this.match(PostgreSQLParser.READ);
				this.state = 7129;
				this.match(PostgreSQLParser.ONLY);
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 7130;
				this.match(PostgreSQLParser.READ);
				this.state = 7131;
				this.match(PostgreSQLParser.WRITE);
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 7132;
				this.match(PostgreSQLParser.DEFERRABLE);
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 7133;
				this.match(PostgreSQLParser.NOT);
				this.state = 7134;
				this.match(PostgreSQLParser.DEFERRABLE);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public transaction_mode_list(): Transaction_mode_listContext {
		let localctx: Transaction_mode_listContext = new Transaction_mode_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 792, PostgreSQLParser.RULE_transaction_mode_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7137;
			this.transaction_mode_item();
			this.state = 7144;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6 || _la===54 || _la===77 || _la===235 || _la===291) {
				{
				{
				this.state = 7139;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===6) {
					{
					this.state = 7138;
					this.match(PostgreSQLParser.COMMA);
					}
				}

				this.state = 7141;
				this.transaction_mode_item();
				}
				}
				this.state = 7146;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public transaction_mode_list_or_empty(): Transaction_mode_list_or_emptyContext {
		let localctx: Transaction_mode_list_or_emptyContext = new Transaction_mode_list_or_emptyContext(this, this._ctx, this.state);
		this.enterRule(localctx, 794, PostgreSQLParser.RULE_transaction_mode_list_or_empty);
		try {
			this.state = 7149;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 54:
			case 77:
			case 235:
			case 291:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7147;
				this.transaction_mode_list();
				}
				break;
			case -1:
			case 2:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 88:
			case 92:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_transaction_chain(): Opt_transaction_chainContext {
		let localctx: Opt_transaction_chainContext = new Opt_transaction_chainContext(this, this._ctx, this.state);
		this.enterRule(localctx, 796, PostgreSQLParser.RULE_opt_transaction_chain);
		let _la: number;
		try {
			this.state = 7157;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 33:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7151;
				this.match(PostgreSQLParser.AND);
				this.state = 7153;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===260) {
					{
					this.state = 7152;
					this.match(PostgreSQLParser.NO);
					}
				}

				this.state = 7155;
				this.match(PostgreSQLParser.CHAIN);
				}
				break;
			case -1:
			case 2:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 88:
			case 92:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public viewstmt(): ViewstmtContext {
		let localctx: ViewstmtContext = new ViewstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 798, PostgreSQLParser.RULE_viewstmt);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7159;
			this.match(PostgreSQLParser.CREATE);
			this.state = 7162;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			if (_la===82) {
				{
				this.state = 7160;
				this.match(PostgreSQLParser.OR);
				this.state = 7161;
				this.match(PostgreSQLParser.REPLACE);
				}
			}

			this.state = 7164;
			this.opttemp();
			this.state = 7178;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 367:
				{
				this.state = 7165;
				this.match(PostgreSQLParser.VIEW);
				this.state = 7166;
				this.qualified_name();
				this.state = 7167;
				this.opt_column_list();
				this.state = 7168;
				this.opt_reloptions();
				}
				break;
			case 294:
				{
				this.state = 7170;
				this.match(PostgreSQLParser.RECURSIVE);
				this.state = 7171;
				this.match(PostgreSQLParser.VIEW);
				this.state = 7172;
				this.qualified_name();
				this.state = 7173;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 7174;
				this.columnlist();
				this.state = 7175;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 7176;
				this.opt_reloptions();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
			this.state = 7180;
			this.match(PostgreSQLParser.AS);
			this.state = 7181;
			this.selectstmt();
			this.state = 7182;
			this.opt_check_option();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_check_option(): Opt_check_optionContext {
		let localctx: Opt_check_optionContext = new Opt_check_optionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 800, PostgreSQLParser.RULE_opt_check_option);
		let _la: number;
		try {
			this.state = 7191;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 341, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7184;
				this.match(PostgreSQLParser.WITH);
				this.state = 7186;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===151 || _la===245) {
					{
					this.state = 7185;
					_la = this._input.LA(1);
					if(!(_la===151 || _la===245)) {
					this._errHandler.recoverInline(this);
					}
					else {
						this._errHandler.reportMatch(this);
					    this.consume();
					}
					}
				}

				this.state = 7188;
				this.match(PostgreSQLParser.CHECK);
				this.state = 7189;
				this.match(PostgreSQLParser.OPTION);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public loadstmt(): LoadstmtContext {
		let localctx: LoadstmtContext = new LoadstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 802, PostgreSQLParser.RULE_loadstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7193;
			this.match(PostgreSQLParser.LOAD);
			this.state = 7194;
			this.file_name();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createdbstmt(): CreatedbstmtContext {
		let localctx: CreatedbstmtContext = new CreatedbstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 804, PostgreSQLParser.RULE_createdbstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7196;
			this.match(PostgreSQLParser.CREATE);
			this.state = 7197;
			this.match(PostgreSQLParser.DATABASE);
			this.state = 7198;
			this.name();
			this.state = 7199;
			this.opt_with();
			this.state = 7200;
			this.createdb_opt_list();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createdb_opt_list(): Createdb_opt_listContext {
		let localctx: Createdb_opt_listContext = new Createdb_opt_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 806, PostgreSQLParser.RULE_createdb_opt_list);
		try {
			this.state = 7204;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 342, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7202;
				this.createdb_opt_items();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createdb_opt_items(): Createdb_opt_itemsContext {
		let localctx: Createdb_opt_itemsContext = new Createdb_opt_itemsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 808, PostgreSQLParser.RULE_createdb_opt_items);
		try {
			let _alt: number;
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7207;
			this._errHandler.sync(this);
			_alt = 1;
			do {
				switch (_alt) {
				case 1:
					{
					{
					this.state = 7206;
					this.createdb_opt_item();
					}
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				this.state = 7209;
				this._errHandler.sync(this);
				_alt = this._interp.adaptivePredict(this._input, 343, this._ctx);
			} while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createdb_opt_item(): Createdb_opt_itemContext {
		let localctx: Createdb_opt_itemContext = new Createdb_opt_itemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 810, PostgreSQLParser.RULE_createdb_opt_item);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7211;
			this.createdb_opt_name();
			this.state = 7212;
			this.opt_equal();
			this.state = 7216;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 344, this._ctx) ) {
			case 1:
				{
				this.state = 7213;
				this.signediconst();
				}
				break;
			case 2:
				{
				this.state = 7214;
				this.opt_boolean_or_string();
				}
				break;
			case 3:
				{
				this.state = 7215;
				this.match(PostgreSQLParser.DEFAULT);
				}
				break;
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createdb_opt_name(): Createdb_opt_nameContext {
		let localctx: Createdb_opt_nameContext = new Createdb_opt_nameContext(this, this._ctx, this.state);
		this.enterRule(localctx, 812, PostgreSQLParser.RULE_createdb_opt_name);
		try {
			this.state = 7226;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 92:
			case 116:
			case 123:
			case 130:
			case 144:
			case 153:
			case 157:
			case 161:
			case 167:
			case 172:
			case 207:
			case 210:
			case 232:
			case 240:
			case 256:
			case 259:
			case 260:
			case 270:
			case 284:
			case 298:
			case 304:
			case 310:
			case 314:
			case 315:
			case 324:
			case 351:
			case 424:
			case 425:
			case 468:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7218;
				this.identifier();
				}
				break;
			case 164:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7219;
				this.match(PostgreSQLParser.CONNECTION);
				this.state = 7220;
				this.match(PostgreSQLParser.LIMIT);
				}
				break;
			case 194:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 7221;
				this.match(PostgreSQLParser.ENCODING);
				}
				break;
			case 246:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 7222;
				this.match(PostgreSQLParser.LOCATION);
				}
				break;
			case 273:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 7223;
				this.match(PostgreSQLParser.OWNER);
				}
				break;
			case 342:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 7224;
				this.match(PostgreSQLParser.TABLESPACE);
				}
				break;
			case 344:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 7225;
				this.match(PostgreSQLParser.TEMPLATE);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_equal(): Opt_equalContext {
		let localctx: Opt_equalContext = new Opt_equalContext(this, this._ctx, this.state);
		this.enterRule(localctx, 814, PostgreSQLParser.RULE_opt_equal);
		try {
			this.state = 7230;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 10:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7228;
				this.match(PostgreSQLParser.EQUAL);
				}
				break;
			case 12:
			case 13:
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 60:
			case 61:
			case 80:
			case 92:
			case 96:
			case 106:
			case 107:
			case 108:
			case 109:
			case 110:
			case 111:
			case 112:
			case 113:
			case 114:
			case 115:
			case 116:
			case 117:
			case 118:
			case 119:
			case 120:
			case 121:
			case 122:
			case 123:
			case 124:
			case 125:
			case 126:
			case 127:
			case 128:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 463:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 521:
			case 523:
			case 525:
			case 534:
			case 537:
			case 538:
			case 547:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alterdatabasestmt(): AlterdatabasestmtContext {
		let localctx: AlterdatabasestmtContext = new AlterdatabasestmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 816, PostgreSQLParser.RULE_alterdatabasestmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7232;
			this.match(PostgreSQLParser.ALTER);
			this.state = 7233;
			this.match(PostgreSQLParser.DATABASE);
			this.state = 7234;
			this.name();
			this.state = 7241;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 347, this._ctx) ) {
			case 1:
				{
				this.state = 7235;
				this.match(PostgreSQLParser.WITH);
				this.state = 7236;
				this.createdb_opt_list();
				}
				break;
			case 2:
				{
				this.state = 7237;
				this.createdb_opt_list();
				}
				break;
			case 3:
				{
				this.state = 7238;
				this.match(PostgreSQLParser.SET);
				this.state = 7239;
				this.match(PostgreSQLParser.TABLESPACE);
				this.state = 7240;
				this.name();
				}
				break;
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alterdatabasesetstmt(): AlterdatabasesetstmtContext {
		let localctx: AlterdatabasesetstmtContext = new AlterdatabasesetstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 818, PostgreSQLParser.RULE_alterdatabasesetstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7243;
			this.match(PostgreSQLParser.ALTER);
			this.state = 7244;
			this.match(PostgreSQLParser.DATABASE);
			this.state = 7245;
			this.name();
			this.state = 7246;
			this.setresetclause();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public dropdbstmt(): DropdbstmtContext {
		let localctx: DropdbstmtContext = new DropdbstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 820, PostgreSQLParser.RULE_dropdbstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7248;
			this.match(PostgreSQLParser.DROP);
			this.state = 7249;
			this.match(PostgreSQLParser.DATABASE);
			this.state = 7252;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 348, this._ctx) ) {
			case 1:
				{
				this.state = 7250;
				this.match(PostgreSQLParser.IF_P);
				this.state = 7251;
				this.match(PostgreSQLParser.EXISTS);
				}
				break;
			}
			this.state = 7254;
			this.name();
			this.state = 7260;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 349, this._ctx) ) {
			case 1:
				{
				this.state = 7255;
				this.opt_with();
				this.state = 7256;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 7257;
				this.drop_option_list();
				this.state = 7258;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public drop_option_list(): Drop_option_listContext {
		let localctx: Drop_option_listContext = new Drop_option_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 822, PostgreSQLParser.RULE_drop_option_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7262;
			this.drop_option();
			this.state = 7267;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 7263;
				this.match(PostgreSQLParser.COMMA);
				this.state = 7264;
				this.drop_option();
				}
				}
				this.state = 7269;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public drop_option(): Drop_optionContext {
		let localctx: Drop_optionContext = new Drop_optionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 824, PostgreSQLParser.RULE_drop_option);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7270;
			this.match(PostgreSQLParser.FORCE);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public altercollationstmt(): AltercollationstmtContext {
		let localctx: AltercollationstmtContext = new AltercollationstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 826, PostgreSQLParser.RULE_altercollationstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7272;
			this.match(PostgreSQLParser.ALTER);
			this.state = 7273;
			this.match(PostgreSQLParser.COLLATION);
			this.state = 7274;
			this.any_name();
			this.state = 7275;
			this.match(PostgreSQLParser.REFRESH);
			this.state = 7276;
			this.match(PostgreSQLParser.VERSION_P);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public altersystemstmt(): AltersystemstmtContext {
		let localctx: AltersystemstmtContext = new AltersystemstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 828, PostgreSQLParser.RULE_altersystemstmt);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7278;
			this.match(PostgreSQLParser.ALTER);
			this.state = 7279;
			this.match(PostgreSQLParser.SYSTEM_P);
			this.state = 7280;
			_la = this._input.LA(1);
			if(!(_la===304 || _la===324)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			this.state = 7281;
			this.generic_set();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createdomainstmt(): CreatedomainstmtContext {
		let localctx: CreatedomainstmtContext = new CreatedomainstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 830, PostgreSQLParser.RULE_createdomainstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7283;
			this.match(PostgreSQLParser.CREATE);
			this.state = 7284;
			this.match(PostgreSQLParser.DOMAIN_P);
			this.state = 7285;
			this.any_name();
			this.state = 7286;
			this.opt_as();
			this.state = 7287;
			this.typename();
			this.state = 7288;
			this.colquallist();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alterdomainstmt(): AlterdomainstmtContext {
		let localctx: AlterdomainstmtContext = new AlterdomainstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 832, PostgreSQLParser.RULE_alterdomainstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7290;
			this.match(PostgreSQLParser.ALTER);
			this.state = 7291;
			this.match(PostgreSQLParser.DOMAIN_P);
			this.state = 7292;
			this.any_name();
			this.state = 7314;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 352, this._ctx) ) {
			case 1:
				{
				this.state = 7293;
				this.alter_column_default();
				}
				break;
			case 2:
				{
				this.state = 7294;
				this.match(PostgreSQLParser.DROP);
				this.state = 7295;
				this.match(PostgreSQLParser.NOT);
				this.state = 7296;
				this.match(PostgreSQLParser.NULL_P);
				}
				break;
			case 3:
				{
				this.state = 7297;
				this.match(PostgreSQLParser.SET);
				this.state = 7298;
				this.match(PostgreSQLParser.NOT);
				this.state = 7299;
				this.match(PostgreSQLParser.NULL_P);
				}
				break;
			case 4:
				{
				this.state = 7300;
				this.match(PostgreSQLParser.ADD_P);
				this.state = 7301;
				this.tableconstraint();
				}
				break;
			case 5:
				{
				this.state = 7302;
				this.match(PostgreSQLParser.DROP);
				this.state = 7303;
				this.match(PostgreSQLParser.CONSTRAINT);
				this.state = 7306;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 351, this._ctx) ) {
				case 1:
					{
					this.state = 7304;
					this.match(PostgreSQLParser.IF_P);
					this.state = 7305;
					this.match(PostgreSQLParser.EXISTS);
					}
					break;
				}
				this.state = 7308;
				this.name();
				this.state = 7309;
				this.opt_drop_behavior();
				}
				break;
			case 6:
				{
				this.state = 7311;
				this.match(PostgreSQLParser.VALIDATE);
				this.state = 7312;
				this.match(PostgreSQLParser.CONSTRAINT);
				this.state = 7313;
				this.name();
				}
				break;
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_as(): Opt_asContext {
		let localctx: Opt_asContext = new Opt_asContext(this, this._ctx, this.state);
		this.enterRule(localctx, 834, PostgreSQLParser.RULE_opt_as);
		try {
			this.state = 7318;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 36:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7316;
				this.match(PostgreSQLParser.AS);
				}
				break;
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 92:
			case 106:
			case 107:
			case 108:
			case 109:
			case 110:
			case 111:
			case 112:
			case 113:
			case 114:
			case 115:
			case 116:
			case 117:
			case 118:
			case 119:
			case 120:
			case 121:
			case 122:
			case 123:
			case 124:
			case 125:
			case 126:
			case 127:
			case 128:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 463:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 521:
			case 523:
			case 525:
			case 537:
			case 538:
			case 547:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public altertsdictionarystmt(): AltertsdictionarystmtContext {
		let localctx: AltertsdictionarystmtContext = new AltertsdictionarystmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 836, PostgreSQLParser.RULE_altertsdictionarystmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7320;
			this.match(PostgreSQLParser.ALTER);
			this.state = 7321;
			this.match(PostgreSQLParser.TEXT_P);
			this.state = 7322;
			this.match(PostgreSQLParser.SEARCH);
			this.state = 7323;
			this.match(PostgreSQLParser.DICTIONARY);
			this.state = 7324;
			this.any_name();
			this.state = 7325;
			this.definition();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public altertsconfigurationstmt(): AltertsconfigurationstmtContext {
		let localctx: AltertsconfigurationstmtContext = new AltertsconfigurationstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 838, PostgreSQLParser.RULE_altertsconfigurationstmt);
		try {
			this.state = 7399;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 354, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7327;
				this.match(PostgreSQLParser.ALTER);
				this.state = 7328;
				this.match(PostgreSQLParser.TEXT_P);
				this.state = 7329;
				this.match(PostgreSQLParser.SEARCH);
				this.state = 7330;
				this.match(PostgreSQLParser.CONFIGURATION);
				this.state = 7331;
				this.any_name();
				this.state = 7332;
				this.match(PostgreSQLParser.ADD_P);
				this.state = 7333;
				this.match(PostgreSQLParser.MAPPING);
				this.state = 7334;
				this.match(PostgreSQLParser.FOR);
				this.state = 7335;
				this.name_list();
				this.state = 7336;
				this.any_with();
				this.state = 7337;
				this.any_name_list();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7339;
				this.match(PostgreSQLParser.ALTER);
				this.state = 7340;
				this.match(PostgreSQLParser.TEXT_P);
				this.state = 7341;
				this.match(PostgreSQLParser.SEARCH);
				this.state = 7342;
				this.match(PostgreSQLParser.CONFIGURATION);
				this.state = 7343;
				this.any_name();
				this.state = 7344;
				this.match(PostgreSQLParser.ALTER);
				this.state = 7345;
				this.match(PostgreSQLParser.MAPPING);
				this.state = 7346;
				this.match(PostgreSQLParser.FOR);
				this.state = 7347;
				this.name_list();
				this.state = 7348;
				this.any_with();
				this.state = 7349;
				this.any_name_list();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 7351;
				this.match(PostgreSQLParser.ALTER);
				this.state = 7352;
				this.match(PostgreSQLParser.TEXT_P);
				this.state = 7353;
				this.match(PostgreSQLParser.SEARCH);
				this.state = 7354;
				this.match(PostgreSQLParser.CONFIGURATION);
				this.state = 7355;
				this.any_name();
				this.state = 7356;
				this.match(PostgreSQLParser.ALTER);
				this.state = 7357;
				this.match(PostgreSQLParser.MAPPING);
				this.state = 7358;
				this.match(PostgreSQLParser.REPLACE);
				this.state = 7359;
				this.any_name();
				this.state = 7360;
				this.any_with();
				this.state = 7361;
				this.any_name();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 7363;
				this.match(PostgreSQLParser.ALTER);
				this.state = 7364;
				this.match(PostgreSQLParser.TEXT_P);
				this.state = 7365;
				this.match(PostgreSQLParser.SEARCH);
				this.state = 7366;
				this.match(PostgreSQLParser.CONFIGURATION);
				this.state = 7367;
				this.any_name();
				this.state = 7368;
				this.match(PostgreSQLParser.ALTER);
				this.state = 7369;
				this.match(PostgreSQLParser.MAPPING);
				this.state = 7370;
				this.match(PostgreSQLParser.FOR);
				this.state = 7371;
				this.name_list();
				this.state = 7372;
				this.match(PostgreSQLParser.REPLACE);
				this.state = 7373;
				this.any_name();
				this.state = 7374;
				this.any_with();
				this.state = 7375;
				this.any_name();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 7377;
				this.match(PostgreSQLParser.ALTER);
				this.state = 7378;
				this.match(PostgreSQLParser.TEXT_P);
				this.state = 7379;
				this.match(PostgreSQLParser.SEARCH);
				this.state = 7380;
				this.match(PostgreSQLParser.CONFIGURATION);
				this.state = 7381;
				this.any_name();
				this.state = 7382;
				this.match(PostgreSQLParser.DROP);
				this.state = 7383;
				this.match(PostgreSQLParser.MAPPING);
				this.state = 7384;
				this.match(PostgreSQLParser.FOR);
				this.state = 7385;
				this.name_list();
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 7387;
				this.match(PostgreSQLParser.ALTER);
				this.state = 7388;
				this.match(PostgreSQLParser.TEXT_P);
				this.state = 7389;
				this.match(PostgreSQLParser.SEARCH);
				this.state = 7390;
				this.match(PostgreSQLParser.CONFIGURATION);
				this.state = 7391;
				this.any_name();
				this.state = 7392;
				this.match(PostgreSQLParser.DROP);
				this.state = 7393;
				this.match(PostgreSQLParser.MAPPING);
				this.state = 7394;
				this.match(PostgreSQLParser.IF_P);
				this.state = 7395;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 7396;
				this.match(PostgreSQLParser.FOR);
				this.state = 7397;
				this.name_list();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public any_with(): Any_withContext {
		let localctx: Any_withContext = new Any_withContext(this, this._ctx, this.state);
		this.enterRule(localctx, 840, PostgreSQLParser.RULE_any_with);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7401;
			this.match(PostgreSQLParser.WITH);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public createconversionstmt(): CreateconversionstmtContext {
		let localctx: CreateconversionstmtContext = new CreateconversionstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 842, PostgreSQLParser.RULE_createconversionstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7403;
			this.match(PostgreSQLParser.CREATE);
			this.state = 7404;
			this.opt_default();
			this.state = 7405;
			this.match(PostgreSQLParser.CONVERSION_P);
			this.state = 7406;
			this.any_name();
			this.state = 7407;
			this.match(PostgreSQLParser.FOR);
			this.state = 7408;
			this.sconst();
			this.state = 7409;
			this.match(PostgreSQLParser.TO);
			this.state = 7410;
			this.sconst();
			this.state = 7411;
			this.match(PostgreSQLParser.FROM);
			this.state = 7412;
			this.any_name();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public clusterstmt(): ClusterstmtContext {
		let localctx: ClusterstmtContext = new ClusterstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 844, PostgreSQLParser.RULE_clusterstmt);
		try {
			this.state = 7427;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 355, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7414;
				this.match(PostgreSQLParser.CLUSTER);
				this.state = 7415;
				this.opt_verbose();
				this.state = 7416;
				this.qualified_name();
				this.state = 7417;
				this.cluster_index_specification();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7419;
				this.match(PostgreSQLParser.CLUSTER);
				this.state = 7420;
				this.opt_verbose();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 7421;
				this.match(PostgreSQLParser.CLUSTER);
				this.state = 7422;
				this.opt_verbose();
				this.state = 7423;
				this.name();
				this.state = 7424;
				this.match(PostgreSQLParser.ON);
				this.state = 7425;
				this.qualified_name();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public cluster_index_specification(): Cluster_index_specificationContext {
		let localctx: Cluster_index_specificationContext = new Cluster_index_specificationContext(this, this._ctx, this.state);
		this.enterRule(localctx, 846, PostgreSQLParser.RULE_cluster_index_specification);
		try {
			this.state = 7432;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 100:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7429;
				this.match(PostgreSQLParser.USING);
				this.state = 7430;
				this.name();
				}
				break;
			case -1:
			case 2:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 88:
			case 92:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public vacuumstmt(): VacuumstmtContext {
		let localctx: VacuumstmtContext = new VacuumstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 848, PostgreSQLParser.RULE_vacuumstmt);
		try {
			this.state = 7447;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 357, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7434;
				this.match(PostgreSQLParser.VACUUM);
				this.state = 7435;
				this.opt_full();
				this.state = 7436;
				this.opt_freeze();
				this.state = 7437;
				this.opt_verbose();
				this.state = 7438;
				this.opt_analyze();
				this.state = 7439;
				this.opt_vacuum_relation_list();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7441;
				this.match(PostgreSQLParser.VACUUM);
				this.state = 7442;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 7443;
				this.vac_analyze_option_list();
				this.state = 7444;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 7445;
				this.opt_vacuum_relation_list();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public analyzestmt(): AnalyzestmtContext {
		let localctx: AnalyzestmtContext = new AnalyzestmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 850, PostgreSQLParser.RULE_analyzestmt);
		try {
			this.state = 7459;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 358, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7449;
				this.analyze_keyword();
				this.state = 7450;
				this.opt_verbose();
				this.state = 7451;
				this.opt_vacuum_relation_list();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7453;
				this.analyze_keyword();
				this.state = 7454;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 7455;
				this.vac_analyze_option_list();
				this.state = 7456;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 7457;
				this.opt_vacuum_relation_list();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public vac_analyze_option_list(): Vac_analyze_option_listContext {
		let localctx: Vac_analyze_option_listContext = new Vac_analyze_option_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 852, PostgreSQLParser.RULE_vac_analyze_option_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7461;
			this.vac_analyze_option_elem();
			this.state = 7466;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 7462;
				this.match(PostgreSQLParser.COMMA);
				this.state = 7463;
				this.vac_analyze_option_elem();
				}
				}
				this.state = 7468;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public analyze_keyword(): Analyze_keywordContext {
		let localctx: Analyze_keywordContext = new Analyze_keywordContext(this, this._ctx, this.state);
		this.enterRule(localctx, 854, PostgreSQLParser.RULE_analyze_keyword);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7469;
			_la = this._input.LA(1);
			if(!(_la===31 || _la===32)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public vac_analyze_option_elem(): Vac_analyze_option_elemContext {
		let localctx: Vac_analyze_option_elemContext = new Vac_analyze_option_elemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 856, PostgreSQLParser.RULE_vac_analyze_option_elem);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7471;
			this.vac_analyze_option_name();
			this.state = 7472;
			this.vac_analyze_option_arg();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public vac_analyze_option_name(): Vac_analyze_option_nameContext {
		let localctx: Vac_analyze_option_nameContext = new Vac_analyze_option_nameContext(this, this._ctx, this.state);
		this.enterRule(localctx, 858, PostgreSQLParser.RULE_vac_analyze_option_name);
		try {
			this.state = 7476;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 92:
			case 106:
			case 107:
			case 108:
			case 109:
			case 110:
			case 111:
			case 112:
			case 113:
			case 114:
			case 115:
			case 116:
			case 117:
			case 118:
			case 119:
			case 120:
			case 121:
			case 122:
			case 123:
			case 124:
			case 125:
			case 126:
			case 127:
			case 128:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 463:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7474;
				this.nonreservedword();
				}
				break;
			case 31:
			case 32:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7475;
				this.analyze_keyword();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public vac_analyze_option_arg(): Vac_analyze_option_argContext {
		let localctx: Vac_analyze_option_argContext = new Vac_analyze_option_argContext(this, this._ctx, this.state);
		this.enterRule(localctx, 860, PostgreSQLParser.RULE_vac_analyze_option_arg);
		try {
			this.state = 7481;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 60:
			case 61:
			case 80:
			case 92:
			case 96:
			case 106:
			case 107:
			case 108:
			case 109:
			case 110:
			case 111:
			case 112:
			case 113:
			case 114:
			case 115:
			case 116:
			case 117:
			case 118:
			case 119:
			case 120:
			case 121:
			case 122:
			case 123:
			case 124:
			case 125:
			case 126:
			case 127:
			case 128:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 463:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 521:
			case 523:
			case 525:
			case 537:
			case 538:
			case 547:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7478;
				this.opt_boolean_or_string();
				}
				break;
			case 12:
			case 13:
			case 534:
			case 536:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7479;
				this.numericonly();
				}
				break;
			case 3:
			case 6:
				this.enterOuterAlt(localctx, 3);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_analyze(): Opt_analyzeContext {
		let localctx: Opt_analyzeContext = new Opt_analyzeContext(this, this._ctx, this.state);
		this.enterRule(localctx, 862, PostgreSQLParser.RULE_opt_analyze);
		try {
			this.state = 7485;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 362, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7483;
				this.analyze_keyword();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_verbose(): Opt_verboseContext {
		let localctx: Opt_verboseContext = new Opt_verboseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 864, PostgreSQLParser.RULE_opt_verbose);
		try {
			this.state = 7489;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 128:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7487;
				this.match(PostgreSQLParser.VERBOSE);
				}
				break;
			case -1:
			case 2:
			case 7:
			case 31:
			case 32:
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 46:
			case 53:
			case 57:
			case 61:
			case 65:
			case 71:
			case 88:
			case 92:
			case 105:
			case 116:
			case 123:
			case 124:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 445:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_full(): Opt_fullContext {
		let localctx: Opt_fullContext = new Opt_fullContext(this, this._ctx, this.state);
		this.enterRule(localctx, 866, PostgreSQLParser.RULE_opt_full);
		try {
			this.state = 7493;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 113:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7491;
				this.match(PostgreSQLParser.FULL);
				}
				break;
			case -1:
			case 2:
			case 7:
			case 31:
			case 32:
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 46:
			case 53:
			case 57:
			case 61:
			case 65:
			case 71:
			case 88:
			case 92:
			case 105:
			case 112:
			case 116:
			case 123:
			case 124:
			case 128:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 445:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_freeze(): Opt_freezeContext {
		let localctx: Opt_freezeContext = new Opt_freezeContext(this, this._ctx, this.state);
		this.enterRule(localctx, 868, PostgreSQLParser.RULE_opt_freeze);
		try {
			this.state = 7497;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 112:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7495;
				this.match(PostgreSQLParser.FREEZE);
				}
				break;
			case -1:
			case 2:
			case 7:
			case 31:
			case 32:
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 46:
			case 53:
			case 57:
			case 61:
			case 65:
			case 71:
			case 88:
			case 92:
			case 105:
			case 116:
			case 123:
			case 124:
			case 128:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 445:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_name_list(): Opt_name_listContext {
		let localctx: Opt_name_listContext = new Opt_name_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 870, PostgreSQLParser.RULE_opt_name_list);
		try {
			this.state = 7504;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 366, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7499;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 7500;
				this.name_list();
				this.state = 7501;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public vacuum_relation(): Vacuum_relationContext {
		let localctx: Vacuum_relationContext = new Vacuum_relationContext(this, this._ctx, this.state);
		this.enterRule(localctx, 872, PostgreSQLParser.RULE_vacuum_relation);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7506;
			this.qualified_name();
			this.state = 7507;
			this.opt_name_list();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public vacuum_relation_list(): Vacuum_relation_listContext {
		let localctx: Vacuum_relation_listContext = new Vacuum_relation_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 874, PostgreSQLParser.RULE_vacuum_relation_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7509;
			this.vacuum_relation();
			this.state = 7514;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 7510;
				this.match(PostgreSQLParser.COMMA);
				this.state = 7511;
				this.vacuum_relation();
				}
				}
				this.state = 7516;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_vacuum_relation_list(): Opt_vacuum_relation_listContext {
		let localctx: Opt_vacuum_relation_listContext = new Opt_vacuum_relation_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 876, PostgreSQLParser.RULE_opt_vacuum_relation_list);
		try {
			this.state = 7519;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 368, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7517;
				this.vacuum_relation_list();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public explainstmt(): ExplainstmtContext {
		let localctx: ExplainstmtContext = new ExplainstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 878, PostgreSQLParser.RULE_explainstmt);
		try {
			this.state = 7537;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 369, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7521;
				this.match(PostgreSQLParser.EXPLAIN);
				this.state = 7522;
				this.explainablestmt();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7523;
				this.match(PostgreSQLParser.EXPLAIN);
				this.state = 7524;
				this.analyze_keyword();
				this.state = 7525;
				this.opt_verbose();
				this.state = 7526;
				this.explainablestmt();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 7528;
				this.match(PostgreSQLParser.EXPLAIN);
				this.state = 7529;
				this.match(PostgreSQLParser.VERBOSE);
				this.state = 7530;
				this.explainablestmt();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 7531;
				this.match(PostgreSQLParser.EXPLAIN);
				this.state = 7532;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 7533;
				this.explain_option_list();
				this.state = 7534;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 7535;
				this.explainablestmt();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public explainablestmt(): ExplainablestmtContext {
		let localctx: ExplainablestmtContext = new ExplainablestmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 880, PostgreSQLParser.RULE_explainablestmt);
		try {
			this.state = 7548;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 370, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7539;
				this.selectstmt();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7540;
				this.insertstmt();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 7541;
				this.updatestmt();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 7542;
				this.deletestmt();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 7543;
				this.declarecursorstmt();
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 7544;
				this.createasstmt();
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 7545;
				this.creatematviewstmt();
				}
				break;
			case 8:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 7546;
				this.refreshmatviewstmt();
				}
				break;
			case 9:
				this.enterOuterAlt(localctx, 9);
				{
				this.state = 7547;
				this.executestmt();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public explain_option_list(): Explain_option_listContext {
		let localctx: Explain_option_listContext = new Explain_option_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 882, PostgreSQLParser.RULE_explain_option_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7550;
			this.explain_option_elem();
			this.state = 7555;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 7551;
				this.match(PostgreSQLParser.COMMA);
				this.state = 7552;
				this.explain_option_elem();
				}
				}
				this.state = 7557;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public explain_option_elem(): Explain_option_elemContext {
		let localctx: Explain_option_elemContext = new Explain_option_elemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 884, PostgreSQLParser.RULE_explain_option_elem);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7558;
			this.explain_option_name();
			this.state = 7559;
			this.explain_option_arg();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public explain_option_name(): Explain_option_nameContext {
		let localctx: Explain_option_nameContext = new Explain_option_nameContext(this, this._ctx, this.state);
		this.enterRule(localctx, 886, PostgreSQLParser.RULE_explain_option_name);
		try {
			this.state = 7563;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 92:
			case 106:
			case 107:
			case 108:
			case 109:
			case 110:
			case 111:
			case 112:
			case 113:
			case 114:
			case 115:
			case 116:
			case 117:
			case 118:
			case 119:
			case 120:
			case 121:
			case 122:
			case 123:
			case 124:
			case 125:
			case 126:
			case 127:
			case 128:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 463:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7561;
				this.nonreservedword();
				}
				break;
			case 31:
			case 32:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7562;
				this.analyze_keyword();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public explain_option_arg(): Explain_option_argContext {
		let localctx: Explain_option_argContext = new Explain_option_argContext(this, this._ctx, this.state);
		this.enterRule(localctx, 888, PostgreSQLParser.RULE_explain_option_arg);
		try {
			this.state = 7568;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 60:
			case 61:
			case 80:
			case 92:
			case 96:
			case 106:
			case 107:
			case 108:
			case 109:
			case 110:
			case 111:
			case 112:
			case 113:
			case 114:
			case 115:
			case 116:
			case 117:
			case 118:
			case 119:
			case 120:
			case 121:
			case 122:
			case 123:
			case 124:
			case 125:
			case 126:
			case 127:
			case 128:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 463:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 521:
			case 523:
			case 525:
			case 537:
			case 538:
			case 547:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7565;
				this.opt_boolean_or_string();
				}
				break;
			case 12:
			case 13:
			case 534:
			case 536:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7566;
				this.numericonly();
				}
				break;
			case 3:
			case 6:
				this.enterOuterAlt(localctx, 3);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public preparestmt(): PreparestmtContext {
		let localctx: PreparestmtContext = new PreparestmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 890, PostgreSQLParser.RULE_preparestmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7570;
			this.match(PostgreSQLParser.PREPARE);
			this.state = 7571;
			this.name();
			this.state = 7572;
			this.prep_type_clause();
			this.state = 7573;
			this.match(PostgreSQLParser.AS);
			this.state = 7574;
			this.preparablestmt();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public prep_type_clause(): Prep_type_clauseContext {
		let localctx: Prep_type_clauseContext = new Prep_type_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 892, PostgreSQLParser.RULE_prep_type_clause);
		try {
			this.state = 7581;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 2:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7576;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 7577;
				this.type_list();
				this.state = 7578;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 36:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public preparablestmt(): PreparablestmtContext {
		let localctx: PreparablestmtContext = new PreparablestmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 894, PostgreSQLParser.RULE_preparablestmt);
		try {
			this.state = 7587;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 375, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7583;
				this.selectstmt();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7584;
				this.insertstmt();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 7585;
				this.updatestmt();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 7586;
				this.deletestmt();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public executestmt(): ExecutestmtContext {
		let localctx: ExecutestmtContext = new ExecutestmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 896, PostgreSQLParser.RULE_executestmt);
		try {
			this.state = 7616;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 376, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7589;
				this.match(PostgreSQLParser.EXECUTE);
				this.state = 7590;
				this.name();
				this.state = 7591;
				this.execute_param_clause();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7593;
				this.match(PostgreSQLParser.CREATE);
				this.state = 7594;
				this.opttemp();
				this.state = 7595;
				this.match(PostgreSQLParser.TABLE);
				this.state = 7596;
				this.create_as_target();
				this.state = 7597;
				this.match(PostgreSQLParser.AS);
				this.state = 7598;
				this.match(PostgreSQLParser.EXECUTE);
				this.state = 7599;
				this.name();
				this.state = 7600;
				this.execute_param_clause();
				this.state = 7601;
				this.opt_with_data();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 7603;
				this.match(PostgreSQLParser.CREATE);
				this.state = 7604;
				this.opttemp();
				this.state = 7605;
				this.match(PostgreSQLParser.TABLE);
				this.state = 7606;
				this.match(PostgreSQLParser.IF_P);
				this.state = 7607;
				this.match(PostgreSQLParser.NOT);
				this.state = 7608;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 7609;
				this.create_as_target();
				this.state = 7610;
				this.match(PostgreSQLParser.AS);
				this.state = 7611;
				this.match(PostgreSQLParser.EXECUTE);
				this.state = 7612;
				this.name();
				this.state = 7613;
				this.execute_param_clause();
				this.state = 7614;
				this.opt_with_data();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public execute_param_clause(): Execute_param_clauseContext {
		let localctx: Execute_param_clauseContext = new Execute_param_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 898, PostgreSQLParser.RULE_execute_param_clause);
		try {
			this.state = 7623;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 377, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7618;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 7619;
				this.expr_list();
				this.state = 7620;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public deallocatestmt(): DeallocatestmtContext {
		let localctx: DeallocatestmtContext = new DeallocatestmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 900, PostgreSQLParser.RULE_deallocatestmt);
		try {
			this.state = 7635;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 378, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7625;
				this.match(PostgreSQLParser.DEALLOCATE);
				this.state = 7626;
				this.name();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7627;
				this.match(PostgreSQLParser.DEALLOCATE);
				this.state = 7628;
				this.match(PostgreSQLParser.PREPARE);
				this.state = 7629;
				this.name();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 7630;
				this.match(PostgreSQLParser.DEALLOCATE);
				this.state = 7631;
				this.match(PostgreSQLParser.ALL);
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 7632;
				this.match(PostgreSQLParser.DEALLOCATE);
				this.state = 7633;
				this.match(PostgreSQLParser.PREPARE);
				this.state = 7634;
				this.match(PostgreSQLParser.ALL);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public insertstmt(): InsertstmtContext {
		let localctx: InsertstmtContext = new InsertstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 902, PostgreSQLParser.RULE_insertstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7637;
			this.opt_with_clause();
			this.state = 7638;
			this.match(PostgreSQLParser.INSERT);
			this.state = 7639;
			this.match(PostgreSQLParser.INTO);
			this.state = 7640;
			this.insert_target();
			this.state = 7641;
			this.insert_rest();
			this.state = 7642;
			this.opt_on_conflict();
			this.state = 7643;
			this.returning_clause();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public insert_target(): Insert_targetContext {
		let localctx: Insert_targetContext = new Insert_targetContext(this, this._ctx, this.state);
		this.enterRule(localctx, 904, PostgreSQLParser.RULE_insert_target);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7645;
			this.qualified_name();
			this.state = 7648;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			if (_la===36) {
				{
				this.state = 7646;
				this.match(PostgreSQLParser.AS);
				this.state = 7647;
				this.colid();
				}
			}

			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public insert_rest(): Insert_restContext {
		let localctx: Insert_restContext = new Insert_restContext(this, this._ctx, this.state);
		this.enterRule(localctx, 906, PostgreSQLParser.RULE_insert_rest);
		let _la: number;
		try {
			this.state = 7669;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 381, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7650;
				this.selectstmt();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7651;
				this.match(PostgreSQLParser.OVERRIDING);
				this.state = 7652;
				this.override_kind();
				this.state = 7653;
				this.match(PostgreSQLParser.VALUE_P);
				this.state = 7654;
				this.selectstmt();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 7656;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 7657;
				this.insert_column_list();
				this.state = 7658;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 7663;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===454) {
					{
					this.state = 7659;
					this.match(PostgreSQLParser.OVERRIDING);
					this.state = 7660;
					this.override_kind();
					this.state = 7661;
					this.match(PostgreSQLParser.VALUE_P);
					}
				}

				this.state = 7665;
				this.selectstmt();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 7667;
				this.match(PostgreSQLParser.DEFAULT);
				this.state = 7668;
				this.match(PostgreSQLParser.VALUES);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public override_kind(): Override_kindContext {
		let localctx: Override_kindContext = new Override_kindContext(this, this._ctx, this.state);
		this.enterRule(localctx, 908, PostgreSQLParser.RULE_override_kind);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7671;
			_la = this._input.LA(1);
			if(!(_la===99 || _la===340)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public insert_column_list(): Insert_column_listContext {
		let localctx: Insert_column_listContext = new Insert_column_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 910, PostgreSQLParser.RULE_insert_column_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7673;
			this.insert_column_item();
			this.state = 7678;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 7674;
				this.match(PostgreSQLParser.COMMA);
				this.state = 7675;
				this.insert_column_item();
				}
				}
				this.state = 7680;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public insert_column_item(): Insert_column_itemContext {
		let localctx: Insert_column_itemContext = new Insert_column_itemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 912, PostgreSQLParser.RULE_insert_column_item);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7681;
			this.colid();
			this.state = 7682;
			this.opt_indirection();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_on_conflict(): Opt_on_conflictContext {
		let localctx: Opt_on_conflictContext = new Opt_on_conflictContext(this, this._ctx, this.state);
		this.enterRule(localctx, 914, PostgreSQLParser.RULE_opt_on_conflict);
		try {
			this.state = 7697;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 80:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7684;
				this.match(PostgreSQLParser.ON);
				this.state = 7685;
				this.match(PostgreSQLParser.CONFLICT);
				this.state = 7686;
				this.opt_conf_expr();
				this.state = 7687;
				this.match(PostgreSQLParser.DO);
				this.state = 7694;
				this._errHandler.sync(this);
				switch (this._input.LA(1)) {
				case 360:
					{
					this.state = 7688;
					this.match(PostgreSQLParser.UPDATE);
					this.state = 7689;
					this.match(PostgreSQLParser.SET);
					this.state = 7690;
					this.set_clause_list();
					this.state = 7691;
					this.where_clause();
					}
					break;
				case 261:
					{
					this.state = 7693;
					this.match(PostgreSQLParser.NOTHING);
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				break;
			case -1:
			case 2:
			case 3:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 87:
			case 88:
			case 92:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 510:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_conf_expr(): Opt_conf_exprContext {
		let localctx: Opt_conf_exprContext = new Opt_conf_exprContext(this, this._ctx, this.state);
		this.enterRule(localctx, 916, PostgreSQLParser.RULE_opt_conf_expr);
		try {
			this.state = 7708;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 2:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7699;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 7700;
				this.index_params();
				this.state = 7701;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 7702;
				this.where_clause();
				}
				break;
			case 80:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7704;
				this.match(PostgreSQLParser.ON);
				this.state = 7705;
				this.match(PostgreSQLParser.CONSTRAINT);
				this.state = 7706;
				this.name();
				}
				break;
			case 57:
				this.enterOuterAlt(localctx, 3);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public returning_clause(): Returning_clauseContext {
		let localctx: Returning_clauseContext = new Returning_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 918, PostgreSQLParser.RULE_returning_clause);
		try {
			this.state = 7713;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 87:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7710;
				this.match(PostgreSQLParser.RETURNING);
				this.state = 7711;
				this.target_list();
				}
				break;
			case -1:
			case 2:
			case 3:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 88:
			case 92:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 510:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public deletestmt(): DeletestmtContext {
		let localctx: DeletestmtContext = new DeletestmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 920, PostgreSQLParser.RULE_deletestmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7715;
			this.opt_with_clause();
			this.state = 7716;
			this.match(PostgreSQLParser.DELETE_P);
			this.state = 7717;
			this.match(PostgreSQLParser.FROM);
			this.state = 7718;
			this.relation_expr_opt_alias();
			this.state = 7719;
			this.using_clause();
			this.state = 7720;
			this.where_or_current_clause();
			this.state = 7721;
			this.returning_clause();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public using_clause(): Using_clauseContext {
		let localctx: Using_clauseContext = new Using_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 922, PostgreSQLParser.RULE_using_clause);
		try {
			this.state = 7726;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 100:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7723;
				this.match(PostgreSQLParser.USING);
				this.state = 7724;
				this.from_list();
				}
				break;
			case -1:
			case 2:
			case 3:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 87:
			case 88:
			case 92:
			case 103:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 510:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public lockstmt(): LockstmtContext {
		let localctx: LockstmtContext = new LockstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 924, PostgreSQLParser.RULE_lockstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7728;
			this.match(PostgreSQLParser.LOCK_P);
			this.state = 7729;
			this.opt_table();
			this.state = 7730;
			this.relation_expr_list();
			this.state = 7731;
			this.opt_lock();
			this.state = 7732;
			this.opt_nowait();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_lock(): Opt_lockContext {
		let localctx: Opt_lockContext = new Opt_lockContext(this, this._ctx, this.state);
		this.enterRule(localctx, 926, PostgreSQLParser.RULE_opt_lock);
		try {
			this.state = 7739;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 68:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7734;
				this.match(PostgreSQLParser.IN_P);
				this.state = 7735;
				this.lock_type();
				this.state = 7736;
				this.match(PostgreSQLParser.MODE);
				}
				break;
			case -1:
			case 2:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 88:
			case 92:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 263:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public lock_type(): Lock_typeContext {
		let localctx: Lock_typeContext = new Lock_typeContext(this, this._ctx, this.state);
		this.enterRule(localctx, 928, PostgreSQLParser.RULE_lock_type);
		let _la: number;
		try {
			this.state = 7753;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 131:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7741;
				this.match(PostgreSQLParser.ACCESS);
				this.state = 7742;
				_la = this._input.LA(1);
				if(!(_la===201 || _la===325)) {
				this._errHandler.recoverInline(this);
				}
				else {
					this._errHandler.reportMatch(this);
				    this.consume();
				}
				}
				break;
			case 405:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7743;
				this.match(PostgreSQLParser.ROW);
				this.state = 7744;
				_la = this._input.LA(1);
				if(!(_la===201 || _la===325)) {
				this._errHandler.recoverInline(this);
				}
				else {
					this._errHandler.reportMatch(this);
				    this.consume();
				}
				}
				break;
			case 325:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 7745;
				this.match(PostgreSQLParser.SHARE);
				this.state = 7750;
				this._errHandler.sync(this);
				switch (this._input.LA(1)) {
				case 360:
					{
					this.state = 7746;
					this.match(PostgreSQLParser.UPDATE);
					this.state = 7747;
					this.match(PostgreSQLParser.EXCLUSIVE);
					}
					break;
				case 405:
					{
					this.state = 7748;
					this.match(PostgreSQLParser.ROW);
					this.state = 7749;
					this.match(PostgreSQLParser.EXCLUSIVE);
					}
					break;
				case 254:
					break;
				default:
					break;
				}
				}
				break;
			case 201:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 7752;
				this.match(PostgreSQLParser.EXCLUSIVE);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_nowait(): Opt_nowaitContext {
		let localctx: Opt_nowaitContext = new Opt_nowaitContext(this, this._ctx, this.state);
		this.enterRule(localctx, 930, PostgreSQLParser.RULE_opt_nowait);
		try {
			this.state = 7757;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 263:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7755;
				this.match(PostgreSQLParser.NOWAIT);
				}
				break;
			case -1:
			case 2:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 88:
			case 92:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_nowait_or_skip(): Opt_nowait_or_skipContext {
		let localctx: Opt_nowait_or_skipContext = new Opt_nowait_or_skipContext(this, this._ctx, this.state);
		this.enterRule(localctx, 932, PostgreSQLParser.RULE_opt_nowait_or_skip);
		try {
			this.state = 7763;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 263:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7759;
				this.match(PostgreSQLParser.NOWAIT);
				}
				break;
			case 456:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7760;
				this.match(PostgreSQLParser.SKIP_P);
				this.state = 7761;
				this.match(PostgreSQLParser.LOCKED);
				}
				break;
			case -1:
			case 2:
			case 3:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 62:
			case 65:
			case 71:
			case 74:
			case 79:
			case 80:
			case 87:
			case 88:
			case 92:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 510:
			case 544:
				this.enterOuterAlt(localctx, 3);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public updatestmt(): UpdatestmtContext {
		let localctx: UpdatestmtContext = new UpdatestmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 934, PostgreSQLParser.RULE_updatestmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7765;
			this.opt_with_clause();
			this.state = 7766;
			this.match(PostgreSQLParser.UPDATE);
			this.state = 7767;
			this.relation_expr_opt_alias();
			this.state = 7768;
			this.match(PostgreSQLParser.SET);
			this.state = 7769;
			this.set_clause_list();
			this.state = 7770;
			this.from_clause();
			this.state = 7771;
			this.where_or_current_clause();
			this.state = 7772;
			this.returning_clause();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public set_clause_list(): Set_clause_listContext {
		let localctx: Set_clause_listContext = new Set_clause_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 936, PostgreSQLParser.RULE_set_clause_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7774;
			this.set_clause();
			this.state = 7779;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 7775;
				this.match(PostgreSQLParser.COMMA);
				this.state = 7776;
				this.set_clause();
				}
				}
				this.state = 7781;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public set_clause(): Set_clauseContext {
		let localctx: Set_clauseContext = new Set_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 938, PostgreSQLParser.RULE_set_clause);
		try {
			this.state = 7792;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 92:
			case 116:
			case 123:
			case 124:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7782;
				this.set_target();
				this.state = 7783;
				this.match(PostgreSQLParser.EQUAL);
				this.state = 7784;
				this.a_expr();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7786;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 7787;
				this.set_target_list();
				this.state = 7788;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 7789;
				this.match(PostgreSQLParser.EQUAL);
				this.state = 7790;
				this.a_expr();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public set_target(): Set_targetContext {
		let localctx: Set_targetContext = new Set_targetContext(this, this._ctx, this.state);
		this.enterRule(localctx, 940, PostgreSQLParser.RULE_set_target);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7794;
			this.colid();
			this.state = 7795;
			this.opt_indirection();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public set_target_list(): Set_target_listContext {
		let localctx: Set_target_listContext = new Set_target_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 942, PostgreSQLParser.RULE_set_target_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7797;
			this.set_target();
			this.state = 7802;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 7798;
				this.match(PostgreSQLParser.COMMA);
				this.state = 7799;
				this.set_target();
				}
				}
				this.state = 7804;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public declarecursorstmt(): DeclarecursorstmtContext {
		let localctx: DeclarecursorstmtContext = new DeclarecursorstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 944, PostgreSQLParser.RULE_declarecursorstmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7805;
			this.match(PostgreSQLParser.DECLARE);
			this.state = 7806;
			this.cursor_name();
			this.state = 7807;
			this.cursor_options();
			this.state = 7808;
			this.match(PostgreSQLParser.CURSOR);
			this.state = 7809;
			this.opt_hold();
			this.state = 7810;
			this.match(PostgreSQLParser.FOR);
			this.state = 7811;
			this.selectstmt();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public cursor_name(): Cursor_nameContext {
		let localctx: Cursor_nameContext = new Cursor_nameContext(this, this._ctx, this.state);
		this.enterRule(localctx, 946, PostgreSQLParser.RULE_cursor_name);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7813;
			this.name();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public cursor_options(): Cursor_optionsContext {
		let localctx: Cursor_optionsContext = new Cursor_optionsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 948, PostgreSQLParser.RULE_cursor_options);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7822;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===107 || _la===231 || _la===260 || _la===315) {
				{
				this.state = 7820;
				this._errHandler.sync(this);
				switch (this._input.LA(1)) {
				case 260:
					{
					this.state = 7815;
					this.match(PostgreSQLParser.NO);
					this.state = 7816;
					this.match(PostgreSQLParser.SCROLL);
					}
					break;
				case 315:
					{
					this.state = 7817;
					this.match(PostgreSQLParser.SCROLL);
					}
					break;
				case 107:
					{
					this.state = 7818;
					this.match(PostgreSQLParser.BINARY);
					}
					break;
				case 231:
					{
					this.state = 7819;
					this.match(PostgreSQLParser.INSENSITIVE);
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				this.state = 7824;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_hold(): Opt_holdContext {
		let localctx: Opt_holdContext = new Opt_holdContext(this, this._ctx, this.state);
		this.enterRule(localctx, 950, PostgreSQLParser.RULE_opt_hold);
		try {
			this.state = 7830;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 62:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 105:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7826;
				this.match(PostgreSQLParser.WITH);
				this.state = 7827;
				this.match(PostgreSQLParser.HOLD);
				}
				break;
			case 370:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 7828;
				this.match(PostgreSQLParser.WITHOUT);
				this.state = 7829;
				this.match(PostgreSQLParser.HOLD);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public selectstmt(): SelectstmtContext {
		let localctx: SelectstmtContext = new SelectstmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 952, PostgreSQLParser.RULE_selectstmt);
		try {
			this.state = 7834;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 399, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7832;
				this.select_no_parens();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7833;
				this.select_with_parens();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public select_with_parens(): Select_with_parensContext {
		let localctx: Select_with_parensContext = new Select_with_parensContext(this, this._ctx, this.state);
		this.enterRule(localctx, 954, PostgreSQLParser.RULE_select_with_parens);
		try {
			this.state = 7844;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 400, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7836;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 7837;
				this.select_no_parens();
				this.state = 7838;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7840;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 7841;
				this.select_with_parens();
				this.state = 7842;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public select_no_parens(): Select_no_parensContext {
		let localctx: Select_no_parensContext = new Select_no_parensContext(this, this._ctx, this.state);
		this.enterRule(localctx, 956, PostgreSQLParser.RULE_select_no_parens);
		try {
			this.state = 7867;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 2:
			case 88:
			case 92:
			case 413:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7846;
				this.select_clause();
				this.state = 7847;
				this.opt_sort_clause();
				this.state = 7854;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 401, this._ctx) ) {
				case 1:
					{
					this.state = 7848;
					this.for_locking_clause();
					this.state = 7849;
					this.opt_select_limit();
					}
					break;
				case 2:
					{
					this.state = 7851;
					this.select_limit();
					this.state = 7852;
					this.opt_for_locking_clause();
					}
					break;
				}
				}
				break;
			case 105:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7856;
				this.with_clause();
				this.state = 7857;
				this.select_clause();
				this.state = 7858;
				this.opt_sort_clause();
				this.state = 7865;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 402, this._ctx) ) {
				case 1:
					{
					this.state = 7859;
					this.for_locking_clause();
					this.state = 7860;
					this.opt_select_limit();
					}
					break;
				case 2:
					{
					this.state = 7862;
					this.select_limit();
					this.state = 7863;
					this.opt_for_locking_clause();
					}
					break;
				}
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public select_clause(): Select_clauseContext {
		let localctx: Select_clauseContext = new Select_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 958, PostgreSQLParser.RULE_select_clause);
		try {
			this.state = 7871;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 404, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7869;
				this.simple_select();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7870;
				this.select_with_parens();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public simple_select(): Simple_selectContext {
		let localctx: Simple_selectContext = new Simple_selectContext(this, this._ctx, this.state);
		this.enterRule(localctx, 960, PostgreSQLParser.RULE_simple_select);
		try {
			let _alt: number;
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7899;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 88:
				{
				this.state = 7873;
				this.match(PostgreSQLParser.SELECT);
				this.state = 7881;
				this._errHandler.sync(this);
				switch (this._input.LA(1)) {
				case -1:
				case 2:
				case 3:
				case 7:
				case 9:
				case 12:
				case 13:
				case 28:
				case 29:
				case 30:
				case 31:
				case 32:
				case 33:
				case 35:
				case 40:
				case 41:
				case 43:
				case 44:
				case 45:
				case 46:
				case 47:
				case 48:
				case 49:
				case 50:
				case 51:
				case 52:
				case 53:
				case 57:
				case 59:
				case 60:
				case 61:
				case 62:
				case 64:
				case 65:
				case 66:
				case 67:
				case 70:
				case 71:
				case 74:
				case 75:
				case 76:
				case 77:
				case 78:
				case 79:
				case 80:
				case 83:
				case 87:
				case 88:
				case 89:
				case 92:
				case 96:
				case 97:
				case 98:
				case 99:
				case 103:
				case 104:
				case 105:
				case 106:
				case 107:
				case 108:
				case 109:
				case 110:
				case 111:
				case 112:
				case 113:
				case 114:
				case 115:
				case 116:
				case 117:
				case 118:
				case 119:
				case 120:
				case 121:
				case 122:
				case 123:
				case 124:
				case 125:
				case 126:
				case 127:
				case 128:
				case 129:
				case 130:
				case 131:
				case 132:
				case 133:
				case 134:
				case 135:
				case 136:
				case 137:
				case 138:
				case 139:
				case 140:
				case 141:
				case 142:
				case 143:
				case 144:
				case 145:
				case 146:
				case 147:
				case 148:
				case 149:
				case 150:
				case 151:
				case 152:
				case 153:
				case 154:
				case 155:
				case 156:
				case 157:
				case 158:
				case 159:
				case 160:
				case 161:
				case 162:
				case 163:
				case 164:
				case 165:
				case 166:
				case 167:
				case 168:
				case 169:
				case 170:
				case 171:
				case 172:
				case 173:
				case 174:
				case 175:
				case 176:
				case 177:
				case 178:
				case 179:
				case 180:
				case 181:
				case 182:
				case 183:
				case 184:
				case 185:
				case 186:
				case 187:
				case 188:
				case 189:
				case 190:
				case 191:
				case 192:
				case 193:
				case 194:
				case 195:
				case 196:
				case 197:
				case 198:
				case 199:
				case 200:
				case 201:
				case 202:
				case 203:
				case 204:
				case 205:
				case 206:
				case 207:
				case 208:
				case 209:
				case 210:
				case 211:
				case 212:
				case 213:
				case 214:
				case 215:
				case 216:
				case 217:
				case 218:
				case 219:
				case 220:
				case 221:
				case 222:
				case 223:
				case 224:
				case 225:
				case 226:
				case 227:
				case 228:
				case 229:
				case 230:
				case 231:
				case 232:
				case 233:
				case 234:
				case 235:
				case 236:
				case 237:
				case 238:
				case 239:
				case 240:
				case 241:
				case 242:
				case 243:
				case 244:
				case 245:
				case 246:
				case 247:
				case 248:
				case 249:
				case 250:
				case 251:
				case 252:
				case 253:
				case 254:
				case 255:
				case 256:
				case 257:
				case 258:
				case 259:
				case 260:
				case 261:
				case 262:
				case 263:
				case 264:
				case 265:
				case 266:
				case 267:
				case 268:
				case 269:
				case 270:
				case 271:
				case 272:
				case 273:
				case 274:
				case 275:
				case 276:
				case 277:
				case 278:
				case 279:
				case 280:
				case 281:
				case 282:
				case 283:
				case 284:
				case 285:
				case 286:
				case 287:
				case 288:
				case 289:
				case 290:
				case 291:
				case 292:
				case 293:
				case 294:
				case 295:
				case 296:
				case 297:
				case 298:
				case 299:
				case 300:
				case 301:
				case 302:
				case 303:
				case 304:
				case 305:
				case 306:
				case 307:
				case 308:
				case 309:
				case 310:
				case 311:
				case 312:
				case 313:
				case 314:
				case 315:
				case 316:
				case 317:
				case 318:
				case 319:
				case 320:
				case 321:
				case 322:
				case 323:
				case 324:
				case 325:
				case 326:
				case 327:
				case 328:
				case 329:
				case 330:
				case 331:
				case 332:
				case 333:
				case 334:
				case 335:
				case 336:
				case 337:
				case 338:
				case 339:
				case 340:
				case 341:
				case 342:
				case 343:
				case 344:
				case 345:
				case 346:
				case 347:
				case 348:
				case 349:
				case 350:
				case 351:
				case 352:
				case 353:
				case 354:
				case 355:
				case 356:
				case 357:
				case 358:
				case 359:
				case 360:
				case 361:
				case 362:
				case 363:
				case 364:
				case 365:
				case 366:
				case 367:
				case 368:
				case 369:
				case 370:
				case 371:
				case 372:
				case 373:
				case 374:
				case 375:
				case 376:
				case 377:
				case 378:
				case 379:
				case 380:
				case 381:
				case 382:
				case 383:
				case 384:
				case 385:
				case 386:
				case 387:
				case 388:
				case 389:
				case 390:
				case 391:
				case 392:
				case 393:
				case 394:
				case 395:
				case 396:
				case 397:
				case 398:
				case 399:
				case 400:
				case 401:
				case 402:
				case 403:
				case 404:
				case 405:
				case 406:
				case 407:
				case 408:
				case 409:
				case 410:
				case 411:
				case 412:
				case 413:
				case 414:
				case 415:
				case 416:
				case 417:
				case 418:
				case 419:
				case 420:
				case 421:
				case 422:
				case 423:
				case 424:
				case 425:
				case 426:
				case 427:
				case 428:
				case 429:
				case 430:
				case 431:
				case 432:
				case 433:
				case 434:
				case 435:
				case 436:
				case 437:
				case 438:
				case 439:
				case 440:
				case 441:
				case 442:
				case 443:
				case 444:
				case 445:
				case 446:
				case 447:
				case 448:
				case 449:
				case 450:
				case 451:
				case 452:
				case 453:
				case 454:
				case 455:
				case 456:
				case 457:
				case 458:
				case 459:
				case 460:
				case 461:
				case 462:
				case 463:
				case 464:
				case 465:
				case 466:
				case 467:
				case 468:
				case 469:
				case 470:
				case 471:
				case 472:
				case 473:
				case 474:
				case 475:
				case 476:
				case 477:
				case 478:
				case 479:
				case 480:
				case 481:
				case 482:
				case 483:
				case 484:
				case 485:
				case 486:
				case 487:
				case 488:
				case 489:
				case 490:
				case 491:
				case 492:
				case 493:
				case 495:
				case 497:
				case 498:
				case 499:
				case 500:
				case 501:
				case 502:
				case 503:
				case 504:
				case 505:
				case 506:
				case 507:
				case 508:
				case 509:
				case 510:
				case 511:
				case 512:
				case 513:
				case 517:
				case 521:
				case 523:
				case 525:
				case 526:
				case 530:
				case 534:
				case 536:
				case 537:
				case 538:
				case 544:
				case 547:
					{
					this.state = 7874;
					this.opt_all_clause();
					this.state = 7875;
					this.into_clause();
					this.state = 7876;
					this.opt_target_list();
					}
					break;
				case 56:
					{
					this.state = 7878;
					this.distinct_clause();
					this.state = 7879;
					this.target_list();
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				this.state = 7883;
				this.into_clause();
				this.state = 7884;
				this.from_clause();
				this.state = 7885;
				this.where_clause();
				this.state = 7886;
				this.group_clause();
				this.state = 7887;
				this.having_clause();
				this.state = 7888;
				this.window_clause();
				}
				break;
			case 413:
				{
				this.state = 7890;
				this.values_clause();
				}
				break;
			case 92:
				{
				this.state = 7891;
				this.match(PostgreSQLParser.TABLE);
				this.state = 7892;
				this.relation_expr();
				}
				break;
			case 2:
				{
				this.state = 7893;
				this.select_with_parens();
				this.state = 7894;
				this.set_operator_with_all_or_distinct();
				this.state = 7897;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 406, this._ctx) ) {
				case 1:
					{
					this.state = 7895;
					this.simple_select();
					}
					break;
				case 2:
					{
					this.state = 7896;
					this.select_with_parens();
					}
					break;
				}
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
			this.state = 7908;
			this._errHandler.sync(this);
			_alt = this._interp.adaptivePredict(this._input, 409, this._ctx);
			while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) {
				if (_alt === 1) {
					{
					{
					this.state = 7901;
					this.set_operator_with_all_or_distinct();
					this.state = 7904;
					this._errHandler.sync(this);
					switch ( this._interp.adaptivePredict(this._input, 408, this._ctx) ) {
					case 1:
						{
						this.state = 7902;
						this.simple_select();
						}
						break;
					case 2:
						{
						this.state = 7903;
						this.select_with_parens();
						}
						break;
					}
					}
					}
				}
				this.state = 7910;
				this._errHandler.sync(this);
				_alt = this._interp.adaptivePredict(this._input, 409, this._ctx);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public set_operator(): Set_operatorContext {
		let localctx: Set_operatorContext = new Set_operatorContext(this, this._ctx, this.state);
		this.enterRule(localctx, 962, PostgreSQLParser.RULE_set_operator);
		try {
			this.state = 7914;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 97:
				localctx = new UnionContext(this, localctx);
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7911;
				this.match(PostgreSQLParser.UNION);
				}
				break;
			case 70:
				localctx = new IntersectContext(this, localctx);
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7912;
				this.match(PostgreSQLParser.INTERSECT);
				}
				break;
			case 59:
				localctx = new ExceptContext(this, localctx);
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 7913;
				this.match(PostgreSQLParser.EXCEPT);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public set_operator_with_all_or_distinct(): Set_operator_with_all_or_distinctContext {
		let localctx: Set_operator_with_all_or_distinctContext = new Set_operator_with_all_or_distinctContext(this, this._ctx, this.state);
		this.enterRule(localctx, 964, PostgreSQLParser.RULE_set_operator_with_all_or_distinct);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7916;
			this.set_operator();
			this.state = 7917;
			this.all_or_distinct();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public with_clause(): With_clauseContext {
		let localctx: With_clauseContext = new With_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 966, PostgreSQLParser.RULE_with_clause);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7919;
			this.match(PostgreSQLParser.WITH);
			this.state = 7921;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 411, this._ctx) ) {
			case 1:
				{
				this.state = 7920;
				this.match(PostgreSQLParser.RECURSIVE);
				}
				break;
			}
			this.state = 7923;
			this.cte_list();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public cte_list(): Cte_listContext {
		let localctx: Cte_listContext = new Cte_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 968, PostgreSQLParser.RULE_cte_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7925;
			this.common_table_expr();
			this.state = 7930;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 7926;
				this.match(PostgreSQLParser.COMMA);
				this.state = 7927;
				this.common_table_expr();
				}
				}
				this.state = 7932;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public common_table_expr(): Common_table_exprContext {
		let localctx: Common_table_exprContext = new Common_table_exprContext(this, this._ctx, this.state);
		this.enterRule(localctx, 970, PostgreSQLParser.RULE_common_table_expr);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7933;
			this.name();
			this.state = 7934;
			this.opt_name_list();
			this.state = 7935;
			this.match(PostgreSQLParser.AS);
			this.state = 7936;
			this.opt_materialized();
			this.state = 7937;
			this.match(PostgreSQLParser.OPEN_PAREN);
			this.state = 7938;
			this.preparablestmt();
			this.state = 7939;
			this.match(PostgreSQLParser.CLOSE_PAREN);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_materialized(): Opt_materializedContext {
		let localctx: Opt_materializedContext = new Opt_materializedContext(this, this._ctx, this.state);
		this.enterRule(localctx, 972, PostgreSQLParser.RULE_opt_materialized);
		try {
			this.state = 7945;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 250:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7941;
				this.match(PostgreSQLParser.MATERIALIZED);
				}
				break;
			case 77:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7942;
				this.match(PostgreSQLParser.NOT);
				this.state = 7943;
				this.match(PostgreSQLParser.MATERIALIZED);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 3);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_with_clause(): Opt_with_clauseContext {
		let localctx: Opt_with_clauseContext = new Opt_with_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 974, PostgreSQLParser.RULE_opt_with_clause);
		try {
			this.state = 7949;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 105:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7947;
				this.with_clause();
				}
				break;
			case 182:
			case 232:
			case 360:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public into_clause(): Into_clauseContext {
		let localctx: Into_clauseContext = new Into_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 976, PostgreSQLParser.RULE_into_clause);
		try {
			this.state = 7959;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 416, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7951;
				this.match(PostgreSQLParser.INTO);
				this.state = 7956;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 415, this._ctx) ) {
				case 1:
					{
					this.state = 7952;
					this.opt_strict();
					this.state = 7953;
					this.opttempTableName();
					}
					break;
				case 2:
					{
					this.state = 7955;
					this.into_target();
					}
					break;
				}
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_strict(): Opt_strictContext {
		let localctx: Opt_strictContext = new Opt_strictContext(this, this._ctx, this.state);
		this.enterRule(localctx, 978, PostgreSQLParser.RULE_opt_strict);
		try {
			this.state = 7963;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 417, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7962;
				this.match(PostgreSQLParser.STRICT_P);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opttempTableName(): OpttempTableNameContext {
		let localctx: OpttempTableNameContext = new OpttempTableNameContext(this, this._ctx, this.state);
		this.enterRule(localctx, 980, PostgreSQLParser.RULE_opttempTableName);
		let _la: number;
		try {
			this.state = 7979;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 419, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7966;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===213 || _la===245) {
					{
					this.state = 7965;
					_la = this._input.LA(1);
					if(!(_la===213 || _la===245)) {
					this._errHandler.recoverInline(this);
					}
					else {
						this._errHandler.reportMatch(this);
					    this.consume();
					}
					}
				}

				this.state = 7968;
				_la = this._input.LA(1);
				if(!(_la===343 || _la===345)) {
				this._errHandler.recoverInline(this);
				}
				else {
					this._errHandler.reportMatch(this);
				    this.consume();
				}
				this.state = 7969;
				this.opt_table();
				this.state = 7970;
				this.qualified_name();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7972;
				this.match(PostgreSQLParser.UNLOGGED);
				this.state = 7973;
				this.opt_table();
				this.state = 7974;
				this.qualified_name();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 7976;
				this.match(PostgreSQLParser.TABLE);
				this.state = 7977;
				this.qualified_name();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 7978;
				this.qualified_name();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_table(): Opt_tableContext {
		let localctx: Opt_tableContext = new Opt_tableContext(this, this._ctx, this.state);
		this.enterRule(localctx, 982, PostgreSQLParser.RULE_opt_table);
		try {
			this.state = 7983;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 420, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7981;
				this.match(PostgreSQLParser.TABLE);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public all_or_distinct(): All_or_distinctContext {
		let localctx: All_or_distinctContext = new All_or_distinctContext(this, this._ctx, this.state);
		this.enterRule(localctx, 984, PostgreSQLParser.RULE_all_or_distinct);
		try {
			this.state = 7988;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 30:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7985;
				this.match(PostgreSQLParser.ALL);
				}
				break;
			case 56:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 7986;
				this.match(PostgreSQLParser.DISTINCT);
				}
				break;
			case 2:
			case 88:
			case 92:
			case 413:
				this.enterOuterAlt(localctx, 3);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public distinct_clause(): Distinct_clauseContext {
		let localctx: Distinct_clauseContext = new Distinct_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 986, PostgreSQLParser.RULE_distinct_clause);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 7990;
			this.match(PostgreSQLParser.DISTINCT);
			this.state = 7996;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			if (_la===80) {
				{
				this.state = 7991;
				this.match(PostgreSQLParser.ON);
				this.state = 7992;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 7993;
				this.expr_list();
				this.state = 7994;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
			}

			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_all_clause(): Opt_all_clauseContext {
		let localctx: Opt_all_clauseContext = new Opt_all_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 988, PostgreSQLParser.RULE_opt_all_clause);
		try {
			this.state = 8000;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 30:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 7998;
				this.match(PostgreSQLParser.ALL);
				}
				break;
			case -1:
			case 2:
			case 3:
			case 7:
			case 9:
			case 12:
			case 13:
			case 28:
			case 29:
			case 31:
			case 32:
			case 33:
			case 35:
			case 40:
			case 41:
			case 43:
			case 44:
			case 45:
			case 46:
			case 47:
			case 48:
			case 49:
			case 50:
			case 51:
			case 52:
			case 53:
			case 57:
			case 59:
			case 60:
			case 61:
			case 62:
			case 64:
			case 65:
			case 66:
			case 67:
			case 70:
			case 71:
			case 74:
			case 75:
			case 76:
			case 77:
			case 78:
			case 79:
			case 80:
			case 83:
			case 87:
			case 88:
			case 89:
			case 92:
			case 96:
			case 97:
			case 98:
			case 99:
			case 103:
			case 104:
			case 105:
			case 106:
			case 107:
			case 108:
			case 109:
			case 110:
			case 111:
			case 112:
			case 113:
			case 114:
			case 115:
			case 116:
			case 117:
			case 118:
			case 119:
			case 120:
			case 121:
			case 122:
			case 123:
			case 124:
			case 125:
			case 126:
			case 127:
			case 128:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 445:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 463:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 510:
			case 511:
			case 512:
			case 513:
			case 517:
			case 521:
			case 523:
			case 525:
			case 526:
			case 530:
			case 534:
			case 536:
			case 537:
			case 538:
			case 544:
			case 547:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_sort_clause(): Opt_sort_clauseContext {
		let localctx: Opt_sort_clauseContext = new Opt_sort_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 990, PostgreSQLParser.RULE_opt_sort_clause);
		try {
			this.state = 8004;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 83:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8002;
				this.sort_clause();
				}
				break;
			case -1:
			case 2:
			case 3:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 62:
			case 65:
			case 71:
			case 74:
			case 79:
			case 80:
			case 87:
			case 88:
			case 92:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 290:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 311:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 472:
			case 510:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public sort_clause(): Sort_clauseContext {
		let localctx: Sort_clauseContext = new Sort_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 992, PostgreSQLParser.RULE_sort_clause);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8006;
			this.match(PostgreSQLParser.ORDER);
			this.state = 8007;
			this.match(PostgreSQLParser.BY);
			this.state = 8008;
			this.sortby_list();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public sortby_list(): Sortby_listContext {
		let localctx: Sortby_listContext = new Sortby_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 994, PostgreSQLParser.RULE_sortby_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8010;
			this.sortby();
			this.state = 8015;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 8011;
				this.match(PostgreSQLParser.COMMA);
				this.state = 8012;
				this.sortby();
				}
				}
				this.state = 8017;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public sortby(): SortbyContext {
		let localctx: SortbyContext = new SortbyContext(this, this._ctx, this.state);
		this.enterRule(localctx, 996, PostgreSQLParser.RULE_sortby);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8018;
			this.a_expr();
			this.state = 8022;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 100:
				{
				this.state = 8019;
				this.match(PostgreSQLParser.USING);
				this.state = 8020;
				this.qual_all_op();
				}
				break;
			case -1:
			case 2:
			case 3:
			case 6:
			case 7:
			case 31:
			case 32:
			case 37:
			case 46:
			case 55:
			case 57:
			case 61:
			case 62:
			case 65:
			case 71:
			case 74:
			case 79:
			case 80:
			case 87:
			case 88:
			case 92:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 264:
			case 281:
			case 290:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 311:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 472:
			case 510:
			case 544:
				{
				this.state = 8021;
				this.opt_asc_desc();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
			this.state = 8024;
			this.opt_nulls_order();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public select_limit(): Select_limitContext {
		let localctx: Select_limitContext = new Select_limitContext(this, this._ctx, this.state);
		this.enterRule(localctx, 998, PostgreSQLParser.RULE_select_limit);
		let _la: number;
		try {
			this.state = 8034;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 61:
			case 74:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8026;
				this.limit_clause();
				this.state = 8028;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===79) {
					{
					this.state = 8027;
					this.offset_clause();
					}
				}

				}
				break;
			case 79:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 8030;
				this.offset_clause();
				this.state = 8032;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 428, this._ctx) ) {
				case 1:
					{
					this.state = 8031;
					this.limit_clause();
					}
					break;
				}
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_select_limit(): Opt_select_limitContext {
		let localctx: Opt_select_limitContext = new Opt_select_limitContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1000, PostgreSQLParser.RULE_opt_select_limit);
		try {
			this.state = 8038;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 430, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8036;
				this.select_limit();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public limit_clause(): Limit_clauseContext {
		let localctx: Limit_clauseContext = new Limit_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1002, PostgreSQLParser.RULE_limit_clause);
		let _la: number;
		try {
			this.state = 8063;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 74:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8040;
				this.match(PostgreSQLParser.LIMIT);
				this.state = 8041;
				this.select_limit_value();
				this.state = 8044;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===6) {
					{
					this.state = 8042;
					this.match(PostgreSQLParser.COMMA);
					this.state = 8043;
					this.select_offset_value();
					}
				}

				}
				break;
			case 61:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 8046;
				this.match(PostgreSQLParser.FETCH);
				this.state = 8047;
				this.first_or_next();
				this.state = 8061;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 434, this._ctx) ) {
				case 1:
					{
					this.state = 8048;
					this.select_fetch_first_value();
					this.state = 8049;
					this.row_or_rows();
					this.state = 8053;
					this._errHandler.sync(this);
					switch (this._input.LA(1)) {
					case 81:
						{
						this.state = 8050;
						this.match(PostgreSQLParser.ONLY);
						}
						break;
					case 105:
						{
						this.state = 8051;
						this.match(PostgreSQLParser.WITH);
						this.state = 8052;
						this.match(PostgreSQLParser.TIES);
						}
						break;
					default:
						throw new NoViableAltException(this);
					}
					}
					break;
				case 2:
					{
					this.state = 8055;
					this.row_or_rows();
					this.state = 8059;
					this._errHandler.sync(this);
					switch (this._input.LA(1)) {
					case 81:
						{
						this.state = 8056;
						this.match(PostgreSQLParser.ONLY);
						}
						break;
					case 105:
						{
						this.state = 8057;
						this.match(PostgreSQLParser.WITH);
						this.state = 8058;
						this.match(PostgreSQLParser.TIES);
						}
						break;
					default:
						throw new NoViableAltException(this);
					}
					}
					break;
				}
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public offset_clause(): Offset_clauseContext {
		let localctx: Offset_clauseContext = new Offset_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1004, PostgreSQLParser.RULE_offset_clause);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8065;
			this.match(PostgreSQLParser.OFFSET);
			this.state = 8070;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 436, this._ctx) ) {
			case 1:
				{
				this.state = 8066;
				this.select_offset_value();
				}
				break;
			case 2:
				{
				this.state = 8067;
				this.select_fetch_first_value();
				this.state = 8068;
				this.row_or_rows();
				}
				break;
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public select_limit_value(): Select_limit_valueContext {
		let localctx: Select_limit_valueContext = new Select_limit_valueContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1006, PostgreSQLParser.RULE_select_limit_value);
		try {
			this.state = 8074;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 2:
			case 12:
			case 13:
			case 28:
			case 29:
			case 33:
			case 35:
			case 40:
			case 41:
			case 43:
			case 44:
			case 45:
			case 47:
			case 48:
			case 49:
			case 50:
			case 51:
			case 52:
			case 53:
			case 57:
			case 60:
			case 61:
			case 75:
			case 76:
			case 77:
			case 78:
			case 89:
			case 92:
			case 96:
			case 98:
			case 99:
			case 106:
			case 107:
			case 108:
			case 109:
			case 110:
			case 111:
			case 112:
			case 113:
			case 114:
			case 115:
			case 116:
			case 117:
			case 118:
			case 119:
			case 120:
			case 121:
			case 122:
			case 123:
			case 124:
			case 125:
			case 126:
			case 127:
			case 128:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 463:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 521:
			case 523:
			case 525:
			case 526:
			case 530:
			case 534:
			case 536:
			case 537:
			case 538:
			case 547:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8072;
				this.a_expr();
				}
				break;
			case 30:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 8073;
				this.match(PostgreSQLParser.ALL);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public select_offset_value(): Select_offset_valueContext {
		let localctx: Select_offset_valueContext = new Select_offset_valueContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1008, PostgreSQLParser.RULE_select_offset_value);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8076;
			this.a_expr();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public select_fetch_first_value(): Select_fetch_first_valueContext {
		let localctx: Select_fetch_first_valueContext = new Select_fetch_first_valueContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1010, PostgreSQLParser.RULE_select_fetch_first_value);
		try {
			this.state = 8083;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 2:
			case 28:
			case 33:
			case 35:
			case 40:
			case 41:
			case 43:
			case 44:
			case 45:
			case 47:
			case 48:
			case 49:
			case 50:
			case 51:
			case 52:
			case 53:
			case 57:
			case 60:
			case 61:
			case 75:
			case 76:
			case 78:
			case 89:
			case 92:
			case 96:
			case 98:
			case 99:
			case 106:
			case 107:
			case 108:
			case 109:
			case 110:
			case 111:
			case 112:
			case 113:
			case 114:
			case 115:
			case 116:
			case 117:
			case 118:
			case 119:
			case 120:
			case 121:
			case 122:
			case 123:
			case 124:
			case 125:
			case 126:
			case 127:
			case 128:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 463:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 521:
			case 523:
			case 525:
			case 526:
			case 530:
			case 534:
			case 536:
			case 537:
			case 538:
			case 547:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8078;
				this.c_expr();
				}
				break;
			case 12:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 8079;
				this.match(PostgreSQLParser.PLUS);
				this.state = 8080;
				this.i_or_f_const();
				}
				break;
			case 13:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 8081;
				this.match(PostgreSQLParser.MINUS);
				this.state = 8082;
				this.i_or_f_const();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public i_or_f_const(): I_or_f_constContext {
		let localctx: I_or_f_constContext = new I_or_f_constContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1012, PostgreSQLParser.RULE_i_or_f_const);
		try {
			this.state = 8087;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 534:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8085;
				this.iconst();
				}
				break;
			case 536:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 8086;
				this.fconst();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public row_or_rows(): Row_or_rowsContext {
		let localctx: Row_or_rowsContext = new Row_or_rowsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1014, PostgreSQLParser.RULE_row_or_rows);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8089;
			_la = this._input.LA(1);
			if(!(_la===311 || _la===405)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public first_or_next(): First_or_nextContext {
		let localctx: First_or_nextContext = new First_or_nextContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1016, PostgreSQLParser.RULE_first_or_next);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8091;
			_la = this._input.LA(1);
			if(!(_la===207 || _la===259)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public group_clause(): Group_clauseContext {
		let localctx: Group_clauseContext = new Group_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1018, PostgreSQLParser.RULE_group_clause);
		try {
			this.state = 8097;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 66:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8093;
				this.match(PostgreSQLParser.GROUP_P);
				this.state = 8094;
				this.match(PostgreSQLParser.BY);
				this.state = 8095;
				this.group_by_list();
				}
				break;
			case -1:
			case 2:
			case 3:
			case 6:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 59:
			case 61:
			case 62:
			case 65:
			case 67:
			case 70:
			case 71:
			case 74:
			case 79:
			case 80:
			case 83:
			case 87:
			case 88:
			case 92:
			case 93:
			case 97:
			case 100:
			case 102:
			case 104:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 510:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public group_by_list(): Group_by_listContext {
		let localctx: Group_by_listContext = new Group_by_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1020, PostgreSQLParser.RULE_group_by_list);
		try {
			let _alt: number;
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8099;
			this.group_by_item();
			this.state = 8104;
			this._errHandler.sync(this);
			_alt = this._interp.adaptivePredict(this._input, 441, this._ctx);
			while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) {
				if (_alt === 1) {
					{
					{
					this.state = 8100;
					this.match(PostgreSQLParser.COMMA);
					this.state = 8101;
					this.group_by_item();
					}
					}
				}
				this.state = 8106;
				this._errHandler.sync(this);
				_alt = this._interp.adaptivePredict(this._input, 441, this._ctx);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public group_by_item(): Group_by_itemContext {
		let localctx: Group_by_itemContext = new Group_by_itemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1022, PostgreSQLParser.RULE_group_by_item);
		try {
			this.state = 8112;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 442, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8107;
				this.a_expr();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 8108;
				this.empty_grouping_set();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 8109;
				this.cube_clause();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 8110;
				this.rollup_clause();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 8111;
				this.grouping_sets_clause();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public empty_grouping_set(): Empty_grouping_setContext {
		let localctx: Empty_grouping_setContext = new Empty_grouping_setContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1024, PostgreSQLParser.RULE_empty_grouping_set);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8114;
			this.match(PostgreSQLParser.OPEN_PAREN);
			this.state = 8115;
			this.match(PostgreSQLParser.CLOSE_PAREN);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public rollup_clause(): Rollup_clauseContext {
		let localctx: Rollup_clauseContext = new Rollup_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1026, PostgreSQLParser.RULE_rollup_clause);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8117;
			this.match(PostgreSQLParser.ROLLUP);
			this.state = 8118;
			this.match(PostgreSQLParser.OPEN_PAREN);
			this.state = 8119;
			this.expr_list();
			this.state = 8120;
			this.match(PostgreSQLParser.CLOSE_PAREN);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public cube_clause(): Cube_clauseContext {
		let localctx: Cube_clauseContext = new Cube_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1028, PostgreSQLParser.RULE_cube_clause);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8122;
			this.match(PostgreSQLParser.CUBE);
			this.state = 8123;
			this.match(PostgreSQLParser.OPEN_PAREN);
			this.state = 8124;
			this.expr_list();
			this.state = 8125;
			this.match(PostgreSQLParser.CLOSE_PAREN);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public grouping_sets_clause(): Grouping_sets_clauseContext {
		let localctx: Grouping_sets_clauseContext = new Grouping_sets_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1030, PostgreSQLParser.RULE_grouping_sets_clause);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8127;
			this.match(PostgreSQLParser.GROUPING);
			this.state = 8128;
			this.match(PostgreSQLParser.SETS);
			this.state = 8129;
			this.match(PostgreSQLParser.OPEN_PAREN);
			this.state = 8130;
			this.group_by_list();
			this.state = 8131;
			this.match(PostgreSQLParser.CLOSE_PAREN);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public having_clause(): Having_clauseContext {
		let localctx: Having_clauseContext = new Having_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1032, PostgreSQLParser.RULE_having_clause);
		try {
			this.state = 8136;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 67:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8133;
				this.match(PostgreSQLParser.HAVING);
				this.state = 8134;
				this.a_expr();
				}
				break;
			case -1:
			case 2:
			case 3:
			case 6:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 59:
			case 61:
			case 62:
			case 65:
			case 70:
			case 71:
			case 74:
			case 79:
			case 80:
			case 83:
			case 87:
			case 88:
			case 92:
			case 93:
			case 97:
			case 100:
			case 102:
			case 104:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 510:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public for_locking_clause(): For_locking_clauseContext {
		let localctx: For_locking_clauseContext = new For_locking_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1034, PostgreSQLParser.RULE_for_locking_clause);
		try {
			this.state = 8142;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 444, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8138;
				this.for_locking_items();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 8139;
				this.match(PostgreSQLParser.FOR);
				this.state = 8140;
				this.match(PostgreSQLParser.READ);
				this.state = 8141;
				this.match(PostgreSQLParser.ONLY);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_for_locking_clause(): Opt_for_locking_clauseContext {
		let localctx: Opt_for_locking_clauseContext = new Opt_for_locking_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1036, PostgreSQLParser.RULE_opt_for_locking_clause);
		try {
			this.state = 8146;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 62:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8144;
				this.for_locking_clause();
				}
				break;
			case -1:
			case 2:
			case 3:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 80:
			case 87:
			case 88:
			case 92:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 510:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public for_locking_items(): For_locking_itemsContext {
		let localctx: For_locking_itemsContext = new For_locking_itemsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1038, PostgreSQLParser.RULE_for_locking_items);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8149;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			do {
				{
				{
				this.state = 8148;
				this.for_locking_item();
				}
				}
				this.state = 8151;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			} while (_la===62);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public for_locking_item(): For_locking_itemContext {
		let localctx: For_locking_itemContext = new For_locking_itemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1040, PostgreSQLParser.RULE_for_locking_item);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8153;
			this.for_locking_strength();
			this.state = 8154;
			this.locked_rels_list();
			this.state = 8155;
			this.opt_nowait_or_skip();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public for_locking_strength(): For_locking_strengthContext {
		let localctx: For_locking_strengthContext = new For_locking_strengthContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1042, PostgreSQLParser.RULE_for_locking_strength);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8157;
			this.match(PostgreSQLParser.FOR);
			this.state = 8167;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 260:
			case 360:
				{
				this.state = 8160;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===260) {
					{
					this.state = 8158;
					this.match(PostgreSQLParser.NO);
					this.state = 8159;
					this.match(PostgreSQLParser.KEY);
					}
				}

				this.state = 8162;
				this.match(PostgreSQLParser.UPDATE);
				}
				break;
			case 236:
			case 325:
				{
				this.state = 8164;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===236) {
					{
					this.state = 8163;
					this.match(PostgreSQLParser.KEY);
					}
				}

				this.state = 8166;
				this.match(PostgreSQLParser.SHARE);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public locked_rels_list(): Locked_rels_listContext {
		let localctx: Locked_rels_listContext = new Locked_rels_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1044, PostgreSQLParser.RULE_locked_rels_list);
		try {
			this.state = 8172;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 266:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8169;
				this.match(PostgreSQLParser.OF);
				this.state = 8170;
				this.qualified_name_list();
				}
				break;
			case -1:
			case 2:
			case 3:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 62:
			case 65:
			case 71:
			case 74:
			case 79:
			case 80:
			case 87:
			case 88:
			case 92:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 263:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 456:
			case 510:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public values_clause(): Values_clauseContext {
		let localctx: Values_clauseContext = new Values_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1046, PostgreSQLParser.RULE_values_clause);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8174;
			this.match(PostgreSQLParser.VALUES);
			this.state = 8175;
			this.match(PostgreSQLParser.OPEN_PAREN);
			this.state = 8176;
			this.expr_list();
			this.state = 8177;
			this.match(PostgreSQLParser.CLOSE_PAREN);
			this.state = 8185;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 8178;
				this.match(PostgreSQLParser.COMMA);
				this.state = 8179;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 8180;
				this.expr_list();
				this.state = 8181;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				}
				this.state = 8187;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public from_clause(): From_clauseContext {
		let localctx: From_clauseContext = new From_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1048, PostgreSQLParser.RULE_from_clause);
		try {
			this.state = 8191;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 64:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8188;
				this.match(PostgreSQLParser.FROM);
				this.state = 8189;
				this.from_list();
				}
				break;
			case -1:
			case 2:
			case 3:
			case 6:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 59:
			case 61:
			case 62:
			case 65:
			case 66:
			case 67:
			case 70:
			case 71:
			case 74:
			case 79:
			case 80:
			case 83:
			case 87:
			case 88:
			case 92:
			case 93:
			case 97:
			case 100:
			case 102:
			case 103:
			case 104:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 510:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public from_list(): From_listContext {
		let localctx: From_listContext = new From_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1050, PostgreSQLParser.RULE_from_list);
		try {
			let _alt: number;
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8193;
			this.table_ref();
			this.state = 8198;
			this._errHandler.sync(this);
			_alt = this._interp.adaptivePredict(this._input, 453, this._ctx);
			while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) {
				if (_alt === 1) {
					{
					{
					this.state = 8194;
					this.match(PostgreSQLParser.COMMA);
					this.state = 8195;
					this.table_ref();
					}
					}
				}
				this.state = 8200;
				this._errHandler.sync(this);
				_alt = this._interp.adaptivePredict(this._input, 453, this._ctx);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public table_ref(): Table_refContext {
		let localctx: Table_refContext = new Table_refContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1052, PostgreSQLParser.RULE_table_ref);
		let _la: number;
		try {
			let _alt: number;
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8250;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 459, this._ctx) ) {
			case 1:
				{
				this.state = 8201;
				this.relation_expr();
				this.state = 8202;
				this.opt_alias_clause();
				this.state = 8204;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===463) {
					{
					this.state = 8203;
					this.tablesample_clause();
					}
				}

				}
				break;
			case 2:
				{
				this.state = 8206;
				this.func_table();
				this.state = 8207;
				this.func_alias_clause();
				}
				break;
			case 3:
				{
				this.state = 8209;
				this.xmltable();
				this.state = 8210;
				this.opt_alias_clause();
				}
				break;
			case 4:
				{
				this.state = 8212;
				this.select_with_parens();
				this.state = 8213;
				this.opt_alias_clause();
				}
				break;
			case 5:
				{
				this.state = 8215;
				this.match(PostgreSQLParser.LATERAL_P);
				this.state = 8225;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 455, this._ctx) ) {
				case 1:
					{
					this.state = 8216;
					this.xmltable();
					this.state = 8217;
					this.opt_alias_clause();
					}
					break;
				case 2:
					{
					this.state = 8219;
					this.func_table();
					this.state = 8220;
					this.func_alias_clause();
					}
					break;
				case 3:
					{
					this.state = 8222;
					this.select_with_parens();
					this.state = 8223;
					this.opt_alias_clause();
					}
					break;
				}
				}
				break;
			case 6:
				{
				this.state = 8227;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 8228;
				this.table_ref();
				this.state = 8245;
				this._errHandler.sync(this);
				switch (this._input.LA(1)) {
				case 110:
					{
					this.state = 8229;
					this.match(PostgreSQLParser.CROSS);
					this.state = 8230;
					this.match(PostgreSQLParser.JOIN);
					this.state = 8231;
					this.table_ref();
					}
					break;
				case 121:
					{
					this.state = 8232;
					this.match(PostgreSQLParser.NATURAL);
					this.state = 8234;
					this._errHandler.sync(this);
					_la = this._input.LA(1);
					if (((((_la - 113)) & ~0x1F) === 0 && ((1 << (_la - 113)) & 8261) !== 0)) {
						{
						this.state = 8233;
						this.join_type();
						}
					}

					this.state = 8236;
					this.match(PostgreSQLParser.JOIN);
					this.state = 8237;
					this.table_ref();
					}
					break;
				case 113:
				case 115:
				case 118:
				case 119:
				case 126:
					{
					this.state = 8239;
					this._errHandler.sync(this);
					_la = this._input.LA(1);
					if (((((_la - 113)) & ~0x1F) === 0 && ((1 << (_la - 113)) & 8261) !== 0)) {
						{
						this.state = 8238;
						this.join_type();
						}
					}

					this.state = 8241;
					this.match(PostgreSQLParser.JOIN);
					this.state = 8242;
					this.table_ref();
					this.state = 8243;
					this.join_qual();
					}
					break;
				case 3:
					break;
				default:
					break;
				}
				this.state = 8247;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 8248;
				this.opt_alias_clause();
				}
				break;
			}
			this.state = 8270;
			this._errHandler.sync(this);
			_alt = this._interp.adaptivePredict(this._input, 463, this._ctx);
			while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) {
				if (_alt === 1) {
					{
					this.state = 8268;
					this._errHandler.sync(this);
					switch (this._input.LA(1)) {
					case 110:
						{
						this.state = 8252;
						this.match(PostgreSQLParser.CROSS);
						this.state = 8253;
						this.match(PostgreSQLParser.JOIN);
						this.state = 8254;
						this.table_ref();
						}
						break;
					case 121:
						{
						this.state = 8255;
						this.match(PostgreSQLParser.NATURAL);
						this.state = 8257;
						this._errHandler.sync(this);
						_la = this._input.LA(1);
						if (((((_la - 113)) & ~0x1F) === 0 && ((1 << (_la - 113)) & 8261) !== 0)) {
							{
							this.state = 8256;
							this.join_type();
							}
						}

						this.state = 8259;
						this.match(PostgreSQLParser.JOIN);
						this.state = 8260;
						this.table_ref();
						}
						break;
					case 113:
					case 115:
					case 118:
					case 119:
					case 126:
						{
						this.state = 8262;
						this._errHandler.sync(this);
						_la = this._input.LA(1);
						if (((((_la - 113)) & ~0x1F) === 0 && ((1 << (_la - 113)) & 8261) !== 0)) {
							{
							this.state = 8261;
							this.join_type();
							}
						}

						this.state = 8264;
						this.match(PostgreSQLParser.JOIN);
						this.state = 8265;
						this.table_ref();
						this.state = 8266;
						this.join_qual();
						}
						break;
					default:
						throw new NoViableAltException(this);
					}
					}
				}
				this.state = 8272;
				this._errHandler.sync(this);
				_alt = this._interp.adaptivePredict(this._input, 463, this._ctx);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public alias_clause(): Alias_clauseContext {
		let localctx: Alias_clauseContext = new Alias_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1054, PostgreSQLParser.RULE_alias_clause);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8274;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			if (_la===36) {
				{
				this.state = 8273;
				this.match(PostgreSQLParser.AS);
				}
			}

			this.state = 8276;
			this.colid();
			this.state = 8281;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 465, this._ctx) ) {
			case 1:
				{
				this.state = 8277;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 8278;
				this.name_list();
				this.state = 8279;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_alias_clause(): Opt_alias_clauseContext {
		let localctx: Opt_alias_clauseContext = new Opt_alias_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1056, PostgreSQLParser.RULE_opt_alias_clause);
		try {
			this.state = 8285;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 466, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8283;
				this.alias_clause();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public func_alias_clause(): Func_alias_clauseContext {
		let localctx: Func_alias_clauseContext = new Func_alias_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1058, PostgreSQLParser.RULE_func_alias_clause);
		let _la: number;
		try {
			this.state = 8300;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 469, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8287;
				this.alias_clause();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 8293;
				this._errHandler.sync(this);
				switch (this._input.LA(1)) {
				case 36:
					{
					this.state = 8288;
					this.match(PostgreSQLParser.AS);
					this.state = 8290;
					this._errHandler.sync(this);
					_la = this._input.LA(1);
					if (((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 286268421) !== 0) || ((((_la - 92)) & ~0x1F) === 0 && ((1 << (_la - 92)) & 2164260865) !== 0) || ((((_la - 124)) & ~0x1F) === 0 && ((1 << (_la - 124)) & 4294967265) !== 0) || ((((_la - 156)) & ~0x1F) === 0 && ((1 << (_la - 156)) & 4294967295) !== 0) || ((((_la - 188)) & ~0x1F) === 0 && ((1 << (_la - 188)) & 4294967295) !== 0) || ((((_la - 220)) & ~0x1F) === 0 && ((1 << (_la - 220)) & 4294967295) !== 0) || ((((_la - 252)) & ~0x1F) === 0 && ((1 << (_la - 252)) & 4294967295) !== 0) || ((((_la - 284)) & ~0x1F) === 0 && ((1 << (_la - 284)) & 4294967295) !== 0) || ((((_la - 316)) & ~0x1F) === 0 && ((1 << (_la - 316)) & 4294967295) !== 0) || ((((_la - 348)) & ~0x1F) === 0 && ((1 << (_la - 348)) & 4294967295) !== 0) || ((((_la - 380)) & ~0x1F) === 0 && ((1 << (_la - 380)) & 4294967295) !== 0) || ((((_la - 412)) & ~0x1F) === 0 && ((1 << (_la - 412)) & 4294967295) !== 0) || ((((_la - 444)) & ~0x1F) === 0 && ((1 << (_la - 444)) & 4294443005) !== 0) || ((((_la - 476)) & ~0x1F) === 0 && ((1 << (_la - 476)) & 4293656575) !== 0) || ((((_la - 508)) & ~0x1F) === 0 && ((1 << (_la - 508)) & 1610613307) !== 0)) {
						{
						this.state = 8289;
						this.colid();
						}
					}

					}
					break;
				case 33:
				case 35:
				case 43:
				case 44:
				case 45:
				case 53:
				case 57:
				case 61:
				case 92:
				case 116:
				case 123:
				case 124:
				case 129:
				case 130:
				case 131:
				case 132:
				case 133:
				case 134:
				case 135:
				case 136:
				case 137:
				case 138:
				case 139:
				case 140:
				case 141:
				case 142:
				case 143:
				case 144:
				case 145:
				case 146:
				case 147:
				case 148:
				case 149:
				case 150:
				case 151:
				case 152:
				case 153:
				case 154:
				case 155:
				case 156:
				case 157:
				case 158:
				case 159:
				case 160:
				case 161:
				case 162:
				case 163:
				case 164:
				case 165:
				case 166:
				case 167:
				case 168:
				case 169:
				case 170:
				case 171:
				case 172:
				case 173:
				case 174:
				case 175:
				case 176:
				case 177:
				case 178:
				case 179:
				case 180:
				case 181:
				case 182:
				case 183:
				case 184:
				case 185:
				case 186:
				case 187:
				case 188:
				case 189:
				case 190:
				case 191:
				case 192:
				case 193:
				case 194:
				case 195:
				case 196:
				case 197:
				case 198:
				case 199:
				case 200:
				case 201:
				case 202:
				case 203:
				case 204:
				case 205:
				case 206:
				case 207:
				case 208:
				case 209:
				case 210:
				case 211:
				case 212:
				case 213:
				case 214:
				case 215:
				case 216:
				case 217:
				case 218:
				case 219:
				case 220:
				case 221:
				case 222:
				case 223:
				case 224:
				case 225:
				case 226:
				case 227:
				case 228:
				case 229:
				case 230:
				case 231:
				case 232:
				case 233:
				case 234:
				case 235:
				case 236:
				case 237:
				case 238:
				case 239:
				case 240:
				case 241:
				case 242:
				case 243:
				case 244:
				case 245:
				case 246:
				case 247:
				case 248:
				case 249:
				case 250:
				case 251:
				case 252:
				case 253:
				case 254:
				case 255:
				case 256:
				case 257:
				case 258:
				case 259:
				case 260:
				case 261:
				case 262:
				case 263:
				case 264:
				case 265:
				case 266:
				case 267:
				case 268:
				case 269:
				case 270:
				case 271:
				case 272:
				case 273:
				case 274:
				case 275:
				case 276:
				case 277:
				case 278:
				case 279:
				case 280:
				case 281:
				case 282:
				case 283:
				case 284:
				case 285:
				case 286:
				case 287:
				case 288:
				case 289:
				case 290:
				case 291:
				case 292:
				case 293:
				case 294:
				case 295:
				case 296:
				case 297:
				case 298:
				case 299:
				case 300:
				case 301:
				case 302:
				case 303:
				case 304:
				case 305:
				case 306:
				case 307:
				case 308:
				case 309:
				case 310:
				case 311:
				case 312:
				case 313:
				case 314:
				case 315:
				case 316:
				case 317:
				case 318:
				case 319:
				case 320:
				case 321:
				case 322:
				case 323:
				case 324:
				case 325:
				case 326:
				case 327:
				case 328:
				case 329:
				case 330:
				case 331:
				case 332:
				case 333:
				case 334:
				case 335:
				case 336:
				case 337:
				case 338:
				case 339:
				case 340:
				case 341:
				case 342:
				case 343:
				case 344:
				case 345:
				case 346:
				case 347:
				case 348:
				case 349:
				case 350:
				case 351:
				case 352:
				case 353:
				case 354:
				case 355:
				case 356:
				case 357:
				case 358:
				case 359:
				case 360:
				case 361:
				case 362:
				case 363:
				case 364:
				case 365:
				case 366:
				case 367:
				case 368:
				case 369:
				case 370:
				case 371:
				case 372:
				case 373:
				case 374:
				case 375:
				case 376:
				case 377:
				case 378:
				case 379:
				case 380:
				case 381:
				case 382:
				case 383:
				case 384:
				case 385:
				case 386:
				case 387:
				case 388:
				case 389:
				case 390:
				case 391:
				case 392:
				case 393:
				case 394:
				case 395:
				case 396:
				case 397:
				case 398:
				case 399:
				case 400:
				case 401:
				case 402:
				case 403:
				case 404:
				case 405:
				case 406:
				case 407:
				case 408:
				case 409:
				case 410:
				case 411:
				case 412:
				case 413:
				case 414:
				case 415:
				case 416:
				case 417:
				case 418:
				case 419:
				case 420:
				case 421:
				case 422:
				case 423:
				case 424:
				case 425:
				case 426:
				case 427:
				case 428:
				case 429:
				case 430:
				case 431:
				case 432:
				case 433:
				case 434:
				case 435:
				case 436:
				case 437:
				case 438:
				case 439:
				case 440:
				case 441:
				case 442:
				case 443:
				case 444:
				case 446:
				case 447:
				case 448:
				case 449:
				case 450:
				case 451:
				case 452:
				case 453:
				case 454:
				case 455:
				case 456:
				case 457:
				case 458:
				case 459:
				case 460:
				case 461:
				case 462:
				case 464:
				case 465:
				case 466:
				case 467:
				case 468:
				case 469:
				case 470:
				case 471:
				case 472:
				case 473:
				case 474:
				case 475:
				case 476:
				case 477:
				case 478:
				case 479:
				case 480:
				case 481:
				case 482:
				case 483:
				case 484:
				case 485:
				case 486:
				case 487:
				case 488:
				case 489:
				case 490:
				case 491:
				case 492:
				case 493:
				case 495:
				case 497:
				case 498:
				case 499:
				case 500:
				case 501:
				case 502:
				case 503:
				case 504:
				case 505:
				case 506:
				case 507:
				case 508:
				case 509:
				case 511:
				case 512:
				case 513:
				case 517:
				case 537:
				case 538:
					{
					this.state = 8292;
					this.colid();
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				this.state = 8295;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 8296;
				this.tablefuncelementlist();
				this.state = 8297;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public join_type(): Join_typeContext {
		let localctx: Join_typeContext = new Join_typeContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1060, PostgreSQLParser.RULE_join_type);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8302;
			_la = this._input.LA(1);
			if(!(((((_la - 113)) & ~0x1F) === 0 && ((1 << (_la - 113)) & 8261) !== 0))) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			this.state = 8304;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			if (_la===123) {
				{
				this.state = 8303;
				this.match(PostgreSQLParser.OUTER_P);
				}
			}

			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public join_qual(): Join_qualContext {
		let localctx: Join_qualContext = new Join_qualContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1062, PostgreSQLParser.RULE_join_qual);
		try {
			this.state = 8313;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 100:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8306;
				this.match(PostgreSQLParser.USING);
				this.state = 8307;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 8308;
				this.name_list();
				this.state = 8309;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 80:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 8311;
				this.match(PostgreSQLParser.ON);
				this.state = 8312;
				this.a_expr();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public relation_expr(): Relation_exprContext {
		let localctx: Relation_exprContext = new Relation_exprContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1064, PostgreSQLParser.RULE_relation_expr);
		let _la: number;
		try {
			this.state = 8327;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 92:
			case 116:
			case 123:
			case 124:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8315;
				this.qualified_name();
				this.state = 8317;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===9) {
					{
					this.state = 8316;
					this.match(PostgreSQLParser.STAR);
					}
				}

				}
				break;
			case 81:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 8319;
				this.match(PostgreSQLParser.ONLY);
				this.state = 8325;
				this._errHandler.sync(this);
				switch (this._input.LA(1)) {
				case 33:
				case 35:
				case 43:
				case 44:
				case 45:
				case 53:
				case 57:
				case 61:
				case 92:
				case 116:
				case 123:
				case 124:
				case 129:
				case 130:
				case 131:
				case 132:
				case 133:
				case 134:
				case 135:
				case 136:
				case 137:
				case 138:
				case 139:
				case 140:
				case 141:
				case 142:
				case 143:
				case 144:
				case 145:
				case 146:
				case 147:
				case 148:
				case 149:
				case 150:
				case 151:
				case 152:
				case 153:
				case 154:
				case 155:
				case 156:
				case 157:
				case 158:
				case 159:
				case 160:
				case 161:
				case 162:
				case 163:
				case 164:
				case 165:
				case 166:
				case 167:
				case 168:
				case 169:
				case 170:
				case 171:
				case 172:
				case 173:
				case 174:
				case 175:
				case 176:
				case 177:
				case 178:
				case 179:
				case 180:
				case 181:
				case 182:
				case 183:
				case 184:
				case 185:
				case 186:
				case 187:
				case 188:
				case 189:
				case 190:
				case 191:
				case 192:
				case 193:
				case 194:
				case 195:
				case 196:
				case 197:
				case 198:
				case 199:
				case 200:
				case 201:
				case 202:
				case 203:
				case 204:
				case 205:
				case 206:
				case 207:
				case 208:
				case 209:
				case 210:
				case 211:
				case 212:
				case 213:
				case 214:
				case 215:
				case 216:
				case 217:
				case 218:
				case 219:
				case 220:
				case 221:
				case 222:
				case 223:
				case 224:
				case 225:
				case 226:
				case 227:
				case 228:
				case 229:
				case 230:
				case 231:
				case 232:
				case 233:
				case 234:
				case 235:
				case 236:
				case 237:
				case 238:
				case 239:
				case 240:
				case 241:
				case 242:
				case 243:
				case 244:
				case 245:
				case 246:
				case 247:
				case 248:
				case 249:
				case 250:
				case 251:
				case 252:
				case 253:
				case 254:
				case 255:
				case 256:
				case 257:
				case 258:
				case 259:
				case 260:
				case 261:
				case 262:
				case 263:
				case 264:
				case 265:
				case 266:
				case 267:
				case 268:
				case 269:
				case 270:
				case 271:
				case 272:
				case 273:
				case 274:
				case 275:
				case 276:
				case 277:
				case 278:
				case 279:
				case 280:
				case 281:
				case 282:
				case 283:
				case 284:
				case 285:
				case 286:
				case 287:
				case 288:
				case 289:
				case 290:
				case 291:
				case 292:
				case 293:
				case 294:
				case 295:
				case 296:
				case 297:
				case 298:
				case 299:
				case 300:
				case 301:
				case 302:
				case 303:
				case 304:
				case 305:
				case 306:
				case 307:
				case 308:
				case 309:
				case 310:
				case 311:
				case 312:
				case 313:
				case 314:
				case 315:
				case 316:
				case 317:
				case 318:
				case 319:
				case 320:
				case 321:
				case 322:
				case 323:
				case 324:
				case 325:
				case 326:
				case 327:
				case 328:
				case 329:
				case 330:
				case 331:
				case 332:
				case 333:
				case 334:
				case 335:
				case 336:
				case 337:
				case 338:
				case 339:
				case 340:
				case 341:
				case 342:
				case 343:
				case 344:
				case 345:
				case 346:
				case 347:
				case 348:
				case 349:
				case 350:
				case 351:
				case 352:
				case 353:
				case 354:
				case 355:
				case 356:
				case 357:
				case 358:
				case 359:
				case 360:
				case 361:
				case 362:
				case 363:
				case 364:
				case 365:
				case 366:
				case 367:
				case 368:
				case 369:
				case 370:
				case 371:
				case 372:
				case 373:
				case 374:
				case 375:
				case 376:
				case 377:
				case 378:
				case 379:
				case 380:
				case 381:
				case 382:
				case 383:
				case 384:
				case 385:
				case 386:
				case 387:
				case 388:
				case 389:
				case 390:
				case 391:
				case 392:
				case 393:
				case 394:
				case 395:
				case 396:
				case 397:
				case 398:
				case 399:
				case 400:
				case 401:
				case 402:
				case 403:
				case 404:
				case 405:
				case 406:
				case 407:
				case 408:
				case 409:
				case 410:
				case 411:
				case 412:
				case 413:
				case 414:
				case 415:
				case 416:
				case 417:
				case 418:
				case 419:
				case 420:
				case 421:
				case 422:
				case 423:
				case 424:
				case 425:
				case 426:
				case 427:
				case 428:
				case 429:
				case 430:
				case 431:
				case 432:
				case 433:
				case 434:
				case 435:
				case 436:
				case 437:
				case 438:
				case 439:
				case 440:
				case 441:
				case 442:
				case 443:
				case 444:
				case 446:
				case 447:
				case 448:
				case 449:
				case 450:
				case 451:
				case 452:
				case 453:
				case 454:
				case 455:
				case 456:
				case 457:
				case 458:
				case 459:
				case 460:
				case 461:
				case 462:
				case 464:
				case 465:
				case 466:
				case 467:
				case 468:
				case 469:
				case 470:
				case 471:
				case 472:
				case 473:
				case 474:
				case 475:
				case 476:
				case 477:
				case 478:
				case 479:
				case 480:
				case 481:
				case 482:
				case 483:
				case 484:
				case 485:
				case 486:
				case 487:
				case 488:
				case 489:
				case 490:
				case 491:
				case 492:
				case 493:
				case 495:
				case 497:
				case 498:
				case 499:
				case 500:
				case 501:
				case 502:
				case 503:
				case 504:
				case 505:
				case 506:
				case 507:
				case 508:
				case 509:
				case 511:
				case 512:
				case 513:
				case 517:
				case 537:
				case 538:
					{
					this.state = 8320;
					this.qualified_name();
					}
					break;
				case 2:
					{
					this.state = 8321;
					this.match(PostgreSQLParser.OPEN_PAREN);
					this.state = 8322;
					this.qualified_name();
					this.state = 8323;
					this.match(PostgreSQLParser.CLOSE_PAREN);
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public relation_expr_list(): Relation_expr_listContext {
		let localctx: Relation_expr_listContext = new Relation_expr_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1066, PostgreSQLParser.RULE_relation_expr_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8329;
			this.relation_expr();
			this.state = 8334;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 8330;
				this.match(PostgreSQLParser.COMMA);
				this.state = 8331;
				this.relation_expr();
				}
				}
				this.state = 8336;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public relation_expr_opt_alias(): Relation_expr_opt_aliasContext {
		let localctx: Relation_expr_opt_aliasContext = new Relation_expr_opt_aliasContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1068, PostgreSQLParser.RULE_relation_expr_opt_alias);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8337;
			this.relation_expr();
			this.state = 8342;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 477, this._ctx) ) {
			case 1:
				{
				this.state = 8339;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===36) {
					{
					this.state = 8338;
					this.match(PostgreSQLParser.AS);
					}
				}

				this.state = 8341;
				this.colid();
				}
				break;
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public tablesample_clause(): Tablesample_clauseContext {
		let localctx: Tablesample_clauseContext = new Tablesample_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1070, PostgreSQLParser.RULE_tablesample_clause);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8344;
			this.match(PostgreSQLParser.TABLESAMPLE);
			this.state = 8345;
			this.func_name();
			this.state = 8346;
			this.match(PostgreSQLParser.OPEN_PAREN);
			this.state = 8347;
			this.expr_list();
			this.state = 8348;
			this.match(PostgreSQLParser.CLOSE_PAREN);
			this.state = 8349;
			this.opt_repeatable_clause();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_repeatable_clause(): Opt_repeatable_clauseContext {
		let localctx: Opt_repeatable_clauseContext = new Opt_repeatable_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1072, PostgreSQLParser.RULE_opt_repeatable_clause);
		try {
			this.state = 8357;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 301:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8351;
				this.match(PostgreSQLParser.REPEATABLE);
				this.state = 8352;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 8353;
				this.a_expr();
				this.state = 8354;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case -1:
			case 2:
			case 3:
			case 6:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 59:
			case 61:
			case 62:
			case 65:
			case 66:
			case 67:
			case 70:
			case 71:
			case 74:
			case 79:
			case 80:
			case 83:
			case 87:
			case 88:
			case 92:
			case 93:
			case 97:
			case 100:
			case 102:
			case 103:
			case 104:
			case 105:
			case 110:
			case 113:
			case 115:
			case 118:
			case 119:
			case 121:
			case 126:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 510:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public func_table(): Func_tableContext {
		let localctx: Func_tableContext = new Func_tableContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1074, PostgreSQLParser.RULE_func_table);
		try {
			this.state = 8369;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 479, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8359;
				this.func_expr_windowless();
				this.state = 8360;
				this.opt_ordinality();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 8362;
				this.match(PostgreSQLParser.ROWS);
				this.state = 8363;
				this.match(PostgreSQLParser.FROM);
				this.state = 8364;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 8365;
				this.rowsfrom_list();
				this.state = 8366;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 8367;
				this.opt_ordinality();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public rowsfrom_item(): Rowsfrom_itemContext {
		let localctx: Rowsfrom_itemContext = new Rowsfrom_itemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1076, PostgreSQLParser.RULE_rowsfrom_item);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8371;
			this.func_expr_windowless();
			this.state = 8372;
			this.opt_col_def_list();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public rowsfrom_list(): Rowsfrom_listContext {
		let localctx: Rowsfrom_listContext = new Rowsfrom_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1078, PostgreSQLParser.RULE_rowsfrom_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8374;
			this.rowsfrom_item();
			this.state = 8379;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 8375;
				this.match(PostgreSQLParser.COMMA);
				this.state = 8376;
				this.rowsfrom_item();
				}
				}
				this.state = 8381;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_col_def_list(): Opt_col_def_listContext {
		let localctx: Opt_col_def_listContext = new Opt_col_def_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1080, PostgreSQLParser.RULE_opt_col_def_list);
		try {
			this.state = 8388;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 36:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8382;
				this.match(PostgreSQLParser.AS);
				this.state = 8383;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 8384;
				this.tablefuncelementlist();
				this.state = 8385;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 3:
			case 6:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_ordinality(): Opt_ordinalityContext {
		let localctx: Opt_ordinalityContext = new Opt_ordinalityContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1082, PostgreSQLParser.RULE_opt_ordinality);
		try {
			this.state = 8393;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 482, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8390;
				this.match(PostgreSQLParser.WITH);
				this.state = 8391;
				this.match(PostgreSQLParser.ORDINALITY);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public where_clause(): Where_clauseContext {
		let localctx: Where_clauseContext = new Where_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1084, PostgreSQLParser.RULE_where_clause);
		try {
			this.state = 8398;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 103:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8395;
				this.match(PostgreSQLParser.WHERE);
				this.state = 8396;
				this.a_expr();
				}
				break;
			case -1:
			case 2:
			case 3:
			case 6:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 59:
			case 61:
			case 62:
			case 65:
			case 66:
			case 67:
			case 70:
			case 71:
			case 74:
			case 79:
			case 80:
			case 83:
			case 87:
			case 88:
			case 92:
			case 93:
			case 97:
			case 100:
			case 102:
			case 104:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 510:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public where_or_current_clause(): Where_or_current_clauseContext {
		let localctx: Where_or_current_clauseContext = new Where_or_current_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1086, PostgreSQLParser.RULE_where_or_current_clause);
		try {
			this.state = 8408;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 103:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8400;
				this.match(PostgreSQLParser.WHERE);
				this.state = 8405;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 484, this._ctx) ) {
				case 1:
					{
					this.state = 8401;
					this.match(PostgreSQLParser.CURRENT_P);
					this.state = 8402;
					this.match(PostgreSQLParser.OF);
					this.state = 8403;
					this.cursor_name();
					}
					break;
				case 2:
					{
					this.state = 8404;
					this.a_expr();
					}
					break;
				}
				}
				break;
			case -1:
			case 2:
			case 3:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 61:
			case 65:
			case 71:
			case 87:
			case 88:
			case 92:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 510:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opttablefuncelementlist(): OpttablefuncelementlistContext {
		let localctx: OpttablefuncelementlistContext = new OpttablefuncelementlistContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1088, PostgreSQLParser.RULE_opttablefuncelementlist);
		try {
			this.state = 8412;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 92:
			case 116:
			case 123:
			case 124:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8410;
				this.tablefuncelementlist();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public tablefuncelementlist(): TablefuncelementlistContext {
		let localctx: TablefuncelementlistContext = new TablefuncelementlistContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1090, PostgreSQLParser.RULE_tablefuncelementlist);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8414;
			this.tablefuncelement();
			this.state = 8419;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 8415;
				this.match(PostgreSQLParser.COMMA);
				this.state = 8416;
				this.tablefuncelement();
				}
				}
				this.state = 8421;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public tablefuncelement(): TablefuncelementContext {
		let localctx: TablefuncelementContext = new TablefuncelementContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1092, PostgreSQLParser.RULE_tablefuncelement);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8422;
			this.colid();
			this.state = 8423;
			this.typename();
			this.state = 8424;
			this.opt_collate_clause();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public xmltable(): XmltableContext {
		let localctx: XmltableContext = new XmltableContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1094, PostgreSQLParser.RULE_xmltable);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8426;
			this.match(PostgreSQLParser.XMLTABLE);
			this.state = 8427;
			this.match(PostgreSQLParser.OPEN_PAREN);
			this.state = 8443;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 488, this._ctx) ) {
			case 1:
				{
				this.state = 8428;
				this.c_expr();
				this.state = 8429;
				this.xmlexists_argument();
				this.state = 8430;
				this.match(PostgreSQLParser.COLUMNS);
				this.state = 8431;
				this.xmltable_column_list();
				}
				break;
			case 2:
				{
				this.state = 8433;
				this.match(PostgreSQLParser.XMLNAMESPACES);
				this.state = 8434;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 8435;
				this.xml_namespace_list();
				this.state = 8436;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 8437;
				this.match(PostgreSQLParser.COMMA);
				this.state = 8438;
				this.c_expr();
				this.state = 8439;
				this.xmlexists_argument();
				this.state = 8440;
				this.match(PostgreSQLParser.COLUMNS);
				this.state = 8441;
				this.xmltable_column_list();
				}
				break;
			}
			this.state = 8445;
			this.match(PostgreSQLParser.CLOSE_PAREN);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public xmltable_column_list(): Xmltable_column_listContext {
		let localctx: Xmltable_column_listContext = new Xmltable_column_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1096, PostgreSQLParser.RULE_xmltable_column_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8447;
			this.xmltable_column_el();
			this.state = 8452;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 8448;
				this.match(PostgreSQLParser.COMMA);
				this.state = 8449;
				this.xmltable_column_el();
				}
				}
				this.state = 8454;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public xmltable_column_el(): Xmltable_column_elContext {
		let localctx: Xmltable_column_elContext = new Xmltable_column_elContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1098, PostgreSQLParser.RULE_xmltable_column_el);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8455;
			this.colid();
			this.state = 8462;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 92:
			case 106:
			case 107:
			case 108:
			case 109:
			case 110:
			case 111:
			case 112:
			case 113:
			case 114:
			case 115:
			case 116:
			case 117:
			case 118:
			case 119:
			case 120:
			case 121:
			case 122:
			case 123:
			case 124:
			case 125:
			case 126:
			case 127:
			case 128:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 463:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
				{
				this.state = 8456;
				this.typename();
				this.state = 8458;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 286268421) !== 0) || ((((_la - 77)) & ~0x1F) === 0 && ((1 << (_la - 77)) & 32771) !== 0) || ((((_la - 116)) & ~0x1F) === 0 && ((1 << (_la - 116)) & 268451969) !== 0) || ((((_la - 153)) & ~0x1F) === 0 && ((1 << (_la - 153)) & 540945) !== 0) || ((((_la - 207)) & ~0x1F) === 0 && ((1 << (_la - 207)) & 33554441) !== 0) || ((((_la - 240)) & ~0x1F) === 0 && ((1 << (_la - 240)) & 1075380225) !== 0) || ((((_la - 284)) & ~0x1F) === 0 && ((1 << (_la - 284)) & 3289399297) !== 0) || _la===324 || _la===351 || _la===424 || _la===425 || ((((_la - 468)) & ~0x1F) === 0 && ((1 << (_la - 468)) & 3959414785) !== 0) || ((((_la - 500)) & ~0x1F) === 0 && ((1 << (_la - 500)) & 146431) !== 0) || _la===537 || _la===538) {
					{
					this.state = 8457;
					this.xmltable_column_option_list();
					}
				}

				}
				break;
			case 62:
				{
				this.state = 8460;
				this.match(PostgreSQLParser.FOR);
				this.state = 8461;
				this.match(PostgreSQLParser.ORDINALITY);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public xmltable_column_option_list(): Xmltable_column_option_listContext {
		let localctx: Xmltable_column_option_listContext = new Xmltable_column_option_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1100, PostgreSQLParser.RULE_xmltable_column_option_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8465;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			do {
				{
				{
				this.state = 8464;
				this.xmltable_column_option_el();
				}
				}
				this.state = 8467;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			} while (((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 286268421) !== 0) || ((((_la - 77)) & ~0x1F) === 0 && ((1 << (_la - 77)) & 32771) !== 0) || ((((_la - 116)) & ~0x1F) === 0 && ((1 << (_la - 116)) & 268451969) !== 0) || ((((_la - 153)) & ~0x1F) === 0 && ((1 << (_la - 153)) & 540945) !== 0) || ((((_la - 207)) & ~0x1F) === 0 && ((1 << (_la - 207)) & 33554441) !== 0) || ((((_la - 240)) & ~0x1F) === 0 && ((1 << (_la - 240)) & 1075380225) !== 0) || ((((_la - 284)) & ~0x1F) === 0 && ((1 << (_la - 284)) & 3289399297) !== 0) || _la===324 || _la===351 || _la===424 || _la===425 || ((((_la - 468)) & ~0x1F) === 0 && ((1 << (_la - 468)) & 3959414785) !== 0) || ((((_la - 500)) & ~0x1F) === 0 && ((1 << (_la - 500)) & 146431) !== 0) || _la===537 || _la===538);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public xmltable_column_option_el(): Xmltable_column_option_elContext {
		let localctx: Xmltable_column_option_elContext = new Xmltable_column_option_elContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1102, PostgreSQLParser.RULE_xmltable_column_option_el);
		try {
			this.state = 8477;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 493, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8469;
				this.match(PostgreSQLParser.DEFAULT);
				this.state = 8470;
				this.a_expr();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 8471;
				this.identifier();
				this.state = 8472;
				this.a_expr();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 8474;
				this.match(PostgreSQLParser.NOT);
				this.state = 8475;
				this.match(PostgreSQLParser.NULL_P);
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 8476;
				this.match(PostgreSQLParser.NULL_P);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public xml_namespace_list(): Xml_namespace_listContext {
		let localctx: Xml_namespace_listContext = new Xml_namespace_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1104, PostgreSQLParser.RULE_xml_namespace_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8479;
			this.xml_namespace_el();
			this.state = 8484;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 8480;
				this.match(PostgreSQLParser.COMMA);
				this.state = 8481;
				this.xml_namespace_el();
				}
				}
				this.state = 8486;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public xml_namespace_el(): Xml_namespace_elContext {
		let localctx: Xml_namespace_elContext = new Xml_namespace_elContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1106, PostgreSQLParser.RULE_xml_namespace_el);
		try {
			this.state = 8493;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 495, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8487;
				this.b_expr(0);
				this.state = 8488;
				this.match(PostgreSQLParser.AS);
				this.state = 8489;
				this.collabel();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 8491;
				this.match(PostgreSQLParser.DEFAULT);
				this.state = 8492;
				this.b_expr(0);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public typename(): TypenameContext {
		let localctx: TypenameContext = new TypenameContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1108, PostgreSQLParser.RULE_typename);
		let _la: number;
		try {
			this.state = 8513;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 499, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8496;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===406) {
					{
					this.state = 8495;
					this.match(PostgreSQLParser.SETOF);
					}
				}

				this.state = 8498;
				this.simpletypename();
				this.state = 8507;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 498, this._ctx) ) {
				case 1:
					{
					this.state = 8499;
					this.opt_array_bounds();
					}
					break;
				case 2:
					{
					this.state = 8500;
					this.match(PostgreSQLParser.ARRAY);
					this.state = 8505;
					this._errHandler.sync(this);
					switch ( this._interp.adaptivePredict(this._input, 497, this._ctx) ) {
					case 1:
						{
						this.state = 8501;
						this.match(PostgreSQLParser.OPEN_BRACKET);
						this.state = 8502;
						this.iconst();
						this.state = 8503;
						this.match(PostgreSQLParser.CLOSE_BRACKET);
						}
						break;
					}
					}
					break;
				}
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 8509;
				this.qualified_name();
				this.state = 8510;
				this.match(PostgreSQLParser.PERCENT);
				this.state = 8511;
				_la = this._input.LA(1);
				if(!(_la===351 || _la===468)) {
				this._errHandler.recoverInline(this);
				}
				else {
					this._errHandler.reportMatch(this);
				    this.consume();
				}
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_array_bounds(): Opt_array_boundsContext {
		let localctx: Opt_array_boundsContext = new Opt_array_boundsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1110, PostgreSQLParser.RULE_opt_array_bounds);
		let _la: number;
		try {
			let _alt: number;
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8522;
			this._errHandler.sync(this);
			_alt = this._interp.adaptivePredict(this._input, 501, this._ctx);
			while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) {
				if (_alt === 1) {
					{
					{
					this.state = 8515;
					this.match(PostgreSQLParser.OPEN_BRACKET);
					this.state = 8517;
					this._errHandler.sync(this);
					_la = this._input.LA(1);
					if (_la===534) {
						{
						this.state = 8516;
						this.iconst();
						}
					}

					this.state = 8519;
					this.match(PostgreSQLParser.CLOSE_BRACKET);
					}
					}
				}
				this.state = 8524;
				this._errHandler.sync(this);
				_alt = this._interp.adaptivePredict(this._input, 501, this._ctx);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public simpletypename(): SimpletypenameContext {
		let localctx: SimpletypenameContext = new SimpletypenameContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1112, PostgreSQLParser.RULE_simpletypename);
		try {
			this.state = 8538;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 503, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8525;
				this.generictype();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 8526;
				this.numeric();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 8527;
				this.bit();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 8528;
				this.character();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 8529;
				this.constdatetime();
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 8530;
				this.constinterval();
				this.state = 8536;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 502, this._ctx) ) {
				case 1:
					{
					this.state = 8531;
					this.opt_interval();
					}
					break;
				case 2:
					{
					this.state = 8532;
					this.match(PostgreSQLParser.OPEN_PAREN);
					this.state = 8533;
					this.iconst();
					this.state = 8534;
					this.match(PostgreSQLParser.CLOSE_PAREN);
					}
					break;
				}
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public consttypename(): ConsttypenameContext {
		let localctx: ConsttypenameContext = new ConsttypenameContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1114, PostgreSQLParser.RULE_consttypename);
		try {
			this.state = 8544;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 190:
			case 379:
			case 381:
			case 385:
			case 386:
			case 389:
			case 392:
			case 393:
			case 400:
			case 404:
			case 407:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8540;
				this.numeric();
				}
				break;
			case 380:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 8541;
				this.constbit();
				}
				break;
			case 382:
			case 383:
			case 396:
			case 397:
			case 414:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 8542;
				this.constcharacter();
				}
				break;
			case 409:
			case 410:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 8543;
				this.constdatetime();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public generictype(): GenerictypeContext {
		let localctx: GenerictypeContext = new GenerictypeContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1116, PostgreSQLParser.RULE_generictype);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8546;
			this.type_function_name();
			this.state = 8548;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 505, this._ctx) ) {
			case 1:
				{
				this.state = 8547;
				this.attrs();
				}
				break;
			}
			this.state = 8550;
			this.opt_type_modifiers();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_type_modifiers(): Opt_type_modifiersContext {
		let localctx: Opt_type_modifiersContext = new Opt_type_modifiersContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1118, PostgreSQLParser.RULE_opt_type_modifiers);
		try {
			this.state = 8557;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 506, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8552;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 8553;
				this.expr_list();
				this.state = 8554;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public numeric(): NumericContext {
		let localctx: NumericContext = new NumericContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1120, PostgreSQLParser.RULE_numeric);
		try {
			this.state = 8575;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 392:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8559;
				this.match(PostgreSQLParser.INT_P);
				}
				break;
			case 393:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 8560;
				this.match(PostgreSQLParser.INTEGER);
				}
				break;
			case 407:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 8561;
				this.match(PostgreSQLParser.SMALLINT);
				}
				break;
			case 379:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 8562;
				this.match(PostgreSQLParser.BIGINT);
				}
				break;
			case 404:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 8563;
				this.match(PostgreSQLParser.REAL);
				}
				break;
			case 389:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 8564;
				this.match(PostgreSQLParser.FLOAT_P);
				this.state = 8565;
				this.opt_float();
				}
				break;
			case 190:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 8566;
				this.match(PostgreSQLParser.DOUBLE_P);
				this.state = 8567;
				this.match(PostgreSQLParser.PRECISION);
				}
				break;
			case 386:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 8568;
				this.match(PostgreSQLParser.DECIMAL_P);
				this.state = 8569;
				this.opt_type_modifiers();
				}
				break;
			case 385:
				this.enterOuterAlt(localctx, 9);
				{
				this.state = 8570;
				this.match(PostgreSQLParser.DEC);
				this.state = 8571;
				this.opt_type_modifiers();
				}
				break;
			case 400:
				this.enterOuterAlt(localctx, 10);
				{
				this.state = 8572;
				this.match(PostgreSQLParser.NUMERIC);
				this.state = 8573;
				this.opt_type_modifiers();
				}
				break;
			case 381:
				this.enterOuterAlt(localctx, 11);
				{
				this.state = 8574;
				this.match(PostgreSQLParser.BOOLEAN_P);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_float(): Opt_floatContext {
		let localctx: Opt_floatContext = new Opt_floatContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1122, PostgreSQLParser.RULE_opt_float);
		try {
			this.state = 8582;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 508, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8577;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 8578;
				this.iconst();
				this.state = 8579;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public bit(): BitContext {
		let localctx: BitContext = new BitContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1124, PostgreSQLParser.RULE_bit);
		try {
			this.state = 8586;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 509, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8584;
				this.bitwithlength();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 8585;
				this.bitwithoutlength();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public constbit(): ConstbitContext {
		let localctx: ConstbitContext = new ConstbitContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1126, PostgreSQLParser.RULE_constbit);
		try {
			this.state = 8590;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 510, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8588;
				this.bitwithlength();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 8589;
				this.bitwithoutlength();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public bitwithlength(): BitwithlengthContext {
		let localctx: BitwithlengthContext = new BitwithlengthContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1128, PostgreSQLParser.RULE_bitwithlength);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8592;
			this.match(PostgreSQLParser.BIT);
			this.state = 8593;
			this.opt_varying();
			this.state = 8594;
			this.match(PostgreSQLParser.OPEN_PAREN);
			this.state = 8595;
			this.expr_list();
			this.state = 8596;
			this.match(PostgreSQLParser.CLOSE_PAREN);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public bitwithoutlength(): BitwithoutlengthContext {
		let localctx: BitwithoutlengthContext = new BitwithoutlengthContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1130, PostgreSQLParser.RULE_bitwithoutlength);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8598;
			this.match(PostgreSQLParser.BIT);
			this.state = 8599;
			this.opt_varying();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public character(): CharacterContext {
		let localctx: CharacterContext = new CharacterContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1132, PostgreSQLParser.RULE_character);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8601;
			this.character_c();
			this.state = 8606;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 511, this._ctx) ) {
			case 1:
				{
				this.state = 8602;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 8603;
				this.iconst();
				this.state = 8604;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public constcharacter(): ConstcharacterContext {
		let localctx: ConstcharacterContext = new ConstcharacterContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1134, PostgreSQLParser.RULE_constcharacter);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8608;
			this.character_c();
			this.state = 8613;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			if (_la===2) {
				{
				this.state = 8609;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 8610;
				this.iconst();
				this.state = 8611;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
			}

			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public character_c(): Character_cContext {
		let localctx: Character_cContext = new Character_cContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1136, PostgreSQLParser.RULE_character_c);
		let _la: number;
		try {
			this.state = 8621;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 382:
			case 383:
			case 397:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8615;
				_la = this._input.LA(1);
				if(!(((((_la - 382)) & ~0x1F) === 0 && ((1 << (_la - 382)) & 32771) !== 0))) {
				this._errHandler.recoverInline(this);
				}
				else {
					this._errHandler.reportMatch(this);
				    this.consume();
				}
				this.state = 8616;
				this.opt_varying();
				}
				break;
			case 414:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 8617;
				this.match(PostgreSQLParser.VARCHAR);
				}
				break;
			case 396:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 8618;
				this.match(PostgreSQLParser.NATIONAL);
				this.state = 8619;
				_la = this._input.LA(1);
				if(!(_la===382 || _la===383)) {
				this._errHandler.recoverInline(this);
				}
				else {
					this._errHandler.reportMatch(this);
				    this.consume();
				}
				this.state = 8620;
				this.opt_varying();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_varying(): Opt_varyingContext {
		let localctx: Opt_varyingContext = new Opt_varyingContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1138, PostgreSQLParser.RULE_opt_varying);
		try {
			this.state = 8625;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 514, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8623;
				this.match(PostgreSQLParser.VARYING);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public constdatetime(): ConstdatetimeContext {
		let localctx: ConstdatetimeContext = new ConstdatetimeContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1140, PostgreSQLParser.RULE_constdatetime);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8627;
			_la = this._input.LA(1);
			if(!(_la===409 || _la===410)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			this.state = 8632;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 515, this._ctx) ) {
			case 1:
				{
				this.state = 8628;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 8629;
				this.iconst();
				this.state = 8630;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			}
			this.state = 8634;
			this.opt_timezone();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public constinterval(): ConstintervalContext {
		let localctx: ConstintervalContext = new ConstintervalContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1142, PostgreSQLParser.RULE_constinterval);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8636;
			this.match(PostgreSQLParser.INTERVAL);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_timezone(): Opt_timezoneContext {
		let localctx: Opt_timezoneContext = new Opt_timezoneContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1144, PostgreSQLParser.RULE_opt_timezone);
		try {
			this.state = 8645;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 516, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8638;
				this.match(PostgreSQLParser.WITH);
				this.state = 8639;
				this.match(PostgreSQLParser.TIME);
				this.state = 8640;
				this.match(PostgreSQLParser.ZONE);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 8641;
				this.match(PostgreSQLParser.WITHOUT);
				this.state = 8642;
				this.match(PostgreSQLParser.TIME);
				this.state = 8643;
				this.match(PostgreSQLParser.ZONE);
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_interval(): Opt_intervalContext {
		let localctx: Opt_intervalContext = new Opt_intervalContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1146, PostgreSQLParser.RULE_opt_interval);
		try {
			this.state = 8673;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 519, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8647;
				this.match(PostgreSQLParser.YEAR_P);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 8648;
				this.match(PostgreSQLParser.MONTH_P);
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 8649;
				this.match(PostgreSQLParser.DAY_P);
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 8650;
				this.match(PostgreSQLParser.HOUR_P);
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 8651;
				this.match(PostgreSQLParser.MINUTE_P);
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 8652;
				this.interval_second();
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 8653;
				this.match(PostgreSQLParser.YEAR_P);
				this.state = 8654;
				this.match(PostgreSQLParser.TO);
				this.state = 8655;
				this.match(PostgreSQLParser.MONTH_P);
				}
				break;
			case 8:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 8656;
				this.match(PostgreSQLParser.DAY_P);
				this.state = 8657;
				this.match(PostgreSQLParser.TO);
				this.state = 8661;
				this._errHandler.sync(this);
				switch (this._input.LA(1)) {
				case 218:
					{
					this.state = 8658;
					this.match(PostgreSQLParser.HOUR_P);
					}
					break;
				case 252:
					{
					this.state = 8659;
					this.match(PostgreSQLParser.MINUTE_P);
					}
					break;
				case 317:
					{
					this.state = 8660;
					this.interval_second();
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				break;
			case 9:
				this.enterOuterAlt(localctx, 9);
				{
				this.state = 8663;
				this.match(PostgreSQLParser.HOUR_P);
				this.state = 8664;
				this.match(PostgreSQLParser.TO);
				this.state = 8667;
				this._errHandler.sync(this);
				switch (this._input.LA(1)) {
				case 252:
					{
					this.state = 8665;
					this.match(PostgreSQLParser.MINUTE_P);
					}
					break;
				case 317:
					{
					this.state = 8666;
					this.interval_second();
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				break;
			case 10:
				this.enterOuterAlt(localctx, 10);
				{
				this.state = 8669;
				this.match(PostgreSQLParser.MINUTE_P);
				this.state = 8670;
				this.match(PostgreSQLParser.TO);
				this.state = 8671;
				this.interval_second();
				}
				break;
			case 11:
				this.enterOuterAlt(localctx, 11);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public interval_second(): Interval_secondContext {
		let localctx: Interval_secondContext = new Interval_secondContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1148, PostgreSQLParser.RULE_interval_second);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8675;
			this.match(PostgreSQLParser.SECOND_P);
			this.state = 8680;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 520, this._ctx) ) {
			case 1:
				{
				this.state = 8676;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 8677;
				this.iconst();
				this.state = 8678;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_escape(): Opt_escapeContext {
		let localctx: Opt_escapeContext = new Opt_escapeContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1150, PostgreSQLParser.RULE_opt_escape);
		try {
			this.state = 8685;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 521, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8682;
				this.match(PostgreSQLParser.ESCAPE);
				this.state = 8683;
				this.a_expr();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public a_expr(): A_exprContext {
		let localctx: A_exprContext = new A_exprContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1152, PostgreSQLParser.RULE_a_expr);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8687;
			this.a_expr_qual();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public a_expr_qual(): A_expr_qualContext {
		let localctx: A_expr_qualContext = new A_expr_qualContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1154, PostgreSQLParser.RULE_a_expr_qual);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8689;
			this.a_expr_lessless();
			this.state = 8691;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 522, this._ctx) ) {
			case 1:
				{
				this.state = 8690;
				this.qual_op();
				}
				break;
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public a_expr_lessless(): A_expr_lesslessContext {
		let localctx: A_expr_lesslessContext = new A_expr_lesslessContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1156, PostgreSQLParser.RULE_a_expr_lessless);
		let _la: number;
		try {
			let _alt: number;
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8693;
			this.a_expr_or();
			this.state = 8698;
			this._errHandler.sync(this);
			_alt = this._interp.adaptivePredict(this._input, 523, this._ctx);
			while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) {
				if (_alt === 1) {
					{
					{
					this.state = 8694;
					_la = this._input.LA(1);
					if(!(_la===18 || _la===19)) {
					this._errHandler.recoverInline(this);
					}
					else {
						this._errHandler.reportMatch(this);
					    this.consume();
					}
					this.state = 8695;
					this.a_expr_or();
					}
					}
				}
				this.state = 8700;
				this._errHandler.sync(this);
				_alt = this._interp.adaptivePredict(this._input, 523, this._ctx);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public a_expr_or(): A_expr_orContext {
		let localctx: A_expr_orContext = new A_expr_orContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1158, PostgreSQLParser.RULE_a_expr_or);
		try {
			let _alt: number;
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8701;
			this.a_expr_and();
			this.state = 8706;
			this._errHandler.sync(this);
			_alt = this._interp.adaptivePredict(this._input, 524, this._ctx);
			while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) {
				if (_alt === 1) {
					{
					{
					this.state = 8702;
					this.match(PostgreSQLParser.OR);
					this.state = 8703;
					this.a_expr_and();
					}
					}
				}
				this.state = 8708;
				this._errHandler.sync(this);
				_alt = this._interp.adaptivePredict(this._input, 524, this._ctx);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public a_expr_and(): A_expr_andContext {
		let localctx: A_expr_andContext = new A_expr_andContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1160, PostgreSQLParser.RULE_a_expr_and);
		try {
			let _alt: number;
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8709;
			this.a_expr_in();
			this.state = 8714;
			this._errHandler.sync(this);
			_alt = this._interp.adaptivePredict(this._input, 525, this._ctx);
			while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) {
				if (_alt === 1) {
					{
					{
					this.state = 8710;
					this.match(PostgreSQLParser.AND);
					this.state = 8711;
					this.a_expr_in();
					}
					}
				}
				this.state = 8716;
				this._errHandler.sync(this);
				_alt = this._interp.adaptivePredict(this._input, 525, this._ctx);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public a_expr_in(): A_expr_inContext {
		let localctx: A_expr_inContext = new A_expr_inContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1162, PostgreSQLParser.RULE_a_expr_in);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8717;
			this.a_expr_unary_not();
			this.state = 8723;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 527, this._ctx) ) {
			case 1:
				{
				this.state = 8719;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===77) {
					{
					this.state = 8718;
					this.match(PostgreSQLParser.NOT);
					}
				}

				this.state = 8721;
				this.match(PostgreSQLParser.IN_P);
				this.state = 8722;
				this.in_expr();
				}
				break;
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public a_expr_unary_not(): A_expr_unary_notContext {
		let localctx: A_expr_unary_notContext = new A_expr_unary_notContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1164, PostgreSQLParser.RULE_a_expr_unary_not);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8726;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			if (_la===77) {
				{
				this.state = 8725;
				this.match(PostgreSQLParser.NOT);
				}
			}

			this.state = 8728;
			this.a_expr_isnull();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public a_expr_isnull(): A_expr_isnullContext {
		let localctx: A_expr_isnullContext = new A_expr_isnullContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1166, PostgreSQLParser.RULE_a_expr_isnull);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8730;
			this.a_expr_is_not();
			this.state = 8732;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 529, this._ctx) ) {
			case 1:
				{
				this.state = 8731;
				_la = this._input.LA(1);
				if(!(_la===117 || _la===122)) {
				this._errHandler.recoverInline(this);
				}
				else {
					this._errHandler.reportMatch(this);
				    this.consume();
				}
				}
				break;
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public a_expr_is_not(): A_expr_is_notContext {
		let localctx: A_expr_is_notContext = new A_expr_is_notContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1168, PostgreSQLParser.RULE_a_expr_is_not);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8734;
			this.a_expr_compare();
			this.state = 8758;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 533, this._ctx) ) {
			case 1:
				{
				this.state = 8735;
				this.match(PostgreSQLParser.IS);
				this.state = 8737;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===77) {
					{
					this.state = 8736;
					this.match(PostgreSQLParser.NOT);
					}
				}

				this.state = 8756;
				this._errHandler.sync(this);
				switch (this._input.LA(1)) {
				case 78:
					{
					this.state = 8739;
					this.match(PostgreSQLParser.NULL_P);
					}
					break;
				case 96:
					{
					this.state = 8740;
					this.match(PostgreSQLParser.TRUE_P);
					}
					break;
				case 60:
					{
					this.state = 8741;
					this.match(PostgreSQLParser.FALSE_P);
					}
					break;
				case 356:
					{
					this.state = 8742;
					this.match(PostgreSQLParser.UNKNOWN);
					}
					break;
				case 56:
					{
					this.state = 8743;
					this.match(PostgreSQLParser.DISTINCT);
					this.state = 8744;
					this.match(PostgreSQLParser.FROM);
					this.state = 8745;
					this.a_expr();
					}
					break;
				case 266:
					{
					this.state = 8746;
					this.match(PostgreSQLParser.OF);
					this.state = 8747;
					this.match(PostgreSQLParser.OPEN_PAREN);
					this.state = 8748;
					this.type_list();
					this.state = 8749;
					this.match(PostgreSQLParser.CLOSE_PAREN);
					}
					break;
				case 188:
					{
					this.state = 8751;
					this.match(PostgreSQLParser.DOCUMENT_P);
					}
					break;
				case 469:
				case 474:
				case 475:
				case 476:
				case 477:
					{
					this.state = 8753;
					this._errHandler.sync(this);
					_la = this._input.LA(1);
					if (((((_la - 474)) & ~0x1F) === 0 && ((1 << (_la - 474)) & 15) !== 0)) {
						{
						this.state = 8752;
						this.unicode_normal_form();
						}
					}

					this.state = 8755;
					this.match(PostgreSQLParser.NORMALIZED);
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				break;
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public a_expr_compare(): A_expr_compareContext {
		let localctx: A_expr_compareContext = new A_expr_compareContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1170, PostgreSQLParser.RULE_a_expr_compare);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8760;
			this.a_expr_like();
			this.state = 8772;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 535, this._ctx) ) {
			case 1:
				{
				this.state = 8761;
				_la = this._input.LA(1);
				if(!((((_la) & ~0x1F) === 0 && ((1 << _la) & 44237824) !== 0))) {
				this._errHandler.recoverInline(this);
				}
				else {
					this._errHandler.reportMatch(this);
				    this.consume();
				}
				this.state = 8762;
				this.a_expr_like();
				}
				break;
			case 2:
				{
				this.state = 8763;
				this.subquery_Op();
				this.state = 8764;
				this.sub_type();
				this.state = 8770;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 534, this._ctx) ) {
				case 1:
					{
					this.state = 8765;
					this.select_with_parens();
					}
					break;
				case 2:
					{
					this.state = 8766;
					this.match(PostgreSQLParser.OPEN_PAREN);
					this.state = 8767;
					this.a_expr();
					this.state = 8768;
					this.match(PostgreSQLParser.CLOSE_PAREN);
					}
					break;
				}
				}
				break;
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public a_expr_like(): A_expr_likeContext {
		let localctx: A_expr_likeContext = new A_expr_likeContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1172, PostgreSQLParser.RULE_a_expr_like);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8774;
			this.a_expr_qual_op();
			this.state = 8791;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 539, this._ctx) ) {
			case 1:
				{
				this.state = 8776;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===77) {
					{
					this.state = 8775;
					this.match(PostgreSQLParser.NOT);
					}
				}

				this.state = 8786;
				this._errHandler.sync(this);
				switch (this._input.LA(1)) {
				case 120:
					{
					this.state = 8778;
					this.match(PostgreSQLParser.LIKE);
					}
					break;
				case 114:
					{
					this.state = 8779;
					this.match(PostgreSQLParser.ILIKE);
					}
					break;
				case 127:
					{
					this.state = 8780;
					this.match(PostgreSQLParser.SIMILAR);
					this.state = 8781;
					this.match(PostgreSQLParser.TO);
					}
					break;
				case 378:
					{
					this.state = 8782;
					this.match(PostgreSQLParser.BETWEEN);
					this.state = 8784;
					this._errHandler.sync(this);
					_la = this._input.LA(1);
					if (_la===91) {
						{
						this.state = 8783;
						this.match(PostgreSQLParser.SYMMETRIC);
						}
					}

					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				this.state = 8788;
				this.a_expr_qual_op();
				this.state = 8789;
				this.opt_escape();
				}
				break;
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public a_expr_qual_op(): A_expr_qual_opContext {
		let localctx: A_expr_qual_opContext = new A_expr_qual_opContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1174, PostgreSQLParser.RULE_a_expr_qual_op);
		try {
			let _alt: number;
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8793;
			this.a_expr_unary_qualop();
			this.state = 8799;
			this._errHandler.sync(this);
			_alt = this._interp.adaptivePredict(this._input, 540, this._ctx);
			while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) {
				if (_alt === 1) {
					{
					{
					this.state = 8794;
					this.qual_op();
					this.state = 8795;
					this.a_expr_unary_qualop();
					}
					}
				}
				this.state = 8801;
				this._errHandler.sync(this);
				_alt = this._interp.adaptivePredict(this._input, 540, this._ctx);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public a_expr_unary_qualop(): A_expr_unary_qualopContext {
		let localctx: A_expr_unary_qualopContext = new A_expr_unary_qualopContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1176, PostgreSQLParser.RULE_a_expr_unary_qualop);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8803;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 541, this._ctx) ) {
			case 1:
				{
				this.state = 8802;
				this.qual_op();
				}
				break;
			}
			this.state = 8805;
			this.a_expr_add();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public a_expr_add(): A_expr_addContext {
		let localctx: A_expr_addContext = new A_expr_addContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1178, PostgreSQLParser.RULE_a_expr_add);
		let _la: number;
		try {
			let _alt: number;
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8807;
			this.a_expr_mul();
			this.state = 8812;
			this._errHandler.sync(this);
			_alt = this._interp.adaptivePredict(this._input, 542, this._ctx);
			while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) {
				if (_alt === 1) {
					{
					{
					this.state = 8808;
					_la = this._input.LA(1);
					if(!(_la===12 || _la===13)) {
					this._errHandler.recoverInline(this);
					}
					else {
						this._errHandler.reportMatch(this);
					    this.consume();
					}
					this.state = 8809;
					this.a_expr_mul();
					}
					}
				}
				this.state = 8814;
				this._errHandler.sync(this);
				_alt = this._interp.adaptivePredict(this._input, 542, this._ctx);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public a_expr_mul(): A_expr_mulContext {
		let localctx: A_expr_mulContext = new A_expr_mulContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1180, PostgreSQLParser.RULE_a_expr_mul);
		let _la: number;
		try {
			let _alt: number;
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8815;
			this.a_expr_caret();
			this.state = 8820;
			this._errHandler.sync(this);
			_alt = this._interp.adaptivePredict(this._input, 543, this._ctx);
			while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) {
				if (_alt === 1) {
					{
					{
					this.state = 8816;
					_la = this._input.LA(1);
					if(!((((_la) & ~0x1F) === 0 && ((1 << _la) & 134234624) !== 0))) {
					this._errHandler.recoverInline(this);
					}
					else {
						this._errHandler.reportMatch(this);
					    this.consume();
					}
					this.state = 8817;
					this.a_expr_caret();
					}
					}
				}
				this.state = 8822;
				this._errHandler.sync(this);
				_alt = this._interp.adaptivePredict(this._input, 543, this._ctx);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public a_expr_caret(): A_expr_caretContext {
		let localctx: A_expr_caretContext = new A_expr_caretContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1182, PostgreSQLParser.RULE_a_expr_caret);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8823;
			this.a_expr_unary_sign();
			this.state = 8826;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 544, this._ctx) ) {
			case 1:
				{
				this.state = 8824;
				this.match(PostgreSQLParser.CARET);
				this.state = 8825;
				this.a_expr();
				}
				break;
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public a_expr_unary_sign(): A_expr_unary_signContext {
		let localctx: A_expr_unary_signContext = new A_expr_unary_signContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1184, PostgreSQLParser.RULE_a_expr_unary_sign);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8829;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			if (_la===12 || _la===13) {
				{
				this.state = 8828;
				_la = this._input.LA(1);
				if(!(_la===12 || _la===13)) {
				this._errHandler.recoverInline(this);
				}
				else {
					this._errHandler.reportMatch(this);
				    this.consume();
				}
				}
			}

			this.state = 8831;
			this.a_expr_at_time_zone();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public a_expr_at_time_zone(): A_expr_at_time_zoneContext {
		let localctx: A_expr_at_time_zoneContext = new A_expr_at_time_zoneContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1186, PostgreSQLParser.RULE_a_expr_at_time_zone);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8833;
			this.a_expr_collate();
			this.state = 8838;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 546, this._ctx) ) {
			case 1:
				{
				this.state = 8834;
				this.match(PostgreSQLParser.AT);
				this.state = 8835;
				this.match(PostgreSQLParser.TIME);
				this.state = 8836;
				this.match(PostgreSQLParser.ZONE);
				this.state = 8837;
				this.a_expr();
				}
				break;
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public a_expr_collate(): A_expr_collateContext {
		let localctx: A_expr_collateContext = new A_expr_collateContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1188, PostgreSQLParser.RULE_a_expr_collate);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8840;
			this.a_expr_typecast();
			this.state = 8843;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 547, this._ctx) ) {
			case 1:
				{
				this.state = 8841;
				this.match(PostgreSQLParser.COLLATE);
				this.state = 8842;
				this.any_name();
				}
				break;
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public a_expr_typecast(): A_expr_typecastContext {
		let localctx: A_expr_typecastContext = new A_expr_typecastContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1190, PostgreSQLParser.RULE_a_expr_typecast);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8845;
			this.c_expr();
			this.state = 8850;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===26) {
				{
				{
				this.state = 8846;
				this.match(PostgreSQLParser.TYPECAST);
				this.state = 8847;
				this.typename();
				}
				}
				this.state = 8852;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}

	public b_expr(): B_exprContext;
	public b_expr(_p: number): B_exprContext;
	// @RuleVersion(0)
	public b_expr(_p?: number): B_exprContext {
		if (_p === undefined) {
			_p = 0;
		}

		let _parentctx: ParserRuleContext = this._ctx;
		let _parentState: number = this.state;
		let localctx: B_exprContext = new B_exprContext(this, this._ctx, _parentState);
		// @ts-ignore
		let _prevctx: B_exprContext = localctx;
		let _startState: number = 1192;
		this.enterRecursionRule(localctx, 1192, PostgreSQLParser.RULE_b_expr, _p);
		let _la: number;
		try {
			let _alt: number;
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8860;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 549, this._ctx) ) {
			case 1:
				{
				this.state = 8854;
				this.c_expr();
				}
				break;
			case 2:
				{
				this.state = 8855;
				_la = this._input.LA(1);
				if(!(_la===12 || _la===13)) {
				this._errHandler.recoverInline(this);
				}
				else {
					this._errHandler.reportMatch(this);
				    this.consume();
				}
				this.state = 8856;
				this.b_expr(9);
				}
				break;
			case 3:
				{
				this.state = 8857;
				this.qual_op();
				this.state = 8858;
				this.b_expr(3);
				}
				break;
			}
			this._ctx.stop = this._input.LT(-1);
			this.state = 8901;
			this._errHandler.sync(this);
			_alt = this._interp.adaptivePredict(this._input, 553, this._ctx);
			while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) {
				if (_alt === 1) {
					if (this._parseListeners != null) {
						this.triggerExitRuleEvent();
					}
					_prevctx = localctx;
					{
					this.state = 8899;
					this._errHandler.sync(this);
					switch ( this._interp.adaptivePredict(this._input, 552, this._ctx) ) {
					case 1:
						{
						localctx = new B_exprContext(this, _parentctx, _parentState);
						this.pushNewRecursionContext(localctx, _startState, PostgreSQLParser.RULE_b_expr);
						this.state = 8862;
						if (!(this.precpred(this._ctx, 8))) {
							throw this.createFailedPredicateException("this.precpred(this._ctx, 8)");
						}
						this.state = 8863;
						this.match(PostgreSQLParser.CARET);
						this.state = 8864;
						this.b_expr(9);
						}
						break;
					case 2:
						{
						localctx = new B_exprContext(this, _parentctx, _parentState);
						this.pushNewRecursionContext(localctx, _startState, PostgreSQLParser.RULE_b_expr);
						this.state = 8865;
						if (!(this.precpred(this._ctx, 7))) {
							throw this.createFailedPredicateException("this.precpred(this._ctx, 7)");
						}
						this.state = 8866;
						_la = this._input.LA(1);
						if(!((((_la) & ~0x1F) === 0 && ((1 << _la) & 134234624) !== 0))) {
						this._errHandler.recoverInline(this);
						}
						else {
							this._errHandler.reportMatch(this);
						    this.consume();
						}
						this.state = 8867;
						this.b_expr(8);
						}
						break;
					case 3:
						{
						localctx = new B_exprContext(this, _parentctx, _parentState);
						this.pushNewRecursionContext(localctx, _startState, PostgreSQLParser.RULE_b_expr);
						this.state = 8868;
						if (!(this.precpred(this._ctx, 6))) {
							throw this.createFailedPredicateException("this.precpred(this._ctx, 6)");
						}
						this.state = 8869;
						_la = this._input.LA(1);
						if(!(_la===12 || _la===13)) {
						this._errHandler.recoverInline(this);
						}
						else {
							this._errHandler.reportMatch(this);
						    this.consume();
						}
						this.state = 8870;
						this.b_expr(7);
						}
						break;
					case 4:
						{
						localctx = new B_exprContext(this, _parentctx, _parentState);
						this.pushNewRecursionContext(localctx, _startState, PostgreSQLParser.RULE_b_expr);
						this.state = 8871;
						if (!(this.precpred(this._ctx, 5))) {
							throw this.createFailedPredicateException("this.precpred(this._ctx, 5)");
						}
						this.state = 8872;
						this.qual_op();
						this.state = 8873;
						this.b_expr(6);
						}
						break;
					case 5:
						{
						localctx = new B_exprContext(this, _parentctx, _parentState);
						this.pushNewRecursionContext(localctx, _startState, PostgreSQLParser.RULE_b_expr);
						this.state = 8875;
						if (!(this.precpred(this._ctx, 4))) {
							throw this.createFailedPredicateException("this.precpred(this._ctx, 4)");
						}
						this.state = 8876;
						_la = this._input.LA(1);
						if(!((((_la) & ~0x1F) === 0 && ((1 << _la) & 44237824) !== 0))) {
						this._errHandler.recoverInline(this);
						}
						else {
							this._errHandler.reportMatch(this);
						    this.consume();
						}
						this.state = 8877;
						this.b_expr(5);
						}
						break;
					case 6:
						{
						localctx = new B_exprContext(this, _parentctx, _parentState);
						this.pushNewRecursionContext(localctx, _startState, PostgreSQLParser.RULE_b_expr);
						this.state = 8878;
						if (!(this.precpred(this._ctx, 10))) {
							throw this.createFailedPredicateException("this.precpred(this._ctx, 10)");
						}
						this.state = 8879;
						this.match(PostgreSQLParser.TYPECAST);
						this.state = 8880;
						this.typename();
						}
						break;
					case 7:
						{
						localctx = new B_exprContext(this, _parentctx, _parentState);
						this.pushNewRecursionContext(localctx, _startState, PostgreSQLParser.RULE_b_expr);
						this.state = 8881;
						if (!(this.precpred(this._ctx, 2))) {
							throw this.createFailedPredicateException("this.precpred(this._ctx, 2)");
						}
						this.state = 8882;
						this.qual_op();
						}
						break;
					case 8:
						{
						localctx = new B_exprContext(this, _parentctx, _parentState);
						this.pushNewRecursionContext(localctx, _startState, PostgreSQLParser.RULE_b_expr);
						this.state = 8883;
						if (!(this.precpred(this._ctx, 1))) {
							throw this.createFailedPredicateException("this.precpred(this._ctx, 1)");
						}
						this.state = 8884;
						this.match(PostgreSQLParser.IS);
						this.state = 8886;
						this._errHandler.sync(this);
						_la = this._input.LA(1);
						if (_la===77) {
							{
							this.state = 8885;
							this.match(PostgreSQLParser.NOT);
							}
						}

						this.state = 8897;
						this._errHandler.sync(this);
						switch (this._input.LA(1)) {
						case 56:
							{
							this.state = 8888;
							this.match(PostgreSQLParser.DISTINCT);
							this.state = 8889;
							this.match(PostgreSQLParser.FROM);
							this.state = 8890;
							this.b_expr(0);
							}
							break;
						case 266:
							{
							this.state = 8891;
							this.match(PostgreSQLParser.OF);
							this.state = 8892;
							this.match(PostgreSQLParser.OPEN_PAREN);
							this.state = 8893;
							this.type_list();
							this.state = 8894;
							this.match(PostgreSQLParser.CLOSE_PAREN);
							}
							break;
						case 188:
							{
							this.state = 8896;
							this.match(PostgreSQLParser.DOCUMENT_P);
							}
							break;
						default:
							throw new NoViableAltException(this);
						}
						}
						break;
					}
					}
				}
				this.state = 8903;
				this._errHandler.sync(this);
				_alt = this._interp.adaptivePredict(this._input, 553, this._ctx);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.unrollRecursionContexts(_parentctx);
		}
		return localctx;
	}
	// @RuleVersion(0)
	public c_expr(): C_exprContext {
		let localctx: C_exprContext = new C_exprContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1194, PostgreSQLParser.RULE_c_expr);
		try {
			this.state = 8940;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 556, this._ctx) ) {
			case 1:
				localctx = new C_expr_existsContext(this, localctx);
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8904;
				this.match(PostgreSQLParser.EXISTS);
				this.state = 8905;
				this.select_with_parens();
				}
				break;
			case 2:
				localctx = new C_expr_exprContext(this, localctx);
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 8906;
				this.match(PostgreSQLParser.ARRAY);
				this.state = 8909;
				this._errHandler.sync(this);
				switch (this._input.LA(1)) {
				case 2:
					{
					this.state = 8907;
					this.select_with_parens();
					}
					break;
				case 4:
					{
					this.state = 8908;
					this.array_expr();
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				break;
			case 3:
				localctx = new C_expr_exprContext(this, localctx);
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 8911;
				this.match(PostgreSQLParser.PARAM);
				this.state = 8912;
				this.opt_indirection();
				}
				break;
			case 4:
				localctx = new C_expr_exprContext(this, localctx);
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 8913;
				this.match(PostgreSQLParser.GROUPING);
				this.state = 8914;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 8915;
				this.expr_list();
				this.state = 8916;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 5:
				localctx = new C_expr_exprContext(this, localctx);
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 8918;
				this.match(PostgreSQLParser.UNIQUE);
				this.state = 8919;
				this.select_with_parens();
				}
				break;
			case 6:
				localctx = new C_expr_exprContext(this, localctx);
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 8920;
				this.columnref();
				}
				break;
			case 7:
				localctx = new C_expr_exprContext(this, localctx);
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 8921;
				this.aexprconst();
				}
				break;
			case 8:
				localctx = new C_expr_exprContext(this, localctx);
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 8922;
				this.plsqlvariablename();
				}
				break;
			case 9:
				localctx = new C_expr_exprContext(this, localctx);
				this.enterOuterAlt(localctx, 9);
				{
				this.state = 8923;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 8924;
				(localctx as C_expr_exprContext)._a_expr_in_parens = this.a_expr();
				this.state = 8925;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 8926;
				this.opt_indirection();
				}
				break;
			case 10:
				localctx = new C_expr_caseContext(this, localctx);
				this.enterOuterAlt(localctx, 10);
				{
				this.state = 8928;
				this.case_expr();
				}
				break;
			case 11:
				localctx = new C_expr_exprContext(this, localctx);
				this.enterOuterAlt(localctx, 11);
				{
				this.state = 8929;
				this.func_expr();
				}
				break;
			case 12:
				localctx = new C_expr_exprContext(this, localctx);
				this.enterOuterAlt(localctx, 12);
				{
				this.state = 8930;
				this.select_with_parens();
				this.state = 8932;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 555, this._ctx) ) {
				case 1:
					{
					this.state = 8931;
					this.indirection();
					}
					break;
				}
				}
				break;
			case 13:
				localctx = new C_expr_exprContext(this, localctx);
				this.enterOuterAlt(localctx, 13);
				{
				this.state = 8934;
				this.explicit_row();
				}
				break;
			case 14:
				localctx = new C_expr_exprContext(this, localctx);
				this.enterOuterAlt(localctx, 14);
				{
				this.state = 8935;
				this.implicit_row();
				}
				break;
			case 15:
				localctx = new C_expr_exprContext(this, localctx);
				this.enterOuterAlt(localctx, 15);
				{
				this.state = 8936;
				this.row();
				this.state = 8937;
				this.match(PostgreSQLParser.OVERLAPS);
				this.state = 8938;
				this.row();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public plsqlvariablename(): PlsqlvariablenameContext {
		let localctx: PlsqlvariablenameContext = new PlsqlvariablenameContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1196, PostgreSQLParser.RULE_plsqlvariablename);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8942;
			this.match(PostgreSQLParser.PLSQLVARIABLENAME);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public func_application(): Func_applicationContext {
		let localctx: Func_applicationContext = new Func_applicationContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1198, PostgreSQLParser.RULE_func_application);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 8944;
			this.func_name();
			this.state = 8945;
			this.match(PostgreSQLParser.OPEN_PAREN);
			this.state = 8964;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 2:
			case 12:
			case 13:
			case 28:
			case 29:
			case 33:
			case 35:
			case 40:
			case 41:
			case 43:
			case 44:
			case 45:
			case 47:
			case 48:
			case 49:
			case 50:
			case 51:
			case 52:
			case 53:
			case 57:
			case 60:
			case 61:
			case 75:
			case 76:
			case 77:
			case 78:
			case 89:
			case 92:
			case 96:
			case 98:
			case 99:
			case 106:
			case 107:
			case 108:
			case 109:
			case 110:
			case 111:
			case 112:
			case 113:
			case 114:
			case 115:
			case 116:
			case 117:
			case 118:
			case 119:
			case 120:
			case 121:
			case 122:
			case 123:
			case 124:
			case 125:
			case 126:
			case 127:
			case 128:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 463:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 521:
			case 523:
			case 525:
			case 526:
			case 530:
			case 534:
			case 536:
			case 537:
			case 538:
			case 547:
				{
				this.state = 8946;
				this.func_arg_list();
				this.state = 8950;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===6) {
					{
					this.state = 8947;
					this.match(PostgreSQLParser.COMMA);
					this.state = 8948;
					this.match(PostgreSQLParser.VARIADIC);
					this.state = 8949;
					this.func_arg_expr();
					}
				}

				this.state = 8952;
				this.opt_sort_clause();
				}
				break;
			case 101:
				{
				this.state = 8954;
				this.match(PostgreSQLParser.VARIADIC);
				this.state = 8955;
				this.func_arg_expr();
				this.state = 8956;
				this.opt_sort_clause();
				}
				break;
			case 30:
			case 56:
				{
				this.state = 8958;
				_la = this._input.LA(1);
				if(!(_la===30 || _la===56)) {
				this._errHandler.recoverInline(this);
				}
				else {
					this._errHandler.reportMatch(this);
				    this.consume();
				}
				this.state = 8959;
				this.func_arg_list();
				this.state = 8960;
				this.opt_sort_clause();
				}
				break;
			case 9:
				{
				this.state = 8962;
				this.match(PostgreSQLParser.STAR);
				}
				break;
			case 3:
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
			this.state = 8966;
			this.match(PostgreSQLParser.CLOSE_PAREN);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public func_expr(): Func_exprContext {
		let localctx: Func_exprContext = new Func_exprContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1200, PostgreSQLParser.RULE_func_expr);
		try {
			this.state = 8974;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 559, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8968;
				this.func_application();
				this.state = 8969;
				this.within_group_clause();
				this.state = 8970;
				this.filter_clause();
				this.state = 8971;
				this.over_clause();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 8973;
				this.func_expr_common_subexpr();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public func_expr_windowless(): Func_expr_windowlessContext {
		let localctx: Func_expr_windowlessContext = new Func_expr_windowlessContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1202, PostgreSQLParser.RULE_func_expr_windowless);
		try {
			this.state = 8978;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 560, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8976;
				this.func_application();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 8977;
				this.func_expr_common_subexpr();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public func_expr_common_subexpr(): Func_expr_common_subexprContext {
		let localctx: Func_expr_common_subexprContext = new Func_expr_common_subexprContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1204, PostgreSQLParser.RULE_func_expr_common_subexpr);
		let _la: number;
		try {
			this.state = 9157;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 108:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 8980;
				this.match(PostgreSQLParser.COLLATION);
				this.state = 8981;
				this.match(PostgreSQLParser.FOR);
				this.state = 8982;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 8983;
				this.a_expr();
				this.state = 8984;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 48:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 8986;
				this.match(PostgreSQLParser.CURRENT_DATE);
				}
				break;
			case 50:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 8987;
				this.match(PostgreSQLParser.CURRENT_TIME);
				this.state = 8992;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 561, this._ctx) ) {
				case 1:
					{
					this.state = 8988;
					this.match(PostgreSQLParser.OPEN_PAREN);
					this.state = 8989;
					this.iconst();
					this.state = 8990;
					this.match(PostgreSQLParser.CLOSE_PAREN);
					}
					break;
				}
				}
				break;
			case 51:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 8994;
				this.match(PostgreSQLParser.CURRENT_TIMESTAMP);
				this.state = 8999;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 562, this._ctx) ) {
				case 1:
					{
					this.state = 8995;
					this.match(PostgreSQLParser.OPEN_PAREN);
					this.state = 8996;
					this.iconst();
					this.state = 8997;
					this.match(PostgreSQLParser.CLOSE_PAREN);
					}
					break;
				}
				}
				break;
			case 75:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 9001;
				this.match(PostgreSQLParser.LOCALTIME);
				this.state = 9006;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 563, this._ctx) ) {
				case 1:
					{
					this.state = 9002;
					this.match(PostgreSQLParser.OPEN_PAREN);
					this.state = 9003;
					this.iconst();
					this.state = 9004;
					this.match(PostgreSQLParser.CLOSE_PAREN);
					}
					break;
				}
				}
				break;
			case 76:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 9008;
				this.match(PostgreSQLParser.LOCALTIMESTAMP);
				this.state = 9013;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 564, this._ctx) ) {
				case 1:
					{
					this.state = 9009;
					this.match(PostgreSQLParser.OPEN_PAREN);
					this.state = 9010;
					this.iconst();
					this.state = 9011;
					this.match(PostgreSQLParser.CLOSE_PAREN);
					}
					break;
				}
				}
				break;
			case 49:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 9015;
				this.match(PostgreSQLParser.CURRENT_ROLE);
				}
				break;
			case 52:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 9016;
				this.match(PostgreSQLParser.CURRENT_USER);
				}
				break;
			case 89:
				this.enterOuterAlt(localctx, 9);
				{
				this.state = 9017;
				this.match(PostgreSQLParser.SESSION_USER);
				}
				break;
			case 99:
				this.enterOuterAlt(localctx, 10);
				{
				this.state = 9018;
				this.match(PostgreSQLParser.USER);
				}
				break;
			case 47:
				this.enterOuterAlt(localctx, 11);
				{
				this.state = 9019;
				this.match(PostgreSQLParser.CURRENT_CATALOG);
				}
				break;
			case 111:
				this.enterOuterAlt(localctx, 12);
				{
				this.state = 9020;
				this.match(PostgreSQLParser.CURRENT_SCHEMA);
				}
				break;
			case 41:
				this.enterOuterAlt(localctx, 13);
				{
				this.state = 9021;
				this.match(PostgreSQLParser.CAST);
				this.state = 9022;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 9023;
				this.a_expr();
				this.state = 9024;
				this.match(PostgreSQLParser.AS);
				this.state = 9025;
				this.typename();
				this.state = 9026;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 388:
				this.enterOuterAlt(localctx, 14);
				{
				this.state = 9028;
				this.match(PostgreSQLParser.EXTRACT);
				this.state = 9029;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 9030;
				this.extract_list();
				this.state = 9031;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 480:
				this.enterOuterAlt(localctx, 15);
				{
				this.state = 9033;
				this.match(PostgreSQLParser.NORMALIZE);
				this.state = 9034;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 9035;
				this.a_expr();
				this.state = 9038;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===6) {
					{
					this.state = 9036;
					this.match(PostgreSQLParser.COMMA);
					this.state = 9037;
					this.unicode_normal_form();
					}
				}

				this.state = 9040;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 401:
				this.enterOuterAlt(localctx, 16);
				{
				this.state = 9042;
				this.match(PostgreSQLParser.OVERLAY);
				this.state = 9043;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 9044;
				this.overlay_list();
				this.state = 9045;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 402:
				this.enterOuterAlt(localctx, 17);
				{
				this.state = 9047;
				this.match(PostgreSQLParser.POSITION);
				this.state = 9048;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 9049;
				this.position_list();
				this.state = 9050;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 408:
				this.enterOuterAlt(localctx, 18);
				{
				this.state = 9052;
				this.match(PostgreSQLParser.SUBSTRING);
				this.state = 9053;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 9054;
				this.substr_list();
				this.state = 9055;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 411:
				this.enterOuterAlt(localctx, 19);
				{
				this.state = 9057;
				this.match(PostgreSQLParser.TREAT);
				this.state = 9058;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 9059;
				this.a_expr();
				this.state = 9060;
				this.match(PostgreSQLParser.AS);
				this.state = 9061;
				this.typename();
				this.state = 9062;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 412:
				this.enterOuterAlt(localctx, 20);
				{
				this.state = 9064;
				this.match(PostgreSQLParser.TRIM);
				this.state = 9065;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 9067;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===39 || _la===73 || _la===95) {
					{
					this.state = 9066;
					_la = this._input.LA(1);
					if(!(_la===39 || _la===73 || _la===95)) {
					this._errHandler.recoverInline(this);
					}
					else {
						this._errHandler.reportMatch(this);
					    this.consume();
					}
					}
				}

				this.state = 9069;
				this.trim_list();
				this.state = 9070;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 399:
				this.enterOuterAlt(localctx, 21);
				{
				this.state = 9072;
				this.match(PostgreSQLParser.NULLIF);
				this.state = 9073;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 9074;
				this.a_expr();
				this.state = 9075;
				this.match(PostgreSQLParser.COMMA);
				this.state = 9076;
				this.a_expr();
				this.state = 9077;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 384:
				this.enterOuterAlt(localctx, 22);
				{
				this.state = 9079;
				this.match(PostgreSQLParser.COALESCE);
				this.state = 9080;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 9081;
				this.expr_list();
				this.state = 9082;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 390:
				this.enterOuterAlt(localctx, 23);
				{
				this.state = 9084;
				this.match(PostgreSQLParser.GREATEST);
				this.state = 9085;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 9086;
				this.expr_list();
				this.state = 9087;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 395:
				this.enterOuterAlt(localctx, 24);
				{
				this.state = 9089;
				this.match(PostgreSQLParser.LEAST);
				this.state = 9090;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 9091;
				this.expr_list();
				this.state = 9092;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 416:
				this.enterOuterAlt(localctx, 25);
				{
				this.state = 9094;
				this.match(PostgreSQLParser.XMLCONCAT);
				this.state = 9095;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 9096;
				this.expr_list();
				this.state = 9097;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 417:
				this.enterOuterAlt(localctx, 26);
				{
				this.state = 9099;
				this.match(PostgreSQLParser.XMLELEMENT);
				this.state = 9100;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 9101;
				this.match(PostgreSQLParser.NAME_P);
				this.state = 9102;
				this.collabel();
				this.state = 9108;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===6) {
					{
					this.state = 9103;
					this.match(PostgreSQLParser.COMMA);
					this.state = 9106;
					this._errHandler.sync(this);
					switch ( this._interp.adaptivePredict(this._input, 567, this._ctx) ) {
					case 1:
						{
						this.state = 9104;
						this.xml_attributes();
						}
						break;
					case 2:
						{
						this.state = 9105;
						this.expr_list();
						}
						break;
					}
					}
				}

				this.state = 9110;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 418:
				this.enterOuterAlt(localctx, 27);
				{
				this.state = 9112;
				this.match(PostgreSQLParser.XMLEXISTS);
				this.state = 9113;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 9114;
				this.c_expr();
				this.state = 9115;
				this.xmlexists_argument();
				this.state = 9116;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 419:
				this.enterOuterAlt(localctx, 28);
				{
				this.state = 9118;
				this.match(PostgreSQLParser.XMLFOREST);
				this.state = 9119;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 9120;
				this.xml_attribute_list();
				this.state = 9121;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 420:
				this.enterOuterAlt(localctx, 29);
				{
				this.state = 9123;
				this.match(PostgreSQLParser.XMLPARSE);
				this.state = 9124;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 9125;
				this.document_or_content();
				this.state = 9126;
				this.a_expr();
				this.state = 9127;
				this.xml_whitespace_option();
				this.state = 9128;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 421:
				this.enterOuterAlt(localctx, 30);
				{
				this.state = 9130;
				this.match(PostgreSQLParser.XMLPI);
				this.state = 9131;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 9132;
				this.match(PostgreSQLParser.NAME_P);
				this.state = 9133;
				this.collabel();
				this.state = 9136;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===6) {
					{
					this.state = 9134;
					this.match(PostgreSQLParser.COMMA);
					this.state = 9135;
					this.a_expr();
					}
				}

				this.state = 9138;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 422:
				this.enterOuterAlt(localctx, 31);
				{
				this.state = 9140;
				this.match(PostgreSQLParser.XMLROOT);
				this.state = 9141;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 9142;
				this.match(PostgreSQLParser.XML_P);
				this.state = 9143;
				this.a_expr();
				this.state = 9144;
				this.match(PostgreSQLParser.COMMA);
				this.state = 9145;
				this.xml_root_version();
				this.state = 9146;
				this.opt_xml_root_standalone();
				this.state = 9147;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 423:
				this.enterOuterAlt(localctx, 32);
				{
				this.state = 9149;
				this.match(PostgreSQLParser.XMLSERIALIZE);
				this.state = 9150;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 9151;
				this.document_or_content();
				this.state = 9152;
				this.a_expr();
				this.state = 9153;
				this.match(PostgreSQLParser.AS);
				this.state = 9154;
				this.simpletypename();
				this.state = 9155;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public xml_root_version(): Xml_root_versionContext {
		let localctx: Xml_root_versionContext = new Xml_root_versionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1206, PostgreSQLParser.RULE_xml_root_version);
		try {
			this.state = 9164;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 571, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9159;
				this.match(PostgreSQLParser.VERSION_P);
				this.state = 9160;
				this.a_expr();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9161;
				this.match(PostgreSQLParser.VERSION_P);
				this.state = 9162;
				this.match(PostgreSQLParser.NO);
				this.state = 9163;
				this.match(PostgreSQLParser.VALUE_P);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_xml_root_standalone(): Opt_xml_root_standaloneContext {
		let localctx: Opt_xml_root_standaloneContext = new Opt_xml_root_standaloneContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1208, PostgreSQLParser.RULE_opt_xml_root_standalone);
		try {
			this.state = 9177;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 572, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9166;
				this.match(PostgreSQLParser.COMMA);
				this.state = 9167;
				this.match(PostgreSQLParser.STANDALONE_P);
				this.state = 9168;
				this.match(PostgreSQLParser.YES_P);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9169;
				this.match(PostgreSQLParser.COMMA);
				this.state = 9170;
				this.match(PostgreSQLParser.STANDALONE_P);
				this.state = 9171;
				this.match(PostgreSQLParser.NO);
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 9172;
				this.match(PostgreSQLParser.COMMA);
				this.state = 9173;
				this.match(PostgreSQLParser.STANDALONE_P);
				this.state = 9174;
				this.match(PostgreSQLParser.NO);
				this.state = 9175;
				this.match(PostgreSQLParser.VALUE_P);
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public xml_attributes(): Xml_attributesContext {
		let localctx: Xml_attributesContext = new Xml_attributesContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1210, PostgreSQLParser.RULE_xml_attributes);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9179;
			this.match(PostgreSQLParser.XMLATTRIBUTES);
			this.state = 9180;
			this.match(PostgreSQLParser.OPEN_PAREN);
			this.state = 9181;
			this.xml_attribute_list();
			this.state = 9182;
			this.match(PostgreSQLParser.CLOSE_PAREN);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public xml_attribute_list(): Xml_attribute_listContext {
		let localctx: Xml_attribute_listContext = new Xml_attribute_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1212, PostgreSQLParser.RULE_xml_attribute_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9184;
			this.xml_attribute_el();
			this.state = 9189;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 9185;
				this.match(PostgreSQLParser.COMMA);
				this.state = 9186;
				this.xml_attribute_el();
				}
				}
				this.state = 9191;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public xml_attribute_el(): Xml_attribute_elContext {
		let localctx: Xml_attribute_elContext = new Xml_attribute_elContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1214, PostgreSQLParser.RULE_xml_attribute_el);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9192;
			this.a_expr();
			this.state = 9195;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			if (_la===36) {
				{
				this.state = 9193;
				this.match(PostgreSQLParser.AS);
				this.state = 9194;
				this.collabel();
				}
			}

			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public document_or_content(): Document_or_contentContext {
		let localctx: Document_or_contentContext = new Document_or_contentContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1216, PostgreSQLParser.RULE_document_or_content);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9197;
			_la = this._input.LA(1);
			if(!(_la===166 || _la===188)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public xml_whitespace_option(): Xml_whitespace_optionContext {
		let localctx: Xml_whitespace_optionContext = new Xml_whitespace_optionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1218, PostgreSQLParser.RULE_xml_whitespace_option);
		try {
			this.state = 9204;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 283:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9199;
				this.match(PostgreSQLParser.PRESERVE);
				this.state = 9200;
				this.match(PostgreSQLParser.WHITESPACE_P);
				}
				break;
			case 338:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9201;
				this.match(PostgreSQLParser.STRIP_P);
				this.state = 9202;
				this.match(PostgreSQLParser.WHITESPACE_P);
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public xmlexists_argument(): Xmlexists_argumentContext {
		let localctx: Xmlexists_argumentContext = new Xmlexists_argumentContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1220, PostgreSQLParser.RULE_xmlexists_argument);
		try {
			this.state = 9221;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 576, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9206;
				this.match(PostgreSQLParser.PASSING);
				this.state = 9207;
				this.c_expr();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9208;
				this.match(PostgreSQLParser.PASSING);
				this.state = 9209;
				this.c_expr();
				this.state = 9210;
				this.xml_passing_mech();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 9212;
				this.match(PostgreSQLParser.PASSING);
				this.state = 9213;
				this.xml_passing_mech();
				this.state = 9214;
				this.c_expr();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 9216;
				this.match(PostgreSQLParser.PASSING);
				this.state = 9217;
				this.xml_passing_mech();
				this.state = 9218;
				this.c_expr();
				this.state = 9219;
				this.xml_passing_mech();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public xml_passing_mech(): Xml_passing_mechContext {
		let localctx: Xml_passing_mechContext = new Xml_passing_mechContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1222, PostgreSQLParser.RULE_xml_passing_mech);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9223;
			this.match(PostgreSQLParser.BY);
			this.state = 9224;
			_la = this._input.LA(1);
			if(!(_la===295 || _la===441)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public within_group_clause(): Within_group_clauseContext {
		let localctx: Within_group_clauseContext = new Within_group_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1224, PostgreSQLParser.RULE_within_group_clause);
		try {
			this.state = 9233;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 577, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9226;
				this.match(PostgreSQLParser.WITHIN);
				this.state = 9227;
				this.match(PostgreSQLParser.GROUP_P);
				this.state = 9228;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 9229;
				this.sort_clause();
				this.state = 9230;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public filter_clause(): Filter_clauseContext {
		let localctx: Filter_clauseContext = new Filter_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1226, PostgreSQLParser.RULE_filter_clause);
		try {
			this.state = 9242;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 578, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9235;
				this.match(PostgreSQLParser.FILTER);
				this.state = 9236;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 9237;
				this.match(PostgreSQLParser.WHERE);
				this.state = 9238;
				this.a_expr();
				this.state = 9239;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public window_clause(): Window_clauseContext {
		let localctx: Window_clauseContext = new Window_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1228, PostgreSQLParser.RULE_window_clause);
		try {
			this.state = 9247;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 104:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9244;
				this.match(PostgreSQLParser.WINDOW);
				this.state = 9245;
				this.window_definition_list();
				}
				break;
			case -1:
			case 2:
			case 3:
			case 6:
			case 7:
			case 31:
			case 32:
			case 46:
			case 57:
			case 59:
			case 61:
			case 62:
			case 65:
			case 70:
			case 71:
			case 74:
			case 79:
			case 80:
			case 83:
			case 87:
			case 88:
			case 92:
			case 93:
			case 97:
			case 100:
			case 102:
			case 105:
			case 129:
			case 138:
			case 146:
			case 155:
			case 157:
			case 158:
			case 159:
			case 161:
			case 169:
			case 177:
			case 178:
			case 182:
			case 187:
			case 191:
			case 202:
			case 203:
			case 232:
			case 243:
			case 244:
			case 247:
			case 256:
			case 262:
			case 281:
			case 292:
			case 296:
			case 297:
			case 299:
			case 304:
			case 308:
			case 310:
			case 313:
			case 318:
			case 324:
			case 326:
			case 331:
			case 349:
			case 357:
			case 360:
			case 361:
			case 413:
			case 424:
			case 435:
			case 445:
			case 510:
			case 544:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public window_definition_list(): Window_definition_listContext {
		let localctx: Window_definition_listContext = new Window_definition_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1230, PostgreSQLParser.RULE_window_definition_list);
		try {
			let _alt: number;
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9249;
			this.window_definition();
			this.state = 9254;
			this._errHandler.sync(this);
			_alt = this._interp.adaptivePredict(this._input, 580, this._ctx);
			while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) {
				if (_alt === 1) {
					{
					{
					this.state = 9250;
					this.match(PostgreSQLParser.COMMA);
					this.state = 9251;
					this.window_definition();
					}
					}
				}
				this.state = 9256;
				this._errHandler.sync(this);
				_alt = this._interp.adaptivePredict(this._input, 580, this._ctx);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public window_definition(): Window_definitionContext {
		let localctx: Window_definitionContext = new Window_definitionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1232, PostgreSQLParser.RULE_window_definition);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9257;
			this.colid();
			this.state = 9258;
			this.match(PostgreSQLParser.AS);
			this.state = 9259;
			this.window_specification();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public over_clause(): Over_clauseContext {
		let localctx: Over_clauseContext = new Over_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1234, PostgreSQLParser.RULE_over_clause);
		try {
			this.state = 9267;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 582, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9261;
				this.match(PostgreSQLParser.OVER);
				this.state = 9264;
				this._errHandler.sync(this);
				switch (this._input.LA(1)) {
				case 2:
					{
					this.state = 9262;
					this.window_specification();
					}
					break;
				case 33:
				case 35:
				case 43:
				case 44:
				case 45:
				case 53:
				case 57:
				case 61:
				case 92:
				case 116:
				case 123:
				case 124:
				case 129:
				case 130:
				case 131:
				case 132:
				case 133:
				case 134:
				case 135:
				case 136:
				case 137:
				case 138:
				case 139:
				case 140:
				case 141:
				case 142:
				case 143:
				case 144:
				case 145:
				case 146:
				case 147:
				case 148:
				case 149:
				case 150:
				case 151:
				case 152:
				case 153:
				case 154:
				case 155:
				case 156:
				case 157:
				case 158:
				case 159:
				case 160:
				case 161:
				case 162:
				case 163:
				case 164:
				case 165:
				case 166:
				case 167:
				case 168:
				case 169:
				case 170:
				case 171:
				case 172:
				case 173:
				case 174:
				case 175:
				case 176:
				case 177:
				case 178:
				case 179:
				case 180:
				case 181:
				case 182:
				case 183:
				case 184:
				case 185:
				case 186:
				case 187:
				case 188:
				case 189:
				case 190:
				case 191:
				case 192:
				case 193:
				case 194:
				case 195:
				case 196:
				case 197:
				case 198:
				case 199:
				case 200:
				case 201:
				case 202:
				case 203:
				case 204:
				case 205:
				case 206:
				case 207:
				case 208:
				case 209:
				case 210:
				case 211:
				case 212:
				case 213:
				case 214:
				case 215:
				case 216:
				case 217:
				case 218:
				case 219:
				case 220:
				case 221:
				case 222:
				case 223:
				case 224:
				case 225:
				case 226:
				case 227:
				case 228:
				case 229:
				case 230:
				case 231:
				case 232:
				case 233:
				case 234:
				case 235:
				case 236:
				case 237:
				case 238:
				case 239:
				case 240:
				case 241:
				case 242:
				case 243:
				case 244:
				case 245:
				case 246:
				case 247:
				case 248:
				case 249:
				case 250:
				case 251:
				case 252:
				case 253:
				case 254:
				case 255:
				case 256:
				case 257:
				case 258:
				case 259:
				case 260:
				case 261:
				case 262:
				case 263:
				case 264:
				case 265:
				case 266:
				case 267:
				case 268:
				case 269:
				case 270:
				case 271:
				case 272:
				case 273:
				case 274:
				case 275:
				case 276:
				case 277:
				case 278:
				case 279:
				case 280:
				case 281:
				case 282:
				case 283:
				case 284:
				case 285:
				case 286:
				case 287:
				case 288:
				case 289:
				case 290:
				case 291:
				case 292:
				case 293:
				case 294:
				case 295:
				case 296:
				case 297:
				case 298:
				case 299:
				case 300:
				case 301:
				case 302:
				case 303:
				case 304:
				case 305:
				case 306:
				case 307:
				case 308:
				case 309:
				case 310:
				case 311:
				case 312:
				case 313:
				case 314:
				case 315:
				case 316:
				case 317:
				case 318:
				case 319:
				case 320:
				case 321:
				case 322:
				case 323:
				case 324:
				case 325:
				case 326:
				case 327:
				case 328:
				case 329:
				case 330:
				case 331:
				case 332:
				case 333:
				case 334:
				case 335:
				case 336:
				case 337:
				case 338:
				case 339:
				case 340:
				case 341:
				case 342:
				case 343:
				case 344:
				case 345:
				case 346:
				case 347:
				case 348:
				case 349:
				case 350:
				case 351:
				case 352:
				case 353:
				case 354:
				case 355:
				case 356:
				case 357:
				case 358:
				case 359:
				case 360:
				case 361:
				case 362:
				case 363:
				case 364:
				case 365:
				case 366:
				case 367:
				case 368:
				case 369:
				case 370:
				case 371:
				case 372:
				case 373:
				case 374:
				case 375:
				case 376:
				case 377:
				case 378:
				case 379:
				case 380:
				case 381:
				case 382:
				case 383:
				case 384:
				case 385:
				case 386:
				case 387:
				case 388:
				case 389:
				case 390:
				case 391:
				case 392:
				case 393:
				case 394:
				case 395:
				case 396:
				case 397:
				case 398:
				case 399:
				case 400:
				case 401:
				case 402:
				case 403:
				case 404:
				case 405:
				case 406:
				case 407:
				case 408:
				case 409:
				case 410:
				case 411:
				case 412:
				case 413:
				case 414:
				case 415:
				case 416:
				case 417:
				case 418:
				case 419:
				case 420:
				case 421:
				case 422:
				case 423:
				case 424:
				case 425:
				case 426:
				case 427:
				case 428:
				case 429:
				case 430:
				case 431:
				case 432:
				case 433:
				case 434:
				case 435:
				case 436:
				case 437:
				case 438:
				case 439:
				case 440:
				case 441:
				case 442:
				case 443:
				case 444:
				case 446:
				case 447:
				case 448:
				case 449:
				case 450:
				case 451:
				case 452:
				case 453:
				case 454:
				case 455:
				case 456:
				case 457:
				case 458:
				case 459:
				case 460:
				case 461:
				case 462:
				case 464:
				case 465:
				case 466:
				case 467:
				case 468:
				case 469:
				case 470:
				case 471:
				case 472:
				case 473:
				case 474:
				case 475:
				case 476:
				case 477:
				case 478:
				case 479:
				case 480:
				case 481:
				case 482:
				case 483:
				case 484:
				case 485:
				case 486:
				case 487:
				case 488:
				case 489:
				case 490:
				case 491:
				case 492:
				case 493:
				case 495:
				case 497:
				case 498:
				case 499:
				case 500:
				case 501:
				case 502:
				case 503:
				case 504:
				case 505:
				case 506:
				case 507:
				case 508:
				case 509:
				case 511:
				case 512:
				case 513:
				case 517:
				case 537:
				case 538:
					{
					this.state = 9263;
					this.colid();
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public window_specification(): Window_specificationContext {
		let localctx: Window_specificationContext = new Window_specificationContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1236, PostgreSQLParser.RULE_window_specification);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9269;
			this.match(PostgreSQLParser.OPEN_PAREN);
			this.state = 9270;
			this.opt_existing_window_name();
			this.state = 9271;
			this.opt_partition_clause();
			this.state = 9272;
			this.opt_sort_clause();
			this.state = 9273;
			this.opt_frame_clause();
			this.state = 9274;
			this.match(PostgreSQLParser.CLOSE_PAREN);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_existing_window_name(): Opt_existing_window_nameContext {
		let localctx: Opt_existing_window_nameContext = new Opt_existing_window_nameContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1238, PostgreSQLParser.RULE_opt_existing_window_name);
		try {
			this.state = 9278;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 583, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9276;
				this.colid();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_partition_clause(): Opt_partition_clauseContext {
		let localctx: Opt_partition_clauseContext = new Opt_partition_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1240, PostgreSQLParser.RULE_opt_partition_clause);
		try {
			this.state = 9284;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 276:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9280;
				this.match(PostgreSQLParser.PARTITION);
				this.state = 9281;
				this.match(PostgreSQLParser.BY);
				this.state = 9282;
				this.expr_list();
				}
				break;
			case 3:
			case 83:
			case 290:
			case 311:
			case 472:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_frame_clause(): Opt_frame_clauseContext {
		let localctx: Opt_frame_clauseContext = new Opt_frame_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1242, PostgreSQLParser.RULE_opt_frame_clause);
		try {
			this.state = 9299;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 290:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9286;
				this.match(PostgreSQLParser.RANGE);
				this.state = 9287;
				this.frame_extent();
				this.state = 9288;
				this.opt_window_exclusion_clause();
				}
				break;
			case 311:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9290;
				this.match(PostgreSQLParser.ROWS);
				this.state = 9291;
				this.frame_extent();
				this.state = 9292;
				this.opt_window_exclusion_clause();
				}
				break;
			case 472:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 9294;
				this.match(PostgreSQLParser.GROUPS);
				this.state = 9295;
				this.frame_extent();
				this.state = 9296;
				this.opt_window_exclusion_clause();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 4);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public frame_extent(): Frame_extentContext {
		let localctx: Frame_extentContext = new Frame_extentContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1244, PostgreSQLParser.RULE_frame_extent);
		try {
			this.state = 9307;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 586, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9301;
				this.frame_bound();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9302;
				this.match(PostgreSQLParser.BETWEEN);
				this.state = 9303;
				this.frame_bound();
				this.state = 9304;
				this.match(PostgreSQLParser.AND);
				this.state = 9305;
				this.frame_bound();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public frame_bound(): Frame_boundContext {
		let localctx: Frame_boundContext = new Frame_boundContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1246, PostgreSQLParser.RULE_frame_bound);
		let _la: number;
		try {
			this.state = 9316;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 587, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9309;
				this.match(PostgreSQLParser.UNBOUNDED);
				this.state = 9310;
				_la = this._input.LA(1);
				if(!(_la===208 || _la===280)) {
				this._errHandler.recoverInline(this);
				}
				else {
					this._errHandler.reportMatch(this);
				    this.consume();
				}
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9311;
				this.match(PostgreSQLParser.CURRENT_P);
				this.state = 9312;
				this.match(PostgreSQLParser.ROW);
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 9313;
				this.a_expr();
				this.state = 9314;
				_la = this._input.LA(1);
				if(!(_la===208 || _la===280)) {
				this._errHandler.recoverInline(this);
				}
				else {
					this._errHandler.reportMatch(this);
				    this.consume();
				}
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_window_exclusion_clause(): Opt_window_exclusion_clauseContext {
		let localctx: Opt_window_exclusion_clauseContext = new Opt_window_exclusion_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1248, PostgreSQLParser.RULE_opt_window_exclusion_clause);
		try {
			this.state = 9328;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 199:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9318;
				this.match(PostgreSQLParser.EXCLUDE);
				this.state = 9325;
				this._errHandler.sync(this);
				switch (this._input.LA(1)) {
				case 425:
					{
					this.state = 9319;
					this.match(PostgreSQLParser.CURRENT_P);
					this.state = 9320;
					this.match(PostgreSQLParser.ROW);
					}
					break;
				case 66:
					{
					this.state = 9321;
					this.match(PostgreSQLParser.GROUP_P);
					}
					break;
				case 458:
					{
					this.state = 9322;
					this.match(PostgreSQLParser.TIES);
					}
					break;
				case 260:
					{
					this.state = 9323;
					this.match(PostgreSQLParser.NO);
					this.state = 9324;
					this.match(PostgreSQLParser.OTHERS);
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public row(): RowContext {
		let localctx: RowContext = new RowContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1250, PostgreSQLParser.RULE_row);
		let _la: number;
		try {
			this.state = 9342;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 405:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9330;
				this.match(PostgreSQLParser.ROW);
				this.state = 9331;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 9333;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 805318660) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 421518725) !== 0) || ((((_la - 75)) & ~0x1F) === 0 && ((1 << (_la - 75)) & 2174894095) !== 0) || ((((_la - 107)) & ~0x1F) === 0 && ((1 << (_la - 107)) & 4294967295) !== 0) || ((((_la - 139)) & ~0x1F) === 0 && ((1 << (_la - 139)) & 4294967295) !== 0) || ((((_la - 171)) & ~0x1F) === 0 && ((1 << (_la - 171)) & 4294967295) !== 0) || ((((_la - 203)) & ~0x1F) === 0 && ((1 << (_la - 203)) & 4294967295) !== 0) || ((((_la - 235)) & ~0x1F) === 0 && ((1 << (_la - 235)) & 4294967295) !== 0) || ((((_la - 267)) & ~0x1F) === 0 && ((1 << (_la - 267)) & 4294967295) !== 0) || ((((_la - 299)) & ~0x1F) === 0 && ((1 << (_la - 299)) & 4294967295) !== 0) || ((((_la - 331)) & ~0x1F) === 0 && ((1 << (_la - 331)) & 4294967295) !== 0) || ((((_la - 363)) & ~0x1F) === 0 && ((1 << (_la - 363)) & 4294967295) !== 0) || ((((_la - 395)) & ~0x1F) === 0 && ((1 << (_la - 395)) & 4294967295) !== 0) || ((((_la - 427)) & ~0x1F) === 0 && ((1 << (_la - 427)) & 4294705151) !== 0) || ((((_la - 459)) & ~0x1F) === 0 && ((1 << (_la - 459)) & 4294967295) !== 0) || ((((_la - 491)) & ~0x1F) === 0 && ((1 << (_la - 491)) & 1148714967) !== 0) || ((((_la - 523)) & ~0x1F) === 0 && ((1 << (_la - 523)) & 16836749) !== 0)) {
					{
					this.state = 9332;
					this.expr_list();
					}
				}

				this.state = 9335;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9336;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 9337;
				this.expr_list();
				this.state = 9338;
				this.match(PostgreSQLParser.COMMA);
				this.state = 9339;
				this.a_expr();
				this.state = 9340;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public explicit_row(): Explicit_rowContext {
		let localctx: Explicit_rowContext = new Explicit_rowContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1252, PostgreSQLParser.RULE_explicit_row);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9344;
			this.match(PostgreSQLParser.ROW);
			this.state = 9345;
			this.match(PostgreSQLParser.OPEN_PAREN);
			this.state = 9347;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 805318660) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 421518725) !== 0) || ((((_la - 75)) & ~0x1F) === 0 && ((1 << (_la - 75)) & 2174894095) !== 0) || ((((_la - 107)) & ~0x1F) === 0 && ((1 << (_la - 107)) & 4294967295) !== 0) || ((((_la - 139)) & ~0x1F) === 0 && ((1 << (_la - 139)) & 4294967295) !== 0) || ((((_la - 171)) & ~0x1F) === 0 && ((1 << (_la - 171)) & 4294967295) !== 0) || ((((_la - 203)) & ~0x1F) === 0 && ((1 << (_la - 203)) & 4294967295) !== 0) || ((((_la - 235)) & ~0x1F) === 0 && ((1 << (_la - 235)) & 4294967295) !== 0) || ((((_la - 267)) & ~0x1F) === 0 && ((1 << (_la - 267)) & 4294967295) !== 0) || ((((_la - 299)) & ~0x1F) === 0 && ((1 << (_la - 299)) & 4294967295) !== 0) || ((((_la - 331)) & ~0x1F) === 0 && ((1 << (_la - 331)) & 4294967295) !== 0) || ((((_la - 363)) & ~0x1F) === 0 && ((1 << (_la - 363)) & 4294967295) !== 0) || ((((_la - 395)) & ~0x1F) === 0 && ((1 << (_la - 395)) & 4294967295) !== 0) || ((((_la - 427)) & ~0x1F) === 0 && ((1 << (_la - 427)) & 4294705151) !== 0) || ((((_la - 459)) & ~0x1F) === 0 && ((1 << (_la - 459)) & 4294967295) !== 0) || ((((_la - 491)) & ~0x1F) === 0 && ((1 << (_la - 491)) & 1148714967) !== 0) || ((((_la - 523)) & ~0x1F) === 0 && ((1 << (_la - 523)) & 16836749) !== 0)) {
				{
				this.state = 9346;
				this.expr_list();
				}
			}

			this.state = 9349;
			this.match(PostgreSQLParser.CLOSE_PAREN);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public implicit_row(): Implicit_rowContext {
		let localctx: Implicit_rowContext = new Implicit_rowContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1254, PostgreSQLParser.RULE_implicit_row);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9351;
			this.match(PostgreSQLParser.OPEN_PAREN);
			this.state = 9352;
			this.expr_list();
			this.state = 9353;
			this.match(PostgreSQLParser.COMMA);
			this.state = 9354;
			this.a_expr();
			this.state = 9355;
			this.match(PostgreSQLParser.CLOSE_PAREN);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public sub_type(): Sub_typeContext {
		let localctx: Sub_typeContext = new Sub_typeContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1256, PostgreSQLParser.RULE_sub_type);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9357;
			_la = this._input.LA(1);
			if(!(_la===30 || _la===34 || _la===90)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public all_op(): All_opContext {
		let localctx: All_opContext = new All_opContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1258, PostgreSQLParser.RULE_all_op);
		try {
			this.state = 9361;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 29:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9359;
				this.match(PostgreSQLParser.Operator);
				}
				break;
			case 9:
			case 10:
			case 12:
			case 13:
			case 14:
			case 15:
			case 16:
			case 17:
			case 21:
			case 23:
			case 25:
			case 27:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9360;
				this.mathop();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public mathop(): MathopContext {
		let localctx: MathopContext = new MathopContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1260, PostgreSQLParser.RULE_mathop);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9363;
			_la = this._input.LA(1);
			if(!((((_la) & ~0x1F) === 0 && ((1 << _la) & 178517504) !== 0))) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public qual_op(): Qual_opContext {
		let localctx: Qual_opContext = new Qual_opContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1262, PostgreSQLParser.RULE_qual_op);
		try {
			this.state = 9371;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 29:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9365;
				this.match(PostgreSQLParser.Operator);
				}
				break;
			case 269:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9366;
				this.match(PostgreSQLParser.OPERATOR);
				this.state = 9367;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 9368;
				this.any_operator();
				this.state = 9369;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public qual_all_op(): Qual_all_opContext {
		let localctx: Qual_all_opContext = new Qual_all_opContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1264, PostgreSQLParser.RULE_qual_all_op);
		try {
			this.state = 9379;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 9:
			case 10:
			case 12:
			case 13:
			case 14:
			case 15:
			case 16:
			case 17:
			case 21:
			case 23:
			case 25:
			case 27:
			case 29:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9373;
				this.all_op();
				}
				break;
			case 269:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9374;
				this.match(PostgreSQLParser.OPERATOR);
				this.state = 9375;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 9376;
				this.any_operator();
				this.state = 9377;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public subquery_Op(): Subquery_OpContext {
		let localctx: Subquery_OpContext = new Subquery_OpContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1266, PostgreSQLParser.RULE_subquery_Op);
		try {
			this.state = 9393;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 596, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9381;
				this.all_op();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9382;
				this.match(PostgreSQLParser.OPERATOR);
				this.state = 9383;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 9384;
				this.any_operator();
				this.state = 9385;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 9387;
				this.match(PostgreSQLParser.LIKE);
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 9388;
				this.match(PostgreSQLParser.NOT);
				this.state = 9389;
				this.match(PostgreSQLParser.LIKE);
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 9390;
				this.match(PostgreSQLParser.ILIKE);
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 9391;
				this.match(PostgreSQLParser.NOT);
				this.state = 9392;
				this.match(PostgreSQLParser.ILIKE);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public expr_list(): Expr_listContext {
		let localctx: Expr_listContext = new Expr_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1268, PostgreSQLParser.RULE_expr_list);
		try {
			let _alt: number;
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9395;
			this.a_expr();
			this.state = 9400;
			this._errHandler.sync(this);
			_alt = this._interp.adaptivePredict(this._input, 597, this._ctx);
			while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) {
				if (_alt === 1) {
					{
					{
					this.state = 9396;
					this.match(PostgreSQLParser.COMMA);
					this.state = 9397;
					this.a_expr();
					}
					}
				}
				this.state = 9402;
				this._errHandler.sync(this);
				_alt = this._interp.adaptivePredict(this._input, 597, this._ctx);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public func_arg_list(): Func_arg_listContext {
		let localctx: Func_arg_listContext = new Func_arg_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1270, PostgreSQLParser.RULE_func_arg_list);
		try {
			let _alt: number;
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9403;
			this.func_arg_expr();
			this.state = 9408;
			this._errHandler.sync(this);
			_alt = this._interp.adaptivePredict(this._input, 598, this._ctx);
			while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) {
				if (_alt === 1) {
					{
					{
					this.state = 9404;
					this.match(PostgreSQLParser.COMMA);
					this.state = 9405;
					this.func_arg_expr();
					}
					}
				}
				this.state = 9410;
				this._errHandler.sync(this);
				_alt = this._interp.adaptivePredict(this._input, 598, this._ctx);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public func_arg_expr(): Func_arg_exprContext {
		let localctx: Func_arg_exprContext = new Func_arg_exprContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1272, PostgreSQLParser.RULE_func_arg_expr);
		let _la: number;
		try {
			this.state = 9416;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 599, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9411;
				this.a_expr();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9412;
				this.param_name();
				this.state = 9413;
				_la = this._input.LA(1);
				if(!(_la===20 || _la===22)) {
				this._errHandler.recoverInline(this);
				}
				else {
					this._errHandler.reportMatch(this);
				    this.consume();
				}
				this.state = 9414;
				this.a_expr();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public type_list(): Type_listContext {
		let localctx: Type_listContext = new Type_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1274, PostgreSQLParser.RULE_type_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9418;
			this.typename();
			this.state = 9423;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 9419;
				this.match(PostgreSQLParser.COMMA);
				this.state = 9420;
				this.typename();
				}
				}
				this.state = 9425;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public array_expr(): Array_exprContext {
		let localctx: Array_exprContext = new Array_exprContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1276, PostgreSQLParser.RULE_array_expr);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9426;
			this.match(PostgreSQLParser.OPEN_BRACKET);
			this.state = 9429;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 2:
			case 12:
			case 13:
			case 28:
			case 29:
			case 33:
			case 35:
			case 40:
			case 41:
			case 43:
			case 44:
			case 45:
			case 47:
			case 48:
			case 49:
			case 50:
			case 51:
			case 52:
			case 53:
			case 57:
			case 60:
			case 61:
			case 75:
			case 76:
			case 77:
			case 78:
			case 89:
			case 92:
			case 96:
			case 98:
			case 99:
			case 106:
			case 107:
			case 108:
			case 109:
			case 110:
			case 111:
			case 112:
			case 113:
			case 114:
			case 115:
			case 116:
			case 117:
			case 118:
			case 119:
			case 120:
			case 121:
			case 122:
			case 123:
			case 124:
			case 125:
			case 126:
			case 127:
			case 128:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 463:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 521:
			case 523:
			case 525:
			case 526:
			case 530:
			case 534:
			case 536:
			case 537:
			case 538:
			case 547:
				{
				this.state = 9427;
				this.expr_list();
				}
				break;
			case 4:
				{
				this.state = 9428;
				this.array_expr_list();
				}
				break;
			case 5:
				break;
			default:
				break;
			}
			this.state = 9431;
			this.match(PostgreSQLParser.CLOSE_BRACKET);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public array_expr_list(): Array_expr_listContext {
		let localctx: Array_expr_listContext = new Array_expr_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1278, PostgreSQLParser.RULE_array_expr_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9433;
			this.array_expr();
			this.state = 9438;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 9434;
				this.match(PostgreSQLParser.COMMA);
				this.state = 9435;
				this.array_expr();
				}
				}
				this.state = 9440;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public extract_list(): Extract_listContext {
		let localctx: Extract_listContext = new Extract_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1280, PostgreSQLParser.RULE_extract_list);
		try {
			this.state = 9446;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 92:
			case 116:
			case 123:
			case 130:
			case 144:
			case 153:
			case 157:
			case 161:
			case 167:
			case 172:
			case 176:
			case 207:
			case 210:
			case 218:
			case 232:
			case 240:
			case 252:
			case 255:
			case 256:
			case 259:
			case 260:
			case 270:
			case 284:
			case 298:
			case 304:
			case 310:
			case 314:
			case 315:
			case 317:
			case 324:
			case 351:
			case 375:
			case 424:
			case 425:
			case 468:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 521:
			case 523:
			case 525:
			case 537:
			case 538:
			case 547:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9441;
				this.extract_arg();
				this.state = 9442;
				this.match(PostgreSQLParser.FROM);
				this.state = 9443;
				this.a_expr();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public extract_arg(): Extract_argContext {
		let localctx: Extract_argContext = new Extract_argContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1282, PostgreSQLParser.RULE_extract_arg);
		try {
			this.state = 9456;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 92:
			case 116:
			case 123:
			case 130:
			case 144:
			case 153:
			case 157:
			case 161:
			case 167:
			case 172:
			case 207:
			case 210:
			case 232:
			case 240:
			case 256:
			case 259:
			case 260:
			case 270:
			case 284:
			case 298:
			case 304:
			case 310:
			case 314:
			case 315:
			case 324:
			case 351:
			case 424:
			case 425:
			case 468:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9448;
				this.identifier();
				}
				break;
			case 375:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9449;
				this.match(PostgreSQLParser.YEAR_P);
				}
				break;
			case 255:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 9450;
				this.match(PostgreSQLParser.MONTH_P);
				}
				break;
			case 176:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 9451;
				this.match(PostgreSQLParser.DAY_P);
				}
				break;
			case 218:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 9452;
				this.match(PostgreSQLParser.HOUR_P);
				}
				break;
			case 252:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 9453;
				this.match(PostgreSQLParser.MINUTE_P);
				}
				break;
			case 317:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 9454;
				this.match(PostgreSQLParser.SECOND_P);
				}
				break;
			case 521:
			case 523:
			case 525:
			case 547:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 9455;
				this.sconst();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public unicode_normal_form(): Unicode_normal_formContext {
		let localctx: Unicode_normal_formContext = new Unicode_normal_formContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1284, PostgreSQLParser.RULE_unicode_normal_form);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9458;
			_la = this._input.LA(1);
			if(!(((((_la - 474)) & ~0x1F) === 0 && ((1 << (_la - 474)) & 15) !== 0))) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public overlay_list(): Overlay_listContext {
		let localctx: Overlay_listContext = new Overlay_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1286, PostgreSQLParser.RULE_overlay_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9460;
			this.a_expr();
			this.state = 9461;
			this.match(PostgreSQLParser.PLACING);
			this.state = 9462;
			this.a_expr();
			this.state = 9463;
			this.match(PostgreSQLParser.FROM);
			this.state = 9464;
			this.a_expr();
			this.state = 9467;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			if (_la===62) {
				{
				this.state = 9465;
				this.match(PostgreSQLParser.FOR);
				this.state = 9466;
				this.a_expr();
				}
			}

			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public position_list(): Position_listContext {
		let localctx: Position_listContext = new Position_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1288, PostgreSQLParser.RULE_position_list);
		try {
			this.state = 9474;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 2:
			case 12:
			case 13:
			case 28:
			case 29:
			case 33:
			case 35:
			case 40:
			case 41:
			case 43:
			case 44:
			case 45:
			case 47:
			case 48:
			case 49:
			case 50:
			case 51:
			case 52:
			case 53:
			case 57:
			case 60:
			case 61:
			case 75:
			case 76:
			case 78:
			case 89:
			case 92:
			case 96:
			case 98:
			case 99:
			case 106:
			case 107:
			case 108:
			case 109:
			case 110:
			case 111:
			case 112:
			case 113:
			case 114:
			case 115:
			case 116:
			case 117:
			case 118:
			case 119:
			case 120:
			case 121:
			case 122:
			case 123:
			case 124:
			case 125:
			case 126:
			case 127:
			case 128:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 463:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 521:
			case 523:
			case 525:
			case 526:
			case 530:
			case 534:
			case 536:
			case 537:
			case 538:
			case 547:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9469;
				this.b_expr(0);
				this.state = 9470;
				this.match(PostgreSQLParser.IN_P);
				this.state = 9471;
				this.b_expr(0);
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public substr_list(): Substr_listContext {
		let localctx: Substr_listContext = new Substr_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1290, PostgreSQLParser.RULE_substr_list);
		try {
			this.state = 9504;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 607, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9476;
				this.a_expr();
				this.state = 9477;
				this.match(PostgreSQLParser.FROM);
				this.state = 9478;
				this.a_expr();
				this.state = 9479;
				this.match(PostgreSQLParser.FOR);
				this.state = 9480;
				this.a_expr();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9482;
				this.a_expr();
				this.state = 9483;
				this.match(PostgreSQLParser.FOR);
				this.state = 9484;
				this.a_expr();
				this.state = 9485;
				this.match(PostgreSQLParser.FROM);
				this.state = 9486;
				this.a_expr();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 9488;
				this.a_expr();
				this.state = 9489;
				this.match(PostgreSQLParser.FROM);
				this.state = 9490;
				this.a_expr();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 9492;
				this.a_expr();
				this.state = 9493;
				this.match(PostgreSQLParser.FOR);
				this.state = 9494;
				this.a_expr();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 9496;
				this.a_expr();
				this.state = 9497;
				this.match(PostgreSQLParser.SIMILAR);
				this.state = 9498;
				this.a_expr();
				this.state = 9499;
				this.match(PostgreSQLParser.ESCAPE);
				this.state = 9500;
				this.a_expr();
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 9502;
				this.expr_list();
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 7);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public trim_list(): Trim_listContext {
		let localctx: Trim_listContext = new Trim_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1292, PostgreSQLParser.RULE_trim_list);
		try {
			this.state = 9513;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 608, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9506;
				this.a_expr();
				this.state = 9507;
				this.match(PostgreSQLParser.FROM);
				this.state = 9508;
				this.expr_list();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9510;
				this.match(PostgreSQLParser.FROM);
				this.state = 9511;
				this.expr_list();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 9512;
				this.expr_list();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public in_expr(): In_exprContext {
		let localctx: In_exprContext = new In_exprContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1294, PostgreSQLParser.RULE_in_expr);
		try {
			this.state = 9520;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 609, this._ctx) ) {
			case 1:
				localctx = new In_expr_selectContext(this, localctx);
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9515;
				this.select_with_parens();
				}
				break;
			case 2:
				localctx = new In_expr_listContext(this, localctx);
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9516;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 9517;
				this.expr_list();
				this.state = 9518;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public case_expr(): Case_exprContext {
		let localctx: Case_exprContext = new Case_exprContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1296, PostgreSQLParser.RULE_case_expr);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9522;
			this.match(PostgreSQLParser.CASE);
			this.state = 9523;
			this.case_arg();
			this.state = 9524;
			this.when_clause_list();
			this.state = 9525;
			this.case_default();
			this.state = 9526;
			this.match(PostgreSQLParser.END_P);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public when_clause_list(): When_clause_listContext {
		let localctx: When_clause_listContext = new When_clause_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1298, PostgreSQLParser.RULE_when_clause_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9529;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			do {
				{
				{
				this.state = 9528;
				this.when_clause();
				}
				}
				this.state = 9531;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			} while (_la===102);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public when_clause(): When_clauseContext {
		let localctx: When_clauseContext = new When_clauseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1300, PostgreSQLParser.RULE_when_clause);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9533;
			this.match(PostgreSQLParser.WHEN);
			this.state = 9534;
			this.a_expr();
			this.state = 9535;
			this.match(PostgreSQLParser.THEN);
			this.state = 9536;
			this.a_expr();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public case_default(): Case_defaultContext {
		let localctx: Case_defaultContext = new Case_defaultContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1302, PostgreSQLParser.RULE_case_default);
		try {
			this.state = 9541;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 58:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9538;
				this.match(PostgreSQLParser.ELSE);
				this.state = 9539;
				this.a_expr();
				}
				break;
			case 445:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public case_arg(): Case_argContext {
		let localctx: Case_argContext = new Case_argContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1304, PostgreSQLParser.RULE_case_arg);
		try {
			this.state = 9545;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 2:
			case 12:
			case 13:
			case 28:
			case 29:
			case 33:
			case 35:
			case 40:
			case 41:
			case 43:
			case 44:
			case 45:
			case 47:
			case 48:
			case 49:
			case 50:
			case 51:
			case 52:
			case 53:
			case 57:
			case 60:
			case 61:
			case 75:
			case 76:
			case 77:
			case 78:
			case 89:
			case 92:
			case 96:
			case 98:
			case 99:
			case 106:
			case 107:
			case 108:
			case 109:
			case 110:
			case 111:
			case 112:
			case 113:
			case 114:
			case 115:
			case 116:
			case 117:
			case 118:
			case 119:
			case 120:
			case 121:
			case 122:
			case 123:
			case 124:
			case 125:
			case 126:
			case 127:
			case 128:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 463:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 521:
			case 523:
			case 525:
			case 526:
			case 530:
			case 534:
			case 536:
			case 537:
			case 538:
			case 547:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9543;
				this.a_expr();
				}
				break;
			case 102:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public columnref(): ColumnrefContext {
		let localctx: ColumnrefContext = new ColumnrefContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1306, PostgreSQLParser.RULE_columnref);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9547;
			this.colid();
			this.state = 9549;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 613, this._ctx) ) {
			case 1:
				{
				this.state = 9548;
				this.indirection();
				}
				break;
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public indirection_el(): Indirection_elContext {
		let localctx: Indirection_elContext = new Indirection_elContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1308, PostgreSQLParser.RULE_indirection_el);
		try {
			this.state = 9566;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 11:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9551;
				this.match(PostgreSQLParser.DOT);
				this.state = 9554;
				this._errHandler.sync(this);
				switch (this._input.LA(1)) {
				case 30:
				case 31:
				case 32:
				case 33:
				case 34:
				case 35:
				case 36:
				case 37:
				case 38:
				case 39:
				case 40:
				case 41:
				case 42:
				case 43:
				case 44:
				case 45:
				case 46:
				case 47:
				case 48:
				case 49:
				case 50:
				case 51:
				case 52:
				case 53:
				case 54:
				case 55:
				case 56:
				case 57:
				case 58:
				case 59:
				case 60:
				case 61:
				case 62:
				case 63:
				case 64:
				case 65:
				case 66:
				case 67:
				case 68:
				case 69:
				case 70:
				case 72:
				case 73:
				case 74:
				case 75:
				case 76:
				case 77:
				case 78:
				case 79:
				case 80:
				case 81:
				case 82:
				case 83:
				case 84:
				case 85:
				case 86:
				case 87:
				case 88:
				case 89:
				case 90:
				case 91:
				case 92:
				case 93:
				case 94:
				case 95:
				case 96:
				case 97:
				case 98:
				case 99:
				case 100:
				case 101:
				case 102:
				case 103:
				case 104:
				case 105:
				case 106:
				case 107:
				case 108:
				case 109:
				case 110:
				case 111:
				case 112:
				case 113:
				case 114:
				case 115:
				case 116:
				case 117:
				case 118:
				case 119:
				case 120:
				case 121:
				case 122:
				case 123:
				case 124:
				case 125:
				case 126:
				case 127:
				case 128:
				case 129:
				case 130:
				case 131:
				case 132:
				case 133:
				case 134:
				case 135:
				case 136:
				case 137:
				case 138:
				case 139:
				case 140:
				case 141:
				case 142:
				case 143:
				case 144:
				case 145:
				case 146:
				case 147:
				case 148:
				case 149:
				case 150:
				case 151:
				case 152:
				case 153:
				case 154:
				case 155:
				case 156:
				case 157:
				case 158:
				case 159:
				case 160:
				case 161:
				case 162:
				case 163:
				case 164:
				case 165:
				case 166:
				case 167:
				case 168:
				case 169:
				case 170:
				case 171:
				case 172:
				case 173:
				case 174:
				case 175:
				case 176:
				case 177:
				case 178:
				case 179:
				case 180:
				case 181:
				case 182:
				case 183:
				case 184:
				case 185:
				case 186:
				case 187:
				case 188:
				case 189:
				case 190:
				case 191:
				case 192:
				case 193:
				case 194:
				case 195:
				case 196:
				case 197:
				case 198:
				case 199:
				case 200:
				case 201:
				case 202:
				case 203:
				case 204:
				case 205:
				case 206:
				case 207:
				case 208:
				case 209:
				case 210:
				case 211:
				case 212:
				case 213:
				case 214:
				case 215:
				case 216:
				case 217:
				case 218:
				case 219:
				case 220:
				case 221:
				case 222:
				case 223:
				case 224:
				case 225:
				case 226:
				case 227:
				case 228:
				case 229:
				case 230:
				case 231:
				case 232:
				case 233:
				case 234:
				case 235:
				case 236:
				case 237:
				case 238:
				case 239:
				case 240:
				case 241:
				case 242:
				case 243:
				case 244:
				case 245:
				case 246:
				case 247:
				case 248:
				case 249:
				case 250:
				case 251:
				case 252:
				case 253:
				case 254:
				case 255:
				case 256:
				case 257:
				case 258:
				case 259:
				case 260:
				case 261:
				case 262:
				case 263:
				case 264:
				case 265:
				case 266:
				case 267:
				case 268:
				case 269:
				case 270:
				case 271:
				case 272:
				case 273:
				case 274:
				case 275:
				case 276:
				case 277:
				case 278:
				case 279:
				case 280:
				case 281:
				case 282:
				case 283:
				case 284:
				case 285:
				case 286:
				case 287:
				case 288:
				case 289:
				case 290:
				case 291:
				case 292:
				case 293:
				case 294:
				case 295:
				case 296:
				case 297:
				case 298:
				case 299:
				case 300:
				case 301:
				case 302:
				case 303:
				case 304:
				case 305:
				case 306:
				case 307:
				case 308:
				case 309:
				case 310:
				case 311:
				case 312:
				case 313:
				case 314:
				case 315:
				case 316:
				case 317:
				case 318:
				case 319:
				case 320:
				case 321:
				case 322:
				case 323:
				case 324:
				case 325:
				case 326:
				case 327:
				case 328:
				case 329:
				case 330:
				case 331:
				case 332:
				case 333:
				case 334:
				case 335:
				case 336:
				case 337:
				case 338:
				case 339:
				case 340:
				case 341:
				case 342:
				case 343:
				case 344:
				case 345:
				case 346:
				case 347:
				case 348:
				case 349:
				case 350:
				case 351:
				case 352:
				case 353:
				case 354:
				case 355:
				case 356:
				case 357:
				case 358:
				case 359:
				case 360:
				case 361:
				case 362:
				case 363:
				case 364:
				case 365:
				case 366:
				case 367:
				case 368:
				case 369:
				case 370:
				case 371:
				case 372:
				case 373:
				case 374:
				case 375:
				case 376:
				case 377:
				case 378:
				case 379:
				case 380:
				case 381:
				case 382:
				case 383:
				case 384:
				case 385:
				case 386:
				case 387:
				case 388:
				case 389:
				case 390:
				case 391:
				case 392:
				case 393:
				case 394:
				case 395:
				case 396:
				case 397:
				case 398:
				case 399:
				case 400:
				case 401:
				case 402:
				case 403:
				case 404:
				case 405:
				case 406:
				case 407:
				case 408:
				case 409:
				case 410:
				case 411:
				case 412:
				case 413:
				case 414:
				case 415:
				case 416:
				case 417:
				case 418:
				case 419:
				case 420:
				case 421:
				case 422:
				case 423:
				case 424:
				case 425:
				case 426:
				case 427:
				case 428:
				case 429:
				case 430:
				case 431:
				case 432:
				case 433:
				case 434:
				case 435:
				case 436:
				case 437:
				case 438:
				case 439:
				case 440:
				case 441:
				case 442:
				case 443:
				case 444:
				case 445:
				case 446:
				case 447:
				case 448:
				case 449:
				case 450:
				case 451:
				case 452:
				case 453:
				case 454:
				case 455:
				case 456:
				case 457:
				case 458:
				case 459:
				case 460:
				case 461:
				case 462:
				case 463:
				case 464:
				case 465:
				case 466:
				case 467:
				case 468:
				case 469:
				case 470:
				case 471:
				case 472:
				case 473:
				case 474:
				case 475:
				case 476:
				case 477:
				case 478:
				case 479:
				case 480:
				case 481:
				case 482:
				case 483:
				case 484:
				case 485:
				case 486:
				case 487:
				case 488:
				case 489:
				case 490:
				case 491:
				case 492:
				case 493:
				case 495:
				case 497:
				case 498:
				case 499:
				case 500:
				case 501:
				case 502:
				case 503:
				case 504:
				case 505:
				case 506:
				case 507:
				case 508:
				case 509:
				case 511:
				case 512:
				case 513:
				case 517:
				case 537:
				case 538:
					{
					this.state = 9552;
					this.attr_name();
					}
					break;
				case 9:
					{
					this.state = 9553;
					this.match(PostgreSQLParser.STAR);
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9556;
				this.match(PostgreSQLParser.OPEN_BRACKET);
				this.state = 9562;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 615, this._ctx) ) {
				case 1:
					{
					this.state = 9557;
					this.a_expr();
					}
					break;
				case 2:
					{
					this.state = 9558;
					this.opt_slice_bound();
					this.state = 9559;
					this.match(PostgreSQLParser.COLON);
					this.state = 9560;
					this.opt_slice_bound();
					}
					break;
				}
				this.state = 9564;
				this.match(PostgreSQLParser.CLOSE_BRACKET);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_slice_bound(): Opt_slice_boundContext {
		let localctx: Opt_slice_boundContext = new Opt_slice_boundContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1310, PostgreSQLParser.RULE_opt_slice_bound);
		try {
			this.state = 9570;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 2:
			case 12:
			case 13:
			case 28:
			case 29:
			case 33:
			case 35:
			case 40:
			case 41:
			case 43:
			case 44:
			case 45:
			case 47:
			case 48:
			case 49:
			case 50:
			case 51:
			case 52:
			case 53:
			case 57:
			case 60:
			case 61:
			case 75:
			case 76:
			case 77:
			case 78:
			case 89:
			case 92:
			case 96:
			case 98:
			case 99:
			case 106:
			case 107:
			case 108:
			case 109:
			case 110:
			case 111:
			case 112:
			case 113:
			case 114:
			case 115:
			case 116:
			case 117:
			case 118:
			case 119:
			case 120:
			case 121:
			case 122:
			case 123:
			case 124:
			case 125:
			case 126:
			case 127:
			case 128:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 463:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 521:
			case 523:
			case 525:
			case 526:
			case 530:
			case 534:
			case 536:
			case 537:
			case 538:
			case 547:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9568;
				this.a_expr();
				}
				break;
			case 5:
			case 8:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public indirection(): IndirectionContext {
		let localctx: IndirectionContext = new IndirectionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1312, PostgreSQLParser.RULE_indirection);
		try {
			let _alt: number;
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9573;
			this._errHandler.sync(this);
			_alt = 1;
			do {
				switch (_alt) {
				case 1:
					{
					{
					this.state = 9572;
					this.indirection_el();
					}
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				this.state = 9575;
				this._errHandler.sync(this);
				_alt = this._interp.adaptivePredict(this._input, 618, this._ctx);
			} while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_indirection(): Opt_indirectionContext {
		let localctx: Opt_indirectionContext = new Opt_indirectionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1314, PostgreSQLParser.RULE_opt_indirection);
		try {
			let _alt: number;
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9580;
			this._errHandler.sync(this);
			_alt = this._interp.adaptivePredict(this._input, 619, this._ctx);
			while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) {
				if (_alt === 1) {
					{
					{
					this.state = 9577;
					this.indirection_el();
					}
					}
				}
				this.state = 9582;
				this._errHandler.sync(this);
				_alt = this._interp.adaptivePredict(this._input, 619, this._ctx);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_target_list(): Opt_target_listContext {
		let localctx: Opt_target_listContext = new Opt_target_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1316, PostgreSQLParser.RULE_opt_target_list);
		try {
			this.state = 9585;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 620, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9583;
				this.target_list();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public target_list(): Target_listContext {
		let localctx: Target_listContext = new Target_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1318, PostgreSQLParser.RULE_target_list);
		try {
			let _alt: number;
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9587;
			this.target_el();
			this.state = 9592;
			this._errHandler.sync(this);
			_alt = this._interp.adaptivePredict(this._input, 621, this._ctx);
			while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) {
				if (_alt === 1) {
					{
					{
					this.state = 9588;
					this.match(PostgreSQLParser.COMMA);
					this.state = 9589;
					this.target_el();
					}
					}
				}
				this.state = 9594;
				this._errHandler.sync(this);
				_alt = this._interp.adaptivePredict(this._input, 621, this._ctx);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public target_el(): Target_elContext {
		let localctx: Target_elContext = new Target_elContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1320, PostgreSQLParser.RULE_target_el);
		try {
			this.state = 9603;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 2:
			case 12:
			case 13:
			case 28:
			case 29:
			case 33:
			case 35:
			case 40:
			case 41:
			case 43:
			case 44:
			case 45:
			case 47:
			case 48:
			case 49:
			case 50:
			case 51:
			case 52:
			case 53:
			case 57:
			case 60:
			case 61:
			case 75:
			case 76:
			case 77:
			case 78:
			case 89:
			case 92:
			case 96:
			case 98:
			case 99:
			case 106:
			case 107:
			case 108:
			case 109:
			case 110:
			case 111:
			case 112:
			case 113:
			case 114:
			case 115:
			case 116:
			case 117:
			case 118:
			case 119:
			case 120:
			case 121:
			case 122:
			case 123:
			case 124:
			case 125:
			case 126:
			case 127:
			case 128:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 463:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 521:
			case 523:
			case 525:
			case 526:
			case 530:
			case 534:
			case 536:
			case 537:
			case 538:
			case 547:
				localctx = new Target_labelContext(this, localctx);
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9595;
				this.a_expr();
				this.state = 9600;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 622, this._ctx) ) {
				case 1:
					{
					this.state = 9596;
					this.match(PostgreSQLParser.AS);
					this.state = 9597;
					this.collabel();
					}
					break;
				case 2:
					{
					this.state = 9598;
					this.identifier();
					}
					break;
				case 3:
					// tslint:disable-next-line:no-empty
					{
					}
					break;
				}
				}
				break;
			case 9:
				localctx = new Target_starContext(this, localctx);
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9602;
				this.match(PostgreSQLParser.STAR);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public qualified_name_list(): Qualified_name_listContext {
		let localctx: Qualified_name_listContext = new Qualified_name_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1322, PostgreSQLParser.RULE_qualified_name_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9605;
			this.qualified_name();
			this.state = 9610;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 9606;
				this.match(PostgreSQLParser.COMMA);
				this.state = 9607;
				this.qualified_name();
				}
				}
				this.state = 9612;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public qualified_name(): Qualified_nameContext {
		let localctx: Qualified_nameContext = new Qualified_nameContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1324, PostgreSQLParser.RULE_qualified_name);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9613;
			this.colid();
			this.state = 9615;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			if (_la===4 || _la===11) {
				{
				this.state = 9614;
				this.indirection();
				}
			}

			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public name_list(): Name_listContext {
		let localctx: Name_listContext = new Name_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1326, PostgreSQLParser.RULE_name_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9617;
			this.name();
			this.state = 9622;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 9618;
				this.match(PostgreSQLParser.COMMA);
				this.state = 9619;
				this.name();
				}
				}
				this.state = 9624;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public name(): NameContext {
		let localctx: NameContext = new NameContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1328, PostgreSQLParser.RULE_name);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9625;
			this.colid();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public attr_name(): Attr_nameContext {
		let localctx: Attr_nameContext = new Attr_nameContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1330, PostgreSQLParser.RULE_attr_name);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9627;
			this.collabel();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public file_name(): File_nameContext {
		let localctx: File_nameContext = new File_nameContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1332, PostgreSQLParser.RULE_file_name);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9629;
			this.sconst();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public func_name(): Func_nameContext {
		let localctx: Func_nameContext = new Func_nameContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1334, PostgreSQLParser.RULE_func_name);
		try {
			this.state = 9635;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 627, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9631;
				this.type_function_name();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9632;
				this.colid();
				this.state = 9633;
				this.indirection();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public aexprconst(): AexprconstContext {
		let localctx: AexprconstContext = new AexprconstContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1336, PostgreSQLParser.RULE_aexprconst);
		try {
			this.state = 9669;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 630, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9637;
				this.iconst();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9638;
				this.fconst();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 9639;
				this.sconst();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 9640;
				this.bconst();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 9641;
				this.xconst();
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 9642;
				this.func_name();
				this.state = 9650;
				this._errHandler.sync(this);
				switch (this._input.LA(1)) {
				case 521:
				case 523:
				case 525:
				case 547:
					{
					this.state = 9643;
					this.sconst();
					}
					break;
				case 2:
					{
					this.state = 9644;
					this.match(PostgreSQLParser.OPEN_PAREN);
					this.state = 9645;
					this.func_arg_list();
					this.state = 9646;
					this.opt_sort_clause();
					this.state = 9647;
					this.match(PostgreSQLParser.CLOSE_PAREN);
					this.state = 9648;
					this.sconst();
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 9652;
				this.consttypename();
				this.state = 9653;
				this.sconst();
				}
				break;
			case 8:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 9655;
				this.constinterval();
				this.state = 9664;
				this._errHandler.sync(this);
				switch (this._input.LA(1)) {
				case 521:
				case 523:
				case 525:
				case 547:
					{
					this.state = 9656;
					this.sconst();
					this.state = 9657;
					this.opt_interval();
					}
					break;
				case 2:
					{
					this.state = 9659;
					this.match(PostgreSQLParser.OPEN_PAREN);
					this.state = 9660;
					this.iconst();
					this.state = 9661;
					this.match(PostgreSQLParser.CLOSE_PAREN);
					this.state = 9662;
					this.sconst();
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				break;
			case 9:
				this.enterOuterAlt(localctx, 9);
				{
				this.state = 9666;
				this.match(PostgreSQLParser.TRUE_P);
				}
				break;
			case 10:
				this.enterOuterAlt(localctx, 10);
				{
				this.state = 9667;
				this.match(PostgreSQLParser.FALSE_P);
				}
				break;
			case 11:
				this.enterOuterAlt(localctx, 11);
				{
				this.state = 9668;
				this.match(PostgreSQLParser.NULL_P);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public xconst(): XconstContext {
		let localctx: XconstContext = new XconstContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1338, PostgreSQLParser.RULE_xconst);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9671;
			this.match(PostgreSQLParser.HexadecimalStringConstant);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public bconst(): BconstContext {
		let localctx: BconstContext = new BconstContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1340, PostgreSQLParser.RULE_bconst);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9673;
			this.match(PostgreSQLParser.BinaryStringConstant);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public fconst(): FconstContext {
		let localctx: FconstContext = new FconstContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1342, PostgreSQLParser.RULE_fconst);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9675;
			this.match(PostgreSQLParser.Numeric);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public iconst(): IconstContext {
		let localctx: IconstContext = new IconstContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1344, PostgreSQLParser.RULE_iconst);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9677;
			this.match(PostgreSQLParser.Integral);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public sconst(): SconstContext {
		let localctx: SconstContext = new SconstContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1346, PostgreSQLParser.RULE_sconst);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9679;
			this.anysconst();
			this.state = 9680;
			this.opt_uescape();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public anysconst(): AnysconstContext {
		let localctx: AnysconstContext = new AnysconstContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1348, PostgreSQLParser.RULE_anysconst);
		let _la: number;
		try {
			this.state = 9693;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 521:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9682;
				this.match(PostgreSQLParser.StringConstant);
				}
				break;
			case 523:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9683;
				this.match(PostgreSQLParser.UnicodeEscapeStringConstant);
				}
				break;
			case 525:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 9684;
				this.match(PostgreSQLParser.BeginDollarStringConstant);
				this.state = 9688;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				while (_la===553) {
					{
					{
					this.state = 9685;
					this.match(PostgreSQLParser.DollarText);
					}
					}
					this.state = 9690;
					this._errHandler.sync(this);
					_la = this._input.LA(1);
				}
				this.state = 9691;
				this.match(PostgreSQLParser.EndDollarStringConstant);
				}
				break;
			case 547:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 9692;
				this.match(PostgreSQLParser.EscapeStringConstant);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_uescape(): Opt_uescapeContext {
		let localctx: Opt_uescapeContext = new Opt_uescapeContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1350, PostgreSQLParser.RULE_opt_uescape);
		try {
			this.state = 9698;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 633, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9695;
				this.match(PostgreSQLParser.UESCAPE);
				this.state = 9696;
				this.anysconst();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public signediconst(): SignediconstContext {
		let localctx: SignediconstContext = new SignediconstContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1352, PostgreSQLParser.RULE_signediconst);
		try {
			this.state = 9705;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 534:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9700;
				this.iconst();
				}
				break;
			case 12:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9701;
				this.match(PostgreSQLParser.PLUS);
				this.state = 9702;
				this.iconst();
				}
				break;
			case 13:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 9703;
				this.match(PostgreSQLParser.MINUS);
				this.state = 9704;
				this.iconst();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public roleid(): RoleidContext {
		let localctx: RoleidContext = new RoleidContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1354, PostgreSQLParser.RULE_roleid);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9707;
			this.rolespec();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public rolespec(): RolespecContext {
		let localctx: RolespecContext = new RolespecContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1356, PostgreSQLParser.RULE_rolespec);
		try {
			this.state = 9712;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 92:
			case 106:
			case 107:
			case 108:
			case 109:
			case 110:
			case 111:
			case 112:
			case 113:
			case 114:
			case 115:
			case 116:
			case 117:
			case 118:
			case 119:
			case 120:
			case 121:
			case 122:
			case 123:
			case 124:
			case 125:
			case 126:
			case 127:
			case 128:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 463:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9709;
				this.nonreservedword();
				}
				break;
			case 52:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9710;
				this.match(PostgreSQLParser.CURRENT_USER);
				}
				break;
			case 89:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 9711;
				this.match(PostgreSQLParser.SESSION_USER);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public role_list(): Role_listContext {
		let localctx: Role_listContext = new Role_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1358, PostgreSQLParser.RULE_role_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9714;
			this.rolespec();
			this.state = 9719;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 9715;
				this.match(PostgreSQLParser.COMMA);
				this.state = 9716;
				this.rolespec();
				}
				}
				this.state = 9721;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public colid(): ColidContext {
		let localctx: ColidContext = new ColidContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1360, PostgreSQLParser.RULE_colid);
		try {
			this.state = 9726;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 637, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9722;
				this.identifier();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9723;
				this.unreserved_keyword();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 9724;
				this.col_name_keyword();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 9725;
				this.plsql_unreserved_keyword();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public type_function_name(): Type_function_nameContext {
		let localctx: Type_function_nameContext = new Type_function_nameContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1362, PostgreSQLParser.RULE_type_function_name);
		try {
			this.state = 9732;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 638, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9728;
				this.identifier();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9729;
				this.unreserved_keyword();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 9730;
				this.plsql_unreserved_keyword();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 9731;
				this.type_func_name_keyword();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public nonreservedword(): NonreservedwordContext {
		let localctx: NonreservedwordContext = new NonreservedwordContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1364, PostgreSQLParser.RULE_nonreservedword);
		try {
			this.state = 9738;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 639, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9734;
				this.identifier();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9735;
				this.unreserved_keyword();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 9736;
				this.col_name_keyword();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 9737;
				this.type_func_name_keyword();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public collabel(): CollabelContext {
		let localctx: CollabelContext = new CollabelContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1366, PostgreSQLParser.RULE_collabel);
		try {
			this.state = 9746;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 640, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9740;
				this.identifier();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9741;
				this.plsql_unreserved_keyword();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 9742;
				this.unreserved_keyword();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 9743;
				this.col_name_keyword();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 9744;
				this.type_func_name_keyword();
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 9745;
				this.reserved_keyword();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public identifier(): IdentifierContext {
		let localctx: IdentifierContext = new IdentifierContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1368, PostgreSQLParser.RULE_identifier);
		try {
			this.state = 9755;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 512:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9748;
				this.match(PostgreSQLParser.Identifier);
				this.state = 9749;
				this.opt_uescape();
				}
				break;
			case 513:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9750;
				this.match(PostgreSQLParser.QuotedIdentifier);
				}
				break;
			case 517:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 9751;
				this.match(PostgreSQLParser.UnicodeQuotedIdentifier);
				}
				break;
			case 537:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 9752;
				this.plsqlvariablename();
				}
				break;
			case 538:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 9753;
				this.plsqlidentifier();
				}
				break;
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 92:
			case 116:
			case 123:
			case 130:
			case 144:
			case 153:
			case 157:
			case 161:
			case 167:
			case 172:
			case 207:
			case 210:
			case 232:
			case 240:
			case 256:
			case 259:
			case 260:
			case 270:
			case 284:
			case 298:
			case 304:
			case 310:
			case 314:
			case 315:
			case 324:
			case 351:
			case 424:
			case 425:
			case 468:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 9754;
				this.plsql_unreserved_keyword();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public plsqlidentifier(): PlsqlidentifierContext {
		let localctx: PlsqlidentifierContext = new PlsqlidentifierContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1370, PostgreSQLParser.RULE_plsqlidentifier);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9757;
			this.match(PostgreSQLParser.PLSQLIDENTIFIER);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public unreserved_keyword(): Unreserved_keywordContext {
		let localctx: Unreserved_keywordContext = new Unreserved_keywordContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1372, PostgreSQLParser.RULE_unreserved_keyword);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9759;
			_la = this._input.LA(1);
			if(!(((((_la - 124)) & ~0x1F) === 0 && ((1 << (_la - 124)) & 4294967265) !== 0) || ((((_la - 156)) & ~0x1F) === 0 && ((1 << (_la - 156)) & 4294967295) !== 0) || ((((_la - 188)) & ~0x1F) === 0 && ((1 << (_la - 188)) & 4294967295) !== 0) || ((((_la - 220)) & ~0x1F) === 0 && ((1 << (_la - 220)) & 4294967295) !== 0) || ((((_la - 252)) & ~0x1F) === 0 && ((1 << (_la - 252)) & 4294967295) !== 0) || ((((_la - 284)) & ~0x1F) === 0 && ((1 << (_la - 284)) & 4294967295) !== 0) || ((((_la - 316)) & ~0x1F) === 0 && ((1 << (_la - 316)) & 4294967295) !== 0) || ((((_la - 348)) & ~0x1F) === 0 && ((1 << (_la - 348)) & 1073741823) !== 0) || ((((_la - 424)) & ~0x1F) === 0 && ((1 << (_la - 424)) & 4291821567) !== 0) || ((((_la - 456)) & ~0x1F) === 0 && ((1 << (_la - 456)) & 16770399) !== 0))) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public col_name_keyword(): Col_name_keywordContext {
		let localctx: Col_name_keywordContext = new Col_name_keywordContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1374, PostgreSQLParser.RULE_col_name_keyword);
		try {
			this.state = 9812;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 642, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9761;
				this.match(PostgreSQLParser.BETWEEN);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9762;
				this.match(PostgreSQLParser.BIGINT);
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 9763;
				this.bit();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 9764;
				this.match(PostgreSQLParser.BOOLEAN_P);
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 9765;
				this.match(PostgreSQLParser.CHAR_P);
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 9766;
				this.character();
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 9767;
				this.match(PostgreSQLParser.COALESCE);
				}
				break;
			case 8:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 9768;
				this.match(PostgreSQLParser.DEC);
				}
				break;
			case 9:
				this.enterOuterAlt(localctx, 9);
				{
				this.state = 9769;
				this.match(PostgreSQLParser.DECIMAL_P);
				}
				break;
			case 10:
				this.enterOuterAlt(localctx, 10);
				{
				this.state = 9770;
				this.match(PostgreSQLParser.EXISTS);
				}
				break;
			case 11:
				this.enterOuterAlt(localctx, 11);
				{
				this.state = 9771;
				this.match(PostgreSQLParser.EXTRACT);
				}
				break;
			case 12:
				this.enterOuterAlt(localctx, 12);
				{
				this.state = 9772;
				this.match(PostgreSQLParser.FLOAT_P);
				}
				break;
			case 13:
				this.enterOuterAlt(localctx, 13);
				{
				this.state = 9773;
				this.match(PostgreSQLParser.GREATEST);
				}
				break;
			case 14:
				this.enterOuterAlt(localctx, 14);
				{
				this.state = 9774;
				this.match(PostgreSQLParser.GROUPING);
				}
				break;
			case 15:
				this.enterOuterAlt(localctx, 15);
				{
				this.state = 9775;
				this.match(PostgreSQLParser.INOUT);
				}
				break;
			case 16:
				this.enterOuterAlt(localctx, 16);
				{
				this.state = 9776;
				this.match(PostgreSQLParser.INT_P);
				}
				break;
			case 17:
				this.enterOuterAlt(localctx, 17);
				{
				this.state = 9777;
				this.match(PostgreSQLParser.INTEGER);
				}
				break;
			case 18:
				this.enterOuterAlt(localctx, 18);
				{
				this.state = 9778;
				this.match(PostgreSQLParser.INTERVAL);
				}
				break;
			case 19:
				this.enterOuterAlt(localctx, 19);
				{
				this.state = 9779;
				this.match(PostgreSQLParser.LEAST);
				}
				break;
			case 20:
				this.enterOuterAlt(localctx, 20);
				{
				this.state = 9780;
				this.match(PostgreSQLParser.NATIONAL);
				}
				break;
			case 21:
				this.enterOuterAlt(localctx, 21);
				{
				this.state = 9781;
				this.match(PostgreSQLParser.NCHAR);
				}
				break;
			case 22:
				this.enterOuterAlt(localctx, 22);
				{
				this.state = 9782;
				this.match(PostgreSQLParser.NONE);
				}
				break;
			case 23:
				this.enterOuterAlt(localctx, 23);
				{
				this.state = 9783;
				this.match(PostgreSQLParser.NORMALIZE);
				}
				break;
			case 24:
				this.enterOuterAlt(localctx, 24);
				{
				this.state = 9784;
				this.match(PostgreSQLParser.NULLIF);
				}
				break;
			case 25:
				this.enterOuterAlt(localctx, 25);
				{
				this.state = 9785;
				this.numeric();
				}
				break;
			case 26:
				this.enterOuterAlt(localctx, 26);
				{
				this.state = 9786;
				this.match(PostgreSQLParser.OUT_P);
				}
				break;
			case 27:
				this.enterOuterAlt(localctx, 27);
				{
				this.state = 9787;
				this.match(PostgreSQLParser.OVERLAY);
				}
				break;
			case 28:
				this.enterOuterAlt(localctx, 28);
				{
				this.state = 9788;
				this.match(PostgreSQLParser.POSITION);
				}
				break;
			case 29:
				this.enterOuterAlt(localctx, 29);
				{
				this.state = 9789;
				this.match(PostgreSQLParser.PRECISION);
				}
				break;
			case 30:
				this.enterOuterAlt(localctx, 30);
				{
				this.state = 9790;
				this.match(PostgreSQLParser.REAL);
				}
				break;
			case 31:
				this.enterOuterAlt(localctx, 31);
				{
				this.state = 9791;
				this.match(PostgreSQLParser.ROW);
				}
				break;
			case 32:
				this.enterOuterAlt(localctx, 32);
				{
				this.state = 9792;
				this.match(PostgreSQLParser.SETOF);
				}
				break;
			case 33:
				this.enterOuterAlt(localctx, 33);
				{
				this.state = 9793;
				this.match(PostgreSQLParser.SMALLINT);
				}
				break;
			case 34:
				this.enterOuterAlt(localctx, 34);
				{
				this.state = 9794;
				this.match(PostgreSQLParser.SUBSTRING);
				}
				break;
			case 35:
				this.enterOuterAlt(localctx, 35);
				{
				this.state = 9795;
				this.match(PostgreSQLParser.TIME);
				}
				break;
			case 36:
				this.enterOuterAlt(localctx, 36);
				{
				this.state = 9796;
				this.match(PostgreSQLParser.TIMESTAMP);
				}
				break;
			case 37:
				this.enterOuterAlt(localctx, 37);
				{
				this.state = 9797;
				this.match(PostgreSQLParser.TREAT);
				}
				break;
			case 38:
				this.enterOuterAlt(localctx, 38);
				{
				this.state = 9798;
				this.match(PostgreSQLParser.TRIM);
				}
				break;
			case 39:
				this.enterOuterAlt(localctx, 39);
				{
				this.state = 9799;
				this.match(PostgreSQLParser.VALUES);
				}
				break;
			case 40:
				this.enterOuterAlt(localctx, 40);
				{
				this.state = 9800;
				this.match(PostgreSQLParser.VARCHAR);
				}
				break;
			case 41:
				this.enterOuterAlt(localctx, 41);
				{
				this.state = 9801;
				this.match(PostgreSQLParser.XMLATTRIBUTES);
				}
				break;
			case 42:
				this.enterOuterAlt(localctx, 42);
				{
				this.state = 9802;
				this.match(PostgreSQLParser.XMLCONCAT);
				}
				break;
			case 43:
				this.enterOuterAlt(localctx, 43);
				{
				this.state = 9803;
				this.match(PostgreSQLParser.XMLELEMENT);
				}
				break;
			case 44:
				this.enterOuterAlt(localctx, 44);
				{
				this.state = 9804;
				this.match(PostgreSQLParser.XMLEXISTS);
				}
				break;
			case 45:
				this.enterOuterAlt(localctx, 45);
				{
				this.state = 9805;
				this.match(PostgreSQLParser.XMLFOREST);
				}
				break;
			case 46:
				this.enterOuterAlt(localctx, 46);
				{
				this.state = 9806;
				this.match(PostgreSQLParser.XMLNAMESPACES);
				}
				break;
			case 47:
				this.enterOuterAlt(localctx, 47);
				{
				this.state = 9807;
				this.match(PostgreSQLParser.XMLPARSE);
				}
				break;
			case 48:
				this.enterOuterAlt(localctx, 48);
				{
				this.state = 9808;
				this.match(PostgreSQLParser.XMLPI);
				}
				break;
			case 49:
				this.enterOuterAlt(localctx, 49);
				{
				this.state = 9809;
				this.match(PostgreSQLParser.XMLROOT);
				}
				break;
			case 50:
				this.enterOuterAlt(localctx, 50);
				{
				this.state = 9810;
				this.match(PostgreSQLParser.XMLSERIALIZE);
				}
				break;
			case 51:
				this.enterOuterAlt(localctx, 51);
				{
				this.state = 9811;
				this.match(PostgreSQLParser.XMLTABLE);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public type_func_name_keyword(): Type_func_name_keywordContext {
		let localctx: Type_func_name_keywordContext = new Type_func_name_keywordContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1376, PostgreSQLParser.RULE_type_func_name_keyword);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9814;
			_la = this._input.LA(1);
			if(!(((((_la - 106)) & ~0x1F) === 0 && ((1 << (_la - 106)) & 8126463) !== 0) || _la===463)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public reserved_keyword(): Reserved_keywordContext {
		let localctx: Reserved_keywordContext = new Reserved_keywordContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1378, PostgreSQLParser.RULE_reserved_keyword);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9816;
			_la = this._input.LA(1);
			if(!(((((_la - 30)) & ~0x1F) === 0 && ((1 << (_la - 30)) & 4286578687) !== 0) || ((((_la - 62)) & ~0x1F) === 0 && ((1 << (_la - 62)) & 4294966783) !== 0) || ((((_la - 94)) & ~0x1F) === 0 && ((1 << (_la - 94)) & 4095) !== 0) || _la===445)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public pl_function(): Pl_functionContext {
		let localctx: Pl_functionContext = new Pl_functionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1380, PostgreSQLParser.RULE_pl_function);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9818;
			this.comp_options();
			this.state = 9819;
			this.pl_block();
			this.state = 9820;
			this.opt_semi();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public comp_options(): Comp_optionsContext {
		let localctx: Comp_optionsContext = new Comp_optionsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1382, PostgreSQLParser.RULE_comp_options);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9825;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===29) {
				{
				{
				this.state = 9822;
				this.comp_option();
				}
				}
				this.state = 9827;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public comp_option(): Comp_optionContext {
		let localctx: Comp_optionContext = new Comp_optionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1384, PostgreSQLParser.RULE_comp_option);
		try {
			this.state = 9848;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 644, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9828;
				this.sharp();
				this.state = 9829;
				this.match(PostgreSQLParser.OPTION);
				this.state = 9830;
				this.match(PostgreSQLParser.DUMP);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9832;
				this.sharp();
				this.state = 9833;
				this.match(PostgreSQLParser.PRINT_STRICT_PARAMS);
				this.state = 9834;
				this.option_value();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 9836;
				this.sharp();
				this.state = 9837;
				this.match(PostgreSQLParser.VARIABLE_CONFLICT);
				this.state = 9838;
				this.match(PostgreSQLParser.ERROR);
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 9840;
				this.sharp();
				this.state = 9841;
				this.match(PostgreSQLParser.VARIABLE_CONFLICT);
				this.state = 9842;
				this.match(PostgreSQLParser.USE_VARIABLE);
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 9844;
				this.sharp();
				this.state = 9845;
				this.match(PostgreSQLParser.VARIABLE_CONFLICT);
				this.state = 9846;
				this.match(PostgreSQLParser.USE_COLUMN);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public sharp(): SharpContext {
		let localctx: SharpContext = new SharpContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1386, PostgreSQLParser.RULE_sharp);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9850;
			this.match(PostgreSQLParser.Operator);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public option_value(): Option_valueContext {
		let localctx: Option_valueContext = new Option_valueContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1388, PostgreSQLParser.RULE_option_value);
		try {
			this.state = 9856;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 645, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9852;
				this.sconst();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9853;
				this.reserved_keyword();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 9854;
				this.plsql_unreserved_keyword();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 9855;
				this.unreserved_keyword();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_semi(): Opt_semiContext {
		let localctx: Opt_semiContext = new Opt_semiContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1390, PostgreSQLParser.RULE_opt_semi);
		try {
			this.state = 9860;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case -1:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9859;
				this.match(PostgreSQLParser.SEMI);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public pl_block(): Pl_blockContext {
		let localctx: Pl_blockContext = new Pl_blockContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1392, PostgreSQLParser.RULE_pl_block);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9862;
			this.decl_sect();
			this.state = 9863;
			this.match(PostgreSQLParser.BEGIN_P);
			this.state = 9864;
			this.proc_sect();
			this.state = 9865;
			this.exception_sect();
			this.state = 9866;
			this.match(PostgreSQLParser.END_P);
			this.state = 9867;
			this.opt_label();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public decl_sect(): Decl_sectContext {
		let localctx: Decl_sectContext = new Decl_sectContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1394, PostgreSQLParser.RULE_decl_sect);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9869;
			this.opt_block_label();
			this.state = 9874;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			if (_la===178) {
				{
				this.state = 9870;
				this.decl_start();
				this.state = 9872;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 647, this._ctx) ) {
				case 1:
					{
					this.state = 9871;
					this.decl_stmts();
					}
					break;
				}
				}
			}

			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public decl_start(): Decl_startContext {
		let localctx: Decl_startContext = new Decl_startContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1396, PostgreSQLParser.RULE_decl_start);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9876;
			this.match(PostgreSQLParser.DECLARE);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public decl_stmts(): Decl_stmtsContext {
		let localctx: Decl_stmtsContext = new Decl_stmtsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1398, PostgreSQLParser.RULE_decl_stmts);
		try {
			let _alt: number;
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9879;
			this._errHandler.sync(this);
			_alt = 1;
			do {
				switch (_alt) {
				case 1:
					{
					{
					this.state = 9878;
					this.decl_stmt();
					}
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				this.state = 9881;
				this._errHandler.sync(this);
				_alt = this._interp.adaptivePredict(this._input, 649, this._ctx);
			} while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public label_decl(): Label_declContext {
		let localctx: Label_declContext = new Label_declContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1400, PostgreSQLParser.RULE_label_decl);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9883;
			this.match(PostgreSQLParser.LESS_LESS);
			this.state = 9884;
			this.any_identifier();
			this.state = 9885;
			this.match(PostgreSQLParser.GREATER_GREATER);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public decl_stmt(): Decl_stmtContext {
		let localctx: Decl_stmtContext = new Decl_stmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1402, PostgreSQLParser.RULE_decl_stmt);
		try {
			this.state = 9890;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 650, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9887;
				this.decl_statement();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9888;
				this.match(PostgreSQLParser.DECLARE);
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 9889;
				this.label_decl();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public decl_statement(): Decl_statementContext {
		let localctx: Decl_statementContext = new Decl_statementContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1404, PostgreSQLParser.RULE_decl_statement);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9892;
			this.decl_varname();
			this.state = 9908;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 651, this._ctx) ) {
			case 1:
				{
				this.state = 9893;
				this.match(PostgreSQLParser.ALIAS);
				this.state = 9894;
				this.match(PostgreSQLParser.FOR);
				this.state = 9895;
				this.decl_aliasitem();
				}
				break;
			case 2:
				{
				this.state = 9896;
				this.decl_const();
				this.state = 9897;
				this.decl_datatype();
				this.state = 9898;
				this.decl_collate();
				this.state = 9899;
				this.decl_notnull();
				this.state = 9900;
				this.decl_defval();
				}
				break;
			case 3:
				{
				this.state = 9902;
				this.opt_scrollable();
				this.state = 9903;
				this.match(PostgreSQLParser.CURSOR);
				this.state = 9904;
				this.decl_cursor_args();
				this.state = 9905;
				this.decl_is_for();
				this.state = 9906;
				this.decl_cursor_query();
				}
				break;
			}
			this.state = 9910;
			this.match(PostgreSQLParser.SEMI);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_scrollable(): Opt_scrollableContext {
		let localctx: Opt_scrollableContext = new Opt_scrollableContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1406, PostgreSQLParser.RULE_opt_scrollable);
		try {
			this.state = 9916;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 172:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 260:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9913;
				this.match(PostgreSQLParser.NO);
				this.state = 9914;
				this.match(PostgreSQLParser.SCROLL);
				}
				break;
			case 315:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 9915;
				this.match(PostgreSQLParser.SCROLL);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public decl_cursor_query(): Decl_cursor_queryContext {
		let localctx: Decl_cursor_queryContext = new Decl_cursor_queryContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1408, PostgreSQLParser.RULE_decl_cursor_query);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9918;
			this.selectstmt();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public decl_cursor_args(): Decl_cursor_argsContext {
		let localctx: Decl_cursor_argsContext = new Decl_cursor_argsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1410, PostgreSQLParser.RULE_decl_cursor_args);
		try {
			this.state = 9925;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 62:
			case 116:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9921;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 9922;
				this.decl_cursor_arglist();
				this.state = 9923;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public decl_cursor_arglist(): Decl_cursor_arglistContext {
		let localctx: Decl_cursor_arglistContext = new Decl_cursor_arglistContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1412, PostgreSQLParser.RULE_decl_cursor_arglist);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9927;
			this.decl_cursor_arg();
			this.state = 9932;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 9928;
				this.match(PostgreSQLParser.COMMA);
				this.state = 9929;
				this.decl_cursor_arg();
				}
				}
				this.state = 9934;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public decl_cursor_arg(): Decl_cursor_argContext {
		let localctx: Decl_cursor_argContext = new Decl_cursor_argContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1414, PostgreSQLParser.RULE_decl_cursor_arg);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9935;
			this.decl_varname();
			this.state = 9936;
			this.decl_datatype();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public decl_is_for(): Decl_is_forContext {
		let localctx: Decl_is_forContext = new Decl_is_forContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1416, PostgreSQLParser.RULE_decl_is_for);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9938;
			_la = this._input.LA(1);
			if(!(_la===62 || _la===116)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public decl_aliasitem(): Decl_aliasitemContext {
		let localctx: Decl_aliasitemContext = new Decl_aliasitemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1418, PostgreSQLParser.RULE_decl_aliasitem);
		try {
			this.state = 9942;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 28:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9940;
				this.match(PostgreSQLParser.PARAM);
				}
				break;
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 92:
			case 116:
			case 123:
			case 124:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9941;
				this.colid();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public decl_varname(): Decl_varnameContext {
		let localctx: Decl_varnameContext = new Decl_varnameContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1420, PostgreSQLParser.RULE_decl_varname);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9944;
			this.any_identifier();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public decl_const(): Decl_constContext {
		let localctx: Decl_constContext = new Decl_constContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1422, PostgreSQLParser.RULE_decl_const);
		try {
			this.state = 9948;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 656, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9947;
				this.match(PostgreSQLParser.CONSTANT);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public decl_datatype(): Decl_datatypeContext {
		let localctx: Decl_datatypeContext = new Decl_datatypeContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1424, PostgreSQLParser.RULE_decl_datatype);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9950;
			this.typename();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public decl_collate(): Decl_collateContext {
		let localctx: Decl_collateContext = new Decl_collateContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1426, PostgreSQLParser.RULE_decl_collate);
		try {
			this.state = 9955;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 7:
			case 10:
			case 20:
			case 53:
			case 77:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 43:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9953;
				this.match(PostgreSQLParser.COLLATE);
				this.state = 9954;
				this.any_name();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public decl_notnull(): Decl_notnullContext {
		let localctx: Decl_notnullContext = new Decl_notnullContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1428, PostgreSQLParser.RULE_decl_notnull);
		try {
			this.state = 9960;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 7:
			case 10:
			case 20:
			case 53:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 77:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9958;
				this.match(PostgreSQLParser.NOT);
				this.state = 9959;
				this.match(PostgreSQLParser.NULL_P);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public decl_defval(): Decl_defvalContext {
		let localctx: Decl_defvalContext = new Decl_defvalContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1430, PostgreSQLParser.RULE_decl_defval);
		try {
			this.state = 9966;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 7:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 10:
			case 20:
			case 53:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9963;
				this.decl_defkey();
				this.state = 9964;
				this.sql_expression();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public decl_defkey(): Decl_defkeyContext {
		let localctx: Decl_defkeyContext = new Decl_defkeyContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1432, PostgreSQLParser.RULE_decl_defkey);
		try {
			this.state = 9970;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 10:
			case 20:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9968;
				this.assign_operator();
				}
				break;
			case 53:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9969;
				this.match(PostgreSQLParser.DEFAULT);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public assign_operator(): Assign_operatorContext {
		let localctx: Assign_operatorContext = new Assign_operatorContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1434, PostgreSQLParser.RULE_assign_operator);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9972;
			_la = this._input.LA(1);
			if(!(_la===10 || _la===20)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public proc_sect(): Proc_sectContext {
		let localctx: Proc_sectContext = new Proc_sectContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1436, PostgreSQLParser.RULE_proc_sect);
		try {
			let _alt: number;
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 9977;
			this._errHandler.sync(this);
			_alt = this._interp.adaptivePredict(this._input, 661, this._ctx);
			while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) {
				if (_alt === 1) {
					{
					{
					this.state = 9974;
					this.proc_stmt();
					}
					}
				}
				this.state = 9979;
				this._errHandler.sync(this);
				_alt = this._interp.adaptivePredict(this._input, 661, this._ctx);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public proc_stmt(): Proc_stmtContext {
		let localctx: Proc_stmtContext = new Proc_stmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1438, PostgreSQLParser.RULE_proc_stmt);
		try {
			this.state = 10007;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 662, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 9980;
				this.pl_block();
				this.state = 9981;
				this.match(PostgreSQLParser.SEMI);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 9983;
				this.stmt_return();
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 9984;
				this.stmt_raise();
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 9985;
				this.stmt_assign();
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 9986;
				this.stmt_if();
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 9987;
				this.stmt_case();
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 9988;
				this.stmt_loop();
				}
				break;
			case 8:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 9989;
				this.stmt_while();
				}
				break;
			case 9:
				this.enterOuterAlt(localctx, 9);
				{
				this.state = 9990;
				this.stmt_for();
				}
				break;
			case 10:
				this.enterOuterAlt(localctx, 10);
				{
				this.state = 9991;
				this.stmt_foreach_a();
				}
				break;
			case 11:
				this.enterOuterAlt(localctx, 11);
				{
				this.state = 9992;
				this.stmt_exit();
				}
				break;
			case 12:
				this.enterOuterAlt(localctx, 12);
				{
				this.state = 9993;
				this.stmt_assert();
				}
				break;
			case 13:
				this.enterOuterAlt(localctx, 13);
				{
				this.state = 9994;
				this.stmt_execsql();
				}
				break;
			case 14:
				this.enterOuterAlt(localctx, 14);
				{
				this.state = 9995;
				this.stmt_dynexecute();
				}
				break;
			case 15:
				this.enterOuterAlt(localctx, 15);
				{
				this.state = 9996;
				this.stmt_perform();
				}
				break;
			case 16:
				this.enterOuterAlt(localctx, 16);
				{
				this.state = 9997;
				this.stmt_call();
				}
				break;
			case 17:
				this.enterOuterAlt(localctx, 17);
				{
				this.state = 9998;
				this.stmt_getdiag();
				}
				break;
			case 18:
				this.enterOuterAlt(localctx, 18);
				{
				this.state = 9999;
				this.stmt_open();
				}
				break;
			case 19:
				this.enterOuterAlt(localctx, 19);
				{
				this.state = 10000;
				this.stmt_fetch();
				}
				break;
			case 20:
				this.enterOuterAlt(localctx, 20);
				{
				this.state = 10001;
				this.stmt_move();
				}
				break;
			case 21:
				this.enterOuterAlt(localctx, 21);
				{
				this.state = 10002;
				this.stmt_close();
				}
				break;
			case 22:
				this.enterOuterAlt(localctx, 22);
				{
				this.state = 10003;
				this.stmt_null();
				}
				break;
			case 23:
				this.enterOuterAlt(localctx, 23);
				{
				this.state = 10004;
				this.stmt_commit();
				}
				break;
			case 24:
				this.enterOuterAlt(localctx, 24);
				{
				this.state = 10005;
				this.stmt_rollback();
				}
				break;
			case 25:
				this.enterOuterAlt(localctx, 25);
				{
				this.state = 10006;
				this.stmt_set();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public stmt_perform(): Stmt_performContext {
		let localctx: Stmt_performContext = new Stmt_performContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1440, PostgreSQLParser.RULE_stmt_perform);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10009;
			this.match(PostgreSQLParser.PERFORM);
			this.state = 10010;
			this.expr_until_semi();
			this.state = 10011;
			this.match(PostgreSQLParser.SEMI);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public stmt_call(): Stmt_callContext {
		let localctx: Stmt_callContext = new Stmt_callContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1442, PostgreSQLParser.RULE_stmt_call);
		try {
			this.state = 10027;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 424:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 10013;
				this.match(PostgreSQLParser.CALL);
				this.state = 10014;
				this.any_identifier();
				this.state = 10015;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 10016;
				this.opt_expr_list();
				this.state = 10017;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 10018;
				this.match(PostgreSQLParser.SEMI);
				}
				break;
			case 57:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10020;
				this.match(PostgreSQLParser.DO);
				this.state = 10021;
				this.any_identifier();
				this.state = 10022;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 10023;
				this.opt_expr_list();
				this.state = 10024;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				this.state = 10025;
				this.match(PostgreSQLParser.SEMI);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_expr_list(): Opt_expr_listContext {
		let localctx: Opt_expr_listContext = new Opt_expr_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1444, PostgreSQLParser.RULE_opt_expr_list);
		try {
			this.state = 10031;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 3:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 2:
			case 12:
			case 13:
			case 28:
			case 29:
			case 33:
			case 35:
			case 40:
			case 41:
			case 43:
			case 44:
			case 45:
			case 47:
			case 48:
			case 49:
			case 50:
			case 51:
			case 52:
			case 53:
			case 57:
			case 60:
			case 61:
			case 75:
			case 76:
			case 77:
			case 78:
			case 89:
			case 92:
			case 96:
			case 98:
			case 99:
			case 106:
			case 107:
			case 108:
			case 109:
			case 110:
			case 111:
			case 112:
			case 113:
			case 114:
			case 115:
			case 116:
			case 117:
			case 118:
			case 119:
			case 120:
			case 121:
			case 122:
			case 123:
			case 124:
			case 125:
			case 126:
			case 127:
			case 128:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 463:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 521:
			case 523:
			case 525:
			case 526:
			case 530:
			case 534:
			case 536:
			case 537:
			case 538:
			case 547:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10030;
				this.expr_list();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public stmt_assign(): Stmt_assignContext {
		let localctx: Stmt_assignContext = new Stmt_assignContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1446, PostgreSQLParser.RULE_stmt_assign);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10033;
			this.assign_var();
			this.state = 10034;
			this.assign_operator();
			this.state = 10035;
			this.sql_expression();
			this.state = 10036;
			this.match(PostgreSQLParser.SEMI);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public stmt_getdiag(): Stmt_getdiagContext {
		let localctx: Stmt_getdiagContext = new Stmt_getdiagContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1448, PostgreSQLParser.RULE_stmt_getdiag);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10038;
			this.match(PostgreSQLParser.GET);
			this.state = 10039;
			this.getdiag_area_opt();
			this.state = 10040;
			this.match(PostgreSQLParser.DIAGNOSTICS);
			this.state = 10041;
			this.getdiag_list();
			this.state = 10042;
			this.match(PostgreSQLParser.SEMI);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public getdiag_area_opt(): Getdiag_area_optContext {
		let localctx: Getdiag_area_optContext = new Getdiag_area_optContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1450, PostgreSQLParser.RULE_getdiag_area_opt);
		try {
			this.state = 10047;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 491:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 425:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10045;
				this.match(PostgreSQLParser.CURRENT_P);
				}
				break;
			case 492:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 10046;
				this.match(PostgreSQLParser.STACKED);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public getdiag_list(): Getdiag_listContext {
		let localctx: Getdiag_listContext = new Getdiag_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1452, PostgreSQLParser.RULE_getdiag_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10049;
			this.getdiag_list_item();
			this.state = 10054;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 10050;
				this.match(PostgreSQLParser.COMMA);
				this.state = 10051;
				this.getdiag_list_item();
				}
				}
				this.state = 10056;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public getdiag_list_item(): Getdiag_list_itemContext {
		let localctx: Getdiag_list_itemContext = new Getdiag_list_itemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1454, PostgreSQLParser.RULE_getdiag_list_item);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10057;
			this.getdiag_target();
			this.state = 10058;
			this.assign_operator();
			this.state = 10059;
			this.getdiag_item();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public getdiag_item(): Getdiag_itemContext {
		let localctx: Getdiag_itemContext = new Getdiag_itemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1456, PostgreSQLParser.RULE_getdiag_item);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10061;
			this.colid();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public getdiag_target(): Getdiag_targetContext {
		let localctx: Getdiag_targetContext = new Getdiag_targetContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1458, PostgreSQLParser.RULE_getdiag_target);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10063;
			this.assign_var();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public assign_var(): Assign_varContext {
		let localctx: Assign_varContext = new Assign_varContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1460, PostgreSQLParser.RULE_assign_var);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10067;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 92:
			case 116:
			case 123:
			case 124:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
				{
				this.state = 10065;
				this.any_name();
				}
				break;
			case 28:
				{
				this.state = 10066;
				this.match(PostgreSQLParser.PARAM);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
			this.state = 10075;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===4) {
				{
				{
				this.state = 10069;
				this.match(PostgreSQLParser.OPEN_BRACKET);
				this.state = 10070;
				this.expr_until_rightbracket();
				this.state = 10071;
				this.match(PostgreSQLParser.CLOSE_BRACKET);
				}
				}
				this.state = 10077;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public stmt_if(): Stmt_ifContext {
		let localctx: Stmt_ifContext = new Stmt_ifContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1462, PostgreSQLParser.RULE_stmt_if);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10078;
			this.match(PostgreSQLParser.IF_P);
			this.state = 10079;
			this.expr_until_then();
			this.state = 10080;
			this.match(PostgreSQLParser.THEN);
			this.state = 10081;
			this.proc_sect();
			this.state = 10082;
			this.stmt_elsifs();
			this.state = 10083;
			this.stmt_else();
			this.state = 10084;
			this.match(PostgreSQLParser.END_P);
			this.state = 10085;
			this.match(PostgreSQLParser.IF_P);
			this.state = 10086;
			this.match(PostgreSQLParser.SEMI);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public stmt_elsifs(): Stmt_elsifsContext {
		let localctx: Stmt_elsifsContext = new Stmt_elsifsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1464, PostgreSQLParser.RULE_stmt_elsifs);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10095;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===493) {
				{
				{
				this.state = 10088;
				this.match(PostgreSQLParser.ELSIF);
				this.state = 10089;
				this.a_expr();
				this.state = 10090;
				this.match(PostgreSQLParser.THEN);
				this.state = 10091;
				this.proc_sect();
				}
				}
				this.state = 10097;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public stmt_else(): Stmt_elseContext {
		let localctx: Stmt_elseContext = new Stmt_elseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1466, PostgreSQLParser.RULE_stmt_else);
		try {
			this.state = 10101;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 445:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 58:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10099;
				this.match(PostgreSQLParser.ELSE);
				this.state = 10100;
				this.proc_sect();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public stmt_case(): Stmt_caseContext {
		let localctx: Stmt_caseContext = new Stmt_caseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1468, PostgreSQLParser.RULE_stmt_case);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10103;
			this.match(PostgreSQLParser.CASE);
			this.state = 10104;
			this.opt_expr_until_when();
			this.state = 10105;
			this.case_when_list();
			this.state = 10106;
			this.opt_case_else();
			this.state = 10107;
			this.match(PostgreSQLParser.END_P);
			this.state = 10108;
			this.match(PostgreSQLParser.CASE);
			this.state = 10109;
			this.match(PostgreSQLParser.SEMI);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_expr_until_when(): Opt_expr_until_whenContext {
		let localctx: Opt_expr_until_whenContext = new Opt_expr_until_whenContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1470, PostgreSQLParser.RULE_opt_expr_until_when);
		try {
			this.state = 10113;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 671, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10112;
				this.sql_expression();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public case_when_list(): Case_when_listContext {
		let localctx: Case_when_listContext = new Case_when_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1472, PostgreSQLParser.RULE_case_when_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10116;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			do {
				{
				{
				this.state = 10115;
				this.case_when();
				}
				}
				this.state = 10118;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			} while (_la===102);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public case_when(): Case_whenContext {
		let localctx: Case_whenContext = new Case_whenContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1474, PostgreSQLParser.RULE_case_when);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10120;
			this.match(PostgreSQLParser.WHEN);
			this.state = 10121;
			this.expr_list();
			this.state = 10122;
			this.match(PostgreSQLParser.THEN);
			this.state = 10123;
			this.proc_sect();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_case_else(): Opt_case_elseContext {
		let localctx: Opt_case_elseContext = new Opt_case_elseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1476, PostgreSQLParser.RULE_opt_case_else);
		try {
			this.state = 10128;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 445:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 58:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10126;
				this.match(PostgreSQLParser.ELSE);
				this.state = 10127;
				this.proc_sect();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public stmt_loop(): Stmt_loopContext {
		let localctx: Stmt_loopContext = new Stmt_loopContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1478, PostgreSQLParser.RULE_stmt_loop);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10130;
			this.opt_loop_label();
			this.state = 10131;
			this.loop_body();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public stmt_while(): Stmt_whileContext {
		let localctx: Stmt_whileContext = new Stmt_whileContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1480, PostgreSQLParser.RULE_stmt_while);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10133;
			this.opt_loop_label();
			this.state = 10134;
			this.match(PostgreSQLParser.WHILE);
			this.state = 10135;
			this.expr_until_loop();
			this.state = 10136;
			this.loop_body();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public stmt_for(): Stmt_forContext {
		let localctx: Stmt_forContext = new Stmt_forContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1482, PostgreSQLParser.RULE_stmt_for);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10138;
			this.opt_loop_label();
			this.state = 10139;
			this.match(PostgreSQLParser.FOR);
			this.state = 10140;
			this.for_control();
			this.state = 10141;
			this.loop_body();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public for_control(): For_controlContext {
		let localctx: For_controlContext = new For_controlContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1484, PostgreSQLParser.RULE_for_control);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10143;
			this.for_variable();
			this.state = 10144;
			this.match(PostgreSQLParser.IN_P);
			this.state = 10160;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 674, this._ctx) ) {
			case 1:
				{
				this.state = 10145;
				this.cursor_name();
				this.state = 10146;
				this.opt_cursor_parameters();
				}
				break;
			case 2:
				{
				this.state = 10148;
				this.selectstmt();
				}
				break;
			case 3:
				{
				this.state = 10149;
				this.explainstmt();
				}
				break;
			case 4:
				{
				this.state = 10150;
				this.match(PostgreSQLParser.EXECUTE);
				this.state = 10151;
				this.a_expr();
				this.state = 10152;
				this.opt_for_using_expression();
				}
				break;
			case 5:
				{
				this.state = 10154;
				this.opt_reverse();
				this.state = 10155;
				this.a_expr();
				this.state = 10156;
				this.match(PostgreSQLParser.DOT_DOT);
				this.state = 10157;
				this.a_expr();
				this.state = 10158;
				this.opt_by_expression();
				}
				break;
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_for_using_expression(): Opt_for_using_expressionContext {
		let localctx: Opt_for_using_expressionContext = new Opt_for_using_expressionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1486, PostgreSQLParser.RULE_opt_for_using_expression);
		try {
			this.state = 10165;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 7:
			case 510:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 100:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10163;
				this.match(PostgreSQLParser.USING);
				this.state = 10164;
				this.expr_list();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_cursor_parameters(): Opt_cursor_parametersContext {
		let localctx: Opt_cursor_parametersContext = new Opt_cursor_parametersContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1488, PostgreSQLParser.RULE_opt_cursor_parameters);
		let _la: number;
		try {
			this.state = 10179;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 510:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10168;
				this.match(PostgreSQLParser.OPEN_PAREN);
				this.state = 10169;
				this.a_expr();
				this.state = 10174;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				while (_la===6) {
					{
					{
					this.state = 10170;
					this.match(PostgreSQLParser.COMMA);
					this.state = 10171;
					this.a_expr();
					}
					}
					this.state = 10176;
					this._errHandler.sync(this);
					_la = this._input.LA(1);
				}
				this.state = 10177;
				this.match(PostgreSQLParser.CLOSE_PAREN);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_reverse(): Opt_reverseContext {
		let localctx: Opt_reverseContext = new Opt_reverseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1490, PostgreSQLParser.RULE_opt_reverse);
		try {
			this.state = 10183;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 678, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10182;
				this.match(PostgreSQLParser.REVERSE);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_by_expression(): Opt_by_expressionContext {
		let localctx: Opt_by_expressionContext = new Opt_by_expressionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1492, PostgreSQLParser.RULE_opt_by_expression);
		try {
			this.state = 10188;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 510:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 147:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10186;
				this.match(PostgreSQLParser.BY);
				this.state = 10187;
				this.a_expr();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public for_variable(): For_variableContext {
		let localctx: For_variableContext = new For_variableContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1494, PostgreSQLParser.RULE_for_variable);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10190;
			this.any_name_list();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public stmt_foreach_a(): Stmt_foreach_aContext {
		let localctx: Stmt_foreach_aContext = new Stmt_foreach_aContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1496, PostgreSQLParser.RULE_stmt_foreach_a);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10192;
			this.opt_loop_label();
			this.state = 10193;
			this.match(PostgreSQLParser.FOREACH);
			this.state = 10194;
			this.for_variable();
			this.state = 10195;
			this.foreach_slice();
			this.state = 10196;
			this.match(PostgreSQLParser.IN_P);
			this.state = 10197;
			this.match(PostgreSQLParser.ARRAY);
			this.state = 10198;
			this.a_expr();
			this.state = 10199;
			this.loop_body();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public foreach_slice(): Foreach_sliceContext {
		let localctx: Foreach_sliceContext = new Foreach_sliceContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1498, PostgreSQLParser.RULE_foreach_slice);
		try {
			this.state = 10204;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 68:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 497:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10202;
				this.match(PostgreSQLParser.SLICE);
				this.state = 10203;
				this.iconst();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public stmt_exit(): Stmt_exitContext {
		let localctx: Stmt_exitContext = new Stmt_exitContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1500, PostgreSQLParser.RULE_stmt_exit);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10206;
			this.exit_type();
			this.state = 10207;
			this.opt_label();
			this.state = 10208;
			this.opt_exitcond();
			this.state = 10209;
			this.match(PostgreSQLParser.SEMI);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public exit_type(): Exit_typeContext {
		let localctx: Exit_typeContext = new Exit_typeContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1502, PostgreSQLParser.RULE_exit_type);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10211;
			_la = this._input.LA(1);
			if(!(_la===167 || _la===498)) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public stmt_return(): Stmt_returnContext {
		let localctx: Stmt_returnContext = new Stmt_returnContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1504, PostgreSQLParser.RULE_stmt_return);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10213;
			this.match(PostgreSQLParser.RETURN);
			this.state = 10225;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 682, this._ctx) ) {
			case 1:
				{
				this.state = 10214;
				this.match(PostgreSQLParser.NEXT);
				this.state = 10215;
				this.sql_expression();
				}
				break;
			case 2:
				{
				this.state = 10216;
				this.match(PostgreSQLParser.QUERY);
				this.state = 10222;
				this._errHandler.sync(this);
				switch (this._input.LA(1)) {
				case 202:
					{
					this.state = 10217;
					this.match(PostgreSQLParser.EXECUTE);
					this.state = 10218;
					this.a_expr();
					this.state = 10219;
					this.opt_for_using_expression();
					}
					break;
				case 2:
				case 88:
				case 92:
				case 105:
				case 413:
					{
					this.state = 10221;
					this.selectstmt();
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				break;
			case 3:
				{
				this.state = 10224;
				this.opt_return_result();
				}
				break;
			}
			this.state = 10227;
			this.match(PostgreSQLParser.SEMI);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_return_result(): Opt_return_resultContext {
		let localctx: Opt_return_resultContext = new Opt_return_resultContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1506, PostgreSQLParser.RULE_opt_return_result);
		try {
			this.state = 10231;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 683, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10230;
				this.sql_expression();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public stmt_raise(): Stmt_raiseContext {
		let localctx: Stmt_raiseContext = new Stmt_raiseContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1508, PostgreSQLParser.RULE_stmt_raise);
		try {
			this.state = 10259;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 684, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 10233;
				this.match(PostgreSQLParser.RAISE);
				this.state = 10234;
				this.opt_stmt_raise_level();
				this.state = 10235;
				this.sconst();
				this.state = 10236;
				this.opt_raise_list();
				this.state = 10237;
				this.opt_raise_using();
				this.state = 10238;
				this.match(PostgreSQLParser.SEMI);
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10240;
				this.match(PostgreSQLParser.RAISE);
				this.state = 10241;
				this.opt_stmt_raise_level();
				this.state = 10242;
				this.identifier();
				this.state = 10243;
				this.opt_raise_using();
				this.state = 10244;
				this.match(PostgreSQLParser.SEMI);
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 10246;
				this.match(PostgreSQLParser.RAISE);
				this.state = 10247;
				this.opt_stmt_raise_level();
				this.state = 10248;
				this.match(PostgreSQLParser.SQLSTATE);
				this.state = 10249;
				this.sconst();
				this.state = 10250;
				this.opt_raise_using();
				this.state = 10251;
				this.match(PostgreSQLParser.SEMI);
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 10253;
				this.match(PostgreSQLParser.RAISE);
				this.state = 10254;
				this.opt_stmt_raise_level();
				this.state = 10255;
				this.opt_raise_using();
				this.state = 10256;
				this.match(PostgreSQLParser.SEMI);
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 10258;
				this.match(PostgreSQLParser.RAISE);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_stmt_raise_level(): Opt_stmt_raise_levelContext {
		let localctx: Opt_stmt_raise_levelContext = new Opt_stmt_raise_levelContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1510, PostgreSQLParser.RULE_opt_stmt_raise_level);
		try {
			this.state = 10269;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 685, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 10263;
				this.match(PostgreSQLParser.DEBUG);
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 10264;
				this.match(PostgreSQLParser.LOG);
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 10265;
				this.match(PostgreSQLParser.INFO);
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 10266;
				this.match(PostgreSQLParser.NOTICE);
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 10267;
				this.match(PostgreSQLParser.WARNING);
				}
				break;
			case 8:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 10268;
				this.match(PostgreSQLParser.EXCEPTION);
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_raise_list(): Opt_raise_listContext {
		let localctx: Opt_raise_listContext = new Opt_raise_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1512, PostgreSQLParser.RULE_opt_raise_list);
		let _la: number;
		try {
			this.state = 10278;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 7:
			case 100:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10274;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				do {
					{
					{
					this.state = 10272;
					this.match(PostgreSQLParser.COMMA);
					this.state = 10273;
					this.a_expr();
					}
					}
					this.state = 10276;
					this._errHandler.sync(this);
					_la = this._input.LA(1);
				} while (_la===6);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_raise_using(): Opt_raise_usingContext {
		let localctx: Opt_raise_usingContext = new Opt_raise_usingContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1514, PostgreSQLParser.RULE_opt_raise_using);
		try {
			this.state = 10283;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 7:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 100:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10281;
				this.match(PostgreSQLParser.USING);
				this.state = 10282;
				this.opt_raise_using_elem_list();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_raise_using_elem(): Opt_raise_using_elemContext {
		let localctx: Opt_raise_using_elemContext = new Opt_raise_using_elemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1516, PostgreSQLParser.RULE_opt_raise_using_elem);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10285;
			this.identifier();
			this.state = 10286;
			this.match(PostgreSQLParser.EQUAL);
			this.state = 10287;
			this.a_expr();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_raise_using_elem_list(): Opt_raise_using_elem_listContext {
		let localctx: Opt_raise_using_elem_listContext = new Opt_raise_using_elem_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1518, PostgreSQLParser.RULE_opt_raise_using_elem_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10289;
			this.opt_raise_using_elem();
			this.state = 10294;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 10290;
				this.match(PostgreSQLParser.COMMA);
				this.state = 10291;
				this.opt_raise_using_elem();
				}
				}
				this.state = 10296;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public stmt_assert(): Stmt_assertContext {
		let localctx: Stmt_assertContext = new Stmt_assertContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1520, PostgreSQLParser.RULE_stmt_assert);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10297;
			this.match(PostgreSQLParser.ASSERT);
			this.state = 10298;
			this.sql_expression();
			this.state = 10299;
			this.opt_stmt_assert_message();
			this.state = 10300;
			this.match(PostgreSQLParser.SEMI);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_stmt_assert_message(): Opt_stmt_assert_messageContext {
		let localctx: Opt_stmt_assert_messageContext = new Opt_stmt_assert_messageContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1522, PostgreSQLParser.RULE_opt_stmt_assert_message);
		try {
			this.state = 10305;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 7:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10303;
				this.match(PostgreSQLParser.COMMA);
				this.state = 10304;
				this.sql_expression();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public loop_body(): Loop_bodyContext {
		let localctx: Loop_bodyContext = new Loop_bodyContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1524, PostgreSQLParser.RULE_loop_body);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10307;
			this.match(PostgreSQLParser.LOOP);
			this.state = 10308;
			this.proc_sect();
			this.state = 10309;
			this.match(PostgreSQLParser.END_P);
			this.state = 10310;
			this.match(PostgreSQLParser.LOOP);
			this.state = 10311;
			this.opt_label();
			this.state = 10312;
			this.match(PostgreSQLParser.SEMI);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public stmt_execsql(): Stmt_execsqlContext {
		let localctx: Stmt_execsqlContext = new Stmt_execsqlContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1526, PostgreSQLParser.RULE_stmt_execsql);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10314;
			this.make_execsql_stmt();
			this.state = 10315;
			this.match(PostgreSQLParser.SEMI);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public stmt_dynexecute(): Stmt_dynexecuteContext {
		let localctx: Stmt_dynexecuteContext = new Stmt_dynexecuteContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1528, PostgreSQLParser.RULE_stmt_dynexecute);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10317;
			this.match(PostgreSQLParser.EXECUTE);
			this.state = 10318;
			this.a_expr();
			this.state = 10326;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 691, this._ctx) ) {
			case 1:
				{
				this.state = 10319;
				this.opt_execute_into();
				this.state = 10320;
				this.opt_execute_using();
				}
				break;
			case 2:
				{
				this.state = 10322;
				this.opt_execute_using();
				this.state = 10323;
				this.opt_execute_into();
				}
				break;
			case 3:
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			}
			this.state = 10328;
			this.match(PostgreSQLParser.SEMI);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_execute_using(): Opt_execute_usingContext {
		let localctx: Opt_execute_usingContext = new Opt_execute_usingContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1530, PostgreSQLParser.RULE_opt_execute_using);
		try {
			this.state = 10333;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 7:
			case 71:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 100:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10331;
				this.match(PostgreSQLParser.USING);
				this.state = 10332;
				this.opt_execute_using_list();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_execute_using_list(): Opt_execute_using_listContext {
		let localctx: Opt_execute_using_listContext = new Opt_execute_using_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1532, PostgreSQLParser.RULE_opt_execute_using_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10335;
			this.a_expr();
			this.state = 10340;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 10336;
				this.match(PostgreSQLParser.COMMA);
				this.state = 10337;
				this.a_expr();
				}
				}
				this.state = 10342;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_execute_into(): Opt_execute_intoContext {
		let localctx: Opt_execute_intoContext = new Opt_execute_intoContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1534, PostgreSQLParser.RULE_opt_execute_into);
		try {
			this.state = 10349;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 7:
			case 100:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 71:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10344;
				this.match(PostgreSQLParser.INTO);
				this.state = 10346;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 694, this._ctx) ) {
				case 1:
					{
					this.state = 10345;
					this.match(PostgreSQLParser.STRICT_P);
					}
					break;
				}
				this.state = 10348;
				this.into_target();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public stmt_open(): Stmt_openContext {
		let localctx: Stmt_openContext = new Stmt_openContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1536, PostgreSQLParser.RULE_stmt_open);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10351;
			this.match(PostgreSQLParser.OPEN);
			this.state = 10369;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 698, this._ctx) ) {
			case 1:
				{
				this.state = 10352;
				this.cursor_variable();
				this.state = 10353;
				this.opt_scroll_option();
				this.state = 10354;
				this.match(PostgreSQLParser.FOR);
				this.state = 10360;
				this._errHandler.sync(this);
				switch (this._input.LA(1)) {
				case 2:
				case 88:
				case 92:
				case 105:
				case 413:
					{
					this.state = 10355;
					this.selectstmt();
					}
					break;
				case 202:
					{
					this.state = 10356;
					this.match(PostgreSQLParser.EXECUTE);
					this.state = 10357;
					this.sql_expression();
					this.state = 10358;
					this.opt_open_using();
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				break;
			case 2:
				{
				this.state = 10362;
				this.colid();
				this.state = 10367;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===2) {
					{
					this.state = 10363;
					this.match(PostgreSQLParser.OPEN_PAREN);
					this.state = 10364;
					this.opt_open_bound_list();
					this.state = 10365;
					this.match(PostgreSQLParser.CLOSE_PAREN);
					}
				}

				}
				break;
			}
			this.state = 10371;
			this.match(PostgreSQLParser.SEMI);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_open_bound_list_item(): Opt_open_bound_list_itemContext {
		let localctx: Opt_open_bound_list_itemContext = new Opt_open_bound_list_itemContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1538, PostgreSQLParser.RULE_opt_open_bound_list_item);
		try {
			this.state = 10378;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 699, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 10373;
				this.colid();
				this.state = 10374;
				this.match(PostgreSQLParser.COLON_EQUALS);
				this.state = 10375;
				this.a_expr();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10377;
				this.a_expr();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_open_bound_list(): Opt_open_bound_listContext {
		let localctx: Opt_open_bound_listContext = new Opt_open_bound_listContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1540, PostgreSQLParser.RULE_opt_open_bound_list);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10380;
			this.opt_open_bound_list_item();
			this.state = 10385;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===6) {
				{
				{
				this.state = 10381;
				this.match(PostgreSQLParser.COMMA);
				this.state = 10382;
				this.opt_open_bound_list_item();
				}
				}
				this.state = 10387;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_open_using(): Opt_open_usingContext {
		let localctx: Opt_open_usingContext = new Opt_open_usingContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1542, PostgreSQLParser.RULE_opt_open_using);
		try {
			this.state = 10391;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 7:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 100:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10389;
				this.match(PostgreSQLParser.USING);
				this.state = 10390;
				this.expr_list();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_scroll_option(): Opt_scroll_optionContext {
		let localctx: Opt_scroll_optionContext = new Opt_scroll_optionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1544, PostgreSQLParser.RULE_opt_scroll_option);
		try {
			this.state = 10397;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 62:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 260:
			case 315:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10394;
				this.opt_scroll_option_no();
				this.state = 10395;
				this.match(PostgreSQLParser.SCROLL);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_scroll_option_no(): Opt_scroll_option_noContext {
		let localctx: Opt_scroll_option_noContext = new Opt_scroll_option_noContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1546, PostgreSQLParser.RULE_opt_scroll_option_no);
		try {
			this.state = 10401;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 315:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 260:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10400;
				this.match(PostgreSQLParser.NO);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public stmt_fetch(): Stmt_fetchContext {
		let localctx: Stmt_fetchContext = new Stmt_fetchContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1548, PostgreSQLParser.RULE_stmt_fetch);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10403;
			this.match(PostgreSQLParser.FETCH);
			this.state = 10404;
			localctx._direction = this.opt_fetch_direction();
			this.state = 10405;
			this.opt_cursor_from();
			this.state = 10406;
			this.cursor_variable();
			this.state = 10407;
			this.match(PostgreSQLParser.INTO);
			this.state = 10408;
			this.into_target();
			this.state = 10409;
			this.match(PostgreSQLParser.SEMI);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public into_target(): Into_targetContext {
		let localctx: Into_targetContext = new Into_targetContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1550, PostgreSQLParser.RULE_into_target);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10411;
			this.expr_list();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_cursor_from(): Opt_cursor_fromContext {
		let localctx: Opt_cursor_fromContext = new Opt_cursor_fromContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1552, PostgreSQLParser.RULE_opt_cursor_from);
		try {
			this.state = 10416;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 28:
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 92:
			case 116:
			case 123:
			case 124:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 64:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10414;
				this.match(PostgreSQLParser.FROM);
				}
				break;
			case 68:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 10415;
				this.match(PostgreSQLParser.IN_P);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_fetch_direction(): Opt_fetch_directionContext {
		let localctx: Opt_fetch_directionContext = new Opt_fetch_directionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1554, PostgreSQLParser.RULE_opt_fetch_direction);
		let _la: number;
		try {
			this.state = 10435;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 706, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 3:
				this.enterOuterAlt(localctx, 3);
				{
				this.state = 10420;
				this.match(PostgreSQLParser.NEXT);
				}
				break;
			case 4:
				this.enterOuterAlt(localctx, 4);
				{
				this.state = 10421;
				this.match(PostgreSQLParser.PRIOR);
				}
				break;
			case 5:
				this.enterOuterAlt(localctx, 5);
				{
				this.state = 10422;
				this.match(PostgreSQLParser.FIRST_P);
				}
				break;
			case 6:
				this.enterOuterAlt(localctx, 6);
				{
				this.state = 10423;
				this.match(PostgreSQLParser.LAST_P);
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 7);
				{
				this.state = 10424;
				this.match(PostgreSQLParser.ABSOLUTE_P);
				this.state = 10425;
				this.a_expr();
				}
				break;
			case 8:
				this.enterOuterAlt(localctx, 8);
				{
				this.state = 10426;
				this.match(PostgreSQLParser.RELATIVE_P);
				this.state = 10427;
				this.a_expr();
				}
				break;
			case 9:
				this.enterOuterAlt(localctx, 9);
				{
				this.state = 10428;
				this.a_expr();
				}
				break;
			case 10:
				this.enterOuterAlt(localctx, 10);
				{
				this.state = 10429;
				this.match(PostgreSQLParser.ALL);
				}
				break;
			case 11:
				this.enterOuterAlt(localctx, 11);
				{
				this.state = 10430;
				_la = this._input.LA(1);
				if(!(_la===144 || _la===210)) {
				this._errHandler.recoverInline(this);
				}
				else {
					this._errHandler.reportMatch(this);
				    this.consume();
				}
				this.state = 10433;
				this._errHandler.sync(this);
				switch ( this._interp.adaptivePredict(this._input, 705, this._ctx) ) {
				case 1:
					{
					this.state = 10431;
					this.a_expr();
					}
					break;
				case 2:
					{
					this.state = 10432;
					this.match(PostgreSQLParser.ALL);
					}
					break;
				}
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public stmt_move(): Stmt_moveContext {
		let localctx: Stmt_moveContext = new Stmt_moveContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1556, PostgreSQLParser.RULE_stmt_move);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10437;
			this.match(PostgreSQLParser.MOVE);
			this.state = 10438;
			this.opt_fetch_direction();
			this.state = 10439;
			this.cursor_variable();
			this.state = 10440;
			this.match(PostgreSQLParser.SEMI);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public stmt_close(): Stmt_closeContext {
		let localctx: Stmt_closeContext = new Stmt_closeContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1558, PostgreSQLParser.RULE_stmt_close);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10442;
			this.match(PostgreSQLParser.CLOSE);
			this.state = 10443;
			this.cursor_variable();
			this.state = 10444;
			this.match(PostgreSQLParser.SEMI);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public stmt_null(): Stmt_nullContext {
		let localctx: Stmt_nullContext = new Stmt_nullContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1560, PostgreSQLParser.RULE_stmt_null);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10446;
			this.match(PostgreSQLParser.NULL_P);
			this.state = 10447;
			this.match(PostgreSQLParser.SEMI);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public stmt_commit(): Stmt_commitContext {
		let localctx: Stmt_commitContext = new Stmt_commitContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1562, PostgreSQLParser.RULE_stmt_commit);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10449;
			this.match(PostgreSQLParser.COMMIT);
			this.state = 10450;
			this.plsql_opt_transaction_chain();
			this.state = 10451;
			this.match(PostgreSQLParser.SEMI);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public stmt_rollback(): Stmt_rollbackContext {
		let localctx: Stmt_rollbackContext = new Stmt_rollbackContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1564, PostgreSQLParser.RULE_stmt_rollback);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10453;
			this.match(PostgreSQLParser.ROLLBACK);
			this.state = 10454;
			this.plsql_opt_transaction_chain();
			this.state = 10455;
			this.match(PostgreSQLParser.SEMI);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public plsql_opt_transaction_chain(): Plsql_opt_transaction_chainContext {
		let localctx: Plsql_opt_transaction_chainContext = new Plsql_opt_transaction_chainContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1566, PostgreSQLParser.RULE_plsql_opt_transaction_chain);
		let _la: number;
		try {
			this.state = 10463;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 33:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 10457;
				this.match(PostgreSQLParser.AND);
				this.state = 10459;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				if (_la===260) {
					{
					this.state = 10458;
					this.match(PostgreSQLParser.NO);
					}
				}

				this.state = 10461;
				this.match(PostgreSQLParser.CHAIN);
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public stmt_set(): Stmt_setContext {
		let localctx: Stmt_setContext = new Stmt_setContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1568, PostgreSQLParser.RULE_stmt_set);
		try {
			this.state = 10477;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 324:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 10465;
				this.match(PostgreSQLParser.SET);
				this.state = 10466;
				this.any_name();
				this.state = 10467;
				this.match(PostgreSQLParser.TO);
				this.state = 10468;
				this.match(PostgreSQLParser.DEFAULT);
				this.state = 10469;
				this.match(PostgreSQLParser.SEMI);
				}
				break;
			case 304:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10471;
				this.match(PostgreSQLParser.RESET);
				this.state = 10474;
				this._errHandler.sync(this);
				switch (this._input.LA(1)) {
				case 33:
				case 35:
				case 43:
				case 44:
				case 45:
				case 53:
				case 57:
				case 61:
				case 92:
				case 116:
				case 123:
				case 124:
				case 129:
				case 130:
				case 131:
				case 132:
				case 133:
				case 134:
				case 135:
				case 136:
				case 137:
				case 138:
				case 139:
				case 140:
				case 141:
				case 142:
				case 143:
				case 144:
				case 145:
				case 146:
				case 147:
				case 148:
				case 149:
				case 150:
				case 151:
				case 152:
				case 153:
				case 154:
				case 155:
				case 156:
				case 157:
				case 158:
				case 159:
				case 160:
				case 161:
				case 162:
				case 163:
				case 164:
				case 165:
				case 166:
				case 167:
				case 168:
				case 169:
				case 170:
				case 171:
				case 172:
				case 173:
				case 174:
				case 175:
				case 176:
				case 177:
				case 178:
				case 179:
				case 180:
				case 181:
				case 182:
				case 183:
				case 184:
				case 185:
				case 186:
				case 187:
				case 188:
				case 189:
				case 190:
				case 191:
				case 192:
				case 193:
				case 194:
				case 195:
				case 196:
				case 197:
				case 198:
				case 199:
				case 200:
				case 201:
				case 202:
				case 203:
				case 204:
				case 205:
				case 206:
				case 207:
				case 208:
				case 209:
				case 210:
				case 211:
				case 212:
				case 213:
				case 214:
				case 215:
				case 216:
				case 217:
				case 218:
				case 219:
				case 220:
				case 221:
				case 222:
				case 223:
				case 224:
				case 225:
				case 226:
				case 227:
				case 228:
				case 229:
				case 230:
				case 231:
				case 232:
				case 233:
				case 234:
				case 235:
				case 236:
				case 237:
				case 238:
				case 239:
				case 240:
				case 241:
				case 242:
				case 243:
				case 244:
				case 245:
				case 246:
				case 247:
				case 248:
				case 249:
				case 250:
				case 251:
				case 252:
				case 253:
				case 254:
				case 255:
				case 256:
				case 257:
				case 258:
				case 259:
				case 260:
				case 261:
				case 262:
				case 263:
				case 264:
				case 265:
				case 266:
				case 267:
				case 268:
				case 269:
				case 270:
				case 271:
				case 272:
				case 273:
				case 274:
				case 275:
				case 276:
				case 277:
				case 278:
				case 279:
				case 280:
				case 281:
				case 282:
				case 283:
				case 284:
				case 285:
				case 286:
				case 287:
				case 288:
				case 289:
				case 290:
				case 291:
				case 292:
				case 293:
				case 294:
				case 295:
				case 296:
				case 297:
				case 298:
				case 299:
				case 300:
				case 301:
				case 302:
				case 303:
				case 304:
				case 305:
				case 306:
				case 307:
				case 308:
				case 309:
				case 310:
				case 311:
				case 312:
				case 313:
				case 314:
				case 315:
				case 316:
				case 317:
				case 318:
				case 319:
				case 320:
				case 321:
				case 322:
				case 323:
				case 324:
				case 325:
				case 326:
				case 327:
				case 328:
				case 329:
				case 330:
				case 331:
				case 332:
				case 333:
				case 334:
				case 335:
				case 336:
				case 337:
				case 338:
				case 339:
				case 340:
				case 341:
				case 342:
				case 343:
				case 344:
				case 345:
				case 346:
				case 347:
				case 348:
				case 349:
				case 350:
				case 351:
				case 352:
				case 353:
				case 354:
				case 355:
				case 356:
				case 357:
				case 358:
				case 359:
				case 360:
				case 361:
				case 362:
				case 363:
				case 364:
				case 365:
				case 366:
				case 367:
				case 368:
				case 369:
				case 370:
				case 371:
				case 372:
				case 373:
				case 374:
				case 375:
				case 376:
				case 377:
				case 378:
				case 379:
				case 380:
				case 381:
				case 382:
				case 383:
				case 384:
				case 385:
				case 386:
				case 387:
				case 388:
				case 389:
				case 390:
				case 391:
				case 392:
				case 393:
				case 394:
				case 395:
				case 396:
				case 397:
				case 398:
				case 399:
				case 400:
				case 401:
				case 402:
				case 403:
				case 404:
				case 405:
				case 406:
				case 407:
				case 408:
				case 409:
				case 410:
				case 411:
				case 412:
				case 413:
				case 414:
				case 415:
				case 416:
				case 417:
				case 418:
				case 419:
				case 420:
				case 421:
				case 422:
				case 423:
				case 424:
				case 425:
				case 426:
				case 427:
				case 428:
				case 429:
				case 430:
				case 431:
				case 432:
				case 433:
				case 434:
				case 435:
				case 436:
				case 437:
				case 438:
				case 439:
				case 440:
				case 441:
				case 442:
				case 443:
				case 444:
				case 446:
				case 447:
				case 448:
				case 449:
				case 450:
				case 451:
				case 452:
				case 453:
				case 454:
				case 455:
				case 456:
				case 457:
				case 458:
				case 459:
				case 460:
				case 461:
				case 462:
				case 464:
				case 465:
				case 466:
				case 467:
				case 468:
				case 469:
				case 470:
				case 471:
				case 472:
				case 473:
				case 474:
				case 475:
				case 476:
				case 477:
				case 478:
				case 479:
				case 480:
				case 481:
				case 482:
				case 483:
				case 484:
				case 485:
				case 486:
				case 487:
				case 488:
				case 489:
				case 490:
				case 491:
				case 492:
				case 493:
				case 495:
				case 497:
				case 498:
				case 499:
				case 500:
				case 501:
				case 502:
				case 503:
				case 504:
				case 505:
				case 506:
				case 507:
				case 508:
				case 509:
				case 511:
				case 512:
				case 513:
				case 517:
				case 537:
				case 538:
					{
					this.state = 10472;
					this.any_name();
					}
					break;
				case 30:
					{
					this.state = 10473;
					this.match(PostgreSQLParser.ALL);
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				this.state = 10476;
				this.match(PostgreSQLParser.SEMI);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public cursor_variable(): Cursor_variableContext {
		let localctx: Cursor_variableContext = new Cursor_variableContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1570, PostgreSQLParser.RULE_cursor_variable);
		try {
			this.state = 10481;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 92:
			case 116:
			case 123:
			case 124:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 10479;
				this.colid();
				}
				break;
			case 28:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10480;
				this.match(PostgreSQLParser.PARAM);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public exception_sect(): Exception_sectContext {
		let localctx: Exception_sectContext = new Exception_sectContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1572, PostgreSQLParser.RULE_exception_sect);
		try {
			this.state = 10486;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 445:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 508:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10484;
				this.match(PostgreSQLParser.EXCEPTION);
				this.state = 10485;
				this.proc_exceptions();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public proc_exceptions(): Proc_exceptionsContext {
		let localctx: Proc_exceptionsContext = new Proc_exceptionsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1574, PostgreSQLParser.RULE_proc_exceptions);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10489;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			do {
				{
				{
				this.state = 10488;
				this.proc_exception();
				}
				}
				this.state = 10491;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			} while (_la===102);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public proc_exception(): Proc_exceptionContext {
		let localctx: Proc_exceptionContext = new Proc_exceptionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1576, PostgreSQLParser.RULE_proc_exception);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10493;
			this.match(PostgreSQLParser.WHEN);
			this.state = 10494;
			this.proc_conditions();
			this.state = 10495;
			this.match(PostgreSQLParser.THEN);
			this.state = 10496;
			this.proc_sect();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public proc_conditions(): Proc_conditionsContext {
		let localctx: Proc_conditionsContext = new Proc_conditionsContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1578, PostgreSQLParser.RULE_proc_conditions);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10498;
			this.proc_condition();
			this.state = 10503;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la===82) {
				{
				{
				this.state = 10499;
				this.match(PostgreSQLParser.OR);
				this.state = 10500;
				this.proc_condition();
				}
				}
				this.state = 10505;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public proc_condition(): Proc_conditionContext {
		let localctx: Proc_conditionContext = new Proc_conditionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1580, PostgreSQLParser.RULE_proc_condition);
		try {
			this.state = 10509;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 715, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 10506;
				this.any_identifier();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10507;
				this.match(PostgreSQLParser.SQLSTATE);
				this.state = 10508;
				this.sconst();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_block_label(): Opt_block_labelContext {
		let localctx: Opt_block_labelContext = new Opt_block_labelContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1582, PostgreSQLParser.RULE_opt_block_label);
		try {
			this.state = 10513;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 146:
			case 178:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 18:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10512;
				this.label_decl();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_loop_label(): Opt_loop_labelContext {
		let localctx: Opt_loop_labelContext = new Opt_loop_labelContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1584, PostgreSQLParser.RULE_opt_loop_label);
		try {
			this.state = 10517;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 62:
			case 494:
			case 496:
			case 510:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 18:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10516;
				this.label_decl();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_label(): Opt_labelContext {
		let localctx: Opt_labelContext = new Opt_labelContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1586, PostgreSQLParser.RULE_opt_label);
		try {
			this.state = 10521;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case -1:
			case 7:
			case 102:
				this.enterOuterAlt(localctx, 1);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			case 33:
			case 35:
			case 43:
			case 44:
			case 45:
			case 53:
			case 57:
			case 61:
			case 92:
			case 116:
			case 123:
			case 124:
			case 129:
			case 130:
			case 131:
			case 132:
			case 133:
			case 134:
			case 135:
			case 136:
			case 137:
			case 138:
			case 139:
			case 140:
			case 141:
			case 142:
			case 143:
			case 144:
			case 145:
			case 146:
			case 147:
			case 148:
			case 149:
			case 150:
			case 151:
			case 152:
			case 153:
			case 154:
			case 155:
			case 156:
			case 157:
			case 158:
			case 159:
			case 160:
			case 161:
			case 162:
			case 163:
			case 164:
			case 165:
			case 166:
			case 167:
			case 168:
			case 169:
			case 170:
			case 171:
			case 172:
			case 173:
			case 174:
			case 175:
			case 176:
			case 177:
			case 178:
			case 179:
			case 180:
			case 181:
			case 182:
			case 183:
			case 184:
			case 185:
			case 186:
			case 187:
			case 188:
			case 189:
			case 190:
			case 191:
			case 192:
			case 193:
			case 194:
			case 195:
			case 196:
			case 197:
			case 198:
			case 199:
			case 200:
			case 201:
			case 202:
			case 203:
			case 204:
			case 205:
			case 206:
			case 207:
			case 208:
			case 209:
			case 210:
			case 211:
			case 212:
			case 213:
			case 214:
			case 215:
			case 216:
			case 217:
			case 218:
			case 219:
			case 220:
			case 221:
			case 222:
			case 223:
			case 224:
			case 225:
			case 226:
			case 227:
			case 228:
			case 229:
			case 230:
			case 231:
			case 232:
			case 233:
			case 234:
			case 235:
			case 236:
			case 237:
			case 238:
			case 239:
			case 240:
			case 241:
			case 242:
			case 243:
			case 244:
			case 245:
			case 246:
			case 247:
			case 248:
			case 249:
			case 250:
			case 251:
			case 252:
			case 253:
			case 254:
			case 255:
			case 256:
			case 257:
			case 258:
			case 259:
			case 260:
			case 261:
			case 262:
			case 263:
			case 264:
			case 265:
			case 266:
			case 267:
			case 268:
			case 269:
			case 270:
			case 271:
			case 272:
			case 273:
			case 274:
			case 275:
			case 276:
			case 277:
			case 278:
			case 279:
			case 280:
			case 281:
			case 282:
			case 283:
			case 284:
			case 285:
			case 286:
			case 287:
			case 288:
			case 289:
			case 290:
			case 291:
			case 292:
			case 293:
			case 294:
			case 295:
			case 296:
			case 297:
			case 298:
			case 299:
			case 300:
			case 301:
			case 302:
			case 303:
			case 304:
			case 305:
			case 306:
			case 307:
			case 308:
			case 309:
			case 310:
			case 311:
			case 312:
			case 313:
			case 314:
			case 315:
			case 316:
			case 317:
			case 318:
			case 319:
			case 320:
			case 321:
			case 322:
			case 323:
			case 324:
			case 325:
			case 326:
			case 327:
			case 328:
			case 329:
			case 330:
			case 331:
			case 332:
			case 333:
			case 334:
			case 335:
			case 336:
			case 337:
			case 338:
			case 339:
			case 340:
			case 341:
			case 342:
			case 343:
			case 344:
			case 345:
			case 346:
			case 347:
			case 348:
			case 349:
			case 350:
			case 351:
			case 352:
			case 353:
			case 354:
			case 355:
			case 356:
			case 357:
			case 358:
			case 359:
			case 360:
			case 361:
			case 362:
			case 363:
			case 364:
			case 365:
			case 366:
			case 367:
			case 368:
			case 369:
			case 370:
			case 371:
			case 372:
			case 373:
			case 374:
			case 375:
			case 376:
			case 377:
			case 378:
			case 379:
			case 380:
			case 381:
			case 382:
			case 383:
			case 384:
			case 385:
			case 386:
			case 387:
			case 388:
			case 389:
			case 390:
			case 391:
			case 392:
			case 393:
			case 394:
			case 395:
			case 396:
			case 397:
			case 398:
			case 399:
			case 400:
			case 401:
			case 402:
			case 403:
			case 404:
			case 405:
			case 406:
			case 407:
			case 408:
			case 409:
			case 410:
			case 411:
			case 412:
			case 413:
			case 414:
			case 415:
			case 416:
			case 417:
			case 418:
			case 419:
			case 420:
			case 421:
			case 422:
			case 423:
			case 424:
			case 425:
			case 426:
			case 427:
			case 428:
			case 429:
			case 430:
			case 431:
			case 432:
			case 433:
			case 434:
			case 435:
			case 436:
			case 437:
			case 438:
			case 439:
			case 440:
			case 441:
			case 442:
			case 443:
			case 444:
			case 446:
			case 447:
			case 448:
			case 449:
			case 450:
			case 451:
			case 452:
			case 453:
			case 454:
			case 455:
			case 456:
			case 457:
			case 458:
			case 459:
			case 460:
			case 461:
			case 462:
			case 464:
			case 465:
			case 466:
			case 467:
			case 468:
			case 469:
			case 470:
			case 471:
			case 472:
			case 473:
			case 474:
			case 475:
			case 476:
			case 477:
			case 478:
			case 479:
			case 480:
			case 481:
			case 482:
			case 483:
			case 484:
			case 485:
			case 486:
			case 487:
			case 488:
			case 489:
			case 490:
			case 491:
			case 492:
			case 493:
			case 495:
			case 497:
			case 498:
			case 499:
			case 500:
			case 501:
			case 502:
			case 503:
			case 504:
			case 505:
			case 506:
			case 507:
			case 508:
			case 509:
			case 511:
			case 512:
			case 513:
			case 517:
			case 537:
			case 538:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10520;
				this.any_identifier();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_exitcond(): Opt_exitcondContext {
		let localctx: Opt_exitcondContext = new Opt_exitcondContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1588, PostgreSQLParser.RULE_opt_exitcond);
		try {
			this.state = 10526;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 102:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 10523;
				this.match(PostgreSQLParser.WHEN);
				this.state = 10524;
				this.expr_until_semi();
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public any_identifier(): Any_identifierContext {
		let localctx: Any_identifierContext = new Any_identifierContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1590, PostgreSQLParser.RULE_any_identifier);
		try {
			this.state = 10530;
			this._errHandler.sync(this);
			switch ( this._interp.adaptivePredict(this._input, 720, this._ctx) ) {
			case 1:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 10528;
				this.colid();
				}
				break;
			case 2:
				this.enterOuterAlt(localctx, 2);
				{
				this.state = 10529;
				this.plsql_unreserved_keyword();
				}
				break;
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public plsql_unreserved_keyword(): Plsql_unreserved_keywordContext {
		let localctx: Plsql_unreserved_keywordContext = new Plsql_unreserved_keywordContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1592, PostgreSQLParser.RULE_plsql_unreserved_keyword);
		let _la: number;
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10532;
			_la = this._input.LA(1);
			if(!(((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 286268421) !== 0) || ((((_la - 92)) & ~0x1F) === 0 && ((1 << (_la - 92)) & 2164260865) !== 0) || ((((_la - 130)) & ~0x1F) === 0 && ((1 << (_la - 130)) & 2290106369) !== 0) || _la===167 || _la===172 || ((((_la - 207)) & ~0x1F) === 0 && ((1 << (_la - 207)) & 33554441) !== 0) || ((((_la - 240)) & ~0x1F) === 0 && ((1 << (_la - 240)) & 1075380225) !== 0) || ((((_la - 284)) & ~0x1F) === 0 && ((1 << (_la - 284)) & 3289399297) !== 0) || _la===324 || _la===351 || _la===424 || _la===425 || ((((_la - 468)) & ~0x1F) === 0 && ((1 << (_la - 468)) & 3959414785) !== 0) || ((((_la - 500)) & ~0x1F) === 0 && ((1 << (_la - 500)) & 3071) !== 0))) {
			this._errHandler.recoverInline(this);
			}
			else {
				this._errHandler.reportMatch(this);
			    this.consume();
			}
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public sql_expression(): Sql_expressionContext {
		let localctx: Sql_expressionContext = new Sql_expressionContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1594, PostgreSQLParser.RULE_sql_expression);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10534;
			this.opt_target_list();
			this.state = 10535;
			this.into_clause();
			this.state = 10536;
			this.from_clause();
			this.state = 10537;
			this.where_clause();
			this.state = 10538;
			this.group_clause();
			this.state = 10539;
			this.having_clause();
			this.state = 10540;
			this.window_clause();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public expr_until_then(): Expr_until_thenContext {
		let localctx: Expr_until_thenContext = new Expr_until_thenContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1596, PostgreSQLParser.RULE_expr_until_then);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10542;
			this.sql_expression();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public expr_until_semi(): Expr_until_semiContext {
		let localctx: Expr_until_semiContext = new Expr_until_semiContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1598, PostgreSQLParser.RULE_expr_until_semi);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10544;
			this.sql_expression();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public expr_until_rightbracket(): Expr_until_rightbracketContext {
		let localctx: Expr_until_rightbracketContext = new Expr_until_rightbracketContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1600, PostgreSQLParser.RULE_expr_until_rightbracket);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10546;
			this.a_expr();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public expr_until_loop(): Expr_until_loopContext {
		let localctx: Expr_until_loopContext = new Expr_until_loopContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1602, PostgreSQLParser.RULE_expr_until_loop);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10548;
			this.a_expr();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public make_execsql_stmt(): Make_execsql_stmtContext {
		let localctx: Make_execsql_stmtContext = new Make_execsql_stmtContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1604, PostgreSQLParser.RULE_make_execsql_stmt);
		try {
			this.enterOuterAlt(localctx, 1);
			{
			this.state = 10550;
			this.stmt();
			this.state = 10551;
			this.opt_returning_clause_into();
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}
	// @RuleVersion(0)
	public opt_returning_clause_into(): Opt_returning_clause_intoContext {
		let localctx: Opt_returning_clause_intoContext = new Opt_returning_clause_intoContext(this, this._ctx, this.state);
		this.enterRule(localctx, 1606, PostgreSQLParser.RULE_opt_returning_clause_into);
		try {
			this.state = 10558;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case 71:
				this.enterOuterAlt(localctx, 1);
				{
				this.state = 10553;
				this.match(PostgreSQLParser.INTO);
				this.state = 10554;
				this.opt_strict();
				this.state = 10555;
				this.into_target();
				}
				break;
			case 7:
				this.enterOuterAlt(localctx, 2);
				// tslint:disable-next-line:no-empty
				{
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (re) {
			if (re instanceof RecognitionException) {
				localctx.exception = re;
				this._errHandler.reportError(this, re);
				this._errHandler.recover(this, re);
			} else {
				throw re;
			}
		}
		finally {
			this.exitRule();
		}
		return localctx;
	}

	public sempred(localctx: RuleContext, ruleIndex: number, predIndex: number): boolean {
		switch (ruleIndex) {
		case 596:
			return this.b_expr_sempred(localctx as B_exprContext, predIndex);
		}
		return true;
	}
	private b_expr_sempred(localctx: B_exprContext, predIndex: number): boolean {
		switch (predIndex) {
		case 0:
			return this.precpred(this._ctx, 8);
		case 1:
			return this.precpred(this._ctx, 7);
		case 2:
			return this.precpred(this._ctx, 6);
		case 3:
			return this.precpred(this._ctx, 5);
		case 4:
			return this.precpred(this._ctx, 4);
		case 5:
			return this.precpred(this._ctx, 10);
		case 6:
			return this.precpred(this._ctx, 2);
		case 7:
			return this.precpred(this._ctx, 1);
		}
		return true;
	}

	public static readonly _serializedATN: number[] = [4,1,555,10561,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,2,
	361,7,361,2,362,7,362,2,363,7,363,2,364,7,364,2,365,7,365,2,366,7,366,2,
	367,7,367,2,368,7,368,2,369,7,369,2,370,7,370,2,371,7,371,2,372,7,372,2,
	373,7,373,2,374,7,374,2,375,7,375,2,376,7,376,2,377,7,377,2,378,7,378,2,
	379,7,379,2,380,7,380,2,381,7,381,2,382,7,382,2,383,7,383,2,384,7,384,2,
	385,7,385,2,386,7,386,2,387,7,387,2,388,7,388,2,389,7,389,2,390,7,390,2,
	391,7,391,2,392,7,392,2,393,7,393,2,394,7,394,2,395,7,395,2,396,7,396,2,
	397,7,397,2,398,7,398,2,399,7,399,2,400,7,400,2,401,7,401,2,402,7,402,2,
	403,7,403,2,404,7,404,2,405,7,405,2,406,7,406,2,407,7,407,2,408,7,408,2,
	409,7,409,2,410,7,410,2,411,7,411,2,412,7,412,2,413,7,413,2,414,7,414,2,
	415,7,415,2,416,7,416,2,417,7,417,2,418,7,418,2,419,7,419,2,420,7,420,2,
	421,7,421,2,422,7,422,2,423,7,423,2,424,7,424,2,425,7,425,2,426,7,426,2,
	427,7,427,2,428,7,428,2,429,7,429,2,430,7,430,2,431,7,431,2,432,7,432,2,
	433,7,433,2,434,7,434,2,435,7,435,2,436,7,436,2,437,7,437,2,438,7,438,2,
	439,7,439,2,440,7,440,2,441,7,441,2,442,7,442,2,443,7,443,2,444,7,444,2,
	445,7,445,2,446,7,446,2,447,7,447,2,448,7,448,2,449,7,449,2,450,7,450,2,
	451,7,451,2,452,7,452,2,453,7,453,2,454,7,454,2,455,7,455,2,456,7,456,2,
	457,7,457,2,458,7,458,2,459,7,459,2,460,7,460,2,461,7,461,2,462,7,462,2,
	463,7,463,2,464,7,464,2,465,7,465,2,466,7,466,2,467,7,467,2,468,7,468,2,
	469,7,469,2,470,7,470,2,471,7,471,2,472,7,472,2,473,7,473,2,474,7,474,2,
	475,7,475,2,476,7,476,2,477,7,477,2,478,7,478,2,479,7,479,2,480,7,480,2,
	481,7,481,2,482,7,482,2,483,7,483,2,484,7,484,2,485,7,485,2,486,7,486,2,
	487,7,487,2,488,7,488,2,489,7,489,2,490,7,490,2,491,7,491,2,492,7,492,2,
	493,7,493,2,494,7,494,2,495,7,495,2,496,7,496,2,497,7,497,2,498,7,498,2,
	499,7,499,2,500,7,500,2,501,7,501,2,502,7,502,2,503,7,503,2,504,7,504,2,
	505,7,505,2,506,7,506,2,507,7,507,2,508,7,508,2,509,7,509,2,510,7,510,2,
	511,7,511,2,512,7,512,2,513,7,513,2,514,7,514,2,515,7,515,2,516,7,516,2,
	517,7,517,2,518,7,518,2,519,7,519,2,520,7,520,2,521,7,521,2,522,7,522,2,
	523,7,523,2,524,7,524,2,525,7,525,2,526,7,526,2,527,7,527,2,528,7,528,2,
	529,7,529,2,530,7,530,2,531,7,531,2,532,7,532,2,533,7,533,2,534,7,534,2,
	535,7,535,2,536,7,536,2,537,7,537,2,538,7,538,2,539,7,539,2,540,7,540,2,
	541,7,541,2,542,7,542,2,543,7,543,2,544,7,544,2,545,7,545,2,546,7,546,2,
	547,7,547,2,548,7,548,2,549,7,549,2,550,7,550,2,551,7,551,2,552,7,552,2,
	553,7,553,2,554,7,554,2,555,7,555,2,556,7,556,2,557,7,557,2,558,7,558,2,
	559,7,559,2,560,7,560,2,561,7,561,2,562,7,562,2,563,7,563,2,564,7,564,2,
	565,7,565,2,566,7,566,2,567,7,567,2,568,7,568,2,569,7,569,2,570,7,570,2,
	571,7,571,2,572,7,572,2,573,7,573,2,574,7,574,2,575,7,575,2,576,7,576,2,
	577,7,577,2,578,7,578,2,579,7,579,2,580,7,580,2,581,7,581,2,582,7,582,2,
	583,7,583,2,584,7,584,2,585,7,585,2,586,7,586,2,587,7,587,2,588,7,588,2,
	589,7,589,2,590,7,590,2,591,7,591,2,592,7,592,2,593,7,593,2,594,7,594,2,
	595,7,595,2,596,7,596,2,597,7,597,2,598,7,598,2,599,7,599,2,600,7,600,2,
	601,7,601,2,602,7,602,2,603,7,603,2,604,7,604,2,605,7,605,2,606,7,606,2,
	607,7,607,2,608,7,608,2,609,7,609,2,610,7,610,2,611,7,611,2,612,7,612,2,
	613,7,613,2,614,7,614,2,615,7,615,2,616,7,616,2,617,7,617,2,618,7,618,2,
	619,7,619,2,620,7,620,2,621,7,621,2,622,7,622,2,623,7,623,2,624,7,624,2,
	625,7,625,2,626,7,626,2,627,7,627,2,628,7,628,2,629,7,629,2,630,7,630,2,
	631,7,631,2,632,7,632,2,633,7,633,2,634,7,634,2,635,7,635,2,636,7,636,2,
	637,7,637,2,638,7,638,2,639,7,639,2,640,7,640,2,641,7,641,2,642,7,642,2,
	643,7,643,2,644,7,644,2,645,7,645,2,646,7,646,2,647,7,647,2,648,7,648,2,
	649,7,649,2,650,7,650,2,651,7,651,2,652,7,652,2,653,7,653,2,654,7,654,2,
	655,7,655,2,656,7,656,2,657,7,657,2,658,7,658,2,659,7,659,2,660,7,660,2,
	661,7,661,2,662,7,662,2,663,7,663,2,664,7,664,2,665,7,665,2,666,7,666,2,
	667,7,667,2,668,7,668,2,669,7,669,2,670,7,670,2,671,7,671,2,672,7,672,2,
	673,7,673,2,674,7,674,2,675,7,675,2,676,7,676,2,677,7,677,2,678,7,678,2,
	679,7,679,2,680,7,680,2,681,7,681,2,682,7,682,2,683,7,683,2,684,7,684,2,
	685,7,685,2,686,7,686,2,687,7,687,2,688,7,688,2,689,7,689,2,690,7,690,2,
	691,7,691,2,692,7,692,2,693,7,693,2,694,7,694,2,695,7,695,2,696,7,696,2,
	697,7,697,2,698,7,698,2,699,7,699,2,700,7,700,2,701,7,701,2,702,7,702,2,
	703,7,703,2,704,7,704,2,705,7,705,2,706,7,706,2,707,7,707,2,708,7,708,2,
	709,7,709,2,710,7,710,2,711,7,711,2,712,7,712,2,713,7,713,2,714,7,714,2,
	715,7,715,2,716,7,716,2,717,7,717,2,718,7,718,2,719,7,719,2,720,7,720,2,
	721,7,721,2,722,7,722,2,723,7,723,2,724,7,724,2,725,7,725,2,726,7,726,2,
	727,7,727,2,728,7,728,2,729,7,729,2,730,7,730,2,731,7,731,2,732,7,732,2,
	733,7,733,2,734,7,734,2,735,7,735,2,736,7,736,2,737,7,737,2,738,7,738,2,
	739,7,739,2,740,7,740,2,741,7,741,2,742,7,742,2,743,7,743,2,744,7,744,2,
	745,7,745,2,746,7,746,2,747,7,747,2,748,7,748,2,749,7,749,2,750,7,750,2,
	751,7,751,2,752,7,752,2,753,7,753,2,754,7,754,2,755,7,755,2,756,7,756,2,
	757,7,757,2,758,7,758,2,759,7,759,2,760,7,760,2,761,7,761,2,762,7,762,2,
	763,7,763,2,764,7,764,2,765,7,765,2,766,7,766,2,767,7,767,2,768,7,768,2,
	769,7,769,2,770,7,770,2,771,7,771,2,772,7,772,2,773,7,773,2,774,7,774,2,
	775,7,775,2,776,7,776,2,777,7,777,2,778,7,778,2,779,7,779,2,780,7,780,2,
	781,7,781,2,782,7,782,2,783,7,783,2,784,7,784,2,785,7,785,2,786,7,786,2,
	787,7,787,2,788,7,788,2,789,7,789,2,790,7,790,2,791,7,791,2,792,7,792,2,
	793,7,793,2,794,7,794,2,795,7,795,2,796,7,796,2,797,7,797,2,798,7,798,2,
	799,7,799,2,800,7,800,2,801,7,801,2,802,7,802,2,803,7,803,1,0,1,0,1,0,1,
	1,1,1,1,2,1,2,1,3,1,3,3,3,1618,8,3,5,3,1620,8,3,10,3,12,3,1623,9,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,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,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,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,3,4,1749,8,
	4,1,5,1,5,3,5,1753,8,5,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,7,1,7,1,8,1,8,3,8,
	1766,8,8,1,9,5,9,1769,8,9,10,9,12,9,1772,9,9,1,10,5,10,1775,8,10,10,10,
	12,10,1778,9,10,1,11,1,11,1,11,3,11,1783,8,11,1,11,1,11,1,11,1,11,1,11,
	1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,3,11,1798,8,11,1,12,1,12,1,12,1,
	12,1,12,1,12,1,12,1,12,1,12,1,12,3,12,1810,8,12,1,13,1,13,1,13,1,13,1,13,
	1,13,1,14,1,14,1,14,1,14,1,14,1,14,1,15,1,15,1,15,1,15,3,15,1828,8,15,1,
	16,1,16,1,16,3,16,1833,8,16,1,16,1,16,1,16,1,16,1,17,1,17,1,17,1,17,3,17,
	1843,8,17,1,17,1,17,1,18,1,18,1,18,1,18,1,18,1,18,1,19,1,19,1,19,1,19,1,
	19,1,19,1,19,1,20,1,20,1,21,1,21,1,21,1,21,1,21,3,21,1867,8,21,1,21,1,21,
	1,21,1,21,1,21,3,21,1874,8,21,1,21,1,21,1,22,1,22,3,22,1880,8,22,1,23,5,
	23,1883,8,23,10,23,12,23,1886,9,23,1,24,1,24,1,24,1,24,1,24,1,24,3,24,1894,
	8,24,1,25,1,25,3,25,1898,8,25,1,25,1,25,1,26,1,26,1,26,1,26,1,26,1,26,1,
	26,1,26,3,26,1910,8,26,1,27,1,27,1,27,1,27,1,28,1,28,1,28,1,28,1,28,1,28,
	1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,
	28,1,28,1,28,1,28,1,28,3,28,1941,8,28,1,29,1,29,1,29,5,29,1946,8,29,10,
	29,12,29,1949,9,29,1,30,1,30,1,30,5,30,1954,8,30,10,30,12,30,1957,9,30,
	1,31,1,31,3,31,1961,8,31,1,32,1,32,1,32,1,32,1,32,3,32,1968,8,32,1,33,1,
	33,1,33,1,33,3,33,1974,8,33,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,
	1,34,1,34,1,34,1,34,1,34,1,34,3,34,1991,8,34,1,35,1,35,1,35,3,35,1996,8,
	35,1,36,1,36,3,36,2000,8,36,1,37,1,37,1,37,1,38,1,38,1,38,1,38,1,38,1,38,
	1,38,1,38,3,38,2013,8,38,1,39,1,39,3,39,2017,8,39,1,40,1,40,1,40,3,40,2022,
	8,40,1,41,1,41,1,41,3,41,2027,8,41,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,
	42,1,42,1,42,3,42,2039,8,42,1,43,1,43,1,43,1,43,1,43,1,44,1,44,3,44,2048,
	8,44,1,45,1,45,1,46,1,46,1,47,1,47,1,47,1,48,1,48,1,48,1,48,3,48,2061,8,
	48,1,48,1,48,1,48,3,48,2066,8,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,
	1,48,3,48,2077,8,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,3,48,2088,
	8,48,1,48,1,48,1,48,3,48,2093,8,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,
	48,1,48,3,48,2104,8,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,3,48,
	2115,8,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,3,48,2124,8,48,1,48,1,48,1,
	48,1,48,1,48,1,48,1,48,1,48,3,48,2134,8,48,1,48,1,48,1,48,1,48,1,48,1,48,
	1,48,1,48,1,48,1,48,1,48,1,48,1,48,3,48,2149,8,48,1,48,1,48,1,48,1,48,1,
	48,1,48,1,48,1,48,1,48,1,48,3,48,2161,8,48,1,48,1,48,1,48,3,48,2166,8,48,
	1,49,1,49,1,49,5,49,2171,8,49,10,49,12,49,2174,9,49,1,50,1,50,1,50,1,50,
	1,50,1,50,1,50,1,50,3,50,2184,8,50,1,51,1,51,1,51,1,51,1,52,1,52,1,52,1,
	52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,
	1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,
	52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,
	1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,
	52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,
	1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,
	52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,
	1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,
	52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,
	1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,
	52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,
	1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,
	52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,
	1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,
	52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,
	1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,
	52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,
	1,52,1,52,3,52,2442,8,52,1,53,1,53,1,53,1,53,1,53,3,53,2449,8,53,1,54,1,
	54,1,54,3,54,2454,8,54,1,55,1,55,1,55,3,55,2459,8,55,1,56,1,56,1,56,3,56,
	2464,8,56,1,57,1,57,1,57,1,57,1,57,1,57,3,57,2472,8,57,1,58,1,58,1,58,1,
	58,1,59,1,59,1,59,3,59,2481,8,59,1,60,1,60,1,60,5,60,2486,8,60,10,60,12,
	60,2489,9,60,1,61,1,61,1,61,1,61,1,61,1,61,1,61,3,61,2498,8,61,3,61,2500,
	8,61,1,62,4,62,2503,8,62,11,62,12,62,2504,1,63,1,63,1,63,1,63,3,63,2511,
	8,63,1,63,1,63,1,63,1,63,3,63,2517,8,63,3,63,2519,8,63,1,64,1,64,1,64,1,
	64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,
	1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,3,64,2547,8,64,1,65,1,65,1,65,1,
	66,1,66,1,66,5,66,2555,8,66,10,66,12,66,2558,9,66,1,67,1,67,1,67,1,67,1,
	67,1,68,1,68,1,68,5,68,2568,8,68,10,68,12,68,2571,9,68,1,69,1,69,1,69,1,
	69,1,69,1,69,1,69,1,69,1,69,3,69,2582,8,69,1,69,1,69,1,69,1,69,1,69,1,69,
	1,69,1,69,1,69,1,69,1,69,1,69,3,69,2596,8,69,1,70,1,70,1,70,3,70,2601,8,
	70,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,
	1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,2625,8,71,1,72,1,72,1,73,1,
	73,3,73,2631,8,73,1,74,1,74,1,74,3,74,2636,8,74,1,75,1,75,1,75,1,75,1,75,
	3,75,2643,8,75,1,76,5,76,2646,8,76,10,76,12,76,2649,9,76,1,77,1,77,1,77,
	1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,
	77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,
	1,77,1,77,1,77,3,77,2686,8,77,1,78,1,78,3,78,2690,8,78,1,79,1,79,1,79,1,
	79,1,79,3,79,2697,8,79,1,80,1,80,3,80,2701,8,80,1,81,1,81,1,81,5,81,2706,
	8,81,10,81,12,81,2709,9,81,1,82,1,82,1,82,1,83,1,83,1,83,1,83,1,83,1,83,
	1,83,1,83,3,83,2722,8,83,1,84,1,84,1,84,5,84,2727,8,84,10,84,12,84,2730,
	9,84,1,85,1,85,1,86,1,86,1,86,1,86,1,86,1,86,3,86,2740,8,86,1,86,1,86,1,
	86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,
	1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,3,
	86,2773,8,86,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,3,87,2783,8,87,1,88,
	1,88,3,88,2787,8,88,1,89,1,89,1,89,1,89,1,89,3,89,2794,8,89,1,90,1,90,1,
	90,5,90,2799,8,90,10,90,12,90,2802,9,90,1,91,1,91,1,91,5,91,2807,8,91,10,
	91,12,91,2810,9,91,1,92,1,92,1,92,3,92,2815,8,92,1,93,1,93,3,93,2819,8,
	93,1,94,1,94,1,94,1,94,1,94,1,95,1,95,1,95,3,95,2829,8,95,1,95,1,95,1,96,
	5,96,2834,8,96,10,96,12,96,2837,9,96,1,97,1,97,1,97,1,97,1,97,1,97,1,97,
	1,97,3,97,2847,8,97,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,
	98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,
	1,98,1,98,1,98,1,98,1,98,3,98,2879,8,98,1,98,1,98,1,98,1,98,1,98,1,98,3,
	98,2887,8,98,1,99,1,99,1,99,3,99,2892,8,99,1,100,1,100,1,100,1,100,1,100,
	3,100,2899,8,100,1,101,1,101,1,101,1,101,1,102,1,102,5,102,2907,8,102,10,
	102,12,102,2910,9,102,1,103,1,103,1,104,1,104,1,104,1,104,1,104,3,104,2919,
	8,104,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,
	1,105,1,105,1,105,1,105,1,105,1,105,1,105,3,105,2939,8,105,1,105,1,105,
	1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,3,105,
	2954,8,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,
	1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,
	1,105,3,105,2979,8,105,1,106,1,106,1,106,3,106,2984,8,106,1,107,1,107,1,
	107,1,107,1,107,3,107,2991,8,107,1,108,1,108,1,108,5,108,2996,8,108,10,
	108,12,108,2999,9,108,1,109,1,109,1,110,1,110,1,110,1,110,1,110,1,110,3,
	110,3009,8,110,1,111,1,111,1,111,3,111,3014,8,111,1,112,1,112,1,112,5,112,
	3019,8,112,10,112,12,112,3022,9,112,1,113,1,113,1,113,1,113,1,113,1,113,
	1,113,1,113,3,113,3032,8,113,1,114,1,114,1,114,1,114,1,114,1,114,3,114,
	3040,8,114,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115,3,115,
	3051,8,115,1,116,1,116,1,116,1,116,1,117,1,117,1,117,1,117,1,118,1,118,
	1,118,1,118,1,118,1,118,3,118,3067,8,118,1,119,1,119,1,119,1,119,1,119,
	1,119,3,119,3075,8,119,1,120,1,120,3,120,3079,8,120,1,121,1,121,1,121,1,
	121,1,121,1,121,1,121,1,122,1,122,1,122,5,122,3091,8,122,10,122,12,122,
	3094,9,122,1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,123,
	1,123,1,123,1,123,1,123,3,123,3110,8,123,1,124,1,124,1,124,3,124,3115,8,
	124,1,125,1,125,1,125,1,125,1,125,3,125,3122,8,125,1,126,1,126,1,126,1,
	126,1,126,1,126,1,126,3,126,3131,8,126,1,126,3,126,3134,8,126,1,127,1,127,
	1,127,3,127,3139,8,127,1,128,1,128,1,128,1,128,1,128,3,128,3146,8,128,1,
	129,1,129,1,129,1,129,1,130,1,130,1,130,1,130,1,130,3,130,3157,8,130,1,
	130,1,130,1,130,1,130,1,130,1,130,1,130,1,131,1,131,1,131,1,131,3,131,3170,
	8,131,1,131,1,131,1,131,1,131,1,131,1,132,1,132,1,132,1,132,1,132,1,132,
	3,132,3183,8,132,1,132,1,132,1,132,1,132,1,132,1,133,1,133,1,133,1,133,
	1,133,1,133,1,133,1,134,1,134,1,134,1,134,3,134,3201,8,134,1,134,3,134,
	3204,8,134,1,135,1,135,1,135,1,135,1,135,1,135,1,135,3,135,3213,8,135,1,
	135,1,135,1,135,1,135,1,135,1,136,1,136,1,136,1,136,1,136,1,136,1,137,1,
	137,3,137,3228,8,137,1,138,1,138,1,138,1,138,1,138,1,138,1,138,1,139,1,
	139,1,139,1,139,1,139,1,139,3,139,3243,8,139,1,139,1,139,1,139,1,140,1,
	140,1,140,1,140,3,140,3252,8,140,1,140,1,140,1,140,1,141,1,141,3,141,3259,
	8,141,1,142,1,142,1,142,1,142,1,142,3,142,3266,8,142,1,143,4,143,3269,8,
	143,11,143,12,143,3270,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144,
	1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144,
	1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144,3,144,3301,8,144,3,144,
	3303,8,144,1,145,1,145,3,145,3307,8,145,1,146,1,146,1,146,1,146,1,146,1,
	146,3,146,3315,8,146,1,147,1,147,1,147,5,147,3320,8,147,10,147,12,147,3323,
	9,147,1,148,1,148,1,148,1,148,1,148,1,148,1,148,1,148,1,148,1,148,1,148,
	3,148,3336,8,148,1,149,1,149,3,149,3340,8,149,1,150,1,150,3,150,3344,8,
	150,1,151,1,151,1,151,3,151,3349,8,151,1,152,1,152,1,152,1,152,3,152,3355,
	8,152,1,153,1,153,3,153,3359,8,153,1,154,1,154,3,154,3363,8,154,1,155,1,
	155,1,155,1,155,1,155,1,155,1,155,1,155,1,156,1,156,1,156,3,156,3376,8,
	156,1,157,1,157,1,157,1,157,3,157,3382,8,157,1,157,1,157,1,158,1,158,1,
	158,1,158,1,158,3,158,3391,8,158,1,158,1,158,1,158,1,158,1,159,5,159,3398,
	8,159,10,159,12,159,3401,9,159,1,160,1,160,1,160,1,160,1,160,1,160,1,160,
	3,160,3410,8,160,1,161,1,161,1,161,1,161,1,161,1,161,1,162,5,162,3419,8,
	162,10,162,12,162,3422,9,162,1,163,1,163,1,163,1,164,1,164,1,164,1,164,
	1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,
	1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,
	1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,
	1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,
	1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,
	1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,
	1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,
	1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,
	1,164,1,164,1,164,1,164,3,164,3531,8,164,1,165,1,165,1,165,1,165,1,165,
	1,165,1,165,1,165,1,166,1,166,1,166,1,166,1,166,1,166,1,166,1,166,3,166,
	3549,8,166,1,167,4,167,3552,8,167,11,167,12,167,3553,1,168,1,168,3,168,
	3558,8,168,1,169,1,169,1,169,1,169,1,169,1,169,1,169,1,169,1,169,1,169,
	1,169,1,169,1,169,1,169,1,169,3,169,3575,8,169,1,170,1,170,1,170,1,170,
	1,170,1,170,3,170,3583,8,170,1,171,1,171,1,171,5,171,3588,8,171,10,171,
	12,171,3591,9,171,1,172,1,172,1,172,1,172,1,172,1,173,1,173,1,173,5,173,
	3601,8,173,10,173,12,173,3604,9,173,1,174,1,174,1,174,1,174,1,174,1,174,
	1,174,3,174,3613,8,174,1,175,1,175,1,175,1,176,1,176,1,177,1,177,1,178,
	1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,
	1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,
	3,178,3647,8,178,1,179,1,179,1,179,3,179,3652,8,179,1,180,1,180,1,180,3,
	180,3657,8,180,1,181,1,181,3,181,3661,8,181,1,182,1,182,1,182,1,182,1,182,
	1,182,3,182,3669,8,182,3,182,3671,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,1,183,1,183,1,183,1,183,1,183,1,
	183,1,183,1,183,1,183,1,183,1,183,1,183,1,183,1,183,1,183,1,183,1,183,1,
	183,1,183,1,183,1,183,1,183,1,183,1,183,1,183,1,183,1,183,1,183,1,183,1,
	183,1,183,1,183,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,3729,8,183,1,184,1,184,1,184,1,184,1,184,1,184,1,
	184,1,184,1,184,1,184,1,184,1,184,1,185,1,185,1,185,3,185,3746,8,185,1,
	186,1,186,1,186,1,186,1,186,1,186,3,186,3754,8,186,1,187,1,187,1,187,1,
	187,1,187,1,187,1,187,1,187,1,187,1,187,1,187,1,187,1,187,1,187,1,187,1,
	187,1,187,1,187,1,187,1,187,1,187,3,187,3777,8,187,1,188,1,188,3,188,3781,
	8,188,1,189,1,189,1,189,1,189,1,189,1,189,1,189,1,189,1,189,1,189,1,189,
	1,189,1,189,1,189,1,189,1,189,1,189,1,189,3,189,3801,8,189,1,190,1,190,
	1,190,1,190,1,190,1,190,1,190,1,190,1,190,1,191,1,191,1,191,1,191,1,191,
	1,191,1,191,1,191,1,191,1,191,1,191,1,192,1,192,1,192,1,192,1,192,1,192,
	1,192,1,192,1,192,1,193,1,193,1,193,1,193,1,193,1,193,3,193,3838,8,193,
	1,194,1,194,1,194,1,194,1,194,1,194,1,194,3,194,3847,8,194,1,195,1,195,
	1,195,3,195,3852,8,195,1,196,1,196,1,196,3,196,3857,8,196,1,197,1,197,1,
	197,3,197,3862,8,197,1,198,1,198,1,198,3,198,3867,8,198,1,199,1,199,1,200,
	1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,201,1,201,1,202,1,202,
	1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,
	1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,
	1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,
	3,202,3920,8,202,1,203,1,203,1,203,1,203,3,203,3926,8,203,1,204,1,204,1,
	204,5,204,3931,8,204,10,204,12,204,3934,9,204,1,205,1,205,1,205,1,205,1,
	205,1,205,1,205,3,205,3943,8,205,1,206,1,206,1,206,3,206,3948,8,206,1,207,
	4,207,3951,8,207,11,207,12,207,3952,1,208,1,208,1,208,1,208,1,208,1,209,
	1,209,1,210,1,210,1,211,1,211,1,212,1,212,1,212,1,212,1,212,3,212,3971,
	8,212,1,213,1,213,3,213,3975,8,213,1,214,1,214,1,215,1,215,1,215,1,215,
	1,215,1,215,3,215,3985,8,215,1,216,1,216,1,217,1,217,3,217,3991,8,217,1,
	217,1,217,5,217,3995,8,217,10,217,12,217,3998,9,217,1,218,1,218,1,218,1,
	218,3,218,4004,8,218,1,219,1,219,1,219,3,219,4009,8,219,1,220,5,220,4012,
	8,220,10,220,12,220,4015,9,220,1,221,1,221,1,221,1,221,1,221,1,221,1,221,
	1,221,1,221,1,221,1,221,3,221,4028,8,221,1,222,1,222,1,222,1,222,1,222,
	1,222,1,222,1,222,1,222,1,222,1,222,1,222,1,222,1,222,1,222,1,222,1,222,
	1,222,1,222,1,222,1,222,1,222,1,222,1,222,1,222,1,222,3,222,4056,8,222,
	1,223,1,223,1,223,5,223,4061,8,223,10,223,12,223,4064,9,223,1,224,1,224,
	1,224,1,224,1,224,1,224,1,225,1,225,1,225,5,225,4075,8,225,10,225,12,225,
	4078,9,225,1,226,1,226,1,226,1,226,1,226,1,226,1,227,1,227,1,227,1,227,
	1,227,1,227,3,227,4092,8,227,1,228,1,228,1,228,1,228,1,228,1,228,1,228,
	1,228,1,228,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,
	1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,
	1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,
	1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,
	1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,
	1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,
	1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,
	1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,
	1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,
	3,229,4209,8,229,1,230,1,230,1,230,1,230,1,231,1,231,1,231,5,231,4218,8,
	231,10,231,12,231,4221,9,231,1,232,1,232,1,232,3,232,4226,8,232,1,233,1,
	233,1,233,1,233,1,233,1,233,3,233,4234,8,233,1,234,1,234,1,234,1,234,1,
	235,1,235,1,235,5,235,4243,8,235,10,235,12,235,4246,9,235,1,236,1,236,1,
	236,1,236,1,237,1,237,3,237,4254,8,237,1,238,1,238,1,238,5,238,4259,8,238,
	10,238,12,238,4262,9,238,1,239,1,239,1,239,1,239,1,239,1,239,1,239,1,239,
	1,239,1,239,1,239,1,239,1,239,1,239,1,239,1,239,1,239,1,239,1,239,1,239,
	1,239,1,239,1,239,1,239,1,239,1,239,1,239,1,239,1,239,1,239,1,239,1,239,
	1,239,1,239,1,239,1,239,1,239,3,239,4301,8,239,1,240,1,240,1,240,1,240,
	3,240,4307,8,240,1,241,1,241,1,241,1,241,1,241,1,241,1,241,1,241,1,241,
	1,241,1,241,1,241,1,241,1,241,1,242,1,242,1,242,5,242,4326,8,242,10,242,
	12,242,4329,9,242,1,243,1,243,1,243,1,243,1,243,1,243,1,243,1,243,1,243,
	1,243,1,243,1,243,1,243,1,243,1,243,1,243,1,243,1,243,1,243,1,243,1,243,
	1,243,1,243,1,243,1,243,3,243,4356,8,243,1,244,1,244,3,244,4360,8,244,1,
	245,1,245,1,245,3,245,4365,8,245,1,246,1,246,1,246,1,246,1,246,1,246,1,
	246,3,246,4374,8,246,1,247,1,247,3,247,4378,8,247,1,248,1,248,1,248,1,248,
	1,248,1,248,1,248,1,249,1,249,1,249,1,249,1,249,1,249,1,249,1,249,1,249,
	1,249,1,249,1,249,1,249,1,249,1,249,1,249,1,249,1,249,3,249,4405,8,249,
	1,250,1,250,1,250,5,250,4410,8,250,10,250,12,250,4413,9,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,4427,
	8,251,1,252,1,252,1,252,1,252,1,252,1,252,1,252,1,252,1,252,1,252,1,252,
	1,252,1,252,1,252,1,252,1,252,1,252,1,252,3,252,4447,8,252,1,253,1,253,
	1,253,1,253,1,253,1,253,1,253,1,253,1,253,1,253,1,253,1,253,1,253,1,253,
	1,253,1,253,1,253,1,253,3,253,4467,8,253,1,254,1,254,1,254,1,254,1,254,
	1,254,1,255,1,255,1,255,1,255,1,255,1,255,1,255,1,256,1,256,1,256,1,256,
	1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,
	1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,
	1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,
	1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,
	1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,
	1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,
	1,256,1,256,3,256,4560,8,256,1,257,1,257,1,257,1,257,1,257,1,257,1,257,
	1,257,1,257,1,257,1,257,1,257,1,257,1,257,1,257,1,257,1,257,1,257,1,257,
	1,257,1,257,1,257,1,257,3,257,4585,8,257,1,258,1,258,1,258,1,258,1,258,
	3,258,4592,8,258,1,259,1,259,1,259,1,259,1,259,1,259,1,259,1,259,1,259,
	1,259,1,259,1,259,1,259,1,259,3,259,4608,8,259,1,260,1,260,1,261,1,261,
	1,261,5,261,4615,8,261,10,261,12,261,4618,9,261,1,262,1,262,3,262,4622,
	8,262,1,263,1,263,4,263,4626,8,263,11,263,12,263,4627,1,264,1,264,1,264,
	5,264,4633,8,264,10,264,12,264,4636,9,264,1,265,1,265,1,265,1,265,1,265,
	1,265,1,266,1,266,1,266,1,266,1,266,3,266,4649,8,266,1,267,1,267,1,267,
	1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,
	1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,
	1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,
	1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,
	1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,
	1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,
	1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,
	1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,
	1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,
	1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,
	1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,
	1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,
	3,267,4798,8,267,1,268,1,268,3,268,4802,8,268,1,269,1,269,1,269,1,269,1,
	269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,
	269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,
	269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,
	269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,
	269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,
	269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,
	269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,
	269,1,269,1,269,3,269,4895,8,269,1,270,1,270,1,270,3,270,4900,8,270,1,271,
	1,271,3,271,4904,8,271,1,272,1,272,1,272,1,272,3,272,4910,8,272,1,273,1,
	273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,
	273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,
	273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,
	273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,
	273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,
	273,1,273,1,273,1,273,1,273,3,273,4978,8,273,1,274,1,274,1,275,1,275,3,
	275,4984,8,275,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,277,1,
	277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,
	277,1,277,1,277,1,277,1,277,1,277,3,277,5013,8,277,1,278,1,278,1,278,1,
	278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,3,
	278,5030,8,278,1,279,1,279,1,279,5,279,5035,8,279,10,279,12,279,5038,9,
	279,1,280,1,280,1,280,1,280,1,280,1,280,1,280,1,280,1,280,3,280,5049,8,
	280,1,281,1,281,1,281,1,281,1,281,1,281,1,281,1,281,1,281,1,281,1,281,1,
	281,1,281,1,281,1,281,1,281,1,281,1,281,1,281,1,281,1,281,1,281,1,281,1,
	281,1,281,1,281,1,281,1,281,1,281,1,281,1,281,1,281,1,281,1,281,1,281,1,
	281,1,281,1,281,1,281,1,281,1,281,1,281,1,281,1,281,1,281,1,281,1,281,1,
	281,1,281,1,281,1,281,1,281,1,281,1,281,1,281,1,281,1,281,1,281,3,281,5109,
	8,281,1,282,1,282,1,282,5,282,5114,8,282,10,282,12,282,5117,9,282,1,283,
	1,283,1,283,3,283,5122,8,283,1,284,1,284,1,284,1,284,3,284,5128,8,284,1,
	285,1,285,1,285,1,285,1,285,1,285,1,285,1,286,1,286,1,286,1,286,1,286,1,
	286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,3,
	286,5154,8,286,1,287,1,287,1,287,1,287,3,287,5160,8,287,1,288,1,288,1,288,
	1,288,3,288,5166,8,288,1,289,1,289,1,289,1,289,1,289,1,289,1,290,5,290,
	5175,8,290,10,290,12,290,5178,9,290,1,291,1,291,1,291,1,291,1,291,1,291,
	1,291,1,291,1,291,3,291,5189,8,291,1,292,1,292,1,292,1,292,1,292,1,292,
	1,292,1,292,1,292,1,292,1,292,1,292,1,292,1,292,1,292,1,292,1,292,1,292,
	1,292,1,292,1,292,1,292,1,292,1,292,1,292,1,292,1,292,3,292,5218,8,292,
	1,293,1,293,1,294,1,294,1,294,1,294,1,294,1,294,1,294,1,294,1,294,1,294,
	1,294,1,294,1,294,1,294,1,294,1,294,1,294,1,294,1,294,1,294,1,294,1,294,
	1,294,1,294,1,294,1,294,1,294,1,294,1,294,1,294,1,294,1,294,1,294,1,294,
	1,294,3,294,5257,8,294,1,295,1,295,3,295,5261,8,295,1,296,1,296,3,296,5265,
	8,296,1,297,1,297,3,297,5269,8,297,1,298,1,298,1,298,3,298,5274,8,298,1,
	299,1,299,1,299,5,299,5279,8,299,10,299,12,299,5282,9,299,1,300,1,300,1,
	300,1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,300,3,300,5295,8,300,1,
	301,1,301,1,301,1,301,1,301,1,301,1,301,1,301,1,301,1,301,1,301,3,301,5308,
	8,301,1,302,1,302,1,302,1,302,1,302,1,302,3,302,5316,8,302,1,303,1,303,
	1,303,5,303,5321,8,303,10,303,12,303,5324,9,303,1,304,1,304,1,304,3,304,
	5329,8,304,1,305,1,305,3,305,5333,8,305,1,306,1,306,1,306,3,306,5338,8,
	306,1,307,1,307,1,307,1,307,1,307,3,307,5345,8,307,1,308,1,308,1,308,1,
	308,1,308,1,308,1,308,1,308,1,308,1,308,1,308,1,308,3,308,5359,8,308,3,
	308,5361,8,308,1,308,1,308,1,309,1,309,1,309,3,309,5368,8,309,1,310,1,310,
	3,310,5372,8,310,1,310,1,310,1,311,1,311,1,311,5,311,5379,8,311,10,311,
	12,311,5382,9,311,1,312,1,312,1,312,5,312,5387,8,312,10,312,12,312,5390,
	9,312,1,313,1,313,1,313,1,313,1,313,1,313,3,313,5398,8,313,3,313,5400,8,
	313,1,314,1,314,3,314,5404,8,314,1,314,1,314,1,315,1,315,1,315,5,315,5411,
	8,315,10,315,12,315,5414,9,315,1,316,1,316,3,316,5418,8,316,1,316,1,316,
	1,316,1,316,3,316,5424,8,316,1,316,1,316,1,316,3,316,5429,8,316,1,317,1,
	317,3,317,5433,8,317,1,317,1,317,1,317,3,317,5438,8,317,1,318,1,318,1,319,
	1,319,1,320,1,320,1,320,1,320,1,320,1,320,1,320,1,320,1,320,1,320,1,320,
	1,320,3,320,5456,8,320,1,321,1,321,1,321,3,321,5461,8,321,1,322,1,322,1,
	323,1,323,1,323,1,323,1,323,1,323,1,323,1,323,1,323,1,323,1,323,3,323,5476,
	8,323,1,323,1,323,1,324,1,324,1,324,5,324,5483,8,324,10,324,12,324,5486,
	9,324,1,325,1,325,1,325,1,326,1,326,1,326,5,326,5494,8,326,10,326,12,326,
	5497,9,326,1,327,4,327,5500,8,327,11,327,12,327,5501,1,327,1,327,1,328,
	1,328,1,328,1,328,1,328,1,328,1,328,1,328,1,328,1,328,1,328,1,328,1,328,
	1,328,1,328,1,328,1,328,1,328,1,328,1,328,1,328,1,328,1,328,1,328,1,328,
	1,328,1,328,1,328,1,328,1,328,1,328,1,328,1,328,1,328,1,328,3,328,5541,
	8,328,1,329,1,329,1,329,1,329,1,329,1,329,1,329,1,329,3,329,5551,8,329,
	1,330,1,330,1,330,1,330,1,330,3,330,5558,8,330,1,331,1,331,1,331,1,331,
	1,331,1,331,1,331,5,331,5567,8,331,10,331,12,331,5570,9,331,1,332,1,332,
	1,332,3,332,5575,8,332,1,333,1,333,1,333,1,334,1,334,1,334,5,334,5583,8,
	334,10,334,12,334,5586,9,334,1,335,1,335,1,335,1,335,1,335,1,335,1,336,
	4,336,5595,8,336,11,336,12,336,5596,1,337,1,337,3,337,5601,8,337,1,338,
	1,338,1,338,1,338,1,338,1,338,1,338,1,338,1,338,1,338,1,338,1,338,1,338,
	1,338,1,338,1,338,1,338,1,338,1,338,1,338,1,338,1,338,1,338,1,338,1,338,
	1,338,1,338,1,338,1,338,1,338,1,338,1,338,1,338,1,338,1,338,1,338,3,338,
	5639,8,338,1,339,1,339,1,339,1,339,1,339,1,339,1,339,1,339,1,339,1,339,
	1,339,1,339,3,339,5653,8,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,3,340,5667,8,340,1,341,1,341,1,341,1,341,
	1,341,1,341,1,341,1,341,1,341,1,341,1,341,1,341,1,341,1,341,1,341,1,341,
	1,341,1,341,1,341,1,341,1,341,1,341,3,341,5691,8,341,1,342,1,342,1,342,
	5,342,5696,8,342,10,342,12,342,5699,9,342,1,342,1,342,1,343,1,343,1,343,
	5,343,5706,8,343,10,343,12,343,5709,9,343,1,344,1,344,1,344,1,345,1,345,
	1,345,1,346,4,346,5718,8,346,11,346,12,346,5719,1,347,1,347,1,347,3,347,
	5725,8,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,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,1,348,1,348,1,348,1,348,1,348,1,348,
	3,348,5761,8,348,1,349,1,349,1,349,1,349,1,349,3,349,5768,8,349,1,350,1,
	350,1,350,1,350,1,350,1,350,1,350,1,350,1,350,1,350,1,351,1,351,1,351,3,
	351,5783,8,351,1,352,1,352,1,352,1,352,1,352,1,352,1,352,1,352,1,352,1,
	352,1,352,1,353,1,353,1,353,1,353,1,353,1,353,1,353,1,353,1,353,1,353,1,
	353,1,353,1,353,1,353,1,353,1,353,1,353,1,353,1,353,1,353,1,353,1,353,1,
	353,1,353,1,353,1,353,1,353,1,353,1,353,1,353,1,353,1,353,1,353,1,353,3,
	353,5830,8,353,1,354,1,354,1,354,1,354,1,354,1,354,1,354,1,354,1,354,1,
	355,1,355,1,355,1,355,1,355,1,355,1,355,1,355,1,355,1,355,1,355,1,355,1,
	355,1,355,1,355,1,355,1,355,1,355,1,355,1,355,1,355,1,355,1,355,1,355,1,
	355,1,355,3,355,5867,8,355,1,356,1,356,1,357,1,357,1,358,1,358,1,358,5,
	358,5876,8,358,10,358,12,358,5879,9,358,1,359,1,359,1,360,1,360,1,360,1,
	360,1,360,1,360,1,360,1,360,1,360,1,360,1,360,1,360,3,360,5895,8,360,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,
	361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,1,361,3,
	361,6365,8,361,1,362,1,362,3,362,6369,8,362,1,363,1,363,1,363,3,363,6374,
	8,363,1,364,1,364,1,364,1,364,1,364,1,364,1,364,1,364,1,364,1,364,1,364,
	1,364,1,364,1,364,1,364,1,364,1,364,1,364,1,364,1,364,1,364,1,364,1,364,
	1,364,1,364,1,364,1,364,1,364,1,364,1,364,1,364,1,364,1,364,1,364,1,364,
	1,364,1,364,1,364,1,364,1,364,1,364,1,364,1,364,1,364,1,364,1,364,1,364,
	1,364,1,364,1,364,1,364,1,364,1,364,1,364,1,364,1,364,1,364,3,364,6433,
	8,364,1,365,1,365,3,365,6437,8,365,1,366,1,366,1,366,1,366,1,366,1,366,
	1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,
	1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,
	1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,
	1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,
	1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,
	1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,
	1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,
	1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,
	1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,
	1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,
	1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,
	1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,
	1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,
	1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,
	1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,
	1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,
	1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,1,366,
	1,366,1,366,1,366,1,366,1,366,1,366,1,366,3,366,6656,8,366,1,367,1,367,
	1,367,1,367,1,367,1,367,1,367,1,367,1,368,1,368,1,368,5,368,6669,8,368,
	10,368,12,368,6672,9,368,1,369,1,369,1,369,1,369,1,369,1,369,1,369,1,369,
	3,369,6682,8,369,1,370,1,370,1,370,1,370,1,370,3,370,6689,8,370,1,371,1,
	371,1,371,1,371,1,371,1,371,1,371,1,371,1,372,1,372,1,372,1,372,1,372,1,
	372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,
	372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,
	372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,
	372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,
	372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,
	372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,
	372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,
	372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,
	372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,
	372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,
	372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,
	372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,
	372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,
	372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,
	372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,3,372,6882,8,
	372,1,373,1,373,1,373,1,373,1,373,1,373,1,374,1,374,3,374,6892,8,374,1,
	375,1,375,1,375,1,375,1,375,1,375,3,375,6900,8,375,1,376,1,376,1,376,1,
	376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,
	376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,3,
	376,6929,8,376,1,377,1,377,1,377,1,377,1,377,1,377,1,377,1,377,1,377,1,
	378,1,378,1,378,5,378,6943,8,378,10,378,12,378,6946,9,378,1,379,1,379,1,
	380,1,380,1,380,1,380,1,380,1,380,1,380,1,380,1,380,1,380,1,380,1,380,1,
	380,1,380,1,380,1,380,1,380,1,380,1,380,1,380,1,380,1,380,1,380,1,380,1,
	380,1,380,1,380,1,380,1,380,1,380,1,380,1,380,1,380,1,380,1,380,1,380,1,
	380,3,380,6987,8,380,1,381,1,381,1,381,1,381,1,381,1,381,1,381,1,381,1,
	381,1,381,1,381,1,381,3,381,7001,8,381,1,382,1,382,1,382,1,382,1,382,1,
	382,1,382,1,382,1,382,1,382,1,382,1,382,1,382,1,382,1,383,1,383,1,383,1,
	383,1,383,1,383,3,383,7023,8,383,1,384,1,384,1,384,5,384,7028,8,384,10,
	384,12,384,7031,9,384,1,385,1,385,1,385,1,385,1,385,3,385,7038,8,385,1,
	386,1,386,3,386,7042,8,386,1,387,1,387,1,388,1,388,1,388,3,388,7049,8,388,
	1,389,1,389,1,389,1,389,1,390,1,390,1,390,3,390,7058,8,390,1,391,1,391,
	1,391,1,392,1,392,1,392,1,392,3,392,7067,8,392,1,393,1,393,1,393,1,393,
	1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,
	1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,
	1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,
	1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,1,393,3,393,7119,
	8,393,1,394,1,394,1,394,3,394,7124,8,394,1,395,1,395,1,395,1,395,1,395,
	1,395,1,395,1,395,1,395,1,395,3,395,7136,8,395,1,396,1,396,3,396,7140,8,
	396,1,396,5,396,7143,8,396,10,396,12,396,7146,9,396,1,397,1,397,3,397,7150,
	8,397,1,398,1,398,3,398,7154,8,398,1,398,1,398,3,398,7158,8,398,1,399,1,
	399,1,399,3,399,7163,8,399,1,399,1,399,1,399,1,399,1,399,1,399,1,399,1,
	399,1,399,1,399,1,399,1,399,1,399,1,399,3,399,7179,8,399,1,399,1,399,1,
	399,1,399,1,400,1,400,3,400,7187,8,400,1,400,1,400,1,400,3,400,7192,8,400,
	1,401,1,401,1,401,1,402,1,402,1,402,1,402,1,402,1,402,1,403,1,403,3,403,
	7205,8,403,1,404,4,404,7208,8,404,11,404,12,404,7209,1,405,1,405,1,405,
	1,405,1,405,3,405,7217,8,405,1,406,1,406,1,406,1,406,1,406,1,406,1,406,
	1,406,3,406,7227,8,406,1,407,1,407,3,407,7231,8,407,1,408,1,408,1,408,1,
	408,1,408,1,408,1,408,1,408,1,408,3,408,7242,8,408,1,409,1,409,1,409,1,
	409,1,409,1,410,1,410,1,410,1,410,3,410,7253,8,410,1,410,1,410,1,410,1,
	410,1,410,1,410,3,410,7261,8,410,1,411,1,411,1,411,5,411,7266,8,411,10,
	411,12,411,7269,9,411,1,412,1,412,1,413,1,413,1,413,1,413,1,413,1,413,1,
	414,1,414,1,414,1,414,1,414,1,415,1,415,1,415,1,415,1,415,1,415,1,415,1,
	416,1,416,1,416,1,416,1,416,1,416,1,416,1,416,1,416,1,416,1,416,1,416,1,
	416,1,416,1,416,1,416,3,416,7307,8,416,1,416,1,416,1,416,1,416,1,416,1,
	416,3,416,7315,8,416,1,417,1,417,3,417,7319,8,417,1,418,1,418,1,418,1,418,
	1,418,1,418,1,418,1,419,1,419,1,419,1,419,1,419,1,419,1,419,1,419,1,419,
	1,419,1,419,1,419,1,419,1,419,1,419,1,419,1,419,1,419,1,419,1,419,1,419,
	1,419,1,419,1,419,1,419,1,419,1,419,1,419,1,419,1,419,1,419,1,419,1,419,
	1,419,1,419,1,419,1,419,1,419,1,419,1,419,1,419,1,419,1,419,1,419,1,419,
	1,419,1,419,1,419,1,419,1,419,1,419,1,419,1,419,1,419,1,419,1,419,1,419,
	1,419,1,419,1,419,1,419,1,419,1,419,1,419,1,419,1,419,1,419,1,419,1,419,
	1,419,1,419,1,419,3,419,7400,8,419,1,420,1,420,1,421,1,421,1,421,1,421,
	1,421,1,421,1,421,1,421,1,421,1,421,1,421,1,422,1,422,1,422,1,422,1,422,
	1,422,1,422,1,422,1,422,1,422,1,422,1,422,1,422,3,422,7428,8,422,1,423,
	1,423,1,423,3,423,7433,8,423,1,424,1,424,1,424,1,424,1,424,1,424,1,424,
	1,424,1,424,1,424,1,424,1,424,1,424,3,424,7448,8,424,1,425,1,425,1,425,
	1,425,1,425,1,425,1,425,1,425,1,425,1,425,3,425,7460,8,425,1,426,1,426,
	1,426,5,426,7465,8,426,10,426,12,426,7468,9,426,1,427,1,427,1,428,1,428,
	1,428,1,429,1,429,3,429,7477,8,429,1,430,1,430,1,430,3,430,7482,8,430,1,
	431,1,431,3,431,7486,8,431,1,432,1,432,3,432,7490,8,432,1,433,1,433,3,433,
	7494,8,433,1,434,1,434,3,434,7498,8,434,1,435,1,435,1,435,1,435,1,435,3,
	435,7505,8,435,1,436,1,436,1,436,1,437,1,437,1,437,5,437,7513,8,437,10,
	437,12,437,7516,9,437,1,438,1,438,3,438,7520,8,438,1,439,1,439,1,439,1,
	439,1,439,1,439,1,439,1,439,1,439,1,439,1,439,1,439,1,439,1,439,1,439,1,
	439,3,439,7538,8,439,1,440,1,440,1,440,1,440,1,440,1,440,1,440,1,440,1,
	440,3,440,7549,8,440,1,441,1,441,1,441,5,441,7554,8,441,10,441,12,441,7557,
	9,441,1,442,1,442,1,442,1,443,1,443,3,443,7564,8,443,1,444,1,444,1,444,
	3,444,7569,8,444,1,445,1,445,1,445,1,445,1,445,1,445,1,446,1,446,1,446,
	1,446,1,446,3,446,7582,8,446,1,447,1,447,1,447,1,447,3,447,7588,8,447,1,
	448,1,448,1,448,1,448,1,448,1,448,1,448,1,448,1,448,1,448,1,448,1,448,1,
	448,1,448,1,448,1,448,1,448,1,448,1,448,1,448,1,448,1,448,1,448,1,448,1,
	448,1,448,1,448,3,448,7617,8,448,1,449,1,449,1,449,1,449,1,449,3,449,7624,
	8,449,1,450,1,450,1,450,1,450,1,450,1,450,1,450,1,450,1,450,1,450,3,450,
	7636,8,450,1,451,1,451,1,451,1,451,1,451,1,451,1,451,1,451,1,452,1,452,
	1,452,3,452,7649,8,452,1,453,1,453,1,453,1,453,1,453,1,453,1,453,1,453,
	1,453,1,453,1,453,1,453,1,453,3,453,7664,8,453,1,453,1,453,1,453,1,453,
	3,453,7670,8,453,1,454,1,454,1,455,1,455,1,455,5,455,7677,8,455,10,455,
	12,455,7680,9,455,1,456,1,456,1,456,1,457,1,457,1,457,1,457,1,457,1,457,
	1,457,1,457,1,457,1,457,3,457,7695,8,457,1,457,3,457,7698,8,457,1,458,1,
	458,1,458,1,458,1,458,1,458,1,458,1,458,1,458,3,458,7709,8,458,1,459,1,
	459,1,459,3,459,7714,8,459,1,460,1,460,1,460,1,460,1,460,1,460,1,460,1,
	460,1,461,1,461,1,461,3,461,7727,8,461,1,462,1,462,1,462,1,462,1,462,1,
	462,1,463,1,463,1,463,1,463,1,463,3,463,7740,8,463,1,464,1,464,1,464,1,
	464,1,464,1,464,1,464,1,464,1,464,3,464,7751,8,464,1,464,3,464,7754,8,464,
	1,465,1,465,3,465,7758,8,465,1,466,1,466,1,466,1,466,3,466,7764,8,466,1,
	467,1,467,1,467,1,467,1,467,1,467,1,467,1,467,1,467,1,468,1,468,1,468,5,
	468,7778,8,468,10,468,12,468,7781,9,468,1,469,1,469,1,469,1,469,1,469,1,
	469,1,469,1,469,1,469,1,469,3,469,7793,8,469,1,470,1,470,1,470,1,471,1,
	471,1,471,5,471,7801,8,471,10,471,12,471,7804,9,471,1,472,1,472,1,472,1,
	472,1,472,1,472,1,472,1,472,1,473,1,473,1,474,1,474,1,474,1,474,1,474,5,
	474,7821,8,474,10,474,12,474,7824,9,474,1,475,1,475,1,475,1,475,1,475,3,
	475,7831,8,475,1,476,1,476,3,476,7835,8,476,1,477,1,477,1,477,1,477,1,477,
	1,477,1,477,1,477,3,477,7845,8,477,1,478,1,478,1,478,1,478,1,478,1,478,
	1,478,1,478,3,478,7855,8,478,1,478,1,478,1,478,1,478,1,478,1,478,1,478,
	1,478,1,478,3,478,7866,8,478,3,478,7868,8,478,1,479,1,479,3,479,7872,8,
	479,1,480,1,480,1,480,1,480,1,480,1,480,1,480,1,480,3,480,7882,8,480,1,
	480,1,480,1,480,1,480,1,480,1,480,1,480,1,480,1,480,1,480,1,480,1,480,1,
	480,1,480,3,480,7898,8,480,3,480,7900,8,480,1,480,1,480,1,480,3,480,7905,
	8,480,5,480,7907,8,480,10,480,12,480,7910,9,480,1,481,1,481,1,481,3,481,
	7915,8,481,1,482,1,482,1,482,1,483,1,483,3,483,7922,8,483,1,483,1,483,1,
	484,1,484,1,484,5,484,7929,8,484,10,484,12,484,7932,9,484,1,485,1,485,1,
	485,1,485,1,485,1,485,1,485,1,485,1,486,1,486,1,486,1,486,3,486,7946,8,
	486,1,487,1,487,3,487,7950,8,487,1,488,1,488,1,488,1,488,1,488,3,488,7957,
	8,488,1,488,3,488,7960,8,488,1,489,1,489,3,489,7964,8,489,1,490,3,490,7967,
	8,490,1,490,1,490,1,490,1,490,1,490,1,490,1,490,1,490,1,490,1,490,1,490,
	3,490,7980,8,490,1,491,1,491,3,491,7984,8,491,1,492,1,492,1,492,3,492,7989,
	8,492,1,493,1,493,1,493,1,493,1,493,1,493,3,493,7997,8,493,1,494,1,494,
	3,494,8001,8,494,1,495,1,495,3,495,8005,8,495,1,496,1,496,1,496,1,496,1,
	497,1,497,1,497,5,497,8014,8,497,10,497,12,497,8017,9,497,1,498,1,498,1,
	498,1,498,3,498,8023,8,498,1,498,1,498,1,499,1,499,3,499,8029,8,499,1,499,
	1,499,3,499,8033,8,499,3,499,8035,8,499,1,500,1,500,3,500,8039,8,500,1,
	501,1,501,1,501,1,501,3,501,8045,8,501,1,501,1,501,1,501,1,501,1,501,1,
	501,1,501,3,501,8054,8,501,1,501,1,501,1,501,1,501,3,501,8060,8,501,3,501,
	8062,8,501,3,501,8064,8,501,1,502,1,502,1,502,1,502,1,502,3,502,8071,8,
	502,1,503,1,503,3,503,8075,8,503,1,504,1,504,1,505,1,505,1,505,1,505,1,
	505,3,505,8084,8,505,1,506,1,506,3,506,8088,8,506,1,507,1,507,1,508,1,508,
	1,509,1,509,1,509,1,509,3,509,8098,8,509,1,510,1,510,1,510,5,510,8103,8,
	510,10,510,12,510,8106,9,510,1,511,1,511,1,511,1,511,1,511,3,511,8113,8,
	511,1,512,1,512,1,512,1,513,1,513,1,513,1,513,1,513,1,514,1,514,1,514,1,
	514,1,514,1,515,1,515,1,515,1,515,1,515,1,515,1,516,1,516,1,516,3,516,8137,
	8,516,1,517,1,517,1,517,1,517,3,517,8143,8,517,1,518,1,518,3,518,8147,8,
	518,1,519,4,519,8150,8,519,11,519,12,519,8151,1,520,1,520,1,520,1,520,1,
	521,1,521,1,521,3,521,8161,8,521,1,521,1,521,3,521,8165,8,521,1,521,3,521,
	8168,8,521,1,522,1,522,1,522,3,522,8173,8,522,1,523,1,523,1,523,1,523,1,
	523,1,523,1,523,1,523,1,523,5,523,8184,8,523,10,523,12,523,8187,9,523,1,
	524,1,524,1,524,3,524,8192,8,524,1,525,1,525,1,525,5,525,8197,8,525,10,
	525,12,525,8200,9,525,1,526,1,526,1,526,3,526,8205,8,526,1,526,1,526,1,
	526,1,526,1,526,1,526,1,526,1,526,1,526,1,526,1,526,1,526,1,526,1,526,1,
	526,1,526,1,526,1,526,1,526,3,526,8226,8,526,1,526,1,526,1,526,1,526,1,
	526,1,526,1,526,3,526,8235,8,526,1,526,1,526,1,526,3,526,8240,8,526,1,526,
	1,526,1,526,1,526,3,526,8246,8,526,1,526,1,526,1,526,3,526,8251,8,526,1,
	526,1,526,1,526,1,526,1,526,3,526,8258,8,526,1,526,1,526,1,526,3,526,8263,
	8,526,1,526,1,526,1,526,1,526,5,526,8269,8,526,10,526,12,526,8272,9,526,
	1,527,3,527,8275,8,527,1,527,1,527,1,527,1,527,1,527,3,527,8282,8,527,1,
	528,1,528,3,528,8286,8,528,1,529,1,529,1,529,3,529,8291,8,529,1,529,3,529,
	8294,8,529,1,529,1,529,1,529,1,529,1,529,3,529,8301,8,529,1,530,1,530,3,
	530,8305,8,530,1,531,1,531,1,531,1,531,1,531,1,531,1,531,3,531,8314,8,531,
	1,532,1,532,3,532,8318,8,532,1,532,1,532,1,532,1,532,1,532,1,532,3,532,
	8326,8,532,3,532,8328,8,532,1,533,1,533,1,533,5,533,8333,8,533,10,533,12,
	533,8336,9,533,1,534,1,534,3,534,8340,8,534,1,534,3,534,8343,8,534,1,535,
	1,535,1,535,1,535,1,535,1,535,1,535,1,536,1,536,1,536,1,536,1,536,1,536,
	3,536,8358,8,536,1,537,1,537,1,537,1,537,1,537,1,537,1,537,1,537,1,537,
	1,537,3,537,8370,8,537,1,538,1,538,1,538,1,539,1,539,1,539,5,539,8378,8,
	539,10,539,12,539,8381,9,539,1,540,1,540,1,540,1,540,1,540,1,540,3,540,
	8389,8,540,1,541,1,541,1,541,3,541,8394,8,541,1,542,1,542,1,542,3,542,8399,
	8,542,1,543,1,543,1,543,1,543,1,543,3,543,8406,8,543,1,543,3,543,8409,8,
	543,1,544,1,544,3,544,8413,8,544,1,545,1,545,1,545,5,545,8418,8,545,10,
	545,12,545,8421,9,545,1,546,1,546,1,546,1,546,1,547,1,547,1,547,1,547,1,
	547,1,547,1,547,1,547,1,547,1,547,1,547,1,547,1,547,1,547,1,547,1,547,1,
	547,3,547,8444,8,547,1,547,1,547,1,548,1,548,1,548,5,548,8451,8,548,10,
	548,12,548,8454,9,548,1,549,1,549,1,549,3,549,8459,8,549,1,549,1,549,3,
	549,8463,8,549,1,550,4,550,8466,8,550,11,550,12,550,8467,1,551,1,551,1,
	551,1,551,1,551,1,551,1,551,1,551,3,551,8478,8,551,1,552,1,552,1,552,5,
	552,8483,8,552,10,552,12,552,8486,9,552,1,553,1,553,1,553,1,553,1,553,1,
	553,3,553,8494,8,553,1,554,3,554,8497,8,554,1,554,1,554,1,554,1,554,1,554,
	1,554,1,554,3,554,8506,8,554,3,554,8508,8,554,1,554,1,554,1,554,1,554,3,
	554,8514,8,554,1,555,1,555,3,555,8518,8,555,1,555,5,555,8521,8,555,10,555,
	12,555,8524,9,555,1,556,1,556,1,556,1,556,1,556,1,556,1,556,1,556,1,556,
	1,556,1,556,3,556,8537,8,556,3,556,8539,8,556,1,557,1,557,1,557,1,557,3,
	557,8545,8,557,1,558,1,558,3,558,8549,8,558,1,558,1,558,1,559,1,559,1,559,
	1,559,1,559,3,559,8558,8,559,1,560,1,560,1,560,1,560,1,560,1,560,1,560,
	1,560,1,560,1,560,1,560,1,560,1,560,1,560,1,560,1,560,3,560,8576,8,560,
	1,561,1,561,1,561,1,561,1,561,3,561,8583,8,561,1,562,1,562,3,562,8587,8,
	562,1,563,1,563,3,563,8591,8,563,1,564,1,564,1,564,1,564,1,564,1,564,1,
	565,1,565,1,565,1,566,1,566,1,566,1,566,1,566,3,566,8607,8,566,1,567,1,
	567,1,567,1,567,1,567,3,567,8614,8,567,1,568,1,568,1,568,1,568,1,568,1,
	568,3,568,8622,8,568,1,569,1,569,3,569,8626,8,569,1,570,1,570,1,570,1,570,
	1,570,3,570,8633,8,570,1,570,1,570,1,571,1,571,1,572,1,572,1,572,1,572,
	1,572,1,572,1,572,3,572,8646,8,572,1,573,1,573,1,573,1,573,1,573,1,573,
	1,573,1,573,1,573,1,573,1,573,1,573,1,573,1,573,3,573,8662,8,573,1,573,
	1,573,1,573,1,573,3,573,8668,8,573,1,573,1,573,1,573,1,573,3,573,8674,8,
	573,1,574,1,574,1,574,1,574,1,574,3,574,8681,8,574,1,575,1,575,1,575,3,
	575,8686,8,575,1,576,1,576,1,577,1,577,3,577,8692,8,577,1,578,1,578,1,578,
	5,578,8697,8,578,10,578,12,578,8700,9,578,1,579,1,579,1,579,5,579,8705,
	8,579,10,579,12,579,8708,9,579,1,580,1,580,1,580,5,580,8713,8,580,10,580,
	12,580,8716,9,580,1,581,1,581,3,581,8720,8,581,1,581,1,581,3,581,8724,8,
	581,1,582,3,582,8727,8,582,1,582,1,582,1,583,1,583,3,583,8733,8,583,1,584,
	1,584,1,584,3,584,8738,8,584,1,584,1,584,1,584,1,584,1,584,1,584,1,584,
	1,584,1,584,1,584,1,584,1,584,1,584,1,584,3,584,8754,8,584,1,584,3,584,
	8757,8,584,3,584,8759,8,584,1,585,1,585,1,585,1,585,1,585,1,585,1,585,1,
	585,1,585,1,585,3,585,8771,8,585,3,585,8773,8,585,1,586,1,586,3,586,8777,
	8,586,1,586,1,586,1,586,1,586,1,586,1,586,3,586,8785,8,586,3,586,8787,8,
	586,1,586,1,586,1,586,3,586,8792,8,586,1,587,1,587,1,587,1,587,5,587,8798,
	8,587,10,587,12,587,8801,9,587,1,588,3,588,8804,8,588,1,588,1,588,1,589,
	1,589,1,589,5,589,8811,8,589,10,589,12,589,8814,9,589,1,590,1,590,1,590,
	5,590,8819,8,590,10,590,12,590,8822,9,590,1,591,1,591,1,591,3,591,8827,
	8,591,1,592,3,592,8830,8,592,1,592,1,592,1,593,1,593,1,593,1,593,1,593,
	3,593,8839,8,593,1,594,1,594,1,594,3,594,8844,8,594,1,595,1,595,1,595,5,
	595,8849,8,595,10,595,12,595,8852,9,595,1,596,1,596,1,596,1,596,1,596,1,
	596,1,596,3,596,8861,8,596,1,596,1,596,1,596,1,596,1,596,1,596,1,596,1,
	596,1,596,1,596,1,596,1,596,1,596,1,596,1,596,1,596,1,596,1,596,1,596,1,
	596,1,596,1,596,1,596,1,596,3,596,8887,8,596,1,596,1,596,1,596,1,596,1,
	596,1,596,1,596,1,596,1,596,3,596,8898,8,596,5,596,8900,8,596,10,596,12,
	596,8903,9,596,1,597,1,597,1,597,1,597,1,597,3,597,8910,8,597,1,597,1,597,
	1,597,1,597,1,597,1,597,1,597,1,597,1,597,1,597,1,597,1,597,1,597,1,597,
	1,597,1,597,1,597,1,597,1,597,1,597,1,597,3,597,8933,8,597,1,597,1,597,
	1,597,1,597,1,597,1,597,3,597,8941,8,597,1,598,1,598,1,599,1,599,1,599,
	1,599,1,599,1,599,3,599,8951,8,599,1,599,1,599,1,599,1,599,1,599,1,599,
	1,599,1,599,1,599,1,599,1,599,1,599,3,599,8965,8,599,1,599,1,599,1,600,
	1,600,1,600,1,600,1,600,1,600,3,600,8975,8,600,1,601,1,601,3,601,8979,8,
	601,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,
	602,3,602,8993,8,602,1,602,1,602,1,602,1,602,1,602,3,602,9000,8,602,1,602,
	1,602,1,602,1,602,1,602,3,602,9007,8,602,1,602,1,602,1,602,1,602,1,602,
	3,602,9014,8,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,
	1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,
	1,602,1,602,3,602,9039,8,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,
	1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,
	1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,3,602,9068,8,602,1,602,
	1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,
	1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,
	1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,
	3,602,9107,8,602,3,602,9109,8,602,1,602,1,602,1,602,1,602,1,602,1,602,1,
	602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,
	602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,3,602,9137,8,602,1,602,1,
	602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,602,1,
	602,1,602,1,602,1,602,1,602,1,602,3,602,9158,8,602,1,603,1,603,1,603,1,
	603,1,603,3,603,9165,8,603,1,604,1,604,1,604,1,604,1,604,1,604,1,604,1,
	604,1,604,1,604,1,604,3,604,9178,8,604,1,605,1,605,1,605,1,605,1,605,1,
	606,1,606,1,606,5,606,9188,8,606,10,606,12,606,9191,9,606,1,607,1,607,1,
	607,3,607,9196,8,607,1,608,1,608,1,609,1,609,1,609,1,609,1,609,3,609,9205,
	8,609,1,610,1,610,1,610,1,610,1,610,1,610,1,610,1,610,1,610,1,610,1,610,
	1,610,1,610,1,610,1,610,3,610,9222,8,610,1,611,1,611,1,611,1,612,1,612,
	1,612,1,612,1,612,1,612,1,612,3,612,9234,8,612,1,613,1,613,1,613,1,613,
	1,613,1,613,1,613,3,613,9243,8,613,1,614,1,614,1,614,3,614,9248,8,614,1,
	615,1,615,1,615,5,615,9253,8,615,10,615,12,615,9256,9,615,1,616,1,616,1,
	616,1,616,1,617,1,617,1,617,3,617,9265,8,617,1,617,3,617,9268,8,617,1,618,
	1,618,1,618,1,618,1,618,1,618,1,618,1,619,1,619,3,619,9279,8,619,1,620,
	1,620,1,620,1,620,3,620,9285,8,620,1,621,1,621,1,621,1,621,1,621,1,621,
	1,621,1,621,1,621,1,621,1,621,1,621,1,621,3,621,9300,8,621,1,622,1,622,
	1,622,1,622,1,622,1,622,3,622,9308,8,622,1,623,1,623,1,623,1,623,1,623,
	1,623,1,623,3,623,9317,8,623,1,624,1,624,1,624,1,624,1,624,1,624,1,624,
	3,624,9326,8,624,1,624,3,624,9329,8,624,1,625,1,625,1,625,3,625,9334,8,
	625,1,625,1,625,1,625,1,625,1,625,1,625,1,625,3,625,9343,8,625,1,626,1,
	626,1,626,3,626,9348,8,626,1,626,1,626,1,627,1,627,1,627,1,627,1,627,1,
	627,1,628,1,628,1,629,1,629,3,629,9362,8,629,1,630,1,630,1,631,1,631,1,
	631,1,631,1,631,1,631,3,631,9372,8,631,1,632,1,632,1,632,1,632,1,632,1,
	632,3,632,9380,8,632,1,633,1,633,1,633,1,633,1,633,1,633,1,633,1,633,1,
	633,1,633,1,633,1,633,3,633,9394,8,633,1,634,1,634,1,634,5,634,9399,8,634,
	10,634,12,634,9402,9,634,1,635,1,635,1,635,5,635,9407,8,635,10,635,12,635,
	9410,9,635,1,636,1,636,1,636,1,636,1,636,3,636,9417,8,636,1,637,1,637,1,
	637,5,637,9422,8,637,10,637,12,637,9425,9,637,1,638,1,638,1,638,3,638,9430,
	8,638,1,638,1,638,1,639,1,639,1,639,5,639,9437,8,639,10,639,12,639,9440,
	9,639,1,640,1,640,1,640,1,640,1,640,3,640,9447,8,640,1,641,1,641,1,641,
	1,641,1,641,1,641,1,641,1,641,3,641,9457,8,641,1,642,1,642,1,643,1,643,
	1,643,1,643,1,643,1,643,1,643,3,643,9468,8,643,1,644,1,644,1,644,1,644,
	1,644,3,644,9475,8,644,1,645,1,645,1,645,1,645,1,645,1,645,1,645,1,645,
	1,645,1,645,1,645,1,645,1,645,1,645,1,645,1,645,1,645,1,645,1,645,1,645,
	1,645,1,645,1,645,1,645,1,645,1,645,1,645,1,645,3,645,9505,8,645,1,646,
	1,646,1,646,1,646,1,646,1,646,1,646,3,646,9514,8,646,1,647,1,647,1,647,
	1,647,1,647,3,647,9521,8,647,1,648,1,648,1,648,1,648,1,648,1,648,1,649,
	4,649,9530,8,649,11,649,12,649,9531,1,650,1,650,1,650,1,650,1,650,1,651,
	1,651,1,651,3,651,9542,8,651,1,652,1,652,3,652,9546,8,652,1,653,1,653,3,
	653,9550,8,653,1,654,1,654,1,654,3,654,9555,8,654,1,654,1,654,1,654,1,654,
	1,654,1,654,3,654,9563,8,654,1,654,1,654,3,654,9567,8,654,1,655,1,655,3,
	655,9571,8,655,1,656,4,656,9574,8,656,11,656,12,656,9575,1,657,5,657,9579,
	8,657,10,657,12,657,9582,9,657,1,658,1,658,3,658,9586,8,658,1,659,1,659,
	1,659,5,659,9591,8,659,10,659,12,659,9594,9,659,1,660,1,660,1,660,1,660,
	1,660,3,660,9601,8,660,1,660,3,660,9604,8,660,1,661,1,661,1,661,5,661,9609,
	8,661,10,661,12,661,9612,9,661,1,662,1,662,3,662,9616,8,662,1,663,1,663,
	1,663,5,663,9621,8,663,10,663,12,663,9624,9,663,1,664,1,664,1,665,1,665,
	1,666,1,666,1,667,1,667,1,667,1,667,3,667,9636,8,667,1,668,1,668,1,668,
	1,668,1,668,1,668,1,668,1,668,1,668,1,668,1,668,1,668,1,668,3,668,9651,
	8,668,1,668,1,668,1,668,1,668,1,668,1,668,1,668,1,668,1,668,1,668,1,668,
	1,668,3,668,9665,8,668,1,668,1,668,1,668,3,668,9670,8,668,1,669,1,669,1,
	670,1,670,1,671,1,671,1,672,1,672,1,673,1,673,1,673,1,674,1,674,1,674,1,
	674,5,674,9687,8,674,10,674,12,674,9690,9,674,1,674,1,674,3,674,9694,8,
	674,1,675,1,675,1,675,3,675,9699,8,675,1,676,1,676,1,676,1,676,1,676,3,
	676,9706,8,676,1,677,1,677,1,678,1,678,1,678,3,678,9713,8,678,1,679,1,679,
	1,679,5,679,9718,8,679,10,679,12,679,9721,9,679,1,680,1,680,1,680,1,680,
	3,680,9727,8,680,1,681,1,681,1,681,1,681,3,681,9733,8,681,1,682,1,682,1,
	682,1,682,3,682,9739,8,682,1,683,1,683,1,683,1,683,1,683,1,683,3,683,9747,
	8,683,1,684,1,684,1,684,1,684,1,684,1,684,1,684,3,684,9756,8,684,1,685,
	1,685,1,686,1,686,1,687,1,687,1,687,1,687,1,687,1,687,1,687,1,687,1,687,
	1,687,1,687,1,687,1,687,1,687,1,687,1,687,1,687,1,687,1,687,1,687,1,687,
	1,687,1,687,1,687,1,687,1,687,1,687,1,687,1,687,1,687,1,687,1,687,1,687,
	1,687,1,687,1,687,1,687,1,687,1,687,1,687,1,687,1,687,1,687,1,687,1,687,
	1,687,1,687,1,687,1,687,1,687,1,687,3,687,9813,8,687,1,688,1,688,1,689,
	1,689,1,690,1,690,1,690,1,690,1,691,5,691,9824,8,691,10,691,12,691,9827,
	9,691,1,692,1,692,1,692,1,692,1,692,1,692,1,692,1,692,1,692,1,692,1,692,
	1,692,1,692,1,692,1,692,1,692,1,692,1,692,1,692,1,692,3,692,9849,8,692,
	1,693,1,693,1,694,1,694,1,694,1,694,3,694,9857,8,694,1,695,1,695,3,695,
	9861,8,695,1,696,1,696,1,696,1,696,1,696,1,696,1,696,1,697,1,697,1,697,
	3,697,9873,8,697,3,697,9875,8,697,1,698,1,698,1,699,4,699,9880,8,699,11,
	699,12,699,9881,1,700,1,700,1,700,1,700,1,701,1,701,1,701,3,701,9891,8,
	701,1,702,1,702,1,702,1,702,1,702,1,702,1,702,1,702,1,702,1,702,1,702,1,
	702,1,702,1,702,1,702,1,702,3,702,9909,8,702,1,702,1,702,1,703,1,703,1,
	703,1,703,3,703,9917,8,703,1,704,1,704,1,705,1,705,1,705,1,705,1,705,3,
	705,9926,8,705,1,706,1,706,1,706,5,706,9931,8,706,10,706,12,706,9934,9,
	706,1,707,1,707,1,707,1,708,1,708,1,709,1,709,3,709,9943,8,709,1,710,1,
	710,1,711,1,711,3,711,9949,8,711,1,712,1,712,1,713,1,713,1,713,3,713,9956,
	8,713,1,714,1,714,1,714,3,714,9961,8,714,1,715,1,715,1,715,1,715,3,715,
	9967,8,715,1,716,1,716,3,716,9971,8,716,1,717,1,717,1,718,5,718,9976,8,
	718,10,718,12,718,9979,9,718,1,719,1,719,1,719,1,719,1,719,1,719,1,719,
	1,719,1,719,1,719,1,719,1,719,1,719,1,719,1,719,1,719,1,719,1,719,1,719,
	1,719,1,719,1,719,1,719,1,719,1,719,1,719,1,719,3,719,10008,8,719,1,720,
	1,720,1,720,1,720,1,721,1,721,1,721,1,721,1,721,1,721,1,721,1,721,1,721,
	1,721,1,721,1,721,1,721,1,721,3,721,10028,8,721,1,722,1,722,3,722,10032,
	8,722,1,723,1,723,1,723,1,723,1,723,1,724,1,724,1,724,1,724,1,724,1,724,
	1,725,1,725,1,725,3,725,10048,8,725,1,726,1,726,1,726,5,726,10053,8,726,
	10,726,12,726,10056,9,726,1,727,1,727,1,727,1,727,1,728,1,728,1,729,1,729,
	1,730,1,730,3,730,10068,8,730,1,730,1,730,1,730,1,730,5,730,10074,8,730,
	10,730,12,730,10077,9,730,1,731,1,731,1,731,1,731,1,731,1,731,1,731,1,731,
	1,731,1,731,1,732,1,732,1,732,1,732,1,732,5,732,10094,8,732,10,732,12,732,
	10097,9,732,1,733,1,733,1,733,3,733,10102,8,733,1,734,1,734,1,734,1,734,
	1,734,1,734,1,734,1,734,1,735,1,735,3,735,10114,8,735,1,736,4,736,10117,
	8,736,11,736,12,736,10118,1,737,1,737,1,737,1,737,1,737,1,738,1,738,1,738,
	3,738,10129,8,738,1,739,1,739,1,739,1,740,1,740,1,740,1,740,1,740,1,741,
	1,741,1,741,1,741,1,741,1,742,1,742,1,742,1,742,1,742,1,742,1,742,1,742,
	1,742,1,742,1,742,1,742,1,742,1,742,1,742,1,742,1,742,3,742,10161,8,742,
	1,743,1,743,1,743,3,743,10166,8,743,1,744,1,744,1,744,1,744,1,744,5,744,
	10173,8,744,10,744,12,744,10176,9,744,1,744,1,744,3,744,10180,8,744,1,745,
	1,745,3,745,10184,8,745,1,746,1,746,1,746,3,746,10189,8,746,1,747,1,747,
	1,748,1,748,1,748,1,748,1,748,1,748,1,748,1,748,1,748,1,749,1,749,1,749,
	3,749,10205,8,749,1,750,1,750,1,750,1,750,1,750,1,751,1,751,1,752,1,752,
	1,752,1,752,1,752,1,752,1,752,1,752,1,752,3,752,10223,8,752,1,752,3,752,
	10226,8,752,1,752,1,752,1,753,1,753,3,753,10232,8,753,1,754,1,754,1,754,
	1,754,1,754,1,754,1,754,1,754,1,754,1,754,1,754,1,754,1,754,1,754,1,754,
	1,754,1,754,1,754,1,754,1,754,1,754,1,754,1,754,1,754,1,754,1,754,3,754,
	10260,8,754,1,755,1,755,1,755,1,755,1,755,1,755,1,755,1,755,3,755,10270,
	8,755,1,756,1,756,1,756,4,756,10275,8,756,11,756,12,756,10276,3,756,10279,
	8,756,1,757,1,757,1,757,3,757,10284,8,757,1,758,1,758,1,758,1,758,1,759,
	1,759,1,759,5,759,10293,8,759,10,759,12,759,10296,9,759,1,760,1,760,1,760,
	1,760,1,760,1,761,1,761,1,761,3,761,10306,8,761,1,762,1,762,1,762,1,762,
	1,762,1,762,1,762,1,763,1,763,1,763,1,764,1,764,1,764,1,764,1,764,1,764,
	1,764,1,764,1,764,3,764,10327,8,764,1,764,1,764,1,765,1,765,1,765,3,765,
	10334,8,765,1,766,1,766,1,766,5,766,10339,8,766,10,766,12,766,10342,9,766,
	1,767,1,767,1,767,3,767,10347,8,767,1,767,3,767,10350,8,767,1,768,1,768,
	1,768,1,768,1,768,1,768,1,768,1,768,1,768,3,768,10361,8,768,1,768,1,768,
	1,768,1,768,1,768,3,768,10368,8,768,3,768,10370,8,768,1,768,1,768,1,769,
	1,769,1,769,1,769,1,769,3,769,10379,8,769,1,770,1,770,1,770,5,770,10384,
	8,770,10,770,12,770,10387,9,770,1,771,1,771,1,771,3,771,10392,8,771,1,772,
	1,772,1,772,1,772,3,772,10398,8,772,1,773,1,773,3,773,10402,8,773,1,774,
	1,774,1,774,1,774,1,774,1,774,1,774,1,774,1,775,1,775,1,776,1,776,1,776,
	3,776,10417,8,776,1,777,1,777,1,777,1,777,1,777,1,777,1,777,1,777,1,777,
	1,777,1,777,1,777,1,777,1,777,1,777,3,777,10434,8,777,3,777,10436,8,777,
	1,778,1,778,1,778,1,778,1,778,1,779,1,779,1,779,1,779,1,780,1,780,1,780,
	1,781,1,781,1,781,1,781,1,782,1,782,1,782,1,782,1,783,1,783,3,783,10460,
	8,783,1,783,1,783,3,783,10464,8,783,1,784,1,784,1,784,1,784,1,784,1,784,
	1,784,1,784,1,784,3,784,10475,8,784,1,784,3,784,10478,8,784,1,785,1,785,
	3,785,10482,8,785,1,786,1,786,1,786,3,786,10487,8,786,1,787,4,787,10490,
	8,787,11,787,12,787,10491,1,788,1,788,1,788,1,788,1,788,1,789,1,789,1,789,
	5,789,10502,8,789,10,789,12,789,10505,9,789,1,790,1,790,1,790,3,790,10510,
	8,790,1,791,1,791,3,791,10514,8,791,1,792,1,792,3,792,10518,8,792,1,793,
	1,793,3,793,10522,8,793,1,794,1,794,1,794,3,794,10527,8,794,1,795,1,795,
	3,795,10531,8,795,1,796,1,796,1,797,1,797,1,797,1,797,1,797,1,797,1,797,
	1,797,1,798,1,798,1,799,1,799,1,800,1,800,1,801,1,801,1,802,1,802,1,802,
	1,803,1,803,1,803,1,803,1,803,3,803,10559,8,803,1,803,0,1,1192,804,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,722,724,726,728,730,732,734,736,738,740,742,744,746,748,
	750,752,754,756,758,760,762,764,766,768,770,772,774,776,778,780,782,784,
	786,788,790,792,794,796,798,800,802,804,806,808,810,812,814,816,818,820,
	822,824,826,828,830,832,834,836,838,840,842,844,846,848,850,852,854,856,
	858,860,862,864,866,868,870,872,874,876,878,880,882,884,886,888,890,892,
	894,896,898,900,902,904,906,908,910,912,914,916,918,920,922,924,926,928,
	930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962,964,
	966,968,970,972,974,976,978,980,982,984,986,988,990,992,994,996,998,1000,
	1002,1004,1006,1008,1010,1012,1014,1016,1018,1020,1022,1024,1026,1028,1030,
	1032,1034,1036,1038,1040,1042,1044,1046,1048,1050,1052,1054,1056,1058,1060,
	1062,1064,1066,1068,1070,1072,1074,1076,1078,1080,1082,1084,1086,1088,1090,
	1092,1094,1096,1098,1100,1102,1104,1106,1108,1110,1112,1114,1116,1118,1120,
	1122,1124,1126,1128,1130,1132,1134,1136,1138,1140,1142,1144,1146,1148,1150,
	1152,1154,1156,1158,1160,1162,1164,1166,1168,1170,1172,1174,1176,1178,1180,
	1182,1184,1186,1188,1190,1192,1194,1196,1198,1200,1202,1204,1206,1208,1210,
	1212,1214,1216,1218,1220,1222,1224,1226,1228,1230,1232,1234,1236,1238,1240,
	1242,1244,1246,1248,1250,1252,1254,1256,1258,1260,1262,1264,1266,1268,1270,
	1272,1274,1276,1278,1280,1282,1284,1286,1288,1290,1292,1294,1296,1298,1300,
	1302,1304,1306,1308,1310,1312,1314,1316,1318,1320,1322,1324,1326,1328,1330,
	1332,1334,1336,1338,1340,1342,1344,1346,1348,1350,1352,1354,1356,1358,1360,
	1362,1364,1366,1368,1370,1372,1374,1376,1378,1380,1382,1384,1386,1388,1390,
	1392,1394,1396,1398,1400,1402,1404,1406,1408,1410,1412,1414,1416,1418,1420,
	1422,1424,1426,1428,1430,1432,1434,1436,1438,1440,1442,1444,1446,1448,1450,
	1452,1454,1456,1458,1460,1462,1464,1466,1468,1470,1472,1474,1476,1478,1480,
	1482,1484,1486,1488,1490,1492,1494,1496,1498,1500,1502,1504,1506,1508,1510,
	1512,1514,1516,1518,1520,1522,1524,1526,1528,1530,1532,1534,1536,1538,1540,
	1542,1544,1546,1548,1550,1552,1554,1556,1558,1560,1562,1564,1566,1568,1570,
	1572,1574,1576,1578,1580,1582,1584,1586,1588,1590,1592,1594,1596,1598,1600,
	1602,1604,1606,0,65,2,0,195,195,355,355,2,0,66,66,309,309,2,0,99,99,309,
	309,3,0,66,66,99,99,309,309,2,0,133,133,191,191,2,0,245,245,323,323,2,0,
	10,10,94,94,2,0,162,162,354,354,2,0,180,180,221,221,5,0,30,30,279,279,320,
	320,343,343,345,345,2,0,64,64,94,94,2,0,343,343,345,345,2,0,200,200,224,
	224,9,0,30,30,160,160,165,165,179,179,219,219,227,227,333,333,336,336,429,
	429,3,0,113,113,275,275,327,327,2,0,53,53,78,78,3,0,173,173,251,251,253,
	253,5,0,30,30,88,88,182,182,232,232,360,360,2,0,92,92,226,226,1,0,439,440,
	2,0,92,92,405,405,2,0,332,332,405,405,2,0,211,211,287,287,3,0,312,312,348,
	348,436,436,2,0,64,64,68,68,5,0,212,212,320,320,341,341,352,352,446,447,
	2,0,10,10,53,53,3,0,211,211,287,287,433,433,3,0,175,175,314,314,340,340,
	4,0,88,88,182,182,232,232,360,360,2,0,151,151,245,245,2,0,304,304,324,324,
	1,0,31,32,2,0,99,99,340,340,2,0,201,201,325,325,2,0,213,213,245,245,2,0,
	311,311,405,405,2,0,207,207,259,259,4,0,113,113,115,115,119,119,126,126,
	2,0,351,351,468,468,2,0,382,383,397,397,1,0,382,383,1,0,409,410,1,0,18,
	19,2,0,117,117,122,122,5,0,10,10,16,17,21,21,23,23,25,25,1,0,12,13,3,0,
	9,9,14,14,27,27,2,0,30,30,56,56,3,0,39,39,73,73,95,95,2,0,166,166,188,188,
	2,0,295,295,441,441,2,0,208,208,280,280,3,0,30,30,34,34,90,90,6,0,9,10,
	12,17,21,21,23,23,25,25,27,27,2,0,20,20,22,22,1,0,474,477,8,0,124,124,129,
	377,424,443,446,460,462,462,464,464,466,466,469,479,3,0,106,123,125,128,
	463,463,4,0,30,52,54,70,72,105,445,445,2,0,62,62,116,116,2,0,10,10,20,20,
	2,0,167,167,498,498,2,0,144,144,210,210,36,0,33,33,35,35,43,45,53,53,57,
	57,61,61,92,92,116,116,123,123,130,130,144,144,153,153,157,157,161,161,
	167,167,172,172,207,207,210,210,232,232,240,240,256,256,259,260,270,270,
	284,284,298,298,304,304,310,310,314,315,324,324,351,351,424,425,468,468,
	481,493,495,495,497,509,511,511,11397,0,1608,1,0,0,0,2,1611,1,0,0,0,4,1613,
	1,0,0,0,6,1621,1,0,0,0,8,1748,1,0,0,0,10,1750,1,0,0,0,12,1754,1,0,0,0,14,
	1757,1,0,0,0,16,1765,1,0,0,0,18,1770,1,0,0,0,20,1776,1,0,0,0,22,1797,1,
	0,0,0,24,1809,1,0,0,0,26,1811,1,0,0,0,28,1817,1,0,0,0,30,1827,1,0,0,0,32,
	1829,1,0,0,0,34,1838,1,0,0,0,36,1846,1,0,0,0,38,1852,1,0,0,0,40,1859,1,
	0,0,0,42,1861,1,0,0,0,44,1879,1,0,0,0,46,1884,1,0,0,0,48,1893,1,0,0,0,50,
	1895,1,0,0,0,52,1909,1,0,0,0,54,1911,1,0,0,0,56,1940,1,0,0,0,58,1942,1,
	0,0,0,60,1950,1,0,0,0,62,1960,1,0,0,0,64,1967,1,0,0,0,66,1973,1,0,0,0,68,
	1990,1,0,0,0,70,1995,1,0,0,0,72,1999,1,0,0,0,74,2001,1,0,0,0,76,2012,1,
	0,0,0,78,2016,1,0,0,0,80,2021,1,0,0,0,82,2026,1,0,0,0,84,2028,1,0,0,0,86,
	2040,1,0,0,0,88,2047,1,0,0,0,90,2049,1,0,0,0,92,2051,1,0,0,0,94,2053,1,
	0,0,0,96,2165,1,0,0,0,98,2167,1,0,0,0,100,2183,1,0,0,0,102,2185,1,0,0,0,
	104,2441,1,0,0,0,106,2448,1,0,0,0,108,2453,1,0,0,0,110,2458,1,0,0,0,112,
	2463,1,0,0,0,114,2471,1,0,0,0,116,2473,1,0,0,0,118,2480,1,0,0,0,120,2482,
	1,0,0,0,122,2490,1,0,0,0,124,2502,1,0,0,0,126,2518,1,0,0,0,128,2546,1,0,
	0,0,130,2548,1,0,0,0,132,2551,1,0,0,0,134,2559,1,0,0,0,136,2564,1,0,0,0,
	138,2595,1,0,0,0,140,2597,1,0,0,0,142,2624,1,0,0,0,144,2626,1,0,0,0,146,
	2630,1,0,0,0,148,2635,1,0,0,0,150,2642,1,0,0,0,152,2647,1,0,0,0,154,2685,
	1,0,0,0,156,2689,1,0,0,0,158,2696,1,0,0,0,160,2700,1,0,0,0,162,2702,1,0,
	0,0,164,2710,1,0,0,0,166,2721,1,0,0,0,168,2723,1,0,0,0,170,2731,1,0,0,0,
	172,2733,1,0,0,0,174,2782,1,0,0,0,176,2786,1,0,0,0,178,2793,1,0,0,0,180,
	2795,1,0,0,0,182,2803,1,0,0,0,184,2814,1,0,0,0,186,2818,1,0,0,0,188,2820,
	1,0,0,0,190,2825,1,0,0,0,192,2835,1,0,0,0,194,2846,1,0,0,0,196,2886,1,0,
	0,0,198,2891,1,0,0,0,200,2898,1,0,0,0,202,2900,1,0,0,0,204,2908,1,0,0,0,
	206,2911,1,0,0,0,208,2918,1,0,0,0,210,2978,1,0,0,0,212,2983,1,0,0,0,214,
	2990,1,0,0,0,216,2992,1,0,0,0,218,3000,1,0,0,0,220,3008,1,0,0,0,222,3013,
	1,0,0,0,224,3015,1,0,0,0,226,3023,1,0,0,0,228,3039,1,0,0,0,230,3050,1,0,
	0,0,232,3052,1,0,0,0,234,3056,1,0,0,0,236,3066,1,0,0,0,238,3074,1,0,0,0,
	240,3078,1,0,0,0,242,3080,1,0,0,0,244,3087,1,0,0,0,246,3109,1,0,0,0,248,
	3114,1,0,0,0,250,3121,1,0,0,0,252,3133,1,0,0,0,254,3138,1,0,0,0,256,3145,
	1,0,0,0,258,3147,1,0,0,0,260,3151,1,0,0,0,262,3165,1,0,0,0,264,3176,1,0,
	0,0,266,3189,1,0,0,0,268,3203,1,0,0,0,270,3205,1,0,0,0,272,3219,1,0,0,0,
	274,3227,1,0,0,0,276,3229,1,0,0,0,278,3236,1,0,0,0,280,3247,1,0,0,0,282,
	3258,1,0,0,0,284,3265,1,0,0,0,286,3268,1,0,0,0,288,3302,1,0,0,0,290,3306,
	1,0,0,0,292,3314,1,0,0,0,294,3316,1,0,0,0,296,3324,1,0,0,0,298,3339,1,0,
	0,0,300,3341,1,0,0,0,302,3348,1,0,0,0,304,3354,1,0,0,0,306,3358,1,0,0,0,
	308,3362,1,0,0,0,310,3364,1,0,0,0,312,3375,1,0,0,0,314,3377,1,0,0,0,316,
	3385,1,0,0,0,318,3399,1,0,0,0,320,3409,1,0,0,0,322,3411,1,0,0,0,324,3420,
	1,0,0,0,326,3423,1,0,0,0,328,3530,1,0,0,0,330,3532,1,0,0,0,332,3548,1,0,
	0,0,334,3551,1,0,0,0,336,3557,1,0,0,0,338,3574,1,0,0,0,340,3582,1,0,0,0,
	342,3584,1,0,0,0,344,3592,1,0,0,0,346,3597,1,0,0,0,348,3612,1,0,0,0,350,
	3614,1,0,0,0,352,3617,1,0,0,0,354,3619,1,0,0,0,356,3646,1,0,0,0,358,3651,
	1,0,0,0,360,3653,1,0,0,0,362,3660,1,0,0,0,364,3662,1,0,0,0,366,3728,1,0,
	0,0,368,3730,1,0,0,0,370,3745,1,0,0,0,372,3753,1,0,0,0,374,3776,1,0,0,0,
	376,3780,1,0,0,0,378,3800,1,0,0,0,380,3802,1,0,0,0,382,3811,1,0,0,0,384,
	3822,1,0,0,0,386,3837,1,0,0,0,388,3846,1,0,0,0,390,3851,1,0,0,0,392,3856,
	1,0,0,0,394,3861,1,0,0,0,396,3866,1,0,0,0,398,3868,1,0,0,0,400,3870,1,0,
	0,0,402,3879,1,0,0,0,404,3919,1,0,0,0,406,3925,1,0,0,0,408,3927,1,0,0,0,
	410,3942,1,0,0,0,412,3947,1,0,0,0,414,3950,1,0,0,0,416,3954,1,0,0,0,418,
	3959,1,0,0,0,420,3961,1,0,0,0,422,3963,1,0,0,0,424,3970,1,0,0,0,426,3974,
	1,0,0,0,428,3976,1,0,0,0,430,3984,1,0,0,0,432,3986,1,0,0,0,434,3990,1,0,
	0,0,436,4003,1,0,0,0,438,4008,1,0,0,0,440,4013,1,0,0,0,442,4027,1,0,0,0,
	444,4055,1,0,0,0,446,4057,1,0,0,0,448,4065,1,0,0,0,450,4071,1,0,0,0,452,
	4079,1,0,0,0,454,4091,1,0,0,0,456,4093,1,0,0,0,458,4208,1,0,0,0,460,4210,
	1,0,0,0,462,4214,1,0,0,0,464,4222,1,0,0,0,466,4233,1,0,0,0,468,4235,1,0,
	0,0,470,4239,1,0,0,0,472,4247,1,0,0,0,474,4253,1,0,0,0,476,4255,1,0,0,0,
	478,4300,1,0,0,0,480,4306,1,0,0,0,482,4308,1,0,0,0,484,4322,1,0,0,0,486,
	4355,1,0,0,0,488,4359,1,0,0,0,490,4364,1,0,0,0,492,4373,1,0,0,0,494,4377,
	1,0,0,0,496,4379,1,0,0,0,498,4404,1,0,0,0,500,4406,1,0,0,0,502,4426,1,0,
	0,0,504,4446,1,0,0,0,506,4466,1,0,0,0,508,4468,1,0,0,0,510,4474,1,0,0,0,
	512,4559,1,0,0,0,514,4584,1,0,0,0,516,4591,1,0,0,0,518,4607,1,0,0,0,520,
	4609,1,0,0,0,522,4611,1,0,0,0,524,4619,1,0,0,0,526,4625,1,0,0,0,528,4629,
	1,0,0,0,530,4637,1,0,0,0,532,4648,1,0,0,0,534,4797,1,0,0,0,536,4801,1,0,
	0,0,538,4894,1,0,0,0,540,4899,1,0,0,0,542,4903,1,0,0,0,544,4909,1,0,0,0,
	546,4977,1,0,0,0,548,4979,1,0,0,0,550,4983,1,0,0,0,552,4985,1,0,0,0,554,
	5012,1,0,0,0,556,5029,1,0,0,0,558,5031,1,0,0,0,560,5048,1,0,0,0,562,5108,
	1,0,0,0,564,5110,1,0,0,0,566,5121,1,0,0,0,568,5127,1,0,0,0,570,5129,1,0,
	0,0,572,5153,1,0,0,0,574,5159,1,0,0,0,576,5165,1,0,0,0,578,5167,1,0,0,0,
	580,5176,1,0,0,0,582,5188,1,0,0,0,584,5217,1,0,0,0,586,5219,1,0,0,0,588,
	5256,1,0,0,0,590,5260,1,0,0,0,592,5264,1,0,0,0,594,5268,1,0,0,0,596,5273,
	1,0,0,0,598,5275,1,0,0,0,600,5294,1,0,0,0,602,5307,1,0,0,0,604,5315,1,0,
	0,0,606,5317,1,0,0,0,608,5328,1,0,0,0,610,5332,1,0,0,0,612,5337,1,0,0,0,
	614,5344,1,0,0,0,616,5346,1,0,0,0,618,5367,1,0,0,0,620,5369,1,0,0,0,622,
	5375,1,0,0,0,624,5383,1,0,0,0,626,5399,1,0,0,0,628,5401,1,0,0,0,630,5407,
	1,0,0,0,632,5428,1,0,0,0,634,5437,1,0,0,0,636,5439,1,0,0,0,638,5441,1,0,
	0,0,640,5455,1,0,0,0,642,5457,1,0,0,0,644,5462,1,0,0,0,646,5464,1,0,0,0,
	648,5479,1,0,0,0,650,5487,1,0,0,0,652,5490,1,0,0,0,654,5499,1,0,0,0,656,
	5540,1,0,0,0,658,5550,1,0,0,0,660,5557,1,0,0,0,662,5559,1,0,0,0,664,5574,
	1,0,0,0,666,5576,1,0,0,0,668,5579,1,0,0,0,670,5587,1,0,0,0,672,5594,1,0,
	0,0,674,5600,1,0,0,0,676,5638,1,0,0,0,678,5652,1,0,0,0,680,5666,1,0,0,0,
	682,5690,1,0,0,0,684,5697,1,0,0,0,686,5702,1,0,0,0,688,5710,1,0,0,0,690,
	5713,1,0,0,0,692,5717,1,0,0,0,694,5724,1,0,0,0,696,5760,1,0,0,0,698,5767,
	1,0,0,0,700,5769,1,0,0,0,702,5782,1,0,0,0,704,5784,1,0,0,0,706,5829,1,0,
	0,0,708,5831,1,0,0,0,710,5866,1,0,0,0,712,5868,1,0,0,0,714,5870,1,0,0,0,
	716,5872,1,0,0,0,718,5880,1,0,0,0,720,5894,1,0,0,0,722,6364,1,0,0,0,724,
	6368,1,0,0,0,726,6373,1,0,0,0,728,6432,1,0,0,0,730,6436,1,0,0,0,732,6655,
	1,0,0,0,734,6657,1,0,0,0,736,6665,1,0,0,0,738,6681,1,0,0,0,740,6688,1,0,
	0,0,742,6690,1,0,0,0,744,6881,1,0,0,0,746,6883,1,0,0,0,748,6891,1,0,0,0,
	750,6899,1,0,0,0,752,6928,1,0,0,0,754,6930,1,0,0,0,756,6939,1,0,0,0,758,
	6947,1,0,0,0,760,6986,1,0,0,0,762,7000,1,0,0,0,764,7002,1,0,0,0,766,7022,
	1,0,0,0,768,7024,1,0,0,0,770,7037,1,0,0,0,772,7041,1,0,0,0,774,7043,1,0,
	0,0,776,7048,1,0,0,0,778,7050,1,0,0,0,780,7057,1,0,0,0,782,7059,1,0,0,0,
	784,7066,1,0,0,0,786,7118,1,0,0,0,788,7123,1,0,0,0,790,7135,1,0,0,0,792,
	7137,1,0,0,0,794,7149,1,0,0,0,796,7157,1,0,0,0,798,7159,1,0,0,0,800,7191,
	1,0,0,0,802,7193,1,0,0,0,804,7196,1,0,0,0,806,7204,1,0,0,0,808,7207,1,0,
	0,0,810,7211,1,0,0,0,812,7226,1,0,0,0,814,7230,1,0,0,0,816,7232,1,0,0,0,
	818,7243,1,0,0,0,820,7248,1,0,0,0,822,7262,1,0,0,0,824,7270,1,0,0,0,826,
	7272,1,0,0,0,828,7278,1,0,0,0,830,7283,1,0,0,0,832,7290,1,0,0,0,834,7318,
	1,0,0,0,836,7320,1,0,0,0,838,7399,1,0,0,0,840,7401,1,0,0,0,842,7403,1,0,
	0,0,844,7427,1,0,0,0,846,7432,1,0,0,0,848,7447,1,0,0,0,850,7459,1,0,0,0,
	852,7461,1,0,0,0,854,7469,1,0,0,0,856,7471,1,0,0,0,858,7476,1,0,0,0,860,
	7481,1,0,0,0,862,7485,1,0,0,0,864,7489,1,0,0,0,866,7493,1,0,0,0,868,7497,
	1,0,0,0,870,7504,1,0,0,0,872,7506,1,0,0,0,874,7509,1,0,0,0,876,7519,1,0,
	0,0,878,7537,1,0,0,0,880,7548,1,0,0,0,882,7550,1,0,0,0,884,7558,1,0,0,0,
	886,7563,1,0,0,0,888,7568,1,0,0,0,890,7570,1,0,0,0,892,7581,1,0,0,0,894,
	7587,1,0,0,0,896,7616,1,0,0,0,898,7623,1,0,0,0,900,7635,1,0,0,0,902,7637,
	1,0,0,0,904,7645,1,0,0,0,906,7669,1,0,0,0,908,7671,1,0,0,0,910,7673,1,0,
	0,0,912,7681,1,0,0,0,914,7697,1,0,0,0,916,7708,1,0,0,0,918,7713,1,0,0,0,
	920,7715,1,0,0,0,922,7726,1,0,0,0,924,7728,1,0,0,0,926,7739,1,0,0,0,928,
	7753,1,0,0,0,930,7757,1,0,0,0,932,7763,1,0,0,0,934,7765,1,0,0,0,936,7774,
	1,0,0,0,938,7792,1,0,0,0,940,7794,1,0,0,0,942,7797,1,0,0,0,944,7805,1,0,
	0,0,946,7813,1,0,0,0,948,7822,1,0,0,0,950,7830,1,0,0,0,952,7834,1,0,0,0,
	954,7844,1,0,0,0,956,7867,1,0,0,0,958,7871,1,0,0,0,960,7899,1,0,0,0,962,
	7914,1,0,0,0,964,7916,1,0,0,0,966,7919,1,0,0,0,968,7925,1,0,0,0,970,7933,
	1,0,0,0,972,7945,1,0,0,0,974,7949,1,0,0,0,976,7959,1,0,0,0,978,7963,1,0,
	0,0,980,7979,1,0,0,0,982,7983,1,0,0,0,984,7988,1,0,0,0,986,7990,1,0,0,0,
	988,8000,1,0,0,0,990,8004,1,0,0,0,992,8006,1,0,0,0,994,8010,1,0,0,0,996,
	8018,1,0,0,0,998,8034,1,0,0,0,1000,8038,1,0,0,0,1002,8063,1,0,0,0,1004,
	8065,1,0,0,0,1006,8074,1,0,0,0,1008,8076,1,0,0,0,1010,8083,1,0,0,0,1012,
	8087,1,0,0,0,1014,8089,1,0,0,0,1016,8091,1,0,0,0,1018,8097,1,0,0,0,1020,
	8099,1,0,0,0,1022,8112,1,0,0,0,1024,8114,1,0,0,0,1026,8117,1,0,0,0,1028,
	8122,1,0,0,0,1030,8127,1,0,0,0,1032,8136,1,0,0,0,1034,8142,1,0,0,0,1036,
	8146,1,0,0,0,1038,8149,1,0,0,0,1040,8153,1,0,0,0,1042,8157,1,0,0,0,1044,
	8172,1,0,0,0,1046,8174,1,0,0,0,1048,8191,1,0,0,0,1050,8193,1,0,0,0,1052,
	8250,1,0,0,0,1054,8274,1,0,0,0,1056,8285,1,0,0,0,1058,8300,1,0,0,0,1060,
	8302,1,0,0,0,1062,8313,1,0,0,0,1064,8327,1,0,0,0,1066,8329,1,0,0,0,1068,
	8337,1,0,0,0,1070,8344,1,0,0,0,1072,8357,1,0,0,0,1074,8369,1,0,0,0,1076,
	8371,1,0,0,0,1078,8374,1,0,0,0,1080,8388,1,0,0,0,1082,8393,1,0,0,0,1084,
	8398,1,0,0,0,1086,8408,1,0,0,0,1088,8412,1,0,0,0,1090,8414,1,0,0,0,1092,
	8422,1,0,0,0,1094,8426,1,0,0,0,1096,8447,1,0,0,0,1098,8455,1,0,0,0,1100,
	8465,1,0,0,0,1102,8477,1,0,0,0,1104,8479,1,0,0,0,1106,8493,1,0,0,0,1108,
	8513,1,0,0,0,1110,8522,1,0,0,0,1112,8538,1,0,0,0,1114,8544,1,0,0,0,1116,
	8546,1,0,0,0,1118,8557,1,0,0,0,1120,8575,1,0,0,0,1122,8582,1,0,0,0,1124,
	8586,1,0,0,0,1126,8590,1,0,0,0,1128,8592,1,0,0,0,1130,8598,1,0,0,0,1132,
	8601,1,0,0,0,1134,8608,1,0,0,0,1136,8621,1,0,0,0,1138,8625,1,0,0,0,1140,
	8627,1,0,0,0,1142,8636,1,0,0,0,1144,8645,1,0,0,0,1146,8673,1,0,0,0,1148,
	8675,1,0,0,0,1150,8685,1,0,0,0,1152,8687,1,0,0,0,1154,8689,1,0,0,0,1156,
	8693,1,0,0,0,1158,8701,1,0,0,0,1160,8709,1,0,0,0,1162,8717,1,0,0,0,1164,
	8726,1,0,0,0,1166,8730,1,0,0,0,1168,8734,1,0,0,0,1170,8760,1,0,0,0,1172,
	8774,1,0,0,0,1174,8793,1,0,0,0,1176,8803,1,0,0,0,1178,8807,1,0,0,0,1180,
	8815,1,0,0,0,1182,8823,1,0,0,0,1184,8829,1,0,0,0,1186,8833,1,0,0,0,1188,
	8840,1,0,0,0,1190,8845,1,0,0,0,1192,8860,1,0,0,0,1194,8940,1,0,0,0,1196,
	8942,1,0,0,0,1198,8944,1,0,0,0,1200,8974,1,0,0,0,1202,8978,1,0,0,0,1204,
	9157,1,0,0,0,1206,9164,1,0,0,0,1208,9177,1,0,0,0,1210,9179,1,0,0,0,1212,
	9184,1,0,0,0,1214,9192,1,0,0,0,1216,9197,1,0,0,0,1218,9204,1,0,0,0,1220,
	9221,1,0,0,0,1222,9223,1,0,0,0,1224,9233,1,0,0,0,1226,9242,1,0,0,0,1228,
	9247,1,0,0,0,1230,9249,1,0,0,0,1232,9257,1,0,0,0,1234,9267,1,0,0,0,1236,
	9269,1,0,0,0,1238,9278,1,0,0,0,1240,9284,1,0,0,0,1242,9299,1,0,0,0,1244,
	9307,1,0,0,0,1246,9316,1,0,0,0,1248,9328,1,0,0,0,1250,9342,1,0,0,0,1252,
	9344,1,0,0,0,1254,9351,1,0,0,0,1256,9357,1,0,0,0,1258,9361,1,0,0,0,1260,
	9363,1,0,0,0,1262,9371,1,0,0,0,1264,9379,1,0,0,0,1266,9393,1,0,0,0,1268,
	9395,1,0,0,0,1270,9403,1,0,0,0,1272,9416,1,0,0,0,1274,9418,1,0,0,0,1276,
	9426,1,0,0,0,1278,9433,1,0,0,0,1280,9446,1,0,0,0,1282,9456,1,0,0,0,1284,
	9458,1,0,0,0,1286,9460,1,0,0,0,1288,9474,1,0,0,0,1290,9504,1,0,0,0,1292,
	9513,1,0,0,0,1294,9520,1,0,0,0,1296,9522,1,0,0,0,1298,9529,1,0,0,0,1300,
	9533,1,0,0,0,1302,9541,1,0,0,0,1304,9545,1,0,0,0,1306,9547,1,0,0,0,1308,
	9566,1,0,0,0,1310,9570,1,0,0,0,1312,9573,1,0,0,0,1314,9580,1,0,0,0,1316,
	9585,1,0,0,0,1318,9587,1,0,0,0,1320,9603,1,0,0,0,1322,9605,1,0,0,0,1324,
	9613,1,0,0,0,1326,9617,1,0,0,0,1328,9625,1,0,0,0,1330,9627,1,0,0,0,1332,
	9629,1,0,0,0,1334,9635,1,0,0,0,1336,9669,1,0,0,0,1338,9671,1,0,0,0,1340,
	9673,1,0,0,0,1342,9675,1,0,0,0,1344,9677,1,0,0,0,1346,9679,1,0,0,0,1348,
	9693,1,0,0,0,1350,9698,1,0,0,0,1352,9705,1,0,0,0,1354,9707,1,0,0,0,1356,
	9712,1,0,0,0,1358,9714,1,0,0,0,1360,9726,1,0,0,0,1362,9732,1,0,0,0,1364,
	9738,1,0,0,0,1366,9746,1,0,0,0,1368,9755,1,0,0,0,1370,9757,1,0,0,0,1372,
	9759,1,0,0,0,1374,9812,1,0,0,0,1376,9814,1,0,0,0,1378,9816,1,0,0,0,1380,
	9818,1,0,0,0,1382,9825,1,0,0,0,1384,9848,1,0,0,0,1386,9850,1,0,0,0,1388,
	9856,1,0,0,0,1390,9860,1,0,0,0,1392,9862,1,0,0,0,1394,9869,1,0,0,0,1396,
	9876,1,0,0,0,1398,9879,1,0,0,0,1400,9883,1,0,0,0,1402,9890,1,0,0,0,1404,
	9892,1,0,0,0,1406,9916,1,0,0,0,1408,9918,1,0,0,0,1410,9925,1,0,0,0,1412,
	9927,1,0,0,0,1414,9935,1,0,0,0,1416,9938,1,0,0,0,1418,9942,1,0,0,0,1420,
	9944,1,0,0,0,1422,9948,1,0,0,0,1424,9950,1,0,0,0,1426,9955,1,0,0,0,1428,
	9960,1,0,0,0,1430,9966,1,0,0,0,1432,9970,1,0,0,0,1434,9972,1,0,0,0,1436,
	9977,1,0,0,0,1438,10007,1,0,0,0,1440,10009,1,0,0,0,1442,10027,1,0,0,0,1444,
	10031,1,0,0,0,1446,10033,1,0,0,0,1448,10038,1,0,0,0,1450,10047,1,0,0,0,
	1452,10049,1,0,0,0,1454,10057,1,0,0,0,1456,10061,1,0,0,0,1458,10063,1,0,
	0,0,1460,10067,1,0,0,0,1462,10078,1,0,0,0,1464,10095,1,0,0,0,1466,10101,
	1,0,0,0,1468,10103,1,0,0,0,1470,10113,1,0,0,0,1472,10116,1,0,0,0,1474,10120,
	1,0,0,0,1476,10128,1,0,0,0,1478,10130,1,0,0,0,1480,10133,1,0,0,0,1482,10138,
	1,0,0,0,1484,10143,1,0,0,0,1486,10165,1,0,0,0,1488,10179,1,0,0,0,1490,10183,
	1,0,0,0,1492,10188,1,0,0,0,1494,10190,1,0,0,0,1496,10192,1,0,0,0,1498,10204,
	1,0,0,0,1500,10206,1,0,0,0,1502,10211,1,0,0,0,1504,10213,1,0,0,0,1506,10231,
	1,0,0,0,1508,10259,1,0,0,0,1510,10269,1,0,0,0,1512,10278,1,0,0,0,1514,10283,
	1,0,0,0,1516,10285,1,0,0,0,1518,10289,1,0,0,0,1520,10297,1,0,0,0,1522,10305,
	1,0,0,0,1524,10307,1,0,0,0,1526,10314,1,0,0,0,1528,10317,1,0,0,0,1530,10333,
	1,0,0,0,1532,10335,1,0,0,0,1534,10349,1,0,0,0,1536,10351,1,0,0,0,1538,10378,
	1,0,0,0,1540,10380,1,0,0,0,1542,10391,1,0,0,0,1544,10397,1,0,0,0,1546,10401,
	1,0,0,0,1548,10403,1,0,0,0,1550,10411,1,0,0,0,1552,10416,1,0,0,0,1554,10435,
	1,0,0,0,1556,10437,1,0,0,0,1558,10442,1,0,0,0,1560,10446,1,0,0,0,1562,10449,
	1,0,0,0,1564,10453,1,0,0,0,1566,10463,1,0,0,0,1568,10477,1,0,0,0,1570,10481,
	1,0,0,0,1572,10486,1,0,0,0,1574,10489,1,0,0,0,1576,10493,1,0,0,0,1578,10498,
	1,0,0,0,1580,10509,1,0,0,0,1582,10513,1,0,0,0,1584,10517,1,0,0,0,1586,10521,
	1,0,0,0,1588,10526,1,0,0,0,1590,10530,1,0,0,0,1592,10532,1,0,0,0,1594,10534,
	1,0,0,0,1596,10542,1,0,0,0,1598,10544,1,0,0,0,1600,10546,1,0,0,0,1602,10548,
	1,0,0,0,1604,10550,1,0,0,0,1606,10558,1,0,0,0,1608,1609,3,4,2,0,1609,1610,
	5,0,0,1,1610,1,1,0,0,0,1611,1612,3,1380,690,0,1612,3,1,0,0,0,1613,1614,
	3,6,3,0,1614,5,1,0,0,0,1615,1617,3,8,4,0,1616,1618,5,7,0,0,1617,1616,1,
	0,0,0,1617,1618,1,0,0,0,1618,1620,1,0,0,0,1619,1615,1,0,0,0,1620,1623,1,
	0,0,0,1621,1619,1,0,0,0,1621,1622,1,0,0,0,1622,7,1,0,0,0,1623,1621,1,0,
	0,0,1624,1749,3,452,226,0,1625,1749,3,826,413,0,1626,1749,3,816,408,0,1627,
	1749,3,818,409,0,1628,1749,3,578,289,0,1629,1749,3,832,416,0,1630,1749,
	3,478,239,0,1631,1749,3,322,161,0,1632,1749,3,328,164,0,1633,1749,3,338,
	169,0,1634,1749,3,364,182,0,1635,1749,3,670,335,0,1636,1749,3,38,19,0,1637,
	1749,3,728,364,0,1638,1749,3,732,366,0,1639,1749,3,744,372,0,1640,1749,
	3,734,367,0,1641,1749,3,742,371,0,1642,1749,3,384,192,0,1643,1749,3,280,
	140,0,1644,1749,3,828,414,0,1645,1749,3,96,48,0,1646,1749,3,720,360,0,1647,
	1749,3,134,67,0,1648,1749,3,752,376,0,1649,1749,3,32,16,0,1650,1749,3,28,
	14,0,1651,1749,3,760,380,0,1652,1749,3,262,131,0,1653,1749,3,838,419,0,
	1654,1749,3,836,418,0,1655,1749,3,380,190,0,1656,1749,3,850,425,0,1657,
	1749,3,12,6,0,1658,1749,3,92,46,0,1659,1749,3,140,70,0,1660,1749,3,844,
	422,0,1661,1749,3,534,267,0,1662,1749,3,86,43,0,1663,1749,3,142,71,0,1664,
	1749,3,400,200,0,1665,1749,3,264,132,0,1666,1749,3,456,228,0,1667,1749,
	3,696,348,0,1668,1749,3,842,421,0,1669,1749,3,830,415,0,1670,1749,3,316,
	158,0,1671,1749,3,330,165,0,1672,1749,3,356,178,0,1673,1749,3,366,183,0,
	1674,1749,3,616,308,0,1675,1749,3,36,18,0,1676,1749,3,270,135,0,1677,1749,
	3,482,241,0,1678,1749,3,496,248,0,1679,1749,3,746,373,0,1680,1749,3,498,
	249,0,1681,1749,3,382,191,0,1682,1749,3,296,148,0,1683,1749,3,42,21,0,1684,
	1749,3,278,139,0,1685,1749,3,172,86,0,1686,1749,3,754,377,0,1687,1749,3,
	260,130,0,1688,1749,3,310,155,0,1689,1749,3,704,352,0,1690,1749,3,404,202,
	0,1691,1749,3,444,222,0,1692,1749,3,14,7,0,1693,1749,3,26,13,0,1694,1749,
	3,374,187,0,1695,1749,3,804,402,0,1696,1749,3,900,450,0,1697,1749,3,944,
	472,0,1698,1749,3,458,229,0,1699,1749,3,920,460,0,1700,1749,3,94,47,0,1701,
	1749,3,690,345,0,1702,1749,3,700,350,0,1703,1749,3,504,252,0,1704,1749,
	3,506,253,0,1705,1749,3,508,254,0,1706,1749,3,512,256,0,1707,1749,3,762,
	381,0,1708,1749,3,314,157,0,1709,1749,3,708,354,0,1710,1749,3,34,17,0,1711,
	1749,3,378,189,0,1712,1749,3,820,410,0,1713,1749,3,896,448,0,1714,1749,
	3,878,439,0,1715,1749,3,544,272,0,1716,1749,3,552,276,0,1717,1749,3,570,
	285,0,1718,1749,3,368,184,0,1719,1749,3,588,294,0,1720,1749,3,902,451,0,
	1721,1749,3,782,391,0,1722,1749,3,276,138,0,1723,1749,3,802,401,0,1724,
	1749,3,924,462,0,1725,1749,3,778,389,0,1726,1749,3,890,445,0,1727,1749,
	3,510,255,0,1728,1749,3,710,355,0,1729,1749,3,678,339,0,1730,1749,3,676,
	338,0,1731,1749,3,680,340,0,1732,1749,3,722,361,0,1733,1749,3,554,277,0,
	1734,1749,3,572,286,0,1735,1749,3,764,382,0,1736,1749,3,538,269,0,1737,
	1749,3,952,476,0,1738,1749,3,786,393,0,1739,1749,3,530,265,0,1740,1749,
	3,784,392,0,1741,1749,3,934,467,0,1742,1749,3,848,424,0,1743,1749,3,74,
	37,0,1744,1749,3,50,25,0,1745,1749,3,84,42,0,1746,1749,3,798,399,0,1747,
	1749,3,10,5,0,1748,1624,1,0,0,0,1748,1625,1,0,0,0,1748,1626,1,0,0,0,1748,
	1627,1,0,0,0,1748,1628,1,0,0,0,1748,1629,1,0,0,0,1748,1630,1,0,0,0,1748,
	1631,1,0,0,0,1748,1632,1,0,0,0,1748,1633,1,0,0,0,1748,1634,1,0,0,0,1748,
	1635,1,0,0,0,1748,1636,1,0,0,0,1748,1637,1,0,0,0,1748,1638,1,0,0,0,1748,
	1639,1,0,0,0,1748,1640,1,0,0,0,1748,1641,1,0,0,0,1748,1642,1,0,0,0,1748,
	1643,1,0,0,0,1748,1644,1,0,0,0,1748,1645,1,0,0,0,1748,1646,1,0,0,0,1748,
	1647,1,0,0,0,1748,1648,1,0,0,0,1748,1649,1,0,0,0,1748,1650,1,0,0,0,1748,
	1651,1,0,0,0,1748,1652,1,0,0,0,1748,1653,1,0,0,0,1748,1654,1,0,0,0,1748,
	1655,1,0,0,0,1748,1656,1,0,0,0,1748,1657,1,0,0,0,1748,1658,1,0,0,0,1748,
	1659,1,0,0,0,1748,1660,1,0,0,0,1748,1661,1,0,0,0,1748,1662,1,0,0,0,1748,
	1663,1,0,0,0,1748,1664,1,0,0,0,1748,1665,1,0,0,0,1748,1666,1,0,0,0,1748,
	1667,1,0,0,0,1748,1668,1,0,0,0,1748,1669,1,0,0,0,1748,1670,1,0,0,0,1748,
	1671,1,0,0,0,1748,1672,1,0,0,0,1748,1673,1,0,0,0,1748,1674,1,0,0,0,1748,
	1675,1,0,0,0,1748,1676,1,0,0,0,1748,1677,1,0,0,0,1748,1678,1,0,0,0,1748,
	1679,1,0,0,0,1748,1680,1,0,0,0,1748,1681,1,0,0,0,1748,1682,1,0,0,0,1748,
	1683,1,0,0,0,1748,1684,1,0,0,0,1748,1685,1,0,0,0,1748,1686,1,0,0,0,1748,
	1687,1,0,0,0,1748,1688,1,0,0,0,1748,1689,1,0,0,0,1748,1690,1,0,0,0,1748,
	1691,1,0,0,0,1748,1692,1,0,0,0,1748,1693,1,0,0,0,1748,1694,1,0,0,0,1748,
	1695,1,0,0,0,1748,1696,1,0,0,0,1748,1697,1,0,0,0,1748,1698,1,0,0,0,1748,
	1699,1,0,0,0,1748,1700,1,0,0,0,1748,1701,1,0,0,0,1748,1702,1,0,0,0,1748,
	1703,1,0,0,0,1748,1704,1,0,0,0,1748,1705,1,0,0,0,1748,1706,1,0,0,0,1748,
	1707,1,0,0,0,1748,1708,1,0,0,0,1748,1709,1,0,0,0,1748,1710,1,0,0,0,1748,
	1711,1,0,0,0,1748,1712,1,0,0,0,1748,1713,1,0,0,0,1748,1714,1,0,0,0,1748,
	1715,1,0,0,0,1748,1716,1,0,0,0,1748,1717,1,0,0,0,1748,1718,1,0,0,0,1748,
	1719,1,0,0,0,1748,1720,1,0,0,0,1748,1721,1,0,0,0,1748,1722,1,0,0,0,1748,
	1723,1,0,0,0,1748,1724,1,0,0,0,1748,1725,1,0,0,0,1748,1726,1,0,0,0,1748,
	1727,1,0,0,0,1748,1728,1,0,0,0,1748,1729,1,0,0,0,1748,1730,1,0,0,0,1748,
	1731,1,0,0,0,1748,1732,1,0,0,0,1748,1733,1,0,0,0,1748,1734,1,0,0,0,1748,
	1735,1,0,0,0,1748,1736,1,0,0,0,1748,1737,1,0,0,0,1748,1738,1,0,0,0,1748,
	1739,1,0,0,0,1748,1740,1,0,0,0,1748,1741,1,0,0,0,1748,1742,1,0,0,0,1748,
	1743,1,0,0,0,1748,1744,1,0,0,0,1748,1745,1,0,0,0,1748,1746,1,0,0,0,1748,
	1747,1,0,0,0,1749,9,1,0,0,0,1750,1752,5,544,0,0,1751,1753,5,545,0,0,1752,
	1751,1,0,0,0,1752,1753,1,0,0,0,1753,11,1,0,0,0,1754,1755,5,424,0,0,1755,
	1756,3,1198,599,0,1756,13,1,0,0,0,1757,1758,5,46,0,0,1758,1759,5,309,0,
	0,1759,1760,3,1354,677,0,1760,1761,3,16,8,0,1761,1762,3,18,9,0,1762,15,
	1,0,0,0,1763,1766,5,105,0,0,1764,1766,1,0,0,0,1765,1763,1,0,0,0,1765,1764,
	1,0,0,0,1766,17,1,0,0,0,1767,1769,3,24,12,0,1768,1767,1,0,0,0,1769,1772,
	1,0,0,0,1770,1768,1,0,0,0,1770,1771,1,0,0,0,1771,19,1,0,0,0,1772,1770,1,
	0,0,0,1773,1775,3,22,11,0,1774,1773,1,0,0,0,1775,1778,1,0,0,0,1776,1774,
	1,0,0,0,1776,1777,1,0,0,0,1777,21,1,0,0,0,1778,1776,1,0,0,0,1779,1782,5,
	278,0,0,1780,1783,3,1346,673,0,1781,1783,5,78,0,0,1782,1780,1,0,0,0,1782,
	1781,1,0,0,0,1783,1798,1,0,0,0,1784,1785,7,0,0,0,1785,1786,5,278,0,0,1786,
	1798,3,1346,673,0,1787,1798,5,228,0,0,1788,1789,5,164,0,0,1789,1790,5,74,
	0,0,1790,1798,3,1352,676,0,1791,1792,5,362,0,0,1792,1793,5,359,0,0,1793,
	1798,3,1346,673,0,1794,1795,5,99,0,0,1795,1798,3,1358,679,0,1796,1798,3,
	1368,684,0,1797,1779,1,0,0,0,1797,1784,1,0,0,0,1797,1787,1,0,0,0,1797,1788,
	1,0,0,0,1797,1791,1,0,0,0,1797,1794,1,0,0,0,1797,1796,1,0,0,0,1798,23,1,
	0,0,0,1799,1810,3,22,11,0,1800,1801,5,339,0,0,1801,1810,3,1344,672,0,1802,
	1803,5,134,0,0,1803,1810,3,1358,679,0,1804,1805,5,309,0,0,1805,1810,3,1358,
	679,0,1806,1807,5,68,0,0,1807,1808,7,1,0,0,1808,1810,3,1358,679,0,1809,
	1799,1,0,0,0,1809,1800,1,0,0,0,1809,1802,1,0,0,0,1809,1804,1,0,0,0,1809,
	1806,1,0,0,0,1810,25,1,0,0,0,1811,1812,5,46,0,0,1812,1813,5,99,0,0,1813,
	1814,3,1354,677,0,1814,1815,3,16,8,0,1815,1816,3,18,9,0,1816,27,1,0,0,0,
	1817,1818,5,138,0,0,1818,1819,7,2,0,0,1819,1820,3,1356,678,0,1820,1821,
	3,16,8,0,1821,1822,3,20,10,0,1822,29,1,0,0,0,1823,1828,1,0,0,0,1824,1825,
	5,68,0,0,1825,1826,5,175,0,0,1826,1828,3,1328,664,0,1827,1823,1,0,0,0,1827,
	1824,1,0,0,0,1828,31,1,0,0,0,1829,1830,5,138,0,0,1830,1832,7,2,0,0,1831,
	1833,5,30,0,0,1832,1831,1,0,0,0,1832,1833,1,0,0,0,1833,1834,1,0,0,0,1834,
	1835,3,1356,678,0,1835,1836,3,30,15,0,1836,1837,3,80,40,0,1837,33,1,0,0,
	0,1838,1839,5,191,0,0,1839,1842,7,3,0,0,1840,1841,5,220,0,0,1841,1843,5,
	387,0,0,1842,1840,1,0,0,0,1842,1843,1,0,0,0,1843,1844,1,0,0,0,1844,1845,
	3,1358,679,0,1845,35,1,0,0,0,1846,1847,5,46,0,0,1847,1848,5,66,0,0,1848,
	1849,3,1354,677,0,1849,1850,3,16,8,0,1850,1851,3,18,9,0,1851,37,1,0,0,0,
	1852,1853,5,138,0,0,1853,1854,5,66,0,0,1854,1855,3,1356,678,0,1855,1856,
	3,40,20,0,1856,1857,5,99,0,0,1857,1858,3,1358,679,0,1858,39,1,0,0,0,1859,
	1860,7,4,0,0,1860,41,1,0,0,0,1861,1862,5,46,0,0,1862,1866,5,314,0,0,1863,
	1864,5,220,0,0,1864,1865,5,77,0,0,1865,1867,5,387,0,0,1866,1863,1,0,0,0,
	1866,1867,1,0,0,0,1867,1873,1,0,0,0,1868,1869,3,44,22,0,1869,1870,5,106,
	0,0,1870,1871,3,1356,678,0,1871,1874,1,0,0,0,1872,1874,3,1360,680,0,1873,
	1868,1,0,0,0,1873,1872,1,0,0,0,1874,1875,1,0,0,0,1875,1876,3,46,23,0,1876,
	43,1,0,0,0,1877,1880,3,1360,680,0,1878,1880,1,0,0,0,1879,1877,1,0,0,0,1879,
	1878,1,0,0,0,1880,45,1,0,0,0,1881,1883,3,48,24,0,1882,1881,1,0,0,0,1883,
	1886,1,0,0,0,1884,1882,1,0,0,0,1884,1885,1,0,0,0,1885,47,1,0,0,0,1886,1884,
	1,0,0,0,1887,1894,3,172,86,0,1888,1894,3,588,294,0,1889,1894,3,278,139,
	0,1890,1894,3,404,202,0,1891,1894,3,552,276,0,1892,1894,3,798,399,0,1893,
	1887,1,0,0,0,1893,1888,1,0,0,0,1893,1889,1,0,0,0,1893,1890,1,0,0,0,1893,
	1891,1,0,0,0,1893,1892,1,0,0,0,1894,49,1,0,0,0,1895,1897,5,324,0,0,1896,
	1898,7,5,0,0,1897,1896,1,0,0,0,1897,1898,1,0,0,0,1898,1899,1,0,0,0,1899,
	1900,3,52,26,0,1900,51,1,0,0,0,1901,1902,5,347,0,0,1902,1910,3,792,396,
	0,1903,1904,5,323,0,0,1904,1905,5,154,0,0,1905,1906,5,36,0,0,1906,1907,
	5,347,0,0,1907,1910,3,792,396,0,1908,1910,3,56,28,0,1909,1901,1,0,0,0,1909,
	1903,1,0,0,0,1909,1908,1,0,0,0,1910,53,1,0,0,0,1911,1912,3,58,29,0,1912,
	1913,7,6,0,0,1913,1914,3,60,30,0,1914,55,1,0,0,0,1915,1941,3,54,27,0,1916,
	1917,3,58,29,0,1917,1918,5,64,0,0,1918,1919,5,425,0,0,1919,1941,1,0,0,0,
	1920,1921,5,409,0,0,1921,1922,5,377,0,0,1922,1941,3,68,34,0,1923,1924,5,
	152,0,0,1924,1941,3,1346,673,0,1925,1926,5,314,0,0,1926,1941,3,1346,673,
	0,1927,1928,5,258,0,0,1928,1941,3,70,35,0,1929,1930,5,309,0,0,1930,1941,
	3,72,36,0,1931,1932,5,323,0,0,1932,1933,5,106,0,0,1933,1941,3,72,36,0,1934,
	1935,5,374,0,0,1935,1936,5,270,0,0,1936,1941,3,1216,608,0,1937,1938,5,347,
	0,0,1938,1939,5,328,0,0,1939,1941,3,1346,673,0,1940,1915,1,0,0,0,1940,1916,
	1,0,0,0,1940,1920,1,0,0,0,1940,1923,1,0,0,0,1940,1925,1,0,0,0,1940,1927,
	1,0,0,0,1940,1929,1,0,0,0,1940,1931,1,0,0,0,1940,1934,1,0,0,0,1940,1937,
	1,0,0,0,1941,57,1,0,0,0,1942,1947,3,1360,680,0,1943,1944,5,11,0,0,1944,
	1946,3,1360,680,0,1945,1943,1,0,0,0,1946,1949,1,0,0,0,1947,1945,1,0,0,0,
	1947,1948,1,0,0,0,1948,59,1,0,0,0,1949,1947,1,0,0,0,1950,1955,3,62,31,0,
	1951,1952,5,6,0,0,1952,1954,3,62,31,0,1953,1951,1,0,0,0,1954,1957,1,0,0,
	0,1955,1953,1,0,0,0,1955,1956,1,0,0,0,1956,61,1,0,0,0,1957,1955,1,0,0,0,
	1958,1961,3,66,33,0,1959,1961,3,292,146,0,1960,1958,1,0,0,0,1960,1959,1,
	0,0,0,1961,63,1,0,0,0,1962,1963,5,291,0,0,1963,1968,7,7,0,0,1964,1965,5,
	301,0,0,1965,1968,5,291,0,0,1966,1968,5,321,0,0,1967,1962,1,0,0,0,1967,
	1964,1,0,0,0,1967,1966,1,0,0,0,1968,65,1,0,0,0,1969,1974,5,96,0,0,1970,
	1974,5,60,0,0,1971,1974,5,80,0,0,1972,1974,3,72,36,0,1973,1969,1,0,0,0,
	1973,1970,1,0,0,0,1973,1971,1,0,0,0,1973,1972,1,0,0,0,1974,67,1,0,0,0,1975,
	1991,3,1346,673,0,1976,1991,3,1368,684,0,1977,1978,3,1142,571,0,1978,1979,
	3,1346,673,0,1979,1980,3,1146,573,0,1980,1991,1,0,0,0,1981,1982,3,1142,
	571,0,1982,1983,5,2,0,0,1983,1984,3,1344,672,0,1984,1985,5,3,0,0,1985,1986,
	3,1346,673,0,1986,1991,1,0,0,0,1987,1991,3,292,146,0,1988,1991,5,53,0,0,
	1989,1991,5,245,0,0,1990,1975,1,0,0,0,1990,1976,1,0,0,0,1990,1977,1,0,0,
	0,1990,1981,1,0,0,0,1990,1987,1,0,0,0,1990,1988,1,0,0,0,1990,1989,1,0,0,
	0,1991,69,1,0,0,0,1992,1996,3,1346,673,0,1993,1996,5,53,0,0,1994,1996,1,
	0,0,0,1995,1992,1,0,0,0,1995,1993,1,0,0,0,1995,1994,1,0,0,0,1996,71,1,0,
	0,0,1997,2000,3,1364,682,0,1998,2000,3,1346,673,0,1999,1997,1,0,0,0,1999,
	1998,1,0,0,0,2000,73,1,0,0,0,2001,2002,5,304,0,0,2002,2003,3,76,38,0,2003,
	75,1,0,0,0,2004,2013,3,78,39,0,2005,2006,5,409,0,0,2006,2013,5,377,0,0,
	2007,2008,5,347,0,0,2008,2009,5,235,0,0,2009,2013,5,242,0,0,2010,2011,5,
	323,0,0,2011,2013,5,106,0,0,2012,2004,1,0,0,0,2012,2005,1,0,0,0,2012,2007,
	1,0,0,0,2012,2010,1,0,0,0,2013,77,1,0,0,0,2014,2017,3,58,29,0,2015,2017,
	5,30,0,0,2016,2014,1,0,0,0,2016,2015,1,0,0,0,2017,79,1,0,0,0,2018,2019,
	5,324,0,0,2019,2022,3,52,26,0,2020,2022,3,74,37,0,2021,2018,1,0,0,0,2021,
	2020,1,0,0,0,2022,81,1,0,0,0,2023,2024,5,324,0,0,2024,2027,3,56,28,0,2025,
	2027,3,74,37,0,2026,2023,1,0,0,0,2026,2025,1,0,0,0,2027,83,1,0,0,0,2028,
	2038,5,326,0,0,2029,2039,3,58,29,0,2030,2031,5,409,0,0,2031,2039,5,377,
	0,0,2032,2033,5,347,0,0,2033,2034,5,235,0,0,2034,2039,5,242,0,0,2035,2036,
	5,323,0,0,2036,2039,5,106,0,0,2037,2039,5,30,0,0,2038,2029,1,0,0,0,2038,
	2030,1,0,0,0,2038,2032,1,0,0,0,2038,2035,1,0,0,0,2038,2037,1,0,0,0,2039,
	85,1,0,0,0,2040,2041,5,324,0,0,2041,2042,5,165,0,0,2042,2043,3,88,44,0,
	2043,2044,3,90,45,0,2044,87,1,0,0,0,2045,2048,5,30,0,0,2046,2048,3,1322,
	661,0,2047,2045,1,0,0,0,2047,2046,1,0,0,0,2048,89,1,0,0,0,2049,2050,7,8,
	0,0,2050,91,1,0,0,0,2051,2052,5,155,0,0,2052,93,1,0,0,0,2053,2054,5,187,
	0,0,2054,2055,7,9,0,0,2055,95,1,0,0,0,2056,2057,5,138,0,0,2057,2060,5,92,
	0,0,2058,2059,5,220,0,0,2059,2061,5,387,0,0,2060,2058,1,0,0,0,2060,2061,
	1,0,0,0,2061,2062,1,0,0,0,2062,2065,3,1064,532,0,2063,2066,3,98,49,0,2064,
	2066,3,100,50,0,2065,2063,1,0,0,0,2065,2064,1,0,0,0,2066,2166,1,0,0,0,2067,
	2068,5,138,0,0,2068,2069,5,92,0,0,2069,2070,5,30,0,0,2070,2071,5,68,0,0,
	2071,2072,5,342,0,0,2072,2076,3,1328,664,0,2073,2074,5,272,0,0,2074,2075,
	5,147,0,0,2075,2077,3,1358,679,0,2076,2073,1,0,0,0,2076,2077,1,0,0,0,2077,
	2078,1,0,0,0,2078,2079,5,324,0,0,2079,2080,5,342,0,0,2080,2081,3,1328,664,
	0,2081,2082,3,930,465,0,2082,2166,1,0,0,0,2083,2084,5,138,0,0,2084,2087,
	5,226,0,0,2085,2086,5,220,0,0,2086,2088,5,387,0,0,2087,2085,1,0,0,0,2087,
	2088,1,0,0,0,2088,2089,1,0,0,0,2089,2092,3,1324,662,0,2090,2093,3,98,49,
	0,2091,2093,3,102,51,0,2092,2090,1,0,0,0,2092,2091,1,0,0,0,2093,2166,1,
	0,0,0,2094,2095,5,138,0,0,2095,2096,5,226,0,0,2096,2097,5,30,0,0,2097,2098,
	5,68,0,0,2098,2099,5,342,0,0,2099,2103,3,1328,664,0,2100,2101,5,272,0,0,
	2101,2102,5,147,0,0,2102,2104,3,1358,679,0,2103,2100,1,0,0,0,2103,2104,
	1,0,0,0,2104,2105,1,0,0,0,2105,2106,5,324,0,0,2106,2107,5,342,0,0,2107,
	2108,3,1328,664,0,2108,2109,3,930,465,0,2109,2166,1,0,0,0,2110,2111,5,138,
	0,0,2111,2114,5,319,0,0,2112,2113,5,220,0,0,2113,2115,5,387,0,0,2114,2112,
	1,0,0,0,2114,2115,1,0,0,0,2115,2116,1,0,0,0,2116,2117,3,1324,662,0,2117,
	2118,3,98,49,0,2118,2166,1,0,0,0,2119,2120,5,138,0,0,2120,2123,5,367,0,
	0,2121,2122,5,220,0,0,2122,2124,5,387,0,0,2123,2121,1,0,0,0,2123,2124,1,
	0,0,0,2124,2125,1,0,0,0,2125,2126,3,1324,662,0,2126,2127,3,98,49,0,2127,
	2166,1,0,0,0,2128,2129,5,138,0,0,2129,2130,5,250,0,0,2130,2133,5,367,0,
	0,2131,2132,5,220,0,0,2132,2134,5,387,0,0,2133,2131,1,0,0,0,2133,2134,1,
	0,0,0,2134,2135,1,0,0,0,2135,2136,3,1324,662,0,2136,2137,3,98,49,0,2137,
	2166,1,0,0,0,2138,2139,5,138,0,0,2139,2140,5,250,0,0,2140,2141,5,367,0,
	0,2141,2142,5,30,0,0,2142,2143,5,68,0,0,2143,2144,5,342,0,0,2144,2148,3,
	1328,664,0,2145,2146,5,272,0,0,2146,2147,5,147,0,0,2147,2149,3,1358,679,
	0,2148,2145,1,0,0,0,2148,2149,1,0,0,0,2149,2150,1,0,0,0,2150,2151,5,324,
	0,0,2151,2152,5,342,0,0,2152,2153,3,1328,664,0,2153,2154,3,930,465,0,2154,
	2166,1,0,0,0,2155,2156,5,138,0,0,2156,2157,5,63,0,0,2157,2160,5,92,0,0,
	2158,2159,5,220,0,0,2159,2161,5,387,0,0,2160,2158,1,0,0,0,2160,2161,1,0,
	0,0,2161,2162,1,0,0,0,2162,2163,3,1064,532,0,2163,2164,3,98,49,0,2164,2166,
	1,0,0,0,2165,2056,1,0,0,0,2165,2067,1,0,0,0,2165,2083,1,0,0,0,2165,2094,
	1,0,0,0,2165,2110,1,0,0,0,2165,2119,1,0,0,0,2165,2128,1,0,0,0,2165,2138,
	1,0,0,0,2165,2155,1,0,0,0,2166,97,1,0,0,0,2167,2172,3,104,52,0,2168,2169,
	5,6,0,0,2169,2171,3,104,52,0,2170,2168,1,0,0,0,2171,2174,1,0,0,0,2172,2170,
	1,0,0,0,2172,2173,1,0,0,0,2173,99,1,0,0,0,2174,2172,1,0,0,0,2175,2176,5,
	426,0,0,2176,2177,5,276,0,0,2177,2178,3,1324,662,0,2178,2179,3,128,64,0,
	2179,2184,1,0,0,0,2180,2181,5,427,0,0,2181,2182,5,276,0,0,2182,2184,3,1324,
	662,0,2183,2175,1,0,0,0,2183,2180,1,0,0,0,2184,101,1,0,0,0,2185,2186,5,
	426,0,0,2186,2187,5,276,0,0,2187,2188,3,1324,662,0,2188,103,1,0,0,0,2189,
	2190,5,133,0,0,2190,2442,3,188,94,0,2191,2192,5,133,0,0,2192,2193,5,220,
	0,0,2193,2194,5,77,0,0,2194,2195,5,387,0,0,2195,2442,3,188,94,0,2196,2197,
	5,133,0,0,2197,2198,5,44,0,0,2198,2442,3,188,94,0,2199,2200,5,133,0,0,2200,
	2201,5,44,0,0,2201,2202,5,220,0,0,2202,2203,5,77,0,0,2203,2204,5,387,0,
	0,2204,2442,3,188,94,0,2205,2206,5,138,0,0,2206,2207,3,724,362,0,2207,2208,
	3,1360,680,0,2208,2209,3,106,53,0,2209,2442,1,0,0,0,2210,2211,5,138,0,0,
	2211,2212,3,724,362,0,2212,2213,3,1360,680,0,2213,2214,5,191,0,0,2214,2215,
	5,77,0,0,2215,2216,5,78,0,0,2216,2442,1,0,0,0,2217,2218,5,138,0,0,2218,
	2219,3,724,362,0,2219,2220,3,1360,680,0,2220,2221,5,324,0,0,2221,2222,5,
	77,0,0,2222,2223,5,78,0,0,2223,2442,1,0,0,0,2224,2225,5,138,0,0,2225,2226,
	3,724,362,0,2226,2227,3,1360,680,0,2227,2228,5,191,0,0,2228,2229,5,428,
	0,0,2229,2442,1,0,0,0,2230,2231,5,138,0,0,2231,2232,3,724,362,0,2232,2233,
	3,1360,680,0,2233,2234,5,191,0,0,2234,2235,5,428,0,0,2235,2236,5,220,0,
	0,2236,2237,5,387,0,0,2237,2442,1,0,0,0,2238,2239,5,138,0,0,2239,2240,3,
	724,362,0,2240,2241,3,1360,680,0,2241,2242,5,324,0,0,2242,2243,5,333,0,
	0,2243,2244,3,1352,676,0,2244,2442,1,0,0,0,2245,2246,5,138,0,0,2246,2247,
	3,724,362,0,2247,2248,3,1344,672,0,2248,2249,5,324,0,0,2249,2250,5,333,
	0,0,2250,2251,3,1352,676,0,2251,2442,1,0,0,0,2252,2253,5,138,0,0,2253,2254,
	3,724,362,0,2254,2255,3,1360,680,0,2255,2256,5,324,0,0,2256,2257,3,116,
	58,0,2257,2442,1,0,0,0,2258,2259,5,138,0,0,2259,2260,3,724,362,0,2260,2261,
	3,1360,680,0,2261,2262,5,304,0,0,2262,2263,3,116,58,0,2263,2442,1,0,0,0,
	2264,2265,5,138,0,0,2265,2266,3,724,362,0,2266,2267,3,1360,680,0,2267,2268,
	5,324,0,0,2268,2269,5,336,0,0,2269,2270,3,1360,680,0,2270,2442,1,0,0,0,
	2271,2272,5,138,0,0,2272,2273,3,724,362,0,2273,2274,3,1360,680,0,2274,2275,
	5,133,0,0,2275,2276,5,429,0,0,2276,2277,3,198,99,0,2277,2278,5,36,0,0,2278,
	2279,5,219,0,0,2279,2280,3,284,142,0,2280,2442,1,0,0,0,2281,2282,5,138,
	0,0,2282,2283,3,724,362,0,2283,2284,3,1360,680,0,2284,2285,3,124,62,0,2285,
	2442,1,0,0,0,2286,2287,5,138,0,0,2287,2288,3,724,362,0,2288,2289,3,1360,
	680,0,2289,2290,5,191,0,0,2290,2291,5,219,0,0,2291,2442,1,0,0,0,2292,2293,
	5,138,0,0,2293,2294,3,724,362,0,2294,2295,3,1360,680,0,2295,2296,5,191,
	0,0,2296,2297,5,219,0,0,2297,2298,5,220,0,0,2298,2299,5,387,0,0,2299,2442,
	1,0,0,0,2300,2301,5,191,0,0,2301,2302,3,724,362,0,2302,2303,5,220,0,0,2303,
	2304,5,387,0,0,2304,2305,3,1360,680,0,2305,2306,3,108,54,0,2306,2442,1,
	0,0,0,2307,2308,5,191,0,0,2308,2309,3,724,362,0,2309,2310,3,1360,680,0,
	2310,2311,3,108,54,0,2311,2442,1,0,0,0,2312,2313,5,138,0,0,2313,2314,3,
	724,362,0,2314,2315,3,1360,680,0,2315,2316,3,726,363,0,2316,2317,5,351,
	0,0,2317,2318,3,1108,554,0,2318,2319,3,110,55,0,2319,2320,3,112,56,0,2320,
	2442,1,0,0,0,2321,2322,5,138,0,0,2322,2323,3,724,362,0,2323,2324,3,1360,
	680,0,2324,2325,3,344,172,0,2325,2442,1,0,0,0,2326,2327,5,133,0,0,2327,
	2442,3,208,104,0,2328,2329,5,138,0,0,2329,2330,5,45,0,0,2330,2331,3,1328,
	664,0,2331,2332,3,440,220,0,2332,2442,1,0,0,0,2333,2334,5,363,0,0,2334,
	2335,5,45,0,0,2335,2442,3,1328,664,0,2336,2337,5,191,0,0,2337,2338,5,45,
	0,0,2338,2339,5,220,0,0,2339,2340,5,387,0,0,2340,2341,3,1328,664,0,2341,
	2342,3,108,54,0,2342,2442,1,0,0,0,2343,2344,5,191,0,0,2344,2345,5,45,0,
	0,2345,2346,3,1328,664,0,2346,2347,3,108,54,0,2347,2442,1,0,0,0,2348,2349,
	5,324,0,0,2349,2350,5,370,0,0,2350,2442,5,268,0,0,2351,2352,5,158,0,0,2352,
	2353,5,80,0,0,2353,2442,3,1328,664,0,2354,2355,5,324,0,0,2355,2356,5,370,
	0,0,2356,2442,5,158,0,0,2357,2358,5,324,0,0,2358,2442,5,430,0,0,2359,2360,
	5,324,0,0,2360,2442,5,358,0,0,2361,2362,5,193,0,0,2362,2363,5,348,0,0,2363,
	2442,3,1328,664,0,2364,2365,5,193,0,0,2365,2366,5,139,0,0,2366,2367,5,348,
	0,0,2367,2442,3,1328,664,0,2368,2369,5,193,0,0,2369,2370,5,303,0,0,2370,
	2371,5,348,0,0,2371,2442,3,1328,664,0,2372,2373,5,193,0,0,2373,2374,5,348,
	0,0,2374,2442,5,30,0,0,2375,2376,5,193,0,0,2376,2377,5,348,0,0,2377,2442,
	5,99,0,0,2378,2379,5,186,0,0,2379,2380,5,348,0,0,2380,2442,3,1328,664,0,
	2381,2382,5,186,0,0,2382,2383,5,348,0,0,2383,2442,5,30,0,0,2384,2385,5,
	186,0,0,2385,2386,5,348,0,0,2386,2442,5,99,0,0,2387,2388,5,193,0,0,2388,
	2389,5,312,0,0,2389,2442,3,1328,664,0,2390,2391,5,193,0,0,2391,2392,5,139,
	0,0,2392,2393,5,312,0,0,2393,2442,3,1328,664,0,2394,2395,5,193,0,0,2395,
	2396,5,303,0,0,2396,2397,5,312,0,0,2397,2442,3,1328,664,0,2398,2399,5,186,
	0,0,2399,2400,5,312,0,0,2400,2442,3,1328,664,0,2401,2402,5,228,0,0,2402,
	2442,3,1324,662,0,2403,2404,5,260,0,0,2404,2405,5,228,0,0,2405,2442,3,1324,
	662,0,2406,2407,5,266,0,0,2407,2442,3,524,262,0,2408,2409,5,77,0,0,2409,
	2442,5,266,0,0,2410,2411,5,273,0,0,2411,2412,5,94,0,0,2412,2442,3,1356,
	678,0,2413,2414,5,324,0,0,2414,2415,5,342,0,0,2415,2442,3,1328,664,0,2416,
	2417,5,324,0,0,2417,2442,3,116,58,0,2418,2419,5,304,0,0,2419,2442,3,116,
	58,0,2420,2421,5,303,0,0,2421,2422,5,219,0,0,2422,2442,3,114,57,0,2423,
	2424,5,193,0,0,2424,2425,5,405,0,0,2425,2426,5,242,0,0,2426,2442,5,318,
	0,0,2427,2428,5,186,0,0,2428,2429,5,405,0,0,2429,2430,5,242,0,0,2430,2442,
	5,318,0,0,2431,2432,5,209,0,0,2432,2433,5,405,0,0,2433,2434,5,242,0,0,2434,
	2442,5,318,0,0,2435,2436,5,260,0,0,2436,2437,5,209,0,0,2437,2438,5,405,
	0,0,2438,2439,5,242,0,0,2439,2442,5,318,0,0,2440,2442,3,344,172,0,2441,
	2189,1,0,0,0,2441,2191,1,0,0,0,2441,2196,1,0,0,0,2441,2199,1,0,0,0,2441,
	2205,1,0,0,0,2441,2210,1,0,0,0,2441,2217,1,0,0,0,2441,2224,1,0,0,0,2441,
	2230,1,0,0,0,2441,2238,1,0,0,0,2441,2245,1,0,0,0,2441,2252,1,0,0,0,2441,
	2258,1,0,0,0,2441,2264,1,0,0,0,2441,2271,1,0,0,0,2441,2281,1,0,0,0,2441,
	2286,1,0,0,0,2441,2292,1,0,0,0,2441,2300,1,0,0,0,2441,2307,1,0,0,0,2441,
	2312,1,0,0,0,2441,2321,1,0,0,0,2441,2326,1,0,0,0,2441,2328,1,0,0,0,2441,
	2333,1,0,0,0,2441,2336,1,0,0,0,2441,2343,1,0,0,0,2441,2348,1,0,0,0,2441,
	2351,1,0,0,0,2441,2354,1,0,0,0,2441,2357,1,0,0,0,2441,2359,1,0,0,0,2441,
	2361,1,0,0,0,2441,2364,1,0,0,0,2441,2368,1,0,0,0,2441,2372,1,0,0,0,2441,
	2375,1,0,0,0,2441,2378,1,0,0,0,2441,2381,1,0,0,0,2441,2384,1,0,0,0,2441,
	2387,1,0,0,0,2441,2390,1,0,0,0,2441,2394,1,0,0,0,2441,2398,1,0,0,0,2441,
	2401,1,0,0,0,2441,2403,1,0,0,0,2441,2406,1,0,0,0,2441,2408,1,0,0,0,2441,
	2410,1,0,0,0,2441,2413,1,0,0,0,2441,2416,1,0,0,0,2441,2418,1,0,0,0,2441,
	2420,1,0,0,0,2441,2423,1,0,0,0,2441,2427,1,0,0,0,2441,2431,1,0,0,0,2441,
	2435,1,0,0,0,2441,2440,1,0,0,0,2442,105,1,0,0,0,2443,2444,5,324,0,0,2444,
	2445,5,53,0,0,2445,2449,3,1152,576,0,2446,2447,5,191,0,0,2447,2449,5,53,
	0,0,2448,2443,1,0,0,0,2448,2446,1,0,0,0,2449,107,1,0,0,0,2450,2454,5,150,
	0,0,2451,2454,5,306,0,0,2452,2454,1,0,0,0,2453,2450,1,0,0,0,2453,2451,1,
	0,0,0,2453,2452,1,0,0,0,2454,109,1,0,0,0,2455,2456,5,43,0,0,2456,2459,3,
	524,262,0,2457,2459,1,0,0,0,2458,2455,1,0,0,0,2458,2457,1,0,0,0,2459,111,
	1,0,0,0,2460,2461,5,100,0,0,2461,2464,3,1152,576,0,2462,2464,1,0,0,0,2463,
	2460,1,0,0,0,2463,2462,1,0,0,0,2464,113,1,0,0,0,2465,2472,5,261,0,0,2466,
	2472,5,113,0,0,2467,2472,5,53,0,0,2468,2469,5,100,0,0,2469,2470,5,226,0,
	0,2470,2472,3,1328,664,0,2471,2465,1,0,0,0,2471,2466,1,0,0,0,2471,2467,
	1,0,0,0,2471,2468,1,0,0,0,2472,115,1,0,0,0,2473,2474,5,2,0,0,2474,2475,
	3,120,60,0,2475,2476,5,3,0,0,2476,117,1,0,0,0,2477,2478,5,105,0,0,2478,
	2481,3,116,58,0,2479,2481,1,0,0,0,2480,2477,1,0,0,0,2480,2479,1,0,0,0,2481,
	119,1,0,0,0,2482,2487,3,122,61,0,2483,2484,5,6,0,0,2484,2486,3,122,61,0,
	2485,2483,1,0,0,0,2486,2489,1,0,0,0,2487,2485,1,0,0,0,2487,2488,1,0,0,0,
	2488,121,1,0,0,0,2489,2487,1,0,0,0,2490,2499,3,1366,683,0,2491,2492,5,10,
	0,0,2492,2500,3,466,233,0,2493,2494,5,11,0,0,2494,2497,3,1366,683,0,2495,
	2496,5,10,0,0,2496,2498,3,466,233,0,2497,2495,1,0,0,0,2497,2498,1,0,0,0,
	2498,2500,1,0,0,0,2499,2491,1,0,0,0,2499,2493,1,0,0,0,2499,2500,1,0,0,0,
	2500,123,1,0,0,0,2501,2503,3,126,63,0,2502,2501,1,0,0,0,2503,2504,1,0,0,
	0,2504,2502,1,0,0,0,2504,2505,1,0,0,0,2505,125,1,0,0,0,2506,2510,5,305,
	0,0,2507,2508,3,16,8,0,2508,2509,3,292,146,0,2509,2511,1,0,0,0,2510,2507,
	1,0,0,0,2510,2511,1,0,0,0,2511,2519,1,0,0,0,2512,2516,5,324,0,0,2513,2517,
	3,288,144,0,2514,2515,5,429,0,0,2515,2517,3,198,99,0,2516,2513,1,0,0,0,
	2516,2514,1,0,0,0,2517,2519,1,0,0,0,2518,2506,1,0,0,0,2518,2512,1,0,0,0,
	2519,127,1,0,0,0,2520,2521,5,62,0,0,2521,2522,5,413,0,0,2522,2523,5,105,
	0,0,2523,2524,5,2,0,0,2524,2525,3,132,66,0,2525,2526,5,3,0,0,2526,2547,
	1,0,0,0,2527,2528,5,62,0,0,2528,2529,5,413,0,0,2529,2530,5,68,0,0,2530,
	2531,5,2,0,0,2531,2532,3,1268,634,0,2532,2533,5,3,0,0,2533,2547,1,0,0,0,
	2534,2535,5,62,0,0,2535,2536,5,413,0,0,2536,2537,5,64,0,0,2537,2538,5,2,
	0,0,2538,2539,3,1268,634,0,2539,2540,5,3,0,0,2540,2541,5,94,0,0,2541,2542,
	5,2,0,0,2542,2543,3,1268,634,0,2543,2544,5,3,0,0,2544,2547,1,0,0,0,2545,
	2547,5,53,0,0,2546,2520,1,0,0,0,2546,2527,1,0,0,0,2546,2534,1,0,0,0,2546,
	2545,1,0,0,0,2547,129,1,0,0,0,2548,2549,3,1364,682,0,2549,2550,3,1344,672,
	0,2550,131,1,0,0,0,2551,2556,3,130,65,0,2552,2553,5,6,0,0,2553,2555,3,130,
	65,0,2554,2552,1,0,0,0,2555,2558,1,0,0,0,2556,2554,1,0,0,0,2556,2557,1,
	0,0,0,2557,133,1,0,0,0,2558,2556,1,0,0,0,2559,2560,5,138,0,0,2560,2561,
	5,351,0,0,2561,2562,3,524,262,0,2562,2563,3,136,68,0,2563,135,1,0,0,0,2564,
	2569,3,138,69,0,2565,2566,5,6,0,0,2566,2568,3,138,69,0,2567,2565,1,0,0,
	0,2568,2571,1,0,0,0,2569,2567,1,0,0,0,2569,2570,1,0,0,0,2570,137,1,0,0,
	0,2571,2569,1,0,0,0,2572,2573,5,133,0,0,2573,2574,5,143,0,0,2574,2575,3,
	1092,546,0,2575,2576,3,108,54,0,2576,2596,1,0,0,0,2577,2578,5,191,0,0,2578,
	2581,5,143,0,0,2579,2580,5,220,0,0,2580,2582,5,387,0,0,2581,2579,1,0,0,
	0,2581,2582,1,0,0,0,2582,2583,1,0,0,0,2583,2584,3,1360,680,0,2584,2585,
	3,108,54,0,2585,2596,1,0,0,0,2586,2587,5,138,0,0,2587,2588,5,143,0,0,2588,
	2589,3,1360,680,0,2589,2590,3,726,363,0,2590,2591,5,351,0,0,2591,2592,3,
	1108,554,0,2592,2593,3,110,55,0,2593,2594,3,108,54,0,2594,2596,1,0,0,0,
	2595,2572,1,0,0,0,2595,2577,1,0,0,0,2595,2586,1,0,0,0,2596,139,1,0,0,0,
	2597,2600,5,157,0,0,2598,2601,3,946,473,0,2599,2601,5,30,0,0,2600,2598,
	1,0,0,0,2600,2599,1,0,0,0,2601,141,1,0,0,0,2602,2603,5,169,0,0,2603,2604,
	3,156,78,0,2604,2605,3,1324,662,0,2605,2606,3,214,107,0,2606,2607,3,144,
	72,0,2607,2608,3,146,73,0,2608,2609,3,148,74,0,2609,2610,3,158,79,0,2610,
	2611,3,16,8,0,2611,2612,3,150,75,0,2612,2613,3,1084,542,0,2613,2625,1,0,
	0,0,2614,2615,5,169,0,0,2615,2616,5,2,0,0,2616,2617,3,894,447,0,2617,2618,
	5,3,0,0,2618,2619,5,94,0,0,2619,2620,3,146,73,0,2620,2621,3,148,74,0,2621,
	2622,3,16,8,0,2622,2623,3,150,75,0,2623,2625,1,0,0,0,2624,2602,1,0,0,0,
	2624,2614,1,0,0,0,2625,143,1,0,0,0,2626,2627,7,10,0,0,2627,145,1,0,0,0,
	2628,2631,5,288,0,0,2629,2631,1,0,0,0,2630,2628,1,0,0,0,2630,2629,1,0,0,
	0,2631,147,1,0,0,0,2632,2636,3,1346,673,0,2633,2636,5,334,0,0,2634,2636,
	5,335,0,0,2635,2632,1,0,0,0,2635,2633,1,0,0,0,2635,2634,1,0,0,0,2636,149,
	1,0,0,0,2637,2643,3,152,76,0,2638,2639,5,2,0,0,2639,2640,3,162,81,0,2640,
	2641,5,3,0,0,2641,2643,1,0,0,0,2642,2637,1,0,0,0,2642,2638,1,0,0,0,2643,
	151,1,0,0,0,2644,2646,3,154,77,0,2645,2644,1,0,0,0,2646,2649,1,0,0,0,2647,
	2645,1,0,0,0,2647,2648,1,0,0,0,2648,153,1,0,0,0,2649,2647,1,0,0,0,2650,
	2686,5,107,0,0,2651,2686,5,112,0,0,2652,2653,5,183,0,0,2653,2654,3,834,
	417,0,2654,2655,3,1346,673,0,2655,2686,1,0,0,0,2656,2657,5,78,0,0,2657,
	2658,3,834,417,0,2658,2659,3,1346,673,0,2659,2686,1,0,0,0,2660,2686,5,171,
	0,0,2661,2686,5,216,0,0,2662,2663,5,289,0,0,2663,2664,3,834,417,0,2664,
	2665,3,1346,673,0,2665,2686,1,0,0,0,2666,2667,5,197,0,0,2667,2668,3,834,
	417,0,2668,2669,3,1346,673,0,2669,2686,1,0,0,0,2670,2671,5,209,0,0,2671,
	2672,5,289,0,0,2672,2686,3,216,108,0,2673,2674,5,209,0,0,2674,2675,5,289,
	0,0,2675,2686,5,9,0,0,2676,2677,5,209,0,0,2677,2678,5,77,0,0,2678,2679,
	5,78,0,0,2679,2686,3,216,108,0,2680,2681,5,209,0,0,2681,2682,5,78,0,0,2682,
	2686,3,216,108,0,2683,2684,5,194,0,0,2684,2686,3,1346,673,0,2685,2650,1,
	0,0,0,2685,2651,1,0,0,0,2685,2652,1,0,0,0,2685,2656,1,0,0,0,2685,2660,1,
	0,0,0,2685,2661,1,0,0,0,2685,2662,1,0,0,0,2685,2666,1,0,0,0,2685,2670,1,
	0,0,0,2685,2673,1,0,0,0,2685,2676,1,0,0,0,2685,2680,1,0,0,0,2685,2683,1,
	0,0,0,2686,155,1,0,0,0,2687,2690,5,107,0,0,2688,2690,1,0,0,0,2689,2687,
	1,0,0,0,2689,2688,1,0,0,0,2690,157,1,0,0,0,2691,2692,3,160,80,0,2692,2693,
	5,184,0,0,2693,2694,3,1346,673,0,2694,2697,1,0,0,0,2695,2697,1,0,0,0,2696,
	2691,1,0,0,0,2696,2695,1,0,0,0,2697,159,1,0,0,0,2698,2701,5,100,0,0,2699,
	2701,1,0,0,0,2700,2698,1,0,0,0,2700,2699,1,0,0,0,2701,161,1,0,0,0,2702,
	2707,3,164,82,0,2703,2704,5,6,0,0,2704,2706,3,164,82,0,2705,2703,1,0,0,
	0,2706,2709,1,0,0,0,2707,2705,1,0,0,0,2707,2708,1,0,0,0,2708,163,1,0,0,
	0,2709,2707,1,0,0,0,2710,2711,3,1366,683,0,2711,2712,3,166,83,0,2712,165,
	1,0,0,0,2713,2722,3,66,33,0,2714,2722,3,292,146,0,2715,2722,5,9,0,0,2716,
	2717,5,2,0,0,2717,2718,3,168,84,0,2718,2719,5,3,0,0,2719,2722,1,0,0,0,2720,
	2722,1,0,0,0,2721,2713,1,0,0,0,2721,2714,1,0,0,0,2721,2715,1,0,0,0,2721,
	2716,1,0,0,0,2721,2720,1,0,0,0,2722,167,1,0,0,0,2723,2728,3,170,85,0,2724,
	2725,5,6,0,0,2725,2727,3,170,85,0,2726,2724,1,0,0,0,2727,2730,1,0,0,0,2728,
	2726,1,0,0,0,2728,2729,1,0,0,0,2729,169,1,0,0,0,2730,2728,1,0,0,0,2731,
	2732,3,66,33,0,2732,171,1,0,0,0,2733,2734,5,46,0,0,2734,2735,3,174,87,0,
	2735,2739,5,92,0,0,2736,2737,5,220,0,0,2737,2738,5,77,0,0,2738,2740,5,387,
	0,0,2739,2736,1,0,0,0,2739,2740,1,0,0,0,2740,2741,1,0,0,0,2741,2772,3,1324,
	662,0,2742,2743,5,2,0,0,2743,2744,3,176,88,0,2744,2745,5,3,0,0,2745,2746,
	3,238,119,0,2746,2747,3,240,120,0,2747,2748,3,248,124,0,2748,2749,3,250,
	125,0,2749,2750,3,252,126,0,2750,2751,3,254,127,0,2751,2773,1,0,0,0,2752,
	2753,5,266,0,0,2753,2754,3,524,262,0,2754,2755,3,178,89,0,2755,2756,3,240,
	120,0,2756,2757,3,248,124,0,2757,2758,3,250,125,0,2758,2759,3,252,126,0,
	2759,2760,3,254,127,0,2760,2773,1,0,0,0,2761,2762,5,276,0,0,2762,2763,5,
	266,0,0,2763,2764,3,1324,662,0,2764,2765,3,178,89,0,2765,2766,3,128,64,
	0,2766,2767,3,240,120,0,2767,2768,3,248,124,0,2768,2769,3,250,125,0,2769,
	2770,3,252,126,0,2770,2771,3,254,127,0,2771,2773,1,0,0,0,2772,2742,1,0,
	0,0,2772,2752,1,0,0,0,2772,2761,1,0,0,0,2773,173,1,0,0,0,2774,2783,5,345,
	0,0,2775,2783,5,343,0,0,2776,2777,5,245,0,0,2777,2783,7,11,0,0,2778,2779,
	5,213,0,0,2779,2783,7,11,0,0,2780,2783,5,358,0,0,2781,2783,1,0,0,0,2782,
	2774,1,0,0,0,2782,2775,1,0,0,0,2782,2776,1,0,0,0,2782,2778,1,0,0,0,2782,
	2780,1,0,0,0,2782,2781,1,0,0,0,2783,175,1,0,0,0,2784,2787,3,180,90,0,2785,
	2787,1,0,0,0,2786,2784,1,0,0,0,2786,2785,1,0,0,0,2787,177,1,0,0,0,2788,
	2789,5,2,0,0,2789,2790,3,182,91,0,2790,2791,5,3,0,0,2791,2794,1,0,0,0,2792,
	2794,1,0,0,0,2793,2788,1,0,0,0,2793,2792,1,0,0,0,2794,179,1,0,0,0,2795,
	2800,3,184,92,0,2796,2797,5,6,0,0,2797,2799,3,184,92,0,2798,2796,1,0,0,
	0,2799,2802,1,0,0,0,2800,2798,1,0,0,0,2800,2801,1,0,0,0,2801,181,1,0,0,
	0,2802,2800,1,0,0,0,2803,2808,3,186,93,0,2804,2805,5,6,0,0,2805,2807,3,
	186,93,0,2806,2804,1,0,0,0,2807,2810,1,0,0,0,2808,2806,1,0,0,0,2808,2809,
	1,0,0,0,2809,183,1,0,0,0,2810,2808,1,0,0,0,2811,2815,3,188,94,0,2812,2815,
	3,202,101,0,2813,2815,3,208,104,0,2814,2811,1,0,0,0,2814,2812,1,0,0,0,2814,
	2813,1,0,0,0,2815,185,1,0,0,0,2816,2819,3,190,95,0,2817,2819,3,208,104,
	0,2818,2816,1,0,0,0,2818,2817,1,0,0,0,2819,187,1,0,0,0,2820,2821,3,1360,
	680,0,2821,2822,3,1108,554,0,2822,2823,3,340,170,0,2823,2824,3,192,96,0,
	2824,189,1,0,0,0,2825,2828,3,1360,680,0,2826,2827,5,105,0,0,2827,2829,5,
	271,0,0,2828,2826,1,0,0,0,2828,2829,1,0,0,0,2829,2830,1,0,0,0,2830,2831,
	3,192,96,0,2831,191,1,0,0,0,2832,2834,3,194,97,0,2833,2832,1,0,0,0,2834,
	2837,1,0,0,0,2835,2833,1,0,0,0,2835,2836,1,0,0,0,2836,193,1,0,0,0,2837,
	2835,1,0,0,0,2838,2839,5,45,0,0,2839,2840,3,1328,664,0,2840,2841,3,196,
	98,0,2841,2847,1,0,0,0,2842,2847,3,196,98,0,2843,2847,3,200,100,0,2844,
	2845,5,43,0,0,2845,2847,3,524,262,0,2846,2838,1,0,0,0,2846,2842,1,0,0,0,
	2846,2843,1,0,0,0,2846,2844,1,0,0,0,2847,195,1,0,0,0,2848,2849,5,77,0,0,
	2849,2887,5,78,0,0,2850,2887,5,78,0,0,2851,2852,5,98,0,0,2852,2853,3,664,
	332,0,2853,2854,3,256,128,0,2854,2887,1,0,0,0,2855,2856,5,85,0,0,2856,2857,
	5,236,0,0,2857,2858,3,664,332,0,2858,2859,3,256,128,0,2859,2887,1,0,0,0,
	2860,2861,5,42,0,0,2861,2862,5,2,0,0,2862,2863,3,1152,576,0,2863,2864,5,
	3,0,0,2864,2865,3,212,106,0,2865,2887,1,0,0,0,2866,2867,5,53,0,0,2867,2887,
	3,1192,596,0,2868,2869,5,429,0,0,2869,2870,3,198,99,0,2870,2878,5,36,0,
	0,2871,2872,5,219,0,0,2872,2879,3,284,142,0,2873,2874,5,2,0,0,2874,2875,
	3,1152,576,0,2875,2876,5,3,0,0,2876,2877,5,431,0,0,2877,2879,1,0,0,0,2878,
	2871,1,0,0,0,2878,2873,1,0,0,0,2879,2887,1,0,0,0,2880,2881,5,86,0,0,2881,
	2882,3,1324,662,0,2882,2883,3,214,107,0,2883,2884,3,222,111,0,2884,2885,
	3,230,115,0,2885,2887,1,0,0,0,2886,2848,1,0,0,0,2886,2850,1,0,0,0,2886,
	2851,1,0,0,0,2886,2855,1,0,0,0,2886,2860,1,0,0,0,2886,2866,1,0,0,0,2886,
	2868,1,0,0,0,2886,2880,1,0,0,0,2887,197,1,0,0,0,2888,2892,5,139,0,0,2889,
	2890,5,147,0,0,2890,2892,5,53,0,0,2891,2888,1,0,0,0,2891,2889,1,0,0,0,2892,
	199,1,0,0,0,2893,2899,5,54,0,0,2894,2895,5,77,0,0,2895,2899,5,54,0,0,2896,
	2897,5,69,0,0,2897,2899,7,8,0,0,2898,2893,1,0,0,0,2898,2894,1,0,0,0,2898,
	2896,1,0,0,0,2899,201,1,0,0,0,2900,2901,5,120,0,0,2901,2902,3,1324,662,
	0,2902,2903,3,204,102,0,2903,203,1,0,0,0,2904,2905,7,12,0,0,2905,2907,3,
	206,103,0,2906,2904,1,0,0,0,2907,2910,1,0,0,0,2908,2906,1,0,0,0,2908,2909,
	1,0,0,0,2909,205,1,0,0,0,2910,2908,1,0,0,0,2911,2912,7,13,0,0,2912,207,
	1,0,0,0,2913,2914,5,45,0,0,2914,2915,3,1328,664,0,2915,2916,3,210,105,0,
	2916,2919,1,0,0,0,2917,2919,3,210,105,0,2918,2913,1,0,0,0,2918,2917,1,0,
	0,0,2919,209,1,0,0,0,2920,2921,5,42,0,0,2921,2922,5,2,0,0,2922,2923,3,1152,
	576,0,2923,2924,5,3,0,0,2924,2925,3,440,220,0,2925,2979,1,0,0,0,2926,2938,
	5,98,0,0,2927,2928,5,2,0,0,2928,2929,3,216,108,0,2929,2930,5,3,0,0,2930,
	2931,3,220,110,0,2931,2932,3,664,332,0,2932,2933,3,256,128,0,2933,2934,
	3,440,220,0,2934,2939,1,0,0,0,2935,2936,3,258,129,0,2936,2937,3,440,220,
	0,2937,2939,1,0,0,0,2938,2927,1,0,0,0,2938,2935,1,0,0,0,2939,2979,1,0,0,
	0,2940,2941,5,85,0,0,2941,2953,5,236,0,0,2942,2943,5,2,0,0,2943,2944,3,
	216,108,0,2944,2945,5,3,0,0,2945,2946,3,220,110,0,2946,2947,3,664,332,0,
	2947,2948,3,256,128,0,2948,2949,3,440,220,0,2949,2954,1,0,0,0,2950,2951,
	3,258,129,0,2951,2952,3,440,220,0,2952,2954,1,0,0,0,2953,2942,1,0,0,0,2953,
	2950,1,0,0,0,2954,2979,1,0,0,0,2955,2956,5,199,0,0,2956,2957,3,596,298,
	0,2957,2958,5,2,0,0,2958,2959,3,224,112,0,2959,2960,5,3,0,0,2960,2961,3,
	220,110,0,2961,2962,3,664,332,0,2962,2963,3,256,128,0,2963,2964,3,228,114,
	0,2964,2965,3,440,220,0,2965,2979,1,0,0,0,2966,2967,5,63,0,0,2967,2968,
	5,236,0,0,2968,2969,5,2,0,0,2969,2970,3,216,108,0,2970,2971,5,3,0,0,2971,
	2972,5,86,0,0,2972,2973,3,1324,662,0,2973,2974,3,214,107,0,2974,2975,3,
	222,111,0,2975,2976,3,230,115,0,2976,2977,3,440,220,0,2977,2979,1,0,0,0,
	2978,2920,1,0,0,0,2978,2926,1,0,0,0,2978,2940,1,0,0,0,2978,2955,1,0,0,0,
	2978,2966,1,0,0,0,2979,211,1,0,0,0,2980,2981,5,260,0,0,2981,2984,5,228,
	0,0,2982,2984,1,0,0,0,2983,2980,1,0,0,0,2983,2982,1,0,0,0,2984,213,1,0,
	0,0,2985,2986,5,2,0,0,2986,2987,3,216,108,0,2987,2988,5,3,0,0,2988,2991,
	1,0,0,0,2989,2991,1,0,0,0,2990,2985,1,0,0,0,2990,2989,1,0,0,0,2991,215,
	1,0,0,0,2992,2997,3,218,109,0,2993,2994,5,6,0,0,2994,2996,3,218,109,0,2995,
	2993,1,0,0,0,2996,2999,1,0,0,0,2997,2995,1,0,0,0,2997,2998,1,0,0,0,2998,
	217,1,0,0,0,2999,2997,1,0,0,0,3000,3001,3,1360,680,0,3001,219,1,0,0,0,3002,
	3003,5,432,0,0,3003,3004,5,2,0,0,3004,3005,3,216,108,0,3005,3006,5,3,0,
	0,3006,3009,1,0,0,0,3007,3009,1,0,0,0,3008,3002,1,0,0,0,3008,3007,1,0,0,
	0,3009,221,1,0,0,0,3010,3011,5,249,0,0,3011,3014,7,14,0,0,3012,3014,1,0,
	0,0,3013,3010,1,0,0,0,3013,3012,1,0,0,0,3014,223,1,0,0,0,3015,3020,3,226,
	113,0,3016,3017,5,6,0,0,3017,3019,3,226,113,0,3018,3016,1,0,0,0,3019,3022,
	1,0,0,0,3020,3018,1,0,0,0,3020,3021,1,0,0,0,3021,225,1,0,0,0,3022,3020,
	1,0,0,0,3023,3024,3,602,301,0,3024,3031,5,105,0,0,3025,3032,3,684,342,0,
	3026,3027,5,269,0,0,3027,3028,5,2,0,0,3028,3029,3,684,342,0,3029,3030,5,
	3,0,0,3030,3032,1,0,0,0,3031,3025,1,0,0,0,3031,3026,1,0,0,0,3032,227,1,
	0,0,0,3033,3034,5,103,0,0,3034,3035,5,2,0,0,3035,3036,3,1152,576,0,3036,
	3037,5,3,0,0,3037,3040,1,0,0,0,3038,3040,1,0,0,0,3039,3033,1,0,0,0,3039,
	3038,1,0,0,0,3040,229,1,0,0,0,3041,3051,3,232,116,0,3042,3051,3,234,117,
	0,3043,3044,3,232,116,0,3044,3045,3,234,117,0,3045,3051,1,0,0,0,3046,3047,
	3,234,117,0,3047,3048,3,232,116,0,3048,3051,1,0,0,0,3049,3051,1,0,0,0,3050,
	3041,1,0,0,0,3050,3042,1,0,0,0,3050,3043,1,0,0,0,3050,3046,1,0,0,0,3050,
	3049,1,0,0,0,3051,231,1,0,0,0,3052,3053,5,80,0,0,3053,3054,5,360,0,0,3054,
	3055,3,236,118,0,3055,233,1,0,0,0,3056,3057,5,80,0,0,3057,3058,5,182,0,
	0,3058,3059,3,236,118,0,3059,235,1,0,0,0,3060,3061,5,260,0,0,3061,3067,
	5,132,0,0,3062,3067,5,306,0,0,3063,3067,5,150,0,0,3064,3065,5,324,0,0,3065,
	3067,7,15,0,0,3066,3060,1,0,0,0,3066,3062,1,0,0,0,3066,3063,1,0,0,0,3066,
	3064,1,0,0,0,3067,237,1,0,0,0,3068,3069,5,229,0,0,3069,3070,5,2,0,0,3070,
	3071,3,1322,661,0,3071,3072,5,3,0,0,3072,3075,1,0,0,0,3073,3075,1,0,0,0,
	3074,3068,1,0,0,0,3074,3073,1,0,0,0,3075,239,1,0,0,0,3076,3079,3,242,121,
	0,3077,3079,1,0,0,0,3078,3076,1,0,0,0,3078,3077,1,0,0,0,3079,241,1,0,0,
	0,3080,3081,5,276,0,0,3081,3082,5,147,0,0,3082,3083,3,1360,680,0,3083,3084,
	5,2,0,0,3084,3085,3,244,122,0,3085,3086,5,3,0,0,3086,243,1,0,0,0,3087,3092,
	3,246,123,0,3088,3089,5,6,0,0,3089,3091,3,246,123,0,3090,3088,1,0,0,0,3091,
	3094,1,0,0,0,3092,3090,1,0,0,0,3092,3093,1,0,0,0,3093,245,1,0,0,0,3094,
	3092,1,0,0,0,3095,3096,3,1360,680,0,3096,3097,3,608,304,0,3097,3098,3,610,
	305,0,3098,3110,1,0,0,0,3099,3100,3,1202,601,0,3100,3101,3,608,304,0,3101,
	3102,3,610,305,0,3102,3110,1,0,0,0,3103,3104,5,2,0,0,3104,3105,3,1152,576,
	0,3105,3106,5,3,0,0,3106,3107,3,608,304,0,3107,3108,3,610,305,0,3108,3110,
	1,0,0,0,3109,3095,1,0,0,0,3109,3099,1,0,0,0,3109,3103,1,0,0,0,3110,247,
	1,0,0,0,3111,3112,5,100,0,0,3112,3115,3,1328,664,0,3113,3115,1,0,0,0,3114,
	3111,1,0,0,0,3114,3113,1,0,0,0,3115,249,1,0,0,0,3116,3117,5,105,0,0,3117,
	3122,3,116,58,0,3118,3119,5,370,0,0,3119,3122,5,268,0,0,3120,3122,1,0,0,
	0,3121,3116,1,0,0,0,3121,3118,1,0,0,0,3121,3120,1,0,0,0,3122,251,1,0,0,
	0,3123,3124,5,80,0,0,3124,3130,5,161,0,0,3125,3131,5,191,0,0,3126,3127,
	5,182,0,0,3127,3131,5,311,0,0,3128,3129,5,283,0,0,3129,3131,5,311,0,0,3130,
	3125,1,0,0,0,3130,3126,1,0,0,0,3130,3128,1,0,0,0,3131,3134,1,0,0,0,3132,
	3134,1,0,0,0,3133,3123,1,0,0,0,3133,3132,1,0,0,0,3134,253,1,0,0,0,3135,
	3136,5,342,0,0,3136,3139,3,1328,664,0,3137,3139,1,0,0,0,3138,3135,1,0,0,
	0,3138,3137,1,0,0,0,3139,255,1,0,0,0,3140,3141,5,100,0,0,3141,3142,5,226,
	0,0,3142,3143,5,342,0,0,3143,3146,3,1328,664,0,3144,3146,1,0,0,0,3145,3140,
	1,0,0,0,3145,3144,1,0,0,0,3146,257,1,0,0,0,3147,3148,5,100,0,0,3148,3149,
	5,226,0,0,3149,3150,3,1328,664,0,3150,259,1,0,0,0,3151,3152,5,46,0,0,3152,
	3156,5,333,0,0,3153,3154,5,220,0,0,3154,3155,5,77,0,0,3155,3157,5,387,0,
	0,3156,3153,1,0,0,0,3156,3157,1,0,0,0,3157,3158,1,0,0,0,3158,3159,3,524,
	262,0,3159,3160,3,870,435,0,3160,3161,5,80,0,0,3161,3162,3,1268,634,0,3162,
	3163,5,64,0,0,3163,3164,3,1050,525,0,3164,261,1,0,0,0,3165,3166,5,138,0,
	0,3166,3169,5,333,0,0,3167,3168,5,220,0,0,3168,3170,5,387,0,0,3169,3167,
	1,0,0,0,3169,3170,1,0,0,0,3170,3171,1,0,0,0,3171,3172,3,524,262,0,3172,
	3173,5,324,0,0,3173,3174,5,333,0,0,3174,3175,3,1352,676,0,3175,263,1,0,
	0,0,3176,3177,5,46,0,0,3177,3178,3,174,87,0,3178,3182,5,92,0,0,3179,3180,
	5,220,0,0,3180,3181,5,77,0,0,3181,3183,5,387,0,0,3182,3179,1,0,0,0,3182,
	3183,1,0,0,0,3183,3184,1,0,0,0,3184,3185,3,266,133,0,3185,3186,5,36,0,0,
	3186,3187,3,952,476,0,3187,3188,3,268,134,0,3188,265,1,0,0,0,3189,3190,
	3,1324,662,0,3190,3191,3,214,107,0,3191,3192,3,248,124,0,3192,3193,3,250,
	125,0,3193,3194,3,252,126,0,3194,3195,3,254,127,0,3195,267,1,0,0,0,3196,
	3200,5,105,0,0,3197,3201,5,174,0,0,3198,3199,5,260,0,0,3199,3201,5,174,
	0,0,3200,3197,1,0,0,0,3200,3198,1,0,0,0,3201,3204,1,0,0,0,3202,3204,1,0,
	0,0,3203,3196,1,0,0,0,3203,3202,1,0,0,0,3204,269,1,0,0,0,3205,3206,5,46,
	0,0,3206,3207,3,274,137,0,3207,3208,5,250,0,0,3208,3212,5,367,0,0,3209,
	3210,5,220,0,0,3210,3211,5,77,0,0,3211,3213,5,387,0,0,3212,3209,1,0,0,0,
	3212,3213,1,0,0,0,3213,3214,1,0,0,0,3214,3215,3,272,136,0,3215,3216,5,36,
	0,0,3216,3217,3,952,476,0,3217,3218,3,268,134,0,3218,271,1,0,0,0,3219,3220,
	3,1324,662,0,3220,3221,3,214,107,0,3221,3222,3,248,124,0,3222,3223,3,118,
	59,0,3223,3224,3,254,127,0,3224,273,1,0,0,0,3225,3228,5,358,0,0,3226,3228,
	1,0,0,0,3227,3225,1,0,0,0,3227,3226,1,0,0,0,3228,275,1,0,0,0,3229,3230,
	5,296,0,0,3230,3231,5,250,0,0,3231,3232,5,367,0,0,3232,3233,3,592,296,0,
	3233,3234,3,1324,662,0,3234,3235,3,268,134,0,3235,277,1,0,0,0,3236,3237,
	5,46,0,0,3237,3238,3,174,87,0,3238,3242,5,319,0,0,3239,3240,5,220,0,0,3240,
	3241,5,77,0,0,3241,3243,5,387,0,0,3242,3239,1,0,0,0,3242,3243,1,0,0,0,3243,
	3244,1,0,0,0,3244,3245,3,1324,662,0,3245,3246,3,282,141,0,3246,279,1,0,
	0,0,3247,3248,5,138,0,0,3248,3251,5,319,0,0,3249,3250,5,220,0,0,3250,3252,
	5,387,0,0,3251,3249,1,0,0,0,3251,3252,1,0,0,0,3252,3253,1,0,0,0,3253,3254,
	3,1324,662,0,3254,3255,3,286,143,0,3255,281,1,0,0,0,3256,3259,3,286,143,
	0,3257,3259,1,0,0,0,3258,3256,1,0,0,0,3258,3257,1,0,0,0,3259,283,1,0,0,
	0,3260,3261,5,2,0,0,3261,3262,3,286,143,0,3262,3263,5,3,0,0,3263,3266,1,
	0,0,0,3264,3266,1,0,0,0,3265,3260,1,0,0,0,3265,3264,1,0,0,0,3266,285,1,
	0,0,0,3267,3269,3,288,144,0,3268,3267,1,0,0,0,3269,3270,1,0,0,0,3270,3268,
	1,0,0,0,3270,3271,1,0,0,0,3271,287,1,0,0,0,3272,3273,5,36,0,0,3273,3303,
	3,1112,556,0,3274,3275,5,148,0,0,3275,3303,3,292,146,0,3276,3303,5,173,
	0,0,3277,3278,5,225,0,0,3278,3279,3,290,145,0,3279,3280,3,292,146,0,3280,
	3303,1,0,0,0,3281,3282,5,251,0,0,3282,3303,3,292,146,0,3283,3284,5,253,
	0,0,3284,3303,3,292,146,0,3285,3286,5,260,0,0,3286,3303,7,16,0,0,3287,3288,
	5,272,0,0,3288,3289,5,147,0,0,3289,3303,3,524,262,0,3290,3291,5,319,0,0,
	3291,3292,5,257,0,0,3292,3303,3,524,262,0,3293,3294,5,331,0,0,3294,3295,
	3,16,8,0,3295,3296,3,292,146,0,3296,3303,1,0,0,0,3297,3298,5,305,0,0,3298,
	3300,3,16,8,0,3299,3301,3,292,146,0,3300,3299,1,0,0,0,3300,3301,1,0,0,0,
	3301,3303,1,0,0,0,3302,3272,1,0,0,0,3302,3274,1,0,0,0,3302,3276,1,0,0,0,
	3302,3277,1,0,0,0,3302,3281,1,0,0,0,3302,3283,1,0,0,0,3302,3285,1,0,0,0,
	3302,3287,1,0,0,0,3302,3290,1,0,0,0,3302,3293,1,0,0,0,3302,3297,1,0,0,0,
	3303,289,1,0,0,0,3304,3307,5,147,0,0,3305,3307,1,0,0,0,3306,3304,1,0,0,
	0,3306,3305,1,0,0,0,3307,291,1,0,0,0,3308,3315,3,1342,671,0,3309,3310,5,
	12,0,0,3310,3315,3,1342,671,0,3311,3312,5,13,0,0,3312,3315,3,1342,671,0,
	3313,3315,3,1352,676,0,3314,3308,1,0,0,0,3314,3309,1,0,0,0,3314,3311,1,
	0,0,0,3314,3313,1,0,0,0,3315,293,1,0,0,0,3316,3321,3,292,146,0,3317,3318,
	5,6,0,0,3318,3320,3,292,146,0,3319,3317,1,0,0,0,3320,3323,1,0,0,0,3321,
	3319,1,0,0,0,3321,3322,1,0,0,0,3322,295,1,0,0,0,3323,3321,1,0,0,0,3324,
	3325,5,46,0,0,3325,3326,3,618,309,0,3326,3327,3,298,149,0,3327,3328,3,308,
	154,0,3328,3329,5,238,0,0,3329,3335,3,1328,664,0,3330,3331,5,215,0,0,3331,
	3332,3,300,150,0,3332,3333,3,302,151,0,3333,3334,3,306,153,0,3334,3336,
	1,0,0,0,3335,3330,1,0,0,0,3335,3336,1,0,0,0,3336,297,1,0,0,0,3337,3340,
	5,350,0,0,3338,3340,1,0,0,0,3339,3337,1,0,0,0,3339,3338,1,0,0,0,3340,299,
	1,0,0,0,3341,3343,3,1328,664,0,3342,3344,3,526,263,0,3343,3342,1,0,0,0,
	3343,3344,1,0,0,0,3344,301,1,0,0,0,3345,3346,5,230,0,0,3346,3349,3,300,
	150,0,3347,3349,1,0,0,0,3348,3345,1,0,0,0,3348,3347,1,0,0,0,3349,303,1,
	0,0,0,3350,3351,5,364,0,0,3351,3355,3,300,150,0,3352,3353,5,260,0,0,3353,
	3355,5,364,0,0,3354,3350,1,0,0,0,3354,3352,1,0,0,0,3355,305,1,0,0,0,3356,
	3359,3,304,152,0,3357,3359,1,0,0,0,3358,3356,1,0,0,0,3358,3357,1,0,0,0,
	3359,307,1,0,0,0,3360,3363,5,286,0,0,3361,3363,1,0,0,0,3362,3360,1,0,0,
	0,3362,3361,1,0,0,0,3363,309,1,0,0,0,3364,3365,5,46,0,0,3365,3366,5,342,
	0,0,3366,3367,3,1328,664,0,3367,3368,3,312,156,0,3368,3369,5,246,0,0,3369,
	3370,3,1346,673,0,3370,3371,3,118,59,0,3371,311,1,0,0,0,3372,3373,5,273,
	0,0,3373,3376,3,1356,678,0,3374,3376,1,0,0,0,3375,3372,1,0,0,0,3375,3374,
	1,0,0,0,3376,313,1,0,0,0,3377,3378,5,191,0,0,3378,3381,5,342,0,0,3379,3380,
	5,220,0,0,3380,3382,5,387,0,0,3381,3379,1,0,0,0,3381,3382,1,0,0,0,3382,
	3383,1,0,0,0,3383,3384,3,1328,664,0,3384,315,1,0,0,0,3385,3386,5,46,0,0,
	3386,3390,5,204,0,0,3387,3388,5,220,0,0,3388,3389,5,77,0,0,3389,3391,5,
	387,0,0,3390,3387,1,0,0,0,3390,3391,1,0,0,0,3391,3392,1,0,0,0,3392,3393,
	3,1328,664,0,3393,3394,3,16,8,0,3394,3395,3,318,159,0,3395,317,1,0,0,0,
	3396,3398,3,320,160,0,3397,3396,1,0,0,0,3398,3401,1,0,0,0,3399,3397,1,0,
	0,0,3399,3400,1,0,0,0,3400,319,1,0,0,0,3401,3399,1,0,0,0,3402,3403,5,314,
	0,0,3403,3410,3,1328,664,0,3404,3405,5,366,0,0,3405,3410,3,72,36,0,3406,
	3407,5,64,0,0,3407,3410,3,72,36,0,3408,3410,5,150,0,0,3409,3402,1,0,0,0,
	3409,3404,1,0,0,0,3409,3406,1,0,0,0,3409,3408,1,0,0,0,3410,321,1,0,0,0,
	3411,3412,5,138,0,0,3412,3413,5,204,0,0,3413,3414,3,1328,664,0,3414,3415,
	5,360,0,0,3415,3416,3,324,162,0,3416,323,1,0,0,0,3417,3419,3,326,163,0,
	3418,3417,1,0,0,0,3419,3422,1,0,0,0,3420,3418,1,0,0,0,3420,3421,1,0,0,0,
	3421,325,1,0,0,0,3422,3420,1,0,0,0,3423,3424,5,94,0,0,3424,3425,3,72,36,
	0,3425,327,1,0,0,0,3426,3427,5,138,0,0,3427,3428,5,204,0,0,3428,3429,3,
	1328,664,0,3429,3430,3,40,20,0,3430,3431,3,516,258,0,3431,3432,3,1328,664,
	0,3432,3531,1,0,0,0,3433,3434,5,138,0,0,3434,3435,5,204,0,0,3435,3436,3,
	1328,664,0,3436,3437,3,40,20,0,3437,3438,3,514,257,0,3438,3439,3,524,262,
	0,3439,3531,1,0,0,0,3440,3441,5,138,0,0,3441,3442,5,204,0,0,3442,3443,3,
	1328,664,0,3443,3444,3,40,20,0,3444,3445,5,136,0,0,3445,3446,3,650,325,
	0,3446,3531,1,0,0,0,3447,3448,5,138,0,0,3448,3449,5,204,0,0,3449,3450,3,
	1328,664,0,3450,3451,3,40,20,0,3451,3452,5,41,0,0,3452,3453,5,2,0,0,3453,
	3454,3,1108,554,0,3454,3455,5,36,0,0,3455,3456,3,1108,554,0,3456,3457,5,
	3,0,0,3457,3531,1,0,0,0,3458,3459,5,138,0,0,3459,3460,5,204,0,0,3460,3461,
	3,1328,664,0,3461,3462,3,40,20,0,3462,3463,5,189,0,0,3463,3464,3,1108,554,
	0,3464,3531,1,0,0,0,3465,3466,5,138,0,0,3466,3467,5,204,0,0,3467,3468,3,
	1328,664,0,3468,3469,3,40,20,0,3469,3470,5,211,0,0,3470,3471,3,626,313,
	0,3471,3531,1,0,0,0,3472,3473,5,138,0,0,3473,3474,5,204,0,0,3474,3475,3,
	1328,664,0,3475,3476,3,40,20,0,3476,3477,5,269,0,0,3477,3478,3,688,344,
	0,3478,3531,1,0,0,0,3479,3480,5,138,0,0,3480,3481,5,204,0,0,3481,3482,3,
	1328,664,0,3482,3483,3,40,20,0,3483,3484,5,269,0,0,3484,3485,5,156,0,0,
	3485,3486,3,524,262,0,3486,3487,5,100,0,0,3487,3488,3,1328,664,0,3488,3531,
	1,0,0,0,3489,3490,5,138,0,0,3490,3491,5,204,0,0,3491,3492,3,1328,664,0,
	3492,3493,3,40,20,0,3493,3494,5,269,0,0,3494,3495,5,206,0,0,3495,3496,3,
	524,262,0,3496,3497,5,100,0,0,3497,3498,3,1328,664,0,3498,3531,1,0,0,0,
	3499,3500,5,138,0,0,3500,3501,5,204,0,0,3501,3502,3,1328,664,0,3502,3503,
	3,40,20,0,3503,3504,5,287,0,0,3504,3505,3,626,313,0,3505,3531,1,0,0,0,3506,
	3507,5,138,0,0,3507,3508,5,204,0,0,3508,3509,3,1328,664,0,3509,3510,3,40,
	20,0,3510,3511,5,433,0,0,3511,3512,3,626,313,0,3512,3531,1,0,0,0,3513,3514,
	5,138,0,0,3514,3515,5,204,0,0,3515,3516,3,1328,664,0,3516,3517,3,40,20,
	0,3517,3518,5,434,0,0,3518,3519,5,62,0,0,3519,3520,3,1108,554,0,3520,3521,
	5,238,0,0,3521,3522,3,1328,664,0,3522,3531,1,0,0,0,3523,3524,5,138,0,0,
	3524,3525,5,204,0,0,3525,3526,3,1328,664,0,3526,3527,3,40,20,0,3527,3528,
	5,351,0,0,3528,3529,3,1108,554,0,3529,3531,1,0,0,0,3530,3426,1,0,0,0,3530,
	3433,1,0,0,0,3530,3440,1,0,0,0,3530,3447,1,0,0,0,3530,3458,1,0,0,0,3530,
	3465,1,0,0,0,3530,3472,1,0,0,0,3530,3479,1,0,0,0,3530,3489,1,0,0,0,3530,
	3499,1,0,0,0,3530,3506,1,0,0,0,3530,3513,1,0,0,0,3530,3523,1,0,0,0,3531,
	329,1,0,0,0,3532,3533,5,46,0,0,3533,3534,5,63,0,0,3534,3535,5,174,0,0,3535,
	3536,5,372,0,0,3536,3537,3,1328,664,0,3537,3538,3,336,168,0,3538,3539,3,
	340,170,0,3539,331,1,0,0,0,3540,3541,5,215,0,0,3541,3549,3,300,150,0,3542,
	3543,5,260,0,0,3543,3549,5,215,0,0,3544,3545,5,364,0,0,3545,3549,3,300,
	150,0,3546,3547,5,260,0,0,3547,3549,5,364,0,0,3548,3540,1,0,0,0,3548,3542,
	1,0,0,0,3548,3544,1,0,0,0,3548,3546,1,0,0,0,3549,333,1,0,0,0,3550,3552,
	3,332,166,0,3551,3550,1,0,0,0,3552,3553,1,0,0,0,3553,3551,1,0,0,0,3553,
	3554,1,0,0,0,3554,335,1,0,0,0,3555,3558,3,334,167,0,3556,3558,1,0,0,0,3557,
	3555,1,0,0,0,3557,3556,1,0,0,0,3558,337,1,0,0,0,3559,3560,5,138,0,0,3560,
	3561,5,63,0,0,3561,3562,5,174,0,0,3562,3563,5,372,0,0,3563,3564,3,1328,
	664,0,3564,3565,3,336,168,0,3565,3566,3,344,172,0,3566,3575,1,0,0,0,3567,
	3568,5,138,0,0,3568,3569,5,63,0,0,3569,3570,5,174,0,0,3570,3571,5,372,0,
	0,3571,3572,3,1328,664,0,3572,3573,3,334,167,0,3573,3575,1,0,0,0,3574,3559,
	1,0,0,0,3574,3567,1,0,0,0,3575,339,1,0,0,0,3576,3577,5,271,0,0,3577,3578,
	5,2,0,0,3578,3579,3,342,171,0,3579,3580,5,3,0,0,3580,3583,1,0,0,0,3581,
	3583,1,0,0,0,3582,3576,1,0,0,0,3582,3581,1,0,0,0,3583,341,1,0,0,0,3584,
	3589,3,350,175,0,3585,3586,5,6,0,0,3586,3588,3,350,175,0,3587,3585,1,0,
	0,0,3588,3591,1,0,0,0,3589,3587,1,0,0,0,3589,3590,1,0,0,0,3590,343,1,0,
	0,0,3591,3589,1,0,0,0,3592,3593,5,271,0,0,3593,3594,5,2,0,0,3594,3595,3,
	346,173,0,3595,3596,5,3,0,0,3596,345,1,0,0,0,3597,3602,3,348,174,0,3598,
	3599,5,6,0,0,3599,3601,3,348,174,0,3600,3598,1,0,0,0,3601,3604,1,0,0,0,
	3602,3600,1,0,0,0,3602,3603,1,0,0,0,3603,347,1,0,0,0,3604,3602,1,0,0,0,
	3605,3613,3,350,175,0,3606,3607,5,324,0,0,3607,3613,3,350,175,0,3608,3609,
	5,133,0,0,3609,3613,3,350,175,0,3610,3611,5,191,0,0,3611,3613,3,352,176,
	0,3612,3605,1,0,0,0,3612,3606,1,0,0,0,3612,3608,1,0,0,0,3612,3610,1,0,0,
	0,3613,349,1,0,0,0,3614,3615,3,352,176,0,3615,3616,3,354,177,0,3616,351,
	1,0,0,0,3617,3618,3,1366,683,0,3618,353,1,0,0,0,3619,3620,3,1346,673,0,
	3620,355,1,0,0,0,3621,3622,5,46,0,0,3622,3623,5,322,0,0,3623,3624,3,1328,
	664,0,3624,3625,3,358,179,0,3625,3626,3,362,181,0,3626,3627,5,63,0,0,3627,
	3628,5,174,0,0,3628,3629,5,372,0,0,3629,3630,3,1328,664,0,3630,3631,3,340,
	170,0,3631,3647,1,0,0,0,3632,3633,5,46,0,0,3633,3634,5,322,0,0,3634,3635,
	5,220,0,0,3635,3636,5,77,0,0,3636,3637,5,387,0,0,3637,3638,3,1328,664,0,
	3638,3639,3,358,179,0,3639,3640,3,362,181,0,3640,3641,5,63,0,0,3641,3642,
	5,174,0,0,3642,3643,5,372,0,0,3643,3644,3,1328,664,0,3644,3645,3,340,170,
	0,3645,3647,1,0,0,0,3646,3621,1,0,0,0,3646,3632,1,0,0,0,3647,357,1,0,0,
	0,3648,3649,5,351,0,0,3649,3652,3,1346,673,0,3650,3652,1,0,0,0,3651,3648,
	1,0,0,0,3651,3650,1,0,0,0,3652,359,1,0,0,0,3653,3656,5,366,0,0,3654,3657,
	3,1346,673,0,3655,3657,5,78,0,0,3656,3654,1,0,0,0,3656,3655,1,0,0,0,3657,
	361,1,0,0,0,3658,3661,3,360,180,0,3659,3661,1,0,0,0,3660,3658,1,0,0,0,3660,
	3659,1,0,0,0,3661,363,1,0,0,0,3662,3663,5,138,0,0,3663,3664,5,322,0,0,3664,
	3670,3,1328,664,0,3665,3671,3,344,172,0,3666,3668,3,360,180,0,3667,3669,
	3,344,172,0,3668,3667,1,0,0,0,3668,3669,1,0,0,0,3669,3671,1,0,0,0,3670,
	3665,1,0,0,0,3670,3666,1,0,0,0,3671,365,1,0,0,0,3672,3673,5,46,0,0,3673,
	3674,5,63,0,0,3674,3675,5,92,0,0,3675,3676,3,1324,662,0,3676,3677,5,2,0,
	0,3677,3678,3,176,88,0,3678,3679,5,3,0,0,3679,3680,3,238,119,0,3680,3681,
	5,322,0,0,3681,3682,3,1328,664,0,3682,3683,3,340,170,0,3683,3729,1,0,0,
	0,3684,3685,5,46,0,0,3685,3686,5,63,0,0,3686,3687,5,92,0,0,3687,3688,5,
	220,0,0,3688,3689,5,77,0,0,3689,3690,5,387,0,0,3690,3691,3,1324,662,0,3691,
	3692,5,2,0,0,3692,3693,3,176,88,0,3693,3694,5,3,0,0,3694,3695,3,238,119,
	0,3695,3696,5,322,0,0,3696,3697,3,1328,664,0,3697,3698,3,340,170,0,3698,
	3729,1,0,0,0,3699,3700,5,46,0,0,3700,3701,5,63,0,0,3701,3702,5,92,0,0,3702,
	3703,3,1324,662,0,3703,3704,5,276,0,0,3704,3705,5,266,0,0,3705,3706,3,1324,
	662,0,3706,3707,3,178,89,0,3707,3708,3,128,64,0,3708,3709,5,322,0,0,3709,
	3710,3,1328,664,0,3710,3711,3,340,170,0,3711,3729,1,0,0,0,3712,3713,5,46,
	0,0,3713,3714,5,63,0,0,3714,3715,5,92,0,0,3715,3716,5,220,0,0,3716,3717,
	5,77,0,0,3717,3718,5,387,0,0,3718,3719,3,1324,662,0,3719,3720,5,276,0,0,
	3720,3721,5,266,0,0,3721,3722,3,1324,662,0,3722,3723,3,178,89,0,3723,3724,
	3,128,64,0,3724,3725,5,322,0,0,3725,3726,3,1328,664,0,3726,3727,3,340,170,
	0,3727,3729,1,0,0,0,3728,3672,1,0,0,0,3728,3684,1,0,0,0,3728,3699,1,0,0,
	0,3728,3712,1,0,0,0,3729,367,1,0,0,0,3730,3731,5,435,0,0,3731,3732,5,63,
	0,0,3732,3733,5,314,0,0,3733,3734,3,1328,664,0,3734,3735,3,372,186,0,3735,
	3736,5,64,0,0,3736,3737,5,322,0,0,3737,3738,3,1328,664,0,3738,3739,5,71,
	0,0,3739,3740,3,1328,664,0,3740,3741,3,340,170,0,3741,369,1,0,0,0,3742,
	3743,5,74,0,0,3743,3746,5,94,0,0,3744,3746,5,59,0,0,3745,3742,1,0,0,0,3745,
	3744,1,0,0,0,3746,371,1,0,0,0,3747,3748,3,370,185,0,3748,3749,5,2,0,0,3749,
	3750,3,1066,533,0,3750,3751,5,3,0,0,3751,3754,1,0,0,0,3752,3754,1,0,0,0,
	3753,3747,1,0,0,0,3753,3752,1,0,0,0,3754,373,1,0,0,0,3755,3756,5,46,0,0,
	3756,3757,5,99,0,0,3757,3758,5,248,0,0,3758,3759,5,62,0,0,3759,3760,3,376,
	188,0,3760,3761,5,322,0,0,3761,3762,3,1328,664,0,3762,3763,3,340,170,0,
	3763,3777,1,0,0,0,3764,3765,5,46,0,0,3765,3766,5,99,0,0,3766,3767,5,248,
	0,0,3767,3768,5,220,0,0,3768,3769,5,77,0,0,3769,3770,5,387,0,0,3770,3771,
	5,62,0,0,3771,3772,3,376,188,0,3772,3773,5,322,0,0,3773,3774,3,1328,664,
	0,3774,3775,3,340,170,0,3775,3777,1,0,0,0,3776,3755,1,0,0,0,3776,3764,1,
	0,0,0,3777,375,1,0,0,0,3778,3781,3,1356,678,0,3779,3781,5,99,0,0,3780,3778,
	1,0,0,0,3780,3779,1,0,0,0,3781,377,1,0,0,0,3782,3783,5,191,0,0,3783,3784,
	5,99,0,0,3784,3785,5,248,0,0,3785,3786,5,62,0,0,3786,3787,3,376,188,0,3787,
	3788,5,322,0,0,3788,3789,3,1328,664,0,3789,3801,1,0,0,0,3790,3791,5,191,
	0,0,3791,3792,5,99,0,0,3792,3793,5,248,0,0,3793,3794,5,220,0,0,3794,3795,
	5,387,0,0,3795,3796,5,62,0,0,3796,3797,3,376,188,0,3797,3798,5,322,0,0,
	3798,3799,3,1328,664,0,3799,3801,1,0,0,0,3800,3782,1,0,0,0,3800,3790,1,
	0,0,0,3801,379,1,0,0,0,3802,3803,5,138,0,0,3803,3804,5,99,0,0,3804,3805,
	5,248,0,0,3805,3806,5,62,0,0,3806,3807,3,376,188,0,3807,3808,5,322,0,0,
	3808,3809,3,1328,664,0,3809,3810,3,344,172,0,3810,381,1,0,0,0,3811,3812,
	5,46,0,0,3812,3813,5,436,0,0,3813,3814,3,1328,664,0,3814,3815,5,80,0,0,
	3815,3816,3,1324,662,0,3816,3817,3,394,197,0,3817,3818,3,396,198,0,3818,
	3819,3,390,195,0,3819,3820,3,386,193,0,3820,3821,3,388,194,0,3821,383,1,
	0,0,0,3822,3823,5,138,0,0,3823,3824,5,436,0,0,3824,3825,3,1328,664,0,3825,
	3826,5,80,0,0,3826,3827,3,1324,662,0,3827,3828,3,392,196,0,3828,3829,3,
	386,193,0,3829,3830,3,388,194,0,3830,385,1,0,0,0,3831,3832,5,100,0,0,3832,
	3833,5,2,0,0,3833,3834,3,1152,576,0,3834,3835,5,3,0,0,3835,3838,1,0,0,0,
	3836,3838,1,0,0,0,3837,3831,1,0,0,0,3837,3836,1,0,0,0,3838,387,1,0,0,0,
	3839,3840,5,105,0,0,3840,3841,5,42,0,0,3841,3842,5,2,0,0,3842,3843,3,1152,
	576,0,3843,3844,5,3,0,0,3844,3847,1,0,0,0,3845,3847,1,0,0,0,3846,3839,1,
	0,0,0,3846,3845,1,0,0,0,3847,389,1,0,0,0,3848,3849,5,94,0,0,3849,3852,3,
	1358,679,0,3850,3852,1,0,0,0,3851,3848,1,0,0,0,3851,3850,1,0,0,0,3852,391,
	1,0,0,0,3853,3854,5,94,0,0,3854,3857,3,1358,679,0,3855,3857,1,0,0,0,3856,
	3853,1,0,0,0,3856,3855,1,0,0,0,3857,393,1,0,0,0,3858,3859,5,36,0,0,3859,
	3862,3,1368,684,0,3860,3862,1,0,0,0,3861,3858,1,0,0,0,3861,3860,1,0,0,0,
	3862,395,1,0,0,0,3863,3864,5,62,0,0,3864,3867,3,398,199,0,3865,3867,1,0,
	0,0,3866,3863,1,0,0,0,3866,3865,1,0,0,0,3867,397,1,0,0,0,3868,3869,7,17,
	0,0,3869,399,1,0,0,0,3870,3871,5,46,0,0,3871,3872,5,131,0,0,3872,3873,5,
	437,0,0,3873,3874,3,1328,664,0,3874,3875,5,351,0,0,3875,3876,3,402,201,
	0,3876,3877,5,215,0,0,3877,3878,3,300,150,0,3878,401,1,0,0,0,3879,3880,
	7,18,0,0,3880,403,1,0,0,0,3881,3882,5,46,0,0,3882,3883,5,348,0,0,3883,3884,
	3,1328,664,0,3884,3885,3,406,203,0,3885,3886,3,408,204,0,3886,3887,5,80,
	0,0,3887,3888,3,1324,662,0,3888,3889,3,412,206,0,3889,3890,3,424,212,0,
	3890,3891,3,430,215,0,3891,3892,5,202,0,0,3892,3893,3,432,216,0,3893,3894,
	3,1334,667,0,3894,3895,5,2,0,0,3895,3896,3,434,217,0,3896,3897,5,3,0,0,
	3897,3920,1,0,0,0,3898,3899,5,46,0,0,3899,3900,5,45,0,0,3900,3901,5,348,
	0,0,3901,3902,3,1328,664,0,3902,3903,5,135,0,0,3903,3904,3,408,204,0,3904,
	3905,5,80,0,0,3905,3906,3,1324,662,0,3906,3907,3,438,219,0,3907,3908,3,
	440,220,0,3908,3909,5,62,0,0,3909,3910,5,192,0,0,3910,3911,5,405,0,0,3911,
	3912,3,430,215,0,3912,3913,5,202,0,0,3913,3914,3,432,216,0,3914,3915,3,
	1334,667,0,3915,3916,5,2,0,0,3916,3917,3,434,217,0,3917,3918,5,3,0,0,3918,
	3920,1,0,0,0,3919,3881,1,0,0,0,3919,3898,1,0,0,0,3920,405,1,0,0,0,3921,
	3926,5,145,0,0,3922,3926,5,135,0,0,3923,3924,5,233,0,0,3924,3926,5,266,
	0,0,3925,3921,1,0,0,0,3925,3922,1,0,0,0,3925,3923,1,0,0,0,3926,407,1,0,
	0,0,3927,3932,3,410,205,0,3928,3929,5,82,0,0,3929,3931,3,410,205,0,3930,
	3928,1,0,0,0,3931,3934,1,0,0,0,3932,3930,1,0,0,0,3932,3933,1,0,0,0,3933,
	409,1,0,0,0,3934,3932,1,0,0,0,3935,3943,5,232,0,0,3936,3943,5,182,0,0,3937,
	3943,5,360,0,0,3938,3939,5,360,0,0,3939,3940,5,266,0,0,3940,3943,3,216,
	108,0,3941,3943,5,349,0,0,3942,3935,1,0,0,0,3942,3936,1,0,0,0,3942,3937,
	1,0,0,0,3942,3938,1,0,0,0,3942,3941,1,0,0,0,3943,411,1,0,0,0,3944,3945,
	5,438,0,0,3945,3948,3,414,207,0,3946,3948,1,0,0,0,3947,3944,1,0,0,0,3947,
	3946,1,0,0,0,3948,413,1,0,0,0,3949,3951,3,416,208,0,3950,3949,1,0,0,0,3951,
	3952,1,0,0,0,3952,3950,1,0,0,0,3952,3953,1,0,0,0,3953,415,1,0,0,0,3954,
	3955,3,418,209,0,3955,3956,3,420,210,0,3956,3957,3,834,417,0,3957,3958,
	3,422,211,0,3958,417,1,0,0,0,3959,3960,7,19,0,0,3960,419,1,0,0,0,3961,3962,
	7,20,0,0,3962,421,1,0,0,0,3963,3964,3,1360,680,0,3964,423,1,0,0,0,3965,
	3966,5,62,0,0,3966,3967,3,426,213,0,3967,3968,3,428,214,0,3968,3971,1,0,
	0,0,3969,3971,1,0,0,0,3970,3965,1,0,0,0,3970,3969,1,0,0,0,3971,425,1,0,
	0,0,3972,3975,5,192,0,0,3973,3975,1,0,0,0,3974,3972,1,0,0,0,3974,3973,1,
	0,0,0,3975,427,1,0,0,0,3976,3977,7,21,0,0,3977,429,1,0,0,0,3978,3979,5,
	102,0,0,3979,3980,5,2,0,0,3980,3981,3,1152,576,0,3981,3982,5,3,0,0,3982,
	3985,1,0,0,0,3983,3985,1,0,0,0,3984,3978,1,0,0,0,3984,3983,1,0,0,0,3985,
	431,1,0,0,0,3986,3987,7,22,0,0,3987,433,1,0,0,0,3988,3991,3,436,218,0,3989,
	3991,1,0,0,0,3990,3988,1,0,0,0,3990,3989,1,0,0,0,3991,3996,1,0,0,0,3992,
	3993,5,6,0,0,3993,3995,3,436,218,0,3994,3992,1,0,0,0,3995,3998,1,0,0,0,
	3996,3994,1,0,0,0,3996,3997,1,0,0,0,3997,435,1,0,0,0,3998,3996,1,0,0,0,
	3999,4004,3,1344,672,0,4000,4004,3,1342,671,0,4001,4004,3,1346,673,0,4002,
	4004,3,1366,683,0,4003,3999,1,0,0,0,4003,4000,1,0,0,0,4003,4001,1,0,0,0,
	4003,4002,1,0,0,0,4004,437,1,0,0,0,4005,4006,5,64,0,0,4006,4009,3,1324,
	662,0,4007,4009,1,0,0,0,4008,4005,1,0,0,0,4008,4007,1,0,0,0,4009,439,1,
	0,0,0,4010,4012,3,442,221,0,4011,4010,1,0,0,0,4012,4015,1,0,0,0,4013,4011,
	1,0,0,0,4013,4014,1,0,0,0,4014,441,1,0,0,0,4015,4013,1,0,0,0,4016,4017,
	5,77,0,0,4017,4028,5,54,0,0,4018,4028,5,54,0,0,4019,4020,5,69,0,0,4020,
	4028,5,221,0,0,4021,4022,5,69,0,0,4022,4028,5,180,0,0,4023,4024,5,77,0,
	0,4024,4028,5,362,0,0,4025,4026,5,260,0,0,4026,4028,5,228,0,0,4027,4016,
	1,0,0,0,4027,4018,1,0,0,0,4027,4019,1,0,0,0,4027,4021,1,0,0,0,4027,4023,
	1,0,0,0,4027,4025,1,0,0,0,4028,443,1,0,0,0,4029,4030,5,46,0,0,4030,4031,
	5,198,0,0,4031,4032,5,348,0,0,4032,4033,3,1328,664,0,4033,4034,5,80,0,0,
	4034,4035,3,1366,683,0,4035,4036,5,202,0,0,4036,4037,3,432,216,0,4037,4038,
	3,1334,667,0,4038,4039,5,2,0,0,4039,4040,5,3,0,0,4040,4056,1,0,0,0,4041,
	4042,5,46,0,0,4042,4043,5,198,0,0,4043,4044,5,348,0,0,4044,4045,3,1328,
	664,0,4045,4046,5,80,0,0,4046,4047,3,1366,683,0,4047,4048,5,102,0,0,4048,
	4049,3,446,223,0,4049,4050,5,202,0,0,4050,4051,3,432,216,0,4051,4052,3,
	1334,667,0,4052,4053,5,2,0,0,4053,4054,5,3,0,0,4054,4056,1,0,0,0,4055,4029,
	1,0,0,0,4055,4041,1,0,0,0,4056,445,1,0,0,0,4057,4062,3,448,224,0,4058,4059,
	5,33,0,0,4059,4061,3,448,224,0,4060,4058,1,0,0,0,4061,4064,1,0,0,0,4062,
	4060,1,0,0,0,4062,4063,1,0,0,0,4063,447,1,0,0,0,4064,4062,1,0,0,0,4065,
	4066,3,1360,680,0,4066,4067,5,68,0,0,4067,4068,5,2,0,0,4068,4069,3,450,
	225,0,4069,4070,5,3,0,0,4070,449,1,0,0,0,4071,4076,3,1346,673,0,4072,4073,
	5,6,0,0,4073,4075,3,1346,673,0,4074,4072,1,0,0,0,4075,4078,1,0,0,0,4076,
	4074,1,0,0,0,4076,4077,1,0,0,0,4077,451,1,0,0,0,4078,4076,1,0,0,0,4079,
	4080,5,138,0,0,4080,4081,5,198,0,0,4081,4082,5,348,0,0,4082,4083,3,1328,
	664,0,4083,4084,3,454,227,0,4084,453,1,0,0,0,4085,4092,5,193,0,0,4086,4087,
	5,193,0,0,4087,4092,5,303,0,0,4088,4089,5,193,0,0,4089,4092,5,139,0,0,4090,
	4092,5,186,0,0,4091,4085,1,0,0,0,4091,4086,1,0,0,0,4091,4088,1,0,0,0,4091,
	4090,1,0,0,0,4092,455,1,0,0,0,4093,4094,5,46,0,0,4094,4095,5,140,0,0,4095,
	4096,3,524,262,0,4096,4097,5,42,0,0,4097,4098,5,2,0,0,4098,4099,3,1152,
	576,0,4099,4100,5,3,0,0,4100,4101,3,440,220,0,4101,457,1,0,0,0,4102,4103,
	5,46,0,0,4103,4104,3,618,309,0,4104,4105,5,136,0,0,4105,4106,3,1334,667,
	0,4106,4107,3,646,323,0,4107,4108,3,460,230,0,4108,4209,1,0,0,0,4109,4110,
	5,46,0,0,4110,4111,3,618,309,0,4111,4112,5,136,0,0,4112,4113,3,1334,667,
	0,4113,4114,3,468,234,0,4114,4209,1,0,0,0,4115,4116,5,46,0,0,4116,4117,
	5,269,0,0,4117,4118,3,684,342,0,4118,4119,3,460,230,0,4119,4209,1,0,0,0,
	4120,4121,5,46,0,0,4121,4122,5,351,0,0,4122,4123,3,524,262,0,4123,4124,
	3,460,230,0,4124,4209,1,0,0,0,4125,4126,5,46,0,0,4126,4127,5,351,0,0,4127,
	4209,3,524,262,0,4128,4129,5,46,0,0,4129,4130,5,351,0,0,4130,4131,3,524,
	262,0,4131,4132,5,36,0,0,4132,4133,5,2,0,0,4133,4134,3,1088,544,0,4134,
	4135,5,3,0,0,4135,4209,1,0,0,0,4136,4137,5,46,0,0,4137,4138,5,351,0,0,4138,
	4139,3,524,262,0,4139,4140,5,36,0,0,4140,4141,5,196,0,0,4141,4142,5,2,0,
	0,4142,4143,3,474,237,0,4143,4144,5,3,0,0,4144,4209,1,0,0,0,4145,4146,5,
	46,0,0,4146,4147,5,351,0,0,4147,4148,3,524,262,0,4148,4149,5,36,0,0,4149,
	4150,5,290,0,0,4150,4151,3,460,230,0,4151,4209,1,0,0,0,4152,4153,5,46,0,
	0,4153,4154,5,346,0,0,4154,4155,5,316,0,0,4155,4156,5,274,0,0,4156,4157,
	3,524,262,0,4157,4158,3,460,230,0,4158,4209,1,0,0,0,4159,4160,5,46,0,0,
	4160,4161,5,346,0,0,4161,4162,5,316,0,0,4162,4163,5,185,0,0,4163,4164,3,
	524,262,0,4164,4165,3,460,230,0,4165,4209,1,0,0,0,4166,4167,5,46,0,0,4167,
	4168,5,346,0,0,4168,4169,5,316,0,0,4169,4170,5,344,0,0,4170,4171,3,524,
	262,0,4171,4172,3,460,230,0,4172,4209,1,0,0,0,4173,4174,5,46,0,0,4174,4175,
	5,346,0,0,4175,4176,5,316,0,0,4176,4177,5,163,0,0,4177,4178,3,524,262,0,
	4178,4179,3,460,230,0,4179,4209,1,0,0,0,4180,4181,5,46,0,0,4181,4182,5,
	108,0,0,4182,4183,3,524,262,0,4183,4184,3,460,230,0,4184,4209,1,0,0,0,4185,
	4186,5,46,0,0,4186,4187,5,108,0,0,4187,4188,5,220,0,0,4188,4189,5,77,0,
	0,4189,4190,5,387,0,0,4190,4191,3,524,262,0,4191,4192,3,460,230,0,4192,
	4209,1,0,0,0,4193,4194,5,46,0,0,4194,4195,5,108,0,0,4195,4196,3,524,262,
	0,4196,4197,5,64,0,0,4197,4198,3,524,262,0,4198,4209,1,0,0,0,4199,4200,
	5,46,0,0,4200,4201,5,108,0,0,4201,4202,5,220,0,0,4202,4203,5,77,0,0,4203,
	4204,5,387,0,0,4204,4205,3,524,262,0,4205,4206,5,64,0,0,4206,4207,3,524,
	262,0,4207,4209,1,0,0,0,4208,4102,1,0,0,0,4208,4109,1,0,0,0,4208,4115,1,
	0,0,0,4208,4120,1,0,0,0,4208,4125,1,0,0,0,4208,4128,1,0,0,0,4208,4136,1,
	0,0,0,4208,4145,1,0,0,0,4208,4152,1,0,0,0,4208,4159,1,0,0,0,4208,4166,1,
	0,0,0,4208,4173,1,0,0,0,4208,4180,1,0,0,0,4208,4185,1,0,0,0,4208,4193,1,
	0,0,0,4208,4199,1,0,0,0,4209,459,1,0,0,0,4210,4211,5,2,0,0,4211,4212,3,
	462,231,0,4212,4213,5,3,0,0,4213,461,1,0,0,0,4214,4219,3,464,232,0,4215,
	4216,5,6,0,0,4216,4218,3,464,232,0,4217,4215,1,0,0,0,4218,4221,1,0,0,0,
	4219,4217,1,0,0,0,4219,4220,1,0,0,0,4220,463,1,0,0,0,4221,4219,1,0,0,0,
	4222,4225,3,1366,683,0,4223,4224,5,10,0,0,4224,4226,3,466,233,0,4225,4223,
	1,0,0,0,4225,4226,1,0,0,0,4226,465,1,0,0,0,4227,4234,3,640,320,0,4228,4234,
	3,1378,689,0,4229,4234,3,1264,632,0,4230,4234,3,292,146,0,4231,4234,3,1346,
	673,0,4232,4234,5,398,0,0,4233,4227,1,0,0,0,4233,4228,1,0,0,0,4233,4229,
	1,0,0,0,4233,4230,1,0,0,0,4233,4231,1,0,0,0,4233,4232,1,0,0,0,4234,467,
	1,0,0,0,4235,4236,5,2,0,0,4236,4237,3,470,235,0,4237,4238,5,3,0,0,4238,
	469,1,0,0,0,4239,4244,3,472,236,0,4240,4241,5,6,0,0,4241,4243,3,472,236,
	0,4242,4240,1,0,0,0,4243,4246,1,0,0,0,4244,4242,1,0,0,0,4244,4245,1,0,0,
	0,4245,471,1,0,0,0,4246,4244,1,0,0,0,4247,4248,3,1368,684,0,4248,4249,5,
	10,0,0,4249,4250,3,466,233,0,4250,473,1,0,0,0,4251,4254,3,476,238,0,4252,
	4254,1,0,0,0,4253,4251,1,0,0,0,4253,4252,1,0,0,0,4254,475,1,0,0,0,4255,
	4260,3,1346,673,0,4256,4257,5,6,0,0,4257,4259,3,1346,673,0,4258,4256,1,
	0,0,0,4259,4262,1,0,0,0,4260,4258,1,0,0,0,4260,4261,1,0,0,0,4261,477,1,
	0,0,0,4262,4260,1,0,0,0,4263,4264,5,138,0,0,4264,4265,5,351,0,0,4265,4266,
	3,524,262,0,4266,4267,5,133,0,0,4267,4268,5,441,0,0,4268,4269,3,480,240,
	0,4269,4270,3,1346,673,0,4270,4301,1,0,0,0,4271,4272,5,138,0,0,4272,4273,
	5,351,0,0,4273,4274,3,524,262,0,4274,4275,5,133,0,0,4275,4276,5,441,0,0,
	4276,4277,3,480,240,0,4277,4278,3,1346,673,0,4278,4279,5,145,0,0,4279,4280,
	3,1346,673,0,4280,4301,1,0,0,0,4281,4282,5,138,0,0,4282,4283,5,351,0,0,
	4283,4284,3,524,262,0,4284,4285,5,133,0,0,4285,4286,5,441,0,0,4286,4287,
	3,480,240,0,4287,4288,3,1346,673,0,4288,4289,5,135,0,0,4289,4290,3,1346,
	673,0,4290,4301,1,0,0,0,4291,4292,5,138,0,0,4292,4293,5,351,0,0,4293,4294,
	3,524,262,0,4294,4295,5,300,0,0,4295,4296,5,441,0,0,4296,4297,3,1346,673,
	0,4297,4298,5,94,0,0,4298,4299,3,1346,673,0,4299,4301,1,0,0,0,4300,4263,
	1,0,0,0,4300,4271,1,0,0,0,4300,4281,1,0,0,0,4300,4291,1,0,0,0,4301,479,
	1,0,0,0,4302,4303,5,220,0,0,4303,4304,5,77,0,0,4304,4307,5,387,0,0,4305,
	4307,1,0,0,0,4306,4302,1,0,0,0,4306,4305,1,0,0,0,4307,481,1,0,0,0,4308,
	4309,5,46,0,0,4309,4310,5,269,0,0,4310,4311,5,156,0,0,4311,4312,3,524,262,
	0,4312,4313,3,488,244,0,4313,4314,5,62,0,0,4314,4315,5,351,0,0,4315,4316,
	3,1108,554,0,4316,4317,5,100,0,0,4317,4318,3,1328,664,0,4318,4319,3,490,
	245,0,4319,4320,5,36,0,0,4320,4321,3,484,242,0,4321,483,1,0,0,0,4322,4327,
	3,486,243,0,4323,4324,5,6,0,0,4324,4326,3,486,243,0,4325,4323,1,0,0,0,4326,
	4329,1,0,0,0,4327,4325,1,0,0,0,4327,4328,1,0,0,0,4328,485,1,0,0,0,4329,
	4327,1,0,0,0,4330,4331,5,269,0,0,4331,4332,3,1344,672,0,4332,4333,3,684,
	342,0,4333,4334,3,492,246,0,4334,4335,3,494,247,0,4335,4356,1,0,0,0,4336,
	4337,5,269,0,0,4337,4338,3,1344,672,0,4338,4339,3,688,344,0,4339,4340,3,
	492,246,0,4340,4341,3,494,247,0,4341,4356,1,0,0,0,4342,4343,5,211,0,0,4343,
	4344,3,1344,672,0,4344,4345,3,626,313,0,4345,4356,1,0,0,0,4346,4347,5,211,
	0,0,4347,4348,3,1344,672,0,4348,4349,5,2,0,0,4349,4350,3,1274,637,0,4350,
	4351,5,3,0,0,4351,4352,3,626,313,0,4352,4356,1,0,0,0,4353,4354,5,336,0,
	0,4354,4356,3,1108,554,0,4355,4330,1,0,0,0,4355,4336,1,0,0,0,4355,4342,
	1,0,0,0,4355,4346,1,0,0,0,4355,4353,1,0,0,0,4356,487,1,0,0,0,4357,4360,
	5,53,0,0,4358,4360,1,0,0,0,4359,4357,1,0,0,0,4359,4358,1,0,0,0,4360,489,
	1,0,0,0,4361,4362,5,206,0,0,4362,4365,3,524,262,0,4363,4365,1,0,0,0,4364,
	4361,1,0,0,0,4364,4363,1,0,0,0,4365,491,1,0,0,0,4366,4367,5,62,0,0,4367,
	4374,5,316,0,0,4368,4369,5,62,0,0,4369,4370,5,83,0,0,4370,4371,5,147,0,
	0,4371,4374,3,524,262,0,4372,4374,1,0,0,0,4373,4366,1,0,0,0,4373,4368,1,
	0,0,0,4373,4372,1,0,0,0,4374,493,1,0,0,0,4375,4378,5,293,0,0,4376,4378,
	1,0,0,0,4377,4375,1,0,0,0,4377,4376,1,0,0,0,4378,495,1,0,0,0,4379,4380,
	5,46,0,0,4380,4381,5,269,0,0,4381,4382,5,206,0,0,4382,4383,3,524,262,0,
	4383,4384,5,100,0,0,4384,4385,3,1328,664,0,4385,497,1,0,0,0,4386,4387,5,
	138,0,0,4387,4388,5,269,0,0,4388,4389,5,206,0,0,4389,4390,3,524,262,0,4390,
	4391,5,100,0,0,4391,4392,3,1328,664,0,4392,4393,5,133,0,0,4393,4394,3,484,
	242,0,4394,4405,1,0,0,0,4395,4396,5,138,0,0,4396,4397,5,269,0,0,4397,4398,
	5,206,0,0,4398,4399,3,524,262,0,4399,4400,5,100,0,0,4400,4401,3,1328,664,
	0,4401,4402,5,191,0,0,4402,4403,3,500,250,0,4403,4405,1,0,0,0,4404,4386,
	1,0,0,0,4404,4395,1,0,0,0,4405,499,1,0,0,0,4406,4411,3,502,251,0,4407,4408,
	5,6,0,0,4408,4410,3,502,251,0,4409,4407,1,0,0,0,4410,4413,1,0,0,0,4411,
	4409,1,0,0,0,4411,4412,1,0,0,0,4412,501,1,0,0,0,4413,4411,1,0,0,0,4414,
	4415,5,269,0,0,4415,4416,3,1344,672,0,4416,4417,5,2,0,0,4417,4418,3,1274,
	637,0,4418,4419,5,3,0,0,4419,4427,1,0,0,0,4420,4421,5,211,0,0,4421,4422,
	3,1344,672,0,4422,4423,5,2,0,0,4423,4424,3,1274,637,0,4424,4425,5,3,0,0,
	4425,4427,1,0,0,0,4426,4414,1,0,0,0,4426,4420,1,0,0,0,4427,503,1,0,0,0,
	4428,4429,5,191,0,0,4429,4430,5,269,0,0,4430,4431,5,156,0,0,4431,4432,3,
	524,262,0,4432,4433,5,100,0,0,4433,4434,3,1328,664,0,4434,4435,3,108,54,
	0,4435,4447,1,0,0,0,4436,4437,5,191,0,0,4437,4438,5,269,0,0,4438,4439,5,
	156,0,0,4439,4440,5,220,0,0,4440,4441,5,387,0,0,4441,4442,3,524,262,0,4442,
	4443,5,100,0,0,4443,4444,3,1328,664,0,4444,4445,3,108,54,0,4445,4447,1,
	0,0,0,4446,4428,1,0,0,0,4446,4436,1,0,0,0,4447,505,1,0,0,0,4448,4449,5,
	191,0,0,4449,4450,5,269,0,0,4450,4451,5,206,0,0,4451,4452,3,524,262,0,4452,
	4453,5,100,0,0,4453,4454,3,1328,664,0,4454,4455,3,108,54,0,4455,4467,1,
	0,0,0,4456,4457,5,191,0,0,4457,4458,5,269,0,0,4458,4459,5,206,0,0,4459,
	4460,5,220,0,0,4460,4461,5,387,0,0,4461,4462,3,524,262,0,4462,4463,5,100,
	0,0,4463,4464,3,1328,664,0,4464,4465,3,108,54,0,4465,4467,1,0,0,0,4466,
	4448,1,0,0,0,4466,4456,1,0,0,0,4467,507,1,0,0,0,4468,4469,5,191,0,0,4469,
	4470,5,272,0,0,4470,4471,5,147,0,0,4471,4472,3,1358,679,0,4472,4473,3,108,
	54,0,4473,509,1,0,0,0,4474,4475,5,292,0,0,4475,4476,5,272,0,0,4476,4477,
	5,147,0,0,4477,4478,3,1358,679,0,4478,4479,5,94,0,0,4479,4480,3,1356,678,
	0,4480,511,1,0,0,0,4481,4482,5,191,0,0,4482,4483,3,514,257,0,4483,4484,
	5,220,0,0,4484,4485,5,387,0,0,4485,4486,3,522,261,0,4486,4487,3,108,54,
	0,4487,4560,1,0,0,0,4488,4489,5,191,0,0,4489,4490,3,514,257,0,4490,4491,
	3,522,261,0,4491,4492,3,108,54,0,4492,4560,1,0,0,0,4493,4494,5,191,0,0,
	4494,4495,3,518,259,0,4495,4496,5,220,0,0,4496,4497,5,387,0,0,4497,4498,
	3,1326,663,0,4498,4499,3,108,54,0,4499,4560,1,0,0,0,4500,4501,5,191,0,0,
	4501,4502,3,518,259,0,4502,4503,3,1326,663,0,4503,4504,3,108,54,0,4504,
	4560,1,0,0,0,4505,4506,5,191,0,0,4506,4507,3,520,260,0,4507,4508,3,1328,
	664,0,4508,4509,5,80,0,0,4509,4510,3,524,262,0,4510,4511,3,108,54,0,4511,
	4560,1,0,0,0,4512,4513,5,191,0,0,4513,4514,3,520,260,0,4514,4515,5,220,
	0,0,4515,4516,5,387,0,0,4516,4517,3,1328,664,0,4517,4518,5,80,0,0,4518,
	4519,3,524,262,0,4519,4520,3,108,54,0,4520,4560,1,0,0,0,4521,4522,5,191,
	0,0,4522,4523,5,351,0,0,4523,4524,3,528,264,0,4524,4525,3,108,54,0,4525,
	4560,1,0,0,0,4526,4527,5,191,0,0,4527,4528,5,351,0,0,4528,4529,5,220,0,
	0,4529,4530,5,387,0,0,4530,4531,3,528,264,0,4531,4532,3,108,54,0,4532,4560,
	1,0,0,0,4533,4534,5,191,0,0,4534,4535,5,189,0,0,4535,4536,3,528,264,0,4536,
	4537,3,108,54,0,4537,4560,1,0,0,0,4538,4539,5,191,0,0,4539,4540,5,189,0,
	0,4540,4541,5,220,0,0,4541,4542,5,387,0,0,4542,4543,3,528,264,0,4543,4544,
	3,108,54,0,4544,4560,1,0,0,0,4545,4546,5,191,0,0,4546,4547,5,226,0,0,4547,
	4548,5,109,0,0,4548,4549,3,522,261,0,4549,4550,3,108,54,0,4550,4560,1,0,
	0,0,4551,4552,5,191,0,0,4552,4553,5,226,0,0,4553,4554,5,109,0,0,4554,4555,
	5,220,0,0,4555,4556,5,387,0,0,4556,4557,3,522,261,0,4557,4558,3,108,54,
	0,4558,4560,1,0,0,0,4559,4481,1,0,0,0,4559,4488,1,0,0,0,4559,4493,1,0,0,
	0,4559,4500,1,0,0,0,4559,4505,1,0,0,0,4559,4512,1,0,0,0,4559,4521,1,0,0,
	0,4559,4526,1,0,0,0,4559,4533,1,0,0,0,4559,4538,1,0,0,0,4559,4545,1,0,0,
	0,4559,4551,1,0,0,0,4560,513,1,0,0,0,4561,4585,5,92,0,0,4562,4585,5,319,
	0,0,4563,4585,5,367,0,0,4564,4565,5,250,0,0,4565,4585,5,367,0,0,4566,4585,
	5,226,0,0,4567,4568,5,63,0,0,4568,4585,5,92,0,0,4569,4585,5,108,0,0,4570,
	4585,5,168,0,0,4571,4585,5,333,0,0,4572,4573,5,346,0,0,4573,4574,5,316,
	0,0,4574,4585,5,274,0,0,4575,4576,5,346,0,0,4576,4577,5,316,0,0,4577,4585,
	5,185,0,0,4578,4579,5,346,0,0,4579,4580,5,316,0,0,4580,4585,5,344,0,0,4581,
	4582,5,346,0,0,4582,4583,5,316,0,0,4583,4585,5,163,0,0,4584,4561,1,0,0,
	0,4584,4562,1,0,0,0,4584,4563,1,0,0,0,4584,4564,1,0,0,0,4584,4566,1,0,0,
	0,4584,4567,1,0,0,0,4584,4569,1,0,0,0,4584,4570,1,0,0,0,4584,4571,1,0,0,
	0,4584,4572,1,0,0,0,4584,4575,1,0,0,0,4584,4578,1,0,0,0,4584,4581,1,0,0,
	0,4585,515,1,0,0,0,4586,4592,3,518,259,0,4587,4592,5,175,0,0,4588,4592,
	5,309,0,0,4589,4592,5,442,0,0,4590,4592,5,342,0,0,4591,4586,1,0,0,0,4591,
	4587,1,0,0,0,4591,4588,1,0,0,0,4591,4589,1,0,0,0,4591,4590,1,0,0,0,4592,
	517,1,0,0,0,4593,4594,5,131,0,0,4594,4608,5,437,0,0,4595,4596,5,198,0,0,
	4596,4608,5,348,0,0,4597,4608,5,204,0,0,4598,4599,5,63,0,0,4599,4600,5,
	174,0,0,4600,4608,5,372,0,0,4601,4602,3,308,154,0,4602,4603,5,238,0,0,4603,
	4608,1,0,0,0,4604,4608,5,443,0,0,4605,4608,5,314,0,0,4606,4608,5,322,0,
	0,4607,4593,1,0,0,0,4607,4595,1,0,0,0,4607,4597,1,0,0,0,4607,4598,1,0,0,
	0,4607,4601,1,0,0,0,4607,4604,1,0,0,0,4607,4605,1,0,0,0,4607,4606,1,0,0,
	0,4608,519,1,0,0,0,4609,4610,7,23,0,0,4610,521,1,0,0,0,4611,4616,3,524,
	262,0,4612,4613,5,6,0,0,4613,4615,3,524,262,0,4614,4612,1,0,0,0,4615,4618,
	1,0,0,0,4616,4614,1,0,0,0,4616,4617,1,0,0,0,4617,523,1,0,0,0,4618,4616,
	1,0,0,0,4619,4621,3,1360,680,0,4620,4622,3,526,263,0,4621,4620,1,0,0,0,
	4621,4622,1,0,0,0,4622,525,1,0,0,0,4623,4624,5,11,0,0,4624,4626,3,1330,
	665,0,4625,4623,1,0,0,0,4626,4627,1,0,0,0,4627,4625,1,0,0,0,4627,4628,1,
	0,0,0,4628,527,1,0,0,0,4629,4634,3,1108,554,0,4630,4631,5,6,0,0,4631,4633,
	3,1108,554,0,4632,4630,1,0,0,0,4633,4636,1,0,0,0,4634,4632,1,0,0,0,4634,
	4635,1,0,0,0,4635,529,1,0,0,0,4636,4634,1,0,0,0,4637,4638,5,349,0,0,4638,
	4639,3,982,491,0,4639,4640,3,1066,533,0,4640,4641,3,532,266,0,4641,4642,
	3,108,54,0,4642,531,1,0,0,0,4643,4644,5,167,0,0,4644,4649,5,219,0,0,4645,
	4646,5,305,0,0,4646,4649,5,219,0,0,4647,4649,1,0,0,0,4648,4643,1,0,0,0,
	4648,4645,1,0,0,0,4648,4647,1,0,0,0,4649,533,1,0,0,0,4650,4651,5,159,0,
	0,4651,4652,5,80,0,0,4652,4653,3,514,257,0,4653,4654,3,524,262,0,4654,4655,
	5,116,0,0,4655,4656,3,536,268,0,4656,4798,1,0,0,0,4657,4658,5,159,0,0,4658,
	4659,5,80,0,0,4659,4660,5,44,0,0,4660,4661,3,524,262,0,4661,4662,5,116,
	0,0,4662,4663,3,536,268,0,4663,4798,1,0,0,0,4664,4665,5,159,0,0,4665,4666,
	5,80,0,0,4666,4667,3,516,258,0,4667,4668,3,1328,664,0,4668,4669,5,116,0,
	0,4669,4670,3,536,268,0,4670,4798,1,0,0,0,4671,4672,5,159,0,0,4672,4673,
	5,80,0,0,4673,4674,5,351,0,0,4674,4675,3,1108,554,0,4675,4676,5,116,0,0,
	4676,4677,3,536,268,0,4677,4798,1,0,0,0,4678,4679,5,159,0,0,4679,4680,5,
	80,0,0,4680,4681,5,189,0,0,4681,4682,3,1108,554,0,4682,4683,5,116,0,0,4683,
	4684,3,536,268,0,4684,4798,1,0,0,0,4685,4686,5,159,0,0,4686,4687,5,80,0,
	0,4687,4688,5,136,0,0,4688,4689,3,650,325,0,4689,4690,5,116,0,0,4690,4691,
	3,536,268,0,4691,4798,1,0,0,0,4692,4693,5,159,0,0,4693,4694,5,80,0,0,4694,
	4695,5,211,0,0,4695,4696,3,626,313,0,4696,4697,5,116,0,0,4697,4698,3,536,
	268,0,4698,4798,1,0,0,0,4699,4700,5,159,0,0,4700,4701,5,80,0,0,4701,4702,
	5,269,0,0,4702,4703,3,688,344,0,4703,4704,5,116,0,0,4704,4705,3,536,268,
	0,4705,4798,1,0,0,0,4706,4707,5,159,0,0,4707,4708,5,80,0,0,4708,4709,5,
	45,0,0,4709,4710,3,1328,664,0,4710,4711,5,80,0,0,4711,4712,3,524,262,0,
	4712,4713,5,116,0,0,4713,4714,3,536,268,0,4714,4798,1,0,0,0,4715,4716,5,
	159,0,0,4716,4717,5,80,0,0,4717,4718,5,45,0,0,4718,4719,3,1328,664,0,4719,
	4720,5,80,0,0,4720,4721,5,189,0,0,4721,4722,3,524,262,0,4722,4723,5,116,
	0,0,4723,4724,3,536,268,0,4724,4798,1,0,0,0,4725,4726,5,159,0,0,4726,4727,
	5,80,0,0,4727,4728,3,520,260,0,4728,4729,3,1328,664,0,4729,4730,5,80,0,
	0,4730,4731,3,524,262,0,4731,4732,5,116,0,0,4732,4733,3,536,268,0,4733,
	4798,1,0,0,0,4734,4735,5,159,0,0,4735,4736,5,80,0,0,4736,4737,5,287,0,0,
	4737,4738,3,626,313,0,4738,4739,5,116,0,0,4739,4740,3,536,268,0,4740,4798,
	1,0,0,0,4741,4742,5,159,0,0,4742,4743,5,80,0,0,4743,4744,5,433,0,0,4744,
	4745,3,626,313,0,4745,4746,5,116,0,0,4746,4747,3,536,268,0,4747,4798,1,
	0,0,0,4748,4749,5,159,0,0,4749,4750,5,80,0,0,4750,4751,5,434,0,0,4751,4752,
	5,62,0,0,4752,4753,3,1108,554,0,4753,4754,5,238,0,0,4754,4755,3,1328,664,
	0,4755,4756,5,116,0,0,4756,4757,3,536,268,0,4757,4798,1,0,0,0,4758,4759,
	5,159,0,0,4759,4760,5,80,0,0,4760,4761,5,269,0,0,4761,4762,5,156,0,0,4762,
	4763,3,524,262,0,4763,4764,5,100,0,0,4764,4765,3,1328,664,0,4765,4766,5,
	116,0,0,4766,4767,3,536,268,0,4767,4798,1,0,0,0,4768,4769,5,159,0,0,4769,
	4770,5,80,0,0,4770,4771,5,269,0,0,4771,4772,5,206,0,0,4772,4773,3,524,262,
	0,4773,4774,5,100,0,0,4774,4775,3,1328,664,0,4775,4776,5,116,0,0,4776,4777,
	3,536,268,0,4777,4798,1,0,0,0,4778,4779,5,159,0,0,4779,4780,5,80,0,0,4780,
	4781,5,239,0,0,4781,4782,5,265,0,0,4782,4783,3,292,146,0,4783,4784,5,116,
	0,0,4784,4785,3,536,268,0,4785,4798,1,0,0,0,4786,4787,5,159,0,0,4787,4788,
	5,80,0,0,4788,4789,5,41,0,0,4789,4790,5,2,0,0,4790,4791,3,1108,554,0,4791,
	4792,5,36,0,0,4792,4793,3,1108,554,0,4793,4794,5,3,0,0,4794,4795,5,116,
	0,0,4795,4796,3,536,268,0,4796,4798,1,0,0,0,4797,4650,1,0,0,0,4797,4657,
	1,0,0,0,4797,4664,1,0,0,0,4797,4671,1,0,0,0,4797,4678,1,0,0,0,4797,4685,
	1,0,0,0,4797,4692,1,0,0,0,4797,4699,1,0,0,0,4797,4706,1,0,0,0,4797,4715,
	1,0,0,0,4797,4725,1,0,0,0,4797,4734,1,0,0,0,4797,4741,1,0,0,0,4797,4748,
	1,0,0,0,4797,4758,1,0,0,0,4797,4768,1,0,0,0,4797,4778,1,0,0,0,4797,4786,
	1,0,0,0,4798,535,1,0,0,0,4799,4802,3,1346,673,0,4800,4802,5,78,0,0,4801,
	4799,1,0,0,0,4801,4800,1,0,0,0,4802,537,1,0,0,0,4803,4804,5,318,0,0,4804,
	4805,5,237,0,0,4805,4806,3,540,270,0,4806,4807,5,80,0,0,4807,4808,3,514,
	257,0,4808,4809,3,524,262,0,4809,4810,5,116,0,0,4810,4811,3,542,271,0,4811,
	4895,1,0,0,0,4812,4813,5,318,0,0,4813,4814,5,237,0,0,4814,4815,3,540,270,
	0,4815,4816,5,80,0,0,4816,4817,5,44,0,0,4817,4818,3,524,262,0,4818,4819,
	5,116,0,0,4819,4820,3,542,271,0,4820,4895,1,0,0,0,4821,4822,5,318,0,0,4822,
	4823,5,237,0,0,4823,4824,3,540,270,0,4824,4825,5,80,0,0,4825,4826,3,516,
	258,0,4826,4827,3,1328,664,0,4827,4828,5,116,0,0,4828,4829,3,542,271,0,
	4829,4895,1,0,0,0,4830,4831,5,318,0,0,4831,4832,5,237,0,0,4832,4833,3,540,
	270,0,4833,4834,5,80,0,0,4834,4835,5,351,0,0,4835,4836,3,1108,554,0,4836,
	4837,5,116,0,0,4837,4838,3,542,271,0,4838,4895,1,0,0,0,4839,4840,5,318,
	0,0,4840,4841,5,237,0,0,4841,4842,3,540,270,0,4842,4843,5,80,0,0,4843,4844,
	5,189,0,0,4844,4845,3,1108,554,0,4845,4846,5,116,0,0,4846,4847,3,542,271,
	0,4847,4895,1,0,0,0,4848,4849,5,318,0,0,4849,4850,5,237,0,0,4850,4851,3,
	540,270,0,4851,4852,5,80,0,0,4852,4853,5,136,0,0,4853,4854,3,650,325,0,
	4854,4855,5,116,0,0,4855,4856,3,542,271,0,4856,4895,1,0,0,0,4857,4858,5,
	318,0,0,4858,4859,5,237,0,0,4859,4860,3,540,270,0,4860,4861,5,80,0,0,4861,
	4862,5,211,0,0,4862,4863,3,626,313,0,4863,4864,5,116,0,0,4864,4865,3,542,
	271,0,4865,4895,1,0,0,0,4866,4867,5,318,0,0,4867,4868,5,237,0,0,4868,4869,
	3,540,270,0,4869,4870,5,80,0,0,4870,4871,5,239,0,0,4871,4872,5,265,0,0,
	4872,4873,3,292,146,0,4873,4874,5,116,0,0,4874,4875,3,542,271,0,4875,4895,
	1,0,0,0,4876,4877,5,318,0,0,4877,4878,5,237,0,0,4878,4879,3,540,270,0,4879,
	4880,5,80,0,0,4880,4881,5,287,0,0,4881,4882,3,626,313,0,4882,4883,5,116,
	0,0,4883,4884,3,542,271,0,4884,4895,1,0,0,0,4885,4886,5,318,0,0,4886,4887,
	5,237,0,0,4887,4888,3,540,270,0,4888,4889,5,80,0,0,4889,4890,5,433,0,0,
	4890,4891,3,626,313,0,4891,4892,5,116,0,0,4892,4893,3,542,271,0,4893,4895,
	1,0,0,0,4894,4803,1,0,0,0,4894,4812,1,0,0,0,4894,4821,1,0,0,0,4894,4830,
	1,0,0,0,4894,4839,1,0,0,0,4894,4848,1,0,0,0,4894,4857,1,0,0,0,4894,4866,
	1,0,0,0,4894,4876,1,0,0,0,4894,4885,1,0,0,0,4895,539,1,0,0,0,4896,4897,
	5,62,0,0,4897,4900,3,72,36,0,4898,4900,1,0,0,0,4899,4896,1,0,0,0,4899,4898,
	1,0,0,0,4900,541,1,0,0,0,4901,4904,3,1346,673,0,4902,4904,5,78,0,0,4903,
	4901,1,0,0,0,4903,4902,1,0,0,0,4904,543,1,0,0,0,4905,4906,5,61,0,0,4906,
	4910,3,546,273,0,4907,4908,5,256,0,0,4908,4910,3,546,273,0,4909,4905,1,
	0,0,0,4909,4907,1,0,0,0,4910,545,1,0,0,0,4911,4978,3,946,473,0,4912,4913,
	3,548,274,0,4913,4914,3,946,473,0,4914,4978,1,0,0,0,4915,4916,5,259,0,0,
	4916,4917,3,550,275,0,4917,4918,3,946,473,0,4918,4978,1,0,0,0,4919,4920,
	5,284,0,0,4920,4921,3,550,275,0,4921,4922,3,946,473,0,4922,4978,1,0,0,0,
	4923,4924,5,207,0,0,4924,4925,3,550,275,0,4925,4926,3,946,473,0,4926,4978,
	1,0,0,0,4927,4928,5,240,0,0,4928,4929,3,550,275,0,4929,4930,3,946,473,0,
	4930,4978,1,0,0,0,4931,4932,5,130,0,0,4932,4933,3,1352,676,0,4933,4934,
	3,550,275,0,4934,4935,3,946,473,0,4935,4978,1,0,0,0,4936,4937,5,298,0,0,
	4937,4938,3,1352,676,0,4938,4939,3,550,275,0,4939,4940,3,946,473,0,4940,
	4978,1,0,0,0,4941,4942,3,1352,676,0,4942,4943,3,550,275,0,4943,4944,3,946,
	473,0,4944,4978,1,0,0,0,4945,4946,5,30,0,0,4946,4947,3,550,275,0,4947,4948,
	3,946,473,0,4948,4978,1,0,0,0,4949,4950,5,210,0,0,4950,4951,3,550,275,0,
	4951,4952,3,946,473,0,4952,4978,1,0,0,0,4953,4954,5,210,0,0,4954,4955,3,
	1352,676,0,4955,4956,3,550,275,0,4956,4957,3,946,473,0,4957,4978,1,0,0,
	0,4958,4959,5,210,0,0,4959,4960,5,30,0,0,4960,4961,3,550,275,0,4961,4962,
	3,946,473,0,4962,4978,1,0,0,0,4963,4964,5,144,0,0,4964,4965,3,550,275,0,
	4965,4966,3,946,473,0,4966,4978,1,0,0,0,4967,4968,5,144,0,0,4968,4969,3,
	1352,676,0,4969,4970,3,550,275,0,4970,4971,3,946,473,0,4971,4978,1,0,0,
	0,4972,4973,5,144,0,0,4973,4974,5,30,0,0,4974,4975,3,550,275,0,4975,4976,
	3,946,473,0,4976,4978,1,0,0,0,4977,4911,1,0,0,0,4977,4912,1,0,0,0,4977,
	4915,1,0,0,0,4977,4919,1,0,0,0,4977,4923,1,0,0,0,4977,4927,1,0,0,0,4977,
	4931,1,0,0,0,4977,4936,1,0,0,0,4977,4941,1,0,0,0,4977,4945,1,0,0,0,4977,
	4949,1,0,0,0,4977,4953,1,0,0,0,4977,4958,1,0,0,0,4977,4963,1,0,0,0,4977,
	4967,1,0,0,0,4977,4972,1,0,0,0,4978,547,1,0,0,0,4979,4980,7,24,0,0,4980,
	549,1,0,0,0,4981,4984,3,548,274,0,4982,4984,1,0,0,0,4983,4981,1,0,0,0,4983,
	4982,1,0,0,0,4984,551,1,0,0,0,4985,4986,5,65,0,0,4986,4987,3,556,278,0,
	4987,4988,5,80,0,0,4988,4989,3,562,281,0,4989,4990,5,94,0,0,4990,4991,3,
	564,282,0,4991,4992,3,568,284,0,4992,553,1,0,0,0,4993,4994,5,308,0,0,4994,
	4995,3,556,278,0,4995,4996,5,80,0,0,4996,4997,3,562,281,0,4997,4998,5,64,
	0,0,4998,4999,3,564,282,0,4999,5000,3,108,54,0,5000,5013,1,0,0,0,5001,5002,
	5,308,0,0,5002,5003,5,65,0,0,5003,5004,5,270,0,0,5004,5005,5,62,0,0,5005,
	5006,3,556,278,0,5006,5007,5,80,0,0,5007,5008,3,562,281,0,5008,5009,5,64,
	0,0,5009,5010,3,564,282,0,5010,5011,3,108,54,0,5011,5013,1,0,0,0,5012,4993,
	1,0,0,0,5012,5001,1,0,0,0,5013,555,1,0,0,0,5014,5030,3,558,279,0,5015,5030,
	5,30,0,0,5016,5017,5,30,0,0,5017,5030,5,285,0,0,5018,5019,5,30,0,0,5019,
	5020,5,2,0,0,5020,5021,3,216,108,0,5021,5022,5,3,0,0,5022,5030,1,0,0,0,
	5023,5024,5,30,0,0,5024,5025,5,285,0,0,5025,5026,5,2,0,0,5026,5027,3,216,
	108,0,5027,5028,5,3,0,0,5028,5030,1,0,0,0,5029,5014,1,0,0,0,5029,5015,1,
	0,0,0,5029,5016,1,0,0,0,5029,5018,1,0,0,0,5029,5023,1,0,0,0,5030,557,1,
	0,0,0,5031,5036,3,560,280,0,5032,5033,5,6,0,0,5033,5035,3,560,280,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,
	559,1,0,0,0,5038,5036,1,0,0,0,5039,5040,5,88,0,0,5040,5049,3,214,107,0,
	5041,5042,5,86,0,0,5042,5049,3,214,107,0,5043,5044,5,46,0,0,5044,5049,3,
	214,107,0,5045,5046,3,1360,680,0,5046,5047,3,214,107,0,5047,5049,1,0,0,
	0,5048,5039,1,0,0,0,5048,5041,1,0,0,0,5048,5043,1,0,0,0,5048,5045,1,0,0,
	0,5049,561,1,0,0,0,5050,5109,3,1322,661,0,5051,5052,5,92,0,0,5052,5109,
	3,1322,661,0,5053,5054,5,319,0,0,5054,5109,3,1322,661,0,5055,5056,5,63,
	0,0,5056,5057,5,174,0,0,5057,5058,5,372,0,0,5058,5109,3,1326,663,0,5059,
	5060,5,63,0,0,5060,5061,5,322,0,0,5061,5109,3,1326,663,0,5062,5063,5,211,
	0,0,5063,5109,3,624,312,0,5064,5065,5,287,0,0,5065,5109,3,624,312,0,5066,
	5067,5,433,0,0,5067,5109,3,624,312,0,5068,5069,5,175,0,0,5069,5109,3,1326,
	663,0,5070,5071,5,189,0,0,5071,5109,3,522,261,0,5072,5073,5,238,0,0,5073,
	5109,3,1326,663,0,5074,5075,5,239,0,0,5075,5076,5,265,0,0,5076,5109,3,294,
	147,0,5077,5078,5,314,0,0,5078,5109,3,1326,663,0,5079,5080,5,342,0,0,5080,
	5109,3,1326,663,0,5081,5082,5,351,0,0,5082,5109,3,522,261,0,5083,5084,5,
	30,0,0,5084,5085,5,341,0,0,5085,5086,5,68,0,0,5086,5087,5,314,0,0,5087,
	5109,3,1326,663,0,5088,5089,5,30,0,0,5089,5090,5,320,0,0,5090,5091,5,68,
	0,0,5091,5092,5,314,0,0,5092,5109,3,1326,663,0,5093,5094,5,30,0,0,5094,
	5095,5,212,0,0,5095,5096,5,68,0,0,5096,5097,5,314,0,0,5097,5109,3,1326,
	663,0,5098,5099,5,30,0,0,5099,5100,5,448,0,0,5100,5101,5,68,0,0,5101,5102,
	5,314,0,0,5102,5109,3,1326,663,0,5103,5104,5,30,0,0,5104,5105,5,446,0,0,
	5105,5106,5,68,0,0,5106,5107,5,314,0,0,5107,5109,3,1326,663,0,5108,5050,
	1,0,0,0,5108,5051,1,0,0,0,5108,5053,1,0,0,0,5108,5055,1,0,0,0,5108,5059,
	1,0,0,0,5108,5062,1,0,0,0,5108,5064,1,0,0,0,5108,5066,1,0,0,0,5108,5068,
	1,0,0,0,5108,5070,1,0,0,0,5108,5072,1,0,0,0,5108,5074,1,0,0,0,5108,5077,
	1,0,0,0,5108,5079,1,0,0,0,5108,5081,1,0,0,0,5108,5083,1,0,0,0,5108,5088,
	1,0,0,0,5108,5093,1,0,0,0,5108,5098,1,0,0,0,5108,5103,1,0,0,0,5109,563,
	1,0,0,0,5110,5115,3,566,283,0,5111,5112,5,6,0,0,5112,5114,3,566,283,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,
	565,1,0,0,0,5117,5115,1,0,0,0,5118,5122,3,1356,678,0,5119,5120,5,66,0,0,
	5120,5122,3,1356,678,0,5121,5118,1,0,0,0,5121,5119,1,0,0,0,5122,567,1,0,
	0,0,5123,5124,5,105,0,0,5124,5125,5,65,0,0,5125,5128,5,270,0,0,5126,5128,
	1,0,0,0,5127,5123,1,0,0,0,5127,5126,1,0,0,0,5128,569,1,0,0,0,5129,5130,
	5,65,0,0,5130,5131,3,558,279,0,5131,5132,5,94,0,0,5132,5133,3,1358,679,
	0,5133,5134,3,574,287,0,5134,5135,3,576,288,0,5135,571,1,0,0,0,5136,5137,
	5,308,0,0,5137,5138,3,558,279,0,5138,5139,5,64,0,0,5139,5140,3,1358,679,
	0,5140,5141,3,576,288,0,5141,5142,3,108,54,0,5142,5154,1,0,0,0,5143,5144,
	5,308,0,0,5144,5145,5,134,0,0,5145,5146,5,270,0,0,5146,5147,5,62,0,0,5147,
	5148,3,558,279,0,5148,5149,5,64,0,0,5149,5150,3,1358,679,0,5150,5151,3,
	576,288,0,5151,5152,3,108,54,0,5152,5154,1,0,0,0,5153,5136,1,0,0,0,5153,
	5143,1,0,0,0,5154,573,1,0,0,0,5155,5156,5,105,0,0,5156,5157,5,134,0,0,5157,
	5160,5,270,0,0,5158,5160,1,0,0,0,5159,5155,1,0,0,0,5159,5158,1,0,0,0,5160,
	575,1,0,0,0,5161,5162,5,214,0,0,5162,5163,5,147,0,0,5163,5166,3,1356,678,
	0,5164,5166,1,0,0,0,5165,5161,1,0,0,0,5165,5164,1,0,0,0,5166,577,1,0,0,
	0,5167,5168,5,138,0,0,5168,5169,5,53,0,0,5169,5170,5,285,0,0,5170,5171,
	3,580,290,0,5171,5172,3,584,292,0,5172,579,1,0,0,0,5173,5175,3,582,291,
	0,5174,5173,1,0,0,0,5175,5178,1,0,0,0,5176,5174,1,0,0,0,5176,5177,1,0,0,
	0,5177,581,1,0,0,0,5178,5176,1,0,0,0,5179,5180,5,68,0,0,5180,5181,5,314,
	0,0,5181,5189,3,1326,663,0,5182,5183,5,62,0,0,5183,5184,5,309,0,0,5184,
	5189,3,1358,679,0,5185,5186,5,62,0,0,5186,5187,5,99,0,0,5187,5189,3,1358,
	679,0,5188,5179,1,0,0,0,5188,5182,1,0,0,0,5188,5185,1,0,0,0,5189,583,1,
	0,0,0,5190,5191,5,65,0,0,5191,5192,3,556,278,0,5192,5193,5,80,0,0,5193,
	5194,3,586,293,0,5194,5195,5,94,0,0,5195,5196,3,564,282,0,5196,5197,3,568,
	284,0,5197,5218,1,0,0,0,5198,5199,5,308,0,0,5199,5200,3,556,278,0,5200,
	5201,5,80,0,0,5201,5202,3,586,293,0,5202,5203,5,64,0,0,5203,5204,3,564,
	282,0,5204,5205,3,108,54,0,5205,5218,1,0,0,0,5206,5207,5,308,0,0,5207,5208,
	5,65,0,0,5208,5209,5,270,0,0,5209,5210,5,62,0,0,5210,5211,3,556,278,0,5211,
	5212,5,80,0,0,5212,5213,3,586,293,0,5213,5214,5,64,0,0,5214,5215,3,564,
	282,0,5215,5216,3,108,54,0,5216,5218,1,0,0,0,5217,5190,1,0,0,0,5217,5198,
	1,0,0,0,5217,5206,1,0,0,0,5218,585,1,0,0,0,5219,5220,7,25,0,0,5220,587,
	1,0,0,0,5221,5222,5,46,0,0,5222,5223,3,590,295,0,5223,5224,5,226,0,0,5224,
	5225,3,592,296,0,5225,5226,3,594,297,0,5226,5227,5,80,0,0,5227,5228,3,1064,
	532,0,5228,5229,3,596,298,0,5229,5230,5,2,0,0,5230,5231,3,598,299,0,5231,
	5232,5,3,0,0,5232,5233,3,604,302,0,5233,5234,3,118,59,0,5234,5235,3,254,
	127,0,5235,5236,3,1084,542,0,5236,5257,1,0,0,0,5237,5238,5,46,0,0,5238,
	5239,3,590,295,0,5239,5240,5,226,0,0,5240,5241,3,592,296,0,5241,5242,5,
	220,0,0,5242,5243,5,77,0,0,5243,5244,5,387,0,0,5244,5245,3,1328,664,0,5245,
	5246,5,80,0,0,5246,5247,3,1064,532,0,5247,5248,3,596,298,0,5248,5249,5,
	2,0,0,5249,5250,3,598,299,0,5250,5251,5,3,0,0,5251,5252,3,604,302,0,5252,
	5253,3,118,59,0,5253,5254,3,254,127,0,5254,5255,3,1084,542,0,5255,5257,
	1,0,0,0,5256,5221,1,0,0,0,5256,5237,1,0,0,0,5257,589,1,0,0,0,5258,5261,
	5,98,0,0,5259,5261,1,0,0,0,5260,5258,1,0,0,0,5260,5259,1,0,0,0,5261,591,
	1,0,0,0,5262,5265,5,109,0,0,5263,5265,1,0,0,0,5264,5262,1,0,0,0,5264,5263,
	1,0,0,0,5265,593,1,0,0,0,5266,5269,3,1328,664,0,5267,5269,1,0,0,0,5268,
	5266,1,0,0,0,5268,5267,1,0,0,0,5269,595,1,0,0,0,5270,5271,5,100,0,0,5271,
	5274,3,1328,664,0,5272,5274,1,0,0,0,5273,5270,1,0,0,0,5273,5272,1,0,0,0,
	5274,597,1,0,0,0,5275,5280,3,602,301,0,5276,5277,5,6,0,0,5277,5279,3,602,
	301,0,5278,5276,1,0,0,0,5279,5282,1,0,0,0,5280,5278,1,0,0,0,5280,5281,1,
	0,0,0,5281,599,1,0,0,0,5282,5280,1,0,0,0,5283,5284,3,608,304,0,5284,5285,
	3,610,305,0,5285,5286,3,612,306,0,5286,5287,3,614,307,0,5287,5295,1,0,0,
	0,5288,5289,3,608,304,0,5289,5290,3,524,262,0,5290,5291,3,116,58,0,5291,
	5292,3,612,306,0,5292,5293,3,614,307,0,5293,5295,1,0,0,0,5294,5283,1,0,
	0,0,5294,5288,1,0,0,0,5295,601,1,0,0,0,5296,5297,3,1360,680,0,5297,5298,
	3,600,300,0,5298,5308,1,0,0,0,5299,5300,3,1202,601,0,5300,5301,3,600,300,
	0,5301,5308,1,0,0,0,5302,5303,5,2,0,0,5303,5304,3,1152,576,0,5304,5305,
	5,3,0,0,5305,5306,3,600,300,0,5306,5308,1,0,0,0,5307,5296,1,0,0,0,5307,
	5299,1,0,0,0,5307,5302,1,0,0,0,5308,603,1,0,0,0,5309,5310,5,432,0,0,5310,
	5311,5,2,0,0,5311,5312,3,606,303,0,5312,5313,5,3,0,0,5313,5316,1,0,0,0,
	5314,5316,1,0,0,0,5315,5309,1,0,0,0,5315,5314,1,0,0,0,5316,605,1,0,0,0,
	5317,5322,3,602,301,0,5318,5319,5,6,0,0,5319,5321,3,602,301,0,5320,5318,
	1,0,0,0,5321,5324,1,0,0,0,5322,5320,1,0,0,0,5322,5323,1,0,0,0,5323,607,
	1,0,0,0,5324,5322,1,0,0,0,5325,5326,5,43,0,0,5326,5329,3,524,262,0,5327,
	5329,1,0,0,0,5328,5325,1,0,0,0,5328,5327,1,0,0,0,5329,609,1,0,0,0,5330,
	5333,3,524,262,0,5331,5333,1,0,0,0,5332,5330,1,0,0,0,5332,5331,1,0,0,0,
	5333,611,1,0,0,0,5334,5338,5,37,0,0,5335,5338,5,55,0,0,5336,5338,1,0,0,
	0,5337,5334,1,0,0,0,5337,5335,1,0,0,0,5337,5336,1,0,0,0,5338,613,1,0,0,
	0,5339,5340,5,264,0,0,5340,5345,5,207,0,0,5341,5342,5,264,0,0,5342,5345,
	5,240,0,0,5343,5345,1,0,0,0,5344,5339,1,0,0,0,5344,5341,1,0,0,0,5344,5343,
	1,0,0,0,5345,615,1,0,0,0,5346,5347,5,46,0,0,5347,5348,3,618,309,0,5348,
	5349,7,22,0,0,5349,5350,3,1334,667,0,5350,5360,3,628,314,0,5351,5358,5,
	307,0,0,5352,5359,3,638,319,0,5353,5354,5,92,0,0,5354,5355,5,2,0,0,5355,
	5356,3,668,334,0,5356,5357,5,3,0,0,5357,5359,1,0,0,0,5358,5352,1,0,0,0,
	5358,5353,1,0,0,0,5359,5361,1,0,0,0,5360,5351,1,0,0,0,5360,5361,1,0,0,0,
	5361,5362,1,0,0,0,5362,5363,3,654,327,0,5363,617,1,0,0,0,5364,5365,5,82,
	0,0,5365,5368,5,302,0,0,5366,5368,1,0,0,0,5367,5364,1,0,0,0,5367,5366,1,
	0,0,0,5368,619,1,0,0,0,5369,5371,5,2,0,0,5370,5372,3,622,311,0,5371,5370,
	1,0,0,0,5371,5372,1,0,0,0,5372,5373,1,0,0,0,5373,5374,5,3,0,0,5374,621,
	1,0,0,0,5375,5380,3,632,316,0,5376,5377,5,6,0,0,5377,5379,3,632,316,0,5378,
	5376,1,0,0,0,5379,5382,1,0,0,0,5380,5378,1,0,0,0,5380,5381,1,0,0,0,5381,
	623,1,0,0,0,5382,5380,1,0,0,0,5383,5388,3,626,313,0,5384,5385,5,6,0,0,5385,
	5387,3,626,313,0,5386,5384,1,0,0,0,5387,5390,1,0,0,0,5388,5386,1,0,0,0,
	5388,5389,1,0,0,0,5389,625,1,0,0,0,5390,5388,1,0,0,0,5391,5392,3,1334,667,
	0,5392,5393,3,620,310,0,5393,5400,1,0,0,0,5394,5400,3,1376,688,0,5395,5397,
	3,1360,680,0,5396,5398,3,1312,656,0,5397,5396,1,0,0,0,5397,5398,1,0,0,0,
	5398,5400,1,0,0,0,5399,5391,1,0,0,0,5399,5394,1,0,0,0,5399,5395,1,0,0,0,
	5400,627,1,0,0,0,5401,5403,5,2,0,0,5402,5404,3,630,315,0,5403,5402,1,0,
	0,0,5403,5404,1,0,0,0,5404,5405,1,0,0,0,5405,5406,5,3,0,0,5406,629,1,0,
	0,0,5407,5412,3,642,321,0,5408,5409,5,6,0,0,5409,5411,3,642,321,0,5410,
	5408,1,0,0,0,5411,5414,1,0,0,0,5412,5410,1,0,0,0,5412,5413,1,0,0,0,5413,
	631,1,0,0,0,5414,5412,1,0,0,0,5415,5417,3,634,317,0,5416,5418,3,636,318,
	0,5417,5416,1,0,0,0,5417,5418,1,0,0,0,5418,5419,1,0,0,0,5419,5420,3,640,
	320,0,5420,5429,1,0,0,0,5421,5423,3,636,318,0,5422,5424,3,634,317,0,5423,
	5422,1,0,0,0,5423,5424,1,0,0,0,5424,5425,1,0,0,0,5425,5426,3,640,320,0,
	5426,5429,1,0,0,0,5427,5429,3,640,320,0,5428,5415,1,0,0,0,5428,5421,1,0,
	0,0,5428,5427,1,0,0,0,5429,633,1,0,0,0,5430,5432,5,68,0,0,5431,5433,5,444,
	0,0,5432,5431,1,0,0,0,5432,5433,1,0,0,0,5433,5438,1,0,0,0,5434,5438,5,444,
	0,0,5435,5438,5,391,0,0,5436,5438,5,101,0,0,5437,5430,1,0,0,0,5437,5434,
	1,0,0,0,5437,5435,1,0,0,0,5437,5436,1,0,0,0,5438,635,1,0,0,0,5439,5440,
	3,1362,681,0,5440,637,1,0,0,0,5441,5442,3,640,320,0,5442,639,1,0,0,0,5443,
	5456,3,1108,554,0,5444,5445,3,1362,681,0,5445,5446,3,526,263,0,5446,5447,
	5,27,0,0,5447,5448,5,351,0,0,5448,5456,1,0,0,0,5449,5450,5,406,0,0,5450,
	5451,3,1362,681,0,5451,5452,3,526,263,0,5452,5453,5,27,0,0,5453,5454,5,
	351,0,0,5454,5456,1,0,0,0,5455,5443,1,0,0,0,5455,5444,1,0,0,0,5455,5449,
	1,0,0,0,5456,641,1,0,0,0,5457,5460,3,632,316,0,5458,5459,7,26,0,0,5459,
	5461,3,1152,576,0,5460,5458,1,0,0,0,5460,5461,1,0,0,0,5461,643,1,0,0,0,
	5462,5463,3,632,316,0,5463,645,1,0,0,0,5464,5475,5,2,0,0,5465,5476,5,9,
	0,0,5466,5476,3,648,324,0,5467,5468,5,83,0,0,5468,5469,5,147,0,0,5469,5476,
	3,648,324,0,5470,5471,3,648,324,0,5471,5472,5,83,0,0,5472,5473,5,147,0,
	0,5473,5474,3,648,324,0,5474,5476,1,0,0,0,5475,5465,1,0,0,0,5475,5466,1,
	0,0,0,5475,5467,1,0,0,0,5475,5470,1,0,0,0,5476,5477,1,0,0,0,5477,5478,5,
	3,0,0,5478,647,1,0,0,0,5479,5484,3,644,322,0,5480,5481,5,6,0,0,5481,5483,
	3,644,322,0,5482,5480,1,0,0,0,5483,5486,1,0,0,0,5484,5482,1,0,0,0,5484,
	5485,1,0,0,0,5485,649,1,0,0,0,5486,5484,1,0,0,0,5487,5488,3,1334,667,0,
	5488,5489,3,646,323,0,5489,651,1,0,0,0,5490,5495,3,650,325,0,5491,5492,
	5,6,0,0,5492,5494,3,650,325,0,5493,5491,1,0,0,0,5494,5497,1,0,0,0,5495,
	5493,1,0,0,0,5495,5496,1,0,0,0,5496,653,1,0,0,0,5497,5495,1,0,0,0,5498,
	5500,3,658,329,0,5499,5498,1,0,0,0,5500,5501,1,0,0,0,5501,5499,1,0,0,0,
	5501,5502,1,0,0,0,5502,5503,1,0,0,0,5503,5504,6,327,-1,0,5504,655,1,0,0,
	0,5505,5506,5,149,0,0,5506,5507,5,80,0,0,5507,5508,5,78,0,0,5508,5541,5,
	449,0,0,5509,5510,5,307,0,0,5510,5511,5,78,0,0,5511,5512,5,80,0,0,5512,
	5513,5,78,0,0,5513,5541,5,449,0,0,5514,5541,5,337,0,0,5515,5541,5,222,0,
	0,5516,5541,5,329,0,0,5517,5541,5,368,0,0,5518,5519,5,205,0,0,5519,5520,
	5,318,0,0,5520,5541,5,181,0,0,5521,5522,5,205,0,0,5522,5523,5,318,0,0,5523,
	5541,5,234,0,0,5524,5525,5,318,0,0,5525,5541,5,181,0,0,5526,5527,5,318,
	0,0,5527,5541,5,234,0,0,5528,5541,5,241,0,0,5529,5530,5,77,0,0,5530,5541,
	5,241,0,0,5531,5532,5,170,0,0,5532,5541,3,292,146,0,5533,5534,5,311,0,0,
	5534,5541,3,292,146,0,5535,5536,5,450,0,0,5536,5541,3,524,262,0,5537,5541,
	3,82,41,0,5538,5539,5,451,0,0,5539,5541,3,1360,680,0,5540,5505,1,0,0,0,
	5540,5509,1,0,0,0,5540,5514,1,0,0,0,5540,5515,1,0,0,0,5540,5516,1,0,0,0,
	5540,5517,1,0,0,0,5540,5518,1,0,0,0,5540,5521,1,0,0,0,5540,5524,1,0,0,0,
	5540,5526,1,0,0,0,5540,5528,1,0,0,0,5540,5529,1,0,0,0,5540,5531,1,0,0,0,
	5540,5533,1,0,0,0,5540,5535,1,0,0,0,5540,5537,1,0,0,0,5540,5538,1,0,0,0,
	5541,657,1,0,0,0,5542,5543,5,36,0,0,5543,5551,3,660,330,0,5544,5545,5,238,
	0,0,5545,5551,3,72,36,0,5546,5547,5,434,0,0,5547,5551,3,662,331,0,5548,
	5551,5,104,0,0,5549,5551,3,656,328,0,5550,5542,1,0,0,0,5550,5544,1,0,0,
	0,5550,5546,1,0,0,0,5550,5548,1,0,0,0,5550,5549,1,0,0,0,5551,659,1,0,0,
	0,5552,5558,3,1346,673,0,5553,5554,3,1346,673,0,5554,5555,5,6,0,0,5555,
	5556,3,1346,673,0,5556,5558,1,0,0,0,5557,5552,1,0,0,0,5557,5553,1,0,0,0,
	5558,661,1,0,0,0,5559,5560,5,62,0,0,5560,5561,5,351,0,0,5561,5568,3,1108,
	554,0,5562,5563,5,6,0,0,5563,5564,5,62,0,0,5564,5565,5,351,0,0,5565,5567,
	3,1108,554,0,5566,5562,1,0,0,0,5567,5570,1,0,0,0,5568,5566,1,0,0,0,5568,
	5569,1,0,0,0,5569,663,1,0,0,0,5570,5568,1,0,0,0,5571,5572,5,105,0,0,5572,
	5575,3,460,230,0,5573,5575,1,0,0,0,5574,5571,1,0,0,0,5574,5573,1,0,0,0,
	5575,665,1,0,0,0,5576,5577,3,636,318,0,5577,5578,3,640,320,0,5578,667,1,
	0,0,0,5579,5584,3,666,333,0,5580,5581,5,6,0,0,5581,5583,3,666,333,0,5582,
	5580,1,0,0,0,5583,5586,1,0,0,0,5584,5582,1,0,0,0,5584,5585,1,0,0,0,5585,
	669,1,0,0,0,5586,5584,1,0,0,0,5587,5588,5,138,0,0,5588,5589,7,27,0,0,5589,
	5590,3,626,313,0,5590,5591,3,672,336,0,5591,5592,3,674,337,0,5592,671,1,
	0,0,0,5593,5595,3,656,328,0,5594,5593,1,0,0,0,5595,5596,1,0,0,0,5596,5594,
	1,0,0,0,5596,5597,1,0,0,0,5597,673,1,0,0,0,5598,5601,5,306,0,0,5599,5601,
	1,0,0,0,5600,5598,1,0,0,0,5600,5599,1,0,0,0,5601,675,1,0,0,0,5602,5603,
	5,191,0,0,5603,5604,5,211,0,0,5604,5605,3,624,312,0,5605,5606,3,108,54,
	0,5606,5639,1,0,0,0,5607,5608,5,191,0,0,5608,5609,5,211,0,0,5609,5610,5,
	220,0,0,5610,5611,5,387,0,0,5611,5612,3,624,312,0,5612,5613,3,108,54,0,
	5613,5639,1,0,0,0,5614,5615,5,191,0,0,5615,5616,5,287,0,0,5616,5617,3,624,
	312,0,5617,5618,3,108,54,0,5618,5639,1,0,0,0,5619,5620,5,191,0,0,5620,5621,
	5,287,0,0,5621,5622,5,220,0,0,5622,5623,5,387,0,0,5623,5624,3,624,312,0,
	5624,5625,3,108,54,0,5625,5639,1,0,0,0,5626,5627,5,191,0,0,5627,5628,5,
	433,0,0,5628,5629,3,624,312,0,5629,5630,3,108,54,0,5630,5639,1,0,0,0,5631,
	5632,5,191,0,0,5632,5633,5,433,0,0,5633,5634,5,220,0,0,5634,5635,5,387,
	0,0,5635,5636,3,624,312,0,5636,5637,3,108,54,0,5637,5639,1,0,0,0,5638,5602,
	1,0,0,0,5638,5607,1,0,0,0,5638,5614,1,0,0,0,5638,5619,1,0,0,0,5638,5626,
	1,0,0,0,5638,5631,1,0,0,0,5639,677,1,0,0,0,5640,5641,5,191,0,0,5641,5642,
	5,136,0,0,5642,5643,3,652,326,0,5643,5644,3,108,54,0,5644,5653,1,0,0,0,
	5645,5646,5,191,0,0,5646,5647,5,136,0,0,5647,5648,5,220,0,0,5648,5649,5,
	387,0,0,5649,5650,3,652,326,0,5650,5651,3,108,54,0,5651,5653,1,0,0,0,5652,
	5640,1,0,0,0,5652,5645,1,0,0,0,5653,679,1,0,0,0,5654,5655,5,191,0,0,5655,
	5656,5,269,0,0,5656,5657,3,686,343,0,5657,5658,3,108,54,0,5658,5667,1,0,
	0,0,5659,5660,5,191,0,0,5660,5661,5,269,0,0,5661,5662,5,220,0,0,5662,5663,
	5,387,0,0,5663,5664,3,686,343,0,5664,5665,3,108,54,0,5665,5667,1,0,0,0,
	5666,5654,1,0,0,0,5666,5659,1,0,0,0,5667,681,1,0,0,0,5668,5669,5,2,0,0,
	5669,5670,3,1108,554,0,5670,5671,5,3,0,0,5671,5691,1,0,0,0,5672,5673,5,
	2,0,0,5673,5674,3,1108,554,0,5674,5675,5,6,0,0,5675,5676,3,1108,554,0,5676,
	5677,5,3,0,0,5677,5691,1,0,0,0,5678,5679,5,2,0,0,5679,5680,5,398,0,0,5680,
	5681,5,6,0,0,5681,5682,3,1108,554,0,5682,5683,5,3,0,0,5683,5691,1,0,0,0,
	5684,5685,5,2,0,0,5685,5686,3,1108,554,0,5686,5687,5,6,0,0,5687,5688,5,
	398,0,0,5688,5689,5,3,0,0,5689,5691,1,0,0,0,5690,5668,1,0,0,0,5690,5672,
	1,0,0,0,5690,5678,1,0,0,0,5690,5684,1,0,0,0,5691,683,1,0,0,0,5692,5693,
	3,1360,680,0,5693,5694,5,11,0,0,5694,5696,1,0,0,0,5695,5692,1,0,0,0,5696,
	5699,1,0,0,0,5697,5695,1,0,0,0,5697,5698,1,0,0,0,5698,5700,1,0,0,0,5699,
	5697,1,0,0,0,5700,5701,3,1258,629,0,5701,685,1,0,0,0,5702,5707,3,688,344,
	0,5703,5704,5,6,0,0,5704,5706,3,688,344,0,5705,5703,1,0,0,0,5706,5709,1,
	0,0,0,5707,5705,1,0,0,0,5707,5708,1,0,0,0,5708,687,1,0,0,0,5709,5707,1,
	0,0,0,5710,5711,3,684,342,0,5711,5712,3,682,341,0,5712,689,1,0,0,0,5713,
	5714,5,57,0,0,5714,5715,3,692,346,0,5715,691,1,0,0,0,5716,5718,3,694,347,
	0,5717,5716,1,0,0,0,5718,5719,1,0,0,0,5719,5717,1,0,0,0,5719,5720,1,0,0,
	0,5720,693,1,0,0,0,5721,5725,3,1346,673,0,5722,5723,5,238,0,0,5723,5725,
	3,72,36,0,5724,5721,1,0,0,0,5724,5722,1,0,0,0,5725,695,1,0,0,0,5726,5727,
	5,46,0,0,5727,5728,5,41,0,0,5728,5729,5,2,0,0,5729,5730,3,1108,554,0,5730,
	5731,5,36,0,0,5731,5732,3,1108,554,0,5732,5733,5,3,0,0,5733,5734,5,105,
	0,0,5734,5735,5,211,0,0,5735,5736,3,626,313,0,5736,5737,3,698,349,0,5737,
	5761,1,0,0,0,5738,5739,5,46,0,0,5739,5740,5,41,0,0,5740,5741,5,2,0,0,5741,
	5742,3,1108,554,0,5742,5743,5,36,0,0,5743,5744,3,1108,554,0,5744,5745,5,
	3,0,0,5745,5746,5,370,0,0,5746,5747,5,211,0,0,5747,5748,3,698,349,0,5748,
	5761,1,0,0,0,5749,5750,5,46,0,0,5750,5751,5,41,0,0,5751,5752,5,2,0,0,5752,
	5753,3,1108,554,0,5753,5754,5,36,0,0,5754,5755,3,1108,554,0,5755,5756,5,
	3,0,0,5756,5757,5,105,0,0,5757,5758,5,391,0,0,5758,5759,3,698,349,0,5759,
	5761,1,0,0,0,5760,5726,1,0,0,0,5760,5738,1,0,0,0,5760,5749,1,0,0,0,5761,
	697,1,0,0,0,5762,5763,5,36,0,0,5763,5768,5,223,0,0,5764,5765,5,36,0,0,5765,
	5768,5,141,0,0,5766,5768,1,0,0,0,5767,5762,1,0,0,0,5767,5764,1,0,0,0,5767,
	5766,1,0,0,0,5768,699,1,0,0,0,5769,5770,5,191,0,0,5770,5771,5,41,0,0,5771,
	5772,3,702,351,0,5772,5773,5,2,0,0,5773,5774,3,1108,554,0,5774,5775,5,36,
	0,0,5775,5776,3,1108,554,0,5776,5777,5,3,0,0,5777,5778,3,108,54,0,5778,
	701,1,0,0,0,5779,5780,5,220,0,0,5780,5783,5,387,0,0,5781,5783,1,0,0,0,5782,
	5779,1,0,0,0,5782,5781,1,0,0,0,5783,703,1,0,0,0,5784,5785,5,46,0,0,5785,
	5786,3,618,309,0,5786,5787,5,434,0,0,5787,5788,5,62,0,0,5788,5789,3,1108,
	554,0,5789,5790,5,238,0,0,5790,5791,3,1328,664,0,5791,5792,5,2,0,0,5792,
	5793,3,706,353,0,5793,5794,5,3,0,0,5794,705,1,0,0,0,5795,5796,5,64,0,0,
	5796,5797,5,452,0,0,5797,5798,5,105,0,0,5798,5799,5,211,0,0,5799,5800,3,
	626,313,0,5800,5801,5,6,0,0,5801,5802,5,94,0,0,5802,5803,5,452,0,0,5803,
	5804,5,105,0,0,5804,5805,5,211,0,0,5805,5806,3,626,313,0,5806,5830,1,0,
	0,0,5807,5808,5,94,0,0,5808,5809,5,452,0,0,5809,5810,5,105,0,0,5810,5811,
	5,211,0,0,5811,5812,3,626,313,0,5812,5813,5,6,0,0,5813,5814,5,64,0,0,5814,
	5815,5,452,0,0,5815,5816,5,105,0,0,5816,5817,5,211,0,0,5817,5818,3,626,
	313,0,5818,5830,1,0,0,0,5819,5820,5,64,0,0,5820,5821,5,452,0,0,5821,5822,
	5,105,0,0,5822,5823,5,211,0,0,5823,5830,3,626,313,0,5824,5825,5,94,0,0,
	5825,5826,5,452,0,0,5826,5827,5,105,0,0,5827,5828,5,211,0,0,5828,5830,3,
	626,313,0,5829,5795,1,0,0,0,5829,5807,1,0,0,0,5829,5819,1,0,0,0,5829,5824,
	1,0,0,0,5830,707,1,0,0,0,5831,5832,5,191,0,0,5832,5833,5,434,0,0,5833,5834,
	3,702,351,0,5834,5835,5,62,0,0,5835,5836,3,1108,554,0,5836,5837,5,238,0,
	0,5837,5838,3,1328,664,0,5838,5839,3,108,54,0,5839,709,1,0,0,0,5840,5841,
	5,297,0,0,5841,5842,3,712,356,0,5842,5843,3,592,296,0,5843,5844,3,1324,
	662,0,5844,5867,1,0,0,0,5845,5846,5,297,0,0,5846,5847,3,714,357,0,5847,
	5848,3,592,296,0,5848,5849,3,1328,664,0,5849,5867,1,0,0,0,5850,5851,5,297,
	0,0,5851,5852,5,2,0,0,5852,5853,3,716,358,0,5853,5854,5,3,0,0,5854,5855,
	3,712,356,0,5855,5856,3,592,296,0,5856,5857,3,1324,662,0,5857,5867,1,0,
	0,0,5858,5859,5,297,0,0,5859,5860,5,2,0,0,5860,5861,3,716,358,0,5861,5862,
	5,3,0,0,5862,5863,3,714,357,0,5863,5864,3,592,296,0,5864,5865,3,1328,664,
	0,5865,5867,1,0,0,0,5866,5840,1,0,0,0,5866,5845,1,0,0,0,5866,5850,1,0,0,
	0,5866,5858,1,0,0,0,5867,711,1,0,0,0,5868,5869,7,18,0,0,5869,713,1,0,0,
	0,5870,5871,7,28,0,0,5871,715,1,0,0,0,5872,5877,3,718,359,0,5873,5874,5,
	6,0,0,5874,5876,3,718,359,0,5875,5873,1,0,0,0,5876,5879,1,0,0,0,5877,5875,
	1,0,0,0,5877,5878,1,0,0,0,5878,717,1,0,0,0,5879,5877,1,0,0,0,5880,5881,
	5,128,0,0,5881,719,1,0,0,0,5882,5883,5,138,0,0,5883,5884,5,342,0,0,5884,
	5885,3,1328,664,0,5885,5886,5,324,0,0,5886,5887,3,116,58,0,5887,5895,1,
	0,0,0,5888,5889,5,138,0,0,5889,5890,5,342,0,0,5890,5891,3,1328,664,0,5891,
	5892,5,304,0,0,5892,5893,3,116,58,0,5893,5895,1,0,0,0,5894,5882,1,0,0,0,
	5894,5888,1,0,0,0,5895,721,1,0,0,0,5896,5897,5,138,0,0,5897,5898,5,136,
	0,0,5898,5899,3,650,325,0,5899,5900,5,300,0,0,5900,5901,5,94,0,0,5901,5902,
	3,1328,664,0,5902,6365,1,0,0,0,5903,5904,5,138,0,0,5904,5905,5,108,0,0,
	5905,5906,3,524,262,0,5906,5907,5,300,0,0,5907,5908,5,94,0,0,5908,5909,
	3,1328,664,0,5909,6365,1,0,0,0,5910,5911,5,138,0,0,5911,5912,5,168,0,0,
	5912,5913,3,524,262,0,5913,5914,5,300,0,0,5914,5915,5,94,0,0,5915,5916,
	3,1328,664,0,5916,6365,1,0,0,0,5917,5918,5,138,0,0,5918,5919,5,175,0,0,
	5919,5920,3,1328,664,0,5920,5921,5,300,0,0,5921,5922,5,94,0,0,5922,5923,
	3,1328,664,0,5923,6365,1,0,0,0,5924,5925,5,138,0,0,5925,5926,5,189,0,0,
	5926,5927,3,524,262,0,5927,5928,5,300,0,0,5928,5929,5,94,0,0,5929,5930,
	3,1328,664,0,5930,6365,1,0,0,0,5931,5932,5,138,0,0,5932,5933,5,189,0,0,
	5933,5934,3,524,262,0,5934,5935,5,300,0,0,5935,5936,5,45,0,0,5936,5937,
	3,1328,664,0,5937,5938,5,94,0,0,5938,5939,3,1328,664,0,5939,6365,1,0,0,
	0,5940,5941,5,138,0,0,5941,5942,5,63,0,0,5942,5943,5,174,0,0,5943,5944,
	5,372,0,0,5944,5945,3,1328,664,0,5945,5946,5,300,0,0,5946,5947,5,94,0,0,
	5947,5948,3,1328,664,0,5948,6365,1,0,0,0,5949,5950,5,138,0,0,5950,5951,
	5,211,0,0,5951,5952,3,626,313,0,5952,5953,5,300,0,0,5953,5954,5,94,0,0,
	5954,5955,3,1328,664,0,5955,6365,1,0,0,0,5956,5957,5,138,0,0,5957,5958,
	5,66,0,0,5958,5959,3,1354,677,0,5959,5960,5,300,0,0,5960,5961,5,94,0,0,
	5961,5962,3,1354,677,0,5962,6365,1,0,0,0,5963,5964,5,138,0,0,5964,5965,
	3,308,154,0,5965,5966,5,238,0,0,5966,5967,3,1328,664,0,5967,5968,5,300,
	0,0,5968,5969,5,94,0,0,5969,5970,3,1328,664,0,5970,6365,1,0,0,0,5971,5972,
	5,138,0,0,5972,5973,5,269,0,0,5973,5974,5,156,0,0,5974,5975,3,524,262,0,
	5975,5976,5,100,0,0,5976,5977,3,1328,664,0,5977,5978,5,300,0,0,5978,5979,
	5,94,0,0,5979,5980,3,1328,664,0,5980,6365,1,0,0,0,5981,5982,5,138,0,0,5982,
	5983,5,269,0,0,5983,5984,5,206,0,0,5984,5985,3,524,262,0,5985,5986,5,100,
	0,0,5986,5987,3,1328,664,0,5987,5988,5,300,0,0,5988,5989,5,94,0,0,5989,
	5990,3,1328,664,0,5990,6365,1,0,0,0,5991,5992,5,138,0,0,5992,5993,5,436,
	0,0,5993,5994,3,1328,664,0,5994,5995,5,80,0,0,5995,5996,3,1324,662,0,5996,
	5997,5,300,0,0,5997,5998,5,94,0,0,5998,5999,3,1328,664,0,5999,6365,1,0,
	0,0,6000,6001,5,138,0,0,6001,6002,5,436,0,0,6002,6003,5,220,0,0,6003,6004,
	5,387,0,0,6004,6005,3,1328,664,0,6005,6006,5,80,0,0,6006,6007,3,1324,662,
	0,6007,6008,5,300,0,0,6008,6009,5,94,0,0,6009,6010,3,1328,664,0,6010,6365,
	1,0,0,0,6011,6012,5,138,0,0,6012,6013,5,287,0,0,6013,6014,3,626,313,0,6014,
	6015,5,300,0,0,6015,6016,5,94,0,0,6016,6017,3,1328,664,0,6017,6365,1,0,
	0,0,6018,6019,5,138,0,0,6019,6020,5,443,0,0,6020,6021,3,1328,664,0,6021,
	6022,5,300,0,0,6022,6023,5,94,0,0,6023,6024,3,1328,664,0,6024,6365,1,0,
	0,0,6025,6026,5,138,0,0,6026,6027,5,433,0,0,6027,6028,3,626,313,0,6028,
	6029,5,300,0,0,6029,6030,5,94,0,0,6030,6031,3,1328,664,0,6031,6365,1,0,
	0,0,6032,6033,5,138,0,0,6033,6034,5,314,0,0,6034,6035,3,1328,664,0,6035,
	6036,5,300,0,0,6036,6037,5,94,0,0,6037,6038,3,1328,664,0,6038,6365,1,0,
	0,0,6039,6040,5,138,0,0,6040,6041,5,322,0,0,6041,6042,3,1328,664,0,6042,
	6043,5,300,0,0,6043,6044,5,94,0,0,6044,6045,3,1328,664,0,6045,6365,1,0,
	0,0,6046,6047,5,138,0,0,6047,6048,5,442,0,0,6048,6049,3,1328,664,0,6049,
	6050,5,300,0,0,6050,6051,5,94,0,0,6051,6052,3,1328,664,0,6052,6365,1,0,
	0,0,6053,6054,5,138,0,0,6054,6055,5,92,0,0,6055,6056,3,1064,532,0,6056,
	6057,5,300,0,0,6057,6058,5,94,0,0,6058,6059,3,1328,664,0,6059,6365,1,0,
	0,0,6060,6061,5,138,0,0,6061,6062,5,92,0,0,6062,6063,5,220,0,0,6063,6064,
	5,387,0,0,6064,6065,3,1064,532,0,6065,6066,5,300,0,0,6066,6067,5,94,0,0,
	6067,6068,3,1328,664,0,6068,6365,1,0,0,0,6069,6070,5,138,0,0,6070,6071,
	5,319,0,0,6071,6072,3,1324,662,0,6072,6073,5,300,0,0,6073,6074,5,94,0,0,
	6074,6075,3,1328,664,0,6075,6365,1,0,0,0,6076,6077,5,138,0,0,6077,6078,
	5,319,0,0,6078,6079,5,220,0,0,6079,6080,5,387,0,0,6080,6081,3,1324,662,
	0,6081,6082,5,300,0,0,6082,6083,5,94,0,0,6083,6084,3,1328,664,0,6084,6365,
	1,0,0,0,6085,6086,5,138,0,0,6086,6087,5,367,0,0,6087,6088,3,1324,662,0,
	6088,6089,5,300,0,0,6089,6090,5,94,0,0,6090,6091,3,1328,664,0,6091,6365,
	1,0,0,0,6092,6093,5,138,0,0,6093,6094,5,367,0,0,6094,6095,5,220,0,0,6095,
	6096,5,387,0,0,6096,6097,3,1324,662,0,6097,6098,5,300,0,0,6098,6099,5,94,
	0,0,6099,6100,3,1328,664,0,6100,6365,1,0,0,0,6101,6102,5,138,0,0,6102,6103,
	5,250,0,0,6103,6104,5,367,0,0,6104,6105,3,1324,662,0,6105,6106,5,300,0,
	0,6106,6107,5,94,0,0,6107,6108,3,1328,664,0,6108,6365,1,0,0,0,6109,6110,
	5,138,0,0,6110,6111,5,250,0,0,6111,6112,5,367,0,0,6112,6113,5,220,0,0,6113,
	6114,5,387,0,0,6114,6115,3,1324,662,0,6115,6116,5,300,0,0,6116,6117,5,94,
	0,0,6117,6118,3,1328,664,0,6118,6365,1,0,0,0,6119,6120,5,138,0,0,6120,6121,
	5,226,0,0,6121,6122,3,1324,662,0,6122,6123,5,300,0,0,6123,6124,5,94,0,0,
	6124,6125,3,1328,664,0,6125,6365,1,0,0,0,6126,6127,5,138,0,0,6127,6128,
	5,226,0,0,6128,6129,5,220,0,0,6129,6130,5,387,0,0,6130,6131,3,1324,662,
	0,6131,6132,5,300,0,0,6132,6133,5,94,0,0,6133,6134,3,1328,664,0,6134,6365,
	1,0,0,0,6135,6136,5,138,0,0,6136,6137,5,63,0,0,6137,6138,5,92,0,0,6138,
	6139,3,1064,532,0,6139,6140,5,300,0,0,6140,6141,5,94,0,0,6141,6142,3,1328,
	664,0,6142,6365,1,0,0,0,6143,6144,5,138,0,0,6144,6145,5,63,0,0,6145,6146,
	5,92,0,0,6146,6147,5,220,0,0,6147,6148,5,387,0,0,6148,6149,3,1064,532,0,
	6149,6150,5,300,0,0,6150,6151,5,94,0,0,6151,6152,3,1328,664,0,6152,6365,
	1,0,0,0,6153,6154,5,138,0,0,6154,6155,5,92,0,0,6155,6156,3,1064,532,0,6156,
	6157,5,300,0,0,6157,6158,3,724,362,0,6158,6159,3,1328,664,0,6159,6160,5,
	94,0,0,6160,6161,3,1328,664,0,6161,6365,1,0,0,0,6162,6163,5,138,0,0,6163,
	6164,5,92,0,0,6164,6165,5,220,0,0,6165,6166,5,387,0,0,6166,6167,3,1064,
	532,0,6167,6168,5,300,0,0,6168,6169,3,724,362,0,6169,6170,3,1328,664,0,
	6170,6171,5,94,0,0,6171,6172,3,1328,664,0,6172,6365,1,0,0,0,6173,6174,5,
	138,0,0,6174,6175,5,367,0,0,6175,6176,3,1324,662,0,6176,6177,5,300,0,0,
	6177,6178,3,724,362,0,6178,6179,3,1328,664,0,6179,6180,5,94,0,0,6180,6181,
	3,1328,664,0,6181,6365,1,0,0,0,6182,6183,5,138,0,0,6183,6184,5,367,0,0,
	6184,6185,5,220,0,0,6185,6186,5,387,0,0,6186,6187,3,1324,662,0,6187,6188,
	5,300,0,0,6188,6189,3,724,362,0,6189,6190,3,1328,664,0,6190,6191,5,94,0,
	0,6191,6192,3,1328,664,0,6192,6365,1,0,0,0,6193,6194,5,138,0,0,6194,6195,
	5,250,0,0,6195,6196,5,367,0,0,6196,6197,3,1324,662,0,6197,6198,5,300,0,
	0,6198,6199,3,724,362,0,6199,6200,3,1328,664,0,6200,6201,5,94,0,0,6201,
	6202,3,1328,664,0,6202,6365,1,0,0,0,6203,6204,5,138,0,0,6204,6205,5,250,
	0,0,6205,6206,5,367,0,0,6206,6207,5,220,0,0,6207,6208,5,387,0,0,6208,6209,
	3,1324,662,0,6209,6210,5,300,0,0,6210,6211,3,724,362,0,6211,6212,3,1328,
	664,0,6212,6213,5,94,0,0,6213,6214,3,1328,664,0,6214,6365,1,0,0,0,6215,
	6216,5,138,0,0,6216,6217,5,92,0,0,6217,6218,3,1064,532,0,6218,6219,5,300,
	0,0,6219,6220,5,45,0,0,6220,6221,3,1328,664,0,6221,6222,5,94,0,0,6222,6223,
	3,1328,664,0,6223,6365,1,0,0,0,6224,6225,5,138,0,0,6225,6226,5,92,0,0,6226,
	6227,5,220,0,0,6227,6228,5,387,0,0,6228,6229,3,1064,532,0,6229,6230,5,300,
	0,0,6230,6231,5,45,0,0,6231,6232,3,1328,664,0,6232,6233,5,94,0,0,6233,6234,
	3,1328,664,0,6234,6365,1,0,0,0,6235,6236,5,138,0,0,6236,6237,5,63,0,0,6237,
	6238,5,92,0,0,6238,6239,3,1064,532,0,6239,6240,5,300,0,0,6240,6241,3,724,
	362,0,6241,6242,3,1328,664,0,6242,6243,5,94,0,0,6243,6244,3,1328,664,0,
	6244,6365,1,0,0,0,6245,6246,5,138,0,0,6246,6247,5,63,0,0,6247,6248,5,92,
	0,0,6248,6249,5,220,0,0,6249,6250,5,387,0,0,6250,6251,3,1064,532,0,6251,
	6252,5,300,0,0,6252,6253,3,724,362,0,6253,6254,3,1328,664,0,6254,6255,5,
	94,0,0,6255,6256,3,1328,664,0,6256,6365,1,0,0,0,6257,6258,5,138,0,0,6258,
	6259,5,312,0,0,6259,6260,3,1328,664,0,6260,6261,5,80,0,0,6261,6262,3,1324,
	662,0,6262,6263,5,300,0,0,6263,6264,5,94,0,0,6264,6265,3,1328,664,0,6265,
	6365,1,0,0,0,6266,6267,5,138,0,0,6267,6268,5,348,0,0,6268,6269,3,1328,664,
	0,6269,6270,5,80,0,0,6270,6271,3,1324,662,0,6271,6272,5,300,0,0,6272,6273,
	5,94,0,0,6273,6274,3,1328,664,0,6274,6365,1,0,0,0,6275,6276,5,138,0,0,6276,
	6277,5,198,0,0,6277,6278,5,348,0,0,6278,6279,3,1328,664,0,6279,6280,5,300,
	0,0,6280,6281,5,94,0,0,6281,6282,3,1328,664,0,6282,6365,1,0,0,0,6283,6284,
	5,138,0,0,6284,6285,5,309,0,0,6285,6286,3,1354,677,0,6286,6287,5,300,0,
	0,6287,6288,5,94,0,0,6288,6289,3,1354,677,0,6289,6365,1,0,0,0,6290,6291,
	5,138,0,0,6291,6292,5,99,0,0,6292,6293,3,1354,677,0,6293,6294,5,300,0,0,
	6294,6295,5,94,0,0,6295,6296,3,1354,677,0,6296,6365,1,0,0,0,6297,6298,5,
	138,0,0,6298,6299,5,342,0,0,6299,6300,3,1328,664,0,6300,6301,5,300,0,0,
	6301,6302,5,94,0,0,6302,6303,3,1328,664,0,6303,6365,1,0,0,0,6304,6305,5,
	138,0,0,6305,6306,5,333,0,0,6306,6307,3,524,262,0,6307,6308,5,300,0,0,6308,
	6309,5,94,0,0,6309,6310,3,1328,664,0,6310,6365,1,0,0,0,6311,6312,5,138,
	0,0,6312,6313,5,346,0,0,6313,6314,5,316,0,0,6314,6315,5,274,0,0,6315,6316,
	3,524,262,0,6316,6317,5,300,0,0,6317,6318,5,94,0,0,6318,6319,3,1328,664,
	0,6319,6365,1,0,0,0,6320,6321,5,138,0,0,6321,6322,5,346,0,0,6322,6323,5,
	316,0,0,6323,6324,5,185,0,0,6324,6325,3,524,262,0,6325,6326,5,300,0,0,6326,
	6327,5,94,0,0,6327,6328,3,1328,664,0,6328,6365,1,0,0,0,6329,6330,5,138,
	0,0,6330,6331,5,346,0,0,6331,6332,5,316,0,0,6332,6333,5,344,0,0,6333,6334,
	3,524,262,0,6334,6335,5,300,0,0,6335,6336,5,94,0,0,6336,6337,3,1328,664,
	0,6337,6365,1,0,0,0,6338,6339,5,138,0,0,6339,6340,5,346,0,0,6340,6341,5,
	316,0,0,6341,6342,5,163,0,0,6342,6343,3,524,262,0,6343,6344,5,300,0,0,6344,
	6345,5,94,0,0,6345,6346,3,1328,664,0,6346,6365,1,0,0,0,6347,6348,5,138,
	0,0,6348,6349,5,351,0,0,6349,6350,3,524,262,0,6350,6351,5,300,0,0,6351,
	6352,5,94,0,0,6352,6353,3,1328,664,0,6353,6365,1,0,0,0,6354,6355,5,138,
	0,0,6355,6356,5,351,0,0,6356,6357,3,524,262,0,6357,6358,5,300,0,0,6358,
	6359,5,143,0,0,6359,6360,3,1328,664,0,6360,6361,5,94,0,0,6361,6362,3,1328,
	664,0,6362,6363,3,108,54,0,6363,6365,1,0,0,0,6364,5896,1,0,0,0,6364,5903,
	1,0,0,0,6364,5910,1,0,0,0,6364,5917,1,0,0,0,6364,5924,1,0,0,0,6364,5931,
	1,0,0,0,6364,5940,1,0,0,0,6364,5949,1,0,0,0,6364,5956,1,0,0,0,6364,5963,
	1,0,0,0,6364,5971,1,0,0,0,6364,5981,1,0,0,0,6364,5991,1,0,0,0,6364,6000,
	1,0,0,0,6364,6011,1,0,0,0,6364,6018,1,0,0,0,6364,6025,1,0,0,0,6364,6032,
	1,0,0,0,6364,6039,1,0,0,0,6364,6046,1,0,0,0,6364,6053,1,0,0,0,6364,6060,
	1,0,0,0,6364,6069,1,0,0,0,6364,6076,1,0,0,0,6364,6085,1,0,0,0,6364,6092,
	1,0,0,0,6364,6101,1,0,0,0,6364,6109,1,0,0,0,6364,6119,1,0,0,0,6364,6126,
	1,0,0,0,6364,6135,1,0,0,0,6364,6143,1,0,0,0,6364,6153,1,0,0,0,6364,6162,
	1,0,0,0,6364,6173,1,0,0,0,6364,6182,1,0,0,0,6364,6193,1,0,0,0,6364,6203,
	1,0,0,0,6364,6215,1,0,0,0,6364,6224,1,0,0,0,6364,6235,1,0,0,0,6364,6245,
	1,0,0,0,6364,6257,1,0,0,0,6364,6266,1,0,0,0,6364,6275,1,0,0,0,6364,6283,
	1,0,0,0,6364,6290,1,0,0,0,6364,6297,1,0,0,0,6364,6304,1,0,0,0,6364,6311,
	1,0,0,0,6364,6320,1,0,0,0,6364,6329,1,0,0,0,6364,6338,1,0,0,0,6364,6347,
	1,0,0,0,6364,6354,1,0,0,0,6365,723,1,0,0,0,6366,6369,5,44,0,0,6367,6369,
	1,0,0,0,6368,6366,1,0,0,0,6368,6367,1,0,0,0,6369,725,1,0,0,0,6370,6371,
	5,324,0,0,6371,6374,5,174,0,0,6372,6374,1,0,0,0,6373,6370,1,0,0,0,6373,
	6372,1,0,0,0,6374,727,1,0,0,0,6375,6376,5,138,0,0,6376,6377,5,211,0,0,6377,
	6378,3,626,313,0,6378,6379,3,730,365,0,6379,6380,5,453,0,0,6380,6381,5,
	80,0,0,6381,6382,5,204,0,0,6382,6383,3,1328,664,0,6383,6433,1,0,0,0,6384,
	6385,5,138,0,0,6385,6386,5,287,0,0,6386,6387,3,626,313,0,6387,6388,3,730,
	365,0,6388,6389,5,453,0,0,6389,6390,5,80,0,0,6390,6391,5,204,0,0,6391,6392,
	3,1328,664,0,6392,6433,1,0,0,0,6393,6394,5,138,0,0,6394,6395,5,433,0,0,
	6395,6396,3,626,313,0,6396,6397,3,730,365,0,6397,6398,5,453,0,0,6398,6399,
	5,80,0,0,6399,6400,5,204,0,0,6400,6401,3,1328,664,0,6401,6433,1,0,0,0,6402,
	6403,5,138,0,0,6403,6404,5,348,0,0,6404,6405,3,1328,664,0,6405,6406,5,80,
	0,0,6406,6407,3,1324,662,0,6407,6408,3,730,365,0,6408,6409,5,453,0,0,6409,
	6410,5,80,0,0,6410,6411,5,204,0,0,6411,6412,3,1328,664,0,6412,6433,1,0,
	0,0,6413,6414,5,138,0,0,6414,6415,5,250,0,0,6415,6416,5,367,0,0,6416,6417,
	3,1324,662,0,6417,6418,3,730,365,0,6418,6419,5,453,0,0,6419,6420,5,80,0,
	0,6420,6421,5,204,0,0,6421,6422,3,1328,664,0,6422,6433,1,0,0,0,6423,6424,
	5,138,0,0,6424,6425,5,226,0,0,6425,6426,3,1324,662,0,6426,6427,3,730,365,
	0,6427,6428,5,453,0,0,6428,6429,5,80,0,0,6429,6430,5,204,0,0,6430,6431,
	3,1328,664,0,6431,6433,1,0,0,0,6432,6375,1,0,0,0,6432,6384,1,0,0,0,6432,
	6393,1,0,0,0,6432,6402,1,0,0,0,6432,6413,1,0,0,0,6432,6423,1,0,0,0,6433,
	729,1,0,0,0,6434,6437,5,260,0,0,6435,6437,1,0,0,0,6436,6434,1,0,0,0,6436,
	6435,1,0,0,0,6437,731,1,0,0,0,6438,6439,5,138,0,0,6439,6440,5,136,0,0,6440,
	6441,3,650,325,0,6441,6442,5,324,0,0,6442,6443,5,314,0,0,6443,6444,3,1328,
	664,0,6444,6656,1,0,0,0,6445,6446,5,138,0,0,6446,6447,5,108,0,0,6447,6448,
	3,524,262,0,6448,6449,5,324,0,0,6449,6450,5,314,0,0,6450,6451,3,1328,664,
	0,6451,6656,1,0,0,0,6452,6453,5,138,0,0,6453,6454,5,168,0,0,6454,6455,3,
	524,262,0,6455,6456,5,324,0,0,6456,6457,5,314,0,0,6457,6458,3,1328,664,
	0,6458,6656,1,0,0,0,6459,6460,5,138,0,0,6460,6461,5,189,0,0,6461,6462,3,
	524,262,0,6462,6463,5,324,0,0,6463,6464,5,314,0,0,6464,6465,3,1328,664,
	0,6465,6656,1,0,0,0,6466,6467,5,138,0,0,6467,6468,5,204,0,0,6468,6469,3,
	1328,664,0,6469,6470,5,324,0,0,6470,6471,5,314,0,0,6471,6472,3,1328,664,
	0,6472,6656,1,0,0,0,6473,6474,5,138,0,0,6474,6475,5,211,0,0,6475,6476,3,
	626,313,0,6476,6477,5,324,0,0,6477,6478,5,314,0,0,6478,6479,3,1328,664,
	0,6479,6656,1,0,0,0,6480,6481,5,138,0,0,6481,6482,5,269,0,0,6482,6483,3,
	688,344,0,6483,6484,5,324,0,0,6484,6485,5,314,0,0,6485,6486,3,1328,664,
	0,6486,6656,1,0,0,0,6487,6488,5,138,0,0,6488,6489,5,269,0,0,6489,6490,5,
	156,0,0,6490,6491,3,524,262,0,6491,6492,5,100,0,0,6492,6493,3,1328,664,
	0,6493,6494,5,324,0,0,6494,6495,5,314,0,0,6495,6496,3,1328,664,0,6496,6656,
	1,0,0,0,6497,6498,5,138,0,0,6498,6499,5,269,0,0,6499,6500,5,206,0,0,6500,
	6501,3,524,262,0,6501,6502,5,100,0,0,6502,6503,3,1328,664,0,6503,6504,5,
	324,0,0,6504,6505,5,314,0,0,6505,6506,3,1328,664,0,6506,6656,1,0,0,0,6507,
	6508,5,138,0,0,6508,6509,5,287,0,0,6509,6510,3,626,313,0,6510,6511,5,324,
	0,0,6511,6512,5,314,0,0,6512,6513,3,1328,664,0,6513,6656,1,0,0,0,6514,6515,
	5,138,0,0,6515,6516,5,433,0,0,6516,6517,3,626,313,0,6517,6518,5,324,0,0,
	6518,6519,5,314,0,0,6519,6520,3,1328,664,0,6520,6656,1,0,0,0,6521,6522,
	5,138,0,0,6522,6523,5,92,0,0,6523,6524,3,1064,532,0,6524,6525,5,324,0,0,
	6525,6526,5,314,0,0,6526,6527,3,1328,664,0,6527,6656,1,0,0,0,6528,6529,
	5,138,0,0,6529,6530,5,92,0,0,6530,6531,5,220,0,0,6531,6532,5,387,0,0,6532,
	6533,3,1064,532,0,6533,6534,5,324,0,0,6534,6535,5,314,0,0,6535,6536,3,1328,
	664,0,6536,6656,1,0,0,0,6537,6538,5,138,0,0,6538,6539,5,333,0,0,6539,6540,
	3,524,262,0,6540,6541,5,324,0,0,6541,6542,5,314,0,0,6542,6543,3,1328,664,
	0,6543,6656,1,0,0,0,6544,6545,5,138,0,0,6545,6546,5,346,0,0,6546,6547,5,
	316,0,0,6547,6548,5,274,0,0,6548,6549,3,524,262,0,6549,6550,5,324,0,0,6550,
	6551,5,314,0,0,6551,6552,3,1328,664,0,6552,6656,1,0,0,0,6553,6554,5,138,
	0,0,6554,6555,5,346,0,0,6555,6556,5,316,0,0,6556,6557,5,185,0,0,6557,6558,
	3,524,262,0,6558,6559,5,324,0,0,6559,6560,5,314,0,0,6560,6561,3,1328,664,
	0,6561,6656,1,0,0,0,6562,6563,5,138,0,0,6563,6564,5,346,0,0,6564,6565,5,
	316,0,0,6565,6566,5,344,0,0,6566,6567,3,524,262,0,6567,6568,5,324,0,0,6568,
	6569,5,314,0,0,6569,6570,3,1328,664,0,6570,6656,1,0,0,0,6571,6572,5,138,
	0,0,6572,6573,5,346,0,0,6573,6574,5,316,0,0,6574,6575,5,163,0,0,6575,6576,
	3,524,262,0,6576,6577,5,324,0,0,6577,6578,5,314,0,0,6578,6579,3,1328,664,
	0,6579,6656,1,0,0,0,6580,6581,5,138,0,0,6581,6582,5,319,0,0,6582,6583,3,
	1324,662,0,6583,6584,5,324,0,0,6584,6585,5,314,0,0,6585,6586,3,1328,664,
	0,6586,6656,1,0,0,0,6587,6588,5,138,0,0,6588,6589,5,319,0,0,6589,6590,5,
	220,0,0,6590,6591,5,387,0,0,6591,6592,3,1324,662,0,6592,6593,5,324,0,0,
	6593,6594,5,314,0,0,6594,6595,3,1328,664,0,6595,6656,1,0,0,0,6596,6597,
	5,138,0,0,6597,6598,5,367,0,0,6598,6599,3,1324,662,0,6599,6600,5,324,0,
	0,6600,6601,5,314,0,0,6601,6602,3,1328,664,0,6602,6656,1,0,0,0,6603,6604,
	5,138,0,0,6604,6605,5,367,0,0,6605,6606,5,220,0,0,6606,6607,5,387,0,0,6607,
	6608,3,1324,662,0,6608,6609,5,324,0,0,6609,6610,5,314,0,0,6610,6611,3,1328,
	664,0,6611,6656,1,0,0,0,6612,6613,5,138,0,0,6613,6614,5,250,0,0,6614,6615,
	5,367,0,0,6615,6616,3,1324,662,0,6616,6617,5,324,0,0,6617,6618,5,314,0,
	0,6618,6619,3,1328,664,0,6619,6656,1,0,0,0,6620,6621,5,138,0,0,6621,6622,
	5,250,0,0,6622,6623,5,367,0,0,6623,6624,5,220,0,0,6624,6625,5,387,0,0,6625,
	6626,3,1324,662,0,6626,6627,5,324,0,0,6627,6628,5,314,0,0,6628,6629,3,1328,
	664,0,6629,6656,1,0,0,0,6630,6631,5,138,0,0,6631,6632,5,63,0,0,6632,6633,
	5,92,0,0,6633,6634,3,1064,532,0,6634,6635,5,324,0,0,6635,6636,5,314,0,0,
	6636,6637,3,1328,664,0,6637,6656,1,0,0,0,6638,6639,5,138,0,0,6639,6640,
	5,63,0,0,6640,6641,5,92,0,0,6641,6642,5,220,0,0,6642,6643,5,387,0,0,6643,
	6644,3,1064,532,0,6644,6645,5,324,0,0,6645,6646,5,314,0,0,6646,6647,3,1328,
	664,0,6647,6656,1,0,0,0,6648,6649,5,138,0,0,6649,6650,5,351,0,0,6650,6651,
	3,524,262,0,6651,6652,5,324,0,0,6652,6653,5,314,0,0,6653,6654,3,1328,664,
	0,6654,6656,1,0,0,0,6655,6438,1,0,0,0,6655,6445,1,0,0,0,6655,6452,1,0,0,
	0,6655,6459,1,0,0,0,6655,6466,1,0,0,0,6655,6473,1,0,0,0,6655,6480,1,0,0,
	0,6655,6487,1,0,0,0,6655,6497,1,0,0,0,6655,6507,1,0,0,0,6655,6514,1,0,0,
	0,6655,6521,1,0,0,0,6655,6528,1,0,0,0,6655,6537,1,0,0,0,6655,6544,1,0,0,
	0,6655,6553,1,0,0,0,6655,6562,1,0,0,0,6655,6571,1,0,0,0,6655,6580,1,0,0,
	0,6655,6587,1,0,0,0,6655,6596,1,0,0,0,6655,6603,1,0,0,0,6655,6612,1,0,0,
	0,6655,6620,1,0,0,0,6655,6630,1,0,0,0,6655,6638,1,0,0,0,6655,6648,1,0,0,
	0,6656,733,1,0,0,0,6657,6658,5,138,0,0,6658,6659,5,269,0,0,6659,6660,3,
	688,344,0,6660,6661,5,324,0,0,6661,6662,5,2,0,0,6662,6663,3,736,368,0,6663,
	6664,5,3,0,0,6664,735,1,0,0,0,6665,6670,3,738,369,0,6666,6667,5,6,0,0,6667,
	6669,3,738,369,0,6668,6666,1,0,0,0,6669,6672,1,0,0,0,6670,6668,1,0,0,0,
	6670,6671,1,0,0,0,6671,737,1,0,0,0,6672,6670,1,0,0,0,6673,6674,3,1366,683,
	0,6674,6675,5,10,0,0,6675,6676,5,398,0,0,6676,6682,1,0,0,0,6677,6678,3,
	1366,683,0,6678,6679,5,10,0,0,6679,6680,3,740,370,0,6680,6682,1,0,0,0,6681,
	6673,1,0,0,0,6681,6677,1,0,0,0,6682,739,1,0,0,0,6683,6689,3,640,320,0,6684,
	6689,3,1378,689,0,6685,6689,3,1264,632,0,6686,6689,3,292,146,0,6687,6689,
	3,1346,673,0,6688,6683,1,0,0,0,6688,6684,1,0,0,0,6688,6685,1,0,0,0,6688,
	6686,1,0,0,0,6688,6687,1,0,0,0,6689,741,1,0,0,0,6690,6691,5,138,0,0,6691,
	6692,5,351,0,0,6692,6693,3,524,262,0,6693,6694,5,324,0,0,6694,6695,5,2,
	0,0,6695,6696,3,736,368,0,6696,6697,5,3,0,0,6697,743,1,0,0,0,6698,6699,
	5,138,0,0,6699,6700,5,136,0,0,6700,6701,3,650,325,0,6701,6702,5,273,0,0,
	6702,6703,5,94,0,0,6703,6704,3,1356,678,0,6704,6882,1,0,0,0,6705,6706,5,
	138,0,0,6706,6707,5,108,0,0,6707,6708,3,524,262,0,6708,6709,5,273,0,0,6709,
	6710,5,94,0,0,6710,6711,3,1356,678,0,6711,6882,1,0,0,0,6712,6713,5,138,
	0,0,6713,6714,5,168,0,0,6714,6715,3,524,262,0,6715,6716,5,273,0,0,6716,
	6717,5,94,0,0,6717,6718,3,1356,678,0,6718,6882,1,0,0,0,6719,6720,5,138,
	0,0,6720,6721,5,175,0,0,6721,6722,3,1328,664,0,6722,6723,5,273,0,0,6723,
	6724,5,94,0,0,6724,6725,3,1356,678,0,6725,6882,1,0,0,0,6726,6727,5,138,
	0,0,6727,6728,5,189,0,0,6728,6729,3,524,262,0,6729,6730,5,273,0,0,6730,
	6731,5,94,0,0,6731,6732,3,1356,678,0,6732,6882,1,0,0,0,6733,6734,5,138,
	0,0,6734,6735,5,211,0,0,6735,6736,3,626,313,0,6736,6737,5,273,0,0,6737,
	6738,5,94,0,0,6738,6739,3,1356,678,0,6739,6882,1,0,0,0,6740,6741,5,138,
	0,0,6741,6742,3,308,154,0,6742,6743,5,238,0,0,6743,6744,3,1328,664,0,6744,
	6745,5,273,0,0,6745,6746,5,94,0,0,6746,6747,3,1356,678,0,6747,6882,1,0,
	0,0,6748,6749,5,138,0,0,6749,6750,5,239,0,0,6750,6751,5,265,0,0,6751,6752,
	3,292,146,0,6752,6753,5,273,0,0,6753,6754,5,94,0,0,6754,6755,3,1356,678,
	0,6755,6882,1,0,0,0,6756,6757,5,138,0,0,6757,6758,5,269,0,0,6758,6759,3,
	688,344,0,6759,6760,5,273,0,0,6760,6761,5,94,0,0,6761,6762,3,1356,678,0,
	6762,6882,1,0,0,0,6763,6764,5,138,0,0,6764,6765,5,269,0,0,6765,6766,5,156,
	0,0,6766,6767,3,524,262,0,6767,6768,5,100,0,0,6768,6769,3,1328,664,0,6769,
	6770,5,273,0,0,6770,6771,5,94,0,0,6771,6772,3,1356,678,0,6772,6882,1,0,
	0,0,6773,6774,5,138,0,0,6774,6775,5,269,0,0,6775,6776,5,206,0,0,6776,6777,
	3,524,262,0,6777,6778,5,100,0,0,6778,6779,3,1328,664,0,6779,6780,5,273,
	0,0,6780,6781,5,94,0,0,6781,6782,3,1356,678,0,6782,6882,1,0,0,0,6783,6784,
	5,138,0,0,6784,6785,5,287,0,0,6785,6786,3,626,313,0,6786,6787,5,273,0,0,
	6787,6788,5,94,0,0,6788,6789,3,1356,678,0,6789,6882,1,0,0,0,6790,6791,5,
	138,0,0,6791,6792,5,433,0,0,6792,6793,3,626,313,0,6793,6794,5,273,0,0,6794,
	6795,5,94,0,0,6795,6796,3,1356,678,0,6796,6882,1,0,0,0,6797,6798,5,138,
	0,0,6798,6799,5,314,0,0,6799,6800,3,1328,664,0,6800,6801,5,273,0,0,6801,
	6802,5,94,0,0,6802,6803,3,1356,678,0,6803,6882,1,0,0,0,6804,6805,5,138,
	0,0,6805,6806,5,351,0,0,6806,6807,3,524,262,0,6807,6808,5,273,0,0,6808,
	6809,5,94,0,0,6809,6810,3,1356,678,0,6810,6882,1,0,0,0,6811,6812,5,138,
	0,0,6812,6813,5,342,0,0,6813,6814,3,1328,664,0,6814,6815,5,273,0,0,6815,
	6816,5,94,0,0,6816,6817,3,1356,678,0,6817,6882,1,0,0,0,6818,6819,5,138,
	0,0,6819,6820,5,333,0,0,6820,6821,3,524,262,0,6821,6822,5,273,0,0,6822,
	6823,5,94,0,0,6823,6824,3,1356,678,0,6824,6882,1,0,0,0,6825,6826,5,138,
	0,0,6826,6827,5,346,0,0,6827,6828,5,316,0,0,6828,6829,5,185,0,0,6829,6830,
	3,524,262,0,6830,6831,5,273,0,0,6831,6832,5,94,0,0,6832,6833,3,1356,678,
	0,6833,6882,1,0,0,0,6834,6835,5,138,0,0,6835,6836,5,346,0,0,6836,6837,5,
	316,0,0,6837,6838,5,163,0,0,6838,6839,3,524,262,0,6839,6840,5,273,0,0,6840,
	6841,5,94,0,0,6841,6842,3,1356,678,0,6842,6882,1,0,0,0,6843,6844,5,138,
	0,0,6844,6845,5,63,0,0,6845,6846,5,174,0,0,6846,6847,5,372,0,0,6847,6848,
	3,1328,664,0,6848,6849,5,273,0,0,6849,6850,5,94,0,0,6850,6851,3,1356,678,
	0,6851,6882,1,0,0,0,6852,6853,5,138,0,0,6853,6854,5,322,0,0,6854,6855,3,
	1328,664,0,6855,6856,5,273,0,0,6856,6857,5,94,0,0,6857,6858,3,1356,678,
	0,6858,6882,1,0,0,0,6859,6860,5,138,0,0,6860,6861,5,198,0,0,6861,6862,5,
	348,0,0,6862,6863,3,1328,664,0,6863,6864,5,273,0,0,6864,6865,5,94,0,0,6865,
	6866,3,1356,678,0,6866,6882,1,0,0,0,6867,6868,5,138,0,0,6868,6869,5,443,
	0,0,6869,6870,3,1328,664,0,6870,6871,5,273,0,0,6871,6872,5,94,0,0,6872,
	6873,3,1356,678,0,6873,6882,1,0,0,0,6874,6875,5,138,0,0,6875,6876,5,442,
	0,0,6876,6877,3,1328,664,0,6877,6878,5,273,0,0,6878,6879,5,94,0,0,6879,
	6880,3,1356,678,0,6880,6882,1,0,0,0,6881,6698,1,0,0,0,6881,6705,1,0,0,0,
	6881,6712,1,0,0,0,6881,6719,1,0,0,0,6881,6726,1,0,0,0,6881,6733,1,0,0,0,
	6881,6740,1,0,0,0,6881,6748,1,0,0,0,6881,6756,1,0,0,0,6881,6763,1,0,0,0,
	6881,6773,1,0,0,0,6881,6783,1,0,0,0,6881,6790,1,0,0,0,6881,6797,1,0,0,0,
	6881,6804,1,0,0,0,6881,6811,1,0,0,0,6881,6818,1,0,0,0,6881,6825,1,0,0,0,
	6881,6834,1,0,0,0,6881,6843,1,0,0,0,6881,6852,1,0,0,0,6881,6859,1,0,0,0,
	6881,6867,1,0,0,0,6881,6874,1,0,0,0,6882,745,1,0,0,0,6883,6884,5,46,0,0,
	6884,6885,5,443,0,0,6885,6886,3,1328,664,0,6886,6887,3,748,374,0,6887,6888,
	3,664,332,0,6888,747,1,0,0,0,6889,6892,3,750,375,0,6890,6892,1,0,0,0,6891,
	6889,1,0,0,0,6891,6890,1,0,0,0,6892,749,1,0,0,0,6893,6894,5,62,0,0,6894,
	6895,5,92,0,0,6895,6900,3,1066,533,0,6896,6897,5,62,0,0,6897,6898,5,30,
	0,0,6898,6900,5,341,0,0,6899,6893,1,0,0,0,6899,6896,1,0,0,0,6900,751,1,
	0,0,0,6901,6902,5,138,0,0,6902,6903,5,443,0,0,6903,6904,3,1328,664,0,6904,
	6905,5,324,0,0,6905,6906,3,460,230,0,6906,6929,1,0,0,0,6907,6908,5,138,
	0,0,6908,6909,5,443,0,0,6909,6910,3,1328,664,0,6910,6911,5,133,0,0,6911,
	6912,5,92,0,0,6912,6913,3,1066,533,0,6913,6929,1,0,0,0,6914,6915,5,138,
	0,0,6915,6916,5,443,0,0,6916,6917,3,1328,664,0,6917,6918,5,324,0,0,6918,
	6919,5,92,0,0,6919,6920,3,1066,533,0,6920,6929,1,0,0,0,6921,6922,5,138,
	0,0,6922,6923,5,443,0,0,6923,6924,3,1328,664,0,6924,6925,5,191,0,0,6925,
	6926,5,92,0,0,6926,6927,3,1066,533,0,6927,6929,1,0,0,0,6928,6901,1,0,0,
	0,6928,6907,1,0,0,0,6928,6914,1,0,0,0,6928,6921,1,0,0,0,6929,753,1,0,0,
	0,6930,6931,5,46,0,0,6931,6932,5,442,0,0,6932,6933,3,1328,664,0,6933,6934,
	5,164,0,0,6934,6935,3,1346,673,0,6935,6936,5,443,0,0,6936,6937,3,756,378,
	0,6937,6938,3,664,332,0,6938,755,1,0,0,0,6939,6944,3,758,379,0,6940,6941,
	5,6,0,0,6941,6943,3,758,379,0,6942,6940,1,0,0,0,6943,6946,1,0,0,0,6944,
	6942,1,0,0,0,6944,6945,1,0,0,0,6945,757,1,0,0,0,6946,6944,1,0,0,0,6947,
	6948,3,1366,683,0,6948,759,1,0,0,0,6949,6950,5,138,0,0,6950,6951,5,442,
	0,0,6951,6952,3,1328,664,0,6952,6953,5,324,0,0,6953,6954,3,460,230,0,6954,
	6987,1,0,0,0,6955,6956,5,138,0,0,6956,6957,5,442,0,0,6957,6958,3,1328,664,
	0,6958,6959,5,164,0,0,6959,6960,3,1346,673,0,6960,6987,1,0,0,0,6961,6962,
	5,138,0,0,6962,6963,5,442,0,0,6963,6964,3,1328,664,0,6964,6965,5,296,0,
	0,6965,6966,5,443,0,0,6966,6967,3,664,332,0,6967,6987,1,0,0,0,6968,6969,
	5,138,0,0,6969,6970,5,442,0,0,6970,6971,3,1328,664,0,6971,6972,5,324,0,
	0,6972,6973,5,443,0,0,6973,6974,3,756,378,0,6974,6975,3,664,332,0,6975,
	6987,1,0,0,0,6976,6977,5,138,0,0,6977,6978,5,442,0,0,6978,6979,3,1328,664,
	0,6979,6980,5,193,0,0,6980,6987,1,0,0,0,6981,6982,5,138,0,0,6982,6983,5,
	442,0,0,6983,6984,3,1328,664,0,6984,6985,5,186,0,0,6985,6987,1,0,0,0,6986,
	6949,1,0,0,0,6986,6955,1,0,0,0,6986,6961,1,0,0,0,6986,6968,1,0,0,0,6986,
	6976,1,0,0,0,6986,6981,1,0,0,0,6987,761,1,0,0,0,6988,6989,5,191,0,0,6989,
	6990,5,442,0,0,6990,6991,3,1328,664,0,6991,6992,3,108,54,0,6992,7001,1,
	0,0,0,6993,6994,5,191,0,0,6994,6995,5,442,0,0,6995,6996,5,220,0,0,6996,
	6997,5,387,0,0,6997,6998,3,1328,664,0,6998,6999,3,108,54,0,6999,7001,1,
	0,0,0,7000,6988,1,0,0,0,7000,6993,1,0,0,0,7001,763,1,0,0,0,7002,7003,5,
	46,0,0,7003,7004,3,618,309,0,7004,7005,5,312,0,0,7005,7006,3,1328,664,0,
	7006,7007,5,36,0,0,7007,7008,5,80,0,0,7008,7009,3,774,387,0,7009,7010,5,
	94,0,0,7010,7011,3,1324,662,0,7011,7012,3,1084,542,0,7012,7013,5,57,0,0,
	7013,7014,3,776,388,0,7014,7015,3,766,383,0,7015,765,1,0,0,0,7016,7023,
	5,261,0,0,7017,7023,3,770,385,0,7018,7019,5,2,0,0,7019,7020,3,768,384,0,
	7020,7021,5,3,0,0,7021,7023,1,0,0,0,7022,7016,1,0,0,0,7022,7017,1,0,0,0,
	7022,7018,1,0,0,0,7023,767,1,0,0,0,7024,7029,3,772,386,0,7025,7026,5,7,
	0,0,7026,7028,3,772,386,0,7027,7025,1,0,0,0,7028,7031,1,0,0,0,7029,7027,
	1,0,0,0,7029,7030,1,0,0,0,7030,769,1,0,0,0,7031,7029,1,0,0,0,7032,7038,
	3,952,476,0,7033,7038,3,902,451,0,7034,7038,3,934,467,0,7035,7038,3,920,
	460,0,7036,7038,3,778,389,0,7037,7032,1,0,0,0,7037,7033,1,0,0,0,7037,7034,
	1,0,0,0,7037,7035,1,0,0,0,7037,7036,1,0,0,0,7038,771,1,0,0,0,7039,7042,
	3,770,385,0,7040,7042,1,0,0,0,7041,7039,1,0,0,0,7041,7040,1,0,0,0,7042,
	773,1,0,0,0,7043,7044,7,29,0,0,7044,775,1,0,0,0,7045,7049,5,233,0,0,7046,
	7049,5,137,0,0,7047,7049,1,0,0,0,7048,7045,1,0,0,0,7048,7046,1,0,0,0,7048,
	7047,1,0,0,0,7049,777,1,0,0,0,7050,7051,5,262,0,0,7051,7052,3,1360,680,
	0,7052,7053,3,780,390,0,7053,779,1,0,0,0,7054,7055,5,6,0,0,7055,7058,3,
	1346,673,0,7056,7058,1,0,0,0,7057,7054,1,0,0,0,7057,7056,1,0,0,0,7058,781,
	1,0,0,0,7059,7060,5,243,0,0,7060,7061,3,1360,680,0,7061,783,1,0,0,0,7062,
	7063,5,357,0,0,7063,7067,3,1360,680,0,7064,7065,5,357,0,0,7065,7067,5,9,
	0,0,7066,7062,1,0,0,0,7066,7064,1,0,0,0,7067,785,1,0,0,0,7068,7069,5,129,
	0,0,7069,7070,3,788,394,0,7070,7071,3,796,398,0,7071,7119,1,0,0,0,7072,
	7073,5,146,0,0,7073,7074,3,788,394,0,7074,7075,3,794,397,0,7075,7119,1,
	0,0,0,7076,7077,5,331,0,0,7077,7078,5,347,0,0,7078,7119,3,794,397,0,7079,
	7080,5,161,0,0,7080,7081,3,788,394,0,7081,7082,3,796,398,0,7082,7119,1,
	0,0,0,7083,7084,5,445,0,0,7084,7085,3,788,394,0,7085,7086,3,796,398,0,7086,
	7119,1,0,0,0,7087,7088,5,310,0,0,7088,7089,3,788,394,0,7089,7090,3,796,
	398,0,7090,7119,1,0,0,0,7091,7092,5,313,0,0,7092,7119,3,1360,680,0,7093,
	7094,5,299,0,0,7094,7095,5,313,0,0,7095,7119,3,1360,680,0,7096,7097,5,299,
	0,0,7097,7119,3,1360,680,0,7098,7099,5,310,0,0,7099,7100,3,788,394,0,7100,
	7101,5,94,0,0,7101,7102,5,313,0,0,7102,7103,3,1360,680,0,7103,7119,1,0,
	0,0,7104,7105,5,310,0,0,7105,7106,3,788,394,0,7106,7107,5,94,0,0,7107,7108,
	3,1360,680,0,7108,7119,1,0,0,0,7109,7110,5,281,0,0,7110,7111,5,347,0,0,
	7111,7119,3,1346,673,0,7112,7113,5,161,0,0,7113,7114,5,282,0,0,7114,7119,
	3,1346,673,0,7115,7116,5,310,0,0,7116,7117,5,282,0,0,7117,7119,3,1346,673,
	0,7118,7068,1,0,0,0,7118,7072,1,0,0,0,7118,7076,1,0,0,0,7118,7079,1,0,0,
	0,7118,7083,1,0,0,0,7118,7087,1,0,0,0,7118,7091,1,0,0,0,7118,7093,1,0,0,
	0,7118,7096,1,0,0,0,7118,7098,1,0,0,0,7118,7104,1,0,0,0,7118,7109,1,0,0,
	0,7118,7112,1,0,0,0,7118,7115,1,0,0,0,7119,787,1,0,0,0,7120,7124,5,371,
	0,0,7121,7124,5,347,0,0,7122,7124,1,0,0,0,7123,7120,1,0,0,0,7123,7121,1,
	0,0,0,7123,7122,1,0,0,0,7124,789,1,0,0,0,7125,7126,5,235,0,0,7126,7127,
	5,242,0,0,7127,7136,3,64,32,0,7128,7129,5,291,0,0,7129,7136,5,81,0,0,7130,
	7131,5,291,0,0,7131,7136,5,373,0,0,7132,7136,5,54,0,0,7133,7134,5,77,0,
	0,7134,7136,5,54,0,0,7135,7125,1,0,0,0,7135,7128,1,0,0,0,7135,7130,1,0,
	0,0,7135,7132,1,0,0,0,7135,7133,1,0,0,0,7136,791,1,0,0,0,7137,7144,3,790,
	395,0,7138,7140,5,6,0,0,7139,7138,1,0,0,0,7139,7140,1,0,0,0,7140,7141,1,
	0,0,0,7141,7143,3,790,395,0,7142,7139,1,0,0,0,7143,7146,1,0,0,0,7144,7142,
	1,0,0,0,7144,7145,1,0,0,0,7145,793,1,0,0,0,7146,7144,1,0,0,0,7147,7150,
	3,792,396,0,7148,7150,1,0,0,0,7149,7147,1,0,0,0,7149,7148,1,0,0,0,7150,
	795,1,0,0,0,7151,7153,5,33,0,0,7152,7154,5,260,0,0,7153,7152,1,0,0,0,7153,
	7154,1,0,0,0,7154,7155,1,0,0,0,7155,7158,5,153,0,0,7156,7158,1,0,0,0,7157,
	7151,1,0,0,0,7157,7156,1,0,0,0,7158,797,1,0,0,0,7159,7162,5,46,0,0,7160,
	7161,5,82,0,0,7161,7163,5,302,0,0,7162,7160,1,0,0,0,7162,7163,1,0,0,0,7163,
	7164,1,0,0,0,7164,7178,3,174,87,0,7165,7166,5,367,0,0,7166,7167,3,1324,
	662,0,7167,7168,3,214,107,0,7168,7169,3,118,59,0,7169,7179,1,0,0,0,7170,
	7171,5,294,0,0,7171,7172,5,367,0,0,7172,7173,3,1324,662,0,7173,7174,5,2,
	0,0,7174,7175,3,216,108,0,7175,7176,5,3,0,0,7176,7177,3,118,59,0,7177,7179,
	1,0,0,0,7178,7165,1,0,0,0,7178,7170,1,0,0,0,7179,7180,1,0,0,0,7180,7181,
	5,36,0,0,7181,7182,3,952,476,0,7182,7183,3,800,400,0,7183,799,1,0,0,0,7184,
	7186,5,105,0,0,7185,7187,7,30,0,0,7186,7185,1,0,0,0,7186,7187,1,0,0,0,7187,
	7188,1,0,0,0,7188,7189,5,42,0,0,7189,7192,5,270,0,0,7190,7192,1,0,0,0,7191,
	7184,1,0,0,0,7191,7190,1,0,0,0,7192,801,1,0,0,0,7193,7194,5,244,0,0,7194,
	7195,3,1332,666,0,7195,803,1,0,0,0,7196,7197,5,46,0,0,7197,7198,5,175,0,
	0,7198,7199,3,1328,664,0,7199,7200,3,16,8,0,7200,7201,3,806,403,0,7201,
	805,1,0,0,0,7202,7205,3,808,404,0,7203,7205,1,0,0,0,7204,7202,1,0,0,0,7204,
	7203,1,0,0,0,7205,807,1,0,0,0,7206,7208,3,810,405,0,7207,7206,1,0,0,0,7208,
	7209,1,0,0,0,7209,7207,1,0,0,0,7209,7210,1,0,0,0,7210,809,1,0,0,0,7211,
	7212,3,812,406,0,7212,7216,3,814,407,0,7213,7217,3,1352,676,0,7214,7217,
	3,66,33,0,7215,7217,5,53,0,0,7216,7213,1,0,0,0,7216,7214,1,0,0,0,7216,7215,
	1,0,0,0,7217,811,1,0,0,0,7218,7227,3,1368,684,0,7219,7220,5,164,0,0,7220,
	7227,5,74,0,0,7221,7227,5,194,0,0,7222,7227,5,246,0,0,7223,7227,5,273,0,
	0,7224,7227,5,342,0,0,7225,7227,5,344,0,0,7226,7218,1,0,0,0,7226,7219,1,
	0,0,0,7226,7221,1,0,0,0,7226,7222,1,0,0,0,7226,7223,1,0,0,0,7226,7224,1,
	0,0,0,7226,7225,1,0,0,0,7227,813,1,0,0,0,7228,7231,5,10,0,0,7229,7231,1,
	0,0,0,7230,7228,1,0,0,0,7230,7229,1,0,0,0,7231,815,1,0,0,0,7232,7233,5,
	138,0,0,7233,7234,5,175,0,0,7234,7241,3,1328,664,0,7235,7236,5,105,0,0,
	7236,7242,3,806,403,0,7237,7242,3,806,403,0,7238,7239,5,324,0,0,7239,7240,
	5,342,0,0,7240,7242,3,1328,664,0,7241,7235,1,0,0,0,7241,7237,1,0,0,0,7241,
	7238,1,0,0,0,7242,817,1,0,0,0,7243,7244,5,138,0,0,7244,7245,5,175,0,0,7245,
	7246,3,1328,664,0,7246,7247,3,80,40,0,7247,819,1,0,0,0,7248,7249,5,191,
	0,0,7249,7252,5,175,0,0,7250,7251,5,220,0,0,7251,7253,5,387,0,0,7252,7250,
	1,0,0,0,7252,7253,1,0,0,0,7253,7254,1,0,0,0,7254,7260,3,1328,664,0,7255,
	7256,3,16,8,0,7256,7257,5,2,0,0,7257,7258,3,822,411,0,7258,7259,5,3,0,0,
	7259,7261,1,0,0,0,7260,7255,1,0,0,0,7260,7261,1,0,0,0,7261,821,1,0,0,0,
	7262,7267,3,824,412,0,7263,7264,5,6,0,0,7264,7266,3,824,412,0,7265,7263,
	1,0,0,0,7266,7269,1,0,0,0,7267,7265,1,0,0,0,7267,7268,1,0,0,0,7268,823,
	1,0,0,0,7269,7267,1,0,0,0,7270,7271,5,209,0,0,7271,825,1,0,0,0,7272,7273,
	5,138,0,0,7273,7274,5,108,0,0,7274,7275,3,524,262,0,7275,7276,5,296,0,0,
	7276,7277,5,366,0,0,7277,827,1,0,0,0,7278,7279,5,138,0,0,7279,7280,5,340,
	0,0,7280,7281,7,31,0,0,7281,7282,3,54,27,0,7282,829,1,0,0,0,7283,7284,5,
	46,0,0,7284,7285,5,189,0,0,7285,7286,3,524,262,0,7286,7287,3,834,417,0,
	7287,7288,3,1108,554,0,7288,7289,3,192,96,0,7289,831,1,0,0,0,7290,7291,
	5,138,0,0,7291,7292,5,189,0,0,7292,7314,3,524,262,0,7293,7315,3,106,53,
	0,7294,7295,5,191,0,0,7295,7296,5,77,0,0,7296,7315,5,78,0,0,7297,7298,5,
	324,0,0,7298,7299,5,77,0,0,7299,7315,5,78,0,0,7300,7301,5,133,0,0,7301,
	7315,3,208,104,0,7302,7303,5,191,0,0,7303,7306,5,45,0,0,7304,7305,5,220,
	0,0,7305,7307,5,387,0,0,7306,7304,1,0,0,0,7306,7307,1,0,0,0,7307,7308,1,
	0,0,0,7308,7309,3,1328,664,0,7309,7310,3,108,54,0,7310,7315,1,0,0,0,7311,
	7312,5,363,0,0,7312,7313,5,45,0,0,7313,7315,3,1328,664,0,7314,7293,1,0,
	0,0,7314,7294,1,0,0,0,7314,7297,1,0,0,0,7314,7300,1,0,0,0,7314,7302,1,0,
	0,0,7314,7311,1,0,0,0,7315,833,1,0,0,0,7316,7319,5,36,0,0,7317,7319,1,0,
	0,0,7318,7316,1,0,0,0,7318,7317,1,0,0,0,7319,835,1,0,0,0,7320,7321,5,138,
	0,0,7321,7322,5,346,0,0,7322,7323,5,316,0,0,7323,7324,5,185,0,0,7324,7325,
	3,524,262,0,7325,7326,3,460,230,0,7326,837,1,0,0,0,7327,7328,5,138,0,0,
	7328,7329,5,346,0,0,7329,7330,5,316,0,0,7330,7331,5,163,0,0,7331,7332,3,
	524,262,0,7332,7333,5,133,0,0,7333,7334,5,248,0,0,7334,7335,5,62,0,0,7335,
	7336,3,1326,663,0,7336,7337,3,840,420,0,7337,7338,3,522,261,0,7338,7400,
	1,0,0,0,7339,7340,5,138,0,0,7340,7341,5,346,0,0,7341,7342,5,316,0,0,7342,
	7343,5,163,0,0,7343,7344,3,524,262,0,7344,7345,5,138,0,0,7345,7346,5,248,
	0,0,7346,7347,5,62,0,0,7347,7348,3,1326,663,0,7348,7349,3,840,420,0,7349,
	7350,3,522,261,0,7350,7400,1,0,0,0,7351,7352,5,138,0,0,7352,7353,5,346,
	0,0,7353,7354,5,316,0,0,7354,7355,5,163,0,0,7355,7356,3,524,262,0,7356,
	7357,5,138,0,0,7357,7358,5,248,0,0,7358,7359,5,302,0,0,7359,7360,3,524,
	262,0,7360,7361,3,840,420,0,7361,7362,3,524,262,0,7362,7400,1,0,0,0,7363,
	7364,5,138,0,0,7364,7365,5,346,0,0,7365,7366,5,316,0,0,7366,7367,5,163,
	0,0,7367,7368,3,524,262,0,7368,7369,5,138,0,0,7369,7370,5,248,0,0,7370,
	7371,5,62,0,0,7371,7372,3,1326,663,0,7372,7373,5,302,0,0,7373,7374,3,524,
	262,0,7374,7375,3,840,420,0,7375,7376,3,524,262,0,7376,7400,1,0,0,0,7377,
	7378,5,138,0,0,7378,7379,5,346,0,0,7379,7380,5,316,0,0,7380,7381,5,163,
	0,0,7381,7382,3,524,262,0,7382,7383,5,191,0,0,7383,7384,5,248,0,0,7384,
	7385,5,62,0,0,7385,7386,3,1326,663,0,7386,7400,1,0,0,0,7387,7388,5,138,
	0,0,7388,7389,5,346,0,0,7389,7390,5,316,0,0,7390,7391,5,163,0,0,7391,7392,
	3,524,262,0,7392,7393,5,191,0,0,7393,7394,5,248,0,0,7394,7395,5,220,0,0,
	7395,7396,5,387,0,0,7396,7397,5,62,0,0,7397,7398,3,1326,663,0,7398,7400,
	1,0,0,0,7399,7327,1,0,0,0,7399,7339,1,0,0,0,7399,7351,1,0,0,0,7399,7363,
	1,0,0,0,7399,7377,1,0,0,0,7399,7387,1,0,0,0,7400,839,1,0,0,0,7401,7402,
	5,105,0,0,7402,841,1,0,0,0,7403,7404,5,46,0,0,7404,7405,3,488,244,0,7405,
	7406,5,168,0,0,7406,7407,3,524,262,0,7407,7408,5,62,0,0,7408,7409,3,1346,
	673,0,7409,7410,5,94,0,0,7410,7411,3,1346,673,0,7411,7412,5,64,0,0,7412,
	7413,3,524,262,0,7413,843,1,0,0,0,7414,7415,5,158,0,0,7415,7416,3,864,432,
	0,7416,7417,3,1324,662,0,7417,7418,3,846,423,0,7418,7428,1,0,0,0,7419,7420,
	5,158,0,0,7420,7428,3,864,432,0,7421,7422,5,158,0,0,7422,7423,3,864,432,
	0,7423,7424,3,1328,664,0,7424,7425,5,80,0,0,7425,7426,3,1324,662,0,7426,
	7428,1,0,0,0,7427,7414,1,0,0,0,7427,7419,1,0,0,0,7427,7421,1,0,0,0,7428,
	845,1,0,0,0,7429,7430,5,100,0,0,7430,7433,3,1328,664,0,7431,7433,1,0,0,
	0,7432,7429,1,0,0,0,7432,7431,1,0,0,0,7433,847,1,0,0,0,7434,7435,5,361,
	0,0,7435,7436,3,866,433,0,7436,7437,3,868,434,0,7437,7438,3,864,432,0,7438,
	7439,3,862,431,0,7439,7440,3,876,438,0,7440,7448,1,0,0,0,7441,7442,5,361,
	0,0,7442,7443,5,2,0,0,7443,7444,3,852,426,0,7444,7445,5,3,0,0,7445,7446,
	3,876,438,0,7446,7448,1,0,0,0,7447,7434,1,0,0,0,7447,7441,1,0,0,0,7448,
	849,1,0,0,0,7449,7450,3,854,427,0,7450,7451,3,864,432,0,7451,7452,3,876,
	438,0,7452,7460,1,0,0,0,7453,7454,3,854,427,0,7454,7455,5,2,0,0,7455,7456,
	3,852,426,0,7456,7457,5,3,0,0,7457,7458,3,876,438,0,7458,7460,1,0,0,0,7459,
	7449,1,0,0,0,7459,7453,1,0,0,0,7460,851,1,0,0,0,7461,7466,3,856,428,0,7462,
	7463,5,6,0,0,7463,7465,3,856,428,0,7464,7462,1,0,0,0,7465,7468,1,0,0,0,
	7466,7464,1,0,0,0,7466,7467,1,0,0,0,7467,853,1,0,0,0,7468,7466,1,0,0,0,
	7469,7470,7,32,0,0,7470,855,1,0,0,0,7471,7472,3,858,429,0,7472,7473,3,860,
	430,0,7473,857,1,0,0,0,7474,7477,3,1364,682,0,7475,7477,3,854,427,0,7476,
	7474,1,0,0,0,7476,7475,1,0,0,0,7477,859,1,0,0,0,7478,7482,3,66,33,0,7479,
	7482,3,292,146,0,7480,7482,1,0,0,0,7481,7478,1,0,0,0,7481,7479,1,0,0,0,
	7481,7480,1,0,0,0,7482,861,1,0,0,0,7483,7486,3,854,427,0,7484,7486,1,0,
	0,0,7485,7483,1,0,0,0,7485,7484,1,0,0,0,7486,863,1,0,0,0,7487,7490,5,128,
	0,0,7488,7490,1,0,0,0,7489,7487,1,0,0,0,7489,7488,1,0,0,0,7490,865,1,0,
	0,0,7491,7494,5,113,0,0,7492,7494,1,0,0,0,7493,7491,1,0,0,0,7493,7492,1,
	0,0,0,7494,867,1,0,0,0,7495,7498,5,112,0,0,7496,7498,1,0,0,0,7497,7495,
	1,0,0,0,7497,7496,1,0,0,0,7498,869,1,0,0,0,7499,7500,5,2,0,0,7500,7501,
	3,1326,663,0,7501,7502,5,3,0,0,7502,7505,1,0,0,0,7503,7505,1,0,0,0,7504,
	7499,1,0,0,0,7504,7503,1,0,0,0,7505,871,1,0,0,0,7506,7507,3,1324,662,0,
	7507,7508,3,870,435,0,7508,873,1,0,0,0,7509,7514,3,872,436,0,7510,7511,
	5,6,0,0,7511,7513,3,872,436,0,7512,7510,1,0,0,0,7513,7516,1,0,0,0,7514,
	7512,1,0,0,0,7514,7515,1,0,0,0,7515,875,1,0,0,0,7516,7514,1,0,0,0,7517,
	7520,3,874,437,0,7518,7520,1,0,0,0,7519,7517,1,0,0,0,7519,7518,1,0,0,0,
	7520,877,1,0,0,0,7521,7522,5,203,0,0,7522,7538,3,880,440,0,7523,7524,5,
	203,0,0,7524,7525,3,854,427,0,7525,7526,3,864,432,0,7526,7527,3,880,440,
	0,7527,7538,1,0,0,0,7528,7529,5,203,0,0,7529,7530,5,128,0,0,7530,7538,3,
	880,440,0,7531,7532,5,203,0,0,7532,7533,5,2,0,0,7533,7534,3,882,441,0,7534,
	7535,5,3,0,0,7535,7536,3,880,440,0,7536,7538,1,0,0,0,7537,7521,1,0,0,0,
	7537,7523,1,0,0,0,7537,7528,1,0,0,0,7537,7531,1,0,0,0,7538,879,1,0,0,0,
	7539,7549,3,952,476,0,7540,7549,3,902,451,0,7541,7549,3,934,467,0,7542,
	7549,3,920,460,0,7543,7549,3,944,472,0,7544,7549,3,264,132,0,7545,7549,
	3,270,135,0,7546,7549,3,276,138,0,7547,7549,3,896,448,0,7548,7539,1,0,0,
	0,7548,7540,1,0,0,0,7548,7541,1,0,0,0,7548,7542,1,0,0,0,7548,7543,1,0,0,
	0,7548,7544,1,0,0,0,7548,7545,1,0,0,0,7548,7546,1,0,0,0,7548,7547,1,0,0,
	0,7549,881,1,0,0,0,7550,7555,3,884,442,0,7551,7552,5,6,0,0,7552,7554,3,
	884,442,0,7553,7551,1,0,0,0,7554,7557,1,0,0,0,7555,7553,1,0,0,0,7555,7556,
	1,0,0,0,7556,883,1,0,0,0,7557,7555,1,0,0,0,7558,7559,3,886,443,0,7559,7560,
	3,888,444,0,7560,885,1,0,0,0,7561,7564,3,1364,682,0,7562,7564,3,854,427,
	0,7563,7561,1,0,0,0,7563,7562,1,0,0,0,7564,887,1,0,0,0,7565,7569,3,66,33,
	0,7566,7569,3,292,146,0,7567,7569,1,0,0,0,7568,7565,1,0,0,0,7568,7566,1,
	0,0,0,7568,7567,1,0,0,0,7569,889,1,0,0,0,7570,7571,5,281,0,0,7571,7572,
	3,1328,664,0,7572,7573,3,892,446,0,7573,7574,5,36,0,0,7574,7575,3,894,447,
	0,7575,891,1,0,0,0,7576,7577,5,2,0,0,7577,7578,3,1274,637,0,7578,7579,5,
	3,0,0,7579,7582,1,0,0,0,7580,7582,1,0,0,0,7581,7576,1,0,0,0,7581,7580,1,
	0,0,0,7582,893,1,0,0,0,7583,7588,3,952,476,0,7584,7588,3,902,451,0,7585,
	7588,3,934,467,0,7586,7588,3,920,460,0,7587,7583,1,0,0,0,7587,7584,1,0,
	0,0,7587,7585,1,0,0,0,7587,7586,1,0,0,0,7588,895,1,0,0,0,7589,7590,5,202,
	0,0,7590,7591,3,1328,664,0,7591,7592,3,898,449,0,7592,7617,1,0,0,0,7593,
	7594,5,46,0,0,7594,7595,3,174,87,0,7595,7596,5,92,0,0,7596,7597,3,266,133,
	0,7597,7598,5,36,0,0,7598,7599,5,202,0,0,7599,7600,3,1328,664,0,7600,7601,
	3,898,449,0,7601,7602,3,268,134,0,7602,7617,1,0,0,0,7603,7604,5,46,0,0,
	7604,7605,3,174,87,0,7605,7606,5,92,0,0,7606,7607,5,220,0,0,7607,7608,5,
	77,0,0,7608,7609,5,387,0,0,7609,7610,3,266,133,0,7610,7611,5,36,0,0,7611,
	7612,5,202,0,0,7612,7613,3,1328,664,0,7613,7614,3,898,449,0,7614,7615,3,
	268,134,0,7615,7617,1,0,0,0,7616,7589,1,0,0,0,7616,7593,1,0,0,0,7616,7603,
	1,0,0,0,7617,897,1,0,0,0,7618,7619,5,2,0,0,7619,7620,3,1268,634,0,7620,
	7621,5,3,0,0,7621,7624,1,0,0,0,7622,7624,1,0,0,0,7623,7618,1,0,0,0,7623,
	7622,1,0,0,0,7624,899,1,0,0,0,7625,7626,5,177,0,0,7626,7636,3,1328,664,
	0,7627,7628,5,177,0,0,7628,7629,5,281,0,0,7629,7636,3,1328,664,0,7630,7631,
	5,177,0,0,7631,7636,5,30,0,0,7632,7633,5,177,0,0,7633,7634,5,281,0,0,7634,
	7636,5,30,0,0,7635,7625,1,0,0,0,7635,7627,1,0,0,0,7635,7630,1,0,0,0,7635,
	7632,1,0,0,0,7636,901,1,0,0,0,7637,7638,3,974,487,0,7638,7639,5,232,0,0,
	7639,7640,5,71,0,0,7640,7641,3,904,452,0,7641,7642,3,906,453,0,7642,7643,
	3,914,457,0,7643,7644,3,918,459,0,7644,903,1,0,0,0,7645,7648,3,1324,662,
	0,7646,7647,5,36,0,0,7647,7649,3,1360,680,0,7648,7646,1,0,0,0,7648,7649,
	1,0,0,0,7649,905,1,0,0,0,7650,7670,3,952,476,0,7651,7652,5,454,0,0,7652,
	7653,3,908,454,0,7653,7654,5,441,0,0,7654,7655,3,952,476,0,7655,7670,1,
	0,0,0,7656,7657,5,2,0,0,7657,7658,3,910,455,0,7658,7663,5,3,0,0,7659,7660,
	5,454,0,0,7660,7661,3,908,454,0,7661,7662,5,441,0,0,7662,7664,1,0,0,0,7663,
	7659,1,0,0,0,7663,7664,1,0,0,0,7664,7665,1,0,0,0,7665,7666,3,952,476,0,
	7666,7670,1,0,0,0,7667,7668,5,53,0,0,7668,7670,5,413,0,0,7669,7650,1,0,
	0,0,7669,7651,1,0,0,0,7669,7656,1,0,0,0,7669,7667,1,0,0,0,7670,907,1,0,
	0,0,7671,7672,7,33,0,0,7672,909,1,0,0,0,7673,7678,3,912,456,0,7674,7675,
	5,6,0,0,7675,7677,3,912,456,0,7676,7674,1,0,0,0,7677,7680,1,0,0,0,7678,
	7676,1,0,0,0,7678,7679,1,0,0,0,7679,911,1,0,0,0,7680,7678,1,0,0,0,7681,
	7682,3,1360,680,0,7682,7683,3,1314,657,0,7683,913,1,0,0,0,7684,7685,5,80,
	0,0,7685,7686,5,455,0,0,7686,7687,3,916,458,0,7687,7694,5,57,0,0,7688,7689,
	5,360,0,0,7689,7690,5,324,0,0,7690,7691,3,936,468,0,7691,7692,3,1084,542,
	0,7692,7695,1,0,0,0,7693,7695,5,261,0,0,7694,7688,1,0,0,0,7694,7693,1,0,
	0,0,7695,7698,1,0,0,0,7696,7698,1,0,0,0,7697,7684,1,0,0,0,7697,7696,1,0,
	0,0,7698,915,1,0,0,0,7699,7700,5,2,0,0,7700,7701,3,598,299,0,7701,7702,
	5,3,0,0,7702,7703,3,1084,542,0,7703,7709,1,0,0,0,7704,7705,5,80,0,0,7705,
	7706,5,45,0,0,7706,7709,3,1328,664,0,7707,7709,1,0,0,0,7708,7699,1,0,0,
	0,7708,7704,1,0,0,0,7708,7707,1,0,0,0,7709,917,1,0,0,0,7710,7711,5,87,0,
	0,7711,7714,3,1318,659,0,7712,7714,1,0,0,0,7713,7710,1,0,0,0,7713,7712,
	1,0,0,0,7714,919,1,0,0,0,7715,7716,3,974,487,0,7716,7717,5,182,0,0,7717,
	7718,5,64,0,0,7718,7719,3,1068,534,0,7719,7720,3,922,461,0,7720,7721,3,
	1086,543,0,7721,7722,3,918,459,0,7722,921,1,0,0,0,7723,7724,5,100,0,0,7724,
	7727,3,1050,525,0,7725,7727,1,0,0,0,7726,7723,1,0,0,0,7726,7725,1,0,0,0,
	7727,923,1,0,0,0,7728,7729,5,247,0,0,7729,7730,3,982,491,0,7730,7731,3,
	1066,533,0,7731,7732,3,926,463,0,7732,7733,3,930,465,0,7733,925,1,0,0,0,
	7734,7735,5,68,0,0,7735,7736,3,928,464,0,7736,7737,5,254,0,0,7737,7740,
	1,0,0,0,7738,7740,1,0,0,0,7739,7734,1,0,0,0,7739,7738,1,0,0,0,7740,927,
	1,0,0,0,7741,7742,5,131,0,0,7742,7754,7,34,0,0,7743,7744,5,405,0,0,7744,
	7754,7,34,0,0,7745,7750,5,325,0,0,7746,7747,5,360,0,0,7747,7751,5,201,0,
	0,7748,7749,5,405,0,0,7749,7751,5,201,0,0,7750,7746,1,0,0,0,7750,7748,1,
	0,0,0,7750,7751,1,0,0,0,7751,7754,1,0,0,0,7752,7754,5,201,0,0,7753,7741,
	1,0,0,0,7753,7743,1,0,0,0,7753,7745,1,0,0,0,7753,7752,1,0,0,0,7754,929,
	1,0,0,0,7755,7758,5,263,0,0,7756,7758,1,0,0,0,7757,7755,1,0,0,0,7757,7756,
	1,0,0,0,7758,931,1,0,0,0,7759,7764,5,263,0,0,7760,7761,5,456,0,0,7761,7764,
	5,457,0,0,7762,7764,1,0,0,0,7763,7759,1,0,0,0,7763,7760,1,0,0,0,7763,7762,
	1,0,0,0,7764,933,1,0,0,0,7765,7766,3,974,487,0,7766,7767,5,360,0,0,7767,
	7768,3,1068,534,0,7768,7769,5,324,0,0,7769,7770,3,936,468,0,7770,7771,3,
	1048,524,0,7771,7772,3,1086,543,0,7772,7773,3,918,459,0,7773,935,1,0,0,
	0,7774,7779,3,938,469,0,7775,7776,5,6,0,0,7776,7778,3,938,469,0,7777,7775,
	1,0,0,0,7778,7781,1,0,0,0,7779,7777,1,0,0,0,7779,7780,1,0,0,0,7780,937,
	1,0,0,0,7781,7779,1,0,0,0,7782,7783,3,940,470,0,7783,7784,5,10,0,0,7784,
	7785,3,1152,576,0,7785,7793,1,0,0,0,7786,7787,5,2,0,0,7787,7788,3,942,471,
	0,7788,7789,5,3,0,0,7789,7790,5,10,0,0,7790,7791,3,1152,576,0,7791,7793,
	1,0,0,0,7792,7782,1,0,0,0,7792,7786,1,0,0,0,7793,939,1,0,0,0,7794,7795,
	3,1360,680,0,7795,7796,3,1314,657,0,7796,941,1,0,0,0,7797,7802,3,940,470,
	0,7798,7799,5,6,0,0,7799,7801,3,940,470,0,7800,7798,1,0,0,0,7801,7804,1,
	0,0,0,7802,7800,1,0,0,0,7802,7803,1,0,0,0,7803,943,1,0,0,0,7804,7802,1,
	0,0,0,7805,7806,5,178,0,0,7806,7807,3,946,473,0,7807,7808,3,948,474,0,7808,
	7809,5,172,0,0,7809,7810,3,950,475,0,7810,7811,5,62,0,0,7811,7812,3,952,
	476,0,7812,945,1,0,0,0,7813,7814,3,1328,664,0,7814,947,1,0,0,0,7815,7816,
	5,260,0,0,7816,7821,5,315,0,0,7817,7821,5,315,0,0,7818,7821,5,107,0,0,7819,
	7821,5,231,0,0,7820,7815,1,0,0,0,7820,7817,1,0,0,0,7820,7818,1,0,0,0,7820,
	7819,1,0,0,0,7821,7824,1,0,0,0,7822,7820,1,0,0,0,7822,7823,1,0,0,0,7823,
	949,1,0,0,0,7824,7822,1,0,0,0,7825,7831,1,0,0,0,7826,7827,5,105,0,0,7827,
	7831,5,217,0,0,7828,7829,5,370,0,0,7829,7831,5,217,0,0,7830,7825,1,0,0,
	0,7830,7826,1,0,0,0,7830,7828,1,0,0,0,7831,951,1,0,0,0,7832,7835,3,956,
	478,0,7833,7835,3,954,477,0,7834,7832,1,0,0,0,7834,7833,1,0,0,0,7835,953,
	1,0,0,0,7836,7837,5,2,0,0,7837,7838,3,956,478,0,7838,7839,5,3,0,0,7839,
	7845,1,0,0,0,7840,7841,5,2,0,0,7841,7842,3,954,477,0,7842,7843,5,3,0,0,
	7843,7845,1,0,0,0,7844,7836,1,0,0,0,7844,7840,1,0,0,0,7845,955,1,0,0,0,
	7846,7847,3,958,479,0,7847,7854,3,990,495,0,7848,7849,3,1034,517,0,7849,
	7850,3,1000,500,0,7850,7855,1,0,0,0,7851,7852,3,998,499,0,7852,7853,3,1036,
	518,0,7853,7855,1,0,0,0,7854,7848,1,0,0,0,7854,7851,1,0,0,0,7854,7855,1,
	0,0,0,7855,7868,1,0,0,0,7856,7857,3,966,483,0,7857,7858,3,958,479,0,7858,
	7865,3,990,495,0,7859,7860,3,1034,517,0,7860,7861,3,1000,500,0,7861,7866,
	1,0,0,0,7862,7863,3,998,499,0,7863,7864,3,1036,518,0,7864,7866,1,0,0,0,
	7865,7859,1,0,0,0,7865,7862,1,0,0,0,7865,7866,1,0,0,0,7866,7868,1,0,0,0,
	7867,7846,1,0,0,0,7867,7856,1,0,0,0,7868,957,1,0,0,0,7869,7872,3,960,480,
	0,7870,7872,3,954,477,0,7871,7869,1,0,0,0,7871,7870,1,0,0,0,7872,959,1,
	0,0,0,7873,7881,5,88,0,0,7874,7875,3,988,494,0,7875,7876,3,976,488,0,7876,
	7877,3,1316,658,0,7877,7882,1,0,0,0,7878,7879,3,986,493,0,7879,7880,3,1318,
	659,0,7880,7882,1,0,0,0,7881,7874,1,0,0,0,7881,7878,1,0,0,0,7882,7883,1,
	0,0,0,7883,7884,3,976,488,0,7884,7885,3,1048,524,0,7885,7886,3,1084,542,
	0,7886,7887,3,1018,509,0,7887,7888,3,1032,516,0,7888,7889,3,1228,614,0,
	7889,7900,1,0,0,0,7890,7900,3,1046,523,0,7891,7892,5,92,0,0,7892,7900,3,
	1064,532,0,7893,7894,3,954,477,0,7894,7897,3,964,482,0,7895,7898,3,960,
	480,0,7896,7898,3,954,477,0,7897,7895,1,0,0,0,7897,7896,1,0,0,0,7898,7900,
	1,0,0,0,7899,7873,1,0,0,0,7899,7890,1,0,0,0,7899,7891,1,0,0,0,7899,7893,
	1,0,0,0,7900,7908,1,0,0,0,7901,7904,3,964,482,0,7902,7905,3,960,480,0,7903,
	7905,3,954,477,0,7904,7902,1,0,0,0,7904,7903,1,0,0,0,7905,7907,1,0,0,0,
	7906,7901,1,0,0,0,7907,7910,1,0,0,0,7908,7906,1,0,0,0,7908,7909,1,0,0,0,
	7909,961,1,0,0,0,7910,7908,1,0,0,0,7911,7915,5,97,0,0,7912,7915,5,70,0,
	0,7913,7915,5,59,0,0,7914,7911,1,0,0,0,7914,7912,1,0,0,0,7914,7913,1,0,
	0,0,7915,963,1,0,0,0,7916,7917,3,962,481,0,7917,7918,3,984,492,0,7918,965,
	1,0,0,0,7919,7921,5,105,0,0,7920,7922,5,294,0,0,7921,7920,1,0,0,0,7921,
	7922,1,0,0,0,7922,7923,1,0,0,0,7923,7924,3,968,484,0,7924,967,1,0,0,0,7925,
	7930,3,970,485,0,7926,7927,5,6,0,0,7927,7929,3,970,485,0,7928,7926,1,0,
	0,0,7929,7932,1,0,0,0,7930,7928,1,0,0,0,7930,7931,1,0,0,0,7931,969,1,0,
	0,0,7932,7930,1,0,0,0,7933,7934,3,1328,664,0,7934,7935,3,870,435,0,7935,
	7936,5,36,0,0,7936,7937,3,972,486,0,7937,7938,5,2,0,0,7938,7939,3,894,447,
	0,7939,7940,5,3,0,0,7940,971,1,0,0,0,7941,7946,5,250,0,0,7942,7943,5,77,
	0,0,7943,7946,5,250,0,0,7944,7946,1,0,0,0,7945,7941,1,0,0,0,7945,7942,1,
	0,0,0,7945,7944,1,0,0,0,7946,973,1,0,0,0,7947,7950,3,966,483,0,7948,7950,
	1,0,0,0,7949,7947,1,0,0,0,7949,7948,1,0,0,0,7950,975,1,0,0,0,7951,7956,
	5,71,0,0,7952,7953,3,978,489,0,7953,7954,3,980,490,0,7954,7957,1,0,0,0,
	7955,7957,3,1550,775,0,7956,7952,1,0,0,0,7956,7955,1,0,0,0,7957,7960,1,
	0,0,0,7958,7960,1,0,0,0,7959,7951,1,0,0,0,7959,7958,1,0,0,0,7960,977,1,
	0,0,0,7961,7964,1,0,0,0,7962,7964,5,337,0,0,7963,7961,1,0,0,0,7963,7962,
	1,0,0,0,7964,979,1,0,0,0,7965,7967,7,35,0,0,7966,7965,1,0,0,0,7966,7967,
	1,0,0,0,7967,7968,1,0,0,0,7968,7969,7,11,0,0,7969,7970,3,982,491,0,7970,
	7971,3,1324,662,0,7971,7980,1,0,0,0,7972,7973,5,358,0,0,7973,7974,3,982,
	491,0,7974,7975,3,1324,662,0,7975,7980,1,0,0,0,7976,7977,5,92,0,0,7977,
	7980,3,1324,662,0,7978,7980,3,1324,662,0,7979,7966,1,0,0,0,7979,7972,1,
	0,0,0,7979,7976,1,0,0,0,7979,7978,1,0,0,0,7980,981,1,0,0,0,7981,7984,5,
	92,0,0,7982,7984,1,0,0,0,7983,7981,1,0,0,0,7983,7982,1,0,0,0,7984,983,1,
	0,0,0,7985,7989,5,30,0,0,7986,7989,5,56,0,0,7987,7989,1,0,0,0,7988,7985,
	1,0,0,0,7988,7986,1,0,0,0,7988,7987,1,0,0,0,7989,985,1,0,0,0,7990,7996,
	5,56,0,0,7991,7992,5,80,0,0,7992,7993,5,2,0,0,7993,7994,3,1268,634,0,7994,
	7995,5,3,0,0,7995,7997,1,0,0,0,7996,7991,1,0,0,0,7996,7997,1,0,0,0,7997,
	987,1,0,0,0,7998,8001,5,30,0,0,7999,8001,1,0,0,0,8000,7998,1,0,0,0,8000,
	7999,1,0,0,0,8001,989,1,0,0,0,8002,8005,3,992,496,0,8003,8005,1,0,0,0,8004,
	8002,1,0,0,0,8004,8003,1,0,0,0,8005,991,1,0,0,0,8006,8007,5,83,0,0,8007,
	8008,5,147,0,0,8008,8009,3,994,497,0,8009,993,1,0,0,0,8010,8015,3,996,498,
	0,8011,8012,5,6,0,0,8012,8014,3,996,498,0,8013,8011,1,0,0,0,8014,8017,1,
	0,0,0,8015,8013,1,0,0,0,8015,8016,1,0,0,0,8016,995,1,0,0,0,8017,8015,1,
	0,0,0,8018,8022,3,1152,576,0,8019,8020,5,100,0,0,8020,8023,3,1264,632,0,
	8021,8023,3,612,306,0,8022,8019,1,0,0,0,8022,8021,1,0,0,0,8023,8024,1,0,
	0,0,8024,8025,3,614,307,0,8025,997,1,0,0,0,8026,8028,3,1002,501,0,8027,
	8029,3,1004,502,0,8028,8027,1,0,0,0,8028,8029,1,0,0,0,8029,8035,1,0,0,0,
	8030,8032,3,1004,502,0,8031,8033,3,1002,501,0,8032,8031,1,0,0,0,8032,8033,
	1,0,0,0,8033,8035,1,0,0,0,8034,8026,1,0,0,0,8034,8030,1,0,0,0,8035,999,
	1,0,0,0,8036,8039,3,998,499,0,8037,8039,1,0,0,0,8038,8036,1,0,0,0,8038,
	8037,1,0,0,0,8039,1001,1,0,0,0,8040,8041,5,74,0,0,8041,8044,3,1006,503,
	0,8042,8043,5,6,0,0,8043,8045,3,1008,504,0,8044,8042,1,0,0,0,8044,8045,
	1,0,0,0,8045,8064,1,0,0,0,8046,8047,5,61,0,0,8047,8061,3,1016,508,0,8048,
	8049,3,1010,505,0,8049,8053,3,1014,507,0,8050,8054,5,81,0,0,8051,8052,5,
	105,0,0,8052,8054,5,458,0,0,8053,8050,1,0,0,0,8053,8051,1,0,0,0,8054,8062,
	1,0,0,0,8055,8059,3,1014,507,0,8056,8060,5,81,0,0,8057,8058,5,105,0,0,8058,
	8060,5,458,0,0,8059,8056,1,0,0,0,8059,8057,1,0,0,0,8060,8062,1,0,0,0,8061,
	8048,1,0,0,0,8061,8055,1,0,0,0,8062,8064,1,0,0,0,8063,8040,1,0,0,0,8063,
	8046,1,0,0,0,8064,1003,1,0,0,0,8065,8070,5,79,0,0,8066,8071,3,1008,504,
	0,8067,8068,3,1010,505,0,8068,8069,3,1014,507,0,8069,8071,1,0,0,0,8070,
	8066,1,0,0,0,8070,8067,1,0,0,0,8071,1005,1,0,0,0,8072,8075,3,1152,576,0,
	8073,8075,5,30,0,0,8074,8072,1,0,0,0,8074,8073,1,0,0,0,8075,1007,1,0,0,
	0,8076,8077,3,1152,576,0,8077,1009,1,0,0,0,8078,8084,3,1194,597,0,8079,
	8080,5,12,0,0,8080,8084,3,1012,506,0,8081,8082,5,13,0,0,8082,8084,3,1012,
	506,0,8083,8078,1,0,0,0,8083,8079,1,0,0,0,8083,8081,1,0,0,0,8084,1011,1,
	0,0,0,8085,8088,3,1344,672,0,8086,8088,3,1342,671,0,8087,8085,1,0,0,0,8087,
	8086,1,0,0,0,8088,1013,1,0,0,0,8089,8090,7,36,0,0,8090,1015,1,0,0,0,8091,
	8092,7,37,0,0,8092,1017,1,0,0,0,8093,8094,5,66,0,0,8094,8095,5,147,0,0,
	8095,8098,3,1020,510,0,8096,8098,1,0,0,0,8097,8093,1,0,0,0,8097,8096,1,
	0,0,0,8098,1019,1,0,0,0,8099,8104,3,1022,511,0,8100,8101,5,6,0,0,8101,8103,
	3,1022,511,0,8102,8100,1,0,0,0,8103,8106,1,0,0,0,8104,8102,1,0,0,0,8104,
	8105,1,0,0,0,8105,1021,1,0,0,0,8106,8104,1,0,0,0,8107,8113,3,1152,576,0,
	8108,8113,3,1024,512,0,8109,8113,3,1028,514,0,8110,8113,3,1026,513,0,8111,
	8113,3,1030,515,0,8112,8107,1,0,0,0,8112,8108,1,0,0,0,8112,8109,1,0,0,0,
	8112,8110,1,0,0,0,8112,8111,1,0,0,0,8113,1023,1,0,0,0,8114,8115,5,2,0,0,
	8115,8116,5,3,0,0,8116,1025,1,0,0,0,8117,8118,5,459,0,0,8118,8119,5,2,0,
	0,8119,8120,3,1268,634,0,8120,8121,5,3,0,0,8121,1027,1,0,0,0,8122,8123,
	5,460,0,0,8123,8124,5,2,0,0,8124,8125,3,1268,634,0,8125,8126,5,3,0,0,8126,
	1029,1,0,0,0,8127,8128,5,461,0,0,8128,8129,5,462,0,0,8129,8130,5,2,0,0,
	8130,8131,3,1020,510,0,8131,8132,5,3,0,0,8132,1031,1,0,0,0,8133,8134,5,
	67,0,0,8134,8137,3,1152,576,0,8135,8137,1,0,0,0,8136,8133,1,0,0,0,8136,
	8135,1,0,0,0,8137,1033,1,0,0,0,8138,8143,3,1038,519,0,8139,8140,5,62,0,
	0,8140,8141,5,291,0,0,8141,8143,5,81,0,0,8142,8138,1,0,0,0,8142,8139,1,
	0,0,0,8143,1035,1,0,0,0,8144,8147,3,1034,517,0,8145,8147,1,0,0,0,8146,8144,
	1,0,0,0,8146,8145,1,0,0,0,8147,1037,1,0,0,0,8148,8150,3,1040,520,0,8149,
	8148,1,0,0,0,8150,8151,1,0,0,0,8151,8149,1,0,0,0,8151,8152,1,0,0,0,8152,
	1039,1,0,0,0,8153,8154,3,1042,521,0,8154,8155,3,1044,522,0,8155,8156,3,
	932,466,0,8156,1041,1,0,0,0,8157,8167,5,62,0,0,8158,8159,5,260,0,0,8159,
	8161,5,236,0,0,8160,8158,1,0,0,0,8160,8161,1,0,0,0,8161,8162,1,0,0,0,8162,
	8168,5,360,0,0,8163,8165,5,236,0,0,8164,8163,1,0,0,0,8164,8165,1,0,0,0,
	8165,8166,1,0,0,0,8166,8168,5,325,0,0,8167,8160,1,0,0,0,8167,8164,1,0,0,
	0,8168,1043,1,0,0,0,8169,8170,5,266,0,0,8170,8173,3,1322,661,0,8171,8173,
	1,0,0,0,8172,8169,1,0,0,0,8172,8171,1,0,0,0,8173,1045,1,0,0,0,8174,8175,
	5,413,0,0,8175,8176,5,2,0,0,8176,8177,3,1268,634,0,8177,8185,5,3,0,0,8178,
	8179,5,6,0,0,8179,8180,5,2,0,0,8180,8181,3,1268,634,0,8181,8182,5,3,0,0,
	8182,8184,1,0,0,0,8183,8178,1,0,0,0,8184,8187,1,0,0,0,8185,8183,1,0,0,0,
	8185,8186,1,0,0,0,8186,1047,1,0,0,0,8187,8185,1,0,0,0,8188,8189,5,64,0,
	0,8189,8192,3,1050,525,0,8190,8192,1,0,0,0,8191,8188,1,0,0,0,8191,8190,
	1,0,0,0,8192,1049,1,0,0,0,8193,8198,3,1052,526,0,8194,8195,5,6,0,0,8195,
	8197,3,1052,526,0,8196,8194,1,0,0,0,8197,8200,1,0,0,0,8198,8196,1,0,0,0,
	8198,8199,1,0,0,0,8199,1051,1,0,0,0,8200,8198,1,0,0,0,8201,8202,3,1064,
	532,0,8202,8204,3,1056,528,0,8203,8205,3,1070,535,0,8204,8203,1,0,0,0,8204,
	8205,1,0,0,0,8205,8251,1,0,0,0,8206,8207,3,1074,537,0,8207,8208,3,1058,
	529,0,8208,8251,1,0,0,0,8209,8210,3,1094,547,0,8210,8211,3,1056,528,0,8211,
	8251,1,0,0,0,8212,8213,3,954,477,0,8213,8214,3,1056,528,0,8214,8251,1,0,
	0,0,8215,8225,5,72,0,0,8216,8217,3,1094,547,0,8217,8218,3,1056,528,0,8218,
	8226,1,0,0,0,8219,8220,3,1074,537,0,8220,8221,3,1058,529,0,8221,8226,1,
	0,0,0,8222,8223,3,954,477,0,8223,8224,3,1056,528,0,8224,8226,1,0,0,0,8225,
	8216,1,0,0,0,8225,8219,1,0,0,0,8225,8222,1,0,0,0,8226,8251,1,0,0,0,8227,
	8228,5,2,0,0,8228,8245,3,1052,526,0,8229,8230,5,110,0,0,8230,8231,5,118,
	0,0,8231,8246,3,1052,526,0,8232,8234,5,121,0,0,8233,8235,3,1060,530,0,8234,
	8233,1,0,0,0,8234,8235,1,0,0,0,8235,8236,1,0,0,0,8236,8237,5,118,0,0,8237,
	8246,3,1052,526,0,8238,8240,3,1060,530,0,8239,8238,1,0,0,0,8239,8240,1,
	0,0,0,8240,8241,1,0,0,0,8241,8242,5,118,0,0,8242,8243,3,1052,526,0,8243,
	8244,3,1062,531,0,8244,8246,1,0,0,0,8245,8229,1,0,0,0,8245,8232,1,0,0,0,
	8245,8239,1,0,0,0,8245,8246,1,0,0,0,8246,8247,1,0,0,0,8247,8248,5,3,0,0,
	8248,8249,3,1056,528,0,8249,8251,1,0,0,0,8250,8201,1,0,0,0,8250,8206,1,
	0,0,0,8250,8209,1,0,0,0,8250,8212,1,0,0,0,8250,8215,1,0,0,0,8250,8227,1,
	0,0,0,8251,8270,1,0,0,0,8252,8253,5,110,0,0,8253,8254,5,118,0,0,8254,8269,
	3,1052,526,0,8255,8257,5,121,0,0,8256,8258,3,1060,530,0,8257,8256,1,0,0,
	0,8257,8258,1,0,0,0,8258,8259,1,0,0,0,8259,8260,5,118,0,0,8260,8269,3,1052,
	526,0,8261,8263,3,1060,530,0,8262,8261,1,0,0,0,8262,8263,1,0,0,0,8263,8264,
	1,0,0,0,8264,8265,5,118,0,0,8265,8266,3,1052,526,0,8266,8267,3,1062,531,
	0,8267,8269,1,0,0,0,8268,8252,1,0,0,0,8268,8255,1,0,0,0,8268,8262,1,0,0,
	0,8269,8272,1,0,0,0,8270,8268,1,0,0,0,8270,8271,1,0,0,0,8271,1053,1,0,0,
	0,8272,8270,1,0,0,0,8273,8275,5,36,0,0,8274,8273,1,0,0,0,8274,8275,1,0,
	0,0,8275,8276,1,0,0,0,8276,8281,3,1360,680,0,8277,8278,5,2,0,0,8278,8279,
	3,1326,663,0,8279,8280,5,3,0,0,8280,8282,1,0,0,0,8281,8277,1,0,0,0,8281,
	8282,1,0,0,0,8282,1055,1,0,0,0,8283,8286,3,1054,527,0,8284,8286,1,0,0,0,
	8285,8283,1,0,0,0,8285,8284,1,0,0,0,8286,1057,1,0,0,0,8287,8301,3,1054,
	527,0,8288,8290,5,36,0,0,8289,8291,3,1360,680,0,8290,8289,1,0,0,0,8290,
	8291,1,0,0,0,8291,8294,1,0,0,0,8292,8294,3,1360,680,0,8293,8288,1,0,0,0,
	8293,8292,1,0,0,0,8294,8295,1,0,0,0,8295,8296,5,2,0,0,8296,8297,3,1090,
	545,0,8297,8298,5,3,0,0,8298,8301,1,0,0,0,8299,8301,1,0,0,0,8300,8287,1,
	0,0,0,8300,8293,1,0,0,0,8300,8299,1,0,0,0,8301,1059,1,0,0,0,8302,8304,7,
	38,0,0,8303,8305,5,123,0,0,8304,8303,1,0,0,0,8304,8305,1,0,0,0,8305,1061,
	1,0,0,0,8306,8307,5,100,0,0,8307,8308,5,2,0,0,8308,8309,3,1326,663,0,8309,
	8310,5,3,0,0,8310,8314,1,0,0,0,8311,8312,5,80,0,0,8312,8314,3,1152,576,
	0,8313,8306,1,0,0,0,8313,8311,1,0,0,0,8314,1063,1,0,0,0,8315,8317,3,1324,
	662,0,8316,8318,5,9,0,0,8317,8316,1,0,0,0,8317,8318,1,0,0,0,8318,8328,1,
	0,0,0,8319,8325,5,81,0,0,8320,8326,3,1324,662,0,8321,8322,5,2,0,0,8322,
	8323,3,1324,662,0,8323,8324,5,3,0,0,8324,8326,1,0,0,0,8325,8320,1,0,0,0,
	8325,8321,1,0,0,0,8326,8328,1,0,0,0,8327,8315,1,0,0,0,8327,8319,1,0,0,0,
	8328,1065,1,0,0,0,8329,8334,3,1064,532,0,8330,8331,5,6,0,0,8331,8333,3,
	1064,532,0,8332,8330,1,0,0,0,8333,8336,1,0,0,0,8334,8332,1,0,0,0,8334,8335,
	1,0,0,0,8335,1067,1,0,0,0,8336,8334,1,0,0,0,8337,8342,3,1064,532,0,8338,
	8340,5,36,0,0,8339,8338,1,0,0,0,8339,8340,1,0,0,0,8340,8341,1,0,0,0,8341,
	8343,3,1360,680,0,8342,8339,1,0,0,0,8342,8343,1,0,0,0,8343,1069,1,0,0,0,
	8344,8345,5,463,0,0,8345,8346,3,1334,667,0,8346,8347,5,2,0,0,8347,8348,
	3,1268,634,0,8348,8349,5,3,0,0,8349,8350,3,1072,536,0,8350,1071,1,0,0,0,
	8351,8352,5,301,0,0,8352,8353,5,2,0,0,8353,8354,3,1152,576,0,8354,8355,
	5,3,0,0,8355,8358,1,0,0,0,8356,8358,1,0,0,0,8357,8351,1,0,0,0,8357,8356,
	1,0,0,0,8358,1073,1,0,0,0,8359,8360,3,1202,601,0,8360,8361,3,1082,541,0,
	8361,8370,1,0,0,0,8362,8363,5,311,0,0,8363,8364,5,64,0,0,8364,8365,5,2,
	0,0,8365,8366,3,1078,539,0,8366,8367,5,3,0,0,8367,8368,3,1082,541,0,8368,
	8370,1,0,0,0,8369,8359,1,0,0,0,8369,8362,1,0,0,0,8370,1075,1,0,0,0,8371,
	8372,3,1202,601,0,8372,8373,3,1080,540,0,8373,1077,1,0,0,0,8374,8379,3,
	1076,538,0,8375,8376,5,6,0,0,8376,8378,3,1076,538,0,8377,8375,1,0,0,0,8378,
	8381,1,0,0,0,8379,8377,1,0,0,0,8379,8380,1,0,0,0,8380,1079,1,0,0,0,8381,
	8379,1,0,0,0,8382,8383,5,36,0,0,8383,8384,5,2,0,0,8384,8385,3,1090,545,
	0,8385,8386,5,3,0,0,8386,8389,1,0,0,0,8387,8389,1,0,0,0,8388,8382,1,0,0,
	0,8388,8387,1,0,0,0,8389,1081,1,0,0,0,8390,8391,5,105,0,0,8391,8394,5,464,
	0,0,8392,8394,1,0,0,0,8393,8390,1,0,0,0,8393,8392,1,0,0,0,8394,1083,1,0,
	0,0,8395,8396,5,103,0,0,8396,8399,3,1152,576,0,8397,8399,1,0,0,0,8398,8395,
	1,0,0,0,8398,8397,1,0,0,0,8399,1085,1,0,0,0,8400,8405,5,103,0,0,8401,8402,
	5,425,0,0,8402,8403,5,266,0,0,8403,8406,3,946,473,0,8404,8406,3,1152,576,
	0,8405,8401,1,0,0,0,8405,8404,1,0,0,0,8406,8409,1,0,0,0,8407,8409,1,0,0,
	0,8408,8400,1,0,0,0,8408,8407,1,0,0,0,8409,1087,1,0,0,0,8410,8413,3,1090,
	545,0,8411,8413,1,0,0,0,8412,8410,1,0,0,0,8412,8411,1,0,0,0,8413,1089,1,
	0,0,0,8414,8419,3,1092,546,0,8415,8416,5,6,0,0,8416,8418,3,1092,546,0,8417,
	8415,1,0,0,0,8418,8421,1,0,0,0,8419,8417,1,0,0,0,8419,8420,1,0,0,0,8420,
	1091,1,0,0,0,8421,8419,1,0,0,0,8422,8423,3,1360,680,0,8423,8424,3,1108,
	554,0,8424,8425,3,110,55,0,8425,1093,1,0,0,0,8426,8427,5,465,0,0,8427,8443,
	5,2,0,0,8428,8429,3,1194,597,0,8429,8430,3,1220,610,0,8430,8431,5,466,0,
	0,8431,8432,3,1096,548,0,8432,8444,1,0,0,0,8433,8434,5,467,0,0,8434,8435,
	5,2,0,0,8435,8436,3,1104,552,0,8436,8437,5,3,0,0,8437,8438,5,6,0,0,8438,
	8439,3,1194,597,0,8439,8440,3,1220,610,0,8440,8441,5,466,0,0,8441,8442,
	3,1096,548,0,8442,8444,1,0,0,0,8443,8428,1,0,0,0,8443,8433,1,0,0,0,8444,
	8445,1,0,0,0,8445,8446,5,3,0,0,8446,1095,1,0,0,0,8447,8452,3,1098,549,0,
	8448,8449,5,6,0,0,8449,8451,3,1098,549,0,8450,8448,1,0,0,0,8451,8454,1,
	0,0,0,8452,8450,1,0,0,0,8452,8453,1,0,0,0,8453,1097,1,0,0,0,8454,8452,1,
	0,0,0,8455,8462,3,1360,680,0,8456,8458,3,1108,554,0,8457,8459,3,1100,550,
	0,8458,8457,1,0,0,0,8458,8459,1,0,0,0,8459,8463,1,0,0,0,8460,8461,5,62,
	0,0,8461,8463,5,464,0,0,8462,8456,1,0,0,0,8462,8460,1,0,0,0,8463,1099,1,
	0,0,0,8464,8466,3,1102,551,0,8465,8464,1,0,0,0,8466,8467,1,0,0,0,8467,8465,
	1,0,0,0,8467,8468,1,0,0,0,8468,1101,1,0,0,0,8469,8470,5,53,0,0,8470,8478,
	3,1152,576,0,8471,8472,3,1368,684,0,8472,8473,3,1152,576,0,8473,8478,1,
	0,0,0,8474,8475,5,77,0,0,8475,8478,5,78,0,0,8476,8478,5,78,0,0,8477,8469,
	1,0,0,0,8477,8471,1,0,0,0,8477,8474,1,0,0,0,8477,8476,1,0,0,0,8478,1103,
	1,0,0,0,8479,8484,3,1106,553,0,8480,8481,5,6,0,0,8481,8483,3,1106,553,0,
	8482,8480,1,0,0,0,8483,8486,1,0,0,0,8484,8482,1,0,0,0,8484,8485,1,0,0,0,
	8485,1105,1,0,0,0,8486,8484,1,0,0,0,8487,8488,3,1192,596,0,8488,8489,5,
	36,0,0,8489,8490,3,1366,683,0,8490,8494,1,0,0,0,8491,8492,5,53,0,0,8492,
	8494,3,1192,596,0,8493,8487,1,0,0,0,8493,8491,1,0,0,0,8494,1107,1,0,0,0,
	8495,8497,5,406,0,0,8496,8495,1,0,0,0,8496,8497,1,0,0,0,8497,8498,1,0,0,
	0,8498,8507,3,1112,556,0,8499,8508,3,1110,555,0,8500,8505,5,35,0,0,8501,
	8502,5,4,0,0,8502,8503,3,1344,672,0,8503,8504,5,5,0,0,8504,8506,1,0,0,0,
	8505,8501,1,0,0,0,8505,8506,1,0,0,0,8506,8508,1,0,0,0,8507,8499,1,0,0,0,
	8507,8500,1,0,0,0,8508,8514,1,0,0,0,8509,8510,3,1324,662,0,8510,8511,5,
	27,0,0,8511,8512,7,39,0,0,8512,8514,1,0,0,0,8513,8496,1,0,0,0,8513,8509,
	1,0,0,0,8514,1109,1,0,0,0,8515,8517,5,4,0,0,8516,8518,3,1344,672,0,8517,
	8516,1,0,0,0,8517,8518,1,0,0,0,8518,8519,1,0,0,0,8519,8521,5,5,0,0,8520,
	8515,1,0,0,0,8521,8524,1,0,0,0,8522,8520,1,0,0,0,8522,8523,1,0,0,0,8523,
	1111,1,0,0,0,8524,8522,1,0,0,0,8525,8539,3,1116,558,0,8526,8539,3,1120,
	560,0,8527,8539,3,1124,562,0,8528,8539,3,1132,566,0,8529,8539,3,1140,570,
	0,8530,8536,3,1142,571,0,8531,8537,3,1146,573,0,8532,8533,5,2,0,0,8533,
	8534,3,1344,672,0,8534,8535,5,3,0,0,8535,8537,1,0,0,0,8536,8531,1,0,0,0,
	8536,8532,1,0,0,0,8537,8539,1,0,0,0,8538,8525,1,0,0,0,8538,8526,1,0,0,0,
	8538,8527,1,0,0,0,8538,8528,1,0,0,0,8538,8529,1,0,0,0,8538,8530,1,0,0,0,
	8539,1113,1,0,0,0,8540,8545,3,1120,560,0,8541,8545,3,1126,563,0,8542,8545,
	3,1134,567,0,8543,8545,3,1140,570,0,8544,8540,1,0,0,0,8544,8541,1,0,0,0,
	8544,8542,1,0,0,0,8544,8543,1,0,0,0,8545,1115,1,0,0,0,8546,8548,3,1362,
	681,0,8547,8549,3,526,263,0,8548,8547,1,0,0,0,8548,8549,1,0,0,0,8549,8550,
	1,0,0,0,8550,8551,3,1118,559,0,8551,1117,1,0,0,0,8552,8553,5,2,0,0,8553,
	8554,3,1268,634,0,8554,8555,5,3,0,0,8555,8558,1,0,0,0,8556,8558,1,0,0,0,
	8557,8552,1,0,0,0,8557,8556,1,0,0,0,8558,1119,1,0,0,0,8559,8576,5,392,0,
	0,8560,8576,5,393,0,0,8561,8576,5,407,0,0,8562,8576,5,379,0,0,8563,8576,
	5,404,0,0,8564,8565,5,389,0,0,8565,8576,3,1122,561,0,8566,8567,5,190,0,
	0,8567,8576,5,403,0,0,8568,8569,5,386,0,0,8569,8576,3,1118,559,0,8570,8571,
	5,385,0,0,8571,8576,3,1118,559,0,8572,8573,5,400,0,0,8573,8576,3,1118,559,
	0,8574,8576,5,381,0,0,8575,8559,1,0,0,0,8575,8560,1,0,0,0,8575,8561,1,0,
	0,0,8575,8562,1,0,0,0,8575,8563,1,0,0,0,8575,8564,1,0,0,0,8575,8566,1,0,
	0,0,8575,8568,1,0,0,0,8575,8570,1,0,0,0,8575,8572,1,0,0,0,8575,8574,1,0,
	0,0,8576,1121,1,0,0,0,8577,8578,5,2,0,0,8578,8579,3,1344,672,0,8579,8580,
	5,3,0,0,8580,8583,1,0,0,0,8581,8583,1,0,0,0,8582,8577,1,0,0,0,8582,8581,
	1,0,0,0,8583,1123,1,0,0,0,8584,8587,3,1128,564,0,8585,8587,3,1130,565,0,
	8586,8584,1,0,0,0,8586,8585,1,0,0,0,8587,1125,1,0,0,0,8588,8591,3,1128,
	564,0,8589,8591,3,1130,565,0,8590,8588,1,0,0,0,8590,8589,1,0,0,0,8591,1127,
	1,0,0,0,8592,8593,5,380,0,0,8593,8594,3,1138,569,0,8594,8595,5,2,0,0,8595,
	8596,3,1268,634,0,8596,8597,5,3,0,0,8597,1129,1,0,0,0,8598,8599,5,380,0,
	0,8599,8600,3,1138,569,0,8600,1131,1,0,0,0,8601,8606,3,1136,568,0,8602,
	8603,5,2,0,0,8603,8604,3,1344,672,0,8604,8605,5,3,0,0,8605,8607,1,0,0,0,
	8606,8602,1,0,0,0,8606,8607,1,0,0,0,8607,1133,1,0,0,0,8608,8613,3,1136,
	568,0,8609,8610,5,2,0,0,8610,8611,3,1344,672,0,8611,8612,5,3,0,0,8612,8614,
	1,0,0,0,8613,8609,1,0,0,0,8613,8614,1,0,0,0,8614,1135,1,0,0,0,8615,8616,
	7,40,0,0,8616,8622,3,1138,569,0,8617,8622,5,414,0,0,8618,8619,5,396,0,0,
	8619,8620,7,41,0,0,8620,8622,3,1138,569,0,8621,8615,1,0,0,0,8621,8617,1,
	0,0,0,8621,8618,1,0,0,0,8622,1137,1,0,0,0,8623,8626,5,365,0,0,8624,8626,
	1,0,0,0,8625,8623,1,0,0,0,8625,8624,1,0,0,0,8626,1139,1,0,0,0,8627,8632,
	7,42,0,0,8628,8629,5,2,0,0,8629,8630,3,1344,672,0,8630,8631,5,3,0,0,8631,
	8633,1,0,0,0,8632,8628,1,0,0,0,8632,8633,1,0,0,0,8633,8634,1,0,0,0,8634,
	8635,3,1144,572,0,8635,1141,1,0,0,0,8636,8637,5,394,0,0,8637,1143,1,0,0,
	0,8638,8639,5,105,0,0,8639,8640,5,409,0,0,8640,8646,5,377,0,0,8641,8642,
	5,370,0,0,8642,8643,5,409,0,0,8643,8646,5,377,0,0,8644,8646,1,0,0,0,8645,
	8638,1,0,0,0,8645,8641,1,0,0,0,8645,8644,1,0,0,0,8646,1145,1,0,0,0,8647,
	8674,5,375,0,0,8648,8674,5,255,0,0,8649,8674,5,176,0,0,8650,8674,5,218,
	0,0,8651,8674,5,252,0,0,8652,8674,3,1148,574,0,8653,8654,5,375,0,0,8654,
	8655,5,94,0,0,8655,8674,5,255,0,0,8656,8657,5,176,0,0,8657,8661,5,94,0,
	0,8658,8662,5,218,0,0,8659,8662,5,252,0,0,8660,8662,3,1148,574,0,8661,8658,
	1,0,0,0,8661,8659,1,0,0,0,8661,8660,1,0,0,0,8662,8674,1,0,0,0,8663,8664,
	5,218,0,0,8664,8667,5,94,0,0,8665,8668,5,252,0,0,8666,8668,3,1148,574,0,
	8667,8665,1,0,0,0,8667,8666,1,0,0,0,8668,8674,1,0,0,0,8669,8670,5,252,0,
	0,8670,8671,5,94,0,0,8671,8674,3,1148,574,0,8672,8674,1,0,0,0,8673,8647,
	1,0,0,0,8673,8648,1,0,0,0,8673,8649,1,0,0,0,8673,8650,1,0,0,0,8673,8651,
	1,0,0,0,8673,8652,1,0,0,0,8673,8653,1,0,0,0,8673,8656,1,0,0,0,8673,8663,
	1,0,0,0,8673,8669,1,0,0,0,8673,8672,1,0,0,0,8674,1147,1,0,0,0,8675,8680,
	5,317,0,0,8676,8677,5,2,0,0,8677,8678,3,1344,672,0,8678,8679,5,3,0,0,8679,
	8681,1,0,0,0,8680,8676,1,0,0,0,8680,8681,1,0,0,0,8681,1149,1,0,0,0,8682,
	8683,5,197,0,0,8683,8686,3,1152,576,0,8684,8686,1,0,0,0,8685,8682,1,0,0,
	0,8685,8684,1,0,0,0,8686,1151,1,0,0,0,8687,8688,3,1154,577,0,8688,1153,
	1,0,0,0,8689,8691,3,1156,578,0,8690,8692,3,1262,631,0,8691,8690,1,0,0,0,
	8691,8692,1,0,0,0,8692,1155,1,0,0,0,8693,8698,3,1158,579,0,8694,8695,7,
	43,0,0,8695,8697,3,1158,579,0,8696,8694,1,0,0,0,8697,8700,1,0,0,0,8698,
	8696,1,0,0,0,8698,8699,1,0,0,0,8699,1157,1,0,0,0,8700,8698,1,0,0,0,8701,
	8706,3,1160,580,0,8702,8703,5,82,0,0,8703,8705,3,1160,580,0,8704,8702,1,
	0,0,0,8705,8708,1,0,0,0,8706,8704,1,0,0,0,8706,8707,1,0,0,0,8707,1159,1,
	0,0,0,8708,8706,1,0,0,0,8709,8714,3,1162,581,0,8710,8711,5,33,0,0,8711,
	8713,3,1162,581,0,8712,8710,1,0,0,0,8713,8716,1,0,0,0,8714,8712,1,0,0,0,
	8714,8715,1,0,0,0,8715,1161,1,0,0,0,8716,8714,1,0,0,0,8717,8723,3,1164,
	582,0,8718,8720,5,77,0,0,8719,8718,1,0,0,0,8719,8720,1,0,0,0,8720,8721,
	1,0,0,0,8721,8722,5,68,0,0,8722,8724,3,1294,647,0,8723,8719,1,0,0,0,8723,
	8724,1,0,0,0,8724,1163,1,0,0,0,8725,8727,5,77,0,0,8726,8725,1,0,0,0,8726,
	8727,1,0,0,0,8727,8728,1,0,0,0,8728,8729,3,1166,583,0,8729,1165,1,0,0,0,
	8730,8732,3,1168,584,0,8731,8733,7,44,0,0,8732,8731,1,0,0,0,8732,8733,1,
	0,0,0,8733,1167,1,0,0,0,8734,8758,3,1170,585,0,8735,8737,5,116,0,0,8736,
	8738,5,77,0,0,8737,8736,1,0,0,0,8737,8738,1,0,0,0,8738,8756,1,0,0,0,8739,
	8757,5,78,0,0,8740,8757,5,96,0,0,8741,8757,5,60,0,0,8742,8757,5,356,0,0,
	8743,8744,5,56,0,0,8744,8745,5,64,0,0,8745,8757,3,1152,576,0,8746,8747,
	5,266,0,0,8747,8748,5,2,0,0,8748,8749,3,1274,637,0,8749,8750,5,3,0,0,8750,
	8757,1,0,0,0,8751,8757,5,188,0,0,8752,8754,3,1284,642,0,8753,8752,1,0,0,
	0,8753,8754,1,0,0,0,8754,8755,1,0,0,0,8755,8757,5,469,0,0,8756,8739,1,0,
	0,0,8756,8740,1,0,0,0,8756,8741,1,0,0,0,8756,8742,1,0,0,0,8756,8743,1,0,
	0,0,8756,8746,1,0,0,0,8756,8751,1,0,0,0,8756,8753,1,0,0,0,8757,8759,1,0,
	0,0,8758,8735,1,0,0,0,8758,8759,1,0,0,0,8759,1169,1,0,0,0,8760,8772,3,1172,
	586,0,8761,8762,7,45,0,0,8762,8773,3,1172,586,0,8763,8764,3,1266,633,0,
	8764,8770,3,1256,628,0,8765,8771,3,954,477,0,8766,8767,5,2,0,0,8767,8768,
	3,1152,576,0,8768,8769,5,3,0,0,8769,8771,1,0,0,0,8770,8765,1,0,0,0,8770,
	8766,1,0,0,0,8771,8773,1,0,0,0,8772,8761,1,0,0,0,8772,8763,1,0,0,0,8772,
	8773,1,0,0,0,8773,1171,1,0,0,0,8774,8791,3,1174,587,0,8775,8777,5,77,0,
	0,8776,8775,1,0,0,0,8776,8777,1,0,0,0,8777,8786,1,0,0,0,8778,8787,5,120,
	0,0,8779,8787,5,114,0,0,8780,8781,5,127,0,0,8781,8787,5,94,0,0,8782,8784,
	5,378,0,0,8783,8785,5,91,0,0,8784,8783,1,0,0,0,8784,8785,1,0,0,0,8785,8787,
	1,0,0,0,8786,8778,1,0,0,0,8786,8779,1,0,0,0,8786,8780,1,0,0,0,8786,8782,
	1,0,0,0,8787,8788,1,0,0,0,8788,8789,3,1174,587,0,8789,8790,3,1150,575,0,
	8790,8792,1,0,0,0,8791,8776,1,0,0,0,8791,8792,1,0,0,0,8792,1173,1,0,0,0,
	8793,8799,3,1176,588,0,8794,8795,3,1262,631,0,8795,8796,3,1176,588,0,8796,
	8798,1,0,0,0,8797,8794,1,0,0,0,8798,8801,1,0,0,0,8799,8797,1,0,0,0,8799,
	8800,1,0,0,0,8800,1175,1,0,0,0,8801,8799,1,0,0,0,8802,8804,3,1262,631,0,
	8803,8802,1,0,0,0,8803,8804,1,0,0,0,8804,8805,1,0,0,0,8805,8806,3,1178,
	589,0,8806,1177,1,0,0,0,8807,8812,3,1180,590,0,8808,8809,7,46,0,0,8809,
	8811,3,1180,590,0,8810,8808,1,0,0,0,8811,8814,1,0,0,0,8812,8810,1,0,0,0,
	8812,8813,1,0,0,0,8813,1179,1,0,0,0,8814,8812,1,0,0,0,8815,8820,3,1182,
	591,0,8816,8817,7,47,0,0,8817,8819,3,1182,591,0,8818,8816,1,0,0,0,8819,
	8822,1,0,0,0,8820,8818,1,0,0,0,8820,8821,1,0,0,0,8821,1181,1,0,0,0,8822,
	8820,1,0,0,0,8823,8826,3,1184,592,0,8824,8825,5,15,0,0,8825,8827,3,1152,
	576,0,8826,8824,1,0,0,0,8826,8827,1,0,0,0,8827,1183,1,0,0,0,8828,8830,7,
	46,0,0,8829,8828,1,0,0,0,8829,8830,1,0,0,0,8830,8831,1,0,0,0,8831,8832,
	3,1186,593,0,8832,1185,1,0,0,0,8833,8838,3,1188,594,0,8834,8835,5,142,0,
	0,8835,8836,5,409,0,0,8836,8837,5,377,0,0,8837,8839,3,1152,576,0,8838,8834,
	1,0,0,0,8838,8839,1,0,0,0,8839,1187,1,0,0,0,8840,8843,3,1190,595,0,8841,
	8842,5,43,0,0,8842,8844,3,524,262,0,8843,8841,1,0,0,0,8843,8844,1,0,0,0,
	8844,1189,1,0,0,0,8845,8850,3,1194,597,0,8846,8847,5,26,0,0,8847,8849,3,
	1108,554,0,8848,8846,1,0,0,0,8849,8852,1,0,0,0,8850,8848,1,0,0,0,8850,8851,
	1,0,0,0,8851,1191,1,0,0,0,8852,8850,1,0,0,0,8853,8854,6,596,-1,0,8854,8861,
	3,1194,597,0,8855,8856,7,46,0,0,8856,8861,3,1192,596,9,8857,8858,3,1262,
	631,0,8858,8859,3,1192,596,3,8859,8861,1,0,0,0,8860,8853,1,0,0,0,8860,8855,
	1,0,0,0,8860,8857,1,0,0,0,8861,8901,1,0,0,0,8862,8863,10,8,0,0,8863,8864,
	5,15,0,0,8864,8900,3,1192,596,9,8865,8866,10,7,0,0,8866,8867,7,47,0,0,8867,
	8900,3,1192,596,8,8868,8869,10,6,0,0,8869,8870,7,46,0,0,8870,8900,3,1192,
	596,7,8871,8872,10,5,0,0,8872,8873,3,1262,631,0,8873,8874,3,1192,596,6,
	8874,8900,1,0,0,0,8875,8876,10,4,0,0,8876,8877,7,45,0,0,8877,8900,3,1192,
	596,5,8878,8879,10,10,0,0,8879,8880,5,26,0,0,8880,8900,3,1108,554,0,8881,
	8882,10,2,0,0,8882,8900,3,1262,631,0,8883,8884,10,1,0,0,8884,8886,5,116,
	0,0,8885,8887,5,77,0,0,8886,8885,1,0,0,0,8886,8887,1,0,0,0,8887,8897,1,
	0,0,0,8888,8889,5,56,0,0,8889,8890,5,64,0,0,8890,8898,3,1192,596,0,8891,
	8892,5,266,0,0,8892,8893,5,2,0,0,8893,8894,3,1274,637,0,8894,8895,5,3,0,
	0,8895,8898,1,0,0,0,8896,8898,5,188,0,0,8897,8888,1,0,0,0,8897,8891,1,0,
	0,0,8897,8896,1,0,0,0,8898,8900,1,0,0,0,8899,8862,1,0,0,0,8899,8865,1,0,
	0,0,8899,8868,1,0,0,0,8899,8871,1,0,0,0,8899,8875,1,0,0,0,8899,8878,1,0,
	0,0,8899,8881,1,0,0,0,8899,8883,1,0,0,0,8900,8903,1,0,0,0,8901,8899,1,0,
	0,0,8901,8902,1,0,0,0,8902,1193,1,0,0,0,8903,8901,1,0,0,0,8904,8905,5,387,
	0,0,8905,8941,3,954,477,0,8906,8909,5,35,0,0,8907,8910,3,954,477,0,8908,
	8910,3,1276,638,0,8909,8907,1,0,0,0,8909,8908,1,0,0,0,8910,8941,1,0,0,0,
	8911,8912,5,28,0,0,8912,8941,3,1314,657,0,8913,8914,5,461,0,0,8914,8915,
	5,2,0,0,8915,8916,3,1268,634,0,8916,8917,5,3,0,0,8917,8941,1,0,0,0,8918,
	8919,5,98,0,0,8919,8941,3,954,477,0,8920,8941,3,1306,653,0,8921,8941,3,
	1336,668,0,8922,8941,3,1196,598,0,8923,8924,5,2,0,0,8924,8925,3,1152,576,
	0,8925,8926,5,3,0,0,8926,8927,3,1314,657,0,8927,8941,1,0,0,0,8928,8941,
	3,1296,648,0,8929,8941,3,1200,600,0,8930,8932,3,954,477,0,8931,8933,3,1312,
	656,0,8932,8931,1,0,0,0,8932,8933,1,0,0,0,8933,8941,1,0,0,0,8934,8941,3,
	1252,626,0,8935,8941,3,1254,627,0,8936,8937,3,1250,625,0,8937,8938,5,125,
	0,0,8938,8939,3,1250,625,0,8939,8941,1,0,0,0,8940,8904,1,0,0,0,8940,8906,
	1,0,0,0,8940,8911,1,0,0,0,8940,8913,1,0,0,0,8940,8918,1,0,0,0,8940,8920,
	1,0,0,0,8940,8921,1,0,0,0,8940,8922,1,0,0,0,8940,8923,1,0,0,0,8940,8928,
	1,0,0,0,8940,8929,1,0,0,0,8940,8930,1,0,0,0,8940,8934,1,0,0,0,8940,8935,
	1,0,0,0,8940,8936,1,0,0,0,8941,1195,1,0,0,0,8942,8943,5,537,0,0,8943,1197,
	1,0,0,0,8944,8945,3,1334,667,0,8945,8964,5,2,0,0,8946,8950,3,1270,635,0,
	8947,8948,5,6,0,0,8948,8949,5,101,0,0,8949,8951,3,1272,636,0,8950,8947,
	1,0,0,0,8950,8951,1,0,0,0,8951,8952,1,0,0,0,8952,8953,3,990,495,0,8953,
	8965,1,0,0,0,8954,8955,5,101,0,0,8955,8956,3,1272,636,0,8956,8957,3,990,
	495,0,8957,8965,1,0,0,0,8958,8959,7,48,0,0,8959,8960,3,1270,635,0,8960,
	8961,3,990,495,0,8961,8965,1,0,0,0,8962,8965,5,9,0,0,8963,8965,1,0,0,0,
	8964,8946,1,0,0,0,8964,8954,1,0,0,0,8964,8958,1,0,0,0,8964,8962,1,0,0,0,
	8964,8963,1,0,0,0,8965,8966,1,0,0,0,8966,8967,5,3,0,0,8967,1199,1,0,0,0,
	8968,8969,3,1198,599,0,8969,8970,3,1224,612,0,8970,8971,3,1226,613,0,8971,
	8972,3,1234,617,0,8972,8975,1,0,0,0,8973,8975,3,1204,602,0,8974,8968,1,
	0,0,0,8974,8973,1,0,0,0,8975,1201,1,0,0,0,8976,8979,3,1198,599,0,8977,8979,
	3,1204,602,0,8978,8976,1,0,0,0,8978,8977,1,0,0,0,8979,1203,1,0,0,0,8980,
	8981,5,108,0,0,8981,8982,5,62,0,0,8982,8983,5,2,0,0,8983,8984,3,1152,576,
	0,8984,8985,5,3,0,0,8985,9158,1,0,0,0,8986,9158,5,48,0,0,8987,8992,5,50,
	0,0,8988,8989,5,2,0,0,8989,8990,3,1344,672,0,8990,8991,5,3,0,0,8991,8993,
	1,0,0,0,8992,8988,1,0,0,0,8992,8993,1,0,0,0,8993,9158,1,0,0,0,8994,8999,
	5,51,0,0,8995,8996,5,2,0,0,8996,8997,3,1344,672,0,8997,8998,5,3,0,0,8998,
	9000,1,0,0,0,8999,8995,1,0,0,0,8999,9000,1,0,0,0,9000,9158,1,0,0,0,9001,
	9006,5,75,0,0,9002,9003,5,2,0,0,9003,9004,3,1344,672,0,9004,9005,5,3,0,
	0,9005,9007,1,0,0,0,9006,9002,1,0,0,0,9006,9007,1,0,0,0,9007,9158,1,0,0,
	0,9008,9013,5,76,0,0,9009,9010,5,2,0,0,9010,9011,3,1344,672,0,9011,9012,
	5,3,0,0,9012,9014,1,0,0,0,9013,9009,1,0,0,0,9013,9014,1,0,0,0,9014,9158,
	1,0,0,0,9015,9158,5,49,0,0,9016,9158,5,52,0,0,9017,9158,5,89,0,0,9018,9158,
	5,99,0,0,9019,9158,5,47,0,0,9020,9158,5,111,0,0,9021,9022,5,41,0,0,9022,
	9023,5,2,0,0,9023,9024,3,1152,576,0,9024,9025,5,36,0,0,9025,9026,3,1108,
	554,0,9026,9027,5,3,0,0,9027,9158,1,0,0,0,9028,9029,5,388,0,0,9029,9030,
	5,2,0,0,9030,9031,3,1280,640,0,9031,9032,5,3,0,0,9032,9158,1,0,0,0,9033,
	9034,5,480,0,0,9034,9035,5,2,0,0,9035,9038,3,1152,576,0,9036,9037,5,6,0,
	0,9037,9039,3,1284,642,0,9038,9036,1,0,0,0,9038,9039,1,0,0,0,9039,9040,
	1,0,0,0,9040,9041,5,3,0,0,9041,9158,1,0,0,0,9042,9043,5,401,0,0,9043,9044,
	5,2,0,0,9044,9045,3,1286,643,0,9045,9046,5,3,0,0,9046,9158,1,0,0,0,9047,
	9048,5,402,0,0,9048,9049,5,2,0,0,9049,9050,3,1288,644,0,9050,9051,5,3,0,
	0,9051,9158,1,0,0,0,9052,9053,5,408,0,0,9053,9054,5,2,0,0,9054,9055,3,1290,
	645,0,9055,9056,5,3,0,0,9056,9158,1,0,0,0,9057,9058,5,411,0,0,9058,9059,
	5,2,0,0,9059,9060,3,1152,576,0,9060,9061,5,36,0,0,9061,9062,3,1108,554,
	0,9062,9063,5,3,0,0,9063,9158,1,0,0,0,9064,9065,5,412,0,0,9065,9067,5,2,
	0,0,9066,9068,7,49,0,0,9067,9066,1,0,0,0,9067,9068,1,0,0,0,9068,9069,1,
	0,0,0,9069,9070,3,1292,646,0,9070,9071,5,3,0,0,9071,9158,1,0,0,0,9072,9073,
	5,399,0,0,9073,9074,5,2,0,0,9074,9075,3,1152,576,0,9075,9076,5,6,0,0,9076,
	9077,3,1152,576,0,9077,9078,5,3,0,0,9078,9158,1,0,0,0,9079,9080,5,384,0,
	0,9080,9081,5,2,0,0,9081,9082,3,1268,634,0,9082,9083,5,3,0,0,9083,9158,
	1,0,0,0,9084,9085,5,390,0,0,9085,9086,5,2,0,0,9086,9087,3,1268,634,0,9087,
	9088,5,3,0,0,9088,9158,1,0,0,0,9089,9090,5,395,0,0,9090,9091,5,2,0,0,9091,
	9092,3,1268,634,0,9092,9093,5,3,0,0,9093,9158,1,0,0,0,9094,9095,5,416,0,
	0,9095,9096,5,2,0,0,9096,9097,3,1268,634,0,9097,9098,5,3,0,0,9098,9158,
	1,0,0,0,9099,9100,5,417,0,0,9100,9101,5,2,0,0,9101,9102,5,257,0,0,9102,
	9108,3,1366,683,0,9103,9106,5,6,0,0,9104,9107,3,1210,605,0,9105,9107,3,
	1268,634,0,9106,9104,1,0,0,0,9106,9105,1,0,0,0,9107,9109,1,0,0,0,9108,9103,
	1,0,0,0,9108,9109,1,0,0,0,9109,9110,1,0,0,0,9110,9111,5,3,0,0,9111,9158,
	1,0,0,0,9112,9113,5,418,0,0,9113,9114,5,2,0,0,9114,9115,3,1194,597,0,9115,
	9116,3,1220,610,0,9116,9117,5,3,0,0,9117,9158,1,0,0,0,9118,9119,5,419,0,
	0,9119,9120,5,2,0,0,9120,9121,3,1212,606,0,9121,9122,5,3,0,0,9122,9158,
	1,0,0,0,9123,9124,5,420,0,0,9124,9125,5,2,0,0,9125,9126,3,1216,608,0,9126,
	9127,3,1152,576,0,9127,9128,3,1218,609,0,9128,9129,5,3,0,0,9129,9158,1,
	0,0,0,9130,9131,5,421,0,0,9131,9132,5,2,0,0,9132,9133,5,257,0,0,9133,9136,
	3,1366,683,0,9134,9135,5,6,0,0,9135,9137,3,1152,576,0,9136,9134,1,0,0,0,
	9136,9137,1,0,0,0,9137,9138,1,0,0,0,9138,9139,5,3,0,0,9139,9158,1,0,0,0,
	9140,9141,5,422,0,0,9141,9142,5,2,0,0,9142,9143,5,374,0,0,9143,9144,3,1152,
	576,0,9144,9145,5,6,0,0,9145,9146,3,1206,603,0,9146,9147,3,1208,604,0,9147,
	9148,5,3,0,0,9148,9158,1,0,0,0,9149,9150,5,423,0,0,9150,9151,5,2,0,0,9151,
	9152,3,1216,608,0,9152,9153,3,1152,576,0,9153,9154,5,36,0,0,9154,9155,3,
	1112,556,0,9155,9156,5,3,0,0,9156,9158,1,0,0,0,9157,8980,1,0,0,0,9157,8986,
	1,0,0,0,9157,8987,1,0,0,0,9157,8994,1,0,0,0,9157,9001,1,0,0,0,9157,9008,
	1,0,0,0,9157,9015,1,0,0,0,9157,9016,1,0,0,0,9157,9017,1,0,0,0,9157,9018,
	1,0,0,0,9157,9019,1,0,0,0,9157,9020,1,0,0,0,9157,9021,1,0,0,0,9157,9028,
	1,0,0,0,9157,9033,1,0,0,0,9157,9042,1,0,0,0,9157,9047,1,0,0,0,9157,9052,
	1,0,0,0,9157,9057,1,0,0,0,9157,9064,1,0,0,0,9157,9072,1,0,0,0,9157,9079,
	1,0,0,0,9157,9084,1,0,0,0,9157,9089,1,0,0,0,9157,9094,1,0,0,0,9157,9099,
	1,0,0,0,9157,9112,1,0,0,0,9157,9118,1,0,0,0,9157,9123,1,0,0,0,9157,9130,
	1,0,0,0,9157,9140,1,0,0,0,9157,9149,1,0,0,0,9158,1205,1,0,0,0,9159,9160,
	5,366,0,0,9160,9165,3,1152,576,0,9161,9162,5,366,0,0,9162,9163,5,260,0,
	0,9163,9165,5,441,0,0,9164,9159,1,0,0,0,9164,9161,1,0,0,0,9165,1207,1,0,
	0,0,9166,9167,5,6,0,0,9167,9168,5,330,0,0,9168,9178,5,376,0,0,9169,9170,
	5,6,0,0,9170,9171,5,330,0,0,9171,9178,5,260,0,0,9172,9173,5,6,0,0,9173,
	9174,5,330,0,0,9174,9175,5,260,0,0,9175,9178,5,441,0,0,9176,9178,1,0,0,
	0,9177,9166,1,0,0,0,9177,9169,1,0,0,0,9177,9172,1,0,0,0,9177,9176,1,0,0,
	0,9178,1209,1,0,0,0,9179,9180,5,415,0,0,9180,9181,5,2,0,0,9181,9182,3,1212,
	606,0,9182,9183,5,3,0,0,9183,1211,1,0,0,0,9184,9189,3,1214,607,0,9185,9186,
	5,6,0,0,9186,9188,3,1214,607,0,9187,9185,1,0,0,0,9188,9191,1,0,0,0,9189,
	9187,1,0,0,0,9189,9190,1,0,0,0,9190,1213,1,0,0,0,9191,9189,1,0,0,0,9192,
	9195,3,1152,576,0,9193,9194,5,36,0,0,9194,9196,3,1366,683,0,9195,9193,1,
	0,0,0,9195,9196,1,0,0,0,9196,1215,1,0,0,0,9197,9198,7,50,0,0,9198,1217,
	1,0,0,0,9199,9200,5,283,0,0,9200,9205,5,369,0,0,9201,9202,5,338,0,0,9202,
	9205,5,369,0,0,9203,9205,1,0,0,0,9204,9199,1,0,0,0,9204,9201,1,0,0,0,9204,
	9203,1,0,0,0,9205,1219,1,0,0,0,9206,9207,5,277,0,0,9207,9222,3,1194,597,
	0,9208,9209,5,277,0,0,9209,9210,3,1194,597,0,9210,9211,3,1222,611,0,9211,
	9222,1,0,0,0,9212,9213,5,277,0,0,9213,9214,3,1222,611,0,9214,9215,3,1194,
	597,0,9215,9222,1,0,0,0,9216,9217,5,277,0,0,9217,9218,3,1222,611,0,9218,
	9219,3,1194,597,0,9219,9220,3,1222,611,0,9220,9222,1,0,0,0,9221,9206,1,
	0,0,0,9221,9208,1,0,0,0,9221,9212,1,0,0,0,9221,9216,1,0,0,0,9222,1221,1,
	0,0,0,9223,9224,5,147,0,0,9224,9225,7,51,0,0,9225,1223,1,0,0,0,9226,9227,
	5,470,0,0,9227,9228,5,66,0,0,9228,9229,5,2,0,0,9229,9230,3,992,496,0,9230,
	9231,5,3,0,0,9231,9234,1,0,0,0,9232,9234,1,0,0,0,9233,9226,1,0,0,0,9233,
	9232,1,0,0,0,9234,1225,1,0,0,0,9235,9236,5,471,0,0,9236,9237,5,2,0,0,9237,
	9238,5,103,0,0,9238,9239,3,1152,576,0,9239,9240,5,3,0,0,9240,9243,1,0,0,
	0,9241,9243,1,0,0,0,9242,9235,1,0,0,0,9242,9241,1,0,0,0,9243,1227,1,0,0,
	0,9244,9245,5,104,0,0,9245,9248,3,1230,615,0,9246,9248,1,0,0,0,9247,9244,
	1,0,0,0,9247,9246,1,0,0,0,9248,1229,1,0,0,0,9249,9254,3,1232,616,0,9250,
	9251,5,6,0,0,9251,9253,3,1232,616,0,9252,9250,1,0,0,0,9253,9256,1,0,0,0,
	9254,9252,1,0,0,0,9254,9255,1,0,0,0,9255,1231,1,0,0,0,9256,9254,1,0,0,0,
	9257,9258,3,1360,680,0,9258,9259,5,36,0,0,9259,9260,3,1236,618,0,9260,1233,
	1,0,0,0,9261,9264,5,124,0,0,9262,9265,3,1236,618,0,9263,9265,3,1360,680,
	0,9264,9262,1,0,0,0,9264,9263,1,0,0,0,9265,9268,1,0,0,0,9266,9268,1,0,0,
	0,9267,9261,1,0,0,0,9267,9266,1,0,0,0,9268,1235,1,0,0,0,9269,9270,5,2,0,
	0,9270,9271,3,1238,619,0,9271,9272,3,1240,620,0,9272,9273,3,990,495,0,9273,
	9274,3,1242,621,0,9274,9275,5,3,0,0,9275,1237,1,0,0,0,9276,9279,3,1360,
	680,0,9277,9279,1,0,0,0,9278,9276,1,0,0,0,9278,9277,1,0,0,0,9279,1239,1,
	0,0,0,9280,9281,5,276,0,0,9281,9282,5,147,0,0,9282,9285,3,1268,634,0,9283,
	9285,1,0,0,0,9284,9280,1,0,0,0,9284,9283,1,0,0,0,9285,1241,1,0,0,0,9286,
	9287,5,290,0,0,9287,9288,3,1244,622,0,9288,9289,3,1248,624,0,9289,9300,
	1,0,0,0,9290,9291,5,311,0,0,9291,9292,3,1244,622,0,9292,9293,3,1248,624,
	0,9293,9300,1,0,0,0,9294,9295,5,472,0,0,9295,9296,3,1244,622,0,9296,9297,
	3,1248,624,0,9297,9300,1,0,0,0,9298,9300,1,0,0,0,9299,9286,1,0,0,0,9299,
	9290,1,0,0,0,9299,9294,1,0,0,0,9299,9298,1,0,0,0,9300,1243,1,0,0,0,9301,
	9308,3,1246,623,0,9302,9303,5,378,0,0,9303,9304,3,1246,623,0,9304,9305,
	5,33,0,0,9305,9306,3,1246,623,0,9306,9308,1,0,0,0,9307,9301,1,0,0,0,9307,
	9302,1,0,0,0,9308,1245,1,0,0,0,9309,9310,5,353,0,0,9310,9317,7,52,0,0,9311,
	9312,5,425,0,0,9312,9317,5,405,0,0,9313,9314,3,1152,576,0,9314,9315,7,52,
	0,0,9315,9317,1,0,0,0,9316,9309,1,0,0,0,9316,9311,1,0,0,0,9316,9313,1,0,
	0,0,9317,1247,1,0,0,0,9318,9325,5,199,0,0,9319,9320,5,425,0,0,9320,9326,
	5,405,0,0,9321,9326,5,66,0,0,9322,9326,5,458,0,0,9323,9324,5,260,0,0,9324,
	9326,5,473,0,0,9325,9319,1,0,0,0,9325,9321,1,0,0,0,9325,9322,1,0,0,0,9325,
	9323,1,0,0,0,9326,9329,1,0,0,0,9327,9329,1,0,0,0,9328,9318,1,0,0,0,9328,
	9327,1,0,0,0,9329,1249,1,0,0,0,9330,9331,5,405,0,0,9331,9333,5,2,0,0,9332,
	9334,3,1268,634,0,9333,9332,1,0,0,0,9333,9334,1,0,0,0,9334,9335,1,0,0,0,
	9335,9343,5,3,0,0,9336,9337,5,2,0,0,9337,9338,3,1268,634,0,9338,9339,5,
	6,0,0,9339,9340,3,1152,576,0,9340,9341,5,3,0,0,9341,9343,1,0,0,0,9342,9330,
	1,0,0,0,9342,9336,1,0,0,0,9343,1251,1,0,0,0,9344,9345,5,405,0,0,9345,9347,
	5,2,0,0,9346,9348,3,1268,634,0,9347,9346,1,0,0,0,9347,9348,1,0,0,0,9348,
	9349,1,0,0,0,9349,9350,5,3,0,0,9350,1253,1,0,0,0,9351,9352,5,2,0,0,9352,
	9353,3,1268,634,0,9353,9354,5,6,0,0,9354,9355,3,1152,576,0,9355,9356,5,
	3,0,0,9356,1255,1,0,0,0,9357,9358,7,53,0,0,9358,1257,1,0,0,0,9359,9362,
	5,29,0,0,9360,9362,3,1260,630,0,9361,9359,1,0,0,0,9361,9360,1,0,0,0,9362,
	1259,1,0,0,0,9363,9364,7,54,0,0,9364,1261,1,0,0,0,9365,9372,5,29,0,0,9366,
	9367,5,269,0,0,9367,9368,5,2,0,0,9368,9369,3,684,342,0,9369,9370,5,3,0,
	0,9370,9372,1,0,0,0,9371,9365,1,0,0,0,9371,9366,1,0,0,0,9372,1263,1,0,0,
	0,9373,9380,3,1258,629,0,9374,9375,5,269,0,0,9375,9376,5,2,0,0,9376,9377,
	3,684,342,0,9377,9378,5,3,0,0,9378,9380,1,0,0,0,9379,9373,1,0,0,0,9379,
	9374,1,0,0,0,9380,1265,1,0,0,0,9381,9394,3,1258,629,0,9382,9383,5,269,0,
	0,9383,9384,5,2,0,0,9384,9385,3,684,342,0,9385,9386,5,3,0,0,9386,9394,1,
	0,0,0,9387,9394,5,120,0,0,9388,9389,5,77,0,0,9389,9394,5,120,0,0,9390,9394,
	5,114,0,0,9391,9392,5,77,0,0,9392,9394,5,114,0,0,9393,9381,1,0,0,0,9393,
	9382,1,0,0,0,9393,9387,1,0,0,0,9393,9388,1,0,0,0,9393,9390,1,0,0,0,9393,
	9391,1,0,0,0,9394,1267,1,0,0,0,9395,9400,3,1152,576,0,9396,9397,5,6,0,0,
	9397,9399,3,1152,576,0,9398,9396,1,0,0,0,9399,9402,1,0,0,0,9400,9398,1,
	0,0,0,9400,9401,1,0,0,0,9401,1269,1,0,0,0,9402,9400,1,0,0,0,9403,9408,3,
	1272,636,0,9404,9405,5,6,0,0,9405,9407,3,1272,636,0,9406,9404,1,0,0,0,9407,
	9410,1,0,0,0,9408,9406,1,0,0,0,9408,9409,1,0,0,0,9409,1271,1,0,0,0,9410,
	9408,1,0,0,0,9411,9417,3,1152,576,0,9412,9413,3,636,318,0,9413,9414,7,55,
	0,0,9414,9415,3,1152,576,0,9415,9417,1,0,0,0,9416,9411,1,0,0,0,9416,9412,
	1,0,0,0,9417,1273,1,0,0,0,9418,9423,3,1108,554,0,9419,9420,5,6,0,0,9420,
	9422,3,1108,554,0,9421,9419,1,0,0,0,9422,9425,1,0,0,0,9423,9421,1,0,0,0,
	9423,9424,1,0,0,0,9424,1275,1,0,0,0,9425,9423,1,0,0,0,9426,9429,5,4,0,0,
	9427,9430,3,1268,634,0,9428,9430,3,1278,639,0,9429,9427,1,0,0,0,9429,9428,
	1,0,0,0,9429,9430,1,0,0,0,9430,9431,1,0,0,0,9431,9432,5,5,0,0,9432,1277,
	1,0,0,0,9433,9438,3,1276,638,0,9434,9435,5,6,0,0,9435,9437,3,1276,638,0,
	9436,9434,1,0,0,0,9437,9440,1,0,0,0,9438,9436,1,0,0,0,9438,9439,1,0,0,0,
	9439,1279,1,0,0,0,9440,9438,1,0,0,0,9441,9442,3,1282,641,0,9442,9443,5,
	64,0,0,9443,9444,3,1152,576,0,9444,9447,1,0,0,0,9445,9447,1,0,0,0,9446,
	9441,1,0,0,0,9446,9445,1,0,0,0,9447,1281,1,0,0,0,9448,9457,3,1368,684,0,
	9449,9457,5,375,0,0,9450,9457,5,255,0,0,9451,9457,5,176,0,0,9452,9457,5,
	218,0,0,9453,9457,5,252,0,0,9454,9457,5,317,0,0,9455,9457,3,1346,673,0,
	9456,9448,1,0,0,0,9456,9449,1,0,0,0,9456,9450,1,0,0,0,9456,9451,1,0,0,0,
	9456,9452,1,0,0,0,9456,9453,1,0,0,0,9456,9454,1,0,0,0,9456,9455,1,0,0,0,
	9457,1283,1,0,0,0,9458,9459,7,56,0,0,9459,1285,1,0,0,0,9460,9461,3,1152,
	576,0,9461,9462,5,84,0,0,9462,9463,3,1152,576,0,9463,9464,5,64,0,0,9464,
	9467,3,1152,576,0,9465,9466,5,62,0,0,9466,9468,3,1152,576,0,9467,9465,1,
	0,0,0,9467,9468,1,0,0,0,9468,1287,1,0,0,0,9469,9470,3,1192,596,0,9470,9471,
	5,68,0,0,9471,9472,3,1192,596,0,9472,9475,1,0,0,0,9473,9475,1,0,0,0,9474,
	9469,1,0,0,0,9474,9473,1,0,0,0,9475,1289,1,0,0,0,9476,9477,3,1152,576,0,
	9477,9478,5,64,0,0,9478,9479,3,1152,576,0,9479,9480,5,62,0,0,9480,9481,
	3,1152,576,0,9481,9505,1,0,0,0,9482,9483,3,1152,576,0,9483,9484,5,62,0,
	0,9484,9485,3,1152,576,0,9485,9486,5,64,0,0,9486,9487,3,1152,576,0,9487,
	9505,1,0,0,0,9488,9489,3,1152,576,0,9489,9490,5,64,0,0,9490,9491,3,1152,
	576,0,9491,9505,1,0,0,0,9492,9493,3,1152,576,0,9493,9494,5,62,0,0,9494,
	9495,3,1152,576,0,9495,9505,1,0,0,0,9496,9497,3,1152,576,0,9497,9498,5,
	127,0,0,9498,9499,3,1152,576,0,9499,9500,5,197,0,0,9500,9501,3,1152,576,
	0,9501,9505,1,0,0,0,9502,9505,3,1268,634,0,9503,9505,1,0,0,0,9504,9476,
	1,0,0,0,9504,9482,1,0,0,0,9504,9488,1,0,0,0,9504,9492,1,0,0,0,9504,9496,
	1,0,0,0,9504,9502,1,0,0,0,9504,9503,1,0,0,0,9505,1291,1,0,0,0,9506,9507,
	3,1152,576,0,9507,9508,5,64,0,0,9508,9509,3,1268,634,0,9509,9514,1,0,0,
	0,9510,9511,5,64,0,0,9511,9514,3,1268,634,0,9512,9514,3,1268,634,0,9513,
	9506,1,0,0,0,9513,9510,1,0,0,0,9513,9512,1,0,0,0,9514,1293,1,0,0,0,9515,
	9521,3,954,477,0,9516,9517,5,2,0,0,9517,9518,3,1268,634,0,9518,9519,5,3,
	0,0,9519,9521,1,0,0,0,9520,9515,1,0,0,0,9520,9516,1,0,0,0,9521,1295,1,0,
	0,0,9522,9523,5,40,0,0,9523,9524,3,1304,652,0,9524,9525,3,1298,649,0,9525,
	9526,3,1302,651,0,9526,9527,5,445,0,0,9527,1297,1,0,0,0,9528,9530,3,1300,
	650,0,9529,9528,1,0,0,0,9530,9531,1,0,0,0,9531,9529,1,0,0,0,9531,9532,1,
	0,0,0,9532,1299,1,0,0,0,9533,9534,5,102,0,0,9534,9535,3,1152,576,0,9535,
	9536,5,93,0,0,9536,9537,3,1152,576,0,9537,1301,1,0,0,0,9538,9539,5,58,0,
	0,9539,9542,3,1152,576,0,9540,9542,1,0,0,0,9541,9538,1,0,0,0,9541,9540,
	1,0,0,0,9542,1303,1,0,0,0,9543,9546,3,1152,576,0,9544,9546,1,0,0,0,9545,
	9543,1,0,0,0,9545,9544,1,0,0,0,9546,1305,1,0,0,0,9547,9549,3,1360,680,0,
	9548,9550,3,1312,656,0,9549,9548,1,0,0,0,9549,9550,1,0,0,0,9550,1307,1,
	0,0,0,9551,9554,5,11,0,0,9552,9555,3,1330,665,0,9553,9555,5,9,0,0,9554,
	9552,1,0,0,0,9554,9553,1,0,0,0,9555,9567,1,0,0,0,9556,9562,5,4,0,0,9557,
	9563,3,1152,576,0,9558,9559,3,1310,655,0,9559,9560,5,8,0,0,9560,9561,3,
	1310,655,0,9561,9563,1,0,0,0,9562,9557,1,0,0,0,9562,9558,1,0,0,0,9563,9564,
	1,0,0,0,9564,9565,5,5,0,0,9565,9567,1,0,0,0,9566,9551,1,0,0,0,9566,9556,
	1,0,0,0,9567,1309,1,0,0,0,9568,9571,3,1152,576,0,9569,9571,1,0,0,0,9570,
	9568,1,0,0,0,9570,9569,1,0,0,0,9571,1311,1,0,0,0,9572,9574,3,1308,654,0,
	9573,9572,1,0,0,0,9574,9575,1,0,0,0,9575,9573,1,0,0,0,9575,9576,1,0,0,0,
	9576,1313,1,0,0,0,9577,9579,3,1308,654,0,9578,9577,1,0,0,0,9579,9582,1,
	0,0,0,9580,9578,1,0,0,0,9580,9581,1,0,0,0,9581,1315,1,0,0,0,9582,9580,1,
	0,0,0,9583,9586,3,1318,659,0,9584,9586,1,0,0,0,9585,9583,1,0,0,0,9585,9584,
	1,0,0,0,9586,1317,1,0,0,0,9587,9592,3,1320,660,0,9588,9589,5,6,0,0,9589,
	9591,3,1320,660,0,9590,9588,1,0,0,0,9591,9594,1,0,0,0,9592,9590,1,0,0,0,
	9592,9593,1,0,0,0,9593,1319,1,0,0,0,9594,9592,1,0,0,0,9595,9600,3,1152,
	576,0,9596,9597,5,36,0,0,9597,9601,3,1366,683,0,9598,9601,3,1368,684,0,
	9599,9601,1,0,0,0,9600,9596,1,0,0,0,9600,9598,1,0,0,0,9600,9599,1,0,0,0,
	9601,9604,1,0,0,0,9602,9604,5,9,0,0,9603,9595,1,0,0,0,9603,9602,1,0,0,0,
	9604,1321,1,0,0,0,9605,9610,3,1324,662,0,9606,9607,5,6,0,0,9607,9609,3,
	1324,662,0,9608,9606,1,0,0,0,9609,9612,1,0,0,0,9610,9608,1,0,0,0,9610,9611,
	1,0,0,0,9611,1323,1,0,0,0,9612,9610,1,0,0,0,9613,9615,3,1360,680,0,9614,
	9616,3,1312,656,0,9615,9614,1,0,0,0,9615,9616,1,0,0,0,9616,1325,1,0,0,0,
	9617,9622,3,1328,664,0,9618,9619,5,6,0,0,9619,9621,3,1328,664,0,9620,9618,
	1,0,0,0,9621,9624,1,0,0,0,9622,9620,1,0,0,0,9622,9623,1,0,0,0,9623,1327,
	1,0,0,0,9624,9622,1,0,0,0,9625,9626,3,1360,680,0,9626,1329,1,0,0,0,9627,
	9628,3,1366,683,0,9628,1331,1,0,0,0,9629,9630,3,1346,673,0,9630,1333,1,
	0,0,0,9631,9636,3,1362,681,0,9632,9633,3,1360,680,0,9633,9634,3,1312,656,
	0,9634,9636,1,0,0,0,9635,9631,1,0,0,0,9635,9632,1,0,0,0,9636,1335,1,0,0,
	0,9637,9670,3,1344,672,0,9638,9670,3,1342,671,0,9639,9670,3,1346,673,0,
	9640,9670,3,1340,670,0,9641,9670,3,1338,669,0,9642,9650,3,1334,667,0,9643,
	9651,3,1346,673,0,9644,9645,5,2,0,0,9645,9646,3,1270,635,0,9646,9647,3,
	990,495,0,9647,9648,5,3,0,0,9648,9649,3,1346,673,0,9649,9651,1,0,0,0,9650,
	9643,1,0,0,0,9650,9644,1,0,0,0,9651,9670,1,0,0,0,9652,9653,3,1114,557,0,
	9653,9654,3,1346,673,0,9654,9670,1,0,0,0,9655,9664,3,1142,571,0,9656,9657,
	3,1346,673,0,9657,9658,3,1146,573,0,9658,9665,1,0,0,0,9659,9660,5,2,0,0,
	9660,9661,3,1344,672,0,9661,9662,5,3,0,0,9662,9663,3,1346,673,0,9663,9665,
	1,0,0,0,9664,9656,1,0,0,0,9664,9659,1,0,0,0,9665,9670,1,0,0,0,9666,9670,
	5,96,0,0,9667,9670,5,60,0,0,9668,9670,5,78,0,0,9669,9637,1,0,0,0,9669,9638,
	1,0,0,0,9669,9639,1,0,0,0,9669,9640,1,0,0,0,9669,9641,1,0,0,0,9669,9642,
	1,0,0,0,9669,9652,1,0,0,0,9669,9655,1,0,0,0,9669,9666,1,0,0,0,9669,9667,
	1,0,0,0,9669,9668,1,0,0,0,9670,1337,1,0,0,0,9671,9672,5,530,0,0,9672,1339,
	1,0,0,0,9673,9674,5,526,0,0,9674,1341,1,0,0,0,9675,9676,5,536,0,0,9676,
	1343,1,0,0,0,9677,9678,5,534,0,0,9678,1345,1,0,0,0,9679,9680,3,1348,674,
	0,9680,9681,3,1350,675,0,9681,1347,1,0,0,0,9682,9694,5,521,0,0,9683,9694,
	5,523,0,0,9684,9688,5,525,0,0,9685,9687,5,553,0,0,9686,9685,1,0,0,0,9687,
	9690,1,0,0,0,9688,9686,1,0,0,0,9688,9689,1,0,0,0,9689,9691,1,0,0,0,9690,
	9688,1,0,0,0,9691,9694,5,554,0,0,9692,9694,5,547,0,0,9693,9682,1,0,0,0,
	9693,9683,1,0,0,0,9693,9684,1,0,0,0,9693,9692,1,0,0,0,9694,1349,1,0,0,0,
	9695,9696,5,478,0,0,9696,9699,3,1348,674,0,9697,9699,1,0,0,0,9698,9695,
	1,0,0,0,9698,9697,1,0,0,0,9699,1351,1,0,0,0,9700,9706,3,1344,672,0,9701,
	9702,5,12,0,0,9702,9706,3,1344,672,0,9703,9704,5,13,0,0,9704,9706,3,1344,
	672,0,9705,9700,1,0,0,0,9705,9701,1,0,0,0,9705,9703,1,0,0,0,9706,1353,1,
	0,0,0,9707,9708,3,1356,678,0,9708,1355,1,0,0,0,9709,9713,3,1364,682,0,9710,
	9713,5,52,0,0,9711,9713,5,89,0,0,9712,9709,1,0,0,0,9712,9710,1,0,0,0,9712,
	9711,1,0,0,0,9713,1357,1,0,0,0,9714,9719,3,1356,678,0,9715,9716,5,6,0,0,
	9716,9718,3,1356,678,0,9717,9715,1,0,0,0,9718,9721,1,0,0,0,9719,9717,1,
	0,0,0,9719,9720,1,0,0,0,9720,1359,1,0,0,0,9721,9719,1,0,0,0,9722,9727,3,
	1368,684,0,9723,9727,3,1372,686,0,9724,9727,3,1374,687,0,9725,9727,3,1592,
	796,0,9726,9722,1,0,0,0,9726,9723,1,0,0,0,9726,9724,1,0,0,0,9726,9725,1,
	0,0,0,9727,1361,1,0,0,0,9728,9733,3,1368,684,0,9729,9733,3,1372,686,0,9730,
	9733,3,1592,796,0,9731,9733,3,1376,688,0,9732,9728,1,0,0,0,9732,9729,1,
	0,0,0,9732,9730,1,0,0,0,9732,9731,1,0,0,0,9733,1363,1,0,0,0,9734,9739,3,
	1368,684,0,9735,9739,3,1372,686,0,9736,9739,3,1374,687,0,9737,9739,3,1376,
	688,0,9738,9734,1,0,0,0,9738,9735,1,0,0,0,9738,9736,1,0,0,0,9738,9737,1,
	0,0,0,9739,1365,1,0,0,0,9740,9747,3,1368,684,0,9741,9747,3,1592,796,0,9742,
	9747,3,1372,686,0,9743,9747,3,1374,687,0,9744,9747,3,1376,688,0,9745,9747,
	3,1378,689,0,9746,9740,1,0,0,0,9746,9741,1,0,0,0,9746,9742,1,0,0,0,9746,
	9743,1,0,0,0,9746,9744,1,0,0,0,9746,9745,1,0,0,0,9747,1367,1,0,0,0,9748,
	9749,5,512,0,0,9749,9756,3,1350,675,0,9750,9756,5,513,0,0,9751,9756,5,517,
	0,0,9752,9756,3,1196,598,0,9753,9756,3,1370,685,0,9754,9756,3,1592,796,
	0,9755,9748,1,0,0,0,9755,9750,1,0,0,0,9755,9751,1,0,0,0,9755,9752,1,0,0,
	0,9755,9753,1,0,0,0,9755,9754,1,0,0,0,9756,1369,1,0,0,0,9757,9758,5,538,
	0,0,9758,1371,1,0,0,0,9759,9760,7,57,0,0,9760,1373,1,0,0,0,9761,9813,5,
	378,0,0,9762,9813,5,379,0,0,9763,9813,3,1124,562,0,9764,9813,5,381,0,0,
	9765,9813,5,382,0,0,9766,9813,3,1132,566,0,9767,9813,5,384,0,0,9768,9813,
	5,385,0,0,9769,9813,5,386,0,0,9770,9813,5,387,0,0,9771,9813,5,388,0,0,9772,
	9813,5,389,0,0,9773,9813,5,390,0,0,9774,9813,5,461,0,0,9775,9813,5,391,
	0,0,9776,9813,5,392,0,0,9777,9813,5,393,0,0,9778,9813,5,394,0,0,9779,9813,
	5,395,0,0,9780,9813,5,396,0,0,9781,9813,5,397,0,0,9782,9813,5,398,0,0,9783,
	9813,5,480,0,0,9784,9813,5,399,0,0,9785,9813,3,1120,560,0,9786,9813,5,444,
	0,0,9787,9813,5,401,0,0,9788,9813,5,402,0,0,9789,9813,5,403,0,0,9790,9813,
	5,404,0,0,9791,9813,5,405,0,0,9792,9813,5,406,0,0,9793,9813,5,407,0,0,9794,
	9813,5,408,0,0,9795,9813,5,409,0,0,9796,9813,5,410,0,0,9797,9813,5,411,
	0,0,9798,9813,5,412,0,0,9799,9813,5,413,0,0,9800,9813,5,414,0,0,9801,9813,
	5,415,0,0,9802,9813,5,416,0,0,9803,9813,5,417,0,0,9804,9813,5,418,0,0,9805,
	9813,5,419,0,0,9806,9813,5,467,0,0,9807,9813,5,420,0,0,9808,9813,5,421,
	0,0,9809,9813,5,422,0,0,9810,9813,5,423,0,0,9811,9813,5,465,0,0,9812,9761,
	1,0,0,0,9812,9762,1,0,0,0,9812,9763,1,0,0,0,9812,9764,1,0,0,0,9812,9765,
	1,0,0,0,9812,9766,1,0,0,0,9812,9767,1,0,0,0,9812,9768,1,0,0,0,9812,9769,
	1,0,0,0,9812,9770,1,0,0,0,9812,9771,1,0,0,0,9812,9772,1,0,0,0,9812,9773,
	1,0,0,0,9812,9774,1,0,0,0,9812,9775,1,0,0,0,9812,9776,1,0,0,0,9812,9777,
	1,0,0,0,9812,9778,1,0,0,0,9812,9779,1,0,0,0,9812,9780,1,0,0,0,9812,9781,
	1,0,0,0,9812,9782,1,0,0,0,9812,9783,1,0,0,0,9812,9784,1,0,0,0,9812,9785,
	1,0,0,0,9812,9786,1,0,0,0,9812,9787,1,0,0,0,9812,9788,1,0,0,0,9812,9789,
	1,0,0,0,9812,9790,1,0,0,0,9812,9791,1,0,0,0,9812,9792,1,0,0,0,9812,9793,
	1,0,0,0,9812,9794,1,0,0,0,9812,9795,1,0,0,0,9812,9796,1,0,0,0,9812,9797,
	1,0,0,0,9812,9798,1,0,0,0,9812,9799,1,0,0,0,9812,9800,1,0,0,0,9812,9801,
	1,0,0,0,9812,9802,1,0,0,0,9812,9803,1,0,0,0,9812,9804,1,0,0,0,9812,9805,
	1,0,0,0,9812,9806,1,0,0,0,9812,9807,1,0,0,0,9812,9808,1,0,0,0,9812,9809,
	1,0,0,0,9812,9810,1,0,0,0,9812,9811,1,0,0,0,9813,1375,1,0,0,0,9814,9815,
	7,58,0,0,9815,1377,1,0,0,0,9816,9817,7,59,0,0,9817,1379,1,0,0,0,9818,9819,
	3,1382,691,0,9819,9820,3,1392,696,0,9820,9821,3,1390,695,0,9821,1381,1,
	0,0,0,9822,9824,3,1384,692,0,9823,9822,1,0,0,0,9824,9827,1,0,0,0,9825,9823,
	1,0,0,0,9825,9826,1,0,0,0,9826,1383,1,0,0,0,9827,9825,1,0,0,0,9828,9829,
	3,1386,693,0,9829,9830,5,270,0,0,9830,9831,5,481,0,0,9831,9849,1,0,0,0,
	9832,9833,3,1386,693,0,9833,9834,5,482,0,0,9834,9835,3,1388,694,0,9835,
	9849,1,0,0,0,9836,9837,3,1386,693,0,9837,9838,5,483,0,0,9838,9839,5,484,
	0,0,9839,9849,1,0,0,0,9840,9841,3,1386,693,0,9841,9842,5,483,0,0,9842,9843,
	5,485,0,0,9843,9849,1,0,0,0,9844,9845,3,1386,693,0,9845,9846,5,483,0,0,
	9846,9847,5,486,0,0,9847,9849,1,0,0,0,9848,9828,1,0,0,0,9848,9832,1,0,0,
	0,9848,9836,1,0,0,0,9848,9840,1,0,0,0,9848,9844,1,0,0,0,9849,1385,1,0,0,
	0,9850,9851,5,29,0,0,9851,1387,1,0,0,0,9852,9857,3,1346,673,0,9853,9857,
	3,1378,689,0,9854,9857,3,1592,796,0,9855,9857,3,1372,686,0,9856,9852,1,
	0,0,0,9856,9853,1,0,0,0,9856,9854,1,0,0,0,9856,9855,1,0,0,0,9857,1389,1,
	0,0,0,9858,9861,1,0,0,0,9859,9861,5,7,0,0,9860,9858,1,0,0,0,9860,9859,1,
	0,0,0,9861,1391,1,0,0,0,9862,9863,3,1394,697,0,9863,9864,5,146,0,0,9864,
	9865,3,1436,718,0,9865,9866,3,1572,786,0,9866,9867,5,445,0,0,9867,9868,
	3,1586,793,0,9868,1393,1,0,0,0,9869,9874,3,1582,791,0,9870,9872,3,1396,
	698,0,9871,9873,3,1398,699,0,9872,9871,1,0,0,0,9872,9873,1,0,0,0,9873,9875,
	1,0,0,0,9874,9870,1,0,0,0,9874,9875,1,0,0,0,9875,1395,1,0,0,0,9876,9877,
	5,178,0,0,9877,1397,1,0,0,0,9878,9880,3,1402,701,0,9879,9878,1,0,0,0,9880,
	9881,1,0,0,0,9881,9879,1,0,0,0,9881,9882,1,0,0,0,9882,1399,1,0,0,0,9883,
	9884,5,18,0,0,9884,9885,3,1590,795,0,9885,9886,5,19,0,0,9886,1401,1,0,0,
	0,9887,9891,3,1404,702,0,9888,9891,5,178,0,0,9889,9891,3,1400,700,0,9890,
	9887,1,0,0,0,9890,9888,1,0,0,0,9890,9889,1,0,0,0,9891,1403,1,0,0,0,9892,
	9908,3,1420,710,0,9893,9894,5,487,0,0,9894,9895,5,62,0,0,9895,9909,3,1418,
	709,0,9896,9897,3,1422,711,0,9897,9898,3,1424,712,0,9898,9899,3,1426,713,
	0,9899,9900,3,1428,714,0,9900,9901,3,1430,715,0,9901,9909,1,0,0,0,9902,
	9903,3,1406,703,0,9903,9904,5,172,0,0,9904,9905,3,1410,705,0,9905,9906,
	3,1416,708,0,9906,9907,3,1408,704,0,9907,9909,1,0,0,0,9908,9893,1,0,0,0,
	9908,9896,1,0,0,0,9908,9902,1,0,0,0,9909,9910,1,0,0,0,9910,9911,5,7,0,0,
	9911,1405,1,0,0,0,9912,9917,1,0,0,0,9913,9914,5,260,0,0,9914,9917,5,315,
	0,0,9915,9917,5,315,0,0,9916,9912,1,0,0,0,9916,9913,1,0,0,0,9916,9915,1,
	0,0,0,9917,1407,1,0,0,0,9918,9919,3,952,476,0,9919,1409,1,0,0,0,9920,9926,
	1,0,0,0,9921,9922,5,2,0,0,9922,9923,3,1412,706,0,9923,9924,5,3,0,0,9924,
	9926,1,0,0,0,9925,9920,1,0,0,0,9925,9921,1,0,0,0,9926,1411,1,0,0,0,9927,
	9932,3,1414,707,0,9928,9929,5,6,0,0,9929,9931,3,1414,707,0,9930,9928,1,
	0,0,0,9931,9934,1,0,0,0,9932,9930,1,0,0,0,9932,9933,1,0,0,0,9933,1413,1,
	0,0,0,9934,9932,1,0,0,0,9935,9936,3,1420,710,0,9936,9937,3,1424,712,0,9937,
	1415,1,0,0,0,9938,9939,7,60,0,0,9939,1417,1,0,0,0,9940,9943,5,28,0,0,9941,
	9943,3,1360,680,0,9942,9940,1,0,0,0,9942,9941,1,0,0,0,9943,1419,1,0,0,0,
	9944,9945,3,1590,795,0,9945,1421,1,0,0,0,9946,9949,1,0,0,0,9947,9949,5,
	488,0,0,9948,9946,1,0,0,0,9948,9947,1,0,0,0,9949,1423,1,0,0,0,9950,9951,
	3,1108,554,0,9951,1425,1,0,0,0,9952,9956,1,0,0,0,9953,9954,5,43,0,0,9954,
	9956,3,524,262,0,9955,9952,1,0,0,0,9955,9953,1,0,0,0,9956,1427,1,0,0,0,
	9957,9961,1,0,0,0,9958,9959,5,77,0,0,9959,9961,5,78,0,0,9960,9957,1,0,0,
	0,9960,9958,1,0,0,0,9961,1429,1,0,0,0,9962,9967,1,0,0,0,9963,9964,3,1432,
	716,0,9964,9965,3,1594,797,0,9965,9967,1,0,0,0,9966,9962,1,0,0,0,9966,9963,
	1,0,0,0,9967,1431,1,0,0,0,9968,9971,3,1434,717,0,9969,9971,5,53,0,0,9970,
	9968,1,0,0,0,9970,9969,1,0,0,0,9971,1433,1,0,0,0,9972,9973,7,61,0,0,9973,
	1435,1,0,0,0,9974,9976,3,1438,719,0,9975,9974,1,0,0,0,9976,9979,1,0,0,0,
	9977,9975,1,0,0,0,9977,9978,1,0,0,0,9978,1437,1,0,0,0,9979,9977,1,0,0,0,
	9980,9981,3,1392,696,0,9981,9982,5,7,0,0,9982,10008,1,0,0,0,9983,10008,
	3,1504,752,0,9984,10008,3,1508,754,0,9985,10008,3,1446,723,0,9986,10008,
	3,1462,731,0,9987,10008,3,1468,734,0,9988,10008,3,1478,739,0,9989,10008,
	3,1480,740,0,9990,10008,3,1482,741,0,9991,10008,3,1496,748,0,9992,10008,
	3,1500,750,0,9993,10008,3,1520,760,0,9994,10008,3,1526,763,0,9995,10008,
	3,1528,764,0,9996,10008,3,1440,720,0,9997,10008,3,1442,721,0,9998,10008,
	3,1448,724,0,9999,10008,3,1536,768,0,10000,10008,3,1548,774,0,10001,10008,
	3,1556,778,0,10002,10008,3,1558,779,0,10003,10008,3,1560,780,0,10004,10008,
	3,1562,781,0,10005,10008,3,1564,782,0,10006,10008,3,1568,784,0,10007,9980,
	1,0,0,0,10007,9983,1,0,0,0,10007,9984,1,0,0,0,10007,9985,1,0,0,0,10007,
	9986,1,0,0,0,10007,9987,1,0,0,0,10007,9988,1,0,0,0,10007,9989,1,0,0,0,10007,
	9990,1,0,0,0,10007,9991,1,0,0,0,10007,9992,1,0,0,0,10007,9993,1,0,0,0,10007,
	9994,1,0,0,0,10007,9995,1,0,0,0,10007,9996,1,0,0,0,10007,9997,1,0,0,0,10007,
	9998,1,0,0,0,10007,9999,1,0,0,0,10007,10000,1,0,0,0,10007,10001,1,0,0,0,
	10007,10002,1,0,0,0,10007,10003,1,0,0,0,10007,10004,1,0,0,0,10007,10005,
	1,0,0,0,10007,10006,1,0,0,0,10008,1439,1,0,0,0,10009,10010,5,489,0,0,10010,
	10011,3,1598,799,0,10011,10012,5,7,0,0,10012,1441,1,0,0,0,10013,10014,5,
	424,0,0,10014,10015,3,1590,795,0,10015,10016,5,2,0,0,10016,10017,3,1444,
	722,0,10017,10018,5,3,0,0,10018,10019,5,7,0,0,10019,10028,1,0,0,0,10020,
	10021,5,57,0,0,10021,10022,3,1590,795,0,10022,10023,5,2,0,0,10023,10024,
	3,1444,722,0,10024,10025,5,3,0,0,10025,10026,5,7,0,0,10026,10028,1,0,0,
	0,10027,10013,1,0,0,0,10027,10020,1,0,0,0,10028,1443,1,0,0,0,10029,10032,
	1,0,0,0,10030,10032,3,1268,634,0,10031,10029,1,0,0,0,10031,10030,1,0,0,
	0,10032,1445,1,0,0,0,10033,10034,3,1460,730,0,10034,10035,3,1434,717,0,
	10035,10036,3,1594,797,0,10036,10037,5,7,0,0,10037,1447,1,0,0,0,10038,10039,
	5,490,0,0,10039,10040,3,1450,725,0,10040,10041,5,491,0,0,10041,10042,3,
	1452,726,0,10042,10043,5,7,0,0,10043,1449,1,0,0,0,10044,10048,1,0,0,0,10045,
	10048,5,425,0,0,10046,10048,5,492,0,0,10047,10044,1,0,0,0,10047,10045,1,
	0,0,0,10047,10046,1,0,0,0,10048,1451,1,0,0,0,10049,10054,3,1454,727,0,10050,
	10051,5,6,0,0,10051,10053,3,1454,727,0,10052,10050,1,0,0,0,10053,10056,
	1,0,0,0,10054,10052,1,0,0,0,10054,10055,1,0,0,0,10055,1453,1,0,0,0,10056,
	10054,1,0,0,0,10057,10058,3,1458,729,0,10058,10059,3,1434,717,0,10059,10060,
	3,1456,728,0,10060,1455,1,0,0,0,10061,10062,3,1360,680,0,10062,1457,1,0,
	0,0,10063,10064,3,1460,730,0,10064,1459,1,0,0,0,10065,10068,3,524,262,0,
	10066,10068,5,28,0,0,10067,10065,1,0,0,0,10067,10066,1,0,0,0,10068,10075,
	1,0,0,0,10069,10070,5,4,0,0,10070,10071,3,1600,800,0,10071,10072,5,5,0,
	0,10072,10074,1,0,0,0,10073,10069,1,0,0,0,10074,10077,1,0,0,0,10075,10073,
	1,0,0,0,10075,10076,1,0,0,0,10076,1461,1,0,0,0,10077,10075,1,0,0,0,10078,
	10079,5,220,0,0,10079,10080,3,1596,798,0,10080,10081,5,93,0,0,10081,10082,
	3,1436,718,0,10082,10083,3,1464,732,0,10083,10084,3,1466,733,0,10084,10085,
	5,445,0,0,10085,10086,5,220,0,0,10086,10087,5,7,0,0,10087,1463,1,0,0,0,
	10088,10089,5,493,0,0,10089,10090,3,1152,576,0,10090,10091,5,93,0,0,10091,
	10092,3,1436,718,0,10092,10094,1,0,0,0,10093,10088,1,0,0,0,10094,10097,
	1,0,0,0,10095,10093,1,0,0,0,10095,10096,1,0,0,0,10096,1465,1,0,0,0,10097,
	10095,1,0,0,0,10098,10102,1,0,0,0,10099,10100,5,58,0,0,10100,10102,3,1436,
	718,0,10101,10098,1,0,0,0,10101,10099,1,0,0,0,10102,1467,1,0,0,0,10103,
	10104,5,40,0,0,10104,10105,3,1470,735,0,10105,10106,3,1472,736,0,10106,
	10107,3,1476,738,0,10107,10108,5,445,0,0,10108,10109,5,40,0,0,10109,10110,
	5,7,0,0,10110,1469,1,0,0,0,10111,10114,1,0,0,0,10112,10114,3,1594,797,0,
	10113,10111,1,0,0,0,10113,10112,1,0,0,0,10114,1471,1,0,0,0,10115,10117,
	3,1474,737,0,10116,10115,1,0,0,0,10117,10118,1,0,0,0,10118,10116,1,0,0,
	0,10118,10119,1,0,0,0,10119,1473,1,0,0,0,10120,10121,5,102,0,0,10121,10122,
	3,1268,634,0,10122,10123,5,93,0,0,10123,10124,3,1436,718,0,10124,1475,1,
	0,0,0,10125,10129,1,0,0,0,10126,10127,5,58,0,0,10127,10129,3,1436,718,0,
	10128,10125,1,0,0,0,10128,10126,1,0,0,0,10129,1477,1,0,0,0,10130,10131,
	3,1584,792,0,10131,10132,3,1524,762,0,10132,1479,1,0,0,0,10133,10134,3,
	1584,792,0,10134,10135,5,494,0,0,10135,10136,3,1602,801,0,10136,10137,3,
	1524,762,0,10137,1481,1,0,0,0,10138,10139,3,1584,792,0,10139,10140,5,62,
	0,0,10140,10141,3,1484,742,0,10141,10142,3,1524,762,0,10142,1483,1,0,0,
	0,10143,10144,3,1494,747,0,10144,10160,5,68,0,0,10145,10146,3,946,473,0,
	10146,10147,3,1488,744,0,10147,10161,1,0,0,0,10148,10161,3,952,476,0,10149,
	10161,3,878,439,0,10150,10151,5,202,0,0,10151,10152,3,1152,576,0,10152,
	10153,3,1486,743,0,10153,10161,1,0,0,0,10154,10155,3,1490,745,0,10155,10156,
	3,1152,576,0,10156,10157,5,24,0,0,10157,10158,3,1152,576,0,10158,10159,
	3,1492,746,0,10159,10161,1,0,0,0,10160,10145,1,0,0,0,10160,10148,1,0,0,
	0,10160,10149,1,0,0,0,10160,10150,1,0,0,0,10160,10154,1,0,0,0,10161,1485,
	1,0,0,0,10162,10166,1,0,0,0,10163,10164,5,100,0,0,10164,10166,3,1268,634,
	0,10165,10162,1,0,0,0,10165,10163,1,0,0,0,10166,1487,1,0,0,0,10167,10180,
	1,0,0,0,10168,10169,5,2,0,0,10169,10174,3,1152,576,0,10170,10171,5,6,0,
	0,10171,10173,3,1152,576,0,10172,10170,1,0,0,0,10173,10176,1,0,0,0,10174,
	10172,1,0,0,0,10174,10175,1,0,0,0,10175,10177,1,0,0,0,10176,10174,1,0,0,
	0,10177,10178,5,3,0,0,10178,10180,1,0,0,0,10179,10167,1,0,0,0,10179,10168,
	1,0,0,0,10180,1489,1,0,0,0,10181,10184,1,0,0,0,10182,10184,5,495,0,0,10183,
	10181,1,0,0,0,10183,10182,1,0,0,0,10184,1491,1,0,0,0,10185,10189,1,0,0,
	0,10186,10187,5,147,0,0,10187,10189,3,1152,576,0,10188,10185,1,0,0,0,10188,
	10186,1,0,0,0,10189,1493,1,0,0,0,10190,10191,3,522,261,0,10191,1495,1,0,
	0,0,10192,10193,3,1584,792,0,10193,10194,5,496,0,0,10194,10195,3,1494,747,
	0,10195,10196,3,1498,749,0,10196,10197,5,68,0,0,10197,10198,5,35,0,0,10198,
	10199,3,1152,576,0,10199,10200,3,1524,762,0,10200,1497,1,0,0,0,10201,10205,
	1,0,0,0,10202,10203,5,497,0,0,10203,10205,3,1344,672,0,10204,10201,1,0,
	0,0,10204,10202,1,0,0,0,10205,1499,1,0,0,0,10206,10207,3,1502,751,0,10207,
	10208,3,1586,793,0,10208,10209,3,1588,794,0,10209,10210,5,7,0,0,10210,1501,
	1,0,0,0,10211,10212,7,62,0,0,10212,1503,1,0,0,0,10213,10225,5,499,0,0,10214,
	10215,5,259,0,0,10215,10226,3,1594,797,0,10216,10222,5,500,0,0,10217,10218,
	5,202,0,0,10218,10219,3,1152,576,0,10219,10220,3,1486,743,0,10220,10223,
	1,0,0,0,10221,10223,3,952,476,0,10222,10217,1,0,0,0,10222,10221,1,0,0,0,
	10223,10226,1,0,0,0,10224,10226,3,1506,753,0,10225,10214,1,0,0,0,10225,
	10216,1,0,0,0,10225,10224,1,0,0,0,10226,10227,1,0,0,0,10227,10228,5,7,0,
	0,10228,1505,1,0,0,0,10229,10232,1,0,0,0,10230,10232,3,1594,797,0,10231,
	10229,1,0,0,0,10231,10230,1,0,0,0,10232,1507,1,0,0,0,10233,10234,5,501,
	0,0,10234,10235,3,1510,755,0,10235,10236,3,1346,673,0,10236,10237,3,1512,
	756,0,10237,10238,3,1514,757,0,10238,10239,5,7,0,0,10239,10260,1,0,0,0,
	10240,10241,5,501,0,0,10241,10242,3,1510,755,0,10242,10243,3,1368,684,0,
	10243,10244,3,1514,757,0,10244,10245,5,7,0,0,10245,10260,1,0,0,0,10246,
	10247,5,501,0,0,10247,10248,3,1510,755,0,10248,10249,5,502,0,0,10249,10250,
	3,1346,673,0,10250,10251,3,1514,757,0,10251,10252,5,7,0,0,10252,10260,1,
	0,0,0,10253,10254,5,501,0,0,10254,10255,3,1510,755,0,10255,10256,3,1514,
	757,0,10256,10257,5,7,0,0,10257,10260,1,0,0,0,10258,10260,5,501,0,0,10259,
	10233,1,0,0,0,10259,10240,1,0,0,0,10259,10246,1,0,0,0,10259,10253,1,0,0,
	0,10259,10258,1,0,0,0,10260,1509,1,0,0,0,10261,10270,1,0,0,0,10262,10270,
	1,0,0,0,10263,10270,5,503,0,0,10264,10270,5,504,0,0,10265,10270,5,505,0,
	0,10266,10270,5,506,0,0,10267,10270,5,507,0,0,10268,10270,5,508,0,0,10269,
	10261,1,0,0,0,10269,10262,1,0,0,0,10269,10263,1,0,0,0,10269,10264,1,0,0,
	0,10269,10265,1,0,0,0,10269,10266,1,0,0,0,10269,10267,1,0,0,0,10269,10268,
	1,0,0,0,10270,1511,1,0,0,0,10271,10279,1,0,0,0,10272,10273,5,6,0,0,10273,
	10275,3,1152,576,0,10274,10272,1,0,0,0,10275,10276,1,0,0,0,10276,10274,
	1,0,0,0,10276,10277,1,0,0,0,10277,10279,1,0,0,0,10278,10271,1,0,0,0,10278,
	10274,1,0,0,0,10279,1513,1,0,0,0,10280,10284,1,0,0,0,10281,10282,5,100,
	0,0,10282,10284,3,1518,759,0,10283,10280,1,0,0,0,10283,10281,1,0,0,0,10284,
	1515,1,0,0,0,10285,10286,3,1368,684,0,10286,10287,5,10,0,0,10287,10288,
	3,1152,576,0,10288,1517,1,0,0,0,10289,10294,3,1516,758,0,10290,10291,5,
	6,0,0,10291,10293,3,1516,758,0,10292,10290,1,0,0,0,10293,10296,1,0,0,0,
	10294,10292,1,0,0,0,10294,10295,1,0,0,0,10295,1519,1,0,0,0,10296,10294,
	1,0,0,0,10297,10298,5,509,0,0,10298,10299,3,1594,797,0,10299,10300,3,1522,
	761,0,10300,10301,5,7,0,0,10301,1521,1,0,0,0,10302,10306,1,0,0,0,10303,
	10304,5,6,0,0,10304,10306,3,1594,797,0,10305,10302,1,0,0,0,10305,10303,
	1,0,0,0,10306,1523,1,0,0,0,10307,10308,5,510,0,0,10308,10309,3,1436,718,
	0,10309,10310,5,445,0,0,10310,10311,5,510,0,0,10311,10312,3,1586,793,0,
	10312,10313,5,7,0,0,10313,1525,1,0,0,0,10314,10315,3,1604,802,0,10315,10316,
	5,7,0,0,10316,1527,1,0,0,0,10317,10318,5,202,0,0,10318,10326,3,1152,576,
	0,10319,10320,3,1534,767,0,10320,10321,3,1530,765,0,10321,10327,1,0,0,0,
	10322,10323,3,1530,765,0,10323,10324,3,1534,767,0,10324,10327,1,0,0,0,10325,
	10327,1,0,0,0,10326,10319,1,0,0,0,10326,10322,1,0,0,0,10326,10325,1,0,0,
	0,10327,10328,1,0,0,0,10328,10329,5,7,0,0,10329,1529,1,0,0,0,10330,10334,
	1,0,0,0,10331,10332,5,100,0,0,10332,10334,3,1532,766,0,10333,10330,1,0,
	0,0,10333,10331,1,0,0,0,10334,1531,1,0,0,0,10335,10340,3,1152,576,0,10336,
	10337,5,6,0,0,10337,10339,3,1152,576,0,10338,10336,1,0,0,0,10339,10342,
	1,0,0,0,10340,10338,1,0,0,0,10340,10341,1,0,0,0,10341,1533,1,0,0,0,10342,
	10340,1,0,0,0,10343,10350,1,0,0,0,10344,10346,5,71,0,0,10345,10347,5,337,
	0,0,10346,10345,1,0,0,0,10346,10347,1,0,0,0,10347,10348,1,0,0,0,10348,10350,
	3,1550,775,0,10349,10343,1,0,0,0,10349,10344,1,0,0,0,10350,1535,1,0,0,0,
	10351,10369,5,511,0,0,10352,10353,3,1570,785,0,10353,10354,3,1544,772,0,
	10354,10360,5,62,0,0,10355,10361,3,952,476,0,10356,10357,5,202,0,0,10357,
	10358,3,1594,797,0,10358,10359,3,1542,771,0,10359,10361,1,0,0,0,10360,10355,
	1,0,0,0,10360,10356,1,0,0,0,10361,10370,1,0,0,0,10362,10367,3,1360,680,
	0,10363,10364,5,2,0,0,10364,10365,3,1540,770,0,10365,10366,5,3,0,0,10366,
	10368,1,0,0,0,10367,10363,1,0,0,0,10367,10368,1,0,0,0,10368,10370,1,0,0,
	0,10369,10352,1,0,0,0,10369,10362,1,0,0,0,10370,10371,1,0,0,0,10371,10372,
	5,7,0,0,10372,1537,1,0,0,0,10373,10374,3,1360,680,0,10374,10375,5,20,0,
	0,10375,10376,3,1152,576,0,10376,10379,1,0,0,0,10377,10379,3,1152,576,0,
	10378,10373,1,0,0,0,10378,10377,1,0,0,0,10379,1539,1,0,0,0,10380,10385,
	3,1538,769,0,10381,10382,5,6,0,0,10382,10384,3,1538,769,0,10383,10381,1,
	0,0,0,10384,10387,1,0,0,0,10385,10383,1,0,0,0,10385,10386,1,0,0,0,10386,
	1541,1,0,0,0,10387,10385,1,0,0,0,10388,10392,1,0,0,0,10389,10390,5,100,
	0,0,10390,10392,3,1268,634,0,10391,10388,1,0,0,0,10391,10389,1,0,0,0,10392,
	1543,1,0,0,0,10393,10398,1,0,0,0,10394,10395,3,1546,773,0,10395,10396,5,
	315,0,0,10396,10398,1,0,0,0,10397,10393,1,0,0,0,10397,10394,1,0,0,0,10398,
	1545,1,0,0,0,10399,10402,1,0,0,0,10400,10402,5,260,0,0,10401,10399,1,0,
	0,0,10401,10400,1,0,0,0,10402,1547,1,0,0,0,10403,10404,5,61,0,0,10404,10405,
	3,1554,777,0,10405,10406,3,1552,776,0,10406,10407,3,1570,785,0,10407,10408,
	5,71,0,0,10408,10409,3,1550,775,0,10409,10410,5,7,0,0,10410,1549,1,0,0,
	0,10411,10412,3,1268,634,0,10412,1551,1,0,0,0,10413,10417,1,0,0,0,10414,
	10417,5,64,0,0,10415,10417,5,68,0,0,10416,10413,1,0,0,0,10416,10414,1,0,
	0,0,10416,10415,1,0,0,0,10417,1553,1,0,0,0,10418,10436,1,0,0,0,10419,10436,
	1,0,0,0,10420,10436,5,259,0,0,10421,10436,5,284,0,0,10422,10436,5,207,0,
	0,10423,10436,5,240,0,0,10424,10425,5,130,0,0,10425,10436,3,1152,576,0,
	10426,10427,5,298,0,0,10427,10436,3,1152,576,0,10428,10436,3,1152,576,0,
	10429,10436,5,30,0,0,10430,10433,7,63,0,0,10431,10434,3,1152,576,0,10432,
	10434,5,30,0,0,10433,10431,1,0,0,0,10433,10432,1,0,0,0,10433,10434,1,0,
	0,0,10434,10436,1,0,0,0,10435,10418,1,0,0,0,10435,10419,1,0,0,0,10435,10420,
	1,0,0,0,10435,10421,1,0,0,0,10435,10422,1,0,0,0,10435,10423,1,0,0,0,10435,
	10424,1,0,0,0,10435,10426,1,0,0,0,10435,10428,1,0,0,0,10435,10429,1,0,0,
	0,10435,10430,1,0,0,0,10436,1555,1,0,0,0,10437,10438,5,256,0,0,10438,10439,
	3,1554,777,0,10439,10440,3,1570,785,0,10440,10441,5,7,0,0,10441,1557,1,
	0,0,0,10442,10443,5,157,0,0,10443,10444,3,1570,785,0,10444,10445,5,7,0,
	0,10445,1559,1,0,0,0,10446,10447,5,78,0,0,10447,10448,5,7,0,0,10448,1561,
	1,0,0,0,10449,10450,5,161,0,0,10450,10451,3,1566,783,0,10451,10452,5,7,
	0,0,10452,1563,1,0,0,0,10453,10454,5,310,0,0,10454,10455,3,1566,783,0,10455,
	10456,5,7,0,0,10456,1565,1,0,0,0,10457,10459,5,33,0,0,10458,10460,5,260,
	0,0,10459,10458,1,0,0,0,10459,10460,1,0,0,0,10460,10461,1,0,0,0,10461,10464,
	5,153,0,0,10462,10464,1,0,0,0,10463,10457,1,0,0,0,10463,10462,1,0,0,0,10464,
	1567,1,0,0,0,10465,10466,5,324,0,0,10466,10467,3,524,262,0,10467,10468,
	5,94,0,0,10468,10469,5,53,0,0,10469,10470,5,7,0,0,10470,10478,1,0,0,0,10471,
	10474,5,304,0,0,10472,10475,3,524,262,0,10473,10475,5,30,0,0,10474,10472,
	1,0,0,0,10474,10473,1,0,0,0,10475,10476,1,0,0,0,10476,10478,5,7,0,0,10477,
	10465,1,0,0,0,10477,10471,1,0,0,0,10478,1569,1,0,0,0,10479,10482,3,1360,
	680,0,10480,10482,5,28,0,0,10481,10479,1,0,0,0,10481,10480,1,0,0,0,10482,
	1571,1,0,0,0,10483,10487,1,0,0,0,10484,10485,5,508,0,0,10485,10487,3,1574,
	787,0,10486,10483,1,0,0,0,10486,10484,1,0,0,0,10487,1573,1,0,0,0,10488,
	10490,3,1576,788,0,10489,10488,1,0,0,0,10490,10491,1,0,0,0,10491,10489,
	1,0,0,0,10491,10492,1,0,0,0,10492,1575,1,0,0,0,10493,10494,5,102,0,0,10494,
	10495,3,1578,789,0,10495,10496,5,93,0,0,10496,10497,3,1436,718,0,10497,
	1577,1,0,0,0,10498,10503,3,1580,790,0,10499,10500,5,82,0,0,10500,10502,
	3,1580,790,0,10501,10499,1,0,0,0,10502,10505,1,0,0,0,10503,10501,1,0,0,
	0,10503,10504,1,0,0,0,10504,1579,1,0,0,0,10505,10503,1,0,0,0,10506,10510,
	3,1590,795,0,10507,10508,5,502,0,0,10508,10510,3,1346,673,0,10509,10506,
	1,0,0,0,10509,10507,1,0,0,0,10510,1581,1,0,0,0,10511,10514,1,0,0,0,10512,
	10514,3,1400,700,0,10513,10511,1,0,0,0,10513,10512,1,0,0,0,10514,1583,1,
	0,0,0,10515,10518,1,0,0,0,10516,10518,3,1400,700,0,10517,10515,1,0,0,0,
	10517,10516,1,0,0,0,10518,1585,1,0,0,0,10519,10522,1,0,0,0,10520,10522,
	3,1590,795,0,10521,10519,1,0,0,0,10521,10520,1,0,0,0,10522,1587,1,0,0,0,
	10523,10524,5,102,0,0,10524,10527,3,1598,799,0,10525,10527,1,0,0,0,10526,
	10523,1,0,0,0,10526,10525,1,0,0,0,10527,1589,1,0,0,0,10528,10531,3,1360,
	680,0,10529,10531,3,1592,796,0,10530,10528,1,0,0,0,10530,10529,1,0,0,0,
	10531,1591,1,0,0,0,10532,10533,7,64,0,0,10533,1593,1,0,0,0,10534,10535,
	3,1316,658,0,10535,10536,3,976,488,0,10536,10537,3,1048,524,0,10537,10538,
	3,1084,542,0,10538,10539,3,1018,509,0,10539,10540,3,1032,516,0,10540,10541,
	3,1228,614,0,10541,1595,1,0,0,0,10542,10543,3,1594,797,0,10543,1597,1,0,
	0,0,10544,10545,3,1594,797,0,10545,1599,1,0,0,0,10546,10547,3,1152,576,
	0,10547,1601,1,0,0,0,10548,10549,3,1152,576,0,10549,1603,1,0,0,0,10550,
	10551,3,8,4,0,10551,10552,3,1606,803,0,10552,1605,1,0,0,0,10553,10554,5,
	71,0,0,10554,10555,3,978,489,0,10555,10556,3,1550,775,0,10556,10559,1,0,
	0,0,10557,10559,1,0,0,0,10558,10553,1,0,0,0,10558,10557,1,0,0,0,10559,1607,
	1,0,0,0,722,1617,1621,1748,1752,1765,1770,1776,1782,1797,1809,1827,1832,
	1842,1866,1873,1879,1884,1893,1897,1909,1940,1947,1955,1960,1967,1973,1990,
	1995,1999,2012,2016,2021,2026,2038,2047,2060,2065,2076,2087,2092,2103,2114,
	2123,2133,2148,2160,2165,2172,2183,2441,2448,2453,2458,2463,2471,2480,2487,
	2497,2499,2504,2510,2516,2518,2546,2556,2569,2581,2595,2600,2624,2630,2635,
	2642,2647,2685,2689,2696,2700,2707,2721,2728,2739,2772,2782,2786,2793,2800,
	2808,2814,2818,2828,2835,2846,2878,2886,2891,2898,2908,2918,2938,2953,2978,
	2983,2990,2997,3008,3013,3020,3031,3039,3050,3066,3074,3078,3092,3109,3114,
	3121,3130,3133,3138,3145,3156,3169,3182,3200,3203,3212,3227,3242,3251,3258,
	3265,3270,3300,3302,3306,3314,3321,3335,3339,3343,3348,3354,3358,3362,3375,
	3381,3390,3399,3409,3420,3530,3548,3553,3557,3574,3582,3589,3602,3612,3646,
	3651,3656,3660,3668,3670,3728,3745,3753,3776,3780,3800,3837,3846,3851,3856,
	3861,3866,3919,3925,3932,3942,3947,3952,3970,3974,3984,3990,3996,4003,4008,
	4013,4027,4055,4062,4076,4091,4208,4219,4225,4233,4244,4253,4260,4300,4306,
	4327,4355,4359,4364,4373,4377,4404,4411,4426,4446,4466,4559,4584,4591,4607,
	4616,4621,4627,4634,4648,4797,4801,4894,4899,4903,4909,4977,4983,5012,5029,
	5036,5048,5108,5115,5121,5127,5153,5159,5165,5176,5188,5217,5256,5260,5264,
	5268,5273,5280,5294,5307,5315,5322,5328,5332,5337,5344,5358,5360,5367,5371,
	5380,5388,5397,5399,5403,5412,5417,5423,5428,5432,5437,5455,5460,5475,5484,
	5495,5501,5540,5550,5557,5568,5574,5584,5596,5600,5638,5652,5666,5690,5697,
	5707,5719,5724,5760,5767,5782,5829,5866,5877,5894,6364,6368,6373,6432,6436,
	6655,6670,6681,6688,6881,6891,6899,6928,6944,6986,7000,7022,7029,7037,7041,
	7048,7057,7066,7118,7123,7135,7139,7144,7149,7153,7157,7162,7178,7186,7191,
	7204,7209,7216,7226,7230,7241,7252,7260,7267,7306,7314,7318,7399,7427,7432,
	7447,7459,7466,7476,7481,7485,7489,7493,7497,7504,7514,7519,7537,7548,7555,
	7563,7568,7581,7587,7616,7623,7635,7648,7663,7669,7678,7694,7697,7708,7713,
	7726,7739,7750,7753,7757,7763,7779,7792,7802,7820,7822,7830,7834,7844,7854,
	7865,7867,7871,7881,7897,7899,7904,7908,7914,7921,7930,7945,7949,7956,7959,
	7963,7966,7979,7983,7988,7996,8000,8004,8015,8022,8028,8032,8034,8038,8044,
	8053,8059,8061,8063,8070,8074,8083,8087,8097,8104,8112,8136,8142,8146,8151,
	8160,8164,8167,8172,8185,8191,8198,8204,8225,8234,8239,8245,8250,8257,8262,
	8268,8270,8274,8281,8285,8290,8293,8300,8304,8313,8317,8325,8327,8334,8339,
	8342,8357,8369,8379,8388,8393,8398,8405,8408,8412,8419,8443,8452,8458,8462,
	8467,8477,8484,8493,8496,8505,8507,8513,8517,8522,8536,8538,8544,8548,8557,
	8575,8582,8586,8590,8606,8613,8621,8625,8632,8645,8661,8667,8673,8680,8685,
	8691,8698,8706,8714,8719,8723,8726,8732,8737,8753,8756,8758,8770,8772,8776,
	8784,8786,8791,8799,8803,8812,8820,8826,8829,8838,8843,8850,8860,8886,8897,
	8899,8901,8909,8932,8940,8950,8964,8974,8978,8992,8999,9006,9013,9038,9067,
	9106,9108,9136,9157,9164,9177,9189,9195,9204,9221,9233,9242,9247,9254,9264,
	9267,9278,9284,9299,9307,9316,9325,9328,9333,9342,9347,9361,9371,9379,9393,
	9400,9408,9416,9423,9429,9438,9446,9456,9467,9474,9504,9513,9520,9531,9541,
	9545,9549,9554,9562,9566,9570,9575,9580,9585,9592,9600,9603,9610,9615,9622,
	9635,9650,9664,9669,9688,9693,9698,9705,9712,9719,9726,9732,9738,9746,9755,
	9812,9825,9848,9856,9860,9872,9874,9881,9890,9908,9916,9925,9932,9942,9948,
	9955,9960,9966,9970,9977,10007,10027,10031,10047,10054,10067,10075,10095,
	10101,10113,10118,10128,10160,10165,10174,10179,10183,10188,10204,10222,
	10225,10231,10259,10269,10276,10278,10283,10294,10305,10326,10333,10340,
	10346,10349,10360,10367,10369,10378,10385,10391,10397,10401,10416,10433,
	10435,10459,10463,10474,10477,10481,10486,10491,10503,10509,10513,10517,
	10521,10526,10530,10558];

	private static __ATN: ATN;
	public static get _ATN(): ATN {
		if (!PostgreSQLParser.__ATN) {
			PostgreSQLParser.__ATN = new ATNDeserializer().deserialize(PostgreSQLParser._serializedATN);
		}

		return PostgreSQLParser.__ATN;
	}


	static DecisionsToDFA = PostgreSQLParser._ATN.decisionToState.map( (ds: DecisionState, index: number) => new DFA(ds, index) );

}

export class ProgramContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public stmtblock(): StmtblockContext {
		return this.getTypedRuleContext(StmtblockContext, 0) as StmtblockContext;
	}
	public EOF(): TerminalNode {
		return this.getToken(PostgreSQLParser.EOF, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_program;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterProgram) {
	 		listener.enterProgram(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitProgram) {
	 		listener.exitProgram(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitProgram) {
			return visitor.visitProgram(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class PlsqlrootContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public pl_function(): Pl_functionContext {
		return this.getTypedRuleContext(Pl_functionContext, 0) as Pl_functionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_plsqlroot;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterPlsqlroot) {
	 		listener.enterPlsqlroot(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitPlsqlroot) {
	 		listener.exitPlsqlroot(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitPlsqlroot) {
			return visitor.visitPlsqlroot(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class StmtblockContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public stmtmulti(): StmtmultiContext {
		return this.getTypedRuleContext(StmtmultiContext, 0) as StmtmultiContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_stmtblock;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterStmtblock) {
	 		listener.enterStmtblock(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitStmtblock) {
	 		listener.exitStmtblock(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitStmtblock) {
			return visitor.visitStmtblock(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class StmtmultiContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public stmt_list(): StmtContext[] {
		return this.getTypedRuleContexts(StmtContext) as StmtContext[];
	}
	public stmt(i: number): StmtContext {
		return this.getTypedRuleContext(StmtContext, i) as StmtContext;
	}
	public SEMI_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.SEMI);
	}
	public SEMI(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.SEMI, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_stmtmulti;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterStmtmulti) {
	 		listener.enterStmtmulti(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitStmtmulti) {
	 		listener.exitStmtmulti(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitStmtmulti) {
			return visitor.visitStmtmulti(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class StmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public altereventtrigstmt(): AltereventtrigstmtContext {
		return this.getTypedRuleContext(AltereventtrigstmtContext, 0) as AltereventtrigstmtContext;
	}
	public altercollationstmt(): AltercollationstmtContext {
		return this.getTypedRuleContext(AltercollationstmtContext, 0) as AltercollationstmtContext;
	}
	public alterdatabasestmt(): AlterdatabasestmtContext {
		return this.getTypedRuleContext(AlterdatabasestmtContext, 0) as AlterdatabasestmtContext;
	}
	public alterdatabasesetstmt(): AlterdatabasesetstmtContext {
		return this.getTypedRuleContext(AlterdatabasesetstmtContext, 0) as AlterdatabasesetstmtContext;
	}
	public alterdefaultprivilegesstmt(): AlterdefaultprivilegesstmtContext {
		return this.getTypedRuleContext(AlterdefaultprivilegesstmtContext, 0) as AlterdefaultprivilegesstmtContext;
	}
	public alterdomainstmt(): AlterdomainstmtContext {
		return this.getTypedRuleContext(AlterdomainstmtContext, 0) as AlterdomainstmtContext;
	}
	public alterenumstmt(): AlterenumstmtContext {
		return this.getTypedRuleContext(AlterenumstmtContext, 0) as AlterenumstmtContext;
	}
	public alterextensionstmt(): AlterextensionstmtContext {
		return this.getTypedRuleContext(AlterextensionstmtContext, 0) as AlterextensionstmtContext;
	}
	public alterextensioncontentsstmt(): AlterextensioncontentsstmtContext {
		return this.getTypedRuleContext(AlterextensioncontentsstmtContext, 0) as AlterextensioncontentsstmtContext;
	}
	public alterfdwstmt(): AlterfdwstmtContext {
		return this.getTypedRuleContext(AlterfdwstmtContext, 0) as AlterfdwstmtContext;
	}
	public alterforeignserverstmt(): AlterforeignserverstmtContext {
		return this.getTypedRuleContext(AlterforeignserverstmtContext, 0) as AlterforeignserverstmtContext;
	}
	public alterfunctionstmt(): AlterfunctionstmtContext {
		return this.getTypedRuleContext(AlterfunctionstmtContext, 0) as AlterfunctionstmtContext;
	}
	public altergroupstmt(): AltergroupstmtContext {
		return this.getTypedRuleContext(AltergroupstmtContext, 0) as AltergroupstmtContext;
	}
	public alterobjectdependsstmt(): AlterobjectdependsstmtContext {
		return this.getTypedRuleContext(AlterobjectdependsstmtContext, 0) as AlterobjectdependsstmtContext;
	}
	public alterobjectschemastmt(): AlterobjectschemastmtContext {
		return this.getTypedRuleContext(AlterobjectschemastmtContext, 0) as AlterobjectschemastmtContext;
	}
	public alterownerstmt(): AlterownerstmtContext {
		return this.getTypedRuleContext(AlterownerstmtContext, 0) as AlterownerstmtContext;
	}
	public alteroperatorstmt(): AlteroperatorstmtContext {
		return this.getTypedRuleContext(AlteroperatorstmtContext, 0) as AlteroperatorstmtContext;
	}
	public altertypestmt(): AltertypestmtContext {
		return this.getTypedRuleContext(AltertypestmtContext, 0) as AltertypestmtContext;
	}
	public alterpolicystmt(): AlterpolicystmtContext {
		return this.getTypedRuleContext(AlterpolicystmtContext, 0) as AlterpolicystmtContext;
	}
	public alterseqstmt(): AlterseqstmtContext {
		return this.getTypedRuleContext(AlterseqstmtContext, 0) as AlterseqstmtContext;
	}
	public altersystemstmt(): AltersystemstmtContext {
		return this.getTypedRuleContext(AltersystemstmtContext, 0) as AltersystemstmtContext;
	}
	public altertablestmt(): AltertablestmtContext {
		return this.getTypedRuleContext(AltertablestmtContext, 0) as AltertablestmtContext;
	}
	public altertblspcstmt(): AltertblspcstmtContext {
		return this.getTypedRuleContext(AltertblspcstmtContext, 0) as AltertblspcstmtContext;
	}
	public altercompositetypestmt(): AltercompositetypestmtContext {
		return this.getTypedRuleContext(AltercompositetypestmtContext, 0) as AltercompositetypestmtContext;
	}
	public alterpublicationstmt(): AlterpublicationstmtContext {
		return this.getTypedRuleContext(AlterpublicationstmtContext, 0) as AlterpublicationstmtContext;
	}
	public alterrolesetstmt(): AlterrolesetstmtContext {
		return this.getTypedRuleContext(AlterrolesetstmtContext, 0) as AlterrolesetstmtContext;
	}
	public alterrolestmt(): AlterrolestmtContext {
		return this.getTypedRuleContext(AlterrolestmtContext, 0) as AlterrolestmtContext;
	}
	public altersubscriptionstmt(): AltersubscriptionstmtContext {
		return this.getTypedRuleContext(AltersubscriptionstmtContext, 0) as AltersubscriptionstmtContext;
	}
	public alterstatsstmt(): AlterstatsstmtContext {
		return this.getTypedRuleContext(AlterstatsstmtContext, 0) as AlterstatsstmtContext;
	}
	public altertsconfigurationstmt(): AltertsconfigurationstmtContext {
		return this.getTypedRuleContext(AltertsconfigurationstmtContext, 0) as AltertsconfigurationstmtContext;
	}
	public altertsdictionarystmt(): AltertsdictionarystmtContext {
		return this.getTypedRuleContext(AltertsdictionarystmtContext, 0) as AltertsdictionarystmtContext;
	}
	public alterusermappingstmt(): AlterusermappingstmtContext {
		return this.getTypedRuleContext(AlterusermappingstmtContext, 0) as AlterusermappingstmtContext;
	}
	public analyzestmt(): AnalyzestmtContext {
		return this.getTypedRuleContext(AnalyzestmtContext, 0) as AnalyzestmtContext;
	}
	public callstmt(): CallstmtContext {
		return this.getTypedRuleContext(CallstmtContext, 0) as CallstmtContext;
	}
	public checkpointstmt(): CheckpointstmtContext {
		return this.getTypedRuleContext(CheckpointstmtContext, 0) as CheckpointstmtContext;
	}
	public closeportalstmt(): CloseportalstmtContext {
		return this.getTypedRuleContext(CloseportalstmtContext, 0) as CloseportalstmtContext;
	}
	public clusterstmt(): ClusterstmtContext {
		return this.getTypedRuleContext(ClusterstmtContext, 0) as ClusterstmtContext;
	}
	public commentstmt(): CommentstmtContext {
		return this.getTypedRuleContext(CommentstmtContext, 0) as CommentstmtContext;
	}
	public constraintssetstmt(): ConstraintssetstmtContext {
		return this.getTypedRuleContext(ConstraintssetstmtContext, 0) as ConstraintssetstmtContext;
	}
	public copystmt(): CopystmtContext {
		return this.getTypedRuleContext(CopystmtContext, 0) as CopystmtContext;
	}
	public createamstmt(): CreateamstmtContext {
		return this.getTypedRuleContext(CreateamstmtContext, 0) as CreateamstmtContext;
	}
	public createasstmt(): CreateasstmtContext {
		return this.getTypedRuleContext(CreateasstmtContext, 0) as CreateasstmtContext;
	}
	public createassertionstmt(): CreateassertionstmtContext {
		return this.getTypedRuleContext(CreateassertionstmtContext, 0) as CreateassertionstmtContext;
	}
	public createcaststmt(): CreatecaststmtContext {
		return this.getTypedRuleContext(CreatecaststmtContext, 0) as CreatecaststmtContext;
	}
	public createconversionstmt(): CreateconversionstmtContext {
		return this.getTypedRuleContext(CreateconversionstmtContext, 0) as CreateconversionstmtContext;
	}
	public createdomainstmt(): CreatedomainstmtContext {
		return this.getTypedRuleContext(CreatedomainstmtContext, 0) as CreatedomainstmtContext;
	}
	public createextensionstmt(): CreateextensionstmtContext {
		return this.getTypedRuleContext(CreateextensionstmtContext, 0) as CreateextensionstmtContext;
	}
	public createfdwstmt(): CreatefdwstmtContext {
		return this.getTypedRuleContext(CreatefdwstmtContext, 0) as CreatefdwstmtContext;
	}
	public createforeignserverstmt(): CreateforeignserverstmtContext {
		return this.getTypedRuleContext(CreateforeignserverstmtContext, 0) as CreateforeignserverstmtContext;
	}
	public createforeigntablestmt(): CreateforeigntablestmtContext {
		return this.getTypedRuleContext(CreateforeigntablestmtContext, 0) as CreateforeigntablestmtContext;
	}
	public createfunctionstmt(): CreatefunctionstmtContext {
		return this.getTypedRuleContext(CreatefunctionstmtContext, 0) as CreatefunctionstmtContext;
	}
	public creategroupstmt(): CreategroupstmtContext {
		return this.getTypedRuleContext(CreategroupstmtContext, 0) as CreategroupstmtContext;
	}
	public creatematviewstmt(): CreatematviewstmtContext {
		return this.getTypedRuleContext(CreatematviewstmtContext, 0) as CreatematviewstmtContext;
	}
	public createopclassstmt(): CreateopclassstmtContext {
		return this.getTypedRuleContext(CreateopclassstmtContext, 0) as CreateopclassstmtContext;
	}
	public createopfamilystmt(): CreateopfamilystmtContext {
		return this.getTypedRuleContext(CreateopfamilystmtContext, 0) as CreateopfamilystmtContext;
	}
	public createpublicationstmt(): CreatepublicationstmtContext {
		return this.getTypedRuleContext(CreatepublicationstmtContext, 0) as CreatepublicationstmtContext;
	}
	public alteropfamilystmt(): AlteropfamilystmtContext {
		return this.getTypedRuleContext(AlteropfamilystmtContext, 0) as AlteropfamilystmtContext;
	}
	public createpolicystmt(): CreatepolicystmtContext {
		return this.getTypedRuleContext(CreatepolicystmtContext, 0) as CreatepolicystmtContext;
	}
	public createplangstmt(): CreateplangstmtContext {
		return this.getTypedRuleContext(CreateplangstmtContext, 0) as CreateplangstmtContext;
	}
	public createschemastmt(): CreateschemastmtContext {
		return this.getTypedRuleContext(CreateschemastmtContext, 0) as CreateschemastmtContext;
	}
	public createseqstmt(): CreateseqstmtContext {
		return this.getTypedRuleContext(CreateseqstmtContext, 0) as CreateseqstmtContext;
	}
	public createstmt(): CreatestmtContext {
		return this.getTypedRuleContext(CreatestmtContext, 0) as CreatestmtContext;
	}
	public createsubscriptionstmt(): CreatesubscriptionstmtContext {
		return this.getTypedRuleContext(CreatesubscriptionstmtContext, 0) as CreatesubscriptionstmtContext;
	}
	public createstatsstmt(): CreatestatsstmtContext {
		return this.getTypedRuleContext(CreatestatsstmtContext, 0) as CreatestatsstmtContext;
	}
	public createtablespacestmt(): CreatetablespacestmtContext {
		return this.getTypedRuleContext(CreatetablespacestmtContext, 0) as CreatetablespacestmtContext;
	}
	public createtransformstmt(): CreatetransformstmtContext {
		return this.getTypedRuleContext(CreatetransformstmtContext, 0) as CreatetransformstmtContext;
	}
	public createtrigstmt(): CreatetrigstmtContext {
		return this.getTypedRuleContext(CreatetrigstmtContext, 0) as CreatetrigstmtContext;
	}
	public createeventtrigstmt(): CreateeventtrigstmtContext {
		return this.getTypedRuleContext(CreateeventtrigstmtContext, 0) as CreateeventtrigstmtContext;
	}
	public createrolestmt(): CreaterolestmtContext {
		return this.getTypedRuleContext(CreaterolestmtContext, 0) as CreaterolestmtContext;
	}
	public createuserstmt(): CreateuserstmtContext {
		return this.getTypedRuleContext(CreateuserstmtContext, 0) as CreateuserstmtContext;
	}
	public createusermappingstmt(): CreateusermappingstmtContext {
		return this.getTypedRuleContext(CreateusermappingstmtContext, 0) as CreateusermappingstmtContext;
	}
	public createdbstmt(): CreatedbstmtContext {
		return this.getTypedRuleContext(CreatedbstmtContext, 0) as CreatedbstmtContext;
	}
	public deallocatestmt(): DeallocatestmtContext {
		return this.getTypedRuleContext(DeallocatestmtContext, 0) as DeallocatestmtContext;
	}
	public declarecursorstmt(): DeclarecursorstmtContext {
		return this.getTypedRuleContext(DeclarecursorstmtContext, 0) as DeclarecursorstmtContext;
	}
	public definestmt(): DefinestmtContext {
		return this.getTypedRuleContext(DefinestmtContext, 0) as DefinestmtContext;
	}
	public deletestmt(): DeletestmtContext {
		return this.getTypedRuleContext(DeletestmtContext, 0) as DeletestmtContext;
	}
	public discardstmt(): DiscardstmtContext {
		return this.getTypedRuleContext(DiscardstmtContext, 0) as DiscardstmtContext;
	}
	public dostmt(): DostmtContext {
		return this.getTypedRuleContext(DostmtContext, 0) as DostmtContext;
	}
	public dropcaststmt(): DropcaststmtContext {
		return this.getTypedRuleContext(DropcaststmtContext, 0) as DropcaststmtContext;
	}
	public dropopclassstmt(): DropopclassstmtContext {
		return this.getTypedRuleContext(DropopclassstmtContext, 0) as DropopclassstmtContext;
	}
	public dropopfamilystmt(): DropopfamilystmtContext {
		return this.getTypedRuleContext(DropopfamilystmtContext, 0) as DropopfamilystmtContext;
	}
	public dropownedstmt(): DropownedstmtContext {
		return this.getTypedRuleContext(DropownedstmtContext, 0) as DropownedstmtContext;
	}
	public dropstmt(): DropstmtContext {
		return this.getTypedRuleContext(DropstmtContext, 0) as DropstmtContext;
	}
	public dropsubscriptionstmt(): DropsubscriptionstmtContext {
		return this.getTypedRuleContext(DropsubscriptionstmtContext, 0) as DropsubscriptionstmtContext;
	}
	public droptablespacestmt(): DroptablespacestmtContext {
		return this.getTypedRuleContext(DroptablespacestmtContext, 0) as DroptablespacestmtContext;
	}
	public droptransformstmt(): DroptransformstmtContext {
		return this.getTypedRuleContext(DroptransformstmtContext, 0) as DroptransformstmtContext;
	}
	public droprolestmt(): DroprolestmtContext {
		return this.getTypedRuleContext(DroprolestmtContext, 0) as DroprolestmtContext;
	}
	public dropusermappingstmt(): DropusermappingstmtContext {
		return this.getTypedRuleContext(DropusermappingstmtContext, 0) as DropusermappingstmtContext;
	}
	public dropdbstmt(): DropdbstmtContext {
		return this.getTypedRuleContext(DropdbstmtContext, 0) as DropdbstmtContext;
	}
	public executestmt(): ExecutestmtContext {
		return this.getTypedRuleContext(ExecutestmtContext, 0) as ExecutestmtContext;
	}
	public explainstmt(): ExplainstmtContext {
		return this.getTypedRuleContext(ExplainstmtContext, 0) as ExplainstmtContext;
	}
	public fetchstmt(): FetchstmtContext {
		return this.getTypedRuleContext(FetchstmtContext, 0) as FetchstmtContext;
	}
	public grantstmt(): GrantstmtContext {
		return this.getTypedRuleContext(GrantstmtContext, 0) as GrantstmtContext;
	}
	public grantrolestmt(): GrantrolestmtContext {
		return this.getTypedRuleContext(GrantrolestmtContext, 0) as GrantrolestmtContext;
	}
	public importforeignschemastmt(): ImportforeignschemastmtContext {
		return this.getTypedRuleContext(ImportforeignschemastmtContext, 0) as ImportforeignschemastmtContext;
	}
	public indexstmt(): IndexstmtContext {
		return this.getTypedRuleContext(IndexstmtContext, 0) as IndexstmtContext;
	}
	public insertstmt(): InsertstmtContext {
		return this.getTypedRuleContext(InsertstmtContext, 0) as InsertstmtContext;
	}
	public listenstmt(): ListenstmtContext {
		return this.getTypedRuleContext(ListenstmtContext, 0) as ListenstmtContext;
	}
	public refreshmatviewstmt(): RefreshmatviewstmtContext {
		return this.getTypedRuleContext(RefreshmatviewstmtContext, 0) as RefreshmatviewstmtContext;
	}
	public loadstmt(): LoadstmtContext {
		return this.getTypedRuleContext(LoadstmtContext, 0) as LoadstmtContext;
	}
	public lockstmt(): LockstmtContext {
		return this.getTypedRuleContext(LockstmtContext, 0) as LockstmtContext;
	}
	public notifystmt(): NotifystmtContext {
		return this.getTypedRuleContext(NotifystmtContext, 0) as NotifystmtContext;
	}
	public preparestmt(): PreparestmtContext {
		return this.getTypedRuleContext(PreparestmtContext, 0) as PreparestmtContext;
	}
	public reassignownedstmt(): ReassignownedstmtContext {
		return this.getTypedRuleContext(ReassignownedstmtContext, 0) as ReassignownedstmtContext;
	}
	public reindexstmt(): ReindexstmtContext {
		return this.getTypedRuleContext(ReindexstmtContext, 0) as ReindexstmtContext;
	}
	public removeaggrstmt(): RemoveaggrstmtContext {
		return this.getTypedRuleContext(RemoveaggrstmtContext, 0) as RemoveaggrstmtContext;
	}
	public removefuncstmt(): RemovefuncstmtContext {
		return this.getTypedRuleContext(RemovefuncstmtContext, 0) as RemovefuncstmtContext;
	}
	public removeoperstmt(): RemoveoperstmtContext {
		return this.getTypedRuleContext(RemoveoperstmtContext, 0) as RemoveoperstmtContext;
	}
	public renamestmt(): RenamestmtContext {
		return this.getTypedRuleContext(RenamestmtContext, 0) as RenamestmtContext;
	}
	public revokestmt(): RevokestmtContext {
		return this.getTypedRuleContext(RevokestmtContext, 0) as RevokestmtContext;
	}
	public revokerolestmt(): RevokerolestmtContext {
		return this.getTypedRuleContext(RevokerolestmtContext, 0) as RevokerolestmtContext;
	}
	public rulestmt(): RulestmtContext {
		return this.getTypedRuleContext(RulestmtContext, 0) as RulestmtContext;
	}
	public seclabelstmt(): SeclabelstmtContext {
		return this.getTypedRuleContext(SeclabelstmtContext, 0) as SeclabelstmtContext;
	}
	public selectstmt(): SelectstmtContext {
		return this.getTypedRuleContext(SelectstmtContext, 0) as SelectstmtContext;
	}
	public transactionstmt(): TransactionstmtContext {
		return this.getTypedRuleContext(TransactionstmtContext, 0) as TransactionstmtContext;
	}
	public truncatestmt(): TruncatestmtContext {
		return this.getTypedRuleContext(TruncatestmtContext, 0) as TruncatestmtContext;
	}
	public unlistenstmt(): UnlistenstmtContext {
		return this.getTypedRuleContext(UnlistenstmtContext, 0) as UnlistenstmtContext;
	}
	public updatestmt(): UpdatestmtContext {
		return this.getTypedRuleContext(UpdatestmtContext, 0) as UpdatestmtContext;
	}
	public vacuumstmt(): VacuumstmtContext {
		return this.getTypedRuleContext(VacuumstmtContext, 0) as VacuumstmtContext;
	}
	public variableresetstmt(): VariableresetstmtContext {
		return this.getTypedRuleContext(VariableresetstmtContext, 0) as VariableresetstmtContext;
	}
	public variablesetstmt(): VariablesetstmtContext {
		return this.getTypedRuleContext(VariablesetstmtContext, 0) as VariablesetstmtContext;
	}
	public variableshowstmt(): VariableshowstmtContext {
		return this.getTypedRuleContext(VariableshowstmtContext, 0) as VariableshowstmtContext;
	}
	public viewstmt(): ViewstmtContext {
		return this.getTypedRuleContext(ViewstmtContext, 0) as ViewstmtContext;
	}
	public plsqlconsolecommand(): PlsqlconsolecommandContext {
		return this.getTypedRuleContext(PlsqlconsolecommandContext, 0) as PlsqlconsolecommandContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_stmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterStmt) {
	 		listener.enterStmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitStmt) {
	 		listener.exitStmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitStmt) {
			return visitor.visitStmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class PlsqlconsolecommandContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public MetaCommand(): TerminalNode {
		return this.getToken(PostgreSQLParser.MetaCommand, 0);
	}
	public EndMetaCommand(): TerminalNode {
		return this.getToken(PostgreSQLParser.EndMetaCommand, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_plsqlconsolecommand;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterPlsqlconsolecommand) {
	 		listener.enterPlsqlconsolecommand(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitPlsqlconsolecommand) {
	 		listener.exitPlsqlconsolecommand(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitPlsqlconsolecommand) {
			return visitor.visitPlsqlconsolecommand(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CallstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CALL(): TerminalNode {
		return this.getToken(PostgreSQLParser.CALL, 0);
	}
	public func_application(): Func_applicationContext {
		return this.getTypedRuleContext(Func_applicationContext, 0) as Func_applicationContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_callstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCallstmt) {
	 		listener.enterCallstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCallstmt) {
	 		listener.exitCallstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCallstmt) {
			return visitor.visitCallstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreaterolestmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public ROLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROLE, 0);
	}
	public roleid(): RoleidContext {
		return this.getTypedRuleContext(RoleidContext, 0) as RoleidContext;
	}
	public opt_with(): Opt_withContext {
		return this.getTypedRuleContext(Opt_withContext, 0) as Opt_withContext;
	}
	public optrolelist(): OptrolelistContext {
		return this.getTypedRuleContext(OptrolelistContext, 0) as OptrolelistContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createrolestmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreaterolestmt) {
	 		listener.enterCreaterolestmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreaterolestmt) {
	 		listener.exitCreaterolestmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreaterolestmt) {
			return visitor.visitCreaterolestmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_withContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public WITH(): TerminalNode {
		return this.getToken(PostgreSQLParser.WITH, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_with;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_with) {
	 		listener.enterOpt_with(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_with) {
	 		listener.exitOpt_with(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_with) {
			return visitor.visitOpt_with(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class OptrolelistContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public createoptroleelem_list(): CreateoptroleelemContext[] {
		return this.getTypedRuleContexts(CreateoptroleelemContext) as CreateoptroleelemContext[];
	}
	public createoptroleelem(i: number): CreateoptroleelemContext {
		return this.getTypedRuleContext(CreateoptroleelemContext, i) as CreateoptroleelemContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_optrolelist;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOptrolelist) {
	 		listener.enterOptrolelist(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOptrolelist) {
	 		listener.exitOptrolelist(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOptrolelist) {
			return visitor.visitOptrolelist(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AlteroptrolelistContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public alteroptroleelem_list(): AlteroptroleelemContext[] {
		return this.getTypedRuleContexts(AlteroptroleelemContext) as AlteroptroleelemContext[];
	}
	public alteroptroleelem(i: number): AlteroptroleelemContext {
		return this.getTypedRuleContext(AlteroptroleelemContext, i) as AlteroptroleelemContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alteroptrolelist;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlteroptrolelist) {
	 		listener.enterAlteroptrolelist(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlteroptrolelist) {
	 		listener.exitAlteroptrolelist(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlteroptrolelist) {
			return visitor.visitAlteroptrolelist(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AlteroptroleelemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public PASSWORD(): TerminalNode {
		return this.getToken(PostgreSQLParser.PASSWORD, 0);
	}
	public sconst(): SconstContext {
		return this.getTypedRuleContext(SconstContext, 0) as SconstContext;
	}
	public NULL_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.NULL_P, 0);
	}
	public ENCRYPTED(): TerminalNode {
		return this.getToken(PostgreSQLParser.ENCRYPTED, 0);
	}
	public UNENCRYPTED(): TerminalNode {
		return this.getToken(PostgreSQLParser.UNENCRYPTED, 0);
	}
	public INHERIT(): TerminalNode {
		return this.getToken(PostgreSQLParser.INHERIT, 0);
	}
	public CONNECTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONNECTION, 0);
	}
	public LIMIT(): TerminalNode {
		return this.getToken(PostgreSQLParser.LIMIT, 0);
	}
	public signediconst(): SignediconstContext {
		return this.getTypedRuleContext(SignediconstContext, 0) as SignediconstContext;
	}
	public VALID(): TerminalNode {
		return this.getToken(PostgreSQLParser.VALID, 0);
	}
	public UNTIL(): TerminalNode {
		return this.getToken(PostgreSQLParser.UNTIL, 0);
	}
	public USER(): TerminalNode {
		return this.getToken(PostgreSQLParser.USER, 0);
	}
	public role_list(): Role_listContext {
		return this.getTypedRuleContext(Role_listContext, 0) as Role_listContext;
	}
	public identifier(): IdentifierContext {
		return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alteroptroleelem;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlteroptroleelem) {
	 		listener.enterAlteroptroleelem(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlteroptroleelem) {
	 		listener.exitAlteroptroleelem(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlteroptroleelem) {
			return visitor.visitAlteroptroleelem(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreateoptroleelemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public alteroptroleelem(): AlteroptroleelemContext {
		return this.getTypedRuleContext(AlteroptroleelemContext, 0) as AlteroptroleelemContext;
	}
	public SYSID(): TerminalNode {
		return this.getToken(PostgreSQLParser.SYSID, 0);
	}
	public iconst(): IconstContext {
		return this.getTypedRuleContext(IconstContext, 0) as IconstContext;
	}
	public ADMIN(): TerminalNode {
		return this.getToken(PostgreSQLParser.ADMIN, 0);
	}
	public role_list(): Role_listContext {
		return this.getTypedRuleContext(Role_listContext, 0) as Role_listContext;
	}
	public ROLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROLE, 0);
	}
	public IN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IN_P, 0);
	}
	public GROUP_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.GROUP_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createoptroleelem;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreateoptroleelem) {
	 		listener.enterCreateoptroleelem(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreateoptroleelem) {
	 		listener.exitCreateoptroleelem(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreateoptroleelem) {
			return visitor.visitCreateoptroleelem(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreateuserstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public USER(): TerminalNode {
		return this.getToken(PostgreSQLParser.USER, 0);
	}
	public roleid(): RoleidContext {
		return this.getTypedRuleContext(RoleidContext, 0) as RoleidContext;
	}
	public opt_with(): Opt_withContext {
		return this.getTypedRuleContext(Opt_withContext, 0) as Opt_withContext;
	}
	public optrolelist(): OptrolelistContext {
		return this.getTypedRuleContext(OptrolelistContext, 0) as OptrolelistContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createuserstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreateuserstmt) {
	 		listener.enterCreateuserstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreateuserstmt) {
	 		listener.exitCreateuserstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreateuserstmt) {
			return visitor.visitCreateuserstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AlterrolestmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public rolespec(): RolespecContext {
		return this.getTypedRuleContext(RolespecContext, 0) as RolespecContext;
	}
	public opt_with(): Opt_withContext {
		return this.getTypedRuleContext(Opt_withContext, 0) as Opt_withContext;
	}
	public alteroptrolelist(): AlteroptrolelistContext {
		return this.getTypedRuleContext(AlteroptrolelistContext, 0) as AlteroptrolelistContext;
	}
	public ROLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROLE, 0);
	}
	public USER(): TerminalNode {
		return this.getToken(PostgreSQLParser.USER, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alterrolestmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlterrolestmt) {
	 		listener.enterAlterrolestmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlterrolestmt) {
	 		listener.exitAlterrolestmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlterrolestmt) {
			return visitor.visitAlterrolestmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_in_databaseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public IN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IN_P, 0);
	}
	public DATABASE(): TerminalNode {
		return this.getToken(PostgreSQLParser.DATABASE, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_in_database;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_in_database) {
	 		listener.enterOpt_in_database(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_in_database) {
	 		listener.exitOpt_in_database(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_in_database) {
			return visitor.visitOpt_in_database(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AlterrolesetstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public rolespec(): RolespecContext {
		return this.getTypedRuleContext(RolespecContext, 0) as RolespecContext;
	}
	public opt_in_database(): Opt_in_databaseContext {
		return this.getTypedRuleContext(Opt_in_databaseContext, 0) as Opt_in_databaseContext;
	}
	public setresetclause(): SetresetclauseContext {
		return this.getTypedRuleContext(SetresetclauseContext, 0) as SetresetclauseContext;
	}
	public ROLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROLE, 0);
	}
	public USER(): TerminalNode {
		return this.getToken(PostgreSQLParser.USER, 0);
	}
	public ALL(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALL, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alterrolesetstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlterrolesetstmt) {
	 		listener.enterAlterrolesetstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlterrolesetstmt) {
	 		listener.exitAlterrolesetstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlterrolesetstmt) {
			return visitor.visitAlterrolesetstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class DroprolestmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public DROP(): TerminalNode {
		return this.getToken(PostgreSQLParser.DROP, 0);
	}
	public role_list(): Role_listContext {
		return this.getTypedRuleContext(Role_listContext, 0) as Role_listContext;
	}
	public ROLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROLE, 0);
	}
	public USER(): TerminalNode {
		return this.getToken(PostgreSQLParser.USER, 0);
	}
	public GROUP_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.GROUP_P, 0);
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_droprolestmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDroprolestmt) {
	 		listener.enterDroprolestmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDroprolestmt) {
	 		listener.exitDroprolestmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDroprolestmt) {
			return visitor.visitDroprolestmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreategroupstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public GROUP_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.GROUP_P, 0);
	}
	public roleid(): RoleidContext {
		return this.getTypedRuleContext(RoleidContext, 0) as RoleidContext;
	}
	public opt_with(): Opt_withContext {
		return this.getTypedRuleContext(Opt_withContext, 0) as Opt_withContext;
	}
	public optrolelist(): OptrolelistContext {
		return this.getTypedRuleContext(OptrolelistContext, 0) as OptrolelistContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_creategroupstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreategroupstmt) {
	 		listener.enterCreategroupstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreategroupstmt) {
	 		listener.exitCreategroupstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreategroupstmt) {
			return visitor.visitCreategroupstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AltergroupstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public GROUP_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.GROUP_P, 0);
	}
	public rolespec(): RolespecContext {
		return this.getTypedRuleContext(RolespecContext, 0) as RolespecContext;
	}
	public add_drop(): Add_dropContext {
		return this.getTypedRuleContext(Add_dropContext, 0) as Add_dropContext;
	}
	public USER(): TerminalNode {
		return this.getToken(PostgreSQLParser.USER, 0);
	}
	public role_list(): Role_listContext {
		return this.getTypedRuleContext(Role_listContext, 0) as Role_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_altergroupstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAltergroupstmt) {
	 		listener.enterAltergroupstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAltergroupstmt) {
	 		listener.exitAltergroupstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAltergroupstmt) {
			return visitor.visitAltergroupstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Add_dropContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ADD_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.ADD_P, 0);
	}
	public DROP(): TerminalNode {
		return this.getToken(PostgreSQLParser.DROP, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_add_drop;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAdd_drop) {
	 		listener.enterAdd_drop(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAdd_drop) {
	 		listener.exitAdd_drop(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAdd_drop) {
			return visitor.visitAdd_drop(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreateschemastmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public SCHEMA(): TerminalNode {
		return this.getToken(PostgreSQLParser.SCHEMA, 0);
	}
	public optschemaeltlist(): OptschemaeltlistContext {
		return this.getTypedRuleContext(OptschemaeltlistContext, 0) as OptschemaeltlistContext;
	}
	public optschemaname(): OptschemanameContext {
		return this.getTypedRuleContext(OptschemanameContext, 0) as OptschemanameContext;
	}
	public AUTHORIZATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.AUTHORIZATION, 0);
	}
	public rolespec(): RolespecContext {
		return this.getTypedRuleContext(RolespecContext, 0) as RolespecContext;
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createschemastmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreateschemastmt) {
	 		listener.enterCreateschemastmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreateschemastmt) {
	 		listener.exitCreateschemastmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreateschemastmt) {
			return visitor.visitCreateschemastmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class OptschemanameContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_optschemaname;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOptschemaname) {
	 		listener.enterOptschemaname(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOptschemaname) {
	 		listener.exitOptschemaname(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOptschemaname) {
			return visitor.visitOptschemaname(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class OptschemaeltlistContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public schema_stmt_list(): Schema_stmtContext[] {
		return this.getTypedRuleContexts(Schema_stmtContext) as Schema_stmtContext[];
	}
	public schema_stmt(i: number): Schema_stmtContext {
		return this.getTypedRuleContext(Schema_stmtContext, i) as Schema_stmtContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_optschemaeltlist;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOptschemaeltlist) {
	 		listener.enterOptschemaeltlist(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOptschemaeltlist) {
	 		listener.exitOptschemaeltlist(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOptschemaeltlist) {
			return visitor.visitOptschemaeltlist(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Schema_stmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public createstmt(): CreatestmtContext {
		return this.getTypedRuleContext(CreatestmtContext, 0) as CreatestmtContext;
	}
	public indexstmt(): IndexstmtContext {
		return this.getTypedRuleContext(IndexstmtContext, 0) as IndexstmtContext;
	}
	public createseqstmt(): CreateseqstmtContext {
		return this.getTypedRuleContext(CreateseqstmtContext, 0) as CreateseqstmtContext;
	}
	public createtrigstmt(): CreatetrigstmtContext {
		return this.getTypedRuleContext(CreatetrigstmtContext, 0) as CreatetrigstmtContext;
	}
	public grantstmt(): GrantstmtContext {
		return this.getTypedRuleContext(GrantstmtContext, 0) as GrantstmtContext;
	}
	public viewstmt(): ViewstmtContext {
		return this.getTypedRuleContext(ViewstmtContext, 0) as ViewstmtContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_schema_stmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSchema_stmt) {
	 		listener.enterSchema_stmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSchema_stmt) {
	 		listener.exitSchema_stmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSchema_stmt) {
			return visitor.visitSchema_stmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class VariablesetstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public SET(): TerminalNode {
		return this.getToken(PostgreSQLParser.SET, 0);
	}
	public set_rest(): Set_restContext {
		return this.getTypedRuleContext(Set_restContext, 0) as Set_restContext;
	}
	public LOCAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.LOCAL, 0);
	}
	public SESSION(): TerminalNode {
		return this.getToken(PostgreSQLParser.SESSION, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_variablesetstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterVariablesetstmt) {
	 		listener.enterVariablesetstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitVariablesetstmt) {
	 		listener.exitVariablesetstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitVariablesetstmt) {
			return visitor.visitVariablesetstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Set_restContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public TRANSACTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRANSACTION, 0);
	}
	public transaction_mode_list(): Transaction_mode_listContext {
		return this.getTypedRuleContext(Transaction_mode_listContext, 0) as Transaction_mode_listContext;
	}
	public SESSION(): TerminalNode {
		return this.getToken(PostgreSQLParser.SESSION, 0);
	}
	public CHARACTERISTICS(): TerminalNode {
		return this.getToken(PostgreSQLParser.CHARACTERISTICS, 0);
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
	public set_rest_more(): Set_rest_moreContext {
		return this.getTypedRuleContext(Set_rest_moreContext, 0) as Set_rest_moreContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_set_rest;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSet_rest) {
	 		listener.enterSet_rest(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSet_rest) {
	 		listener.exitSet_rest(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSet_rest) {
			return visitor.visitSet_rest(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Generic_setContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public var_name(): Var_nameContext {
		return this.getTypedRuleContext(Var_nameContext, 0) as Var_nameContext;
	}
	public var_list(): Var_listContext {
		return this.getTypedRuleContext(Var_listContext, 0) as Var_listContext;
	}
	public TO(): TerminalNode {
		return this.getToken(PostgreSQLParser.TO, 0);
	}
	public EQUAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.EQUAL, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_generic_set;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterGeneric_set) {
	 		listener.enterGeneric_set(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitGeneric_set) {
	 		listener.exitGeneric_set(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitGeneric_set) {
			return visitor.visitGeneric_set(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Set_rest_moreContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public generic_set(): Generic_setContext {
		return this.getTypedRuleContext(Generic_setContext, 0) as Generic_setContext;
	}
	public var_name(): Var_nameContext {
		return this.getTypedRuleContext(Var_nameContext, 0) as Var_nameContext;
	}
	public FROM(): TerminalNode {
		return this.getToken(PostgreSQLParser.FROM, 0);
	}
	public CURRENT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.CURRENT_P, 0);
	}
	public TIME(): TerminalNode {
		return this.getToken(PostgreSQLParser.TIME, 0);
	}
	public ZONE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ZONE, 0);
	}
	public zone_value(): Zone_valueContext {
		return this.getTypedRuleContext(Zone_valueContext, 0) as Zone_valueContext;
	}
	public CATALOG(): TerminalNode {
		return this.getToken(PostgreSQLParser.CATALOG, 0);
	}
	public sconst(): SconstContext {
		return this.getTypedRuleContext(SconstContext, 0) as SconstContext;
	}
	public SCHEMA(): TerminalNode {
		return this.getToken(PostgreSQLParser.SCHEMA, 0);
	}
	public NAMES(): TerminalNode {
		return this.getToken(PostgreSQLParser.NAMES, 0);
	}
	public opt_encoding(): Opt_encodingContext {
		return this.getTypedRuleContext(Opt_encodingContext, 0) as Opt_encodingContext;
	}
	public ROLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROLE, 0);
	}
	public nonreservedword_or_sconst(): Nonreservedword_or_sconstContext {
		return this.getTypedRuleContext(Nonreservedword_or_sconstContext, 0) as Nonreservedword_or_sconstContext;
	}
	public SESSION(): TerminalNode {
		return this.getToken(PostgreSQLParser.SESSION, 0);
	}
	public AUTHORIZATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.AUTHORIZATION, 0);
	}
	public XML_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.XML_P, 0);
	}
	public OPTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPTION, 0);
	}
	public document_or_content(): Document_or_contentContext {
		return this.getTypedRuleContext(Document_or_contentContext, 0) as Document_or_contentContext;
	}
	public TRANSACTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRANSACTION, 0);
	}
	public SNAPSHOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.SNAPSHOT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_set_rest_more;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSet_rest_more) {
	 		listener.enterSet_rest_more(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSet_rest_more) {
	 		listener.exitSet_rest_more(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSet_rest_more) {
			return visitor.visitSet_rest_more(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Var_nameContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public colid_list(): ColidContext[] {
		return this.getTypedRuleContexts(ColidContext) as ColidContext[];
	}
	public colid(i: number): ColidContext {
		return this.getTypedRuleContext(ColidContext, i) as ColidContext;
	}
	public DOT_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.DOT);
	}
	public DOT(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.DOT, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_var_name;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterVar_name) {
	 		listener.enterVar_name(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitVar_name) {
	 		listener.exitVar_name(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitVar_name) {
			return visitor.visitVar_name(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Var_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public var_value_list(): Var_valueContext[] {
		return this.getTypedRuleContexts(Var_valueContext) as Var_valueContext[];
	}
	public var_value(i: number): Var_valueContext {
		return this.getTypedRuleContext(Var_valueContext, i) as Var_valueContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_var_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterVar_list) {
	 		listener.enterVar_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitVar_list) {
	 		listener.exitVar_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitVar_list) {
			return visitor.visitVar_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Var_valueContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public opt_boolean_or_string(): Opt_boolean_or_stringContext {
		return this.getTypedRuleContext(Opt_boolean_or_stringContext, 0) as Opt_boolean_or_stringContext;
	}
	public numericonly(): NumericonlyContext {
		return this.getTypedRuleContext(NumericonlyContext, 0) as NumericonlyContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_var_value;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterVar_value) {
	 		listener.enterVar_value(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitVar_value) {
	 		listener.exitVar_value(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitVar_value) {
			return visitor.visitVar_value(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Iso_levelContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public READ(): TerminalNode {
		return this.getToken(PostgreSQLParser.READ, 0);
	}
	public UNCOMMITTED(): TerminalNode {
		return this.getToken(PostgreSQLParser.UNCOMMITTED, 0);
	}
	public COMMITTED(): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMITTED, 0);
	}
	public REPEATABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.REPEATABLE, 0);
	}
	public SERIALIZABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.SERIALIZABLE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_iso_level;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterIso_level) {
	 		listener.enterIso_level(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitIso_level) {
	 		listener.exitIso_level(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitIso_level) {
			return visitor.visitIso_level(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_boolean_or_stringContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public TRUE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRUE_P, 0);
	}
	public FALSE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.FALSE_P, 0);
	}
	public ON(): TerminalNode {
		return this.getToken(PostgreSQLParser.ON, 0);
	}
	public nonreservedword_or_sconst(): Nonreservedword_or_sconstContext {
		return this.getTypedRuleContext(Nonreservedword_or_sconstContext, 0) as Nonreservedword_or_sconstContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_boolean_or_string;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_boolean_or_string) {
	 		listener.enterOpt_boolean_or_string(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_boolean_or_string) {
	 		listener.exitOpt_boolean_or_string(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_boolean_or_string) {
			return visitor.visitOpt_boolean_or_string(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Zone_valueContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public sconst(): SconstContext {
		return this.getTypedRuleContext(SconstContext, 0) as SconstContext;
	}
	public identifier(): IdentifierContext {
		return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext;
	}
	public constinterval(): ConstintervalContext {
		return this.getTypedRuleContext(ConstintervalContext, 0) as ConstintervalContext;
	}
	public opt_interval(): Opt_intervalContext {
		return this.getTypedRuleContext(Opt_intervalContext, 0) as Opt_intervalContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public iconst(): IconstContext {
		return this.getTypedRuleContext(IconstContext, 0) as IconstContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public numericonly(): NumericonlyContext {
		return this.getTypedRuleContext(NumericonlyContext, 0) as NumericonlyContext;
	}
	public DEFAULT(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEFAULT, 0);
	}
	public LOCAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.LOCAL, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_zone_value;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterZone_value) {
	 		listener.enterZone_value(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitZone_value) {
	 		listener.exitZone_value(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitZone_value) {
			return visitor.visitZone_value(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_encodingContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public sconst(): SconstContext {
		return this.getTypedRuleContext(SconstContext, 0) as SconstContext;
	}
	public DEFAULT(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEFAULT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_encoding;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_encoding) {
	 		listener.enterOpt_encoding(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_encoding) {
	 		listener.exitOpt_encoding(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_encoding) {
			return visitor.visitOpt_encoding(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Nonreservedword_or_sconstContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public nonreservedword(): NonreservedwordContext {
		return this.getTypedRuleContext(NonreservedwordContext, 0) as NonreservedwordContext;
	}
	public sconst(): SconstContext {
		return this.getTypedRuleContext(SconstContext, 0) as SconstContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_nonreservedword_or_sconst;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterNonreservedword_or_sconst) {
	 		listener.enterNonreservedword_or_sconst(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitNonreservedword_or_sconst) {
	 		listener.exitNonreservedword_or_sconst(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitNonreservedword_or_sconst) {
			return visitor.visitNonreservedword_or_sconst(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class VariableresetstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public RESET(): TerminalNode {
		return this.getToken(PostgreSQLParser.RESET, 0);
	}
	public reset_rest(): Reset_restContext {
		return this.getTypedRuleContext(Reset_restContext, 0) as Reset_restContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_variableresetstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterVariableresetstmt) {
	 		listener.enterVariableresetstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitVariableresetstmt) {
	 		listener.exitVariableresetstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitVariableresetstmt) {
			return visitor.visitVariableresetstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Reset_restContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public generic_reset(): Generic_resetContext {
		return this.getTypedRuleContext(Generic_resetContext, 0) as Generic_resetContext;
	}
	public TIME(): TerminalNode {
		return this.getToken(PostgreSQLParser.TIME, 0);
	}
	public ZONE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ZONE, 0);
	}
	public TRANSACTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRANSACTION, 0);
	}
	public ISOLATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.ISOLATION, 0);
	}
	public LEVEL(): TerminalNode {
		return this.getToken(PostgreSQLParser.LEVEL, 0);
	}
	public SESSION(): TerminalNode {
		return this.getToken(PostgreSQLParser.SESSION, 0);
	}
	public AUTHORIZATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.AUTHORIZATION, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_reset_rest;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterReset_rest) {
	 		listener.enterReset_rest(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitReset_rest) {
	 		listener.exitReset_rest(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitReset_rest) {
			return visitor.visitReset_rest(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Generic_resetContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public var_name(): Var_nameContext {
		return this.getTypedRuleContext(Var_nameContext, 0) as Var_nameContext;
	}
	public ALL(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALL, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_generic_reset;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterGeneric_reset) {
	 		listener.enterGeneric_reset(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitGeneric_reset) {
	 		listener.exitGeneric_reset(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitGeneric_reset) {
			return visitor.visitGeneric_reset(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class SetresetclauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public SET(): TerminalNode {
		return this.getToken(PostgreSQLParser.SET, 0);
	}
	public set_rest(): Set_restContext {
		return this.getTypedRuleContext(Set_restContext, 0) as Set_restContext;
	}
	public variableresetstmt(): VariableresetstmtContext {
		return this.getTypedRuleContext(VariableresetstmtContext, 0) as VariableresetstmtContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_setresetclause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSetresetclause) {
	 		listener.enterSetresetclause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSetresetclause) {
	 		listener.exitSetresetclause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSetresetclause) {
			return visitor.visitSetresetclause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class FunctionsetresetclauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public SET(): TerminalNode {
		return this.getToken(PostgreSQLParser.SET, 0);
	}
	public set_rest_more(): Set_rest_moreContext {
		return this.getTypedRuleContext(Set_rest_moreContext, 0) as Set_rest_moreContext;
	}
	public variableresetstmt(): VariableresetstmtContext {
		return this.getTypedRuleContext(VariableresetstmtContext, 0) as VariableresetstmtContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_functionsetresetclause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFunctionsetresetclause) {
	 		listener.enterFunctionsetresetclause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFunctionsetresetclause) {
	 		listener.exitFunctionsetresetclause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFunctionsetresetclause) {
			return visitor.visitFunctionsetresetclause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class VariableshowstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public SHOW(): TerminalNode {
		return this.getToken(PostgreSQLParser.SHOW, 0);
	}
	public var_name(): Var_nameContext {
		return this.getTypedRuleContext(Var_nameContext, 0) as Var_nameContext;
	}
	public TIME(): TerminalNode {
		return this.getToken(PostgreSQLParser.TIME, 0);
	}
	public ZONE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ZONE, 0);
	}
	public TRANSACTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRANSACTION, 0);
	}
	public ISOLATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.ISOLATION, 0);
	}
	public LEVEL(): TerminalNode {
		return this.getToken(PostgreSQLParser.LEVEL, 0);
	}
	public SESSION(): TerminalNode {
		return this.getToken(PostgreSQLParser.SESSION, 0);
	}
	public AUTHORIZATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.AUTHORIZATION, 0);
	}
	public ALL(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALL, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_variableshowstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterVariableshowstmt) {
	 		listener.enterVariableshowstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitVariableshowstmt) {
	 		listener.exitVariableshowstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitVariableshowstmt) {
			return visitor.visitVariableshowstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ConstraintssetstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public SET(): TerminalNode {
		return this.getToken(PostgreSQLParser.SET, 0);
	}
	public CONSTRAINTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONSTRAINTS, 0);
	}
	public constraints_set_list(): Constraints_set_listContext {
		return this.getTypedRuleContext(Constraints_set_listContext, 0) as Constraints_set_listContext;
	}
	public constraints_set_mode(): Constraints_set_modeContext {
		return this.getTypedRuleContext(Constraints_set_modeContext, 0) as Constraints_set_modeContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_constraintssetstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterConstraintssetstmt) {
	 		listener.enterConstraintssetstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitConstraintssetstmt) {
	 		listener.exitConstraintssetstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitConstraintssetstmt) {
			return visitor.visitConstraintssetstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Constraints_set_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALL(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALL, 0);
	}
	public qualified_name_list(): Qualified_name_listContext {
		return this.getTypedRuleContext(Qualified_name_listContext, 0) as Qualified_name_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_constraints_set_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterConstraints_set_list) {
	 		listener.enterConstraints_set_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitConstraints_set_list) {
	 		listener.exitConstraints_set_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitConstraints_set_list) {
			return visitor.visitConstraints_set_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Constraints_set_modeContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public DEFERRED(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEFERRED, 0);
	}
	public IMMEDIATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.IMMEDIATE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_constraints_set_mode;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterConstraints_set_mode) {
	 		listener.enterConstraints_set_mode(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitConstraints_set_mode) {
	 		listener.exitConstraints_set_mode(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitConstraints_set_mode) {
			return visitor.visitConstraints_set_mode(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CheckpointstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CHECKPOINT(): TerminalNode {
		return this.getToken(PostgreSQLParser.CHECKPOINT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_checkpointstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCheckpointstmt) {
	 		listener.enterCheckpointstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCheckpointstmt) {
	 		listener.exitCheckpointstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCheckpointstmt) {
			return visitor.visitCheckpointstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class DiscardstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public DISCARD(): TerminalNode {
		return this.getToken(PostgreSQLParser.DISCARD, 0);
	}
	public ALL(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALL, 0);
	}
	public TEMP(): TerminalNode {
		return this.getToken(PostgreSQLParser.TEMP, 0);
	}
	public TEMPORARY(): TerminalNode {
		return this.getToken(PostgreSQLParser.TEMPORARY, 0);
	}
	public PLANS(): TerminalNode {
		return this.getToken(PostgreSQLParser.PLANS, 0);
	}
	public SEQUENCES(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEQUENCES, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_discardstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDiscardstmt) {
	 		listener.enterDiscardstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDiscardstmt) {
	 		listener.exitDiscardstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDiscardstmt) {
			return visitor.visitDiscardstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AltertablestmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public TABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLE, 0);
	}
	public relation_expr(): Relation_exprContext {
		return this.getTypedRuleContext(Relation_exprContext, 0) as Relation_exprContext;
	}
	public alter_table_cmds(): Alter_table_cmdsContext {
		return this.getTypedRuleContext(Alter_table_cmdsContext, 0) as Alter_table_cmdsContext;
	}
	public partition_cmd(): Partition_cmdContext {
		return this.getTypedRuleContext(Partition_cmdContext, 0) as Partition_cmdContext;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
	public ALL(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALL, 0);
	}
	public IN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IN_P, 0);
	}
	public TABLESPACE_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.TABLESPACE);
	}
	public TABLESPACE(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLESPACE, i);
	}
	public name_list(): NameContext[] {
		return this.getTypedRuleContexts(NameContext) as NameContext[];
	}
	public name(i: number): NameContext {
		return this.getTypedRuleContext(NameContext, i) as NameContext;
	}
	public SET(): TerminalNode {
		return this.getToken(PostgreSQLParser.SET, 0);
	}
	public opt_nowait(): Opt_nowaitContext {
		return this.getTypedRuleContext(Opt_nowaitContext, 0) as Opt_nowaitContext;
	}
	public OWNED(): TerminalNode {
		return this.getToken(PostgreSQLParser.OWNED, 0);
	}
	public BY(): TerminalNode {
		return this.getToken(PostgreSQLParser.BY, 0);
	}
	public role_list(): Role_listContext {
		return this.getTypedRuleContext(Role_listContext, 0) as Role_listContext;
	}
	public INDEX(): TerminalNode {
		return this.getToken(PostgreSQLParser.INDEX, 0);
	}
	public qualified_name(): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, 0) as Qualified_nameContext;
	}
	public index_partition_cmd(): Index_partition_cmdContext {
		return this.getTypedRuleContext(Index_partition_cmdContext, 0) as Index_partition_cmdContext;
	}
	public SEQUENCE(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEQUENCE, 0);
	}
	public VIEW(): TerminalNode {
		return this.getToken(PostgreSQLParser.VIEW, 0);
	}
	public MATERIALIZED(): TerminalNode {
		return this.getToken(PostgreSQLParser.MATERIALIZED, 0);
	}
	public FOREIGN(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOREIGN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_altertablestmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAltertablestmt) {
	 		listener.enterAltertablestmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAltertablestmt) {
	 		listener.exitAltertablestmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAltertablestmt) {
			return visitor.visitAltertablestmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Alter_table_cmdsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public alter_table_cmd_list(): Alter_table_cmdContext[] {
		return this.getTypedRuleContexts(Alter_table_cmdContext) as Alter_table_cmdContext[];
	}
	public alter_table_cmd(i: number): Alter_table_cmdContext {
		return this.getTypedRuleContext(Alter_table_cmdContext, i) as Alter_table_cmdContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alter_table_cmds;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlter_table_cmds) {
	 		listener.enterAlter_table_cmds(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlter_table_cmds) {
	 		listener.exitAlter_table_cmds(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlter_table_cmds) {
			return visitor.visitAlter_table_cmds(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Partition_cmdContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ATTACH(): TerminalNode {
		return this.getToken(PostgreSQLParser.ATTACH, 0);
	}
	public PARTITION(): TerminalNode {
		return this.getToken(PostgreSQLParser.PARTITION, 0);
	}
	public qualified_name(): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, 0) as Qualified_nameContext;
	}
	public partitionboundspec(): PartitionboundspecContext {
		return this.getTypedRuleContext(PartitionboundspecContext, 0) as PartitionboundspecContext;
	}
	public DETACH(): TerminalNode {
		return this.getToken(PostgreSQLParser.DETACH, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_partition_cmd;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterPartition_cmd) {
	 		listener.enterPartition_cmd(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitPartition_cmd) {
	 		listener.exitPartition_cmd(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitPartition_cmd) {
			return visitor.visitPartition_cmd(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Index_partition_cmdContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ATTACH(): TerminalNode {
		return this.getToken(PostgreSQLParser.ATTACH, 0);
	}
	public PARTITION(): TerminalNode {
		return this.getToken(PostgreSQLParser.PARTITION, 0);
	}
	public qualified_name(): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, 0) as Qualified_nameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_index_partition_cmd;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterIndex_partition_cmd) {
	 		listener.enterIndex_partition_cmd(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitIndex_partition_cmd) {
	 		listener.exitIndex_partition_cmd(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitIndex_partition_cmd) {
			return visitor.visitIndex_partition_cmd(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Alter_table_cmdContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ADD_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.ADD_P, 0);
	}
	public columnDef(): ColumnDefContext {
		return this.getTypedRuleContext(ColumnDefContext, 0) as ColumnDefContext;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
	public COLUMN(): TerminalNode {
		return this.getToken(PostgreSQLParser.COLUMN, 0);
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public opt_column(): Opt_columnContext {
		return this.getTypedRuleContext(Opt_columnContext, 0) as Opt_columnContext;
	}
	public colid_list(): ColidContext[] {
		return this.getTypedRuleContexts(ColidContext) as ColidContext[];
	}
	public colid(i: number): ColidContext {
		return this.getTypedRuleContext(ColidContext, i) as ColidContext;
	}
	public alter_column_default(): Alter_column_defaultContext {
		return this.getTypedRuleContext(Alter_column_defaultContext, 0) as Alter_column_defaultContext;
	}
	public DROP(): TerminalNode {
		return this.getToken(PostgreSQLParser.DROP, 0);
	}
	public NULL_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.NULL_P, 0);
	}
	public SET(): TerminalNode {
		return this.getToken(PostgreSQLParser.SET, 0);
	}
	public EXPRESSION(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXPRESSION, 0);
	}
	public STATISTICS(): TerminalNode {
		return this.getToken(PostgreSQLParser.STATISTICS, 0);
	}
	public signediconst(): SignediconstContext {
		return this.getTypedRuleContext(SignediconstContext, 0) as SignediconstContext;
	}
	public iconst(): IconstContext {
		return this.getTypedRuleContext(IconstContext, 0) as IconstContext;
	}
	public reloptions(): ReloptionsContext {
		return this.getTypedRuleContext(ReloptionsContext, 0) as ReloptionsContext;
	}
	public RESET(): TerminalNode {
		return this.getToken(PostgreSQLParser.RESET, 0);
	}
	public STORAGE(): TerminalNode {
		return this.getToken(PostgreSQLParser.STORAGE, 0);
	}
	public GENERATED(): TerminalNode {
		return this.getToken(PostgreSQLParser.GENERATED, 0);
	}
	public generated_when(): Generated_whenContext {
		return this.getTypedRuleContext(Generated_whenContext, 0) as Generated_whenContext;
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
	public IDENTITY_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IDENTITY_P, 0);
	}
	public optparenthesizedseqoptlist(): OptparenthesizedseqoptlistContext {
		return this.getTypedRuleContext(OptparenthesizedseqoptlistContext, 0) as OptparenthesizedseqoptlistContext;
	}
	public alter_identity_column_option_list(): Alter_identity_column_option_listContext {
		return this.getTypedRuleContext(Alter_identity_column_option_listContext, 0) as Alter_identity_column_option_listContext;
	}
	public opt_drop_behavior(): Opt_drop_behaviorContext {
		return this.getTypedRuleContext(Opt_drop_behaviorContext, 0) as Opt_drop_behaviorContext;
	}
	public opt_set_data(): Opt_set_dataContext {
		return this.getTypedRuleContext(Opt_set_dataContext, 0) as Opt_set_dataContext;
	}
	public TYPE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TYPE_P, 0);
	}
	public typename(): TypenameContext {
		return this.getTypedRuleContext(TypenameContext, 0) as TypenameContext;
	}
	public opt_collate_clause(): Opt_collate_clauseContext {
		return this.getTypedRuleContext(Opt_collate_clauseContext, 0) as Opt_collate_clauseContext;
	}
	public alter_using(): Alter_usingContext {
		return this.getTypedRuleContext(Alter_usingContext, 0) as Alter_usingContext;
	}
	public alter_generic_options(): Alter_generic_optionsContext {
		return this.getTypedRuleContext(Alter_generic_optionsContext, 0) as Alter_generic_optionsContext;
	}
	public tableconstraint(): TableconstraintContext {
		return this.getTypedRuleContext(TableconstraintContext, 0) as TableconstraintContext;
	}
	public CONSTRAINT(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONSTRAINT, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public constraintattributespec(): ConstraintattributespecContext {
		return this.getTypedRuleContext(ConstraintattributespecContext, 0) as ConstraintattributespecContext;
	}
	public VALIDATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.VALIDATE, 0);
	}
	public WITHOUT(): TerminalNode {
		return this.getToken(PostgreSQLParser.WITHOUT, 0);
	}
	public OIDS(): TerminalNode {
		return this.getToken(PostgreSQLParser.OIDS, 0);
	}
	public CLUSTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLUSTER, 0);
	}
	public ON(): TerminalNode {
		return this.getToken(PostgreSQLParser.ON, 0);
	}
	public LOGGED(): TerminalNode {
		return this.getToken(PostgreSQLParser.LOGGED, 0);
	}
	public UNLOGGED(): TerminalNode {
		return this.getToken(PostgreSQLParser.UNLOGGED, 0);
	}
	public ENABLE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.ENABLE_P, 0);
	}
	public TRIGGER(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRIGGER, 0);
	}
	public ALWAYS(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALWAYS, 0);
	}
	public REPLICA(): TerminalNode {
		return this.getToken(PostgreSQLParser.REPLICA, 0);
	}
	public ALL(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALL, 0);
	}
	public USER(): TerminalNode {
		return this.getToken(PostgreSQLParser.USER, 0);
	}
	public DISABLE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DISABLE_P, 0);
	}
	public RULE(): TerminalNode {
		return this.getToken(PostgreSQLParser.RULE, 0);
	}
	public INHERIT(): TerminalNode {
		return this.getToken(PostgreSQLParser.INHERIT, 0);
	}
	public qualified_name(): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, 0) as Qualified_nameContext;
	}
	public NO(): TerminalNode {
		return this.getToken(PostgreSQLParser.NO, 0);
	}
	public OF(): TerminalNode {
		return this.getToken(PostgreSQLParser.OF, 0);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
	public OWNER(): TerminalNode {
		return this.getToken(PostgreSQLParser.OWNER, 0);
	}
	public TO(): TerminalNode {
		return this.getToken(PostgreSQLParser.TO, 0);
	}
	public rolespec(): RolespecContext {
		return this.getTypedRuleContext(RolespecContext, 0) as RolespecContext;
	}
	public TABLESPACE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLESPACE, 0);
	}
	public replica_identity(): Replica_identityContext {
		return this.getTypedRuleContext(Replica_identityContext, 0) as Replica_identityContext;
	}
	public ROW(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROW, 0);
	}
	public LEVEL(): TerminalNode {
		return this.getToken(PostgreSQLParser.LEVEL, 0);
	}
	public SECURITY(): TerminalNode {
		return this.getToken(PostgreSQLParser.SECURITY, 0);
	}
	public FORCE(): TerminalNode {
		return this.getToken(PostgreSQLParser.FORCE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alter_table_cmd;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlter_table_cmd) {
	 		listener.enterAlter_table_cmd(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlter_table_cmd) {
	 		listener.exitAlter_table_cmd(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlter_table_cmd) {
			return visitor.visitAlter_table_cmd(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Alter_column_defaultContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public SET(): TerminalNode {
		return this.getToken(PostgreSQLParser.SET, 0);
	}
	public DEFAULT(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEFAULT, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public DROP(): TerminalNode {
		return this.getToken(PostgreSQLParser.DROP, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alter_column_default;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlter_column_default) {
	 		listener.enterAlter_column_default(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlter_column_default) {
	 		listener.exitAlter_column_default(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlter_column_default) {
			return visitor.visitAlter_column_default(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_drop_behaviorContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CASCADE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CASCADE, 0);
	}
	public RESTRICT(): TerminalNode {
		return this.getToken(PostgreSQLParser.RESTRICT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_drop_behavior;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_drop_behavior) {
	 		listener.enterOpt_drop_behavior(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_drop_behavior) {
	 		listener.exitOpt_drop_behavior(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_drop_behavior) {
			return visitor.visitOpt_drop_behavior(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_collate_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public COLLATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.COLLATE, 0);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_collate_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_collate_clause) {
	 		listener.enterOpt_collate_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_collate_clause) {
	 		listener.exitOpt_collate_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_collate_clause) {
			return visitor.visitOpt_collate_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Alter_usingContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public USING(): TerminalNode {
		return this.getToken(PostgreSQLParser.USING, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alter_using;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlter_using) {
	 		listener.enterAlter_using(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlter_using) {
	 		listener.exitAlter_using(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlter_using) {
			return visitor.visitAlter_using(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Replica_identityContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public NOTHING(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOTHING, 0);
	}
	public FULL(): TerminalNode {
		return this.getToken(PostgreSQLParser.FULL, 0);
	}
	public DEFAULT(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEFAULT, 0);
	}
	public USING(): TerminalNode {
		return this.getToken(PostgreSQLParser.USING, 0);
	}
	public INDEX(): TerminalNode {
		return this.getToken(PostgreSQLParser.INDEX, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_replica_identity;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterReplica_identity) {
	 		listener.enterReplica_identity(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitReplica_identity) {
	 		listener.exitReplica_identity(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitReplica_identity) {
			return visitor.visitReplica_identity(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ReloptionsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public reloption_list(): Reloption_listContext {
		return this.getTypedRuleContext(Reloption_listContext, 0) as Reloption_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_reloptions;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterReloptions) {
	 		listener.enterReloptions(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitReloptions) {
	 		listener.exitReloptions(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitReloptions) {
			return visitor.visitReloptions(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_reloptionsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public WITH(): TerminalNode {
		return this.getToken(PostgreSQLParser.WITH, 0);
	}
	public reloptions(): ReloptionsContext {
		return this.getTypedRuleContext(ReloptionsContext, 0) as ReloptionsContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_reloptions;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_reloptions) {
	 		listener.enterOpt_reloptions(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_reloptions) {
	 		listener.exitOpt_reloptions(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_reloptions) {
			return visitor.visitOpt_reloptions(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Reloption_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public reloption_elem_list(): Reloption_elemContext[] {
		return this.getTypedRuleContexts(Reloption_elemContext) as Reloption_elemContext[];
	}
	public reloption_elem(i: number): Reloption_elemContext {
		return this.getTypedRuleContext(Reloption_elemContext, i) as Reloption_elemContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_reloption_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterReloption_list) {
	 		listener.enterReloption_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitReloption_list) {
	 		listener.exitReloption_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitReloption_list) {
			return visitor.visitReloption_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Reloption_elemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public collabel_list(): CollabelContext[] {
		return this.getTypedRuleContexts(CollabelContext) as CollabelContext[];
	}
	public collabel(i: number): CollabelContext {
		return this.getTypedRuleContext(CollabelContext, i) as CollabelContext;
	}
	public EQUAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.EQUAL, 0);
	}
	public def_arg(): Def_argContext {
		return this.getTypedRuleContext(Def_argContext, 0) as Def_argContext;
	}
	public DOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.DOT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_reloption_elem;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterReloption_elem) {
	 		listener.enterReloption_elem(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitReloption_elem) {
	 		listener.exitReloption_elem(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitReloption_elem) {
			return visitor.visitReloption_elem(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Alter_identity_column_option_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public alter_identity_column_option_list(): Alter_identity_column_optionContext[] {
		return this.getTypedRuleContexts(Alter_identity_column_optionContext) as Alter_identity_column_optionContext[];
	}
	public alter_identity_column_option(i: number): Alter_identity_column_optionContext {
		return this.getTypedRuleContext(Alter_identity_column_optionContext, i) as Alter_identity_column_optionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alter_identity_column_option_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlter_identity_column_option_list) {
	 		listener.enterAlter_identity_column_option_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlter_identity_column_option_list) {
	 		listener.exitAlter_identity_column_option_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlter_identity_column_option_list) {
			return visitor.visitAlter_identity_column_option_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Alter_identity_column_optionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public RESTART(): TerminalNode {
		return this.getToken(PostgreSQLParser.RESTART, 0);
	}
	public opt_with(): Opt_withContext {
		return this.getTypedRuleContext(Opt_withContext, 0) as Opt_withContext;
	}
	public numericonly(): NumericonlyContext {
		return this.getTypedRuleContext(NumericonlyContext, 0) as NumericonlyContext;
	}
	public SET(): TerminalNode {
		return this.getToken(PostgreSQLParser.SET, 0);
	}
	public seqoptelem(): SeqoptelemContext {
		return this.getTypedRuleContext(SeqoptelemContext, 0) as SeqoptelemContext;
	}
	public GENERATED(): TerminalNode {
		return this.getToken(PostgreSQLParser.GENERATED, 0);
	}
	public generated_when(): Generated_whenContext {
		return this.getTypedRuleContext(Generated_whenContext, 0) as Generated_whenContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alter_identity_column_option;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlter_identity_column_option) {
	 		listener.enterAlter_identity_column_option(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlter_identity_column_option) {
	 		listener.exitAlter_identity_column_option(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlter_identity_column_option) {
			return visitor.visitAlter_identity_column_option(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class PartitionboundspecContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
	public VALUES(): TerminalNode {
		return this.getToken(PostgreSQLParser.VALUES, 0);
	}
	public WITH(): TerminalNode {
		return this.getToken(PostgreSQLParser.WITH, 0);
	}
	public OPEN_PAREN_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.OPEN_PAREN);
	}
	public OPEN_PAREN(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, i);
	}
	public hash_partbound(): Hash_partboundContext {
		return this.getTypedRuleContext(Hash_partboundContext, 0) as Hash_partboundContext;
	}
	public CLOSE_PAREN_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.CLOSE_PAREN);
	}
	public CLOSE_PAREN(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, i);
	}
	public IN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IN_P, 0);
	}
	public expr_list_list(): Expr_listContext[] {
		return this.getTypedRuleContexts(Expr_listContext) as Expr_listContext[];
	}
	public expr_list(i: number): Expr_listContext {
		return this.getTypedRuleContext(Expr_listContext, i) as Expr_listContext;
	}
	public FROM(): TerminalNode {
		return this.getToken(PostgreSQLParser.FROM, 0);
	}
	public TO(): TerminalNode {
		return this.getToken(PostgreSQLParser.TO, 0);
	}
	public DEFAULT(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEFAULT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_partitionboundspec;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterPartitionboundspec) {
	 		listener.enterPartitionboundspec(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitPartitionboundspec) {
	 		listener.exitPartitionboundspec(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitPartitionboundspec) {
			return visitor.visitPartitionboundspec(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Hash_partbound_elemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public nonreservedword(): NonreservedwordContext {
		return this.getTypedRuleContext(NonreservedwordContext, 0) as NonreservedwordContext;
	}
	public iconst(): IconstContext {
		return this.getTypedRuleContext(IconstContext, 0) as IconstContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_hash_partbound_elem;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterHash_partbound_elem) {
	 		listener.enterHash_partbound_elem(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitHash_partbound_elem) {
	 		listener.exitHash_partbound_elem(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitHash_partbound_elem) {
			return visitor.visitHash_partbound_elem(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Hash_partboundContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public hash_partbound_elem_list(): Hash_partbound_elemContext[] {
		return this.getTypedRuleContexts(Hash_partbound_elemContext) as Hash_partbound_elemContext[];
	}
	public hash_partbound_elem(i: number): Hash_partbound_elemContext {
		return this.getTypedRuleContext(Hash_partbound_elemContext, i) as Hash_partbound_elemContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_hash_partbound;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterHash_partbound) {
	 		listener.enterHash_partbound(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitHash_partbound) {
	 		listener.exitHash_partbound(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitHash_partbound) {
			return visitor.visitHash_partbound(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AltercompositetypestmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public TYPE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TYPE_P, 0);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
	public alter_type_cmds(): Alter_type_cmdsContext {
		return this.getTypedRuleContext(Alter_type_cmdsContext, 0) as Alter_type_cmdsContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_altercompositetypestmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAltercompositetypestmt) {
	 		listener.enterAltercompositetypestmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAltercompositetypestmt) {
	 		listener.exitAltercompositetypestmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAltercompositetypestmt) {
			return visitor.visitAltercompositetypestmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Alter_type_cmdsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public alter_type_cmd_list(): Alter_type_cmdContext[] {
		return this.getTypedRuleContexts(Alter_type_cmdContext) as Alter_type_cmdContext[];
	}
	public alter_type_cmd(i: number): Alter_type_cmdContext {
		return this.getTypedRuleContext(Alter_type_cmdContext, i) as Alter_type_cmdContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alter_type_cmds;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlter_type_cmds) {
	 		listener.enterAlter_type_cmds(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlter_type_cmds) {
	 		listener.exitAlter_type_cmds(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlter_type_cmds) {
			return visitor.visitAlter_type_cmds(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Alter_type_cmdContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ADD_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.ADD_P, 0);
	}
	public ATTRIBUTE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ATTRIBUTE, 0);
	}
	public tablefuncelement(): TablefuncelementContext {
		return this.getTypedRuleContext(TablefuncelementContext, 0) as TablefuncelementContext;
	}
	public opt_drop_behavior(): Opt_drop_behaviorContext {
		return this.getTypedRuleContext(Opt_drop_behaviorContext, 0) as Opt_drop_behaviorContext;
	}
	public DROP(): TerminalNode {
		return this.getToken(PostgreSQLParser.DROP, 0);
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public opt_set_data(): Opt_set_dataContext {
		return this.getTypedRuleContext(Opt_set_dataContext, 0) as Opt_set_dataContext;
	}
	public TYPE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TYPE_P, 0);
	}
	public typename(): TypenameContext {
		return this.getTypedRuleContext(TypenameContext, 0) as TypenameContext;
	}
	public opt_collate_clause(): Opt_collate_clauseContext {
		return this.getTypedRuleContext(Opt_collate_clauseContext, 0) as Opt_collate_clauseContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alter_type_cmd;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlter_type_cmd) {
	 		listener.enterAlter_type_cmd(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlter_type_cmd) {
	 		listener.exitAlter_type_cmd(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlter_type_cmd) {
			return visitor.visitAlter_type_cmd(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CloseportalstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CLOSE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE, 0);
	}
	public cursor_name(): Cursor_nameContext {
		return this.getTypedRuleContext(Cursor_nameContext, 0) as Cursor_nameContext;
	}
	public ALL(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALL, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_closeportalstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCloseportalstmt) {
	 		listener.enterCloseportalstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCloseportalstmt) {
	 		listener.exitCloseportalstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCloseportalstmt) {
			return visitor.visitCloseportalstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CopystmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public COPY(): TerminalNode {
		return this.getToken(PostgreSQLParser.COPY, 0);
	}
	public opt_binary(): Opt_binaryContext {
		return this.getTypedRuleContext(Opt_binaryContext, 0) as Opt_binaryContext;
	}
	public qualified_name(): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, 0) as Qualified_nameContext;
	}
	public opt_column_list(): Opt_column_listContext {
		return this.getTypedRuleContext(Opt_column_listContext, 0) as Opt_column_listContext;
	}
	public copy_from(): Copy_fromContext {
		return this.getTypedRuleContext(Copy_fromContext, 0) as Copy_fromContext;
	}
	public opt_program(): Opt_programContext {
		return this.getTypedRuleContext(Opt_programContext, 0) as Opt_programContext;
	}
	public copy_file_name(): Copy_file_nameContext {
		return this.getTypedRuleContext(Copy_file_nameContext, 0) as Copy_file_nameContext;
	}
	public copy_delimiter(): Copy_delimiterContext {
		return this.getTypedRuleContext(Copy_delimiterContext, 0) as Copy_delimiterContext;
	}
	public opt_with(): Opt_withContext {
		return this.getTypedRuleContext(Opt_withContext, 0) as Opt_withContext;
	}
	public copy_options(): Copy_optionsContext {
		return this.getTypedRuleContext(Copy_optionsContext, 0) as Copy_optionsContext;
	}
	public where_clause(): Where_clauseContext {
		return this.getTypedRuleContext(Where_clauseContext, 0) as Where_clauseContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public preparablestmt(): PreparablestmtContext {
		return this.getTypedRuleContext(PreparablestmtContext, 0) as PreparablestmtContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public TO(): TerminalNode {
		return this.getToken(PostgreSQLParser.TO, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_copystmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCopystmt) {
	 		listener.enterCopystmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCopystmt) {
	 		listener.exitCopystmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCopystmt) {
			return visitor.visitCopystmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Copy_fromContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public FROM(): TerminalNode {
		return this.getToken(PostgreSQLParser.FROM, 0);
	}
	public TO(): TerminalNode {
		return this.getToken(PostgreSQLParser.TO, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_copy_from;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCopy_from) {
	 		listener.enterCopy_from(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCopy_from) {
	 		listener.exitCopy_from(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCopy_from) {
			return visitor.visitCopy_from(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_programContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public PROGRAM(): TerminalNode {
		return this.getToken(PostgreSQLParser.PROGRAM, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_program;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_program) {
	 		listener.enterOpt_program(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_program) {
	 		listener.exitOpt_program(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_program) {
			return visitor.visitOpt_program(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Copy_file_nameContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public sconst(): SconstContext {
		return this.getTypedRuleContext(SconstContext, 0) as SconstContext;
	}
	public STDIN(): TerminalNode {
		return this.getToken(PostgreSQLParser.STDIN, 0);
	}
	public STDOUT(): TerminalNode {
		return this.getToken(PostgreSQLParser.STDOUT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_copy_file_name;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCopy_file_name) {
	 		listener.enterCopy_file_name(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCopy_file_name) {
	 		listener.exitCopy_file_name(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCopy_file_name) {
			return visitor.visitCopy_file_name(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Copy_optionsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public copy_opt_list(): Copy_opt_listContext {
		return this.getTypedRuleContext(Copy_opt_listContext, 0) as Copy_opt_listContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public copy_generic_opt_list(): Copy_generic_opt_listContext {
		return this.getTypedRuleContext(Copy_generic_opt_listContext, 0) as Copy_generic_opt_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_copy_options;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCopy_options) {
	 		listener.enterCopy_options(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCopy_options) {
	 		listener.exitCopy_options(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCopy_options) {
			return visitor.visitCopy_options(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Copy_opt_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public copy_opt_item_list(): Copy_opt_itemContext[] {
		return this.getTypedRuleContexts(Copy_opt_itemContext) as Copy_opt_itemContext[];
	}
	public copy_opt_item(i: number): Copy_opt_itemContext {
		return this.getTypedRuleContext(Copy_opt_itemContext, i) as Copy_opt_itemContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_copy_opt_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCopy_opt_list) {
	 		listener.enterCopy_opt_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCopy_opt_list) {
	 		listener.exitCopy_opt_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCopy_opt_list) {
			return visitor.visitCopy_opt_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Copy_opt_itemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public BINARY(): TerminalNode {
		return this.getToken(PostgreSQLParser.BINARY, 0);
	}
	public FREEZE(): TerminalNode {
		return this.getToken(PostgreSQLParser.FREEZE, 0);
	}
	public DELIMITER(): TerminalNode {
		return this.getToken(PostgreSQLParser.DELIMITER, 0);
	}
	public opt_as(): Opt_asContext {
		return this.getTypedRuleContext(Opt_asContext, 0) as Opt_asContext;
	}
	public sconst(): SconstContext {
		return this.getTypedRuleContext(SconstContext, 0) as SconstContext;
	}
	public NULL_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.NULL_P, 0);
	}
	public CSV(): TerminalNode {
		return this.getToken(PostgreSQLParser.CSV, 0);
	}
	public HEADER_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.HEADER_P, 0);
	}
	public QUOTE(): TerminalNode {
		return this.getToken(PostgreSQLParser.QUOTE, 0);
	}
	public ESCAPE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ESCAPE, 0);
	}
	public FORCE(): TerminalNode {
		return this.getToken(PostgreSQLParser.FORCE, 0);
	}
	public columnlist(): ColumnlistContext {
		return this.getTypedRuleContext(ColumnlistContext, 0) as ColumnlistContext;
	}
	public STAR(): TerminalNode {
		return this.getToken(PostgreSQLParser.STAR, 0);
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
	public ENCODING(): TerminalNode {
		return this.getToken(PostgreSQLParser.ENCODING, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_copy_opt_item;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCopy_opt_item) {
	 		listener.enterCopy_opt_item(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCopy_opt_item) {
	 		listener.exitCopy_opt_item(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCopy_opt_item) {
			return visitor.visitCopy_opt_item(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_binaryContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public BINARY(): TerminalNode {
		return this.getToken(PostgreSQLParser.BINARY, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_binary;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_binary) {
	 		listener.enterOpt_binary(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_binary) {
	 		listener.exitOpt_binary(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_binary) {
			return visitor.visitOpt_binary(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Copy_delimiterContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public opt_using(): Opt_usingContext {
		return this.getTypedRuleContext(Opt_usingContext, 0) as Opt_usingContext;
	}
	public DELIMITERS(): TerminalNode {
		return this.getToken(PostgreSQLParser.DELIMITERS, 0);
	}
	public sconst(): SconstContext {
		return this.getTypedRuleContext(SconstContext, 0) as SconstContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_copy_delimiter;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCopy_delimiter) {
	 		listener.enterCopy_delimiter(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCopy_delimiter) {
	 		listener.exitCopy_delimiter(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCopy_delimiter) {
			return visitor.visitCopy_delimiter(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_usingContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public USING(): TerminalNode {
		return this.getToken(PostgreSQLParser.USING, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_using;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_using) {
	 		listener.enterOpt_using(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_using) {
	 		listener.exitOpt_using(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_using) {
			return visitor.visitOpt_using(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Copy_generic_opt_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public copy_generic_opt_elem_list(): Copy_generic_opt_elemContext[] {
		return this.getTypedRuleContexts(Copy_generic_opt_elemContext) as Copy_generic_opt_elemContext[];
	}
	public copy_generic_opt_elem(i: number): Copy_generic_opt_elemContext {
		return this.getTypedRuleContext(Copy_generic_opt_elemContext, i) as Copy_generic_opt_elemContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_copy_generic_opt_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCopy_generic_opt_list) {
	 		listener.enterCopy_generic_opt_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCopy_generic_opt_list) {
	 		listener.exitCopy_generic_opt_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCopy_generic_opt_list) {
			return visitor.visitCopy_generic_opt_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Copy_generic_opt_elemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public collabel(): CollabelContext {
		return this.getTypedRuleContext(CollabelContext, 0) as CollabelContext;
	}
	public copy_generic_opt_arg(): Copy_generic_opt_argContext {
		return this.getTypedRuleContext(Copy_generic_opt_argContext, 0) as Copy_generic_opt_argContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_copy_generic_opt_elem;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCopy_generic_opt_elem) {
	 		listener.enterCopy_generic_opt_elem(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCopy_generic_opt_elem) {
	 		listener.exitCopy_generic_opt_elem(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCopy_generic_opt_elem) {
			return visitor.visitCopy_generic_opt_elem(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Copy_generic_opt_argContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public opt_boolean_or_string(): Opt_boolean_or_stringContext {
		return this.getTypedRuleContext(Opt_boolean_or_stringContext, 0) as Opt_boolean_or_stringContext;
	}
	public numericonly(): NumericonlyContext {
		return this.getTypedRuleContext(NumericonlyContext, 0) as NumericonlyContext;
	}
	public STAR(): TerminalNode {
		return this.getToken(PostgreSQLParser.STAR, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public copy_generic_opt_arg_list(): Copy_generic_opt_arg_listContext {
		return this.getTypedRuleContext(Copy_generic_opt_arg_listContext, 0) as Copy_generic_opt_arg_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_copy_generic_opt_arg;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCopy_generic_opt_arg) {
	 		listener.enterCopy_generic_opt_arg(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCopy_generic_opt_arg) {
	 		listener.exitCopy_generic_opt_arg(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCopy_generic_opt_arg) {
			return visitor.visitCopy_generic_opt_arg(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Copy_generic_opt_arg_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public copy_generic_opt_arg_list_item_list(): Copy_generic_opt_arg_list_itemContext[] {
		return this.getTypedRuleContexts(Copy_generic_opt_arg_list_itemContext) as Copy_generic_opt_arg_list_itemContext[];
	}
	public copy_generic_opt_arg_list_item(i: number): Copy_generic_opt_arg_list_itemContext {
		return this.getTypedRuleContext(Copy_generic_opt_arg_list_itemContext, i) as Copy_generic_opt_arg_list_itemContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_copy_generic_opt_arg_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCopy_generic_opt_arg_list) {
	 		listener.enterCopy_generic_opt_arg_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCopy_generic_opt_arg_list) {
	 		listener.exitCopy_generic_opt_arg_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCopy_generic_opt_arg_list) {
			return visitor.visitCopy_generic_opt_arg_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Copy_generic_opt_arg_list_itemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public opt_boolean_or_string(): Opt_boolean_or_stringContext {
		return this.getTypedRuleContext(Opt_boolean_or_stringContext, 0) as Opt_boolean_or_stringContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_copy_generic_opt_arg_list_item;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCopy_generic_opt_arg_list_item) {
	 		listener.enterCopy_generic_opt_arg_list_item(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCopy_generic_opt_arg_list_item) {
	 		listener.exitCopy_generic_opt_arg_list_item(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCopy_generic_opt_arg_list_item) {
			return visitor.visitCopy_generic_opt_arg_list_item(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreatestmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public opttemp(): OpttempContext {
		return this.getTypedRuleContext(OpttempContext, 0) as OpttempContext;
	}
	public TABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLE, 0);
	}
	public qualified_name_list(): Qualified_nameContext[] {
		return this.getTypedRuleContexts(Qualified_nameContext) as Qualified_nameContext[];
	}
	public qualified_name(i: number): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, i) as Qualified_nameContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public opttableelementlist(): OpttableelementlistContext {
		return this.getTypedRuleContext(OpttableelementlistContext, 0) as OpttableelementlistContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public optinherit(): OptinheritContext {
		return this.getTypedRuleContext(OptinheritContext, 0) as OptinheritContext;
	}
	public optpartitionspec(): OptpartitionspecContext {
		return this.getTypedRuleContext(OptpartitionspecContext, 0) as OptpartitionspecContext;
	}
	public table_access_method_clause(): Table_access_method_clauseContext {
		return this.getTypedRuleContext(Table_access_method_clauseContext, 0) as Table_access_method_clauseContext;
	}
	public optwith(): OptwithContext {
		return this.getTypedRuleContext(OptwithContext, 0) as OptwithContext;
	}
	public oncommitoption(): OncommitoptionContext {
		return this.getTypedRuleContext(OncommitoptionContext, 0) as OncommitoptionContext;
	}
	public opttablespace(): OpttablespaceContext {
		return this.getTypedRuleContext(OpttablespaceContext, 0) as OpttablespaceContext;
	}
	public OF(): TerminalNode {
		return this.getToken(PostgreSQLParser.OF, 0);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
	public opttypedtableelementlist(): OpttypedtableelementlistContext {
		return this.getTypedRuleContext(OpttypedtableelementlistContext, 0) as OpttypedtableelementlistContext;
	}
	public PARTITION(): TerminalNode {
		return this.getToken(PostgreSQLParser.PARTITION, 0);
	}
	public partitionboundspec(): PartitionboundspecContext {
		return this.getTypedRuleContext(PartitionboundspecContext, 0) as PartitionboundspecContext;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreatestmt) {
	 		listener.enterCreatestmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreatestmt) {
	 		listener.exitCreatestmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreatestmt) {
			return visitor.visitCreatestmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class OpttempContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public TEMPORARY(): TerminalNode {
		return this.getToken(PostgreSQLParser.TEMPORARY, 0);
	}
	public TEMP(): TerminalNode {
		return this.getToken(PostgreSQLParser.TEMP, 0);
	}
	public LOCAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.LOCAL, 0);
	}
	public GLOBAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.GLOBAL, 0);
	}
	public UNLOGGED(): TerminalNode {
		return this.getToken(PostgreSQLParser.UNLOGGED, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opttemp;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpttemp) {
	 		listener.enterOpttemp(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpttemp) {
	 		listener.exitOpttemp(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpttemp) {
			return visitor.visitOpttemp(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class OpttableelementlistContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public tableelementlist(): TableelementlistContext {
		return this.getTypedRuleContext(TableelementlistContext, 0) as TableelementlistContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opttableelementlist;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpttableelementlist) {
	 		listener.enterOpttableelementlist(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpttableelementlist) {
	 		listener.exitOpttableelementlist(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpttableelementlist) {
			return visitor.visitOpttableelementlist(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class OpttypedtableelementlistContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public typedtableelementlist(): TypedtableelementlistContext {
		return this.getTypedRuleContext(TypedtableelementlistContext, 0) as TypedtableelementlistContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opttypedtableelementlist;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpttypedtableelementlist) {
	 		listener.enterOpttypedtableelementlist(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpttypedtableelementlist) {
	 		listener.exitOpttypedtableelementlist(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpttypedtableelementlist) {
			return visitor.visitOpttypedtableelementlist(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class TableelementlistContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public tableelement_list(): TableelementContext[] {
		return this.getTypedRuleContexts(TableelementContext) as TableelementContext[];
	}
	public tableelement(i: number): TableelementContext {
		return this.getTypedRuleContext(TableelementContext, i) as TableelementContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_tableelementlist;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTableelementlist) {
	 		listener.enterTableelementlist(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTableelementlist) {
	 		listener.exitTableelementlist(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTableelementlist) {
			return visitor.visitTableelementlist(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class TypedtableelementlistContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public typedtableelement_list(): TypedtableelementContext[] {
		return this.getTypedRuleContexts(TypedtableelementContext) as TypedtableelementContext[];
	}
	public typedtableelement(i: number): TypedtableelementContext {
		return this.getTypedRuleContext(TypedtableelementContext, i) as TypedtableelementContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_typedtableelementlist;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTypedtableelementlist) {
	 		listener.enterTypedtableelementlist(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTypedtableelementlist) {
	 		listener.exitTypedtableelementlist(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTypedtableelementlist) {
			return visitor.visitTypedtableelementlist(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class TableelementContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public columnDef(): ColumnDefContext {
		return this.getTypedRuleContext(ColumnDefContext, 0) as ColumnDefContext;
	}
	public tablelikeclause(): TablelikeclauseContext {
		return this.getTypedRuleContext(TablelikeclauseContext, 0) as TablelikeclauseContext;
	}
	public tableconstraint(): TableconstraintContext {
		return this.getTypedRuleContext(TableconstraintContext, 0) as TableconstraintContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_tableelement;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTableelement) {
	 		listener.enterTableelement(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTableelement) {
	 		listener.exitTableelement(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTableelement) {
			return visitor.visitTableelement(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class TypedtableelementContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public columnOptions(): ColumnOptionsContext {
		return this.getTypedRuleContext(ColumnOptionsContext, 0) as ColumnOptionsContext;
	}
	public tableconstraint(): TableconstraintContext {
		return this.getTypedRuleContext(TableconstraintContext, 0) as TableconstraintContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_typedtableelement;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTypedtableelement) {
	 		listener.enterTypedtableelement(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTypedtableelement) {
	 		listener.exitTypedtableelement(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTypedtableelement) {
			return visitor.visitTypedtableelement(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ColumnDefContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
	public typename(): TypenameContext {
		return this.getTypedRuleContext(TypenameContext, 0) as TypenameContext;
	}
	public create_generic_options(): Create_generic_optionsContext {
		return this.getTypedRuleContext(Create_generic_optionsContext, 0) as Create_generic_optionsContext;
	}
	public colquallist(): ColquallistContext {
		return this.getTypedRuleContext(ColquallistContext, 0) as ColquallistContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_columnDef;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterColumnDef) {
	 		listener.enterColumnDef(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitColumnDef) {
	 		listener.exitColumnDef(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitColumnDef) {
			return visitor.visitColumnDef(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ColumnOptionsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
	public colquallist(): ColquallistContext {
		return this.getTypedRuleContext(ColquallistContext, 0) as ColquallistContext;
	}
	public WITH(): TerminalNode {
		return this.getToken(PostgreSQLParser.WITH, 0);
	}
	public OPTIONS(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPTIONS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_columnOptions;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterColumnOptions) {
	 		listener.enterColumnOptions(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitColumnOptions) {
	 		listener.exitColumnOptions(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitColumnOptions) {
			return visitor.visitColumnOptions(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ColquallistContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public colconstraint_list(): ColconstraintContext[] {
		return this.getTypedRuleContexts(ColconstraintContext) as ColconstraintContext[];
	}
	public colconstraint(i: number): ColconstraintContext {
		return this.getTypedRuleContext(ColconstraintContext, i) as ColconstraintContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_colquallist;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterColquallist) {
	 		listener.enterColquallist(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitColquallist) {
	 		listener.exitColquallist(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitColquallist) {
			return visitor.visitColquallist(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ColconstraintContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CONSTRAINT(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONSTRAINT, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public colconstraintelem(): ColconstraintelemContext {
		return this.getTypedRuleContext(ColconstraintelemContext, 0) as ColconstraintelemContext;
	}
	public constraintattr(): ConstraintattrContext {
		return this.getTypedRuleContext(ConstraintattrContext, 0) as ConstraintattrContext;
	}
	public COLLATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.COLLATE, 0);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_colconstraint;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterColconstraint) {
	 		listener.enterColconstraint(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitColconstraint) {
	 		listener.exitColconstraint(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitColconstraint) {
			return visitor.visitColconstraint(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ColconstraintelemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
	public NULL_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.NULL_P, 0);
	}
	public UNIQUE(): TerminalNode {
		return this.getToken(PostgreSQLParser.UNIQUE, 0);
	}
	public opt_definition(): Opt_definitionContext {
		return this.getTypedRuleContext(Opt_definitionContext, 0) as Opt_definitionContext;
	}
	public optconstablespace(): OptconstablespaceContext {
		return this.getTypedRuleContext(OptconstablespaceContext, 0) as OptconstablespaceContext;
	}
	public PRIMARY(): TerminalNode {
		return this.getToken(PostgreSQLParser.PRIMARY, 0);
	}
	public KEY(): TerminalNode {
		return this.getToken(PostgreSQLParser.KEY, 0);
	}
	public CHECK(): TerminalNode {
		return this.getToken(PostgreSQLParser.CHECK, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public opt_no_inherit(): Opt_no_inheritContext {
		return this.getTypedRuleContext(Opt_no_inheritContext, 0) as Opt_no_inheritContext;
	}
	public DEFAULT(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEFAULT, 0);
	}
	public b_expr(): B_exprContext {
		return this.getTypedRuleContext(B_exprContext, 0) as B_exprContext;
	}
	public GENERATED(): TerminalNode {
		return this.getToken(PostgreSQLParser.GENERATED, 0);
	}
	public generated_when(): Generated_whenContext {
		return this.getTypedRuleContext(Generated_whenContext, 0) as Generated_whenContext;
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
	public IDENTITY_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IDENTITY_P, 0);
	}
	public optparenthesizedseqoptlist(): OptparenthesizedseqoptlistContext {
		return this.getTypedRuleContext(OptparenthesizedseqoptlistContext, 0) as OptparenthesizedseqoptlistContext;
	}
	public STORED(): TerminalNode {
		return this.getToken(PostgreSQLParser.STORED, 0);
	}
	public REFERENCES(): TerminalNode {
		return this.getToken(PostgreSQLParser.REFERENCES, 0);
	}
	public qualified_name(): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, 0) as Qualified_nameContext;
	}
	public opt_column_list(): Opt_column_listContext {
		return this.getTypedRuleContext(Opt_column_listContext, 0) as Opt_column_listContext;
	}
	public key_match(): Key_matchContext {
		return this.getTypedRuleContext(Key_matchContext, 0) as Key_matchContext;
	}
	public key_actions(): Key_actionsContext {
		return this.getTypedRuleContext(Key_actionsContext, 0) as Key_actionsContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_colconstraintelem;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterColconstraintelem) {
	 		listener.enterColconstraintelem(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitColconstraintelem) {
	 		listener.exitColconstraintelem(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitColconstraintelem) {
			return visitor.visitColconstraintelem(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Generated_whenContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALWAYS(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALWAYS, 0);
	}
	public BY(): TerminalNode {
		return this.getToken(PostgreSQLParser.BY, 0);
	}
	public DEFAULT(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEFAULT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_generated_when;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterGenerated_when) {
	 		listener.enterGenerated_when(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitGenerated_when) {
	 		listener.exitGenerated_when(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitGenerated_when) {
			return visitor.visitGenerated_when(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ConstraintattrContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public DEFERRABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEFERRABLE, 0);
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
	public INITIALLY(): TerminalNode {
		return this.getToken(PostgreSQLParser.INITIALLY, 0);
	}
	public DEFERRED(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEFERRED, 0);
	}
	public IMMEDIATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.IMMEDIATE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_constraintattr;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterConstraintattr) {
	 		listener.enterConstraintattr(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitConstraintattr) {
	 		listener.exitConstraintattr(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitConstraintattr) {
			return visitor.visitConstraintattr(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class TablelikeclauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public LIKE(): TerminalNode {
		return this.getToken(PostgreSQLParser.LIKE, 0);
	}
	public qualified_name(): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, 0) as Qualified_nameContext;
	}
	public tablelikeoptionlist(): TablelikeoptionlistContext {
		return this.getTypedRuleContext(TablelikeoptionlistContext, 0) as TablelikeoptionlistContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_tablelikeclause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTablelikeclause) {
	 		listener.enterTablelikeclause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTablelikeclause) {
	 		listener.exitTablelikeclause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTablelikeclause) {
			return visitor.visitTablelikeclause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class TablelikeoptionlistContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public tablelikeoption_list(): TablelikeoptionContext[] {
		return this.getTypedRuleContexts(TablelikeoptionContext) as TablelikeoptionContext[];
	}
	public tablelikeoption(i: number): TablelikeoptionContext {
		return this.getTypedRuleContext(TablelikeoptionContext, i) as TablelikeoptionContext;
	}
	public INCLUDING_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.INCLUDING);
	}
	public INCLUDING(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.INCLUDING, i);
	}
	public EXCLUDING_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.EXCLUDING);
	}
	public EXCLUDING(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.EXCLUDING, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_tablelikeoptionlist;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTablelikeoptionlist) {
	 		listener.enterTablelikeoptionlist(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTablelikeoptionlist) {
	 		listener.exitTablelikeoptionlist(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTablelikeoptionlist) {
			return visitor.visitTablelikeoptionlist(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class TablelikeoptionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public COMMENTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMENTS, 0);
	}
	public CONSTRAINTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONSTRAINTS, 0);
	}
	public DEFAULTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEFAULTS, 0);
	}
	public IDENTITY_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IDENTITY_P, 0);
	}
	public GENERATED(): TerminalNode {
		return this.getToken(PostgreSQLParser.GENERATED, 0);
	}
	public INDEXES(): TerminalNode {
		return this.getToken(PostgreSQLParser.INDEXES, 0);
	}
	public STATISTICS(): TerminalNode {
		return this.getToken(PostgreSQLParser.STATISTICS, 0);
	}
	public STORAGE(): TerminalNode {
		return this.getToken(PostgreSQLParser.STORAGE, 0);
	}
	public ALL(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALL, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_tablelikeoption;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTablelikeoption) {
	 		listener.enterTablelikeoption(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTablelikeoption) {
	 		listener.exitTablelikeoption(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTablelikeoption) {
			return visitor.visitTablelikeoption(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class TableconstraintContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CONSTRAINT(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONSTRAINT, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public constraintelem(): ConstraintelemContext {
		return this.getTypedRuleContext(ConstraintelemContext, 0) as ConstraintelemContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_tableconstraint;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTableconstraint) {
	 		listener.enterTableconstraint(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTableconstraint) {
	 		listener.exitTableconstraint(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTableconstraint) {
			return visitor.visitTableconstraint(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ConstraintelemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CHECK(): TerminalNode {
		return this.getToken(PostgreSQLParser.CHECK, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public constraintattributespec(): ConstraintattributespecContext {
		return this.getTypedRuleContext(ConstraintattributespecContext, 0) as ConstraintattributespecContext;
	}
	public UNIQUE(): TerminalNode {
		return this.getToken(PostgreSQLParser.UNIQUE, 0);
	}
	public columnlist(): ColumnlistContext {
		return this.getTypedRuleContext(ColumnlistContext, 0) as ColumnlistContext;
	}
	public opt_c_include(): Opt_c_includeContext {
		return this.getTypedRuleContext(Opt_c_includeContext, 0) as Opt_c_includeContext;
	}
	public opt_definition(): Opt_definitionContext {
		return this.getTypedRuleContext(Opt_definitionContext, 0) as Opt_definitionContext;
	}
	public optconstablespace(): OptconstablespaceContext {
		return this.getTypedRuleContext(OptconstablespaceContext, 0) as OptconstablespaceContext;
	}
	public existingindex(): ExistingindexContext {
		return this.getTypedRuleContext(ExistingindexContext, 0) as ExistingindexContext;
	}
	public PRIMARY(): TerminalNode {
		return this.getToken(PostgreSQLParser.PRIMARY, 0);
	}
	public KEY(): TerminalNode {
		return this.getToken(PostgreSQLParser.KEY, 0);
	}
	public EXCLUDE(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXCLUDE, 0);
	}
	public access_method_clause(): Access_method_clauseContext {
		return this.getTypedRuleContext(Access_method_clauseContext, 0) as Access_method_clauseContext;
	}
	public exclusionconstraintlist(): ExclusionconstraintlistContext {
		return this.getTypedRuleContext(ExclusionconstraintlistContext, 0) as ExclusionconstraintlistContext;
	}
	public exclusionwhereclause(): ExclusionwhereclauseContext {
		return this.getTypedRuleContext(ExclusionwhereclauseContext, 0) as ExclusionwhereclauseContext;
	}
	public FOREIGN(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOREIGN, 0);
	}
	public REFERENCES(): TerminalNode {
		return this.getToken(PostgreSQLParser.REFERENCES, 0);
	}
	public qualified_name(): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, 0) as Qualified_nameContext;
	}
	public opt_column_list(): Opt_column_listContext {
		return this.getTypedRuleContext(Opt_column_listContext, 0) as Opt_column_listContext;
	}
	public key_match(): Key_matchContext {
		return this.getTypedRuleContext(Key_matchContext, 0) as Key_matchContext;
	}
	public key_actions(): Key_actionsContext {
		return this.getTypedRuleContext(Key_actionsContext, 0) as Key_actionsContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_constraintelem;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterConstraintelem) {
	 		listener.enterConstraintelem(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitConstraintelem) {
	 		listener.exitConstraintelem(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitConstraintelem) {
			return visitor.visitConstraintelem(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_no_inheritContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public NO(): TerminalNode {
		return this.getToken(PostgreSQLParser.NO, 0);
	}
	public INHERIT(): TerminalNode {
		return this.getToken(PostgreSQLParser.INHERIT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_no_inherit;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_no_inherit) {
	 		listener.enterOpt_no_inherit(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_no_inherit) {
	 		listener.exitOpt_no_inherit(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_no_inherit) {
			return visitor.visitOpt_no_inherit(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_column_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public columnlist(): ColumnlistContext {
		return this.getTypedRuleContext(ColumnlistContext, 0) as ColumnlistContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_column_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_column_list) {
	 		listener.enterOpt_column_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_column_list) {
	 		listener.exitOpt_column_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_column_list) {
			return visitor.visitOpt_column_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ColumnlistContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public columnElem_list(): ColumnElemContext[] {
		return this.getTypedRuleContexts(ColumnElemContext) as ColumnElemContext[];
	}
	public columnElem(i: number): ColumnElemContext {
		return this.getTypedRuleContext(ColumnElemContext, i) as ColumnElemContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_columnlist;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterColumnlist) {
	 		listener.enterColumnlist(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitColumnlist) {
	 		listener.exitColumnlist(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitColumnlist) {
			return visitor.visitColumnlist(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ColumnElemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_columnElem;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterColumnElem) {
	 		listener.enterColumnElem(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitColumnElem) {
	 		listener.exitColumnElem(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitColumnElem) {
			return visitor.visitColumnElem(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_c_includeContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public INCLUDE(): TerminalNode {
		return this.getToken(PostgreSQLParser.INCLUDE, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public columnlist(): ColumnlistContext {
		return this.getTypedRuleContext(ColumnlistContext, 0) as ColumnlistContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_c_include;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_c_include) {
	 		listener.enterOpt_c_include(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_c_include) {
	 		listener.exitOpt_c_include(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_c_include) {
			return visitor.visitOpt_c_include(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Key_matchContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public MATCH(): TerminalNode {
		return this.getToken(PostgreSQLParser.MATCH, 0);
	}
	public FULL(): TerminalNode {
		return this.getToken(PostgreSQLParser.FULL, 0);
	}
	public PARTIAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.PARTIAL, 0);
	}
	public SIMPLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.SIMPLE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_key_match;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterKey_match) {
	 		listener.enterKey_match(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitKey_match) {
	 		listener.exitKey_match(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitKey_match) {
			return visitor.visitKey_match(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ExclusionconstraintlistContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public exclusionconstraintelem_list(): ExclusionconstraintelemContext[] {
		return this.getTypedRuleContexts(ExclusionconstraintelemContext) as ExclusionconstraintelemContext[];
	}
	public exclusionconstraintelem(i: number): ExclusionconstraintelemContext {
		return this.getTypedRuleContext(ExclusionconstraintelemContext, i) as ExclusionconstraintelemContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_exclusionconstraintlist;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterExclusionconstraintlist) {
	 		listener.enterExclusionconstraintlist(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitExclusionconstraintlist) {
	 		listener.exitExclusionconstraintlist(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitExclusionconstraintlist) {
			return visitor.visitExclusionconstraintlist(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ExclusionconstraintelemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public index_elem(): Index_elemContext {
		return this.getTypedRuleContext(Index_elemContext, 0) as Index_elemContext;
	}
	public WITH(): TerminalNode {
		return this.getToken(PostgreSQLParser.WITH, 0);
	}
	public any_operator(): Any_operatorContext {
		return this.getTypedRuleContext(Any_operatorContext, 0) as Any_operatorContext;
	}
	public OPERATOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPERATOR, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_exclusionconstraintelem;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterExclusionconstraintelem) {
	 		listener.enterExclusionconstraintelem(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitExclusionconstraintelem) {
	 		listener.exitExclusionconstraintelem(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitExclusionconstraintelem) {
			return visitor.visitExclusionconstraintelem(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ExclusionwhereclauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public WHERE(): TerminalNode {
		return this.getToken(PostgreSQLParser.WHERE, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_exclusionwhereclause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterExclusionwhereclause) {
	 		listener.enterExclusionwhereclause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitExclusionwhereclause) {
	 		listener.exitExclusionwhereclause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitExclusionwhereclause) {
			return visitor.visitExclusionwhereclause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Key_actionsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public key_update(): Key_updateContext {
		return this.getTypedRuleContext(Key_updateContext, 0) as Key_updateContext;
	}
	public key_delete(): Key_deleteContext {
		return this.getTypedRuleContext(Key_deleteContext, 0) as Key_deleteContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_key_actions;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterKey_actions) {
	 		listener.enterKey_actions(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitKey_actions) {
	 		listener.exitKey_actions(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitKey_actions) {
			return visitor.visitKey_actions(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Key_updateContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ON(): TerminalNode {
		return this.getToken(PostgreSQLParser.ON, 0);
	}
	public UPDATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.UPDATE, 0);
	}
	public key_action(): Key_actionContext {
		return this.getTypedRuleContext(Key_actionContext, 0) as Key_actionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_key_update;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterKey_update) {
	 		listener.enterKey_update(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitKey_update) {
	 		listener.exitKey_update(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitKey_update) {
			return visitor.visitKey_update(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Key_deleteContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ON(): TerminalNode {
		return this.getToken(PostgreSQLParser.ON, 0);
	}
	public DELETE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DELETE_P, 0);
	}
	public key_action(): Key_actionContext {
		return this.getTypedRuleContext(Key_actionContext, 0) as Key_actionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_key_delete;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterKey_delete) {
	 		listener.enterKey_delete(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitKey_delete) {
	 		listener.exitKey_delete(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitKey_delete) {
			return visitor.visitKey_delete(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Key_actionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public NO(): TerminalNode {
		return this.getToken(PostgreSQLParser.NO, 0);
	}
	public ACTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.ACTION, 0);
	}
	public RESTRICT(): TerminalNode {
		return this.getToken(PostgreSQLParser.RESTRICT, 0);
	}
	public CASCADE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CASCADE, 0);
	}
	public SET(): TerminalNode {
		return this.getToken(PostgreSQLParser.SET, 0);
	}
	public NULL_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.NULL_P, 0);
	}
	public DEFAULT(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEFAULT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_key_action;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterKey_action) {
	 		listener.enterKey_action(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitKey_action) {
	 		listener.exitKey_action(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitKey_action) {
			return visitor.visitKey_action(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class OptinheritContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public INHERITS(): TerminalNode {
		return this.getToken(PostgreSQLParser.INHERITS, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public qualified_name_list(): Qualified_name_listContext {
		return this.getTypedRuleContext(Qualified_name_listContext, 0) as Qualified_name_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_optinherit;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOptinherit) {
	 		listener.enterOptinherit(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOptinherit) {
	 		listener.exitOptinherit(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOptinherit) {
			return visitor.visitOptinherit(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class OptpartitionspecContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public partitionspec(): PartitionspecContext {
		return this.getTypedRuleContext(PartitionspecContext, 0) as PartitionspecContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_optpartitionspec;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOptpartitionspec) {
	 		listener.enterOptpartitionspec(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOptpartitionspec) {
	 		listener.exitOptpartitionspec(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOptpartitionspec) {
			return visitor.visitOptpartitionspec(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class PartitionspecContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public PARTITION(): TerminalNode {
		return this.getToken(PostgreSQLParser.PARTITION, 0);
	}
	public BY(): TerminalNode {
		return this.getToken(PostgreSQLParser.BY, 0);
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public part_params(): Part_paramsContext {
		return this.getTypedRuleContext(Part_paramsContext, 0) as Part_paramsContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_partitionspec;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterPartitionspec) {
	 		listener.enterPartitionspec(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitPartitionspec) {
	 		listener.exitPartitionspec(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitPartitionspec) {
			return visitor.visitPartitionspec(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Part_paramsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public part_elem_list(): Part_elemContext[] {
		return this.getTypedRuleContexts(Part_elemContext) as Part_elemContext[];
	}
	public part_elem(i: number): Part_elemContext {
		return this.getTypedRuleContext(Part_elemContext, i) as Part_elemContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_part_params;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterPart_params) {
	 		listener.enterPart_params(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitPart_params) {
	 		listener.exitPart_params(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitPart_params) {
			return visitor.visitPart_params(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Part_elemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
	public opt_collate(): Opt_collateContext {
		return this.getTypedRuleContext(Opt_collateContext, 0) as Opt_collateContext;
	}
	public opt_class(): Opt_classContext {
		return this.getTypedRuleContext(Opt_classContext, 0) as Opt_classContext;
	}
	public func_expr_windowless(): Func_expr_windowlessContext {
		return this.getTypedRuleContext(Func_expr_windowlessContext, 0) as Func_expr_windowlessContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_part_elem;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterPart_elem) {
	 		listener.enterPart_elem(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitPart_elem) {
	 		listener.exitPart_elem(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitPart_elem) {
			return visitor.visitPart_elem(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Table_access_method_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public USING(): TerminalNode {
		return this.getToken(PostgreSQLParser.USING, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_table_access_method_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTable_access_method_clause) {
	 		listener.enterTable_access_method_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTable_access_method_clause) {
	 		listener.exitTable_access_method_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTable_access_method_clause) {
			return visitor.visitTable_access_method_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class OptwithContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public WITH(): TerminalNode {
		return this.getToken(PostgreSQLParser.WITH, 0);
	}
	public reloptions(): ReloptionsContext {
		return this.getTypedRuleContext(ReloptionsContext, 0) as ReloptionsContext;
	}
	public WITHOUT(): TerminalNode {
		return this.getToken(PostgreSQLParser.WITHOUT, 0);
	}
	public OIDS(): TerminalNode {
		return this.getToken(PostgreSQLParser.OIDS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_optwith;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOptwith) {
	 		listener.enterOptwith(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOptwith) {
	 		listener.exitOptwith(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOptwith) {
			return visitor.visitOptwith(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class OncommitoptionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ON(): TerminalNode {
		return this.getToken(PostgreSQLParser.ON, 0);
	}
	public COMMIT(): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMIT, 0);
	}
	public DROP(): TerminalNode {
		return this.getToken(PostgreSQLParser.DROP, 0);
	}
	public DELETE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DELETE_P, 0);
	}
	public ROWS(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROWS, 0);
	}
	public PRESERVE(): TerminalNode {
		return this.getToken(PostgreSQLParser.PRESERVE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_oncommitoption;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOncommitoption) {
	 		listener.enterOncommitoption(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOncommitoption) {
	 		listener.exitOncommitoption(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOncommitoption) {
			return visitor.visitOncommitoption(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class OpttablespaceContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public TABLESPACE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLESPACE, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opttablespace;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpttablespace) {
	 		listener.enterOpttablespace(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpttablespace) {
	 		listener.exitOpttablespace(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpttablespace) {
			return visitor.visitOpttablespace(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class OptconstablespaceContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public USING(): TerminalNode {
		return this.getToken(PostgreSQLParser.USING, 0);
	}
	public INDEX(): TerminalNode {
		return this.getToken(PostgreSQLParser.INDEX, 0);
	}
	public TABLESPACE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLESPACE, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_optconstablespace;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOptconstablespace) {
	 		listener.enterOptconstablespace(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOptconstablespace) {
	 		listener.exitOptconstablespace(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOptconstablespace) {
			return visitor.visitOptconstablespace(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ExistingindexContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public USING(): TerminalNode {
		return this.getToken(PostgreSQLParser.USING, 0);
	}
	public INDEX(): TerminalNode {
		return this.getToken(PostgreSQLParser.INDEX, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_existingindex;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterExistingindex) {
	 		listener.enterExistingindex(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitExistingindex) {
	 		listener.exitExistingindex(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitExistingindex) {
			return visitor.visitExistingindex(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreatestatsstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public STATISTICS(): TerminalNode {
		return this.getToken(PostgreSQLParser.STATISTICS, 0);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
	public opt_name_list(): Opt_name_listContext {
		return this.getTypedRuleContext(Opt_name_listContext, 0) as Opt_name_listContext;
	}
	public ON(): TerminalNode {
		return this.getToken(PostgreSQLParser.ON, 0);
	}
	public expr_list(): Expr_listContext {
		return this.getTypedRuleContext(Expr_listContext, 0) as Expr_listContext;
	}
	public FROM(): TerminalNode {
		return this.getToken(PostgreSQLParser.FROM, 0);
	}
	public from_list(): From_listContext {
		return this.getTypedRuleContext(From_listContext, 0) as From_listContext;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createstatsstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreatestatsstmt) {
	 		listener.enterCreatestatsstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreatestatsstmt) {
	 		listener.exitCreatestatsstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreatestatsstmt) {
			return visitor.visitCreatestatsstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AlterstatsstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public STATISTICS_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.STATISTICS);
	}
	public STATISTICS(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.STATISTICS, i);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
	public SET(): TerminalNode {
		return this.getToken(PostgreSQLParser.SET, 0);
	}
	public signediconst(): SignediconstContext {
		return this.getTypedRuleContext(SignediconstContext, 0) as SignediconstContext;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alterstatsstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlterstatsstmt) {
	 		listener.enterAlterstatsstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlterstatsstmt) {
	 		listener.exitAlterstatsstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlterstatsstmt) {
			return visitor.visitAlterstatsstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreateasstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public opttemp(): OpttempContext {
		return this.getTypedRuleContext(OpttempContext, 0) as OpttempContext;
	}
	public TABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLE, 0);
	}
	public create_as_target(): Create_as_targetContext {
		return this.getTypedRuleContext(Create_as_targetContext, 0) as Create_as_targetContext;
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
	public selectstmt(): SelectstmtContext {
		return this.getTypedRuleContext(SelectstmtContext, 0) as SelectstmtContext;
	}
	public opt_with_data(): Opt_with_dataContext {
		return this.getTypedRuleContext(Opt_with_dataContext, 0) as Opt_with_dataContext;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createasstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreateasstmt) {
	 		listener.enterCreateasstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreateasstmt) {
	 		listener.exitCreateasstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreateasstmt) {
			return visitor.visitCreateasstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Create_as_targetContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public qualified_name(): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, 0) as Qualified_nameContext;
	}
	public opt_column_list(): Opt_column_listContext {
		return this.getTypedRuleContext(Opt_column_listContext, 0) as Opt_column_listContext;
	}
	public table_access_method_clause(): Table_access_method_clauseContext {
		return this.getTypedRuleContext(Table_access_method_clauseContext, 0) as Table_access_method_clauseContext;
	}
	public optwith(): OptwithContext {
		return this.getTypedRuleContext(OptwithContext, 0) as OptwithContext;
	}
	public oncommitoption(): OncommitoptionContext {
		return this.getTypedRuleContext(OncommitoptionContext, 0) as OncommitoptionContext;
	}
	public opttablespace(): OpttablespaceContext {
		return this.getTypedRuleContext(OpttablespaceContext, 0) as OpttablespaceContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_create_as_target;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreate_as_target) {
	 		listener.enterCreate_as_target(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreate_as_target) {
	 		listener.exitCreate_as_target(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreate_as_target) {
			return visitor.visitCreate_as_target(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_with_dataContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public WITH(): TerminalNode {
		return this.getToken(PostgreSQLParser.WITH, 0);
	}
	public DATA_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DATA_P, 0);
	}
	public NO(): TerminalNode {
		return this.getToken(PostgreSQLParser.NO, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_with_data;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_with_data) {
	 		listener.enterOpt_with_data(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_with_data) {
	 		listener.exitOpt_with_data(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_with_data) {
			return visitor.visitOpt_with_data(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreatematviewstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public optnolog(): OptnologContext {
		return this.getTypedRuleContext(OptnologContext, 0) as OptnologContext;
	}
	public MATERIALIZED(): TerminalNode {
		return this.getToken(PostgreSQLParser.MATERIALIZED, 0);
	}
	public VIEW(): TerminalNode {
		return this.getToken(PostgreSQLParser.VIEW, 0);
	}
	public create_mv_target(): Create_mv_targetContext {
		return this.getTypedRuleContext(Create_mv_targetContext, 0) as Create_mv_targetContext;
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
	public selectstmt(): SelectstmtContext {
		return this.getTypedRuleContext(SelectstmtContext, 0) as SelectstmtContext;
	}
	public opt_with_data(): Opt_with_dataContext {
		return this.getTypedRuleContext(Opt_with_dataContext, 0) as Opt_with_dataContext;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_creatematviewstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreatematviewstmt) {
	 		listener.enterCreatematviewstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreatematviewstmt) {
	 		listener.exitCreatematviewstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreatematviewstmt) {
			return visitor.visitCreatematviewstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Create_mv_targetContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public qualified_name(): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, 0) as Qualified_nameContext;
	}
	public opt_column_list(): Opt_column_listContext {
		return this.getTypedRuleContext(Opt_column_listContext, 0) as Opt_column_listContext;
	}
	public table_access_method_clause(): Table_access_method_clauseContext {
		return this.getTypedRuleContext(Table_access_method_clauseContext, 0) as Table_access_method_clauseContext;
	}
	public opt_reloptions(): Opt_reloptionsContext {
		return this.getTypedRuleContext(Opt_reloptionsContext, 0) as Opt_reloptionsContext;
	}
	public opttablespace(): OpttablespaceContext {
		return this.getTypedRuleContext(OpttablespaceContext, 0) as OpttablespaceContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_create_mv_target;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreate_mv_target) {
	 		listener.enterCreate_mv_target(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreate_mv_target) {
	 		listener.exitCreate_mv_target(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreate_mv_target) {
			return visitor.visitCreate_mv_target(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class OptnologContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public UNLOGGED(): TerminalNode {
		return this.getToken(PostgreSQLParser.UNLOGGED, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_optnolog;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOptnolog) {
	 		listener.enterOptnolog(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOptnolog) {
	 		listener.exitOptnolog(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOptnolog) {
			return visitor.visitOptnolog(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class RefreshmatviewstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public REFRESH(): TerminalNode {
		return this.getToken(PostgreSQLParser.REFRESH, 0);
	}
	public MATERIALIZED(): TerminalNode {
		return this.getToken(PostgreSQLParser.MATERIALIZED, 0);
	}
	public VIEW(): TerminalNode {
		return this.getToken(PostgreSQLParser.VIEW, 0);
	}
	public opt_concurrently(): Opt_concurrentlyContext {
		return this.getTypedRuleContext(Opt_concurrentlyContext, 0) as Opt_concurrentlyContext;
	}
	public qualified_name(): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, 0) as Qualified_nameContext;
	}
	public opt_with_data(): Opt_with_dataContext {
		return this.getTypedRuleContext(Opt_with_dataContext, 0) as Opt_with_dataContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_refreshmatviewstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterRefreshmatviewstmt) {
	 		listener.enterRefreshmatviewstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitRefreshmatviewstmt) {
	 		listener.exitRefreshmatviewstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitRefreshmatviewstmt) {
			return visitor.visitRefreshmatviewstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreateseqstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public opttemp(): OpttempContext {
		return this.getTypedRuleContext(OpttempContext, 0) as OpttempContext;
	}
	public SEQUENCE(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEQUENCE, 0);
	}
	public qualified_name(): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, 0) as Qualified_nameContext;
	}
	public optseqoptlist(): OptseqoptlistContext {
		return this.getTypedRuleContext(OptseqoptlistContext, 0) as OptseqoptlistContext;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createseqstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreateseqstmt) {
	 		listener.enterCreateseqstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreateseqstmt) {
	 		listener.exitCreateseqstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreateseqstmt) {
			return visitor.visitCreateseqstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AlterseqstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public SEQUENCE(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEQUENCE, 0);
	}
	public qualified_name(): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, 0) as Qualified_nameContext;
	}
	public seqoptlist(): SeqoptlistContext {
		return this.getTypedRuleContext(SeqoptlistContext, 0) as SeqoptlistContext;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alterseqstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlterseqstmt) {
	 		listener.enterAlterseqstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlterseqstmt) {
	 		listener.exitAlterseqstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlterseqstmt) {
			return visitor.visitAlterseqstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class OptseqoptlistContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public seqoptlist(): SeqoptlistContext {
		return this.getTypedRuleContext(SeqoptlistContext, 0) as SeqoptlistContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_optseqoptlist;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOptseqoptlist) {
	 		listener.enterOptseqoptlist(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOptseqoptlist) {
	 		listener.exitOptseqoptlist(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOptseqoptlist) {
			return visitor.visitOptseqoptlist(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class OptparenthesizedseqoptlistContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public seqoptlist(): SeqoptlistContext {
		return this.getTypedRuleContext(SeqoptlistContext, 0) as SeqoptlistContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_optparenthesizedseqoptlist;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOptparenthesizedseqoptlist) {
	 		listener.enterOptparenthesizedseqoptlist(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOptparenthesizedseqoptlist) {
	 		listener.exitOptparenthesizedseqoptlist(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOptparenthesizedseqoptlist) {
			return visitor.visitOptparenthesizedseqoptlist(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class SeqoptlistContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public seqoptelem_list(): SeqoptelemContext[] {
		return this.getTypedRuleContexts(SeqoptelemContext) as SeqoptelemContext[];
	}
	public seqoptelem(i: number): SeqoptelemContext {
		return this.getTypedRuleContext(SeqoptelemContext, i) as SeqoptelemContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_seqoptlist;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSeqoptlist) {
	 		listener.enterSeqoptlist(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSeqoptlist) {
	 		listener.exitSeqoptlist(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSeqoptlist) {
			return visitor.visitSeqoptlist(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class SeqoptelemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
	public simpletypename(): SimpletypenameContext {
		return this.getTypedRuleContext(SimpletypenameContext, 0) as SimpletypenameContext;
	}
	public CACHE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CACHE, 0);
	}
	public numericonly(): NumericonlyContext {
		return this.getTypedRuleContext(NumericonlyContext, 0) as NumericonlyContext;
	}
	public CYCLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CYCLE, 0);
	}
	public INCREMENT(): TerminalNode {
		return this.getToken(PostgreSQLParser.INCREMENT, 0);
	}
	public opt_by(): Opt_byContext {
		return this.getTypedRuleContext(Opt_byContext, 0) as Opt_byContext;
	}
	public MAXVALUE(): TerminalNode {
		return this.getToken(PostgreSQLParser.MAXVALUE, 0);
	}
	public MINVALUE(): TerminalNode {
		return this.getToken(PostgreSQLParser.MINVALUE, 0);
	}
	public NO(): TerminalNode {
		return this.getToken(PostgreSQLParser.NO, 0);
	}
	public OWNED(): TerminalNode {
		return this.getToken(PostgreSQLParser.OWNED, 0);
	}
	public BY(): TerminalNode {
		return this.getToken(PostgreSQLParser.BY, 0);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
	public SEQUENCE(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEQUENCE, 0);
	}
	public NAME_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.NAME_P, 0);
	}
	public START(): TerminalNode {
		return this.getToken(PostgreSQLParser.START, 0);
	}
	public opt_with(): Opt_withContext {
		return this.getTypedRuleContext(Opt_withContext, 0) as Opt_withContext;
	}
	public RESTART(): TerminalNode {
		return this.getToken(PostgreSQLParser.RESTART, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_seqoptelem;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSeqoptelem) {
	 		listener.enterSeqoptelem(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSeqoptelem) {
	 		listener.exitSeqoptelem(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSeqoptelem) {
			return visitor.visitSeqoptelem(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_byContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public BY(): TerminalNode {
		return this.getToken(PostgreSQLParser.BY, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_by;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_by) {
	 		listener.enterOpt_by(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_by) {
	 		listener.exitOpt_by(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_by) {
			return visitor.visitOpt_by(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class NumericonlyContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public fconst(): FconstContext {
		return this.getTypedRuleContext(FconstContext, 0) as FconstContext;
	}
	public PLUS(): TerminalNode {
		return this.getToken(PostgreSQLParser.PLUS, 0);
	}
	public MINUS(): TerminalNode {
		return this.getToken(PostgreSQLParser.MINUS, 0);
	}
	public signediconst(): SignediconstContext {
		return this.getTypedRuleContext(SignediconstContext, 0) as SignediconstContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_numericonly;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterNumericonly) {
	 		listener.enterNumericonly(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitNumericonly) {
	 		listener.exitNumericonly(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitNumericonly) {
			return visitor.visitNumericonly(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Numericonly_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public numericonly_list(): NumericonlyContext[] {
		return this.getTypedRuleContexts(NumericonlyContext) as NumericonlyContext[];
	}
	public numericonly(i: number): NumericonlyContext {
		return this.getTypedRuleContext(NumericonlyContext, i) as NumericonlyContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_numericonly_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterNumericonly_list) {
	 		listener.enterNumericonly_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitNumericonly_list) {
	 		listener.exitNumericonly_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitNumericonly_list) {
			return visitor.visitNumericonly_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreateplangstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public opt_or_replace(): Opt_or_replaceContext {
		return this.getTypedRuleContext(Opt_or_replaceContext, 0) as Opt_or_replaceContext;
	}
	public opt_trusted(): Opt_trustedContext {
		return this.getTypedRuleContext(Opt_trustedContext, 0) as Opt_trustedContext;
	}
	public opt_procedural(): Opt_proceduralContext {
		return this.getTypedRuleContext(Opt_proceduralContext, 0) as Opt_proceduralContext;
	}
	public LANGUAGE(): TerminalNode {
		return this.getToken(PostgreSQLParser.LANGUAGE, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public HANDLER(): TerminalNode {
		return this.getToken(PostgreSQLParser.HANDLER, 0);
	}
	public handler_name(): Handler_nameContext {
		return this.getTypedRuleContext(Handler_nameContext, 0) as Handler_nameContext;
	}
	public opt_inline_handler(): Opt_inline_handlerContext {
		return this.getTypedRuleContext(Opt_inline_handlerContext, 0) as Opt_inline_handlerContext;
	}
	public opt_validator(): Opt_validatorContext {
		return this.getTypedRuleContext(Opt_validatorContext, 0) as Opt_validatorContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createplangstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreateplangstmt) {
	 		listener.enterCreateplangstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreateplangstmt) {
	 		listener.exitCreateplangstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreateplangstmt) {
			return visitor.visitCreateplangstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_trustedContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public TRUSTED(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRUSTED, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_trusted;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_trusted) {
	 		listener.enterOpt_trusted(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_trusted) {
	 		listener.exitOpt_trusted(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_trusted) {
			return visitor.visitOpt_trusted(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Handler_nameContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public attrs(): AttrsContext {
		return this.getTypedRuleContext(AttrsContext, 0) as AttrsContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_handler_name;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterHandler_name) {
	 		listener.enterHandler_name(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitHandler_name) {
	 		listener.exitHandler_name(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitHandler_name) {
			return visitor.visitHandler_name(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_inline_handlerContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public INLINE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.INLINE_P, 0);
	}
	public handler_name(): Handler_nameContext {
		return this.getTypedRuleContext(Handler_nameContext, 0) as Handler_nameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_inline_handler;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_inline_handler) {
	 		listener.enterOpt_inline_handler(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_inline_handler) {
	 		listener.exitOpt_inline_handler(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_inline_handler) {
			return visitor.visitOpt_inline_handler(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Validator_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public VALIDATOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.VALIDATOR, 0);
	}
	public handler_name(): Handler_nameContext {
		return this.getTypedRuleContext(Handler_nameContext, 0) as Handler_nameContext;
	}
	public NO(): TerminalNode {
		return this.getToken(PostgreSQLParser.NO, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_validator_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterValidator_clause) {
	 		listener.enterValidator_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitValidator_clause) {
	 		listener.exitValidator_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitValidator_clause) {
			return visitor.visitValidator_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_validatorContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public validator_clause(): Validator_clauseContext {
		return this.getTypedRuleContext(Validator_clauseContext, 0) as Validator_clauseContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_validator;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_validator) {
	 		listener.enterOpt_validator(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_validator) {
	 		listener.exitOpt_validator(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_validator) {
			return visitor.visitOpt_validator(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_proceduralContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public PROCEDURAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.PROCEDURAL, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_procedural;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_procedural) {
	 		listener.enterOpt_procedural(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_procedural) {
	 		listener.exitOpt_procedural(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_procedural) {
			return visitor.visitOpt_procedural(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreatetablespacestmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public TABLESPACE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLESPACE, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public opttablespaceowner(): OpttablespaceownerContext {
		return this.getTypedRuleContext(OpttablespaceownerContext, 0) as OpttablespaceownerContext;
	}
	public LOCATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.LOCATION, 0);
	}
	public sconst(): SconstContext {
		return this.getTypedRuleContext(SconstContext, 0) as SconstContext;
	}
	public opt_reloptions(): Opt_reloptionsContext {
		return this.getTypedRuleContext(Opt_reloptionsContext, 0) as Opt_reloptionsContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createtablespacestmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreatetablespacestmt) {
	 		listener.enterCreatetablespacestmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreatetablespacestmt) {
	 		listener.exitCreatetablespacestmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreatetablespacestmt) {
			return visitor.visitCreatetablespacestmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class OpttablespaceownerContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OWNER(): TerminalNode {
		return this.getToken(PostgreSQLParser.OWNER, 0);
	}
	public rolespec(): RolespecContext {
		return this.getTypedRuleContext(RolespecContext, 0) as RolespecContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opttablespaceowner;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpttablespaceowner) {
	 		listener.enterOpttablespaceowner(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpttablespaceowner) {
	 		listener.exitOpttablespaceowner(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpttablespaceowner) {
			return visitor.visitOpttablespaceowner(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class DroptablespacestmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public DROP(): TerminalNode {
		return this.getToken(PostgreSQLParser.DROP, 0);
	}
	public TABLESPACE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLESPACE, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_droptablespacestmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDroptablespacestmt) {
	 		listener.enterDroptablespacestmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDroptablespacestmt) {
	 		listener.exitDroptablespacestmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDroptablespacestmt) {
			return visitor.visitDroptablespacestmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreateextensionstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public EXTENSION(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXTENSION, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public opt_with(): Opt_withContext {
		return this.getTypedRuleContext(Opt_withContext, 0) as Opt_withContext;
	}
	public create_extension_opt_list(): Create_extension_opt_listContext {
		return this.getTypedRuleContext(Create_extension_opt_listContext, 0) as Create_extension_opt_listContext;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createextensionstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreateextensionstmt) {
	 		listener.enterCreateextensionstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreateextensionstmt) {
	 		listener.exitCreateextensionstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreateextensionstmt) {
			return visitor.visitCreateextensionstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Create_extension_opt_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public create_extension_opt_item_list(): Create_extension_opt_itemContext[] {
		return this.getTypedRuleContexts(Create_extension_opt_itemContext) as Create_extension_opt_itemContext[];
	}
	public create_extension_opt_item(i: number): Create_extension_opt_itemContext {
		return this.getTypedRuleContext(Create_extension_opt_itemContext, i) as Create_extension_opt_itemContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_create_extension_opt_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreate_extension_opt_list) {
	 		listener.enterCreate_extension_opt_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreate_extension_opt_list) {
	 		listener.exitCreate_extension_opt_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreate_extension_opt_list) {
			return visitor.visitCreate_extension_opt_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Create_extension_opt_itemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public SCHEMA(): TerminalNode {
		return this.getToken(PostgreSQLParser.SCHEMA, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public VERSION_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.VERSION_P, 0);
	}
	public nonreservedword_or_sconst(): Nonreservedword_or_sconstContext {
		return this.getTypedRuleContext(Nonreservedword_or_sconstContext, 0) as Nonreservedword_or_sconstContext;
	}
	public FROM(): TerminalNode {
		return this.getToken(PostgreSQLParser.FROM, 0);
	}
	public CASCADE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CASCADE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_create_extension_opt_item;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreate_extension_opt_item) {
	 		listener.enterCreate_extension_opt_item(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreate_extension_opt_item) {
	 		listener.exitCreate_extension_opt_item(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreate_extension_opt_item) {
			return visitor.visitCreate_extension_opt_item(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AlterextensionstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public EXTENSION(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXTENSION, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public UPDATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.UPDATE, 0);
	}
	public alter_extension_opt_list(): Alter_extension_opt_listContext {
		return this.getTypedRuleContext(Alter_extension_opt_listContext, 0) as Alter_extension_opt_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alterextensionstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlterextensionstmt) {
	 		listener.enterAlterextensionstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlterextensionstmt) {
	 		listener.exitAlterextensionstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlterextensionstmt) {
			return visitor.visitAlterextensionstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Alter_extension_opt_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public alter_extension_opt_item_list(): Alter_extension_opt_itemContext[] {
		return this.getTypedRuleContexts(Alter_extension_opt_itemContext) as Alter_extension_opt_itemContext[];
	}
	public alter_extension_opt_item(i: number): Alter_extension_opt_itemContext {
		return this.getTypedRuleContext(Alter_extension_opt_itemContext, i) as Alter_extension_opt_itemContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alter_extension_opt_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlter_extension_opt_list) {
	 		listener.enterAlter_extension_opt_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlter_extension_opt_list) {
	 		listener.exitAlter_extension_opt_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlter_extension_opt_list) {
			return visitor.visitAlter_extension_opt_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Alter_extension_opt_itemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public TO(): TerminalNode {
		return this.getToken(PostgreSQLParser.TO, 0);
	}
	public nonreservedword_or_sconst(): Nonreservedword_or_sconstContext {
		return this.getTypedRuleContext(Nonreservedword_or_sconstContext, 0) as Nonreservedword_or_sconstContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alter_extension_opt_item;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlter_extension_opt_item) {
	 		listener.enterAlter_extension_opt_item(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlter_extension_opt_item) {
	 		listener.exitAlter_extension_opt_item(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlter_extension_opt_item) {
			return visitor.visitAlter_extension_opt_item(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AlterextensioncontentsstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public EXTENSION(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXTENSION, 0);
	}
	public name_list(): NameContext[] {
		return this.getTypedRuleContexts(NameContext) as NameContext[];
	}
	public name(i: number): NameContext {
		return this.getTypedRuleContext(NameContext, i) as NameContext;
	}
	public add_drop(): Add_dropContext {
		return this.getTypedRuleContext(Add_dropContext, 0) as Add_dropContext;
	}
	public object_type_name(): Object_type_nameContext {
		return this.getTypedRuleContext(Object_type_nameContext, 0) as Object_type_nameContext;
	}
	public object_type_any_name(): Object_type_any_nameContext {
		return this.getTypedRuleContext(Object_type_any_nameContext, 0) as Object_type_any_nameContext;
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
	public AGGREGATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.AGGREGATE, 0);
	}
	public aggregate_with_argtypes(): Aggregate_with_argtypesContext {
		return this.getTypedRuleContext(Aggregate_with_argtypesContext, 0) as Aggregate_with_argtypesContext;
	}
	public CAST(): TerminalNode {
		return this.getToken(PostgreSQLParser.CAST, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public typename_list(): TypenameContext[] {
		return this.getTypedRuleContexts(TypenameContext) as TypenameContext[];
	}
	public typename(i: number): TypenameContext {
		return this.getTypedRuleContext(TypenameContext, i) as TypenameContext;
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public DOMAIN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DOMAIN_P, 0);
	}
	public FUNCTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.FUNCTION, 0);
	}
	public function_with_argtypes(): Function_with_argtypesContext {
		return this.getTypedRuleContext(Function_with_argtypesContext, 0) as Function_with_argtypesContext;
	}
	public OPERATOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPERATOR, 0);
	}
	public operator_with_argtypes(): Operator_with_argtypesContext {
		return this.getTypedRuleContext(Operator_with_argtypesContext, 0) as Operator_with_argtypesContext;
	}
	public CLASS(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLASS, 0);
	}
	public USING(): TerminalNode {
		return this.getToken(PostgreSQLParser.USING, 0);
	}
	public FAMILY(): TerminalNode {
		return this.getToken(PostgreSQLParser.FAMILY, 0);
	}
	public PROCEDURE(): TerminalNode {
		return this.getToken(PostgreSQLParser.PROCEDURE, 0);
	}
	public ROUTINE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROUTINE, 0);
	}
	public TRANSFORM(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRANSFORM, 0);
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
	public LANGUAGE(): TerminalNode {
		return this.getToken(PostgreSQLParser.LANGUAGE, 0);
	}
	public TYPE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TYPE_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alterextensioncontentsstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlterextensioncontentsstmt) {
	 		listener.enterAlterextensioncontentsstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlterextensioncontentsstmt) {
	 		listener.exitAlterextensioncontentsstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlterextensioncontentsstmt) {
			return visitor.visitAlterextensioncontentsstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreatefdwstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public FOREIGN(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOREIGN, 0);
	}
	public DATA_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DATA_P, 0);
	}
	public WRAPPER(): TerminalNode {
		return this.getToken(PostgreSQLParser.WRAPPER, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public opt_fdw_options(): Opt_fdw_optionsContext {
		return this.getTypedRuleContext(Opt_fdw_optionsContext, 0) as Opt_fdw_optionsContext;
	}
	public create_generic_options(): Create_generic_optionsContext {
		return this.getTypedRuleContext(Create_generic_optionsContext, 0) as Create_generic_optionsContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createfdwstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreatefdwstmt) {
	 		listener.enterCreatefdwstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreatefdwstmt) {
	 		listener.exitCreatefdwstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreatefdwstmt) {
			return visitor.visitCreatefdwstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Fdw_optionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public HANDLER(): TerminalNode {
		return this.getToken(PostgreSQLParser.HANDLER, 0);
	}
	public handler_name(): Handler_nameContext {
		return this.getTypedRuleContext(Handler_nameContext, 0) as Handler_nameContext;
	}
	public NO(): TerminalNode {
		return this.getToken(PostgreSQLParser.NO, 0);
	}
	public VALIDATOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.VALIDATOR, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_fdw_option;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFdw_option) {
	 		listener.enterFdw_option(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFdw_option) {
	 		listener.exitFdw_option(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFdw_option) {
			return visitor.visitFdw_option(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Fdw_optionsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public fdw_option_list(): Fdw_optionContext[] {
		return this.getTypedRuleContexts(Fdw_optionContext) as Fdw_optionContext[];
	}
	public fdw_option(i: number): Fdw_optionContext {
		return this.getTypedRuleContext(Fdw_optionContext, i) as Fdw_optionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_fdw_options;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFdw_options) {
	 		listener.enterFdw_options(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFdw_options) {
	 		listener.exitFdw_options(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFdw_options) {
			return visitor.visitFdw_options(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_fdw_optionsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public fdw_options(): Fdw_optionsContext {
		return this.getTypedRuleContext(Fdw_optionsContext, 0) as Fdw_optionsContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_fdw_options;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_fdw_options) {
	 		listener.enterOpt_fdw_options(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_fdw_options) {
	 		listener.exitOpt_fdw_options(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_fdw_options) {
			return visitor.visitOpt_fdw_options(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AlterfdwstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public FOREIGN(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOREIGN, 0);
	}
	public DATA_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DATA_P, 0);
	}
	public WRAPPER(): TerminalNode {
		return this.getToken(PostgreSQLParser.WRAPPER, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public opt_fdw_options(): Opt_fdw_optionsContext {
		return this.getTypedRuleContext(Opt_fdw_optionsContext, 0) as Opt_fdw_optionsContext;
	}
	public alter_generic_options(): Alter_generic_optionsContext {
		return this.getTypedRuleContext(Alter_generic_optionsContext, 0) as Alter_generic_optionsContext;
	}
	public fdw_options(): Fdw_optionsContext {
		return this.getTypedRuleContext(Fdw_optionsContext, 0) as Fdw_optionsContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alterfdwstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlterfdwstmt) {
	 		listener.enterAlterfdwstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlterfdwstmt) {
	 		listener.exitAlterfdwstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlterfdwstmt) {
			return visitor.visitAlterfdwstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Create_generic_optionsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OPTIONS(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPTIONS, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public generic_option_list(): Generic_option_listContext {
		return this.getTypedRuleContext(Generic_option_listContext, 0) as Generic_option_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_create_generic_options;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreate_generic_options) {
	 		listener.enterCreate_generic_options(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreate_generic_options) {
	 		listener.exitCreate_generic_options(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreate_generic_options) {
			return visitor.visitCreate_generic_options(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Generic_option_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public generic_option_elem_list(): Generic_option_elemContext[] {
		return this.getTypedRuleContexts(Generic_option_elemContext) as Generic_option_elemContext[];
	}
	public generic_option_elem(i: number): Generic_option_elemContext {
		return this.getTypedRuleContext(Generic_option_elemContext, i) as Generic_option_elemContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_generic_option_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterGeneric_option_list) {
	 		listener.enterGeneric_option_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitGeneric_option_list) {
	 		listener.exitGeneric_option_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitGeneric_option_list) {
			return visitor.visitGeneric_option_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Alter_generic_optionsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OPTIONS(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPTIONS, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public alter_generic_option_list(): Alter_generic_option_listContext {
		return this.getTypedRuleContext(Alter_generic_option_listContext, 0) as Alter_generic_option_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alter_generic_options;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlter_generic_options) {
	 		listener.enterAlter_generic_options(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlter_generic_options) {
	 		listener.exitAlter_generic_options(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlter_generic_options) {
			return visitor.visitAlter_generic_options(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Alter_generic_option_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public alter_generic_option_elem_list(): Alter_generic_option_elemContext[] {
		return this.getTypedRuleContexts(Alter_generic_option_elemContext) as Alter_generic_option_elemContext[];
	}
	public alter_generic_option_elem(i: number): Alter_generic_option_elemContext {
		return this.getTypedRuleContext(Alter_generic_option_elemContext, i) as Alter_generic_option_elemContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alter_generic_option_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlter_generic_option_list) {
	 		listener.enterAlter_generic_option_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlter_generic_option_list) {
	 		listener.exitAlter_generic_option_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlter_generic_option_list) {
			return visitor.visitAlter_generic_option_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Alter_generic_option_elemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public generic_option_elem(): Generic_option_elemContext {
		return this.getTypedRuleContext(Generic_option_elemContext, 0) as Generic_option_elemContext;
	}
	public SET(): TerminalNode {
		return this.getToken(PostgreSQLParser.SET, 0);
	}
	public ADD_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.ADD_P, 0);
	}
	public DROP(): TerminalNode {
		return this.getToken(PostgreSQLParser.DROP, 0);
	}
	public generic_option_name(): Generic_option_nameContext {
		return this.getTypedRuleContext(Generic_option_nameContext, 0) as Generic_option_nameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alter_generic_option_elem;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlter_generic_option_elem) {
	 		listener.enterAlter_generic_option_elem(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlter_generic_option_elem) {
	 		listener.exitAlter_generic_option_elem(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlter_generic_option_elem) {
			return visitor.visitAlter_generic_option_elem(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Generic_option_elemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public generic_option_name(): Generic_option_nameContext {
		return this.getTypedRuleContext(Generic_option_nameContext, 0) as Generic_option_nameContext;
	}
	public generic_option_arg(): Generic_option_argContext {
		return this.getTypedRuleContext(Generic_option_argContext, 0) as Generic_option_argContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_generic_option_elem;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterGeneric_option_elem) {
	 		listener.enterGeneric_option_elem(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitGeneric_option_elem) {
	 		listener.exitGeneric_option_elem(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitGeneric_option_elem) {
			return visitor.visitGeneric_option_elem(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Generic_option_nameContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public collabel(): CollabelContext {
		return this.getTypedRuleContext(CollabelContext, 0) as CollabelContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_generic_option_name;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterGeneric_option_name) {
	 		listener.enterGeneric_option_name(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitGeneric_option_name) {
	 		listener.exitGeneric_option_name(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitGeneric_option_name) {
			return visitor.visitGeneric_option_name(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Generic_option_argContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public sconst(): SconstContext {
		return this.getTypedRuleContext(SconstContext, 0) as SconstContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_generic_option_arg;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterGeneric_option_arg) {
	 		listener.enterGeneric_option_arg(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitGeneric_option_arg) {
	 		listener.exitGeneric_option_arg(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitGeneric_option_arg) {
			return visitor.visitGeneric_option_arg(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreateforeignserverstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public SERVER(): TerminalNode {
		return this.getToken(PostgreSQLParser.SERVER, 0);
	}
	public name_list(): NameContext[] {
		return this.getTypedRuleContexts(NameContext) as NameContext[];
	}
	public name(i: number): NameContext {
		return this.getTypedRuleContext(NameContext, i) as NameContext;
	}
	public opt_type(): Opt_typeContext {
		return this.getTypedRuleContext(Opt_typeContext, 0) as Opt_typeContext;
	}
	public opt_foreign_server_version(): Opt_foreign_server_versionContext {
		return this.getTypedRuleContext(Opt_foreign_server_versionContext, 0) as Opt_foreign_server_versionContext;
	}
	public FOREIGN(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOREIGN, 0);
	}
	public DATA_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DATA_P, 0);
	}
	public WRAPPER(): TerminalNode {
		return this.getToken(PostgreSQLParser.WRAPPER, 0);
	}
	public create_generic_options(): Create_generic_optionsContext {
		return this.getTypedRuleContext(Create_generic_optionsContext, 0) as Create_generic_optionsContext;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createforeignserverstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreateforeignserverstmt) {
	 		listener.enterCreateforeignserverstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreateforeignserverstmt) {
	 		listener.exitCreateforeignserverstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreateforeignserverstmt) {
			return visitor.visitCreateforeignserverstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_typeContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public TYPE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TYPE_P, 0);
	}
	public sconst(): SconstContext {
		return this.getTypedRuleContext(SconstContext, 0) as SconstContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_type;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_type) {
	 		listener.enterOpt_type(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_type) {
	 		listener.exitOpt_type(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_type) {
			return visitor.visitOpt_type(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Foreign_server_versionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public VERSION_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.VERSION_P, 0);
	}
	public sconst(): SconstContext {
		return this.getTypedRuleContext(SconstContext, 0) as SconstContext;
	}
	public NULL_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.NULL_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_foreign_server_version;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterForeign_server_version) {
	 		listener.enterForeign_server_version(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitForeign_server_version) {
	 		listener.exitForeign_server_version(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitForeign_server_version) {
			return visitor.visitForeign_server_version(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_foreign_server_versionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public foreign_server_version(): Foreign_server_versionContext {
		return this.getTypedRuleContext(Foreign_server_versionContext, 0) as Foreign_server_versionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_foreign_server_version;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_foreign_server_version) {
	 		listener.enterOpt_foreign_server_version(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_foreign_server_version) {
	 		listener.exitOpt_foreign_server_version(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_foreign_server_version) {
			return visitor.visitOpt_foreign_server_version(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AlterforeignserverstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public SERVER(): TerminalNode {
		return this.getToken(PostgreSQLParser.SERVER, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public alter_generic_options(): Alter_generic_optionsContext {
		return this.getTypedRuleContext(Alter_generic_optionsContext, 0) as Alter_generic_optionsContext;
	}
	public foreign_server_version(): Foreign_server_versionContext {
		return this.getTypedRuleContext(Foreign_server_versionContext, 0) as Foreign_server_versionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alterforeignserverstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlterforeignserverstmt) {
	 		listener.enterAlterforeignserverstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlterforeignserverstmt) {
	 		listener.exitAlterforeignserverstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlterforeignserverstmt) {
			return visitor.visitAlterforeignserverstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreateforeigntablestmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public FOREIGN(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOREIGN, 0);
	}
	public TABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLE, 0);
	}
	public qualified_name_list(): Qualified_nameContext[] {
		return this.getTypedRuleContexts(Qualified_nameContext) as Qualified_nameContext[];
	}
	public qualified_name(i: number): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, i) as Qualified_nameContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public opttableelementlist(): OpttableelementlistContext {
		return this.getTypedRuleContext(OpttableelementlistContext, 0) as OpttableelementlistContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public optinherit(): OptinheritContext {
		return this.getTypedRuleContext(OptinheritContext, 0) as OptinheritContext;
	}
	public SERVER(): TerminalNode {
		return this.getToken(PostgreSQLParser.SERVER, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public create_generic_options(): Create_generic_optionsContext {
		return this.getTypedRuleContext(Create_generic_optionsContext, 0) as Create_generic_optionsContext;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
	public PARTITION(): TerminalNode {
		return this.getToken(PostgreSQLParser.PARTITION, 0);
	}
	public OF(): TerminalNode {
		return this.getToken(PostgreSQLParser.OF, 0);
	}
	public opttypedtableelementlist(): OpttypedtableelementlistContext {
		return this.getTypedRuleContext(OpttypedtableelementlistContext, 0) as OpttypedtableelementlistContext;
	}
	public partitionboundspec(): PartitionboundspecContext {
		return this.getTypedRuleContext(PartitionboundspecContext, 0) as PartitionboundspecContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createforeigntablestmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreateforeigntablestmt) {
	 		listener.enterCreateforeigntablestmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreateforeigntablestmt) {
	 		listener.exitCreateforeigntablestmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreateforeigntablestmt) {
			return visitor.visitCreateforeigntablestmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ImportforeignschemastmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public IMPORT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IMPORT_P, 0);
	}
	public FOREIGN(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOREIGN, 0);
	}
	public SCHEMA(): TerminalNode {
		return this.getToken(PostgreSQLParser.SCHEMA, 0);
	}
	public name_list(): NameContext[] {
		return this.getTypedRuleContexts(NameContext) as NameContext[];
	}
	public name(i: number): NameContext {
		return this.getTypedRuleContext(NameContext, i) as NameContext;
	}
	public import_qualification(): Import_qualificationContext {
		return this.getTypedRuleContext(Import_qualificationContext, 0) as Import_qualificationContext;
	}
	public FROM(): TerminalNode {
		return this.getToken(PostgreSQLParser.FROM, 0);
	}
	public SERVER(): TerminalNode {
		return this.getToken(PostgreSQLParser.SERVER, 0);
	}
	public INTO(): TerminalNode {
		return this.getToken(PostgreSQLParser.INTO, 0);
	}
	public create_generic_options(): Create_generic_optionsContext {
		return this.getTypedRuleContext(Create_generic_optionsContext, 0) as Create_generic_optionsContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_importforeignschemastmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterImportforeignschemastmt) {
	 		listener.enterImportforeignschemastmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitImportforeignschemastmt) {
	 		listener.exitImportforeignschemastmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitImportforeignschemastmt) {
			return visitor.visitImportforeignschemastmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Import_qualification_typeContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public LIMIT(): TerminalNode {
		return this.getToken(PostgreSQLParser.LIMIT, 0);
	}
	public TO(): TerminalNode {
		return this.getToken(PostgreSQLParser.TO, 0);
	}
	public EXCEPT(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXCEPT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_import_qualification_type;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterImport_qualification_type) {
	 		listener.enterImport_qualification_type(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitImport_qualification_type) {
	 		listener.exitImport_qualification_type(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitImport_qualification_type) {
			return visitor.visitImport_qualification_type(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Import_qualificationContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public import_qualification_type(): Import_qualification_typeContext {
		return this.getTypedRuleContext(Import_qualification_typeContext, 0) as Import_qualification_typeContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public relation_expr_list(): Relation_expr_listContext {
		return this.getTypedRuleContext(Relation_expr_listContext, 0) as Relation_expr_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_import_qualification;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterImport_qualification) {
	 		listener.enterImport_qualification(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitImport_qualification) {
	 		listener.exitImport_qualification(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitImport_qualification) {
			return visitor.visitImport_qualification(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreateusermappingstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public USER(): TerminalNode {
		return this.getToken(PostgreSQLParser.USER, 0);
	}
	public MAPPING(): TerminalNode {
		return this.getToken(PostgreSQLParser.MAPPING, 0);
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
	public auth_ident(): Auth_identContext {
		return this.getTypedRuleContext(Auth_identContext, 0) as Auth_identContext;
	}
	public SERVER(): TerminalNode {
		return this.getToken(PostgreSQLParser.SERVER, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public create_generic_options(): Create_generic_optionsContext {
		return this.getTypedRuleContext(Create_generic_optionsContext, 0) as Create_generic_optionsContext;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createusermappingstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreateusermappingstmt) {
	 		listener.enterCreateusermappingstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreateusermappingstmt) {
	 		listener.exitCreateusermappingstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreateusermappingstmt) {
			return visitor.visitCreateusermappingstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Auth_identContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public rolespec(): RolespecContext {
		return this.getTypedRuleContext(RolespecContext, 0) as RolespecContext;
	}
	public USER(): TerminalNode {
		return this.getToken(PostgreSQLParser.USER, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_auth_ident;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAuth_ident) {
	 		listener.enterAuth_ident(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAuth_ident) {
	 		listener.exitAuth_ident(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAuth_ident) {
			return visitor.visitAuth_ident(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class DropusermappingstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public DROP(): TerminalNode {
		return this.getToken(PostgreSQLParser.DROP, 0);
	}
	public USER(): TerminalNode {
		return this.getToken(PostgreSQLParser.USER, 0);
	}
	public MAPPING(): TerminalNode {
		return this.getToken(PostgreSQLParser.MAPPING, 0);
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
	public auth_ident(): Auth_identContext {
		return this.getTypedRuleContext(Auth_identContext, 0) as Auth_identContext;
	}
	public SERVER(): TerminalNode {
		return this.getToken(PostgreSQLParser.SERVER, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_dropusermappingstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDropusermappingstmt) {
	 		listener.enterDropusermappingstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDropusermappingstmt) {
	 		listener.exitDropusermappingstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDropusermappingstmt) {
			return visitor.visitDropusermappingstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AlterusermappingstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public USER(): TerminalNode {
		return this.getToken(PostgreSQLParser.USER, 0);
	}
	public MAPPING(): TerminalNode {
		return this.getToken(PostgreSQLParser.MAPPING, 0);
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
	public auth_ident(): Auth_identContext {
		return this.getTypedRuleContext(Auth_identContext, 0) as Auth_identContext;
	}
	public SERVER(): TerminalNode {
		return this.getToken(PostgreSQLParser.SERVER, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public alter_generic_options(): Alter_generic_optionsContext {
		return this.getTypedRuleContext(Alter_generic_optionsContext, 0) as Alter_generic_optionsContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alterusermappingstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlterusermappingstmt) {
	 		listener.enterAlterusermappingstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlterusermappingstmt) {
	 		listener.exitAlterusermappingstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlterusermappingstmt) {
			return visitor.visitAlterusermappingstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreatepolicystmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public POLICY(): TerminalNode {
		return this.getToken(PostgreSQLParser.POLICY, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public ON(): TerminalNode {
		return this.getToken(PostgreSQLParser.ON, 0);
	}
	public qualified_name(): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, 0) as Qualified_nameContext;
	}
	public rowsecuritydefaultpermissive(): RowsecuritydefaultpermissiveContext {
		return this.getTypedRuleContext(RowsecuritydefaultpermissiveContext, 0) as RowsecuritydefaultpermissiveContext;
	}
	public rowsecuritydefaultforcmd(): RowsecuritydefaultforcmdContext {
		return this.getTypedRuleContext(RowsecuritydefaultforcmdContext, 0) as RowsecuritydefaultforcmdContext;
	}
	public rowsecuritydefaulttorole(): RowsecuritydefaulttoroleContext {
		return this.getTypedRuleContext(RowsecuritydefaulttoroleContext, 0) as RowsecuritydefaulttoroleContext;
	}
	public rowsecurityoptionalexpr(): RowsecurityoptionalexprContext {
		return this.getTypedRuleContext(RowsecurityoptionalexprContext, 0) as RowsecurityoptionalexprContext;
	}
	public rowsecurityoptionalwithcheck(): RowsecurityoptionalwithcheckContext {
		return this.getTypedRuleContext(RowsecurityoptionalwithcheckContext, 0) as RowsecurityoptionalwithcheckContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createpolicystmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreatepolicystmt) {
	 		listener.enterCreatepolicystmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreatepolicystmt) {
	 		listener.exitCreatepolicystmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreatepolicystmt) {
			return visitor.visitCreatepolicystmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AlterpolicystmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public POLICY(): TerminalNode {
		return this.getToken(PostgreSQLParser.POLICY, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public ON(): TerminalNode {
		return this.getToken(PostgreSQLParser.ON, 0);
	}
	public qualified_name(): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, 0) as Qualified_nameContext;
	}
	public rowsecurityoptionaltorole(): RowsecurityoptionaltoroleContext {
		return this.getTypedRuleContext(RowsecurityoptionaltoroleContext, 0) as RowsecurityoptionaltoroleContext;
	}
	public rowsecurityoptionalexpr(): RowsecurityoptionalexprContext {
		return this.getTypedRuleContext(RowsecurityoptionalexprContext, 0) as RowsecurityoptionalexprContext;
	}
	public rowsecurityoptionalwithcheck(): RowsecurityoptionalwithcheckContext {
		return this.getTypedRuleContext(RowsecurityoptionalwithcheckContext, 0) as RowsecurityoptionalwithcheckContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alterpolicystmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlterpolicystmt) {
	 		listener.enterAlterpolicystmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlterpolicystmt) {
	 		listener.exitAlterpolicystmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlterpolicystmt) {
			return visitor.visitAlterpolicystmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class RowsecurityoptionalexprContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public USING(): TerminalNode {
		return this.getToken(PostgreSQLParser.USING, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_rowsecurityoptionalexpr;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterRowsecurityoptionalexpr) {
	 		listener.enterRowsecurityoptionalexpr(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitRowsecurityoptionalexpr) {
	 		listener.exitRowsecurityoptionalexpr(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitRowsecurityoptionalexpr) {
			return visitor.visitRowsecurityoptionalexpr(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class RowsecurityoptionalwithcheckContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public WITH(): TerminalNode {
		return this.getToken(PostgreSQLParser.WITH, 0);
	}
	public CHECK(): TerminalNode {
		return this.getToken(PostgreSQLParser.CHECK, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_rowsecurityoptionalwithcheck;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterRowsecurityoptionalwithcheck) {
	 		listener.enterRowsecurityoptionalwithcheck(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitRowsecurityoptionalwithcheck) {
	 		listener.exitRowsecurityoptionalwithcheck(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitRowsecurityoptionalwithcheck) {
			return visitor.visitRowsecurityoptionalwithcheck(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class RowsecuritydefaulttoroleContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public TO(): TerminalNode {
		return this.getToken(PostgreSQLParser.TO, 0);
	}
	public role_list(): Role_listContext {
		return this.getTypedRuleContext(Role_listContext, 0) as Role_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_rowsecuritydefaulttorole;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterRowsecuritydefaulttorole) {
	 		listener.enterRowsecuritydefaulttorole(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitRowsecuritydefaulttorole) {
	 		listener.exitRowsecuritydefaulttorole(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitRowsecuritydefaulttorole) {
			return visitor.visitRowsecuritydefaulttorole(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class RowsecurityoptionaltoroleContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public TO(): TerminalNode {
		return this.getToken(PostgreSQLParser.TO, 0);
	}
	public role_list(): Role_listContext {
		return this.getTypedRuleContext(Role_listContext, 0) as Role_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_rowsecurityoptionaltorole;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterRowsecurityoptionaltorole) {
	 		listener.enterRowsecurityoptionaltorole(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitRowsecurityoptionaltorole) {
	 		listener.exitRowsecurityoptionaltorole(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitRowsecurityoptionaltorole) {
			return visitor.visitRowsecurityoptionaltorole(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class RowsecuritydefaultpermissiveContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
	public identifier(): IdentifierContext {
		return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_rowsecuritydefaultpermissive;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterRowsecuritydefaultpermissive) {
	 		listener.enterRowsecuritydefaultpermissive(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitRowsecuritydefaultpermissive) {
	 		listener.exitRowsecuritydefaultpermissive(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitRowsecuritydefaultpermissive) {
			return visitor.visitRowsecuritydefaultpermissive(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class RowsecuritydefaultforcmdContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
	public row_security_cmd(): Row_security_cmdContext {
		return this.getTypedRuleContext(Row_security_cmdContext, 0) as Row_security_cmdContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_rowsecuritydefaultforcmd;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterRowsecuritydefaultforcmd) {
	 		listener.enterRowsecuritydefaultforcmd(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitRowsecuritydefaultforcmd) {
	 		listener.exitRowsecuritydefaultforcmd(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitRowsecuritydefaultforcmd) {
			return visitor.visitRowsecuritydefaultforcmd(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Row_security_cmdContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALL(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALL, 0);
	}
	public SELECT(): TerminalNode {
		return this.getToken(PostgreSQLParser.SELECT, 0);
	}
	public INSERT(): TerminalNode {
		return this.getToken(PostgreSQLParser.INSERT, 0);
	}
	public UPDATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.UPDATE, 0);
	}
	public DELETE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DELETE_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_row_security_cmd;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterRow_security_cmd) {
	 		listener.enterRow_security_cmd(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitRow_security_cmd) {
	 		listener.exitRow_security_cmd(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitRow_security_cmd) {
			return visitor.visitRow_security_cmd(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreateamstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public ACCESS(): TerminalNode {
		return this.getToken(PostgreSQLParser.ACCESS, 0);
	}
	public METHOD(): TerminalNode {
		return this.getToken(PostgreSQLParser.METHOD, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public TYPE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TYPE_P, 0);
	}
	public am_type(): Am_typeContext {
		return this.getTypedRuleContext(Am_typeContext, 0) as Am_typeContext;
	}
	public HANDLER(): TerminalNode {
		return this.getToken(PostgreSQLParser.HANDLER, 0);
	}
	public handler_name(): Handler_nameContext {
		return this.getTypedRuleContext(Handler_nameContext, 0) as Handler_nameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createamstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreateamstmt) {
	 		listener.enterCreateamstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreateamstmt) {
	 		listener.exitCreateamstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreateamstmt) {
			return visitor.visitCreateamstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Am_typeContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public INDEX(): TerminalNode {
		return this.getToken(PostgreSQLParser.INDEX, 0);
	}
	public TABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_am_type;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAm_type) {
	 		listener.enterAm_type(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAm_type) {
	 		listener.exitAm_type(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAm_type) {
			return visitor.visitAm_type(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreatetrigstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public TRIGGER(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRIGGER, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public triggeractiontime(): TriggeractiontimeContext {
		return this.getTypedRuleContext(TriggeractiontimeContext, 0) as TriggeractiontimeContext;
	}
	public triggerevents(): TriggereventsContext {
		return this.getTypedRuleContext(TriggereventsContext, 0) as TriggereventsContext;
	}
	public ON(): TerminalNode {
		return this.getToken(PostgreSQLParser.ON, 0);
	}
	public qualified_name(): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, 0) as Qualified_nameContext;
	}
	public triggerreferencing(): TriggerreferencingContext {
		return this.getTypedRuleContext(TriggerreferencingContext, 0) as TriggerreferencingContext;
	}
	public triggerforspec(): TriggerforspecContext {
		return this.getTypedRuleContext(TriggerforspecContext, 0) as TriggerforspecContext;
	}
	public triggerwhen(): TriggerwhenContext {
		return this.getTypedRuleContext(TriggerwhenContext, 0) as TriggerwhenContext;
	}
	public EXECUTE(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXECUTE, 0);
	}
	public function_or_procedure(): Function_or_procedureContext {
		return this.getTypedRuleContext(Function_or_procedureContext, 0) as Function_or_procedureContext;
	}
	public func_name(): Func_nameContext {
		return this.getTypedRuleContext(Func_nameContext, 0) as Func_nameContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public triggerfuncargs(): TriggerfuncargsContext {
		return this.getTypedRuleContext(TriggerfuncargsContext, 0) as TriggerfuncargsContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public CONSTRAINT(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONSTRAINT, 0);
	}
	public AFTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.AFTER, 0);
	}
	public optconstrfromtable(): OptconstrfromtableContext {
		return this.getTypedRuleContext(OptconstrfromtableContext, 0) as OptconstrfromtableContext;
	}
	public constraintattributespec(): ConstraintattributespecContext {
		return this.getTypedRuleContext(ConstraintattributespecContext, 0) as ConstraintattributespecContext;
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
	public EACH(): TerminalNode {
		return this.getToken(PostgreSQLParser.EACH, 0);
	}
	public ROW(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROW, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createtrigstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreatetrigstmt) {
	 		listener.enterCreatetrigstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreatetrigstmt) {
	 		listener.exitCreatetrigstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreatetrigstmt) {
			return visitor.visitCreatetrigstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class TriggeractiontimeContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public BEFORE(): TerminalNode {
		return this.getToken(PostgreSQLParser.BEFORE, 0);
	}
	public AFTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.AFTER, 0);
	}
	public INSTEAD(): TerminalNode {
		return this.getToken(PostgreSQLParser.INSTEAD, 0);
	}
	public OF(): TerminalNode {
		return this.getToken(PostgreSQLParser.OF, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_triggeractiontime;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTriggeractiontime) {
	 		listener.enterTriggeractiontime(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTriggeractiontime) {
	 		listener.exitTriggeractiontime(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTriggeractiontime) {
			return visitor.visitTriggeractiontime(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class TriggereventsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public triggeroneevent_list(): TriggeroneeventContext[] {
		return this.getTypedRuleContexts(TriggeroneeventContext) as TriggeroneeventContext[];
	}
	public triggeroneevent(i: number): TriggeroneeventContext {
		return this.getTypedRuleContext(TriggeroneeventContext, i) as TriggeroneeventContext;
	}
	public OR_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.OR);
	}
	public OR(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.OR, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_triggerevents;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTriggerevents) {
	 		listener.enterTriggerevents(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTriggerevents) {
	 		listener.exitTriggerevents(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTriggerevents) {
			return visitor.visitTriggerevents(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class TriggeroneeventContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public INSERT(): TerminalNode {
		return this.getToken(PostgreSQLParser.INSERT, 0);
	}
	public DELETE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DELETE_P, 0);
	}
	public UPDATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.UPDATE, 0);
	}
	public OF(): TerminalNode {
		return this.getToken(PostgreSQLParser.OF, 0);
	}
	public columnlist(): ColumnlistContext {
		return this.getTypedRuleContext(ColumnlistContext, 0) as ColumnlistContext;
	}
	public TRUNCATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRUNCATE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_triggeroneevent;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTriggeroneevent) {
	 		listener.enterTriggeroneevent(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTriggeroneevent) {
	 		listener.exitTriggeroneevent(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTriggeroneevent) {
			return visitor.visitTriggeroneevent(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class TriggerreferencingContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public REFERENCING(): TerminalNode {
		return this.getToken(PostgreSQLParser.REFERENCING, 0);
	}
	public triggertransitions(): TriggertransitionsContext {
		return this.getTypedRuleContext(TriggertransitionsContext, 0) as TriggertransitionsContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_triggerreferencing;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTriggerreferencing) {
	 		listener.enterTriggerreferencing(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTriggerreferencing) {
	 		listener.exitTriggerreferencing(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTriggerreferencing) {
			return visitor.visitTriggerreferencing(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class TriggertransitionsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public triggertransition_list(): TriggertransitionContext[] {
		return this.getTypedRuleContexts(TriggertransitionContext) as TriggertransitionContext[];
	}
	public triggertransition(i: number): TriggertransitionContext {
		return this.getTypedRuleContext(TriggertransitionContext, i) as TriggertransitionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_triggertransitions;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTriggertransitions) {
	 		listener.enterTriggertransitions(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTriggertransitions) {
	 		listener.exitTriggertransitions(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTriggertransitions) {
			return visitor.visitTriggertransitions(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class TriggertransitionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public transitionoldornew(): TransitionoldornewContext {
		return this.getTypedRuleContext(TransitionoldornewContext, 0) as TransitionoldornewContext;
	}
	public transitionrowortable(): TransitionrowortableContext {
		return this.getTypedRuleContext(TransitionrowortableContext, 0) as TransitionrowortableContext;
	}
	public opt_as(): Opt_asContext {
		return this.getTypedRuleContext(Opt_asContext, 0) as Opt_asContext;
	}
	public transitionrelname(): TransitionrelnameContext {
		return this.getTypedRuleContext(TransitionrelnameContext, 0) as TransitionrelnameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_triggertransition;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTriggertransition) {
	 		listener.enterTriggertransition(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTriggertransition) {
	 		listener.exitTriggertransition(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTriggertransition) {
			return visitor.visitTriggertransition(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class TransitionoldornewContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public NEW(): TerminalNode {
		return this.getToken(PostgreSQLParser.NEW, 0);
	}
	public OLD(): TerminalNode {
		return this.getToken(PostgreSQLParser.OLD, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_transitionoldornew;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTransitionoldornew) {
	 		listener.enterTransitionoldornew(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTransitionoldornew) {
	 		listener.exitTransitionoldornew(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTransitionoldornew) {
			return visitor.visitTransitionoldornew(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class TransitionrowortableContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public TABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLE, 0);
	}
	public ROW(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROW, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_transitionrowortable;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTransitionrowortable) {
	 		listener.enterTransitionrowortable(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTransitionrowortable) {
	 		listener.exitTransitionrowortable(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTransitionrowortable) {
			return visitor.visitTransitionrowortable(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class TransitionrelnameContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_transitionrelname;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTransitionrelname) {
	 		listener.enterTransitionrelname(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTransitionrelname) {
	 		listener.exitTransitionrelname(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTransitionrelname) {
			return visitor.visitTransitionrelname(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class TriggerforspecContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
	public triggerforopteach(): TriggerforopteachContext {
		return this.getTypedRuleContext(TriggerforopteachContext, 0) as TriggerforopteachContext;
	}
	public triggerfortype(): TriggerfortypeContext {
		return this.getTypedRuleContext(TriggerfortypeContext, 0) as TriggerfortypeContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_triggerforspec;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTriggerforspec) {
	 		listener.enterTriggerforspec(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTriggerforspec) {
	 		listener.exitTriggerforspec(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTriggerforspec) {
			return visitor.visitTriggerforspec(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class TriggerforopteachContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public EACH(): TerminalNode {
		return this.getToken(PostgreSQLParser.EACH, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_triggerforopteach;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTriggerforopteach) {
	 		listener.enterTriggerforopteach(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTriggerforopteach) {
	 		listener.exitTriggerforopteach(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTriggerforopteach) {
			return visitor.visitTriggerforopteach(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class TriggerfortypeContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ROW(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROW, 0);
	}
	public STATEMENT(): TerminalNode {
		return this.getToken(PostgreSQLParser.STATEMENT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_triggerfortype;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTriggerfortype) {
	 		listener.enterTriggerfortype(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTriggerfortype) {
	 		listener.exitTriggerfortype(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTriggerfortype) {
			return visitor.visitTriggerfortype(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class TriggerwhenContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public WHEN(): TerminalNode {
		return this.getToken(PostgreSQLParser.WHEN, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_triggerwhen;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTriggerwhen) {
	 		listener.enterTriggerwhen(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTriggerwhen) {
	 		listener.exitTriggerwhen(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTriggerwhen) {
			return visitor.visitTriggerwhen(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Function_or_procedureContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public FUNCTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.FUNCTION, 0);
	}
	public PROCEDURE(): TerminalNode {
		return this.getToken(PostgreSQLParser.PROCEDURE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_function_or_procedure;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFunction_or_procedure) {
	 		listener.enterFunction_or_procedure(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFunction_or_procedure) {
	 		listener.exitFunction_or_procedure(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFunction_or_procedure) {
			return visitor.visitFunction_or_procedure(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class TriggerfuncargsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public triggerfuncarg_list(): TriggerfuncargContext[] {
		return this.getTypedRuleContexts(TriggerfuncargContext) as TriggerfuncargContext[];
	}
	public triggerfuncarg(i: number): TriggerfuncargContext {
		return this.getTypedRuleContext(TriggerfuncargContext, i) as TriggerfuncargContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_triggerfuncargs;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTriggerfuncargs) {
	 		listener.enterTriggerfuncargs(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTriggerfuncargs) {
	 		listener.exitTriggerfuncargs(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTriggerfuncargs) {
			return visitor.visitTriggerfuncargs(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class TriggerfuncargContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public iconst(): IconstContext {
		return this.getTypedRuleContext(IconstContext, 0) as IconstContext;
	}
	public fconst(): FconstContext {
		return this.getTypedRuleContext(FconstContext, 0) as FconstContext;
	}
	public sconst(): SconstContext {
		return this.getTypedRuleContext(SconstContext, 0) as SconstContext;
	}
	public collabel(): CollabelContext {
		return this.getTypedRuleContext(CollabelContext, 0) as CollabelContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_triggerfuncarg;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTriggerfuncarg) {
	 		listener.enterTriggerfuncarg(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTriggerfuncarg) {
	 		listener.exitTriggerfuncarg(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTriggerfuncarg) {
			return visitor.visitTriggerfuncarg(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class OptconstrfromtableContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public FROM(): TerminalNode {
		return this.getToken(PostgreSQLParser.FROM, 0);
	}
	public qualified_name(): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, 0) as Qualified_nameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_optconstrfromtable;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOptconstrfromtable) {
	 		listener.enterOptconstrfromtable(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOptconstrfromtable) {
	 		listener.exitOptconstrfromtable(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOptconstrfromtable) {
			return visitor.visitOptconstrfromtable(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ConstraintattributespecContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public constraintattributeElem_list(): ConstraintattributeElemContext[] {
		return this.getTypedRuleContexts(ConstraintattributeElemContext) as ConstraintattributeElemContext[];
	}
	public constraintattributeElem(i: number): ConstraintattributeElemContext {
		return this.getTypedRuleContext(ConstraintattributeElemContext, i) as ConstraintattributeElemContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_constraintattributespec;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterConstraintattributespec) {
	 		listener.enterConstraintattributespec(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitConstraintattributespec) {
	 		listener.exitConstraintattributespec(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitConstraintattributespec) {
			return visitor.visitConstraintattributespec(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ConstraintattributeElemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
	public DEFERRABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEFERRABLE, 0);
	}
	public INITIALLY(): TerminalNode {
		return this.getToken(PostgreSQLParser.INITIALLY, 0);
	}
	public IMMEDIATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.IMMEDIATE, 0);
	}
	public DEFERRED(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEFERRED, 0);
	}
	public VALID(): TerminalNode {
		return this.getToken(PostgreSQLParser.VALID, 0);
	}
	public NO(): TerminalNode {
		return this.getToken(PostgreSQLParser.NO, 0);
	}
	public INHERIT(): TerminalNode {
		return this.getToken(PostgreSQLParser.INHERIT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_constraintattributeElem;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterConstraintattributeElem) {
	 		listener.enterConstraintattributeElem(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitConstraintattributeElem) {
	 		listener.exitConstraintattributeElem(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitConstraintattributeElem) {
			return visitor.visitConstraintattributeElem(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreateeventtrigstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public EVENT(): TerminalNode {
		return this.getToken(PostgreSQLParser.EVENT, 0);
	}
	public TRIGGER(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRIGGER, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public ON(): TerminalNode {
		return this.getToken(PostgreSQLParser.ON, 0);
	}
	public collabel(): CollabelContext {
		return this.getTypedRuleContext(CollabelContext, 0) as CollabelContext;
	}
	public EXECUTE(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXECUTE, 0);
	}
	public function_or_procedure(): Function_or_procedureContext {
		return this.getTypedRuleContext(Function_or_procedureContext, 0) as Function_or_procedureContext;
	}
	public func_name(): Func_nameContext {
		return this.getTypedRuleContext(Func_nameContext, 0) as Func_nameContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public WHEN(): TerminalNode {
		return this.getToken(PostgreSQLParser.WHEN, 0);
	}
	public event_trigger_when_list(): Event_trigger_when_listContext {
		return this.getTypedRuleContext(Event_trigger_when_listContext, 0) as Event_trigger_when_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createeventtrigstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreateeventtrigstmt) {
	 		listener.enterCreateeventtrigstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreateeventtrigstmt) {
	 		listener.exitCreateeventtrigstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreateeventtrigstmt) {
			return visitor.visitCreateeventtrigstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Event_trigger_when_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public event_trigger_when_item_list(): Event_trigger_when_itemContext[] {
		return this.getTypedRuleContexts(Event_trigger_when_itemContext) as Event_trigger_when_itemContext[];
	}
	public event_trigger_when_item(i: number): Event_trigger_when_itemContext {
		return this.getTypedRuleContext(Event_trigger_when_itemContext, i) as Event_trigger_when_itemContext;
	}
	public AND_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.AND);
	}
	public AND(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.AND, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_event_trigger_when_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterEvent_trigger_when_list) {
	 		listener.enterEvent_trigger_when_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitEvent_trigger_when_list) {
	 		listener.exitEvent_trigger_when_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitEvent_trigger_when_list) {
			return visitor.visitEvent_trigger_when_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Event_trigger_when_itemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
	public IN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IN_P, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public event_trigger_value_list(): Event_trigger_value_listContext {
		return this.getTypedRuleContext(Event_trigger_value_listContext, 0) as Event_trigger_value_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_event_trigger_when_item;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterEvent_trigger_when_item) {
	 		listener.enterEvent_trigger_when_item(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitEvent_trigger_when_item) {
	 		listener.exitEvent_trigger_when_item(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitEvent_trigger_when_item) {
			return visitor.visitEvent_trigger_when_item(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Event_trigger_value_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public sconst_list(): SconstContext[] {
		return this.getTypedRuleContexts(SconstContext) as SconstContext[];
	}
	public sconst(i: number): SconstContext {
		return this.getTypedRuleContext(SconstContext, i) as SconstContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_event_trigger_value_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterEvent_trigger_value_list) {
	 		listener.enterEvent_trigger_value_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitEvent_trigger_value_list) {
	 		listener.exitEvent_trigger_value_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitEvent_trigger_value_list) {
			return visitor.visitEvent_trigger_value_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AltereventtrigstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public EVENT(): TerminalNode {
		return this.getToken(PostgreSQLParser.EVENT, 0);
	}
	public TRIGGER(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRIGGER, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public enable_trigger(): Enable_triggerContext {
		return this.getTypedRuleContext(Enable_triggerContext, 0) as Enable_triggerContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_altereventtrigstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAltereventtrigstmt) {
	 		listener.enterAltereventtrigstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAltereventtrigstmt) {
	 		listener.exitAltereventtrigstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAltereventtrigstmt) {
			return visitor.visitAltereventtrigstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Enable_triggerContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ENABLE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.ENABLE_P, 0);
	}
	public REPLICA(): TerminalNode {
		return this.getToken(PostgreSQLParser.REPLICA, 0);
	}
	public ALWAYS(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALWAYS, 0);
	}
	public DISABLE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DISABLE_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_enable_trigger;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterEnable_trigger) {
	 		listener.enterEnable_trigger(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitEnable_trigger) {
	 		listener.exitEnable_trigger(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitEnable_trigger) {
			return visitor.visitEnable_trigger(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreateassertionstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public ASSERTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.ASSERTION, 0);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
	public CHECK(): TerminalNode {
		return this.getToken(PostgreSQLParser.CHECK, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public constraintattributespec(): ConstraintattributespecContext {
		return this.getTypedRuleContext(ConstraintattributespecContext, 0) as ConstraintattributespecContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createassertionstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreateassertionstmt) {
	 		listener.enterCreateassertionstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreateassertionstmt) {
	 		listener.exitCreateassertionstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreateassertionstmt) {
			return visitor.visitCreateassertionstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class DefinestmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public opt_or_replace(): Opt_or_replaceContext {
		return this.getTypedRuleContext(Opt_or_replaceContext, 0) as Opt_or_replaceContext;
	}
	public AGGREGATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.AGGREGATE, 0);
	}
	public func_name(): Func_nameContext {
		return this.getTypedRuleContext(Func_nameContext, 0) as Func_nameContext;
	}
	public aggr_args(): Aggr_argsContext {
		return this.getTypedRuleContext(Aggr_argsContext, 0) as Aggr_argsContext;
	}
	public definition(): DefinitionContext {
		return this.getTypedRuleContext(DefinitionContext, 0) as DefinitionContext;
	}
	public old_aggr_definition(): Old_aggr_definitionContext {
		return this.getTypedRuleContext(Old_aggr_definitionContext, 0) as Old_aggr_definitionContext;
	}
	public OPERATOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPERATOR, 0);
	}
	public any_operator(): Any_operatorContext {
		return this.getTypedRuleContext(Any_operatorContext, 0) as Any_operatorContext;
	}
	public TYPE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TYPE_P, 0);
	}
	public any_name_list(): Any_nameContext[] {
		return this.getTypedRuleContexts(Any_nameContext) as Any_nameContext[];
	}
	public any_name(i: number): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, i) as Any_nameContext;
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public opttablefuncelementlist(): OpttablefuncelementlistContext {
		return this.getTypedRuleContext(OpttablefuncelementlistContext, 0) as OpttablefuncelementlistContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public ENUM_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.ENUM_P, 0);
	}
	public opt_enum_val_list(): Opt_enum_val_listContext {
		return this.getTypedRuleContext(Opt_enum_val_listContext, 0) as Opt_enum_val_listContext;
	}
	public RANGE(): TerminalNode {
		return this.getToken(PostgreSQLParser.RANGE, 0);
	}
	public TEXT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TEXT_P, 0);
	}
	public SEARCH(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEARCH, 0);
	}
	public PARSER(): TerminalNode {
		return this.getToken(PostgreSQLParser.PARSER, 0);
	}
	public DICTIONARY(): TerminalNode {
		return this.getToken(PostgreSQLParser.DICTIONARY, 0);
	}
	public TEMPLATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TEMPLATE, 0);
	}
	public CONFIGURATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONFIGURATION, 0);
	}
	public COLLATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.COLLATION, 0);
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
	public FROM(): TerminalNode {
		return this.getToken(PostgreSQLParser.FROM, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_definestmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDefinestmt) {
	 		listener.enterDefinestmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDefinestmt) {
	 		listener.exitDefinestmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDefinestmt) {
			return visitor.visitDefinestmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class DefinitionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public def_list(): Def_listContext {
		return this.getTypedRuleContext(Def_listContext, 0) as Def_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_definition;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDefinition) {
	 		listener.enterDefinition(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDefinition) {
	 		listener.exitDefinition(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDefinition) {
			return visitor.visitDefinition(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Def_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public def_elem_list(): Def_elemContext[] {
		return this.getTypedRuleContexts(Def_elemContext) as Def_elemContext[];
	}
	public def_elem(i: number): Def_elemContext {
		return this.getTypedRuleContext(Def_elemContext, i) as Def_elemContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_def_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDef_list) {
	 		listener.enterDef_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDef_list) {
	 		listener.exitDef_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDef_list) {
			return visitor.visitDef_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Def_elemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public collabel(): CollabelContext {
		return this.getTypedRuleContext(CollabelContext, 0) as CollabelContext;
	}
	public EQUAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.EQUAL, 0);
	}
	public def_arg(): Def_argContext {
		return this.getTypedRuleContext(Def_argContext, 0) as Def_argContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_def_elem;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDef_elem) {
	 		listener.enterDef_elem(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDef_elem) {
	 		listener.exitDef_elem(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDef_elem) {
			return visitor.visitDef_elem(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Def_argContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public func_type(): Func_typeContext {
		return this.getTypedRuleContext(Func_typeContext, 0) as Func_typeContext;
	}
	public reserved_keyword(): Reserved_keywordContext {
		return this.getTypedRuleContext(Reserved_keywordContext, 0) as Reserved_keywordContext;
	}
	public qual_all_op(): Qual_all_opContext {
		return this.getTypedRuleContext(Qual_all_opContext, 0) as Qual_all_opContext;
	}
	public numericonly(): NumericonlyContext {
		return this.getTypedRuleContext(NumericonlyContext, 0) as NumericonlyContext;
	}
	public sconst(): SconstContext {
		return this.getTypedRuleContext(SconstContext, 0) as SconstContext;
	}
	public NONE(): TerminalNode {
		return this.getToken(PostgreSQLParser.NONE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_def_arg;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDef_arg) {
	 		listener.enterDef_arg(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDef_arg) {
	 		listener.exitDef_arg(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDef_arg) {
			return visitor.visitDef_arg(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Old_aggr_definitionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public old_aggr_list(): Old_aggr_listContext {
		return this.getTypedRuleContext(Old_aggr_listContext, 0) as Old_aggr_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_old_aggr_definition;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOld_aggr_definition) {
	 		listener.enterOld_aggr_definition(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOld_aggr_definition) {
	 		listener.exitOld_aggr_definition(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOld_aggr_definition) {
			return visitor.visitOld_aggr_definition(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Old_aggr_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public old_aggr_elem_list(): Old_aggr_elemContext[] {
		return this.getTypedRuleContexts(Old_aggr_elemContext) as Old_aggr_elemContext[];
	}
	public old_aggr_elem(i: number): Old_aggr_elemContext {
		return this.getTypedRuleContext(Old_aggr_elemContext, i) as Old_aggr_elemContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_old_aggr_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOld_aggr_list) {
	 		listener.enterOld_aggr_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOld_aggr_list) {
	 		listener.exitOld_aggr_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOld_aggr_list) {
			return visitor.visitOld_aggr_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Old_aggr_elemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public identifier(): IdentifierContext {
		return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext;
	}
	public EQUAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.EQUAL, 0);
	}
	public def_arg(): Def_argContext {
		return this.getTypedRuleContext(Def_argContext, 0) as Def_argContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_old_aggr_elem;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOld_aggr_elem) {
	 		listener.enterOld_aggr_elem(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOld_aggr_elem) {
	 		listener.exitOld_aggr_elem(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOld_aggr_elem) {
			return visitor.visitOld_aggr_elem(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_enum_val_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public enum_val_list(): Enum_val_listContext {
		return this.getTypedRuleContext(Enum_val_listContext, 0) as Enum_val_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_enum_val_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_enum_val_list) {
	 		listener.enterOpt_enum_val_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_enum_val_list) {
	 		listener.exitOpt_enum_val_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_enum_val_list) {
			return visitor.visitOpt_enum_val_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Enum_val_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public sconst_list(): SconstContext[] {
		return this.getTypedRuleContexts(SconstContext) as SconstContext[];
	}
	public sconst(i: number): SconstContext {
		return this.getTypedRuleContext(SconstContext, i) as SconstContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_enum_val_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterEnum_val_list) {
	 		listener.enterEnum_val_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitEnum_val_list) {
	 		listener.exitEnum_val_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitEnum_val_list) {
			return visitor.visitEnum_val_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AlterenumstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public TYPE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TYPE_P, 0);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
	public ADD_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.ADD_P, 0);
	}
	public VALUE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.VALUE_P, 0);
	}
	public opt_if_not_exists(): Opt_if_not_existsContext {
		return this.getTypedRuleContext(Opt_if_not_existsContext, 0) as Opt_if_not_existsContext;
	}
	public sconst_list(): SconstContext[] {
		return this.getTypedRuleContexts(SconstContext) as SconstContext[];
	}
	public sconst(i: number): SconstContext {
		return this.getTypedRuleContext(SconstContext, i) as SconstContext;
	}
	public BEFORE(): TerminalNode {
		return this.getToken(PostgreSQLParser.BEFORE, 0);
	}
	public AFTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.AFTER, 0);
	}
	public RENAME(): TerminalNode {
		return this.getToken(PostgreSQLParser.RENAME, 0);
	}
	public TO(): TerminalNode {
		return this.getToken(PostgreSQLParser.TO, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alterenumstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlterenumstmt) {
	 		listener.enterAlterenumstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlterenumstmt) {
	 		listener.exitAlterenumstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlterenumstmt) {
			return visitor.visitAlterenumstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_if_not_existsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_if_not_exists;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_if_not_exists) {
	 		listener.enterOpt_if_not_exists(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_if_not_exists) {
	 		listener.exitOpt_if_not_exists(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_if_not_exists) {
			return visitor.visitOpt_if_not_exists(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreateopclassstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public OPERATOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPERATOR, 0);
	}
	public CLASS(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLASS, 0);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
	public opt_default(): Opt_defaultContext {
		return this.getTypedRuleContext(Opt_defaultContext, 0) as Opt_defaultContext;
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
	public TYPE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TYPE_P, 0);
	}
	public typename(): TypenameContext {
		return this.getTypedRuleContext(TypenameContext, 0) as TypenameContext;
	}
	public USING(): TerminalNode {
		return this.getToken(PostgreSQLParser.USING, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public opt_opfamily(): Opt_opfamilyContext {
		return this.getTypedRuleContext(Opt_opfamilyContext, 0) as Opt_opfamilyContext;
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
	public opclass_item_list(): Opclass_item_listContext {
		return this.getTypedRuleContext(Opclass_item_listContext, 0) as Opclass_item_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createopclassstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreateopclassstmt) {
	 		listener.enterCreateopclassstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreateopclassstmt) {
	 		listener.exitCreateopclassstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreateopclassstmt) {
			return visitor.visitCreateopclassstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opclass_item_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public opclass_item_list(): Opclass_itemContext[] {
		return this.getTypedRuleContexts(Opclass_itemContext) as Opclass_itemContext[];
	}
	public opclass_item(i: number): Opclass_itemContext {
		return this.getTypedRuleContext(Opclass_itemContext, i) as Opclass_itemContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opclass_item_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpclass_item_list) {
	 		listener.enterOpclass_item_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpclass_item_list) {
	 		listener.exitOpclass_item_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpclass_item_list) {
			return visitor.visitOpclass_item_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opclass_itemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OPERATOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPERATOR, 0);
	}
	public iconst(): IconstContext {
		return this.getTypedRuleContext(IconstContext, 0) as IconstContext;
	}
	public any_operator(): Any_operatorContext {
		return this.getTypedRuleContext(Any_operatorContext, 0) as Any_operatorContext;
	}
	public opclass_purpose(): Opclass_purposeContext {
		return this.getTypedRuleContext(Opclass_purposeContext, 0) as Opclass_purposeContext;
	}
	public opt_recheck(): Opt_recheckContext {
		return this.getTypedRuleContext(Opt_recheckContext, 0) as Opt_recheckContext;
	}
	public operator_with_argtypes(): Operator_with_argtypesContext {
		return this.getTypedRuleContext(Operator_with_argtypesContext, 0) as Operator_with_argtypesContext;
	}
	public FUNCTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.FUNCTION, 0);
	}
	public function_with_argtypes(): Function_with_argtypesContext {
		return this.getTypedRuleContext(Function_with_argtypesContext, 0) as Function_with_argtypesContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public type_list(): Type_listContext {
		return this.getTypedRuleContext(Type_listContext, 0) as Type_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public STORAGE(): TerminalNode {
		return this.getToken(PostgreSQLParser.STORAGE, 0);
	}
	public typename(): TypenameContext {
		return this.getTypedRuleContext(TypenameContext, 0) as TypenameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opclass_item;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpclass_item) {
	 		listener.enterOpclass_item(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpclass_item) {
	 		listener.exitOpclass_item(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpclass_item) {
			return visitor.visitOpclass_item(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_defaultContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public DEFAULT(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEFAULT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_default;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_default) {
	 		listener.enterOpt_default(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_default) {
	 		listener.exitOpt_default(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_default) {
			return visitor.visitOpt_default(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_opfamilyContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public FAMILY(): TerminalNode {
		return this.getToken(PostgreSQLParser.FAMILY, 0);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_opfamily;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_opfamily) {
	 		listener.enterOpt_opfamily(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_opfamily) {
	 		listener.exitOpt_opfamily(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_opfamily) {
			return visitor.visitOpt_opfamily(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opclass_purposeContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
	public SEARCH(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEARCH, 0);
	}
	public ORDER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ORDER, 0);
	}
	public BY(): TerminalNode {
		return this.getToken(PostgreSQLParser.BY, 0);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opclass_purpose;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpclass_purpose) {
	 		listener.enterOpclass_purpose(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpclass_purpose) {
	 		listener.exitOpclass_purpose(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpclass_purpose) {
			return visitor.visitOpclass_purpose(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_recheckContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public RECHECK(): TerminalNode {
		return this.getToken(PostgreSQLParser.RECHECK, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_recheck;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_recheck) {
	 		listener.enterOpt_recheck(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_recheck) {
	 		listener.exitOpt_recheck(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_recheck) {
			return visitor.visitOpt_recheck(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreateopfamilystmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public OPERATOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPERATOR, 0);
	}
	public FAMILY(): TerminalNode {
		return this.getToken(PostgreSQLParser.FAMILY, 0);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
	public USING(): TerminalNode {
		return this.getToken(PostgreSQLParser.USING, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createopfamilystmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreateopfamilystmt) {
	 		listener.enterCreateopfamilystmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreateopfamilystmt) {
	 		listener.exitCreateopfamilystmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreateopfamilystmt) {
			return visitor.visitCreateopfamilystmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AlteropfamilystmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public OPERATOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPERATOR, 0);
	}
	public FAMILY(): TerminalNode {
		return this.getToken(PostgreSQLParser.FAMILY, 0);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
	public USING(): TerminalNode {
		return this.getToken(PostgreSQLParser.USING, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public ADD_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.ADD_P, 0);
	}
	public opclass_item_list(): Opclass_item_listContext {
		return this.getTypedRuleContext(Opclass_item_listContext, 0) as Opclass_item_listContext;
	}
	public DROP(): TerminalNode {
		return this.getToken(PostgreSQLParser.DROP, 0);
	}
	public opclass_drop_list(): Opclass_drop_listContext {
		return this.getTypedRuleContext(Opclass_drop_listContext, 0) as Opclass_drop_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alteropfamilystmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlteropfamilystmt) {
	 		listener.enterAlteropfamilystmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlteropfamilystmt) {
	 		listener.exitAlteropfamilystmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlteropfamilystmt) {
			return visitor.visitAlteropfamilystmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opclass_drop_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public opclass_drop_list(): Opclass_dropContext[] {
		return this.getTypedRuleContexts(Opclass_dropContext) as Opclass_dropContext[];
	}
	public opclass_drop(i: number): Opclass_dropContext {
		return this.getTypedRuleContext(Opclass_dropContext, i) as Opclass_dropContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opclass_drop_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpclass_drop_list) {
	 		listener.enterOpclass_drop_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpclass_drop_list) {
	 		listener.exitOpclass_drop_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpclass_drop_list) {
			return visitor.visitOpclass_drop_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opclass_dropContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OPERATOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPERATOR, 0);
	}
	public iconst(): IconstContext {
		return this.getTypedRuleContext(IconstContext, 0) as IconstContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public type_list(): Type_listContext {
		return this.getTypedRuleContext(Type_listContext, 0) as Type_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public FUNCTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.FUNCTION, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opclass_drop;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpclass_drop) {
	 		listener.enterOpclass_drop(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpclass_drop) {
	 		listener.exitOpclass_drop(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpclass_drop) {
			return visitor.visitOpclass_drop(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class DropopclassstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public DROP(): TerminalNode {
		return this.getToken(PostgreSQLParser.DROP, 0);
	}
	public OPERATOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPERATOR, 0);
	}
	public CLASS(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLASS, 0);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
	public USING(): TerminalNode {
		return this.getToken(PostgreSQLParser.USING, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public opt_drop_behavior(): Opt_drop_behaviorContext {
		return this.getTypedRuleContext(Opt_drop_behaviorContext, 0) as Opt_drop_behaviorContext;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_dropopclassstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDropopclassstmt) {
	 		listener.enterDropopclassstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDropopclassstmt) {
	 		listener.exitDropopclassstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDropopclassstmt) {
			return visitor.visitDropopclassstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class DropopfamilystmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public DROP(): TerminalNode {
		return this.getToken(PostgreSQLParser.DROP, 0);
	}
	public OPERATOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPERATOR, 0);
	}
	public FAMILY(): TerminalNode {
		return this.getToken(PostgreSQLParser.FAMILY, 0);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
	public USING(): TerminalNode {
		return this.getToken(PostgreSQLParser.USING, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public opt_drop_behavior(): Opt_drop_behaviorContext {
		return this.getTypedRuleContext(Opt_drop_behaviorContext, 0) as Opt_drop_behaviorContext;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_dropopfamilystmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDropopfamilystmt) {
	 		listener.enterDropopfamilystmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDropopfamilystmt) {
	 		listener.exitDropopfamilystmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDropopfamilystmt) {
			return visitor.visitDropopfamilystmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class DropownedstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public DROP(): TerminalNode {
		return this.getToken(PostgreSQLParser.DROP, 0);
	}
	public OWNED(): TerminalNode {
		return this.getToken(PostgreSQLParser.OWNED, 0);
	}
	public BY(): TerminalNode {
		return this.getToken(PostgreSQLParser.BY, 0);
	}
	public role_list(): Role_listContext {
		return this.getTypedRuleContext(Role_listContext, 0) as Role_listContext;
	}
	public opt_drop_behavior(): Opt_drop_behaviorContext {
		return this.getTypedRuleContext(Opt_drop_behaviorContext, 0) as Opt_drop_behaviorContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_dropownedstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDropownedstmt) {
	 		listener.enterDropownedstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDropownedstmt) {
	 		listener.exitDropownedstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDropownedstmt) {
			return visitor.visitDropownedstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ReassignownedstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public REASSIGN(): TerminalNode {
		return this.getToken(PostgreSQLParser.REASSIGN, 0);
	}
	public OWNED(): TerminalNode {
		return this.getToken(PostgreSQLParser.OWNED, 0);
	}
	public BY(): TerminalNode {
		return this.getToken(PostgreSQLParser.BY, 0);
	}
	public role_list(): Role_listContext {
		return this.getTypedRuleContext(Role_listContext, 0) as Role_listContext;
	}
	public TO(): TerminalNode {
		return this.getToken(PostgreSQLParser.TO, 0);
	}
	public rolespec(): RolespecContext {
		return this.getTypedRuleContext(RolespecContext, 0) as RolespecContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_reassignownedstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterReassignownedstmt) {
	 		listener.enterReassignownedstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitReassignownedstmt) {
	 		listener.exitReassignownedstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitReassignownedstmt) {
			return visitor.visitReassignownedstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class DropstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public DROP(): TerminalNode {
		return this.getToken(PostgreSQLParser.DROP, 0);
	}
	public object_type_any_name(): Object_type_any_nameContext {
		return this.getTypedRuleContext(Object_type_any_nameContext, 0) as Object_type_any_nameContext;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
	public any_name_list(): Any_name_listContext {
		return this.getTypedRuleContext(Any_name_listContext, 0) as Any_name_listContext;
	}
	public opt_drop_behavior(): Opt_drop_behaviorContext {
		return this.getTypedRuleContext(Opt_drop_behaviorContext, 0) as Opt_drop_behaviorContext;
	}
	public drop_type_name(): Drop_type_nameContext {
		return this.getTypedRuleContext(Drop_type_nameContext, 0) as Drop_type_nameContext;
	}
	public name_list(): Name_listContext {
		return this.getTypedRuleContext(Name_listContext, 0) as Name_listContext;
	}
	public object_type_name_on_any_name(): Object_type_name_on_any_nameContext {
		return this.getTypedRuleContext(Object_type_name_on_any_nameContext, 0) as Object_type_name_on_any_nameContext;
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public ON(): TerminalNode {
		return this.getToken(PostgreSQLParser.ON, 0);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
	public TYPE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TYPE_P, 0);
	}
	public type_name_list(): Type_name_listContext {
		return this.getTypedRuleContext(Type_name_listContext, 0) as Type_name_listContext;
	}
	public DOMAIN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DOMAIN_P, 0);
	}
	public INDEX(): TerminalNode {
		return this.getToken(PostgreSQLParser.INDEX, 0);
	}
	public CONCURRENTLY(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONCURRENTLY, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_dropstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDropstmt) {
	 		listener.enterDropstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDropstmt) {
	 		listener.exitDropstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDropstmt) {
			return visitor.visitDropstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Object_type_any_nameContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public TABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLE, 0);
	}
	public SEQUENCE(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEQUENCE, 0);
	}
	public VIEW(): TerminalNode {
		return this.getToken(PostgreSQLParser.VIEW, 0);
	}
	public MATERIALIZED(): TerminalNode {
		return this.getToken(PostgreSQLParser.MATERIALIZED, 0);
	}
	public INDEX(): TerminalNode {
		return this.getToken(PostgreSQLParser.INDEX, 0);
	}
	public FOREIGN(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOREIGN, 0);
	}
	public COLLATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.COLLATION, 0);
	}
	public CONVERSION_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONVERSION_P, 0);
	}
	public STATISTICS(): TerminalNode {
		return this.getToken(PostgreSQLParser.STATISTICS, 0);
	}
	public TEXT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TEXT_P, 0);
	}
	public SEARCH(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEARCH, 0);
	}
	public PARSER(): TerminalNode {
		return this.getToken(PostgreSQLParser.PARSER, 0);
	}
	public DICTIONARY(): TerminalNode {
		return this.getToken(PostgreSQLParser.DICTIONARY, 0);
	}
	public TEMPLATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TEMPLATE, 0);
	}
	public CONFIGURATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONFIGURATION, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_object_type_any_name;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterObject_type_any_name) {
	 		listener.enterObject_type_any_name(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitObject_type_any_name) {
	 		listener.exitObject_type_any_name(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitObject_type_any_name) {
			return visitor.visitObject_type_any_name(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Object_type_nameContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public drop_type_name(): Drop_type_nameContext {
		return this.getTypedRuleContext(Drop_type_nameContext, 0) as Drop_type_nameContext;
	}
	public DATABASE(): TerminalNode {
		return this.getToken(PostgreSQLParser.DATABASE, 0);
	}
	public ROLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROLE, 0);
	}
	public SUBSCRIPTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.SUBSCRIPTION, 0);
	}
	public TABLESPACE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLESPACE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_object_type_name;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterObject_type_name) {
	 		listener.enterObject_type_name(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitObject_type_name) {
	 		listener.exitObject_type_name(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitObject_type_name) {
			return visitor.visitObject_type_name(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Drop_type_nameContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ACCESS(): TerminalNode {
		return this.getToken(PostgreSQLParser.ACCESS, 0);
	}
	public METHOD(): TerminalNode {
		return this.getToken(PostgreSQLParser.METHOD, 0);
	}
	public EVENT(): TerminalNode {
		return this.getToken(PostgreSQLParser.EVENT, 0);
	}
	public TRIGGER(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRIGGER, 0);
	}
	public EXTENSION(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXTENSION, 0);
	}
	public FOREIGN(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOREIGN, 0);
	}
	public DATA_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DATA_P, 0);
	}
	public WRAPPER(): TerminalNode {
		return this.getToken(PostgreSQLParser.WRAPPER, 0);
	}
	public opt_procedural(): Opt_proceduralContext {
		return this.getTypedRuleContext(Opt_proceduralContext, 0) as Opt_proceduralContext;
	}
	public LANGUAGE(): TerminalNode {
		return this.getToken(PostgreSQLParser.LANGUAGE, 0);
	}
	public PUBLICATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.PUBLICATION, 0);
	}
	public SCHEMA(): TerminalNode {
		return this.getToken(PostgreSQLParser.SCHEMA, 0);
	}
	public SERVER(): TerminalNode {
		return this.getToken(PostgreSQLParser.SERVER, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_drop_type_name;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDrop_type_name) {
	 		listener.enterDrop_type_name(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDrop_type_name) {
	 		listener.exitDrop_type_name(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDrop_type_name) {
			return visitor.visitDrop_type_name(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Object_type_name_on_any_nameContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public POLICY(): TerminalNode {
		return this.getToken(PostgreSQLParser.POLICY, 0);
	}
	public RULE(): TerminalNode {
		return this.getToken(PostgreSQLParser.RULE, 0);
	}
	public TRIGGER(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRIGGER, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_object_type_name_on_any_name;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterObject_type_name_on_any_name) {
	 		listener.enterObject_type_name_on_any_name(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitObject_type_name_on_any_name) {
	 		listener.exitObject_type_name_on_any_name(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitObject_type_name_on_any_name) {
			return visitor.visitObject_type_name_on_any_name(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Any_name_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public any_name_list(): Any_nameContext[] {
		return this.getTypedRuleContexts(Any_nameContext) as Any_nameContext[];
	}
	public any_name(i: number): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, i) as Any_nameContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_any_name_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAny_name_list) {
	 		listener.enterAny_name_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAny_name_list) {
	 		listener.exitAny_name_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAny_name_list) {
			return visitor.visitAny_name_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Any_nameContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
	public attrs(): AttrsContext {
		return this.getTypedRuleContext(AttrsContext, 0) as AttrsContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_any_name;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAny_name) {
	 		listener.enterAny_name(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAny_name) {
	 		listener.exitAny_name(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAny_name) {
			return visitor.visitAny_name(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AttrsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public DOT_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.DOT);
	}
	public DOT(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.DOT, i);
	}
	public attr_name_list(): Attr_nameContext[] {
		return this.getTypedRuleContexts(Attr_nameContext) as Attr_nameContext[];
	}
	public attr_name(i: number): Attr_nameContext {
		return this.getTypedRuleContext(Attr_nameContext, i) as Attr_nameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_attrs;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAttrs) {
	 		listener.enterAttrs(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAttrs) {
	 		listener.exitAttrs(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAttrs) {
			return visitor.visitAttrs(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Type_name_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public typename_list(): TypenameContext[] {
		return this.getTypedRuleContexts(TypenameContext) as TypenameContext[];
	}
	public typename(i: number): TypenameContext {
		return this.getTypedRuleContext(TypenameContext, i) as TypenameContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_type_name_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterType_name_list) {
	 		listener.enterType_name_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitType_name_list) {
	 		listener.exitType_name_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitType_name_list) {
			return visitor.visitType_name_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class TruncatestmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public TRUNCATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRUNCATE, 0);
	}
	public opt_table(): Opt_tableContext {
		return this.getTypedRuleContext(Opt_tableContext, 0) as Opt_tableContext;
	}
	public relation_expr_list(): Relation_expr_listContext {
		return this.getTypedRuleContext(Relation_expr_listContext, 0) as Relation_expr_listContext;
	}
	public opt_restart_seqs(): Opt_restart_seqsContext {
		return this.getTypedRuleContext(Opt_restart_seqsContext, 0) as Opt_restart_seqsContext;
	}
	public opt_drop_behavior(): Opt_drop_behaviorContext {
		return this.getTypedRuleContext(Opt_drop_behaviorContext, 0) as Opt_drop_behaviorContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_truncatestmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTruncatestmt) {
	 		listener.enterTruncatestmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTruncatestmt) {
	 		listener.exitTruncatestmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTruncatestmt) {
			return visitor.visitTruncatestmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_restart_seqsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CONTINUE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONTINUE_P, 0);
	}
	public IDENTITY_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IDENTITY_P, 0);
	}
	public RESTART(): TerminalNode {
		return this.getToken(PostgreSQLParser.RESTART, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_restart_seqs;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_restart_seqs) {
	 		listener.enterOpt_restart_seqs(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_restart_seqs) {
	 		listener.exitOpt_restart_seqs(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_restart_seqs) {
			return visitor.visitOpt_restart_seqs(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CommentstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public COMMENT(): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMENT, 0);
	}
	public ON_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.ON);
	}
	public ON(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.ON, i);
	}
	public object_type_any_name(): Object_type_any_nameContext {
		return this.getTypedRuleContext(Object_type_any_nameContext, 0) as Object_type_any_nameContext;
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
	public IS(): TerminalNode {
		return this.getToken(PostgreSQLParser.IS, 0);
	}
	public comment_text(): Comment_textContext {
		return this.getTypedRuleContext(Comment_textContext, 0) as Comment_textContext;
	}
	public COLUMN(): TerminalNode {
		return this.getToken(PostgreSQLParser.COLUMN, 0);
	}
	public object_type_name(): Object_type_nameContext {
		return this.getTypedRuleContext(Object_type_nameContext, 0) as Object_type_nameContext;
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public TYPE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TYPE_P, 0);
	}
	public typename_list(): TypenameContext[] {
		return this.getTypedRuleContexts(TypenameContext) as TypenameContext[];
	}
	public typename(i: number): TypenameContext {
		return this.getTypedRuleContext(TypenameContext, i) as TypenameContext;
	}
	public DOMAIN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DOMAIN_P, 0);
	}
	public AGGREGATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.AGGREGATE, 0);
	}
	public aggregate_with_argtypes(): Aggregate_with_argtypesContext {
		return this.getTypedRuleContext(Aggregate_with_argtypesContext, 0) as Aggregate_with_argtypesContext;
	}
	public FUNCTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.FUNCTION, 0);
	}
	public function_with_argtypes(): Function_with_argtypesContext {
		return this.getTypedRuleContext(Function_with_argtypesContext, 0) as Function_with_argtypesContext;
	}
	public OPERATOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPERATOR, 0);
	}
	public operator_with_argtypes(): Operator_with_argtypesContext {
		return this.getTypedRuleContext(Operator_with_argtypesContext, 0) as Operator_with_argtypesContext;
	}
	public CONSTRAINT(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONSTRAINT, 0);
	}
	public object_type_name_on_any_name(): Object_type_name_on_any_nameContext {
		return this.getTypedRuleContext(Object_type_name_on_any_nameContext, 0) as Object_type_name_on_any_nameContext;
	}
	public PROCEDURE(): TerminalNode {
		return this.getToken(PostgreSQLParser.PROCEDURE, 0);
	}
	public ROUTINE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROUTINE, 0);
	}
	public TRANSFORM(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRANSFORM, 0);
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
	public LANGUAGE(): TerminalNode {
		return this.getToken(PostgreSQLParser.LANGUAGE, 0);
	}
	public CLASS(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLASS, 0);
	}
	public USING(): TerminalNode {
		return this.getToken(PostgreSQLParser.USING, 0);
	}
	public FAMILY(): TerminalNode {
		return this.getToken(PostgreSQLParser.FAMILY, 0);
	}
	public LARGE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.LARGE_P, 0);
	}
	public OBJECT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.OBJECT_P, 0);
	}
	public numericonly(): NumericonlyContext {
		return this.getTypedRuleContext(NumericonlyContext, 0) as NumericonlyContext;
	}
	public CAST(): TerminalNode {
		return this.getToken(PostgreSQLParser.CAST, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_commentstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCommentstmt) {
	 		listener.enterCommentstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCommentstmt) {
	 		listener.exitCommentstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCommentstmt) {
			return visitor.visitCommentstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Comment_textContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public sconst(): SconstContext {
		return this.getTypedRuleContext(SconstContext, 0) as SconstContext;
	}
	public NULL_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.NULL_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_comment_text;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterComment_text) {
	 		listener.enterComment_text(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitComment_text) {
	 		listener.exitComment_text(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitComment_text) {
			return visitor.visitComment_text(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class SeclabelstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public SECURITY(): TerminalNode {
		return this.getToken(PostgreSQLParser.SECURITY, 0);
	}
	public LABEL(): TerminalNode {
		return this.getToken(PostgreSQLParser.LABEL, 0);
	}
	public opt_provider(): Opt_providerContext {
		return this.getTypedRuleContext(Opt_providerContext, 0) as Opt_providerContext;
	}
	public ON(): TerminalNode {
		return this.getToken(PostgreSQLParser.ON, 0);
	}
	public object_type_any_name(): Object_type_any_nameContext {
		return this.getTypedRuleContext(Object_type_any_nameContext, 0) as Object_type_any_nameContext;
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
	public IS(): TerminalNode {
		return this.getToken(PostgreSQLParser.IS, 0);
	}
	public security_label(): Security_labelContext {
		return this.getTypedRuleContext(Security_labelContext, 0) as Security_labelContext;
	}
	public COLUMN(): TerminalNode {
		return this.getToken(PostgreSQLParser.COLUMN, 0);
	}
	public object_type_name(): Object_type_nameContext {
		return this.getTypedRuleContext(Object_type_nameContext, 0) as Object_type_nameContext;
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public TYPE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TYPE_P, 0);
	}
	public typename(): TypenameContext {
		return this.getTypedRuleContext(TypenameContext, 0) as TypenameContext;
	}
	public DOMAIN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DOMAIN_P, 0);
	}
	public AGGREGATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.AGGREGATE, 0);
	}
	public aggregate_with_argtypes(): Aggregate_with_argtypesContext {
		return this.getTypedRuleContext(Aggregate_with_argtypesContext, 0) as Aggregate_with_argtypesContext;
	}
	public FUNCTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.FUNCTION, 0);
	}
	public function_with_argtypes(): Function_with_argtypesContext {
		return this.getTypedRuleContext(Function_with_argtypesContext, 0) as Function_with_argtypesContext;
	}
	public LARGE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.LARGE_P, 0);
	}
	public OBJECT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.OBJECT_P, 0);
	}
	public numericonly(): NumericonlyContext {
		return this.getTypedRuleContext(NumericonlyContext, 0) as NumericonlyContext;
	}
	public PROCEDURE(): TerminalNode {
		return this.getToken(PostgreSQLParser.PROCEDURE, 0);
	}
	public ROUTINE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROUTINE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_seclabelstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSeclabelstmt) {
	 		listener.enterSeclabelstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSeclabelstmt) {
	 		listener.exitSeclabelstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSeclabelstmt) {
			return visitor.visitSeclabelstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_providerContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
	public nonreservedword_or_sconst(): Nonreservedword_or_sconstContext {
		return this.getTypedRuleContext(Nonreservedword_or_sconstContext, 0) as Nonreservedword_or_sconstContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_provider;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_provider) {
	 		listener.enterOpt_provider(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_provider) {
	 		listener.exitOpt_provider(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_provider) {
			return visitor.visitOpt_provider(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Security_labelContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public sconst(): SconstContext {
		return this.getTypedRuleContext(SconstContext, 0) as SconstContext;
	}
	public NULL_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.NULL_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_security_label;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSecurity_label) {
	 		listener.enterSecurity_label(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSecurity_label) {
	 		listener.exitSecurity_label(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSecurity_label) {
			return visitor.visitSecurity_label(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class FetchstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public FETCH(): TerminalNode {
		return this.getToken(PostgreSQLParser.FETCH, 0);
	}
	public fetch_args(): Fetch_argsContext {
		return this.getTypedRuleContext(Fetch_argsContext, 0) as Fetch_argsContext;
	}
	public MOVE(): TerminalNode {
		return this.getToken(PostgreSQLParser.MOVE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_fetchstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFetchstmt) {
	 		listener.enterFetchstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFetchstmt) {
	 		listener.exitFetchstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFetchstmt) {
			return visitor.visitFetchstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Fetch_argsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public cursor_name(): Cursor_nameContext {
		return this.getTypedRuleContext(Cursor_nameContext, 0) as Cursor_nameContext;
	}
	public from_in(): From_inContext {
		return this.getTypedRuleContext(From_inContext, 0) as From_inContext;
	}
	public NEXT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NEXT, 0);
	}
	public opt_from_in(): Opt_from_inContext {
		return this.getTypedRuleContext(Opt_from_inContext, 0) as Opt_from_inContext;
	}
	public PRIOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.PRIOR, 0);
	}
	public FIRST_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.FIRST_P, 0);
	}
	public LAST_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.LAST_P, 0);
	}
	public ABSOLUTE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.ABSOLUTE_P, 0);
	}
	public signediconst(): SignediconstContext {
		return this.getTypedRuleContext(SignediconstContext, 0) as SignediconstContext;
	}
	public RELATIVE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.RELATIVE_P, 0);
	}
	public ALL(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALL, 0);
	}
	public FORWARD(): TerminalNode {
		return this.getToken(PostgreSQLParser.FORWARD, 0);
	}
	public BACKWARD(): TerminalNode {
		return this.getToken(PostgreSQLParser.BACKWARD, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_fetch_args;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFetch_args) {
	 		listener.enterFetch_args(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFetch_args) {
	 		listener.exitFetch_args(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFetch_args) {
			return visitor.visitFetch_args(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class From_inContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public FROM(): TerminalNode {
		return this.getToken(PostgreSQLParser.FROM, 0);
	}
	public IN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IN_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_from_in;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFrom_in) {
	 		listener.enterFrom_in(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFrom_in) {
	 		listener.exitFrom_in(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFrom_in) {
			return visitor.visitFrom_in(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_from_inContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public from_in(): From_inContext {
		return this.getTypedRuleContext(From_inContext, 0) as From_inContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_from_in;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_from_in) {
	 		listener.enterOpt_from_in(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_from_in) {
	 		listener.exitOpt_from_in(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_from_in) {
			return visitor.visitOpt_from_in(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class GrantstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public GRANT(): TerminalNode {
		return this.getToken(PostgreSQLParser.GRANT, 0);
	}
	public privileges(): PrivilegesContext {
		return this.getTypedRuleContext(PrivilegesContext, 0) as PrivilegesContext;
	}
	public ON(): TerminalNode {
		return this.getToken(PostgreSQLParser.ON, 0);
	}
	public privilege_target(): Privilege_targetContext {
		return this.getTypedRuleContext(Privilege_targetContext, 0) as Privilege_targetContext;
	}
	public TO(): TerminalNode {
		return this.getToken(PostgreSQLParser.TO, 0);
	}
	public grantee_list(): Grantee_listContext {
		return this.getTypedRuleContext(Grantee_listContext, 0) as Grantee_listContext;
	}
	public opt_grant_grant_option(): Opt_grant_grant_optionContext {
		return this.getTypedRuleContext(Opt_grant_grant_optionContext, 0) as Opt_grant_grant_optionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_grantstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterGrantstmt) {
	 		listener.enterGrantstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitGrantstmt) {
	 		listener.exitGrantstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitGrantstmt) {
			return visitor.visitGrantstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class RevokestmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public REVOKE(): TerminalNode {
		return this.getToken(PostgreSQLParser.REVOKE, 0);
	}
	public privileges(): PrivilegesContext {
		return this.getTypedRuleContext(PrivilegesContext, 0) as PrivilegesContext;
	}
	public ON(): TerminalNode {
		return this.getToken(PostgreSQLParser.ON, 0);
	}
	public privilege_target(): Privilege_targetContext {
		return this.getTypedRuleContext(Privilege_targetContext, 0) as Privilege_targetContext;
	}
	public FROM(): TerminalNode {
		return this.getToken(PostgreSQLParser.FROM, 0);
	}
	public grantee_list(): Grantee_listContext {
		return this.getTypedRuleContext(Grantee_listContext, 0) as Grantee_listContext;
	}
	public opt_drop_behavior(): Opt_drop_behaviorContext {
		return this.getTypedRuleContext(Opt_drop_behaviorContext, 0) as Opt_drop_behaviorContext;
	}
	public GRANT(): TerminalNode {
		return this.getToken(PostgreSQLParser.GRANT, 0);
	}
	public OPTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPTION, 0);
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_revokestmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterRevokestmt) {
	 		listener.enterRevokestmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitRevokestmt) {
	 		listener.exitRevokestmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitRevokestmt) {
			return visitor.visitRevokestmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class PrivilegesContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public privilege_list(): Privilege_listContext {
		return this.getTypedRuleContext(Privilege_listContext, 0) as Privilege_listContext;
	}
	public ALL(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALL, 0);
	}
	public PRIVILEGES(): TerminalNode {
		return this.getToken(PostgreSQLParser.PRIVILEGES, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public columnlist(): ColumnlistContext {
		return this.getTypedRuleContext(ColumnlistContext, 0) as ColumnlistContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_privileges;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterPrivileges) {
	 		listener.enterPrivileges(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitPrivileges) {
	 		listener.exitPrivileges(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitPrivileges) {
			return visitor.visitPrivileges(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Privilege_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public privilege_list(): PrivilegeContext[] {
		return this.getTypedRuleContexts(PrivilegeContext) as PrivilegeContext[];
	}
	public privilege(i: number): PrivilegeContext {
		return this.getTypedRuleContext(PrivilegeContext, i) as PrivilegeContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_privilege_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterPrivilege_list) {
	 		listener.enterPrivilege_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitPrivilege_list) {
	 		listener.exitPrivilege_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitPrivilege_list) {
			return visitor.visitPrivilege_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class PrivilegeContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public SELECT(): TerminalNode {
		return this.getToken(PostgreSQLParser.SELECT, 0);
	}
	public opt_column_list(): Opt_column_listContext {
		return this.getTypedRuleContext(Opt_column_listContext, 0) as Opt_column_listContext;
	}
	public REFERENCES(): TerminalNode {
		return this.getToken(PostgreSQLParser.REFERENCES, 0);
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_privilege;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterPrivilege) {
	 		listener.enterPrivilege(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitPrivilege) {
	 		listener.exitPrivilege(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitPrivilege) {
			return visitor.visitPrivilege(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Privilege_targetContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public qualified_name_list(): Qualified_name_listContext {
		return this.getTypedRuleContext(Qualified_name_listContext, 0) as Qualified_name_listContext;
	}
	public TABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLE, 0);
	}
	public SEQUENCE(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEQUENCE, 0);
	}
	public FOREIGN(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOREIGN, 0);
	}
	public DATA_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DATA_P, 0);
	}
	public WRAPPER(): TerminalNode {
		return this.getToken(PostgreSQLParser.WRAPPER, 0);
	}
	public name_list(): Name_listContext {
		return this.getTypedRuleContext(Name_listContext, 0) as Name_listContext;
	}
	public SERVER(): TerminalNode {
		return this.getToken(PostgreSQLParser.SERVER, 0);
	}
	public FUNCTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.FUNCTION, 0);
	}
	public function_with_argtypes_list(): Function_with_argtypes_listContext {
		return this.getTypedRuleContext(Function_with_argtypes_listContext, 0) as Function_with_argtypes_listContext;
	}
	public PROCEDURE(): TerminalNode {
		return this.getToken(PostgreSQLParser.PROCEDURE, 0);
	}
	public ROUTINE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROUTINE, 0);
	}
	public DATABASE(): TerminalNode {
		return this.getToken(PostgreSQLParser.DATABASE, 0);
	}
	public DOMAIN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DOMAIN_P, 0);
	}
	public any_name_list(): Any_name_listContext {
		return this.getTypedRuleContext(Any_name_listContext, 0) as Any_name_listContext;
	}
	public LANGUAGE(): TerminalNode {
		return this.getToken(PostgreSQLParser.LANGUAGE, 0);
	}
	public LARGE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.LARGE_P, 0);
	}
	public OBJECT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.OBJECT_P, 0);
	}
	public numericonly_list(): Numericonly_listContext {
		return this.getTypedRuleContext(Numericonly_listContext, 0) as Numericonly_listContext;
	}
	public SCHEMA(): TerminalNode {
		return this.getToken(PostgreSQLParser.SCHEMA, 0);
	}
	public TABLESPACE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLESPACE, 0);
	}
	public TYPE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TYPE_P, 0);
	}
	public ALL(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALL, 0);
	}
	public TABLES(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLES, 0);
	}
	public IN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IN_P, 0);
	}
	public SEQUENCES(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEQUENCES, 0);
	}
	public FUNCTIONS(): TerminalNode {
		return this.getToken(PostgreSQLParser.FUNCTIONS, 0);
	}
	public PROCEDURES(): TerminalNode {
		return this.getToken(PostgreSQLParser.PROCEDURES, 0);
	}
	public ROUTINES(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROUTINES, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_privilege_target;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterPrivilege_target) {
	 		listener.enterPrivilege_target(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitPrivilege_target) {
	 		listener.exitPrivilege_target(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitPrivilege_target) {
			return visitor.visitPrivilege_target(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Grantee_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public grantee_list(): GranteeContext[] {
		return this.getTypedRuleContexts(GranteeContext) as GranteeContext[];
	}
	public grantee(i: number): GranteeContext {
		return this.getTypedRuleContext(GranteeContext, i) as GranteeContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_grantee_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterGrantee_list) {
	 		listener.enterGrantee_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitGrantee_list) {
	 		listener.exitGrantee_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitGrantee_list) {
			return visitor.visitGrantee_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class GranteeContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public rolespec(): RolespecContext {
		return this.getTypedRuleContext(RolespecContext, 0) as RolespecContext;
	}
	public GROUP_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.GROUP_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_grantee;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterGrantee) {
	 		listener.enterGrantee(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitGrantee) {
	 		listener.exitGrantee(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitGrantee) {
			return visitor.visitGrantee(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_grant_grant_optionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public WITH(): TerminalNode {
		return this.getToken(PostgreSQLParser.WITH, 0);
	}
	public GRANT(): TerminalNode {
		return this.getToken(PostgreSQLParser.GRANT, 0);
	}
	public OPTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPTION, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_grant_grant_option;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_grant_grant_option) {
	 		listener.enterOpt_grant_grant_option(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_grant_grant_option) {
	 		listener.exitOpt_grant_grant_option(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_grant_grant_option) {
			return visitor.visitOpt_grant_grant_option(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class GrantrolestmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public GRANT(): TerminalNode {
		return this.getToken(PostgreSQLParser.GRANT, 0);
	}
	public privilege_list(): Privilege_listContext {
		return this.getTypedRuleContext(Privilege_listContext, 0) as Privilege_listContext;
	}
	public TO(): TerminalNode {
		return this.getToken(PostgreSQLParser.TO, 0);
	}
	public role_list(): Role_listContext {
		return this.getTypedRuleContext(Role_listContext, 0) as Role_listContext;
	}
	public opt_grant_admin_option(): Opt_grant_admin_optionContext {
		return this.getTypedRuleContext(Opt_grant_admin_optionContext, 0) as Opt_grant_admin_optionContext;
	}
	public opt_granted_by(): Opt_granted_byContext {
		return this.getTypedRuleContext(Opt_granted_byContext, 0) as Opt_granted_byContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_grantrolestmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterGrantrolestmt) {
	 		listener.enterGrantrolestmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitGrantrolestmt) {
	 		listener.exitGrantrolestmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitGrantrolestmt) {
			return visitor.visitGrantrolestmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class RevokerolestmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public REVOKE(): TerminalNode {
		return this.getToken(PostgreSQLParser.REVOKE, 0);
	}
	public privilege_list(): Privilege_listContext {
		return this.getTypedRuleContext(Privilege_listContext, 0) as Privilege_listContext;
	}
	public FROM(): TerminalNode {
		return this.getToken(PostgreSQLParser.FROM, 0);
	}
	public role_list(): Role_listContext {
		return this.getTypedRuleContext(Role_listContext, 0) as Role_listContext;
	}
	public opt_granted_by(): Opt_granted_byContext {
		return this.getTypedRuleContext(Opt_granted_byContext, 0) as Opt_granted_byContext;
	}
	public opt_drop_behavior(): Opt_drop_behaviorContext {
		return this.getTypedRuleContext(Opt_drop_behaviorContext, 0) as Opt_drop_behaviorContext;
	}
	public ADMIN(): TerminalNode {
		return this.getToken(PostgreSQLParser.ADMIN, 0);
	}
	public OPTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPTION, 0);
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_revokerolestmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterRevokerolestmt) {
	 		listener.enterRevokerolestmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitRevokerolestmt) {
	 		listener.exitRevokerolestmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitRevokerolestmt) {
			return visitor.visitRevokerolestmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_grant_admin_optionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public WITH(): TerminalNode {
		return this.getToken(PostgreSQLParser.WITH, 0);
	}
	public ADMIN(): TerminalNode {
		return this.getToken(PostgreSQLParser.ADMIN, 0);
	}
	public OPTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPTION, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_grant_admin_option;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_grant_admin_option) {
	 		listener.enterOpt_grant_admin_option(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_grant_admin_option) {
	 		listener.exitOpt_grant_admin_option(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_grant_admin_option) {
			return visitor.visitOpt_grant_admin_option(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_granted_byContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public GRANTED(): TerminalNode {
		return this.getToken(PostgreSQLParser.GRANTED, 0);
	}
	public BY(): TerminalNode {
		return this.getToken(PostgreSQLParser.BY, 0);
	}
	public rolespec(): RolespecContext {
		return this.getTypedRuleContext(RolespecContext, 0) as RolespecContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_granted_by;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_granted_by) {
	 		listener.enterOpt_granted_by(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_granted_by) {
	 		listener.exitOpt_granted_by(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_granted_by) {
			return visitor.visitOpt_granted_by(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AlterdefaultprivilegesstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public DEFAULT(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEFAULT, 0);
	}
	public PRIVILEGES(): TerminalNode {
		return this.getToken(PostgreSQLParser.PRIVILEGES, 0);
	}
	public defacloptionlist(): DefacloptionlistContext {
		return this.getTypedRuleContext(DefacloptionlistContext, 0) as DefacloptionlistContext;
	}
	public defaclaction(): DefaclactionContext {
		return this.getTypedRuleContext(DefaclactionContext, 0) as DefaclactionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alterdefaultprivilegesstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlterdefaultprivilegesstmt) {
	 		listener.enterAlterdefaultprivilegesstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlterdefaultprivilegesstmt) {
	 		listener.exitAlterdefaultprivilegesstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlterdefaultprivilegesstmt) {
			return visitor.visitAlterdefaultprivilegesstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class DefacloptionlistContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public defacloption_list(): DefacloptionContext[] {
		return this.getTypedRuleContexts(DefacloptionContext) as DefacloptionContext[];
	}
	public defacloption(i: number): DefacloptionContext {
		return this.getTypedRuleContext(DefacloptionContext, i) as DefacloptionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_defacloptionlist;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDefacloptionlist) {
	 		listener.enterDefacloptionlist(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDefacloptionlist) {
	 		listener.exitDefacloptionlist(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDefacloptionlist) {
			return visitor.visitDefacloptionlist(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class DefacloptionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public IN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IN_P, 0);
	}
	public SCHEMA(): TerminalNode {
		return this.getToken(PostgreSQLParser.SCHEMA, 0);
	}
	public name_list(): Name_listContext {
		return this.getTypedRuleContext(Name_listContext, 0) as Name_listContext;
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
	public ROLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROLE, 0);
	}
	public role_list(): Role_listContext {
		return this.getTypedRuleContext(Role_listContext, 0) as Role_listContext;
	}
	public USER(): TerminalNode {
		return this.getToken(PostgreSQLParser.USER, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_defacloption;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDefacloption) {
	 		listener.enterDefacloption(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDefacloption) {
	 		listener.exitDefacloption(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDefacloption) {
			return visitor.visitDefacloption(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class DefaclactionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public GRANT(): TerminalNode {
		return this.getToken(PostgreSQLParser.GRANT, 0);
	}
	public privileges(): PrivilegesContext {
		return this.getTypedRuleContext(PrivilegesContext, 0) as PrivilegesContext;
	}
	public ON(): TerminalNode {
		return this.getToken(PostgreSQLParser.ON, 0);
	}
	public defacl_privilege_target(): Defacl_privilege_targetContext {
		return this.getTypedRuleContext(Defacl_privilege_targetContext, 0) as Defacl_privilege_targetContext;
	}
	public TO(): TerminalNode {
		return this.getToken(PostgreSQLParser.TO, 0);
	}
	public grantee_list(): Grantee_listContext {
		return this.getTypedRuleContext(Grantee_listContext, 0) as Grantee_listContext;
	}
	public opt_grant_grant_option(): Opt_grant_grant_optionContext {
		return this.getTypedRuleContext(Opt_grant_grant_optionContext, 0) as Opt_grant_grant_optionContext;
	}
	public REVOKE(): TerminalNode {
		return this.getToken(PostgreSQLParser.REVOKE, 0);
	}
	public FROM(): TerminalNode {
		return this.getToken(PostgreSQLParser.FROM, 0);
	}
	public opt_drop_behavior(): Opt_drop_behaviorContext {
		return this.getTypedRuleContext(Opt_drop_behaviorContext, 0) as Opt_drop_behaviorContext;
	}
	public OPTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPTION, 0);
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_defaclaction;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDefaclaction) {
	 		listener.enterDefaclaction(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDefaclaction) {
	 		listener.exitDefaclaction(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDefaclaction) {
			return visitor.visitDefaclaction(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Defacl_privilege_targetContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public TABLES(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLES, 0);
	}
	public FUNCTIONS(): TerminalNode {
		return this.getToken(PostgreSQLParser.FUNCTIONS, 0);
	}
	public ROUTINES(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROUTINES, 0);
	}
	public SEQUENCES(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEQUENCES, 0);
	}
	public TYPES_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TYPES_P, 0);
	}
	public SCHEMAS(): TerminalNode {
		return this.getToken(PostgreSQLParser.SCHEMAS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_defacl_privilege_target;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDefacl_privilege_target) {
	 		listener.enterDefacl_privilege_target(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDefacl_privilege_target) {
	 		listener.exitDefacl_privilege_target(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDefacl_privilege_target) {
			return visitor.visitDefacl_privilege_target(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class IndexstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public opt_unique(): Opt_uniqueContext {
		return this.getTypedRuleContext(Opt_uniqueContext, 0) as Opt_uniqueContext;
	}
	public INDEX(): TerminalNode {
		return this.getToken(PostgreSQLParser.INDEX, 0);
	}
	public opt_concurrently(): Opt_concurrentlyContext {
		return this.getTypedRuleContext(Opt_concurrentlyContext, 0) as Opt_concurrentlyContext;
	}
	public opt_index_name(): Opt_index_nameContext {
		return this.getTypedRuleContext(Opt_index_nameContext, 0) as Opt_index_nameContext;
	}
	public ON(): TerminalNode {
		return this.getToken(PostgreSQLParser.ON, 0);
	}
	public relation_expr(): Relation_exprContext {
		return this.getTypedRuleContext(Relation_exprContext, 0) as Relation_exprContext;
	}
	public access_method_clause(): Access_method_clauseContext {
		return this.getTypedRuleContext(Access_method_clauseContext, 0) as Access_method_clauseContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public index_params(): Index_paramsContext {
		return this.getTypedRuleContext(Index_paramsContext, 0) as Index_paramsContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public opt_include(): Opt_includeContext {
		return this.getTypedRuleContext(Opt_includeContext, 0) as Opt_includeContext;
	}
	public opt_reloptions(): Opt_reloptionsContext {
		return this.getTypedRuleContext(Opt_reloptionsContext, 0) as Opt_reloptionsContext;
	}
	public opttablespace(): OpttablespaceContext {
		return this.getTypedRuleContext(OpttablespaceContext, 0) as OpttablespaceContext;
	}
	public where_clause(): Where_clauseContext {
		return this.getTypedRuleContext(Where_clauseContext, 0) as Where_clauseContext;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_indexstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterIndexstmt) {
	 		listener.enterIndexstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitIndexstmt) {
	 		listener.exitIndexstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitIndexstmt) {
			return visitor.visitIndexstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_uniqueContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public UNIQUE(): TerminalNode {
		return this.getToken(PostgreSQLParser.UNIQUE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_unique;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_unique) {
	 		listener.enterOpt_unique(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_unique) {
	 		listener.exitOpt_unique(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_unique) {
			return visitor.visitOpt_unique(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_concurrentlyContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CONCURRENTLY(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONCURRENTLY, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_concurrently;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_concurrently) {
	 		listener.enterOpt_concurrently(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_concurrently) {
	 		listener.exitOpt_concurrently(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_concurrently) {
			return visitor.visitOpt_concurrently(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_index_nameContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_index_name;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_index_name) {
	 		listener.enterOpt_index_name(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_index_name) {
	 		listener.exitOpt_index_name(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_index_name) {
			return visitor.visitOpt_index_name(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Access_method_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public USING(): TerminalNode {
		return this.getToken(PostgreSQLParser.USING, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_access_method_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAccess_method_clause) {
	 		listener.enterAccess_method_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAccess_method_clause) {
	 		listener.exitAccess_method_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAccess_method_clause) {
			return visitor.visitAccess_method_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Index_paramsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public index_elem_list(): Index_elemContext[] {
		return this.getTypedRuleContexts(Index_elemContext) as Index_elemContext[];
	}
	public index_elem(i: number): Index_elemContext {
		return this.getTypedRuleContext(Index_elemContext, i) as Index_elemContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_index_params;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterIndex_params) {
	 		listener.enterIndex_params(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitIndex_params) {
	 		listener.exitIndex_params(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitIndex_params) {
			return visitor.visitIndex_params(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Index_elem_optionsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public opt_collate(): Opt_collateContext {
		return this.getTypedRuleContext(Opt_collateContext, 0) as Opt_collateContext;
	}
	public opt_class(): Opt_classContext {
		return this.getTypedRuleContext(Opt_classContext, 0) as Opt_classContext;
	}
	public opt_asc_desc(): Opt_asc_descContext {
		return this.getTypedRuleContext(Opt_asc_descContext, 0) as Opt_asc_descContext;
	}
	public opt_nulls_order(): Opt_nulls_orderContext {
		return this.getTypedRuleContext(Opt_nulls_orderContext, 0) as Opt_nulls_orderContext;
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
	public reloptions(): ReloptionsContext {
		return this.getTypedRuleContext(ReloptionsContext, 0) as ReloptionsContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_index_elem_options;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterIndex_elem_options) {
	 		listener.enterIndex_elem_options(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitIndex_elem_options) {
	 		listener.exitIndex_elem_options(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitIndex_elem_options) {
			return visitor.visitIndex_elem_options(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Index_elemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
	public index_elem_options(): Index_elem_optionsContext {
		return this.getTypedRuleContext(Index_elem_optionsContext, 0) as Index_elem_optionsContext;
	}
	public func_expr_windowless(): Func_expr_windowlessContext {
		return this.getTypedRuleContext(Func_expr_windowlessContext, 0) as Func_expr_windowlessContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_index_elem;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterIndex_elem) {
	 		listener.enterIndex_elem(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitIndex_elem) {
	 		listener.exitIndex_elem(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitIndex_elem) {
			return visitor.visitIndex_elem(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_includeContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public INCLUDE(): TerminalNode {
		return this.getToken(PostgreSQLParser.INCLUDE, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public index_including_params(): Index_including_paramsContext {
		return this.getTypedRuleContext(Index_including_paramsContext, 0) as Index_including_paramsContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_include;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_include) {
	 		listener.enterOpt_include(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_include) {
	 		listener.exitOpt_include(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_include) {
			return visitor.visitOpt_include(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Index_including_paramsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public index_elem_list(): Index_elemContext[] {
		return this.getTypedRuleContexts(Index_elemContext) as Index_elemContext[];
	}
	public index_elem(i: number): Index_elemContext {
		return this.getTypedRuleContext(Index_elemContext, i) as Index_elemContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_index_including_params;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterIndex_including_params) {
	 		listener.enterIndex_including_params(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitIndex_including_params) {
	 		listener.exitIndex_including_params(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitIndex_including_params) {
			return visitor.visitIndex_including_params(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_collateContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public COLLATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.COLLATE, 0);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_collate;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_collate) {
	 		listener.enterOpt_collate(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_collate) {
	 		listener.exitOpt_collate(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_collate) {
			return visitor.visitOpt_collate(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_classContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_class;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_class) {
	 		listener.enterOpt_class(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_class) {
	 		listener.exitOpt_class(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_class) {
			return visitor.visitOpt_class(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_asc_descContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ASC(): TerminalNode {
		return this.getToken(PostgreSQLParser.ASC, 0);
	}
	public DESC(): TerminalNode {
		return this.getToken(PostgreSQLParser.DESC, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_asc_desc;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_asc_desc) {
	 		listener.enterOpt_asc_desc(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_asc_desc) {
	 		listener.exitOpt_asc_desc(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_asc_desc) {
			return visitor.visitOpt_asc_desc(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_nulls_orderContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public NULLS_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.NULLS_P, 0);
	}
	public FIRST_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.FIRST_P, 0);
	}
	public LAST_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.LAST_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_nulls_order;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_nulls_order) {
	 		listener.enterOpt_nulls_order(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_nulls_order) {
	 		listener.exitOpt_nulls_order(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_nulls_order) {
			return visitor.visitOpt_nulls_order(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreatefunctionstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public opt_or_replace(): Opt_or_replaceContext {
		return this.getTypedRuleContext(Opt_or_replaceContext, 0) as Opt_or_replaceContext;
	}
	public func_name(): Func_nameContext {
		return this.getTypedRuleContext(Func_nameContext, 0) as Func_nameContext;
	}
	public func_args_with_defaults(): Func_args_with_defaultsContext {
		return this.getTypedRuleContext(Func_args_with_defaultsContext, 0) as Func_args_with_defaultsContext;
	}
	public createfunc_opt_list(): Createfunc_opt_listContext {
		return this.getTypedRuleContext(Createfunc_opt_listContext, 0) as Createfunc_opt_listContext;
	}
	public FUNCTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.FUNCTION, 0);
	}
	public PROCEDURE(): TerminalNode {
		return this.getToken(PostgreSQLParser.PROCEDURE, 0);
	}
	public RETURNS(): TerminalNode {
		return this.getToken(PostgreSQLParser.RETURNS, 0);
	}
	public func_return(): Func_returnContext {
		return this.getTypedRuleContext(Func_returnContext, 0) as Func_returnContext;
	}
	public TABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLE, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public table_func_column_list(): Table_func_column_listContext {
		return this.getTypedRuleContext(Table_func_column_listContext, 0) as Table_func_column_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createfunctionstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreatefunctionstmt) {
	 		listener.enterCreatefunctionstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreatefunctionstmt) {
	 		listener.exitCreatefunctionstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreatefunctionstmt) {
			return visitor.visitCreatefunctionstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_or_replaceContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OR(): TerminalNode {
		return this.getToken(PostgreSQLParser.OR, 0);
	}
	public REPLACE(): TerminalNode {
		return this.getToken(PostgreSQLParser.REPLACE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_or_replace;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_or_replace) {
	 		listener.enterOpt_or_replace(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_or_replace) {
	 		listener.exitOpt_or_replace(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_or_replace) {
			return visitor.visitOpt_or_replace(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Func_argsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public func_args_list(): Func_args_listContext {
		return this.getTypedRuleContext(Func_args_listContext, 0) as Func_args_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_func_args;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFunc_args) {
	 		listener.enterFunc_args(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFunc_args) {
	 		listener.exitFunc_args(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFunc_args) {
			return visitor.visitFunc_args(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Func_args_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public func_arg_list(): Func_argContext[] {
		return this.getTypedRuleContexts(Func_argContext) as Func_argContext[];
	}
	public func_arg(i: number): Func_argContext {
		return this.getTypedRuleContext(Func_argContext, i) as Func_argContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_func_args_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFunc_args_list) {
	 		listener.enterFunc_args_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFunc_args_list) {
	 		listener.exitFunc_args_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFunc_args_list) {
			return visitor.visitFunc_args_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Function_with_argtypes_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public function_with_argtypes_list(): Function_with_argtypesContext[] {
		return this.getTypedRuleContexts(Function_with_argtypesContext) as Function_with_argtypesContext[];
	}
	public function_with_argtypes(i: number): Function_with_argtypesContext {
		return this.getTypedRuleContext(Function_with_argtypesContext, i) as Function_with_argtypesContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_function_with_argtypes_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFunction_with_argtypes_list) {
	 		listener.enterFunction_with_argtypes_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFunction_with_argtypes_list) {
	 		listener.exitFunction_with_argtypes_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFunction_with_argtypes_list) {
			return visitor.visitFunction_with_argtypes_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Function_with_argtypesContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public func_name(): Func_nameContext {
		return this.getTypedRuleContext(Func_nameContext, 0) as Func_nameContext;
	}
	public func_args(): Func_argsContext {
		return this.getTypedRuleContext(Func_argsContext, 0) as Func_argsContext;
	}
	public type_func_name_keyword(): Type_func_name_keywordContext {
		return this.getTypedRuleContext(Type_func_name_keywordContext, 0) as Type_func_name_keywordContext;
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
	public indirection(): IndirectionContext {
		return this.getTypedRuleContext(IndirectionContext, 0) as IndirectionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_function_with_argtypes;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFunction_with_argtypes) {
	 		listener.enterFunction_with_argtypes(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFunction_with_argtypes) {
	 		listener.exitFunction_with_argtypes(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFunction_with_argtypes) {
			return visitor.visitFunction_with_argtypes(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Func_args_with_defaultsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public func_args_with_defaults_list(): Func_args_with_defaults_listContext {
		return this.getTypedRuleContext(Func_args_with_defaults_listContext, 0) as Func_args_with_defaults_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_func_args_with_defaults;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFunc_args_with_defaults) {
	 		listener.enterFunc_args_with_defaults(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFunc_args_with_defaults) {
	 		listener.exitFunc_args_with_defaults(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFunc_args_with_defaults) {
			return visitor.visitFunc_args_with_defaults(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Func_args_with_defaults_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public func_arg_with_default_list(): Func_arg_with_defaultContext[] {
		return this.getTypedRuleContexts(Func_arg_with_defaultContext) as Func_arg_with_defaultContext[];
	}
	public func_arg_with_default(i: number): Func_arg_with_defaultContext {
		return this.getTypedRuleContext(Func_arg_with_defaultContext, i) as Func_arg_with_defaultContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_func_args_with_defaults_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFunc_args_with_defaults_list) {
	 		listener.enterFunc_args_with_defaults_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFunc_args_with_defaults_list) {
	 		listener.exitFunc_args_with_defaults_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFunc_args_with_defaults_list) {
			return visitor.visitFunc_args_with_defaults_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Func_argContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public arg_class(): Arg_classContext {
		return this.getTypedRuleContext(Arg_classContext, 0) as Arg_classContext;
	}
	public func_type(): Func_typeContext {
		return this.getTypedRuleContext(Func_typeContext, 0) as Func_typeContext;
	}
	public param_name(): Param_nameContext {
		return this.getTypedRuleContext(Param_nameContext, 0) as Param_nameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_func_arg;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFunc_arg) {
	 		listener.enterFunc_arg(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFunc_arg) {
	 		listener.exitFunc_arg(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFunc_arg) {
			return visitor.visitFunc_arg(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Arg_classContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public IN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IN_P, 0);
	}
	public OUT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.OUT_P, 0);
	}
	public INOUT(): TerminalNode {
		return this.getToken(PostgreSQLParser.INOUT, 0);
	}
	public VARIADIC(): TerminalNode {
		return this.getToken(PostgreSQLParser.VARIADIC, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_arg_class;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterArg_class) {
	 		listener.enterArg_class(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitArg_class) {
	 		listener.exitArg_class(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitArg_class) {
			return visitor.visitArg_class(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Param_nameContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public type_function_name(): Type_function_nameContext {
		return this.getTypedRuleContext(Type_function_nameContext, 0) as Type_function_nameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_param_name;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterParam_name) {
	 		listener.enterParam_name(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitParam_name) {
	 		listener.exitParam_name(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitParam_name) {
			return visitor.visitParam_name(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Func_returnContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public func_type(): Func_typeContext {
		return this.getTypedRuleContext(Func_typeContext, 0) as Func_typeContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_func_return;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFunc_return) {
	 		listener.enterFunc_return(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFunc_return) {
	 		listener.exitFunc_return(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFunc_return) {
			return visitor.visitFunc_return(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Func_typeContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public typename(): TypenameContext {
		return this.getTypedRuleContext(TypenameContext, 0) as TypenameContext;
	}
	public type_function_name(): Type_function_nameContext {
		return this.getTypedRuleContext(Type_function_nameContext, 0) as Type_function_nameContext;
	}
	public attrs(): AttrsContext {
		return this.getTypedRuleContext(AttrsContext, 0) as AttrsContext;
	}
	public PERCENT(): TerminalNode {
		return this.getToken(PostgreSQLParser.PERCENT, 0);
	}
	public TYPE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TYPE_P, 0);
	}
	public SETOF(): TerminalNode {
		return this.getToken(PostgreSQLParser.SETOF, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_func_type;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFunc_type) {
	 		listener.enterFunc_type(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFunc_type) {
	 		listener.exitFunc_type(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFunc_type) {
			return visitor.visitFunc_type(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Func_arg_with_defaultContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public func_arg(): Func_argContext {
		return this.getTypedRuleContext(Func_argContext, 0) as Func_argContext;
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public DEFAULT(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEFAULT, 0);
	}
	public EQUAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.EQUAL, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_func_arg_with_default;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFunc_arg_with_default) {
	 		listener.enterFunc_arg_with_default(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFunc_arg_with_default) {
	 		listener.exitFunc_arg_with_default(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFunc_arg_with_default) {
			return visitor.visitFunc_arg_with_default(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Aggr_argContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public func_arg(): Func_argContext {
		return this.getTypedRuleContext(Func_argContext, 0) as Func_argContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_aggr_arg;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAggr_arg) {
	 		listener.enterAggr_arg(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAggr_arg) {
	 		listener.exitAggr_arg(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAggr_arg) {
			return visitor.visitAggr_arg(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Aggr_argsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public STAR(): TerminalNode {
		return this.getToken(PostgreSQLParser.STAR, 0);
	}
	public aggr_args_list_list(): Aggr_args_listContext[] {
		return this.getTypedRuleContexts(Aggr_args_listContext) as Aggr_args_listContext[];
	}
	public aggr_args_list(i: number): Aggr_args_listContext {
		return this.getTypedRuleContext(Aggr_args_listContext, i) as Aggr_args_listContext;
	}
	public ORDER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ORDER, 0);
	}
	public BY(): TerminalNode {
		return this.getToken(PostgreSQLParser.BY, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_aggr_args;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAggr_args) {
	 		listener.enterAggr_args(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAggr_args) {
	 		listener.exitAggr_args(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAggr_args) {
			return visitor.visitAggr_args(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Aggr_args_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public aggr_arg_list(): Aggr_argContext[] {
		return this.getTypedRuleContexts(Aggr_argContext) as Aggr_argContext[];
	}
	public aggr_arg(i: number): Aggr_argContext {
		return this.getTypedRuleContext(Aggr_argContext, i) as Aggr_argContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_aggr_args_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAggr_args_list) {
	 		listener.enterAggr_args_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAggr_args_list) {
	 		listener.exitAggr_args_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAggr_args_list) {
			return visitor.visitAggr_args_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Aggregate_with_argtypesContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public func_name(): Func_nameContext {
		return this.getTypedRuleContext(Func_nameContext, 0) as Func_nameContext;
	}
	public aggr_args(): Aggr_argsContext {
		return this.getTypedRuleContext(Aggr_argsContext, 0) as Aggr_argsContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_aggregate_with_argtypes;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAggregate_with_argtypes) {
	 		listener.enterAggregate_with_argtypes(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAggregate_with_argtypes) {
	 		listener.exitAggregate_with_argtypes(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAggregate_with_argtypes) {
			return visitor.visitAggregate_with_argtypes(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Aggregate_with_argtypes_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public aggregate_with_argtypes_list(): Aggregate_with_argtypesContext[] {
		return this.getTypedRuleContexts(Aggregate_with_argtypesContext) as Aggregate_with_argtypesContext[];
	}
	public aggregate_with_argtypes(i: number): Aggregate_with_argtypesContext {
		return this.getTypedRuleContext(Aggregate_with_argtypesContext, i) as Aggregate_with_argtypesContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_aggregate_with_argtypes_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAggregate_with_argtypes_list) {
	 		listener.enterAggregate_with_argtypes_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAggregate_with_argtypes_list) {
	 		listener.exitAggregate_with_argtypes_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAggregate_with_argtypes_list) {
			return visitor.visitAggregate_with_argtypes_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Createfunc_opt_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public createfunc_opt_item_list(): Createfunc_opt_itemContext[] {
		return this.getTypedRuleContexts(Createfunc_opt_itemContext) as Createfunc_opt_itemContext[];
	}
	public createfunc_opt_item(i: number): Createfunc_opt_itemContext {
		return this.getTypedRuleContext(Createfunc_opt_itemContext, i) as Createfunc_opt_itemContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createfunc_opt_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreatefunc_opt_list) {
	 		listener.enterCreatefunc_opt_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreatefunc_opt_list) {
	 		listener.exitCreatefunc_opt_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreatefunc_opt_list) {
			return visitor.visitCreatefunc_opt_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Common_func_opt_itemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CALLED(): TerminalNode {
		return this.getToken(PostgreSQLParser.CALLED, 0);
	}
	public ON(): TerminalNode {
		return this.getToken(PostgreSQLParser.ON, 0);
	}
	public NULL_P_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.NULL_P);
	}
	public NULL_P(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.NULL_P, i);
	}
	public INPUT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.INPUT_P, 0);
	}
	public RETURNS(): TerminalNode {
		return this.getToken(PostgreSQLParser.RETURNS, 0);
	}
	public STRICT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.STRICT_P, 0);
	}
	public IMMUTABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.IMMUTABLE, 0);
	}
	public STABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.STABLE, 0);
	}
	public VOLATILE(): TerminalNode {
		return this.getToken(PostgreSQLParser.VOLATILE, 0);
	}
	public EXTERNAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXTERNAL, 0);
	}
	public SECURITY(): TerminalNode {
		return this.getToken(PostgreSQLParser.SECURITY, 0);
	}
	public DEFINER(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEFINER, 0);
	}
	public INVOKER(): TerminalNode {
		return this.getToken(PostgreSQLParser.INVOKER, 0);
	}
	public LEAKPROOF(): TerminalNode {
		return this.getToken(PostgreSQLParser.LEAKPROOF, 0);
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
	public COST(): TerminalNode {
		return this.getToken(PostgreSQLParser.COST, 0);
	}
	public numericonly(): NumericonlyContext {
		return this.getTypedRuleContext(NumericonlyContext, 0) as NumericonlyContext;
	}
	public ROWS(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROWS, 0);
	}
	public SUPPORT(): TerminalNode {
		return this.getToken(PostgreSQLParser.SUPPORT, 0);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
	public functionsetresetclause(): FunctionsetresetclauseContext {
		return this.getTypedRuleContext(FunctionsetresetclauseContext, 0) as FunctionsetresetclauseContext;
	}
	public PARALLEL(): TerminalNode {
		return this.getToken(PostgreSQLParser.PARALLEL, 0);
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_common_func_opt_item;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCommon_func_opt_item) {
	 		listener.enterCommon_func_opt_item(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCommon_func_opt_item) {
	 		listener.exitCommon_func_opt_item(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCommon_func_opt_item) {
			return visitor.visitCommon_func_opt_item(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Createfunc_opt_itemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
	public func_as(): Func_asContext {
		return this.getTypedRuleContext(Func_asContext, 0) as Func_asContext;
	}
	public LANGUAGE(): TerminalNode {
		return this.getToken(PostgreSQLParser.LANGUAGE, 0);
	}
	public nonreservedword_or_sconst(): Nonreservedword_or_sconstContext {
		return this.getTypedRuleContext(Nonreservedword_or_sconstContext, 0) as Nonreservedword_or_sconstContext;
	}
	public TRANSFORM(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRANSFORM, 0);
	}
	public transform_type_list(): Transform_type_listContext {
		return this.getTypedRuleContext(Transform_type_listContext, 0) as Transform_type_listContext;
	}
	public WINDOW(): TerminalNode {
		return this.getToken(PostgreSQLParser.WINDOW, 0);
	}
	public common_func_opt_item(): Common_func_opt_itemContext {
		return this.getTypedRuleContext(Common_func_opt_itemContext, 0) as Common_func_opt_itemContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createfunc_opt_item;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreatefunc_opt_item) {
	 		listener.enterCreatefunc_opt_item(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreatefunc_opt_item) {
	 		listener.exitCreatefunc_opt_item(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreatefunc_opt_item) {
			return visitor.visitCreatefunc_opt_item(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Func_asContext extends ParserRuleContext {
	public Definition: ParserRuleContext;
	public _def!: SconstContext;
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public sconst_list(): SconstContext[] {
		return this.getTypedRuleContexts(SconstContext) as SconstContext[];
	}
	public sconst(i: number): SconstContext {
		return this.getTypedRuleContext(SconstContext, i) as SconstContext;
	}
	public COMMA(): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_func_as;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFunc_as) {
	 		listener.enterFunc_as(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFunc_as) {
	 		listener.exitFunc_as(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFunc_as) {
			return visitor.visitFunc_as(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Transform_type_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public FOR_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.FOR);
	}
	public FOR(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, i);
	}
	public TYPE_P_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.TYPE_P);
	}
	public TYPE_P(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.TYPE_P, i);
	}
	public typename_list(): TypenameContext[] {
		return this.getTypedRuleContexts(TypenameContext) as TypenameContext[];
	}
	public typename(i: number): TypenameContext {
		return this.getTypedRuleContext(TypenameContext, i) as TypenameContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_transform_type_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTransform_type_list) {
	 		listener.enterTransform_type_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTransform_type_list) {
	 		listener.exitTransform_type_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTransform_type_list) {
			return visitor.visitTransform_type_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_definitionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public WITH(): TerminalNode {
		return this.getToken(PostgreSQLParser.WITH, 0);
	}
	public definition(): DefinitionContext {
		return this.getTypedRuleContext(DefinitionContext, 0) as DefinitionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_definition;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_definition) {
	 		listener.enterOpt_definition(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_definition) {
	 		listener.exitOpt_definition(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_definition) {
			return visitor.visitOpt_definition(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Table_func_columnContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public param_name(): Param_nameContext {
		return this.getTypedRuleContext(Param_nameContext, 0) as Param_nameContext;
	}
	public func_type(): Func_typeContext {
		return this.getTypedRuleContext(Func_typeContext, 0) as Func_typeContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_table_func_column;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTable_func_column) {
	 		listener.enterTable_func_column(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTable_func_column) {
	 		listener.exitTable_func_column(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTable_func_column) {
			return visitor.visitTable_func_column(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Table_func_column_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public table_func_column_list(): Table_func_columnContext[] {
		return this.getTypedRuleContexts(Table_func_columnContext) as Table_func_columnContext[];
	}
	public table_func_column(i: number): Table_func_columnContext {
		return this.getTypedRuleContext(Table_func_columnContext, i) as Table_func_columnContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_table_func_column_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTable_func_column_list) {
	 		listener.enterTable_func_column_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTable_func_column_list) {
	 		listener.exitTable_func_column_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTable_func_column_list) {
			return visitor.visitTable_func_column_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AlterfunctionstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public function_with_argtypes(): Function_with_argtypesContext {
		return this.getTypedRuleContext(Function_with_argtypesContext, 0) as Function_with_argtypesContext;
	}
	public alterfunc_opt_list(): Alterfunc_opt_listContext {
		return this.getTypedRuleContext(Alterfunc_opt_listContext, 0) as Alterfunc_opt_listContext;
	}
	public opt_restrict(): Opt_restrictContext {
		return this.getTypedRuleContext(Opt_restrictContext, 0) as Opt_restrictContext;
	}
	public FUNCTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.FUNCTION, 0);
	}
	public PROCEDURE(): TerminalNode {
		return this.getToken(PostgreSQLParser.PROCEDURE, 0);
	}
	public ROUTINE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROUTINE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alterfunctionstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlterfunctionstmt) {
	 		listener.enterAlterfunctionstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlterfunctionstmt) {
	 		listener.exitAlterfunctionstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlterfunctionstmt) {
			return visitor.visitAlterfunctionstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Alterfunc_opt_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public common_func_opt_item_list(): Common_func_opt_itemContext[] {
		return this.getTypedRuleContexts(Common_func_opt_itemContext) as Common_func_opt_itemContext[];
	}
	public common_func_opt_item(i: number): Common_func_opt_itemContext {
		return this.getTypedRuleContext(Common_func_opt_itemContext, i) as Common_func_opt_itemContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alterfunc_opt_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlterfunc_opt_list) {
	 		listener.enterAlterfunc_opt_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlterfunc_opt_list) {
	 		listener.exitAlterfunc_opt_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlterfunc_opt_list) {
			return visitor.visitAlterfunc_opt_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_restrictContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public RESTRICT(): TerminalNode {
		return this.getToken(PostgreSQLParser.RESTRICT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_restrict;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_restrict) {
	 		listener.enterOpt_restrict(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_restrict) {
	 		listener.exitOpt_restrict(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_restrict) {
			return visitor.visitOpt_restrict(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class RemovefuncstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public DROP(): TerminalNode {
		return this.getToken(PostgreSQLParser.DROP, 0);
	}
	public FUNCTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.FUNCTION, 0);
	}
	public function_with_argtypes_list(): Function_with_argtypes_listContext {
		return this.getTypedRuleContext(Function_with_argtypes_listContext, 0) as Function_with_argtypes_listContext;
	}
	public opt_drop_behavior(): Opt_drop_behaviorContext {
		return this.getTypedRuleContext(Opt_drop_behaviorContext, 0) as Opt_drop_behaviorContext;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
	public PROCEDURE(): TerminalNode {
		return this.getToken(PostgreSQLParser.PROCEDURE, 0);
	}
	public ROUTINE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROUTINE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_removefuncstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterRemovefuncstmt) {
	 		listener.enterRemovefuncstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitRemovefuncstmt) {
	 		listener.exitRemovefuncstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitRemovefuncstmt) {
			return visitor.visitRemovefuncstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class RemoveaggrstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public DROP(): TerminalNode {
		return this.getToken(PostgreSQLParser.DROP, 0);
	}
	public AGGREGATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.AGGREGATE, 0);
	}
	public aggregate_with_argtypes_list(): Aggregate_with_argtypes_listContext {
		return this.getTypedRuleContext(Aggregate_with_argtypes_listContext, 0) as Aggregate_with_argtypes_listContext;
	}
	public opt_drop_behavior(): Opt_drop_behaviorContext {
		return this.getTypedRuleContext(Opt_drop_behaviorContext, 0) as Opt_drop_behaviorContext;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_removeaggrstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterRemoveaggrstmt) {
	 		listener.enterRemoveaggrstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitRemoveaggrstmt) {
	 		listener.exitRemoveaggrstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitRemoveaggrstmt) {
			return visitor.visitRemoveaggrstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class RemoveoperstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public DROP(): TerminalNode {
		return this.getToken(PostgreSQLParser.DROP, 0);
	}
	public OPERATOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPERATOR, 0);
	}
	public operator_with_argtypes_list(): Operator_with_argtypes_listContext {
		return this.getTypedRuleContext(Operator_with_argtypes_listContext, 0) as Operator_with_argtypes_listContext;
	}
	public opt_drop_behavior(): Opt_drop_behaviorContext {
		return this.getTypedRuleContext(Opt_drop_behaviorContext, 0) as Opt_drop_behaviorContext;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_removeoperstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterRemoveoperstmt) {
	 		listener.enterRemoveoperstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitRemoveoperstmt) {
	 		listener.exitRemoveoperstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitRemoveoperstmt) {
			return visitor.visitRemoveoperstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Oper_argtypesContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public typename_list(): TypenameContext[] {
		return this.getTypedRuleContexts(TypenameContext) as TypenameContext[];
	}
	public typename(i: number): TypenameContext {
		return this.getTypedRuleContext(TypenameContext, i) as TypenameContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public COMMA(): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, 0);
	}
	public NONE(): TerminalNode {
		return this.getToken(PostgreSQLParser.NONE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_oper_argtypes;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOper_argtypes) {
	 		listener.enterOper_argtypes(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOper_argtypes) {
	 		listener.exitOper_argtypes(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOper_argtypes) {
			return visitor.visitOper_argtypes(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Any_operatorContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public all_op(): All_opContext {
		return this.getTypedRuleContext(All_opContext, 0) as All_opContext;
	}
	public colid_list(): ColidContext[] {
		return this.getTypedRuleContexts(ColidContext) as ColidContext[];
	}
	public colid(i: number): ColidContext {
		return this.getTypedRuleContext(ColidContext, i) as ColidContext;
	}
	public DOT_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.DOT);
	}
	public DOT(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.DOT, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_any_operator;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAny_operator) {
	 		listener.enterAny_operator(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAny_operator) {
	 		listener.exitAny_operator(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAny_operator) {
			return visitor.visitAny_operator(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Operator_with_argtypes_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public operator_with_argtypes_list(): Operator_with_argtypesContext[] {
		return this.getTypedRuleContexts(Operator_with_argtypesContext) as Operator_with_argtypesContext[];
	}
	public operator_with_argtypes(i: number): Operator_with_argtypesContext {
		return this.getTypedRuleContext(Operator_with_argtypesContext, i) as Operator_with_argtypesContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_operator_with_argtypes_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOperator_with_argtypes_list) {
	 		listener.enterOperator_with_argtypes_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOperator_with_argtypes_list) {
	 		listener.exitOperator_with_argtypes_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOperator_with_argtypes_list) {
			return visitor.visitOperator_with_argtypes_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Operator_with_argtypesContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public any_operator(): Any_operatorContext {
		return this.getTypedRuleContext(Any_operatorContext, 0) as Any_operatorContext;
	}
	public oper_argtypes(): Oper_argtypesContext {
		return this.getTypedRuleContext(Oper_argtypesContext, 0) as Oper_argtypesContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_operator_with_argtypes;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOperator_with_argtypes) {
	 		listener.enterOperator_with_argtypes(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOperator_with_argtypes) {
	 		listener.exitOperator_with_argtypes(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOperator_with_argtypes) {
			return visitor.visitOperator_with_argtypes(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class DostmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public DO(): TerminalNode {
		return this.getToken(PostgreSQLParser.DO, 0);
	}
	public dostmt_opt_list(): Dostmt_opt_listContext {
		return this.getTypedRuleContext(Dostmt_opt_listContext, 0) as Dostmt_opt_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_dostmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDostmt) {
	 		listener.enterDostmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDostmt) {
	 		listener.exitDostmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDostmt) {
			return visitor.visitDostmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Dostmt_opt_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public dostmt_opt_item_list(): Dostmt_opt_itemContext[] {
		return this.getTypedRuleContexts(Dostmt_opt_itemContext) as Dostmt_opt_itemContext[];
	}
	public dostmt_opt_item(i: number): Dostmt_opt_itemContext {
		return this.getTypedRuleContext(Dostmt_opt_itemContext, i) as Dostmt_opt_itemContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_dostmt_opt_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDostmt_opt_list) {
	 		listener.enterDostmt_opt_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDostmt_opt_list) {
	 		listener.exitDostmt_opt_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDostmt_opt_list) {
			return visitor.visitDostmt_opt_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Dostmt_opt_itemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public sconst(): SconstContext {
		return this.getTypedRuleContext(SconstContext, 0) as SconstContext;
	}
	public LANGUAGE(): TerminalNode {
		return this.getToken(PostgreSQLParser.LANGUAGE, 0);
	}
	public nonreservedword_or_sconst(): Nonreservedword_or_sconstContext {
		return this.getTypedRuleContext(Nonreservedword_or_sconstContext, 0) as Nonreservedword_or_sconstContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_dostmt_opt_item;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDostmt_opt_item) {
	 		listener.enterDostmt_opt_item(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDostmt_opt_item) {
	 		listener.exitDostmt_opt_item(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDostmt_opt_item) {
			return visitor.visitDostmt_opt_item(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreatecaststmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public CAST(): TerminalNode {
		return this.getToken(PostgreSQLParser.CAST, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public typename_list(): TypenameContext[] {
		return this.getTypedRuleContexts(TypenameContext) as TypenameContext[];
	}
	public typename(i: number): TypenameContext {
		return this.getTypedRuleContext(TypenameContext, i) as TypenameContext;
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public WITH(): TerminalNode {
		return this.getToken(PostgreSQLParser.WITH, 0);
	}
	public FUNCTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.FUNCTION, 0);
	}
	public function_with_argtypes(): Function_with_argtypesContext {
		return this.getTypedRuleContext(Function_with_argtypesContext, 0) as Function_with_argtypesContext;
	}
	public cast_context(): Cast_contextContext {
		return this.getTypedRuleContext(Cast_contextContext, 0) as Cast_contextContext;
	}
	public WITHOUT(): TerminalNode {
		return this.getToken(PostgreSQLParser.WITHOUT, 0);
	}
	public INOUT(): TerminalNode {
		return this.getToken(PostgreSQLParser.INOUT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createcaststmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreatecaststmt) {
	 		listener.enterCreatecaststmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreatecaststmt) {
	 		listener.exitCreatecaststmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreatecaststmt) {
			return visitor.visitCreatecaststmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Cast_contextContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
	public IMPLICIT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IMPLICIT_P, 0);
	}
	public ASSIGNMENT(): TerminalNode {
		return this.getToken(PostgreSQLParser.ASSIGNMENT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_cast_context;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCast_context) {
	 		listener.enterCast_context(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCast_context) {
	 		listener.exitCast_context(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCast_context) {
			return visitor.visitCast_context(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class DropcaststmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public DROP(): TerminalNode {
		return this.getToken(PostgreSQLParser.DROP, 0);
	}
	public CAST(): TerminalNode {
		return this.getToken(PostgreSQLParser.CAST, 0);
	}
	public opt_if_exists(): Opt_if_existsContext {
		return this.getTypedRuleContext(Opt_if_existsContext, 0) as Opt_if_existsContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public typename_list(): TypenameContext[] {
		return this.getTypedRuleContexts(TypenameContext) as TypenameContext[];
	}
	public typename(i: number): TypenameContext {
		return this.getTypedRuleContext(TypenameContext, i) as TypenameContext;
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public opt_drop_behavior(): Opt_drop_behaviorContext {
		return this.getTypedRuleContext(Opt_drop_behaviorContext, 0) as Opt_drop_behaviorContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_dropcaststmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDropcaststmt) {
	 		listener.enterDropcaststmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDropcaststmt) {
	 		listener.exitDropcaststmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDropcaststmt) {
			return visitor.visitDropcaststmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_if_existsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_if_exists;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_if_exists) {
	 		listener.enterOpt_if_exists(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_if_exists) {
	 		listener.exitOpt_if_exists(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_if_exists) {
			return visitor.visitOpt_if_exists(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreatetransformstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public opt_or_replace(): Opt_or_replaceContext {
		return this.getTypedRuleContext(Opt_or_replaceContext, 0) as Opt_or_replaceContext;
	}
	public TRANSFORM(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRANSFORM, 0);
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
	public typename(): TypenameContext {
		return this.getTypedRuleContext(TypenameContext, 0) as TypenameContext;
	}
	public LANGUAGE(): TerminalNode {
		return this.getToken(PostgreSQLParser.LANGUAGE, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public transform_element_list(): Transform_element_listContext {
		return this.getTypedRuleContext(Transform_element_listContext, 0) as Transform_element_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createtransformstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreatetransformstmt) {
	 		listener.enterCreatetransformstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreatetransformstmt) {
	 		listener.exitCreatetransformstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreatetransformstmt) {
			return visitor.visitCreatetransformstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Transform_element_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public FROM(): TerminalNode {
		return this.getToken(PostgreSQLParser.FROM, 0);
	}
	public SQL_P_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.SQL_P);
	}
	public SQL_P(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.SQL_P, i);
	}
	public WITH_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.WITH);
	}
	public WITH(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.WITH, i);
	}
	public FUNCTION_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.FUNCTION);
	}
	public FUNCTION(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.FUNCTION, i);
	}
	public function_with_argtypes_list(): Function_with_argtypesContext[] {
		return this.getTypedRuleContexts(Function_with_argtypesContext) as Function_with_argtypesContext[];
	}
	public function_with_argtypes(i: number): Function_with_argtypesContext {
		return this.getTypedRuleContext(Function_with_argtypesContext, i) as Function_with_argtypesContext;
	}
	public COMMA(): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, 0);
	}
	public TO(): TerminalNode {
		return this.getToken(PostgreSQLParser.TO, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_transform_element_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTransform_element_list) {
	 		listener.enterTransform_element_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTransform_element_list) {
	 		listener.exitTransform_element_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTransform_element_list) {
			return visitor.visitTransform_element_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class DroptransformstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public DROP(): TerminalNode {
		return this.getToken(PostgreSQLParser.DROP, 0);
	}
	public TRANSFORM(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRANSFORM, 0);
	}
	public opt_if_exists(): Opt_if_existsContext {
		return this.getTypedRuleContext(Opt_if_existsContext, 0) as Opt_if_existsContext;
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
	public typename(): TypenameContext {
		return this.getTypedRuleContext(TypenameContext, 0) as TypenameContext;
	}
	public LANGUAGE(): TerminalNode {
		return this.getToken(PostgreSQLParser.LANGUAGE, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public opt_drop_behavior(): Opt_drop_behaviorContext {
		return this.getTypedRuleContext(Opt_drop_behaviorContext, 0) as Opt_drop_behaviorContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_droptransformstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDroptransformstmt) {
	 		listener.enterDroptransformstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDroptransformstmt) {
	 		listener.exitDroptransformstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDroptransformstmt) {
			return visitor.visitDroptransformstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ReindexstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public REINDEX(): TerminalNode {
		return this.getToken(PostgreSQLParser.REINDEX, 0);
	}
	public reindex_target_type(): Reindex_target_typeContext {
		return this.getTypedRuleContext(Reindex_target_typeContext, 0) as Reindex_target_typeContext;
	}
	public opt_concurrently(): Opt_concurrentlyContext {
		return this.getTypedRuleContext(Opt_concurrentlyContext, 0) as Opt_concurrentlyContext;
	}
	public qualified_name(): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, 0) as Qualified_nameContext;
	}
	public reindex_target_multitable(): Reindex_target_multitableContext {
		return this.getTypedRuleContext(Reindex_target_multitableContext, 0) as Reindex_target_multitableContext;
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public reindex_option_list(): Reindex_option_listContext {
		return this.getTypedRuleContext(Reindex_option_listContext, 0) as Reindex_option_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_reindexstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterReindexstmt) {
	 		listener.enterReindexstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitReindexstmt) {
	 		listener.exitReindexstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitReindexstmt) {
			return visitor.visitReindexstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Reindex_target_typeContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public INDEX(): TerminalNode {
		return this.getToken(PostgreSQLParser.INDEX, 0);
	}
	public TABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_reindex_target_type;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterReindex_target_type) {
	 		listener.enterReindex_target_type(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitReindex_target_type) {
	 		listener.exitReindex_target_type(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitReindex_target_type) {
			return visitor.visitReindex_target_type(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Reindex_target_multitableContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public SCHEMA(): TerminalNode {
		return this.getToken(PostgreSQLParser.SCHEMA, 0);
	}
	public SYSTEM_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.SYSTEM_P, 0);
	}
	public DATABASE(): TerminalNode {
		return this.getToken(PostgreSQLParser.DATABASE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_reindex_target_multitable;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterReindex_target_multitable) {
	 		listener.enterReindex_target_multitable(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitReindex_target_multitable) {
	 		listener.exitReindex_target_multitable(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitReindex_target_multitable) {
			return visitor.visitReindex_target_multitable(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Reindex_option_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public reindex_option_elem_list(): Reindex_option_elemContext[] {
		return this.getTypedRuleContexts(Reindex_option_elemContext) as Reindex_option_elemContext[];
	}
	public reindex_option_elem(i: number): Reindex_option_elemContext {
		return this.getTypedRuleContext(Reindex_option_elemContext, i) as Reindex_option_elemContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_reindex_option_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterReindex_option_list) {
	 		listener.enterReindex_option_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitReindex_option_list) {
	 		listener.exitReindex_option_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitReindex_option_list) {
			return visitor.visitReindex_option_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Reindex_option_elemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public VERBOSE(): TerminalNode {
		return this.getToken(PostgreSQLParser.VERBOSE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_reindex_option_elem;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterReindex_option_elem) {
	 		listener.enterReindex_option_elem(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitReindex_option_elem) {
	 		listener.exitReindex_option_elem(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitReindex_option_elem) {
			return visitor.visitReindex_option_elem(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AltertblspcstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public TABLESPACE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLESPACE, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public SET(): TerminalNode {
		return this.getToken(PostgreSQLParser.SET, 0);
	}
	public reloptions(): ReloptionsContext {
		return this.getTypedRuleContext(ReloptionsContext, 0) as ReloptionsContext;
	}
	public RESET(): TerminalNode {
		return this.getToken(PostgreSQLParser.RESET, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_altertblspcstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAltertblspcstmt) {
	 		listener.enterAltertblspcstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAltertblspcstmt) {
	 		listener.exitAltertblspcstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAltertblspcstmt) {
			return visitor.visitAltertblspcstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class RenamestmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public AGGREGATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.AGGREGATE, 0);
	}
	public aggregate_with_argtypes(): Aggregate_with_argtypesContext {
		return this.getTypedRuleContext(Aggregate_with_argtypesContext, 0) as Aggregate_with_argtypesContext;
	}
	public RENAME(): TerminalNode {
		return this.getToken(PostgreSQLParser.RENAME, 0);
	}
	public TO(): TerminalNode {
		return this.getToken(PostgreSQLParser.TO, 0);
	}
	public name_list(): NameContext[] {
		return this.getTypedRuleContexts(NameContext) as NameContext[];
	}
	public name(i: number): NameContext {
		return this.getTypedRuleContext(NameContext, i) as NameContext;
	}
	public COLLATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.COLLATION, 0);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
	public CONVERSION_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONVERSION_P, 0);
	}
	public DATABASE(): TerminalNode {
		return this.getToken(PostgreSQLParser.DATABASE, 0);
	}
	public DOMAIN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DOMAIN_P, 0);
	}
	public CONSTRAINT(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONSTRAINT, 0);
	}
	public FOREIGN(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOREIGN, 0);
	}
	public DATA_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DATA_P, 0);
	}
	public WRAPPER(): TerminalNode {
		return this.getToken(PostgreSQLParser.WRAPPER, 0);
	}
	public FUNCTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.FUNCTION, 0);
	}
	public function_with_argtypes(): Function_with_argtypesContext {
		return this.getTypedRuleContext(Function_with_argtypesContext, 0) as Function_with_argtypesContext;
	}
	public GROUP_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.GROUP_P, 0);
	}
	public roleid_list(): RoleidContext[] {
		return this.getTypedRuleContexts(RoleidContext) as RoleidContext[];
	}
	public roleid(i: number): RoleidContext {
		return this.getTypedRuleContext(RoleidContext, i) as RoleidContext;
	}
	public opt_procedural(): Opt_proceduralContext {
		return this.getTypedRuleContext(Opt_proceduralContext, 0) as Opt_proceduralContext;
	}
	public LANGUAGE(): TerminalNode {
		return this.getToken(PostgreSQLParser.LANGUAGE, 0);
	}
	public OPERATOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPERATOR, 0);
	}
	public CLASS(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLASS, 0);
	}
	public USING(): TerminalNode {
		return this.getToken(PostgreSQLParser.USING, 0);
	}
	public FAMILY(): TerminalNode {
		return this.getToken(PostgreSQLParser.FAMILY, 0);
	}
	public POLICY(): TerminalNode {
		return this.getToken(PostgreSQLParser.POLICY, 0);
	}
	public ON(): TerminalNode {
		return this.getToken(PostgreSQLParser.ON, 0);
	}
	public qualified_name(): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, 0) as Qualified_nameContext;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
	public PROCEDURE(): TerminalNode {
		return this.getToken(PostgreSQLParser.PROCEDURE, 0);
	}
	public PUBLICATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.PUBLICATION, 0);
	}
	public ROUTINE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROUTINE, 0);
	}
	public SCHEMA(): TerminalNode {
		return this.getToken(PostgreSQLParser.SCHEMA, 0);
	}
	public SERVER(): TerminalNode {
		return this.getToken(PostgreSQLParser.SERVER, 0);
	}
	public SUBSCRIPTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.SUBSCRIPTION, 0);
	}
	public TABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLE, 0);
	}
	public relation_expr(): Relation_exprContext {
		return this.getTypedRuleContext(Relation_exprContext, 0) as Relation_exprContext;
	}
	public SEQUENCE(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEQUENCE, 0);
	}
	public VIEW(): TerminalNode {
		return this.getToken(PostgreSQLParser.VIEW, 0);
	}
	public MATERIALIZED(): TerminalNode {
		return this.getToken(PostgreSQLParser.MATERIALIZED, 0);
	}
	public INDEX(): TerminalNode {
		return this.getToken(PostgreSQLParser.INDEX, 0);
	}
	public opt_column(): Opt_columnContext {
		return this.getTypedRuleContext(Opt_columnContext, 0) as Opt_columnContext;
	}
	public RULE(): TerminalNode {
		return this.getToken(PostgreSQLParser.RULE, 0);
	}
	public TRIGGER(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRIGGER, 0);
	}
	public EVENT(): TerminalNode {
		return this.getToken(PostgreSQLParser.EVENT, 0);
	}
	public ROLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROLE, 0);
	}
	public USER(): TerminalNode {
		return this.getToken(PostgreSQLParser.USER, 0);
	}
	public TABLESPACE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLESPACE, 0);
	}
	public STATISTICS(): TerminalNode {
		return this.getToken(PostgreSQLParser.STATISTICS, 0);
	}
	public TEXT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TEXT_P, 0);
	}
	public SEARCH(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEARCH, 0);
	}
	public PARSER(): TerminalNode {
		return this.getToken(PostgreSQLParser.PARSER, 0);
	}
	public DICTIONARY(): TerminalNode {
		return this.getToken(PostgreSQLParser.DICTIONARY, 0);
	}
	public TEMPLATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TEMPLATE, 0);
	}
	public CONFIGURATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONFIGURATION, 0);
	}
	public TYPE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TYPE_P, 0);
	}
	public ATTRIBUTE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ATTRIBUTE, 0);
	}
	public opt_drop_behavior(): Opt_drop_behaviorContext {
		return this.getTypedRuleContext(Opt_drop_behaviorContext, 0) as Opt_drop_behaviorContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_renamestmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterRenamestmt) {
	 		listener.enterRenamestmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitRenamestmt) {
	 		listener.exitRenamestmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitRenamestmt) {
			return visitor.visitRenamestmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_columnContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public COLUMN(): TerminalNode {
		return this.getToken(PostgreSQLParser.COLUMN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_column;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_column) {
	 		listener.enterOpt_column(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_column) {
	 		listener.exitOpt_column(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_column) {
			return visitor.visitOpt_column(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_set_dataContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public SET(): TerminalNode {
		return this.getToken(PostgreSQLParser.SET, 0);
	}
	public DATA_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DATA_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_set_data;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_set_data) {
	 		listener.enterOpt_set_data(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_set_data) {
	 		listener.exitOpt_set_data(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_set_data) {
			return visitor.visitOpt_set_data(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AlterobjectdependsstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public FUNCTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.FUNCTION, 0);
	}
	public function_with_argtypes(): Function_with_argtypesContext {
		return this.getTypedRuleContext(Function_with_argtypesContext, 0) as Function_with_argtypesContext;
	}
	public opt_no(): Opt_noContext {
		return this.getTypedRuleContext(Opt_noContext, 0) as Opt_noContext;
	}
	public DEPENDS(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEPENDS, 0);
	}
	public ON_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.ON);
	}
	public ON(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.ON, i);
	}
	public EXTENSION(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXTENSION, 0);
	}
	public name_list(): NameContext[] {
		return this.getTypedRuleContexts(NameContext) as NameContext[];
	}
	public name(i: number): NameContext {
		return this.getTypedRuleContext(NameContext, i) as NameContext;
	}
	public PROCEDURE(): TerminalNode {
		return this.getToken(PostgreSQLParser.PROCEDURE, 0);
	}
	public ROUTINE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROUTINE, 0);
	}
	public TRIGGER(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRIGGER, 0);
	}
	public qualified_name(): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, 0) as Qualified_nameContext;
	}
	public MATERIALIZED(): TerminalNode {
		return this.getToken(PostgreSQLParser.MATERIALIZED, 0);
	}
	public VIEW(): TerminalNode {
		return this.getToken(PostgreSQLParser.VIEW, 0);
	}
	public INDEX(): TerminalNode {
		return this.getToken(PostgreSQLParser.INDEX, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alterobjectdependsstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlterobjectdependsstmt) {
	 		listener.enterAlterobjectdependsstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlterobjectdependsstmt) {
	 		listener.exitAlterobjectdependsstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlterobjectdependsstmt) {
			return visitor.visitAlterobjectdependsstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_noContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public NO(): TerminalNode {
		return this.getToken(PostgreSQLParser.NO, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_no;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_no) {
	 		listener.enterOpt_no(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_no) {
	 		listener.exitOpt_no(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_no) {
			return visitor.visitOpt_no(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AlterobjectschemastmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public AGGREGATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.AGGREGATE, 0);
	}
	public aggregate_with_argtypes(): Aggregate_with_argtypesContext {
		return this.getTypedRuleContext(Aggregate_with_argtypesContext, 0) as Aggregate_with_argtypesContext;
	}
	public SET(): TerminalNode {
		return this.getToken(PostgreSQLParser.SET, 0);
	}
	public SCHEMA(): TerminalNode {
		return this.getToken(PostgreSQLParser.SCHEMA, 0);
	}
	public name_list(): NameContext[] {
		return this.getTypedRuleContexts(NameContext) as NameContext[];
	}
	public name(i: number): NameContext {
		return this.getTypedRuleContext(NameContext, i) as NameContext;
	}
	public COLLATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.COLLATION, 0);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
	public CONVERSION_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONVERSION_P, 0);
	}
	public DOMAIN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DOMAIN_P, 0);
	}
	public EXTENSION(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXTENSION, 0);
	}
	public FUNCTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.FUNCTION, 0);
	}
	public function_with_argtypes(): Function_with_argtypesContext {
		return this.getTypedRuleContext(Function_with_argtypesContext, 0) as Function_with_argtypesContext;
	}
	public OPERATOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPERATOR, 0);
	}
	public operator_with_argtypes(): Operator_with_argtypesContext {
		return this.getTypedRuleContext(Operator_with_argtypesContext, 0) as Operator_with_argtypesContext;
	}
	public CLASS(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLASS, 0);
	}
	public USING(): TerminalNode {
		return this.getToken(PostgreSQLParser.USING, 0);
	}
	public FAMILY(): TerminalNode {
		return this.getToken(PostgreSQLParser.FAMILY, 0);
	}
	public PROCEDURE(): TerminalNode {
		return this.getToken(PostgreSQLParser.PROCEDURE, 0);
	}
	public ROUTINE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROUTINE, 0);
	}
	public TABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLE, 0);
	}
	public relation_expr(): Relation_exprContext {
		return this.getTypedRuleContext(Relation_exprContext, 0) as Relation_exprContext;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
	public STATISTICS(): TerminalNode {
		return this.getToken(PostgreSQLParser.STATISTICS, 0);
	}
	public TEXT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TEXT_P, 0);
	}
	public SEARCH(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEARCH, 0);
	}
	public PARSER(): TerminalNode {
		return this.getToken(PostgreSQLParser.PARSER, 0);
	}
	public DICTIONARY(): TerminalNode {
		return this.getToken(PostgreSQLParser.DICTIONARY, 0);
	}
	public TEMPLATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TEMPLATE, 0);
	}
	public CONFIGURATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONFIGURATION, 0);
	}
	public SEQUENCE(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEQUENCE, 0);
	}
	public qualified_name(): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, 0) as Qualified_nameContext;
	}
	public VIEW(): TerminalNode {
		return this.getToken(PostgreSQLParser.VIEW, 0);
	}
	public MATERIALIZED(): TerminalNode {
		return this.getToken(PostgreSQLParser.MATERIALIZED, 0);
	}
	public FOREIGN(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOREIGN, 0);
	}
	public TYPE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TYPE_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alterobjectschemastmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlterobjectschemastmt) {
	 		listener.enterAlterobjectschemastmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlterobjectschemastmt) {
	 		listener.exitAlterobjectschemastmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlterobjectschemastmt) {
			return visitor.visitAlterobjectschemastmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AlteroperatorstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public OPERATOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPERATOR, 0);
	}
	public operator_with_argtypes(): Operator_with_argtypesContext {
		return this.getTypedRuleContext(Operator_with_argtypesContext, 0) as Operator_with_argtypesContext;
	}
	public SET(): TerminalNode {
		return this.getToken(PostgreSQLParser.SET, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public operator_def_list(): Operator_def_listContext {
		return this.getTypedRuleContext(Operator_def_listContext, 0) as Operator_def_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alteroperatorstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlteroperatorstmt) {
	 		listener.enterAlteroperatorstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlteroperatorstmt) {
	 		listener.exitAlteroperatorstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlteroperatorstmt) {
			return visitor.visitAlteroperatorstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Operator_def_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public operator_def_elem_list(): Operator_def_elemContext[] {
		return this.getTypedRuleContexts(Operator_def_elemContext) as Operator_def_elemContext[];
	}
	public operator_def_elem(i: number): Operator_def_elemContext {
		return this.getTypedRuleContext(Operator_def_elemContext, i) as Operator_def_elemContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_operator_def_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOperator_def_list) {
	 		listener.enterOperator_def_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOperator_def_list) {
	 		listener.exitOperator_def_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOperator_def_list) {
			return visitor.visitOperator_def_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Operator_def_elemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public collabel(): CollabelContext {
		return this.getTypedRuleContext(CollabelContext, 0) as CollabelContext;
	}
	public EQUAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.EQUAL, 0);
	}
	public NONE(): TerminalNode {
		return this.getToken(PostgreSQLParser.NONE, 0);
	}
	public operator_def_arg(): Operator_def_argContext {
		return this.getTypedRuleContext(Operator_def_argContext, 0) as Operator_def_argContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_operator_def_elem;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOperator_def_elem) {
	 		listener.enterOperator_def_elem(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOperator_def_elem) {
	 		listener.exitOperator_def_elem(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOperator_def_elem) {
			return visitor.visitOperator_def_elem(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Operator_def_argContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public func_type(): Func_typeContext {
		return this.getTypedRuleContext(Func_typeContext, 0) as Func_typeContext;
	}
	public reserved_keyword(): Reserved_keywordContext {
		return this.getTypedRuleContext(Reserved_keywordContext, 0) as Reserved_keywordContext;
	}
	public qual_all_op(): Qual_all_opContext {
		return this.getTypedRuleContext(Qual_all_opContext, 0) as Qual_all_opContext;
	}
	public numericonly(): NumericonlyContext {
		return this.getTypedRuleContext(NumericonlyContext, 0) as NumericonlyContext;
	}
	public sconst(): SconstContext {
		return this.getTypedRuleContext(SconstContext, 0) as SconstContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_operator_def_arg;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOperator_def_arg) {
	 		listener.enterOperator_def_arg(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOperator_def_arg) {
	 		listener.exitOperator_def_arg(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOperator_def_arg) {
			return visitor.visitOperator_def_arg(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AltertypestmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public TYPE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TYPE_P, 0);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
	public SET(): TerminalNode {
		return this.getToken(PostgreSQLParser.SET, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public operator_def_list(): Operator_def_listContext {
		return this.getTypedRuleContext(Operator_def_listContext, 0) as Operator_def_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_altertypestmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAltertypestmt) {
	 		listener.enterAltertypestmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAltertypestmt) {
	 		listener.exitAltertypestmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAltertypestmt) {
			return visitor.visitAltertypestmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AlterownerstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public AGGREGATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.AGGREGATE, 0);
	}
	public aggregate_with_argtypes(): Aggregate_with_argtypesContext {
		return this.getTypedRuleContext(Aggregate_with_argtypesContext, 0) as Aggregate_with_argtypesContext;
	}
	public OWNER(): TerminalNode {
		return this.getToken(PostgreSQLParser.OWNER, 0);
	}
	public TO(): TerminalNode {
		return this.getToken(PostgreSQLParser.TO, 0);
	}
	public rolespec(): RolespecContext {
		return this.getTypedRuleContext(RolespecContext, 0) as RolespecContext;
	}
	public COLLATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.COLLATION, 0);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
	public CONVERSION_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONVERSION_P, 0);
	}
	public DATABASE(): TerminalNode {
		return this.getToken(PostgreSQLParser.DATABASE, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public DOMAIN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DOMAIN_P, 0);
	}
	public FUNCTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.FUNCTION, 0);
	}
	public function_with_argtypes(): Function_with_argtypesContext {
		return this.getTypedRuleContext(Function_with_argtypesContext, 0) as Function_with_argtypesContext;
	}
	public opt_procedural(): Opt_proceduralContext {
		return this.getTypedRuleContext(Opt_proceduralContext, 0) as Opt_proceduralContext;
	}
	public LANGUAGE(): TerminalNode {
		return this.getToken(PostgreSQLParser.LANGUAGE, 0);
	}
	public LARGE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.LARGE_P, 0);
	}
	public OBJECT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.OBJECT_P, 0);
	}
	public numericonly(): NumericonlyContext {
		return this.getTypedRuleContext(NumericonlyContext, 0) as NumericonlyContext;
	}
	public OPERATOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPERATOR, 0);
	}
	public operator_with_argtypes(): Operator_with_argtypesContext {
		return this.getTypedRuleContext(Operator_with_argtypesContext, 0) as Operator_with_argtypesContext;
	}
	public CLASS(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLASS, 0);
	}
	public USING(): TerminalNode {
		return this.getToken(PostgreSQLParser.USING, 0);
	}
	public FAMILY(): TerminalNode {
		return this.getToken(PostgreSQLParser.FAMILY, 0);
	}
	public PROCEDURE(): TerminalNode {
		return this.getToken(PostgreSQLParser.PROCEDURE, 0);
	}
	public ROUTINE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROUTINE, 0);
	}
	public SCHEMA(): TerminalNode {
		return this.getToken(PostgreSQLParser.SCHEMA, 0);
	}
	public TYPE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TYPE_P, 0);
	}
	public TABLESPACE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLESPACE, 0);
	}
	public STATISTICS(): TerminalNode {
		return this.getToken(PostgreSQLParser.STATISTICS, 0);
	}
	public TEXT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TEXT_P, 0);
	}
	public SEARCH(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEARCH, 0);
	}
	public DICTIONARY(): TerminalNode {
		return this.getToken(PostgreSQLParser.DICTIONARY, 0);
	}
	public CONFIGURATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONFIGURATION, 0);
	}
	public FOREIGN(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOREIGN, 0);
	}
	public DATA_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DATA_P, 0);
	}
	public WRAPPER(): TerminalNode {
		return this.getToken(PostgreSQLParser.WRAPPER, 0);
	}
	public SERVER(): TerminalNode {
		return this.getToken(PostgreSQLParser.SERVER, 0);
	}
	public EVENT(): TerminalNode {
		return this.getToken(PostgreSQLParser.EVENT, 0);
	}
	public TRIGGER(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRIGGER, 0);
	}
	public PUBLICATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.PUBLICATION, 0);
	}
	public SUBSCRIPTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.SUBSCRIPTION, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alterownerstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlterownerstmt) {
	 		listener.enterAlterownerstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlterownerstmt) {
	 		listener.exitAlterownerstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlterownerstmt) {
			return visitor.visitAlterownerstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreatepublicationstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public PUBLICATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.PUBLICATION, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public opt_publication_for_tables(): Opt_publication_for_tablesContext {
		return this.getTypedRuleContext(Opt_publication_for_tablesContext, 0) as Opt_publication_for_tablesContext;
	}
	public opt_definition(): Opt_definitionContext {
		return this.getTypedRuleContext(Opt_definitionContext, 0) as Opt_definitionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createpublicationstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreatepublicationstmt) {
	 		listener.enterCreatepublicationstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreatepublicationstmt) {
	 		listener.exitCreatepublicationstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreatepublicationstmt) {
			return visitor.visitCreatepublicationstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_publication_for_tablesContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public publication_for_tables(): Publication_for_tablesContext {
		return this.getTypedRuleContext(Publication_for_tablesContext, 0) as Publication_for_tablesContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_publication_for_tables;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_publication_for_tables) {
	 		listener.enterOpt_publication_for_tables(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_publication_for_tables) {
	 		listener.exitOpt_publication_for_tables(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_publication_for_tables) {
			return visitor.visitOpt_publication_for_tables(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Publication_for_tablesContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
	public TABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLE, 0);
	}
	public relation_expr_list(): Relation_expr_listContext {
		return this.getTypedRuleContext(Relation_expr_listContext, 0) as Relation_expr_listContext;
	}
	public ALL(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALL, 0);
	}
	public TABLES(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLES, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_publication_for_tables;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterPublication_for_tables) {
	 		listener.enterPublication_for_tables(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitPublication_for_tables) {
	 		listener.exitPublication_for_tables(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitPublication_for_tables) {
			return visitor.visitPublication_for_tables(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AlterpublicationstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public PUBLICATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.PUBLICATION, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public SET(): TerminalNode {
		return this.getToken(PostgreSQLParser.SET, 0);
	}
	public definition(): DefinitionContext {
		return this.getTypedRuleContext(DefinitionContext, 0) as DefinitionContext;
	}
	public ADD_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.ADD_P, 0);
	}
	public TABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLE, 0);
	}
	public relation_expr_list(): Relation_expr_listContext {
		return this.getTypedRuleContext(Relation_expr_listContext, 0) as Relation_expr_listContext;
	}
	public DROP(): TerminalNode {
		return this.getToken(PostgreSQLParser.DROP, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alterpublicationstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlterpublicationstmt) {
	 		listener.enterAlterpublicationstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlterpublicationstmt) {
	 		listener.exitAlterpublicationstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlterpublicationstmt) {
			return visitor.visitAlterpublicationstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreatesubscriptionstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public SUBSCRIPTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.SUBSCRIPTION, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public CONNECTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONNECTION, 0);
	}
	public sconst(): SconstContext {
		return this.getTypedRuleContext(SconstContext, 0) as SconstContext;
	}
	public PUBLICATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.PUBLICATION, 0);
	}
	public publication_name_list(): Publication_name_listContext {
		return this.getTypedRuleContext(Publication_name_listContext, 0) as Publication_name_listContext;
	}
	public opt_definition(): Opt_definitionContext {
		return this.getTypedRuleContext(Opt_definitionContext, 0) as Opt_definitionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createsubscriptionstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreatesubscriptionstmt) {
	 		listener.enterCreatesubscriptionstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreatesubscriptionstmt) {
	 		listener.exitCreatesubscriptionstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreatesubscriptionstmt) {
			return visitor.visitCreatesubscriptionstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Publication_name_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public publication_name_item_list(): Publication_name_itemContext[] {
		return this.getTypedRuleContexts(Publication_name_itemContext) as Publication_name_itemContext[];
	}
	public publication_name_item(i: number): Publication_name_itemContext {
		return this.getTypedRuleContext(Publication_name_itemContext, i) as Publication_name_itemContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_publication_name_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterPublication_name_list) {
	 		listener.enterPublication_name_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitPublication_name_list) {
	 		listener.exitPublication_name_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitPublication_name_list) {
			return visitor.visitPublication_name_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Publication_name_itemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public collabel(): CollabelContext {
		return this.getTypedRuleContext(CollabelContext, 0) as CollabelContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_publication_name_item;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterPublication_name_item) {
	 		listener.enterPublication_name_item(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitPublication_name_item) {
	 		listener.exitPublication_name_item(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitPublication_name_item) {
			return visitor.visitPublication_name_item(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AltersubscriptionstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public SUBSCRIPTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.SUBSCRIPTION, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public SET(): TerminalNode {
		return this.getToken(PostgreSQLParser.SET, 0);
	}
	public definition(): DefinitionContext {
		return this.getTypedRuleContext(DefinitionContext, 0) as DefinitionContext;
	}
	public CONNECTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONNECTION, 0);
	}
	public sconst(): SconstContext {
		return this.getTypedRuleContext(SconstContext, 0) as SconstContext;
	}
	public REFRESH(): TerminalNode {
		return this.getToken(PostgreSQLParser.REFRESH, 0);
	}
	public PUBLICATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.PUBLICATION, 0);
	}
	public opt_definition(): Opt_definitionContext {
		return this.getTypedRuleContext(Opt_definitionContext, 0) as Opt_definitionContext;
	}
	public publication_name_list(): Publication_name_listContext {
		return this.getTypedRuleContext(Publication_name_listContext, 0) as Publication_name_listContext;
	}
	public ENABLE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.ENABLE_P, 0);
	}
	public DISABLE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DISABLE_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_altersubscriptionstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAltersubscriptionstmt) {
	 		listener.enterAltersubscriptionstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAltersubscriptionstmt) {
	 		listener.exitAltersubscriptionstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAltersubscriptionstmt) {
			return visitor.visitAltersubscriptionstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class DropsubscriptionstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public DROP(): TerminalNode {
		return this.getToken(PostgreSQLParser.DROP, 0);
	}
	public SUBSCRIPTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.SUBSCRIPTION, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public opt_drop_behavior(): Opt_drop_behaviorContext {
		return this.getTypedRuleContext(Opt_drop_behaviorContext, 0) as Opt_drop_behaviorContext;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_dropsubscriptionstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDropsubscriptionstmt) {
	 		listener.enterDropsubscriptionstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDropsubscriptionstmt) {
	 		listener.exitDropsubscriptionstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDropsubscriptionstmt) {
			return visitor.visitDropsubscriptionstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class RulestmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public opt_or_replace(): Opt_or_replaceContext {
		return this.getTypedRuleContext(Opt_or_replaceContext, 0) as Opt_or_replaceContext;
	}
	public RULE(): TerminalNode {
		return this.getToken(PostgreSQLParser.RULE, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
	public ON(): TerminalNode {
		return this.getToken(PostgreSQLParser.ON, 0);
	}
	public event(): EventContext {
		return this.getTypedRuleContext(EventContext, 0) as EventContext;
	}
	public TO(): TerminalNode {
		return this.getToken(PostgreSQLParser.TO, 0);
	}
	public qualified_name(): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, 0) as Qualified_nameContext;
	}
	public where_clause(): Where_clauseContext {
		return this.getTypedRuleContext(Where_clauseContext, 0) as Where_clauseContext;
	}
	public DO(): TerminalNode {
		return this.getToken(PostgreSQLParser.DO, 0);
	}
	public opt_instead(): Opt_insteadContext {
		return this.getTypedRuleContext(Opt_insteadContext, 0) as Opt_insteadContext;
	}
	public ruleactionlist(): RuleactionlistContext {
		return this.getTypedRuleContext(RuleactionlistContext, 0) as RuleactionlistContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_rulestmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterRulestmt) {
	 		listener.enterRulestmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitRulestmt) {
	 		listener.exitRulestmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitRulestmt) {
			return visitor.visitRulestmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class RuleactionlistContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public NOTHING(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOTHING, 0);
	}
	public ruleactionstmt(): RuleactionstmtContext {
		return this.getTypedRuleContext(RuleactionstmtContext, 0) as RuleactionstmtContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public ruleactionmulti(): RuleactionmultiContext {
		return this.getTypedRuleContext(RuleactionmultiContext, 0) as RuleactionmultiContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_ruleactionlist;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterRuleactionlist) {
	 		listener.enterRuleactionlist(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitRuleactionlist) {
	 		listener.exitRuleactionlist(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitRuleactionlist) {
			return visitor.visitRuleactionlist(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class RuleactionmultiContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ruleactionstmtOrEmpty_list(): RuleactionstmtOrEmptyContext[] {
		return this.getTypedRuleContexts(RuleactionstmtOrEmptyContext) as RuleactionstmtOrEmptyContext[];
	}
	public ruleactionstmtOrEmpty(i: number): RuleactionstmtOrEmptyContext {
		return this.getTypedRuleContext(RuleactionstmtOrEmptyContext, i) as RuleactionstmtOrEmptyContext;
	}
	public SEMI_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.SEMI);
	}
	public SEMI(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.SEMI, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_ruleactionmulti;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterRuleactionmulti) {
	 		listener.enterRuleactionmulti(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitRuleactionmulti) {
	 		listener.exitRuleactionmulti(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitRuleactionmulti) {
			return visitor.visitRuleactionmulti(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class RuleactionstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public selectstmt(): SelectstmtContext {
		return this.getTypedRuleContext(SelectstmtContext, 0) as SelectstmtContext;
	}
	public insertstmt(): InsertstmtContext {
		return this.getTypedRuleContext(InsertstmtContext, 0) as InsertstmtContext;
	}
	public updatestmt(): UpdatestmtContext {
		return this.getTypedRuleContext(UpdatestmtContext, 0) as UpdatestmtContext;
	}
	public deletestmt(): DeletestmtContext {
		return this.getTypedRuleContext(DeletestmtContext, 0) as DeletestmtContext;
	}
	public notifystmt(): NotifystmtContext {
		return this.getTypedRuleContext(NotifystmtContext, 0) as NotifystmtContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_ruleactionstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterRuleactionstmt) {
	 		listener.enterRuleactionstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitRuleactionstmt) {
	 		listener.exitRuleactionstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitRuleactionstmt) {
			return visitor.visitRuleactionstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class RuleactionstmtOrEmptyContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ruleactionstmt(): RuleactionstmtContext {
		return this.getTypedRuleContext(RuleactionstmtContext, 0) as RuleactionstmtContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_ruleactionstmtOrEmpty;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterRuleactionstmtOrEmpty) {
	 		listener.enterRuleactionstmtOrEmpty(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitRuleactionstmtOrEmpty) {
	 		listener.exitRuleactionstmtOrEmpty(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitRuleactionstmtOrEmpty) {
			return visitor.visitRuleactionstmtOrEmpty(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class EventContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public SELECT(): TerminalNode {
		return this.getToken(PostgreSQLParser.SELECT, 0);
	}
	public UPDATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.UPDATE, 0);
	}
	public DELETE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DELETE_P, 0);
	}
	public INSERT(): TerminalNode {
		return this.getToken(PostgreSQLParser.INSERT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_event;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterEvent) {
	 		listener.enterEvent(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitEvent) {
	 		listener.exitEvent(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitEvent) {
			return visitor.visitEvent(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_insteadContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public INSTEAD(): TerminalNode {
		return this.getToken(PostgreSQLParser.INSTEAD, 0);
	}
	public ALSO(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALSO, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_instead;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_instead) {
	 		listener.enterOpt_instead(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_instead) {
	 		listener.exitOpt_instead(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_instead) {
			return visitor.visitOpt_instead(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class NotifystmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public NOTIFY(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOTIFY, 0);
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
	public notify_payload(): Notify_payloadContext {
		return this.getTypedRuleContext(Notify_payloadContext, 0) as Notify_payloadContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_notifystmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterNotifystmt) {
	 		listener.enterNotifystmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitNotifystmt) {
	 		listener.exitNotifystmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitNotifystmt) {
			return visitor.visitNotifystmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Notify_payloadContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public COMMA(): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, 0);
	}
	public sconst(): SconstContext {
		return this.getTypedRuleContext(SconstContext, 0) as SconstContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_notify_payload;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterNotify_payload) {
	 		listener.enterNotify_payload(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitNotify_payload) {
	 		listener.exitNotify_payload(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitNotify_payload) {
			return visitor.visitNotify_payload(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ListenstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public LISTEN(): TerminalNode {
		return this.getToken(PostgreSQLParser.LISTEN, 0);
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_listenstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterListenstmt) {
	 		listener.enterListenstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitListenstmt) {
	 		listener.exitListenstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitListenstmt) {
			return visitor.visitListenstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class UnlistenstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public UNLISTEN(): TerminalNode {
		return this.getToken(PostgreSQLParser.UNLISTEN, 0);
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
	public STAR(): TerminalNode {
		return this.getToken(PostgreSQLParser.STAR, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_unlistenstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterUnlistenstmt) {
	 		listener.enterUnlistenstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitUnlistenstmt) {
	 		listener.exitUnlistenstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitUnlistenstmt) {
			return visitor.visitUnlistenstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class TransactionstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ABORT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.ABORT_P, 0);
	}
	public opt_transaction(): Opt_transactionContext {
		return this.getTypedRuleContext(Opt_transactionContext, 0) as Opt_transactionContext;
	}
	public opt_transaction_chain(): Opt_transaction_chainContext {
		return this.getTypedRuleContext(Opt_transaction_chainContext, 0) as Opt_transaction_chainContext;
	}
	public BEGIN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.BEGIN_P, 0);
	}
	public transaction_mode_list_or_empty(): Transaction_mode_list_or_emptyContext {
		return this.getTypedRuleContext(Transaction_mode_list_or_emptyContext, 0) as Transaction_mode_list_or_emptyContext;
	}
	public START(): TerminalNode {
		return this.getToken(PostgreSQLParser.START, 0);
	}
	public TRANSACTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRANSACTION, 0);
	}
	public COMMIT(): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMIT, 0);
	}
	public END_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.END_P, 0);
	}
	public ROLLBACK(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROLLBACK, 0);
	}
	public SAVEPOINT(): TerminalNode {
		return this.getToken(PostgreSQLParser.SAVEPOINT, 0);
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
	public RELEASE(): TerminalNode {
		return this.getToken(PostgreSQLParser.RELEASE, 0);
	}
	public TO(): TerminalNode {
		return this.getToken(PostgreSQLParser.TO, 0);
	}
	public PREPARE(): TerminalNode {
		return this.getToken(PostgreSQLParser.PREPARE, 0);
	}
	public sconst(): SconstContext {
		return this.getTypedRuleContext(SconstContext, 0) as SconstContext;
	}
	public PREPARED(): TerminalNode {
		return this.getToken(PostgreSQLParser.PREPARED, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_transactionstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTransactionstmt) {
	 		listener.enterTransactionstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTransactionstmt) {
	 		listener.exitTransactionstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTransactionstmt) {
			return visitor.visitTransactionstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_transactionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public WORK(): TerminalNode {
		return this.getToken(PostgreSQLParser.WORK, 0);
	}
	public TRANSACTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRANSACTION, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_transaction;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_transaction) {
	 		listener.enterOpt_transaction(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_transaction) {
	 		listener.exitOpt_transaction(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_transaction) {
			return visitor.visitOpt_transaction(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Transaction_mode_itemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ISOLATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.ISOLATION, 0);
	}
	public LEVEL(): TerminalNode {
		return this.getToken(PostgreSQLParser.LEVEL, 0);
	}
	public iso_level(): Iso_levelContext {
		return this.getTypedRuleContext(Iso_levelContext, 0) as Iso_levelContext;
	}
	public READ(): TerminalNode {
		return this.getToken(PostgreSQLParser.READ, 0);
	}
	public ONLY(): TerminalNode {
		return this.getToken(PostgreSQLParser.ONLY, 0);
	}
	public WRITE(): TerminalNode {
		return this.getToken(PostgreSQLParser.WRITE, 0);
	}
	public DEFERRABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEFERRABLE, 0);
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_transaction_mode_item;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTransaction_mode_item) {
	 		listener.enterTransaction_mode_item(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTransaction_mode_item) {
	 		listener.exitTransaction_mode_item(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTransaction_mode_item) {
			return visitor.visitTransaction_mode_item(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Transaction_mode_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public transaction_mode_item_list(): Transaction_mode_itemContext[] {
		return this.getTypedRuleContexts(Transaction_mode_itemContext) as Transaction_mode_itemContext[];
	}
	public transaction_mode_item(i: number): Transaction_mode_itemContext {
		return this.getTypedRuleContext(Transaction_mode_itemContext, i) as Transaction_mode_itemContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_transaction_mode_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTransaction_mode_list) {
	 		listener.enterTransaction_mode_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTransaction_mode_list) {
	 		listener.exitTransaction_mode_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTransaction_mode_list) {
			return visitor.visitTransaction_mode_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Transaction_mode_list_or_emptyContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public transaction_mode_list(): Transaction_mode_listContext {
		return this.getTypedRuleContext(Transaction_mode_listContext, 0) as Transaction_mode_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_transaction_mode_list_or_empty;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTransaction_mode_list_or_empty) {
	 		listener.enterTransaction_mode_list_or_empty(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTransaction_mode_list_or_empty) {
	 		listener.exitTransaction_mode_list_or_empty(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTransaction_mode_list_or_empty) {
			return visitor.visitTransaction_mode_list_or_empty(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_transaction_chainContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public AND(): TerminalNode {
		return this.getToken(PostgreSQLParser.AND, 0);
	}
	public CHAIN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CHAIN, 0);
	}
	public NO(): TerminalNode {
		return this.getToken(PostgreSQLParser.NO, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_transaction_chain;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_transaction_chain) {
	 		listener.enterOpt_transaction_chain(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_transaction_chain) {
	 		listener.exitOpt_transaction_chain(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_transaction_chain) {
			return visitor.visitOpt_transaction_chain(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ViewstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public opttemp(): OpttempContext {
		return this.getTypedRuleContext(OpttempContext, 0) as OpttempContext;
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
	public selectstmt(): SelectstmtContext {
		return this.getTypedRuleContext(SelectstmtContext, 0) as SelectstmtContext;
	}
	public opt_check_option(): Opt_check_optionContext {
		return this.getTypedRuleContext(Opt_check_optionContext, 0) as Opt_check_optionContext;
	}
	public VIEW(): TerminalNode {
		return this.getToken(PostgreSQLParser.VIEW, 0);
	}
	public qualified_name(): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, 0) as Qualified_nameContext;
	}
	public opt_column_list(): Opt_column_listContext {
		return this.getTypedRuleContext(Opt_column_listContext, 0) as Opt_column_listContext;
	}
	public opt_reloptions(): Opt_reloptionsContext {
		return this.getTypedRuleContext(Opt_reloptionsContext, 0) as Opt_reloptionsContext;
	}
	public RECURSIVE(): TerminalNode {
		return this.getToken(PostgreSQLParser.RECURSIVE, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public columnlist(): ColumnlistContext {
		return this.getTypedRuleContext(ColumnlistContext, 0) as ColumnlistContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public OR(): TerminalNode {
		return this.getToken(PostgreSQLParser.OR, 0);
	}
	public REPLACE(): TerminalNode {
		return this.getToken(PostgreSQLParser.REPLACE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_viewstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterViewstmt) {
	 		listener.enterViewstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitViewstmt) {
	 		listener.exitViewstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitViewstmt) {
			return visitor.visitViewstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_check_optionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public WITH(): TerminalNode {
		return this.getToken(PostgreSQLParser.WITH, 0);
	}
	public CHECK(): TerminalNode {
		return this.getToken(PostgreSQLParser.CHECK, 0);
	}
	public OPTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPTION, 0);
	}
	public CASCADED(): TerminalNode {
		return this.getToken(PostgreSQLParser.CASCADED, 0);
	}
	public LOCAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.LOCAL, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_check_option;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_check_option) {
	 		listener.enterOpt_check_option(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_check_option) {
	 		listener.exitOpt_check_option(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_check_option) {
			return visitor.visitOpt_check_option(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class LoadstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public LOAD(): TerminalNode {
		return this.getToken(PostgreSQLParser.LOAD, 0);
	}
	public file_name(): File_nameContext {
		return this.getTypedRuleContext(File_nameContext, 0) as File_nameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_loadstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterLoadstmt) {
	 		listener.enterLoadstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitLoadstmt) {
	 		listener.exitLoadstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitLoadstmt) {
			return visitor.visitLoadstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreatedbstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public DATABASE(): TerminalNode {
		return this.getToken(PostgreSQLParser.DATABASE, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public opt_with(): Opt_withContext {
		return this.getTypedRuleContext(Opt_withContext, 0) as Opt_withContext;
	}
	public createdb_opt_list(): Createdb_opt_listContext {
		return this.getTypedRuleContext(Createdb_opt_listContext, 0) as Createdb_opt_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createdbstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreatedbstmt) {
	 		listener.enterCreatedbstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreatedbstmt) {
	 		listener.exitCreatedbstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreatedbstmt) {
			return visitor.visitCreatedbstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Createdb_opt_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public createdb_opt_items(): Createdb_opt_itemsContext {
		return this.getTypedRuleContext(Createdb_opt_itemsContext, 0) as Createdb_opt_itemsContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createdb_opt_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreatedb_opt_list) {
	 		listener.enterCreatedb_opt_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreatedb_opt_list) {
	 		listener.exitCreatedb_opt_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreatedb_opt_list) {
			return visitor.visitCreatedb_opt_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Createdb_opt_itemsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public createdb_opt_item_list(): Createdb_opt_itemContext[] {
		return this.getTypedRuleContexts(Createdb_opt_itemContext) as Createdb_opt_itemContext[];
	}
	public createdb_opt_item(i: number): Createdb_opt_itemContext {
		return this.getTypedRuleContext(Createdb_opt_itemContext, i) as Createdb_opt_itemContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createdb_opt_items;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreatedb_opt_items) {
	 		listener.enterCreatedb_opt_items(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreatedb_opt_items) {
	 		listener.exitCreatedb_opt_items(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreatedb_opt_items) {
			return visitor.visitCreatedb_opt_items(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Createdb_opt_itemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public createdb_opt_name(): Createdb_opt_nameContext {
		return this.getTypedRuleContext(Createdb_opt_nameContext, 0) as Createdb_opt_nameContext;
	}
	public opt_equal(): Opt_equalContext {
		return this.getTypedRuleContext(Opt_equalContext, 0) as Opt_equalContext;
	}
	public signediconst(): SignediconstContext {
		return this.getTypedRuleContext(SignediconstContext, 0) as SignediconstContext;
	}
	public opt_boolean_or_string(): Opt_boolean_or_stringContext {
		return this.getTypedRuleContext(Opt_boolean_or_stringContext, 0) as Opt_boolean_or_stringContext;
	}
	public DEFAULT(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEFAULT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createdb_opt_item;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreatedb_opt_item) {
	 		listener.enterCreatedb_opt_item(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreatedb_opt_item) {
	 		listener.exitCreatedb_opt_item(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreatedb_opt_item) {
			return visitor.visitCreatedb_opt_item(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Createdb_opt_nameContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public identifier(): IdentifierContext {
		return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext;
	}
	public CONNECTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONNECTION, 0);
	}
	public LIMIT(): TerminalNode {
		return this.getToken(PostgreSQLParser.LIMIT, 0);
	}
	public ENCODING(): TerminalNode {
		return this.getToken(PostgreSQLParser.ENCODING, 0);
	}
	public LOCATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.LOCATION, 0);
	}
	public OWNER(): TerminalNode {
		return this.getToken(PostgreSQLParser.OWNER, 0);
	}
	public TABLESPACE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLESPACE, 0);
	}
	public TEMPLATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TEMPLATE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createdb_opt_name;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreatedb_opt_name) {
	 		listener.enterCreatedb_opt_name(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreatedb_opt_name) {
	 		listener.exitCreatedb_opt_name(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreatedb_opt_name) {
			return visitor.visitCreatedb_opt_name(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_equalContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public EQUAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.EQUAL, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_equal;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_equal) {
	 		listener.enterOpt_equal(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_equal) {
	 		listener.exitOpt_equal(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_equal) {
			return visitor.visitOpt_equal(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AlterdatabasestmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public DATABASE(): TerminalNode {
		return this.getToken(PostgreSQLParser.DATABASE, 0);
	}
	public name_list(): NameContext[] {
		return this.getTypedRuleContexts(NameContext) as NameContext[];
	}
	public name(i: number): NameContext {
		return this.getTypedRuleContext(NameContext, i) as NameContext;
	}
	public WITH(): TerminalNode {
		return this.getToken(PostgreSQLParser.WITH, 0);
	}
	public createdb_opt_list(): Createdb_opt_listContext {
		return this.getTypedRuleContext(Createdb_opt_listContext, 0) as Createdb_opt_listContext;
	}
	public SET(): TerminalNode {
		return this.getToken(PostgreSQLParser.SET, 0);
	}
	public TABLESPACE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLESPACE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alterdatabasestmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlterdatabasestmt) {
	 		listener.enterAlterdatabasestmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlterdatabasestmt) {
	 		listener.exitAlterdatabasestmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlterdatabasestmt) {
			return visitor.visitAlterdatabasestmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AlterdatabasesetstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public DATABASE(): TerminalNode {
		return this.getToken(PostgreSQLParser.DATABASE, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public setresetclause(): SetresetclauseContext {
		return this.getTypedRuleContext(SetresetclauseContext, 0) as SetresetclauseContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alterdatabasesetstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlterdatabasesetstmt) {
	 		listener.enterAlterdatabasesetstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlterdatabasesetstmt) {
	 		listener.exitAlterdatabasesetstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlterdatabasesetstmt) {
			return visitor.visitAlterdatabasesetstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class DropdbstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public DROP(): TerminalNode {
		return this.getToken(PostgreSQLParser.DROP, 0);
	}
	public DATABASE(): TerminalNode {
		return this.getToken(PostgreSQLParser.DATABASE, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
	public opt_with(): Opt_withContext {
		return this.getTypedRuleContext(Opt_withContext, 0) as Opt_withContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public drop_option_list(): Drop_option_listContext {
		return this.getTypedRuleContext(Drop_option_listContext, 0) as Drop_option_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_dropdbstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDropdbstmt) {
	 		listener.enterDropdbstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDropdbstmt) {
	 		listener.exitDropdbstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDropdbstmt) {
			return visitor.visitDropdbstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Drop_option_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public drop_option_list(): Drop_optionContext[] {
		return this.getTypedRuleContexts(Drop_optionContext) as Drop_optionContext[];
	}
	public drop_option(i: number): Drop_optionContext {
		return this.getTypedRuleContext(Drop_optionContext, i) as Drop_optionContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_drop_option_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDrop_option_list) {
	 		listener.enterDrop_option_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDrop_option_list) {
	 		listener.exitDrop_option_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDrop_option_list) {
			return visitor.visitDrop_option_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Drop_optionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public FORCE(): TerminalNode {
		return this.getToken(PostgreSQLParser.FORCE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_drop_option;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDrop_option) {
	 		listener.enterDrop_option(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDrop_option) {
	 		listener.exitDrop_option(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDrop_option) {
			return visitor.visitDrop_option(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AltercollationstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public COLLATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.COLLATION, 0);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
	public REFRESH(): TerminalNode {
		return this.getToken(PostgreSQLParser.REFRESH, 0);
	}
	public VERSION_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.VERSION_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_altercollationstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAltercollationstmt) {
	 		listener.enterAltercollationstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAltercollationstmt) {
	 		listener.exitAltercollationstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAltercollationstmt) {
			return visitor.visitAltercollationstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AltersystemstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public SYSTEM_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.SYSTEM_P, 0);
	}
	public generic_set(): Generic_setContext {
		return this.getTypedRuleContext(Generic_setContext, 0) as Generic_setContext;
	}
	public SET(): TerminalNode {
		return this.getToken(PostgreSQLParser.SET, 0);
	}
	public RESET(): TerminalNode {
		return this.getToken(PostgreSQLParser.RESET, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_altersystemstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAltersystemstmt) {
	 		listener.enterAltersystemstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAltersystemstmt) {
	 		listener.exitAltersystemstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAltersystemstmt) {
			return visitor.visitAltersystemstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreatedomainstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public DOMAIN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DOMAIN_P, 0);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
	public opt_as(): Opt_asContext {
		return this.getTypedRuleContext(Opt_asContext, 0) as Opt_asContext;
	}
	public typename(): TypenameContext {
		return this.getTypedRuleContext(TypenameContext, 0) as TypenameContext;
	}
	public colquallist(): ColquallistContext {
		return this.getTypedRuleContext(ColquallistContext, 0) as ColquallistContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createdomainstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreatedomainstmt) {
	 		listener.enterCreatedomainstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreatedomainstmt) {
	 		listener.exitCreatedomainstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreatedomainstmt) {
			return visitor.visitCreatedomainstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AlterdomainstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public DOMAIN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DOMAIN_P, 0);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
	public alter_column_default(): Alter_column_defaultContext {
		return this.getTypedRuleContext(Alter_column_defaultContext, 0) as Alter_column_defaultContext;
	}
	public DROP(): TerminalNode {
		return this.getToken(PostgreSQLParser.DROP, 0);
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
	public NULL_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.NULL_P, 0);
	}
	public SET(): TerminalNode {
		return this.getToken(PostgreSQLParser.SET, 0);
	}
	public ADD_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.ADD_P, 0);
	}
	public tableconstraint(): TableconstraintContext {
		return this.getTypedRuleContext(TableconstraintContext, 0) as TableconstraintContext;
	}
	public CONSTRAINT(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONSTRAINT, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public opt_drop_behavior(): Opt_drop_behaviorContext {
		return this.getTypedRuleContext(Opt_drop_behaviorContext, 0) as Opt_drop_behaviorContext;
	}
	public VALIDATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.VALIDATE, 0);
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alterdomainstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlterdomainstmt) {
	 		listener.enterAlterdomainstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlterdomainstmt) {
	 		listener.exitAlterdomainstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlterdomainstmt) {
			return visitor.visitAlterdomainstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_asContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_as;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_as) {
	 		listener.enterOpt_as(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_as) {
	 		listener.exitOpt_as(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_as) {
			return visitor.visitOpt_as(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AltertsdictionarystmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public TEXT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TEXT_P, 0);
	}
	public SEARCH(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEARCH, 0);
	}
	public DICTIONARY(): TerminalNode {
		return this.getToken(PostgreSQLParser.DICTIONARY, 0);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
	public definition(): DefinitionContext {
		return this.getTypedRuleContext(DefinitionContext, 0) as DefinitionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_altertsdictionarystmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAltertsdictionarystmt) {
	 		listener.enterAltertsdictionarystmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAltertsdictionarystmt) {
	 		listener.exitAltertsdictionarystmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAltertsdictionarystmt) {
			return visitor.visitAltertsdictionarystmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AltertsconfigurationstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALTER_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.ALTER);
	}
	public ALTER(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, i);
	}
	public TEXT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TEXT_P, 0);
	}
	public SEARCH(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEARCH, 0);
	}
	public CONFIGURATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONFIGURATION, 0);
	}
	// @ts-ignore
	public any_name_list(): Any_nameContext[] {
		return this.getTypedRuleContexts(Any_nameContext) as Any_nameContext[];
	}
	public any_name(i: number): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, i) as Any_nameContext;
	}
	public ADD_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.ADD_P, 0);
	}
	public MAPPING(): TerminalNode {
		return this.getToken(PostgreSQLParser.MAPPING, 0);
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
	public name_list(): Name_listContext {
		return this.getTypedRuleContext(Name_listContext, 0) as Name_listContext;
	}
	public any_with(): Any_withContext {
		return this.getTypedRuleContext(Any_withContext, 0) as Any_withContext;
	}
	// @ts-ignore
	public any_name_list(): Any_name_listContext {
		return this.getTypedRuleContext(Any_name_listContext, 0) as Any_name_listContext;
	}
	public REPLACE(): TerminalNode {
		return this.getToken(PostgreSQLParser.REPLACE, 0);
	}
	public DROP(): TerminalNode {
		return this.getToken(PostgreSQLParser.DROP, 0);
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_altertsconfigurationstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAltertsconfigurationstmt) {
	 		listener.enterAltertsconfigurationstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAltertsconfigurationstmt) {
	 		listener.exitAltertsconfigurationstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAltertsconfigurationstmt) {
			return visitor.visitAltertsconfigurationstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Any_withContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public WITH(): TerminalNode {
		return this.getToken(PostgreSQLParser.WITH, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_any_with;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAny_with) {
	 		listener.enterAny_with(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAny_with) {
	 		listener.exitAny_with(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAny_with) {
			return visitor.visitAny_with(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CreateconversionstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public opt_default(): Opt_defaultContext {
		return this.getTypedRuleContext(Opt_defaultContext, 0) as Opt_defaultContext;
	}
	public CONVERSION_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONVERSION_P, 0);
	}
	public any_name_list(): Any_nameContext[] {
		return this.getTypedRuleContexts(Any_nameContext) as Any_nameContext[];
	}
	public any_name(i: number): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, i) as Any_nameContext;
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
	public sconst_list(): SconstContext[] {
		return this.getTypedRuleContexts(SconstContext) as SconstContext[];
	}
	public sconst(i: number): SconstContext {
		return this.getTypedRuleContext(SconstContext, i) as SconstContext;
	}
	public TO(): TerminalNode {
		return this.getToken(PostgreSQLParser.TO, 0);
	}
	public FROM(): TerminalNode {
		return this.getToken(PostgreSQLParser.FROM, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_createconversionstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCreateconversionstmt) {
	 		listener.enterCreateconversionstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCreateconversionstmt) {
	 		listener.exitCreateconversionstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCreateconversionstmt) {
			return visitor.visitCreateconversionstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ClusterstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CLUSTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLUSTER, 0);
	}
	public opt_verbose(): Opt_verboseContext {
		return this.getTypedRuleContext(Opt_verboseContext, 0) as Opt_verboseContext;
	}
	public qualified_name(): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, 0) as Qualified_nameContext;
	}
	public cluster_index_specification(): Cluster_index_specificationContext {
		return this.getTypedRuleContext(Cluster_index_specificationContext, 0) as Cluster_index_specificationContext;
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public ON(): TerminalNode {
		return this.getToken(PostgreSQLParser.ON, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_clusterstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterClusterstmt) {
	 		listener.enterClusterstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitClusterstmt) {
	 		listener.exitClusterstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitClusterstmt) {
			return visitor.visitClusterstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Cluster_index_specificationContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public USING(): TerminalNode {
		return this.getToken(PostgreSQLParser.USING, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_cluster_index_specification;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCluster_index_specification) {
	 		listener.enterCluster_index_specification(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCluster_index_specification) {
	 		listener.exitCluster_index_specification(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCluster_index_specification) {
			return visitor.visitCluster_index_specification(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class VacuumstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public VACUUM(): TerminalNode {
		return this.getToken(PostgreSQLParser.VACUUM, 0);
	}
	public opt_full(): Opt_fullContext {
		return this.getTypedRuleContext(Opt_fullContext, 0) as Opt_fullContext;
	}
	public opt_freeze(): Opt_freezeContext {
		return this.getTypedRuleContext(Opt_freezeContext, 0) as Opt_freezeContext;
	}
	public opt_verbose(): Opt_verboseContext {
		return this.getTypedRuleContext(Opt_verboseContext, 0) as Opt_verboseContext;
	}
	public opt_analyze(): Opt_analyzeContext {
		return this.getTypedRuleContext(Opt_analyzeContext, 0) as Opt_analyzeContext;
	}
	public opt_vacuum_relation_list(): Opt_vacuum_relation_listContext {
		return this.getTypedRuleContext(Opt_vacuum_relation_listContext, 0) as Opt_vacuum_relation_listContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public vac_analyze_option_list(): Vac_analyze_option_listContext {
		return this.getTypedRuleContext(Vac_analyze_option_listContext, 0) as Vac_analyze_option_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_vacuumstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterVacuumstmt) {
	 		listener.enterVacuumstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitVacuumstmt) {
	 		listener.exitVacuumstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitVacuumstmt) {
			return visitor.visitVacuumstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AnalyzestmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public analyze_keyword(): Analyze_keywordContext {
		return this.getTypedRuleContext(Analyze_keywordContext, 0) as Analyze_keywordContext;
	}
	public opt_verbose(): Opt_verboseContext {
		return this.getTypedRuleContext(Opt_verboseContext, 0) as Opt_verboseContext;
	}
	public opt_vacuum_relation_list(): Opt_vacuum_relation_listContext {
		return this.getTypedRuleContext(Opt_vacuum_relation_listContext, 0) as Opt_vacuum_relation_listContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public vac_analyze_option_list(): Vac_analyze_option_listContext {
		return this.getTypedRuleContext(Vac_analyze_option_listContext, 0) as Vac_analyze_option_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_analyzestmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAnalyzestmt) {
	 		listener.enterAnalyzestmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAnalyzestmt) {
	 		listener.exitAnalyzestmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAnalyzestmt) {
			return visitor.visitAnalyzestmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Vac_analyze_option_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public vac_analyze_option_elem_list(): Vac_analyze_option_elemContext[] {
		return this.getTypedRuleContexts(Vac_analyze_option_elemContext) as Vac_analyze_option_elemContext[];
	}
	public vac_analyze_option_elem(i: number): Vac_analyze_option_elemContext {
		return this.getTypedRuleContext(Vac_analyze_option_elemContext, i) as Vac_analyze_option_elemContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_vac_analyze_option_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterVac_analyze_option_list) {
	 		listener.enterVac_analyze_option_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitVac_analyze_option_list) {
	 		listener.exitVac_analyze_option_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitVac_analyze_option_list) {
			return visitor.visitVac_analyze_option_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Analyze_keywordContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ANALYZE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ANALYZE, 0);
	}
	public ANALYSE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ANALYSE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_analyze_keyword;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAnalyze_keyword) {
	 		listener.enterAnalyze_keyword(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAnalyze_keyword) {
	 		listener.exitAnalyze_keyword(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAnalyze_keyword) {
			return visitor.visitAnalyze_keyword(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Vac_analyze_option_elemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public vac_analyze_option_name(): Vac_analyze_option_nameContext {
		return this.getTypedRuleContext(Vac_analyze_option_nameContext, 0) as Vac_analyze_option_nameContext;
	}
	public vac_analyze_option_arg(): Vac_analyze_option_argContext {
		return this.getTypedRuleContext(Vac_analyze_option_argContext, 0) as Vac_analyze_option_argContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_vac_analyze_option_elem;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterVac_analyze_option_elem) {
	 		listener.enterVac_analyze_option_elem(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitVac_analyze_option_elem) {
	 		listener.exitVac_analyze_option_elem(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitVac_analyze_option_elem) {
			return visitor.visitVac_analyze_option_elem(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Vac_analyze_option_nameContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public nonreservedword(): NonreservedwordContext {
		return this.getTypedRuleContext(NonreservedwordContext, 0) as NonreservedwordContext;
	}
	public analyze_keyword(): Analyze_keywordContext {
		return this.getTypedRuleContext(Analyze_keywordContext, 0) as Analyze_keywordContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_vac_analyze_option_name;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterVac_analyze_option_name) {
	 		listener.enterVac_analyze_option_name(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitVac_analyze_option_name) {
	 		listener.exitVac_analyze_option_name(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitVac_analyze_option_name) {
			return visitor.visitVac_analyze_option_name(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Vac_analyze_option_argContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public opt_boolean_or_string(): Opt_boolean_or_stringContext {
		return this.getTypedRuleContext(Opt_boolean_or_stringContext, 0) as Opt_boolean_or_stringContext;
	}
	public numericonly(): NumericonlyContext {
		return this.getTypedRuleContext(NumericonlyContext, 0) as NumericonlyContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_vac_analyze_option_arg;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterVac_analyze_option_arg) {
	 		listener.enterVac_analyze_option_arg(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitVac_analyze_option_arg) {
	 		listener.exitVac_analyze_option_arg(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitVac_analyze_option_arg) {
			return visitor.visitVac_analyze_option_arg(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_analyzeContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public analyze_keyword(): Analyze_keywordContext {
		return this.getTypedRuleContext(Analyze_keywordContext, 0) as Analyze_keywordContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_analyze;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_analyze) {
	 		listener.enterOpt_analyze(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_analyze) {
	 		listener.exitOpt_analyze(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_analyze) {
			return visitor.visitOpt_analyze(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_verboseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public VERBOSE(): TerminalNode {
		return this.getToken(PostgreSQLParser.VERBOSE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_verbose;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_verbose) {
	 		listener.enterOpt_verbose(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_verbose) {
	 		listener.exitOpt_verbose(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_verbose) {
			return visitor.visitOpt_verbose(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_fullContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public FULL(): TerminalNode {
		return this.getToken(PostgreSQLParser.FULL, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_full;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_full) {
	 		listener.enterOpt_full(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_full) {
	 		listener.exitOpt_full(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_full) {
			return visitor.visitOpt_full(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_freezeContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public FREEZE(): TerminalNode {
		return this.getToken(PostgreSQLParser.FREEZE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_freeze;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_freeze) {
	 		listener.enterOpt_freeze(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_freeze) {
	 		listener.exitOpt_freeze(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_freeze) {
			return visitor.visitOpt_freeze(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_name_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public name_list(): Name_listContext {
		return this.getTypedRuleContext(Name_listContext, 0) as Name_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_name_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_name_list) {
	 		listener.enterOpt_name_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_name_list) {
	 		listener.exitOpt_name_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_name_list) {
			return visitor.visitOpt_name_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Vacuum_relationContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public qualified_name(): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, 0) as Qualified_nameContext;
	}
	public opt_name_list(): Opt_name_listContext {
		return this.getTypedRuleContext(Opt_name_listContext, 0) as Opt_name_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_vacuum_relation;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterVacuum_relation) {
	 		listener.enterVacuum_relation(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitVacuum_relation) {
	 		listener.exitVacuum_relation(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitVacuum_relation) {
			return visitor.visitVacuum_relation(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Vacuum_relation_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public vacuum_relation_list(): Vacuum_relationContext[] {
		return this.getTypedRuleContexts(Vacuum_relationContext) as Vacuum_relationContext[];
	}
	public vacuum_relation(i: number): Vacuum_relationContext {
		return this.getTypedRuleContext(Vacuum_relationContext, i) as Vacuum_relationContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_vacuum_relation_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterVacuum_relation_list) {
	 		listener.enterVacuum_relation_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitVacuum_relation_list) {
	 		listener.exitVacuum_relation_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitVacuum_relation_list) {
			return visitor.visitVacuum_relation_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_vacuum_relation_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public vacuum_relation_list(): Vacuum_relation_listContext {
		return this.getTypedRuleContext(Vacuum_relation_listContext, 0) as Vacuum_relation_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_vacuum_relation_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_vacuum_relation_list) {
	 		listener.enterOpt_vacuum_relation_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_vacuum_relation_list) {
	 		listener.exitOpt_vacuum_relation_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_vacuum_relation_list) {
			return visitor.visitOpt_vacuum_relation_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ExplainstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public EXPLAIN(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXPLAIN, 0);
	}
	public explainablestmt(): ExplainablestmtContext {
		return this.getTypedRuleContext(ExplainablestmtContext, 0) as ExplainablestmtContext;
	}
	public analyze_keyword(): Analyze_keywordContext {
		return this.getTypedRuleContext(Analyze_keywordContext, 0) as Analyze_keywordContext;
	}
	public opt_verbose(): Opt_verboseContext {
		return this.getTypedRuleContext(Opt_verboseContext, 0) as Opt_verboseContext;
	}
	public VERBOSE(): TerminalNode {
		return this.getToken(PostgreSQLParser.VERBOSE, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public explain_option_list(): Explain_option_listContext {
		return this.getTypedRuleContext(Explain_option_listContext, 0) as Explain_option_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_explainstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterExplainstmt) {
	 		listener.enterExplainstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitExplainstmt) {
	 		listener.exitExplainstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitExplainstmt) {
			return visitor.visitExplainstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ExplainablestmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public selectstmt(): SelectstmtContext {
		return this.getTypedRuleContext(SelectstmtContext, 0) as SelectstmtContext;
	}
	public insertstmt(): InsertstmtContext {
		return this.getTypedRuleContext(InsertstmtContext, 0) as InsertstmtContext;
	}
	public updatestmt(): UpdatestmtContext {
		return this.getTypedRuleContext(UpdatestmtContext, 0) as UpdatestmtContext;
	}
	public deletestmt(): DeletestmtContext {
		return this.getTypedRuleContext(DeletestmtContext, 0) as DeletestmtContext;
	}
	public declarecursorstmt(): DeclarecursorstmtContext {
		return this.getTypedRuleContext(DeclarecursorstmtContext, 0) as DeclarecursorstmtContext;
	}
	public createasstmt(): CreateasstmtContext {
		return this.getTypedRuleContext(CreateasstmtContext, 0) as CreateasstmtContext;
	}
	public creatematviewstmt(): CreatematviewstmtContext {
		return this.getTypedRuleContext(CreatematviewstmtContext, 0) as CreatematviewstmtContext;
	}
	public refreshmatviewstmt(): RefreshmatviewstmtContext {
		return this.getTypedRuleContext(RefreshmatviewstmtContext, 0) as RefreshmatviewstmtContext;
	}
	public executestmt(): ExecutestmtContext {
		return this.getTypedRuleContext(ExecutestmtContext, 0) as ExecutestmtContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_explainablestmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterExplainablestmt) {
	 		listener.enterExplainablestmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitExplainablestmt) {
	 		listener.exitExplainablestmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitExplainablestmt) {
			return visitor.visitExplainablestmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Explain_option_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public explain_option_elem_list(): Explain_option_elemContext[] {
		return this.getTypedRuleContexts(Explain_option_elemContext) as Explain_option_elemContext[];
	}
	public explain_option_elem(i: number): Explain_option_elemContext {
		return this.getTypedRuleContext(Explain_option_elemContext, i) as Explain_option_elemContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_explain_option_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterExplain_option_list) {
	 		listener.enterExplain_option_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitExplain_option_list) {
	 		listener.exitExplain_option_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitExplain_option_list) {
			return visitor.visitExplain_option_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Explain_option_elemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public explain_option_name(): Explain_option_nameContext {
		return this.getTypedRuleContext(Explain_option_nameContext, 0) as Explain_option_nameContext;
	}
	public explain_option_arg(): Explain_option_argContext {
		return this.getTypedRuleContext(Explain_option_argContext, 0) as Explain_option_argContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_explain_option_elem;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterExplain_option_elem) {
	 		listener.enterExplain_option_elem(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitExplain_option_elem) {
	 		listener.exitExplain_option_elem(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitExplain_option_elem) {
			return visitor.visitExplain_option_elem(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Explain_option_nameContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public nonreservedword(): NonreservedwordContext {
		return this.getTypedRuleContext(NonreservedwordContext, 0) as NonreservedwordContext;
	}
	public analyze_keyword(): Analyze_keywordContext {
		return this.getTypedRuleContext(Analyze_keywordContext, 0) as Analyze_keywordContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_explain_option_name;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterExplain_option_name) {
	 		listener.enterExplain_option_name(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitExplain_option_name) {
	 		listener.exitExplain_option_name(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitExplain_option_name) {
			return visitor.visitExplain_option_name(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Explain_option_argContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public opt_boolean_or_string(): Opt_boolean_or_stringContext {
		return this.getTypedRuleContext(Opt_boolean_or_stringContext, 0) as Opt_boolean_or_stringContext;
	}
	public numericonly(): NumericonlyContext {
		return this.getTypedRuleContext(NumericonlyContext, 0) as NumericonlyContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_explain_option_arg;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterExplain_option_arg) {
	 		listener.enterExplain_option_arg(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitExplain_option_arg) {
	 		listener.exitExplain_option_arg(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitExplain_option_arg) {
			return visitor.visitExplain_option_arg(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class PreparestmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public PREPARE(): TerminalNode {
		return this.getToken(PostgreSQLParser.PREPARE, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public prep_type_clause(): Prep_type_clauseContext {
		return this.getTypedRuleContext(Prep_type_clauseContext, 0) as Prep_type_clauseContext;
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
	public preparablestmt(): PreparablestmtContext {
		return this.getTypedRuleContext(PreparablestmtContext, 0) as PreparablestmtContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_preparestmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterPreparestmt) {
	 		listener.enterPreparestmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitPreparestmt) {
	 		listener.exitPreparestmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitPreparestmt) {
			return visitor.visitPreparestmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Prep_type_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public type_list(): Type_listContext {
		return this.getTypedRuleContext(Type_listContext, 0) as Type_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_prep_type_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterPrep_type_clause) {
	 		listener.enterPrep_type_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitPrep_type_clause) {
	 		listener.exitPrep_type_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitPrep_type_clause) {
			return visitor.visitPrep_type_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class PreparablestmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public selectstmt(): SelectstmtContext {
		return this.getTypedRuleContext(SelectstmtContext, 0) as SelectstmtContext;
	}
	public insertstmt(): InsertstmtContext {
		return this.getTypedRuleContext(InsertstmtContext, 0) as InsertstmtContext;
	}
	public updatestmt(): UpdatestmtContext {
		return this.getTypedRuleContext(UpdatestmtContext, 0) as UpdatestmtContext;
	}
	public deletestmt(): DeletestmtContext {
		return this.getTypedRuleContext(DeletestmtContext, 0) as DeletestmtContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_preparablestmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterPreparablestmt) {
	 		listener.enterPreparablestmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitPreparablestmt) {
	 		listener.exitPreparablestmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitPreparablestmt) {
			return visitor.visitPreparablestmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ExecutestmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public EXECUTE(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXECUTE, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public execute_param_clause(): Execute_param_clauseContext {
		return this.getTypedRuleContext(Execute_param_clauseContext, 0) as Execute_param_clauseContext;
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public opttemp(): OpttempContext {
		return this.getTypedRuleContext(OpttempContext, 0) as OpttempContext;
	}
	public TABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLE, 0);
	}
	public create_as_target(): Create_as_targetContext {
		return this.getTypedRuleContext(Create_as_targetContext, 0) as Create_as_targetContext;
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
	public opt_with_data(): Opt_with_dataContext {
		return this.getTypedRuleContext(Opt_with_dataContext, 0) as Opt_with_dataContext;
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_executestmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterExecutestmt) {
	 		listener.enterExecutestmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitExecutestmt) {
	 		listener.exitExecutestmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitExecutestmt) {
			return visitor.visitExecutestmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Execute_param_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public expr_list(): Expr_listContext {
		return this.getTypedRuleContext(Expr_listContext, 0) as Expr_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_execute_param_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterExecute_param_clause) {
	 		listener.enterExecute_param_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitExecute_param_clause) {
	 		listener.exitExecute_param_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitExecute_param_clause) {
			return visitor.visitExecute_param_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class DeallocatestmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public DEALLOCATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEALLOCATE, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public PREPARE(): TerminalNode {
		return this.getToken(PostgreSQLParser.PREPARE, 0);
	}
	public ALL(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALL, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_deallocatestmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDeallocatestmt) {
	 		listener.enterDeallocatestmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDeallocatestmt) {
	 		listener.exitDeallocatestmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDeallocatestmt) {
			return visitor.visitDeallocatestmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class InsertstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public opt_with_clause(): Opt_with_clauseContext {
		return this.getTypedRuleContext(Opt_with_clauseContext, 0) as Opt_with_clauseContext;
	}
	public INSERT(): TerminalNode {
		return this.getToken(PostgreSQLParser.INSERT, 0);
	}
	public INTO(): TerminalNode {
		return this.getToken(PostgreSQLParser.INTO, 0);
	}
	public insert_target(): Insert_targetContext {
		return this.getTypedRuleContext(Insert_targetContext, 0) as Insert_targetContext;
	}
	public insert_rest(): Insert_restContext {
		return this.getTypedRuleContext(Insert_restContext, 0) as Insert_restContext;
	}
	public opt_on_conflict(): Opt_on_conflictContext {
		return this.getTypedRuleContext(Opt_on_conflictContext, 0) as Opt_on_conflictContext;
	}
	public returning_clause(): Returning_clauseContext {
		return this.getTypedRuleContext(Returning_clauseContext, 0) as Returning_clauseContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_insertstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterInsertstmt) {
	 		listener.enterInsertstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitInsertstmt) {
	 		listener.exitInsertstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitInsertstmt) {
			return visitor.visitInsertstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Insert_targetContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public qualified_name(): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, 0) as Qualified_nameContext;
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_insert_target;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterInsert_target) {
	 		listener.enterInsert_target(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitInsert_target) {
	 		listener.exitInsert_target(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitInsert_target) {
			return visitor.visitInsert_target(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Insert_restContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public selectstmt(): SelectstmtContext {
		return this.getTypedRuleContext(SelectstmtContext, 0) as SelectstmtContext;
	}
	public OVERRIDING(): TerminalNode {
		return this.getToken(PostgreSQLParser.OVERRIDING, 0);
	}
	public override_kind(): Override_kindContext {
		return this.getTypedRuleContext(Override_kindContext, 0) as Override_kindContext;
	}
	public VALUE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.VALUE_P, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public insert_column_list(): Insert_column_listContext {
		return this.getTypedRuleContext(Insert_column_listContext, 0) as Insert_column_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public DEFAULT(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEFAULT, 0);
	}
	public VALUES(): TerminalNode {
		return this.getToken(PostgreSQLParser.VALUES, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_insert_rest;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterInsert_rest) {
	 		listener.enterInsert_rest(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitInsert_rest) {
	 		listener.exitInsert_rest(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitInsert_rest) {
			return visitor.visitInsert_rest(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Override_kindContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public USER(): TerminalNode {
		return this.getToken(PostgreSQLParser.USER, 0);
	}
	public SYSTEM_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.SYSTEM_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_override_kind;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOverride_kind) {
	 		listener.enterOverride_kind(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOverride_kind) {
	 		listener.exitOverride_kind(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOverride_kind) {
			return visitor.visitOverride_kind(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Insert_column_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public insert_column_item_list(): Insert_column_itemContext[] {
		return this.getTypedRuleContexts(Insert_column_itemContext) as Insert_column_itemContext[];
	}
	public insert_column_item(i: number): Insert_column_itemContext {
		return this.getTypedRuleContext(Insert_column_itemContext, i) as Insert_column_itemContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_insert_column_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterInsert_column_list) {
	 		listener.enterInsert_column_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitInsert_column_list) {
	 		listener.exitInsert_column_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitInsert_column_list) {
			return visitor.visitInsert_column_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Insert_column_itemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
	public opt_indirection(): Opt_indirectionContext {
		return this.getTypedRuleContext(Opt_indirectionContext, 0) as Opt_indirectionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_insert_column_item;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterInsert_column_item) {
	 		listener.enterInsert_column_item(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitInsert_column_item) {
	 		listener.exitInsert_column_item(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitInsert_column_item) {
			return visitor.visitInsert_column_item(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_on_conflictContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ON(): TerminalNode {
		return this.getToken(PostgreSQLParser.ON, 0);
	}
	public CONFLICT(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONFLICT, 0);
	}
	public opt_conf_expr(): Opt_conf_exprContext {
		return this.getTypedRuleContext(Opt_conf_exprContext, 0) as Opt_conf_exprContext;
	}
	public DO(): TerminalNode {
		return this.getToken(PostgreSQLParser.DO, 0);
	}
	public UPDATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.UPDATE, 0);
	}
	public SET(): TerminalNode {
		return this.getToken(PostgreSQLParser.SET, 0);
	}
	public set_clause_list(): Set_clause_listContext {
		return this.getTypedRuleContext(Set_clause_listContext, 0) as Set_clause_listContext;
	}
	public where_clause(): Where_clauseContext {
		return this.getTypedRuleContext(Where_clauseContext, 0) as Where_clauseContext;
	}
	public NOTHING(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOTHING, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_on_conflict;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_on_conflict) {
	 		listener.enterOpt_on_conflict(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_on_conflict) {
	 		listener.exitOpt_on_conflict(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_on_conflict) {
			return visitor.visitOpt_on_conflict(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_conf_exprContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public index_params(): Index_paramsContext {
		return this.getTypedRuleContext(Index_paramsContext, 0) as Index_paramsContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public where_clause(): Where_clauseContext {
		return this.getTypedRuleContext(Where_clauseContext, 0) as Where_clauseContext;
	}
	public ON(): TerminalNode {
		return this.getToken(PostgreSQLParser.ON, 0);
	}
	public CONSTRAINT(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONSTRAINT, 0);
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_conf_expr;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_conf_expr) {
	 		listener.enterOpt_conf_expr(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_conf_expr) {
	 		listener.exitOpt_conf_expr(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_conf_expr) {
			return visitor.visitOpt_conf_expr(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Returning_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public RETURNING(): TerminalNode {
		return this.getToken(PostgreSQLParser.RETURNING, 0);
	}
	public target_list(): Target_listContext {
		return this.getTypedRuleContext(Target_listContext, 0) as Target_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_returning_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterReturning_clause) {
	 		listener.enterReturning_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitReturning_clause) {
	 		listener.exitReturning_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitReturning_clause) {
			return visitor.visitReturning_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class DeletestmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public opt_with_clause(): Opt_with_clauseContext {
		return this.getTypedRuleContext(Opt_with_clauseContext, 0) as Opt_with_clauseContext;
	}
	public DELETE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DELETE_P, 0);
	}
	public FROM(): TerminalNode {
		return this.getToken(PostgreSQLParser.FROM, 0);
	}
	public relation_expr_opt_alias(): Relation_expr_opt_aliasContext {
		return this.getTypedRuleContext(Relation_expr_opt_aliasContext, 0) as Relation_expr_opt_aliasContext;
	}
	public using_clause(): Using_clauseContext {
		return this.getTypedRuleContext(Using_clauseContext, 0) as Using_clauseContext;
	}
	public where_or_current_clause(): Where_or_current_clauseContext {
		return this.getTypedRuleContext(Where_or_current_clauseContext, 0) as Where_or_current_clauseContext;
	}
	public returning_clause(): Returning_clauseContext {
		return this.getTypedRuleContext(Returning_clauseContext, 0) as Returning_clauseContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_deletestmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDeletestmt) {
	 		listener.enterDeletestmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDeletestmt) {
	 		listener.exitDeletestmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDeletestmt) {
			return visitor.visitDeletestmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Using_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public USING(): TerminalNode {
		return this.getToken(PostgreSQLParser.USING, 0);
	}
	public from_list(): From_listContext {
		return this.getTypedRuleContext(From_listContext, 0) as From_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_using_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterUsing_clause) {
	 		listener.enterUsing_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitUsing_clause) {
	 		listener.exitUsing_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitUsing_clause) {
			return visitor.visitUsing_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class LockstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public LOCK_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.LOCK_P, 0);
	}
	public opt_table(): Opt_tableContext {
		return this.getTypedRuleContext(Opt_tableContext, 0) as Opt_tableContext;
	}
	public relation_expr_list(): Relation_expr_listContext {
		return this.getTypedRuleContext(Relation_expr_listContext, 0) as Relation_expr_listContext;
	}
	public opt_lock(): Opt_lockContext {
		return this.getTypedRuleContext(Opt_lockContext, 0) as Opt_lockContext;
	}
	public opt_nowait(): Opt_nowaitContext {
		return this.getTypedRuleContext(Opt_nowaitContext, 0) as Opt_nowaitContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_lockstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterLockstmt) {
	 		listener.enterLockstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitLockstmt) {
	 		listener.exitLockstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitLockstmt) {
			return visitor.visitLockstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_lockContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public IN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IN_P, 0);
	}
	public lock_type(): Lock_typeContext {
		return this.getTypedRuleContext(Lock_typeContext, 0) as Lock_typeContext;
	}
	public MODE(): TerminalNode {
		return this.getToken(PostgreSQLParser.MODE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_lock;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_lock) {
	 		listener.enterOpt_lock(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_lock) {
	 		listener.exitOpt_lock(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_lock) {
			return visitor.visitOpt_lock(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Lock_typeContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ACCESS(): TerminalNode {
		return this.getToken(PostgreSQLParser.ACCESS, 0);
	}
	public SHARE(): TerminalNode {
		return this.getToken(PostgreSQLParser.SHARE, 0);
	}
	public EXCLUSIVE(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXCLUSIVE, 0);
	}
	public ROW(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROW, 0);
	}
	public UPDATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.UPDATE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_lock_type;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterLock_type) {
	 		listener.enterLock_type(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitLock_type) {
	 		listener.exitLock_type(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitLock_type) {
			return visitor.visitLock_type(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_nowaitContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public NOWAIT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOWAIT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_nowait;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_nowait) {
	 		listener.enterOpt_nowait(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_nowait) {
	 		listener.exitOpt_nowait(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_nowait) {
			return visitor.visitOpt_nowait(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_nowait_or_skipContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public NOWAIT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOWAIT, 0);
	}
	public SKIP_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.SKIP_P, 0);
	}
	public LOCKED(): TerminalNode {
		return this.getToken(PostgreSQLParser.LOCKED, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_nowait_or_skip;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_nowait_or_skip) {
	 		listener.enterOpt_nowait_or_skip(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_nowait_or_skip) {
	 		listener.exitOpt_nowait_or_skip(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_nowait_or_skip) {
			return visitor.visitOpt_nowait_or_skip(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class UpdatestmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public opt_with_clause(): Opt_with_clauseContext {
		return this.getTypedRuleContext(Opt_with_clauseContext, 0) as Opt_with_clauseContext;
	}
	public UPDATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.UPDATE, 0);
	}
	public relation_expr_opt_alias(): Relation_expr_opt_aliasContext {
		return this.getTypedRuleContext(Relation_expr_opt_aliasContext, 0) as Relation_expr_opt_aliasContext;
	}
	public SET(): TerminalNode {
		return this.getToken(PostgreSQLParser.SET, 0);
	}
	public set_clause_list(): Set_clause_listContext {
		return this.getTypedRuleContext(Set_clause_listContext, 0) as Set_clause_listContext;
	}
	public from_clause(): From_clauseContext {
		return this.getTypedRuleContext(From_clauseContext, 0) as From_clauseContext;
	}
	public where_or_current_clause(): Where_or_current_clauseContext {
		return this.getTypedRuleContext(Where_or_current_clauseContext, 0) as Where_or_current_clauseContext;
	}
	public returning_clause(): Returning_clauseContext {
		return this.getTypedRuleContext(Returning_clauseContext, 0) as Returning_clauseContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_updatestmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterUpdatestmt) {
	 		listener.enterUpdatestmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitUpdatestmt) {
	 		listener.exitUpdatestmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitUpdatestmt) {
			return visitor.visitUpdatestmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Set_clause_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public set_clause_list(): Set_clauseContext[] {
		return this.getTypedRuleContexts(Set_clauseContext) as Set_clauseContext[];
	}
	public set_clause(i: number): Set_clauseContext {
		return this.getTypedRuleContext(Set_clauseContext, i) as Set_clauseContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_set_clause_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSet_clause_list) {
	 		listener.enterSet_clause_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSet_clause_list) {
	 		listener.exitSet_clause_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSet_clause_list) {
			return visitor.visitSet_clause_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Set_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public set_target(): Set_targetContext {
		return this.getTypedRuleContext(Set_targetContext, 0) as Set_targetContext;
	}
	public EQUAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.EQUAL, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public set_target_list(): Set_target_listContext {
		return this.getTypedRuleContext(Set_target_listContext, 0) as Set_target_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_set_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSet_clause) {
	 		listener.enterSet_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSet_clause) {
	 		listener.exitSet_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSet_clause) {
			return visitor.visitSet_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Set_targetContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
	public opt_indirection(): Opt_indirectionContext {
		return this.getTypedRuleContext(Opt_indirectionContext, 0) as Opt_indirectionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_set_target;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSet_target) {
	 		listener.enterSet_target(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSet_target) {
	 		listener.exitSet_target(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSet_target) {
			return visitor.visitSet_target(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Set_target_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public set_target_list(): Set_targetContext[] {
		return this.getTypedRuleContexts(Set_targetContext) as Set_targetContext[];
	}
	public set_target(i: number): Set_targetContext {
		return this.getTypedRuleContext(Set_targetContext, i) as Set_targetContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_set_target_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSet_target_list) {
	 		listener.enterSet_target_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSet_target_list) {
	 		listener.exitSet_target_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSet_target_list) {
			return visitor.visitSet_target_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class DeclarecursorstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public DECLARE(): TerminalNode {
		return this.getToken(PostgreSQLParser.DECLARE, 0);
	}
	public cursor_name(): Cursor_nameContext {
		return this.getTypedRuleContext(Cursor_nameContext, 0) as Cursor_nameContext;
	}
	public cursor_options(): Cursor_optionsContext {
		return this.getTypedRuleContext(Cursor_optionsContext, 0) as Cursor_optionsContext;
	}
	public CURSOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.CURSOR, 0);
	}
	public opt_hold(): Opt_holdContext {
		return this.getTypedRuleContext(Opt_holdContext, 0) as Opt_holdContext;
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
	public selectstmt(): SelectstmtContext {
		return this.getTypedRuleContext(SelectstmtContext, 0) as SelectstmtContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_declarecursorstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDeclarecursorstmt) {
	 		listener.enterDeclarecursorstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDeclarecursorstmt) {
	 		listener.exitDeclarecursorstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDeclarecursorstmt) {
			return visitor.visitDeclarecursorstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Cursor_nameContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_cursor_name;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCursor_name) {
	 		listener.enterCursor_name(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCursor_name) {
	 		listener.exitCursor_name(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCursor_name) {
			return visitor.visitCursor_name(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Cursor_optionsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public NO_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.NO);
	}
	public NO(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.NO, i);
	}
	public SCROLL_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.SCROLL);
	}
	public SCROLL(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.SCROLL, i);
	}
	public BINARY_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.BINARY);
	}
	public BINARY(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.BINARY, i);
	}
	public INSENSITIVE_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.INSENSITIVE);
	}
	public INSENSITIVE(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.INSENSITIVE, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_cursor_options;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCursor_options) {
	 		listener.enterCursor_options(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCursor_options) {
	 		listener.exitCursor_options(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCursor_options) {
			return visitor.visitCursor_options(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_holdContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public WITH(): TerminalNode {
		return this.getToken(PostgreSQLParser.WITH, 0);
	}
	public HOLD(): TerminalNode {
		return this.getToken(PostgreSQLParser.HOLD, 0);
	}
	public WITHOUT(): TerminalNode {
		return this.getToken(PostgreSQLParser.WITHOUT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_hold;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_hold) {
	 		listener.enterOpt_hold(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_hold) {
	 		listener.exitOpt_hold(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_hold) {
			return visitor.visitOpt_hold(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class SelectstmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public select_no_parens(): Select_no_parensContext {
		return this.getTypedRuleContext(Select_no_parensContext, 0) as Select_no_parensContext;
	}
	public select_with_parens(): Select_with_parensContext {
		return this.getTypedRuleContext(Select_with_parensContext, 0) as Select_with_parensContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_selectstmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSelectstmt) {
	 		listener.enterSelectstmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSelectstmt) {
	 		listener.exitSelectstmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSelectstmt) {
			return visitor.visitSelectstmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Select_with_parensContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public select_no_parens(): Select_no_parensContext {
		return this.getTypedRuleContext(Select_no_parensContext, 0) as Select_no_parensContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public select_with_parens(): Select_with_parensContext {
		return this.getTypedRuleContext(Select_with_parensContext, 0) as Select_with_parensContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_select_with_parens;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSelect_with_parens) {
	 		listener.enterSelect_with_parens(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSelect_with_parens) {
	 		listener.exitSelect_with_parens(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSelect_with_parens) {
			return visitor.visitSelect_with_parens(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Select_no_parensContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public select_clause(): Select_clauseContext {
		return this.getTypedRuleContext(Select_clauseContext, 0) as Select_clauseContext;
	}
	public opt_sort_clause(): Opt_sort_clauseContext {
		return this.getTypedRuleContext(Opt_sort_clauseContext, 0) as Opt_sort_clauseContext;
	}
	public for_locking_clause(): For_locking_clauseContext {
		return this.getTypedRuleContext(For_locking_clauseContext, 0) as For_locking_clauseContext;
	}
	public opt_select_limit(): Opt_select_limitContext {
		return this.getTypedRuleContext(Opt_select_limitContext, 0) as Opt_select_limitContext;
	}
	public select_limit(): Select_limitContext {
		return this.getTypedRuleContext(Select_limitContext, 0) as Select_limitContext;
	}
	public opt_for_locking_clause(): Opt_for_locking_clauseContext {
		return this.getTypedRuleContext(Opt_for_locking_clauseContext, 0) as Opt_for_locking_clauseContext;
	}
	public with_clause(): With_clauseContext {
		return this.getTypedRuleContext(With_clauseContext, 0) as With_clauseContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_select_no_parens;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSelect_no_parens) {
	 		listener.enterSelect_no_parens(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSelect_no_parens) {
	 		listener.exitSelect_no_parens(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSelect_no_parens) {
			return visitor.visitSelect_no_parens(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Select_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public simple_select(): Simple_selectContext {
		return this.getTypedRuleContext(Simple_selectContext, 0) as Simple_selectContext;
	}
	public select_with_parens(): Select_with_parensContext {
		return this.getTypedRuleContext(Select_with_parensContext, 0) as Select_with_parensContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_select_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSelect_clause) {
	 		listener.enterSelect_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSelect_clause) {
	 		listener.exitSelect_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSelect_clause) {
			return visitor.visitSelect_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Simple_selectContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public SELECT(): TerminalNode {
		return this.getToken(PostgreSQLParser.SELECT, 0);
	}
	public into_clause_list(): Into_clauseContext[] {
		return this.getTypedRuleContexts(Into_clauseContext) as Into_clauseContext[];
	}
	public into_clause(i: number): Into_clauseContext {
		return this.getTypedRuleContext(Into_clauseContext, i) as Into_clauseContext;
	}
	public from_clause(): From_clauseContext {
		return this.getTypedRuleContext(From_clauseContext, 0) as From_clauseContext;
	}
	public where_clause(): Where_clauseContext {
		return this.getTypedRuleContext(Where_clauseContext, 0) as Where_clauseContext;
	}
	public group_clause(): Group_clauseContext {
		return this.getTypedRuleContext(Group_clauseContext, 0) as Group_clauseContext;
	}
	public having_clause(): Having_clauseContext {
		return this.getTypedRuleContext(Having_clauseContext, 0) as Having_clauseContext;
	}
	public window_clause(): Window_clauseContext {
		return this.getTypedRuleContext(Window_clauseContext, 0) as Window_clauseContext;
	}
	public values_clause(): Values_clauseContext {
		return this.getTypedRuleContext(Values_clauseContext, 0) as Values_clauseContext;
	}
	public TABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLE, 0);
	}
	public relation_expr(): Relation_exprContext {
		return this.getTypedRuleContext(Relation_exprContext, 0) as Relation_exprContext;
	}
	public select_with_parens_list(): Select_with_parensContext[] {
		return this.getTypedRuleContexts(Select_with_parensContext) as Select_with_parensContext[];
	}
	public select_with_parens(i: number): Select_with_parensContext {
		return this.getTypedRuleContext(Select_with_parensContext, i) as Select_with_parensContext;
	}
	public set_operator_with_all_or_distinct_list(): Set_operator_with_all_or_distinctContext[] {
		return this.getTypedRuleContexts(Set_operator_with_all_or_distinctContext) as Set_operator_with_all_or_distinctContext[];
	}
	public set_operator_with_all_or_distinct(i: number): Set_operator_with_all_or_distinctContext {
		return this.getTypedRuleContext(Set_operator_with_all_or_distinctContext, i) as Set_operator_with_all_or_distinctContext;
	}
	public opt_all_clause(): Opt_all_clauseContext {
		return this.getTypedRuleContext(Opt_all_clauseContext, 0) as Opt_all_clauseContext;
	}
	public opt_target_list(): Opt_target_listContext {
		return this.getTypedRuleContext(Opt_target_listContext, 0) as Opt_target_listContext;
	}
	public distinct_clause(): Distinct_clauseContext {
		return this.getTypedRuleContext(Distinct_clauseContext, 0) as Distinct_clauseContext;
	}
	public target_list(): Target_listContext {
		return this.getTypedRuleContext(Target_listContext, 0) as Target_listContext;
	}
	public simple_select_list(): Simple_selectContext[] {
		return this.getTypedRuleContexts(Simple_selectContext) as Simple_selectContext[];
	}
	public simple_select(i: number): Simple_selectContext {
		return this.getTypedRuleContext(Simple_selectContext, i) as Simple_selectContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_simple_select;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSimple_select) {
	 		listener.enterSimple_select(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSimple_select) {
	 		listener.exitSimple_select(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSimple_select) {
			return visitor.visitSimple_select(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Set_operatorContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_set_operator;
	}
	public copyFrom(ctx: Set_operatorContext): void {
		super.copyFrom(ctx);
	}
}
export class IntersectContext extends Set_operatorContext {
	constructor(parser: PostgreSQLParser, ctx: Set_operatorContext) {
		super(parser, ctx.parentCtx, ctx.invokingState);
		super.copyFrom(ctx);
	}
	public INTERSECT(): TerminalNode {
		return this.getToken(PostgreSQLParser.INTERSECT, 0);
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterIntersect) {
	 		listener.enterIntersect(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitIntersect) {
	 		listener.exitIntersect(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitIntersect) {
			return visitor.visitIntersect(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}
export class ExceptContext extends Set_operatorContext {
	constructor(parser: PostgreSQLParser, ctx: Set_operatorContext) {
		super(parser, ctx.parentCtx, ctx.invokingState);
		super.copyFrom(ctx);
	}
	public EXCEPT(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXCEPT, 0);
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterExcept) {
	 		listener.enterExcept(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitExcept) {
	 		listener.exitExcept(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitExcept) {
			return visitor.visitExcept(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}
export class UnionContext extends Set_operatorContext {
	constructor(parser: PostgreSQLParser, ctx: Set_operatorContext) {
		super(parser, ctx.parentCtx, ctx.invokingState);
		super.copyFrom(ctx);
	}
	public UNION(): TerminalNode {
		return this.getToken(PostgreSQLParser.UNION, 0);
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterUnion) {
	 		listener.enterUnion(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitUnion) {
	 		listener.exitUnion(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitUnion) {
			return visitor.visitUnion(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Set_operator_with_all_or_distinctContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public set_operator(): Set_operatorContext {
		return this.getTypedRuleContext(Set_operatorContext, 0) as Set_operatorContext;
	}
	public all_or_distinct(): All_or_distinctContext {
		return this.getTypedRuleContext(All_or_distinctContext, 0) as All_or_distinctContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_set_operator_with_all_or_distinct;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSet_operator_with_all_or_distinct) {
	 		listener.enterSet_operator_with_all_or_distinct(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSet_operator_with_all_or_distinct) {
	 		listener.exitSet_operator_with_all_or_distinct(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSet_operator_with_all_or_distinct) {
			return visitor.visitSet_operator_with_all_or_distinct(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class With_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public WITH(): TerminalNode {
		return this.getToken(PostgreSQLParser.WITH, 0);
	}
	public cte_list(): Cte_listContext {
		return this.getTypedRuleContext(Cte_listContext, 0) as Cte_listContext;
	}
	public RECURSIVE(): TerminalNode {
		return this.getToken(PostgreSQLParser.RECURSIVE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_with_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterWith_clause) {
	 		listener.enterWith_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitWith_clause) {
	 		listener.exitWith_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitWith_clause) {
			return visitor.visitWith_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Cte_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public common_table_expr_list(): Common_table_exprContext[] {
		return this.getTypedRuleContexts(Common_table_exprContext) as Common_table_exprContext[];
	}
	public common_table_expr(i: number): Common_table_exprContext {
		return this.getTypedRuleContext(Common_table_exprContext, i) as Common_table_exprContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_cte_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCte_list) {
	 		listener.enterCte_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCte_list) {
	 		listener.exitCte_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCte_list) {
			return visitor.visitCte_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Common_table_exprContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public name(): NameContext {
		return this.getTypedRuleContext(NameContext, 0) as NameContext;
	}
	public opt_name_list(): Opt_name_listContext {
		return this.getTypedRuleContext(Opt_name_listContext, 0) as Opt_name_listContext;
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
	public opt_materialized(): Opt_materializedContext {
		return this.getTypedRuleContext(Opt_materializedContext, 0) as Opt_materializedContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public preparablestmt(): PreparablestmtContext {
		return this.getTypedRuleContext(PreparablestmtContext, 0) as PreparablestmtContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_common_table_expr;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCommon_table_expr) {
	 		listener.enterCommon_table_expr(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCommon_table_expr) {
	 		listener.exitCommon_table_expr(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCommon_table_expr) {
			return visitor.visitCommon_table_expr(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_materializedContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public MATERIALIZED(): TerminalNode {
		return this.getToken(PostgreSQLParser.MATERIALIZED, 0);
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_materialized;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_materialized) {
	 		listener.enterOpt_materialized(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_materialized) {
	 		listener.exitOpt_materialized(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_materialized) {
			return visitor.visitOpt_materialized(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_with_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public with_clause(): With_clauseContext {
		return this.getTypedRuleContext(With_clauseContext, 0) as With_clauseContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_with_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_with_clause) {
	 		listener.enterOpt_with_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_with_clause) {
	 		listener.exitOpt_with_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_with_clause) {
			return visitor.visitOpt_with_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Into_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public INTO(): TerminalNode {
		return this.getToken(PostgreSQLParser.INTO, 0);
	}
	public opt_strict(): Opt_strictContext {
		return this.getTypedRuleContext(Opt_strictContext, 0) as Opt_strictContext;
	}
	public opttempTableName(): OpttempTableNameContext {
		return this.getTypedRuleContext(OpttempTableNameContext, 0) as OpttempTableNameContext;
	}
	public into_target(): Into_targetContext {
		return this.getTypedRuleContext(Into_targetContext, 0) as Into_targetContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_into_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterInto_clause) {
	 		listener.enterInto_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitInto_clause) {
	 		listener.exitInto_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitInto_clause) {
			return visitor.visitInto_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_strictContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public STRICT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.STRICT_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_strict;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_strict) {
	 		listener.enterOpt_strict(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_strict) {
	 		listener.exitOpt_strict(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_strict) {
			return visitor.visitOpt_strict(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class OpttempTableNameContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public opt_table(): Opt_tableContext {
		return this.getTypedRuleContext(Opt_tableContext, 0) as Opt_tableContext;
	}
	public qualified_name(): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, 0) as Qualified_nameContext;
	}
	public TEMPORARY(): TerminalNode {
		return this.getToken(PostgreSQLParser.TEMPORARY, 0);
	}
	public TEMP(): TerminalNode {
		return this.getToken(PostgreSQLParser.TEMP, 0);
	}
	public LOCAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.LOCAL, 0);
	}
	public GLOBAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.GLOBAL, 0);
	}
	public UNLOGGED(): TerminalNode {
		return this.getToken(PostgreSQLParser.UNLOGGED, 0);
	}
	public TABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opttempTableName;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpttempTableName) {
	 		listener.enterOpttempTableName(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpttempTableName) {
	 		listener.exitOpttempTableName(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpttempTableName) {
			return visitor.visitOpttempTableName(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_tableContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public TABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_table;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_table) {
	 		listener.enterOpt_table(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_table) {
	 		listener.exitOpt_table(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_table) {
			return visitor.visitOpt_table(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class All_or_distinctContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALL(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALL, 0);
	}
	public DISTINCT(): TerminalNode {
		return this.getToken(PostgreSQLParser.DISTINCT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_all_or_distinct;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAll_or_distinct) {
	 		listener.enterAll_or_distinct(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAll_or_distinct) {
	 		listener.exitAll_or_distinct(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAll_or_distinct) {
			return visitor.visitAll_or_distinct(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Distinct_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public DISTINCT(): TerminalNode {
		return this.getToken(PostgreSQLParser.DISTINCT, 0);
	}
	public ON(): TerminalNode {
		return this.getToken(PostgreSQLParser.ON, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public expr_list(): Expr_listContext {
		return this.getTypedRuleContext(Expr_listContext, 0) as Expr_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_distinct_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDistinct_clause) {
	 		listener.enterDistinct_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDistinct_clause) {
	 		listener.exitDistinct_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDistinct_clause) {
			return visitor.visitDistinct_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_all_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALL(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALL, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_all_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_all_clause) {
	 		listener.enterOpt_all_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_all_clause) {
	 		listener.exitOpt_all_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_all_clause) {
			return visitor.visitOpt_all_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_sort_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public sort_clause(): Sort_clauseContext {
		return this.getTypedRuleContext(Sort_clauseContext, 0) as Sort_clauseContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_sort_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_sort_clause) {
	 		listener.enterOpt_sort_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_sort_clause) {
	 		listener.exitOpt_sort_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_sort_clause) {
			return visitor.visitOpt_sort_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Sort_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ORDER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ORDER, 0);
	}
	public BY(): TerminalNode {
		return this.getToken(PostgreSQLParser.BY, 0);
	}
	public sortby_list(): Sortby_listContext {
		return this.getTypedRuleContext(Sortby_listContext, 0) as Sortby_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_sort_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSort_clause) {
	 		listener.enterSort_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSort_clause) {
	 		listener.exitSort_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSort_clause) {
			return visitor.visitSort_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Sortby_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public sortby_list(): SortbyContext[] {
		return this.getTypedRuleContexts(SortbyContext) as SortbyContext[];
	}
	public sortby(i: number): SortbyContext {
		return this.getTypedRuleContext(SortbyContext, i) as SortbyContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_sortby_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSortby_list) {
	 		listener.enterSortby_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSortby_list) {
	 		listener.exitSortby_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSortby_list) {
			return visitor.visitSortby_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class SortbyContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public opt_nulls_order(): Opt_nulls_orderContext {
		return this.getTypedRuleContext(Opt_nulls_orderContext, 0) as Opt_nulls_orderContext;
	}
	public USING(): TerminalNode {
		return this.getToken(PostgreSQLParser.USING, 0);
	}
	public qual_all_op(): Qual_all_opContext {
		return this.getTypedRuleContext(Qual_all_opContext, 0) as Qual_all_opContext;
	}
	public opt_asc_desc(): Opt_asc_descContext {
		return this.getTypedRuleContext(Opt_asc_descContext, 0) as Opt_asc_descContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_sortby;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSortby) {
	 		listener.enterSortby(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSortby) {
	 		listener.exitSortby(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSortby) {
			return visitor.visitSortby(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Select_limitContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public limit_clause(): Limit_clauseContext {
		return this.getTypedRuleContext(Limit_clauseContext, 0) as Limit_clauseContext;
	}
	public offset_clause(): Offset_clauseContext {
		return this.getTypedRuleContext(Offset_clauseContext, 0) as Offset_clauseContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_select_limit;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSelect_limit) {
	 		listener.enterSelect_limit(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSelect_limit) {
	 		listener.exitSelect_limit(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSelect_limit) {
			return visitor.visitSelect_limit(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_select_limitContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public select_limit(): Select_limitContext {
		return this.getTypedRuleContext(Select_limitContext, 0) as Select_limitContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_select_limit;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_select_limit) {
	 		listener.enterOpt_select_limit(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_select_limit) {
	 		listener.exitOpt_select_limit(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_select_limit) {
			return visitor.visitOpt_select_limit(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Limit_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public LIMIT(): TerminalNode {
		return this.getToken(PostgreSQLParser.LIMIT, 0);
	}
	public select_limit_value(): Select_limit_valueContext {
		return this.getTypedRuleContext(Select_limit_valueContext, 0) as Select_limit_valueContext;
	}
	public COMMA(): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, 0);
	}
	public select_offset_value(): Select_offset_valueContext {
		return this.getTypedRuleContext(Select_offset_valueContext, 0) as Select_offset_valueContext;
	}
	public FETCH(): TerminalNode {
		return this.getToken(PostgreSQLParser.FETCH, 0);
	}
	public first_or_next(): First_or_nextContext {
		return this.getTypedRuleContext(First_or_nextContext, 0) as First_or_nextContext;
	}
	public select_fetch_first_value(): Select_fetch_first_valueContext {
		return this.getTypedRuleContext(Select_fetch_first_valueContext, 0) as Select_fetch_first_valueContext;
	}
	public row_or_rows(): Row_or_rowsContext {
		return this.getTypedRuleContext(Row_or_rowsContext, 0) as Row_or_rowsContext;
	}
	public ONLY(): TerminalNode {
		return this.getToken(PostgreSQLParser.ONLY, 0);
	}
	public WITH(): TerminalNode {
		return this.getToken(PostgreSQLParser.WITH, 0);
	}
	public TIES(): TerminalNode {
		return this.getToken(PostgreSQLParser.TIES, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_limit_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterLimit_clause) {
	 		listener.enterLimit_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitLimit_clause) {
	 		listener.exitLimit_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitLimit_clause) {
			return visitor.visitLimit_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Offset_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OFFSET(): TerminalNode {
		return this.getToken(PostgreSQLParser.OFFSET, 0);
	}
	public select_offset_value(): Select_offset_valueContext {
		return this.getTypedRuleContext(Select_offset_valueContext, 0) as Select_offset_valueContext;
	}
	public select_fetch_first_value(): Select_fetch_first_valueContext {
		return this.getTypedRuleContext(Select_fetch_first_valueContext, 0) as Select_fetch_first_valueContext;
	}
	public row_or_rows(): Row_or_rowsContext {
		return this.getTypedRuleContext(Row_or_rowsContext, 0) as Row_or_rowsContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_offset_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOffset_clause) {
	 		listener.enterOffset_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOffset_clause) {
	 		listener.exitOffset_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOffset_clause) {
			return visitor.visitOffset_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Select_limit_valueContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public ALL(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALL, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_select_limit_value;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSelect_limit_value) {
	 		listener.enterSelect_limit_value(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSelect_limit_value) {
	 		listener.exitSelect_limit_value(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSelect_limit_value) {
			return visitor.visitSelect_limit_value(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Select_offset_valueContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_select_offset_value;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSelect_offset_value) {
	 		listener.enterSelect_offset_value(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSelect_offset_value) {
	 		listener.exitSelect_offset_value(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSelect_offset_value) {
			return visitor.visitSelect_offset_value(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Select_fetch_first_valueContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public c_expr(): C_exprContext {
		return this.getTypedRuleContext(C_exprContext, 0) as C_exprContext;
	}
	public PLUS(): TerminalNode {
		return this.getToken(PostgreSQLParser.PLUS, 0);
	}
	public i_or_f_const(): I_or_f_constContext {
		return this.getTypedRuleContext(I_or_f_constContext, 0) as I_or_f_constContext;
	}
	public MINUS(): TerminalNode {
		return this.getToken(PostgreSQLParser.MINUS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_select_fetch_first_value;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSelect_fetch_first_value) {
	 		listener.enterSelect_fetch_first_value(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSelect_fetch_first_value) {
	 		listener.exitSelect_fetch_first_value(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSelect_fetch_first_value) {
			return visitor.visitSelect_fetch_first_value(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class I_or_f_constContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public iconst(): IconstContext {
		return this.getTypedRuleContext(IconstContext, 0) as IconstContext;
	}
	public fconst(): FconstContext {
		return this.getTypedRuleContext(FconstContext, 0) as FconstContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_i_or_f_const;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterI_or_f_const) {
	 		listener.enterI_or_f_const(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitI_or_f_const) {
	 		listener.exitI_or_f_const(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitI_or_f_const) {
			return visitor.visitI_or_f_const(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Row_or_rowsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ROW(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROW, 0);
	}
	public ROWS(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROWS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_row_or_rows;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterRow_or_rows) {
	 		listener.enterRow_or_rows(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitRow_or_rows) {
	 		listener.exitRow_or_rows(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitRow_or_rows) {
			return visitor.visitRow_or_rows(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class First_or_nextContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public FIRST_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.FIRST_P, 0);
	}
	public NEXT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NEXT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_first_or_next;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFirst_or_next) {
	 		listener.enterFirst_or_next(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFirst_or_next) {
	 		listener.exitFirst_or_next(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFirst_or_next) {
			return visitor.visitFirst_or_next(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Group_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public GROUP_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.GROUP_P, 0);
	}
	public BY(): TerminalNode {
		return this.getToken(PostgreSQLParser.BY, 0);
	}
	public group_by_list(): Group_by_listContext {
		return this.getTypedRuleContext(Group_by_listContext, 0) as Group_by_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_group_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterGroup_clause) {
	 		listener.enterGroup_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitGroup_clause) {
	 		listener.exitGroup_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitGroup_clause) {
			return visitor.visitGroup_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Group_by_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public group_by_item_list(): Group_by_itemContext[] {
		return this.getTypedRuleContexts(Group_by_itemContext) as Group_by_itemContext[];
	}
	public group_by_item(i: number): Group_by_itemContext {
		return this.getTypedRuleContext(Group_by_itemContext, i) as Group_by_itemContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_group_by_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterGroup_by_list) {
	 		listener.enterGroup_by_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitGroup_by_list) {
	 		listener.exitGroup_by_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitGroup_by_list) {
			return visitor.visitGroup_by_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Group_by_itemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public empty_grouping_set(): Empty_grouping_setContext {
		return this.getTypedRuleContext(Empty_grouping_setContext, 0) as Empty_grouping_setContext;
	}
	public cube_clause(): Cube_clauseContext {
		return this.getTypedRuleContext(Cube_clauseContext, 0) as Cube_clauseContext;
	}
	public rollup_clause(): Rollup_clauseContext {
		return this.getTypedRuleContext(Rollup_clauseContext, 0) as Rollup_clauseContext;
	}
	public grouping_sets_clause(): Grouping_sets_clauseContext {
		return this.getTypedRuleContext(Grouping_sets_clauseContext, 0) as Grouping_sets_clauseContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_group_by_item;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterGroup_by_item) {
	 		listener.enterGroup_by_item(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitGroup_by_item) {
	 		listener.exitGroup_by_item(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitGroup_by_item) {
			return visitor.visitGroup_by_item(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Empty_grouping_setContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_empty_grouping_set;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterEmpty_grouping_set) {
	 		listener.enterEmpty_grouping_set(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitEmpty_grouping_set) {
	 		listener.exitEmpty_grouping_set(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitEmpty_grouping_set) {
			return visitor.visitEmpty_grouping_set(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Rollup_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ROLLUP(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROLLUP, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public expr_list(): Expr_listContext {
		return this.getTypedRuleContext(Expr_listContext, 0) as Expr_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_rollup_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterRollup_clause) {
	 		listener.enterRollup_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitRollup_clause) {
	 		listener.exitRollup_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitRollup_clause) {
			return visitor.visitRollup_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Cube_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CUBE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CUBE, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public expr_list(): Expr_listContext {
		return this.getTypedRuleContext(Expr_listContext, 0) as Expr_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_cube_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCube_clause) {
	 		listener.enterCube_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCube_clause) {
	 		listener.exitCube_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCube_clause) {
			return visitor.visitCube_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Grouping_sets_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public GROUPING(): TerminalNode {
		return this.getToken(PostgreSQLParser.GROUPING, 0);
	}
	public SETS(): TerminalNode {
		return this.getToken(PostgreSQLParser.SETS, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public group_by_list(): Group_by_listContext {
		return this.getTypedRuleContext(Group_by_listContext, 0) as Group_by_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_grouping_sets_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterGrouping_sets_clause) {
	 		listener.enterGrouping_sets_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitGrouping_sets_clause) {
	 		listener.exitGrouping_sets_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitGrouping_sets_clause) {
			return visitor.visitGrouping_sets_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Having_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public HAVING(): TerminalNode {
		return this.getToken(PostgreSQLParser.HAVING, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_having_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterHaving_clause) {
	 		listener.enterHaving_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitHaving_clause) {
	 		listener.exitHaving_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitHaving_clause) {
			return visitor.visitHaving_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class For_locking_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public for_locking_items(): For_locking_itemsContext {
		return this.getTypedRuleContext(For_locking_itemsContext, 0) as For_locking_itemsContext;
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
	public READ(): TerminalNode {
		return this.getToken(PostgreSQLParser.READ, 0);
	}
	public ONLY(): TerminalNode {
		return this.getToken(PostgreSQLParser.ONLY, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_for_locking_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFor_locking_clause) {
	 		listener.enterFor_locking_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFor_locking_clause) {
	 		listener.exitFor_locking_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFor_locking_clause) {
			return visitor.visitFor_locking_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_for_locking_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public for_locking_clause(): For_locking_clauseContext {
		return this.getTypedRuleContext(For_locking_clauseContext, 0) as For_locking_clauseContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_for_locking_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_for_locking_clause) {
	 		listener.enterOpt_for_locking_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_for_locking_clause) {
	 		listener.exitOpt_for_locking_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_for_locking_clause) {
			return visitor.visitOpt_for_locking_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class For_locking_itemsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public for_locking_item_list(): For_locking_itemContext[] {
		return this.getTypedRuleContexts(For_locking_itemContext) as For_locking_itemContext[];
	}
	public for_locking_item(i: number): For_locking_itemContext {
		return this.getTypedRuleContext(For_locking_itemContext, i) as For_locking_itemContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_for_locking_items;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFor_locking_items) {
	 		listener.enterFor_locking_items(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFor_locking_items) {
	 		listener.exitFor_locking_items(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFor_locking_items) {
			return visitor.visitFor_locking_items(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class For_locking_itemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public for_locking_strength(): For_locking_strengthContext {
		return this.getTypedRuleContext(For_locking_strengthContext, 0) as For_locking_strengthContext;
	}
	public locked_rels_list(): Locked_rels_listContext {
		return this.getTypedRuleContext(Locked_rels_listContext, 0) as Locked_rels_listContext;
	}
	public opt_nowait_or_skip(): Opt_nowait_or_skipContext {
		return this.getTypedRuleContext(Opt_nowait_or_skipContext, 0) as Opt_nowait_or_skipContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_for_locking_item;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFor_locking_item) {
	 		listener.enterFor_locking_item(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFor_locking_item) {
	 		listener.exitFor_locking_item(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFor_locking_item) {
			return visitor.visitFor_locking_item(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class For_locking_strengthContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
	public UPDATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.UPDATE, 0);
	}
	public SHARE(): TerminalNode {
		return this.getToken(PostgreSQLParser.SHARE, 0);
	}
	public NO(): TerminalNode {
		return this.getToken(PostgreSQLParser.NO, 0);
	}
	public KEY(): TerminalNode {
		return this.getToken(PostgreSQLParser.KEY, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_for_locking_strength;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFor_locking_strength) {
	 		listener.enterFor_locking_strength(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFor_locking_strength) {
	 		listener.exitFor_locking_strength(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFor_locking_strength) {
			return visitor.visitFor_locking_strength(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Locked_rels_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OF(): TerminalNode {
		return this.getToken(PostgreSQLParser.OF, 0);
	}
	public qualified_name_list(): Qualified_name_listContext {
		return this.getTypedRuleContext(Qualified_name_listContext, 0) as Qualified_name_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_locked_rels_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterLocked_rels_list) {
	 		listener.enterLocked_rels_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitLocked_rels_list) {
	 		listener.exitLocked_rels_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitLocked_rels_list) {
			return visitor.visitLocked_rels_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Values_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public VALUES(): TerminalNode {
		return this.getToken(PostgreSQLParser.VALUES, 0);
	}
	public OPEN_PAREN_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.OPEN_PAREN);
	}
	public OPEN_PAREN(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, i);
	}
	public expr_list_list(): Expr_listContext[] {
		return this.getTypedRuleContexts(Expr_listContext) as Expr_listContext[];
	}
	public expr_list(i: number): Expr_listContext {
		return this.getTypedRuleContext(Expr_listContext, i) as Expr_listContext;
	}
	public CLOSE_PAREN_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.CLOSE_PAREN);
	}
	public CLOSE_PAREN(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, i);
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_values_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterValues_clause) {
	 		listener.enterValues_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitValues_clause) {
	 		listener.exitValues_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitValues_clause) {
			return visitor.visitValues_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class From_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public FROM(): TerminalNode {
		return this.getToken(PostgreSQLParser.FROM, 0);
	}
	public from_list(): From_listContext {
		return this.getTypedRuleContext(From_listContext, 0) as From_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_from_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFrom_clause) {
	 		listener.enterFrom_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFrom_clause) {
	 		listener.exitFrom_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFrom_clause) {
			return visitor.visitFrom_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class From_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public table_ref_list(): Table_refContext[] {
		return this.getTypedRuleContexts(Table_refContext) as Table_refContext[];
	}
	public table_ref(i: number): Table_refContext {
		return this.getTypedRuleContext(Table_refContext, i) as Table_refContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_from_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFrom_list) {
	 		listener.enterFrom_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFrom_list) {
	 		listener.exitFrom_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFrom_list) {
			return visitor.visitFrom_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Table_refContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public relation_expr(): Relation_exprContext {
		return this.getTypedRuleContext(Relation_exprContext, 0) as Relation_exprContext;
	}
	public opt_alias_clause(): Opt_alias_clauseContext {
		return this.getTypedRuleContext(Opt_alias_clauseContext, 0) as Opt_alias_clauseContext;
	}
	public func_table(): Func_tableContext {
		return this.getTypedRuleContext(Func_tableContext, 0) as Func_tableContext;
	}
	public func_alias_clause(): Func_alias_clauseContext {
		return this.getTypedRuleContext(Func_alias_clauseContext, 0) as Func_alias_clauseContext;
	}
	public xmltable(): XmltableContext {
		return this.getTypedRuleContext(XmltableContext, 0) as XmltableContext;
	}
	public select_with_parens(): Select_with_parensContext {
		return this.getTypedRuleContext(Select_with_parensContext, 0) as Select_with_parensContext;
	}
	public LATERAL_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.LATERAL_P, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public table_ref_list(): Table_refContext[] {
		return this.getTypedRuleContexts(Table_refContext) as Table_refContext[];
	}
	public table_ref(i: number): Table_refContext {
		return this.getTypedRuleContext(Table_refContext, i) as Table_refContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public CROSS_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.CROSS);
	}
	public CROSS(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.CROSS, i);
	}
	public JOIN_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.JOIN);
	}
	public JOIN(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.JOIN, i);
	}
	public NATURAL_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.NATURAL);
	}
	public NATURAL(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.NATURAL, i);
	}
	public join_qual_list(): Join_qualContext[] {
		return this.getTypedRuleContexts(Join_qualContext) as Join_qualContext[];
	}
	public join_qual(i: number): Join_qualContext {
		return this.getTypedRuleContext(Join_qualContext, i) as Join_qualContext;
	}
	public tablesample_clause(): Tablesample_clauseContext {
		return this.getTypedRuleContext(Tablesample_clauseContext, 0) as Tablesample_clauseContext;
	}
	public join_type_list(): Join_typeContext[] {
		return this.getTypedRuleContexts(Join_typeContext) as Join_typeContext[];
	}
	public join_type(i: number): Join_typeContext {
		return this.getTypedRuleContext(Join_typeContext, i) as Join_typeContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_table_ref;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTable_ref) {
	 		listener.enterTable_ref(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTable_ref) {
	 		listener.exitTable_ref(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTable_ref) {
			return visitor.visitTable_ref(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Alias_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public name_list(): Name_listContext {
		return this.getTypedRuleContext(Name_listContext, 0) as Name_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_alias_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAlias_clause) {
	 		listener.enterAlias_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAlias_clause) {
	 		listener.exitAlias_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAlias_clause) {
			return visitor.visitAlias_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_alias_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public alias_clause(): Alias_clauseContext {
		return this.getTypedRuleContext(Alias_clauseContext, 0) as Alias_clauseContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_alias_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_alias_clause) {
	 		listener.enterOpt_alias_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_alias_clause) {
	 		listener.exitOpt_alias_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_alias_clause) {
			return visitor.visitOpt_alias_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Func_alias_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public alias_clause(): Alias_clauseContext {
		return this.getTypedRuleContext(Alias_clauseContext, 0) as Alias_clauseContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public tablefuncelementlist(): TablefuncelementlistContext {
		return this.getTypedRuleContext(TablefuncelementlistContext, 0) as TablefuncelementlistContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_func_alias_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFunc_alias_clause) {
	 		listener.enterFunc_alias_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFunc_alias_clause) {
	 		listener.exitFunc_alias_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFunc_alias_clause) {
			return visitor.visitFunc_alias_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Join_typeContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public FULL(): TerminalNode {
		return this.getToken(PostgreSQLParser.FULL, 0);
	}
	public LEFT(): TerminalNode {
		return this.getToken(PostgreSQLParser.LEFT, 0);
	}
	public RIGHT(): TerminalNode {
		return this.getToken(PostgreSQLParser.RIGHT, 0);
	}
	public INNER_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.INNER_P, 0);
	}
	public OUTER_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.OUTER_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_join_type;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterJoin_type) {
	 		listener.enterJoin_type(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitJoin_type) {
	 		listener.exitJoin_type(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitJoin_type) {
			return visitor.visitJoin_type(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Join_qualContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public USING(): TerminalNode {
		return this.getToken(PostgreSQLParser.USING, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public name_list(): Name_listContext {
		return this.getTypedRuleContext(Name_listContext, 0) as Name_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public ON(): TerminalNode {
		return this.getToken(PostgreSQLParser.ON, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_join_qual;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterJoin_qual) {
	 		listener.enterJoin_qual(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitJoin_qual) {
	 		listener.exitJoin_qual(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitJoin_qual) {
			return visitor.visitJoin_qual(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Relation_exprContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public qualified_name(): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, 0) as Qualified_nameContext;
	}
	public STAR(): TerminalNode {
		return this.getToken(PostgreSQLParser.STAR, 0);
	}
	public ONLY(): TerminalNode {
		return this.getToken(PostgreSQLParser.ONLY, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_relation_expr;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterRelation_expr) {
	 		listener.enterRelation_expr(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitRelation_expr) {
	 		listener.exitRelation_expr(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitRelation_expr) {
			return visitor.visitRelation_expr(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Relation_expr_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public relation_expr_list(): Relation_exprContext[] {
		return this.getTypedRuleContexts(Relation_exprContext) as Relation_exprContext[];
	}
	public relation_expr(i: number): Relation_exprContext {
		return this.getTypedRuleContext(Relation_exprContext, i) as Relation_exprContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_relation_expr_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterRelation_expr_list) {
	 		listener.enterRelation_expr_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitRelation_expr_list) {
	 		listener.exitRelation_expr_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitRelation_expr_list) {
			return visitor.visitRelation_expr_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Relation_expr_opt_aliasContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public relation_expr(): Relation_exprContext {
		return this.getTypedRuleContext(Relation_exprContext, 0) as Relation_exprContext;
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_relation_expr_opt_alias;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterRelation_expr_opt_alias) {
	 		listener.enterRelation_expr_opt_alias(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitRelation_expr_opt_alias) {
	 		listener.exitRelation_expr_opt_alias(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitRelation_expr_opt_alias) {
			return visitor.visitRelation_expr_opt_alias(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Tablesample_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public TABLESAMPLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLESAMPLE, 0);
	}
	public func_name(): Func_nameContext {
		return this.getTypedRuleContext(Func_nameContext, 0) as Func_nameContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public expr_list(): Expr_listContext {
		return this.getTypedRuleContext(Expr_listContext, 0) as Expr_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public opt_repeatable_clause(): Opt_repeatable_clauseContext {
		return this.getTypedRuleContext(Opt_repeatable_clauseContext, 0) as Opt_repeatable_clauseContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_tablesample_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTablesample_clause) {
	 		listener.enterTablesample_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTablesample_clause) {
	 		listener.exitTablesample_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTablesample_clause) {
			return visitor.visitTablesample_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_repeatable_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public REPEATABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.REPEATABLE, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_repeatable_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_repeatable_clause) {
	 		listener.enterOpt_repeatable_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_repeatable_clause) {
	 		listener.exitOpt_repeatable_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_repeatable_clause) {
			return visitor.visitOpt_repeatable_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Func_tableContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public func_expr_windowless(): Func_expr_windowlessContext {
		return this.getTypedRuleContext(Func_expr_windowlessContext, 0) as Func_expr_windowlessContext;
	}
	public opt_ordinality(): Opt_ordinalityContext {
		return this.getTypedRuleContext(Opt_ordinalityContext, 0) as Opt_ordinalityContext;
	}
	public ROWS(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROWS, 0);
	}
	public FROM(): TerminalNode {
		return this.getToken(PostgreSQLParser.FROM, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public rowsfrom_list(): Rowsfrom_listContext {
		return this.getTypedRuleContext(Rowsfrom_listContext, 0) as Rowsfrom_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_func_table;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFunc_table) {
	 		listener.enterFunc_table(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFunc_table) {
	 		listener.exitFunc_table(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFunc_table) {
			return visitor.visitFunc_table(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Rowsfrom_itemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public func_expr_windowless(): Func_expr_windowlessContext {
		return this.getTypedRuleContext(Func_expr_windowlessContext, 0) as Func_expr_windowlessContext;
	}
	public opt_col_def_list(): Opt_col_def_listContext {
		return this.getTypedRuleContext(Opt_col_def_listContext, 0) as Opt_col_def_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_rowsfrom_item;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterRowsfrom_item) {
	 		listener.enterRowsfrom_item(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitRowsfrom_item) {
	 		listener.exitRowsfrom_item(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitRowsfrom_item) {
			return visitor.visitRowsfrom_item(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Rowsfrom_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public rowsfrom_item_list(): Rowsfrom_itemContext[] {
		return this.getTypedRuleContexts(Rowsfrom_itemContext) as Rowsfrom_itemContext[];
	}
	public rowsfrom_item(i: number): Rowsfrom_itemContext {
		return this.getTypedRuleContext(Rowsfrom_itemContext, i) as Rowsfrom_itemContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_rowsfrom_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterRowsfrom_list) {
	 		listener.enterRowsfrom_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitRowsfrom_list) {
	 		listener.exitRowsfrom_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitRowsfrom_list) {
			return visitor.visitRowsfrom_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_col_def_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public tablefuncelementlist(): TablefuncelementlistContext {
		return this.getTypedRuleContext(TablefuncelementlistContext, 0) as TablefuncelementlistContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_col_def_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_col_def_list) {
	 		listener.enterOpt_col_def_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_col_def_list) {
	 		listener.exitOpt_col_def_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_col_def_list) {
			return visitor.visitOpt_col_def_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_ordinalityContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public WITH(): TerminalNode {
		return this.getToken(PostgreSQLParser.WITH, 0);
	}
	public ORDINALITY(): TerminalNode {
		return this.getToken(PostgreSQLParser.ORDINALITY, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_ordinality;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_ordinality) {
	 		listener.enterOpt_ordinality(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_ordinality) {
	 		listener.exitOpt_ordinality(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_ordinality) {
			return visitor.visitOpt_ordinality(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Where_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public WHERE(): TerminalNode {
		return this.getToken(PostgreSQLParser.WHERE, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_where_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterWhere_clause) {
	 		listener.enterWhere_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitWhere_clause) {
	 		listener.exitWhere_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitWhere_clause) {
			return visitor.visitWhere_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Where_or_current_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public WHERE(): TerminalNode {
		return this.getToken(PostgreSQLParser.WHERE, 0);
	}
	public CURRENT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.CURRENT_P, 0);
	}
	public OF(): TerminalNode {
		return this.getToken(PostgreSQLParser.OF, 0);
	}
	public cursor_name(): Cursor_nameContext {
		return this.getTypedRuleContext(Cursor_nameContext, 0) as Cursor_nameContext;
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_where_or_current_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterWhere_or_current_clause) {
	 		listener.enterWhere_or_current_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitWhere_or_current_clause) {
	 		listener.exitWhere_or_current_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitWhere_or_current_clause) {
			return visitor.visitWhere_or_current_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class OpttablefuncelementlistContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public tablefuncelementlist(): TablefuncelementlistContext {
		return this.getTypedRuleContext(TablefuncelementlistContext, 0) as TablefuncelementlistContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opttablefuncelementlist;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpttablefuncelementlist) {
	 		listener.enterOpttablefuncelementlist(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpttablefuncelementlist) {
	 		listener.exitOpttablefuncelementlist(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpttablefuncelementlist) {
			return visitor.visitOpttablefuncelementlist(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class TablefuncelementlistContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public tablefuncelement_list(): TablefuncelementContext[] {
		return this.getTypedRuleContexts(TablefuncelementContext) as TablefuncelementContext[];
	}
	public tablefuncelement(i: number): TablefuncelementContext {
		return this.getTypedRuleContext(TablefuncelementContext, i) as TablefuncelementContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_tablefuncelementlist;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTablefuncelementlist) {
	 		listener.enterTablefuncelementlist(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTablefuncelementlist) {
	 		listener.exitTablefuncelementlist(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTablefuncelementlist) {
			return visitor.visitTablefuncelementlist(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class TablefuncelementContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
	public typename(): TypenameContext {
		return this.getTypedRuleContext(TypenameContext, 0) as TypenameContext;
	}
	public opt_collate_clause(): Opt_collate_clauseContext {
		return this.getTypedRuleContext(Opt_collate_clauseContext, 0) as Opt_collate_clauseContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_tablefuncelement;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTablefuncelement) {
	 		listener.enterTablefuncelement(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTablefuncelement) {
	 		listener.exitTablefuncelement(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTablefuncelement) {
			return visitor.visitTablefuncelement(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class XmltableContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public XMLTABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.XMLTABLE, 0);
	}
	public OPEN_PAREN_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.OPEN_PAREN);
	}
	public OPEN_PAREN(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, i);
	}
	public CLOSE_PAREN_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.CLOSE_PAREN);
	}
	public CLOSE_PAREN(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, i);
	}
	public c_expr(): C_exprContext {
		return this.getTypedRuleContext(C_exprContext, 0) as C_exprContext;
	}
	public xmlexists_argument(): Xmlexists_argumentContext {
		return this.getTypedRuleContext(Xmlexists_argumentContext, 0) as Xmlexists_argumentContext;
	}
	public COLUMNS(): TerminalNode {
		return this.getToken(PostgreSQLParser.COLUMNS, 0);
	}
	public xmltable_column_list(): Xmltable_column_listContext {
		return this.getTypedRuleContext(Xmltable_column_listContext, 0) as Xmltable_column_listContext;
	}
	public XMLNAMESPACES(): TerminalNode {
		return this.getToken(PostgreSQLParser.XMLNAMESPACES, 0);
	}
	public xml_namespace_list(): Xml_namespace_listContext {
		return this.getTypedRuleContext(Xml_namespace_listContext, 0) as Xml_namespace_listContext;
	}
	public COMMA(): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_xmltable;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterXmltable) {
	 		listener.enterXmltable(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitXmltable) {
	 		listener.exitXmltable(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitXmltable) {
			return visitor.visitXmltable(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Xmltable_column_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public xmltable_column_el_list(): Xmltable_column_elContext[] {
		return this.getTypedRuleContexts(Xmltable_column_elContext) as Xmltable_column_elContext[];
	}
	public xmltable_column_el(i: number): Xmltable_column_elContext {
		return this.getTypedRuleContext(Xmltable_column_elContext, i) as Xmltable_column_elContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_xmltable_column_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterXmltable_column_list) {
	 		listener.enterXmltable_column_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitXmltable_column_list) {
	 		listener.exitXmltable_column_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitXmltable_column_list) {
			return visitor.visitXmltable_column_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Xmltable_column_elContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
	public typename(): TypenameContext {
		return this.getTypedRuleContext(TypenameContext, 0) as TypenameContext;
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
	public ORDINALITY(): TerminalNode {
		return this.getToken(PostgreSQLParser.ORDINALITY, 0);
	}
	public xmltable_column_option_list(): Xmltable_column_option_listContext {
		return this.getTypedRuleContext(Xmltable_column_option_listContext, 0) as Xmltable_column_option_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_xmltable_column_el;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterXmltable_column_el) {
	 		listener.enterXmltable_column_el(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitXmltable_column_el) {
	 		listener.exitXmltable_column_el(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitXmltable_column_el) {
			return visitor.visitXmltable_column_el(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Xmltable_column_option_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public xmltable_column_option_el_list(): Xmltable_column_option_elContext[] {
		return this.getTypedRuleContexts(Xmltable_column_option_elContext) as Xmltable_column_option_elContext[];
	}
	public xmltable_column_option_el(i: number): Xmltable_column_option_elContext {
		return this.getTypedRuleContext(Xmltable_column_option_elContext, i) as Xmltable_column_option_elContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_xmltable_column_option_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterXmltable_column_option_list) {
	 		listener.enterXmltable_column_option_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitXmltable_column_option_list) {
	 		listener.exitXmltable_column_option_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitXmltable_column_option_list) {
			return visitor.visitXmltable_column_option_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Xmltable_column_option_elContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public DEFAULT(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEFAULT, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public identifier(): IdentifierContext {
		return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext;
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
	public NULL_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.NULL_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_xmltable_column_option_el;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterXmltable_column_option_el) {
	 		listener.enterXmltable_column_option_el(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitXmltable_column_option_el) {
	 		listener.exitXmltable_column_option_el(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitXmltable_column_option_el) {
			return visitor.visitXmltable_column_option_el(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Xml_namespace_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public xml_namespace_el_list(): Xml_namespace_elContext[] {
		return this.getTypedRuleContexts(Xml_namespace_elContext) as Xml_namespace_elContext[];
	}
	public xml_namespace_el(i: number): Xml_namespace_elContext {
		return this.getTypedRuleContext(Xml_namespace_elContext, i) as Xml_namespace_elContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_xml_namespace_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterXml_namespace_list) {
	 		listener.enterXml_namespace_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitXml_namespace_list) {
	 		listener.exitXml_namespace_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitXml_namespace_list) {
			return visitor.visitXml_namespace_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Xml_namespace_elContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public b_expr(): B_exprContext {
		return this.getTypedRuleContext(B_exprContext, 0) as B_exprContext;
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
	public collabel(): CollabelContext {
		return this.getTypedRuleContext(CollabelContext, 0) as CollabelContext;
	}
	public DEFAULT(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEFAULT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_xml_namespace_el;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterXml_namespace_el) {
	 		listener.enterXml_namespace_el(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitXml_namespace_el) {
	 		listener.exitXml_namespace_el(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitXml_namespace_el) {
			return visitor.visitXml_namespace_el(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class TypenameContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public simpletypename(): SimpletypenameContext {
		return this.getTypedRuleContext(SimpletypenameContext, 0) as SimpletypenameContext;
	}
	public opt_array_bounds(): Opt_array_boundsContext {
		return this.getTypedRuleContext(Opt_array_boundsContext, 0) as Opt_array_boundsContext;
	}
	public ARRAY(): TerminalNode {
		return this.getToken(PostgreSQLParser.ARRAY, 0);
	}
	public SETOF(): TerminalNode {
		return this.getToken(PostgreSQLParser.SETOF, 0);
	}
	public OPEN_BRACKET(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_BRACKET, 0);
	}
	public iconst(): IconstContext {
		return this.getTypedRuleContext(IconstContext, 0) as IconstContext;
	}
	public CLOSE_BRACKET(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_BRACKET, 0);
	}
	public qualified_name(): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, 0) as Qualified_nameContext;
	}
	public PERCENT(): TerminalNode {
		return this.getToken(PostgreSQLParser.PERCENT, 0);
	}
	public ROWTYPE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROWTYPE, 0);
	}
	public TYPE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TYPE_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_typename;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTypename) {
	 		listener.enterTypename(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTypename) {
	 		listener.exitTypename(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTypename) {
			return visitor.visitTypename(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_array_boundsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OPEN_BRACKET_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.OPEN_BRACKET);
	}
	public OPEN_BRACKET(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_BRACKET, i);
	}
	public CLOSE_BRACKET_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.CLOSE_BRACKET);
	}
	public CLOSE_BRACKET(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_BRACKET, i);
	}
	public iconst_list(): IconstContext[] {
		return this.getTypedRuleContexts(IconstContext) as IconstContext[];
	}
	public iconst(i: number): IconstContext {
		return this.getTypedRuleContext(IconstContext, i) as IconstContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_array_bounds;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_array_bounds) {
	 		listener.enterOpt_array_bounds(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_array_bounds) {
	 		listener.exitOpt_array_bounds(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_array_bounds) {
			return visitor.visitOpt_array_bounds(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class SimpletypenameContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public generictype(): GenerictypeContext {
		return this.getTypedRuleContext(GenerictypeContext, 0) as GenerictypeContext;
	}
	public numeric(): NumericContext {
		return this.getTypedRuleContext(NumericContext, 0) as NumericContext;
	}
	public bit(): BitContext {
		return this.getTypedRuleContext(BitContext, 0) as BitContext;
	}
	public character(): CharacterContext {
		return this.getTypedRuleContext(CharacterContext, 0) as CharacterContext;
	}
	public constdatetime(): ConstdatetimeContext {
		return this.getTypedRuleContext(ConstdatetimeContext, 0) as ConstdatetimeContext;
	}
	public constinterval(): ConstintervalContext {
		return this.getTypedRuleContext(ConstintervalContext, 0) as ConstintervalContext;
	}
	public opt_interval(): Opt_intervalContext {
		return this.getTypedRuleContext(Opt_intervalContext, 0) as Opt_intervalContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public iconst(): IconstContext {
		return this.getTypedRuleContext(IconstContext, 0) as IconstContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_simpletypename;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSimpletypename) {
	 		listener.enterSimpletypename(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSimpletypename) {
	 		listener.exitSimpletypename(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSimpletypename) {
			return visitor.visitSimpletypename(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ConsttypenameContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public numeric(): NumericContext {
		return this.getTypedRuleContext(NumericContext, 0) as NumericContext;
	}
	public constbit(): ConstbitContext {
		return this.getTypedRuleContext(ConstbitContext, 0) as ConstbitContext;
	}
	public constcharacter(): ConstcharacterContext {
		return this.getTypedRuleContext(ConstcharacterContext, 0) as ConstcharacterContext;
	}
	public constdatetime(): ConstdatetimeContext {
		return this.getTypedRuleContext(ConstdatetimeContext, 0) as ConstdatetimeContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_consttypename;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterConsttypename) {
	 		listener.enterConsttypename(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitConsttypename) {
	 		listener.exitConsttypename(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitConsttypename) {
			return visitor.visitConsttypename(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class GenerictypeContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public type_function_name(): Type_function_nameContext {
		return this.getTypedRuleContext(Type_function_nameContext, 0) as Type_function_nameContext;
	}
	public opt_type_modifiers(): Opt_type_modifiersContext {
		return this.getTypedRuleContext(Opt_type_modifiersContext, 0) as Opt_type_modifiersContext;
	}
	public attrs(): AttrsContext {
		return this.getTypedRuleContext(AttrsContext, 0) as AttrsContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_generictype;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterGenerictype) {
	 		listener.enterGenerictype(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitGenerictype) {
	 		listener.exitGenerictype(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitGenerictype) {
			return visitor.visitGenerictype(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_type_modifiersContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public expr_list(): Expr_listContext {
		return this.getTypedRuleContext(Expr_listContext, 0) as Expr_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_type_modifiers;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_type_modifiers) {
	 		listener.enterOpt_type_modifiers(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_type_modifiers) {
	 		listener.exitOpt_type_modifiers(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_type_modifiers) {
			return visitor.visitOpt_type_modifiers(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class NumericContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public INT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.INT_P, 0);
	}
	public INTEGER(): TerminalNode {
		return this.getToken(PostgreSQLParser.INTEGER, 0);
	}
	public SMALLINT(): TerminalNode {
		return this.getToken(PostgreSQLParser.SMALLINT, 0);
	}
	public BIGINT(): TerminalNode {
		return this.getToken(PostgreSQLParser.BIGINT, 0);
	}
	public REAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.REAL, 0);
	}
	public FLOAT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.FLOAT_P, 0);
	}
	public opt_float(): Opt_floatContext {
		return this.getTypedRuleContext(Opt_floatContext, 0) as Opt_floatContext;
	}
	public DOUBLE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DOUBLE_P, 0);
	}
	public PRECISION(): TerminalNode {
		return this.getToken(PostgreSQLParser.PRECISION, 0);
	}
	public DECIMAL_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DECIMAL_P, 0);
	}
	public opt_type_modifiers(): Opt_type_modifiersContext {
		return this.getTypedRuleContext(Opt_type_modifiersContext, 0) as Opt_type_modifiersContext;
	}
	public DEC(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEC, 0);
	}
	public NUMERIC(): TerminalNode {
		return this.getToken(PostgreSQLParser.NUMERIC, 0);
	}
	public BOOLEAN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.BOOLEAN_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_numeric;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterNumeric) {
	 		listener.enterNumeric(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitNumeric) {
	 		listener.exitNumeric(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitNumeric) {
			return visitor.visitNumeric(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_floatContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public iconst(): IconstContext {
		return this.getTypedRuleContext(IconstContext, 0) as IconstContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_float;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_float) {
	 		listener.enterOpt_float(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_float) {
	 		listener.exitOpt_float(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_float) {
			return visitor.visitOpt_float(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class BitContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public bitwithlength(): BitwithlengthContext {
		return this.getTypedRuleContext(BitwithlengthContext, 0) as BitwithlengthContext;
	}
	public bitwithoutlength(): BitwithoutlengthContext {
		return this.getTypedRuleContext(BitwithoutlengthContext, 0) as BitwithoutlengthContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_bit;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterBit) {
	 		listener.enterBit(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitBit) {
	 		listener.exitBit(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitBit) {
			return visitor.visitBit(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ConstbitContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public bitwithlength(): BitwithlengthContext {
		return this.getTypedRuleContext(BitwithlengthContext, 0) as BitwithlengthContext;
	}
	public bitwithoutlength(): BitwithoutlengthContext {
		return this.getTypedRuleContext(BitwithoutlengthContext, 0) as BitwithoutlengthContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_constbit;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterConstbit) {
	 		listener.enterConstbit(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitConstbit) {
	 		listener.exitConstbit(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitConstbit) {
			return visitor.visitConstbit(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class BitwithlengthContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public BIT(): TerminalNode {
		return this.getToken(PostgreSQLParser.BIT, 0);
	}
	public opt_varying(): Opt_varyingContext {
		return this.getTypedRuleContext(Opt_varyingContext, 0) as Opt_varyingContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public expr_list(): Expr_listContext {
		return this.getTypedRuleContext(Expr_listContext, 0) as Expr_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_bitwithlength;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterBitwithlength) {
	 		listener.enterBitwithlength(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitBitwithlength) {
	 		listener.exitBitwithlength(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitBitwithlength) {
			return visitor.visitBitwithlength(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class BitwithoutlengthContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public BIT(): TerminalNode {
		return this.getToken(PostgreSQLParser.BIT, 0);
	}
	public opt_varying(): Opt_varyingContext {
		return this.getTypedRuleContext(Opt_varyingContext, 0) as Opt_varyingContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_bitwithoutlength;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterBitwithoutlength) {
	 		listener.enterBitwithoutlength(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitBitwithoutlength) {
	 		listener.exitBitwithoutlength(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitBitwithoutlength) {
			return visitor.visitBitwithoutlength(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CharacterContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public character_c(): Character_cContext {
		return this.getTypedRuleContext(Character_cContext, 0) as Character_cContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public iconst(): IconstContext {
		return this.getTypedRuleContext(IconstContext, 0) as IconstContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_character;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCharacter) {
	 		listener.enterCharacter(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCharacter) {
	 		listener.exitCharacter(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCharacter) {
			return visitor.visitCharacter(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ConstcharacterContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public character_c(): Character_cContext {
		return this.getTypedRuleContext(Character_cContext, 0) as Character_cContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public iconst(): IconstContext {
		return this.getTypedRuleContext(IconstContext, 0) as IconstContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_constcharacter;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterConstcharacter) {
	 		listener.enterConstcharacter(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitConstcharacter) {
	 		listener.exitConstcharacter(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitConstcharacter) {
			return visitor.visitConstcharacter(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Character_cContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public opt_varying(): Opt_varyingContext {
		return this.getTypedRuleContext(Opt_varyingContext, 0) as Opt_varyingContext;
	}
	public CHARACTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.CHARACTER, 0);
	}
	public CHAR_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.CHAR_P, 0);
	}
	public NCHAR(): TerminalNode {
		return this.getToken(PostgreSQLParser.NCHAR, 0);
	}
	public VARCHAR(): TerminalNode {
		return this.getToken(PostgreSQLParser.VARCHAR, 0);
	}
	public NATIONAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.NATIONAL, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_character_c;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCharacter_c) {
	 		listener.enterCharacter_c(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCharacter_c) {
	 		listener.exitCharacter_c(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCharacter_c) {
			return visitor.visitCharacter_c(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_varyingContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public VARYING(): TerminalNode {
		return this.getToken(PostgreSQLParser.VARYING, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_varying;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_varying) {
	 		listener.enterOpt_varying(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_varying) {
	 		listener.exitOpt_varying(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_varying) {
			return visitor.visitOpt_varying(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ConstdatetimeContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public opt_timezone(): Opt_timezoneContext {
		return this.getTypedRuleContext(Opt_timezoneContext, 0) as Opt_timezoneContext;
	}
	public TIMESTAMP(): TerminalNode {
		return this.getToken(PostgreSQLParser.TIMESTAMP, 0);
	}
	public TIME(): TerminalNode {
		return this.getToken(PostgreSQLParser.TIME, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public iconst(): IconstContext {
		return this.getTypedRuleContext(IconstContext, 0) as IconstContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_constdatetime;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterConstdatetime) {
	 		listener.enterConstdatetime(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitConstdatetime) {
	 		listener.exitConstdatetime(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitConstdatetime) {
			return visitor.visitConstdatetime(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ConstintervalContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public INTERVAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.INTERVAL, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_constinterval;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterConstinterval) {
	 		listener.enterConstinterval(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitConstinterval) {
	 		listener.exitConstinterval(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitConstinterval) {
			return visitor.visitConstinterval(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_timezoneContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public WITH(): TerminalNode {
		return this.getToken(PostgreSQLParser.WITH, 0);
	}
	public TIME(): TerminalNode {
		return this.getToken(PostgreSQLParser.TIME, 0);
	}
	public ZONE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ZONE, 0);
	}
	public WITHOUT(): TerminalNode {
		return this.getToken(PostgreSQLParser.WITHOUT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_timezone;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_timezone) {
	 		listener.enterOpt_timezone(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_timezone) {
	 		listener.exitOpt_timezone(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_timezone) {
			return visitor.visitOpt_timezone(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_intervalContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public YEAR_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.YEAR_P, 0);
	}
	public MONTH_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.MONTH_P, 0);
	}
	public DAY_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DAY_P, 0);
	}
	public HOUR_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.HOUR_P, 0);
	}
	public MINUTE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.MINUTE_P, 0);
	}
	public interval_second(): Interval_secondContext {
		return this.getTypedRuleContext(Interval_secondContext, 0) as Interval_secondContext;
	}
	public TO(): TerminalNode {
		return this.getToken(PostgreSQLParser.TO, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_interval;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_interval) {
	 		listener.enterOpt_interval(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_interval) {
	 		listener.exitOpt_interval(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_interval) {
			return visitor.visitOpt_interval(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Interval_secondContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public SECOND_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.SECOND_P, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public iconst(): IconstContext {
		return this.getTypedRuleContext(IconstContext, 0) as IconstContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_interval_second;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterInterval_second) {
	 		listener.enterInterval_second(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitInterval_second) {
	 		listener.exitInterval_second(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitInterval_second) {
			return visitor.visitInterval_second(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_escapeContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ESCAPE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ESCAPE, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_escape;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_escape) {
	 		listener.enterOpt_escape(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_escape) {
	 		listener.exitOpt_escape(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_escape) {
			return visitor.visitOpt_escape(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class A_exprContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr_qual(): A_expr_qualContext {
		return this.getTypedRuleContext(A_expr_qualContext, 0) as A_expr_qualContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_a_expr;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterA_expr) {
	 		listener.enterA_expr(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitA_expr) {
	 		listener.exitA_expr(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitA_expr) {
			return visitor.visitA_expr(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class A_expr_qualContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr_lessless(): A_expr_lesslessContext {
		return this.getTypedRuleContext(A_expr_lesslessContext, 0) as A_expr_lesslessContext;
	}
	public qual_op(): Qual_opContext {
		return this.getTypedRuleContext(Qual_opContext, 0) as Qual_opContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_a_expr_qual;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterA_expr_qual) {
	 		listener.enterA_expr_qual(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitA_expr_qual) {
	 		listener.exitA_expr_qual(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitA_expr_qual) {
			return visitor.visitA_expr_qual(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class A_expr_lesslessContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr_or_list(): A_expr_orContext[] {
		return this.getTypedRuleContexts(A_expr_orContext) as A_expr_orContext[];
	}
	public a_expr_or(i: number): A_expr_orContext {
		return this.getTypedRuleContext(A_expr_orContext, i) as A_expr_orContext;
	}
	public LESS_LESS_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.LESS_LESS);
	}
	public LESS_LESS(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.LESS_LESS, i);
	}
	public GREATER_GREATER_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.GREATER_GREATER);
	}
	public GREATER_GREATER(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.GREATER_GREATER, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_a_expr_lessless;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterA_expr_lessless) {
	 		listener.enterA_expr_lessless(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitA_expr_lessless) {
	 		listener.exitA_expr_lessless(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitA_expr_lessless) {
			return visitor.visitA_expr_lessless(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class A_expr_orContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr_and_list(): A_expr_andContext[] {
		return this.getTypedRuleContexts(A_expr_andContext) as A_expr_andContext[];
	}
	public a_expr_and(i: number): A_expr_andContext {
		return this.getTypedRuleContext(A_expr_andContext, i) as A_expr_andContext;
	}
	public OR_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.OR);
	}
	public OR(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.OR, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_a_expr_or;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterA_expr_or) {
	 		listener.enterA_expr_or(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitA_expr_or) {
	 		listener.exitA_expr_or(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitA_expr_or) {
			return visitor.visitA_expr_or(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class A_expr_andContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr_in_list(): A_expr_inContext[] {
		return this.getTypedRuleContexts(A_expr_inContext) as A_expr_inContext[];
	}
	public a_expr_in(i: number): A_expr_inContext {
		return this.getTypedRuleContext(A_expr_inContext, i) as A_expr_inContext;
	}
	public AND_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.AND);
	}
	public AND(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.AND, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_a_expr_and;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterA_expr_and) {
	 		listener.enterA_expr_and(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitA_expr_and) {
	 		listener.exitA_expr_and(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitA_expr_and) {
			return visitor.visitA_expr_and(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class A_expr_inContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr_unary_not(): A_expr_unary_notContext {
		return this.getTypedRuleContext(A_expr_unary_notContext, 0) as A_expr_unary_notContext;
	}
	public IN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IN_P, 0);
	}
	public in_expr(): In_exprContext {
		return this.getTypedRuleContext(In_exprContext, 0) as In_exprContext;
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_a_expr_in;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterA_expr_in) {
	 		listener.enterA_expr_in(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitA_expr_in) {
	 		listener.exitA_expr_in(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitA_expr_in) {
			return visitor.visitA_expr_in(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class A_expr_unary_notContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr_isnull(): A_expr_isnullContext {
		return this.getTypedRuleContext(A_expr_isnullContext, 0) as A_expr_isnullContext;
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_a_expr_unary_not;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterA_expr_unary_not) {
	 		listener.enterA_expr_unary_not(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitA_expr_unary_not) {
	 		listener.exitA_expr_unary_not(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitA_expr_unary_not) {
			return visitor.visitA_expr_unary_not(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class A_expr_isnullContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr_is_not(): A_expr_is_notContext {
		return this.getTypedRuleContext(A_expr_is_notContext, 0) as A_expr_is_notContext;
	}
	public ISNULL(): TerminalNode {
		return this.getToken(PostgreSQLParser.ISNULL, 0);
	}
	public NOTNULL(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOTNULL, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_a_expr_isnull;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterA_expr_isnull) {
	 		listener.enterA_expr_isnull(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitA_expr_isnull) {
	 		listener.exitA_expr_isnull(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitA_expr_isnull) {
			return visitor.visitA_expr_isnull(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class A_expr_is_notContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr_compare(): A_expr_compareContext {
		return this.getTypedRuleContext(A_expr_compareContext, 0) as A_expr_compareContext;
	}
	public IS(): TerminalNode {
		return this.getToken(PostgreSQLParser.IS, 0);
	}
	public NULL_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.NULL_P, 0);
	}
	public TRUE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRUE_P, 0);
	}
	public FALSE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.FALSE_P, 0);
	}
	public UNKNOWN(): TerminalNode {
		return this.getToken(PostgreSQLParser.UNKNOWN, 0);
	}
	public DISTINCT(): TerminalNode {
		return this.getToken(PostgreSQLParser.DISTINCT, 0);
	}
	public FROM(): TerminalNode {
		return this.getToken(PostgreSQLParser.FROM, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public OF(): TerminalNode {
		return this.getToken(PostgreSQLParser.OF, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public type_list(): Type_listContext {
		return this.getTypedRuleContext(Type_listContext, 0) as Type_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public DOCUMENT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DOCUMENT_P, 0);
	}
	public NORMALIZED(): TerminalNode {
		return this.getToken(PostgreSQLParser.NORMALIZED, 0);
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
	public unicode_normal_form(): Unicode_normal_formContext {
		return this.getTypedRuleContext(Unicode_normal_formContext, 0) as Unicode_normal_formContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_a_expr_is_not;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterA_expr_is_not) {
	 		listener.enterA_expr_is_not(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitA_expr_is_not) {
	 		listener.exitA_expr_is_not(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitA_expr_is_not) {
			return visitor.visitA_expr_is_not(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class A_expr_compareContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr_like_list(): A_expr_likeContext[] {
		return this.getTypedRuleContexts(A_expr_likeContext) as A_expr_likeContext[];
	}
	public a_expr_like(i: number): A_expr_likeContext {
		return this.getTypedRuleContext(A_expr_likeContext, i) as A_expr_likeContext;
	}
	public subquery_Op(): Subquery_OpContext {
		return this.getTypedRuleContext(Subquery_OpContext, 0) as Subquery_OpContext;
	}
	public sub_type(): Sub_typeContext {
		return this.getTypedRuleContext(Sub_typeContext, 0) as Sub_typeContext;
	}
	public LT(): TerminalNode {
		return this.getToken(PostgreSQLParser.LT, 0);
	}
	public GT(): TerminalNode {
		return this.getToken(PostgreSQLParser.GT, 0);
	}
	public EQUAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.EQUAL, 0);
	}
	public LESS_EQUALS(): TerminalNode {
		return this.getToken(PostgreSQLParser.LESS_EQUALS, 0);
	}
	public GREATER_EQUALS(): TerminalNode {
		return this.getToken(PostgreSQLParser.GREATER_EQUALS, 0);
	}
	public NOT_EQUALS(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT_EQUALS, 0);
	}
	public select_with_parens(): Select_with_parensContext {
		return this.getTypedRuleContext(Select_with_parensContext, 0) as Select_with_parensContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_a_expr_compare;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterA_expr_compare) {
	 		listener.enterA_expr_compare(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitA_expr_compare) {
	 		listener.exitA_expr_compare(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitA_expr_compare) {
			return visitor.visitA_expr_compare(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class A_expr_likeContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr_qual_op_list(): A_expr_qual_opContext[] {
		return this.getTypedRuleContexts(A_expr_qual_opContext) as A_expr_qual_opContext[];
	}
	public a_expr_qual_op(i: number): A_expr_qual_opContext {
		return this.getTypedRuleContext(A_expr_qual_opContext, i) as A_expr_qual_opContext;
	}
	public opt_escape(): Opt_escapeContext {
		return this.getTypedRuleContext(Opt_escapeContext, 0) as Opt_escapeContext;
	}
	public LIKE(): TerminalNode {
		return this.getToken(PostgreSQLParser.LIKE, 0);
	}
	public ILIKE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ILIKE, 0);
	}
	public SIMILAR(): TerminalNode {
		return this.getToken(PostgreSQLParser.SIMILAR, 0);
	}
	public TO(): TerminalNode {
		return this.getToken(PostgreSQLParser.TO, 0);
	}
	public BETWEEN(): TerminalNode {
		return this.getToken(PostgreSQLParser.BETWEEN, 0);
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
	public SYMMETRIC(): TerminalNode {
		return this.getToken(PostgreSQLParser.SYMMETRIC, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_a_expr_like;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterA_expr_like) {
	 		listener.enterA_expr_like(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitA_expr_like) {
	 		listener.exitA_expr_like(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitA_expr_like) {
			return visitor.visitA_expr_like(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class A_expr_qual_opContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr_unary_qualop_list(): A_expr_unary_qualopContext[] {
		return this.getTypedRuleContexts(A_expr_unary_qualopContext) as A_expr_unary_qualopContext[];
	}
	public a_expr_unary_qualop(i: number): A_expr_unary_qualopContext {
		return this.getTypedRuleContext(A_expr_unary_qualopContext, i) as A_expr_unary_qualopContext;
	}
	public qual_op_list(): Qual_opContext[] {
		return this.getTypedRuleContexts(Qual_opContext) as Qual_opContext[];
	}
	public qual_op(i: number): Qual_opContext {
		return this.getTypedRuleContext(Qual_opContext, i) as Qual_opContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_a_expr_qual_op;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterA_expr_qual_op) {
	 		listener.enterA_expr_qual_op(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitA_expr_qual_op) {
	 		listener.exitA_expr_qual_op(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitA_expr_qual_op) {
			return visitor.visitA_expr_qual_op(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class A_expr_unary_qualopContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr_add(): A_expr_addContext {
		return this.getTypedRuleContext(A_expr_addContext, 0) as A_expr_addContext;
	}
	public qual_op(): Qual_opContext {
		return this.getTypedRuleContext(Qual_opContext, 0) as Qual_opContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_a_expr_unary_qualop;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterA_expr_unary_qualop) {
	 		listener.enterA_expr_unary_qualop(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitA_expr_unary_qualop) {
	 		listener.exitA_expr_unary_qualop(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitA_expr_unary_qualop) {
			return visitor.visitA_expr_unary_qualop(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class A_expr_addContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr_mul_list(): A_expr_mulContext[] {
		return this.getTypedRuleContexts(A_expr_mulContext) as A_expr_mulContext[];
	}
	public a_expr_mul(i: number): A_expr_mulContext {
		return this.getTypedRuleContext(A_expr_mulContext, i) as A_expr_mulContext;
	}
	public MINUS_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.MINUS);
	}
	public MINUS(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.MINUS, i);
	}
	public PLUS_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.PLUS);
	}
	public PLUS(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.PLUS, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_a_expr_add;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterA_expr_add) {
	 		listener.enterA_expr_add(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitA_expr_add) {
	 		listener.exitA_expr_add(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitA_expr_add) {
			return visitor.visitA_expr_add(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class A_expr_mulContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr_caret_list(): A_expr_caretContext[] {
		return this.getTypedRuleContexts(A_expr_caretContext) as A_expr_caretContext[];
	}
	public a_expr_caret(i: number): A_expr_caretContext {
		return this.getTypedRuleContext(A_expr_caretContext, i) as A_expr_caretContext;
	}
	public STAR_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.STAR);
	}
	public STAR(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.STAR, i);
	}
	public SLASH_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.SLASH);
	}
	public SLASH(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.SLASH, i);
	}
	public PERCENT_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.PERCENT);
	}
	public PERCENT(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.PERCENT, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_a_expr_mul;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterA_expr_mul) {
	 		listener.enterA_expr_mul(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitA_expr_mul) {
	 		listener.exitA_expr_mul(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitA_expr_mul) {
			return visitor.visitA_expr_mul(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class A_expr_caretContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr_unary_sign(): A_expr_unary_signContext {
		return this.getTypedRuleContext(A_expr_unary_signContext, 0) as A_expr_unary_signContext;
	}
	public CARET(): TerminalNode {
		return this.getToken(PostgreSQLParser.CARET, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_a_expr_caret;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterA_expr_caret) {
	 		listener.enterA_expr_caret(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitA_expr_caret) {
	 		listener.exitA_expr_caret(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitA_expr_caret) {
			return visitor.visitA_expr_caret(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class A_expr_unary_signContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr_at_time_zone(): A_expr_at_time_zoneContext {
		return this.getTypedRuleContext(A_expr_at_time_zoneContext, 0) as A_expr_at_time_zoneContext;
	}
	public MINUS(): TerminalNode {
		return this.getToken(PostgreSQLParser.MINUS, 0);
	}
	public PLUS(): TerminalNode {
		return this.getToken(PostgreSQLParser.PLUS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_a_expr_unary_sign;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterA_expr_unary_sign) {
	 		listener.enterA_expr_unary_sign(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitA_expr_unary_sign) {
	 		listener.exitA_expr_unary_sign(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitA_expr_unary_sign) {
			return visitor.visitA_expr_unary_sign(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class A_expr_at_time_zoneContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr_collate(): A_expr_collateContext {
		return this.getTypedRuleContext(A_expr_collateContext, 0) as A_expr_collateContext;
	}
	public AT(): TerminalNode {
		return this.getToken(PostgreSQLParser.AT, 0);
	}
	public TIME(): TerminalNode {
		return this.getToken(PostgreSQLParser.TIME, 0);
	}
	public ZONE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ZONE, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_a_expr_at_time_zone;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterA_expr_at_time_zone) {
	 		listener.enterA_expr_at_time_zone(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitA_expr_at_time_zone) {
	 		listener.exitA_expr_at_time_zone(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitA_expr_at_time_zone) {
			return visitor.visitA_expr_at_time_zone(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class A_expr_collateContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr_typecast(): A_expr_typecastContext {
		return this.getTypedRuleContext(A_expr_typecastContext, 0) as A_expr_typecastContext;
	}
	public COLLATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.COLLATE, 0);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_a_expr_collate;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterA_expr_collate) {
	 		listener.enterA_expr_collate(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitA_expr_collate) {
	 		listener.exitA_expr_collate(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitA_expr_collate) {
			return visitor.visitA_expr_collate(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class A_expr_typecastContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public c_expr(): C_exprContext {
		return this.getTypedRuleContext(C_exprContext, 0) as C_exprContext;
	}
	public TYPECAST_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.TYPECAST);
	}
	public TYPECAST(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.TYPECAST, i);
	}
	public typename_list(): TypenameContext[] {
		return this.getTypedRuleContexts(TypenameContext) as TypenameContext[];
	}
	public typename(i: number): TypenameContext {
		return this.getTypedRuleContext(TypenameContext, i) as TypenameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_a_expr_typecast;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterA_expr_typecast) {
	 		listener.enterA_expr_typecast(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitA_expr_typecast) {
	 		listener.exitA_expr_typecast(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitA_expr_typecast) {
			return visitor.visitA_expr_typecast(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class B_exprContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public c_expr(): C_exprContext {
		return this.getTypedRuleContext(C_exprContext, 0) as C_exprContext;
	}
	public b_expr_list(): B_exprContext[] {
		return this.getTypedRuleContexts(B_exprContext) as B_exprContext[];
	}
	public b_expr(i: number): B_exprContext {
		return this.getTypedRuleContext(B_exprContext, i) as B_exprContext;
	}
	public PLUS(): TerminalNode {
		return this.getToken(PostgreSQLParser.PLUS, 0);
	}
	public MINUS(): TerminalNode {
		return this.getToken(PostgreSQLParser.MINUS, 0);
	}
	public qual_op(): Qual_opContext {
		return this.getTypedRuleContext(Qual_opContext, 0) as Qual_opContext;
	}
	public CARET(): TerminalNode {
		return this.getToken(PostgreSQLParser.CARET, 0);
	}
	public STAR(): TerminalNode {
		return this.getToken(PostgreSQLParser.STAR, 0);
	}
	public SLASH(): TerminalNode {
		return this.getToken(PostgreSQLParser.SLASH, 0);
	}
	public PERCENT(): TerminalNode {
		return this.getToken(PostgreSQLParser.PERCENT, 0);
	}
	public LT(): TerminalNode {
		return this.getToken(PostgreSQLParser.LT, 0);
	}
	public GT(): TerminalNode {
		return this.getToken(PostgreSQLParser.GT, 0);
	}
	public EQUAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.EQUAL, 0);
	}
	public LESS_EQUALS(): TerminalNode {
		return this.getToken(PostgreSQLParser.LESS_EQUALS, 0);
	}
	public GREATER_EQUALS(): TerminalNode {
		return this.getToken(PostgreSQLParser.GREATER_EQUALS, 0);
	}
	public NOT_EQUALS(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT_EQUALS, 0);
	}
	public TYPECAST(): TerminalNode {
		return this.getToken(PostgreSQLParser.TYPECAST, 0);
	}
	public typename(): TypenameContext {
		return this.getTypedRuleContext(TypenameContext, 0) as TypenameContext;
	}
	public IS(): TerminalNode {
		return this.getToken(PostgreSQLParser.IS, 0);
	}
	public DISTINCT(): TerminalNode {
		return this.getToken(PostgreSQLParser.DISTINCT, 0);
	}
	public FROM(): TerminalNode {
		return this.getToken(PostgreSQLParser.FROM, 0);
	}
	public OF(): TerminalNode {
		return this.getToken(PostgreSQLParser.OF, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public type_list(): Type_listContext {
		return this.getTypedRuleContext(Type_listContext, 0) as Type_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public DOCUMENT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DOCUMENT_P, 0);
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_b_expr;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterB_expr) {
	 		listener.enterB_expr(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitB_expr) {
	 		listener.exitB_expr(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitB_expr) {
			return visitor.visitB_expr(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class C_exprContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_c_expr;
	}
	public copyFrom(ctx: C_exprContext): void {
		super.copyFrom(ctx);
	}
}
export class C_expr_existsContext extends C_exprContext {
	constructor(parser: PostgreSQLParser, ctx: C_exprContext) {
		super(parser, ctx.parentCtx, ctx.invokingState);
		super.copyFrom(ctx);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
	public select_with_parens(): Select_with_parensContext {
		return this.getTypedRuleContext(Select_with_parensContext, 0) as Select_with_parensContext;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterC_expr_exists) {
	 		listener.enterC_expr_exists(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitC_expr_exists) {
	 		listener.exitC_expr_exists(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitC_expr_exists) {
			return visitor.visitC_expr_exists(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}
export class C_expr_caseContext extends C_exprContext {
	constructor(parser: PostgreSQLParser, ctx: C_exprContext) {
		super(parser, ctx.parentCtx, ctx.invokingState);
		super.copyFrom(ctx);
	}
	public case_expr(): Case_exprContext {
		return this.getTypedRuleContext(Case_exprContext, 0) as Case_exprContext;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterC_expr_case) {
	 		listener.enterC_expr_case(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitC_expr_case) {
	 		listener.exitC_expr_case(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitC_expr_case) {
			return visitor.visitC_expr_case(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}
export class C_expr_exprContext extends C_exprContext {
	public _a_expr_in_parens!: A_exprContext;
	constructor(parser: PostgreSQLParser, ctx: C_exprContext) {
		super(parser, ctx.parentCtx, ctx.invokingState);
		super.copyFrom(ctx);
	}
	public ARRAY(): TerminalNode {
		return this.getToken(PostgreSQLParser.ARRAY, 0);
	}
	public select_with_parens(): Select_with_parensContext {
		return this.getTypedRuleContext(Select_with_parensContext, 0) as Select_with_parensContext;
	}
	public array_expr(): Array_exprContext {
		return this.getTypedRuleContext(Array_exprContext, 0) as Array_exprContext;
	}
	public PARAM(): TerminalNode {
		return this.getToken(PostgreSQLParser.PARAM, 0);
	}
	public opt_indirection(): Opt_indirectionContext {
		return this.getTypedRuleContext(Opt_indirectionContext, 0) as Opt_indirectionContext;
	}
	public GROUPING(): TerminalNode {
		return this.getToken(PostgreSQLParser.GROUPING, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public expr_list(): Expr_listContext {
		return this.getTypedRuleContext(Expr_listContext, 0) as Expr_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public UNIQUE(): TerminalNode {
		return this.getToken(PostgreSQLParser.UNIQUE, 0);
	}
	public columnref(): ColumnrefContext {
		return this.getTypedRuleContext(ColumnrefContext, 0) as ColumnrefContext;
	}
	public aexprconst(): AexprconstContext {
		return this.getTypedRuleContext(AexprconstContext, 0) as AexprconstContext;
	}
	public plsqlvariablename(): PlsqlvariablenameContext {
		return this.getTypedRuleContext(PlsqlvariablenameContext, 0) as PlsqlvariablenameContext;
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public func_expr(): Func_exprContext {
		return this.getTypedRuleContext(Func_exprContext, 0) as Func_exprContext;
	}
	public indirection(): IndirectionContext {
		return this.getTypedRuleContext(IndirectionContext, 0) as IndirectionContext;
	}
	public explicit_row(): Explicit_rowContext {
		return this.getTypedRuleContext(Explicit_rowContext, 0) as Explicit_rowContext;
	}
	public implicit_row(): Implicit_rowContext {
		return this.getTypedRuleContext(Implicit_rowContext, 0) as Implicit_rowContext;
	}
	public row_list(): RowContext[] {
		return this.getTypedRuleContexts(RowContext) as RowContext[];
	}
	public row(i: number): RowContext {
		return this.getTypedRuleContext(RowContext, i) as RowContext;
	}
	public OVERLAPS(): TerminalNode {
		return this.getToken(PostgreSQLParser.OVERLAPS, 0);
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterC_expr_expr) {
	 		listener.enterC_expr_expr(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitC_expr_expr) {
	 		listener.exitC_expr_expr(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitC_expr_expr) {
			return visitor.visitC_expr_expr(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class PlsqlvariablenameContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public PLSQLVARIABLENAME(): TerminalNode {
		return this.getToken(PostgreSQLParser.PLSQLVARIABLENAME, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_plsqlvariablename;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterPlsqlvariablename) {
	 		listener.enterPlsqlvariablename(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitPlsqlvariablename) {
	 		listener.exitPlsqlvariablename(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitPlsqlvariablename) {
			return visitor.visitPlsqlvariablename(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Func_applicationContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public func_name(): Func_nameContext {
		return this.getTypedRuleContext(Func_nameContext, 0) as Func_nameContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public func_arg_list(): Func_arg_listContext {
		return this.getTypedRuleContext(Func_arg_listContext, 0) as Func_arg_listContext;
	}
	public opt_sort_clause(): Opt_sort_clauseContext {
		return this.getTypedRuleContext(Opt_sort_clauseContext, 0) as Opt_sort_clauseContext;
	}
	public VARIADIC(): TerminalNode {
		return this.getToken(PostgreSQLParser.VARIADIC, 0);
	}
	public func_arg_expr(): Func_arg_exprContext {
		return this.getTypedRuleContext(Func_arg_exprContext, 0) as Func_arg_exprContext;
	}
	public STAR(): TerminalNode {
		return this.getToken(PostgreSQLParser.STAR, 0);
	}
	public ALL(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALL, 0);
	}
	public DISTINCT(): TerminalNode {
		return this.getToken(PostgreSQLParser.DISTINCT, 0);
	}
	public COMMA(): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_func_application;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFunc_application) {
	 		listener.enterFunc_application(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFunc_application) {
	 		listener.exitFunc_application(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFunc_application) {
			return visitor.visitFunc_application(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Func_exprContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public func_application(): Func_applicationContext {
		return this.getTypedRuleContext(Func_applicationContext, 0) as Func_applicationContext;
	}
	public within_group_clause(): Within_group_clauseContext {
		return this.getTypedRuleContext(Within_group_clauseContext, 0) as Within_group_clauseContext;
	}
	public filter_clause(): Filter_clauseContext {
		return this.getTypedRuleContext(Filter_clauseContext, 0) as Filter_clauseContext;
	}
	public over_clause(): Over_clauseContext {
		return this.getTypedRuleContext(Over_clauseContext, 0) as Over_clauseContext;
	}
	public func_expr_common_subexpr(): Func_expr_common_subexprContext {
		return this.getTypedRuleContext(Func_expr_common_subexprContext, 0) as Func_expr_common_subexprContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_func_expr;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFunc_expr) {
	 		listener.enterFunc_expr(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFunc_expr) {
	 		listener.exitFunc_expr(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFunc_expr) {
			return visitor.visitFunc_expr(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Func_expr_windowlessContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public func_application(): Func_applicationContext {
		return this.getTypedRuleContext(Func_applicationContext, 0) as Func_applicationContext;
	}
	public func_expr_common_subexpr(): Func_expr_common_subexprContext {
		return this.getTypedRuleContext(Func_expr_common_subexprContext, 0) as Func_expr_common_subexprContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_func_expr_windowless;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFunc_expr_windowless) {
	 		listener.enterFunc_expr_windowless(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFunc_expr_windowless) {
	 		listener.exitFunc_expr_windowless(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFunc_expr_windowless) {
			return visitor.visitFunc_expr_windowless(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Func_expr_common_subexprContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public COLLATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.COLLATION, 0);
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public a_expr_list(): A_exprContext[] {
		return this.getTypedRuleContexts(A_exprContext) as A_exprContext[];
	}
	public a_expr(i: number): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, i) as A_exprContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public CURRENT_DATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CURRENT_DATE, 0);
	}
	public CURRENT_TIME(): TerminalNode {
		return this.getToken(PostgreSQLParser.CURRENT_TIME, 0);
	}
	public iconst(): IconstContext {
		return this.getTypedRuleContext(IconstContext, 0) as IconstContext;
	}
	public CURRENT_TIMESTAMP(): TerminalNode {
		return this.getToken(PostgreSQLParser.CURRENT_TIMESTAMP, 0);
	}
	public LOCALTIME(): TerminalNode {
		return this.getToken(PostgreSQLParser.LOCALTIME, 0);
	}
	public LOCALTIMESTAMP(): TerminalNode {
		return this.getToken(PostgreSQLParser.LOCALTIMESTAMP, 0);
	}
	public CURRENT_ROLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CURRENT_ROLE, 0);
	}
	public CURRENT_USER(): TerminalNode {
		return this.getToken(PostgreSQLParser.CURRENT_USER, 0);
	}
	public SESSION_USER(): TerminalNode {
		return this.getToken(PostgreSQLParser.SESSION_USER, 0);
	}
	public USER(): TerminalNode {
		return this.getToken(PostgreSQLParser.USER, 0);
	}
	public CURRENT_CATALOG(): TerminalNode {
		return this.getToken(PostgreSQLParser.CURRENT_CATALOG, 0);
	}
	public CURRENT_SCHEMA(): TerminalNode {
		return this.getToken(PostgreSQLParser.CURRENT_SCHEMA, 0);
	}
	public CAST(): TerminalNode {
		return this.getToken(PostgreSQLParser.CAST, 0);
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
	public typename(): TypenameContext {
		return this.getTypedRuleContext(TypenameContext, 0) as TypenameContext;
	}
	public EXTRACT(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXTRACT, 0);
	}
	public extract_list(): Extract_listContext {
		return this.getTypedRuleContext(Extract_listContext, 0) as Extract_listContext;
	}
	public NORMALIZE(): TerminalNode {
		return this.getToken(PostgreSQLParser.NORMALIZE, 0);
	}
	public COMMA(): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, 0);
	}
	public unicode_normal_form(): Unicode_normal_formContext {
		return this.getTypedRuleContext(Unicode_normal_formContext, 0) as Unicode_normal_formContext;
	}
	public OVERLAY(): TerminalNode {
		return this.getToken(PostgreSQLParser.OVERLAY, 0);
	}
	public overlay_list(): Overlay_listContext {
		return this.getTypedRuleContext(Overlay_listContext, 0) as Overlay_listContext;
	}
	public POSITION(): TerminalNode {
		return this.getToken(PostgreSQLParser.POSITION, 0);
	}
	public position_list(): Position_listContext {
		return this.getTypedRuleContext(Position_listContext, 0) as Position_listContext;
	}
	public SUBSTRING(): TerminalNode {
		return this.getToken(PostgreSQLParser.SUBSTRING, 0);
	}
	public substr_list(): Substr_listContext {
		return this.getTypedRuleContext(Substr_listContext, 0) as Substr_listContext;
	}
	public TREAT(): TerminalNode {
		return this.getToken(PostgreSQLParser.TREAT, 0);
	}
	public TRIM(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRIM, 0);
	}
	public trim_list(): Trim_listContext {
		return this.getTypedRuleContext(Trim_listContext, 0) as Trim_listContext;
	}
	public BOTH(): TerminalNode {
		return this.getToken(PostgreSQLParser.BOTH, 0);
	}
	public LEADING(): TerminalNode {
		return this.getToken(PostgreSQLParser.LEADING, 0);
	}
	public TRAILING(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRAILING, 0);
	}
	public NULLIF(): TerminalNode {
		return this.getToken(PostgreSQLParser.NULLIF, 0);
	}
	public COALESCE(): TerminalNode {
		return this.getToken(PostgreSQLParser.COALESCE, 0);
	}
	public expr_list(): Expr_listContext {
		return this.getTypedRuleContext(Expr_listContext, 0) as Expr_listContext;
	}
	public GREATEST(): TerminalNode {
		return this.getToken(PostgreSQLParser.GREATEST, 0);
	}
	public LEAST(): TerminalNode {
		return this.getToken(PostgreSQLParser.LEAST, 0);
	}
	public XMLCONCAT(): TerminalNode {
		return this.getToken(PostgreSQLParser.XMLCONCAT, 0);
	}
	public XMLELEMENT(): TerminalNode {
		return this.getToken(PostgreSQLParser.XMLELEMENT, 0);
	}
	public NAME_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.NAME_P, 0);
	}
	public collabel(): CollabelContext {
		return this.getTypedRuleContext(CollabelContext, 0) as CollabelContext;
	}
	public xml_attributes(): Xml_attributesContext {
		return this.getTypedRuleContext(Xml_attributesContext, 0) as Xml_attributesContext;
	}
	public XMLEXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.XMLEXISTS, 0);
	}
	public c_expr(): C_exprContext {
		return this.getTypedRuleContext(C_exprContext, 0) as C_exprContext;
	}
	public xmlexists_argument(): Xmlexists_argumentContext {
		return this.getTypedRuleContext(Xmlexists_argumentContext, 0) as Xmlexists_argumentContext;
	}
	public XMLFOREST(): TerminalNode {
		return this.getToken(PostgreSQLParser.XMLFOREST, 0);
	}
	public xml_attribute_list(): Xml_attribute_listContext {
		return this.getTypedRuleContext(Xml_attribute_listContext, 0) as Xml_attribute_listContext;
	}
	public XMLPARSE(): TerminalNode {
		return this.getToken(PostgreSQLParser.XMLPARSE, 0);
	}
	public document_or_content(): Document_or_contentContext {
		return this.getTypedRuleContext(Document_or_contentContext, 0) as Document_or_contentContext;
	}
	public xml_whitespace_option(): Xml_whitespace_optionContext {
		return this.getTypedRuleContext(Xml_whitespace_optionContext, 0) as Xml_whitespace_optionContext;
	}
	public XMLPI(): TerminalNode {
		return this.getToken(PostgreSQLParser.XMLPI, 0);
	}
	public XMLROOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.XMLROOT, 0);
	}
	public XML_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.XML_P, 0);
	}
	public xml_root_version(): Xml_root_versionContext {
		return this.getTypedRuleContext(Xml_root_versionContext, 0) as Xml_root_versionContext;
	}
	public opt_xml_root_standalone(): Opt_xml_root_standaloneContext {
		return this.getTypedRuleContext(Opt_xml_root_standaloneContext, 0) as Opt_xml_root_standaloneContext;
	}
	public XMLSERIALIZE(): TerminalNode {
		return this.getToken(PostgreSQLParser.XMLSERIALIZE, 0);
	}
	public simpletypename(): SimpletypenameContext {
		return this.getTypedRuleContext(SimpletypenameContext, 0) as SimpletypenameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_func_expr_common_subexpr;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFunc_expr_common_subexpr) {
	 		listener.enterFunc_expr_common_subexpr(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFunc_expr_common_subexpr) {
	 		listener.exitFunc_expr_common_subexpr(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFunc_expr_common_subexpr) {
			return visitor.visitFunc_expr_common_subexpr(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Xml_root_versionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public VERSION_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.VERSION_P, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public NO(): TerminalNode {
		return this.getToken(PostgreSQLParser.NO, 0);
	}
	public VALUE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.VALUE_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_xml_root_version;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterXml_root_version) {
	 		listener.enterXml_root_version(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitXml_root_version) {
	 		listener.exitXml_root_version(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitXml_root_version) {
			return visitor.visitXml_root_version(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_xml_root_standaloneContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public COMMA(): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, 0);
	}
	public STANDALONE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.STANDALONE_P, 0);
	}
	public YES_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.YES_P, 0);
	}
	public NO(): TerminalNode {
		return this.getToken(PostgreSQLParser.NO, 0);
	}
	public VALUE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.VALUE_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_xml_root_standalone;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_xml_root_standalone) {
	 		listener.enterOpt_xml_root_standalone(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_xml_root_standalone) {
	 		listener.exitOpt_xml_root_standalone(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_xml_root_standalone) {
			return visitor.visitOpt_xml_root_standalone(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Xml_attributesContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public XMLATTRIBUTES(): TerminalNode {
		return this.getToken(PostgreSQLParser.XMLATTRIBUTES, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public xml_attribute_list(): Xml_attribute_listContext {
		return this.getTypedRuleContext(Xml_attribute_listContext, 0) as Xml_attribute_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_xml_attributes;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterXml_attributes) {
	 		listener.enterXml_attributes(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitXml_attributes) {
	 		listener.exitXml_attributes(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitXml_attributes) {
			return visitor.visitXml_attributes(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Xml_attribute_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public xml_attribute_el_list(): Xml_attribute_elContext[] {
		return this.getTypedRuleContexts(Xml_attribute_elContext) as Xml_attribute_elContext[];
	}
	public xml_attribute_el(i: number): Xml_attribute_elContext {
		return this.getTypedRuleContext(Xml_attribute_elContext, i) as Xml_attribute_elContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_xml_attribute_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterXml_attribute_list) {
	 		listener.enterXml_attribute_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitXml_attribute_list) {
	 		listener.exitXml_attribute_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitXml_attribute_list) {
			return visitor.visitXml_attribute_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Xml_attribute_elContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
	public collabel(): CollabelContext {
		return this.getTypedRuleContext(CollabelContext, 0) as CollabelContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_xml_attribute_el;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterXml_attribute_el) {
	 		listener.enterXml_attribute_el(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitXml_attribute_el) {
	 		listener.exitXml_attribute_el(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitXml_attribute_el) {
			return visitor.visitXml_attribute_el(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Document_or_contentContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public DOCUMENT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DOCUMENT_P, 0);
	}
	public CONTENT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONTENT_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_document_or_content;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDocument_or_content) {
	 		listener.enterDocument_or_content(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDocument_or_content) {
	 		listener.exitDocument_or_content(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDocument_or_content) {
			return visitor.visitDocument_or_content(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Xml_whitespace_optionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public PRESERVE(): TerminalNode {
		return this.getToken(PostgreSQLParser.PRESERVE, 0);
	}
	public WHITESPACE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.WHITESPACE_P, 0);
	}
	public STRIP_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.STRIP_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_xml_whitespace_option;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterXml_whitespace_option) {
	 		listener.enterXml_whitespace_option(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitXml_whitespace_option) {
	 		listener.exitXml_whitespace_option(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitXml_whitespace_option) {
			return visitor.visitXml_whitespace_option(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Xmlexists_argumentContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public PASSING(): TerminalNode {
		return this.getToken(PostgreSQLParser.PASSING, 0);
	}
	public c_expr(): C_exprContext {
		return this.getTypedRuleContext(C_exprContext, 0) as C_exprContext;
	}
	public xml_passing_mech_list(): Xml_passing_mechContext[] {
		return this.getTypedRuleContexts(Xml_passing_mechContext) as Xml_passing_mechContext[];
	}
	public xml_passing_mech(i: number): Xml_passing_mechContext {
		return this.getTypedRuleContext(Xml_passing_mechContext, i) as Xml_passing_mechContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_xmlexists_argument;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterXmlexists_argument) {
	 		listener.enterXmlexists_argument(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitXmlexists_argument) {
	 		listener.exitXmlexists_argument(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitXmlexists_argument) {
			return visitor.visitXmlexists_argument(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Xml_passing_mechContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public BY(): TerminalNode {
		return this.getToken(PostgreSQLParser.BY, 0);
	}
	public REF(): TerminalNode {
		return this.getToken(PostgreSQLParser.REF, 0);
	}
	public VALUE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.VALUE_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_xml_passing_mech;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterXml_passing_mech) {
	 		listener.enterXml_passing_mech(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitXml_passing_mech) {
	 		listener.exitXml_passing_mech(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitXml_passing_mech) {
			return visitor.visitXml_passing_mech(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Within_group_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public WITHIN(): TerminalNode {
		return this.getToken(PostgreSQLParser.WITHIN, 0);
	}
	public GROUP_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.GROUP_P, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public sort_clause(): Sort_clauseContext {
		return this.getTypedRuleContext(Sort_clauseContext, 0) as Sort_clauseContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_within_group_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterWithin_group_clause) {
	 		listener.enterWithin_group_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitWithin_group_clause) {
	 		listener.exitWithin_group_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitWithin_group_clause) {
			return visitor.visitWithin_group_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Filter_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public FILTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.FILTER, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public WHERE(): TerminalNode {
		return this.getToken(PostgreSQLParser.WHERE, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_filter_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFilter_clause) {
	 		listener.enterFilter_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFilter_clause) {
	 		listener.exitFilter_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFilter_clause) {
			return visitor.visitFilter_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Window_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public WINDOW(): TerminalNode {
		return this.getToken(PostgreSQLParser.WINDOW, 0);
	}
	public window_definition_list(): Window_definition_listContext {
		return this.getTypedRuleContext(Window_definition_listContext, 0) as Window_definition_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_window_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterWindow_clause) {
	 		listener.enterWindow_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitWindow_clause) {
	 		listener.exitWindow_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitWindow_clause) {
			return visitor.visitWindow_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Window_definition_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public window_definition_list(): Window_definitionContext[] {
		return this.getTypedRuleContexts(Window_definitionContext) as Window_definitionContext[];
	}
	public window_definition(i: number): Window_definitionContext {
		return this.getTypedRuleContext(Window_definitionContext, i) as Window_definitionContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_window_definition_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterWindow_definition_list) {
	 		listener.enterWindow_definition_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitWindow_definition_list) {
	 		listener.exitWindow_definition_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitWindow_definition_list) {
			return visitor.visitWindow_definition_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Window_definitionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
	public window_specification(): Window_specificationContext {
		return this.getTypedRuleContext(Window_specificationContext, 0) as Window_specificationContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_window_definition;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterWindow_definition) {
	 		listener.enterWindow_definition(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitWindow_definition) {
	 		listener.exitWindow_definition(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitWindow_definition) {
			return visitor.visitWindow_definition(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Over_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OVER(): TerminalNode {
		return this.getToken(PostgreSQLParser.OVER, 0);
	}
	public window_specification(): Window_specificationContext {
		return this.getTypedRuleContext(Window_specificationContext, 0) as Window_specificationContext;
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_over_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOver_clause) {
	 		listener.enterOver_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOver_clause) {
	 		listener.exitOver_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOver_clause) {
			return visitor.visitOver_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Window_specificationContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public opt_existing_window_name(): Opt_existing_window_nameContext {
		return this.getTypedRuleContext(Opt_existing_window_nameContext, 0) as Opt_existing_window_nameContext;
	}
	public opt_partition_clause(): Opt_partition_clauseContext {
		return this.getTypedRuleContext(Opt_partition_clauseContext, 0) as Opt_partition_clauseContext;
	}
	public opt_sort_clause(): Opt_sort_clauseContext {
		return this.getTypedRuleContext(Opt_sort_clauseContext, 0) as Opt_sort_clauseContext;
	}
	public opt_frame_clause(): Opt_frame_clauseContext {
		return this.getTypedRuleContext(Opt_frame_clauseContext, 0) as Opt_frame_clauseContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_window_specification;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterWindow_specification) {
	 		listener.enterWindow_specification(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitWindow_specification) {
	 		listener.exitWindow_specification(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitWindow_specification) {
			return visitor.visitWindow_specification(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_existing_window_nameContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_existing_window_name;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_existing_window_name) {
	 		listener.enterOpt_existing_window_name(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_existing_window_name) {
	 		listener.exitOpt_existing_window_name(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_existing_window_name) {
			return visitor.visitOpt_existing_window_name(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_partition_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public PARTITION(): TerminalNode {
		return this.getToken(PostgreSQLParser.PARTITION, 0);
	}
	public BY(): TerminalNode {
		return this.getToken(PostgreSQLParser.BY, 0);
	}
	public expr_list(): Expr_listContext {
		return this.getTypedRuleContext(Expr_listContext, 0) as Expr_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_partition_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_partition_clause) {
	 		listener.enterOpt_partition_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_partition_clause) {
	 		listener.exitOpt_partition_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_partition_clause) {
			return visitor.visitOpt_partition_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_frame_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public RANGE(): TerminalNode {
		return this.getToken(PostgreSQLParser.RANGE, 0);
	}
	public frame_extent(): Frame_extentContext {
		return this.getTypedRuleContext(Frame_extentContext, 0) as Frame_extentContext;
	}
	public opt_window_exclusion_clause(): Opt_window_exclusion_clauseContext {
		return this.getTypedRuleContext(Opt_window_exclusion_clauseContext, 0) as Opt_window_exclusion_clauseContext;
	}
	public ROWS(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROWS, 0);
	}
	public GROUPS(): TerminalNode {
		return this.getToken(PostgreSQLParser.GROUPS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_frame_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_frame_clause) {
	 		listener.enterOpt_frame_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_frame_clause) {
	 		listener.exitOpt_frame_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_frame_clause) {
			return visitor.visitOpt_frame_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Frame_extentContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public frame_bound_list(): Frame_boundContext[] {
		return this.getTypedRuleContexts(Frame_boundContext) as Frame_boundContext[];
	}
	public frame_bound(i: number): Frame_boundContext {
		return this.getTypedRuleContext(Frame_boundContext, i) as Frame_boundContext;
	}
	public BETWEEN(): TerminalNode {
		return this.getToken(PostgreSQLParser.BETWEEN, 0);
	}
	public AND(): TerminalNode {
		return this.getToken(PostgreSQLParser.AND, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_frame_extent;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFrame_extent) {
	 		listener.enterFrame_extent(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFrame_extent) {
	 		listener.exitFrame_extent(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFrame_extent) {
			return visitor.visitFrame_extent(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Frame_boundContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public UNBOUNDED(): TerminalNode {
		return this.getToken(PostgreSQLParser.UNBOUNDED, 0);
	}
	public PRECEDING(): TerminalNode {
		return this.getToken(PostgreSQLParser.PRECEDING, 0);
	}
	public FOLLOWING(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOLLOWING, 0);
	}
	public CURRENT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.CURRENT_P, 0);
	}
	public ROW(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROW, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_frame_bound;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFrame_bound) {
	 		listener.enterFrame_bound(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFrame_bound) {
	 		listener.exitFrame_bound(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFrame_bound) {
			return visitor.visitFrame_bound(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_window_exclusion_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public EXCLUDE(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXCLUDE, 0);
	}
	public CURRENT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.CURRENT_P, 0);
	}
	public ROW(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROW, 0);
	}
	public GROUP_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.GROUP_P, 0);
	}
	public TIES(): TerminalNode {
		return this.getToken(PostgreSQLParser.TIES, 0);
	}
	public NO(): TerminalNode {
		return this.getToken(PostgreSQLParser.NO, 0);
	}
	public OTHERS(): TerminalNode {
		return this.getToken(PostgreSQLParser.OTHERS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_window_exclusion_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_window_exclusion_clause) {
	 		listener.enterOpt_window_exclusion_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_window_exclusion_clause) {
	 		listener.exitOpt_window_exclusion_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_window_exclusion_clause) {
			return visitor.visitOpt_window_exclusion_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class RowContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ROW(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROW, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public expr_list(): Expr_listContext {
		return this.getTypedRuleContext(Expr_listContext, 0) as Expr_listContext;
	}
	public COMMA(): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_row;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterRow) {
	 		listener.enterRow(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitRow) {
	 		listener.exitRow(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitRow) {
			return visitor.visitRow(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Explicit_rowContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ROW(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROW, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public expr_list(): Expr_listContext {
		return this.getTypedRuleContext(Expr_listContext, 0) as Expr_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_explicit_row;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterExplicit_row) {
	 		listener.enterExplicit_row(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitExplicit_row) {
	 		listener.exitExplicit_row(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitExplicit_row) {
			return visitor.visitExplicit_row(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Implicit_rowContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public expr_list(): Expr_listContext {
		return this.getTypedRuleContext(Expr_listContext, 0) as Expr_listContext;
	}
	public COMMA(): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_implicit_row;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterImplicit_row) {
	 		listener.enterImplicit_row(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitImplicit_row) {
	 		listener.exitImplicit_row(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitImplicit_row) {
			return visitor.visitImplicit_row(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Sub_typeContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ANY(): TerminalNode {
		return this.getToken(PostgreSQLParser.ANY, 0);
	}
	public SOME(): TerminalNode {
		return this.getToken(PostgreSQLParser.SOME, 0);
	}
	public ALL(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALL, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_sub_type;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSub_type) {
	 		listener.enterSub_type(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSub_type) {
	 		listener.exitSub_type(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSub_type) {
			return visitor.visitSub_type(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class All_opContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public Operator(): TerminalNode {
		return this.getToken(PostgreSQLParser.Operator, 0);
	}
	public mathop(): MathopContext {
		return this.getTypedRuleContext(MathopContext, 0) as MathopContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_all_op;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAll_op) {
	 		listener.enterAll_op(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAll_op) {
	 		listener.exitAll_op(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAll_op) {
			return visitor.visitAll_op(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class MathopContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public PLUS(): TerminalNode {
		return this.getToken(PostgreSQLParser.PLUS, 0);
	}
	public MINUS(): TerminalNode {
		return this.getToken(PostgreSQLParser.MINUS, 0);
	}
	public STAR(): TerminalNode {
		return this.getToken(PostgreSQLParser.STAR, 0);
	}
	public SLASH(): TerminalNode {
		return this.getToken(PostgreSQLParser.SLASH, 0);
	}
	public PERCENT(): TerminalNode {
		return this.getToken(PostgreSQLParser.PERCENT, 0);
	}
	public CARET(): TerminalNode {
		return this.getToken(PostgreSQLParser.CARET, 0);
	}
	public LT(): TerminalNode {
		return this.getToken(PostgreSQLParser.LT, 0);
	}
	public GT(): TerminalNode {
		return this.getToken(PostgreSQLParser.GT, 0);
	}
	public EQUAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.EQUAL, 0);
	}
	public LESS_EQUALS(): TerminalNode {
		return this.getToken(PostgreSQLParser.LESS_EQUALS, 0);
	}
	public GREATER_EQUALS(): TerminalNode {
		return this.getToken(PostgreSQLParser.GREATER_EQUALS, 0);
	}
	public NOT_EQUALS(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT_EQUALS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_mathop;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterMathop) {
	 		listener.enterMathop(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitMathop) {
	 		listener.exitMathop(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitMathop) {
			return visitor.visitMathop(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Qual_opContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public Operator(): TerminalNode {
		return this.getToken(PostgreSQLParser.Operator, 0);
	}
	public OPERATOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPERATOR, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public any_operator(): Any_operatorContext {
		return this.getTypedRuleContext(Any_operatorContext, 0) as Any_operatorContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_qual_op;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterQual_op) {
	 		listener.enterQual_op(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitQual_op) {
	 		listener.exitQual_op(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitQual_op) {
			return visitor.visitQual_op(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Qual_all_opContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public all_op(): All_opContext {
		return this.getTypedRuleContext(All_opContext, 0) as All_opContext;
	}
	public OPERATOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPERATOR, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public any_operator(): Any_operatorContext {
		return this.getTypedRuleContext(Any_operatorContext, 0) as Any_operatorContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_qual_all_op;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterQual_all_op) {
	 		listener.enterQual_all_op(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitQual_all_op) {
	 		listener.exitQual_all_op(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitQual_all_op) {
			return visitor.visitQual_all_op(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Subquery_OpContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public all_op(): All_opContext {
		return this.getTypedRuleContext(All_opContext, 0) as All_opContext;
	}
	public OPERATOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPERATOR, 0);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public any_operator(): Any_operatorContext {
		return this.getTypedRuleContext(Any_operatorContext, 0) as Any_operatorContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public LIKE(): TerminalNode {
		return this.getToken(PostgreSQLParser.LIKE, 0);
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
	public ILIKE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ILIKE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_subquery_Op;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSubquery_Op) {
	 		listener.enterSubquery_Op(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSubquery_Op) {
	 		listener.exitSubquery_Op(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSubquery_Op) {
			return visitor.visitSubquery_Op(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Expr_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr_list(): A_exprContext[] {
		return this.getTypedRuleContexts(A_exprContext) as A_exprContext[];
	}
	public a_expr(i: number): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, i) as A_exprContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_expr_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterExpr_list) {
	 		listener.enterExpr_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitExpr_list) {
	 		listener.exitExpr_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitExpr_list) {
			return visitor.visitExpr_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Func_arg_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public func_arg_expr_list(): Func_arg_exprContext[] {
		return this.getTypedRuleContexts(Func_arg_exprContext) as Func_arg_exprContext[];
	}
	public func_arg_expr(i: number): Func_arg_exprContext {
		return this.getTypedRuleContext(Func_arg_exprContext, i) as Func_arg_exprContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_func_arg_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFunc_arg_list) {
	 		listener.enterFunc_arg_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFunc_arg_list) {
	 		listener.exitFunc_arg_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFunc_arg_list) {
			return visitor.visitFunc_arg_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Func_arg_exprContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public param_name(): Param_nameContext {
		return this.getTypedRuleContext(Param_nameContext, 0) as Param_nameContext;
	}
	public COLON_EQUALS(): TerminalNode {
		return this.getToken(PostgreSQLParser.COLON_EQUALS, 0);
	}
	public EQUALS_GREATER(): TerminalNode {
		return this.getToken(PostgreSQLParser.EQUALS_GREATER, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_func_arg_expr;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFunc_arg_expr) {
	 		listener.enterFunc_arg_expr(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFunc_arg_expr) {
	 		listener.exitFunc_arg_expr(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFunc_arg_expr) {
			return visitor.visitFunc_arg_expr(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Type_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public typename_list(): TypenameContext[] {
		return this.getTypedRuleContexts(TypenameContext) as TypenameContext[];
	}
	public typename(i: number): TypenameContext {
		return this.getTypedRuleContext(TypenameContext, i) as TypenameContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_type_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterType_list) {
	 		listener.enterType_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitType_list) {
	 		listener.exitType_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitType_list) {
			return visitor.visitType_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Array_exprContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OPEN_BRACKET(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_BRACKET, 0);
	}
	public CLOSE_BRACKET(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_BRACKET, 0);
	}
	public expr_list(): Expr_listContext {
		return this.getTypedRuleContext(Expr_listContext, 0) as Expr_listContext;
	}
	public array_expr_list(): Array_expr_listContext {
		return this.getTypedRuleContext(Array_expr_listContext, 0) as Array_expr_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_array_expr;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterArray_expr) {
	 		listener.enterArray_expr(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitArray_expr) {
	 		listener.exitArray_expr(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitArray_expr) {
			return visitor.visitArray_expr(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Array_expr_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public array_expr_list(): Array_exprContext[] {
		return this.getTypedRuleContexts(Array_exprContext) as Array_exprContext[];
	}
	public array_expr(i: number): Array_exprContext {
		return this.getTypedRuleContext(Array_exprContext, i) as Array_exprContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_array_expr_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterArray_expr_list) {
	 		listener.enterArray_expr_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitArray_expr_list) {
	 		listener.exitArray_expr_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitArray_expr_list) {
			return visitor.visitArray_expr_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Extract_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public extract_arg(): Extract_argContext {
		return this.getTypedRuleContext(Extract_argContext, 0) as Extract_argContext;
	}
	public FROM(): TerminalNode {
		return this.getToken(PostgreSQLParser.FROM, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_extract_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterExtract_list) {
	 		listener.enterExtract_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitExtract_list) {
	 		listener.exitExtract_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitExtract_list) {
			return visitor.visitExtract_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Extract_argContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public identifier(): IdentifierContext {
		return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext;
	}
	public YEAR_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.YEAR_P, 0);
	}
	public MONTH_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.MONTH_P, 0);
	}
	public DAY_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DAY_P, 0);
	}
	public HOUR_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.HOUR_P, 0);
	}
	public MINUTE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.MINUTE_P, 0);
	}
	public SECOND_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.SECOND_P, 0);
	}
	public sconst(): SconstContext {
		return this.getTypedRuleContext(SconstContext, 0) as SconstContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_extract_arg;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterExtract_arg) {
	 		listener.enterExtract_arg(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitExtract_arg) {
	 		listener.exitExtract_arg(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitExtract_arg) {
			return visitor.visitExtract_arg(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Unicode_normal_formContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public NFC(): TerminalNode {
		return this.getToken(PostgreSQLParser.NFC, 0);
	}
	public NFD(): TerminalNode {
		return this.getToken(PostgreSQLParser.NFD, 0);
	}
	public NFKC(): TerminalNode {
		return this.getToken(PostgreSQLParser.NFKC, 0);
	}
	public NFKD(): TerminalNode {
		return this.getToken(PostgreSQLParser.NFKD, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_unicode_normal_form;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterUnicode_normal_form) {
	 		listener.enterUnicode_normal_form(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitUnicode_normal_form) {
	 		listener.exitUnicode_normal_form(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitUnicode_normal_form) {
			return visitor.visitUnicode_normal_form(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Overlay_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr_list(): A_exprContext[] {
		return this.getTypedRuleContexts(A_exprContext) as A_exprContext[];
	}
	public a_expr(i: number): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, i) as A_exprContext;
	}
	public PLACING(): TerminalNode {
		return this.getToken(PostgreSQLParser.PLACING, 0);
	}
	public FROM(): TerminalNode {
		return this.getToken(PostgreSQLParser.FROM, 0);
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_overlay_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOverlay_list) {
	 		listener.enterOverlay_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOverlay_list) {
	 		listener.exitOverlay_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOverlay_list) {
			return visitor.visitOverlay_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Position_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public b_expr_list(): B_exprContext[] {
		return this.getTypedRuleContexts(B_exprContext) as B_exprContext[];
	}
	public b_expr(i: number): B_exprContext {
		return this.getTypedRuleContext(B_exprContext, i) as B_exprContext;
	}
	public IN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IN_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_position_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterPosition_list) {
	 		listener.enterPosition_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitPosition_list) {
	 		listener.exitPosition_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitPosition_list) {
			return visitor.visitPosition_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Substr_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr_list(): A_exprContext[] {
		return this.getTypedRuleContexts(A_exprContext) as A_exprContext[];
	}
	public a_expr(i: number): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, i) as A_exprContext;
	}
	public FROM(): TerminalNode {
		return this.getToken(PostgreSQLParser.FROM, 0);
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
	public SIMILAR(): TerminalNode {
		return this.getToken(PostgreSQLParser.SIMILAR, 0);
	}
	public ESCAPE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ESCAPE, 0);
	}
	public expr_list(): Expr_listContext {
		return this.getTypedRuleContext(Expr_listContext, 0) as Expr_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_substr_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSubstr_list) {
	 		listener.enterSubstr_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSubstr_list) {
	 		listener.exitSubstr_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSubstr_list) {
			return visitor.visitSubstr_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Trim_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public FROM(): TerminalNode {
		return this.getToken(PostgreSQLParser.FROM, 0);
	}
	public expr_list(): Expr_listContext {
		return this.getTypedRuleContext(Expr_listContext, 0) as Expr_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_trim_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTrim_list) {
	 		listener.enterTrim_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTrim_list) {
	 		listener.exitTrim_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTrim_list) {
			return visitor.visitTrim_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class In_exprContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_in_expr;
	}
	public copyFrom(ctx: In_exprContext): void {
		super.copyFrom(ctx);
	}
}
export class In_expr_listContext extends In_exprContext {
	constructor(parser: PostgreSQLParser, ctx: In_exprContext) {
		super(parser, ctx.parentCtx, ctx.invokingState);
		super.copyFrom(ctx);
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public expr_list(): Expr_listContext {
		return this.getTypedRuleContext(Expr_listContext, 0) as Expr_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterIn_expr_list) {
	 		listener.enterIn_expr_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitIn_expr_list) {
	 		listener.exitIn_expr_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitIn_expr_list) {
			return visitor.visitIn_expr_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}
export class In_expr_selectContext extends In_exprContext {
	constructor(parser: PostgreSQLParser, ctx: In_exprContext) {
		super(parser, ctx.parentCtx, ctx.invokingState);
		super.copyFrom(ctx);
	}
	public select_with_parens(): Select_with_parensContext {
		return this.getTypedRuleContext(Select_with_parensContext, 0) as Select_with_parensContext;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterIn_expr_select) {
	 		listener.enterIn_expr_select(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitIn_expr_select) {
	 		listener.exitIn_expr_select(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitIn_expr_select) {
			return visitor.visitIn_expr_select(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Case_exprContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CASE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CASE, 0);
	}
	public case_arg(): Case_argContext {
		return this.getTypedRuleContext(Case_argContext, 0) as Case_argContext;
	}
	public when_clause_list(): When_clause_listContext {
		return this.getTypedRuleContext(When_clause_listContext, 0) as When_clause_listContext;
	}
	public case_default(): Case_defaultContext {
		return this.getTypedRuleContext(Case_defaultContext, 0) as Case_defaultContext;
	}
	public END_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.END_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_case_expr;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCase_expr) {
	 		listener.enterCase_expr(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCase_expr) {
	 		listener.exitCase_expr(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCase_expr) {
			return visitor.visitCase_expr(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class When_clause_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public when_clause_list(): When_clauseContext[] {
		return this.getTypedRuleContexts(When_clauseContext) as When_clauseContext[];
	}
	public when_clause(i: number): When_clauseContext {
		return this.getTypedRuleContext(When_clauseContext, i) as When_clauseContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_when_clause_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterWhen_clause_list) {
	 		listener.enterWhen_clause_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitWhen_clause_list) {
	 		listener.exitWhen_clause_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitWhen_clause_list) {
			return visitor.visitWhen_clause_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class When_clauseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public WHEN(): TerminalNode {
		return this.getToken(PostgreSQLParser.WHEN, 0);
	}
	public a_expr_list(): A_exprContext[] {
		return this.getTypedRuleContexts(A_exprContext) as A_exprContext[];
	}
	public a_expr(i: number): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, i) as A_exprContext;
	}
	public THEN(): TerminalNode {
		return this.getToken(PostgreSQLParser.THEN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_when_clause;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterWhen_clause) {
	 		listener.enterWhen_clause(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitWhen_clause) {
	 		listener.exitWhen_clause(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitWhen_clause) {
			return visitor.visitWhen_clause(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Case_defaultContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ELSE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ELSE, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_case_default;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCase_default) {
	 		listener.enterCase_default(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCase_default) {
	 		listener.exitCase_default(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCase_default) {
			return visitor.visitCase_default(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Case_argContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_case_arg;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCase_arg) {
	 		listener.enterCase_arg(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCase_arg) {
	 		listener.exitCase_arg(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCase_arg) {
			return visitor.visitCase_arg(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ColumnrefContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
	public indirection(): IndirectionContext {
		return this.getTypedRuleContext(IndirectionContext, 0) as IndirectionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_columnref;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterColumnref) {
	 		listener.enterColumnref(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitColumnref) {
	 		listener.exitColumnref(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitColumnref) {
			return visitor.visitColumnref(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Indirection_elContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public DOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.DOT, 0);
	}
	public attr_name(): Attr_nameContext {
		return this.getTypedRuleContext(Attr_nameContext, 0) as Attr_nameContext;
	}
	public STAR(): TerminalNode {
		return this.getToken(PostgreSQLParser.STAR, 0);
	}
	public OPEN_BRACKET(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_BRACKET, 0);
	}
	public CLOSE_BRACKET(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_BRACKET, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public opt_slice_bound_list(): Opt_slice_boundContext[] {
		return this.getTypedRuleContexts(Opt_slice_boundContext) as Opt_slice_boundContext[];
	}
	public opt_slice_bound(i: number): Opt_slice_boundContext {
		return this.getTypedRuleContext(Opt_slice_boundContext, i) as Opt_slice_boundContext;
	}
	public COLON(): TerminalNode {
		return this.getToken(PostgreSQLParser.COLON, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_indirection_el;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterIndirection_el) {
	 		listener.enterIndirection_el(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitIndirection_el) {
	 		listener.exitIndirection_el(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitIndirection_el) {
			return visitor.visitIndirection_el(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_slice_boundContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_slice_bound;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_slice_bound) {
	 		listener.enterOpt_slice_bound(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_slice_bound) {
	 		listener.exitOpt_slice_bound(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_slice_bound) {
			return visitor.visitOpt_slice_bound(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class IndirectionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public indirection_el_list(): Indirection_elContext[] {
		return this.getTypedRuleContexts(Indirection_elContext) as Indirection_elContext[];
	}
	public indirection_el(i: number): Indirection_elContext {
		return this.getTypedRuleContext(Indirection_elContext, i) as Indirection_elContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_indirection;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterIndirection) {
	 		listener.enterIndirection(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitIndirection) {
	 		listener.exitIndirection(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitIndirection) {
			return visitor.visitIndirection(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_indirectionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public indirection_el_list(): Indirection_elContext[] {
		return this.getTypedRuleContexts(Indirection_elContext) as Indirection_elContext[];
	}
	public indirection_el(i: number): Indirection_elContext {
		return this.getTypedRuleContext(Indirection_elContext, i) as Indirection_elContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_indirection;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_indirection) {
	 		listener.enterOpt_indirection(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_indirection) {
	 		listener.exitOpt_indirection(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_indirection) {
			return visitor.visitOpt_indirection(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_target_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public target_list(): Target_listContext {
		return this.getTypedRuleContext(Target_listContext, 0) as Target_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_target_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_target_list) {
	 		listener.enterOpt_target_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_target_list) {
	 		listener.exitOpt_target_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_target_list) {
			return visitor.visitOpt_target_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Target_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public target_el_list(): Target_elContext[] {
		return this.getTypedRuleContexts(Target_elContext) as Target_elContext[];
	}
	public target_el(i: number): Target_elContext {
		return this.getTypedRuleContext(Target_elContext, i) as Target_elContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_target_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTarget_list) {
	 		listener.enterTarget_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTarget_list) {
	 		listener.exitTarget_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTarget_list) {
			return visitor.visitTarget_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Target_elContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_target_el;
	}
	public copyFrom(ctx: Target_elContext): void {
		super.copyFrom(ctx);
	}
}
export class Target_labelContext extends Target_elContext {
	constructor(parser: PostgreSQLParser, ctx: Target_elContext) {
		super(parser, ctx.parentCtx, ctx.invokingState);
		super.copyFrom(ctx);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
	public collabel(): CollabelContext {
		return this.getTypedRuleContext(CollabelContext, 0) as CollabelContext;
	}
	public identifier(): IdentifierContext {
		return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTarget_label) {
	 		listener.enterTarget_label(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTarget_label) {
	 		listener.exitTarget_label(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTarget_label) {
			return visitor.visitTarget_label(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}
export class Target_starContext extends Target_elContext {
	constructor(parser: PostgreSQLParser, ctx: Target_elContext) {
		super(parser, ctx.parentCtx, ctx.invokingState);
		super.copyFrom(ctx);
	}
	public STAR(): TerminalNode {
		return this.getToken(PostgreSQLParser.STAR, 0);
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterTarget_star) {
	 		listener.enterTarget_star(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitTarget_star) {
	 		listener.exitTarget_star(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitTarget_star) {
			return visitor.visitTarget_star(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Qualified_name_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public qualified_name_list(): Qualified_nameContext[] {
		return this.getTypedRuleContexts(Qualified_nameContext) as Qualified_nameContext[];
	}
	public qualified_name(i: number): Qualified_nameContext {
		return this.getTypedRuleContext(Qualified_nameContext, i) as Qualified_nameContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_qualified_name_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterQualified_name_list) {
	 		listener.enterQualified_name_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitQualified_name_list) {
	 		listener.exitQualified_name_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitQualified_name_list) {
			return visitor.visitQualified_name_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Qualified_nameContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
	public indirection(): IndirectionContext {
		return this.getTypedRuleContext(IndirectionContext, 0) as IndirectionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_qualified_name;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterQualified_name) {
	 		listener.enterQualified_name(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitQualified_name) {
	 		listener.exitQualified_name(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitQualified_name) {
			return visitor.visitQualified_name(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Name_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public name_list(): NameContext[] {
		return this.getTypedRuleContexts(NameContext) as NameContext[];
	}
	public name(i: number): NameContext {
		return this.getTypedRuleContext(NameContext, i) as NameContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_name_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterName_list) {
	 		listener.enterName_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitName_list) {
	 		listener.exitName_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitName_list) {
			return visitor.visitName_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class NameContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_name;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterName) {
	 		listener.enterName(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitName) {
	 		listener.exitName(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitName) {
			return visitor.visitName(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Attr_nameContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public collabel(): CollabelContext {
		return this.getTypedRuleContext(CollabelContext, 0) as CollabelContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_attr_name;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAttr_name) {
	 		listener.enterAttr_name(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAttr_name) {
	 		listener.exitAttr_name(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAttr_name) {
			return visitor.visitAttr_name(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class File_nameContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public sconst(): SconstContext {
		return this.getTypedRuleContext(SconstContext, 0) as SconstContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_file_name;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFile_name) {
	 		listener.enterFile_name(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFile_name) {
	 		listener.exitFile_name(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFile_name) {
			return visitor.visitFile_name(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Func_nameContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public type_function_name(): Type_function_nameContext {
		return this.getTypedRuleContext(Type_function_nameContext, 0) as Type_function_nameContext;
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
	public indirection(): IndirectionContext {
		return this.getTypedRuleContext(IndirectionContext, 0) as IndirectionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_func_name;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFunc_name) {
	 		listener.enterFunc_name(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFunc_name) {
	 		listener.exitFunc_name(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFunc_name) {
			return visitor.visitFunc_name(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AexprconstContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public iconst(): IconstContext {
		return this.getTypedRuleContext(IconstContext, 0) as IconstContext;
	}
	public fconst(): FconstContext {
		return this.getTypedRuleContext(FconstContext, 0) as FconstContext;
	}
	public sconst(): SconstContext {
		return this.getTypedRuleContext(SconstContext, 0) as SconstContext;
	}
	public bconst(): BconstContext {
		return this.getTypedRuleContext(BconstContext, 0) as BconstContext;
	}
	public xconst(): XconstContext {
		return this.getTypedRuleContext(XconstContext, 0) as XconstContext;
	}
	public func_name(): Func_nameContext {
		return this.getTypedRuleContext(Func_nameContext, 0) as Func_nameContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public func_arg_list(): Func_arg_listContext {
		return this.getTypedRuleContext(Func_arg_listContext, 0) as Func_arg_listContext;
	}
	public opt_sort_clause(): Opt_sort_clauseContext {
		return this.getTypedRuleContext(Opt_sort_clauseContext, 0) as Opt_sort_clauseContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public consttypename(): ConsttypenameContext {
		return this.getTypedRuleContext(ConsttypenameContext, 0) as ConsttypenameContext;
	}
	public constinterval(): ConstintervalContext {
		return this.getTypedRuleContext(ConstintervalContext, 0) as ConstintervalContext;
	}
	public opt_interval(): Opt_intervalContext {
		return this.getTypedRuleContext(Opt_intervalContext, 0) as Opt_intervalContext;
	}
	public TRUE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRUE_P, 0);
	}
	public FALSE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.FALSE_P, 0);
	}
	public NULL_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.NULL_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_aexprconst;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAexprconst) {
	 		listener.enterAexprconst(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAexprconst) {
	 		listener.exitAexprconst(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAexprconst) {
			return visitor.visitAexprconst(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class XconstContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public HexadecimalStringConstant(): TerminalNode {
		return this.getToken(PostgreSQLParser.HexadecimalStringConstant, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_xconst;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterXconst) {
	 		listener.enterXconst(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitXconst) {
	 		listener.exitXconst(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitXconst) {
			return visitor.visitXconst(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class BconstContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public BinaryStringConstant(): TerminalNode {
		return this.getToken(PostgreSQLParser.BinaryStringConstant, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_bconst;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterBconst) {
	 		listener.enterBconst(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitBconst) {
	 		listener.exitBconst(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitBconst) {
			return visitor.visitBconst(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class FconstContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public Numeric(): TerminalNode {
		return this.getToken(PostgreSQLParser.Numeric, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_fconst;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFconst) {
	 		listener.enterFconst(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFconst) {
	 		listener.exitFconst(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFconst) {
			return visitor.visitFconst(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class IconstContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public Integral(): TerminalNode {
		return this.getToken(PostgreSQLParser.Integral, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_iconst;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterIconst) {
	 		listener.enterIconst(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitIconst) {
	 		listener.exitIconst(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitIconst) {
			return visitor.visitIconst(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class SconstContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public anysconst(): AnysconstContext {
		return this.getTypedRuleContext(AnysconstContext, 0) as AnysconstContext;
	}
	public opt_uescape(): Opt_uescapeContext {
		return this.getTypedRuleContext(Opt_uescapeContext, 0) as Opt_uescapeContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_sconst;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSconst) {
	 		listener.enterSconst(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSconst) {
	 		listener.exitSconst(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSconst) {
			return visitor.visitSconst(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class AnysconstContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public StringConstant(): TerminalNode {
		return this.getToken(PostgreSQLParser.StringConstant, 0);
	}
	public UnicodeEscapeStringConstant(): TerminalNode {
		return this.getToken(PostgreSQLParser.UnicodeEscapeStringConstant, 0);
	}
	public BeginDollarStringConstant(): TerminalNode {
		return this.getToken(PostgreSQLParser.BeginDollarStringConstant, 0);
	}
	public EndDollarStringConstant(): TerminalNode {
		return this.getToken(PostgreSQLParser.EndDollarStringConstant, 0);
	}
	public DollarText_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.DollarText);
	}
	public DollarText(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.DollarText, i);
	}
	public EscapeStringConstant(): TerminalNode {
		return this.getToken(PostgreSQLParser.EscapeStringConstant, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_anysconst;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAnysconst) {
	 		listener.enterAnysconst(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAnysconst) {
	 		listener.exitAnysconst(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAnysconst) {
			return visitor.visitAnysconst(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_uescapeContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public UESCAPE(): TerminalNode {
		return this.getToken(PostgreSQLParser.UESCAPE, 0);
	}
	public anysconst(): AnysconstContext {
		return this.getTypedRuleContext(AnysconstContext, 0) as AnysconstContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_uescape;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_uescape) {
	 		listener.enterOpt_uescape(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_uescape) {
	 		listener.exitOpt_uescape(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_uescape) {
			return visitor.visitOpt_uescape(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class SignediconstContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public iconst(): IconstContext {
		return this.getTypedRuleContext(IconstContext, 0) as IconstContext;
	}
	public PLUS(): TerminalNode {
		return this.getToken(PostgreSQLParser.PLUS, 0);
	}
	public MINUS(): TerminalNode {
		return this.getToken(PostgreSQLParser.MINUS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_signediconst;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSignediconst) {
	 		listener.enterSignediconst(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSignediconst) {
	 		listener.exitSignediconst(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSignediconst) {
			return visitor.visitSignediconst(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class RoleidContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public rolespec(): RolespecContext {
		return this.getTypedRuleContext(RolespecContext, 0) as RolespecContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_roleid;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterRoleid) {
	 		listener.enterRoleid(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitRoleid) {
	 		listener.exitRoleid(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitRoleid) {
			return visitor.visitRoleid(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class RolespecContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public nonreservedword(): NonreservedwordContext {
		return this.getTypedRuleContext(NonreservedwordContext, 0) as NonreservedwordContext;
	}
	public CURRENT_USER(): TerminalNode {
		return this.getToken(PostgreSQLParser.CURRENT_USER, 0);
	}
	public SESSION_USER(): TerminalNode {
		return this.getToken(PostgreSQLParser.SESSION_USER, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_rolespec;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterRolespec) {
	 		listener.enterRolespec(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitRolespec) {
	 		listener.exitRolespec(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitRolespec) {
			return visitor.visitRolespec(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Role_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public rolespec_list(): RolespecContext[] {
		return this.getTypedRuleContexts(RolespecContext) as RolespecContext[];
	}
	public rolespec(i: number): RolespecContext {
		return this.getTypedRuleContext(RolespecContext, i) as RolespecContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_role_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterRole_list) {
	 		listener.enterRole_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitRole_list) {
	 		listener.exitRole_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitRole_list) {
			return visitor.visitRole_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class ColidContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public identifier(): IdentifierContext {
		return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext;
	}
	public unreserved_keyword(): Unreserved_keywordContext {
		return this.getTypedRuleContext(Unreserved_keywordContext, 0) as Unreserved_keywordContext;
	}
	public col_name_keyword(): Col_name_keywordContext {
		return this.getTypedRuleContext(Col_name_keywordContext, 0) as Col_name_keywordContext;
	}
	public plsql_unreserved_keyword(): Plsql_unreserved_keywordContext {
		return this.getTypedRuleContext(Plsql_unreserved_keywordContext, 0) as Plsql_unreserved_keywordContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_colid;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterColid) {
	 		listener.enterColid(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitColid) {
	 		listener.exitColid(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitColid) {
			return visitor.visitColid(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Type_function_nameContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public identifier(): IdentifierContext {
		return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext;
	}
	public unreserved_keyword(): Unreserved_keywordContext {
		return this.getTypedRuleContext(Unreserved_keywordContext, 0) as Unreserved_keywordContext;
	}
	public plsql_unreserved_keyword(): Plsql_unreserved_keywordContext {
		return this.getTypedRuleContext(Plsql_unreserved_keywordContext, 0) as Plsql_unreserved_keywordContext;
	}
	public type_func_name_keyword(): Type_func_name_keywordContext {
		return this.getTypedRuleContext(Type_func_name_keywordContext, 0) as Type_func_name_keywordContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_type_function_name;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterType_function_name) {
	 		listener.enterType_function_name(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitType_function_name) {
	 		listener.exitType_function_name(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitType_function_name) {
			return visitor.visitType_function_name(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class NonreservedwordContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public identifier(): IdentifierContext {
		return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext;
	}
	public unreserved_keyword(): Unreserved_keywordContext {
		return this.getTypedRuleContext(Unreserved_keywordContext, 0) as Unreserved_keywordContext;
	}
	public col_name_keyword(): Col_name_keywordContext {
		return this.getTypedRuleContext(Col_name_keywordContext, 0) as Col_name_keywordContext;
	}
	public type_func_name_keyword(): Type_func_name_keywordContext {
		return this.getTypedRuleContext(Type_func_name_keywordContext, 0) as Type_func_name_keywordContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_nonreservedword;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterNonreservedword) {
	 		listener.enterNonreservedword(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitNonreservedword) {
	 		listener.exitNonreservedword(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitNonreservedword) {
			return visitor.visitNonreservedword(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class CollabelContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public identifier(): IdentifierContext {
		return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext;
	}
	public plsql_unreserved_keyword(): Plsql_unreserved_keywordContext {
		return this.getTypedRuleContext(Plsql_unreserved_keywordContext, 0) as Plsql_unreserved_keywordContext;
	}
	public unreserved_keyword(): Unreserved_keywordContext {
		return this.getTypedRuleContext(Unreserved_keywordContext, 0) as Unreserved_keywordContext;
	}
	public col_name_keyword(): Col_name_keywordContext {
		return this.getTypedRuleContext(Col_name_keywordContext, 0) as Col_name_keywordContext;
	}
	public type_func_name_keyword(): Type_func_name_keywordContext {
		return this.getTypedRuleContext(Type_func_name_keywordContext, 0) as Type_func_name_keywordContext;
	}
	public reserved_keyword(): Reserved_keywordContext {
		return this.getTypedRuleContext(Reserved_keywordContext, 0) as Reserved_keywordContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_collabel;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCollabel) {
	 		listener.enterCollabel(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCollabel) {
	 		listener.exitCollabel(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCollabel) {
			return visitor.visitCollabel(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class IdentifierContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public Identifier(): TerminalNode {
		return this.getToken(PostgreSQLParser.Identifier, 0);
	}
	public opt_uescape(): Opt_uescapeContext {
		return this.getTypedRuleContext(Opt_uescapeContext, 0) as Opt_uescapeContext;
	}
	public QuotedIdentifier(): TerminalNode {
		return this.getToken(PostgreSQLParser.QuotedIdentifier, 0);
	}
	public UnicodeQuotedIdentifier(): TerminalNode {
		return this.getToken(PostgreSQLParser.UnicodeQuotedIdentifier, 0);
	}
	public plsqlvariablename(): PlsqlvariablenameContext {
		return this.getTypedRuleContext(PlsqlvariablenameContext, 0) as PlsqlvariablenameContext;
	}
	public plsqlidentifier(): PlsqlidentifierContext {
		return this.getTypedRuleContext(PlsqlidentifierContext, 0) as PlsqlidentifierContext;
	}
	public plsql_unreserved_keyword(): Plsql_unreserved_keywordContext {
		return this.getTypedRuleContext(Plsql_unreserved_keywordContext, 0) as Plsql_unreserved_keywordContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_identifier;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterIdentifier) {
	 		listener.enterIdentifier(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitIdentifier) {
	 		listener.exitIdentifier(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitIdentifier) {
			return visitor.visitIdentifier(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class PlsqlidentifierContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public PLSQLIDENTIFIER(): TerminalNode {
		return this.getToken(PostgreSQLParser.PLSQLIDENTIFIER, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_plsqlidentifier;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterPlsqlidentifier) {
	 		listener.enterPlsqlidentifier(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitPlsqlidentifier) {
	 		listener.exitPlsqlidentifier(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitPlsqlidentifier) {
			return visitor.visitPlsqlidentifier(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Unreserved_keywordContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ABORT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.ABORT_P, 0);
	}
	public ABSOLUTE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.ABSOLUTE_P, 0);
	}
	public ACCESS(): TerminalNode {
		return this.getToken(PostgreSQLParser.ACCESS, 0);
	}
	public ACTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.ACTION, 0);
	}
	public ADD_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.ADD_P, 0);
	}
	public ADMIN(): TerminalNode {
		return this.getToken(PostgreSQLParser.ADMIN, 0);
	}
	public AFTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.AFTER, 0);
	}
	public AGGREGATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.AGGREGATE, 0);
	}
	public ALSO(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALSO, 0);
	}
	public ALTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALTER, 0);
	}
	public ALWAYS(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALWAYS, 0);
	}
	public ASSERTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.ASSERTION, 0);
	}
	public ASSIGNMENT(): TerminalNode {
		return this.getToken(PostgreSQLParser.ASSIGNMENT, 0);
	}
	public AT(): TerminalNode {
		return this.getToken(PostgreSQLParser.AT, 0);
	}
	public ATTACH(): TerminalNode {
		return this.getToken(PostgreSQLParser.ATTACH, 0);
	}
	public ATTRIBUTE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ATTRIBUTE, 0);
	}
	public BACKWARD(): TerminalNode {
		return this.getToken(PostgreSQLParser.BACKWARD, 0);
	}
	public BEFORE(): TerminalNode {
		return this.getToken(PostgreSQLParser.BEFORE, 0);
	}
	public BEGIN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.BEGIN_P, 0);
	}
	public BY(): TerminalNode {
		return this.getToken(PostgreSQLParser.BY, 0);
	}
	public CACHE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CACHE, 0);
	}
	public CALL(): TerminalNode {
		return this.getToken(PostgreSQLParser.CALL, 0);
	}
	public CALLED(): TerminalNode {
		return this.getToken(PostgreSQLParser.CALLED, 0);
	}
	public CASCADE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CASCADE, 0);
	}
	public CASCADED(): TerminalNode {
		return this.getToken(PostgreSQLParser.CASCADED, 0);
	}
	public CATALOG(): TerminalNode {
		return this.getToken(PostgreSQLParser.CATALOG, 0);
	}
	public CHAIN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CHAIN, 0);
	}
	public CHARACTERISTICS(): TerminalNode {
		return this.getToken(PostgreSQLParser.CHARACTERISTICS, 0);
	}
	public CHECKPOINT(): TerminalNode {
		return this.getToken(PostgreSQLParser.CHECKPOINT, 0);
	}
	public CLASS(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLASS, 0);
	}
	public CLOSE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE, 0);
	}
	public CLUSTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLUSTER, 0);
	}
	public COLUMNS(): TerminalNode {
		return this.getToken(PostgreSQLParser.COLUMNS, 0);
	}
	public COMMENT(): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMENT, 0);
	}
	public COMMENTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMENTS, 0);
	}
	public COMMIT(): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMIT, 0);
	}
	public COMMITTED(): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMITTED, 0);
	}
	public CONFIGURATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONFIGURATION, 0);
	}
	public CONFLICT(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONFLICT, 0);
	}
	public CONNECTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONNECTION, 0);
	}
	public CONSTRAINTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONSTRAINTS, 0);
	}
	public CONTENT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONTENT_P, 0);
	}
	public CONTINUE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONTINUE_P, 0);
	}
	public CONVERSION_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONVERSION_P, 0);
	}
	public COPY(): TerminalNode {
		return this.getToken(PostgreSQLParser.COPY, 0);
	}
	public COST(): TerminalNode {
		return this.getToken(PostgreSQLParser.COST, 0);
	}
	public CSV(): TerminalNode {
		return this.getToken(PostgreSQLParser.CSV, 0);
	}
	public CUBE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CUBE, 0);
	}
	public CURRENT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.CURRENT_P, 0);
	}
	public CURSOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.CURSOR, 0);
	}
	public CYCLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CYCLE, 0);
	}
	public DATA_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DATA_P, 0);
	}
	public DATABASE(): TerminalNode {
		return this.getToken(PostgreSQLParser.DATABASE, 0);
	}
	public DAY_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DAY_P, 0);
	}
	public DEALLOCATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEALLOCATE, 0);
	}
	public DECLARE(): TerminalNode {
		return this.getToken(PostgreSQLParser.DECLARE, 0);
	}
	public DEFAULTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEFAULTS, 0);
	}
	public DEFERRED(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEFERRED, 0);
	}
	public DEFINER(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEFINER, 0);
	}
	public DELETE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DELETE_P, 0);
	}
	public DELIMITER(): TerminalNode {
		return this.getToken(PostgreSQLParser.DELIMITER, 0);
	}
	public DELIMITERS(): TerminalNode {
		return this.getToken(PostgreSQLParser.DELIMITERS, 0);
	}
	public DEPENDS(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEPENDS, 0);
	}
	public DETACH(): TerminalNode {
		return this.getToken(PostgreSQLParser.DETACH, 0);
	}
	public DICTIONARY(): TerminalNode {
		return this.getToken(PostgreSQLParser.DICTIONARY, 0);
	}
	public DISABLE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DISABLE_P, 0);
	}
	public DISCARD(): TerminalNode {
		return this.getToken(PostgreSQLParser.DISCARD, 0);
	}
	public DOCUMENT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DOCUMENT_P, 0);
	}
	public DOMAIN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DOMAIN_P, 0);
	}
	public DOUBLE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DOUBLE_P, 0);
	}
	public DROP(): TerminalNode {
		return this.getToken(PostgreSQLParser.DROP, 0);
	}
	public EACH(): TerminalNode {
		return this.getToken(PostgreSQLParser.EACH, 0);
	}
	public ENABLE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.ENABLE_P, 0);
	}
	public ENCODING(): TerminalNode {
		return this.getToken(PostgreSQLParser.ENCODING, 0);
	}
	public ENCRYPTED(): TerminalNode {
		return this.getToken(PostgreSQLParser.ENCRYPTED, 0);
	}
	public ENUM_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.ENUM_P, 0);
	}
	public ESCAPE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ESCAPE, 0);
	}
	public EVENT(): TerminalNode {
		return this.getToken(PostgreSQLParser.EVENT, 0);
	}
	public EXCLUDE(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXCLUDE, 0);
	}
	public EXCLUDING(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXCLUDING, 0);
	}
	public EXCLUSIVE(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXCLUSIVE, 0);
	}
	public EXECUTE(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXECUTE, 0);
	}
	public EXPLAIN(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXPLAIN, 0);
	}
	public EXPRESSION(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXPRESSION, 0);
	}
	public EXTENSION(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXTENSION, 0);
	}
	public EXTERNAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXTERNAL, 0);
	}
	public FAMILY(): TerminalNode {
		return this.getToken(PostgreSQLParser.FAMILY, 0);
	}
	public FILTER(): TerminalNode {
		return this.getToken(PostgreSQLParser.FILTER, 0);
	}
	public FIRST_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.FIRST_P, 0);
	}
	public FOLLOWING(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOLLOWING, 0);
	}
	public FORCE(): TerminalNode {
		return this.getToken(PostgreSQLParser.FORCE, 0);
	}
	public FORWARD(): TerminalNode {
		return this.getToken(PostgreSQLParser.FORWARD, 0);
	}
	public FUNCTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.FUNCTION, 0);
	}
	public FUNCTIONS(): TerminalNode {
		return this.getToken(PostgreSQLParser.FUNCTIONS, 0);
	}
	public GENERATED(): TerminalNode {
		return this.getToken(PostgreSQLParser.GENERATED, 0);
	}
	public GLOBAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.GLOBAL, 0);
	}
	public GRANTED(): TerminalNode {
		return this.getToken(PostgreSQLParser.GRANTED, 0);
	}
	public GROUPS(): TerminalNode {
		return this.getToken(PostgreSQLParser.GROUPS, 0);
	}
	public HANDLER(): TerminalNode {
		return this.getToken(PostgreSQLParser.HANDLER, 0);
	}
	public HEADER_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.HEADER_P, 0);
	}
	public HOLD(): TerminalNode {
		return this.getToken(PostgreSQLParser.HOLD, 0);
	}
	public HOUR_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.HOUR_P, 0);
	}
	public IDENTITY_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IDENTITY_P, 0);
	}
	public IF_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, 0);
	}
	public IMMEDIATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.IMMEDIATE, 0);
	}
	public IMMUTABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.IMMUTABLE, 0);
	}
	public IMPLICIT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IMPLICIT_P, 0);
	}
	public IMPORT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IMPORT_P, 0);
	}
	public INCLUDE(): TerminalNode {
		return this.getToken(PostgreSQLParser.INCLUDE, 0);
	}
	public INCLUDING(): TerminalNode {
		return this.getToken(PostgreSQLParser.INCLUDING, 0);
	}
	public INCREMENT(): TerminalNode {
		return this.getToken(PostgreSQLParser.INCREMENT, 0);
	}
	public INDEX(): TerminalNode {
		return this.getToken(PostgreSQLParser.INDEX, 0);
	}
	public INDEXES(): TerminalNode {
		return this.getToken(PostgreSQLParser.INDEXES, 0);
	}
	public INHERIT(): TerminalNode {
		return this.getToken(PostgreSQLParser.INHERIT, 0);
	}
	public INHERITS(): TerminalNode {
		return this.getToken(PostgreSQLParser.INHERITS, 0);
	}
	public INLINE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.INLINE_P, 0);
	}
	public INPUT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.INPUT_P, 0);
	}
	public INSENSITIVE(): TerminalNode {
		return this.getToken(PostgreSQLParser.INSENSITIVE, 0);
	}
	public INSERT(): TerminalNode {
		return this.getToken(PostgreSQLParser.INSERT, 0);
	}
	public INSTEAD(): TerminalNode {
		return this.getToken(PostgreSQLParser.INSTEAD, 0);
	}
	public INVOKER(): TerminalNode {
		return this.getToken(PostgreSQLParser.INVOKER, 0);
	}
	public ISOLATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.ISOLATION, 0);
	}
	public KEY(): TerminalNode {
		return this.getToken(PostgreSQLParser.KEY, 0);
	}
	public LABEL(): TerminalNode {
		return this.getToken(PostgreSQLParser.LABEL, 0);
	}
	public LANGUAGE(): TerminalNode {
		return this.getToken(PostgreSQLParser.LANGUAGE, 0);
	}
	public LARGE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.LARGE_P, 0);
	}
	public LAST_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.LAST_P, 0);
	}
	public LEAKPROOF(): TerminalNode {
		return this.getToken(PostgreSQLParser.LEAKPROOF, 0);
	}
	public LEVEL(): TerminalNode {
		return this.getToken(PostgreSQLParser.LEVEL, 0);
	}
	public LISTEN(): TerminalNode {
		return this.getToken(PostgreSQLParser.LISTEN, 0);
	}
	public LOAD(): TerminalNode {
		return this.getToken(PostgreSQLParser.LOAD, 0);
	}
	public LOCAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.LOCAL, 0);
	}
	public LOCATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.LOCATION, 0);
	}
	public LOCK_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.LOCK_P, 0);
	}
	public LOCKED(): TerminalNode {
		return this.getToken(PostgreSQLParser.LOCKED, 0);
	}
	public LOGGED(): TerminalNode {
		return this.getToken(PostgreSQLParser.LOGGED, 0);
	}
	public MAPPING(): TerminalNode {
		return this.getToken(PostgreSQLParser.MAPPING, 0);
	}
	public MATCH(): TerminalNode {
		return this.getToken(PostgreSQLParser.MATCH, 0);
	}
	public MATERIALIZED(): TerminalNode {
		return this.getToken(PostgreSQLParser.MATERIALIZED, 0);
	}
	public MAXVALUE(): TerminalNode {
		return this.getToken(PostgreSQLParser.MAXVALUE, 0);
	}
	public METHOD(): TerminalNode {
		return this.getToken(PostgreSQLParser.METHOD, 0);
	}
	public MINUTE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.MINUTE_P, 0);
	}
	public MINVALUE(): TerminalNode {
		return this.getToken(PostgreSQLParser.MINVALUE, 0);
	}
	public MODE(): TerminalNode {
		return this.getToken(PostgreSQLParser.MODE, 0);
	}
	public MONTH_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.MONTH_P, 0);
	}
	public MOVE(): TerminalNode {
		return this.getToken(PostgreSQLParser.MOVE, 0);
	}
	public NAME_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.NAME_P, 0);
	}
	public NAMES(): TerminalNode {
		return this.getToken(PostgreSQLParser.NAMES, 0);
	}
	public NEW(): TerminalNode {
		return this.getToken(PostgreSQLParser.NEW, 0);
	}
	public NEXT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NEXT, 0);
	}
	public NFC(): TerminalNode {
		return this.getToken(PostgreSQLParser.NFC, 0);
	}
	public NFD(): TerminalNode {
		return this.getToken(PostgreSQLParser.NFD, 0);
	}
	public NFKC(): TerminalNode {
		return this.getToken(PostgreSQLParser.NFKC, 0);
	}
	public NFKD(): TerminalNode {
		return this.getToken(PostgreSQLParser.NFKD, 0);
	}
	public NO(): TerminalNode {
		return this.getToken(PostgreSQLParser.NO, 0);
	}
	public NORMALIZED(): TerminalNode {
		return this.getToken(PostgreSQLParser.NORMALIZED, 0);
	}
	public NOTHING(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOTHING, 0);
	}
	public NOTIFY(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOTIFY, 0);
	}
	public NOWAIT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOWAIT, 0);
	}
	public NULLS_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.NULLS_P, 0);
	}
	public OBJECT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.OBJECT_P, 0);
	}
	public OF(): TerminalNode {
		return this.getToken(PostgreSQLParser.OF, 0);
	}
	public OFF(): TerminalNode {
		return this.getToken(PostgreSQLParser.OFF, 0);
	}
	public OIDS(): TerminalNode {
		return this.getToken(PostgreSQLParser.OIDS, 0);
	}
	public OLD(): TerminalNode {
		return this.getToken(PostgreSQLParser.OLD, 0);
	}
	public OPERATOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPERATOR, 0);
	}
	public OPTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPTION, 0);
	}
	public OPTIONS(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPTIONS, 0);
	}
	public ORDINALITY(): TerminalNode {
		return this.getToken(PostgreSQLParser.ORDINALITY, 0);
	}
	public OTHERS(): TerminalNode {
		return this.getToken(PostgreSQLParser.OTHERS, 0);
	}
	public OVER(): TerminalNode {
		return this.getToken(PostgreSQLParser.OVER, 0);
	}
	public OVERRIDING(): TerminalNode {
		return this.getToken(PostgreSQLParser.OVERRIDING, 0);
	}
	public OWNED(): TerminalNode {
		return this.getToken(PostgreSQLParser.OWNED, 0);
	}
	public OWNER(): TerminalNode {
		return this.getToken(PostgreSQLParser.OWNER, 0);
	}
	public PARALLEL(): TerminalNode {
		return this.getToken(PostgreSQLParser.PARALLEL, 0);
	}
	public PARSER(): TerminalNode {
		return this.getToken(PostgreSQLParser.PARSER, 0);
	}
	public PARTIAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.PARTIAL, 0);
	}
	public PARTITION(): TerminalNode {
		return this.getToken(PostgreSQLParser.PARTITION, 0);
	}
	public PASSING(): TerminalNode {
		return this.getToken(PostgreSQLParser.PASSING, 0);
	}
	public PASSWORD(): TerminalNode {
		return this.getToken(PostgreSQLParser.PASSWORD, 0);
	}
	public PLANS(): TerminalNode {
		return this.getToken(PostgreSQLParser.PLANS, 0);
	}
	public POLICY(): TerminalNode {
		return this.getToken(PostgreSQLParser.POLICY, 0);
	}
	public PRECEDING(): TerminalNode {
		return this.getToken(PostgreSQLParser.PRECEDING, 0);
	}
	public PREPARE(): TerminalNode {
		return this.getToken(PostgreSQLParser.PREPARE, 0);
	}
	public PREPARED(): TerminalNode {
		return this.getToken(PostgreSQLParser.PREPARED, 0);
	}
	public PRESERVE(): TerminalNode {
		return this.getToken(PostgreSQLParser.PRESERVE, 0);
	}
	public PRIOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.PRIOR, 0);
	}
	public PRIVILEGES(): TerminalNode {
		return this.getToken(PostgreSQLParser.PRIVILEGES, 0);
	}
	public PROCEDURAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.PROCEDURAL, 0);
	}
	public PROCEDURE(): TerminalNode {
		return this.getToken(PostgreSQLParser.PROCEDURE, 0);
	}
	public PROCEDURES(): TerminalNode {
		return this.getToken(PostgreSQLParser.PROCEDURES, 0);
	}
	public PROGRAM(): TerminalNode {
		return this.getToken(PostgreSQLParser.PROGRAM, 0);
	}
	public PUBLICATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.PUBLICATION, 0);
	}
	public QUOTE(): TerminalNode {
		return this.getToken(PostgreSQLParser.QUOTE, 0);
	}
	public RANGE(): TerminalNode {
		return this.getToken(PostgreSQLParser.RANGE, 0);
	}
	public READ(): TerminalNode {
		return this.getToken(PostgreSQLParser.READ, 0);
	}
	public REASSIGN(): TerminalNode {
		return this.getToken(PostgreSQLParser.REASSIGN, 0);
	}
	public RECHECK(): TerminalNode {
		return this.getToken(PostgreSQLParser.RECHECK, 0);
	}
	public RECURSIVE(): TerminalNode {
		return this.getToken(PostgreSQLParser.RECURSIVE, 0);
	}
	public REF(): TerminalNode {
		return this.getToken(PostgreSQLParser.REF, 0);
	}
	public REFERENCING(): TerminalNode {
		return this.getToken(PostgreSQLParser.REFERENCING, 0);
	}
	public REFRESH(): TerminalNode {
		return this.getToken(PostgreSQLParser.REFRESH, 0);
	}
	public REINDEX(): TerminalNode {
		return this.getToken(PostgreSQLParser.REINDEX, 0);
	}
	public RELATIVE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.RELATIVE_P, 0);
	}
	public RELEASE(): TerminalNode {
		return this.getToken(PostgreSQLParser.RELEASE, 0);
	}
	public RENAME(): TerminalNode {
		return this.getToken(PostgreSQLParser.RENAME, 0);
	}
	public REPEATABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.REPEATABLE, 0);
	}
	public REPLACE(): TerminalNode {
		return this.getToken(PostgreSQLParser.REPLACE, 0);
	}
	public REPLICA(): TerminalNode {
		return this.getToken(PostgreSQLParser.REPLICA, 0);
	}
	public RESET(): TerminalNode {
		return this.getToken(PostgreSQLParser.RESET, 0);
	}
	public RESTART(): TerminalNode {
		return this.getToken(PostgreSQLParser.RESTART, 0);
	}
	public RESTRICT(): TerminalNode {
		return this.getToken(PostgreSQLParser.RESTRICT, 0);
	}
	public RETURNS(): TerminalNode {
		return this.getToken(PostgreSQLParser.RETURNS, 0);
	}
	public REVOKE(): TerminalNode {
		return this.getToken(PostgreSQLParser.REVOKE, 0);
	}
	public ROLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROLE, 0);
	}
	public ROLLBACK(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROLLBACK, 0);
	}
	public ROLLUP(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROLLUP, 0);
	}
	public ROUTINE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROUTINE, 0);
	}
	public ROUTINES(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROUTINES, 0);
	}
	public ROWS(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROWS, 0);
	}
	public RULE(): TerminalNode {
		return this.getToken(PostgreSQLParser.RULE, 0);
	}
	public SAVEPOINT(): TerminalNode {
		return this.getToken(PostgreSQLParser.SAVEPOINT, 0);
	}
	public SCHEMA(): TerminalNode {
		return this.getToken(PostgreSQLParser.SCHEMA, 0);
	}
	public SCHEMAS(): TerminalNode {
		return this.getToken(PostgreSQLParser.SCHEMAS, 0);
	}
	public SCROLL(): TerminalNode {
		return this.getToken(PostgreSQLParser.SCROLL, 0);
	}
	public SEARCH(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEARCH, 0);
	}
	public SECOND_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.SECOND_P, 0);
	}
	public SECURITY(): TerminalNode {
		return this.getToken(PostgreSQLParser.SECURITY, 0);
	}
	public SEQUENCE(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEQUENCE, 0);
	}
	public SEQUENCES(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEQUENCES, 0);
	}
	public SERIALIZABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.SERIALIZABLE, 0);
	}
	public SERVER(): TerminalNode {
		return this.getToken(PostgreSQLParser.SERVER, 0);
	}
	public SESSION(): TerminalNode {
		return this.getToken(PostgreSQLParser.SESSION, 0);
	}
	public SET(): TerminalNode {
		return this.getToken(PostgreSQLParser.SET, 0);
	}
	public SETS(): TerminalNode {
		return this.getToken(PostgreSQLParser.SETS, 0);
	}
	public SHARE(): TerminalNode {
		return this.getToken(PostgreSQLParser.SHARE, 0);
	}
	public SHOW(): TerminalNode {
		return this.getToken(PostgreSQLParser.SHOW, 0);
	}
	public SIMPLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.SIMPLE, 0);
	}
	public SKIP_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.SKIP_P, 0);
	}
	public SNAPSHOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.SNAPSHOT, 0);
	}
	public SQL_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.SQL_P, 0);
	}
	public STABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.STABLE, 0);
	}
	public STANDALONE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.STANDALONE_P, 0);
	}
	public START(): TerminalNode {
		return this.getToken(PostgreSQLParser.START, 0);
	}
	public STATEMENT(): TerminalNode {
		return this.getToken(PostgreSQLParser.STATEMENT, 0);
	}
	public STATISTICS(): TerminalNode {
		return this.getToken(PostgreSQLParser.STATISTICS, 0);
	}
	public STDIN(): TerminalNode {
		return this.getToken(PostgreSQLParser.STDIN, 0);
	}
	public STDOUT(): TerminalNode {
		return this.getToken(PostgreSQLParser.STDOUT, 0);
	}
	public STORAGE(): TerminalNode {
		return this.getToken(PostgreSQLParser.STORAGE, 0);
	}
	public STORED(): TerminalNode {
		return this.getToken(PostgreSQLParser.STORED, 0);
	}
	public STRICT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.STRICT_P, 0);
	}
	public STRIP_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.STRIP_P, 0);
	}
	public SUBSCRIPTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.SUBSCRIPTION, 0);
	}
	public SUPPORT(): TerminalNode {
		return this.getToken(PostgreSQLParser.SUPPORT, 0);
	}
	public SYSID(): TerminalNode {
		return this.getToken(PostgreSQLParser.SYSID, 0);
	}
	public SYSTEM_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.SYSTEM_P, 0);
	}
	public TABLES(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLES, 0);
	}
	public TABLESPACE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLESPACE, 0);
	}
	public TEMP(): TerminalNode {
		return this.getToken(PostgreSQLParser.TEMP, 0);
	}
	public TEMPLATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TEMPLATE, 0);
	}
	public TEMPORARY(): TerminalNode {
		return this.getToken(PostgreSQLParser.TEMPORARY, 0);
	}
	public TEXT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TEXT_P, 0);
	}
	public TIES(): TerminalNode {
		return this.getToken(PostgreSQLParser.TIES, 0);
	}
	public TRANSACTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRANSACTION, 0);
	}
	public TRANSFORM(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRANSFORM, 0);
	}
	public TRIGGER(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRIGGER, 0);
	}
	public TRUNCATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRUNCATE, 0);
	}
	public TRUSTED(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRUSTED, 0);
	}
	public TYPE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TYPE_P, 0);
	}
	public TYPES_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TYPES_P, 0);
	}
	public UESCAPE(): TerminalNode {
		return this.getToken(PostgreSQLParser.UESCAPE, 0);
	}
	public UNBOUNDED(): TerminalNode {
		return this.getToken(PostgreSQLParser.UNBOUNDED, 0);
	}
	public UNCOMMITTED(): TerminalNode {
		return this.getToken(PostgreSQLParser.UNCOMMITTED, 0);
	}
	public UNENCRYPTED(): TerminalNode {
		return this.getToken(PostgreSQLParser.UNENCRYPTED, 0);
	}
	public UNKNOWN(): TerminalNode {
		return this.getToken(PostgreSQLParser.UNKNOWN, 0);
	}
	public UNLISTEN(): TerminalNode {
		return this.getToken(PostgreSQLParser.UNLISTEN, 0);
	}
	public UNLOGGED(): TerminalNode {
		return this.getToken(PostgreSQLParser.UNLOGGED, 0);
	}
	public UNTIL(): TerminalNode {
		return this.getToken(PostgreSQLParser.UNTIL, 0);
	}
	public UPDATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.UPDATE, 0);
	}
	public VACUUM(): TerminalNode {
		return this.getToken(PostgreSQLParser.VACUUM, 0);
	}
	public VALID(): TerminalNode {
		return this.getToken(PostgreSQLParser.VALID, 0);
	}
	public VALIDATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.VALIDATE, 0);
	}
	public VALIDATOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.VALIDATOR, 0);
	}
	public VALUE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.VALUE_P, 0);
	}
	public VARYING(): TerminalNode {
		return this.getToken(PostgreSQLParser.VARYING, 0);
	}
	public VERSION_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.VERSION_P, 0);
	}
	public VIEW(): TerminalNode {
		return this.getToken(PostgreSQLParser.VIEW, 0);
	}
	public VIEWS(): TerminalNode {
		return this.getToken(PostgreSQLParser.VIEWS, 0);
	}
	public VOLATILE(): TerminalNode {
		return this.getToken(PostgreSQLParser.VOLATILE, 0);
	}
	public WHITESPACE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.WHITESPACE_P, 0);
	}
	public WITHIN(): TerminalNode {
		return this.getToken(PostgreSQLParser.WITHIN, 0);
	}
	public WITHOUT(): TerminalNode {
		return this.getToken(PostgreSQLParser.WITHOUT, 0);
	}
	public WORK(): TerminalNode {
		return this.getToken(PostgreSQLParser.WORK, 0);
	}
	public WRAPPER(): TerminalNode {
		return this.getToken(PostgreSQLParser.WRAPPER, 0);
	}
	public WRITE(): TerminalNode {
		return this.getToken(PostgreSQLParser.WRITE, 0);
	}
	public XML_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.XML_P, 0);
	}
	public YEAR_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.YEAR_P, 0);
	}
	public YES_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.YES_P, 0);
	}
	public ZONE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ZONE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_unreserved_keyword;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterUnreserved_keyword) {
	 		listener.enterUnreserved_keyword(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitUnreserved_keyword) {
	 		listener.exitUnreserved_keyword(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitUnreserved_keyword) {
			return visitor.visitUnreserved_keyword(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Col_name_keywordContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public BETWEEN(): TerminalNode {
		return this.getToken(PostgreSQLParser.BETWEEN, 0);
	}
	public BIGINT(): TerminalNode {
		return this.getToken(PostgreSQLParser.BIGINT, 0);
	}
	public bit(): BitContext {
		return this.getTypedRuleContext(BitContext, 0) as BitContext;
	}
	public BOOLEAN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.BOOLEAN_P, 0);
	}
	public CHAR_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.CHAR_P, 0);
	}
	public character(): CharacterContext {
		return this.getTypedRuleContext(CharacterContext, 0) as CharacterContext;
	}
	public COALESCE(): TerminalNode {
		return this.getToken(PostgreSQLParser.COALESCE, 0);
	}
	public DEC(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEC, 0);
	}
	public DECIMAL_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.DECIMAL_P, 0);
	}
	public EXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXISTS, 0);
	}
	public EXTRACT(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXTRACT, 0);
	}
	public FLOAT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.FLOAT_P, 0);
	}
	public GREATEST(): TerminalNode {
		return this.getToken(PostgreSQLParser.GREATEST, 0);
	}
	public GROUPING(): TerminalNode {
		return this.getToken(PostgreSQLParser.GROUPING, 0);
	}
	public INOUT(): TerminalNode {
		return this.getToken(PostgreSQLParser.INOUT, 0);
	}
	public INT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.INT_P, 0);
	}
	public INTEGER(): TerminalNode {
		return this.getToken(PostgreSQLParser.INTEGER, 0);
	}
	public INTERVAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.INTERVAL, 0);
	}
	public LEAST(): TerminalNode {
		return this.getToken(PostgreSQLParser.LEAST, 0);
	}
	public NATIONAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.NATIONAL, 0);
	}
	public NCHAR(): TerminalNode {
		return this.getToken(PostgreSQLParser.NCHAR, 0);
	}
	public NONE(): TerminalNode {
		return this.getToken(PostgreSQLParser.NONE, 0);
	}
	public NORMALIZE(): TerminalNode {
		return this.getToken(PostgreSQLParser.NORMALIZE, 0);
	}
	public NULLIF(): TerminalNode {
		return this.getToken(PostgreSQLParser.NULLIF, 0);
	}
	public numeric(): NumericContext {
		return this.getTypedRuleContext(NumericContext, 0) as NumericContext;
	}
	public OUT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.OUT_P, 0);
	}
	public OVERLAY(): TerminalNode {
		return this.getToken(PostgreSQLParser.OVERLAY, 0);
	}
	public POSITION(): TerminalNode {
		return this.getToken(PostgreSQLParser.POSITION, 0);
	}
	public PRECISION(): TerminalNode {
		return this.getToken(PostgreSQLParser.PRECISION, 0);
	}
	public REAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.REAL, 0);
	}
	public ROW(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROW, 0);
	}
	public SETOF(): TerminalNode {
		return this.getToken(PostgreSQLParser.SETOF, 0);
	}
	public SMALLINT(): TerminalNode {
		return this.getToken(PostgreSQLParser.SMALLINT, 0);
	}
	public SUBSTRING(): TerminalNode {
		return this.getToken(PostgreSQLParser.SUBSTRING, 0);
	}
	public TIME(): TerminalNode {
		return this.getToken(PostgreSQLParser.TIME, 0);
	}
	public TIMESTAMP(): TerminalNode {
		return this.getToken(PostgreSQLParser.TIMESTAMP, 0);
	}
	public TREAT(): TerminalNode {
		return this.getToken(PostgreSQLParser.TREAT, 0);
	}
	public TRIM(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRIM, 0);
	}
	public VALUES(): TerminalNode {
		return this.getToken(PostgreSQLParser.VALUES, 0);
	}
	public VARCHAR(): TerminalNode {
		return this.getToken(PostgreSQLParser.VARCHAR, 0);
	}
	public XMLATTRIBUTES(): TerminalNode {
		return this.getToken(PostgreSQLParser.XMLATTRIBUTES, 0);
	}
	public XMLCONCAT(): TerminalNode {
		return this.getToken(PostgreSQLParser.XMLCONCAT, 0);
	}
	public XMLELEMENT(): TerminalNode {
		return this.getToken(PostgreSQLParser.XMLELEMENT, 0);
	}
	public XMLEXISTS(): TerminalNode {
		return this.getToken(PostgreSQLParser.XMLEXISTS, 0);
	}
	public XMLFOREST(): TerminalNode {
		return this.getToken(PostgreSQLParser.XMLFOREST, 0);
	}
	public XMLNAMESPACES(): TerminalNode {
		return this.getToken(PostgreSQLParser.XMLNAMESPACES, 0);
	}
	public XMLPARSE(): TerminalNode {
		return this.getToken(PostgreSQLParser.XMLPARSE, 0);
	}
	public XMLPI(): TerminalNode {
		return this.getToken(PostgreSQLParser.XMLPI, 0);
	}
	public XMLROOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.XMLROOT, 0);
	}
	public XMLSERIALIZE(): TerminalNode {
		return this.getToken(PostgreSQLParser.XMLSERIALIZE, 0);
	}
	public XMLTABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.XMLTABLE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_col_name_keyword;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCol_name_keyword) {
	 		listener.enterCol_name_keyword(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCol_name_keyword) {
	 		listener.exitCol_name_keyword(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCol_name_keyword) {
			return visitor.visitCol_name_keyword(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Type_func_name_keywordContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public AUTHORIZATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.AUTHORIZATION, 0);
	}
	public BINARY(): TerminalNode {
		return this.getToken(PostgreSQLParser.BINARY, 0);
	}
	public COLLATION(): TerminalNode {
		return this.getToken(PostgreSQLParser.COLLATION, 0);
	}
	public CONCURRENTLY(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONCURRENTLY, 0);
	}
	public CROSS(): TerminalNode {
		return this.getToken(PostgreSQLParser.CROSS, 0);
	}
	public CURRENT_SCHEMA(): TerminalNode {
		return this.getToken(PostgreSQLParser.CURRENT_SCHEMA, 0);
	}
	public FREEZE(): TerminalNode {
		return this.getToken(PostgreSQLParser.FREEZE, 0);
	}
	public FULL(): TerminalNode {
		return this.getToken(PostgreSQLParser.FULL, 0);
	}
	public ILIKE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ILIKE, 0);
	}
	public INNER_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.INNER_P, 0);
	}
	public IS(): TerminalNode {
		return this.getToken(PostgreSQLParser.IS, 0);
	}
	public ISNULL(): TerminalNode {
		return this.getToken(PostgreSQLParser.ISNULL, 0);
	}
	public JOIN(): TerminalNode {
		return this.getToken(PostgreSQLParser.JOIN, 0);
	}
	public LEFT(): TerminalNode {
		return this.getToken(PostgreSQLParser.LEFT, 0);
	}
	public LIKE(): TerminalNode {
		return this.getToken(PostgreSQLParser.LIKE, 0);
	}
	public NATURAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.NATURAL, 0);
	}
	public NOTNULL(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOTNULL, 0);
	}
	public OUTER_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.OUTER_P, 0);
	}
	public OVERLAPS(): TerminalNode {
		return this.getToken(PostgreSQLParser.OVERLAPS, 0);
	}
	public RIGHT(): TerminalNode {
		return this.getToken(PostgreSQLParser.RIGHT, 0);
	}
	public SIMILAR(): TerminalNode {
		return this.getToken(PostgreSQLParser.SIMILAR, 0);
	}
	public TABLESAMPLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLESAMPLE, 0);
	}
	public VERBOSE(): TerminalNode {
		return this.getToken(PostgreSQLParser.VERBOSE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_type_func_name_keyword;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterType_func_name_keyword) {
	 		listener.enterType_func_name_keyword(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitType_func_name_keyword) {
	 		listener.exitType_func_name_keyword(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitType_func_name_keyword) {
			return visitor.visitType_func_name_keyword(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Reserved_keywordContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ALL(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALL, 0);
	}
	public ANALYSE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ANALYSE, 0);
	}
	public ANALYZE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ANALYZE, 0);
	}
	public AND(): TerminalNode {
		return this.getToken(PostgreSQLParser.AND, 0);
	}
	public ANY(): TerminalNode {
		return this.getToken(PostgreSQLParser.ANY, 0);
	}
	public ARRAY(): TerminalNode {
		return this.getToken(PostgreSQLParser.ARRAY, 0);
	}
	public AS(): TerminalNode {
		return this.getToken(PostgreSQLParser.AS, 0);
	}
	public ASC(): TerminalNode {
		return this.getToken(PostgreSQLParser.ASC, 0);
	}
	public ASYMMETRIC(): TerminalNode {
		return this.getToken(PostgreSQLParser.ASYMMETRIC, 0);
	}
	public BOTH(): TerminalNode {
		return this.getToken(PostgreSQLParser.BOTH, 0);
	}
	public CASE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CASE, 0);
	}
	public CAST(): TerminalNode {
		return this.getToken(PostgreSQLParser.CAST, 0);
	}
	public CHECK(): TerminalNode {
		return this.getToken(PostgreSQLParser.CHECK, 0);
	}
	public COLLATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.COLLATE, 0);
	}
	public COLUMN(): TerminalNode {
		return this.getToken(PostgreSQLParser.COLUMN, 0);
	}
	public CONSTRAINT(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONSTRAINT, 0);
	}
	public CREATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CREATE, 0);
	}
	public CURRENT_CATALOG(): TerminalNode {
		return this.getToken(PostgreSQLParser.CURRENT_CATALOG, 0);
	}
	public CURRENT_DATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CURRENT_DATE, 0);
	}
	public CURRENT_ROLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CURRENT_ROLE, 0);
	}
	public CURRENT_TIME(): TerminalNode {
		return this.getToken(PostgreSQLParser.CURRENT_TIME, 0);
	}
	public CURRENT_TIMESTAMP(): TerminalNode {
		return this.getToken(PostgreSQLParser.CURRENT_TIMESTAMP, 0);
	}
	public CURRENT_USER(): TerminalNode {
		return this.getToken(PostgreSQLParser.CURRENT_USER, 0);
	}
	public DEFERRABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEFERRABLE, 0);
	}
	public DESC(): TerminalNode {
		return this.getToken(PostgreSQLParser.DESC, 0);
	}
	public DISTINCT(): TerminalNode {
		return this.getToken(PostgreSQLParser.DISTINCT, 0);
	}
	public DO(): TerminalNode {
		return this.getToken(PostgreSQLParser.DO, 0);
	}
	public ELSE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ELSE, 0);
	}
	public END_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.END_P, 0);
	}
	public EXCEPT(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXCEPT, 0);
	}
	public FALSE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.FALSE_P, 0);
	}
	public FETCH(): TerminalNode {
		return this.getToken(PostgreSQLParser.FETCH, 0);
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
	public FOREIGN(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOREIGN, 0);
	}
	public FROM(): TerminalNode {
		return this.getToken(PostgreSQLParser.FROM, 0);
	}
	public GRANT(): TerminalNode {
		return this.getToken(PostgreSQLParser.GRANT, 0);
	}
	public GROUP_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.GROUP_P, 0);
	}
	public HAVING(): TerminalNode {
		return this.getToken(PostgreSQLParser.HAVING, 0);
	}
	public IN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IN_P, 0);
	}
	public INITIALLY(): TerminalNode {
		return this.getToken(PostgreSQLParser.INITIALLY, 0);
	}
	public INTERSECT(): TerminalNode {
		return this.getToken(PostgreSQLParser.INTERSECT, 0);
	}
	public LATERAL_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.LATERAL_P, 0);
	}
	public LEADING(): TerminalNode {
		return this.getToken(PostgreSQLParser.LEADING, 0);
	}
	public LIMIT(): TerminalNode {
		return this.getToken(PostgreSQLParser.LIMIT, 0);
	}
	public LOCALTIME(): TerminalNode {
		return this.getToken(PostgreSQLParser.LOCALTIME, 0);
	}
	public LOCALTIMESTAMP(): TerminalNode {
		return this.getToken(PostgreSQLParser.LOCALTIMESTAMP, 0);
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
	public NULL_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.NULL_P, 0);
	}
	public OFFSET(): TerminalNode {
		return this.getToken(PostgreSQLParser.OFFSET, 0);
	}
	public ON(): TerminalNode {
		return this.getToken(PostgreSQLParser.ON, 0);
	}
	public ONLY(): TerminalNode {
		return this.getToken(PostgreSQLParser.ONLY, 0);
	}
	public OR(): TerminalNode {
		return this.getToken(PostgreSQLParser.OR, 0);
	}
	public ORDER(): TerminalNode {
		return this.getToken(PostgreSQLParser.ORDER, 0);
	}
	public PLACING(): TerminalNode {
		return this.getToken(PostgreSQLParser.PLACING, 0);
	}
	public PRIMARY(): TerminalNode {
		return this.getToken(PostgreSQLParser.PRIMARY, 0);
	}
	public REFERENCES(): TerminalNode {
		return this.getToken(PostgreSQLParser.REFERENCES, 0);
	}
	public RETURNING(): TerminalNode {
		return this.getToken(PostgreSQLParser.RETURNING, 0);
	}
	public SELECT(): TerminalNode {
		return this.getToken(PostgreSQLParser.SELECT, 0);
	}
	public SESSION_USER(): TerminalNode {
		return this.getToken(PostgreSQLParser.SESSION_USER, 0);
	}
	public SOME(): TerminalNode {
		return this.getToken(PostgreSQLParser.SOME, 0);
	}
	public SYMMETRIC(): TerminalNode {
		return this.getToken(PostgreSQLParser.SYMMETRIC, 0);
	}
	public TABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLE, 0);
	}
	public THEN(): TerminalNode {
		return this.getToken(PostgreSQLParser.THEN, 0);
	}
	public TO(): TerminalNode {
		return this.getToken(PostgreSQLParser.TO, 0);
	}
	public TRAILING(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRAILING, 0);
	}
	public TRUE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TRUE_P, 0);
	}
	public UNION(): TerminalNode {
		return this.getToken(PostgreSQLParser.UNION, 0);
	}
	public UNIQUE(): TerminalNode {
		return this.getToken(PostgreSQLParser.UNIQUE, 0);
	}
	public USER(): TerminalNode {
		return this.getToken(PostgreSQLParser.USER, 0);
	}
	public USING(): TerminalNode {
		return this.getToken(PostgreSQLParser.USING, 0);
	}
	public VARIADIC(): TerminalNode {
		return this.getToken(PostgreSQLParser.VARIADIC, 0);
	}
	public WHEN(): TerminalNode {
		return this.getToken(PostgreSQLParser.WHEN, 0);
	}
	public WHERE(): TerminalNode {
		return this.getToken(PostgreSQLParser.WHERE, 0);
	}
	public WINDOW(): TerminalNode {
		return this.getToken(PostgreSQLParser.WINDOW, 0);
	}
	public WITH(): TerminalNode {
		return this.getToken(PostgreSQLParser.WITH, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_reserved_keyword;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterReserved_keyword) {
	 		listener.enterReserved_keyword(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitReserved_keyword) {
	 		listener.exitReserved_keyword(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitReserved_keyword) {
			return visitor.visitReserved_keyword(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Pl_functionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public comp_options(): Comp_optionsContext {
		return this.getTypedRuleContext(Comp_optionsContext, 0) as Comp_optionsContext;
	}
	public pl_block(): Pl_blockContext {
		return this.getTypedRuleContext(Pl_blockContext, 0) as Pl_blockContext;
	}
	public opt_semi(): Opt_semiContext {
		return this.getTypedRuleContext(Opt_semiContext, 0) as Opt_semiContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_pl_function;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterPl_function) {
	 		listener.enterPl_function(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitPl_function) {
	 		listener.exitPl_function(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitPl_function) {
			return visitor.visitPl_function(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Comp_optionsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public comp_option_list(): Comp_optionContext[] {
		return this.getTypedRuleContexts(Comp_optionContext) as Comp_optionContext[];
	}
	public comp_option(i: number): Comp_optionContext {
		return this.getTypedRuleContext(Comp_optionContext, i) as Comp_optionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_comp_options;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterComp_options) {
	 		listener.enterComp_options(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitComp_options) {
	 		listener.exitComp_options(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitComp_options) {
			return visitor.visitComp_options(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Comp_optionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public sharp(): SharpContext {
		return this.getTypedRuleContext(SharpContext, 0) as SharpContext;
	}
	public OPTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPTION, 0);
	}
	public DUMP(): TerminalNode {
		return this.getToken(PostgreSQLParser.DUMP, 0);
	}
	public PRINT_STRICT_PARAMS(): TerminalNode {
		return this.getToken(PostgreSQLParser.PRINT_STRICT_PARAMS, 0);
	}
	public option_value(): Option_valueContext {
		return this.getTypedRuleContext(Option_valueContext, 0) as Option_valueContext;
	}
	public VARIABLE_CONFLICT(): TerminalNode {
		return this.getToken(PostgreSQLParser.VARIABLE_CONFLICT, 0);
	}
	public ERROR(): TerminalNode {
		return this.getToken(PostgreSQLParser.ERROR, 0);
	}
	public USE_VARIABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.USE_VARIABLE, 0);
	}
	public USE_COLUMN(): TerminalNode {
		return this.getToken(PostgreSQLParser.USE_COLUMN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_comp_option;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterComp_option) {
	 		listener.enterComp_option(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitComp_option) {
	 		listener.exitComp_option(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitComp_option) {
			return visitor.visitComp_option(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class SharpContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public Operator(): TerminalNode {
		return this.getToken(PostgreSQLParser.Operator, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_sharp;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSharp) {
	 		listener.enterSharp(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSharp) {
	 		listener.exitSharp(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSharp) {
			return visitor.visitSharp(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Option_valueContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public sconst(): SconstContext {
		return this.getTypedRuleContext(SconstContext, 0) as SconstContext;
	}
	public reserved_keyword(): Reserved_keywordContext {
		return this.getTypedRuleContext(Reserved_keywordContext, 0) as Reserved_keywordContext;
	}
	public plsql_unreserved_keyword(): Plsql_unreserved_keywordContext {
		return this.getTypedRuleContext(Plsql_unreserved_keywordContext, 0) as Plsql_unreserved_keywordContext;
	}
	public unreserved_keyword(): Unreserved_keywordContext {
		return this.getTypedRuleContext(Unreserved_keywordContext, 0) as Unreserved_keywordContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_option_value;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOption_value) {
	 		listener.enterOption_value(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOption_value) {
	 		listener.exitOption_value(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOption_value) {
			return visitor.visitOption_value(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_semiContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public SEMI(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEMI, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_semi;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_semi) {
	 		listener.enterOpt_semi(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_semi) {
	 		listener.exitOpt_semi(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_semi) {
			return visitor.visitOpt_semi(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Pl_blockContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public decl_sect(): Decl_sectContext {
		return this.getTypedRuleContext(Decl_sectContext, 0) as Decl_sectContext;
	}
	public BEGIN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.BEGIN_P, 0);
	}
	public proc_sect(): Proc_sectContext {
		return this.getTypedRuleContext(Proc_sectContext, 0) as Proc_sectContext;
	}
	public exception_sect(): Exception_sectContext {
		return this.getTypedRuleContext(Exception_sectContext, 0) as Exception_sectContext;
	}
	public END_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.END_P, 0);
	}
	public opt_label(): Opt_labelContext {
		return this.getTypedRuleContext(Opt_labelContext, 0) as Opt_labelContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_pl_block;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterPl_block) {
	 		listener.enterPl_block(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitPl_block) {
	 		listener.exitPl_block(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitPl_block) {
			return visitor.visitPl_block(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Decl_sectContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public opt_block_label(): Opt_block_labelContext {
		return this.getTypedRuleContext(Opt_block_labelContext, 0) as Opt_block_labelContext;
	}
	public decl_start(): Decl_startContext {
		return this.getTypedRuleContext(Decl_startContext, 0) as Decl_startContext;
	}
	public decl_stmts(): Decl_stmtsContext {
		return this.getTypedRuleContext(Decl_stmtsContext, 0) as Decl_stmtsContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_decl_sect;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDecl_sect) {
	 		listener.enterDecl_sect(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDecl_sect) {
	 		listener.exitDecl_sect(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDecl_sect) {
			return visitor.visitDecl_sect(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Decl_startContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public DECLARE(): TerminalNode {
		return this.getToken(PostgreSQLParser.DECLARE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_decl_start;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDecl_start) {
	 		listener.enterDecl_start(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDecl_start) {
	 		listener.exitDecl_start(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDecl_start) {
			return visitor.visitDecl_start(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Decl_stmtsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public decl_stmt_list(): Decl_stmtContext[] {
		return this.getTypedRuleContexts(Decl_stmtContext) as Decl_stmtContext[];
	}
	public decl_stmt(i: number): Decl_stmtContext {
		return this.getTypedRuleContext(Decl_stmtContext, i) as Decl_stmtContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_decl_stmts;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDecl_stmts) {
	 		listener.enterDecl_stmts(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDecl_stmts) {
	 		listener.exitDecl_stmts(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDecl_stmts) {
			return visitor.visitDecl_stmts(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Label_declContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public LESS_LESS(): TerminalNode {
		return this.getToken(PostgreSQLParser.LESS_LESS, 0);
	}
	public any_identifier(): Any_identifierContext {
		return this.getTypedRuleContext(Any_identifierContext, 0) as Any_identifierContext;
	}
	public GREATER_GREATER(): TerminalNode {
		return this.getToken(PostgreSQLParser.GREATER_GREATER, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_label_decl;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterLabel_decl) {
	 		listener.enterLabel_decl(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitLabel_decl) {
	 		listener.exitLabel_decl(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitLabel_decl) {
			return visitor.visitLabel_decl(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Decl_stmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public decl_statement(): Decl_statementContext {
		return this.getTypedRuleContext(Decl_statementContext, 0) as Decl_statementContext;
	}
	public DECLARE(): TerminalNode {
		return this.getToken(PostgreSQLParser.DECLARE, 0);
	}
	public label_decl(): Label_declContext {
		return this.getTypedRuleContext(Label_declContext, 0) as Label_declContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_decl_stmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDecl_stmt) {
	 		listener.enterDecl_stmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDecl_stmt) {
	 		listener.exitDecl_stmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDecl_stmt) {
			return visitor.visitDecl_stmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Decl_statementContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public decl_varname(): Decl_varnameContext {
		return this.getTypedRuleContext(Decl_varnameContext, 0) as Decl_varnameContext;
	}
	public SEMI(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEMI, 0);
	}
	public ALIAS(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALIAS, 0);
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
	public decl_aliasitem(): Decl_aliasitemContext {
		return this.getTypedRuleContext(Decl_aliasitemContext, 0) as Decl_aliasitemContext;
	}
	public decl_const(): Decl_constContext {
		return this.getTypedRuleContext(Decl_constContext, 0) as Decl_constContext;
	}
	public decl_datatype(): Decl_datatypeContext {
		return this.getTypedRuleContext(Decl_datatypeContext, 0) as Decl_datatypeContext;
	}
	public decl_collate(): Decl_collateContext {
		return this.getTypedRuleContext(Decl_collateContext, 0) as Decl_collateContext;
	}
	public decl_notnull(): Decl_notnullContext {
		return this.getTypedRuleContext(Decl_notnullContext, 0) as Decl_notnullContext;
	}
	public decl_defval(): Decl_defvalContext {
		return this.getTypedRuleContext(Decl_defvalContext, 0) as Decl_defvalContext;
	}
	public opt_scrollable(): Opt_scrollableContext {
		return this.getTypedRuleContext(Opt_scrollableContext, 0) as Opt_scrollableContext;
	}
	public CURSOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.CURSOR, 0);
	}
	public decl_cursor_args(): Decl_cursor_argsContext {
		return this.getTypedRuleContext(Decl_cursor_argsContext, 0) as Decl_cursor_argsContext;
	}
	public decl_is_for(): Decl_is_forContext {
		return this.getTypedRuleContext(Decl_is_forContext, 0) as Decl_is_forContext;
	}
	public decl_cursor_query(): Decl_cursor_queryContext {
		return this.getTypedRuleContext(Decl_cursor_queryContext, 0) as Decl_cursor_queryContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_decl_statement;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDecl_statement) {
	 		listener.enterDecl_statement(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDecl_statement) {
	 		listener.exitDecl_statement(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDecl_statement) {
			return visitor.visitDecl_statement(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_scrollableContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public NO(): TerminalNode {
		return this.getToken(PostgreSQLParser.NO, 0);
	}
	public SCROLL(): TerminalNode {
		return this.getToken(PostgreSQLParser.SCROLL, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_scrollable;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_scrollable) {
	 		listener.enterOpt_scrollable(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_scrollable) {
	 		listener.exitOpt_scrollable(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_scrollable) {
			return visitor.visitOpt_scrollable(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Decl_cursor_queryContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public selectstmt(): SelectstmtContext {
		return this.getTypedRuleContext(SelectstmtContext, 0) as SelectstmtContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_decl_cursor_query;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDecl_cursor_query) {
	 		listener.enterDecl_cursor_query(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDecl_cursor_query) {
	 		listener.exitDecl_cursor_query(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDecl_cursor_query) {
			return visitor.visitDecl_cursor_query(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Decl_cursor_argsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public decl_cursor_arglist(): Decl_cursor_arglistContext {
		return this.getTypedRuleContext(Decl_cursor_arglistContext, 0) as Decl_cursor_arglistContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_decl_cursor_args;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDecl_cursor_args) {
	 		listener.enterDecl_cursor_args(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDecl_cursor_args) {
	 		listener.exitDecl_cursor_args(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDecl_cursor_args) {
			return visitor.visitDecl_cursor_args(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Decl_cursor_arglistContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public decl_cursor_arg_list(): Decl_cursor_argContext[] {
		return this.getTypedRuleContexts(Decl_cursor_argContext) as Decl_cursor_argContext[];
	}
	public decl_cursor_arg(i: number): Decl_cursor_argContext {
		return this.getTypedRuleContext(Decl_cursor_argContext, i) as Decl_cursor_argContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_decl_cursor_arglist;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDecl_cursor_arglist) {
	 		listener.enterDecl_cursor_arglist(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDecl_cursor_arglist) {
	 		listener.exitDecl_cursor_arglist(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDecl_cursor_arglist) {
			return visitor.visitDecl_cursor_arglist(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Decl_cursor_argContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public decl_varname(): Decl_varnameContext {
		return this.getTypedRuleContext(Decl_varnameContext, 0) as Decl_varnameContext;
	}
	public decl_datatype(): Decl_datatypeContext {
		return this.getTypedRuleContext(Decl_datatypeContext, 0) as Decl_datatypeContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_decl_cursor_arg;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDecl_cursor_arg) {
	 		listener.enterDecl_cursor_arg(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDecl_cursor_arg) {
	 		listener.exitDecl_cursor_arg(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDecl_cursor_arg) {
			return visitor.visitDecl_cursor_arg(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Decl_is_forContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public IS(): TerminalNode {
		return this.getToken(PostgreSQLParser.IS, 0);
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_decl_is_for;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDecl_is_for) {
	 		listener.enterDecl_is_for(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDecl_is_for) {
	 		listener.exitDecl_is_for(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDecl_is_for) {
			return visitor.visitDecl_is_for(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Decl_aliasitemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public PARAM(): TerminalNode {
		return this.getToken(PostgreSQLParser.PARAM, 0);
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_decl_aliasitem;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDecl_aliasitem) {
	 		listener.enterDecl_aliasitem(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDecl_aliasitem) {
	 		listener.exitDecl_aliasitem(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDecl_aliasitem) {
			return visitor.visitDecl_aliasitem(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Decl_varnameContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public any_identifier(): Any_identifierContext {
		return this.getTypedRuleContext(Any_identifierContext, 0) as Any_identifierContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_decl_varname;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDecl_varname) {
	 		listener.enterDecl_varname(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDecl_varname) {
	 		listener.exitDecl_varname(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDecl_varname) {
			return visitor.visitDecl_varname(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Decl_constContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CONSTANT(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONSTANT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_decl_const;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDecl_const) {
	 		listener.enterDecl_const(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDecl_const) {
	 		listener.exitDecl_const(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDecl_const) {
			return visitor.visitDecl_const(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Decl_datatypeContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public typename(): TypenameContext {
		return this.getTypedRuleContext(TypenameContext, 0) as TypenameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_decl_datatype;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDecl_datatype) {
	 		listener.enterDecl_datatype(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDecl_datatype) {
	 		listener.exitDecl_datatype(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDecl_datatype) {
			return visitor.visitDecl_datatype(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Decl_collateContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public COLLATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.COLLATE, 0);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_decl_collate;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDecl_collate) {
	 		listener.enterDecl_collate(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDecl_collate) {
	 		listener.exitDecl_collate(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDecl_collate) {
			return visitor.visitDecl_collate(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Decl_notnullContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public NOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOT, 0);
	}
	public NULL_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.NULL_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_decl_notnull;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDecl_notnull) {
	 		listener.enterDecl_notnull(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDecl_notnull) {
	 		listener.exitDecl_notnull(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDecl_notnull) {
			return visitor.visitDecl_notnull(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Decl_defvalContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public decl_defkey(): Decl_defkeyContext {
		return this.getTypedRuleContext(Decl_defkeyContext, 0) as Decl_defkeyContext;
	}
	public sql_expression(): Sql_expressionContext {
		return this.getTypedRuleContext(Sql_expressionContext, 0) as Sql_expressionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_decl_defval;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDecl_defval) {
	 		listener.enterDecl_defval(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDecl_defval) {
	 		listener.exitDecl_defval(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDecl_defval) {
			return visitor.visitDecl_defval(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Decl_defkeyContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public assign_operator(): Assign_operatorContext {
		return this.getTypedRuleContext(Assign_operatorContext, 0) as Assign_operatorContext;
	}
	public DEFAULT(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEFAULT, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_decl_defkey;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterDecl_defkey) {
	 		listener.enterDecl_defkey(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitDecl_defkey) {
	 		listener.exitDecl_defkey(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitDecl_defkey) {
			return visitor.visitDecl_defkey(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Assign_operatorContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public EQUAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.EQUAL, 0);
	}
	public COLON_EQUALS(): TerminalNode {
		return this.getToken(PostgreSQLParser.COLON_EQUALS, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_assign_operator;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAssign_operator) {
	 		listener.enterAssign_operator(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAssign_operator) {
	 		listener.exitAssign_operator(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAssign_operator) {
			return visitor.visitAssign_operator(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Proc_sectContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public proc_stmt_list(): Proc_stmtContext[] {
		return this.getTypedRuleContexts(Proc_stmtContext) as Proc_stmtContext[];
	}
	public proc_stmt(i: number): Proc_stmtContext {
		return this.getTypedRuleContext(Proc_stmtContext, i) as Proc_stmtContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_proc_sect;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterProc_sect) {
	 		listener.enterProc_sect(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitProc_sect) {
	 		listener.exitProc_sect(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitProc_sect) {
			return visitor.visitProc_sect(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Proc_stmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public pl_block(): Pl_blockContext {
		return this.getTypedRuleContext(Pl_blockContext, 0) as Pl_blockContext;
	}
	public SEMI(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEMI, 0);
	}
	public stmt_return(): Stmt_returnContext {
		return this.getTypedRuleContext(Stmt_returnContext, 0) as Stmt_returnContext;
	}
	public stmt_raise(): Stmt_raiseContext {
		return this.getTypedRuleContext(Stmt_raiseContext, 0) as Stmt_raiseContext;
	}
	public stmt_assign(): Stmt_assignContext {
		return this.getTypedRuleContext(Stmt_assignContext, 0) as Stmt_assignContext;
	}
	public stmt_if(): Stmt_ifContext {
		return this.getTypedRuleContext(Stmt_ifContext, 0) as Stmt_ifContext;
	}
	public stmt_case(): Stmt_caseContext {
		return this.getTypedRuleContext(Stmt_caseContext, 0) as Stmt_caseContext;
	}
	public stmt_loop(): Stmt_loopContext {
		return this.getTypedRuleContext(Stmt_loopContext, 0) as Stmt_loopContext;
	}
	public stmt_while(): Stmt_whileContext {
		return this.getTypedRuleContext(Stmt_whileContext, 0) as Stmt_whileContext;
	}
	public stmt_for(): Stmt_forContext {
		return this.getTypedRuleContext(Stmt_forContext, 0) as Stmt_forContext;
	}
	public stmt_foreach_a(): Stmt_foreach_aContext {
		return this.getTypedRuleContext(Stmt_foreach_aContext, 0) as Stmt_foreach_aContext;
	}
	public stmt_exit(): Stmt_exitContext {
		return this.getTypedRuleContext(Stmt_exitContext, 0) as Stmt_exitContext;
	}
	public stmt_assert(): Stmt_assertContext {
		return this.getTypedRuleContext(Stmt_assertContext, 0) as Stmt_assertContext;
	}
	public stmt_execsql(): Stmt_execsqlContext {
		return this.getTypedRuleContext(Stmt_execsqlContext, 0) as Stmt_execsqlContext;
	}
	public stmt_dynexecute(): Stmt_dynexecuteContext {
		return this.getTypedRuleContext(Stmt_dynexecuteContext, 0) as Stmt_dynexecuteContext;
	}
	public stmt_perform(): Stmt_performContext {
		return this.getTypedRuleContext(Stmt_performContext, 0) as Stmt_performContext;
	}
	public stmt_call(): Stmt_callContext {
		return this.getTypedRuleContext(Stmt_callContext, 0) as Stmt_callContext;
	}
	public stmt_getdiag(): Stmt_getdiagContext {
		return this.getTypedRuleContext(Stmt_getdiagContext, 0) as Stmt_getdiagContext;
	}
	public stmt_open(): Stmt_openContext {
		return this.getTypedRuleContext(Stmt_openContext, 0) as Stmt_openContext;
	}
	public stmt_fetch(): Stmt_fetchContext {
		return this.getTypedRuleContext(Stmt_fetchContext, 0) as Stmt_fetchContext;
	}
	public stmt_move(): Stmt_moveContext {
		return this.getTypedRuleContext(Stmt_moveContext, 0) as Stmt_moveContext;
	}
	public stmt_close(): Stmt_closeContext {
		return this.getTypedRuleContext(Stmt_closeContext, 0) as Stmt_closeContext;
	}
	public stmt_null(): Stmt_nullContext {
		return this.getTypedRuleContext(Stmt_nullContext, 0) as Stmt_nullContext;
	}
	public stmt_commit(): Stmt_commitContext {
		return this.getTypedRuleContext(Stmt_commitContext, 0) as Stmt_commitContext;
	}
	public stmt_rollback(): Stmt_rollbackContext {
		return this.getTypedRuleContext(Stmt_rollbackContext, 0) as Stmt_rollbackContext;
	}
	public stmt_set(): Stmt_setContext {
		return this.getTypedRuleContext(Stmt_setContext, 0) as Stmt_setContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_proc_stmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterProc_stmt) {
	 		listener.enterProc_stmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitProc_stmt) {
	 		listener.exitProc_stmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitProc_stmt) {
			return visitor.visitProc_stmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Stmt_performContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public PERFORM(): TerminalNode {
		return this.getToken(PostgreSQLParser.PERFORM, 0);
	}
	public expr_until_semi(): Expr_until_semiContext {
		return this.getTypedRuleContext(Expr_until_semiContext, 0) as Expr_until_semiContext;
	}
	public SEMI(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEMI, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_stmt_perform;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterStmt_perform) {
	 		listener.enterStmt_perform(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitStmt_perform) {
	 		listener.exitStmt_perform(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitStmt_perform) {
			return visitor.visitStmt_perform(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Stmt_callContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CALL(): TerminalNode {
		return this.getToken(PostgreSQLParser.CALL, 0);
	}
	public any_identifier(): Any_identifierContext {
		return this.getTypedRuleContext(Any_identifierContext, 0) as Any_identifierContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public opt_expr_list(): Opt_expr_listContext {
		return this.getTypedRuleContext(Opt_expr_listContext, 0) as Opt_expr_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public SEMI(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEMI, 0);
	}
	public DO(): TerminalNode {
		return this.getToken(PostgreSQLParser.DO, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_stmt_call;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterStmt_call) {
	 		listener.enterStmt_call(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitStmt_call) {
	 		listener.exitStmt_call(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitStmt_call) {
			return visitor.visitStmt_call(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_expr_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public expr_list(): Expr_listContext {
		return this.getTypedRuleContext(Expr_listContext, 0) as Expr_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_expr_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_expr_list) {
	 		listener.enterOpt_expr_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_expr_list) {
	 		listener.exitOpt_expr_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_expr_list) {
			return visitor.visitOpt_expr_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Stmt_assignContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public assign_var(): Assign_varContext {
		return this.getTypedRuleContext(Assign_varContext, 0) as Assign_varContext;
	}
	public assign_operator(): Assign_operatorContext {
		return this.getTypedRuleContext(Assign_operatorContext, 0) as Assign_operatorContext;
	}
	public sql_expression(): Sql_expressionContext {
		return this.getTypedRuleContext(Sql_expressionContext, 0) as Sql_expressionContext;
	}
	public SEMI(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEMI, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_stmt_assign;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterStmt_assign) {
	 		listener.enterStmt_assign(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitStmt_assign) {
	 		listener.exitStmt_assign(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitStmt_assign) {
			return visitor.visitStmt_assign(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Stmt_getdiagContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public GET(): TerminalNode {
		return this.getToken(PostgreSQLParser.GET, 0);
	}
	public getdiag_area_opt(): Getdiag_area_optContext {
		return this.getTypedRuleContext(Getdiag_area_optContext, 0) as Getdiag_area_optContext;
	}
	public DIAGNOSTICS(): TerminalNode {
		return this.getToken(PostgreSQLParser.DIAGNOSTICS, 0);
	}
	public getdiag_list(): Getdiag_listContext {
		return this.getTypedRuleContext(Getdiag_listContext, 0) as Getdiag_listContext;
	}
	public SEMI(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEMI, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_stmt_getdiag;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterStmt_getdiag) {
	 		listener.enterStmt_getdiag(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitStmt_getdiag) {
	 		listener.exitStmt_getdiag(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitStmt_getdiag) {
			return visitor.visitStmt_getdiag(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Getdiag_area_optContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CURRENT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.CURRENT_P, 0);
	}
	public STACKED(): TerminalNode {
		return this.getToken(PostgreSQLParser.STACKED, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_getdiag_area_opt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterGetdiag_area_opt) {
	 		listener.enterGetdiag_area_opt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitGetdiag_area_opt) {
	 		listener.exitGetdiag_area_opt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitGetdiag_area_opt) {
			return visitor.visitGetdiag_area_opt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Getdiag_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public getdiag_list_item_list(): Getdiag_list_itemContext[] {
		return this.getTypedRuleContexts(Getdiag_list_itemContext) as Getdiag_list_itemContext[];
	}
	public getdiag_list_item(i: number): Getdiag_list_itemContext {
		return this.getTypedRuleContext(Getdiag_list_itemContext, i) as Getdiag_list_itemContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_getdiag_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterGetdiag_list) {
	 		listener.enterGetdiag_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitGetdiag_list) {
	 		listener.exitGetdiag_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitGetdiag_list) {
			return visitor.visitGetdiag_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Getdiag_list_itemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public getdiag_target(): Getdiag_targetContext {
		return this.getTypedRuleContext(Getdiag_targetContext, 0) as Getdiag_targetContext;
	}
	public assign_operator(): Assign_operatorContext {
		return this.getTypedRuleContext(Assign_operatorContext, 0) as Assign_operatorContext;
	}
	public getdiag_item(): Getdiag_itemContext {
		return this.getTypedRuleContext(Getdiag_itemContext, 0) as Getdiag_itemContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_getdiag_list_item;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterGetdiag_list_item) {
	 		listener.enterGetdiag_list_item(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitGetdiag_list_item) {
	 		listener.exitGetdiag_list_item(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitGetdiag_list_item) {
			return visitor.visitGetdiag_list_item(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Getdiag_itemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_getdiag_item;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterGetdiag_item) {
	 		listener.enterGetdiag_item(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitGetdiag_item) {
	 		listener.exitGetdiag_item(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitGetdiag_item) {
			return visitor.visitGetdiag_item(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Getdiag_targetContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public assign_var(): Assign_varContext {
		return this.getTypedRuleContext(Assign_varContext, 0) as Assign_varContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_getdiag_target;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterGetdiag_target) {
	 		listener.enterGetdiag_target(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitGetdiag_target) {
	 		listener.exitGetdiag_target(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitGetdiag_target) {
			return visitor.visitGetdiag_target(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Assign_varContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
	public PARAM(): TerminalNode {
		return this.getToken(PostgreSQLParser.PARAM, 0);
	}
	public OPEN_BRACKET_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.OPEN_BRACKET);
	}
	public OPEN_BRACKET(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_BRACKET, i);
	}
	public expr_until_rightbracket_list(): Expr_until_rightbracketContext[] {
		return this.getTypedRuleContexts(Expr_until_rightbracketContext) as Expr_until_rightbracketContext[];
	}
	public expr_until_rightbracket(i: number): Expr_until_rightbracketContext {
		return this.getTypedRuleContext(Expr_until_rightbracketContext, i) as Expr_until_rightbracketContext;
	}
	public CLOSE_BRACKET_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.CLOSE_BRACKET);
	}
	public CLOSE_BRACKET(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_BRACKET, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_assign_var;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAssign_var) {
	 		listener.enterAssign_var(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAssign_var) {
	 		listener.exitAssign_var(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAssign_var) {
			return visitor.visitAssign_var(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Stmt_ifContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public IF_P_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.IF_P);
	}
	public IF_P(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.IF_P, i);
	}
	public expr_until_then(): Expr_until_thenContext {
		return this.getTypedRuleContext(Expr_until_thenContext, 0) as Expr_until_thenContext;
	}
	public THEN(): TerminalNode {
		return this.getToken(PostgreSQLParser.THEN, 0);
	}
	public proc_sect(): Proc_sectContext {
		return this.getTypedRuleContext(Proc_sectContext, 0) as Proc_sectContext;
	}
	public stmt_elsifs(): Stmt_elsifsContext {
		return this.getTypedRuleContext(Stmt_elsifsContext, 0) as Stmt_elsifsContext;
	}
	public stmt_else(): Stmt_elseContext {
		return this.getTypedRuleContext(Stmt_elseContext, 0) as Stmt_elseContext;
	}
	public END_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.END_P, 0);
	}
	public SEMI(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEMI, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_stmt_if;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterStmt_if) {
	 		listener.enterStmt_if(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitStmt_if) {
	 		listener.exitStmt_if(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitStmt_if) {
			return visitor.visitStmt_if(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Stmt_elsifsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ELSIF_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.ELSIF);
	}
	public ELSIF(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.ELSIF, i);
	}
	public a_expr_list(): A_exprContext[] {
		return this.getTypedRuleContexts(A_exprContext) as A_exprContext[];
	}
	public a_expr(i: number): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, i) as A_exprContext;
	}
	public THEN_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.THEN);
	}
	public THEN(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.THEN, i);
	}
	public proc_sect_list(): Proc_sectContext[] {
		return this.getTypedRuleContexts(Proc_sectContext) as Proc_sectContext[];
	}
	public proc_sect(i: number): Proc_sectContext {
		return this.getTypedRuleContext(Proc_sectContext, i) as Proc_sectContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_stmt_elsifs;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterStmt_elsifs) {
	 		listener.enterStmt_elsifs(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitStmt_elsifs) {
	 		listener.exitStmt_elsifs(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitStmt_elsifs) {
			return visitor.visitStmt_elsifs(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Stmt_elseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ELSE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ELSE, 0);
	}
	public proc_sect(): Proc_sectContext {
		return this.getTypedRuleContext(Proc_sectContext, 0) as Proc_sectContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_stmt_else;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterStmt_else) {
	 		listener.enterStmt_else(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitStmt_else) {
	 		listener.exitStmt_else(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitStmt_else) {
			return visitor.visitStmt_else(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Stmt_caseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CASE_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.CASE);
	}
	public CASE(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.CASE, i);
	}
	public opt_expr_until_when(): Opt_expr_until_whenContext {
		return this.getTypedRuleContext(Opt_expr_until_whenContext, 0) as Opt_expr_until_whenContext;
	}
	public case_when_list(): Case_when_listContext {
		return this.getTypedRuleContext(Case_when_listContext, 0) as Case_when_listContext;
	}
	public opt_case_else(): Opt_case_elseContext {
		return this.getTypedRuleContext(Opt_case_elseContext, 0) as Opt_case_elseContext;
	}
	public END_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.END_P, 0);
	}
	public SEMI(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEMI, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_stmt_case;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterStmt_case) {
	 		listener.enterStmt_case(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitStmt_case) {
	 		listener.exitStmt_case(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitStmt_case) {
			return visitor.visitStmt_case(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_expr_until_whenContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public sql_expression(): Sql_expressionContext {
		return this.getTypedRuleContext(Sql_expressionContext, 0) as Sql_expressionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_expr_until_when;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_expr_until_when) {
	 		listener.enterOpt_expr_until_when(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_expr_until_when) {
	 		listener.exitOpt_expr_until_when(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_expr_until_when) {
			return visitor.visitOpt_expr_until_when(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Case_when_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public case_when_list(): Case_whenContext[] {
		return this.getTypedRuleContexts(Case_whenContext) as Case_whenContext[];
	}
	public case_when(i: number): Case_whenContext {
		return this.getTypedRuleContext(Case_whenContext, i) as Case_whenContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_case_when_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCase_when_list) {
	 		listener.enterCase_when_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCase_when_list) {
	 		listener.exitCase_when_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCase_when_list) {
			return visitor.visitCase_when_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Case_whenContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public WHEN(): TerminalNode {
		return this.getToken(PostgreSQLParser.WHEN, 0);
	}
	public expr_list(): Expr_listContext {
		return this.getTypedRuleContext(Expr_listContext, 0) as Expr_listContext;
	}
	public THEN(): TerminalNode {
		return this.getToken(PostgreSQLParser.THEN, 0);
	}
	public proc_sect(): Proc_sectContext {
		return this.getTypedRuleContext(Proc_sectContext, 0) as Proc_sectContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_case_when;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCase_when) {
	 		listener.enterCase_when(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCase_when) {
	 		listener.exitCase_when(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCase_when) {
			return visitor.visitCase_when(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_case_elseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ELSE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ELSE, 0);
	}
	public proc_sect(): Proc_sectContext {
		return this.getTypedRuleContext(Proc_sectContext, 0) as Proc_sectContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_case_else;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_case_else) {
	 		listener.enterOpt_case_else(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_case_else) {
	 		listener.exitOpt_case_else(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_case_else) {
			return visitor.visitOpt_case_else(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Stmt_loopContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public opt_loop_label(): Opt_loop_labelContext {
		return this.getTypedRuleContext(Opt_loop_labelContext, 0) as Opt_loop_labelContext;
	}
	public loop_body(): Loop_bodyContext {
		return this.getTypedRuleContext(Loop_bodyContext, 0) as Loop_bodyContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_stmt_loop;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterStmt_loop) {
	 		listener.enterStmt_loop(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitStmt_loop) {
	 		listener.exitStmt_loop(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitStmt_loop) {
			return visitor.visitStmt_loop(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Stmt_whileContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public opt_loop_label(): Opt_loop_labelContext {
		return this.getTypedRuleContext(Opt_loop_labelContext, 0) as Opt_loop_labelContext;
	}
	public WHILE(): TerminalNode {
		return this.getToken(PostgreSQLParser.WHILE, 0);
	}
	public expr_until_loop(): Expr_until_loopContext {
		return this.getTypedRuleContext(Expr_until_loopContext, 0) as Expr_until_loopContext;
	}
	public loop_body(): Loop_bodyContext {
		return this.getTypedRuleContext(Loop_bodyContext, 0) as Loop_bodyContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_stmt_while;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterStmt_while) {
	 		listener.enterStmt_while(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitStmt_while) {
	 		listener.exitStmt_while(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitStmt_while) {
			return visitor.visitStmt_while(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Stmt_forContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public opt_loop_label(): Opt_loop_labelContext {
		return this.getTypedRuleContext(Opt_loop_labelContext, 0) as Opt_loop_labelContext;
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
	public for_control(): For_controlContext {
		return this.getTypedRuleContext(For_controlContext, 0) as For_controlContext;
	}
	public loop_body(): Loop_bodyContext {
		return this.getTypedRuleContext(Loop_bodyContext, 0) as Loop_bodyContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_stmt_for;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterStmt_for) {
	 		listener.enterStmt_for(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitStmt_for) {
	 		listener.exitStmt_for(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitStmt_for) {
			return visitor.visitStmt_for(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class For_controlContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public for_variable(): For_variableContext {
		return this.getTypedRuleContext(For_variableContext, 0) as For_variableContext;
	}
	public IN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IN_P, 0);
	}
	public cursor_name(): Cursor_nameContext {
		return this.getTypedRuleContext(Cursor_nameContext, 0) as Cursor_nameContext;
	}
	public opt_cursor_parameters(): Opt_cursor_parametersContext {
		return this.getTypedRuleContext(Opt_cursor_parametersContext, 0) as Opt_cursor_parametersContext;
	}
	public selectstmt(): SelectstmtContext {
		return this.getTypedRuleContext(SelectstmtContext, 0) as SelectstmtContext;
	}
	public explainstmt(): ExplainstmtContext {
		return this.getTypedRuleContext(ExplainstmtContext, 0) as ExplainstmtContext;
	}
	public EXECUTE(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXECUTE, 0);
	}
	public a_expr_list(): A_exprContext[] {
		return this.getTypedRuleContexts(A_exprContext) as A_exprContext[];
	}
	public a_expr(i: number): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, i) as A_exprContext;
	}
	public opt_for_using_expression(): Opt_for_using_expressionContext {
		return this.getTypedRuleContext(Opt_for_using_expressionContext, 0) as Opt_for_using_expressionContext;
	}
	public opt_reverse(): Opt_reverseContext {
		return this.getTypedRuleContext(Opt_reverseContext, 0) as Opt_reverseContext;
	}
	public DOT_DOT(): TerminalNode {
		return this.getToken(PostgreSQLParser.DOT_DOT, 0);
	}
	public opt_by_expression(): Opt_by_expressionContext {
		return this.getTypedRuleContext(Opt_by_expressionContext, 0) as Opt_by_expressionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_for_control;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFor_control) {
	 		listener.enterFor_control(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFor_control) {
	 		listener.exitFor_control(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFor_control) {
			return visitor.visitFor_control(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_for_using_expressionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public USING(): TerminalNode {
		return this.getToken(PostgreSQLParser.USING, 0);
	}
	public expr_list(): Expr_listContext {
		return this.getTypedRuleContext(Expr_listContext, 0) as Expr_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_for_using_expression;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_for_using_expression) {
	 		listener.enterOpt_for_using_expression(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_for_using_expression) {
	 		listener.exitOpt_for_using_expression(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_for_using_expression) {
			return visitor.visitOpt_for_using_expression(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_cursor_parametersContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public a_expr_list(): A_exprContext[] {
		return this.getTypedRuleContexts(A_exprContext) as A_exprContext[];
	}
	public a_expr(i: number): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, i) as A_exprContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_cursor_parameters;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_cursor_parameters) {
	 		listener.enterOpt_cursor_parameters(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_cursor_parameters) {
	 		listener.exitOpt_cursor_parameters(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_cursor_parameters) {
			return visitor.visitOpt_cursor_parameters(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_reverseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public REVERSE(): TerminalNode {
		return this.getToken(PostgreSQLParser.REVERSE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_reverse;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_reverse) {
	 		listener.enterOpt_reverse(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_reverse) {
	 		listener.exitOpt_reverse(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_reverse) {
			return visitor.visitOpt_reverse(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_by_expressionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public BY(): TerminalNode {
		return this.getToken(PostgreSQLParser.BY, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_by_expression;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_by_expression) {
	 		listener.enterOpt_by_expression(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_by_expression) {
	 		listener.exitOpt_by_expression(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_by_expression) {
			return visitor.visitOpt_by_expression(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class For_variableContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public any_name_list(): Any_name_listContext {
		return this.getTypedRuleContext(Any_name_listContext, 0) as Any_name_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_for_variable;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterFor_variable) {
	 		listener.enterFor_variable(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitFor_variable) {
	 		listener.exitFor_variable(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitFor_variable) {
			return visitor.visitFor_variable(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Stmt_foreach_aContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public opt_loop_label(): Opt_loop_labelContext {
		return this.getTypedRuleContext(Opt_loop_labelContext, 0) as Opt_loop_labelContext;
	}
	public FOREACH(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOREACH, 0);
	}
	public for_variable(): For_variableContext {
		return this.getTypedRuleContext(For_variableContext, 0) as For_variableContext;
	}
	public foreach_slice(): Foreach_sliceContext {
		return this.getTypedRuleContext(Foreach_sliceContext, 0) as Foreach_sliceContext;
	}
	public IN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IN_P, 0);
	}
	public ARRAY(): TerminalNode {
		return this.getToken(PostgreSQLParser.ARRAY, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public loop_body(): Loop_bodyContext {
		return this.getTypedRuleContext(Loop_bodyContext, 0) as Loop_bodyContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_stmt_foreach_a;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterStmt_foreach_a) {
	 		listener.enterStmt_foreach_a(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitStmt_foreach_a) {
	 		listener.exitStmt_foreach_a(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitStmt_foreach_a) {
			return visitor.visitStmt_foreach_a(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Foreach_sliceContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public SLICE(): TerminalNode {
		return this.getToken(PostgreSQLParser.SLICE, 0);
	}
	public iconst(): IconstContext {
		return this.getTypedRuleContext(IconstContext, 0) as IconstContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_foreach_slice;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterForeach_slice) {
	 		listener.enterForeach_slice(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitForeach_slice) {
	 		listener.exitForeach_slice(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitForeach_slice) {
			return visitor.visitForeach_slice(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Stmt_exitContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public exit_type(): Exit_typeContext {
		return this.getTypedRuleContext(Exit_typeContext, 0) as Exit_typeContext;
	}
	public opt_label(): Opt_labelContext {
		return this.getTypedRuleContext(Opt_labelContext, 0) as Opt_labelContext;
	}
	public opt_exitcond(): Opt_exitcondContext {
		return this.getTypedRuleContext(Opt_exitcondContext, 0) as Opt_exitcondContext;
	}
	public SEMI(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEMI, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_stmt_exit;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterStmt_exit) {
	 		listener.enterStmt_exit(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitStmt_exit) {
	 		listener.exitStmt_exit(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitStmt_exit) {
			return visitor.visitStmt_exit(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Exit_typeContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public EXIT(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXIT, 0);
	}
	public CONTINUE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONTINUE_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_exit_type;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterExit_type) {
	 		listener.enterExit_type(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitExit_type) {
	 		listener.exitExit_type(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitExit_type) {
			return visitor.visitExit_type(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Stmt_returnContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public RETURN(): TerminalNode {
		return this.getToken(PostgreSQLParser.RETURN, 0);
	}
	public SEMI(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEMI, 0);
	}
	public NEXT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NEXT, 0);
	}
	public sql_expression(): Sql_expressionContext {
		return this.getTypedRuleContext(Sql_expressionContext, 0) as Sql_expressionContext;
	}
	public QUERY(): TerminalNode {
		return this.getToken(PostgreSQLParser.QUERY, 0);
	}
	public opt_return_result(): Opt_return_resultContext {
		return this.getTypedRuleContext(Opt_return_resultContext, 0) as Opt_return_resultContext;
	}
	public EXECUTE(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXECUTE, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public opt_for_using_expression(): Opt_for_using_expressionContext {
		return this.getTypedRuleContext(Opt_for_using_expressionContext, 0) as Opt_for_using_expressionContext;
	}
	public selectstmt(): SelectstmtContext {
		return this.getTypedRuleContext(SelectstmtContext, 0) as SelectstmtContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_stmt_return;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterStmt_return) {
	 		listener.enterStmt_return(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitStmt_return) {
	 		listener.exitStmt_return(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitStmt_return) {
			return visitor.visitStmt_return(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_return_resultContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public sql_expression(): Sql_expressionContext {
		return this.getTypedRuleContext(Sql_expressionContext, 0) as Sql_expressionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_return_result;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_return_result) {
	 		listener.enterOpt_return_result(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_return_result) {
	 		listener.exitOpt_return_result(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_return_result) {
			return visitor.visitOpt_return_result(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Stmt_raiseContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public RAISE(): TerminalNode {
		return this.getToken(PostgreSQLParser.RAISE, 0);
	}
	public opt_stmt_raise_level(): Opt_stmt_raise_levelContext {
		return this.getTypedRuleContext(Opt_stmt_raise_levelContext, 0) as Opt_stmt_raise_levelContext;
	}
	public sconst(): SconstContext {
		return this.getTypedRuleContext(SconstContext, 0) as SconstContext;
	}
	public opt_raise_list(): Opt_raise_listContext {
		return this.getTypedRuleContext(Opt_raise_listContext, 0) as Opt_raise_listContext;
	}
	public opt_raise_using(): Opt_raise_usingContext {
		return this.getTypedRuleContext(Opt_raise_usingContext, 0) as Opt_raise_usingContext;
	}
	public SEMI(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEMI, 0);
	}
	public identifier(): IdentifierContext {
		return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext;
	}
	public SQLSTATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.SQLSTATE, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_stmt_raise;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterStmt_raise) {
	 		listener.enterStmt_raise(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitStmt_raise) {
	 		listener.exitStmt_raise(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitStmt_raise) {
			return visitor.visitStmt_raise(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_stmt_raise_levelContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public DEBUG(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEBUG, 0);
	}
	public LOG(): TerminalNode {
		return this.getToken(PostgreSQLParser.LOG, 0);
	}
	public INFO(): TerminalNode {
		return this.getToken(PostgreSQLParser.INFO, 0);
	}
	public NOTICE(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOTICE, 0);
	}
	public WARNING(): TerminalNode {
		return this.getToken(PostgreSQLParser.WARNING, 0);
	}
	public EXCEPTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXCEPTION, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_stmt_raise_level;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_stmt_raise_level) {
	 		listener.enterOpt_stmt_raise_level(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_stmt_raise_level) {
	 		listener.exitOpt_stmt_raise_level(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_stmt_raise_level) {
			return visitor.visitOpt_stmt_raise_level(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_raise_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
	public a_expr_list(): A_exprContext[] {
		return this.getTypedRuleContexts(A_exprContext) as A_exprContext[];
	}
	public a_expr(i: number): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, i) as A_exprContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_raise_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_raise_list) {
	 		listener.enterOpt_raise_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_raise_list) {
	 		listener.exitOpt_raise_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_raise_list) {
			return visitor.visitOpt_raise_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_raise_usingContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public USING(): TerminalNode {
		return this.getToken(PostgreSQLParser.USING, 0);
	}
	public opt_raise_using_elem_list(): Opt_raise_using_elem_listContext {
		return this.getTypedRuleContext(Opt_raise_using_elem_listContext, 0) as Opt_raise_using_elem_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_raise_using;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_raise_using) {
	 		listener.enterOpt_raise_using(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_raise_using) {
	 		listener.exitOpt_raise_using(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_raise_using) {
			return visitor.visitOpt_raise_using(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_raise_using_elemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public identifier(): IdentifierContext {
		return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext;
	}
	public EQUAL(): TerminalNode {
		return this.getToken(PostgreSQLParser.EQUAL, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_raise_using_elem;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_raise_using_elem) {
	 		listener.enterOpt_raise_using_elem(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_raise_using_elem) {
	 		listener.exitOpt_raise_using_elem(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_raise_using_elem) {
			return visitor.visitOpt_raise_using_elem(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_raise_using_elem_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public opt_raise_using_elem_list(): Opt_raise_using_elemContext[] {
		return this.getTypedRuleContexts(Opt_raise_using_elemContext) as Opt_raise_using_elemContext[];
	}
	public opt_raise_using_elem(i: number): Opt_raise_using_elemContext {
		return this.getTypedRuleContext(Opt_raise_using_elemContext, i) as Opt_raise_using_elemContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_raise_using_elem_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_raise_using_elem_list) {
	 		listener.enterOpt_raise_using_elem_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_raise_using_elem_list) {
	 		listener.exitOpt_raise_using_elem_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_raise_using_elem_list) {
			return visitor.visitOpt_raise_using_elem_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Stmt_assertContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ASSERT(): TerminalNode {
		return this.getToken(PostgreSQLParser.ASSERT, 0);
	}
	public sql_expression(): Sql_expressionContext {
		return this.getTypedRuleContext(Sql_expressionContext, 0) as Sql_expressionContext;
	}
	public opt_stmt_assert_message(): Opt_stmt_assert_messageContext {
		return this.getTypedRuleContext(Opt_stmt_assert_messageContext, 0) as Opt_stmt_assert_messageContext;
	}
	public SEMI(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEMI, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_stmt_assert;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterStmt_assert) {
	 		listener.enterStmt_assert(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitStmt_assert) {
	 		listener.exitStmt_assert(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitStmt_assert) {
			return visitor.visitStmt_assert(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_stmt_assert_messageContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public COMMA(): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, 0);
	}
	public sql_expression(): Sql_expressionContext {
		return this.getTypedRuleContext(Sql_expressionContext, 0) as Sql_expressionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_stmt_assert_message;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_stmt_assert_message) {
	 		listener.enterOpt_stmt_assert_message(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_stmt_assert_message) {
	 		listener.exitOpt_stmt_assert_message(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_stmt_assert_message) {
			return visitor.visitOpt_stmt_assert_message(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Loop_bodyContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public LOOP_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.LOOP);
	}
	public LOOP(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.LOOP, i);
	}
	public proc_sect(): Proc_sectContext {
		return this.getTypedRuleContext(Proc_sectContext, 0) as Proc_sectContext;
	}
	public END_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.END_P, 0);
	}
	public opt_label(): Opt_labelContext {
		return this.getTypedRuleContext(Opt_labelContext, 0) as Opt_labelContext;
	}
	public SEMI(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEMI, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_loop_body;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterLoop_body) {
	 		listener.enterLoop_body(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitLoop_body) {
	 		listener.exitLoop_body(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitLoop_body) {
			return visitor.visitLoop_body(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Stmt_execsqlContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public make_execsql_stmt(): Make_execsql_stmtContext {
		return this.getTypedRuleContext(Make_execsql_stmtContext, 0) as Make_execsql_stmtContext;
	}
	public SEMI(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEMI, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_stmt_execsql;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterStmt_execsql) {
	 		listener.enterStmt_execsql(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitStmt_execsql) {
	 		listener.exitStmt_execsql(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitStmt_execsql) {
			return visitor.visitStmt_execsql(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Stmt_dynexecuteContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public EXECUTE(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXECUTE, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public SEMI(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEMI, 0);
	}
	public opt_execute_into(): Opt_execute_intoContext {
		return this.getTypedRuleContext(Opt_execute_intoContext, 0) as Opt_execute_intoContext;
	}
	public opt_execute_using(): Opt_execute_usingContext {
		return this.getTypedRuleContext(Opt_execute_usingContext, 0) as Opt_execute_usingContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_stmt_dynexecute;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterStmt_dynexecute) {
	 		listener.enterStmt_dynexecute(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitStmt_dynexecute) {
	 		listener.exitStmt_dynexecute(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitStmt_dynexecute) {
			return visitor.visitStmt_dynexecute(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_execute_usingContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public USING(): TerminalNode {
		return this.getToken(PostgreSQLParser.USING, 0);
	}
	public opt_execute_using_list(): Opt_execute_using_listContext {
		return this.getTypedRuleContext(Opt_execute_using_listContext, 0) as Opt_execute_using_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_execute_using;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_execute_using) {
	 		listener.enterOpt_execute_using(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_execute_using) {
	 		listener.exitOpt_execute_using(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_execute_using) {
			return visitor.visitOpt_execute_using(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_execute_using_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr_list(): A_exprContext[] {
		return this.getTypedRuleContexts(A_exprContext) as A_exprContext[];
	}
	public a_expr(i: number): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, i) as A_exprContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_execute_using_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_execute_using_list) {
	 		listener.enterOpt_execute_using_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_execute_using_list) {
	 		listener.exitOpt_execute_using_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_execute_using_list) {
			return visitor.visitOpt_execute_using_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_execute_intoContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public INTO(): TerminalNode {
		return this.getToken(PostgreSQLParser.INTO, 0);
	}
	public into_target(): Into_targetContext {
		return this.getTypedRuleContext(Into_targetContext, 0) as Into_targetContext;
	}
	public STRICT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.STRICT_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_execute_into;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_execute_into) {
	 		listener.enterOpt_execute_into(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_execute_into) {
	 		listener.exitOpt_execute_into(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_execute_into) {
			return visitor.visitOpt_execute_into(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Stmt_openContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public OPEN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN, 0);
	}
	public SEMI(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEMI, 0);
	}
	public cursor_variable(): Cursor_variableContext {
		return this.getTypedRuleContext(Cursor_variableContext, 0) as Cursor_variableContext;
	}
	public opt_scroll_option(): Opt_scroll_optionContext {
		return this.getTypedRuleContext(Opt_scroll_optionContext, 0) as Opt_scroll_optionContext;
	}
	public FOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.FOR, 0);
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
	public selectstmt(): SelectstmtContext {
		return this.getTypedRuleContext(SelectstmtContext, 0) as SelectstmtContext;
	}
	public EXECUTE(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXECUTE, 0);
	}
	public sql_expression(): Sql_expressionContext {
		return this.getTypedRuleContext(Sql_expressionContext, 0) as Sql_expressionContext;
	}
	public opt_open_using(): Opt_open_usingContext {
		return this.getTypedRuleContext(Opt_open_usingContext, 0) as Opt_open_usingContext;
	}
	public OPEN_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN_PAREN, 0);
	}
	public opt_open_bound_list(): Opt_open_bound_listContext {
		return this.getTypedRuleContext(Opt_open_bound_listContext, 0) as Opt_open_bound_listContext;
	}
	public CLOSE_PAREN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE_PAREN, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_stmt_open;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterStmt_open) {
	 		listener.enterStmt_open(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitStmt_open) {
	 		listener.exitStmt_open(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitStmt_open) {
			return visitor.visitStmt_open(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_open_bound_list_itemContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
	public COLON_EQUALS(): TerminalNode {
		return this.getToken(PostgreSQLParser.COLON_EQUALS, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_open_bound_list_item;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_open_bound_list_item) {
	 		listener.enterOpt_open_bound_list_item(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_open_bound_list_item) {
	 		listener.exitOpt_open_bound_list_item(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_open_bound_list_item) {
			return visitor.visitOpt_open_bound_list_item(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_open_bound_listContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public opt_open_bound_list_item_list(): Opt_open_bound_list_itemContext[] {
		return this.getTypedRuleContexts(Opt_open_bound_list_itemContext) as Opt_open_bound_list_itemContext[];
	}
	public opt_open_bound_list_item(i: number): Opt_open_bound_list_itemContext {
		return this.getTypedRuleContext(Opt_open_bound_list_itemContext, i) as Opt_open_bound_list_itemContext;
	}
	public COMMA_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.COMMA);
	}
	public COMMA(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMA, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_open_bound_list;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_open_bound_list) {
	 		listener.enterOpt_open_bound_list(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_open_bound_list) {
	 		listener.exitOpt_open_bound_list(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_open_bound_list) {
			return visitor.visitOpt_open_bound_list(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_open_usingContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public USING(): TerminalNode {
		return this.getToken(PostgreSQLParser.USING, 0);
	}
	public expr_list(): Expr_listContext {
		return this.getTypedRuleContext(Expr_listContext, 0) as Expr_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_open_using;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_open_using) {
	 		listener.enterOpt_open_using(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_open_using) {
	 		listener.exitOpt_open_using(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_open_using) {
			return visitor.visitOpt_open_using(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_scroll_optionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public opt_scroll_option_no(): Opt_scroll_option_noContext {
		return this.getTypedRuleContext(Opt_scroll_option_noContext, 0) as Opt_scroll_option_noContext;
	}
	public SCROLL(): TerminalNode {
		return this.getToken(PostgreSQLParser.SCROLL, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_scroll_option;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_scroll_option) {
	 		listener.enterOpt_scroll_option(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_scroll_option) {
	 		listener.exitOpt_scroll_option(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_scroll_option) {
			return visitor.visitOpt_scroll_option(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_scroll_option_noContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public NO(): TerminalNode {
		return this.getToken(PostgreSQLParser.NO, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_scroll_option_no;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_scroll_option_no) {
	 		listener.enterOpt_scroll_option_no(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_scroll_option_no) {
	 		listener.exitOpt_scroll_option_no(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_scroll_option_no) {
			return visitor.visitOpt_scroll_option_no(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Stmt_fetchContext extends ParserRuleContext {
	public _direction!: Opt_fetch_directionContext;
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public FETCH(): TerminalNode {
		return this.getToken(PostgreSQLParser.FETCH, 0);
	}
	public opt_cursor_from(): Opt_cursor_fromContext {
		return this.getTypedRuleContext(Opt_cursor_fromContext, 0) as Opt_cursor_fromContext;
	}
	public cursor_variable(): Cursor_variableContext {
		return this.getTypedRuleContext(Cursor_variableContext, 0) as Cursor_variableContext;
	}
	public INTO(): TerminalNode {
		return this.getToken(PostgreSQLParser.INTO, 0);
	}
	public into_target(): Into_targetContext {
		return this.getTypedRuleContext(Into_targetContext, 0) as Into_targetContext;
	}
	public SEMI(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEMI, 0);
	}
	public opt_fetch_direction(): Opt_fetch_directionContext {
		return this.getTypedRuleContext(Opt_fetch_directionContext, 0) as Opt_fetch_directionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_stmt_fetch;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterStmt_fetch) {
	 		listener.enterStmt_fetch(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitStmt_fetch) {
	 		listener.exitStmt_fetch(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitStmt_fetch) {
			return visitor.visitStmt_fetch(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Into_targetContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public expr_list(): Expr_listContext {
		return this.getTypedRuleContext(Expr_listContext, 0) as Expr_listContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_into_target;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterInto_target) {
	 		listener.enterInto_target(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitInto_target) {
	 		listener.exitInto_target(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitInto_target) {
			return visitor.visitInto_target(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_cursor_fromContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public FROM(): TerminalNode {
		return this.getToken(PostgreSQLParser.FROM, 0);
	}
	public IN_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.IN_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_cursor_from;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_cursor_from) {
	 		listener.enterOpt_cursor_from(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_cursor_from) {
	 		listener.exitOpt_cursor_from(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_cursor_from) {
			return visitor.visitOpt_cursor_from(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_fetch_directionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public NEXT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NEXT, 0);
	}
	public PRIOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.PRIOR, 0);
	}
	public FIRST_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.FIRST_P, 0);
	}
	public LAST_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.LAST_P, 0);
	}
	public ABSOLUTE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.ABSOLUTE_P, 0);
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
	public RELATIVE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.RELATIVE_P, 0);
	}
	public ALL(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALL, 0);
	}
	public FORWARD(): TerminalNode {
		return this.getToken(PostgreSQLParser.FORWARD, 0);
	}
	public BACKWARD(): TerminalNode {
		return this.getToken(PostgreSQLParser.BACKWARD, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_fetch_direction;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_fetch_direction) {
	 		listener.enterOpt_fetch_direction(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_fetch_direction) {
	 		listener.exitOpt_fetch_direction(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_fetch_direction) {
			return visitor.visitOpt_fetch_direction(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Stmt_moveContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public MOVE(): TerminalNode {
		return this.getToken(PostgreSQLParser.MOVE, 0);
	}
	public opt_fetch_direction(): Opt_fetch_directionContext {
		return this.getTypedRuleContext(Opt_fetch_directionContext, 0) as Opt_fetch_directionContext;
	}
	public cursor_variable(): Cursor_variableContext {
		return this.getTypedRuleContext(Cursor_variableContext, 0) as Cursor_variableContext;
	}
	public SEMI(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEMI, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_stmt_move;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterStmt_move) {
	 		listener.enterStmt_move(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitStmt_move) {
	 		listener.exitStmt_move(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitStmt_move) {
			return visitor.visitStmt_move(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Stmt_closeContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public CLOSE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE, 0);
	}
	public cursor_variable(): Cursor_variableContext {
		return this.getTypedRuleContext(Cursor_variableContext, 0) as Cursor_variableContext;
	}
	public SEMI(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEMI, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_stmt_close;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterStmt_close) {
	 		listener.enterStmt_close(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitStmt_close) {
	 		listener.exitStmt_close(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitStmt_close) {
			return visitor.visitStmt_close(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Stmt_nullContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public NULL_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.NULL_P, 0);
	}
	public SEMI(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEMI, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_stmt_null;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterStmt_null) {
	 		listener.enterStmt_null(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitStmt_null) {
	 		listener.exitStmt_null(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitStmt_null) {
			return visitor.visitStmt_null(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Stmt_commitContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public COMMIT(): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMIT, 0);
	}
	public plsql_opt_transaction_chain(): Plsql_opt_transaction_chainContext {
		return this.getTypedRuleContext(Plsql_opt_transaction_chainContext, 0) as Plsql_opt_transaction_chainContext;
	}
	public SEMI(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEMI, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_stmt_commit;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterStmt_commit) {
	 		listener.enterStmt_commit(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitStmt_commit) {
	 		listener.exitStmt_commit(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitStmt_commit) {
			return visitor.visitStmt_commit(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Stmt_rollbackContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ROLLBACK(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROLLBACK, 0);
	}
	public plsql_opt_transaction_chain(): Plsql_opt_transaction_chainContext {
		return this.getTypedRuleContext(Plsql_opt_transaction_chainContext, 0) as Plsql_opt_transaction_chainContext;
	}
	public SEMI(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEMI, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_stmt_rollback;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterStmt_rollback) {
	 		listener.enterStmt_rollback(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitStmt_rollback) {
	 		listener.exitStmt_rollback(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitStmt_rollback) {
			return visitor.visitStmt_rollback(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Plsql_opt_transaction_chainContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public AND(): TerminalNode {
		return this.getToken(PostgreSQLParser.AND, 0);
	}
	public CHAIN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CHAIN, 0);
	}
	public NO(): TerminalNode {
		return this.getToken(PostgreSQLParser.NO, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_plsql_opt_transaction_chain;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterPlsql_opt_transaction_chain) {
	 		listener.enterPlsql_opt_transaction_chain(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitPlsql_opt_transaction_chain) {
	 		listener.exitPlsql_opt_transaction_chain(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitPlsql_opt_transaction_chain) {
			return visitor.visitPlsql_opt_transaction_chain(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Stmt_setContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public SET(): TerminalNode {
		return this.getToken(PostgreSQLParser.SET, 0);
	}
	public any_name(): Any_nameContext {
		return this.getTypedRuleContext(Any_nameContext, 0) as Any_nameContext;
	}
	public TO(): TerminalNode {
		return this.getToken(PostgreSQLParser.TO, 0);
	}
	public DEFAULT(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEFAULT, 0);
	}
	public SEMI(): TerminalNode {
		return this.getToken(PostgreSQLParser.SEMI, 0);
	}
	public RESET(): TerminalNode {
		return this.getToken(PostgreSQLParser.RESET, 0);
	}
	public ALL(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALL, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_stmt_set;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterStmt_set) {
	 		listener.enterStmt_set(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitStmt_set) {
	 		listener.exitStmt_set(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitStmt_set) {
			return visitor.visitStmt_set(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Cursor_variableContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
	public PARAM(): TerminalNode {
		return this.getToken(PostgreSQLParser.PARAM, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_cursor_variable;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterCursor_variable) {
	 		listener.enterCursor_variable(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitCursor_variable) {
	 		listener.exitCursor_variable(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitCursor_variable) {
			return visitor.visitCursor_variable(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Exception_sectContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public EXCEPTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXCEPTION, 0);
	}
	public proc_exceptions(): Proc_exceptionsContext {
		return this.getTypedRuleContext(Proc_exceptionsContext, 0) as Proc_exceptionsContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_exception_sect;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterException_sect) {
	 		listener.enterException_sect(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitException_sect) {
	 		listener.exitException_sect(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitException_sect) {
			return visitor.visitException_sect(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Proc_exceptionsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public proc_exception_list(): Proc_exceptionContext[] {
		return this.getTypedRuleContexts(Proc_exceptionContext) as Proc_exceptionContext[];
	}
	public proc_exception(i: number): Proc_exceptionContext {
		return this.getTypedRuleContext(Proc_exceptionContext, i) as Proc_exceptionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_proc_exceptions;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterProc_exceptions) {
	 		listener.enterProc_exceptions(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitProc_exceptions) {
	 		listener.exitProc_exceptions(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitProc_exceptions) {
			return visitor.visitProc_exceptions(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Proc_exceptionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public WHEN(): TerminalNode {
		return this.getToken(PostgreSQLParser.WHEN, 0);
	}
	public proc_conditions(): Proc_conditionsContext {
		return this.getTypedRuleContext(Proc_conditionsContext, 0) as Proc_conditionsContext;
	}
	public THEN(): TerminalNode {
		return this.getToken(PostgreSQLParser.THEN, 0);
	}
	public proc_sect(): Proc_sectContext {
		return this.getTypedRuleContext(Proc_sectContext, 0) as Proc_sectContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_proc_exception;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterProc_exception) {
	 		listener.enterProc_exception(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitProc_exception) {
	 		listener.exitProc_exception(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitProc_exception) {
			return visitor.visitProc_exception(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Proc_conditionsContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public proc_condition_list(): Proc_conditionContext[] {
		return this.getTypedRuleContexts(Proc_conditionContext) as Proc_conditionContext[];
	}
	public proc_condition(i: number): Proc_conditionContext {
		return this.getTypedRuleContext(Proc_conditionContext, i) as Proc_conditionContext;
	}
	public OR_list(): TerminalNode[] {
	    	return this.getTokens(PostgreSQLParser.OR);
	}
	public OR(i: number): TerminalNode {
		return this.getToken(PostgreSQLParser.OR, i);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_proc_conditions;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterProc_conditions) {
	 		listener.enterProc_conditions(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitProc_conditions) {
	 		listener.exitProc_conditions(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitProc_conditions) {
			return visitor.visitProc_conditions(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Proc_conditionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public any_identifier(): Any_identifierContext {
		return this.getTypedRuleContext(Any_identifierContext, 0) as Any_identifierContext;
	}
	public SQLSTATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.SQLSTATE, 0);
	}
	public sconst(): SconstContext {
		return this.getTypedRuleContext(SconstContext, 0) as SconstContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_proc_condition;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterProc_condition) {
	 		listener.enterProc_condition(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitProc_condition) {
	 		listener.exitProc_condition(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitProc_condition) {
			return visitor.visitProc_condition(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_block_labelContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public label_decl(): Label_declContext {
		return this.getTypedRuleContext(Label_declContext, 0) as Label_declContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_block_label;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_block_label) {
	 		listener.enterOpt_block_label(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_block_label) {
	 		listener.exitOpt_block_label(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_block_label) {
			return visitor.visitOpt_block_label(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_loop_labelContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public label_decl(): Label_declContext {
		return this.getTypedRuleContext(Label_declContext, 0) as Label_declContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_loop_label;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_loop_label) {
	 		listener.enterOpt_loop_label(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_loop_label) {
	 		listener.exitOpt_loop_label(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_loop_label) {
			return visitor.visitOpt_loop_label(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_labelContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public any_identifier(): Any_identifierContext {
		return this.getTypedRuleContext(Any_identifierContext, 0) as Any_identifierContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_label;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_label) {
	 		listener.enterOpt_label(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_label) {
	 		listener.exitOpt_label(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_label) {
			return visitor.visitOpt_label(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_exitcondContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public WHEN(): TerminalNode {
		return this.getToken(PostgreSQLParser.WHEN, 0);
	}
	public expr_until_semi(): Expr_until_semiContext {
		return this.getTypedRuleContext(Expr_until_semiContext, 0) as Expr_until_semiContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_exitcond;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_exitcond) {
	 		listener.enterOpt_exitcond(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_exitcond) {
	 		listener.exitOpt_exitcond(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_exitcond) {
			return visitor.visitOpt_exitcond(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Any_identifierContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public colid(): ColidContext {
		return this.getTypedRuleContext(ColidContext, 0) as ColidContext;
	}
	public plsql_unreserved_keyword(): Plsql_unreserved_keywordContext {
		return this.getTypedRuleContext(Plsql_unreserved_keywordContext, 0) as Plsql_unreserved_keywordContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_any_identifier;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterAny_identifier) {
	 		listener.enterAny_identifier(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitAny_identifier) {
	 		listener.exitAny_identifier(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitAny_identifier) {
			return visitor.visitAny_identifier(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Plsql_unreserved_keywordContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public ABSOLUTE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.ABSOLUTE_P, 0);
	}
	public ALIAS(): TerminalNode {
		return this.getToken(PostgreSQLParser.ALIAS, 0);
	}
	public AND(): TerminalNode {
		return this.getToken(PostgreSQLParser.AND, 0);
	}
	public ARRAY(): TerminalNode {
		return this.getToken(PostgreSQLParser.ARRAY, 0);
	}
	public ASSERT(): TerminalNode {
		return this.getToken(PostgreSQLParser.ASSERT, 0);
	}
	public BACKWARD(): TerminalNode {
		return this.getToken(PostgreSQLParser.BACKWARD, 0);
	}
	public CALL(): TerminalNode {
		return this.getToken(PostgreSQLParser.CALL, 0);
	}
	public CHAIN(): TerminalNode {
		return this.getToken(PostgreSQLParser.CHAIN, 0);
	}
	public CLOSE(): TerminalNode {
		return this.getToken(PostgreSQLParser.CLOSE, 0);
	}
	public COLLATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.COLLATE, 0);
	}
	public COLUMN(): TerminalNode {
		return this.getToken(PostgreSQLParser.COLUMN, 0);
	}
	public COMMIT(): TerminalNode {
		return this.getToken(PostgreSQLParser.COMMIT, 0);
	}
	public CONSTANT(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONSTANT, 0);
	}
	public CONSTRAINT(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONSTRAINT, 0);
	}
	public CONTINUE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.CONTINUE_P, 0);
	}
	public CURRENT_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.CURRENT_P, 0);
	}
	public CURSOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.CURSOR, 0);
	}
	public DEBUG(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEBUG, 0);
	}
	public DEFAULT(): TerminalNode {
		return this.getToken(PostgreSQLParser.DEFAULT, 0);
	}
	public DIAGNOSTICS(): TerminalNode {
		return this.getToken(PostgreSQLParser.DIAGNOSTICS, 0);
	}
	public DO(): TerminalNode {
		return this.getToken(PostgreSQLParser.DO, 0);
	}
	public DUMP(): TerminalNode {
		return this.getToken(PostgreSQLParser.DUMP, 0);
	}
	public ELSIF(): TerminalNode {
		return this.getToken(PostgreSQLParser.ELSIF, 0);
	}
	public ERROR(): TerminalNode {
		return this.getToken(PostgreSQLParser.ERROR, 0);
	}
	public EXCEPTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXCEPTION, 0);
	}
	public EXIT(): TerminalNode {
		return this.getToken(PostgreSQLParser.EXIT, 0);
	}
	public FETCH(): TerminalNode {
		return this.getToken(PostgreSQLParser.FETCH, 0);
	}
	public FIRST_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.FIRST_P, 0);
	}
	public FORWARD(): TerminalNode {
		return this.getToken(PostgreSQLParser.FORWARD, 0);
	}
	public GET(): TerminalNode {
		return this.getToken(PostgreSQLParser.GET, 0);
	}
	public INFO(): TerminalNode {
		return this.getToken(PostgreSQLParser.INFO, 0);
	}
	public INSERT(): TerminalNode {
		return this.getToken(PostgreSQLParser.INSERT, 0);
	}
	public IS(): TerminalNode {
		return this.getToken(PostgreSQLParser.IS, 0);
	}
	public LAST_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.LAST_P, 0);
	}
	public LOG(): TerminalNode {
		return this.getToken(PostgreSQLParser.LOG, 0);
	}
	public MOVE(): TerminalNode {
		return this.getToken(PostgreSQLParser.MOVE, 0);
	}
	public NEXT(): TerminalNode {
		return this.getToken(PostgreSQLParser.NEXT, 0);
	}
	public NO(): TerminalNode {
		return this.getToken(PostgreSQLParser.NO, 0);
	}
	public NOTICE(): TerminalNode {
		return this.getToken(PostgreSQLParser.NOTICE, 0);
	}
	public OPEN(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPEN, 0);
	}
	public OPTION(): TerminalNode {
		return this.getToken(PostgreSQLParser.OPTION, 0);
	}
	public PERFORM(): TerminalNode {
		return this.getToken(PostgreSQLParser.PERFORM, 0);
	}
	public PRINT_STRICT_PARAMS(): TerminalNode {
		return this.getToken(PostgreSQLParser.PRINT_STRICT_PARAMS, 0);
	}
	public PRIOR(): TerminalNode {
		return this.getToken(PostgreSQLParser.PRIOR, 0);
	}
	public QUERY(): TerminalNode {
		return this.getToken(PostgreSQLParser.QUERY, 0);
	}
	public RAISE(): TerminalNode {
		return this.getToken(PostgreSQLParser.RAISE, 0);
	}
	public RELATIVE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.RELATIVE_P, 0);
	}
	public RESET(): TerminalNode {
		return this.getToken(PostgreSQLParser.RESET, 0);
	}
	public RETURN(): TerminalNode {
		return this.getToken(PostgreSQLParser.RETURN, 0);
	}
	public REVERSE(): TerminalNode {
		return this.getToken(PostgreSQLParser.REVERSE, 0);
	}
	public ROLLBACK(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROLLBACK, 0);
	}
	public ROWTYPE(): TerminalNode {
		return this.getToken(PostgreSQLParser.ROWTYPE, 0);
	}
	public SCHEMA(): TerminalNode {
		return this.getToken(PostgreSQLParser.SCHEMA, 0);
	}
	public SCROLL(): TerminalNode {
		return this.getToken(PostgreSQLParser.SCROLL, 0);
	}
	public SET(): TerminalNode {
		return this.getToken(PostgreSQLParser.SET, 0);
	}
	public SLICE(): TerminalNode {
		return this.getToken(PostgreSQLParser.SLICE, 0);
	}
	public SQLSTATE(): TerminalNode {
		return this.getToken(PostgreSQLParser.SQLSTATE, 0);
	}
	public STACKED(): TerminalNode {
		return this.getToken(PostgreSQLParser.STACKED, 0);
	}
	public TABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.TABLE, 0);
	}
	public TYPE_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.TYPE_P, 0);
	}
	public USE_COLUMN(): TerminalNode {
		return this.getToken(PostgreSQLParser.USE_COLUMN, 0);
	}
	public USE_VARIABLE(): TerminalNode {
		return this.getToken(PostgreSQLParser.USE_VARIABLE, 0);
	}
	public VARIABLE_CONFLICT(): TerminalNode {
		return this.getToken(PostgreSQLParser.VARIABLE_CONFLICT, 0);
	}
	public WARNING(): TerminalNode {
		return this.getToken(PostgreSQLParser.WARNING, 0);
	}
	public OUTER_P(): TerminalNode {
		return this.getToken(PostgreSQLParser.OUTER_P, 0);
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_plsql_unreserved_keyword;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterPlsql_unreserved_keyword) {
	 		listener.enterPlsql_unreserved_keyword(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitPlsql_unreserved_keyword) {
	 		listener.exitPlsql_unreserved_keyword(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitPlsql_unreserved_keyword) {
			return visitor.visitPlsql_unreserved_keyword(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Sql_expressionContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public opt_target_list(): Opt_target_listContext {
		return this.getTypedRuleContext(Opt_target_listContext, 0) as Opt_target_listContext;
	}
	public into_clause(): Into_clauseContext {
		return this.getTypedRuleContext(Into_clauseContext, 0) as Into_clauseContext;
	}
	public from_clause(): From_clauseContext {
		return this.getTypedRuleContext(From_clauseContext, 0) as From_clauseContext;
	}
	public where_clause(): Where_clauseContext {
		return this.getTypedRuleContext(Where_clauseContext, 0) as Where_clauseContext;
	}
	public group_clause(): Group_clauseContext {
		return this.getTypedRuleContext(Group_clauseContext, 0) as Group_clauseContext;
	}
	public having_clause(): Having_clauseContext {
		return this.getTypedRuleContext(Having_clauseContext, 0) as Having_clauseContext;
	}
	public window_clause(): Window_clauseContext {
		return this.getTypedRuleContext(Window_clauseContext, 0) as Window_clauseContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_sql_expression;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterSql_expression) {
	 		listener.enterSql_expression(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitSql_expression) {
	 		listener.exitSql_expression(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitSql_expression) {
			return visitor.visitSql_expression(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Expr_until_thenContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public sql_expression(): Sql_expressionContext {
		return this.getTypedRuleContext(Sql_expressionContext, 0) as Sql_expressionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_expr_until_then;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterExpr_until_then) {
	 		listener.enterExpr_until_then(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitExpr_until_then) {
	 		listener.exitExpr_until_then(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitExpr_until_then) {
			return visitor.visitExpr_until_then(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Expr_until_semiContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public sql_expression(): Sql_expressionContext {
		return this.getTypedRuleContext(Sql_expressionContext, 0) as Sql_expressionContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_expr_until_semi;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterExpr_until_semi) {
	 		listener.enterExpr_until_semi(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitExpr_until_semi) {
	 		listener.exitExpr_until_semi(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitExpr_until_semi) {
			return visitor.visitExpr_until_semi(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Expr_until_rightbracketContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_expr_until_rightbracket;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterExpr_until_rightbracket) {
	 		listener.enterExpr_until_rightbracket(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitExpr_until_rightbracket) {
	 		listener.exitExpr_until_rightbracket(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitExpr_until_rightbracket) {
			return visitor.visitExpr_until_rightbracket(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Expr_until_loopContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public a_expr(): A_exprContext {
		return this.getTypedRuleContext(A_exprContext, 0) as A_exprContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_expr_until_loop;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterExpr_until_loop) {
	 		listener.enterExpr_until_loop(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitExpr_until_loop) {
	 		listener.exitExpr_until_loop(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitExpr_until_loop) {
			return visitor.visitExpr_until_loop(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Make_execsql_stmtContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public stmt(): StmtContext {
		return this.getTypedRuleContext(StmtContext, 0) as StmtContext;
	}
	public opt_returning_clause_into(): Opt_returning_clause_intoContext {
		return this.getTypedRuleContext(Opt_returning_clause_intoContext, 0) as Opt_returning_clause_intoContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_make_execsql_stmt;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterMake_execsql_stmt) {
	 		listener.enterMake_execsql_stmt(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitMake_execsql_stmt) {
	 		listener.exitMake_execsql_stmt(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitMake_execsql_stmt) {
			return visitor.visitMake_execsql_stmt(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}


export class Opt_returning_clause_intoContext extends ParserRuleContext {
	constructor(parser?: PostgreSQLParser, parent?: ParserRuleContext, invokingState?: number) {
		super(parent, invokingState);
    	this.parser = parser;
	}
	public INTO(): TerminalNode {
		return this.getToken(PostgreSQLParser.INTO, 0);
	}
	public opt_strict(): Opt_strictContext {
		return this.getTypedRuleContext(Opt_strictContext, 0) as Opt_strictContext;
	}
	public into_target(): Into_targetContext {
		return this.getTypedRuleContext(Into_targetContext, 0) as Into_targetContext;
	}
    public get ruleIndex(): number {
    	return PostgreSQLParser.RULE_opt_returning_clause_into;
	}
	public enterRule(listener: PostgreSQLParserListener): void {
	    if(listener.enterOpt_returning_clause_into) {
	 		listener.enterOpt_returning_clause_into(this);
		}
	}
	public exitRule(listener: PostgreSQLParserListener): void {
	    if(listener.exitOpt_returning_clause_into) {
	 		listener.exitOpt_returning_clause_into(this);
		}
	}
	// @Override
	public accept<Result>(visitor: PostgreSQLParserVisitor<Result>): Result {
		if (visitor.visitOpt_returning_clause_into) {
			return visitor.visitOpt_returning_clause_into(this);
		} else {
			return visitor.visitChildren(this);
		}
	}
}
