diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-09 13:08:37 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-09 13:08:37 +0000 |
commit | 971e619d8602fa52b1bfcb3ea65b7ab96be85318 (patch) | |
tree | 26feb2498c72b796e07b86349d17f544046de279 /src/parser_bison.c | |
parent | Initial commit. (diff) | |
download | nftables-971e619d8602fa52b1bfcb3ea65b7ab96be85318.tar.xz nftables-971e619d8602fa52b1bfcb3ea65b7ab96be85318.zip |
Adding upstream version 1.0.9.upstream/1.0.9upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | src/parser_bison.c | 17491 |
1 files changed, 17491 insertions, 0 deletions
diff --git a/src/parser_bison.c b/src/parser_bison.c new file mode 100644 index 0000000..379f322 --- /dev/null +++ b/src/parser_bison.c @@ -0,0 +1,17491 @@ +/* A Bison parser, made by GNU Bison 3.7.5. */ + +/* Bison implementation for Yacc-like parsers in C + + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, + Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, + especially those whose name start with YY_ or yy_. They are + private implementation details that can be changed or removed. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output, and Bison version. */ +#define YYBISON 30705 + +/* Bison version string. */ +#define YYBISON_VERSION "3.7.5" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 1 + +/* Push parsers. */ +#define YYPUSH 0 + +/* Pull parsers. */ +#define YYPULL 1 + + +/* Substitute the variable and function names. */ +#define yyparse nft_parse +#define yylex nft_lex +#define yyerror nft_error +#define yydebug nft_debug +#define yynerrs nft_nerrs + +/* First part of user prologue. */ +#line 11 "parser_bison.y" + +#include <nft.h> + +#include <ctype.h> +#include <stddef.h> +#include <stdio.h> +#include <inttypes.h> +#include <syslog.h> +#include <netinet/ip.h> +#include <netinet/tcp.h> +#include <netinet/if_ether.h> +#include <linux/netfilter.h> +#include <linux/netfilter/nf_tables.h> +#include <linux/netfilter/nf_conntrack_tuple_common.h> +#include <linux/netfilter/nf_nat.h> +#include <linux/netfilter/nf_log.h> +#include <linux/netfilter/nfnetlink_osf.h> +#include <linux/netfilter/nf_synproxy.h> +#include <linux/xfrm.h> +#include <netinet/ip_icmp.h> +#include <netinet/icmp6.h> +#include <libnftnl/common.h> +#include <libnftnl/set.h> +#include <libnftnl/udata.h> + +#include <rule.h> +#include <statement.h> +#include <expression.h> +#include <headers.h> +#include <utils.h> +#include <parser.h> +#include <erec.h> +#include <sctp_chunk.h> + +#include "parser_bison.h" + +void parser_init(struct nft_ctx *nft, struct parser_state *state, + struct list_head *msgs, struct list_head *cmds, + struct scope *top_scope) +{ + memset(state, 0, sizeof(*state)); + state->msgs = msgs; + state->cmds = cmds; + state->scopes[0] = scope_init(top_scope, NULL); + init_list_head(&state->indesc_list); +} + +static void yyerror(struct location *loc, struct nft_ctx *nft, void *scanner, + struct parser_state *state, const char *s) +{ + erec_queue(error(loc, "%s", s), state->msgs); +} + +static struct scope *current_scope(const struct parser_state *state) +{ + return state->scopes[state->scope]; +} + +static int open_scope(struct parser_state *state, struct scope *scope) +{ + if (state->scope >= array_size(state->scopes) - 1) { + state->scope_err = true; + return -1; + } + + scope_init(scope, current_scope(state)); + state->scopes[++state->scope] = scope; + + return 0; +} + +static void close_scope(struct parser_state *state) +{ + if (state->scope_err || state->scope == 0) { + state->scope_err = false; + return; + } + + state->scope--; +} + +static void location_init(void *scanner, struct parser_state *state, + struct location *loc) +{ + memset(loc, 0, sizeof(*loc)); + loc->indesc = state->indesc; +} + +static void location_update(struct location *loc, struct location *rhs, int n) +{ + if (n) { + loc->indesc = rhs[n].indesc; + loc->token_offset = rhs[1].token_offset; + loc->line_offset = rhs[1].line_offset; + loc->first_line = rhs[1].first_line; + loc->first_column = rhs[1].first_column; + loc->last_line = rhs[n].last_line; + loc->last_column = rhs[n].last_column; + } else { + loc->indesc = rhs[0].indesc; + loc->token_offset = rhs[0].token_offset; + loc->line_offset = rhs[0].line_offset; + loc->first_line = loc->last_line = rhs[0].last_line; + loc->first_column = loc->last_column = rhs[0].last_column; + } +} + +static struct expr *handle_concat_expr(const struct location *loc, + struct expr *expr, + struct expr *expr_l, struct expr *expr_r, + struct location loc_rhs[3]) +{ + if (expr->etype != EXPR_CONCAT) { + expr = concat_expr_alloc(loc); + compound_expr_add(expr, expr_l); + } else { + location_update(&expr_r->location, loc_rhs, 2); + + expr = expr_l; + expr->location = *loc; + } + + compound_expr_add(expr, expr_r); + return expr; +} + +static bool already_set(const void *attr, const struct location *loc, + struct parser_state *state) +{ + if (!attr) + return false; + + erec_queue(error(loc, "You can only specify this once. This statement is duplicated."), + state->msgs); + return true; +} + +static struct expr *ifname_expr_alloc(const struct location *location, + struct list_head *queue, + const char *name) +{ + unsigned int length = strlen(name); + struct expr *expr; + + if (length == 0) { + xfree(name); + erec_queue(error(location, "empty interface name"), queue); + return NULL; + } + + if (length > 16) { + xfree(name); + erec_queue(error(location, "interface name too long"), queue); + return NULL; + } + + expr = constant_expr_alloc(location, &ifname_type, BYTEORDER_HOST_ENDIAN, + length * BITS_PER_BYTE, name); + + xfree(name); + + return expr; +} + +#define YYLLOC_DEFAULT(Current, Rhs, N) location_update(&Current, Rhs, N) + +#define symbol_value(loc, str) \ + symbol_expr_alloc(loc, SYMBOL_VALUE, current_scope(state), str) + +/* Declare those here to avoid compiler warnings */ +void nft_set_debug(int, void *); +int nft_lex(void *, void *, void *); + +#line 250 "parser_bison.c" + +# ifndef YY_CAST +# ifdef __cplusplus +# define YY_CAST(Type, Val) static_cast<Type> (Val) +# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val) +# else +# define YY_CAST(Type, Val) ((Type) (Val)) +# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) +# endif +# endif +# ifndef YY_NULLPTR +# if defined __cplusplus +# if 201103L <= __cplusplus +# define YY_NULLPTR nullptr +# else +# define YY_NULLPTR 0 +# endif +# else +# define YY_NULLPTR ((void*)0) +# endif +# endif + +/* Use api.header.include to #include this header + instead of duplicating it here. */ +#ifndef YY_NFT_PARSER_BISON_H_INCLUDED +# define YY_NFT_PARSER_BISON_H_INCLUDED +/* Debug traces. */ +#ifndef YYDEBUG +# define YYDEBUG 1 +#endif +#if YYDEBUG +extern int nft_debug; +#endif + +/* Token kinds. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + enum yytokentype + { + YYEMPTY = -2, + TOKEN_EOF = 0, /* "end of file" */ + YYerror = 256, /* error */ + YYUNDEF = 257, /* "invalid token" */ + JUNK = 258, /* "junk" */ + NEWLINE = 259, /* "newline" */ + COLON = 260, /* "colon" */ + SEMICOLON = 261, /* "semicolon" */ + COMMA = 262, /* "comma" */ + DOT = 263, /* "." */ + EQ = 264, /* "==" */ + NEQ = 265, /* "!=" */ + LT = 266, /* "<" */ + GT = 267, /* ">" */ + GTE = 268, /* ">=" */ + LTE = 269, /* "<=" */ + LSHIFT = 270, /* "<<" */ + RSHIFT = 271, /* ">>" */ + AMPERSAND = 272, /* "&" */ + CARET = 273, /* "^" */ + NOT = 274, /* "!" */ + SLASH = 275, /* "/" */ + ASTERISK = 276, /* "*" */ + DASH = 277, /* "-" */ + AT = 278, /* "@" */ + VMAP = 279, /* "vmap" */ + PLUS = 280, /* "+" */ + INCLUDE = 281, /* "include" */ + DEFINE = 282, /* "define" */ + REDEFINE = 283, /* "redefine" */ + UNDEFINE = 284, /* "undefine" */ + FIB = 285, /* "fib" */ + SOCKET = 286, /* "socket" */ + TRANSPARENT = 287, /* "transparent" */ + WILDCARD = 288, /* "wildcard" */ + CGROUPV2 = 289, /* "cgroupv2" */ + TPROXY = 290, /* "tproxy" */ + OSF = 291, /* "osf" */ + SYNPROXY = 292, /* "synproxy" */ + MSS = 293, /* "mss" */ + WSCALE = 294, /* "wscale" */ + TYPEOF = 295, /* "typeof" */ + HOOK = 296, /* "hook" */ + HOOKS = 297, /* "hooks" */ + DEVICE = 298, /* "device" */ + DEVICES = 299, /* "devices" */ + TABLE = 300, /* "table" */ + TABLES = 301, /* "tables" */ + CHAIN = 302, /* "chain" */ + CHAINS = 303, /* "chains" */ + RULE = 304, /* "rule" */ + RULES = 305, /* "rules" */ + SETS = 306, /* "sets" */ + SET = 307, /* "set" */ + ELEMENT = 308, /* "element" */ + MAP = 309, /* "map" */ + MAPS = 310, /* "maps" */ + FLOWTABLE = 311, /* "flowtable" */ + HANDLE = 312, /* "handle" */ + RULESET = 313, /* "ruleset" */ + TRACE = 314, /* "trace" */ + INET = 315, /* "inet" */ + NETDEV = 316, /* "netdev" */ + ADD = 317, /* "add" */ + UPDATE = 318, /* "update" */ + REPLACE = 319, /* "replace" */ + CREATE = 320, /* "create" */ + INSERT = 321, /* "insert" */ + DELETE = 322, /* "delete" */ + GET = 323, /* "get" */ + LIST = 324, /* "list" */ + RESET = 325, /* "reset" */ + FLUSH = 326, /* "flush" */ + RENAME = 327, /* "rename" */ + DESCRIBE = 328, /* "describe" */ + IMPORT = 329, /* "import" */ + EXPORT = 330, /* "export" */ + DESTROY = 331, /* "destroy" */ + MONITOR = 332, /* "monitor" */ + ALL = 333, /* "all" */ + ACCEPT = 334, /* "accept" */ + DROP = 335, /* "drop" */ + CONTINUE = 336, /* "continue" */ + JUMP = 337, /* "jump" */ + GOTO = 338, /* "goto" */ + RETURN = 339, /* "return" */ + TO = 340, /* "to" */ + CONSTANT = 341, /* "constant" */ + INTERVAL = 342, /* "interval" */ + DYNAMIC = 343, /* "dynamic" */ + AUTOMERGE = 344, /* "auto-merge" */ + TIMEOUT = 345, /* "timeout" */ + GC_INTERVAL = 346, /* "gc-interval" */ + ELEMENTS = 347, /* "elements" */ + EXPIRES = 348, /* "expires" */ + POLICY = 349, /* "policy" */ + MEMORY = 350, /* "memory" */ + PERFORMANCE = 351, /* "performance" */ + SIZE = 352, /* "size" */ + FLOW = 353, /* "flow" */ + OFFLOAD = 354, /* "offload" */ + METER = 355, /* "meter" */ + METERS = 356, /* "meters" */ + FLOWTABLES = 357, /* "flowtables" */ + NUM = 358, /* "number" */ + STRING = 359, /* "string" */ + QUOTED_STRING = 360, /* "quoted string" */ + ASTERISK_STRING = 361, /* "string with a trailing asterisk" */ + LL_HDR = 362, /* "ll" */ + NETWORK_HDR = 363, /* "nh" */ + TRANSPORT_HDR = 364, /* "th" */ + BRIDGE = 365, /* "bridge" */ + ETHER = 366, /* "ether" */ + SADDR = 367, /* "saddr" */ + DADDR = 368, /* "daddr" */ + TYPE = 369, /* "type" */ + VLAN = 370, /* "vlan" */ + ID = 371, /* "id" */ + CFI = 372, /* "cfi" */ + DEI = 373, /* "dei" */ + PCP = 374, /* "pcp" */ + ARP = 375, /* "arp" */ + HTYPE = 376, /* "htype" */ + PTYPE = 377, /* "ptype" */ + HLEN = 378, /* "hlen" */ + PLEN = 379, /* "plen" */ + OPERATION = 380, /* "operation" */ + IP = 381, /* "ip" */ + HDRVERSION = 382, /* "version" */ + HDRLENGTH = 383, /* "hdrlength" */ + DSCP = 384, /* "dscp" */ + ECN = 385, /* "ecn" */ + LENGTH = 386, /* "length" */ + FRAG_OFF = 387, /* "frag-off" */ + TTL = 388, /* "ttl" */ + PROTOCOL = 389, /* "protocol" */ + CHECKSUM = 390, /* "checksum" */ + PTR = 391, /* "ptr" */ + VALUE = 392, /* "value" */ + LSRR = 393, /* "lsrr" */ + RR = 394, /* "rr" */ + SSRR = 395, /* "ssrr" */ + RA = 396, /* "ra" */ + ICMP = 397, /* "icmp" */ + CODE = 398, /* "code" */ + SEQUENCE = 399, /* "seq" */ + GATEWAY = 400, /* "gateway" */ + MTU = 401, /* "mtu" */ + IGMP = 402, /* "igmp" */ + MRT = 403, /* "mrt" */ + OPTIONS = 404, /* "options" */ + IP6 = 405, /* "ip6" */ + PRIORITY = 406, /* "priority" */ + FLOWLABEL = 407, /* "flowlabel" */ + NEXTHDR = 408, /* "nexthdr" */ + HOPLIMIT = 409, /* "hoplimit" */ + ICMP6 = 410, /* "icmpv6" */ + PPTR = 411, /* "param-problem" */ + MAXDELAY = 412, /* "max-delay" */ + TADDR = 413, /* "taddr" */ + AH = 414, /* "ah" */ + RESERVED = 415, /* "reserved" */ + SPI = 416, /* "spi" */ + ESP = 417, /* "esp" */ + COMP = 418, /* "comp" */ + FLAGS = 419, /* "flags" */ + CPI = 420, /* "cpi" */ + PORT = 421, /* "port" */ + UDP = 422, /* "udp" */ + SPORT = 423, /* "sport" */ + DPORT = 424, /* "dport" */ + UDPLITE = 425, /* "udplite" */ + CSUMCOV = 426, /* "csumcov" */ + TCP = 427, /* "tcp" */ + ACKSEQ = 428, /* "ackseq" */ + DOFF = 429, /* "doff" */ + WINDOW = 430, /* "window" */ + URGPTR = 431, /* "urgptr" */ + OPTION = 432, /* "option" */ + ECHO = 433, /* "echo" */ + EOL = 434, /* "eol" */ + MPTCP = 435, /* "mptcp" */ + NOP = 436, /* "nop" */ + SACK = 437, /* "sack" */ + SACK0 = 438, /* "sack0" */ + SACK1 = 439, /* "sack1" */ + SACK2 = 440, /* "sack2" */ + SACK3 = 441, /* "sack3" */ + SACK_PERM = 442, /* "sack-permitted" */ + FASTOPEN = 443, /* "fastopen" */ + MD5SIG = 444, /* "md5sig" */ + TIMESTAMP = 445, /* "timestamp" */ + COUNT = 446, /* "count" */ + LEFT = 447, /* "left" */ + RIGHT = 448, /* "right" */ + TSVAL = 449, /* "tsval" */ + TSECR = 450, /* "tsecr" */ + SUBTYPE = 451, /* "subtype" */ + DCCP = 452, /* "dccp" */ + VXLAN = 453, /* "vxlan" */ + VNI = 454, /* "vni" */ + GRE = 455, /* "gre" */ + GRETAP = 456, /* "gretap" */ + GENEVE = 457, /* "geneve" */ + SCTP = 458, /* "sctp" */ + CHUNK = 459, /* "chunk" */ + DATA = 460, /* "data" */ + INIT = 461, /* "init" */ + INIT_ACK = 462, /* "init-ack" */ + HEARTBEAT = 463, /* "heartbeat" */ + HEARTBEAT_ACK = 464, /* "heartbeat-ack" */ + ABORT = 465, /* "abort" */ + SHUTDOWN = 466, /* "shutdown" */ + SHUTDOWN_ACK = 467, /* "shutdown-ack" */ + ERROR = 468, /* "error" */ + COOKIE_ECHO = 469, /* "cookie-echo" */ + COOKIE_ACK = 470, /* "cookie-ack" */ + ECNE = 471, /* "ecne" */ + CWR = 472, /* "cwr" */ + SHUTDOWN_COMPLETE = 473, /* "shutdown-complete" */ + ASCONF_ACK = 474, /* "asconf-ack" */ + FORWARD_TSN = 475, /* "forward-tsn" */ + ASCONF = 476, /* "asconf" */ + TSN = 477, /* "tsn" */ + STREAM = 478, /* "stream" */ + SSN = 479, /* "ssn" */ + PPID = 480, /* "ppid" */ + INIT_TAG = 481, /* "init-tag" */ + A_RWND = 482, /* "a-rwnd" */ + NUM_OSTREAMS = 483, /* "num-outbound-streams" */ + NUM_ISTREAMS = 484, /* "num-inbound-streams" */ + INIT_TSN = 485, /* "initial-tsn" */ + CUM_TSN_ACK = 486, /* "cum-tsn-ack" */ + NUM_GACK_BLOCKS = 487, /* "num-gap-ack-blocks" */ + NUM_DUP_TSNS = 488, /* "num-dup-tsns" */ + LOWEST_TSN = 489, /* "lowest-tsn" */ + SEQNO = 490, /* "seqno" */ + NEW_CUM_TSN = 491, /* "new-cum-tsn" */ + VTAG = 492, /* "vtag" */ + RT = 493, /* "rt" */ + RT0 = 494, /* "rt0" */ + RT2 = 495, /* "rt2" */ + RT4 = 496, /* "srh" */ + SEG_LEFT = 497, /* "seg-left" */ + ADDR = 498, /* "addr" */ + LAST_ENT = 499, /* "last-entry" */ + TAG = 500, /* "tag" */ + SID = 501, /* "sid" */ + HBH = 502, /* "hbh" */ + FRAG = 503, /* "frag" */ + RESERVED2 = 504, /* "reserved2" */ + MORE_FRAGMENTS = 505, /* "more-fragments" */ + DST = 506, /* "dst" */ + MH = 507, /* "mh" */ + META = 508, /* "meta" */ + MARK = 509, /* "mark" */ + IIF = 510, /* "iif" */ + IIFNAME = 511, /* "iifname" */ + IIFTYPE = 512, /* "iiftype" */ + OIF = 513, /* "oif" */ + OIFNAME = 514, /* "oifname" */ + OIFTYPE = 515, /* "oiftype" */ + SKUID = 516, /* "skuid" */ + SKGID = 517, /* "skgid" */ + NFTRACE = 518, /* "nftrace" */ + RTCLASSID = 519, /* "rtclassid" */ + IBRIPORT = 520, /* "ibriport" */ + OBRIPORT = 521, /* "obriport" */ + IBRIDGENAME = 522, /* "ibrname" */ + OBRIDGENAME = 523, /* "obrname" */ + PKTTYPE = 524, /* "pkttype" */ + CPU = 525, /* "cpu" */ + IIFGROUP = 526, /* "iifgroup" */ + OIFGROUP = 527, /* "oifgroup" */ + CGROUP = 528, /* "cgroup" */ + TIME = 529, /* "time" */ + CLASSID = 530, /* "classid" */ + NEXTHOP = 531, /* "nexthop" */ + CT = 532, /* "ct" */ + L3PROTOCOL = 533, /* "l3proto" */ + PROTO_SRC = 534, /* "proto-src" */ + PROTO_DST = 535, /* "proto-dst" */ + ZONE = 536, /* "zone" */ + DIRECTION = 537, /* "direction" */ + EVENT = 538, /* "event" */ + EXPECTATION = 539, /* "expectation" */ + EXPIRATION = 540, /* "expiration" */ + HELPER = 541, /* "helper" */ + LABEL = 542, /* "label" */ + STATE = 543, /* "state" */ + STATUS = 544, /* "status" */ + ORIGINAL = 545, /* "original" */ + REPLY = 546, /* "reply" */ + COUNTER = 547, /* "counter" */ + NAME = 548, /* "name" */ + PACKETS = 549, /* "packets" */ + BYTES = 550, /* "bytes" */ + AVGPKT = 551, /* "avgpkt" */ + LAST = 552, /* "last" */ + NEVER = 553, /* "never" */ + COUNTERS = 554, /* "counters" */ + QUOTAS = 555, /* "quotas" */ + LIMITS = 556, /* "limits" */ + SYNPROXYS = 557, /* "synproxys" */ + HELPERS = 558, /* "helpers" */ + LOG = 559, /* "log" */ + PREFIX = 560, /* "prefix" */ + GROUP = 561, /* "group" */ + SNAPLEN = 562, /* "snaplen" */ + QUEUE_THRESHOLD = 563, /* "queue-threshold" */ + LEVEL = 564, /* "level" */ + LIMIT = 565, /* "limit" */ + RATE = 566, /* "rate" */ + BURST = 567, /* "burst" */ + OVER = 568, /* "over" */ + UNTIL = 569, /* "until" */ + QUOTA = 570, /* "quota" */ + USED = 571, /* "used" */ + SECMARK = 572, /* "secmark" */ + SECMARKS = 573, /* "secmarks" */ + SECOND = 574, /* "second" */ + MINUTE = 575, /* "minute" */ + HOUR = 576, /* "hour" */ + DAY = 577, /* "day" */ + WEEK = 578, /* "week" */ + _REJECT = 579, /* "reject" */ + WITH = 580, /* "with" */ + ICMPX = 581, /* "icmpx" */ + SNAT = 582, /* "snat" */ + DNAT = 583, /* "dnat" */ + MASQUERADE = 584, /* "masquerade" */ + REDIRECT = 585, /* "redirect" */ + RANDOM = 586, /* "random" */ + FULLY_RANDOM = 587, /* "fully-random" */ + PERSISTENT = 588, /* "persistent" */ + QUEUE = 589, /* "queue" */ + QUEUENUM = 590, /* "num" */ + BYPASS = 591, /* "bypass" */ + FANOUT = 592, /* "fanout" */ + DUP = 593, /* "dup" */ + FWD = 594, /* "fwd" */ + NUMGEN = 595, /* "numgen" */ + INC = 596, /* "inc" */ + MOD = 597, /* "mod" */ + OFFSET = 598, /* "offset" */ + JHASH = 599, /* "jhash" */ + SYMHASH = 600, /* "symhash" */ + SEED = 601, /* "seed" */ + POSITION = 602, /* "position" */ + INDEX = 603, /* "index" */ + COMMENT = 604, /* "comment" */ + XML = 605, /* "xml" */ + JSON = 606, /* "json" */ + VM = 607, /* "vm" */ + NOTRACK = 608, /* "notrack" */ + EXISTS = 609, /* "exists" */ + MISSING = 610, /* "missing" */ + EXTHDR = 611, /* "exthdr" */ + IPSEC = 612, /* "ipsec" */ + REQID = 613, /* "reqid" */ + SPNUM = 614, /* "spnum" */ + IN = 615, /* "in" */ + OUT = 616, /* "out" */ + XT = 617 /* "xt" */ + }; + typedef enum yytokentype yytoken_kind_t; +#endif +/* Token kinds. */ +#define YYEMPTY -2 +#define TOKEN_EOF 0 +#define YYerror 256 +#define YYUNDEF 257 +#define JUNK 258 +#define NEWLINE 259 +#define COLON 260 +#define SEMICOLON 261 +#define COMMA 262 +#define DOT 263 +#define EQ 264 +#define NEQ 265 +#define LT 266 +#define GT 267 +#define GTE 268 +#define LTE 269 +#define LSHIFT 270 +#define RSHIFT 271 +#define AMPERSAND 272 +#define CARET 273 +#define NOT 274 +#define SLASH 275 +#define ASTERISK 276 +#define DASH 277 +#define AT 278 +#define VMAP 279 +#define PLUS 280 +#define INCLUDE 281 +#define DEFINE 282 +#define REDEFINE 283 +#define UNDEFINE 284 +#define FIB 285 +#define SOCKET 286 +#define TRANSPARENT 287 +#define WILDCARD 288 +#define CGROUPV2 289 +#define TPROXY 290 +#define OSF 291 +#define SYNPROXY 292 +#define MSS 293 +#define WSCALE 294 +#define TYPEOF 295 +#define HOOK 296 +#define HOOKS 297 +#define DEVICE 298 +#define DEVICES 299 +#define TABLE 300 +#define TABLES 301 +#define CHAIN 302 +#define CHAINS 303 +#define RULE 304 +#define RULES 305 +#define SETS 306 +#define SET 307 +#define ELEMENT 308 +#define MAP 309 +#define MAPS 310 +#define FLOWTABLE 311 +#define HANDLE 312 +#define RULESET 313 +#define TRACE 314 +#define INET 315 +#define NETDEV 316 +#define ADD 317 +#define UPDATE 318 +#define REPLACE 319 +#define CREATE 320 +#define INSERT 321 +#define DELETE 322 +#define GET 323 +#define LIST 324 +#define RESET 325 +#define FLUSH 326 +#define RENAME 327 +#define DESCRIBE 328 +#define IMPORT 329 +#define EXPORT 330 +#define DESTROY 331 +#define MONITOR 332 +#define ALL 333 +#define ACCEPT 334 +#define DROP 335 +#define CONTINUE 336 +#define JUMP 337 +#define GOTO 338 +#define RETURN 339 +#define TO 340 +#define CONSTANT 341 +#define INTERVAL 342 +#define DYNAMIC 343 +#define AUTOMERGE 344 +#define TIMEOUT 345 +#define GC_INTERVAL 346 +#define ELEMENTS 347 +#define EXPIRES 348 +#define POLICY 349 +#define MEMORY 350 +#define PERFORMANCE 351 +#define SIZE 352 +#define FLOW 353 +#define OFFLOAD 354 +#define METER 355 +#define METERS 356 +#define FLOWTABLES 357 +#define NUM 358 +#define STRING 359 +#define QUOTED_STRING 360 +#define ASTERISK_STRING 361 +#define LL_HDR 362 +#define NETWORK_HDR 363 +#define TRANSPORT_HDR 364 +#define BRIDGE 365 +#define ETHER 366 +#define SADDR 367 +#define DADDR 368 +#define TYPE 369 +#define VLAN 370 +#define ID 371 +#define CFI 372 +#define DEI 373 +#define PCP 374 +#define ARP 375 +#define HTYPE 376 +#define PTYPE 377 +#define HLEN 378 +#define PLEN 379 +#define OPERATION 380 +#define IP 381 +#define HDRVERSION 382 +#define HDRLENGTH 383 +#define DSCP 384 +#define ECN 385 +#define LENGTH 386 +#define FRAG_OFF 387 +#define TTL 388 +#define PROTOCOL 389 +#define CHECKSUM 390 +#define PTR 391 +#define VALUE 392 +#define LSRR 393 +#define RR 394 +#define SSRR 395 +#define RA 396 +#define ICMP 397 +#define CODE 398 +#define SEQUENCE 399 +#define GATEWAY 400 +#define MTU 401 +#define IGMP 402 +#define MRT 403 +#define OPTIONS 404 +#define IP6 405 +#define PRIORITY 406 +#define FLOWLABEL 407 +#define NEXTHDR 408 +#define HOPLIMIT 409 +#define ICMP6 410 +#define PPTR 411 +#define MAXDELAY 412 +#define TADDR 413 +#define AH 414 +#define RESERVED 415 +#define SPI 416 +#define ESP 417 +#define COMP 418 +#define FLAGS 419 +#define CPI 420 +#define PORT 421 +#define UDP 422 +#define SPORT 423 +#define DPORT 424 +#define UDPLITE 425 +#define CSUMCOV 426 +#define TCP 427 +#define ACKSEQ 428 +#define DOFF 429 +#define WINDOW 430 +#define URGPTR 431 +#define OPTION 432 +#define ECHO 433 +#define EOL 434 +#define MPTCP 435 +#define NOP 436 +#define SACK 437 +#define SACK0 438 +#define SACK1 439 +#define SACK2 440 +#define SACK3 441 +#define SACK_PERM 442 +#define FASTOPEN 443 +#define MD5SIG 444 +#define TIMESTAMP 445 +#define COUNT 446 +#define LEFT 447 +#define RIGHT 448 +#define TSVAL 449 +#define TSECR 450 +#define SUBTYPE 451 +#define DCCP 452 +#define VXLAN 453 +#define VNI 454 +#define GRE 455 +#define GRETAP 456 +#define GENEVE 457 +#define SCTP 458 +#define CHUNK 459 +#define DATA 460 +#define INIT 461 +#define INIT_ACK 462 +#define HEARTBEAT 463 +#define HEARTBEAT_ACK 464 +#define ABORT 465 +#define SHUTDOWN 466 +#define SHUTDOWN_ACK 467 +#define ERROR 468 +#define COOKIE_ECHO 469 +#define COOKIE_ACK 470 +#define ECNE 471 +#define CWR 472 +#define SHUTDOWN_COMPLETE 473 +#define ASCONF_ACK 474 +#define FORWARD_TSN 475 +#define ASCONF 476 +#define TSN 477 +#define STREAM 478 +#define SSN 479 +#define PPID 480 +#define INIT_TAG 481 +#define A_RWND 482 +#define NUM_OSTREAMS 483 +#define NUM_ISTREAMS 484 +#define INIT_TSN 485 +#define CUM_TSN_ACK 486 +#define NUM_GACK_BLOCKS 487 +#define NUM_DUP_TSNS 488 +#define LOWEST_TSN 489 +#define SEQNO 490 +#define NEW_CUM_TSN 491 +#define VTAG 492 +#define RT 493 +#define RT0 494 +#define RT2 495 +#define RT4 496 +#define SEG_LEFT 497 +#define ADDR 498 +#define LAST_ENT 499 +#define TAG 500 +#define SID 501 +#define HBH 502 +#define FRAG 503 +#define RESERVED2 504 +#define MORE_FRAGMENTS 505 +#define DST 506 +#define MH 507 +#define META 508 +#define MARK 509 +#define IIF 510 +#define IIFNAME 511 +#define IIFTYPE 512 +#define OIF 513 +#define OIFNAME 514 +#define OIFTYPE 515 +#define SKUID 516 +#define SKGID 517 +#define NFTRACE 518 +#define RTCLASSID 519 +#define IBRIPORT 520 +#define OBRIPORT 521 +#define IBRIDGENAME 522 +#define OBRIDGENAME 523 +#define PKTTYPE 524 +#define CPU 525 +#define IIFGROUP 526 +#define OIFGROUP 527 +#define CGROUP 528 +#define TIME 529 +#define CLASSID 530 +#define NEXTHOP 531 +#define CT 532 +#define L3PROTOCOL 533 +#define PROTO_SRC 534 +#define PROTO_DST 535 +#define ZONE 536 +#define DIRECTION 537 +#define EVENT 538 +#define EXPECTATION 539 +#define EXPIRATION 540 +#define HELPER 541 +#define LABEL 542 +#define STATE 543 +#define STATUS 544 +#define ORIGINAL 545 +#define REPLY 546 +#define COUNTER 547 +#define NAME 548 +#define PACKETS 549 +#define BYTES 550 +#define AVGPKT 551 +#define LAST 552 +#define NEVER 553 +#define COUNTERS 554 +#define QUOTAS 555 +#define LIMITS 556 +#define SYNPROXYS 557 +#define HELPERS 558 +#define LOG 559 +#define PREFIX 560 +#define GROUP 561 +#define SNAPLEN 562 +#define QUEUE_THRESHOLD 563 +#define LEVEL 564 +#define LIMIT 565 +#define RATE 566 +#define BURST 567 +#define OVER 568 +#define UNTIL 569 +#define QUOTA 570 +#define USED 571 +#define SECMARK 572 +#define SECMARKS 573 +#define SECOND 574 +#define MINUTE 575 +#define HOUR 576 +#define DAY 577 +#define WEEK 578 +#define _REJECT 579 +#define WITH 580 +#define ICMPX 581 +#define SNAT 582 +#define DNAT 583 +#define MASQUERADE 584 +#define REDIRECT 585 +#define RANDOM 586 +#define FULLY_RANDOM 587 +#define PERSISTENT 588 +#define QUEUE 589 +#define QUEUENUM 590 +#define BYPASS 591 +#define FANOUT 592 +#define DUP 593 +#define FWD 594 +#define NUMGEN 595 +#define INC 596 +#define MOD 597 +#define OFFSET 598 +#define JHASH 599 +#define SYMHASH 600 +#define SEED 601 +#define POSITION 602 +#define INDEX 603 +#define COMMENT 604 +#define XML 605 +#define JSON 606 +#define VM 607 +#define NOTRACK 608 +#define EXISTS 609 +#define MISSING 610 +#define EXTHDR 611 +#define IPSEC 612 +#define REQID 613 +#define SPNUM 614 +#define IN 615 +#define OUT 616 +#define XT 617 + +/* Value type. */ +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +union YYSTYPE +{ +#line 205 "parser_bison.y" + + uint64_t val; + uint32_t val32; + uint8_t val8; + const char * string; + + struct list_head *list; + struct cmd *cmd; + struct handle handle; + struct table *table; + struct chain *chain; + struct rule *rule; + struct stmt *stmt; + struct expr *expr; + struct set *set; + struct obj *obj; + struct flowtable *flowtable; + struct ct *ct; + const struct datatype *datatype; + struct handle_spec handle_spec; + struct position_spec position_spec; + struct prio_spec prio_spec; + struct limit_rate limit_rate; + struct tcp_kind_field { + uint16_t kind; /* must allow > 255 for SACK1, 2.. hack */ + uint8_t field; + } tcp_kind_field; + +#line 1056 "parser_bison.c" + +}; +typedef union YYSTYPE YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 +# define YYSTYPE_IS_DECLARED 1 +#endif + +/* Location type. */ +#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED +typedef struct YYLTYPE YYLTYPE; +struct YYLTYPE +{ + int first_line; + int first_column; + int last_line; + int last_column; +}; +# define YYLTYPE_IS_DECLARED 1 +# define YYLTYPE_IS_TRIVIAL 1 +#endif + + + +int nft_parse (struct nft_ctx *nft, void *scanner, struct parser_state *state); + +#endif /* !YY_NFT_PARSER_BISON_H_INCLUDED */ +/* Symbol kind. */ +enum yysymbol_kind_t +{ + YYSYMBOL_YYEMPTY = -2, + YYSYMBOL_YYEOF = 0, /* "end of file" */ + YYSYMBOL_YYerror = 1, /* error */ + YYSYMBOL_YYUNDEF = 2, /* "invalid token" */ + YYSYMBOL_JUNK = 3, /* "junk" */ + YYSYMBOL_NEWLINE = 4, /* "newline" */ + YYSYMBOL_COLON = 5, /* "colon" */ + YYSYMBOL_SEMICOLON = 6, /* "semicolon" */ + YYSYMBOL_COMMA = 7, /* "comma" */ + YYSYMBOL_DOT = 8, /* "." */ + YYSYMBOL_EQ = 9, /* "==" */ + YYSYMBOL_NEQ = 10, /* "!=" */ + YYSYMBOL_LT = 11, /* "<" */ + YYSYMBOL_GT = 12, /* ">" */ + YYSYMBOL_GTE = 13, /* ">=" */ + YYSYMBOL_LTE = 14, /* "<=" */ + YYSYMBOL_LSHIFT = 15, /* "<<" */ + YYSYMBOL_RSHIFT = 16, /* ">>" */ + YYSYMBOL_AMPERSAND = 17, /* "&" */ + YYSYMBOL_CARET = 18, /* "^" */ + YYSYMBOL_NOT = 19, /* "!" */ + YYSYMBOL_SLASH = 20, /* "/" */ + YYSYMBOL_ASTERISK = 21, /* "*" */ + YYSYMBOL_DASH = 22, /* "-" */ + YYSYMBOL_AT = 23, /* "@" */ + YYSYMBOL_VMAP = 24, /* "vmap" */ + YYSYMBOL_PLUS = 25, /* "+" */ + YYSYMBOL_INCLUDE = 26, /* "include" */ + YYSYMBOL_DEFINE = 27, /* "define" */ + YYSYMBOL_REDEFINE = 28, /* "redefine" */ + YYSYMBOL_UNDEFINE = 29, /* "undefine" */ + YYSYMBOL_FIB = 30, /* "fib" */ + YYSYMBOL_SOCKET = 31, /* "socket" */ + YYSYMBOL_TRANSPARENT = 32, /* "transparent" */ + YYSYMBOL_WILDCARD = 33, /* "wildcard" */ + YYSYMBOL_CGROUPV2 = 34, /* "cgroupv2" */ + YYSYMBOL_TPROXY = 35, /* "tproxy" */ + YYSYMBOL_OSF = 36, /* "osf" */ + YYSYMBOL_SYNPROXY = 37, /* "synproxy" */ + YYSYMBOL_MSS = 38, /* "mss" */ + YYSYMBOL_WSCALE = 39, /* "wscale" */ + YYSYMBOL_TYPEOF = 40, /* "typeof" */ + YYSYMBOL_HOOK = 41, /* "hook" */ + YYSYMBOL_HOOKS = 42, /* "hooks" */ + YYSYMBOL_DEVICE = 43, /* "device" */ + YYSYMBOL_DEVICES = 44, /* "devices" */ + YYSYMBOL_TABLE = 45, /* "table" */ + YYSYMBOL_TABLES = 46, /* "tables" */ + YYSYMBOL_CHAIN = 47, /* "chain" */ + YYSYMBOL_CHAINS = 48, /* "chains" */ + YYSYMBOL_RULE = 49, /* "rule" */ + YYSYMBOL_RULES = 50, /* "rules" */ + YYSYMBOL_SETS = 51, /* "sets" */ + YYSYMBOL_SET = 52, /* "set" */ + YYSYMBOL_ELEMENT = 53, /* "element" */ + YYSYMBOL_MAP = 54, /* "map" */ + YYSYMBOL_MAPS = 55, /* "maps" */ + YYSYMBOL_FLOWTABLE = 56, /* "flowtable" */ + YYSYMBOL_HANDLE = 57, /* "handle" */ + YYSYMBOL_RULESET = 58, /* "ruleset" */ + YYSYMBOL_TRACE = 59, /* "trace" */ + YYSYMBOL_INET = 60, /* "inet" */ + YYSYMBOL_NETDEV = 61, /* "netdev" */ + YYSYMBOL_ADD = 62, /* "add" */ + YYSYMBOL_UPDATE = 63, /* "update" */ + YYSYMBOL_REPLACE = 64, /* "replace" */ + YYSYMBOL_CREATE = 65, /* "create" */ + YYSYMBOL_INSERT = 66, /* "insert" */ + YYSYMBOL_DELETE = 67, /* "delete" */ + YYSYMBOL_GET = 68, /* "get" */ + YYSYMBOL_LIST = 69, /* "list" */ + YYSYMBOL_RESET = 70, /* "reset" */ + YYSYMBOL_FLUSH = 71, /* "flush" */ + YYSYMBOL_RENAME = 72, /* "rename" */ + YYSYMBOL_DESCRIBE = 73, /* "describe" */ + YYSYMBOL_IMPORT = 74, /* "import" */ + YYSYMBOL_EXPORT = 75, /* "export" */ + YYSYMBOL_DESTROY = 76, /* "destroy" */ + YYSYMBOL_MONITOR = 77, /* "monitor" */ + YYSYMBOL_ALL = 78, /* "all" */ + YYSYMBOL_ACCEPT = 79, /* "accept" */ + YYSYMBOL_DROP = 80, /* "drop" */ + YYSYMBOL_CONTINUE = 81, /* "continue" */ + YYSYMBOL_JUMP = 82, /* "jump" */ + YYSYMBOL_GOTO = 83, /* "goto" */ + YYSYMBOL_RETURN = 84, /* "return" */ + YYSYMBOL_TO = 85, /* "to" */ + YYSYMBOL_CONSTANT = 86, /* "constant" */ + YYSYMBOL_INTERVAL = 87, /* "interval" */ + YYSYMBOL_DYNAMIC = 88, /* "dynamic" */ + YYSYMBOL_AUTOMERGE = 89, /* "auto-merge" */ + YYSYMBOL_TIMEOUT = 90, /* "timeout" */ + YYSYMBOL_GC_INTERVAL = 91, /* "gc-interval" */ + YYSYMBOL_ELEMENTS = 92, /* "elements" */ + YYSYMBOL_EXPIRES = 93, /* "expires" */ + YYSYMBOL_POLICY = 94, /* "policy" */ + YYSYMBOL_MEMORY = 95, /* "memory" */ + YYSYMBOL_PERFORMANCE = 96, /* "performance" */ + YYSYMBOL_SIZE = 97, /* "size" */ + YYSYMBOL_FLOW = 98, /* "flow" */ + YYSYMBOL_OFFLOAD = 99, /* "offload" */ + YYSYMBOL_METER = 100, /* "meter" */ + YYSYMBOL_METERS = 101, /* "meters" */ + YYSYMBOL_FLOWTABLES = 102, /* "flowtables" */ + YYSYMBOL_NUM = 103, /* "number" */ + YYSYMBOL_STRING = 104, /* "string" */ + YYSYMBOL_QUOTED_STRING = 105, /* "quoted string" */ + YYSYMBOL_ASTERISK_STRING = 106, /* "string with a trailing asterisk" */ + YYSYMBOL_LL_HDR = 107, /* "ll" */ + YYSYMBOL_NETWORK_HDR = 108, /* "nh" */ + YYSYMBOL_TRANSPORT_HDR = 109, /* "th" */ + YYSYMBOL_BRIDGE = 110, /* "bridge" */ + YYSYMBOL_ETHER = 111, /* "ether" */ + YYSYMBOL_SADDR = 112, /* "saddr" */ + YYSYMBOL_DADDR = 113, /* "daddr" */ + YYSYMBOL_TYPE = 114, /* "type" */ + YYSYMBOL_VLAN = 115, /* "vlan" */ + YYSYMBOL_ID = 116, /* "id" */ + YYSYMBOL_CFI = 117, /* "cfi" */ + YYSYMBOL_DEI = 118, /* "dei" */ + YYSYMBOL_PCP = 119, /* "pcp" */ + YYSYMBOL_ARP = 120, /* "arp" */ + YYSYMBOL_HTYPE = 121, /* "htype" */ + YYSYMBOL_PTYPE = 122, /* "ptype" */ + YYSYMBOL_HLEN = 123, /* "hlen" */ + YYSYMBOL_PLEN = 124, /* "plen" */ + YYSYMBOL_OPERATION = 125, /* "operation" */ + YYSYMBOL_IP = 126, /* "ip" */ + YYSYMBOL_HDRVERSION = 127, /* "version" */ + YYSYMBOL_HDRLENGTH = 128, /* "hdrlength" */ + YYSYMBOL_DSCP = 129, /* "dscp" */ + YYSYMBOL_ECN = 130, /* "ecn" */ + YYSYMBOL_LENGTH = 131, /* "length" */ + YYSYMBOL_FRAG_OFF = 132, /* "frag-off" */ + YYSYMBOL_TTL = 133, /* "ttl" */ + YYSYMBOL_PROTOCOL = 134, /* "protocol" */ + YYSYMBOL_CHECKSUM = 135, /* "checksum" */ + YYSYMBOL_PTR = 136, /* "ptr" */ + YYSYMBOL_VALUE = 137, /* "value" */ + YYSYMBOL_LSRR = 138, /* "lsrr" */ + YYSYMBOL_RR = 139, /* "rr" */ + YYSYMBOL_SSRR = 140, /* "ssrr" */ + YYSYMBOL_RA = 141, /* "ra" */ + YYSYMBOL_ICMP = 142, /* "icmp" */ + YYSYMBOL_CODE = 143, /* "code" */ + YYSYMBOL_SEQUENCE = 144, /* "seq" */ + YYSYMBOL_GATEWAY = 145, /* "gateway" */ + YYSYMBOL_MTU = 146, /* "mtu" */ + YYSYMBOL_IGMP = 147, /* "igmp" */ + YYSYMBOL_MRT = 148, /* "mrt" */ + YYSYMBOL_OPTIONS = 149, /* "options" */ + YYSYMBOL_IP6 = 150, /* "ip6" */ + YYSYMBOL_PRIORITY = 151, /* "priority" */ + YYSYMBOL_FLOWLABEL = 152, /* "flowlabel" */ + YYSYMBOL_NEXTHDR = 153, /* "nexthdr" */ + YYSYMBOL_HOPLIMIT = 154, /* "hoplimit" */ + YYSYMBOL_ICMP6 = 155, /* "icmpv6" */ + YYSYMBOL_PPTR = 156, /* "param-problem" */ + YYSYMBOL_MAXDELAY = 157, /* "max-delay" */ + YYSYMBOL_TADDR = 158, /* "taddr" */ + YYSYMBOL_AH = 159, /* "ah" */ + YYSYMBOL_RESERVED = 160, /* "reserved" */ + YYSYMBOL_SPI = 161, /* "spi" */ + YYSYMBOL_ESP = 162, /* "esp" */ + YYSYMBOL_COMP = 163, /* "comp" */ + YYSYMBOL_FLAGS = 164, /* "flags" */ + YYSYMBOL_CPI = 165, /* "cpi" */ + YYSYMBOL_PORT = 166, /* "port" */ + YYSYMBOL_UDP = 167, /* "udp" */ + YYSYMBOL_SPORT = 168, /* "sport" */ + YYSYMBOL_DPORT = 169, /* "dport" */ + YYSYMBOL_UDPLITE = 170, /* "udplite" */ + YYSYMBOL_CSUMCOV = 171, /* "csumcov" */ + YYSYMBOL_TCP = 172, /* "tcp" */ + YYSYMBOL_ACKSEQ = 173, /* "ackseq" */ + YYSYMBOL_DOFF = 174, /* "doff" */ + YYSYMBOL_WINDOW = 175, /* "window" */ + YYSYMBOL_URGPTR = 176, /* "urgptr" */ + YYSYMBOL_OPTION = 177, /* "option" */ + YYSYMBOL_ECHO = 178, /* "echo" */ + YYSYMBOL_EOL = 179, /* "eol" */ + YYSYMBOL_MPTCP = 180, /* "mptcp" */ + YYSYMBOL_NOP = 181, /* "nop" */ + YYSYMBOL_SACK = 182, /* "sack" */ + YYSYMBOL_SACK0 = 183, /* "sack0" */ + YYSYMBOL_SACK1 = 184, /* "sack1" */ + YYSYMBOL_SACK2 = 185, /* "sack2" */ + YYSYMBOL_SACK3 = 186, /* "sack3" */ + YYSYMBOL_SACK_PERM = 187, /* "sack-permitted" */ + YYSYMBOL_FASTOPEN = 188, /* "fastopen" */ + YYSYMBOL_MD5SIG = 189, /* "md5sig" */ + YYSYMBOL_TIMESTAMP = 190, /* "timestamp" */ + YYSYMBOL_COUNT = 191, /* "count" */ + YYSYMBOL_LEFT = 192, /* "left" */ + YYSYMBOL_RIGHT = 193, /* "right" */ + YYSYMBOL_TSVAL = 194, /* "tsval" */ + YYSYMBOL_TSECR = 195, /* "tsecr" */ + YYSYMBOL_SUBTYPE = 196, /* "subtype" */ + YYSYMBOL_DCCP = 197, /* "dccp" */ + YYSYMBOL_VXLAN = 198, /* "vxlan" */ + YYSYMBOL_VNI = 199, /* "vni" */ + YYSYMBOL_GRE = 200, /* "gre" */ + YYSYMBOL_GRETAP = 201, /* "gretap" */ + YYSYMBOL_GENEVE = 202, /* "geneve" */ + YYSYMBOL_SCTP = 203, /* "sctp" */ + YYSYMBOL_CHUNK = 204, /* "chunk" */ + YYSYMBOL_DATA = 205, /* "data" */ + YYSYMBOL_INIT = 206, /* "init" */ + YYSYMBOL_INIT_ACK = 207, /* "init-ack" */ + YYSYMBOL_HEARTBEAT = 208, /* "heartbeat" */ + YYSYMBOL_HEARTBEAT_ACK = 209, /* "heartbeat-ack" */ + YYSYMBOL_ABORT = 210, /* "abort" */ + YYSYMBOL_SHUTDOWN = 211, /* "shutdown" */ + YYSYMBOL_SHUTDOWN_ACK = 212, /* "shutdown-ack" */ + YYSYMBOL_ERROR = 213, /* "error" */ + YYSYMBOL_COOKIE_ECHO = 214, /* "cookie-echo" */ + YYSYMBOL_COOKIE_ACK = 215, /* "cookie-ack" */ + YYSYMBOL_ECNE = 216, /* "ecne" */ + YYSYMBOL_CWR = 217, /* "cwr" */ + YYSYMBOL_SHUTDOWN_COMPLETE = 218, /* "shutdown-complete" */ + YYSYMBOL_ASCONF_ACK = 219, /* "asconf-ack" */ + YYSYMBOL_FORWARD_TSN = 220, /* "forward-tsn" */ + YYSYMBOL_ASCONF = 221, /* "asconf" */ + YYSYMBOL_TSN = 222, /* "tsn" */ + YYSYMBOL_STREAM = 223, /* "stream" */ + YYSYMBOL_SSN = 224, /* "ssn" */ + YYSYMBOL_PPID = 225, /* "ppid" */ + YYSYMBOL_INIT_TAG = 226, /* "init-tag" */ + YYSYMBOL_A_RWND = 227, /* "a-rwnd" */ + YYSYMBOL_NUM_OSTREAMS = 228, /* "num-outbound-streams" */ + YYSYMBOL_NUM_ISTREAMS = 229, /* "num-inbound-streams" */ + YYSYMBOL_INIT_TSN = 230, /* "initial-tsn" */ + YYSYMBOL_CUM_TSN_ACK = 231, /* "cum-tsn-ack" */ + YYSYMBOL_NUM_GACK_BLOCKS = 232, /* "num-gap-ack-blocks" */ + YYSYMBOL_NUM_DUP_TSNS = 233, /* "num-dup-tsns" */ + YYSYMBOL_LOWEST_TSN = 234, /* "lowest-tsn" */ + YYSYMBOL_SEQNO = 235, /* "seqno" */ + YYSYMBOL_NEW_CUM_TSN = 236, /* "new-cum-tsn" */ + YYSYMBOL_VTAG = 237, /* "vtag" */ + YYSYMBOL_RT = 238, /* "rt" */ + YYSYMBOL_RT0 = 239, /* "rt0" */ + YYSYMBOL_RT2 = 240, /* "rt2" */ + YYSYMBOL_RT4 = 241, /* "srh" */ + YYSYMBOL_SEG_LEFT = 242, /* "seg-left" */ + YYSYMBOL_ADDR = 243, /* "addr" */ + YYSYMBOL_LAST_ENT = 244, /* "last-entry" */ + YYSYMBOL_TAG = 245, /* "tag" */ + YYSYMBOL_SID = 246, /* "sid" */ + YYSYMBOL_HBH = 247, /* "hbh" */ + YYSYMBOL_FRAG = 248, /* "frag" */ + YYSYMBOL_RESERVED2 = 249, /* "reserved2" */ + YYSYMBOL_MORE_FRAGMENTS = 250, /* "more-fragments" */ + YYSYMBOL_DST = 251, /* "dst" */ + YYSYMBOL_MH = 252, /* "mh" */ + YYSYMBOL_META = 253, /* "meta" */ + YYSYMBOL_MARK = 254, /* "mark" */ + YYSYMBOL_IIF = 255, /* "iif" */ + YYSYMBOL_IIFNAME = 256, /* "iifname" */ + YYSYMBOL_IIFTYPE = 257, /* "iiftype" */ + YYSYMBOL_OIF = 258, /* "oif" */ + YYSYMBOL_OIFNAME = 259, /* "oifname" */ + YYSYMBOL_OIFTYPE = 260, /* "oiftype" */ + YYSYMBOL_SKUID = 261, /* "skuid" */ + YYSYMBOL_SKGID = 262, /* "skgid" */ + YYSYMBOL_NFTRACE = 263, /* "nftrace" */ + YYSYMBOL_RTCLASSID = 264, /* "rtclassid" */ + YYSYMBOL_IBRIPORT = 265, /* "ibriport" */ + YYSYMBOL_OBRIPORT = 266, /* "obriport" */ + YYSYMBOL_IBRIDGENAME = 267, /* "ibrname" */ + YYSYMBOL_OBRIDGENAME = 268, /* "obrname" */ + YYSYMBOL_PKTTYPE = 269, /* "pkttype" */ + YYSYMBOL_CPU = 270, /* "cpu" */ + YYSYMBOL_IIFGROUP = 271, /* "iifgroup" */ + YYSYMBOL_OIFGROUP = 272, /* "oifgroup" */ + YYSYMBOL_CGROUP = 273, /* "cgroup" */ + YYSYMBOL_TIME = 274, /* "time" */ + YYSYMBOL_CLASSID = 275, /* "classid" */ + YYSYMBOL_NEXTHOP = 276, /* "nexthop" */ + YYSYMBOL_CT = 277, /* "ct" */ + YYSYMBOL_L3PROTOCOL = 278, /* "l3proto" */ + YYSYMBOL_PROTO_SRC = 279, /* "proto-src" */ + YYSYMBOL_PROTO_DST = 280, /* "proto-dst" */ + YYSYMBOL_ZONE = 281, /* "zone" */ + YYSYMBOL_DIRECTION = 282, /* "direction" */ + YYSYMBOL_EVENT = 283, /* "event" */ + YYSYMBOL_EXPECTATION = 284, /* "expectation" */ + YYSYMBOL_EXPIRATION = 285, /* "expiration" */ + YYSYMBOL_HELPER = 286, /* "helper" */ + YYSYMBOL_LABEL = 287, /* "label" */ + YYSYMBOL_STATE = 288, /* "state" */ + YYSYMBOL_STATUS = 289, /* "status" */ + YYSYMBOL_ORIGINAL = 290, /* "original" */ + YYSYMBOL_REPLY = 291, /* "reply" */ + YYSYMBOL_COUNTER = 292, /* "counter" */ + YYSYMBOL_NAME = 293, /* "name" */ + YYSYMBOL_PACKETS = 294, /* "packets" */ + YYSYMBOL_BYTES = 295, /* "bytes" */ + YYSYMBOL_AVGPKT = 296, /* "avgpkt" */ + YYSYMBOL_LAST = 297, /* "last" */ + YYSYMBOL_NEVER = 298, /* "never" */ + YYSYMBOL_COUNTERS = 299, /* "counters" */ + YYSYMBOL_QUOTAS = 300, /* "quotas" */ + YYSYMBOL_LIMITS = 301, /* "limits" */ + YYSYMBOL_SYNPROXYS = 302, /* "synproxys" */ + YYSYMBOL_HELPERS = 303, /* "helpers" */ + YYSYMBOL_LOG = 304, /* "log" */ + YYSYMBOL_PREFIX = 305, /* "prefix" */ + YYSYMBOL_GROUP = 306, /* "group" */ + YYSYMBOL_SNAPLEN = 307, /* "snaplen" */ + YYSYMBOL_QUEUE_THRESHOLD = 308, /* "queue-threshold" */ + YYSYMBOL_LEVEL = 309, /* "level" */ + YYSYMBOL_LIMIT = 310, /* "limit" */ + YYSYMBOL_RATE = 311, /* "rate" */ + YYSYMBOL_BURST = 312, /* "burst" */ + YYSYMBOL_OVER = 313, /* "over" */ + YYSYMBOL_UNTIL = 314, /* "until" */ + YYSYMBOL_QUOTA = 315, /* "quota" */ + YYSYMBOL_USED = 316, /* "used" */ + YYSYMBOL_SECMARK = 317, /* "secmark" */ + YYSYMBOL_SECMARKS = 318, /* "secmarks" */ + YYSYMBOL_SECOND = 319, /* "second" */ + YYSYMBOL_MINUTE = 320, /* "minute" */ + YYSYMBOL_HOUR = 321, /* "hour" */ + YYSYMBOL_DAY = 322, /* "day" */ + YYSYMBOL_WEEK = 323, /* "week" */ + YYSYMBOL__REJECT = 324, /* "reject" */ + YYSYMBOL_WITH = 325, /* "with" */ + YYSYMBOL_ICMPX = 326, /* "icmpx" */ + YYSYMBOL_SNAT = 327, /* "snat" */ + YYSYMBOL_DNAT = 328, /* "dnat" */ + YYSYMBOL_MASQUERADE = 329, /* "masquerade" */ + YYSYMBOL_REDIRECT = 330, /* "redirect" */ + YYSYMBOL_RANDOM = 331, /* "random" */ + YYSYMBOL_FULLY_RANDOM = 332, /* "fully-random" */ + YYSYMBOL_PERSISTENT = 333, /* "persistent" */ + YYSYMBOL_QUEUE = 334, /* "queue" */ + YYSYMBOL_QUEUENUM = 335, /* "num" */ + YYSYMBOL_BYPASS = 336, /* "bypass" */ + YYSYMBOL_FANOUT = 337, /* "fanout" */ + YYSYMBOL_DUP = 338, /* "dup" */ + YYSYMBOL_FWD = 339, /* "fwd" */ + YYSYMBOL_NUMGEN = 340, /* "numgen" */ + YYSYMBOL_INC = 341, /* "inc" */ + YYSYMBOL_MOD = 342, /* "mod" */ + YYSYMBOL_OFFSET = 343, /* "offset" */ + YYSYMBOL_JHASH = 344, /* "jhash" */ + YYSYMBOL_SYMHASH = 345, /* "symhash" */ + YYSYMBOL_SEED = 346, /* "seed" */ + YYSYMBOL_POSITION = 347, /* "position" */ + YYSYMBOL_INDEX = 348, /* "index" */ + YYSYMBOL_COMMENT = 349, /* "comment" */ + YYSYMBOL_XML = 350, /* "xml" */ + YYSYMBOL_JSON = 351, /* "json" */ + YYSYMBOL_VM = 352, /* "vm" */ + YYSYMBOL_NOTRACK = 353, /* "notrack" */ + YYSYMBOL_EXISTS = 354, /* "exists" */ + YYSYMBOL_MISSING = 355, /* "missing" */ + YYSYMBOL_EXTHDR = 356, /* "exthdr" */ + YYSYMBOL_IPSEC = 357, /* "ipsec" */ + YYSYMBOL_REQID = 358, /* "reqid" */ + YYSYMBOL_SPNUM = 359, /* "spnum" */ + YYSYMBOL_IN = 360, /* "in" */ + YYSYMBOL_OUT = 361, /* "out" */ + YYSYMBOL_XT = 362, /* "xt" */ + YYSYMBOL_363_ = 363, /* '=' */ + YYSYMBOL_364_ = 364, /* '{' */ + YYSYMBOL_365_ = 365, /* '}' */ + YYSYMBOL_366_ = 366, /* '(' */ + YYSYMBOL_367_ = 367, /* ')' */ + YYSYMBOL_368_ = 368, /* '|' */ + YYSYMBOL_369_ = 369, /* '$' */ + YYSYMBOL_370_ = 370, /* '[' */ + YYSYMBOL_371_ = 371, /* ']' */ + YYSYMBOL_YYACCEPT = 372, /* $accept */ + YYSYMBOL_input = 373, /* input */ + YYSYMBOL_stmt_separator = 374, /* stmt_separator */ + YYSYMBOL_opt_newline = 375, /* opt_newline */ + YYSYMBOL_close_scope_ah = 376, /* close_scope_ah */ + YYSYMBOL_close_scope_arp = 377, /* close_scope_arp */ + YYSYMBOL_close_scope_at = 378, /* close_scope_at */ + YYSYMBOL_close_scope_comp = 379, /* close_scope_comp */ + YYSYMBOL_close_scope_ct = 380, /* close_scope_ct */ + YYSYMBOL_close_scope_counter = 381, /* close_scope_counter */ + YYSYMBOL_close_scope_last = 382, /* close_scope_last */ + YYSYMBOL_close_scope_dccp = 383, /* close_scope_dccp */ + YYSYMBOL_close_scope_destroy = 384, /* close_scope_destroy */ + YYSYMBOL_close_scope_dst = 385, /* close_scope_dst */ + YYSYMBOL_close_scope_dup = 386, /* close_scope_dup */ + YYSYMBOL_close_scope_esp = 387, /* close_scope_esp */ + YYSYMBOL_close_scope_eth = 388, /* close_scope_eth */ + YYSYMBOL_close_scope_export = 389, /* close_scope_export */ + YYSYMBOL_close_scope_fib = 390, /* close_scope_fib */ + YYSYMBOL_close_scope_frag = 391, /* close_scope_frag */ + YYSYMBOL_close_scope_fwd = 392, /* close_scope_fwd */ + YYSYMBOL_close_scope_gre = 393, /* close_scope_gre */ + YYSYMBOL_close_scope_hash = 394, /* close_scope_hash */ + YYSYMBOL_close_scope_hbh = 395, /* close_scope_hbh */ + YYSYMBOL_close_scope_ip = 396, /* close_scope_ip */ + YYSYMBOL_close_scope_ip6 = 397, /* close_scope_ip6 */ + YYSYMBOL_close_scope_vlan = 398, /* close_scope_vlan */ + YYSYMBOL_close_scope_icmp = 399, /* close_scope_icmp */ + YYSYMBOL_close_scope_igmp = 400, /* close_scope_igmp */ + YYSYMBOL_close_scope_import = 401, /* close_scope_import */ + YYSYMBOL_close_scope_ipsec = 402, /* close_scope_ipsec */ + YYSYMBOL_close_scope_list = 403, /* close_scope_list */ + YYSYMBOL_close_scope_limit = 404, /* close_scope_limit */ + YYSYMBOL_close_scope_meta = 405, /* close_scope_meta */ + YYSYMBOL_close_scope_mh = 406, /* close_scope_mh */ + YYSYMBOL_close_scope_monitor = 407, /* close_scope_monitor */ + YYSYMBOL_close_scope_nat = 408, /* close_scope_nat */ + YYSYMBOL_close_scope_numgen = 409, /* close_scope_numgen */ + YYSYMBOL_close_scope_osf = 410, /* close_scope_osf */ + YYSYMBOL_close_scope_policy = 411, /* close_scope_policy */ + YYSYMBOL_close_scope_quota = 412, /* close_scope_quota */ + YYSYMBOL_close_scope_queue = 413, /* close_scope_queue */ + YYSYMBOL_close_scope_reject = 414, /* close_scope_reject */ + YYSYMBOL_close_scope_reset = 415, /* close_scope_reset */ + YYSYMBOL_close_scope_rt = 416, /* close_scope_rt */ + YYSYMBOL_close_scope_sctp = 417, /* close_scope_sctp */ + YYSYMBOL_close_scope_sctp_chunk = 418, /* close_scope_sctp_chunk */ + YYSYMBOL_close_scope_secmark = 419, /* close_scope_secmark */ + YYSYMBOL_close_scope_socket = 420, /* close_scope_socket */ + YYSYMBOL_close_scope_tcp = 421, /* close_scope_tcp */ + YYSYMBOL_close_scope_tproxy = 422, /* close_scope_tproxy */ + YYSYMBOL_close_scope_type = 423, /* close_scope_type */ + YYSYMBOL_close_scope_th = 424, /* close_scope_th */ + YYSYMBOL_close_scope_udp = 425, /* close_scope_udp */ + YYSYMBOL_close_scope_udplite = 426, /* close_scope_udplite */ + YYSYMBOL_close_scope_log = 427, /* close_scope_log */ + YYSYMBOL_close_scope_synproxy = 428, /* close_scope_synproxy */ + YYSYMBOL_close_scope_xt = 429, /* close_scope_xt */ + YYSYMBOL_common_block = 430, /* common_block */ + YYSYMBOL_line = 431, /* line */ + YYSYMBOL_base_cmd = 432, /* base_cmd */ + YYSYMBOL_add_cmd = 433, /* add_cmd */ + YYSYMBOL_replace_cmd = 434, /* replace_cmd */ + YYSYMBOL_create_cmd = 435, /* create_cmd */ + YYSYMBOL_insert_cmd = 436, /* insert_cmd */ + YYSYMBOL_table_or_id_spec = 437, /* table_or_id_spec */ + YYSYMBOL_chain_or_id_spec = 438, /* chain_or_id_spec */ + YYSYMBOL_set_or_id_spec = 439, /* set_or_id_spec */ + YYSYMBOL_obj_or_id_spec = 440, /* obj_or_id_spec */ + YYSYMBOL_delete_cmd = 441, /* delete_cmd */ + YYSYMBOL_destroy_cmd = 442, /* destroy_cmd */ + YYSYMBOL_get_cmd = 443, /* get_cmd */ + YYSYMBOL_list_cmd = 444, /* list_cmd */ + YYSYMBOL_basehook_device_name = 445, /* basehook_device_name */ + YYSYMBOL_basehook_spec = 446, /* basehook_spec */ + YYSYMBOL_reset_cmd = 447, /* reset_cmd */ + YYSYMBOL_flush_cmd = 448, /* flush_cmd */ + YYSYMBOL_rename_cmd = 449, /* rename_cmd */ + YYSYMBOL_import_cmd = 450, /* import_cmd */ + YYSYMBOL_export_cmd = 451, /* export_cmd */ + YYSYMBOL_monitor_cmd = 452, /* monitor_cmd */ + YYSYMBOL_monitor_event = 453, /* monitor_event */ + YYSYMBOL_monitor_object = 454, /* monitor_object */ + YYSYMBOL_monitor_format = 455, /* monitor_format */ + YYSYMBOL_markup_format = 456, /* markup_format */ + YYSYMBOL_describe_cmd = 457, /* describe_cmd */ + YYSYMBOL_table_block_alloc = 458, /* table_block_alloc */ + YYSYMBOL_table_options = 459, /* table_options */ + YYSYMBOL_table_block = 460, /* table_block */ + YYSYMBOL_chain_block_alloc = 461, /* chain_block_alloc */ + YYSYMBOL_chain_block = 462, /* chain_block */ + YYSYMBOL_subchain_block = 463, /* subchain_block */ + YYSYMBOL_typeof_data_expr = 464, /* typeof_data_expr */ + YYSYMBOL_typeof_expr = 465, /* typeof_expr */ + YYSYMBOL_set_block_alloc = 466, /* set_block_alloc */ + YYSYMBOL_set_block = 467, /* set_block */ + YYSYMBOL_set_block_expr = 468, /* set_block_expr */ + YYSYMBOL_set_flag_list = 469, /* set_flag_list */ + YYSYMBOL_set_flag = 470, /* set_flag */ + YYSYMBOL_map_block_alloc = 471, /* map_block_alloc */ + YYSYMBOL_map_block_obj_type = 472, /* map_block_obj_type */ + YYSYMBOL_map_block_data_interval = 473, /* map_block_data_interval */ + YYSYMBOL_map_block = 474, /* map_block */ + YYSYMBOL_set_mechanism = 475, /* set_mechanism */ + YYSYMBOL_set_policy_spec = 476, /* set_policy_spec */ + YYSYMBOL_flowtable_block_alloc = 477, /* flowtable_block_alloc */ + YYSYMBOL_flowtable_block = 478, /* flowtable_block */ + YYSYMBOL_flowtable_expr = 479, /* flowtable_expr */ + YYSYMBOL_flowtable_list_expr = 480, /* flowtable_list_expr */ + YYSYMBOL_flowtable_expr_member = 481, /* flowtable_expr_member */ + YYSYMBOL_data_type_atom_expr = 482, /* data_type_atom_expr */ + YYSYMBOL_data_type_expr = 483, /* data_type_expr */ + YYSYMBOL_obj_block_alloc = 484, /* obj_block_alloc */ + YYSYMBOL_counter_block = 485, /* counter_block */ + YYSYMBOL_quota_block = 486, /* quota_block */ + YYSYMBOL_ct_helper_block = 487, /* ct_helper_block */ + YYSYMBOL_ct_timeout_block = 488, /* ct_timeout_block */ + YYSYMBOL_ct_expect_block = 489, /* ct_expect_block */ + YYSYMBOL_limit_block = 490, /* limit_block */ + YYSYMBOL_secmark_block = 491, /* secmark_block */ + YYSYMBOL_synproxy_block = 492, /* synproxy_block */ + YYSYMBOL_type_identifier = 493, /* type_identifier */ + YYSYMBOL_hook_spec = 494, /* hook_spec */ + YYSYMBOL_prio_spec = 495, /* prio_spec */ + YYSYMBOL_extended_prio_name = 496, /* extended_prio_name */ + YYSYMBOL_extended_prio_spec = 497, /* extended_prio_spec */ + YYSYMBOL_int_num = 498, /* int_num */ + YYSYMBOL_dev_spec = 499, /* dev_spec */ + YYSYMBOL_flags_spec = 500, /* flags_spec */ + YYSYMBOL_policy_spec = 501, /* policy_spec */ + YYSYMBOL_policy_expr = 502, /* policy_expr */ + YYSYMBOL_chain_policy = 503, /* chain_policy */ + YYSYMBOL_identifier = 504, /* identifier */ + YYSYMBOL_string = 505, /* string */ + YYSYMBOL_time_spec = 506, /* time_spec */ + YYSYMBOL_time_spec_or_num_s = 507, /* time_spec_or_num_s */ + YYSYMBOL_family_spec = 508, /* family_spec */ + YYSYMBOL_family_spec_explicit = 509, /* family_spec_explicit */ + YYSYMBOL_table_spec = 510, /* table_spec */ + YYSYMBOL_tableid_spec = 511, /* tableid_spec */ + YYSYMBOL_chain_spec = 512, /* chain_spec */ + YYSYMBOL_chainid_spec = 513, /* chainid_spec */ + YYSYMBOL_chain_identifier = 514, /* chain_identifier */ + YYSYMBOL_set_spec = 515, /* set_spec */ + YYSYMBOL_setid_spec = 516, /* setid_spec */ + YYSYMBOL_set_identifier = 517, /* set_identifier */ + YYSYMBOL_flowtable_spec = 518, /* flowtable_spec */ + YYSYMBOL_flowtableid_spec = 519, /* flowtableid_spec */ + YYSYMBOL_flowtable_identifier = 520, /* flowtable_identifier */ + YYSYMBOL_obj_spec = 521, /* obj_spec */ + YYSYMBOL_objid_spec = 522, /* objid_spec */ + YYSYMBOL_obj_identifier = 523, /* obj_identifier */ + YYSYMBOL_handle_spec = 524, /* handle_spec */ + YYSYMBOL_position_spec = 525, /* position_spec */ + YYSYMBOL_index_spec = 526, /* index_spec */ + YYSYMBOL_rule_position = 527, /* rule_position */ + YYSYMBOL_ruleid_spec = 528, /* ruleid_spec */ + YYSYMBOL_comment_spec = 529, /* comment_spec */ + YYSYMBOL_ruleset_spec = 530, /* ruleset_spec */ + YYSYMBOL_rule = 531, /* rule */ + YYSYMBOL_rule_alloc = 532, /* rule_alloc */ + YYSYMBOL_stmt_list = 533, /* stmt_list */ + YYSYMBOL_stateful_stmt_list = 534, /* stateful_stmt_list */ + YYSYMBOL_stateful_stmt = 535, /* stateful_stmt */ + YYSYMBOL_stmt = 536, /* stmt */ + YYSYMBOL_xt_stmt = 537, /* xt_stmt */ + YYSYMBOL_chain_stmt_type = 538, /* chain_stmt_type */ + YYSYMBOL_chain_stmt = 539, /* chain_stmt */ + YYSYMBOL_verdict_stmt = 540, /* verdict_stmt */ + YYSYMBOL_verdict_map_stmt = 541, /* verdict_map_stmt */ + YYSYMBOL_verdict_map_expr = 542, /* verdict_map_expr */ + YYSYMBOL_verdict_map_list_expr = 543, /* verdict_map_list_expr */ + YYSYMBOL_verdict_map_list_member_expr = 544, /* verdict_map_list_member_expr */ + YYSYMBOL_connlimit_stmt = 545, /* connlimit_stmt */ + YYSYMBOL_counter_stmt = 546, /* counter_stmt */ + YYSYMBOL_counter_stmt_alloc = 547, /* counter_stmt_alloc */ + YYSYMBOL_counter_args = 548, /* counter_args */ + YYSYMBOL_counter_arg = 549, /* counter_arg */ + YYSYMBOL_last_stmt = 550, /* last_stmt */ + YYSYMBOL_log_stmt = 551, /* log_stmt */ + YYSYMBOL_log_stmt_alloc = 552, /* log_stmt_alloc */ + YYSYMBOL_log_args = 553, /* log_args */ + YYSYMBOL_log_arg = 554, /* log_arg */ + YYSYMBOL_level_type = 555, /* level_type */ + YYSYMBOL_log_flags = 556, /* log_flags */ + YYSYMBOL_log_flags_tcp = 557, /* log_flags_tcp */ + YYSYMBOL_log_flag_tcp = 558, /* log_flag_tcp */ + YYSYMBOL_limit_stmt = 559, /* limit_stmt */ + YYSYMBOL_quota_mode = 560, /* quota_mode */ + YYSYMBOL_quota_unit = 561, /* quota_unit */ + YYSYMBOL_quota_used = 562, /* quota_used */ + YYSYMBOL_quota_stmt = 563, /* quota_stmt */ + YYSYMBOL_limit_mode = 564, /* limit_mode */ + YYSYMBOL_limit_burst_pkts = 565, /* limit_burst_pkts */ + YYSYMBOL_limit_rate_pkts = 566, /* limit_rate_pkts */ + YYSYMBOL_limit_burst_bytes = 567, /* limit_burst_bytes */ + YYSYMBOL_limit_rate_bytes = 568, /* limit_rate_bytes */ + YYSYMBOL_limit_bytes = 569, /* limit_bytes */ + YYSYMBOL_time_unit = 570, /* time_unit */ + YYSYMBOL_reject_stmt = 571, /* reject_stmt */ + YYSYMBOL_reject_stmt_alloc = 572, /* reject_stmt_alloc */ + YYSYMBOL_reject_with_expr = 573, /* reject_with_expr */ + YYSYMBOL_reject_opts = 574, /* reject_opts */ + YYSYMBOL_nat_stmt = 575, /* nat_stmt */ + YYSYMBOL_nat_stmt_alloc = 576, /* nat_stmt_alloc */ + YYSYMBOL_tproxy_stmt = 577, /* tproxy_stmt */ + YYSYMBOL_synproxy_stmt = 578, /* synproxy_stmt */ + YYSYMBOL_synproxy_stmt_alloc = 579, /* synproxy_stmt_alloc */ + YYSYMBOL_synproxy_args = 580, /* synproxy_args */ + YYSYMBOL_synproxy_arg = 581, /* synproxy_arg */ + YYSYMBOL_synproxy_config = 582, /* synproxy_config */ + YYSYMBOL_synproxy_obj = 583, /* synproxy_obj */ + YYSYMBOL_synproxy_ts = 584, /* synproxy_ts */ + YYSYMBOL_synproxy_sack = 585, /* synproxy_sack */ + YYSYMBOL_primary_stmt_expr = 586, /* primary_stmt_expr */ + YYSYMBOL_shift_stmt_expr = 587, /* shift_stmt_expr */ + YYSYMBOL_and_stmt_expr = 588, /* and_stmt_expr */ + YYSYMBOL_exclusive_or_stmt_expr = 589, /* exclusive_or_stmt_expr */ + YYSYMBOL_inclusive_or_stmt_expr = 590, /* inclusive_or_stmt_expr */ + YYSYMBOL_basic_stmt_expr = 591, /* basic_stmt_expr */ + YYSYMBOL_concat_stmt_expr = 592, /* concat_stmt_expr */ + YYSYMBOL_map_stmt_expr_set = 593, /* map_stmt_expr_set */ + YYSYMBOL_map_stmt_expr = 594, /* map_stmt_expr */ + YYSYMBOL_prefix_stmt_expr = 595, /* prefix_stmt_expr */ + YYSYMBOL_range_stmt_expr = 596, /* range_stmt_expr */ + YYSYMBOL_multiton_stmt_expr = 597, /* multiton_stmt_expr */ + YYSYMBOL_stmt_expr = 598, /* stmt_expr */ + YYSYMBOL_nat_stmt_args = 599, /* nat_stmt_args */ + YYSYMBOL_masq_stmt = 600, /* masq_stmt */ + YYSYMBOL_masq_stmt_alloc = 601, /* masq_stmt_alloc */ + YYSYMBOL_masq_stmt_args = 602, /* masq_stmt_args */ + YYSYMBOL_redir_stmt = 603, /* redir_stmt */ + YYSYMBOL_redir_stmt_alloc = 604, /* redir_stmt_alloc */ + YYSYMBOL_redir_stmt_arg = 605, /* redir_stmt_arg */ + YYSYMBOL_dup_stmt = 606, /* dup_stmt */ + YYSYMBOL_fwd_stmt = 607, /* fwd_stmt */ + YYSYMBOL_nf_nat_flags = 608, /* nf_nat_flags */ + YYSYMBOL_nf_nat_flag = 609, /* nf_nat_flag */ + YYSYMBOL_queue_stmt = 610, /* queue_stmt */ + YYSYMBOL_queue_stmt_compat = 611, /* queue_stmt_compat */ + YYSYMBOL_queue_stmt_alloc = 612, /* queue_stmt_alloc */ + YYSYMBOL_queue_stmt_args = 613, /* queue_stmt_args */ + YYSYMBOL_queue_stmt_arg = 614, /* queue_stmt_arg */ + YYSYMBOL_queue_expr = 615, /* queue_expr */ + YYSYMBOL_queue_stmt_expr_simple = 616, /* queue_stmt_expr_simple */ + YYSYMBOL_queue_stmt_expr = 617, /* queue_stmt_expr */ + YYSYMBOL_queue_stmt_flags = 618, /* queue_stmt_flags */ + YYSYMBOL_queue_stmt_flag = 619, /* queue_stmt_flag */ + YYSYMBOL_set_elem_expr_stmt = 620, /* set_elem_expr_stmt */ + YYSYMBOL_set_elem_expr_stmt_alloc = 621, /* set_elem_expr_stmt_alloc */ + YYSYMBOL_set_stmt = 622, /* set_stmt */ + YYSYMBOL_set_stmt_op = 623, /* set_stmt_op */ + YYSYMBOL_map_stmt = 624, /* map_stmt */ + YYSYMBOL_meter_stmt = 625, /* meter_stmt */ + YYSYMBOL_flow_stmt_legacy_alloc = 626, /* flow_stmt_legacy_alloc */ + YYSYMBOL_flow_stmt_opts = 627, /* flow_stmt_opts */ + YYSYMBOL_flow_stmt_opt = 628, /* flow_stmt_opt */ + YYSYMBOL_meter_stmt_alloc = 629, /* meter_stmt_alloc */ + YYSYMBOL_match_stmt = 630, /* match_stmt */ + YYSYMBOL_variable_expr = 631, /* variable_expr */ + YYSYMBOL_symbol_expr = 632, /* symbol_expr */ + YYSYMBOL_set_ref_expr = 633, /* set_ref_expr */ + YYSYMBOL_set_ref_symbol_expr = 634, /* set_ref_symbol_expr */ + YYSYMBOL_integer_expr = 635, /* integer_expr */ + YYSYMBOL_primary_expr = 636, /* primary_expr */ + YYSYMBOL_fib_expr = 637, /* fib_expr */ + YYSYMBOL_fib_result = 638, /* fib_result */ + YYSYMBOL_fib_flag = 639, /* fib_flag */ + YYSYMBOL_fib_tuple = 640, /* fib_tuple */ + YYSYMBOL_osf_expr = 641, /* osf_expr */ + YYSYMBOL_osf_ttl = 642, /* osf_ttl */ + YYSYMBOL_shift_expr = 643, /* shift_expr */ + YYSYMBOL_and_expr = 644, /* and_expr */ + YYSYMBOL_exclusive_or_expr = 645, /* exclusive_or_expr */ + YYSYMBOL_inclusive_or_expr = 646, /* inclusive_or_expr */ + YYSYMBOL_basic_expr = 647, /* basic_expr */ + YYSYMBOL_concat_expr = 648, /* concat_expr */ + YYSYMBOL_prefix_rhs_expr = 649, /* prefix_rhs_expr */ + YYSYMBOL_range_rhs_expr = 650, /* range_rhs_expr */ + YYSYMBOL_multiton_rhs_expr = 651, /* multiton_rhs_expr */ + YYSYMBOL_map_expr = 652, /* map_expr */ + YYSYMBOL_expr = 653, /* expr */ + YYSYMBOL_set_expr = 654, /* set_expr */ + YYSYMBOL_set_list_expr = 655, /* set_list_expr */ + YYSYMBOL_set_list_member_expr = 656, /* set_list_member_expr */ + YYSYMBOL_meter_key_expr = 657, /* meter_key_expr */ + YYSYMBOL_meter_key_expr_alloc = 658, /* meter_key_expr_alloc */ + YYSYMBOL_set_elem_expr = 659, /* set_elem_expr */ + YYSYMBOL_set_elem_key_expr = 660, /* set_elem_key_expr */ + YYSYMBOL_set_elem_expr_alloc = 661, /* set_elem_expr_alloc */ + YYSYMBOL_set_elem_options = 662, /* set_elem_options */ + YYSYMBOL_set_elem_option = 663, /* set_elem_option */ + YYSYMBOL_set_elem_expr_options = 664, /* set_elem_expr_options */ + YYSYMBOL_set_elem_stmt_list = 665, /* set_elem_stmt_list */ + YYSYMBOL_set_elem_stmt = 666, /* set_elem_stmt */ + YYSYMBOL_set_elem_expr_option = 667, /* set_elem_expr_option */ + YYSYMBOL_set_lhs_expr = 668, /* set_lhs_expr */ + YYSYMBOL_set_rhs_expr = 669, /* set_rhs_expr */ + YYSYMBOL_initializer_expr = 670, /* initializer_expr */ + YYSYMBOL_counter_config = 671, /* counter_config */ + YYSYMBOL_counter_obj = 672, /* counter_obj */ + YYSYMBOL_quota_config = 673, /* quota_config */ + YYSYMBOL_quota_obj = 674, /* quota_obj */ + YYSYMBOL_secmark_config = 675, /* secmark_config */ + YYSYMBOL_secmark_obj = 676, /* secmark_obj */ + YYSYMBOL_ct_obj_type = 677, /* ct_obj_type */ + YYSYMBOL_ct_cmd_type = 678, /* ct_cmd_type */ + YYSYMBOL_ct_l4protoname = 679, /* ct_l4protoname */ + YYSYMBOL_ct_helper_config = 680, /* ct_helper_config */ + YYSYMBOL_timeout_states = 681, /* timeout_states */ + YYSYMBOL_timeout_state = 682, /* timeout_state */ + YYSYMBOL_ct_timeout_config = 683, /* ct_timeout_config */ + YYSYMBOL_ct_expect_config = 684, /* ct_expect_config */ + YYSYMBOL_ct_obj_alloc = 685, /* ct_obj_alloc */ + YYSYMBOL_limit_config = 686, /* limit_config */ + YYSYMBOL_limit_obj = 687, /* limit_obj */ + YYSYMBOL_relational_expr = 688, /* relational_expr */ + YYSYMBOL_list_rhs_expr = 689, /* list_rhs_expr */ + YYSYMBOL_rhs_expr = 690, /* rhs_expr */ + YYSYMBOL_shift_rhs_expr = 691, /* shift_rhs_expr */ + YYSYMBOL_and_rhs_expr = 692, /* and_rhs_expr */ + YYSYMBOL_exclusive_or_rhs_expr = 693, /* exclusive_or_rhs_expr */ + YYSYMBOL_inclusive_or_rhs_expr = 694, /* inclusive_or_rhs_expr */ + YYSYMBOL_basic_rhs_expr = 695, /* basic_rhs_expr */ + YYSYMBOL_concat_rhs_expr = 696, /* concat_rhs_expr */ + YYSYMBOL_boolean_keys = 697, /* boolean_keys */ + YYSYMBOL_boolean_expr = 698, /* boolean_expr */ + YYSYMBOL_keyword_expr = 699, /* keyword_expr */ + YYSYMBOL_primary_rhs_expr = 700, /* primary_rhs_expr */ + YYSYMBOL_relational_op = 701, /* relational_op */ + YYSYMBOL_verdict_expr = 702, /* verdict_expr */ + YYSYMBOL_chain_expr = 703, /* chain_expr */ + YYSYMBOL_meta_expr = 704, /* meta_expr */ + YYSYMBOL_meta_key = 705, /* meta_key */ + YYSYMBOL_meta_key_qualified = 706, /* meta_key_qualified */ + YYSYMBOL_meta_key_unqualified = 707, /* meta_key_unqualified */ + YYSYMBOL_meta_stmt = 708, /* meta_stmt */ + YYSYMBOL_socket_expr = 709, /* socket_expr */ + YYSYMBOL_socket_key = 710, /* socket_key */ + YYSYMBOL_offset_opt = 711, /* offset_opt */ + YYSYMBOL_numgen_type = 712, /* numgen_type */ + YYSYMBOL_numgen_expr = 713, /* numgen_expr */ + YYSYMBOL_xfrm_spnum = 714, /* xfrm_spnum */ + YYSYMBOL_xfrm_dir = 715, /* xfrm_dir */ + YYSYMBOL_xfrm_state_key = 716, /* xfrm_state_key */ + YYSYMBOL_xfrm_state_proto_key = 717, /* xfrm_state_proto_key */ + YYSYMBOL_xfrm_expr = 718, /* xfrm_expr */ + YYSYMBOL_hash_expr = 719, /* hash_expr */ + YYSYMBOL_nf_key_proto = 720, /* nf_key_proto */ + YYSYMBOL_rt_expr = 721, /* rt_expr */ + YYSYMBOL_rt_key = 722, /* rt_key */ + YYSYMBOL_ct_expr = 723, /* ct_expr */ + YYSYMBOL_ct_dir = 724, /* ct_dir */ + YYSYMBOL_ct_key = 725, /* ct_key */ + YYSYMBOL_ct_key_dir = 726, /* ct_key_dir */ + YYSYMBOL_ct_key_proto_field = 727, /* ct_key_proto_field */ + YYSYMBOL_ct_key_dir_optional = 728, /* ct_key_dir_optional */ + YYSYMBOL_symbol_stmt_expr = 729, /* symbol_stmt_expr */ + YYSYMBOL_list_stmt_expr = 730, /* list_stmt_expr */ + YYSYMBOL_ct_stmt = 731, /* ct_stmt */ + YYSYMBOL_payload_stmt = 732, /* payload_stmt */ + YYSYMBOL_payload_expr = 733, /* payload_expr */ + YYSYMBOL_payload_raw_expr = 734, /* payload_raw_expr */ + YYSYMBOL_payload_base_spec = 735, /* payload_base_spec */ + YYSYMBOL_eth_hdr_expr = 736, /* eth_hdr_expr */ + YYSYMBOL_eth_hdr_field = 737, /* eth_hdr_field */ + YYSYMBOL_vlan_hdr_expr = 738, /* vlan_hdr_expr */ + YYSYMBOL_vlan_hdr_field = 739, /* vlan_hdr_field */ + YYSYMBOL_arp_hdr_expr = 740, /* arp_hdr_expr */ + YYSYMBOL_arp_hdr_field = 741, /* arp_hdr_field */ + YYSYMBOL_ip_hdr_expr = 742, /* ip_hdr_expr */ + YYSYMBOL_ip_hdr_field = 743, /* ip_hdr_field */ + YYSYMBOL_ip_option_type = 744, /* ip_option_type */ + YYSYMBOL_ip_option_field = 745, /* ip_option_field */ + YYSYMBOL_icmp_hdr_expr = 746, /* icmp_hdr_expr */ + YYSYMBOL_icmp_hdr_field = 747, /* icmp_hdr_field */ + YYSYMBOL_igmp_hdr_expr = 748, /* igmp_hdr_expr */ + YYSYMBOL_igmp_hdr_field = 749, /* igmp_hdr_field */ + YYSYMBOL_ip6_hdr_expr = 750, /* ip6_hdr_expr */ + YYSYMBOL_ip6_hdr_field = 751, /* ip6_hdr_field */ + YYSYMBOL_icmp6_hdr_expr = 752, /* icmp6_hdr_expr */ + YYSYMBOL_icmp6_hdr_field = 753, /* icmp6_hdr_field */ + YYSYMBOL_auth_hdr_expr = 754, /* auth_hdr_expr */ + YYSYMBOL_auth_hdr_field = 755, /* auth_hdr_field */ + YYSYMBOL_esp_hdr_expr = 756, /* esp_hdr_expr */ + YYSYMBOL_esp_hdr_field = 757, /* esp_hdr_field */ + YYSYMBOL_comp_hdr_expr = 758, /* comp_hdr_expr */ + YYSYMBOL_comp_hdr_field = 759, /* comp_hdr_field */ + YYSYMBOL_udp_hdr_expr = 760, /* udp_hdr_expr */ + YYSYMBOL_udp_hdr_field = 761, /* udp_hdr_field */ + YYSYMBOL_udplite_hdr_expr = 762, /* udplite_hdr_expr */ + YYSYMBOL_udplite_hdr_field = 763, /* udplite_hdr_field */ + YYSYMBOL_tcp_hdr_expr = 764, /* tcp_hdr_expr */ + YYSYMBOL_inner_inet_expr = 765, /* inner_inet_expr */ + YYSYMBOL_inner_eth_expr = 766, /* inner_eth_expr */ + YYSYMBOL_inner_expr = 767, /* inner_expr */ + YYSYMBOL_vxlan_hdr_expr = 768, /* vxlan_hdr_expr */ + YYSYMBOL_vxlan_hdr_field = 769, /* vxlan_hdr_field */ + YYSYMBOL_geneve_hdr_expr = 770, /* geneve_hdr_expr */ + YYSYMBOL_geneve_hdr_field = 771, /* geneve_hdr_field */ + YYSYMBOL_gre_hdr_expr = 772, /* gre_hdr_expr */ + YYSYMBOL_gre_hdr_field = 773, /* gre_hdr_field */ + YYSYMBOL_gretap_hdr_expr = 774, /* gretap_hdr_expr */ + YYSYMBOL_optstrip_stmt = 775, /* optstrip_stmt */ + YYSYMBOL_tcp_hdr_field = 776, /* tcp_hdr_field */ + YYSYMBOL_tcp_hdr_option_kind_and_field = 777, /* tcp_hdr_option_kind_and_field */ + YYSYMBOL_tcp_hdr_option_sack = 778, /* tcp_hdr_option_sack */ + YYSYMBOL_tcp_hdr_option_type = 779, /* tcp_hdr_option_type */ + YYSYMBOL_tcpopt_field_sack = 780, /* tcpopt_field_sack */ + YYSYMBOL_tcpopt_field_window = 781, /* tcpopt_field_window */ + YYSYMBOL_tcpopt_field_tsopt = 782, /* tcpopt_field_tsopt */ + YYSYMBOL_tcpopt_field_maxseg = 783, /* tcpopt_field_maxseg */ + YYSYMBOL_tcpopt_field_mptcp = 784, /* tcpopt_field_mptcp */ + YYSYMBOL_dccp_hdr_expr = 785, /* dccp_hdr_expr */ + YYSYMBOL_dccp_hdr_field = 786, /* dccp_hdr_field */ + YYSYMBOL_sctp_chunk_type = 787, /* sctp_chunk_type */ + YYSYMBOL_sctp_chunk_common_field = 788, /* sctp_chunk_common_field */ + YYSYMBOL_sctp_chunk_data_field = 789, /* sctp_chunk_data_field */ + YYSYMBOL_sctp_chunk_init_field = 790, /* sctp_chunk_init_field */ + YYSYMBOL_sctp_chunk_sack_field = 791, /* sctp_chunk_sack_field */ + YYSYMBOL_sctp_chunk_alloc = 792, /* sctp_chunk_alloc */ + YYSYMBOL_sctp_hdr_expr = 793, /* sctp_hdr_expr */ + YYSYMBOL_sctp_hdr_field = 794, /* sctp_hdr_field */ + YYSYMBOL_th_hdr_expr = 795, /* th_hdr_expr */ + YYSYMBOL_th_hdr_field = 796, /* th_hdr_field */ + YYSYMBOL_exthdr_expr = 797, /* exthdr_expr */ + YYSYMBOL_hbh_hdr_expr = 798, /* hbh_hdr_expr */ + YYSYMBOL_hbh_hdr_field = 799, /* hbh_hdr_field */ + YYSYMBOL_rt_hdr_expr = 800, /* rt_hdr_expr */ + YYSYMBOL_rt_hdr_field = 801, /* rt_hdr_field */ + YYSYMBOL_rt0_hdr_expr = 802, /* rt0_hdr_expr */ + YYSYMBOL_rt0_hdr_field = 803, /* rt0_hdr_field */ + YYSYMBOL_rt2_hdr_expr = 804, /* rt2_hdr_expr */ + YYSYMBOL_rt2_hdr_field = 805, /* rt2_hdr_field */ + YYSYMBOL_rt4_hdr_expr = 806, /* rt4_hdr_expr */ + YYSYMBOL_rt4_hdr_field = 807, /* rt4_hdr_field */ + YYSYMBOL_frag_hdr_expr = 808, /* frag_hdr_expr */ + YYSYMBOL_frag_hdr_field = 809, /* frag_hdr_field */ + YYSYMBOL_dst_hdr_expr = 810, /* dst_hdr_expr */ + YYSYMBOL_dst_hdr_field = 811, /* dst_hdr_field */ + YYSYMBOL_mh_hdr_expr = 812, /* mh_hdr_expr */ + YYSYMBOL_mh_hdr_field = 813, /* mh_hdr_field */ + YYSYMBOL_exthdr_exists_expr = 814, /* exthdr_exists_expr */ + YYSYMBOL_exthdr_key = 815 /* exthdr_key */ +}; +typedef enum yysymbol_kind_t yysymbol_kind_t; + + + + +#ifdef short +# undef short +#endif + +/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure + <limits.h> and (if available) <stdint.h> are included + so that the code can choose integer types of a good width. */ + +#ifndef __PTRDIFF_MAX__ +# include <limits.h> /* INFRINGES ON USER NAME SPACE */ +# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ +# include <stdint.h> /* INFRINGES ON USER NAME SPACE */ +# define YY_STDINT_H +# endif +#endif + +/* Narrow types that promote to a signed type and that can represent a + signed or unsigned integer of at least N bits. In tables they can + save space and decrease cache pressure. Promoting to a signed type + helps avoid bugs in integer arithmetic. */ + +#ifdef __INT_LEAST8_MAX__ +typedef __INT_LEAST8_TYPE__ yytype_int8; +#elif defined YY_STDINT_H +typedef int_least8_t yytype_int8; +#else +typedef signed char yytype_int8; +#endif + +#ifdef __INT_LEAST16_MAX__ +typedef __INT_LEAST16_TYPE__ yytype_int16; +#elif defined YY_STDINT_H +typedef int_least16_t yytype_int16; +#else +typedef short yytype_int16; +#endif + +/* Work around bug in HP-UX 11.23, which defines these macros + incorrectly for preprocessor constants. This workaround can likely + be removed in 2023, as HPE has promised support for HP-UX 11.23 + (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of + <https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>. */ +#ifdef __hpux +# undef UINT_LEAST8_MAX +# undef UINT_LEAST16_MAX +# define UINT_LEAST8_MAX 255 +# define UINT_LEAST16_MAX 65535 +#endif + +#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST8_TYPE__ yytype_uint8; +#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST8_MAX <= INT_MAX) +typedef uint_least8_t yytype_uint8; +#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX +typedef unsigned char yytype_uint8; +#else +typedef short yytype_uint8; +#endif + +#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST16_TYPE__ yytype_uint16; +#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST16_MAX <= INT_MAX) +typedef uint_least16_t yytype_uint16; +#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX +typedef unsigned short yytype_uint16; +#else +typedef int yytype_uint16; +#endif + +#ifndef YYPTRDIFF_T +# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ +# define YYPTRDIFF_T __PTRDIFF_TYPE__ +# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ +# elif defined PTRDIFF_MAX +# ifndef ptrdiff_t +# include <stddef.h> /* INFRINGES ON USER NAME SPACE */ +# endif +# define YYPTRDIFF_T ptrdiff_t +# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX +# else +# define YYPTRDIFF_T long +# define YYPTRDIFF_MAXIMUM LONG_MAX +# endif +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ +# include <stddef.h> /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned +# endif +#endif + +#define YYSIZE_MAXIMUM \ + YY_CAST (YYPTRDIFF_T, \ + (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ + ? YYPTRDIFF_MAXIMUM \ + : YY_CAST (YYSIZE_T, -1))) + +#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) + + +/* Stored state numbers (used for stacks). */ +typedef yytype_int16 yy_state_t; + +/* State numbers in computations. */ +typedef int yy_state_fast_t; + +#ifndef YY_ +# if defined YYENABLE_NLS && YYENABLE_NLS +# if ENABLE_NLS +# include <libintl.h> /* INFRINGES ON USER NAME SPACE */ +# define YY_(Msgid) dgettext ("bison-runtime", Msgid) +# endif +# endif +# ifndef YY_ +# define YY_(Msgid) Msgid +# endif +#endif + + +#ifndef YY_ATTRIBUTE_PURE +# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) +# else +# define YY_ATTRIBUTE_PURE +# endif +#endif + +#ifndef YY_ATTRIBUTE_UNUSED +# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) +# else +# define YY_ATTRIBUTE_UNUSED +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YY_USE(E) ((void) (E)) +#else +# define YY_USE(E) /* empty */ +#endif + +#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +/* Suppress an incorrect diagnostic about yylval being uninitialized. */ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ + _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ + _Pragma ("GCC diagnostic pop") +#else +# define YY_INITIAL_VALUE(Value) Value +#endif +#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_END +#endif +#ifndef YY_INITIAL_VALUE +# define YY_INITIAL_VALUE(Value) /* Nothing. */ +#endif + +#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ +# define YY_IGNORE_USELESS_CAST_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") +# define YY_IGNORE_USELESS_CAST_END \ + _Pragma ("GCC diagnostic pop") +#endif +#ifndef YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_END +#endif + + +#define YY_ASSERT(E) ((void) (0 && (E))) + +#if 1 + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include <alloca.h> /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include <malloc.h> /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS +# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ + /* Use EXIT_SUCCESS as a witness for stdlib.h. */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's 'empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined EXIT_SUCCESS \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined EXIT_SUCCESS +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined EXIT_SUCCESS +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* 1 */ + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \ + && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yy_state_t yyss_alloc; + YYSTYPE yyvs_alloc; + YYLTYPE yyls_alloc; +}; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE) \ + + YYSIZEOF (YYLTYPE)) \ + + 2 * YYSTACK_GAP_MAXIMUM) + +# define YYCOPY_NEEDED 1 + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ + do \ + { \ + YYPTRDIFF_T yynewbytes; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ + yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / YYSIZEOF (*yyptr); \ + } \ + while (0) + +#endif + +#if defined YYCOPY_NEEDED && YYCOPY_NEEDED +/* Copy COUNT objects from SRC to DST. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(Dst, Src, Count) \ + __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) +# else +# define YYCOPY(Dst, Src, Count) \ + do \ + { \ + YYPTRDIFF_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (Dst)[yyi] = (Src)[yyi]; \ + } \ + while (0) +# endif +# endif +#endif /* !YYCOPY_NEEDED */ + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 2 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 8857 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 372 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 444 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 1368 +/* YYNSTATES -- Number of states. */ +#define YYNSTATES 2353 + +/* YYMAXUTOK -- Last valid token kind. */ +#define YYMAXUTOK 617 + + +/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, with out-of-bounds checking. */ +#define YYTRANSLATE(YYX) \ + (0 <= (YYX) && (YYX) <= YYMAXUTOK \ + ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \ + : YYSYMBOL_YYUNDEF) + +/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM + as returned by yylex. */ +static const yytype_int16 yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 369, 2, 2, 2, + 366, 367, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 363, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 370, 2, 371, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 364, 368, 365, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362 +}; + +#if YYDEBUG + /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ +static const yytype_int16 yyrline[] = +{ + 0, 978, 978, 979, 988, 989, 992, 993, 996, 997, + 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, + 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, + 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, + 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, + 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1048, + 1049, 1050, 1052, 1060, 1075, 1082, 1094, 1102, 1103, 1104, + 1105, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, + 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1143, 1147, 1154, + 1158, 1166, 1170, 1174, 1181, 1188, 1192, 1199, 1208, 1212, + 1216, 1220, 1224, 1228, 1232, 1236, 1240, 1244, 1248, 1252, + 1256, 1262, 1268, 1272, 1279, 1283, 1291, 1298, 1305, 1309, + 1316, 1325, 1329, 1333, 1337, 1341, 1345, 1349, 1353, 1359, + 1365, 1366, 1369, 1370, 1373, 1374, 1377, 1378, 1381, 1385, + 1389, 1396, 1400, 1404, 1408, 1412, 1416, 1420, 1427, 1431, + 1435, 1441, 1445, 1449, 1455, 1459, 1463, 1467, 1471, 1475, + 1479, 1483, 1487, 1494, 1498, 1502, 1508, 1512, 1516, 1523, + 1529, 1533, 1537, 1541, 1545, 1549, 1553, 1557, 1561, 1565, + 1569, 1573, 1577, 1581, 1585, 1589, 1593, 1597, 1601, 1605, + 1609, 1613, 1617, 1621, 1625, 1629, 1633, 1637, 1641, 1645, + 1649, 1653, 1657, 1661, 1667, 1673, 1677, 1687, 1691, 1695, + 1700, 1704, 1708, 1712, 1717, 1721, 1725, 1729, 1734, 1738, + 1743, 1747, 1751, 1755, 1761, 1765, 1769, 1773, 1777, 1781, + 1785, 1791, 1798, 1804, 1812, 1818, 1826, 1835, 1836, 1839, + 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1849, 1850, 1853, + 1854, 1855, 1858, 1867, 1877, 1892, 1902, 1903, 1904, 1905, + 1906, 1917, 1927, 1938, 1948, 1959, 1970, 1979, 1988, 1997, + 2008, 2019, 2033, 2043, 2044, 2045, 2046, 2047, 2048, 2049, + 2054, 2063, 2073, 2074, 2075, 2082, 2103, 2114, 2125, 2138, + 2143, 2144, 2145, 2146, 2151, 2157, 2162, 2167, 2172, 2178, + 2183, 2188, 2189, 2200, 2201, 2204, 2208, 2211, 2212, 2213, + 2214, 2218, 2223, 2224, 2225, 2226, 2227, 2230, 2231, 2234, + 2235, 2236, 2237, 2242, 2247, 2258, 2269, 2281, 2290, 2295, + 2301, 2306, 2315, 2318, 2322, 2328, 2329, 2333, 2338, 2339, + 2340, 2341, 2355, 2359, 2363, 2369, 2374, 2381, 2386, 2391, + 2394, 2403, 2412, 2419, 2432, 2439, 2440, 2452, 2457, 2458, + 2459, 2460, 2464, 2474, 2475, 2476, 2477, 2481, 2491, 2492, + 2493, 2494, 2498, 2509, 2513, 2514, 2515, 2519, 2529, 2530, + 2531, 2532, 2536, 2546, 2547, 2548, 2549, 2553, 2563, 2564, + 2565, 2566, 2570, 2580, 2581, 2582, 2583, 2587, 2597, 2598, + 2599, 2600, 2601, 2604, 2635, 2642, 2646, 2649, 2659, 2666, + 2677, 2690, 2705, 2706, 2709, 2720, 2726, 2730, 2733, 2739, + 2752, 2757, 2766, 2767, 2770, 2771, 2774, 2775, 2776, 2779, + 2795, 2796, 2799, 2800, 2803, 2804, 2805, 2806, 2807, 2808, + 2811, 2820, 2829, 2837, 2845, 2853, 2861, 2869, 2877, 2885, + 2893, 2901, 2909, 2917, 2925, 2933, 2941, 2949, 2953, 2958, + 2966, 2973, 2980, 2994, 2998, 3005, 3009, 3015, 3027, 3033, + 3040, 3046, 3053, 3054, 3055, 3056, 3057, 3060, 3061, 3062, + 3063, 3064, 3065, 3066, 3067, 3068, 3069, 3070, 3071, 3072, + 3073, 3074, 3075, 3076, 3077, 3078, 3079, 3080, 3081, 3084, + 3095, 3096, 3099, 3108, 3112, 3118, 3124, 3129, 3132, 3137, + 3142, 3145, 3151, 3156, 3164, 3165, 3167, 3171, 3179, 3183, + 3186, 3190, 3196, 3200, 3204, 3212, 3213, 3216, 3222, 3226, + 3229, 3354, 3359, 3364, 3369, 3374, 3380, 3410, 3414, 3418, + 3422, 3426, 3432, 3436, 3439, 3443, 3449, 3463, 3472, 3480, + 3481, 3482, 3485, 3486, 3489, 3490, 3505, 3521, 3529, 3530, + 3531, 3534, 3535, 3538, 3545, 3546, 3549, 3563, 3570, 3571, + 3586, 3587, 3588, 3589, 3590, 3593, 3596, 3602, 3608, 3612, + 3616, 3623, 3630, 3637, 3644, 3650, 3656, 3662, 3665, 3666, + 3669, 3675, 3681, 3687, 3694, 3701, 3709, 3710, 3713, 3717, + 3725, 3729, 3732, 3737, 3742, 3746, 3752, 3768, 3787, 3793, + 3794, 3800, 3801, 3807, 3808, 3809, 3810, 3811, 3812, 3813, + 3814, 3815, 3816, 3817, 3818, 3819, 3822, 3823, 3827, 3833, + 3834, 3840, 3841, 3847, 3848, 3854, 3857, 3858, 3869, 3870, + 3873, 3877, 3880, 3886, 3892, 3893, 3896, 3897, 3898, 3901, + 3905, 3909, 3914, 3919, 3924, 3930, 3934, 3938, 3942, 3948, + 3953, 3957, 3965, 3974, 3975, 3978, 3981, 3985, 3990, 3996, + 3997, 4000, 4003, 4007, 4011, 4015, 4020, 4027, 4032, 4040, + 4045, 4054, 4055, 4061, 4062, 4063, 4066, 4067, 4071, 4075, + 4081, 4082, 4085, 4091, 4095, 4098, 4103, 4109, 4110, 4113, + 4114, 4115, 4121, 4122, 4123, 4124, 4127, 4128, 4134, 4135, + 4138, 4139, 4142, 4148, 4155, 4162, 4173, 4174, 4175, 4178, + 4186, 4198, 4205, 4208, 4214, 4218, 4221, 4227, 4236, 4247, + 4253, 4279, 4280, 4289, 4290, 4293, 4302, 4313, 4314, 4315, + 4316, 4317, 4318, 4319, 4320, 4321, 4322, 4323, 4324, 4325, + 4326, 4327, 4330, 4353, 4354, 4355, 4358, 4359, 4360, 4361, + 4362, 4365, 4369, 4372, 4376, 4383, 4386, 4402, 4403, 4407, + 4413, 4414, 4420, 4421, 4427, 4428, 4434, 4437, 4438, 4449, + 4455, 4461, 4462, 4465, 4471, 4472, 4473, 4476, 4483, 4488, + 4493, 4496, 4500, 4504, 4510, 4511, 4518, 4524, 4525, 4528, + 4529, 4532, 4538, 4544, 4548, 4551, 4555, 4559, 4569, 4573, + 4576, 4582, 4589, 4593, 4599, 4613, 4627, 4632, 4638, 4654, + 4658, 4666, 4670, 4674, 4684, 4687, 4688, 4691, 4692, 4693, + 4694, 4705, 4716, 4722, 4743, 4749, 4766, 4772, 4773, 4774, + 4777, 4778, 4779, 4782, 4783, 4786, 4802, 4808, 4814, 4821, + 4834, 4842, 4850, 4856, 4860, 4864, 4868, 4872, 4879, 4884, + 4895, 4909, 4915, 4919, 4923, 4927, 4931, 4935, 4939, 4943, + 4949, 4955, 4963, 4964, 4965, 4968, 4969, 4973, 4979, 4980, + 4986, 4987, 4993, 4994, 5000, 5003, 5004, 5005, 5014, 5025, + 5026, 5029, 5037, 5038, 5039, 5040, 5041, 5042, 5043, 5044, + 5045, 5046, 5047, 5048, 5049, 5050, 5053, 5054, 5055, 5056, + 5057, 5064, 5071, 5078, 5085, 5092, 5099, 5106, 5113, 5120, + 5127, 5134, 5141, 5148, 5151, 5152, 5153, 5154, 5155, 5156, + 5157, 5160, 5164, 5168, 5172, 5176, 5180, 5186, 5187, 5197, + 5201, 5205, 5221, 5222, 5225, 5226, 5227, 5228, 5229, 5232, + 5233, 5234, 5235, 5236, 5237, 5238, 5239, 5240, 5241, 5242, + 5243, 5244, 5245, 5246, 5247, 5248, 5249, 5250, 5251, 5252, + 5253, 5254, 5255, 5258, 5278, 5282, 5296, 5300, 5304, 5310, + 5314, 5320, 5321, 5322, 5325, 5326, 5329, 5330, 5333, 5339, + 5340, 5343, 5344, 5347, 5348, 5351, 5352, 5355, 5363, 5390, + 5395, 5400, 5406, 5407, 5410, 5414, 5434, 5435, 5436, 5437, + 5440, 5444, 5448, 5454, 5455, 5458, 5459, 5460, 5461, 5462, + 5463, 5464, 5465, 5466, 5467, 5468, 5469, 5470, 5471, 5472, + 5473, 5474, 5477, 5478, 5479, 5480, 5481, 5482, 5483, 5486, + 5487, 5488, 5489, 5492, 5493, 5494, 5495, 5498, 5499, 5502, + 5508, 5516, 5529, 5536, 5542, 5548, 5557, 5558, 5559, 5560, + 5561, 5562, 5563, 5564, 5565, 5566, 5567, 5568, 5569, 5570, + 5571, 5572, 5573, 5574, 5575, 5576, 5577, 5578, 5581, 5590, + 5591, 5592, 5593, 5606, 5612, 5613, 5614, 5617, 5623, 5624, + 5625, 5626, 5627, 5630, 5636, 5637, 5638, 5639, 5640, 5641, + 5642, 5643, 5644, 5647, 5651, 5659, 5666, 5667, 5668, 5669, + 5670, 5671, 5672, 5673, 5674, 5675, 5676, 5677, 5680, 5681, + 5682, 5683, 5686, 5687, 5688, 5689, 5690, 5693, 5699, 5700, + 5701, 5702, 5703, 5704, 5705, 5708, 5714, 5715, 5716, 5717, + 5720, 5726, 5727, 5728, 5729, 5730, 5731, 5732, 5733, 5734, + 5736, 5742, 5743, 5744, 5745, 5746, 5747, 5748, 5749, 5750, + 5751, 5754, 5760, 5761, 5762, 5763, 5764, 5767, 5773, 5774, + 5777, 5783, 5784, 5785, 5788, 5794, 5795, 5796, 5797, 5800, + 5806, 5807, 5808, 5809, 5812, 5816, 5821, 5825, 5832, 5833, + 5834, 5835, 5836, 5837, 5838, 5839, 5840, 5841, 5842, 5843, + 5844, 5845, 5848, 5849, 5850, 5853, 5854, 5857, 5865, 5873, + 5874, 5877, 5885, 5893, 5894, 5897, 5901, 5908, 5909, 5910, + 5913, 5920, 5927, 5928, 5929, 5930, 5931, 5932, 5933, 5934, + 5935, 5936, 5939, 5944, 5949, 5954, 5959, 5964, 5971, 5972, + 5973, 5974, 5975, 5978, 5979, 5980, 5981, 5982, 5983, 5984, + 5985, 5986, 5987, 5988, 5989, 5998, 5999, 6002, 6005, 6006, + 6009, 6012, 6015, 6019, 6030, 6031, 6032, 6035, 6036, 6037, + 6038, 6039, 6040, 6041, 6042, 6043, 6044, 6045, 6046, 6047, + 6048, 6049, 6050, 6051, 6052, 6055, 6056, 6057, 6060, 6061, + 6062, 6063, 6066, 6067, 6068, 6069, 6070, 6073, 6074, 6075, + 6076, 6079, 6084, 6088, 6092, 6096, 6100, 6104, 6109, 6114, + 6119, 6124, 6129, 6136, 6140, 6146, 6147, 6148, 6149, 6152, + 6160, 6161, 6164, 6165, 6166, 6167, 6168, 6169, 6170, 6171, + 6174, 6180, 6181, 6184, 6190, 6191, 6192, 6193, 6196, 6202, + 6208, 6214, 6217, 6223, 6224, 6225, 6226, 6232, 6238, 6239, + 6240, 6241, 6242, 6243, 6246, 6252, 6253, 6256, 6262, 6263, + 6264, 6265, 6266, 6269, 6283, 6284, 6285, 6286, 6287 +}; +#endif + +/** Accessing symbol of state STATE. */ +#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State]) + +#if 1 +/* The user-facing name of the symbol whose (internal) number is + YYSYMBOL. No bounds checking. */ +static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED; + +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "\"end of file\"", "error", "\"invalid token\"", "\"junk\"", + "\"newline\"", "\"colon\"", "\"semicolon\"", "\"comma\"", "\".\"", + "\"==\"", "\"!=\"", "\"<\"", "\">\"", "\">=\"", "\"<=\"", "\"<<\"", + "\">>\"", "\"&\"", "\"^\"", "\"!\"", "\"/\"", "\"*\"", "\"-\"", "\"@\"", + "\"vmap\"", "\"+\"", "\"include\"", "\"define\"", "\"redefine\"", + "\"undefine\"", "\"fib\"", "\"socket\"", "\"transparent\"", + "\"wildcard\"", "\"cgroupv2\"", "\"tproxy\"", "\"osf\"", "\"synproxy\"", + "\"mss\"", "\"wscale\"", "\"typeof\"", "\"hook\"", "\"hooks\"", + "\"device\"", "\"devices\"", "\"table\"", "\"tables\"", "\"chain\"", + "\"chains\"", "\"rule\"", "\"rules\"", "\"sets\"", "\"set\"", + "\"element\"", "\"map\"", "\"maps\"", "\"flowtable\"", "\"handle\"", + "\"ruleset\"", "\"trace\"", "\"inet\"", "\"netdev\"", "\"add\"", + "\"update\"", "\"replace\"", "\"create\"", "\"insert\"", "\"delete\"", + "\"get\"", "\"list\"", "\"reset\"", "\"flush\"", "\"rename\"", + "\"describe\"", "\"import\"", "\"export\"", "\"destroy\"", "\"monitor\"", + "\"all\"", "\"accept\"", "\"drop\"", "\"continue\"", "\"jump\"", + "\"goto\"", "\"return\"", "\"to\"", "\"constant\"", "\"interval\"", + "\"dynamic\"", "\"auto-merge\"", "\"timeout\"", "\"gc-interval\"", + "\"elements\"", "\"expires\"", "\"policy\"", "\"memory\"", + "\"performance\"", "\"size\"", "\"flow\"", "\"offload\"", "\"meter\"", + "\"meters\"", "\"flowtables\"", "\"number\"", "\"string\"", + "\"quoted string\"", "\"string with a trailing asterisk\"", "\"ll\"", + "\"nh\"", "\"th\"", "\"bridge\"", "\"ether\"", "\"saddr\"", "\"daddr\"", + "\"type\"", "\"vlan\"", "\"id\"", "\"cfi\"", "\"dei\"", "\"pcp\"", + "\"arp\"", "\"htype\"", "\"ptype\"", "\"hlen\"", "\"plen\"", + "\"operation\"", "\"ip\"", "\"version\"", "\"hdrlength\"", "\"dscp\"", + "\"ecn\"", "\"length\"", "\"frag-off\"", "\"ttl\"", "\"protocol\"", + "\"checksum\"", "\"ptr\"", "\"value\"", "\"lsrr\"", "\"rr\"", "\"ssrr\"", + "\"ra\"", "\"icmp\"", "\"code\"", "\"seq\"", "\"gateway\"", "\"mtu\"", + "\"igmp\"", "\"mrt\"", "\"options\"", "\"ip6\"", "\"priority\"", + "\"flowlabel\"", "\"nexthdr\"", "\"hoplimit\"", "\"icmpv6\"", + "\"param-problem\"", "\"max-delay\"", "\"taddr\"", "\"ah\"", + "\"reserved\"", "\"spi\"", "\"esp\"", "\"comp\"", "\"flags\"", "\"cpi\"", + "\"port\"", "\"udp\"", "\"sport\"", "\"dport\"", "\"udplite\"", + "\"csumcov\"", "\"tcp\"", "\"ackseq\"", "\"doff\"", "\"window\"", + "\"urgptr\"", "\"option\"", "\"echo\"", "\"eol\"", "\"mptcp\"", + "\"nop\"", "\"sack\"", "\"sack0\"", "\"sack1\"", "\"sack2\"", + "\"sack3\"", "\"sack-permitted\"", "\"fastopen\"", "\"md5sig\"", + "\"timestamp\"", "\"count\"", "\"left\"", "\"right\"", "\"tsval\"", + "\"tsecr\"", "\"subtype\"", "\"dccp\"", "\"vxlan\"", "\"vni\"", + "\"gre\"", "\"gretap\"", "\"geneve\"", "\"sctp\"", "\"chunk\"", + "\"data\"", "\"init\"", "\"init-ack\"", "\"heartbeat\"", + "\"heartbeat-ack\"", "\"abort\"", "\"shutdown\"", "\"shutdown-ack\"", + "\"error\"", "\"cookie-echo\"", "\"cookie-ack\"", "\"ecne\"", "\"cwr\"", + "\"shutdown-complete\"", "\"asconf-ack\"", "\"forward-tsn\"", + "\"asconf\"", "\"tsn\"", "\"stream\"", "\"ssn\"", "\"ppid\"", + "\"init-tag\"", "\"a-rwnd\"", "\"num-outbound-streams\"", + "\"num-inbound-streams\"", "\"initial-tsn\"", "\"cum-tsn-ack\"", + "\"num-gap-ack-blocks\"", "\"num-dup-tsns\"", "\"lowest-tsn\"", + "\"seqno\"", "\"new-cum-tsn\"", "\"vtag\"", "\"rt\"", "\"rt0\"", + "\"rt2\"", "\"srh\"", "\"seg-left\"", "\"addr\"", "\"last-entry\"", + "\"tag\"", "\"sid\"", "\"hbh\"", "\"frag\"", "\"reserved2\"", + "\"more-fragments\"", "\"dst\"", "\"mh\"", "\"meta\"", "\"mark\"", + "\"iif\"", "\"iifname\"", "\"iiftype\"", "\"oif\"", "\"oifname\"", + "\"oiftype\"", "\"skuid\"", "\"skgid\"", "\"nftrace\"", "\"rtclassid\"", + "\"ibriport\"", "\"obriport\"", "\"ibrname\"", "\"obrname\"", + "\"pkttype\"", "\"cpu\"", "\"iifgroup\"", "\"oifgroup\"", "\"cgroup\"", + "\"time\"", "\"classid\"", "\"nexthop\"", "\"ct\"", "\"l3proto\"", + "\"proto-src\"", "\"proto-dst\"", "\"zone\"", "\"direction\"", + "\"event\"", "\"expectation\"", "\"expiration\"", "\"helper\"", + "\"label\"", "\"state\"", "\"status\"", "\"original\"", "\"reply\"", + "\"counter\"", "\"name\"", "\"packets\"", "\"bytes\"", "\"avgpkt\"", + "\"last\"", "\"never\"", "\"counters\"", "\"quotas\"", "\"limits\"", + "\"synproxys\"", "\"helpers\"", "\"log\"", "\"prefix\"", "\"group\"", + "\"snaplen\"", "\"queue-threshold\"", "\"level\"", "\"limit\"", + "\"rate\"", "\"burst\"", "\"over\"", "\"until\"", "\"quota\"", + "\"used\"", "\"secmark\"", "\"secmarks\"", "\"second\"", "\"minute\"", + "\"hour\"", "\"day\"", "\"week\"", "\"reject\"", "\"with\"", "\"icmpx\"", + "\"snat\"", "\"dnat\"", "\"masquerade\"", "\"redirect\"", "\"random\"", + "\"fully-random\"", "\"persistent\"", "\"queue\"", "\"num\"", + "\"bypass\"", "\"fanout\"", "\"dup\"", "\"fwd\"", "\"numgen\"", + "\"inc\"", "\"mod\"", "\"offset\"", "\"jhash\"", "\"symhash\"", + "\"seed\"", "\"position\"", "\"index\"", "\"comment\"", "\"xml\"", + "\"json\"", "\"vm\"", "\"notrack\"", "\"exists\"", "\"missing\"", + "\"exthdr\"", "\"ipsec\"", "\"reqid\"", "\"spnum\"", "\"in\"", "\"out\"", + "\"xt\"", "'='", "'{'", "'}'", "'('", "')'", "'|'", "'$'", "'['", "']'", + "$accept", "input", "stmt_separator", "opt_newline", "close_scope_ah", + "close_scope_arp", "close_scope_at", "close_scope_comp", + "close_scope_ct", "close_scope_counter", "close_scope_last", + "close_scope_dccp", "close_scope_destroy", "close_scope_dst", + "close_scope_dup", "close_scope_esp", "close_scope_eth", + "close_scope_export", "close_scope_fib", "close_scope_frag", + "close_scope_fwd", "close_scope_gre", "close_scope_hash", + "close_scope_hbh", "close_scope_ip", "close_scope_ip6", + "close_scope_vlan", "close_scope_icmp", "close_scope_igmp", + "close_scope_import", "close_scope_ipsec", "close_scope_list", + "close_scope_limit", "close_scope_meta", "close_scope_mh", + "close_scope_monitor", "close_scope_nat", "close_scope_numgen", + "close_scope_osf", "close_scope_policy", "close_scope_quota", + "close_scope_queue", "close_scope_reject", "close_scope_reset", + "close_scope_rt", "close_scope_sctp", "close_scope_sctp_chunk", + "close_scope_secmark", "close_scope_socket", "close_scope_tcp", + "close_scope_tproxy", "close_scope_type", "close_scope_th", + "close_scope_udp", "close_scope_udplite", "close_scope_log", + "close_scope_synproxy", "close_scope_xt", "common_block", "line", + "base_cmd", "add_cmd", "replace_cmd", "create_cmd", "insert_cmd", + "table_or_id_spec", "chain_or_id_spec", "set_or_id_spec", + "obj_or_id_spec", "delete_cmd", "destroy_cmd", "get_cmd", "list_cmd", + "basehook_device_name", "basehook_spec", "reset_cmd", "flush_cmd", + "rename_cmd", "import_cmd", "export_cmd", "monitor_cmd", "monitor_event", + "monitor_object", "monitor_format", "markup_format", "describe_cmd", + "table_block_alloc", "table_options", "table_block", "chain_block_alloc", + "chain_block", "subchain_block", "typeof_data_expr", "typeof_expr", + "set_block_alloc", "set_block", "set_block_expr", "set_flag_list", + "set_flag", "map_block_alloc", "map_block_obj_type", + "map_block_data_interval", "map_block", "set_mechanism", + "set_policy_spec", "flowtable_block_alloc", "flowtable_block", + "flowtable_expr", "flowtable_list_expr", "flowtable_expr_member", + "data_type_atom_expr", "data_type_expr", "obj_block_alloc", + "counter_block", "quota_block", "ct_helper_block", "ct_timeout_block", + "ct_expect_block", "limit_block", "secmark_block", "synproxy_block", + "type_identifier", "hook_spec", "prio_spec", "extended_prio_name", + "extended_prio_spec", "int_num", "dev_spec", "flags_spec", "policy_spec", + "policy_expr", "chain_policy", "identifier", "string", "time_spec", + "time_spec_or_num_s", "family_spec", "family_spec_explicit", + "table_spec", "tableid_spec", "chain_spec", "chainid_spec", + "chain_identifier", "set_spec", "setid_spec", "set_identifier", + "flowtable_spec", "flowtableid_spec", "flowtable_identifier", "obj_spec", + "objid_spec", "obj_identifier", "handle_spec", "position_spec", + "index_spec", "rule_position", "ruleid_spec", "comment_spec", + "ruleset_spec", "rule", "rule_alloc", "stmt_list", "stateful_stmt_list", + "stateful_stmt", "stmt", "xt_stmt", "chain_stmt_type", "chain_stmt", + "verdict_stmt", "verdict_map_stmt", "verdict_map_expr", + "verdict_map_list_expr", "verdict_map_list_member_expr", + "connlimit_stmt", "counter_stmt", "counter_stmt_alloc", "counter_args", + "counter_arg", "last_stmt", "log_stmt", "log_stmt_alloc", "log_args", + "log_arg", "level_type", "log_flags", "log_flags_tcp", "log_flag_tcp", + "limit_stmt", "quota_mode", "quota_unit", "quota_used", "quota_stmt", + "limit_mode", "limit_burst_pkts", "limit_rate_pkts", "limit_burst_bytes", + "limit_rate_bytes", "limit_bytes", "time_unit", "reject_stmt", + "reject_stmt_alloc", "reject_with_expr", "reject_opts", "nat_stmt", + "nat_stmt_alloc", "tproxy_stmt", "synproxy_stmt", "synproxy_stmt_alloc", + "synproxy_args", "synproxy_arg", "synproxy_config", "synproxy_obj", + "synproxy_ts", "synproxy_sack", "primary_stmt_expr", "shift_stmt_expr", + "and_stmt_expr", "exclusive_or_stmt_expr", "inclusive_or_stmt_expr", + "basic_stmt_expr", "concat_stmt_expr", "map_stmt_expr_set", + "map_stmt_expr", "prefix_stmt_expr", "range_stmt_expr", + "multiton_stmt_expr", "stmt_expr", "nat_stmt_args", "masq_stmt", + "masq_stmt_alloc", "masq_stmt_args", "redir_stmt", "redir_stmt_alloc", + "redir_stmt_arg", "dup_stmt", "fwd_stmt", "nf_nat_flags", "nf_nat_flag", + "queue_stmt", "queue_stmt_compat", "queue_stmt_alloc", "queue_stmt_args", + "queue_stmt_arg", "queue_expr", "queue_stmt_expr_simple", + "queue_stmt_expr", "queue_stmt_flags", "queue_stmt_flag", + "set_elem_expr_stmt", "set_elem_expr_stmt_alloc", "set_stmt", + "set_stmt_op", "map_stmt", "meter_stmt", "flow_stmt_legacy_alloc", + "flow_stmt_opts", "flow_stmt_opt", "meter_stmt_alloc", "match_stmt", + "variable_expr", "symbol_expr", "set_ref_expr", "set_ref_symbol_expr", + "integer_expr", "primary_expr", "fib_expr", "fib_result", "fib_flag", + "fib_tuple", "osf_expr", "osf_ttl", "shift_expr", "and_expr", + "exclusive_or_expr", "inclusive_or_expr", "basic_expr", "concat_expr", + "prefix_rhs_expr", "range_rhs_expr", "multiton_rhs_expr", "map_expr", + "expr", "set_expr", "set_list_expr", "set_list_member_expr", + "meter_key_expr", "meter_key_expr_alloc", "set_elem_expr", + "set_elem_key_expr", "set_elem_expr_alloc", "set_elem_options", + "set_elem_option", "set_elem_expr_options", "set_elem_stmt_list", + "set_elem_stmt", "set_elem_expr_option", "set_lhs_expr", "set_rhs_expr", + "initializer_expr", "counter_config", "counter_obj", "quota_config", + "quota_obj", "secmark_config", "secmark_obj", "ct_obj_type", + "ct_cmd_type", "ct_l4protoname", "ct_helper_config", "timeout_states", + "timeout_state", "ct_timeout_config", "ct_expect_config", "ct_obj_alloc", + "limit_config", "limit_obj", "relational_expr", "list_rhs_expr", + "rhs_expr", "shift_rhs_expr", "and_rhs_expr", "exclusive_or_rhs_expr", + "inclusive_or_rhs_expr", "basic_rhs_expr", "concat_rhs_expr", + "boolean_keys", "boolean_expr", "keyword_expr", "primary_rhs_expr", + "relational_op", "verdict_expr", "chain_expr", "meta_expr", "meta_key", + "meta_key_qualified", "meta_key_unqualified", "meta_stmt", "socket_expr", + "socket_key", "offset_opt", "numgen_type", "numgen_expr", "xfrm_spnum", + "xfrm_dir", "xfrm_state_key", "xfrm_state_proto_key", "xfrm_expr", + "hash_expr", "nf_key_proto", "rt_expr", "rt_key", "ct_expr", "ct_dir", + "ct_key", "ct_key_dir", "ct_key_proto_field", "ct_key_dir_optional", + "symbol_stmt_expr", "list_stmt_expr", "ct_stmt", "payload_stmt", + "payload_expr", "payload_raw_expr", "payload_base_spec", "eth_hdr_expr", + "eth_hdr_field", "vlan_hdr_expr", "vlan_hdr_field", "arp_hdr_expr", + "arp_hdr_field", "ip_hdr_expr", "ip_hdr_field", "ip_option_type", + "ip_option_field", "icmp_hdr_expr", "icmp_hdr_field", "igmp_hdr_expr", + "igmp_hdr_field", "ip6_hdr_expr", "ip6_hdr_field", "icmp6_hdr_expr", + "icmp6_hdr_field", "auth_hdr_expr", "auth_hdr_field", "esp_hdr_expr", + "esp_hdr_field", "comp_hdr_expr", "comp_hdr_field", "udp_hdr_expr", + "udp_hdr_field", "udplite_hdr_expr", "udplite_hdr_field", "tcp_hdr_expr", + "inner_inet_expr", "inner_eth_expr", "inner_expr", "vxlan_hdr_expr", + "vxlan_hdr_field", "geneve_hdr_expr", "geneve_hdr_field", "gre_hdr_expr", + "gre_hdr_field", "gretap_hdr_expr", "optstrip_stmt", "tcp_hdr_field", + "tcp_hdr_option_kind_and_field", "tcp_hdr_option_sack", + "tcp_hdr_option_type", "tcpopt_field_sack", "tcpopt_field_window", + "tcpopt_field_tsopt", "tcpopt_field_maxseg", "tcpopt_field_mptcp", + "dccp_hdr_expr", "dccp_hdr_field", "sctp_chunk_type", + "sctp_chunk_common_field", "sctp_chunk_data_field", + "sctp_chunk_init_field", "sctp_chunk_sack_field", "sctp_chunk_alloc", + "sctp_hdr_expr", "sctp_hdr_field", "th_hdr_expr", "th_hdr_field", + "exthdr_expr", "hbh_hdr_expr", "hbh_hdr_field", "rt_hdr_expr", + "rt_hdr_field", "rt0_hdr_expr", "rt0_hdr_field", "rt2_hdr_expr", + "rt2_hdr_field", "rt4_hdr_expr", "rt4_hdr_field", "frag_hdr_expr", + "frag_hdr_field", "dst_hdr_expr", "dst_hdr_field", "mh_hdr_expr", + "mh_hdr_field", "exthdr_exists_expr", "exthdr_key", YY_NULLPTR +}; + +static const char * +yysymbol_name (yysymbol_kind_t yysymbol) +{ + return yytname[yysymbol]; +} +#endif + +#ifdef YYPRINT +/* YYTOKNUM[NUM] -- (External) token number corresponding to the + (internal) symbol number NUM (which must be that of a token). */ +static const yytype_int16 yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, + 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, + 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, + 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, + 615, 616, 617, 61, 123, 125, 40, 41, 124, 36, + 91, 93 +}; +#endif + +#define YYPACT_NINF (-1837) + +#define yypact_value_is_default(Yyn) \ + ((Yyn) == YYPACT_NINF) + +#define YYTABLE_NINF (-1049) + +#define yytable_value_is_error(Yyn) \ + 0 + + /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +static const yytype_int16 yypact[] = +{ + -1837, 8167, -1837, 370, -1837, -1837, 120, 257, 257, 257, + 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, -1837, -1837, + 2577, 296, 2378, 319, 1563, 227, 2797, 881, 1594, 348, + 7783, 199, 208, 2365, 325, -1837, -1837, -1837, -1837, 577, + 1315, 1315, 1315, 1315, -1837, -1837, -1837, 1024, -1837, 257, + -1837, 257, 134, 6943, -1837, 370, -1837, -1837, 275, 281, + 370, 257, -1837, 122, 250, 6943, 257, -1837, 323, -1837, + 257, -1837, -1837, 1315, -1837, 1315, 1315, 1315, 1315, 1315, + 1315, 1315, 578, 1315, 1315, 1315, 1315, -1837, 1315, -1837, + 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 612, 1315, + 1315, 1315, 1315, -1837, 1315, -1837, 1315, 1315, 1315, 1315, + 1315, 1315, 1372, 1315, 1315, 1315, 1315, 1315, 532, 1315, + 1315, 1315, 113, 1315, 2325, 2443, 2452, 2534, 1315, 1315, + 1315, 2661, -1837, 1315, 728, 1315, 1315, 1315, 1315, 1228, + 1237, 1315, -1837, 1315, 1315, 1315, 1315, 1315, 493, 1315, + -1837, 1315, -1837, 1559, 632, 785, 528, -1837, -1837, -1837, + -1837, 788, 1034, 1590, 2270, 2686, 1131, 657, 2079, 2810, + 1668, 123, 924, 939, 1151, 3220, 913, 3634, 773, -1837, + 5759, 818, 977, 432, 438, 800, 235, 1149, 295, 1722, + 5013, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, 5435, -1837, -1837, 5, 7419, 357, 1272, 606, + 7783, 257, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, 1088, -1837, -1837, 367, -1837, -1837, 1088, -1837, -1837, + 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 612, 1315, + 1315, 1315, 1315, -1837, -1837, -1837, 1611, -1837, -1837, -1837, + 1315, 1315, 1315, -44, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, 636, 665, 679, -1837, -1837, -1837, 821, 466, 1005, + -1837, -1837, -1837, 655, -1837, -1837, -1837, 127, 127, -1837, + 355, 257, 8446, 3291, 547, 550, -1837, 96, 749, -1837, + -1837, -1837, -1837, -1837, 174, 770, 897, -1837, 768, 893, + -1837, 570, 6943, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, 757, -1837, -1837, 919, -1837, -1837, -1837, 596, + -1837, 5327, -1837, -1837, 853, -1837, 241, -1837, 424, -1837, + -1837, -1837, -1837, 1391, -1837, 146, -1837, -1837, 858, -1837, + -1837, -1837, 1095, 911, 923, 582, -1837, 752, -1837, 6457, + -1837, -1837, -1837, 936, -1837, -1837, -1837, 940, -1837, -1837, + 6797, 6797, -1837, -1837, 156, 677, 707, -1837, -1837, 711, + -1837, -1837, -1837, 716, -1837, 721, 963, 6943, -1837, 122, + 250, -1837, 323, -1837, -1837, 1315, 1315, 1315, 682, -1837, + -1837, -1837, 6943, -1837, 274, -1837, -1837, -1837, 383, -1837, + -1837, -1837, 440, 250, -1837, -1837, -1837, 500, -1837, -1837, + 323, -1837, 506, 733, -1837, -1837, -1837, -1837, 1315, -1837, + -1837, -1837, -1837, 323, -1837, -1837, -1837, 1063, -1837, -1837, + -1837, -1837, 1315, -1837, -1837, -1837, -1837, -1837, -1837, 1315, + 1315, -1837, -1837, -1837, 1086, 1090, -1837, 1315, 1093, -1837, + 1315, -1837, 1315, -1837, 1315, -1837, 1315, -1837, -1837, -1837, + -1837, 1315, -1837, -1837, -1837, 1315, 1315, 328, 257, -1837, + -1837, -1837, 323, -1837, -1837, 1315, -1837, -1837, 1315, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, 1315, -1837, + 257, -1837, -1837, -1837, -1837, 1145, -1837, -1837, -1837, -1837, + -1837, 1171, 656, -1837, -1837, 875, -1837, -1837, 1087, 49, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, 673, 698, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, 1312, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, 2809, -1837, -1837, -1837, -1837, 1092, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, 3029, -1837, 5968, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, 3975, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, 554, -1837, + -1837, 840, -1837, -1837, -1837, -1837, -1837, -1837, 850, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, 2175, -1837, -1837, -1837, -1837, 908, 262, 912, 1157, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, 921, + 929, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, 323, -1837, 733, -1837, 1315, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, 1088, -1837, -1837, -1837, -1837, 39, 13, 690, + 111, -1837, -1837, -1837, 5536, 1216, 7210, 7783, 1126, -1837, + -1837, -1837, -1837, 1283, 1285, 82, 1259, 1263, 1269, 126, + 1271, 2175, 1276, 7210, 114, 7210, 842, 7210, -1837, -1837, + 1227, 7783, 866, 7210, 7210, 1248, 1644, -1837, 6475, 163, + -1837, 1644, -1837, -1837, -1837, 972, -1837, 1242, 1249, 757, + -1837, -1837, -1837, 884, 1644, 1253, 1267, 1303, 1644, 919, + -1837, -1837, 130, -1837, -1837, 7210, -1837, -1837, 5745, 1277, + 1034, 1590, 2270, 2686, -1837, 2079, 664, -1837, -1837, -1837, + -1837, 1281, -1837, -1837, -1837, -1837, 7210, -1837, 1255, 1392, + 1398, 1062, 441, 327, -1837, -1837, -1837, -1837, 1429, 1484, + 1438, -1837, -1837, -1837, -1837, 1449, -1837, -1837, -1837, -1837, + 622, -1837, -1837, 1456, 1460, -1837, -1837, -1837, 1370, 1381, + -1837, -1837, 853, -1837, -1837, 1474, -1837, -1837, -1837, -1837, + 1480, -1837, -1837, 5954, -1837, 1480, -1837, -1837, -1837, 102, + -1837, -1837, 1391, -1837, 1486, -1837, 257, -1837, 1125, -1837, + 257, 157, -1837, 8299, 8299, 8299, 8299, 8299, 7783, 121, + 7988, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, 8299, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, 703, -1837, 1357, 1489, 1495, 1147, + 902, 1513, -1837, -1837, -1837, 7988, 7210, 7210, 1452, 159, + 370, 1525, -1837, 1168, 370, 1464, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, 1503, 1195, 1206, 1209, -1837, + 1225, 1239, -1837, -1837, -1837, -1837, 1298, 1290, 1099, 1644, + -1837, -1837, 1508, 1510, 1515, 1256, 1530, -1837, 1532, 1278, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, 1536, -1837, -1837, + -1837, -1837, -1837, 1315, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, 1541, 632, -1837, -1837, -1837, -1837, 1546, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, 1176, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, 1548, -1837, 1459, -1837, -1837, 1462, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, 1306, -1837, + 1311, 1524, -1837, -1837, -1837, -1837, -1837, -1837, -1837, 1163, + 1689, 1777, 1777, -1837, -1837, -1837, 1425, -1837, -1837, -1837, + -1837, 1430, 1439, -1837, 1440, 1436, 1443, 572, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, 1588, -1837, -1837, + 1593, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, 1396, -1837, 1405, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, 1595, 1608, 1350, -1837, -1837, -1837, -1837, + -1837, 1612, 272, -1837, -1837, -1837, 1353, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, 1355, 1356, 1367, 1632, -1837, -1837, + 842, -1837, -1837, -1837, 1635, -1837, -1837, -1837, -1837, 7210, + 2686, 2079, 1735, 6163, -1837, 146, 260, 1734, 3115, 1644, + 1644, 1653, 7783, 7210, 7210, 7210, -1837, 1662, 7210, 1715, + 7210, -1837, -1837, -1837, -1837, -1837, -1837, -1837, 1665, -1837, + 154, 1749, -1837, -1837, 247, 297, 262, -1837, 410, 476, + 183, 1730, -1837, 7210, -1837, -1837, 893, 1542, 1134, 277, + -1837, 829, 1513, 893, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, 1628, 591, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, 1073, 1164, -1837, 1265, -1837, -1837, -1837, + 7210, 1774, 7210, -1837, -1837, -1837, 667, 726, -1837, 7210, + -1837, -1837, 1417, -1837, -1837, 7210, 7210, 7210, 7210, 7210, + 1686, 7210, 7210, 177, 7210, 1480, 7210, 1707, 1787, 1713, + 2495, 2495, -1837, -1837, -1837, 7210, 1484, 7210, 1484, -1837, + 1778, 1784, -1837, 866, -1837, 7783, -1837, 7783, -1837, -1837, + -1837, 1357, 1489, 1495, -1837, 893, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, 1441, 8299, 8299, 8299, 8299, 8299, 8299, + 8299, 8299, 8488, 8299, 8299, 795, -1837, 1178, -1837, -1837, + -1837, -1837, -1837, 1708, -1837, 304, 409, -1837, 2905, 3652, + 3251, 4477, 841, -1837, -1837, -1837, -1837, -1837, -1837, 1446, + 1468, 1471, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, 1806, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, 3115, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, 1453, + 1470, -1837, -1837, -1837, -1837, -1837, -1837, 1350, 668, 1742, + -1837, -1837, -1837, -1837, -1837, 1437, -1837, -1837, -1837, -1837, + -1837, 1554, 1203, -1837, 1665, 1673, -1837, 539, 154, -1837, + 990, -1837, -1837, 7210, 7210, 1841, -1837, 1747, 1747, -1837, + 260, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + 1500, 1734, 6943, 260, -1837, -1837, -1837, -1837, -1837, -1837, + 7210, -1837, -1837, 253, 1555, 1560, 1856, -1837, -1837, -1837, + 1567, 102, -1837, 7783, 102, 7210, 1836, -1837, 8218, -1837, + 1696, 1597, 1573, 1581, 1099, 1134, -1837, 1747, 1747, -1837, + 277, -1837, 6475, -1837, 5051, -1837, -1837, -1837, -1837, 1888, + -1837, -1837, 1461, -1837, -1837, 1461, -1837, 1826, 1461, -1837, + -1837, 7210, -1837, -1837, -1837, -1837, -1837, 1255, 1392, 1398, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, 1897, 7210, 1737, + 7210, -1837, -1837, -1837, -1837, 1484, -1837, 1484, 1480, -1837, + -1837, 237, 6943, 6579, 166, -1837, -1837, -1837, 1525, 1900, + -1837, -1837, 1357, 1489, 1495, -1837, 231, 1525, -1837, -1837, + 829, 8299, 8488, -1837, 1805, 1878, -1837, -1837, -1837, -1837, + -1837, 257, 257, 257, 257, 257, 1815, 658, 257, 257, + 257, 257, -1837, -1837, -1837, 370, -1837, 1562, 108, -1837, + 1821, -1837, -1837, -1837, 370, 370, 370, 370, 370, 7783, + -1837, 1747, 1747, 1566, 1482, 1820, 983, 1766, 1741, -1837, + -1837, -1837, 370, 370, 531, -1837, 7783, 1747, 1747, 1570, + 983, 1766, -1837, -1837, -1837, 370, 370, 531, 1830, 1577, + 1837, -1837, -1837, -1837, -1837, -1837, 5203, 4006, 3513, 4831, + 1207, -1837, -1837, -1837, -1837, -1837, -1837, -1837, 4360, 1501, + -1837, -1837, 1838, -1837, -1837, -1837, 1937, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, 1843, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, 2014, -1837, 737, 472, 1072, 1844, + -1837, -1837, -1837, -1837, -1837, 1555, 1560, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, 1567, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, 7210, -1837, -1837, -1837, -1837, + -1837, -1837, 7783, 1585, 260, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, 1731, 1934, -1837, 1857, -1837, 1858, -1837, 1731, + 1861, -1837, -1837, -1837, -1837, -1837, -1837, -1837, 7210, 127, + 127, 893, 1513, -1837, 251, 1866, -1837, 185, 842, 1867, + -1837, -1837, -1837, -1837, -1837, -1837, 370, -1837, 591, -1837, + -1837, -1837, -1837, -1837, -1837, 7210, -1837, 1874, -1837, 1480, + 1480, 7783, -1837, 436, 1606, 1967, 893, -1837, 1525, 1525, + 1785, 1871, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, 257, 257, 257, -1837, -1837, -1837, -1837, + -1837, 416, -1837, -1837, -1837, -1837, -1837, 1873, -1837, -1837, + -1837, -1837, -1837, -1837, 1279, -1837, 370, 370, 323, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + 1380, -1837, -1837, -1837, -1837, -1837, 1336, -1837, -1837, -1837, + -1837, -1837, 1027, 370, 370, 323, 1110, 1336, -1837, -1837, + -1837, 1831, 416, 370, -1837, -1837, -1837, -1837, -1837, -1837, + 1603, 1032, 1754, -1837, -1837, -1837, 1880, -1837, 1350, -1837, + -1837, -1837, 1618, 812, 1315, -1837, -1837, -1837, -1837, -1837, + 1747, 1883, 812, 1884, 1315, -1837, -1837, -1837, -1837, -1837, + 1889, 1315, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, 6943, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, 1694, -1837, 288, -1837, -1837, + -1837, 154, -1837, -1837, -1837, -1837, -1837, -1837, 1886, 1702, + -1837, -1837, 1665, 154, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, 7210, 1633, 7783, -1837, -1837, 2106, 6579, -1837, -1837, + 1813, 370, 1649, 1650, 1652, 1655, 1657, -1837, -1837, -1837, + 1659, 1660, 1661, 1667, 139, 370, -1837, -1837, 1988, 7783, + -1837, -1837, -1837, -1837, -1837, 983, -1837, 1766, -1837, 7607, + -1837, -1837, -1837, 603, -1837, 301, 370, 370, -1837, -1837, + -1837, -1837, -1837, 2027, -1837, 1671, -1837, -1837, 370, 370, + -1837, 370, 370, 370, 370, 370, -1837, 1902, 370, -1837, + 1674, -1837, -1837, -1837, -1837, -1837, 1942, -1837, -1837, 1555, + 1560, 1567, -1837, -1837, -1837, -1837, 1681, 893, -1837, -1837, + 1785, -1837, -1837, -1837, -1837, -1837, 1684, 1693, 1697, -1837, + -1837, -1837, -1837, -1837, -1837, 168, -1837, -1837, -1837, 1956, + -1837, -1837, -1837, -1837, 7783, 370, 2054, 2058, -1837, -1837, + -1837, -1837, -1837, -1837, 370, 983, 1964, -1837, -1837, -1837, + 1103, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, 1966, + -1837, 1968, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, 812, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, 1813, 1376, 4714, 4123, 6351, 2117, -1837, -1837, -1837, + 1442, 2345, 1557, 1188, 135, -1837, 1551, 1279, -1837, 7783, + -1837, -1837, -1837, -1837, -1837, -1837, 1380, -1837, 1971, 1972, + -1837, 2065, 171, -1837, 370, -1837, -1837, -1837, -1837, -1837, + 370, 370, 370, 370, 370, 1833, 1115, 2111, 370, 370, + 370, 370, -1837, -1837, 224, 1720, 1831, -1837, 2063, -1837, + -1837, -1837, -1837, 1478, 1968, 370, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, 416, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, 370, 370, 370, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837 +}; + + /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. + Performed when YYTABLE does not specify something else to do. Zero + means the default is an error. */ +static const yytype_int16 yydefact[] = +{ + 2, 0, 1, 0, 4, 5, 0, 0, 0, 0, + 432, 432, 432, 432, 432, 432, 432, 432, 436, 439, + 432, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 237, 438, 9, 28, 29, 0, + 432, 432, 432, 432, 68, 67, 3, 0, 71, 0, + 433, 0, 457, 0, 66, 0, 424, 425, 0, 0, + 0, 0, 608, 87, 89, 0, 0, 289, 0, 311, + 0, 337, 72, 432, 73, 432, 432, 432, 432, 432, + 432, 432, 0, 432, 432, 432, 432, 74, 432, 75, + 432, 432, 432, 432, 432, 432, 432, 432, 0, 432, + 432, 432, 432, 76, 432, 77, 432, 463, 432, 463, + 432, 463, 463, 432, 432, 463, 432, 463, 0, 432, + 463, 463, 0, 432, 463, 463, 463, 463, 432, 432, + 432, 463, 35, 432, 463, 432, 432, 432, 432, 463, + 463, 432, 47, 432, 432, 432, 432, 463, 0, 432, + 80, 432, 81, 0, 0, 0, 765, 736, 426, 427, + 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 949, 950, 951, 952, 953, 954, 955, 956, 957, + 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, + 968, 970, 0, 972, 971, 0, 0, 0, 0, 34, + 0, 0, 85, 732, 731, 737, 738, 252, 748, 749, + 742, 940, 743, 746, 750, 747, 744, 745, 739, 1056, + 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, + 1067, 1068, 1069, 53, 1074, 1075, 1076, 1077, 1071, 1072, + 1073, 740, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, + 741, 0, 249, 250, 0, 33, 233, 0, 21, 235, + 432, 432, 432, 432, 432, 432, 432, 432, 0, 432, + 432, 432, 432, 16, 238, 39, 239, 437, 434, 435, + 432, 432, 432, 13, 861, 834, 836, 70, 69, 440, + 442, 0, 0, 0, 459, 458, 460, 0, 598, 0, + 716, 717, 718, 0, 931, 932, 933, 500, 501, 936, + 723, 0, 0, 0, 516, 522, 527, 0, 551, 576, + 588, 589, 665, 671, 692, 0, 0, 976, 0, 7, + 92, 465, 467, 481, 468, 61, 272, 496, 477, 504, + 475, 13, 514, 14, 59, 525, 473, 474, 46, 579, + 40, 0, 54, 60, 596, 40, 664, 40, 670, 18, + 24, 487, 45, 690, 493, 0, 494, 479, 0, 722, + 478, 767, 770, 772, 774, 776, 777, 784, 786, 0, + 785, 729, 503, 940, 482, 488, 480, 739, 497, 62, + 0, 0, 65, 451, 0, 0, 0, 91, 445, 0, + 95, 304, 303, 0, 448, 0, 0, 0, 608, 112, + 114, 289, 0, 311, 337, 432, 432, 432, 13, 861, + 834, 836, 0, 60, 0, 136, 137, 138, 0, 130, + 131, 139, 0, 132, 133, 141, 142, 0, 134, 135, + 0, 143, 0, 145, 146, 838, 839, 837, 432, 13, + 36, 44, 51, 0, 60, 203, 464, 205, 170, 171, + 172, 173, 432, 174, 176, 200, 199, 198, 192, 432, + 463, 196, 195, 197, 838, 839, 840, 432, 0, 13, + 432, 177, 432, 180, 432, 183, 432, 189, 36, 44, + 51, 432, 186, 78, 220, 432, 432, 464, 216, 218, + 215, 222, 0, 223, 13, 432, 208, 207, 432, 213, + 211, 44, 79, 224, 225, 226, 227, 230, 432, 229, + 0, 1082, 1079, 1080, 56, 0, 756, 757, 758, 759, + 760, 762, 0, 981, 983, 0, 982, 52, 0, 0, + 1320, 1321, 56, 1084, 1085, 55, 20, 55, 1088, 1089, + 1090, 1091, 30, 0, 0, 1094, 1095, 1096, 1097, 1098, + 9, 1116, 1117, 1111, 1106, 1107, 1108, 1109, 1110, 1112, + 1113, 1114, 1115, 0, 28, 55, 1131, 1130, 1129, 1132, + 1133, 1134, 31, 55, 1137, 1138, 1139, 32, 1148, 1149, + 1141, 1142, 1143, 1145, 1144, 1146, 1147, 29, 1160, 55, + 1156, 1153, 1152, 1157, 1155, 1154, 1158, 1159, 31, 1163, + 1166, 1162, 1164, 1165, 8, 1169, 1168, 19, 1171, 1172, + 1173, 11, 1177, 1178, 1175, 1176, 57, 1183, 1180, 1181, + 1182, 58, 1230, 1224, 1227, 1228, 1222, 1223, 1225, 1226, + 1229, 1231, 0, 1184, 55, 1264, 1265, 0, 15, 1210, + 1209, 1202, 1203, 1204, 1188, 1189, 1190, 1191, 1192, 1193, + 1194, 1195, 1196, 1197, 53, 1206, 1205, 1208, 1207, 1199, + 1200, 1201, 1217, 1219, 1218, 0, 25, 0, 1214, 1213, + 1212, 1211, 1318, 1315, 1316, 0, 1317, 49, 55, 28, + 1335, 1008, 29, 1334, 1337, 1006, 1007, 34, 0, 48, + 48, 0, 48, 1341, 48, 1344, 1343, 1345, 0, 48, + 1332, 1331, 27, 1353, 1350, 1348, 1349, 1351, 1352, 23, + 1356, 1355, 17, 55, 1359, 1362, 1358, 1361, 38, 37, + 944, 945, 946, 51, 947, 34, 37, 942, 943, 1023, + 1024, 1030, 1016, 1017, 1015, 1025, 1026, 1046, 1019, 1028, + 1021, 1022, 1027, 1018, 1020, 1013, 1014, 1044, 1043, 1045, + 51, 0, 12, 1031, 987, 986, 0, 784, 0, 0, + 48, 27, 23, 17, 38, 1363, 991, 992, 969, 990, + 0, 730, 1070, 232, 251, 82, 234, 83, 60, 154, + 155, 132, 156, 157, 0, 158, 160, 161, 432, 13, + 36, 44, 51, 86, 84, 240, 241, 243, 242, 245, + 246, 244, 247, 858, 858, 858, 97, 0, 0, 551, + 0, 454, 455, 456, 0, 0, 0, 0, 0, 938, + 937, 934, 935, 0, 0, 0, 37, 37, 0, 0, + 0, 0, 12, 0, 0, 0, 560, 0, 549, 550, + 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, + 788, 0, 466, 469, 498, 0, 472, 0, 0, 515, + 518, 476, 483, 0, 0, 0, 0, 0, 0, 526, + 528, 484, 0, 575, 485, 0, 47, 16, 0, 0, + 20, 30, 9, 28, 899, 29, 0, 904, 902, 903, + 14, 0, 40, 40, 889, 890, 0, 626, 629, 631, + 633, 635, 636, 641, 646, 644, 645, 647, 649, 587, + 613, 614, 624, 891, 615, 622, 616, 623, 619, 620, + 0, 617, 618, 0, 648, 621, 486, 495, 0, 0, + 605, 604, 597, 600, 489, 0, 683, 684, 685, 663, + 668, 681, 490, 0, 669, 674, 491, 492, 686, 0, + 708, 709, 691, 693, 696, 706, 0, 734, 0, 733, + 0, 0, 724, 0, 0, 0, 0, 0, 0, 0, + 0, 924, 925, 926, 927, 928, 929, 930, 20, 30, + 9, 28, 31, 916, 29, 31, 8, 19, 11, 57, + 58, 53, 15, 25, 49, 40, 0, 906, 874, 907, + 781, 782, 886, 873, 863, 862, 878, 880, 882, 884, + 885, 872, 908, 909, 875, 0, 0, 0, 0, 7, + 0, 828, 827, 885, 0, 0, 393, 60, 256, 273, + 290, 319, 338, 461, 111, 0, 0, 0, 0, 118, + 0, 0, 858, 858, 858, 120, 0, 0, 551, 0, + 129, 153, 0, 0, 0, 0, 0, 144, 0, 0, + 858, 148, 151, 149, 152, 169, 191, 0, 206, 175, + 194, 193, 12, 432, 179, 178, 181, 184, 190, 185, + 182, 188, 187, 217, 219, 221, 210, 209, 212, 214, + 228, 231, 1081, 0, 0, 55, 753, 754, 22, 0, + 979, 766, 42, 42, 1319, 1086, 1083, 1092, 1087, 20, + 28, 20, 28, 1093, 1118, 1119, 1120, 1121, 28, 1103, + 1128, 1127, 1136, 1135, 1140, 1151, 1150, 1161, 1167, 1170, + 1174, 1179, 10, 1248, 1254, 1252, 1243, 1244, 1247, 1249, + 1238, 1239, 1240, 1241, 1242, 1250, 1245, 1246, 1251, 1186, + 1253, 1185, 1266, 15, 1262, 1198, 1216, 1215, 1220, 1270, + 1267, 1268, 1269, 1271, 1272, 1273, 1274, 1275, 1276, 1277, + 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1301, 50, 1313, + 1336, 1002, 1003, 1009, 48, 1004, 1333, 0, 1338, 1340, + 0, 1342, 1330, 1347, 1354, 1360, 1357, 941, 948, 939, + 1029, 1032, 1033, 0, 1035, 0, 1034, 1036, 1037, 12, + 12, 1038, 1010, 0, 0, 984, 1365, 1364, 1366, 1367, + 1368, 0, 0, 751, 168, 159, 0, 858, 163, 166, + 164, 167, 236, 248, 0, 0, 0, 0, 358, 13, + 560, 383, 36, 363, 0, 44, 388, 835, 51, 0, + 28, 29, 590, 0, 599, 0, 710, 712, 0, 0, + 0, 0, 0, 0, 0, 0, 12, 0, 0, 1038, + 0, 517, 429, 523, 524, 36, 558, 559, 0, 44, + 0, 0, 705, 45, 700, 699, 0, 704, 702, 703, + 0, 677, 679, 0, 499, 800, 7, 7, 802, 797, + 799, 885, 824, 7, 787, 462, 282, 520, 521, 519, + 541, 20, 0, 0, 539, 535, 530, 531, 532, 533, + 536, 534, 529, 0, 0, 53, 0, 655, 900, 901, + 0, 650, 0, 892, 895, 896, 893, 894, 905, 0, + 898, 897, 0, 613, 622, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, + 0, 0, 602, 603, 601, 0, 0, 0, 672, 695, + 700, 699, 694, 0, 10, 0, 726, 0, 725, 768, + 769, 771, 773, 775, 778, 7, 505, 507, 783, 893, + 915, 894, 917, 914, 913, 919, 911, 912, 910, 920, + 918, 921, 922, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 869, 868, 885, 974, 1055, + 830, 829, 63, 0, 64, 0, 0, 109, 0, 0, + 0, 0, 0, 60, 256, 273, 290, 319, 338, 0, + 0, 0, 13, 36, 44, 51, 452, 441, 443, 273, + 446, 449, 338, 12, 204, 201, 12, 0, 761, 755, + 752, 52, 763, 764, 1099, 1101, 1100, 1102, 55, 1123, + 1125, 1124, 1126, 1105, 28, 0, 1260, 1232, 1257, 1234, + 1261, 1237, 1258, 1259, 1235, 1255, 1256, 1233, 1236, 1263, + 1298, 1297, 1299, 1300, 1306, 1288, 1289, 1290, 1291, 1303, + 1292, 1293, 1294, 1295, 1296, 1304, 1305, 1307, 1308, 1309, + 1310, 1311, 1312, 55, 1287, 1286, 1302, 49, 1005, 0, + 0, 28, 28, 29, 29, 1011, 1012, 984, 984, 0, + 26, 989, 993, 994, 34, 0, 338, 12, 373, 378, + 368, 0, 0, 98, 0, 0, 105, 0, 0, 100, + 0, 107, 592, 0, 0, 591, 713, 0, 0, 807, + 711, 803, 1248, 1252, 1247, 1251, 1253, 53, 10, 10, + 0, 796, 0, 794, 37, 37, 12, 512, 12, 12, + 0, 12, 548, 0, 561, 564, 0, 557, 553, 552, + 554, 0, 687, 0, 0, 0, 0, 791, 0, 792, + 0, 13, 0, 0, 551, 801, 810, 0, 0, 823, + 798, 808, 790, 789, 0, 540, 28, 544, 545, 53, + 543, 577, 0, 581, 578, 0, 583, 0, 0, 585, + 656, 0, 660, 662, 625, 627, 628, 630, 632, 634, + 642, 643, 637, 640, 639, 638, 652, 651, 0, 0, + 0, 1047, 1048, 1049, 1050, 666, 682, 673, 675, 707, + 735, 0, 0, 0, 0, 508, 923, 871, 865, 0, + 876, 877, 879, 881, 883, 870, 779, 864, 780, 887, + 888, 0, 0, 779, 0, 0, 60, 395, 394, 397, + 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 88, 258, 257, 0, 255, 0, 0, 55, + 0, 90, 275, 274, 0, 0, 0, 0, 0, 0, + 300, 0, 0, 0, 0, 0, 0, 0, 0, 93, + 292, 291, 0, 0, 0, 470, 0, 0, 0, 0, + 0, 0, 94, 321, 320, 0, 0, 0, 0, 0, + 0, 13, 96, 340, 339, 128, 0, 0, 0, 0, + 0, 373, 378, 368, 121, 126, 122, 127, 0, 0, + 150, 202, 0, 980, 1122, 1104, 0, 1285, 1314, 1339, + 1346, 1039, 1040, 1041, 1042, 41, 0, 26, 985, 1001, + 997, 996, 995, 34, 0, 165, 0, 0, 0, 0, + 13, 360, 359, 362, 361, 561, 564, 36, 385, 384, + 387, 386, 44, 365, 364, 367, 366, 554, 51, 390, + 389, 392, 391, 593, 595, 0, 805, 806, 804, 1221, + 978, 977, 0, 0, 795, 975, 973, 1052, 513, 1053, + 12, 1051, 0, 566, 568, 0, 36, 0, 36, 0, + 0, 44, 701, 697, 698, 45, 45, 678, 0, 0, + 0, 7, 825, 826, 0, 0, 812, 0, 560, 0, + 811, 821, 822, 809, 502, 283, 0, 538, 0, 537, + 55, 55, 47, 55, 653, 0, 659, 0, 661, 667, + 676, 0, 714, 0, 0, 0, 7, 506, 867, 866, + 609, 0, 110, 453, 357, 444, 272, 447, 289, 311, + 450, 337, 254, 0, 0, 0, 357, 357, 357, 357, + 259, 0, 422, 423, 43, 421, 420, 0, 418, 276, + 278, 277, 281, 279, 0, 287, 0, 0, 0, 336, + 335, 43, 334, 398, 400, 401, 399, 354, 402, 355, + 0, 353, 307, 308, 310, 309, 0, 306, 301, 302, + 298, 471, 0, 0, 0, 0, 0, 0, 332, 331, + 329, 0, 0, 0, 343, 113, 115, 116, 117, 119, + 0, 0, 0, 140, 147, 10, 0, 988, 984, 1000, + 998, 162, 0, 0, 0, 12, 375, 374, 377, 376, + 0, 0, 0, 0, 0, 12, 380, 379, 382, 381, + 0, 0, 12, 370, 369, 372, 371, 831, 99, 859, + 860, 106, 101, 833, 108, 594, 0, 727, 1054, 570, + 571, 572, 573, 574, 563, 0, 546, 0, 565, 547, + 567, 0, 556, 688, 689, 680, 793, 12, 0, 0, + 14, 14, 0, 0, 284, 542, 31, 31, 586, 584, + 654, 0, 0, 0, 715, 721, 0, 510, 509, 610, + 611, 0, 0, 0, 0, 0, 0, 357, 357, 357, + 0, 0, 0, 0, 0, 0, 346, 419, 0, 0, + 294, 296, 297, 299, 333, 0, 55, 0, 295, 0, + 322, 323, 330, 318, 328, 0, 0, 0, 344, 12, + 12, 12, 1078, 0, 26, 0, 57, 53, 0, 0, + 103, 0, 0, 0, 0, 0, 104, 0, 0, 102, + 0, 562, 569, 555, 816, 12, 0, 819, 820, 561, + 564, 554, 580, 582, 658, 719, 0, 7, 612, 606, + 609, 393, 273, 290, 319, 338, 0, 0, 0, 358, + 383, 363, 388, 351, 350, 0, 347, 352, 280, 0, + 288, 356, 293, 305, 0, 0, 0, 285, 60, 317, + 13, 36, 44, 51, 0, 0, 0, 412, 406, 405, + 409, 404, 407, 408, 341, 342, 124, 125, 123, 0, + 999, 0, 844, 843, 850, 852, 855, 856, 853, 854, + 857, 0, 846, 728, 817, 13, 36, 36, 44, 720, + 511, 611, 0, 0, 0, 0, 0, 373, 378, 368, + 0, 0, 0, 0, 7, 345, 417, 0, 325, 0, + 316, 312, 314, 313, 315, 55, 0, 413, 0, 0, + 1187, 0, 0, 847, 0, 813, 814, 815, 818, 607, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 349, 348, 0, 0, 0, 326, 286, 327, + 55, 411, 410, 0, 0, 0, 55, 60, 260, 261, + 262, 263, 12, 12, 12, 13, 36, 44, 51, 414, + 415, 0, 403, 324, 430, 431, 849, 848, 43, 845, + 271, 0, 0, 0, 264, 269, 265, 270, 416, 851, + 267, 268, 266 +}; + + /* YYPGOTO[NTERM-NUM]. */ +static const yytype_int16 yypgoto[] = +{ + -1837, -1837, -1, -1275, 1070, 54, -1321, 1067, 1068, -352, + -898, -718, 1182, 1297, -1837, 1074, -519, -1837, -1837, 1301, + -1837, -140, -1625, 1304, -8, -14, 1526, -601, -1837, -1837, + -687, -1837, -493, -724, 1305, -1837, -305, -1837, 964, -1828, + -489, -1233, -1837, -875, -492, -919, -1837, -497, 610, -659, + -1837, -546, 1544, -982, 1089, -1837, -399, -1837, 16, -1837, + -1837, 2084, -1837, -1837, -1837, 1832, 1834, 595, 1069, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, 11, -1837, 1691, -1837, 660, -330, + -1384, -1837, -1837, -1624, -424, -1406, -420, 354, 1, -423, + -1837, -1837, -1417, -1416, -1837, -429, -1413, -1836, -1837, -138, + 2, -1639, -685, -59, -60, -1671, -1667, -1664, -57, -58, + -40, -1837, -1837, -164, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, 175, -773, -1477, -1837, 340, -33, 3359, -1837, + 309, -1837, -1837, 780, -1837, 425, 792, 1868, -1837, 211, + -1837, -722, 1733, -1837, -1837, 268, 700, 758, 834, -42, + -1837, -1837, -1420, -1398, -346, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, 230, -1837, -1837, -1837, -1837, 1273, -1837, -1837, + -1837, -1837, 1261, -1837, -1837, -1837, 255, -1837, -320, -1428, + -1649, -1837, -1193, -1690, -1475, -1681, -1470, 287, 286, -1837, + -1837, -1047, -1837, -1837, -1837, -1837, -1837, -1837, -1837, 1204, + -353, 1740, -9, -79, 25, 797, 798, 796, -1837, -806, + -1837, -1837, -1837, -1837, -1837, -1837, 1744, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -350, 783, -1837, -1837, + -1837, -1837, 1198, 560, -913, 573, 1321, 799, -1340, -1837, + -1837, 1864, -1837, -1837, -1837, -1837, 1208, -1837, -1837, -67, + 246, -851, -349, 1084, -27, -1837, -1837, -1837, 1071, 3, + -1837, -1837, -1837, -1837, -1837, -182, -208, -1837, -1837, 759, + -823, 1985, -52, -1837, 872, -1277, -1837, -1555, -1837, -1837, + 609, -1395, -1837, -1837, 585, 583, -1837, -1837, 1811, -604, + 1786, -552, 1789, -540, 1793, 170, -1837, -1753, -1837, -1837, + -88, -1837, -1837, -622, -516, 1788, -1837, -385, -328, -854, + -844, -840, -1837, -284, -859, -1837, 1322, 1538, -759, -1837, + -1509, -324, 128, 1898, -1837, 32, -1837, 155, -1837, -1422, + -1837, 307, -1837, -1837, -1837, -1837, -1837, 571, -282, 947, + 1517, 1039, 1903, 1905, -1837, -1837, -478, 207, -1837, -1837, + -1837, 1109, -1837, -1837, -68, -1837, -48, -1837, -43, -1837, + -64, -1837, -1837, -1837, -31, -1837, -26, -1837, -21, -1837, + -13, -1837, -12, -1837, -6, -1837, 0, -1837, 9, -1837, + 19, -1837, 24, 1545, -1837, -84, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, 1579, -1061, -1837, -1837, + -1837, -1837, -1837, 29, -1837, -1837, -1837, -1837, 1051, -1837, + -1837, 30, -1837, 34, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, -1837, + -1837, -1837, -1837, -1837 +}; + + /* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int16 yydefgoto[] = +{ + 0, 1, 1783, 878, 1157, 1365, 1505, 1159, 1242, 836, + 891, 1184, 823, 1224, 976, 1158, 1363, 807, 1490, 1223, + 977, 695, 1819, 1222, 1419, 1421, 1364, 1151, 1153, 805, + 798, 513, 1092, 1227, 1226, 824, 904, 2017, 1492, 2117, + 1093, 978, 901, 532, 1215, 1209, 1547, 1094, 1130, 802, + 956, 1135, 1122, 1160, 1161, 892, 957, 884, 1784, 46, + 47, 48, 74, 87, 89, 447, 451, 456, 443, 103, + 293, 105, 132, 1098, 475, 142, 150, 152, 275, 278, + 295, 296, 832, 1262, 276, 222, 415, 1735, 1458, 416, + 1459, 1644, 2205, 1964, 419, 1460, 420, 1986, 1987, 423, + 2214, 2215, 1461, 1762, 1971, 425, 1462, 2115, 2195, 2196, + 1979, 1980, 2102, 1572, 1577, 1828, 1826, 1827, 1575, 1580, + 1456, 1981, 1744, 2136, 2220, 2221, 2222, 2306, 1745, 1746, + 1954, 1955, 1933, 223, 1304, 2336, 49, 50, 61, 450, + 52, 454, 1936, 458, 459, 1938, 71, 464, 1941, 445, + 446, 1934, 314, 315, 316, 53, 427, 1589, 477, 1748, + 351, 352, 1764, 353, 354, 355, 356, 357, 358, 359, + 1416, 1694, 1695, 360, 361, 362, 889, 890, 363, 364, + 365, 899, 900, 1351, 1345, 1649, 1650, 366, 1274, 1620, + 1881, 367, 1308, 1876, 1614, 1878, 1615, 1616, 2064, 368, + 369, 1653, 903, 370, 371, 372, 373, 374, 962, 963, + 1720, 414, 2100, 2179, 927, 928, 929, 930, 931, 932, + 933, 1673, 934, 935, 936, 937, 938, 939, 375, 376, + 969, 377, 378, 974, 379, 380, 970, 971, 381, 382, + 383, 982, 983, 1311, 1312, 1313, 984, 985, 1285, 1286, + 384, 385, 386, 387, 388, 991, 992, 389, 390, 224, + 940, 988, 1028, 941, 391, 228, 1128, 551, 552, 942, + 559, 392, 393, 394, 395, 396, 397, 1030, 1031, 1032, + 398, 399, 400, 879, 880, 1602, 1603, 1327, 1328, 1329, + 1590, 1591, 1640, 1635, 1636, 1641, 1330, 1891, 1050, 1834, + 837, 1846, 839, 1852, 840, 468, 498, 2148, 2046, 2282, + 2283, 2029, 2039, 1264, 1841, 838, 401, 1051, 1052, 1036, + 1037, 1038, 1039, 1331, 1041, 943, 944, 945, 1044, 1045, + 402, 851, 946, 756, 757, 231, 404, 947, 557, 1560, + 786, 948, 1252, 799, 1564, 1823, 234, 949, 718, 951, + 719, 952, 781, 782, 1239, 1240, 783, 953, 954, 405, + 406, 955, 239, 545, 240, 566, 241, 572, 242, 580, + 243, 594, 1148, 1504, 244, 602, 245, 607, 246, 617, + 247, 628, 248, 634, 249, 637, 250, 641, 251, 646, + 252, 651, 253, 685, 686, 687, 254, 688, 255, 701, + 256, 696, 257, 408, 663, 1179, 1596, 1181, 1517, 1509, + 1514, 1507, 1511, 258, 668, 1207, 1546, 1529, 1535, 1524, + 1208, 259, 707, 260, 562, 261, 262, 732, 263, 720, + 264, 722, 265, 724, 266, 729, 267, 739, 268, 742, + 269, 748, 270, 795 +}; + + /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule whose + number is the opposite. If YYTABLE_NINF, syntax error. */ +static const yytype_int16 yytable[] = +{ + 44, 421, 54, 227, 852, 1071, 883, 1068, 787, 886, + 1070, 350, 1069, 1111, 1034, 1109, 422, 45, 870, 1332, + 1110, 1137, 1368, 417, 299, 1185, 885, 1156, 975, 298, + 1213, 1358, 1229, 229, 1089, 845, 989, 1426, 800, 697, + 1087, 1777, 1119, 279, 1081, 1775, 308, 1136, 1317, 1150, + 1789, 1627, 1629, 1095, 409, 1790, 229, 1152, 1642, 412, + 1788, 1057, 1765, 1765, 875, 1691, 1399, 1277, 229, 1799, + 964, 1035, 972, 1155, 476, 1096, 476, 1574, 476, 476, + 1622, 1787, 476, 1690, 476, 403, 1075, 476, 476, 950, + 297, 476, 476, 476, 476, 1798, 700, 403, 476, 1835, + 1067, 517, 1115, 1324, 1836, 1431, 517, 517, 1335, 671, + 1856, 1857, 671, 674, 476, 1040, 674, 1091, 1182, 1893, + 1372, 1346, 2012, 1085, 2010, 1350, 1053, 1053, 2011, 672, + 1692, 1996, 672, 1229, 673, 1815, 1817, 673, 1925, 877, + 1693, 1411, 1992, 2124, 986, 2049, 675, 1104, 1417, 675, + 1847, 676, 1412, 1824, 676, 2050, 677, 1413, 230, 677, + 1901, 1902, 1210, 877, 678, 679, 2137, 678, 679, 986, + 1333, 680, 1116, 1926, 680, 2264, 1132, 681, 2314, 1291, + 681, 230, 58, 59, 60, 232, 682, 1952, 1953, 682, + 1403, 311, 2019, 230, 1055, 1858, 683, 1225, 2053, 683, + 986, 684, 990, 494, 684, 157, 689, 690, 232, 689, + 690, 691, 1265, 1266, 691, 158, 159, 160, 1302, 229, + 232, 62, 758, 229, 309, 55, 310, 1597, 1216, 1296, + 1218, 56, 1219, 1269, 1409, 1410, 413, 1221, -736, 2193, + 2194, 418, 1921, 2193, 2194, 424, -736, -736, -736, -736, + -832, 303, 304, 305, 306, -731, 1228, 271, 1618, 871, + 850, 850, -731, -731, -731, -731, 277, 635, 1623, -697, + 998, 1923, 1353, 1872, 1966, 1967, 225, 1860, 1861, 2153, + 104, 65, 803, 1230, 636, 1354, 428, 1275, 806, 1302, + 1993, 1994, 497, 1765, 438, 439, 440, 441, 1246, 225, + 1278, -731, 1355, 1241, 1429, -738, 1277, 1656, 4, 1659, + 5, 225, -738, -738, -738, -738, 1000, 474, 987, -698, + -832, 64, 1272, 2216, 1270, 1261, 965, 1259, 158, 159, + 160, 1082, 1260, 1267, 499, 1382, 784, 233, 872, 508, + 509, 510, 1133, 1714, 230, 73, 785, 1033, 230, 524, + 1587, -738, 531, 1588, 2077, 229, 442, 1873, 1033, 1033, + 233, 56, 1428, 730, 758, 421, 1991, 1637, 88, 1777, + 1638, 232, 233, 1775, 4, 232, 5, 1271, 56, 1991, + 422, 1383, 426, 1299, 403, 1064, 430, 1256, 731, 865, + 1765, 1765, 2162, 421, 1255, 151, 801, 495, 709, 467, + 1080, 453, 426, 1268, 2217, 2218, 421, 866, 422, 1254, + 3, 1420, 1303, 4, 1422, 5, 496, 853, -746, 480, + 2081, 422, 712, 740, 57, -746, -746, -746, -746, 294, + 229, 448, -433, 1562, 1586, 6, 7, 8, 9, 1297, + 1083, 2093, 426, 519, 1806, 229, 1292, 1055, 741, 1619, + 1469, 1470, 1471, 534, 854, 421, 1356, 476, 818, 403, + 540, 1380, 225, 1381, -746, 1519, 225, 1258, 1483, 1858, + 422, 221, 1472, 3, 403, 1276, 4, 221, 5, 2246, + 230, 312, 313, 2080, -747, 1415, -253, 56, 2284, 2247, + 221, -747, -747, -747, -747, 2348, 221, 1084, 6, 7, + 8, 9, 849, 849, 221, 2206, 855, 232, 221, 973, + 2349, 833, 834, 835, 1758, 221, 1598, 1599, 1624, 2230, + 1056, 1407, 2248, 233, 1451, 1991, 1474, 233, 1334, 334, + -747, 1927, 1674, 2265, 335, 4, 2315, 5, 538, 1475, + 3, 349, 1925, 4, 56, 5, 221, 337, 1874, 272, + 273, 274, 338, 2151, 57, 230, 1187, 1086, 272, 273, + 274, 1473, 2030, 1088, 2078, 6, 7, 8, 9, 2031, + 230, 57, 966, 967, 968, 1671, 2276, 489, 490, 1489, + 2267, 2092, 232, 1874, 1702, 2056, 1149, 2177, 2297, 1385, + 2295, 811, 426, 221, 2296, 1703, 2144, 232, 225, -736, + 1704, 235, 1922, 1154, 56, 1910, 2032, 2169, 1911, 881, + 56, 1913, 2170, 1188, -272, -731, 2076, 1370, 1371, 413, + 1494, 448, 1496, 309, 235, -433, 881, 310, 1808, 671, + 1563, 674, 418, 674, 1143, 1567, 235, 424, 410, 1287, + 2208, 2033, -551, 2163, 411, 1027, 1072, 1073, 1074, 672, + 989, 2097, 2073, 2074, 673, 2171, 1027, 1027, 1457, 233, + 1445, 558, 2219, 1316, 675, -738, 675, 300, 435, 676, + 221, 676, 1418, 225, 677, 721, 677, 1700, 1701, 1090, + 57, 723, 678, 679, 678, 679, 1543, 349, 225, 680, + 2209, 680, 221, 310, 2142, 681, 1657, 681, 1212, 789, + 711, 1211, 465, 1544, 682, 2082, 682, 1386, 1102, 1387, + 1434, 1886, 1463, 1758, 683, 1121, 683, 1446, 804, 684, + 1432, 684, 1548, 1435, 689, 690, 689, 690, 334, 691, + 521, 691, 523, 335, 233, 1647, 1545, 57, 3, 841, + 1648, 4, 1433, 5, 546, 547, 337, 421, 1943, 233, + 2034, 338, -1002, 2176, -1002, 966, 967, 968, 881, 846, + 998, 1447, 422, 6, 7, 8, 9, 2255, 842, 1892, + 1125, 603, 2256, 515, 1716, 516, 999, 2254, -746, 1576, + 2114, 1581, 843, 1332, 1139, 221, 1579, 235, 18, 19, + 709, 235, 604, 455, 67, 68, 69, 57, 2253, 1140, + 1317, 2094, 1434, 57, 1314, 605, 1000, 1277, 1758, 1141, + 711, -1003, 1612, -1003, 712, 1711, 1414, 553, 554, 555, + 1617, 881, 1645, 334, 1142, 1114, 1326, 848, 335, 715, + 716, 2022, -432, 514, 1332, 1777, 2335, 2035, 35, 1775, + 863, 337, 3, 1263, -747, 4, 338, 5, 36, 1453, + 229, 1443, 868, 869, 37, 873, 1765, 1765, 431, 432, + 433, 301, 436, 302, 437, 1388, 864, 6, 7, 8, + 9, 2023, 876, 434, 229, 460, 461, 1820, 38, 813, + 1865, 1866, 1778, 1430, 473, 1779, 548, 549, 881, 463, + 550, 958, 959, 484, 485, 2210, 466, 877, 467, 491, + 692, 1367, 2250, 990, 1842, 1366, 844, 693, 487, 1441, + -1002, 717, 1400, 2211, 1126, 1127, 522, 1573, 2212, 881, + 2213, 902, 1442, 235, 1443, 535, 536, 1389, 995, 539, + 133, 134, 987, 135, 136, 137, 989, 694, 1859, 715, + 716, 996, 1944, 479, 1945, 481, 483, 709, 1033, 486, + 997, 488, 1804, 702, 492, 493, 560, 561, 501, 503, + 505, 507, 1340, 606, 725, 512, 796, 797, 520, -1003, + 1565, 712, -1002, 527, 530, 230, -832, 236, 1797, 2146, + 1795, 537, 874, 812, 2147, 1796, 703, 704, 1046, 2302, + 1909, 3, 1047, 1033, 4, 1341, 5, 1807, 235, 230, + 236, 229, 232, 868, 869, 1780, 1946, 1947, 1948, 1949, + 1342, 1559, 236, 235, 1816, 2024, 6, 7, 8, 9, + 311, 717, 705, 709, 307, -432, 232, 664, 4, 1257, + 5, -1003, 2129, 3, 989, 2119, 4, 2088, 5, 556, + 960, 1058, 867, 961, 726, 727, 728, 712, 1688, 1452, + 1698, 887, 888, 1454, 1273, 706, 1343, 1707, 6, 7, + 8, 9, 868, 869, 1785, 814, 815, 320, 321, 237, + 642, 1059, 322, 3, 643, 1060, 4, 638, 5, 816, + 1061, 665, 666, 893, 1601, 1062, 881, 1973, 639, 640, + 667, 708, 237, 225, 158, 159, 160, -337, 6, 7, + 8, 9, 2025, 709, 237, 710, 1097, 644, 645, 882, + 993, 994, 1974, 1975, 226, 2133, 3, 225, 2125, 4, + 1794, 5, 2030, 711, 1027, 2278, 230, 712, 2279, 2031, + 713, -841, 1495, 1781, 1497, -842, 2020, 226, 1103, 238, + 1503, 6, 7, 8, 9, 1344, 563, 564, 565, 226, + 1697, 1699, 1123, 232, 233, 1306, 1307, 1705, 1699, 1708, + 1710, 1404, 407, 236, 2232, 1406, 2032, 236, 469, 470, + 471, 472, 1373, 138, 407, 1441, 157, 1651, 1318, 1124, + 139, 140, 2167, 2168, 1129, 1441, 2040, 1652, 1453, 3, + 1443, 1131, 4, 1957, 5, 1183, 141, 1287, 1712, 1601, + 1443, 2033, 980, 981, 3, 2030, 1782, 4, 3, 5, + 1217, 4, 2031, 5, 6, 7, 8, 9, 987, 714, + 1220, 2107, 2108, 2109, 894, 895, 896, 897, 898, 6, + 7, 8, 9, 6, 7, 8, 9, 1976, 1332, 1027, + 1027, 1027, 1027, 1027, 225, 595, 1027, 596, 1778, 2032, + 1243, 1779, 715, 716, 1244, 237, 1863, 1977, 1978, 237, + 1245, 2110, 2111, 2112, 2113, 733, 597, 157, 1651, 1100, + 1375, 1376, 1027, 525, 598, 599, 600, 601, 1655, 1896, + 1251, 734, 528, 4, 2033, 5, 647, 2119, 18, 19, + 1498, 1027, 158, 159, 160, 229, 1253, 18, 19, 236, + 226, 1283, 735, 1288, 226, 233, 1289, 1499, 1290, 736, + 2034, 1293, 1500, 1501, 1899, 1294, 987, 1932, 1120, 648, + 649, 1295, 650, 1298, 1101, 238, 1928, 1929, 1300, 238, + 1310, 1675, -432, 1323, 717, 1919, 1336, 1920, 35, 881, + 4, -432, 5, 2127, 2051, 1337, 1924, 35, 36, 808, + 2041, 2054, 1338, 2052, 37, 1848, 1347, 36, 819, 820, + 821, 822, 1362, 37, 2086, 2087, 1369, 2089, 157, 1651, + 1348, 1780, 1436, 1437, 236, 18, 19, 3, 38, 1658, + 4, 881, 5, 2066, 4, 2069, 5, 38, 2125, 236, + 1520, 237, 2072, 2034, 1521, 1522, 1523, 2140, 737, 738, + 1665, 1666, 6, 7, 8, 9, 1349, 1672, 229, 1377, + 229, 1630, 868, 869, 1055, 1316, 1378, 482, 235, 1502, + 230, 881, 2186, 2187, 2188, 35, 1631, 1699, 1699, 2004, + 1379, 1632, 18, 19, 1384, 36, 226, 2042, 272, 273, + 274, 37, 1319, 3, 1633, -1047, 4, 232, 5, 1634, + 1144, 1145, 1146, 1147, 1715, 1717, -1048, 1733, 1742, 1760, + 1773, 407, 229, 1390, 881, 38, 237, 1391, 6, 7, + 8, 9, 1718, 1392, 1734, 1743, 1761, 1774, 2048, 1395, + 2323, 237, 35, 1029, 1393, 2172, 2173, 1396, 2233, 1405, + 1277, 403, 36, 1403, 1029, 1029, 1805, 1267, 37, 1781, + 1512, 1513, 3, 1515, 1516, 4, 1438, 5, 1551, 1552, + 790, 226, 2106, 1439, 2104, 1440, 2105, 1553, 1554, 791, + 792, 1444, 38, 793, 794, -432, 226, 6, 7, 8, + 9, 2329, 1434, 230, -432, 230, 407, 881, 225, 1813, + 1814, 1055, 1778, 1811, 1812, 1779, 877, 1628, 2123, 1821, + 1822, 407, 881, 2301, 1883, 1450, 1314, 1400, 3, 1464, + 232, 4, 232, 5, 157, 1651, 852, 1455, 1830, 235, + 1465, 1831, 2009, 1466, 1838, 2132, 1843, 1969, 1970, 1849, + 2202, 2334, 1302, 6, 7, 8, 9, 230, 1832, 1467, + 1326, 1839, 1267, 1844, 2304, 2305, 1850, 1683, 1684, 233, + 90, 1270, 1906, 1468, 3, 229, 2103, 4, 91, 5, + 92, 1476, 93, 1477, 232, 94, 95, 96, 1478, 97, + 1479, 1373, 1373, 1373, 1373, 1373, 229, 1373, 1373, 6, + 7, 8, 9, 1480, 403, 1481, 1681, 1681, 1907, 143, + 1484, 144, 1482, 1905, 1487, 1506, 145, 229, 146, 1491, + 1508, 225, 147, 225, 1601, 1518, 1537, 825, 1510, 826, + -551, 827, 828, 541, 1538, 1780, 542, 543, 544, 829, + 830, 1956, 1541, 1539, 3, 1540, 403, 4, 1542, 5, + 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, + 1027, 1549, 148, 1559, 149, 229, 1550, 2022, 1557, 6, + 7, 8, 9, 831, 567, 225, 568, 569, 570, 571, + 2160, 1558, 233, 1287, 233, 1561, 2274, 1566, 2272, 1568, + 1569, 1042, 1965, 2273, 403, 881, 979, 980, 981, 2309, + 230, 1570, 1042, 1042, 1950, 1571, 1267, 2023, 1578, 1965, + 1583, 2290, 998, 1959, 1960, 1961, 1962, 1963, 158, 159, + 160, 230, 229, 2286, 2287, 3, 1600, 232, 4, 2288, + 5, 1988, 1989, 1990, 2333, 1608, 233, 1610, 1613, 229, + 2339, 1621, 230, 1625, 1998, 1999, 2000, 1646, 232, 1661, + 6, 7, 8, 9, 1664, 1733, 1742, 1760, 1773, 1670, + 229, 881, 1678, 1781, 236, 1679, 629, 1742, 1680, 232, + -697, 229, 1734, 1743, 1761, 1774, -698, 2298, 1696, 2270, + 1791, 1713, 630, 1802, 1743, 966, 967, 968, 236, 403, + 230, 631, 850, 850, 1809, 2026, 2036, 2043, 632, 633, + 403, 2347, 1792, 2345, 3, 1793, 743, 4, 2346, 5, + 98, 1810, 2027, 2037, 2044, 1818, 1855, 232, 225, 1829, + 744, 1302, 1982, 1983, 1984, 99, 1985, 745, 2271, 6, + 7, 8, 9, 235, 1862, 229, 2014, 1875, 2040, 225, + 868, 869, 1877, 100, 1027, 746, 1879, 230, 101, 1888, + 102, 2024, 747, 1880, 2116, 1287, 237, 1894, 1027, 1897, + 225, 1895, 1898, 2285, 230, 1908, 1912, 1935, 1937, 1937, + 1940, 421, 1915, 1917, 232, 2084, 881, 1441, 1930, 233, + 237, 1525, 1526, 1527, 1528, 230, 422, 1931, 2340, 1942, + 1958, 232, 2300, 1972, 229, 1951, 230, 2022, 421, 1968, + 1318, 226, 859, 1995, 2001, 2116, 2003, 1043, 225, 1027, + 2002, 2015, 232, 422, 2016, 236, 2018, 2047, 1043, 1043, + 2057, 233, 881, 232, -569, 1315, 238, 1027, 1027, 2091, + 2065, 2067, 1029, 2120, 2071, 2121, 2122, 2023, 2139, 2079, + 2083, 2095, 2096, 2344, 2101, 2099, 235, 2118, 235, 2126, + 238, 2145, 2135, 2143, 1270, 2128, 2152, 2154, 2161, 2165, + 230, 2149, 2130, 2131, 2157, 225, 2134, 2166, 2175, 233, + 2178, 2155, 2138, 1530, 1531, 1532, 1533, 1534, 2158, 2026, + 2036, 2043, 225, 2181, 2182, 3, 2183, 232, 4, 2184, + 5, 2185, 881, 2189, 2190, 2191, 2027, 2037, 2044, 2199, + 235, 2192, 2041, 225, 2229, 2231, 2241, 237, 1837, 2243, + 6, 7, 8, 9, 225, 2245, 2249, 2197, 2257, 230, + 2059, 2060, 2061, 2062, 2063, 1778, 233, 2258, 1779, 229, + 2266, 2259, 2269, 1401, 849, 849, -287, 2277, 2223, 2280, + 2313, -288, 2281, 233, 2311, 2312, 232, 1029, 1029, 1029, + 1029, 1029, 226, 2331, 1029, 1425, 1423, 1639, 403, 1359, + 1249, 1424, 2200, 1248, 233, 1247, 229, 1493, 1138, 1250, + 2180, 1803, 2207, 881, 72, 233, 1134, 238, 225, 1427, + 1029, 2024, 3, 809, 2198, 4, 810, 5, 3, 2141, + 1066, 4, 229, 5, 1786, 1997, 2303, 2201, 2203, 1029, + 2260, 2262, 229, 2261, 2263, 2224, 2225, 6, 7, 8, + 9, 2252, 2332, 6, 7, 8, 9, 2234, 2235, 1939, + 2236, 2237, 2238, 2239, 2240, 817, 2098, 2242, 1778, 1063, + 1352, 1779, 1339, 2085, 2068, 2070, 1394, 225, 1065, 233, + 1485, 2251, 2289, 235, 1667, 1669, 1668, 1965, 1780, 1686, + 1402, 1882, 881, 847, 230, 324, 325, 326, 1889, 1890, + 329, 608, 609, 1320, 1319, 1488, 1885, 2197, 2322, 1408, + 1042, 788, 1689, 1709, 2268, 1643, 610, 229, 611, 612, + 613, 232, 1864, 2275, 1719, 235, 1736, 1747, 1763, 1776, + 1900, 230, 1054, 1903, 1076, 2040, 2337, 1077, 233, 1078, + 857, 614, 615, 616, 1079, 1214, 861, 2330, 862, 236, + 1186, 1180, 2308, 1536, 0, 0, 0, 230, 232, 0, + 0, 1717, 1742, 1760, 1773, 0, 229, 230, 0, 1831, + 1838, 1843, 1849, 235, 2116, 0, 2307, 0, 1718, 1743, + 1761, 1774, 229, 0, 232, 2310, 1832, 1839, 1844, 1850, + 0, 1780, 0, 2316, 232, 403, 0, 1231, 1232, 2317, + 2318, 2319, 2320, 2321, 2026, 2036, 2043, 2325, 2326, 2327, + 2328, 1233, 225, 0, 0, 0, 1781, 1555, 1556, 1234, + 0, 2027, 2037, 2044, 2338, 1042, 1042, 1042, 1042, 1042, + 235, 0, 1042, 0, 0, 1235, 0, 0, 0, 0, + 1833, 237, 230, 1840, 0, 1845, 0, 235, 1851, 225, + 2350, 2351, 2352, 1027, 0, 0, 3, 0, 1042, 4, + 0, 5, 236, 0, 236, 0, 0, 0, 235, 232, + 0, 0, 0, 233, 1607, 225, 0, 1042, 0, 235, + 500, 6, 7, 8, 9, 225, 226, 0, 0, 2021, + 0, 230, 573, 574, 0, 18, 19, 0, 0, 2041, + 0, 575, 576, 577, 578, 579, 0, 230, 1639, 0, + 233, 238, 280, 0, 0, 0, 236, 0, 232, 1781, + 281, 0, 282, 0, 283, 75, 1043, 284, 285, 286, + 0, 287, 0, 76, 232, 77, 233, 0, 0, 0, + 78, 79, 80, 235, 81, 35, 233, 1654, 1654, 0, + 1654, 0, 0, 0, 237, 36, 237, 0, 0, 0, + 225, 37, 0, 1236, 1237, 1238, 767, 0, 0, 0, + 881, 0, 0, 0, 1374, 0, 0, 0, 0, 777, + 778, 779, 0, 0, 0, 38, 2324, 0, 0, 0, + 0, 0, 2294, 0, 0, 0, 0, 0, 502, 226, + 0, 226, 235, 0, 0, 0, 0, 504, 237, 225, + 0, 0, 0, 18, 19, 0, 0, 0, 0, 0, + 0, 233, 18, 19, 238, 225, 238, 0, 1029, 1029, + 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 0, + 0, 1043, 1043, 1043, 1043, 1043, 0, 0, 1043, 0, + 0, 0, 0, 226, 1736, 1747, 1763, 1776, 0, 236, + 0, 1800, 0, 35, 1801, 0, 1747, 0, 0, 0, + 233, 0, 35, 36, 1043, 906, 0, 0, 407, 37, + 236, 907, 36, 0, 0, 0, 233, 0, 37, 506, + 0, 0, 0, 1043, 2028, 2038, 2045, 0, 1282, 0, + 1284, 236, 0, 38, 18, 19, 0, 0, 0, 158, + 159, 160, 38, 0, 0, 0, 1008, 1301, 0, 1305, + 1009, 1309, 0, 0, 10, 1010, 0, 1321, 1322, 0, + 0, 1011, 11, 0, 12, 914, 13, 235, 0, 14, + 15, 16, 0, 17, 0, 1825, 0, 18, 19, 236, + 0, 237, 288, 0, 35, 1014, 0, 0, 0, 1357, + 0, 0, 1361, 0, 36, 82, 1270, 289, 0, 0, + 37, 0, 237, 0, 235, 0, 0, 0, 0, 0, + 83, 0, 0, 0, 1867, 290, 1868, 1869, 0, 1871, + 291, 0, 292, 237, 38, 0, 226, 35, 84, 0, + 235, 0, 0, 85, 881, 86, 236, 36, 0, 0, + 235, 0, 0, 37, 0, 1884, 511, 1315, 1401, 0, + 2299, 407, 1029, 236, 0, 0, 0, 1398, 0, 0, + 0, 18, 19, 0, 0, 0, 1029, 38, 226, 0, + 0, 237, 238, 0, 236, 0, 1654, 0, 0, 1654, + 0, 0, 1654, 0, 0, 236, 0, 0, 0, 0, + 0, 0, 0, 407, 0, 0, 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, 1042, 1042, 1042, 0, 2028, 2038, + 2045, 35, 0, 0, 0, 235, 226, 1029, 0, 0, + 0, 36, 917, 0, 0, 918, 919, 37, 237, 0, + 1448, 1449, 920, 0, 0, 1029, 1029, 0, 581, 582, + 0, 407, 583, 0, 0, 237, 0, 0, 0, 236, + 0, 38, 0, 584, 585, 586, 587, 588, 589, 590, + 591, 592, 922, 923, 235, 0, 237, 0, 0, 0, + 0, 0, 1162, 226, 106, 0, 0, 237, 0, 107, + 235, 0, 108, 109, 110, 111, 0, 1163, 112, 113, + 226, 114, 115, 116, 39, 117, 0, 0, 238, 0, + 0, 0, 0, 593, 221, 0, 0, 0, 236, 40, + 0, 226, 0, 0, 0, 238, 0, 0, 0, 0, + 0, 0, 226, 0, 0, 0, 0, 41, 0, 0, + 0, 0, 42, 0, 43, 118, 407, 119, 120, 121, + 0, 237, 0, 0, 0, 0, 3, 407, 0, 4, + 0, 5, 1164, 1374, 1374, 1374, 1374, 1374, 0, 1374, + 1374, 0, 0, 618, 619, 0, 620, 0, 1682, 1682, + 0, 6, 7, 8, 9, 0, 0, 0, 2058, 0, + 0, 0, 1721, 0, 0, 621, 226, 0, 0, 0, + 1042, 0, 1722, 622, 623, 0, 624, 1723, 0, 1724, + 237, 1725, 0, 0, 1042, 0, 625, 626, 627, 0, + 0, 238, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, + 1043, 1043, 1043, 0, 1165, 0, 0, 1166, 1167, 1168, + 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, + 0, 0, 0, 236, 0, 226, 0, 0, 0, 0, + 1719, 1747, 1763, 1776, 0, 1042, 0, 0, 1833, 1840, + 1845, 1851, 0, 1582, 0, 0, 0, 1585, 0, 0, + 238, 0, 0, 1042, 1042, 0, 0, 1604, 1605, 1606, + 236, 0, 1609, 0, 1611, 0, 0, 0, 0, 0, + 0, 0, 0, 2028, 2038, 2045, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 236, 1626, 0, 1726, + 0, 0, 0, 0, 122, 0, 236, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, + 0, 0, 0, 2150, 0, 237, 124, 125, 126, 127, + 0, 0, 0, 2156, 1660, 0, 1662, 128, 0, 0, + 2159, 0, 129, 1663, 130, 131, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1676, 0, + 1677, 0, 237, 0, 0, 0, 0, 0, 161, 1685, + 226, 1687, 0, 0, 0, 2164, 0, 0, 0, 0, + 0, 236, 0, 1592, 0, 165, 0, 0, 237, 0, + 0, 0, 0, 0, 0, 407, 1043, 0, 237, 0, + 0, 166, 0, 0, 0, 0, 167, 226, 0, 168, + 1043, 1029, 1727, 0, 169, 0, 0, 0, 170, 0, + 0, 171, 172, 0, 0, 0, 173, 1728, 0, 174, + 236, 175, 238, 226, 0, 0, 0, 2226, 2227, 2228, + 0, 0, 0, 226, 0, 1729, 236, 0, 1164, 0, + 1730, 0, 1731, 0, 0, 0, 176, 0, 238, 0, + 0, 1043, 181, 2244, 0, 0, 0, 0, 238, 0, + 0, 0, 0, 237, 0, 0, 0, 0, 0, 1043, + 1043, 0, 3, 0, 881, 4, 0, 5, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1732, 0, 0, 0, 0, 0, 0, 6, 7, 8, + 9, 0, 0, 0, 0, 0, 0, 0, 226, 0, + 1593, 1749, 237, 1166, 1167, 1594, 1169, 1170, 1171, 1172, + 1173, 1174, 1175, 1176, 1177, 1595, 0, 0, 237, 0, + 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1853, 1854, 0, + 0, 0, 0, 0, 0, 0, 0, 226, 0, 0, + 1750, 1751, 1752, 1753, 0, 1754, 0, 0, 1755, 0, + 0, 0, 0, 226, 1870, 652, 0, 0, 0, 0, + 51, 0, 407, 0, 653, 1756, 0, 0, 0, 1887, + 63, 51, 51, 66, 66, 66, 70, 0, 238, 51, + 654, 858, 0, 0, 655, 0, 0, 0, 656, 657, + 2341, 2342, 2343, 658, 659, 660, 661, 662, 0, 0, + 0, 0, 0, 759, 760, 1914, 0, 761, 0, 0, + 0, 0, 0, 0, 0, 1757, 0, 0, 0, 1042, + 0, 0, 1916, 0, 1918, 762, 0, 0, 0, 0, + 0, 0, 51, 0, 0, 429, 51, 66, 66, 66, + 70, 0, 0, 0, 0, 0, 0, 51, 0, 444, + 449, 452, 51, 457, 66, 66, 462, 0, 444, 444, + 444, 444, 0, 66, 0, 0, 0, 478, 0, 51, + 0, 0, 66, 66, 0, 70, 0, 0, 66, 0, + 0, 0, 859, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 51, 518, 457, 66, 457, 0, 526, 529, + 0, 0, 533, 51, 66, 66, 0, 0, 66, 0, + 51, 0, 0, 0, 3, 0, 0, 4, 0, 5, + 0, 0, 0, 0, 0, 0, 0, 0, 1758, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, + 7, 8, 9, 334, 0, 763, 0, 0, 335, 0, + 0, 0, 0, 1749, 0, 0, 0, 0, 0, 0, + 0, 337, 0, 0, 0, 0, 338, 0, 0, 764, + 765, 766, 767, 768, 769, 860, 770, 771, 772, 773, + 774, 775, 776, 0, 0, 777, 778, 779, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2055, + 881, 0, 1750, 1751, 1752, 1753, 0, 1754, 780, 0, + 1755, 0, 0, 0, 0, 0, 1759, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1756, 0, 0, + 0, 0, 2075, 0, 0, 1043, 0, 0, 0, 444, + 449, 452, 51, 457, 66, 66, 462, 0, 444, 444, + 444, 444, 0, 3, 0, 0, 4, 0, 5, 2090, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 153, 0, 1757, 6, 7, + 8, 9, 154, 155, 0, 0, 0, 317, 156, 318, + 0, 0, 0, 0, 0, 0, 1737, 0, 0, 0, + 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 320, 321, 0, 0, 0, 322, + 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, + 0, 324, 325, 326, 327, 328, 329, 0, 0, 0, + 0, 0, 0, 161, 0, 162, 1738, 0, 0, 163, + 330, 0, 331, 0, 164, 157, 158, 159, 160, 0, + 165, 161, 0, 162, 0, 0, 1739, 163, 0, 0, + 0, 0, 164, 0, 0, 0, 166, 0, 165, 0, + 0, 167, 0, 0, 168, 0, 0, 0, 0, 169, + 1758, 0, 0, 170, 166, 0, 171, 172, 669, 167, + 0, 173, 168, 0, 174, 334, 175, 169, 0, 0, + 335, 170, 0, 0, 171, 172, 1740, 0, 0, 173, + 0, 0, 174, 337, 175, 0, 0, 0, 338, 0, + 0, 176, 0, 670, 0, 2174, 0, 181, 0, 0, + 0, 1099, 0, 0, 0, 0, 0, 0, 66, 176, + 177, 0, 178, 179, 180, 181, 0, 0, 0, 1105, + 0, 1106, 881, 1107, 0, 1108, 0, 0, 0, 0, + 1112, 0, 0, 0, 1113, 51, 0, 0, 2007, 0, + 0, 0, 0, 0, 1117, 0, 0, 1118, 0, 0, + 182, 183, 184, 185, 0, 0, 0, 66, 0, 186, + 187, 0, 0, 188, 189, 332, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 0, 0, 333, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 334, 0, 0, 0, 0, 335, + 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, + 0, 0, 337, 0, 0, 0, 0, 338, 0, 0, + 0, 0, 0, 213, 214, 0, 339, 0, 0, 340, + 341, 342, 343, 0, 0, 0, 344, 0, 0, 0, + 345, 346, 215, 0, 0, 0, 216, 217, 0, 0, + 0, 881, 0, 0, 0, 347, 0, 3, 218, 219, + 4, 0, 5, 0, 348, 0, 349, 1741, 220, 0, + 0, 221, 0, 0, 0, 0, 0, 0, 0, 153, + 0, 0, 6, 7, 8, 9, 154, 155, 0, 0, + 0, 317, 156, 318, 0, 0, 0, 0, 0, 0, + 1737, 0, 0, 0, 0, 0, 0, 0, 319, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 320, 321, + 0, 0, 0, 322, 0, 0, 323, 0, 0, 0, + 0, 0, 0, 0, 0, 324, 325, 326, 327, 328, + 329, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1738, 0, 0, 0, 330, 0, 331, 0, 0, 157, + 158, 159, 160, 0, 0, 161, 0, 162, 0, 0, + 1739, 163, 0, 0, 3, 0, 164, 4, 0, 5, + 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 166, 6, + 7, 8, 9, 167, 0, 0, 168, 1189, 0, 0, + 0, 169, 0, 1749, 0, 170, 0, 0, 171, 172, + 1740, 0, 0, 173, 0, 0, 174, 0, 175, 0, + 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, + 1200, 1201, 1202, 1203, 1204, 1205, 1206, 0, 0, 0, + 0, 0, 0, 176, 177, 0, 178, 179, 180, 181, + 0, 0, 1750, 1751, 1752, 1753, 0, 1754, 0, 0, + 1755, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1756, 0, 0, + 0, 0, 0, 0, 182, 183, 184, 185, 0, 0, + 0, 0, 0, 186, 187, 0, 0, 188, 189, 332, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 0, 0, 333, 0, 0, 0, 1757, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, + 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, + 336, 0, 0, 0, 0, 0, 337, 0, 0, 0, + 0, 338, 0, 0, 0, 0, 0, 213, 214, 0, + 339, 0, 0, 340, 341, 342, 343, 0, 0, 0, + 344, 0, 0, 0, 345, 346, 215, 0, 0, 0, + 216, 217, 0, 0, 0, 881, 0, 0, 0, 347, + 0, 3, 218, 219, 4, 0, 5, 0, 348, 0, + 349, 2006, 220, 0, 0, 221, 0, 0, 0, 0, + 0, 0, 0, 153, 0, 0, 6, 7, 8, 9, + 154, 155, 0, 0, 0, 317, 156, 318, 0, 0, + 1758, 0, 0, 0, 1737, 0, 0, 0, 0, 0, + 0, 0, 319, 0, 0, 334, 0, 0, 0, 0, + 335, 0, 320, 321, 0, 0, 0, 322, 0, 0, + 323, 0, 0, 337, 0, 0, 0, 0, 338, 324, + 325, 326, 327, 328, 329, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1738, 0, 0, 0, 330, 0, + 331, 0, 1486, 157, 158, 159, 160, 0, 0, 161, + 0, 162, 881, 0, 1739, 163, 0, 0, 3, 0, + 164, 4, 0, 5, 0, 0, 165, 0, 2292, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 166, 6, 7, 8, 9, 167, 0, 0, + 168, 0, 0, 0, 0, 169, 0, 1766, 0, 170, + 0, 0, 171, 172, 1740, 0, 0, 173, 0, 0, + 174, 0, 175, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 176, 177, 0, + 178, 179, 180, 181, 0, 0, 0, 1767, 1768, 1769, + 0, 1754, 0, 0, 1755, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1770, 0, 0, 0, 0, 0, 0, 182, 183, + 184, 185, 0, 0, 0, 0, 0, 186, 187, 0, + 0, 188, 189, 332, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 0, 0, 333, 0, 0, + 0, 1771, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 334, 0, 0, 0, 0, 335, 0, 0, + 0, 0, 0, 0, 336, 0, 0, 0, 0, 0, + 337, 0, 0, 0, 0, 338, 0, 0, 0, 0, + 0, 213, 214, 0, 339, 0, 0, 340, 341, 342, + 343, 0, 0, 0, 344, 0, 0, 0, 345, 346, + 215, 0, 0, 0, 216, 217, 0, 0, 0, 881, + 0, 0, 0, 347, 0, 3, 218, 219, 4, 0, + 5, 0, 348, 0, 349, 2013, 220, 0, 0, 221, + 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, + 6, 7, 8, 9, 154, 155, 0, 0, 0, 317, + 156, 318, 0, 0, 1758, 0, 0, 0, 1737, 0, + 0, 0, 0, 0, 0, 0, 319, 0, 0, 334, + 0, 0, 0, 0, 335, 0, 320, 321, 0, 0, + 0, 322, 0, 0, 323, 0, 0, 337, 0, 0, + 0, 0, 338, 324, 325, 326, 327, 328, 329, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1738, 0, + 0, 0, 330, 0, 331, 0, 0, 157, 158, 159, + 160, 0, 0, 161, 0, 162, 881, 0, 1739, 163, + 0, 0, 3, 0, 164, 4, 0, 5, 0, 0, + 165, 0, 1772, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 166, 6, 7, 8, + 9, 167, 0, 0, 168, 0, 0, 0, 0, 169, + 0, 1766, 0, 170, 0, 0, 171, 172, 1740, 0, + 0, 173, 0, 0, 174, 0, 175, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 176, 177, 0, 178, 179, 180, 181, 0, 0, + 0, 1767, 1768, 1769, 0, 1754, 0, 0, 1755, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1770, 0, 0, 0, 0, + 0, 0, 182, 183, 184, 185, 0, 0, 0, 0, + 0, 186, 187, 0, 0, 188, 189, 332, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 0, + 0, 333, 0, 0, 0, 1771, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, + 0, 335, 0, 0, 0, 0, 0, 0, 336, 0, + 0, 0, 0, 0, 337, 0, 0, 0, 0, 338, + 0, 0, 0, 0, 0, 213, 214, 0, 339, 0, + 0, 340, 341, 342, 343, 0, 0, 0, 344, 0, + 0, 0, 345, 346, 215, 4, 0, 5, 216, 217, + 0, 0, 0, 881, 0, 0, 0, 347, 0, 0, + 218, 219, 0, 0, 153, 0, 348, 0, 349, 2291, + 220, 154, 155, 221, 0, 0, 317, 156, 318, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 319, 0, 0, 0, 0, 1758, 0, + 0, 0, 0, 320, 321, 0, 0, 749, 322, 0, + 0, 323, 0, 334, 0, 0, 0, 0, 335, 0, + 324, 325, 326, 327, 328, 329, 0, 0, 0, 0, + 0, 337, 0, 0, 750, 0, 338, 751, 0, 330, + 0, 331, 0, 0, 157, 158, 159, 160, 0, 0, + 161, 0, 162, 0, 752, 0, 163, 0, 0, 0, + 0, 164, 0, 0, 0, 0, 0, 165, 0, 0, + 881, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 166, 0, 0, 2008, 0, 167, 0, + 0, 168, 0, 0, 3, 0, 169, 4, 0, 5, + 170, 0, 0, 171, 172, 0, 0, 0, 173, 0, + 0, 174, 0, 175, 0, 0, 0, 0, 0, 6, + 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, + 1721, 0, 0, 0, 0, 0, 0, 0, 176, 177, + 1722, 178, 179, 180, 181, 1723, 0, 1724, 0, 1725, + 0, 0, 0, 0, 0, 0, 0, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 0, 182, + 183, 184, 185, 0, 0, 0, 0, 0, 186, 187, + 0, 0, 188, 189, 332, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 210, 211, 0, 0, 333, 0, + 753, 0, 905, 0, 213, 214, 0, 0, 0, 0, + 0, 0, 0, 334, 754, 0, 0, 0, 335, 0, + 153, 0, 0, 0, 0, 336, 0, 0, 155, 0, + 0, 337, 0, 156, 0, 0, 338, 1726, 0, 0, + 755, 0, 213, 214, 0, 339, 0, 0, 340, 341, + 342, 343, 0, 0, 0, 344, 0, 0, 0, 345, + 346, 215, 0, 0, 0, 216, 217, 906, 0, 0, + 0, 0, 0, 907, 347, 0, 0, 218, 219, 0, + 0, 0, 908, 348, 909, 349, 1904, 220, 0, 0, + 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 157, 158, 159, 160, 0, 0, 161, 0, 910, 0, + 0, 0, 911, 0, 0, 0, 0, 912, 0, 0, + 0, 0, 0, 913, 0, 0, 0, 914, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, + 0, 0, 0, 0, 167, 0, 0, 915, 0, 0, + 1727, 0, 169, 0, 0, 0, 170, 0, 0, 171, + 172, 0, 0, 0, 173, 1728, 0, 174, 0, 175, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1729, 0, 0, 0, 0, 1730, 0, + 1731, 0, 0, 0, 176, 177, 0, 178, 179, 180, + 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1279, 0, 0, 0, 0, 0, 759, 760, 0, + 0, 761, 881, 0, 0, 0, 0, 0, 0, 153, + 0, 0, 0, 0, 0, 916, 0, 155, 2005, 762, + 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 0, 0, 212, 0, 906, 0, 0, 0, + 0, 0, 907, 0, 917, 0, 0, 918, 919, 0, + 0, 0, 0, 0, 920, 0, 0, 0, 0, 0, + 0, 0, 921, 0, 0, 0, 0, 0, 0, 157, + 158, 159, 160, 0, 0, 161, 0, 910, 213, 214, + 0, 911, 0, 0, 922, 923, 912, 0, 0, 0, + 0, 0, 1280, 0, 0, 0, 914, 215, 0, 0, + 0, 216, 217, 0, 0, 0, 0, 0, 166, 0, + 0, 924, 925, 167, 755, 0, 1281, 0, 0, 763, + 0, 169, 0, 926, 0, 170, 221, 0, 171, 172, + 0, 0, 0, 173, 0, 0, 174, 0, 175, 0, + 0, 0, 0, 764, 765, 766, 767, 768, 769, 0, + 770, 771, 772, 773, 774, 775, 776, 0, 0, 777, + 778, 779, 0, 176, 177, 0, 178, 179, 180, 181, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1360, 0, 780, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, + 0, 0, 0, 0, 916, 0, 155, 0, 0, 0, + 0, 156, 0, 0, 0, 0, 0, 0, 0, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 0, 0, 212, 0, 906, 0, 0, 0, 0, + 0, 907, 0, 917, 0, 0, 918, 919, 0, 0, + 0, 0, 0, 920, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 157, 158, + 159, 160, 0, 0, 161, 0, 910, 213, 214, 0, + 911, 0, 0, 922, 923, 912, 0, 0, 161, 0, + 162, 1280, 0, 698, 163, 914, 215, 0, 0, 164, + 216, 217, 0, 0, 0, 165, 0, 166, 0, 0, + 924, 925, 167, 755, 0, 1281, 0, 0, 0, 0, + 169, 166, 926, 0, 170, 221, 167, 171, 172, 168, + 0, 0, 173, 0, 169, 174, 0, 175, 170, 0, + 0, 171, 172, 0, 0, 0, 173, 0, 0, 174, + 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 176, 177, 0, 178, 179, 180, 181, 0, + 0, 0, 0, 0, 0, 0, 176, 0, 699, 1397, + 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, + 0, 0, 0, 916, 0, 155, 0, 0, 0, 0, + 156, 0, 0, 0, 0, 0, 0, 0, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, + 0, 0, 212, 0, 906, 0, 0, 0, 0, 0, + 907, 0, 917, 0, 0, 918, 919, 0, 0, 0, + 0, 0, 920, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 157, 158, 159, + 160, 0, 0, 161, 0, 910, 213, 214, 0, 911, + 0, 0, 922, 923, 912, 0, 0, 161, 0, 162, + 1280, 0, 0, 163, 914, 215, 0, 0, 164, 216, + 217, 0, 0, 0, 165, 0, 166, 0, 0, 924, + 925, 167, 755, 0, 1281, 0, 0, 0, 0, 169, + 166, 926, 0, 170, 221, 167, 171, 172, 168, 0, + 0, 173, 0, 169, 174, 0, 175, 170, 0, 0, + 171, 172, 0, 0, 0, 173, 0, 0, 174, 0, + 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 176, 177, 0, 178, 179, 180, 181, 0, 0, + 0, 0, 0, 0, 0, 176, 0, 0, 1584, 0, + 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, + 0, 0, 916, 0, 155, 0, 0, 0, 0, 156, + 0, 0, 0, 0, 0, 0, 0, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 0, + 0, 212, 0, 906, 0, 0, 0, 0, 0, 907, + 0, 917, 0, 0, 918, 919, 0, 0, 0, 0, + 0, 920, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 157, 158, 159, 160, + 0, 0, 161, 0, 910, 213, 214, 0, 911, 0, + 0, 922, 923, 912, 0, 0, 0, 0, 0, 1280, + 0, 0, 0, 914, 215, 0, 0, 0, 216, 217, + 0, 0, 0, 0, 0, 166, 0, 0, 924, 925, + 167, 755, 0, 1281, 0, 0, 0, 0, 169, 0, + 926, 0, 170, 221, 0, 171, 172, 0, 0, 0, + 173, 0, 0, 174, 0, 175, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3, 0, 0, 4, 0, 5, 0, 0, + 176, 177, 0, 178, 179, 180, 181, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 6, 7, 8, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1766, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 916, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 0, 0, + 212, 1767, 1768, 1769, 0, 1754, 0, 0, 1755, 0, + 917, 0, 0, 918, 919, 0, 0, 0, 0, 0, + 920, 0, 0, 0, 0, 1770, 1001, 1002, 1003, 1004, + 1005, 1006, 0, 0, 0, 0, 1007, 0, 0, 0, + 986, 0, 0, 0, 213, 214, 0, 0, 0, 0, + 922, 923, 0, 0, 0, 0, 1325, 0, 0, 0, + 0, 0, 0, 215, 0, 0, 0, 216, 217, 0, + 0, 0, 0, 0, 0, 1771, 0, 924, 925, 0, + 755, 0, 0, 0, 0, 0, 0, 906, 0, 926, + 0, 0, 221, 907, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 906, 0, 0, 0, 0, + 0, 907, 0, 0, 0, 0, 0, 0, 0, 0, + 157, 158, 159, 160, 0, 0, 0, 0, 1008, 0, + 0, 0, 1009, 0, 0, 0, 0, 1010, 157, 158, + 159, 160, 0, 1011, 0, 0, 1008, 914, 0, 0, + 1009, 0, 0, 0, 0, 1010, 0, 0, 0, 1012, + 1325, 1011, 0, 0, 1013, 914, 0, 1014, 0, 0, + 0, 0, 1015, 0, 0, 0, 1016, 1012, 0, 1017, + 1018, 0, 1013, 0, 1019, 1014, 0, 1020, 1758, 1021, + 1015, 0, 0, 0, 1016, 0, 0, 1017, 1018, 0, + 0, 0, 1019, 334, 0, 1020, 0, 1021, 335, 906, + 0, 0, 0, 0, 1022, 907, 0, 1023, 0, 0, + 1024, 337, 0, 0, 0, 0, 338, 0, 0, 0, + 0, 0, 1022, 0, 0, 1023, 0, 0, 1024, 0, + 0, 0, 157, 158, 159, 160, 0, 0, 0, 0, + 1008, 0, 0, 0, 1009, 0, 0, 0, 0, 1010, + 881, 0, 0, 0, 0, 1011, 0, 0, 0, 914, + 0, 0, 0, 0, 0, 0, 2293, 0, 0, 0, + 0, 1012, 0, 0, 0, 0, 1013, 0, 0, 1014, + 0, 0, 0, 0, 1015, 0, 0, 0, 1016, 0, + 0, 1017, 1018, 0, 917, 0, 1019, 918, 919, 1020, + 0, 1021, 0, 0, 920, 0, 0, 0, 0, 0, + 0, 0, 917, 0, 0, 918, 919, 0, 0, 0, + 0, 0, 920, 0, 0, 0, 1022, 0, 0, 1023, + 0, 0, 1024, 0, 922, 923, 0, 1025, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 922, 923, 0, 1025, 0, 0, 0, 0, + 0, 924, 925, 0, 0, 0, 0, 0, 0, 1048, + 986, 349, 0, 1026, 0, 0, 221, 0, 0, 924, + 925, 0, 0, 0, 0, 0, 0, 0, 0, 349, + 0, 1026, 0, 0, 221, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 917, 906, 0, 918, + 919, 0, 0, 907, 0, 0, 920, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 157, 158, 159, 160, 0, 0, 922, 923, 1008, 1025, + 0, 0, 1009, 0, 0, 0, 0, 1010, 0, 0, + 0, 0, 0, 1011, 0, 0, 0, 914, 0, 0, + 0, 0, 0, 924, 925, 0, 0, 0, 0, 1012, + 0, 0, 0, 0, 1013, 1026, 0, 1014, 221, 0, + 0, 0, 1015, 0, 0, 0, 1016, 0, 0, 1017, + 1018, 0, 0, 0, 1019, 0, 153, 1020, 0, 1021, + 0, 0, 0, 154, 155, 0, 0, 0, 317, 156, + 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1022, 319, 0, 1023, 0, 0, + 1024, 0, 0, 0, 0, 320, 321, 0, 0, 0, + 322, 0, 0, 323, 0, 0, 0, 0, 0, 0, + 0, 0, 324, 325, 326, 327, 328, 329, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 330, 0, 331, 0, 0, 157, 158, 159, 160, + 0, 0, 161, 0, 162, 0, 0, 0, 163, 0, + 0, 0, 0, 164, 0, 0, 0, 0, 0, 165, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 917, 166, 0, 918, 919, 0, + 167, 0, 0, 168, 920, 0, 0, 0, 169, 0, + 0, 0, 170, 0, 0, 171, 172, 0, 0, 0, + 173, 0, 0, 174, 0, 175, 0, 0, 0, 0, + 0, 0, 0, 0, 922, 923, 0, 1025, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 176, 177, 0, 178, 179, 180, 181, 0, 0, 0, + 0, 924, 925, 0, 0, 0, 0, 0, 0, 0, + 0, 1049, 0, 1026, 0, 0, 221, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 182, 183, 184, 185, 0, 0, 0, 0, 0, + 186, 187, 0, 0, 188, 189, 332, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 0, 0, + 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 153, 0, 334, 0, 0, 0, 0, + 335, 155, 0, 0, 0, 0, 156, 336, 0, 0, + 0, 0, 0, 337, 0, 0, 0, 0, 338, 0, + 0, 0, 0, 0, 213, 214, 0, 339, 0, 0, + 340, 341, 342, 343, 0, 0, 0, 344, 0, 0, + 906, 345, 346, 215, 0, 0, 907, 216, 217, 0, + 0, 0, 0, 0, 0, 0, 347, 0, 0, 218, + 219, 0, 0, 0, 0, 348, 0, 349, 0, 220, + 0, 0, 221, 157, 158, 159, 160, 0, 0, 161, + 0, 910, 0, 0, 0, 911, 0, 0, 0, 0, + 912, 0, 0, 0, 0, 0, 1280, 0, 0, 0, + 914, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 166, 0, 0, 0, 0, 167, 0, 0, + 1281, 0, 0, 0, 0, 169, 0, 0, 0, 170, + 0, 0, 171, 172, 0, 0, 0, 173, 0, 0, + 174, 0, 175, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 176, 177, 0, + 178, 179, 180, 181, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 153, 0, 0, 0, 0, 0, 916, 154, + 155, 0, 0, 0, 0, 156, 0, 0, 0, 0, + 0, 0, 0, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 0, 0, 212, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 917, 0, 0, + 918, 919, 0, 0, 0, 0, 0, 920, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 157, 158, 159, 160, 0, 0, 161, 0, + 162, 213, 214, 0, 163, 0, 0, 922, 923, 164, + 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, + 215, 0, 0, 0, 216, 217, 0, 0, 0, 0, + 0, 166, 0, 0, 924, 925, 167, 755, 0, 168, + 0, 0, 0, 0, 169, 0, 926, 0, 170, 221, + 0, 171, 172, 0, 0, 0, 173, 0, 0, 174, + 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 176, 177, 0, 178, + 179, 180, 181, 0, 0, 0, 0, 0, 0, 0, + 153, 0, 0, 0, 0, 0, 0, 154, 155, 0, + 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 182, 183, 184, + 185, 0, 0, 0, 0, 0, 186, 187, 0, 0, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 2204, 0, 212, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 157, 158, 159, 160, 0, 0, 161, 0, 162, 0, + 0, 0, 163, 0, 0, 0, 0, 164, 0, 0, + 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, + 213, 214, 0, 0, 0, 0, 0, 0, 0, 166, + 0, 0, 0, 0, 167, 0, 0, 168, 0, 215, + 0, 0, 169, 216, 217, 0, 170, 0, 0, 171, + 172, 0, 0, 0, 173, 218, 219, 174, 0, 175, + 0, 0, 0, 349, 0, 220, 0, 0, 221, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 176, 177, 153, 178, 179, 180, + 181, 0, 0, 154, 155, 0, 0, 0, 0, 156, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 182, 183, 184, 185, 0, + 0, 0, 0, 0, 186, 187, 0, 0, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 0, 0, 212, 0, 157, 158, 159, 160, + 0, 0, 161, 0, 162, 0, 0, 0, 163, 0, + 0, 0, 0, 164, 0, 0, 0, 0, 0, 165, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 166, 0, 0, 213, 214, + 167, 0, 0, 168, 0, 0, 0, 0, 169, 0, + 0, 0, 170, 0, 0, 171, 172, 215, 0, 0, + 173, 216, 217, 174, 0, 175, 0, 0, 0, 0, + 0, 0, 0, 218, 219, 0, 0, 0, 0, 0, + 0, 0, 0, 220, 0, 0, 221, 0, 0, 0, + 176, 177, 0, 178, 179, 180, 181, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 986, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 182, 183, 184, 185, 0, 0, 0, 0, 0, + 186, 187, 0, 0, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 906, 0, + 212, 0, 0, 0, 907, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 157, 158, 159, 160, 0, 0, 0, 0, 1008, + 0, 0, 0, 1009, 213, 214, 0, 0, 1010, 0, + 0, 0, 0, 0, 1011, 0, 0, 0, 914, 0, + 0, 0, 0, 215, 0, 0, 0, 216, 217, 0, + 1012, 0, 0, 0, 0, 1013, 0, 0, 1014, 218, + 219, 0, 0, 1015, 0, 0, 0, 1016, 0, 220, + 1017, 1018, 221, 0, 0, 1019, 0, 0, 1020, 0, + 1021, 0, 0, 0, 0, 0, 0, 2, 3, 0, + 0, 4, 0, 5, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1022, 0, 0, 1023, 0, + 0, 1024, 0, 6, 7, 8, 9, 0, 0, 0, + 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, + 0, 0, 11, 0, 12, 0, 13, 0, 0, 14, + 15, 16, 0, 17, 0, 0, 0, 18, 19, 20, + 0, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -432, 0, 0, 0, 917, 0, 35, 918, 919, + 0, 0, 0, 0, 0, 920, 0, 36, 906, 0, + 0, 0, 0, 37, 907, 0, 0, 324, 325, 326, + 1889, 1890, 329, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 922, 923, 38, 1025, 0, + 0, 157, 158, 159, 160, 0, 0, 0, 0, 1008, + 0, 0, 0, 1009, 0, 0, 0, 0, 1010, 0, + 0, 0, 924, 925, 1011, 0, 0, 0, 914, 0, + 0, 0, 349, 0, 1026, 0, 0, 221, 0, 0, + 1012, 0, 0, 0, 0, 1013, 0, 0, 1014, 906, + 0, 0, 0, 1015, 0, 907, 0, 1016, 0, 0, + 1017, 1018, 0, 0, 0, 1019, 0, 0, 1020, 0, + 1021, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 157, 158, 159, 160, 0, 0, 0, 0, + 1008, 0, 0, 0, 1009, 1022, 0, 0, 1023, 1010, + 0, 1024, 0, 0, 0, 1011, 0, 0, 0, 914, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1012, 0, 0, 39, 0, 1013, 0, 0, 1014, + 0, 0, 0, 0, 1015, 0, 0, 0, 1016, 40, + 0, 1017, 1018, 0, -432, 0, 1019, 0, 0, 1020, + 0, 1021, 0, 0, 0, 0, 0, 41, 0, 0, + 0, 0, 42, 0, 43, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1022, 0, 0, 1023, + 0, 0, 1024, 0, 0, 917, 0, 0, 918, 919, + 0, 0, 0, 0, 0, 920, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 922, 923, 0, 1025, 0, + 856, 0, 0, 0, 0, 0, 0, 0, 906, 0, + 0, 0, 0, 0, 907, 0, 0, 0, 0, 0, + 0, 0, 924, 925, 0, 0, 0, 750, 0, 0, + 751, 0, 0, 0, 1026, 0, 917, 221, 0, 918, + 919, 1706, 158, 159, 160, 0, 920, 752, 0, 1008, + 0, 0, 0, 1009, 0, 0, 0, 0, 1010, 0, + 0, 0, 0, 0, 1011, 0, 0, 0, 914, 0, + 0, 0, 0, 0, 0, 0, 922, 923, 0, 1025, + 1012, 0, 0, 0, 0, 1013, 0, 0, 1014, 0, + 0, 0, 0, 1015, 0, 0, 0, 1016, 0, 0, + 1017, 1018, 0, 924, 925, 1019, 0, 0, 1020, 0, + 1021, 0, 0, 0, 0, 1026, 0, 0, 221, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1022, 0, 0, 1023, 0, + 0, 1024, 0, 0, 0, 0, 0, 0, 0, 0, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 753, 0, 0, 0, 213, 214, 0, + 0, 0, 0, 0, 0, 917, 0, 754, 918, 919, + 0, 0, 0, 0, 0, 920, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 755, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 922, 923, 0, 1025, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 924, 925, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1026, 0, 0, 221 +}; + +static const yytype_int16 yycheck[] = +{ + 1, 68, 3, 30, 328, 434, 352, 431, 216, 361, + 433, 53, 432, 510, 399, 508, 68, 1, 338, 878, + 509, 567, 920, 65, 38, 684, 356, 628, 378, 37, + 717, 906, 756, 30, 463, 317, 385, 1019, 220, 179, + 460, 1461, 531, 32, 443, 1461, 47, 566, 871, 595, + 1467, 1326, 1327, 473, 55, 1468, 53, 603, 1333, 60, + 1466, 414, 1460, 1461, 346, 1405, 979, 840, 65, 1482, + 375, 399, 377, 619, 107, 474, 109, 1270, 111, 112, + 1313, 1465, 115, 1404, 117, 53, 438, 120, 121, 371, + 36, 124, 125, 126, 127, 1479, 180, 65, 131, 1574, + 430, 134, 522, 876, 1574, 1024, 139, 140, 881, 177, + 1587, 1588, 180, 177, 147, 399, 180, 469, 664, 1628, + 926, 894, 1793, 453, 1791, 898, 410, 411, 1792, 177, + 1407, 1770, 180, 857, 177, 1557, 1558, 180, 1693, 4, + 1415, 995, 1766, 1971, 23, 1835, 177, 499, 999, 180, + 1578, 177, 996, 1566, 180, 1836, 177, 997, 30, 180, + 1637, 1638, 708, 4, 177, 177, 2002, 180, 180, 23, + 7, 177, 524, 7, 180, 7, 127, 177, 7, 97, + 180, 53, 7, 8, 9, 30, 177, 79, 80, 180, + 7, 57, 1817, 65, 38, 1590, 177, 743, 1847, 180, + 23, 177, 45, 90, 180, 103, 177, 177, 53, 180, + 180, 177, 834, 835, 180, 104, 105, 106, 104, 216, + 65, 10, 190, 220, 49, 105, 51, 1288, 720, 103, + 722, 104, 724, 837, 993, 994, 61, 729, 7, 104, + 105, 66, 5, 104, 105, 70, 15, 16, 17, 18, + 294, 40, 41, 42, 43, 8, 753, 58, 104, 85, + 327, 328, 15, 16, 17, 18, 58, 144, 85, 22, + 8, 1691, 142, 20, 1751, 1752, 30, 1598, 1599, 2032, + 53, 13, 271, 780, 161, 155, 75, 839, 277, 104, + 1767, 1768, 122, 1691, 83, 84, 85, 86, 790, 53, + 840, 54, 172, 781, 1022, 8, 1079, 1354, 4, 1356, + 6, 65, 15, 16, 17, 18, 54, 106, 385, 22, + 364, 12, 838, 22, 311, 822, 85, 820, 104, 105, + 106, 57, 821, 294, 123, 8, 331, 30, 164, 128, + 129, 130, 293, 39, 216, 49, 341, 399, 220, 138, + 90, 54, 141, 93, 103, 352, 88, 104, 410, 411, + 53, 104, 1021, 128, 332, 432, 1764, 90, 49, 1789, + 93, 216, 65, 1789, 4, 220, 6, 364, 104, 1777, + 432, 54, 73, 861, 352, 427, 77, 816, 153, 293, + 1788, 1789, 104, 460, 814, 47, 221, 284, 126, 286, + 442, 92, 93, 364, 103, 104, 473, 311, 460, 808, + 1, 1012, 298, 4, 1015, 6, 303, 62, 8, 110, + 1897, 473, 150, 128, 297, 15, 16, 17, 18, 104, + 427, 91, 104, 161, 1285, 26, 27, 28, 29, 313, + 57, 5, 133, 134, 1505, 442, 364, 38, 153, 295, + 1072, 1073, 1074, 144, 99, 522, 326, 490, 288, 427, + 151, 20, 216, 22, 54, 1183, 220, 819, 1090, 1864, + 522, 369, 1076, 1, 442, 364, 4, 369, 6, 2169, + 352, 347, 348, 298, 8, 364, 364, 104, 2241, 2170, + 369, 15, 16, 17, 18, 2331, 369, 57, 26, 27, + 28, 29, 327, 328, 369, 2129, 331, 352, 369, 85, + 2338, 300, 301, 302, 277, 369, 1289, 1290, 335, 2144, + 364, 364, 2171, 216, 365, 1923, 1078, 220, 365, 292, + 54, 365, 1383, 365, 297, 4, 365, 6, 45, 1079, + 1, 364, 2097, 4, 104, 6, 369, 310, 295, 350, + 351, 352, 315, 2030, 297, 427, 696, 57, 350, 351, + 352, 1077, 90, 57, 313, 26, 27, 28, 29, 97, + 442, 297, 331, 332, 333, 1381, 2215, 45, 46, 1125, + 2204, 1921, 427, 295, 1438, 1862, 594, 2096, 2259, 939, + 2257, 282, 283, 369, 2258, 1439, 2018, 442, 352, 368, + 1440, 30, 365, 617, 104, 1652, 134, 2082, 1655, 349, + 104, 1658, 2082, 697, 364, 368, 1891, 922, 923, 444, + 1139, 281, 1141, 448, 53, 297, 349, 452, 1547, 697, + 358, 695, 457, 697, 580, 1257, 65, 462, 363, 847, + 37, 169, 103, 2071, 363, 399, 435, 436, 437, 697, + 999, 1926, 1885, 1886, 697, 2083, 410, 411, 1057, 352, + 1045, 133, 361, 871, 695, 368, 697, 90, 90, 695, + 369, 697, 1000, 427, 695, 243, 697, 1436, 1437, 468, + 297, 243, 695, 695, 697, 697, 114, 364, 442, 695, + 87, 697, 369, 518, 2015, 695, 1355, 697, 712, 342, + 146, 709, 90, 131, 695, 1898, 697, 85, 497, 87, + 7, 1624, 1065, 277, 695, 540, 697, 1045, 351, 695, + 1025, 697, 1214, 20, 695, 695, 697, 697, 292, 695, + 135, 697, 137, 297, 427, 144, 164, 297, 1, 103, + 149, 4, 1026, 6, 112, 113, 310, 814, 90, 442, + 278, 315, 85, 2093, 87, 331, 332, 333, 349, 293, + 8, 1045, 814, 26, 27, 28, 29, 2184, 103, 1628, + 114, 114, 2185, 45, 365, 47, 24, 2183, 368, 1272, + 364, 1278, 103, 1642, 111, 369, 1275, 216, 60, 61, + 126, 220, 135, 93, 14, 15, 16, 297, 2182, 126, + 1623, 365, 7, 297, 871, 148, 54, 1580, 277, 111, + 146, 85, 1305, 87, 150, 20, 998, 32, 33, 34, + 1309, 349, 1341, 292, 126, 516, 878, 172, 297, 275, + 276, 94, 104, 133, 1693, 2255, 2313, 365, 110, 2255, + 293, 310, 1, 832, 368, 4, 315, 6, 120, 20, + 847, 22, 313, 314, 126, 85, 2254, 2255, 78, 79, + 80, 284, 284, 286, 286, 243, 316, 26, 27, 28, + 29, 134, 104, 81, 871, 95, 96, 1564, 150, 284, + 1604, 1605, 41, 1023, 104, 44, 254, 255, 349, 97, + 258, 38, 39, 113, 114, 292, 284, 4, 286, 119, + 127, 915, 2177, 45, 365, 913, 85, 134, 116, 7, + 243, 357, 979, 310, 258, 259, 136, 1269, 315, 349, + 317, 325, 20, 352, 22, 145, 146, 305, 17, 149, + 49, 50, 999, 52, 53, 54, 1285, 164, 1597, 275, + 276, 18, 284, 109, 286, 111, 112, 126, 1000, 115, + 368, 117, 1498, 135, 120, 121, 168, 169, 124, 125, + 126, 127, 78, 306, 164, 131, 360, 361, 134, 243, + 1252, 150, 305, 139, 140, 847, 294, 30, 1475, 167, + 1473, 147, 85, 283, 172, 1474, 168, 169, 52, 2264, + 1649, 1, 52, 1045, 4, 111, 6, 1543, 427, 871, + 53, 998, 847, 313, 314, 164, 1728, 1729, 1730, 1731, + 126, 343, 65, 442, 346, 278, 26, 27, 28, 29, + 57, 357, 204, 126, 0, 297, 871, 114, 4, 818, + 6, 305, 5, 1, 1383, 8, 4, 1912, 6, 254, + 187, 364, 293, 190, 244, 245, 246, 150, 1398, 1050, + 1435, 294, 295, 1054, 364, 237, 172, 1442, 26, 27, + 28, 29, 313, 314, 1463, 285, 286, 62, 63, 30, + 131, 364, 67, 1, 135, 364, 4, 153, 6, 287, + 364, 168, 169, 164, 1292, 364, 349, 104, 164, 165, + 177, 114, 53, 847, 104, 105, 106, 364, 26, 27, + 28, 29, 365, 126, 65, 128, 43, 168, 169, 351, + 15, 16, 129, 130, 30, 5, 1, 871, 8, 4, + 1472, 6, 90, 146, 878, 22, 998, 150, 25, 97, + 153, 45, 1140, 292, 1142, 45, 1823, 53, 45, 30, + 1148, 26, 27, 28, 29, 261, 112, 113, 114, 65, + 1434, 1435, 7, 998, 847, 313, 314, 1441, 1442, 1443, + 1444, 986, 53, 216, 2146, 990, 134, 220, 99, 100, + 101, 102, 926, 292, 65, 7, 103, 104, 871, 8, + 299, 300, 2080, 2081, 309, 7, 114, 114, 20, 1, + 22, 104, 4, 1739, 6, 103, 315, 1405, 20, 1407, + 22, 169, 336, 337, 1, 90, 365, 4, 1, 6, + 370, 4, 97, 6, 26, 27, 28, 29, 1285, 242, + 370, 1943, 1944, 1945, 305, 306, 307, 308, 309, 26, + 27, 28, 29, 26, 27, 28, 29, 254, 2097, 993, + 994, 995, 996, 997, 998, 114, 1000, 116, 41, 134, + 342, 44, 275, 276, 342, 216, 1602, 274, 275, 220, + 103, 1946, 1947, 1948, 1949, 116, 135, 103, 104, 489, + 15, 16, 1026, 45, 143, 144, 145, 146, 114, 1631, + 359, 132, 45, 4, 169, 6, 135, 8, 60, 61, + 114, 1045, 104, 105, 106, 1292, 367, 60, 61, 352, + 216, 85, 153, 177, 220, 998, 23, 131, 23, 160, + 278, 52, 136, 137, 1634, 52, 1383, 1716, 538, 168, + 169, 52, 171, 52, 490, 216, 1711, 1712, 52, 220, + 103, 1383, 104, 85, 357, 1685, 364, 1687, 110, 349, + 4, 104, 6, 7, 1837, 103, 1692, 110, 120, 280, + 278, 1848, 103, 1842, 126, 365, 103, 120, 289, 290, + 291, 292, 85, 126, 1910, 1911, 85, 1913, 103, 104, + 103, 164, 15, 16, 427, 60, 61, 1, 150, 114, + 4, 349, 6, 1876, 4, 1878, 6, 150, 8, 442, + 227, 352, 1881, 278, 231, 232, 233, 365, 249, 250, + 1375, 1376, 26, 27, 28, 29, 103, 1382, 1405, 17, + 1407, 277, 313, 314, 38, 1623, 18, 45, 847, 243, + 1292, 349, 2107, 2108, 2109, 110, 292, 1711, 1712, 1781, + 368, 297, 60, 61, 5, 120, 352, 365, 350, 351, + 352, 126, 871, 1, 310, 7, 4, 1292, 6, 315, + 138, 139, 140, 141, 1455, 1456, 7, 1458, 1459, 1460, + 1461, 352, 1459, 7, 349, 150, 427, 7, 26, 27, + 28, 29, 1456, 103, 1458, 1459, 1460, 1461, 1830, 5, + 365, 442, 110, 399, 103, 2086, 2087, 7, 2147, 364, + 2263, 1459, 120, 7, 410, 411, 1504, 294, 126, 292, + 194, 195, 1, 192, 193, 4, 17, 6, 112, 113, + 238, 427, 1941, 18, 1938, 368, 1939, 112, 113, 247, + 248, 8, 150, 251, 252, 297, 442, 26, 27, 28, + 29, 2304, 7, 1405, 297, 1407, 427, 349, 1292, 1553, + 1554, 38, 41, 1551, 1552, 44, 4, 5, 1968, 112, + 113, 442, 349, 365, 1621, 103, 1623, 1624, 1, 364, + 1405, 4, 1407, 6, 103, 104, 1890, 103, 365, 998, + 364, 1572, 365, 364, 1575, 1995, 1577, 95, 96, 1580, + 2126, 103, 104, 26, 27, 28, 29, 1459, 1572, 364, + 1642, 1575, 294, 1577, 43, 44, 1580, 1390, 1391, 1292, + 37, 311, 1644, 364, 1, 1602, 1936, 4, 45, 6, + 47, 103, 49, 103, 1459, 52, 53, 54, 103, 56, + 364, 1375, 1376, 1377, 1378, 1379, 1623, 1381, 1382, 26, + 27, 28, 29, 103, 1602, 103, 1390, 1391, 1646, 45, + 104, 47, 364, 1644, 103, 97, 52, 1644, 54, 103, + 191, 1405, 58, 1407, 1862, 131, 231, 46, 196, 48, + 103, 50, 51, 104, 234, 164, 107, 108, 109, 58, + 59, 1738, 236, 234, 1, 235, 1644, 4, 235, 6, + 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, + 1444, 103, 98, 343, 100, 1692, 103, 94, 103, 26, + 27, 28, 29, 92, 114, 1459, 116, 117, 118, 119, + 2056, 103, 1405, 1921, 1407, 103, 2213, 364, 2211, 364, + 364, 399, 1749, 2212, 1692, 349, 335, 336, 337, 2275, + 1602, 364, 410, 411, 1735, 103, 294, 134, 103, 1766, + 5, 365, 8, 1744, 1745, 1746, 1747, 1748, 104, 105, + 106, 1623, 1749, 2246, 2247, 1, 103, 1602, 4, 2248, + 6, 1762, 1763, 1764, 2310, 103, 1459, 52, 103, 1766, + 2316, 22, 1644, 43, 1775, 1776, 1777, 149, 1623, 5, + 26, 27, 28, 29, 367, 1786, 1787, 1788, 1789, 103, + 1787, 349, 85, 292, 847, 8, 128, 1798, 85, 1644, + 22, 1798, 1786, 1787, 1788, 1789, 22, 365, 367, 2208, + 364, 103, 144, 7, 1798, 331, 332, 333, 871, 1787, + 1692, 153, 1889, 1890, 371, 1826, 1827, 1828, 160, 161, + 1798, 2328, 364, 2326, 1, 364, 114, 4, 2327, 6, + 277, 371, 1826, 1827, 1828, 103, 5, 1692, 1602, 295, + 128, 104, 86, 87, 88, 292, 90, 135, 2210, 26, + 27, 28, 29, 1292, 364, 1862, 365, 312, 114, 1623, + 313, 314, 312, 310, 1628, 153, 20, 1749, 315, 43, + 317, 278, 160, 316, 1951, 2093, 847, 191, 1642, 316, + 1644, 294, 311, 2245, 1766, 7, 70, 1722, 1723, 1724, + 1725, 1968, 5, 166, 1749, 1906, 349, 7, 103, 1602, + 871, 222, 223, 224, 225, 1787, 1968, 39, 2317, 104, + 99, 1766, 365, 103, 1921, 363, 1798, 94, 1995, 363, + 1623, 847, 191, 363, 104, 2002, 99, 399, 1692, 1693, + 363, 103, 1787, 1995, 7, 998, 103, 103, 410, 411, + 365, 1644, 349, 1798, 20, 871, 847, 1711, 1712, 85, + 103, 103, 878, 1964, 103, 1966, 1967, 134, 365, 103, + 103, 365, 5, 2325, 103, 190, 1405, 104, 1407, 1980, + 871, 363, 151, 103, 311, 1986, 103, 103, 294, 103, + 1862, 2024, 1993, 1994, 105, 1749, 1997, 295, 365, 1692, + 187, 2034, 2003, 226, 227, 228, 229, 230, 2041, 2010, + 2011, 2012, 1766, 364, 364, 1, 364, 1862, 4, 364, + 6, 364, 349, 364, 364, 364, 2010, 2011, 2012, 41, + 1459, 364, 278, 1787, 7, 364, 134, 998, 365, 365, + 26, 27, 28, 29, 1798, 103, 365, 2114, 364, 1921, + 319, 320, 321, 322, 323, 41, 1749, 364, 44, 2056, + 104, 364, 8, 979, 1889, 1890, 8, 103, 2135, 103, + 5, 8, 104, 1766, 103, 103, 1921, 993, 994, 995, + 996, 997, 998, 363, 1000, 1018, 1016, 1329, 2056, 907, + 793, 1017, 2119, 792, 1787, 791, 2093, 1133, 572, 794, + 2101, 1491, 2129, 349, 20, 1798, 562, 998, 1862, 1020, + 1026, 278, 1, 281, 2115, 4, 282, 6, 1, 365, + 429, 4, 2119, 6, 1464, 1771, 2264, 2125, 2127, 1045, + 2189, 2191, 2129, 2190, 2192, 2136, 2137, 26, 27, 28, + 29, 2181, 2306, 26, 27, 28, 29, 2148, 2149, 1724, + 2151, 2152, 2153, 2154, 2155, 287, 1926, 2158, 41, 426, + 899, 44, 889, 1908, 1877, 1879, 962, 1921, 428, 1862, + 1102, 2180, 2251, 1602, 1377, 1379, 1378, 2204, 164, 1396, + 982, 1621, 349, 319, 2056, 79, 80, 81, 82, 83, + 84, 112, 113, 872, 1623, 1124, 1623, 2264, 365, 991, + 878, 216, 1403, 1444, 2205, 1333, 127, 2204, 129, 130, + 131, 2056, 1603, 2214, 1456, 1644, 1458, 1459, 1460, 1461, + 1635, 2093, 411, 1640, 438, 114, 2314, 439, 1921, 440, + 332, 152, 153, 154, 441, 718, 333, 2304, 333, 1292, + 695, 662, 2269, 1192, -1, -1, -1, 2119, 2093, -1, + -1, 2252, 2253, 2254, 2255, -1, 2253, 2129, -1, 2260, + 2261, 2262, 2263, 1692, 2331, -1, 2267, -1, 2252, 2253, + 2254, 2255, 2269, -1, 2119, 2276, 2260, 2261, 2262, 2263, + -1, 164, -1, 2284, 2129, 2253, -1, 112, 113, 2290, + 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, + 2301, 126, 2056, -1, -1, -1, 292, 1239, 1240, 134, + -1, 2295, 2296, 2297, 2315, 993, 994, 995, 996, 997, + 1749, -1, 1000, -1, -1, 150, -1, -1, -1, -1, + 1572, 1292, 2204, 1575, -1, 1577, -1, 1766, 1580, 2093, + 2341, 2342, 2343, 2097, -1, -1, 1, -1, 1026, 4, + -1, 6, 1405, -1, 1407, -1, -1, -1, 1787, 2204, + -1, -1, -1, 2056, 1296, 2119, -1, 1045, -1, 1798, + 45, 26, 27, 28, 29, 2129, 1292, -1, -1, 365, + -1, 2253, 112, 113, -1, 60, 61, -1, -1, 278, + -1, 121, 122, 123, 124, 125, -1, 2269, 1640, -1, + 2093, 1292, 37, -1, -1, -1, 1459, -1, 2253, 292, + 45, -1, 47, -1, 49, 37, 878, 52, 53, 54, + -1, 56, -1, 45, 2269, 47, 2119, -1, -1, -1, + 52, 53, 54, 1862, 56, 110, 2129, 1353, 1354, -1, + 1356, -1, -1, -1, 1405, 120, 1407, -1, -1, -1, + 2204, 126, -1, 278, 279, 280, 281, -1, -1, -1, + 349, -1, -1, -1, 926, -1, -1, -1, -1, 294, + 295, 296, -1, -1, -1, 150, 365, -1, -1, -1, + -1, -1, 365, -1, -1, -1, -1, -1, 45, 1405, + -1, 1407, 1921, -1, -1, -1, -1, 45, 1459, 2253, + -1, -1, -1, 60, 61, -1, -1, -1, -1, -1, + -1, 2204, 60, 61, 1405, 2269, 1407, -1, 1434, 1435, + 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, -1, + -1, 993, 994, 995, 996, 997, -1, -1, 1000, -1, + -1, -1, -1, 1459, 1786, 1787, 1788, 1789, -1, 1602, + -1, 1483, -1, 110, 1486, -1, 1798, -1, -1, -1, + 2253, -1, 110, 120, 1026, 70, -1, -1, 1459, 126, + 1623, 76, 120, -1, -1, -1, 2269, -1, 126, 45, + -1, -1, -1, 1045, 1826, 1827, 1828, -1, 844, -1, + 846, 1644, -1, 150, 60, 61, -1, -1, -1, 104, + 105, 106, 150, -1, -1, -1, 111, 863, -1, 865, + 115, 867, -1, -1, 37, 120, -1, 873, 874, -1, + -1, 126, 45, -1, 47, 130, 49, 2056, -1, 52, + 53, 54, -1, 56, -1, 1567, -1, 60, 61, 1692, + -1, 1602, 277, -1, 110, 150, -1, -1, -1, 905, + -1, -1, 908, -1, 120, 277, 311, 292, -1, -1, + 126, -1, 1623, -1, 2093, -1, -1, -1, -1, -1, + 292, -1, -1, -1, 1606, 310, 1608, 1609, -1, 1611, + 315, -1, 317, 1644, 150, -1, 1602, 110, 310, -1, + 2119, -1, -1, 315, 349, 317, 1749, 120, -1, -1, + 2129, -1, -1, 126, -1, 1621, 45, 1623, 1624, -1, + 365, 1602, 1628, 1766, -1, -1, -1, 973, -1, -1, + -1, 60, 61, -1, -1, -1, 1642, 150, 1644, -1, + -1, 1692, 1623, -1, 1787, -1, 1652, -1, -1, 1655, + -1, -1, 1658, -1, -1, 1798, -1, -1, -1, -1, + -1, -1, -1, 1644, -1, -1, 1434, 1435, 1436, 1437, + 1438, 1439, 1440, 1441, 1442, 1443, 1444, -1, 2010, 2011, + 2012, 110, -1, -1, -1, 2204, 1692, 1693, -1, -1, + -1, 120, 287, -1, -1, 290, 291, 126, 1749, -1, + 1046, 1047, 297, -1, -1, 1711, 1712, -1, 112, 113, + -1, 1692, 116, -1, -1, 1766, -1, -1, -1, 1862, + -1, 150, -1, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 327, 328, 2253, -1, 1787, -1, -1, -1, + -1, -1, 23, 1749, 37, -1, -1, 1798, -1, 42, + 2269, -1, 45, 46, 47, 48, -1, 38, 51, 52, + 1766, 54, 55, 56, 277, 58, -1, -1, 1749, -1, + -1, -1, -1, 177, 369, -1, -1, -1, 1921, 292, + -1, 1787, -1, -1, -1, 1766, -1, -1, -1, -1, + -1, -1, 1798, -1, -1, -1, -1, 310, -1, -1, + -1, -1, 315, -1, 317, 98, 1787, 100, 101, 102, + -1, 1862, -1, -1, -1, -1, 1, 1798, -1, 4, + -1, 6, 103, 1375, 1376, 1377, 1378, 1379, -1, 1381, + 1382, -1, -1, 113, 114, -1, 116, -1, 1390, 1391, + -1, 26, 27, 28, 29, -1, -1, -1, 1870, -1, + -1, -1, 37, -1, -1, 135, 1862, -1, -1, -1, + 1628, -1, 47, 143, 144, -1, 146, 52, -1, 54, + 1921, 56, -1, -1, 1642, -1, 156, 157, 158, -1, + -1, 1862, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, + 1442, 1443, 1444, -1, 175, -1, -1, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + -1, -1, -1, 2056, -1, 1921, -1, -1, -1, -1, + 2252, 2253, 2254, 2255, -1, 1693, -1, -1, 2260, 2261, + 2262, 2263, -1, 1279, -1, -1, -1, 1283, -1, -1, + 1921, -1, -1, 1711, 1712, -1, -1, 1293, 1294, 1295, + 2093, -1, 1298, -1, 1300, -1, -1, -1, -1, -1, + -1, -1, -1, 2295, 2296, 2297, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 2119, 1323, -1, 164, + -1, -1, -1, -1, 277, -1, 2129, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 292, + -1, -1, -1, 2025, -1, 2056, 299, 300, 301, 302, + -1, -1, -1, 2035, 1360, -1, 1362, 310, -1, -1, + 2042, -1, 315, 1369, 317, 318, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1384, -1, + 1386, -1, 2093, -1, -1, -1, -1, -1, 109, 1395, + 2056, 1397, -1, -1, -1, 2077, -1, -1, -1, -1, + -1, 2204, -1, 38, -1, 126, -1, -1, 2119, -1, + -1, -1, -1, -1, -1, 2056, 1628, -1, 2129, -1, + -1, 142, -1, -1, -1, -1, 147, 2093, -1, 150, + 1642, 2097, 277, -1, 155, -1, -1, -1, 159, -1, + -1, 162, 163, -1, -1, -1, 167, 292, -1, 170, + 2253, 172, 2093, 2119, -1, -1, -1, 2139, 2140, 2141, + -1, -1, -1, 2129, -1, 310, 2269, -1, 103, -1, + 315, -1, 317, -1, -1, -1, 197, -1, 2119, -1, + -1, 1693, 203, 2165, -1, -1, -1, -1, 2129, -1, + -1, -1, -1, 2204, -1, -1, -1, -1, -1, 1711, + 1712, -1, 1, -1, 349, 4, -1, 6, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 365, -1, -1, -1, -1, -1, -1, 26, 27, 28, + 29, -1, -1, -1, -1, -1, -1, -1, 2204, -1, + 175, 40, 2253, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, -1, -1, 2269, -1, + -1, -1, -1, 2204, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 1583, 1584, -1, + -1, -1, -1, -1, -1, -1, -1, 2253, -1, -1, + 89, 90, 91, 92, -1, 94, -1, -1, 97, -1, + -1, -1, -1, 2269, 1610, 135, -1, -1, -1, -1, + 1, -1, 2253, -1, 144, 114, -1, -1, -1, 1625, + 11, 12, 13, 14, 15, 16, 17, -1, 2269, 20, + 160, 90, -1, -1, 164, -1, -1, -1, 168, 169, + 2322, 2323, 2324, 173, 174, 175, 176, 177, -1, -1, + -1, -1, -1, 112, 113, 1661, -1, 116, -1, -1, + -1, -1, -1, -1, -1, 164, -1, -1, -1, 2097, + -1, -1, 1678, -1, 1680, 134, -1, -1, -1, -1, + -1, -1, 73, -1, -1, 76, 77, 78, 79, 80, + 81, -1, -1, -1, -1, -1, -1, 88, -1, 90, + 91, 92, 93, 94, 95, 96, 97, -1, 99, 100, + 101, 102, -1, 104, -1, -1, -1, 108, -1, 110, + -1, -1, 113, 114, -1, 116, -1, -1, 119, -1, + -1, -1, 191, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 133, 134, 135, 136, 137, -1, 139, 140, + -1, -1, 143, 144, 145, 146, -1, -1, 149, -1, + 151, -1, -1, -1, 1, -1, -1, 4, -1, 6, + -1, -1, -1, -1, -1, -1, -1, -1, 277, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 26, + 27, 28, 29, 292, -1, 254, -1, -1, 297, -1, + -1, -1, -1, 40, -1, -1, -1, -1, -1, -1, + -1, 310, -1, -1, -1, -1, 315, -1, -1, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, -1, -1, 294, 295, 296, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 1855, + 349, -1, 89, 90, 91, 92, -1, 94, 317, -1, + 97, -1, -1, -1, -1, -1, 365, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 114, -1, -1, + -1, -1, 1888, -1, -1, 2097, -1, -1, -1, 280, + 281, 282, 283, 284, 285, 286, 287, -1, 289, 290, + 291, 292, -1, 1, -1, -1, 4, -1, 6, 1915, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 23, -1, 164, 26, 27, + 28, 29, 30, 31, -1, -1, -1, 35, 36, 37, + -1, -1, -1, -1, -1, -1, 44, -1, -1, -1, + -1, -1, -1, -1, 52, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 62, 63, -1, -1, -1, 67, + -1, -1, 70, -1, -1, -1, -1, -1, -1, -1, + -1, 79, 80, 81, 82, 83, 84, -1, -1, -1, + -1, -1, -1, 109, -1, 111, 94, -1, -1, 115, + 98, -1, 100, -1, 120, 103, 104, 105, 106, -1, + 126, 109, -1, 111, -1, -1, 114, 115, -1, -1, + -1, -1, 120, -1, -1, -1, 142, -1, 126, -1, + -1, 147, -1, -1, 150, -1, -1, -1, -1, 155, + 277, -1, -1, 159, 142, -1, 162, 163, 164, 147, + -1, 167, 150, -1, 170, 292, 172, 155, -1, -1, + 297, 159, -1, -1, 162, 163, 164, -1, -1, 167, + -1, -1, 170, 310, 172, -1, -1, -1, 315, -1, + -1, 197, -1, 199, -1, 2091, -1, 203, -1, -1, + -1, 482, -1, -1, -1, -1, -1, -1, 489, 197, + 198, -1, 200, 201, 202, 203, -1, -1, -1, 500, + -1, 502, 349, 504, -1, 506, -1, -1, -1, -1, + 511, -1, -1, -1, 515, 516, -1, -1, 365, -1, + -1, -1, -1, -1, 525, -1, -1, 528, -1, -1, + 238, 239, 240, 241, -1, -1, -1, 538, -1, 247, + 248, -1, -1, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, -1, -1, 277, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 292, -1, -1, -1, -1, 297, + -1, -1, -1, -1, -1, -1, 304, -1, -1, -1, + -1, -1, 310, -1, -1, -1, -1, 315, -1, -1, + -1, -1, -1, 321, 322, -1, 324, -1, -1, 327, + 328, 329, 330, -1, -1, -1, 334, -1, -1, -1, + 338, 339, 340, -1, -1, -1, 344, 345, -1, -1, + -1, 349, -1, -1, -1, 353, -1, 1, 356, 357, + 4, -1, 6, -1, 362, -1, 364, 365, 366, -1, + -1, 369, -1, -1, -1, -1, -1, -1, -1, 23, + -1, -1, 26, 27, 28, 29, 30, 31, -1, -1, + -1, 35, 36, 37, -1, -1, -1, -1, -1, -1, + 44, -1, -1, -1, -1, -1, -1, -1, 52, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 62, 63, + -1, -1, -1, 67, -1, -1, 70, -1, -1, -1, + -1, -1, -1, -1, -1, 79, 80, 81, 82, 83, + 84, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 94, -1, -1, -1, 98, -1, 100, -1, -1, 103, + 104, 105, 106, -1, -1, 109, -1, 111, -1, -1, + 114, 115, -1, -1, 1, -1, 120, 4, -1, 6, + -1, -1, 126, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 142, 26, + 27, 28, 29, 147, -1, -1, 150, 182, -1, -1, + -1, 155, -1, 40, -1, 159, -1, -1, 162, 163, + 164, -1, -1, 167, -1, -1, 170, -1, 172, -1, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, -1, -1, -1, + -1, -1, -1, 197, 198, -1, 200, 201, 202, 203, + -1, -1, 89, 90, 91, 92, -1, 94, -1, -1, + 97, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 114, -1, -1, + -1, -1, -1, -1, 238, 239, 240, 241, -1, -1, + -1, -1, -1, 247, 248, -1, -1, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, -1, -1, 277, -1, -1, -1, 164, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 292, -1, + -1, -1, -1, 297, -1, -1, -1, -1, -1, -1, + 304, -1, -1, -1, -1, -1, 310, -1, -1, -1, + -1, 315, -1, -1, -1, -1, -1, 321, 322, -1, + 324, -1, -1, 327, 328, 329, 330, -1, -1, -1, + 334, -1, -1, -1, 338, 339, 340, -1, -1, -1, + 344, 345, -1, -1, -1, 349, -1, -1, -1, 353, + -1, 1, 356, 357, 4, -1, 6, -1, 362, -1, + 364, 365, 366, -1, -1, 369, -1, -1, -1, -1, + -1, -1, -1, 23, -1, -1, 26, 27, 28, 29, + 30, 31, -1, -1, -1, 35, 36, 37, -1, -1, + 277, -1, -1, -1, 44, -1, -1, -1, -1, -1, + -1, -1, 52, -1, -1, 292, -1, -1, -1, -1, + 297, -1, 62, 63, -1, -1, -1, 67, -1, -1, + 70, -1, -1, 310, -1, -1, -1, -1, 315, 79, + 80, 81, 82, 83, 84, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 94, -1, -1, -1, 98, -1, + 100, -1, 1103, 103, 104, 105, 106, -1, -1, 109, + -1, 111, 349, -1, 114, 115, -1, -1, 1, -1, + 120, 4, -1, 6, -1, -1, 126, -1, 365, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 142, 26, 27, 28, 29, 147, -1, -1, + 150, -1, -1, -1, -1, 155, -1, 40, -1, 159, + -1, -1, 162, 163, 164, -1, -1, 167, -1, -1, + 170, -1, 172, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 197, 198, -1, + 200, 201, 202, 203, -1, -1, -1, 90, 91, 92, + -1, 94, -1, -1, 97, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 114, -1, -1, -1, -1, -1, -1, 238, 239, + 240, 241, -1, -1, -1, -1, -1, 247, 248, -1, + -1, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, -1, -1, 277, -1, -1, + -1, 164, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 292, -1, -1, -1, -1, 297, -1, -1, + -1, -1, -1, -1, 304, -1, -1, -1, -1, -1, + 310, -1, -1, -1, -1, 315, -1, -1, -1, -1, + -1, 321, 322, -1, 324, -1, -1, 327, 328, 329, + 330, -1, -1, -1, 334, -1, -1, -1, 338, 339, + 340, -1, -1, -1, 344, 345, -1, -1, -1, 349, + -1, -1, -1, 353, -1, 1, 356, 357, 4, -1, + 6, -1, 362, -1, 364, 365, 366, -1, -1, 369, + -1, -1, -1, -1, -1, -1, -1, 23, -1, -1, + 26, 27, 28, 29, 30, 31, -1, -1, -1, 35, + 36, 37, -1, -1, 277, -1, -1, -1, 44, -1, + -1, -1, -1, -1, -1, -1, 52, -1, -1, 292, + -1, -1, -1, -1, 297, -1, 62, 63, -1, -1, + -1, 67, -1, -1, 70, -1, -1, 310, -1, -1, + -1, -1, 315, 79, 80, 81, 82, 83, 84, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 94, -1, + -1, -1, 98, -1, 100, -1, -1, 103, 104, 105, + 106, -1, -1, 109, -1, 111, 349, -1, 114, 115, + -1, -1, 1, -1, 120, 4, -1, 6, -1, -1, + 126, -1, 365, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 142, 26, 27, 28, + 29, 147, -1, -1, 150, -1, -1, -1, -1, 155, + -1, 40, -1, 159, -1, -1, 162, 163, 164, -1, + -1, 167, -1, -1, 170, -1, 172, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 197, 198, -1, 200, 201, 202, 203, -1, -1, + -1, 90, 91, 92, -1, 94, -1, -1, 97, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 114, -1, -1, -1, -1, + -1, -1, 238, 239, 240, 241, -1, -1, -1, -1, + -1, 247, 248, -1, -1, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, -1, + -1, 277, -1, -1, -1, 164, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 292, -1, -1, -1, + -1, 297, -1, -1, -1, -1, -1, -1, 304, -1, + -1, -1, -1, -1, 310, -1, -1, -1, -1, 315, + -1, -1, -1, -1, -1, 321, 322, -1, 324, -1, + -1, 327, 328, 329, 330, -1, -1, -1, 334, -1, + -1, -1, 338, 339, 340, 4, -1, 6, 344, 345, + -1, -1, -1, 349, -1, -1, -1, 353, -1, -1, + 356, 357, -1, -1, 23, -1, 362, -1, 364, 365, + 366, 30, 31, 369, -1, -1, 35, 36, 37, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 52, -1, -1, -1, -1, 277, -1, + -1, -1, -1, 62, 63, -1, -1, 104, 67, -1, + -1, 70, -1, 292, -1, -1, -1, -1, 297, -1, + 79, 80, 81, 82, 83, 84, -1, -1, -1, -1, + -1, 310, -1, -1, 131, -1, 315, 134, -1, 98, + -1, 100, -1, -1, 103, 104, 105, 106, -1, -1, + 109, -1, 111, -1, 151, -1, 115, -1, -1, -1, + -1, 120, -1, -1, -1, -1, -1, 126, -1, -1, + 349, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 142, -1, -1, 365, -1, 147, -1, + -1, 150, -1, -1, 1, -1, 155, 4, -1, 6, + 159, -1, -1, 162, 163, -1, -1, -1, 167, -1, + -1, 170, -1, 172, -1, -1, -1, -1, -1, 26, + 27, 28, 29, -1, -1, -1, -1, -1, -1, -1, + 37, -1, -1, -1, -1, -1, -1, -1, 197, 198, + 47, 200, 201, 202, 203, 52, -1, 54, -1, 56, + -1, -1, -1, -1, -1, -1, -1, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, -1, 238, + 239, 240, 241, -1, -1, -1, -1, -1, 247, 248, + -1, -1, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, -1, -1, 277, -1, + 317, -1, 5, -1, 321, 322, -1, -1, -1, -1, + -1, -1, -1, 292, 331, -1, -1, -1, 297, -1, + 23, -1, -1, -1, -1, 304, -1, -1, 31, -1, + -1, 310, -1, 36, -1, -1, 315, 164, -1, -1, + 357, -1, 321, 322, -1, 324, -1, -1, 327, 328, + 329, 330, -1, -1, -1, 334, -1, -1, -1, 338, + 339, 340, -1, -1, -1, 344, 345, 70, -1, -1, + -1, -1, -1, 76, 353, -1, -1, 356, 357, -1, + -1, -1, 85, 362, 87, 364, 365, 366, -1, -1, + 369, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 103, 104, 105, 106, -1, -1, 109, -1, 111, -1, + -1, -1, 115, -1, -1, -1, -1, 120, -1, -1, + -1, -1, -1, 126, -1, -1, -1, 130, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 142, + -1, -1, -1, -1, 147, -1, -1, 150, -1, -1, + 277, -1, 155, -1, -1, -1, 159, -1, -1, 162, + 163, -1, -1, -1, 167, 292, -1, 170, -1, 172, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 310, -1, -1, -1, -1, 315, -1, + 317, -1, -1, -1, 197, 198, -1, 200, 201, 202, + 203, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5, -1, -1, -1, -1, -1, 112, 113, -1, + -1, 116, 349, -1, -1, -1, -1, -1, -1, 23, + -1, -1, -1, -1, -1, 238, -1, 31, 365, 134, + -1, -1, 36, -1, -1, -1, -1, -1, -1, -1, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, -1, -1, 277, -1, 70, -1, -1, -1, + -1, -1, 76, -1, 287, -1, -1, 290, 291, -1, + -1, -1, -1, -1, 297, -1, -1, -1, -1, -1, + -1, -1, 305, -1, -1, -1, -1, -1, -1, 103, + 104, 105, 106, -1, -1, 109, -1, 111, 321, 322, + -1, 115, -1, -1, 327, 328, 120, -1, -1, -1, + -1, -1, 126, -1, -1, -1, 130, 340, -1, -1, + -1, 344, 345, -1, -1, -1, -1, -1, 142, -1, + -1, 354, 355, 147, 357, -1, 150, -1, -1, 254, + -1, 155, -1, 366, -1, 159, 369, -1, 162, 163, + -1, -1, -1, 167, -1, -1, 170, -1, 172, -1, + -1, -1, -1, 278, 279, 280, 281, 282, 283, -1, + 285, 286, 287, 288, 289, 290, 291, -1, -1, 294, + 295, 296, -1, 197, 198, -1, 200, 201, 202, 203, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 5, -1, 317, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 23, -1, + -1, -1, -1, -1, 238, -1, 31, -1, -1, -1, + -1, 36, -1, -1, -1, -1, -1, -1, -1, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, -1, -1, 277, -1, 70, -1, -1, -1, -1, + -1, 76, -1, 287, -1, -1, 290, 291, -1, -1, + -1, -1, -1, 297, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 103, 104, + 105, 106, -1, -1, 109, -1, 111, 321, 322, -1, + 115, -1, -1, 327, 328, 120, -1, -1, 109, -1, + 111, 126, -1, 114, 115, 130, 340, -1, -1, 120, + 344, 345, -1, -1, -1, 126, -1, 142, -1, -1, + 354, 355, 147, 357, -1, 150, -1, -1, -1, -1, + 155, 142, 366, -1, 159, 369, 147, 162, 163, 150, + -1, -1, 167, -1, 155, 170, -1, 172, 159, -1, + -1, 162, 163, -1, -1, -1, 167, -1, -1, 170, + -1, 172, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 197, 198, -1, 200, 201, 202, 203, -1, + -1, -1, -1, -1, -1, -1, 197, -1, 199, 5, + -1, -1, 203, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 23, -1, -1, + -1, -1, -1, 238, -1, 31, -1, -1, -1, -1, + 36, -1, -1, -1, -1, -1, -1, -1, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + -1, -1, 277, -1, 70, -1, -1, -1, -1, -1, + 76, -1, 287, -1, -1, 290, 291, -1, -1, -1, + -1, -1, 297, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 103, 104, 105, + 106, -1, -1, 109, -1, 111, 321, 322, -1, 115, + -1, -1, 327, 328, 120, -1, -1, 109, -1, 111, + 126, -1, -1, 115, 130, 340, -1, -1, 120, 344, + 345, -1, -1, -1, 126, -1, 142, -1, -1, 354, + 355, 147, 357, -1, 150, -1, -1, -1, -1, 155, + 142, 366, -1, 159, 369, 147, 162, 163, 150, -1, + -1, 167, -1, 155, 170, -1, 172, 159, -1, -1, + 162, 163, -1, -1, -1, 167, -1, -1, 170, -1, + 172, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 197, 198, -1, 200, 201, 202, 203, -1, -1, + -1, -1, -1, -1, -1, 197, -1, -1, 5, -1, + -1, 203, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 23, -1, -1, -1, + -1, -1, 238, -1, 31, -1, -1, -1, -1, 36, + -1, -1, -1, -1, -1, -1, -1, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, -1, + -1, 277, -1, 70, -1, -1, -1, -1, -1, 76, + -1, 287, -1, -1, 290, 291, -1, -1, -1, -1, + -1, 297, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 103, 104, 105, 106, + -1, -1, 109, -1, 111, 321, 322, -1, 115, -1, + -1, 327, 328, 120, -1, -1, -1, -1, -1, 126, + -1, -1, -1, 130, 340, -1, -1, -1, 344, 345, + -1, -1, -1, -1, -1, 142, -1, -1, 354, 355, + 147, 357, -1, 150, -1, -1, -1, -1, 155, -1, + 366, -1, 159, 369, -1, 162, 163, -1, -1, -1, + 167, -1, -1, 170, -1, 172, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 1, -1, -1, 4, -1, 6, -1, -1, + 197, 198, -1, 200, 201, 202, 203, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 26, 27, 28, + 29, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 40, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 238, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, -1, -1, + 277, 90, 91, 92, -1, 94, -1, -1, 97, -1, + 287, -1, -1, 290, 291, -1, -1, -1, -1, -1, + 297, -1, -1, -1, -1, 114, 9, 10, 11, 12, + 13, 14, -1, -1, -1, -1, 19, -1, -1, -1, + 23, -1, -1, -1, 321, 322, -1, -1, -1, -1, + 327, 328, -1, -1, -1, -1, 21, -1, -1, -1, + -1, -1, -1, 340, -1, -1, -1, 344, 345, -1, + -1, -1, -1, -1, -1, 164, -1, 354, 355, -1, + 357, -1, -1, -1, -1, -1, -1, 70, -1, 366, + -1, -1, 369, 76, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 70, -1, -1, -1, -1, + -1, 76, -1, -1, -1, -1, -1, -1, -1, -1, + 103, 104, 105, 106, -1, -1, -1, -1, 111, -1, + -1, -1, 115, -1, -1, -1, -1, 120, 103, 104, + 105, 106, -1, 126, -1, -1, 111, 130, -1, -1, + 115, -1, -1, -1, -1, 120, -1, -1, -1, 142, + 21, 126, -1, -1, 147, 130, -1, 150, -1, -1, + -1, -1, 155, -1, -1, -1, 159, 142, -1, 162, + 163, -1, 147, -1, 167, 150, -1, 170, 277, 172, + 155, -1, -1, -1, 159, -1, -1, 162, 163, -1, + -1, -1, 167, 292, -1, 170, -1, 172, 297, 70, + -1, -1, -1, -1, 197, 76, -1, 200, -1, -1, + 203, 310, -1, -1, -1, -1, 315, -1, -1, -1, + -1, -1, 197, -1, -1, 200, -1, -1, 203, -1, + -1, -1, 103, 104, 105, 106, -1, -1, -1, -1, + 111, -1, -1, -1, 115, -1, -1, -1, -1, 120, + 349, -1, -1, -1, -1, 126, -1, -1, -1, 130, + -1, -1, -1, -1, -1, -1, 365, -1, -1, -1, + -1, 142, -1, -1, -1, -1, 147, -1, -1, 150, + -1, -1, -1, -1, 155, -1, -1, -1, 159, -1, + -1, 162, 163, -1, 287, -1, 167, 290, 291, 170, + -1, 172, -1, -1, 297, -1, -1, -1, -1, -1, + -1, -1, 287, -1, -1, 290, 291, -1, -1, -1, + -1, -1, 297, -1, -1, -1, 197, -1, -1, 200, + -1, -1, 203, -1, 327, 328, -1, 330, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 327, 328, -1, 330, -1, -1, -1, -1, + -1, 354, 355, -1, -1, -1, -1, -1, -1, 22, + 23, 364, -1, 366, -1, -1, 369, -1, -1, 354, + 355, -1, -1, -1, -1, -1, -1, -1, -1, 364, + -1, 366, -1, -1, 369, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 287, 70, -1, 290, + 291, -1, -1, 76, -1, -1, 297, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 103, 104, 105, 106, -1, -1, 327, 328, 111, 330, + -1, -1, 115, -1, -1, -1, -1, 120, -1, -1, + -1, -1, -1, 126, -1, -1, -1, 130, -1, -1, + -1, -1, -1, 354, 355, -1, -1, -1, -1, 142, + -1, -1, -1, -1, 147, 366, -1, 150, 369, -1, + -1, -1, 155, -1, -1, -1, 159, -1, -1, 162, + 163, -1, -1, -1, 167, -1, 23, 170, -1, 172, + -1, -1, -1, 30, 31, -1, -1, -1, 35, 36, + 37, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 197, 52, -1, 200, -1, -1, + 203, -1, -1, -1, -1, 62, 63, -1, -1, -1, + 67, -1, -1, 70, -1, -1, -1, -1, -1, -1, + -1, -1, 79, 80, 81, 82, 83, 84, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 98, -1, 100, -1, -1, 103, 104, 105, 106, + -1, -1, 109, -1, 111, -1, -1, -1, 115, -1, + -1, -1, -1, 120, -1, -1, -1, -1, -1, 126, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 287, 142, -1, 290, 291, -1, + 147, -1, -1, 150, 297, -1, -1, -1, 155, -1, + -1, -1, 159, -1, -1, 162, 163, -1, -1, -1, + 167, -1, -1, 170, -1, 172, -1, -1, -1, -1, + -1, -1, -1, -1, 327, 328, -1, 330, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 197, 198, -1, 200, 201, 202, 203, -1, -1, -1, + -1, 354, 355, -1, -1, -1, -1, -1, -1, -1, + -1, 364, -1, 366, -1, -1, 369, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 238, 239, 240, 241, -1, -1, -1, -1, -1, + 247, 248, -1, -1, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, -1, -1, + 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 23, -1, 292, -1, -1, -1, -1, + 297, 31, -1, -1, -1, -1, 36, 304, -1, -1, + -1, -1, -1, 310, -1, -1, -1, -1, 315, -1, + -1, -1, -1, -1, 321, 322, -1, 324, -1, -1, + 327, 328, 329, 330, -1, -1, -1, 334, -1, -1, + 70, 338, 339, 340, -1, -1, 76, 344, 345, -1, + -1, -1, -1, -1, -1, -1, 353, -1, -1, 356, + 357, -1, -1, -1, -1, 362, -1, 364, -1, 366, + -1, -1, 369, 103, 104, 105, 106, -1, -1, 109, + -1, 111, -1, -1, -1, 115, -1, -1, -1, -1, + 120, -1, -1, -1, -1, -1, 126, -1, -1, -1, + 130, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 142, -1, -1, -1, -1, 147, -1, -1, + 150, -1, -1, -1, -1, 155, -1, -1, -1, 159, + -1, -1, 162, 163, -1, -1, -1, 167, -1, -1, + 170, -1, 172, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 197, 198, -1, + 200, 201, 202, 203, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 23, -1, -1, -1, -1, -1, 238, 30, + 31, -1, -1, -1, -1, 36, -1, -1, -1, -1, + -1, -1, -1, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, -1, -1, 277, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 287, -1, -1, + 290, 291, -1, -1, -1, -1, -1, 297, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 103, 104, 105, 106, -1, -1, 109, -1, + 111, 321, 322, -1, 115, -1, -1, 327, 328, 120, + -1, -1, -1, -1, -1, 126, -1, -1, -1, -1, + 340, -1, -1, -1, 344, 345, -1, -1, -1, -1, + -1, 142, -1, -1, 354, 355, 147, 357, -1, 150, + -1, -1, -1, -1, 155, -1, 366, -1, 159, 369, + -1, 162, 163, -1, -1, -1, 167, -1, -1, 170, + -1, 172, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 197, 198, -1, 200, + 201, 202, 203, -1, -1, -1, -1, -1, -1, -1, + 23, -1, -1, -1, -1, -1, -1, 30, 31, -1, + -1, -1, -1, 36, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 238, 239, 240, + 241, -1, -1, -1, -1, -1, 247, 248, -1, -1, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 87, -1, 277, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 103, 104, 105, 106, -1, -1, 109, -1, 111, -1, + -1, -1, 115, -1, -1, -1, -1, 120, -1, -1, + -1, -1, -1, 126, -1, -1, -1, -1, -1, -1, + 321, 322, -1, -1, -1, -1, -1, -1, -1, 142, + -1, -1, -1, -1, 147, -1, -1, 150, -1, 340, + -1, -1, 155, 344, 345, -1, 159, -1, -1, 162, + 163, -1, -1, -1, 167, 356, 357, 170, -1, 172, + -1, -1, -1, 364, -1, 366, -1, -1, 369, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 197, 198, 23, 200, 201, 202, + 203, -1, -1, 30, 31, -1, -1, -1, -1, 36, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 238, 239, 240, 241, -1, + -1, -1, -1, -1, 247, 248, -1, -1, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, -1, -1, 277, -1, 103, 104, 105, 106, + -1, -1, 109, -1, 111, -1, -1, -1, 115, -1, + -1, -1, -1, 120, -1, -1, -1, -1, -1, 126, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 142, -1, -1, 321, 322, + 147, -1, -1, 150, -1, -1, -1, -1, 155, -1, + -1, -1, 159, -1, -1, 162, 163, 340, -1, -1, + 167, 344, 345, 170, -1, 172, -1, -1, -1, -1, + -1, -1, -1, 356, 357, -1, -1, -1, -1, -1, + -1, -1, -1, 366, -1, -1, 369, -1, -1, -1, + 197, 198, -1, 200, 201, 202, 203, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 23, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 238, 239, 240, 241, -1, -1, -1, -1, -1, + 247, 248, -1, -1, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 70, -1, + 277, -1, -1, -1, 76, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 103, 104, 105, 106, -1, -1, -1, -1, 111, + -1, -1, -1, 115, 321, 322, -1, -1, 120, -1, + -1, -1, -1, -1, 126, -1, -1, -1, 130, -1, + -1, -1, -1, 340, -1, -1, -1, 344, 345, -1, + 142, -1, -1, -1, -1, 147, -1, -1, 150, 356, + 357, -1, -1, 155, -1, -1, -1, 159, -1, 366, + 162, 163, 369, -1, -1, 167, -1, -1, 170, -1, + 172, -1, -1, -1, -1, -1, -1, 0, 1, -1, + -1, 4, -1, 6, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 197, -1, -1, 200, -1, + -1, 203, -1, 26, 27, 28, 29, -1, -1, -1, + -1, -1, -1, -1, 37, -1, -1, -1, -1, -1, + -1, -1, 45, -1, 47, -1, 49, -1, -1, 52, + 53, 54, -1, 56, -1, -1, -1, 60, 61, 62, + -1, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 104, -1, -1, -1, 287, -1, 110, 290, 291, + -1, -1, -1, -1, -1, 297, -1, 120, 70, -1, + -1, -1, -1, 126, 76, -1, -1, 79, 80, 81, + 82, 83, 84, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 327, 328, 150, 330, -1, + -1, 103, 104, 105, 106, -1, -1, -1, -1, 111, + -1, -1, -1, 115, -1, -1, -1, -1, 120, -1, + -1, -1, 354, 355, 126, -1, -1, -1, 130, -1, + -1, -1, 364, -1, 366, -1, -1, 369, -1, -1, + 142, -1, -1, -1, -1, 147, -1, -1, 150, 70, + -1, -1, -1, 155, -1, 76, -1, 159, -1, -1, + 162, 163, -1, -1, -1, 167, -1, -1, 170, -1, + 172, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 103, 104, 105, 106, -1, -1, -1, -1, + 111, -1, -1, -1, 115, 197, -1, -1, 200, 120, + -1, 203, -1, -1, -1, 126, -1, -1, -1, 130, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 142, -1, -1, 277, -1, 147, -1, -1, 150, + -1, -1, -1, -1, 155, -1, -1, -1, 159, 292, + -1, 162, 163, -1, 297, -1, 167, -1, -1, 170, + -1, 172, -1, -1, -1, -1, -1, 310, -1, -1, + -1, -1, 315, -1, 317, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 197, -1, -1, 200, + -1, -1, 203, -1, -1, 287, -1, -1, 290, 291, + -1, -1, -1, -1, -1, 297, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 327, 328, -1, 330, -1, + 104, -1, -1, -1, -1, -1, -1, -1, 70, -1, + -1, -1, -1, -1, 76, -1, -1, -1, -1, -1, + -1, -1, 354, 355, -1, -1, -1, 131, -1, -1, + 134, -1, -1, -1, 366, -1, 287, 369, -1, 290, + 291, 103, 104, 105, 106, -1, 297, 151, -1, 111, + -1, -1, -1, 115, -1, -1, -1, -1, 120, -1, + -1, -1, -1, -1, 126, -1, -1, -1, 130, -1, + -1, -1, -1, -1, -1, -1, 327, 328, -1, 330, + 142, -1, -1, -1, -1, 147, -1, -1, 150, -1, + -1, -1, -1, 155, -1, -1, -1, 159, -1, -1, + 162, 163, -1, 354, 355, 167, -1, -1, 170, -1, + 172, -1, -1, -1, -1, 366, -1, -1, 369, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 197, -1, -1, 200, -1, + -1, 203, -1, -1, -1, -1, -1, -1, -1, -1, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 317, -1, -1, -1, 321, 322, -1, + -1, -1, -1, -1, -1, 287, -1, 331, 290, 291, + -1, -1, -1, -1, -1, 297, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 357, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 327, 328, -1, 330, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 354, 355, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 366, -1, -1, 369 +}; + + /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_int16 yystos[] = +{ + 0, 373, 0, 1, 4, 6, 26, 27, 28, 29, + 37, 45, 47, 49, 52, 53, 54, 56, 60, 61, + 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 110, 120, 126, 150, 277, + 292, 310, 315, 317, 374, 430, 431, 432, 433, 508, + 509, 510, 512, 527, 374, 105, 104, 297, 504, 504, + 504, 510, 521, 510, 512, 527, 510, 515, 515, 515, + 510, 518, 433, 49, 434, 37, 45, 47, 52, 53, + 54, 56, 277, 292, 310, 315, 317, 435, 49, 436, + 37, 45, 47, 49, 52, 53, 54, 56, 277, 292, + 310, 315, 317, 441, 53, 443, 37, 42, 45, 46, + 47, 48, 51, 52, 54, 55, 56, 58, 98, 100, + 101, 102, 277, 292, 299, 300, 301, 302, 310, 315, + 317, 318, 444, 49, 50, 52, 53, 54, 292, 299, + 300, 315, 447, 45, 47, 52, 54, 58, 98, 100, + 448, 47, 449, 23, 30, 31, 36, 103, 104, 105, + 106, 109, 111, 115, 120, 126, 142, 147, 150, 155, + 159, 162, 163, 167, 170, 172, 197, 198, 200, 201, + 202, 203, 238, 239, 240, 241, 247, 248, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 277, 321, 322, 340, 344, 345, 356, 357, + 366, 369, 457, 505, 631, 632, 635, 636, 637, 641, + 704, 707, 709, 713, 718, 719, 721, 723, 733, 734, + 736, 738, 740, 742, 746, 748, 750, 752, 754, 756, + 758, 760, 762, 764, 768, 770, 772, 774, 785, 793, + 795, 797, 798, 800, 802, 804, 806, 808, 810, 812, + 814, 58, 350, 351, 352, 450, 456, 58, 451, 456, + 37, 45, 47, 49, 52, 53, 54, 56, 277, 292, + 310, 315, 317, 442, 104, 452, 453, 377, 396, 397, + 90, 284, 286, 521, 521, 521, 521, 0, 374, 504, + 504, 57, 347, 348, 524, 525, 526, 35, 37, 52, + 62, 63, 67, 70, 79, 80, 81, 82, 83, 84, + 98, 100, 253, 277, 292, 297, 304, 310, 315, 324, + 327, 328, 329, 330, 334, 338, 339, 353, 362, 364, + 531, 532, 533, 535, 536, 537, 538, 539, 540, 541, + 545, 546, 547, 550, 551, 552, 559, 563, 571, 572, + 575, 576, 577, 578, 579, 600, 601, 603, 604, 606, + 607, 610, 611, 612, 622, 623, 624, 625, 626, 629, + 630, 636, 643, 644, 645, 646, 647, 648, 652, 653, + 654, 688, 702, 707, 708, 731, 732, 733, 775, 374, + 363, 363, 374, 504, 583, 458, 461, 531, 504, 466, + 468, 631, 654, 471, 504, 477, 512, 528, 521, 510, + 512, 515, 515, 515, 518, 90, 284, 286, 521, 521, + 521, 521, 527, 440, 510, 521, 522, 437, 508, 510, + 511, 438, 510, 512, 513, 528, 439, 510, 515, 516, + 515, 515, 510, 518, 519, 90, 284, 286, 677, 440, + 440, 440, 440, 515, 521, 446, 509, 530, 510, 530, + 512, 530, 45, 530, 515, 515, 530, 518, 530, 45, + 46, 515, 530, 530, 90, 284, 303, 677, 678, 521, + 45, 530, 45, 530, 45, 530, 45, 530, 521, 521, + 521, 45, 530, 403, 528, 45, 47, 509, 510, 512, + 530, 439, 515, 439, 521, 45, 510, 530, 45, 510, + 530, 521, 415, 510, 512, 515, 515, 530, 45, 515, + 512, 104, 107, 108, 109, 735, 112, 113, 254, 255, + 258, 639, 640, 32, 33, 34, 254, 710, 133, 642, + 168, 169, 796, 112, 113, 114, 737, 114, 116, 117, + 118, 119, 739, 112, 113, 121, 122, 123, 124, 125, + 741, 112, 113, 116, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 177, 743, 114, 116, 135, 143, 144, + 145, 146, 747, 114, 135, 148, 306, 749, 112, 113, + 127, 129, 130, 131, 152, 153, 154, 751, 113, 114, + 116, 135, 143, 144, 146, 156, 157, 158, 753, 128, + 144, 153, 160, 161, 755, 144, 161, 757, 153, 164, + 165, 759, 131, 135, 168, 169, 761, 135, 168, 169, + 171, 763, 135, 144, 160, 164, 168, 169, 173, 174, + 175, 176, 177, 776, 114, 168, 169, 177, 786, 164, + 199, 736, 738, 740, 742, 746, 748, 750, 752, 754, + 756, 758, 760, 762, 764, 765, 766, 767, 769, 785, + 793, 795, 127, 134, 164, 393, 773, 393, 114, 199, + 767, 771, 135, 168, 169, 204, 237, 794, 114, 126, + 128, 146, 150, 153, 242, 275, 276, 357, 720, 722, + 801, 243, 803, 243, 805, 164, 244, 245, 246, 807, + 128, 153, 799, 116, 132, 153, 160, 249, 250, 809, + 128, 153, 811, 114, 128, 135, 153, 160, 813, 104, + 131, 134, 151, 317, 331, 357, 705, 706, 707, 112, + 113, 116, 134, 254, 278, 279, 280, 281, 282, 283, + 285, 286, 287, 288, 289, 290, 291, 294, 295, 296, + 317, 724, 725, 728, 331, 341, 712, 648, 653, 342, + 238, 247, 248, 251, 252, 815, 360, 361, 402, 715, + 647, 504, 421, 456, 351, 401, 456, 389, 440, 437, + 438, 512, 528, 439, 515, 515, 518, 519, 677, 440, + 440, 440, 440, 384, 407, 46, 48, 50, 51, 58, + 59, 92, 454, 521, 521, 521, 381, 672, 687, 674, + 676, 103, 103, 103, 85, 720, 293, 623, 172, 504, + 631, 703, 703, 62, 99, 504, 104, 705, 90, 191, + 284, 724, 725, 293, 316, 293, 311, 293, 313, 314, + 560, 85, 164, 85, 85, 720, 104, 4, 375, 655, + 656, 349, 529, 536, 429, 461, 381, 294, 295, 548, + 549, 382, 427, 164, 305, 306, 307, 308, 309, 553, + 554, 414, 325, 574, 408, 5, 70, 76, 85, 87, + 111, 115, 120, 126, 130, 150, 238, 287, 290, 291, + 297, 305, 327, 328, 354, 355, 366, 586, 587, 588, + 589, 590, 591, 592, 594, 595, 596, 597, 598, 599, + 632, 635, 641, 697, 698, 699, 704, 709, 713, 719, + 720, 721, 723, 729, 730, 733, 422, 428, 38, 39, + 187, 190, 580, 581, 408, 85, 331, 332, 333, 602, + 608, 609, 408, 85, 605, 608, 386, 392, 413, 335, + 336, 337, 613, 614, 618, 619, 23, 631, 633, 634, + 45, 627, 628, 15, 16, 17, 18, 368, 8, 24, + 54, 9, 10, 11, 12, 13, 14, 19, 111, 115, + 120, 126, 142, 147, 150, 155, 159, 162, 163, 167, + 170, 172, 197, 200, 203, 330, 366, 632, 634, 635, + 649, 650, 651, 654, 689, 690, 691, 692, 693, 694, + 695, 696, 698, 699, 700, 701, 52, 52, 22, 364, + 670, 689, 690, 695, 670, 38, 364, 582, 364, 364, + 364, 364, 364, 524, 531, 583, 458, 461, 466, 468, + 471, 477, 521, 521, 521, 381, 672, 687, 674, 676, + 531, 428, 57, 57, 57, 461, 57, 468, 57, 477, + 521, 381, 404, 412, 419, 468, 428, 43, 445, 510, + 515, 530, 521, 45, 381, 510, 510, 510, 510, 404, + 412, 419, 510, 510, 512, 468, 381, 510, 510, 412, + 515, 504, 424, 7, 8, 114, 258, 259, 638, 309, + 420, 104, 127, 293, 424, 423, 388, 423, 398, 111, + 126, 111, 126, 377, 138, 139, 140, 141, 744, 396, + 423, 399, 423, 400, 397, 423, 399, 376, 387, 379, + 425, 426, 23, 38, 103, 175, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 777, + 778, 779, 423, 103, 383, 421, 765, 393, 767, 182, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 787, 792, 417, + 423, 396, 397, 402, 722, 416, 416, 370, 416, 416, + 370, 416, 395, 391, 385, 423, 406, 405, 419, 405, + 419, 112, 113, 126, 134, 150, 278, 279, 280, 726, + 727, 728, 380, 342, 342, 103, 416, 395, 391, 385, + 406, 359, 714, 367, 428, 468, 477, 521, 381, 404, + 412, 419, 455, 456, 685, 685, 685, 294, 364, 671, + 311, 364, 686, 364, 560, 673, 364, 505, 675, 5, + 126, 150, 598, 85, 598, 620, 621, 648, 177, 23, + 23, 97, 364, 52, 52, 52, 103, 313, 52, 728, + 52, 598, 104, 298, 506, 598, 313, 314, 564, 598, + 103, 615, 616, 617, 631, 635, 648, 652, 713, 719, + 618, 598, 598, 85, 505, 21, 654, 659, 660, 661, + 668, 695, 696, 7, 365, 505, 364, 103, 103, 549, + 78, 111, 126, 172, 261, 556, 505, 103, 103, 103, + 505, 555, 554, 142, 155, 172, 326, 598, 415, 384, + 5, 598, 85, 388, 398, 377, 396, 397, 382, 85, + 408, 408, 591, 632, 699, 15, 16, 17, 18, 368, + 20, 22, 8, 54, 5, 608, 85, 87, 243, 305, + 7, 7, 103, 103, 581, 5, 7, 5, 598, 616, + 631, 635, 614, 7, 504, 364, 504, 364, 628, 700, + 700, 691, 692, 693, 647, 364, 542, 633, 690, 396, + 399, 397, 399, 376, 387, 379, 425, 426, 421, 383, + 393, 417, 408, 695, 7, 20, 15, 16, 17, 18, + 368, 7, 20, 22, 8, 689, 690, 695, 598, 598, + 103, 365, 374, 20, 374, 103, 492, 428, 460, 462, + 467, 474, 478, 582, 364, 364, 364, 364, 364, 685, + 685, 685, 671, 686, 673, 675, 103, 103, 103, 364, + 103, 103, 364, 685, 104, 380, 510, 103, 640, 423, + 390, 103, 410, 410, 388, 396, 388, 396, 114, 131, + 136, 137, 243, 396, 745, 378, 97, 783, 191, 781, + 196, 784, 194, 195, 782, 192, 193, 780, 131, 383, + 227, 231, 232, 233, 791, 222, 223, 224, 225, 789, + 226, 227, 228, 229, 230, 790, 790, 231, 234, 234, + 235, 236, 235, 114, 131, 164, 788, 418, 416, 103, + 103, 112, 113, 112, 113, 380, 380, 103, 103, 343, + 711, 103, 161, 358, 716, 720, 364, 685, 364, 364, + 364, 103, 485, 381, 564, 490, 404, 486, 103, 412, + 491, 419, 598, 5, 5, 598, 633, 90, 93, 529, + 662, 663, 38, 175, 180, 190, 778, 779, 505, 505, + 103, 648, 657, 658, 598, 598, 598, 380, 103, 598, + 52, 598, 404, 103, 566, 568, 569, 412, 104, 295, + 561, 22, 413, 85, 335, 43, 598, 375, 5, 375, + 277, 292, 297, 310, 315, 665, 666, 90, 93, 529, + 664, 667, 375, 656, 463, 388, 149, 144, 149, 557, + 558, 104, 114, 573, 635, 114, 573, 421, 114, 573, + 598, 5, 598, 598, 367, 586, 586, 587, 588, 589, + 103, 591, 586, 593, 633, 654, 598, 598, 85, 8, + 85, 632, 699, 729, 729, 598, 609, 598, 608, 619, + 378, 620, 657, 375, 543, 544, 367, 695, 689, 695, + 700, 700, 691, 692, 693, 695, 103, 689, 695, 651, + 695, 20, 20, 103, 39, 374, 365, 374, 430, 529, + 582, 37, 47, 52, 54, 56, 164, 277, 292, 310, + 315, 317, 365, 374, 430, 459, 529, 44, 94, 114, + 164, 365, 374, 430, 494, 500, 501, 529, 531, 40, + 89, 90, 91, 92, 94, 97, 114, 164, 277, 365, + 374, 430, 475, 529, 534, 535, 40, 90, 91, 92, + 114, 164, 365, 374, 430, 475, 529, 534, 41, 44, + 164, 292, 365, 374, 430, 428, 460, 462, 467, 474, + 478, 364, 364, 364, 381, 404, 412, 419, 462, 478, + 380, 380, 7, 420, 423, 396, 779, 423, 417, 371, + 371, 396, 396, 397, 397, 711, 346, 711, 103, 394, + 402, 112, 113, 717, 478, 380, 488, 489, 487, 295, + 365, 374, 430, 529, 671, 566, 568, 365, 374, 430, + 529, 686, 365, 374, 430, 529, 673, 561, 365, 374, + 430, 529, 675, 598, 598, 5, 506, 506, 663, 421, + 378, 378, 364, 536, 662, 405, 405, 380, 380, 380, + 598, 380, 20, 104, 295, 312, 565, 312, 567, 20, + 316, 562, 615, 631, 635, 617, 616, 598, 43, 82, + 83, 669, 696, 702, 191, 294, 381, 316, 311, 560, + 666, 506, 506, 667, 365, 374, 531, 396, 7, 421, + 573, 573, 70, 573, 598, 5, 598, 166, 598, 608, + 608, 5, 365, 534, 536, 659, 7, 365, 689, 689, + 103, 39, 428, 504, 523, 504, 514, 504, 517, 517, + 504, 520, 104, 90, 284, 286, 523, 523, 523, 523, + 374, 363, 79, 80, 502, 503, 631, 423, 99, 374, + 374, 374, 374, 374, 465, 636, 506, 506, 363, 95, + 96, 476, 103, 104, 129, 130, 254, 274, 275, 482, + 483, 493, 86, 87, 88, 90, 469, 470, 374, 374, + 374, 535, 465, 506, 506, 363, 483, 469, 374, 374, + 374, 104, 363, 99, 381, 365, 365, 365, 365, 365, + 488, 489, 487, 365, 365, 103, 7, 409, 103, 394, + 402, 365, 94, 134, 278, 365, 374, 430, 529, 683, + 90, 97, 134, 169, 278, 365, 374, 430, 529, 684, + 114, 278, 365, 374, 430, 529, 680, 103, 381, 565, + 567, 404, 412, 562, 419, 598, 657, 365, 380, 319, + 320, 321, 322, 323, 570, 103, 404, 103, 569, 404, + 570, 103, 412, 413, 413, 598, 375, 103, 313, 103, + 298, 506, 564, 103, 374, 558, 423, 423, 415, 423, + 598, 85, 620, 5, 365, 365, 5, 375, 544, 190, + 584, 103, 484, 461, 466, 471, 477, 523, 523, 523, + 484, 484, 484, 484, 364, 479, 631, 411, 104, 8, + 374, 374, 374, 468, 411, 8, 374, 7, 374, 5, + 374, 374, 468, 5, 374, 151, 495, 479, 374, 365, + 365, 365, 378, 103, 711, 363, 167, 172, 679, 509, + 380, 506, 103, 679, 103, 509, 380, 105, 509, 380, + 536, 294, 104, 561, 380, 103, 295, 382, 382, 566, + 568, 561, 399, 399, 598, 365, 620, 702, 187, 585, + 374, 364, 364, 364, 364, 364, 484, 484, 484, 364, + 364, 364, 364, 104, 105, 480, 481, 631, 374, 41, + 636, 482, 423, 470, 87, 464, 465, 636, 37, 87, + 292, 310, 315, 317, 472, 473, 22, 103, 104, 361, + 496, 497, 498, 631, 374, 374, 380, 380, 380, 7, + 394, 364, 425, 421, 374, 374, 374, 374, 374, 374, + 374, 134, 374, 365, 380, 103, 565, 567, 562, 365, + 375, 584, 492, 462, 467, 474, 478, 364, 364, 364, + 485, 490, 486, 491, 7, 365, 104, 465, 374, 8, + 428, 381, 404, 412, 419, 374, 483, 103, 22, 25, + 103, 104, 681, 682, 679, 381, 404, 404, 412, 585, + 365, 365, 365, 365, 365, 488, 489, 487, 365, 365, + 365, 365, 375, 481, 43, 44, 499, 374, 636, 423, + 374, 103, 103, 5, 7, 365, 374, 374, 374, 374, + 374, 374, 365, 365, 365, 374, 374, 374, 374, 505, + 631, 363, 495, 423, 103, 506, 507, 682, 374, 423, + 428, 380, 380, 380, 381, 404, 412, 419, 479, 411, + 374, 374, 374 +}; + + /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_int16 yyr1[] = +{ + 0, 372, 373, 373, 374, 374, 375, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 430, 430, 430, 430, 431, 431, 431, + 431, 432, 432, 432, 432, 432, 432, 432, 432, 432, + 432, 432, 432, 432, 432, 432, 432, 433, 433, 433, + 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, + 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, + 433, 434, 435, 435, 435, 435, 435, 435, 435, 435, + 435, 435, 435, 435, 435, 435, 435, 435, 435, 436, + 437, 437, 438, 438, 439, 439, 440, 440, 441, 441, + 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, + 441, 441, 441, 441, 442, 442, 442, 442, 442, 442, + 442, 442, 442, 442, 442, 442, 442, 442, 442, 443, + 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, + 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, + 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, + 444, 444, 444, 444, 445, 446, 446, 447, 447, 447, + 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, + 447, 447, 447, 447, 448, 448, 448, 448, 448, 448, + 448, 449, 450, 450, 451, 451, 452, 453, 453, 454, + 454, 454, 454, 454, 454, 454, 454, 455, 455, 456, + 456, 456, 457, 458, 459, 459, 460, 460, 460, 460, + 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, + 460, 460, 461, 462, 462, 462, 462, 462, 462, 462, + 462, 462, 463, 463, 463, 464, 464, 465, 465, 466, + 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, + 467, 467, 467, 468, 468, 469, 469, 470, 470, 470, + 470, 471, 472, 472, 472, 472, 472, 473, 473, 474, + 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, + 474, 474, 474, 475, 475, 476, 476, 477, 478, 478, + 478, 478, 478, 478, 478, 479, 479, 480, 480, 480, + 481, 481, 481, 482, 482, 483, 483, 484, 485, 485, + 485, 485, 485, 486, 486, 486, 486, 486, 487, 487, + 487, 487, 487, 488, 488, 488, 488, 488, 489, 489, + 489, 489, 489, 490, 490, 490, 490, 490, 491, 491, + 491, 491, 491, 492, 492, 492, 492, 492, 493, 493, + 493, 493, 493, 494, 495, 496, 496, 497, 497, 497, + 497, 497, 498, 498, 499, 499, 499, 499, 500, 501, + 502, 502, 503, 503, 504, 504, 505, 505, 505, 506, + 507, 507, 508, 508, 509, 509, 509, 509, 509, 509, + 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 520, 521, 522, 523, 524, 525, 526, 527, 527, 527, + 527, 528, 529, 530, 530, 531, 531, 532, 533, 533, + 534, 534, 535, 535, 535, 535, 535, 536, 536, 536, + 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, + 536, 536, 536, 536, 536, 536, 536, 536, 536, 537, + 538, 538, 539, 540, 540, 541, 542, 542, 543, 543, + 543, 544, 545, 545, 546, 546, 547, 547, 548, 548, + 549, 549, 550, 550, 550, 551, 551, 552, 553, 553, + 554, 554, 554, 554, 554, 554, 555, 556, 556, 556, + 556, 556, 557, 557, 558, 558, 559, 559, 559, 560, + 560, 560, 561, 561, 562, 562, 563, 563, 564, 564, + 564, 565, 565, 566, 567, 567, 568, 568, 569, 569, + 570, 570, 570, 570, 570, 571, 572, 573, 573, 574, + 574, 574, 574, 574, 574, 574, 574, 575, 576, 576, + 577, 577, 577, 577, 577, 577, 578, 578, 579, 579, + 580, 580, 581, 581, 581, 581, 582, 582, 583, 584, + 584, 585, 585, 586, 586, 586, 586, 586, 586, 586, + 586, 586, 586, 586, 586, 586, 587, 587, 587, 588, + 588, 589, 589, 590, 590, 591, 592, 592, 593, 593, + 594, 594, 595, 596, 597, 597, 598, 598, 598, 599, + 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, + 599, 599, 599, 600, 600, 601, 602, 602, 602, 603, + 603, 604, 605, 605, 605, 605, 605, 606, 606, 607, + 607, 608, 608, 609, 609, 609, 610, 610, 610, 610, + 611, 611, 612, 613, 613, 614, 614, 615, 615, 616, + 616, 616, 617, 617, 617, 617, 618, 618, 619, 619, + 620, 620, 621, 622, 622, 622, 623, 623, 623, 624, + 624, 625, 625, 626, 627, 627, 628, 629, 629, 630, + 631, 632, 632, 633, 633, 634, 635, 636, 636, 636, + 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, + 636, 636, 637, 638, 638, 638, 639, 639, 639, 639, + 639, 640, 640, 641, 641, 642, 642, 643, 643, 643, + 644, 644, 645, 645, 646, 646, 647, 648, 648, 649, + 650, 651, 651, 652, 653, 653, 653, 654, 655, 655, + 655, 656, 656, 656, 657, 657, 658, 659, 659, 660, + 660, 661, 661, 662, 662, 663, 663, 663, 664, 664, + 665, 665, 666, 666, 666, 666, 666, 666, 666, 666, + 666, 667, 667, 667, 668, 669, 669, 670, 670, 670, + 670, 671, 672, 673, 674, 675, 676, 677, 677, 677, + 678, 678, 678, 679, 679, 680, 680, 681, 681, 682, + 683, 683, 683, 684, 684, 684, 684, 684, 685, 686, + 686, 687, 688, 688, 688, 688, 688, 688, 688, 688, + 689, 689, 690, 690, 690, 691, 691, 691, 692, 692, + 693, 693, 694, 694, 695, 696, 696, 696, 696, 697, + 697, 698, 699, 699, 699, 699, 699, 699, 699, 699, + 699, 699, 699, 699, 699, 699, 700, 700, 700, 700, + 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, + 700, 700, 700, 700, 701, 701, 701, 701, 701, 701, + 701, 702, 702, 702, 702, 702, 702, 703, 703, 704, + 704, 704, 705, 705, 706, 706, 706, 706, 706, 707, + 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, + 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, + 707, 707, 707, 708, 708, 708, 708, 708, 708, 709, + 709, 710, 710, 710, 711, 711, 712, 712, 713, 714, + 714, 715, 715, 716, 716, 717, 717, 718, 718, 719, + 719, 719, 720, 720, 721, 721, 722, 722, 722, 722, + 723, 723, 723, 724, 724, 725, 725, 725, 725, 725, + 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, + 725, 725, 726, 726, 726, 726, 726, 726, 726, 727, + 727, 727, 727, 728, 728, 728, 728, 729, 729, 730, + 730, 731, 731, 731, 731, 732, 733, 733, 733, 733, + 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, + 733, 733, 733, 733, 733, 733, 733, 733, 734, 735, + 735, 735, 735, 736, 737, 737, 737, 738, 739, 739, + 739, 739, 739, 740, 741, 741, 741, 741, 741, 741, + 741, 741, 741, 742, 742, 742, 743, 743, 743, 743, + 743, 743, 743, 743, 743, 743, 743, 743, 744, 744, + 744, 744, 745, 745, 745, 745, 745, 746, 747, 747, + 747, 747, 747, 747, 747, 748, 749, 749, 749, 749, + 750, 751, 751, 751, 751, 751, 751, 751, 751, 751, + 752, 753, 753, 753, 753, 753, 753, 753, 753, 753, + 753, 754, 755, 755, 755, 755, 755, 756, 757, 757, + 758, 759, 759, 759, 760, 761, 761, 761, 761, 762, + 763, 763, 763, 763, 764, 764, 764, 764, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 766, 766, 766, 767, 767, 768, 768, 769, + 769, 770, 770, 771, 771, 772, 772, 773, 773, 773, + 774, 775, 776, 776, 776, 776, 776, 776, 776, 776, + 776, 776, 777, 777, 777, 777, 777, 777, 778, 778, + 778, 778, 778, 779, 779, 779, 779, 779, 779, 779, + 779, 779, 779, 779, 779, 780, 780, 781, 782, 782, + 783, 784, 785, 785, 786, 786, 786, 787, 787, 787, + 787, 787, 787, 787, 787, 787, 787, 787, 787, 787, + 787, 787, 787, 787, 787, 788, 788, 788, 789, 789, + 789, 789, 790, 790, 790, 790, 790, 791, 791, 791, + 791, 792, 792, 792, 792, 792, 792, 792, 792, 792, + 792, 792, 792, 793, 793, 794, 794, 794, 794, 795, + 796, 796, 797, 797, 797, 797, 797, 797, 797, 797, + 798, 799, 799, 800, 801, 801, 801, 801, 802, 803, + 804, 805, 806, 807, 807, 807, 807, 808, 809, 809, + 809, 809, 809, 809, 810, 811, 811, 812, 813, 813, + 813, 813, 813, 814, 815, 815, 815, 815, 815 +}; + + /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ +static const yytype_int8 yyr2[] = +{ + 0, 2, 0, 2, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3, 5, 5, 3, 2, 1, 1, 2, + 2, 1, 2, 2, 2, 2, 2, 2, 3, 3, + 2, 2, 3, 3, 3, 2, 3, 2, 6, 2, + 6, 3, 2, 6, 6, 3, 6, 3, 5, 7, + 5, 7, 8, 8, 8, 5, 7, 5, 7, 5, + 7, 3, 2, 6, 2, 6, 6, 6, 3, 6, + 3, 5, 5, 8, 8, 8, 5, 5, 5, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, + 6, 2, 2, 2, 3, 2, 2, 6, 3, 3, + 5, 3, 3, 3, 2, 2, 2, 2, 2, 3, + 2, 2, 6, 3, 3, 5, 3, 3, 3, 3, + 2, 2, 2, 2, 2, 3, 2, 2, 3, 3, + 2, 3, 3, 2, 3, 3, 2, 3, 3, 2, + 3, 3, 2, 3, 3, 2, 2, 2, 2, 2, + 2, 4, 5, 2, 2, 1, 2, 2, 2, 3, + 3, 2, 3, 2, 3, 2, 2, 3, 2, 3, + 2, 3, 2, 2, 2, 2, 2, 2, 3, 2, + 2, 3, 2, 1, 2, 1, 3, 0, 1, 0, + 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, + 1, 2, 1, 0, 2, 1, 0, 2, 2, 3, + 8, 8, 8, 8, 9, 9, 10, 10, 10, 9, + 9, 9, 0, 0, 2, 2, 3, 3, 3, 3, + 5, 3, 0, 2, 3, 1, 3, 1, 3, 0, + 0, 2, 2, 5, 4, 4, 4, 4, 3, 4, + 2, 3, 3, 1, 1, 3, 1, 1, 1, 1, + 1, 0, 2, 2, 2, 2, 2, 1, 0, 0, + 2, 2, 4, 4, 8, 6, 7, 7, 4, 3, + 4, 3, 3, 3, 2, 1, 1, 0, 0, 2, + 2, 5, 5, 3, 4, 3, 1, 1, 3, 3, + 1, 1, 1, 1, 1, 1, 3, 0, 0, 2, + 2, 2, 2, 0, 2, 2, 2, 2, 0, 2, + 2, 2, 2, 0, 2, 2, 2, 2, 0, 2, + 2, 2, 2, 0, 2, 2, 2, 2, 0, 2, + 2, 2, 2, 0, 2, 2, 2, 2, 1, 1, + 1, 1, 1, 7, 2, 1, 1, 1, 1, 1, + 3, 3, 1, 2, 2, 2, 3, 0, 2, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 0, 1, 2, 2, 1, 2, 1, 1, + 2, 3, 2, 3, 1, 2, 3, 1, 2, 3, + 1, 2, 3, 1, 2, 2, 2, 1, 2, 2, + 2, 2, 2, 0, 1, 1, 2, 1, 1, 2, + 1, 2, 2, 1, 1, 1, 2, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 2, 1, 1, 2, + 2, 2, 2, 1, 1, 2, 1, 1, 2, 3, + 1, 1, 5, 1, 1, 3, 3, 1, 1, 3, + 3, 5, 4, 5, 1, 2, 1, 3, 1, 2, + 2, 2, 1, 3, 3, 1, 2, 1, 1, 2, + 2, 2, 2, 2, 2, 2, 1, 3, 3, 1, + 2, 1, 3, 1, 1, 1, 6, 6, 4, 1, + 1, 0, 1, 1, 0, 3, 6, 4, 1, 1, + 0, 0, 3, 3, 0, 2, 2, 3, 2, 2, + 1, 1, 1, 1, 1, 2, 1, 1, 1, 0, + 6, 3, 6, 3, 5, 3, 5, 2, 1, 1, + 3, 4, 4, 5, 6, 5, 1, 2, 1, 3, + 1, 2, 2, 2, 1, 1, 6, 8, 0, 0, + 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 3, 1, 3, 3, 1, + 3, 1, 3, 1, 3, 1, 1, 3, 1, 1, + 3, 1, 3, 3, 1, 1, 1, 1, 1, 1, + 2, 3, 3, 4, 5, 2, 3, 2, 6, 4, + 3, 4, 3, 2, 1, 1, 3, 4, 1, 2, + 1, 1, 2, 3, 1, 3, 4, 3, 5, 3, + 6, 1, 3, 1, 1, 1, 2, 4, 6, 6, + 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, + 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, + 1, 2, 1, 4, 5, 6, 1, 1, 1, 7, + 8, 6, 1, 1, 1, 2, 2, 6, 8, 1, + 2, 1, 1, 1, 1, 3, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 3, 4, 1, 1, 2, 1, 1, 1, 1, + 1, 3, 1, 4, 4, 0, 2, 1, 3, 3, + 1, 3, 1, 3, 1, 3, 1, 1, 3, 3, + 3, 1, 1, 3, 1, 1, 1, 3, 1, 3, + 3, 3, 3, 5, 1, 2, 1, 1, 2, 1, + 1, 2, 1, 1, 2, 2, 2, 1, 1, 2, + 1, 2, 2, 6, 6, 6, 4, 5, 6, 4, + 4, 2, 2, 1, 1, 1, 1, 1, 1, 2, + 2, 4, 0, 4, 0, 1, 0, 1, 1, 1, + 1, 1, 1, 2, 2, 6, 3, 1, 3, 3, + 3, 7, 3, 3, 3, 3, 3, 3, 0, 4, + 4, 0, 2, 2, 4, 4, 5, 5, 3, 3, + 3, 3, 1, 1, 1, 1, 3, 3, 1, 3, + 1, 3, 1, 3, 1, 1, 1, 3, 3, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, + 2, 2, 1, 1, 1, 2, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, + 2, 2, 2, 3, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 1, 1, 1, 3, + 1, 3, 1, 1, 1, 1, 1, 1, 2, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 1, 1, 1, 5, 3, 5, 1, 5, 5, 3, + 5, 1, 1, 1, 0, 2, 1, 1, 6, 2, + 0, 1, 1, 1, 1, 1, 1, 5, 6, 8, + 6, 5, 2, 2, 3, 4, 1, 1, 1, 2, + 3, 4, 4, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, + 3, 3, 3, 1, 1, 1, 1, 1, 1, 3, + 3, 5, 5, 5, 6, 3, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 1, 1, 1, 1, 1, 1, 1, 7, 1, + 1, 2, 1, 3, 1, 1, 2, 3, 1, 1, + 1, 1, 2, 3, 1, 1, 1, 1, 1, 3, + 3, 3, 3, 3, 5, 4, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 1, 1, 1, 1, 3, 2, 1, + 1, 1, 1, 1, 1, 3, 2, 1, 1, 1, + 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, + 3, 1, 1, 1, 3, 1, 1, 1, 1, 3, + 1, 1, 1, 1, 2, 3, 3, 9, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, + 1, 2, 2, 1, 1, 3, 3, 1, 1, 1, + 3, 5, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 3, 4, 1, 1, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 3, 5, 1, 1, 1, 1, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 3, 1, 1, 3, 1, 1, 2, 1, 3, 4, + 3, 1, 3, 1, 1, 1, 4, 3, 1, 1, + 1, 1, 1, 1, 3, 1, 1, 3, 1, 1, + 2, 1, 1, 2, 2, 2, 2, 2, 2 +}; + + +enum { YYENOMEM = -2 }; + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ + do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (&yylloc, nft, scanner, state, YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ + while (0) + +/* Backward compatibility with an undocumented macro. + Use YYerror or YYUNDEF. */ +#define YYERRCODE YYUNDEF + +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (N) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ + while (0) +#endif + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) + + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include <stdio.h> /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (0) + + +/* YY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ + +# ifndef YY_LOCATION_PRINT +# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL + +/* Print *YYLOCP on YYO. Private, do not rely on its existence. */ + +YY_ATTRIBUTE_UNUSED +static int +yy_location_print_ (FILE *yyo, YYLTYPE const * const yylocp) +{ + int res = 0; + int end_col = 0 != yylocp->last_column ? yylocp->last_column - 1 : 0; + if (0 <= yylocp->first_line) + { + res += YYFPRINTF (yyo, "%d", yylocp->first_line); + if (0 <= yylocp->first_column) + res += YYFPRINTF (yyo, ".%d", yylocp->first_column); + } + if (0 <= yylocp->last_line) + { + if (yylocp->first_line < yylocp->last_line) + { + res += YYFPRINTF (yyo, "-%d", yylocp->last_line); + if (0 <= end_col) + res += YYFPRINTF (yyo, ".%d", end_col); + } + else if (0 <= end_col && yylocp->first_column < end_col) + res += YYFPRINTF (yyo, "-%d", end_col); + } + return res; + } + +# define YY_LOCATION_PRINT(File, Loc) \ + yy_location_print_ (File, &(Loc)) + +# else +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif +# endif /* !defined YY_LOCATION_PRINT */ + + +# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Kind, Value, Location, nft, scanner, state); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (0) + + +/*-----------------------------------. +| Print this symbol's value on YYO. | +`-----------------------------------*/ + +static void +yy_symbol_value_print (FILE *yyo, + yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, struct nft_ctx *nft, void *scanner, struct parser_state *state) +{ + FILE *yyoutput = yyo; + YY_USE (yyoutput); + YY_USE (yylocationp); + YY_USE (nft); + YY_USE (scanner); + YY_USE (state); + if (!yyvaluep) + return; +# ifdef YYPRINT + if (yykind < YYNTOKENS) + YYPRINT (yyo, yytoknum[yykind], *yyvaluep); +# endif + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + YY_USE (yykind); + YY_IGNORE_MAYBE_UNINITIALIZED_END +} + + +/*---------------------------. +| Print this symbol on YYO. | +`---------------------------*/ + +static void +yy_symbol_print (FILE *yyo, + yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, struct nft_ctx *nft, void *scanner, struct parser_state *state) +{ + YYFPRINTF (yyo, "%s %s (", + yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind)); + + YY_LOCATION_PRINT (yyo, *yylocationp); + YYFPRINTF (yyo, ": "); + yy_symbol_value_print (yyo, yykind, yyvaluep, yylocationp, nft, scanner, state); + YYFPRINTF (yyo, ")"); +} + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +static void +yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) +{ + YYFPRINTF (stderr, "Stack now"); + for (; yybottom <= yytop; yybottom++) + { + int yybot = *yybottom; + YYFPRINTF (stderr, " %d", yybot); + } + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (0) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +static void +yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, YYLTYPE *yylsp, + int yyrule, struct nft_ctx *nft, void *scanner, struct parser_state *state) +{ + int yylno = yyrline[yyrule]; + int yynrhs = yyr2[yyrule]; + int yyi; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", + yyrule - 1, yylno); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + YYFPRINTF (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, + YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]), + &yyvsp[(yyi + 1) - (yynrhs)], + &(yylsp[(yyi + 1) - (yynrhs)]), nft, scanner, state); + YYFPRINTF (stderr, "\n"); + } +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyssp, yyvsp, yylsp, Rule, nft, scanner, state); \ +} while (0) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) ((void) 0) +# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + +/* Context of a parse error. */ +typedef struct +{ + yy_state_t *yyssp; + yysymbol_kind_t yytoken; + YYLTYPE *yylloc; +} yypcontext_t; + +/* Put in YYARG at most YYARGN of the expected tokens given the + current YYCTX, and return the number of tokens stored in YYARG. If + YYARG is null, return the number of expected tokens (guaranteed to + be less than YYNTOKENS). Return YYENOMEM on memory exhaustion. + Return 0 if there are more than YYARGN expected tokens, yet fill + YYARG up to YYARGN. */ +static int +yypcontext_expected_tokens (const yypcontext_t *yyctx, + yysymbol_kind_t yyarg[], int yyargn) +{ + /* Actual size of YYARG. */ + int yycount = 0; + int yyn = yypact[+*yyctx->yyssp]; + if (!yypact_value_is_default (yyn)) + { + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. In other words, skip the first -YYN actions for + this state because they are default actions. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yyx; + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYSYMBOL_YYerror + && !yytable_value_is_error (yytable[yyx + yyn])) + { + if (!yyarg) + ++yycount; + else if (yycount == yyargn) + return 0; + else + yyarg[yycount++] = YY_CAST (yysymbol_kind_t, yyx); + } + } + if (yyarg && yycount == 0 && 0 < yyargn) + yyarg[0] = YYSYMBOL_YYEMPTY; + return yycount; +} + + + + +#ifndef yystrlen +# if defined __GLIBC__ && defined _STRING_H +# define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S))) +# else +/* Return the length of YYSTR. */ +static YYPTRDIFF_T +yystrlen (const char *yystr) +{ + YYPTRDIFF_T yylen; + for (yylen = 0; yystr[yylen]; yylen++) + continue; + return yylen; +} +# endif +#endif + +#ifndef yystpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +static char * +yystpcpy (char *yydest, const char *yysrc) +{ + char *yyd = yydest; + const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +#endif + +#ifndef yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for yyerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). YYSTR is taken from yytname. If YYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static YYPTRDIFF_T +yytnamerr (char *yyres, const char *yystr) +{ + if (*yystr == '"') + { + YYPTRDIFF_T yyn = 0; + char const *yyp = yystr; + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + else + goto append; + + append: + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } + do_not_strip_quotes: ; + } + + if (yyres) + return yystpcpy (yyres, yystr) - yyres; + else + return yystrlen (yystr); +} +#endif + + +static int +yy_syntax_error_arguments (const yypcontext_t *yyctx, + yysymbol_kind_t yyarg[], int yyargn) +{ + /* Actual size of YYARG. */ + int yycount = 0; + /* There are many possibilities here to consider: + - If this state is a consistent state with a default action, then + the only way this function was invoked is if the default action + is an error action. In that case, don't check for expected + tokens because there are none. + - The only way there can be no lookahead present (in yychar) is if + this state is a consistent state with a default action. Thus, + detecting the absence of a lookahead is sufficient to determine + that there is no unexpected or expected token to report. In that + case, just report a simple "syntax error". + - Don't assume there isn't a lookahead just because this state is a + consistent state with a default action. There might have been a + previous inconsistent state, consistent state with a non-default + action, or user semantic action that manipulated yychar. + - Of course, the expected token list depends on states to have + correct lookahead information, and it depends on the parser not + to perform extra reductions after fetching a lookahead from the + scanner and before detecting a syntax error. Thus, state merging + (from LALR or IELR) and default reductions corrupt the expected + token list. However, the list is correct for canonical LR with + one exception: it will still contain any token that will not be + accepted due to an error action in a later state. + */ + if (yyctx->yytoken != YYSYMBOL_YYEMPTY) + { + int yyn; + if (yyarg) + yyarg[yycount] = yyctx->yytoken; + ++yycount; + yyn = yypcontext_expected_tokens (yyctx, + yyarg ? yyarg + 1 : yyarg, yyargn - 1); + if (yyn == YYENOMEM) + return YYENOMEM; + else + yycount += yyn; + } + return yycount; +} + +/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message + about the unexpected token YYTOKEN for the state stack whose top is + YYSSP. + + Return 0 if *YYMSG was successfully written. Return -1 if *YYMSG is + not large enough to hold the message. In that case, also set + *YYMSG_ALLOC to the required number of bytes. Return YYENOMEM if the + required number of bytes is too large to store. */ +static int +yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg, + const yypcontext_t *yyctx) +{ + enum { YYARGS_MAX = 5 }; + /* Internationalized format string. */ + const char *yyformat = YY_NULLPTR; + /* Arguments of yyformat: reported tokens (one for the "unexpected", + one per "expected"). */ + yysymbol_kind_t yyarg[YYARGS_MAX]; + /* Cumulated lengths of YYARG. */ + YYPTRDIFF_T yysize = 0; + + /* Actual size of YYARG. */ + int yycount = yy_syntax_error_arguments (yyctx, yyarg, YYARGS_MAX); + if (yycount == YYENOMEM) + return YYENOMEM; + + switch (yycount) + { +#define YYCASE_(N, S) \ + case N: \ + yyformat = S; \ + break + default: /* Avoid compiler warnings. */ + YYCASE_(0, YY_("syntax error")); + YYCASE_(1, YY_("syntax error, unexpected %s")); + YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); + YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); + YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); + YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); +#undef YYCASE_ + } + + /* Compute error message size. Don't count the "%s"s, but reserve + room for the terminator. */ + yysize = yystrlen (yyformat) - 2 * yycount + 1; + { + int yyi; + for (yyi = 0; yyi < yycount; ++yyi) + { + YYPTRDIFF_T yysize1 + = yysize + yytnamerr (YY_NULLPTR, yytname[yyarg[yyi]]); + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else + return YYENOMEM; + } + } + + if (*yymsg_alloc < yysize) + { + *yymsg_alloc = 2 * yysize; + if (! (yysize <= *yymsg_alloc + && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) + *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; + return -1; + } + + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + { + char *yyp = *yymsg; + int yyi = 0; + while ((*yyp = *yyformat) != '\0') + if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yytname[yyarg[yyi++]]); + yyformat += 2; + } + else + { + ++yyp; + ++yyformat; + } + } + return 0; +} + + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +static void +yydestruct (const char *yymsg, + yysymbol_kind_t yykind, YYSTYPE *yyvaluep, YYLTYPE *yylocationp, struct nft_ctx *nft, void *scanner, struct parser_state *state) +{ + YY_USE (yyvaluep); + YY_USE (yylocationp); + YY_USE (nft); + YY_USE (scanner); + YY_USE (state); + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp); + + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + switch (yykind) + { + case YYSYMBOL_STRING: /* "string" */ +#line 360 "parser_bison.y" + { xfree(((*yyvaluep).string)); } +#line 6179 "parser_bison.c" + break; + + case YYSYMBOL_QUOTED_STRING: /* "quoted string" */ +#line 360 "parser_bison.y" + { xfree(((*yyvaluep).string)); } +#line 6185 "parser_bison.c" + break; + + case YYSYMBOL_ASTERISK_STRING: /* "string with a trailing asterisk" */ +#line 360 "parser_bison.y" + { xfree(((*yyvaluep).string)); } +#line 6191 "parser_bison.c" + break; + + case YYSYMBOL_line: /* line */ +#line 684 "parser_bison.y" + { cmd_free(((*yyvaluep).cmd)); } +#line 6197 "parser_bison.c" + break; + + case YYSYMBOL_base_cmd: /* base_cmd */ +#line 687 "parser_bison.y" + { cmd_free(((*yyvaluep).cmd)); } +#line 6203 "parser_bison.c" + break; + + case YYSYMBOL_add_cmd: /* add_cmd */ +#line 687 "parser_bison.y" + { cmd_free(((*yyvaluep).cmd)); } +#line 6209 "parser_bison.c" + break; + + case YYSYMBOL_replace_cmd: /* replace_cmd */ +#line 687 "parser_bison.y" + { cmd_free(((*yyvaluep).cmd)); } +#line 6215 "parser_bison.c" + break; + + case YYSYMBOL_create_cmd: /* create_cmd */ +#line 687 "parser_bison.y" + { cmd_free(((*yyvaluep).cmd)); } +#line 6221 "parser_bison.c" + break; + + case YYSYMBOL_insert_cmd: /* insert_cmd */ +#line 687 "parser_bison.y" + { cmd_free(((*yyvaluep).cmd)); } +#line 6227 "parser_bison.c" + break; + + case YYSYMBOL_table_or_id_spec: /* table_or_id_spec */ +#line 690 "parser_bison.y" + { handle_free(&((*yyvaluep).handle)); } +#line 6233 "parser_bison.c" + break; + + case YYSYMBOL_chain_or_id_spec: /* chain_or_id_spec */ +#line 692 "parser_bison.y" + { handle_free(&((*yyvaluep).handle)); } +#line 6239 "parser_bison.c" + break; + + case YYSYMBOL_set_or_id_spec: /* set_or_id_spec */ +#line 697 "parser_bison.y" + { handle_free(&((*yyvaluep).handle)); } +#line 6245 "parser_bison.c" + break; + + case YYSYMBOL_obj_or_id_spec: /* obj_or_id_spec */ +#line 699 "parser_bison.y" + { handle_free(&((*yyvaluep).handle)); } +#line 6251 "parser_bison.c" + break; + + case YYSYMBOL_delete_cmd: /* delete_cmd */ +#line 687 "parser_bison.y" + { cmd_free(((*yyvaluep).cmd)); } +#line 6257 "parser_bison.c" + break; + + case YYSYMBOL_destroy_cmd: /* destroy_cmd */ +#line 687 "parser_bison.y" + { cmd_free(((*yyvaluep).cmd)); } +#line 6263 "parser_bison.c" + break; + + case YYSYMBOL_get_cmd: /* get_cmd */ +#line 687 "parser_bison.y" + { cmd_free(((*yyvaluep).cmd)); } +#line 6269 "parser_bison.c" + break; + + case YYSYMBOL_list_cmd: /* list_cmd */ +#line 687 "parser_bison.y" + { cmd_free(((*yyvaluep).cmd)); } +#line 6275 "parser_bison.c" + break; + + case YYSYMBOL_basehook_device_name: /* basehook_device_name */ +#line 711 "parser_bison.y" + { xfree(((*yyvaluep).string)); } +#line 6281 "parser_bison.c" + break; + + case YYSYMBOL_basehook_spec: /* basehook_spec */ +#line 705 "parser_bison.y" + { handle_free(&((*yyvaluep).handle)); } +#line 6287 "parser_bison.c" + break; + + case YYSYMBOL_reset_cmd: /* reset_cmd */ +#line 687 "parser_bison.y" + { cmd_free(((*yyvaluep).cmd)); } +#line 6293 "parser_bison.c" + break; + + case YYSYMBOL_flush_cmd: /* flush_cmd */ +#line 687 "parser_bison.y" + { cmd_free(((*yyvaluep).cmd)); } +#line 6299 "parser_bison.c" + break; + + case YYSYMBOL_rename_cmd: /* rename_cmd */ +#line 687 "parser_bison.y" + { cmd_free(((*yyvaluep).cmd)); } +#line 6305 "parser_bison.c" + break; + + case YYSYMBOL_import_cmd: /* import_cmd */ +#line 687 "parser_bison.y" + { cmd_free(((*yyvaluep).cmd)); } +#line 6311 "parser_bison.c" + break; + + case YYSYMBOL_export_cmd: /* export_cmd */ +#line 687 "parser_bison.y" + { cmd_free(((*yyvaluep).cmd)); } +#line 6317 "parser_bison.c" + break; + + case YYSYMBOL_monitor_cmd: /* monitor_cmd */ +#line 687 "parser_bison.y" + { cmd_free(((*yyvaluep).cmd)); } +#line 6323 "parser_bison.c" + break; + + case YYSYMBOL_monitor_event: /* monitor_event */ +#line 930 "parser_bison.y" + { xfree(((*yyvaluep).string)); } +#line 6329 "parser_bison.c" + break; + + case YYSYMBOL_describe_cmd: /* describe_cmd */ +#line 687 "parser_bison.y" + { cmd_free(((*yyvaluep).cmd)); } +#line 6335 "parser_bison.c" + break; + + case YYSYMBOL_table_block_alloc: /* table_block_alloc */ +#line 717 "parser_bison.y" + { close_scope(state); table_free(((*yyvaluep).table)); } +#line 6341 "parser_bison.c" + break; + + case YYSYMBOL_chain_block_alloc: /* chain_block_alloc */ +#line 719 "parser_bison.y" + { close_scope(state); chain_free(((*yyvaluep).chain)); } +#line 6347 "parser_bison.c" + break; + + case YYSYMBOL_typeof_data_expr: /* typeof_data_expr */ +#line 791 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6353 "parser_bison.c" + break; + + case YYSYMBOL_typeof_expr: /* typeof_expr */ +#line 791 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6359 "parser_bison.c" + break; + + case YYSYMBOL_set_block_alloc: /* set_block_alloc */ +#line 728 "parser_bison.y" + { set_free(((*yyvaluep).set)); } +#line 6365 "parser_bison.c" + break; + + case YYSYMBOL_set_block_expr: /* set_block_expr */ +#line 832 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6371 "parser_bison.c" + break; + + case YYSYMBOL_map_block_alloc: /* map_block_alloc */ +#line 731 "parser_bison.y" + { set_free(((*yyvaluep).set)); } +#line 6377 "parser_bison.c" + break; + + case YYSYMBOL_flowtable_block_alloc: /* flowtable_block_alloc */ +#line 735 "parser_bison.y" + { flowtable_free(((*yyvaluep).flowtable)); } +#line 6383 "parser_bison.c" + break; + + case YYSYMBOL_flowtable_expr: /* flowtable_expr */ +#line 832 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6389 "parser_bison.c" + break; + + case YYSYMBOL_flowtable_list_expr: /* flowtable_list_expr */ +#line 832 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6395 "parser_bison.c" + break; + + case YYSYMBOL_flowtable_expr_member: /* flowtable_expr_member */ +#line 832 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6401 "parser_bison.c" + break; + + case YYSYMBOL_data_type_atom_expr: /* data_type_atom_expr */ +#line 681 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6407 "parser_bison.c" + break; + + case YYSYMBOL_data_type_expr: /* data_type_expr */ +#line 681 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6413 "parser_bison.c" + break; + + case YYSYMBOL_obj_block_alloc: /* obj_block_alloc */ +#line 738 "parser_bison.y" + { obj_free(((*yyvaluep).obj)); } +#line 6419 "parser_bison.c" + break; + + case YYSYMBOL_type_identifier: /* type_identifier */ +#line 676 "parser_bison.y" + { xfree(((*yyvaluep).string)); } +#line 6425 "parser_bison.c" + break; + + case YYSYMBOL_extended_prio_name: /* extended_prio_name */ +#line 711 "parser_bison.y" + { xfree(((*yyvaluep).string)); } +#line 6431 "parser_bison.c" + break; + + case YYSYMBOL_dev_spec: /* dev_spec */ +#line 714 "parser_bison.y" + { xfree(((*yyvaluep).expr)); } +#line 6437 "parser_bison.c" + break; + + case YYSYMBOL_policy_expr: /* policy_expr */ +#line 789 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6443 "parser_bison.c" + break; + + case YYSYMBOL_identifier: /* identifier */ +#line 676 "parser_bison.y" + { xfree(((*yyvaluep).string)); } +#line 6449 "parser_bison.c" + break; + + case YYSYMBOL_string: /* string */ +#line 676 "parser_bison.y" + { xfree(((*yyvaluep).string)); } +#line 6455 "parser_bison.c" + break; + + case YYSYMBOL_table_spec: /* table_spec */ +#line 690 "parser_bison.y" + { handle_free(&((*yyvaluep).handle)); } +#line 6461 "parser_bison.c" + break; + + case YYSYMBOL_tableid_spec: /* tableid_spec */ +#line 690 "parser_bison.y" + { handle_free(&((*yyvaluep).handle)); } +#line 6467 "parser_bison.c" + break; + + case YYSYMBOL_chain_spec: /* chain_spec */ +#line 692 "parser_bison.y" + { handle_free(&((*yyvaluep).handle)); } +#line 6473 "parser_bison.c" + break; + + case YYSYMBOL_chainid_spec: /* chainid_spec */ +#line 692 "parser_bison.y" + { handle_free(&((*yyvaluep).handle)); } +#line 6479 "parser_bison.c" + break; + + case YYSYMBOL_chain_identifier: /* chain_identifier */ +#line 695 "parser_bison.y" + { handle_free(&((*yyvaluep).handle)); } +#line 6485 "parser_bison.c" + break; + + case YYSYMBOL_set_spec: /* set_spec */ +#line 697 "parser_bison.y" + { handle_free(&((*yyvaluep).handle)); } +#line 6491 "parser_bison.c" + break; + + case YYSYMBOL_setid_spec: /* setid_spec */ +#line 697 "parser_bison.y" + { handle_free(&((*yyvaluep).handle)); } +#line 6497 "parser_bison.c" + break; + + case YYSYMBOL_set_identifier: /* set_identifier */ +#line 702 "parser_bison.y" + { handle_free(&((*yyvaluep).handle)); } +#line 6503 "parser_bison.c" + break; + + case YYSYMBOL_flowtable_spec: /* flowtable_spec */ +#line 695 "parser_bison.y" + { handle_free(&((*yyvaluep).handle)); } +#line 6509 "parser_bison.c" + break; + + case YYSYMBOL_flowtableid_spec: /* flowtableid_spec */ +#line 702 "parser_bison.y" + { handle_free(&((*yyvaluep).handle)); } +#line 6515 "parser_bison.c" + break; + + case YYSYMBOL_obj_spec: /* obj_spec */ +#line 699 "parser_bison.y" + { handle_free(&((*yyvaluep).handle)); } +#line 6521 "parser_bison.c" + break; + + case YYSYMBOL_objid_spec: /* objid_spec */ +#line 699 "parser_bison.y" + { handle_free(&((*yyvaluep).handle)); } +#line 6527 "parser_bison.c" + break; + + case YYSYMBOL_obj_identifier: /* obj_identifier */ +#line 702 "parser_bison.y" + { handle_free(&((*yyvaluep).handle)); } +#line 6533 "parser_bison.c" + break; + + case YYSYMBOL_handle_spec: /* handle_spec */ +#line 695 "parser_bison.y" + { handle_free(&((*yyvaluep).handle)); } +#line 6539 "parser_bison.c" + break; + + case YYSYMBOL_position_spec: /* position_spec */ +#line 695 "parser_bison.y" + { handle_free(&((*yyvaluep).handle)); } +#line 6545 "parser_bison.c" + break; + + case YYSYMBOL_index_spec: /* index_spec */ +#line 695 "parser_bison.y" + { handle_free(&((*yyvaluep).handle)); } +#line 6551 "parser_bison.c" + break; + + case YYSYMBOL_rule_position: /* rule_position */ +#line 695 "parser_bison.y" + { handle_free(&((*yyvaluep).handle)); } +#line 6557 "parser_bison.c" + break; + + case YYSYMBOL_ruleid_spec: /* ruleid_spec */ +#line 695 "parser_bison.y" + { handle_free(&((*yyvaluep).handle)); } +#line 6563 "parser_bison.c" + break; + + case YYSYMBOL_comment_spec: /* comment_spec */ +#line 676 "parser_bison.y" + { xfree(((*yyvaluep).string)); } +#line 6569 "parser_bison.c" + break; + + case YYSYMBOL_ruleset_spec: /* ruleset_spec */ +#line 695 "parser_bison.y" + { handle_free(&((*yyvaluep).handle)); } +#line 6575 "parser_bison.c" + break; + + case YYSYMBOL_rule: /* rule */ +#line 721 "parser_bison.y" + { rule_free(((*yyvaluep).rule)); } +#line 6581 "parser_bison.c" + break; + + case YYSYMBOL_stmt_list: /* stmt_list */ +#line 741 "parser_bison.y" + { stmt_list_free(((*yyvaluep).list)); xfree(((*yyvaluep).list)); } +#line 6587 "parser_bison.c" + break; + + case YYSYMBOL_stateful_stmt_list: /* stateful_stmt_list */ +#line 741 "parser_bison.y" + { stmt_list_free(((*yyvaluep).list)); xfree(((*yyvaluep).list)); } +#line 6593 "parser_bison.c" + break; + + case YYSYMBOL_stateful_stmt: /* stateful_stmt */ +#line 745 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6599 "parser_bison.c" + break; + + case YYSYMBOL_stmt: /* stmt */ +#line 743 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6605 "parser_bison.c" + break; + + case YYSYMBOL_xt_stmt: /* xt_stmt */ +#line 954 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6611 "parser_bison.c" + break; + + case YYSYMBOL_chain_stmt: /* chain_stmt */ +#line 768 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6617 "parser_bison.c" + break; + + case YYSYMBOL_verdict_stmt: /* verdict_stmt */ +#line 743 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6623 "parser_bison.c" + break; + + case YYSYMBOL_verdict_map_stmt: /* verdict_map_stmt */ +#line 826 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6629 "parser_bison.c" + break; + + case YYSYMBOL_verdict_map_expr: /* verdict_map_expr */ +#line 829 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6635 "parser_bison.c" + break; + + case YYSYMBOL_verdict_map_list_expr: /* verdict_map_list_expr */ +#line 829 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6641 "parser_bison.c" + break; + + case YYSYMBOL_verdict_map_list_member_expr: /* verdict_map_list_member_expr */ +#line 829 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6647 "parser_bison.c" + break; + + case YYSYMBOL_connlimit_stmt: /* connlimit_stmt */ +#line 756 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6653 "parser_bison.c" + break; + + case YYSYMBOL_counter_stmt: /* counter_stmt */ +#line 745 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6659 "parser_bison.c" + break; + + case YYSYMBOL_counter_stmt_alloc: /* counter_stmt_alloc */ +#line 745 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6665 "parser_bison.c" + break; + + case YYSYMBOL_last_stmt: /* last_stmt */ +#line 745 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6671 "parser_bison.c" + break; + + case YYSYMBOL_log_stmt: /* log_stmt */ +#line 753 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6677 "parser_bison.c" + break; + + case YYSYMBOL_log_stmt_alloc: /* log_stmt_alloc */ +#line 753 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6683 "parser_bison.c" + break; + + case YYSYMBOL_limit_stmt: /* limit_stmt */ +#line 756 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6689 "parser_bison.c" + break; + + case YYSYMBOL_quota_unit: /* quota_unit */ +#line 711 "parser_bison.y" + { xfree(((*yyvaluep).string)); } +#line 6695 "parser_bison.c" + break; + + case YYSYMBOL_quota_stmt: /* quota_stmt */ +#line 756 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6701 "parser_bison.c" + break; + + case YYSYMBOL_reject_stmt: /* reject_stmt */ +#line 759 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6707 "parser_bison.c" + break; + + case YYSYMBOL_reject_stmt_alloc: /* reject_stmt_alloc */ +#line 759 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6713 "parser_bison.c" + break; + + case YYSYMBOL_reject_with_expr: /* reject_with_expr */ +#line 774 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6719 "parser_bison.c" + break; + + case YYSYMBOL_nat_stmt: /* nat_stmt */ +#line 761 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6725 "parser_bison.c" + break; + + case YYSYMBOL_nat_stmt_alloc: /* nat_stmt_alloc */ +#line 761 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6731 "parser_bison.c" + break; + + case YYSYMBOL_tproxy_stmt: /* tproxy_stmt */ +#line 764 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6737 "parser_bison.c" + break; + + case YYSYMBOL_synproxy_stmt: /* synproxy_stmt */ +#line 766 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6743 "parser_bison.c" + break; + + case YYSYMBOL_synproxy_stmt_alloc: /* synproxy_stmt_alloc */ +#line 766 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6749 "parser_bison.c" + break; + + case YYSYMBOL_synproxy_obj: /* synproxy_obj */ +#line 852 "parser_bison.y" + { obj_free(((*yyvaluep).obj)); } +#line 6755 "parser_bison.c" + break; + + case YYSYMBOL_primary_stmt_expr: /* primary_stmt_expr */ +#line 813 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6761 "parser_bison.c" + break; + + case YYSYMBOL_shift_stmt_expr: /* shift_stmt_expr */ +#line 815 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6767 "parser_bison.c" + break; + + case YYSYMBOL_and_stmt_expr: /* and_stmt_expr */ +#line 817 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6773 "parser_bison.c" + break; + + case YYSYMBOL_exclusive_or_stmt_expr: /* exclusive_or_stmt_expr */ +#line 817 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6779 "parser_bison.c" + break; + + case YYSYMBOL_inclusive_or_stmt_expr: /* inclusive_or_stmt_expr */ +#line 817 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6785 "parser_bison.c" + break; + + case YYSYMBOL_basic_stmt_expr: /* basic_stmt_expr */ +#line 813 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6791 "parser_bison.c" + break; + + case YYSYMBOL_concat_stmt_expr: /* concat_stmt_expr */ +#line 805 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6797 "parser_bison.c" + break; + + case YYSYMBOL_map_stmt_expr_set: /* map_stmt_expr_set */ +#line 805 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6803 "parser_bison.c" + break; + + case YYSYMBOL_map_stmt_expr: /* map_stmt_expr */ +#line 805 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6809 "parser_bison.c" + break; + + case YYSYMBOL_prefix_stmt_expr: /* prefix_stmt_expr */ +#line 810 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6815 "parser_bison.c" + break; + + case YYSYMBOL_range_stmt_expr: /* range_stmt_expr */ +#line 810 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6821 "parser_bison.c" + break; + + case YYSYMBOL_multiton_stmt_expr: /* multiton_stmt_expr */ +#line 808 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6827 "parser_bison.c" + break; + + case YYSYMBOL_stmt_expr: /* stmt_expr */ +#line 805 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6833 "parser_bison.c" + break; + + case YYSYMBOL_masq_stmt: /* masq_stmt */ +#line 761 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6839 "parser_bison.c" + break; + + case YYSYMBOL_masq_stmt_alloc: /* masq_stmt_alloc */ +#line 761 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6845 "parser_bison.c" + break; + + case YYSYMBOL_redir_stmt: /* redir_stmt */ +#line 761 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6851 "parser_bison.c" + break; + + case YYSYMBOL_redir_stmt_alloc: /* redir_stmt_alloc */ +#line 761 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6857 "parser_bison.c" + break; + + case YYSYMBOL_dup_stmt: /* dup_stmt */ +#line 777 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6863 "parser_bison.c" + break; + + case YYSYMBOL_fwd_stmt: /* fwd_stmt */ +#line 779 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6869 "parser_bison.c" + break; + + case YYSYMBOL_queue_stmt: /* queue_stmt */ +#line 772 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6875 "parser_bison.c" + break; + + case YYSYMBOL_queue_stmt_compat: /* queue_stmt_compat */ +#line 772 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6881 "parser_bison.c" + break; + + case YYSYMBOL_queue_stmt_alloc: /* queue_stmt_alloc */ +#line 772 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6887 "parser_bison.c" + break; + + case YYSYMBOL_queue_expr: /* queue_expr */ +#line 774 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6893 "parser_bison.c" + break; + + case YYSYMBOL_queue_stmt_expr_simple: /* queue_stmt_expr_simple */ +#line 774 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6899 "parser_bison.c" + break; + + case YYSYMBOL_queue_stmt_expr: /* queue_stmt_expr */ +#line 774 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6905 "parser_bison.c" + break; + + case YYSYMBOL_set_elem_expr_stmt: /* set_elem_expr_stmt */ +#line 836 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6911 "parser_bison.c" + break; + + case YYSYMBOL_set_elem_expr_stmt_alloc: /* set_elem_expr_stmt_alloc */ +#line 836 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6917 "parser_bison.c" + break; + + case YYSYMBOL_set_stmt: /* set_stmt */ +#line 781 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6923 "parser_bison.c" + break; + + case YYSYMBOL_map_stmt: /* map_stmt */ +#line 784 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6929 "parser_bison.c" + break; + + case YYSYMBOL_meter_stmt: /* meter_stmt */ +#line 786 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6935 "parser_bison.c" + break; + + case YYSYMBOL_flow_stmt_legacy_alloc: /* flow_stmt_legacy_alloc */ +#line 786 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6941 "parser_bison.c" + break; + + case YYSYMBOL_meter_stmt_alloc: /* meter_stmt_alloc */ +#line 786 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6947 "parser_bison.c" + break; + + case YYSYMBOL_match_stmt: /* match_stmt */ +#line 743 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 6953 "parser_bison.c" + break; + + case YYSYMBOL_variable_expr: /* variable_expr */ +#line 789 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6959 "parser_bison.c" + break; + + case YYSYMBOL_symbol_expr: /* symbol_expr */ +#line 789 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6965 "parser_bison.c" + break; + + case YYSYMBOL_set_ref_expr: /* set_ref_expr */ +#line 797 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6971 "parser_bison.c" + break; + + case YYSYMBOL_set_ref_symbol_expr: /* set_ref_symbol_expr */ +#line 797 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6977 "parser_bison.c" + break; + + case YYSYMBOL_integer_expr: /* integer_expr */ +#line 789 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6983 "parser_bison.c" + break; + + case YYSYMBOL_primary_expr: /* primary_expr */ +#line 791 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6989 "parser_bison.c" + break; + + case YYSYMBOL_fib_expr: /* fib_expr */ +#line 921 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 6995 "parser_bison.c" + break; + + case YYSYMBOL_osf_expr: /* osf_expr */ +#line 926 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7001 "parser_bison.c" + break; + + case YYSYMBOL_shift_expr: /* shift_expr */ +#line 791 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7007 "parser_bison.c" + break; + + case YYSYMBOL_and_expr: /* and_expr */ +#line 791 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7013 "parser_bison.c" + break; + + case YYSYMBOL_exclusive_or_expr: /* exclusive_or_expr */ +#line 793 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7019 "parser_bison.c" + break; + + case YYSYMBOL_inclusive_or_expr: /* inclusive_or_expr */ +#line 793 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7025 "parser_bison.c" + break; + + case YYSYMBOL_basic_expr: /* basic_expr */ +#line 795 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7031 "parser_bison.c" + break; + + case YYSYMBOL_concat_expr: /* concat_expr */ +#line 820 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7037 "parser_bison.c" + break; + + case YYSYMBOL_prefix_rhs_expr: /* prefix_rhs_expr */ +#line 802 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7043 "parser_bison.c" + break; + + case YYSYMBOL_range_rhs_expr: /* range_rhs_expr */ +#line 802 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7049 "parser_bison.c" + break; + + case YYSYMBOL_multiton_rhs_expr: /* multiton_rhs_expr */ +#line 800 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7055 "parser_bison.c" + break; + + case YYSYMBOL_map_expr: /* map_expr */ +#line 823 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7061 "parser_bison.c" + break; + + case YYSYMBOL_expr: /* expr */ +#line 842 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7067 "parser_bison.c" + break; + + case YYSYMBOL_set_expr: /* set_expr */ +#line 832 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7073 "parser_bison.c" + break; + + case YYSYMBOL_set_list_expr: /* set_list_expr */ +#line 832 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7079 "parser_bison.c" + break; + + case YYSYMBOL_set_list_member_expr: /* set_list_member_expr */ +#line 832 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7085 "parser_bison.c" + break; + + case YYSYMBOL_meter_key_expr: /* meter_key_expr */ +#line 839 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7091 "parser_bison.c" + break; + + case YYSYMBOL_meter_key_expr_alloc: /* meter_key_expr_alloc */ +#line 839 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7097 "parser_bison.c" + break; + + case YYSYMBOL_set_elem_expr: /* set_elem_expr */ +#line 834 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7103 "parser_bison.c" + break; + + case YYSYMBOL_set_elem_key_expr: /* set_elem_key_expr */ +#line 974 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7109 "parser_bison.c" + break; + + case YYSYMBOL_set_elem_expr_alloc: /* set_elem_expr_alloc */ +#line 834 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7115 "parser_bison.c" + break; + + case YYSYMBOL_set_elem_stmt_list: /* set_elem_stmt_list */ +#line 741 "parser_bison.y" + { stmt_list_free(((*yyvaluep).list)); xfree(((*yyvaluep).list)); } +#line 7121 "parser_bison.c" + break; + + case YYSYMBOL_set_elem_stmt: /* set_elem_stmt */ +#line 743 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 7127 "parser_bison.c" + break; + + case YYSYMBOL_set_lhs_expr: /* set_lhs_expr */ +#line 834 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7133 "parser_bison.c" + break; + + case YYSYMBOL_set_rhs_expr: /* set_rhs_expr */ +#line 834 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7139 "parser_bison.c" + break; + + case YYSYMBOL_initializer_expr: /* initializer_expr */ +#line 842 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7145 "parser_bison.c" + break; + + case YYSYMBOL_counter_obj: /* counter_obj */ +#line 852 "parser_bison.y" + { obj_free(((*yyvaluep).obj)); } +#line 7151 "parser_bison.c" + break; + + case YYSYMBOL_quota_obj: /* quota_obj */ +#line 852 "parser_bison.y" + { obj_free(((*yyvaluep).obj)); } +#line 7157 "parser_bison.c" + break; + + case YYSYMBOL_secmark_obj: /* secmark_obj */ +#line 852 "parser_bison.y" + { obj_free(((*yyvaluep).obj)); } +#line 7163 "parser_bison.c" + break; + + case YYSYMBOL_timeout_states: /* timeout_states */ +#line 967 "parser_bison.y" + { xfree(((*yyvaluep).list)); } +#line 7169 "parser_bison.c" + break; + + case YYSYMBOL_timeout_state: /* timeout_state */ +#line 967 "parser_bison.y" + { xfree(((*yyvaluep).list)); } +#line 7175 "parser_bison.c" + break; + + case YYSYMBOL_ct_obj_alloc: /* ct_obj_alloc */ +#line 852 "parser_bison.y" + { obj_free(((*yyvaluep).obj)); } +#line 7181 "parser_bison.c" + break; + + case YYSYMBOL_limit_obj: /* limit_obj */ +#line 852 "parser_bison.y" + { obj_free(((*yyvaluep).obj)); } +#line 7187 "parser_bison.c" + break; + + case YYSYMBOL_relational_expr: /* relational_expr */ +#line 855 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7193 "parser_bison.c" + break; + + case YYSYMBOL_list_rhs_expr: /* list_rhs_expr */ +#line 847 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7199 "parser_bison.c" + break; + + case YYSYMBOL_rhs_expr: /* rhs_expr */ +#line 845 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7205 "parser_bison.c" + break; + + case YYSYMBOL_shift_rhs_expr: /* shift_rhs_expr */ +#line 847 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7211 "parser_bison.c" + break; + + case YYSYMBOL_and_rhs_expr: /* and_rhs_expr */ +#line 849 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7217 "parser_bison.c" + break; + + case YYSYMBOL_exclusive_or_rhs_expr: /* exclusive_or_rhs_expr */ +#line 849 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7223 "parser_bison.c" + break; + + case YYSYMBOL_inclusive_or_rhs_expr: /* inclusive_or_rhs_expr */ +#line 849 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7229 "parser_bison.c" + break; + + case YYSYMBOL_basic_rhs_expr: /* basic_rhs_expr */ +#line 845 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7235 "parser_bison.c" + break; + + case YYSYMBOL_concat_rhs_expr: /* concat_rhs_expr */ +#line 845 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7241 "parser_bison.c" + break; + + case YYSYMBOL_boolean_expr: /* boolean_expr */ +#line 957 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7247 "parser_bison.c" + break; + + case YYSYMBOL_keyword_expr: /* keyword_expr */ +#line 842 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7253 "parser_bison.c" + break; + + case YYSYMBOL_primary_rhs_expr: /* primary_rhs_expr */ +#line 847 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7259 "parser_bison.c" + break; + + case YYSYMBOL_verdict_expr: /* verdict_expr */ +#line 789 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7265 "parser_bison.c" + break; + + case YYSYMBOL_chain_expr: /* chain_expr */ +#line 789 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7271 "parser_bison.c" + break; + + case YYSYMBOL_meta_expr: /* meta_expr */ +#line 903 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7277 "parser_bison.c" + break; + + case YYSYMBOL_meta_stmt: /* meta_stmt */ +#line 751 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 7283 "parser_bison.c" + break; + + case YYSYMBOL_socket_expr: /* socket_expr */ +#line 907 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7289 "parser_bison.c" + break; + + case YYSYMBOL_numgen_expr: /* numgen_expr */ +#line 868 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7295 "parser_bison.c" + break; + + case YYSYMBOL_xfrm_expr: /* xfrm_expr */ +#line 971 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7301 "parser_bison.c" + break; + + case YYSYMBOL_hash_expr: /* hash_expr */ +#line 868 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7307 "parser_bison.c" + break; + + case YYSYMBOL_rt_expr: /* rt_expr */ +#line 913 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7313 "parser_bison.c" + break; + + case YYSYMBOL_ct_expr: /* ct_expr */ +#line 917 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7319 "parser_bison.c" + break; + + case YYSYMBOL_symbol_stmt_expr: /* symbol_stmt_expr */ +#line 847 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7325 "parser_bison.c" + break; + + case YYSYMBOL_list_stmt_expr: /* list_stmt_expr */ +#line 815 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7331 "parser_bison.c" + break; + + case YYSYMBOL_ct_stmt: /* ct_stmt */ +#line 749 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 7337 "parser_bison.c" + break; + + case YYSYMBOL_payload_stmt: /* payload_stmt */ +#line 747 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 7343 "parser_bison.c" + break; + + case YYSYMBOL_payload_expr: /* payload_expr */ +#line 859 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7349 "parser_bison.c" + break; + + case YYSYMBOL_payload_raw_expr: /* payload_raw_expr */ +#line 859 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7355 "parser_bison.c" + break; + + case YYSYMBOL_eth_hdr_expr: /* eth_hdr_expr */ +#line 862 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7361 "parser_bison.c" + break; + + case YYSYMBOL_vlan_hdr_expr: /* vlan_hdr_expr */ +#line 862 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7367 "parser_bison.c" + break; + + case YYSYMBOL_arp_hdr_expr: /* arp_hdr_expr */ +#line 865 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7373 "parser_bison.c" + break; + + case YYSYMBOL_ip_hdr_expr: /* ip_hdr_expr */ +#line 868 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7379 "parser_bison.c" + break; + + case YYSYMBOL_icmp_hdr_expr: /* icmp_hdr_expr */ +#line 868 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7385 "parser_bison.c" + break; + + case YYSYMBOL_igmp_hdr_expr: /* igmp_hdr_expr */ +#line 868 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7391 "parser_bison.c" + break; + + case YYSYMBOL_ip6_hdr_expr: /* ip6_hdr_expr */ +#line 872 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7397 "parser_bison.c" + break; + + case YYSYMBOL_icmp6_hdr_expr: /* icmp6_hdr_expr */ +#line 872 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7403 "parser_bison.c" + break; + + case YYSYMBOL_auth_hdr_expr: /* auth_hdr_expr */ +#line 875 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7409 "parser_bison.c" + break; + + case YYSYMBOL_esp_hdr_expr: /* esp_hdr_expr */ +#line 875 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7415 "parser_bison.c" + break; + + case YYSYMBOL_comp_hdr_expr: /* comp_hdr_expr */ +#line 875 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7421 "parser_bison.c" + break; + + case YYSYMBOL_udp_hdr_expr: /* udp_hdr_expr */ +#line 878 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7427 "parser_bison.c" + break; + + case YYSYMBOL_udplite_hdr_expr: /* udplite_hdr_expr */ +#line 878 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7433 "parser_bison.c" + break; + + case YYSYMBOL_tcp_hdr_expr: /* tcp_hdr_expr */ +#line 936 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7439 "parser_bison.c" + break; + + case YYSYMBOL_inner_inet_expr: /* inner_inet_expr */ +#line 944 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7445 "parser_bison.c" + break; + + case YYSYMBOL_inner_eth_expr: /* inner_eth_expr */ +#line 944 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7451 "parser_bison.c" + break; + + case YYSYMBOL_inner_expr: /* inner_expr */ +#line 944 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7457 "parser_bison.c" + break; + + case YYSYMBOL_vxlan_hdr_expr: /* vxlan_hdr_expr */ +#line 947 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7463 "parser_bison.c" + break; + + case YYSYMBOL_geneve_hdr_expr: /* geneve_hdr_expr */ +#line 947 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7469 "parser_bison.c" + break; + + case YYSYMBOL_gre_hdr_expr: /* gre_hdr_expr */ +#line 947 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7475 "parser_bison.c" + break; + + case YYSYMBOL_gretap_hdr_expr: /* gretap_hdr_expr */ +#line 947 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7481 "parser_bison.c" + break; + + case YYSYMBOL_optstrip_stmt: /* optstrip_stmt */ +#line 951 "parser_bison.y" + { stmt_free(((*yyvaluep).stmt)); } +#line 7487 "parser_bison.c" + break; + + case YYSYMBOL_dccp_hdr_expr: /* dccp_hdr_expr */ +#line 881 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7493 "parser_bison.c" + break; + + case YYSYMBOL_sctp_chunk_alloc: /* sctp_chunk_alloc */ +#line 881 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7499 "parser_bison.c" + break; + + case YYSYMBOL_sctp_hdr_expr: /* sctp_hdr_expr */ +#line 881 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7505 "parser_bison.c" + break; + + case YYSYMBOL_th_hdr_expr: /* th_hdr_expr */ +#line 887 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7511 "parser_bison.c" + break; + + case YYSYMBOL_exthdr_expr: /* exthdr_expr */ +#line 891 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7517 "parser_bison.c" + break; + + case YYSYMBOL_hbh_hdr_expr: /* hbh_hdr_expr */ +#line 893 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7523 "parser_bison.c" + break; + + case YYSYMBOL_rt_hdr_expr: /* rt_hdr_expr */ +#line 896 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7529 "parser_bison.c" + break; + + case YYSYMBOL_rt0_hdr_expr: /* rt0_hdr_expr */ +#line 896 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7535 "parser_bison.c" + break; + + case YYSYMBOL_rt2_hdr_expr: /* rt2_hdr_expr */ +#line 896 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7541 "parser_bison.c" + break; + + case YYSYMBOL_rt4_hdr_expr: /* rt4_hdr_expr */ +#line 896 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7547 "parser_bison.c" + break; + + case YYSYMBOL_frag_hdr_expr: /* frag_hdr_expr */ +#line 893 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7553 "parser_bison.c" + break; + + case YYSYMBOL_dst_hdr_expr: /* dst_hdr_expr */ +#line 893 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7559 "parser_bison.c" + break; + + case YYSYMBOL_mh_hdr_expr: /* mh_hdr_expr */ +#line 899 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7565 "parser_bison.c" + break; + + case YYSYMBOL_exthdr_exists_expr: /* exthdr_exists_expr */ +#line 961 "parser_bison.y" + { expr_free(((*yyvaluep).expr)); } +#line 7571 "parser_bison.c" + break; + + default: + break; + } + YY_IGNORE_MAYBE_UNINITIALIZED_END +} + + + + + + +/*----------. +| yyparse. | +`----------*/ + +int +yyparse (struct nft_ctx *nft, void *scanner, struct parser_state *state) +{ +/* Lookahead token kind. */ +int yychar; + + +/* The semantic value of the lookahead symbol. */ +/* Default value used for initialization, for pacifying older GCCs + or non-GCC compilers. */ +YY_INITIAL_VALUE (static YYSTYPE yyval_default;) +YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); + +/* Location data for the lookahead symbol. */ +static YYLTYPE yyloc_default +# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL + = { 1, 1, 1, 1 } +# endif +; +YYLTYPE yylloc = yyloc_default; + + /* Number of syntax errors so far. */ + int yynerrs = 0; + + yy_state_fast_t yystate = 0; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus = 0; + + /* Refer to the stacks through separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* Their size. */ + YYPTRDIFF_T yystacksize = YYINITDEPTH; + + /* The state stack: array, bottom, top. */ + yy_state_t yyssa[YYINITDEPTH]; + yy_state_t *yyss = yyssa; + yy_state_t *yyssp = yyss; + + /* The semantic value stack: array, bottom, top. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + YYSTYPE *yyvsp = yyvs; + + /* The location stack: array, bottom, top. */ + YYLTYPE yylsa[YYINITDEPTH]; + YYLTYPE *yyls = yylsa; + YYLTYPE *yylsp = yyls; + + int yyn; + /* The return value of yyparse. */ + int yyresult; + /* Lookahead symbol kind. */ + yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY; + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + YYLTYPE yyloc; + + /* The locations where the error started and ended. */ + YYLTYPE yyerror_range[3]; + + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf; + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N)) + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yychar = YYEMPTY; /* Cause a token to be read. */ + +/* User initialization code. */ +#line 197 "parser_bison.y" +{ + location_init(scanner, state, &yylloc); + if (nft->debug_mask & NFT_DEBUG_SCANNER) + nft_set_debug(1, scanner); + if (nft->debug_mask & NFT_DEBUG_PARSER) + yydebug = 1; +} + +#line 7676 "parser_bison.c" + + yylsp[0] = yylloc; + goto yysetstate; + + +/*------------------------------------------------------------. +| yynewstate -- push a new state, which is found in yystate. | +`------------------------------------------------------------*/ +yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + yyssp++; + + +/*--------------------------------------------------------------------. +| yysetstate -- set current state (the top of the stack) to yystate. | +`--------------------------------------------------------------------*/ +yysetstate: + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + YY_ASSERT (0 <= yystate && yystate < YYNSTATES); + YY_IGNORE_USELESS_CAST_BEGIN + *yyssp = YY_CAST (yy_state_t, yystate); + YY_IGNORE_USELESS_CAST_END + YY_STACK_PRINT (yyss, yyssp); + + if (yyss + yystacksize - 1 <= yyssp) +#if !defined yyoverflow && !defined YYSTACK_RELOCATE + goto yyexhaustedlab; +#else + { + /* Get the current used size of the three stacks, in elements. */ + YYPTRDIFF_T yysize = yyssp - yyss + 1; + +# if defined yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + yy_state_t *yyss1 = yyss; + YYSTYPE *yyvs1 = yyvs; + YYLTYPE *yyls1 = yyls; + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * YYSIZEOF (*yyssp), + &yyvs1, yysize * YYSIZEOF (*yyvsp), + &yyls1, yysize * YYSIZEOF (*yylsp), + &yystacksize); + yyss = yyss1; + yyvs = yyvs1; + yyls = yyls1; + } +# else /* defined YYSTACK_RELOCATE */ + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyexhaustedlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + yy_state_t *yyss1 = yyss; + union yyalloc *yyptr = + YY_CAST (union yyalloc *, + YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss_alloc, yyss); + YYSTACK_RELOCATE (yyvs_alloc, yyvs); + YYSTACK_RELOCATE (yyls_alloc, yyls); +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + yylsp = yyls + yysize - 1; + + YY_IGNORE_USELESS_CAST_BEGIN + YYDPRINTF ((stderr, "Stack size increased to %ld\n", + YY_CAST (long, yystacksize))); + YY_IGNORE_USELESS_CAST_END + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } +#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ + + if (yystate == YYFINAL) + YYACCEPT; + + goto yybackup; + + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + /* Do appropriate processing given the current state. Read a + lookahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to lookahead token. */ + yyn = yypact[yystate]; + if (yypact_value_is_default (yyn)) + goto yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token\n")); + yychar = yylex (&yylval, &yylloc, scanner); + } + + if (yychar <= TOKEN_EOF) + { + yychar = TOKEN_EOF; + yytoken = YYSYMBOL_YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else if (yychar == YYerror) + { + /* The scanner already issued an error message, process directly + to error recovery. But do not keep the error token as + lookahead, it is too special and may lead us to an endless + loop in error recovery. */ + yychar = YYUNDEF; + yytoken = YYSYMBOL_YYerror; + yyerror_range[1] = yylloc; + goto yyerrlab1; + } + else + { + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yytable_value_is_error (yyn)) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + /* Shift the lookahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + yystate = yyn; + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END + *++yylsp = yylloc; + + /* Discard the shifted token. */ + yychar = YYEMPTY; + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + '$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + /* Default location. */ + YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen); + yyerror_range[1] = yyloc; + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 3: /* input: input line */ +#line 980 "parser_bison.y" + { + if ((yyvsp[0].cmd) != NULL) { + (yyvsp[0].cmd)->location = (yylsp[0]); + list_add_tail(&(yyvsp[0].cmd)->list, state->cmds); + } + } +#line 7893 "parser_bison.c" + break; + + case 8: /* close_scope_ah: %empty */ +#line 996 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_AH); } +#line 7899 "parser_bison.c" + break; + + case 9: /* close_scope_arp: %empty */ +#line 997 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_ARP); } +#line 7905 "parser_bison.c" + break; + + case 10: /* close_scope_at: %empty */ +#line 998 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_AT); } +#line 7911 "parser_bison.c" + break; + + case 11: /* close_scope_comp: %empty */ +#line 999 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_COMP); } +#line 7917 "parser_bison.c" + break; + + case 12: /* close_scope_ct: %empty */ +#line 1000 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_CT); } +#line 7923 "parser_bison.c" + break; + + case 13: /* close_scope_counter: %empty */ +#line 1001 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_COUNTER); } +#line 7929 "parser_bison.c" + break; + + case 14: /* close_scope_last: %empty */ +#line 1002 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_LAST); } +#line 7935 "parser_bison.c" + break; + + case 15: /* close_scope_dccp: %empty */ +#line 1003 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_DCCP); } +#line 7941 "parser_bison.c" + break; + + case 16: /* close_scope_destroy: %empty */ +#line 1004 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_CMD_DESTROY); } +#line 7947 "parser_bison.c" + break; + + case 17: /* close_scope_dst: %empty */ +#line 1005 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_DST); } +#line 7953 "parser_bison.c" + break; + + case 18: /* close_scope_dup: %empty */ +#line 1006 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_STMT_DUP); } +#line 7959 "parser_bison.c" + break; + + case 19: /* close_scope_esp: %empty */ +#line 1007 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_ESP); } +#line 7965 "parser_bison.c" + break; + + case 20: /* close_scope_eth: %empty */ +#line 1008 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_ETH); } +#line 7971 "parser_bison.c" + break; + + case 21: /* close_scope_export: %empty */ +#line 1009 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_CMD_EXPORT); } +#line 7977 "parser_bison.c" + break; + + case 22: /* close_scope_fib: %empty */ +#line 1010 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_FIB); } +#line 7983 "parser_bison.c" + break; + + case 23: /* close_scope_frag: %empty */ +#line 1011 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_FRAG); } +#line 7989 "parser_bison.c" + break; + + case 24: /* close_scope_fwd: %empty */ +#line 1012 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_STMT_FWD); } +#line 7995 "parser_bison.c" + break; + + case 25: /* close_scope_gre: %empty */ +#line 1013 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_GRE); } +#line 8001 "parser_bison.c" + break; + + case 26: /* close_scope_hash: %empty */ +#line 1014 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_HASH); } +#line 8007 "parser_bison.c" + break; + + case 27: /* close_scope_hbh: %empty */ +#line 1015 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_HBH); } +#line 8013 "parser_bison.c" + break; + + case 28: /* close_scope_ip: %empty */ +#line 1016 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_IP); } +#line 8019 "parser_bison.c" + break; + + case 29: /* close_scope_ip6: %empty */ +#line 1017 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_IP6); } +#line 8025 "parser_bison.c" + break; + + case 30: /* close_scope_vlan: %empty */ +#line 1018 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_VLAN); } +#line 8031 "parser_bison.c" + break; + + case 31: /* close_scope_icmp: %empty */ +#line 1019 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_ICMP); } +#line 8037 "parser_bison.c" + break; + + case 32: /* close_scope_igmp: %empty */ +#line 1020 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_IGMP); } +#line 8043 "parser_bison.c" + break; + + case 33: /* close_scope_import: %empty */ +#line 1021 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_CMD_IMPORT); } +#line 8049 "parser_bison.c" + break; + + case 34: /* close_scope_ipsec: %empty */ +#line 1022 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_IPSEC); } +#line 8055 "parser_bison.c" + break; + + case 35: /* close_scope_list: %empty */ +#line 1023 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_CMD_LIST); } +#line 8061 "parser_bison.c" + break; + + case 36: /* close_scope_limit: %empty */ +#line 1024 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_LIMIT); } +#line 8067 "parser_bison.c" + break; + + case 37: /* close_scope_meta: %empty */ +#line 1025 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_META); } +#line 8073 "parser_bison.c" + break; + + case 38: /* close_scope_mh: %empty */ +#line 1026 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_MH); } +#line 8079 "parser_bison.c" + break; + + case 39: /* close_scope_monitor: %empty */ +#line 1027 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_CMD_MONITOR); } +#line 8085 "parser_bison.c" + break; + + case 40: /* close_scope_nat: %empty */ +#line 1028 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_STMT_NAT); } +#line 8091 "parser_bison.c" + break; + + case 41: /* close_scope_numgen: %empty */ +#line 1029 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_NUMGEN); } +#line 8097 "parser_bison.c" + break; + + case 42: /* close_scope_osf: %empty */ +#line 1030 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_OSF); } +#line 8103 "parser_bison.c" + break; + + case 43: /* close_scope_policy: %empty */ +#line 1031 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_POLICY); } +#line 8109 "parser_bison.c" + break; + + case 44: /* close_scope_quota: %empty */ +#line 1032 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_QUOTA); } +#line 8115 "parser_bison.c" + break; + + case 45: /* close_scope_queue: %empty */ +#line 1033 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_QUEUE); } +#line 8121 "parser_bison.c" + break; + + case 46: /* close_scope_reject: %empty */ +#line 1034 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_STMT_REJECT); } +#line 8127 "parser_bison.c" + break; + + case 47: /* close_scope_reset: %empty */ +#line 1035 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_CMD_RESET); } +#line 8133 "parser_bison.c" + break; + + case 48: /* close_scope_rt: %empty */ +#line 1036 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_RT); } +#line 8139 "parser_bison.c" + break; + + case 49: /* close_scope_sctp: %empty */ +#line 1037 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_SCTP); } +#line 8145 "parser_bison.c" + break; + + case 50: /* close_scope_sctp_chunk: %empty */ +#line 1038 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_SCTP_CHUNK); } +#line 8151 "parser_bison.c" + break; + + case 51: /* close_scope_secmark: %empty */ +#line 1039 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_SECMARK); } +#line 8157 "parser_bison.c" + break; + + case 52: /* close_scope_socket: %empty */ +#line 1040 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_SOCKET); } +#line 8163 "parser_bison.c" + break; + + case 53: /* close_scope_tcp: %empty */ +#line 1041 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_TCP); } +#line 8169 "parser_bison.c" + break; + + case 54: /* close_scope_tproxy: %empty */ +#line 1042 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_STMT_TPROXY); } +#line 8175 "parser_bison.c" + break; + + case 55: /* close_scope_type: %empty */ +#line 1043 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_TYPE); } +#line 8181 "parser_bison.c" + break; + + case 56: /* close_scope_th: %empty */ +#line 1044 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_TH); } +#line 8187 "parser_bison.c" + break; + + case 57: /* close_scope_udp: %empty */ +#line 1045 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_UDP); } +#line 8193 "parser_bison.c" + break; + + case 58: /* close_scope_udplite: %empty */ +#line 1046 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_UDPLITE); } +#line 8199 "parser_bison.c" + break; + + case 59: /* close_scope_log: %empty */ +#line 1048 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_STMT_LOG); } +#line 8205 "parser_bison.c" + break; + + case 60: /* close_scope_synproxy: %empty */ +#line 1049 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_STMT_SYNPROXY); } +#line 8211 "parser_bison.c" + break; + + case 61: /* close_scope_xt: %empty */ +#line 1050 "parser_bison.y" + { scanner_pop_start_cond(nft->scanner, PARSER_SC_XT); } +#line 8217 "parser_bison.c" + break; + + case 62: /* common_block: "include" "quoted string" stmt_separator */ +#line 1053 "parser_bison.y" + { + if (scanner_include_file(nft, scanner, (yyvsp[-1].string), &(yyloc)) < 0) { + xfree((yyvsp[-1].string)); + YYERROR; + } + xfree((yyvsp[-1].string)); + } +#line 8229 "parser_bison.c" + break; + + case 63: /* common_block: "define" identifier '=' initializer_expr stmt_separator */ +#line 1061 "parser_bison.y" + { + struct scope *scope = current_scope(state); + + if (symbol_lookup(scope, (yyvsp[-3].string)) != NULL) { + erec_queue(error(&(yylsp[-3]), "redefinition of symbol '%s'", (yyvsp[-3].string)), + state->msgs); + expr_free((yyvsp[-1].expr)); + xfree((yyvsp[-3].string)); + YYERROR; + } + + symbol_bind(scope, (yyvsp[-3].string), (yyvsp[-1].expr)); + xfree((yyvsp[-3].string)); + } +#line 8248 "parser_bison.c" + break; + + case 64: /* common_block: "redefine" identifier '=' initializer_expr stmt_separator */ +#line 1076 "parser_bison.y" + { + struct scope *scope = current_scope(state); + + symbol_bind(scope, (yyvsp[-3].string), (yyvsp[-1].expr)); + xfree((yyvsp[-3].string)); + } +#line 8259 "parser_bison.c" + break; + + case 65: /* common_block: "undefine" identifier stmt_separator */ +#line 1083 "parser_bison.y" + { + struct scope *scope = current_scope(state); + + if (symbol_unbind(scope, (yyvsp[-1].string)) < 0) { + erec_queue(error(&(yylsp[-1]), "undefined symbol '%s'", (yyvsp[-1].string)), + state->msgs); + xfree((yyvsp[-1].string)); + YYERROR; + } + xfree((yyvsp[-1].string)); + } +#line 8275 "parser_bison.c" + break; + + case 66: /* common_block: error stmt_separator */ +#line 1095 "parser_bison.y" + { + if (++state->nerrs == nft->parser_max_errors) + YYABORT; + yyerrok; + } +#line 8285 "parser_bison.c" + break; + + case 67: /* line: common_block */ +#line 1102 "parser_bison.y" + { (yyval.cmd) = NULL; } +#line 8291 "parser_bison.c" + break; + + case 68: /* line: stmt_separator */ +#line 1103 "parser_bison.y" + { (yyval.cmd) = NULL; } +#line 8297 "parser_bison.c" + break; + + case 69: /* line: base_cmd stmt_separator */ +#line 1104 "parser_bison.y" + { (yyval.cmd) = (yyvsp[-1].cmd); } +#line 8303 "parser_bison.c" + break; + + case 70: /* line: base_cmd "end of file" */ +#line 1106 "parser_bison.y" + { + /* + * Very hackish workaround for bison >= 2.4: previous versions + * terminated parsing after EOF, 2.4+ tries to get further input + * in 'input' and calls the scanner again, causing a crash when + * the final input buffer has been popped. Terminate manually to + * avoid this. The correct fix should be to adjust the grammar + * to accept EOF in input, but for unknown reasons it does not + * work. + */ + if ((yyvsp[-1].cmd) != NULL) { + (yyvsp[-1].cmd)->location = (yylsp[-1]); + list_add_tail(&(yyvsp[-1].cmd)->list, state->cmds); + } + (yyval.cmd) = NULL; + YYACCEPT; + } +#line 8325 "parser_bison.c" + break; + + case 71: /* base_cmd: add_cmd */ +#line 1125 "parser_bison.y" + { (yyval.cmd) = (yyvsp[0].cmd); } +#line 8331 "parser_bison.c" + break; + + case 72: /* base_cmd: "add" add_cmd */ +#line 1126 "parser_bison.y" + { (yyval.cmd) = (yyvsp[0].cmd); } +#line 8337 "parser_bison.c" + break; + + case 73: /* base_cmd: "replace" replace_cmd */ +#line 1127 "parser_bison.y" + { (yyval.cmd) = (yyvsp[0].cmd); } +#line 8343 "parser_bison.c" + break; + + case 74: /* base_cmd: "create" create_cmd */ +#line 1128 "parser_bison.y" + { (yyval.cmd) = (yyvsp[0].cmd); } +#line 8349 "parser_bison.c" + break; + + case 75: /* base_cmd: "insert" insert_cmd */ +#line 1129 "parser_bison.y" + { (yyval.cmd) = (yyvsp[0].cmd); } +#line 8355 "parser_bison.c" + break; + + case 76: /* base_cmd: "delete" delete_cmd */ +#line 1130 "parser_bison.y" + { (yyval.cmd) = (yyvsp[0].cmd); } +#line 8361 "parser_bison.c" + break; + + case 77: /* base_cmd: "get" get_cmd */ +#line 1131 "parser_bison.y" + { (yyval.cmd) = (yyvsp[0].cmd); } +#line 8367 "parser_bison.c" + break; + + case 78: /* base_cmd: "list" list_cmd close_scope_list */ +#line 1132 "parser_bison.y" + { (yyval.cmd) = (yyvsp[-1].cmd); } +#line 8373 "parser_bison.c" + break; + + case 79: /* base_cmd: "reset" reset_cmd close_scope_reset */ +#line 1133 "parser_bison.y" + { (yyval.cmd) = (yyvsp[-1].cmd); } +#line 8379 "parser_bison.c" + break; + + case 80: /* base_cmd: "flush" flush_cmd */ +#line 1134 "parser_bison.y" + { (yyval.cmd) = (yyvsp[0].cmd); } +#line 8385 "parser_bison.c" + break; + + case 81: /* base_cmd: "rename" rename_cmd */ +#line 1135 "parser_bison.y" + { (yyval.cmd) = (yyvsp[0].cmd); } +#line 8391 "parser_bison.c" + break; + + case 82: /* base_cmd: "import" import_cmd close_scope_import */ +#line 1136 "parser_bison.y" + { (yyval.cmd) = (yyvsp[-1].cmd); } +#line 8397 "parser_bison.c" + break; + + case 83: /* base_cmd: "export" export_cmd close_scope_export */ +#line 1137 "parser_bison.y" + { (yyval.cmd) = (yyvsp[-1].cmd); } +#line 8403 "parser_bison.c" + break; + + case 84: /* base_cmd: "monitor" monitor_cmd close_scope_monitor */ +#line 1138 "parser_bison.y" + { (yyval.cmd) = (yyvsp[-1].cmd); } +#line 8409 "parser_bison.c" + break; + + case 85: /* base_cmd: "describe" describe_cmd */ +#line 1139 "parser_bison.y" + { (yyval.cmd) = (yyvsp[0].cmd); } +#line 8415 "parser_bison.c" + break; + + case 86: /* base_cmd: "destroy" destroy_cmd close_scope_destroy */ +#line 1140 "parser_bison.y" + { (yyval.cmd) = (yyvsp[-1].cmd); } +#line 8421 "parser_bison.c" + break; + + case 87: /* add_cmd: "table" table_spec */ +#line 1144 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_ADD, CMD_OBJ_TABLE, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 8429 "parser_bison.c" + break; + + case 88: /* add_cmd: "table" table_spec table_block_alloc '{' table_block '}' */ +#line 1149 "parser_bison.y" + { + handle_merge(&(yyvsp[-3].table)->handle, &(yyvsp[-4].handle)); + close_scope(state); + (yyval.cmd) = cmd_alloc(CMD_ADD, CMD_OBJ_TABLE, &(yyvsp[-4].handle), &(yyloc), (yyvsp[-1].table)); + } +#line 8439 "parser_bison.c" + break; + + case 89: /* add_cmd: "chain" chain_spec */ +#line 1155 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_ADD, CMD_OBJ_CHAIN, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 8447 "parser_bison.c" + break; + + case 90: /* add_cmd: "chain" chain_spec chain_block_alloc '{' chain_block '}' */ +#line 1160 "parser_bison.y" + { + (yyvsp[-1].chain)->location = (yylsp[-1]); + handle_merge(&(yyvsp[-3].chain)->handle, &(yyvsp[-4].handle)); + close_scope(state); + (yyval.cmd) = cmd_alloc(CMD_ADD, CMD_OBJ_CHAIN, &(yyvsp[-4].handle), &(yyloc), (yyvsp[-1].chain)); + } +#line 8458 "parser_bison.c" + break; + + case 91: /* add_cmd: "rule" rule_position rule */ +#line 1167 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_ADD, CMD_OBJ_RULE, &(yyvsp[-1].handle), &(yyloc), (yyvsp[0].rule)); + } +#line 8466 "parser_bison.c" + break; + + case 92: /* add_cmd: rule_position rule */ +#line 1171 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_ADD, CMD_OBJ_RULE, &(yyvsp[-1].handle), &(yyloc), (yyvsp[0].rule)); + } +#line 8474 "parser_bison.c" + break; + + case 93: /* add_cmd: "set" set_spec set_block_alloc '{' set_block '}' */ +#line 1176 "parser_bison.y" + { + (yyvsp[-1].set)->location = (yylsp[-1]); + handle_merge(&(yyvsp[-3].set)->handle, &(yyvsp[-4].handle)); + (yyval.cmd) = cmd_alloc(CMD_ADD, CMD_OBJ_SET, &(yyvsp[-4].handle), &(yyloc), (yyvsp[-1].set)); + } +#line 8484 "parser_bison.c" + break; + + case 94: /* add_cmd: "map" set_spec map_block_alloc '{' map_block '}' */ +#line 1183 "parser_bison.y" + { + (yyvsp[-1].set)->location = (yylsp[-1]); + handle_merge(&(yyvsp[-3].set)->handle, &(yyvsp[-4].handle)); + (yyval.cmd) = cmd_alloc(CMD_ADD, CMD_OBJ_SET, &(yyvsp[-4].handle), &(yyloc), (yyvsp[-1].set)); + } +#line 8494 "parser_bison.c" + break; + + case 95: /* add_cmd: "element" set_spec set_block_expr */ +#line 1189 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_ADD, CMD_OBJ_ELEMENTS, &(yyvsp[-1].handle), &(yyloc), (yyvsp[0].expr)); + } +#line 8502 "parser_bison.c" + break; + + case 96: /* add_cmd: "flowtable" flowtable_spec flowtable_block_alloc '{' flowtable_block '}' */ +#line 1194 "parser_bison.y" + { + (yyvsp[-1].flowtable)->location = (yylsp[-1]); + handle_merge(&(yyvsp[-3].flowtable)->handle, &(yyvsp[-4].handle)); + (yyval.cmd) = cmd_alloc(CMD_ADD, CMD_OBJ_FLOWTABLE, &(yyvsp[-4].handle), &(yyloc), (yyvsp[-1].flowtable)); + } +#line 8512 "parser_bison.c" + break; + + case 97: /* add_cmd: "counter" obj_spec close_scope_counter */ +#line 1200 "parser_bison.y" + { + struct obj *obj; + + obj = obj_alloc(&(yyloc)); + obj->type = NFT_OBJECT_COUNTER; + handle_merge(&obj->handle, &(yyvsp[-1].handle)); + (yyval.cmd) = cmd_alloc(CMD_ADD, CMD_OBJ_COUNTER, &(yyvsp[-1].handle), &(yyloc), obj); + } +#line 8525 "parser_bison.c" + break; + + case 98: /* add_cmd: "counter" obj_spec counter_obj counter_config close_scope_counter */ +#line 1209 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_ADD, CMD_OBJ_COUNTER, &(yyvsp[-3].handle), &(yyloc), (yyvsp[-2].obj)); + } +#line 8533 "parser_bison.c" + break; + + case 99: /* add_cmd: "counter" obj_spec counter_obj '{' counter_block '}' close_scope_counter */ +#line 1213 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_ADD, CMD_OBJ_COUNTER, &(yyvsp[-5].handle), &(yyloc), (yyvsp[-4].obj)); + } +#line 8541 "parser_bison.c" + break; + + case 100: /* add_cmd: "quota" obj_spec quota_obj quota_config close_scope_quota */ +#line 1217 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_ADD, CMD_OBJ_QUOTA, &(yyvsp[-3].handle), &(yyloc), (yyvsp[-2].obj)); + } +#line 8549 "parser_bison.c" + break; + + case 101: /* add_cmd: "quota" obj_spec quota_obj '{' quota_block '}' close_scope_quota */ +#line 1221 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_ADD, CMD_OBJ_QUOTA, &(yyvsp[-5].handle), &(yyloc), (yyvsp[-4].obj)); + } +#line 8557 "parser_bison.c" + break; + + case 102: /* add_cmd: "ct" "helper" obj_spec ct_obj_alloc '{' ct_helper_block '}' close_scope_ct */ +#line 1225 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc_obj_ct(CMD_ADD, NFT_OBJECT_CT_HELPER, &(yyvsp[-5].handle), &(yyloc), (yyvsp[-4].obj)); + } +#line 8565 "parser_bison.c" + break; + + case 103: /* add_cmd: "ct" "timeout" obj_spec ct_obj_alloc '{' ct_timeout_block '}' close_scope_ct */ +#line 1229 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc_obj_ct(CMD_ADD, NFT_OBJECT_CT_TIMEOUT, &(yyvsp[-5].handle), &(yyloc), (yyvsp[-4].obj)); + } +#line 8573 "parser_bison.c" + break; + + case 104: /* add_cmd: "ct" "expectation" obj_spec ct_obj_alloc '{' ct_expect_block '}' close_scope_ct */ +#line 1233 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc_obj_ct(CMD_ADD, NFT_OBJECT_CT_EXPECT, &(yyvsp[-5].handle), &(yyloc), (yyvsp[-4].obj)); + } +#line 8581 "parser_bison.c" + break; + + case 105: /* add_cmd: "limit" obj_spec limit_obj limit_config close_scope_limit */ +#line 1237 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_ADD, CMD_OBJ_LIMIT, &(yyvsp[-3].handle), &(yyloc), (yyvsp[-2].obj)); + } +#line 8589 "parser_bison.c" + break; + + case 106: /* add_cmd: "limit" obj_spec limit_obj '{' limit_block '}' close_scope_limit */ +#line 1241 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_ADD, CMD_OBJ_LIMIT, &(yyvsp[-5].handle), &(yyloc), (yyvsp[-4].obj)); + } +#line 8597 "parser_bison.c" + break; + + case 107: /* add_cmd: "secmark" obj_spec secmark_obj secmark_config close_scope_secmark */ +#line 1245 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_ADD, CMD_OBJ_SECMARK, &(yyvsp[-3].handle), &(yyloc), (yyvsp[-2].obj)); + } +#line 8605 "parser_bison.c" + break; + + case 108: /* add_cmd: "secmark" obj_spec secmark_obj '{' secmark_block '}' close_scope_secmark */ +#line 1249 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_ADD, CMD_OBJ_SECMARK, &(yyvsp[-5].handle), &(yyloc), (yyvsp[-4].obj)); + } +#line 8613 "parser_bison.c" + break; + + case 109: /* add_cmd: "synproxy" obj_spec synproxy_obj synproxy_config close_scope_synproxy */ +#line 1253 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_ADD, CMD_OBJ_SYNPROXY, &(yyvsp[-3].handle), &(yyloc), (yyvsp[-2].obj)); + } +#line 8621 "parser_bison.c" + break; + + case 110: /* add_cmd: "synproxy" obj_spec synproxy_obj '{' synproxy_block '}' close_scope_synproxy */ +#line 1257 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_ADD, CMD_OBJ_SYNPROXY, &(yyvsp[-5].handle), &(yyloc), (yyvsp[-4].obj)); + } +#line 8629 "parser_bison.c" + break; + + case 111: /* replace_cmd: "rule" ruleid_spec rule */ +#line 1263 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_REPLACE, CMD_OBJ_RULE, &(yyvsp[-1].handle), &(yyloc), (yyvsp[0].rule)); + } +#line 8637 "parser_bison.c" + break; + + case 112: /* create_cmd: "table" table_spec */ +#line 1269 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_CREATE, CMD_OBJ_TABLE, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 8645 "parser_bison.c" + break; + + case 113: /* create_cmd: "table" table_spec table_block_alloc '{' table_block '}' */ +#line 1274 "parser_bison.y" + { + handle_merge(&(yyvsp[-3].table)->handle, &(yyvsp[-4].handle)); + close_scope(state); + (yyval.cmd) = cmd_alloc(CMD_CREATE, CMD_OBJ_TABLE, &(yyvsp[-4].handle), &(yyloc), (yyvsp[-1].table)); + } +#line 8655 "parser_bison.c" + break; + + case 114: /* create_cmd: "chain" chain_spec */ +#line 1280 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_CREATE, CMD_OBJ_CHAIN, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 8663 "parser_bison.c" + break; + + case 115: /* create_cmd: "chain" chain_spec chain_block_alloc '{' chain_block '}' */ +#line 1285 "parser_bison.y" + { + (yyvsp[-1].chain)->location = (yylsp[-1]); + handle_merge(&(yyvsp[-3].chain)->handle, &(yyvsp[-4].handle)); + close_scope(state); + (yyval.cmd) = cmd_alloc(CMD_CREATE, CMD_OBJ_CHAIN, &(yyvsp[-4].handle), &(yyloc), (yyvsp[-1].chain)); + } +#line 8674 "parser_bison.c" + break; + + case 116: /* create_cmd: "set" set_spec set_block_alloc '{' set_block '}' */ +#line 1293 "parser_bison.y" + { + (yyvsp[-1].set)->location = (yylsp[-1]); + handle_merge(&(yyvsp[-3].set)->handle, &(yyvsp[-4].handle)); + (yyval.cmd) = cmd_alloc(CMD_CREATE, CMD_OBJ_SET, &(yyvsp[-4].handle), &(yyloc), (yyvsp[-1].set)); + } +#line 8684 "parser_bison.c" + break; + + case 117: /* create_cmd: "map" set_spec map_block_alloc '{' map_block '}' */ +#line 1300 "parser_bison.y" + { + (yyvsp[-1].set)->location = (yylsp[-1]); + handle_merge(&(yyvsp[-3].set)->handle, &(yyvsp[-4].handle)); + (yyval.cmd) = cmd_alloc(CMD_CREATE, CMD_OBJ_SET, &(yyvsp[-4].handle), &(yyloc), (yyvsp[-1].set)); + } +#line 8694 "parser_bison.c" + break; + + case 118: /* create_cmd: "element" set_spec set_block_expr */ +#line 1306 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_CREATE, CMD_OBJ_ELEMENTS, &(yyvsp[-1].handle), &(yyloc), (yyvsp[0].expr)); + } +#line 8702 "parser_bison.c" + break; + + case 119: /* create_cmd: "flowtable" flowtable_spec flowtable_block_alloc '{' flowtable_block '}' */ +#line 1311 "parser_bison.y" + { + (yyvsp[-1].flowtable)->location = (yylsp[-1]); + handle_merge(&(yyvsp[-3].flowtable)->handle, &(yyvsp[-4].handle)); + (yyval.cmd) = cmd_alloc(CMD_CREATE, CMD_OBJ_FLOWTABLE, &(yyvsp[-4].handle), &(yyloc), (yyvsp[-1].flowtable)); + } +#line 8712 "parser_bison.c" + break; + + case 120: /* create_cmd: "counter" obj_spec close_scope_counter */ +#line 1317 "parser_bison.y" + { + struct obj *obj; + + obj = obj_alloc(&(yyloc)); + obj->type = NFT_OBJECT_COUNTER; + handle_merge(&obj->handle, &(yyvsp[-1].handle)); + (yyval.cmd) = cmd_alloc(CMD_CREATE, CMD_OBJ_COUNTER, &(yyvsp[-1].handle), &(yyloc), obj); + } +#line 8725 "parser_bison.c" + break; + + case 121: /* create_cmd: "counter" obj_spec counter_obj counter_config close_scope_counter */ +#line 1326 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_CREATE, CMD_OBJ_COUNTER, &(yyvsp[-3].handle), &(yyloc), (yyvsp[-2].obj)); + } +#line 8733 "parser_bison.c" + break; + + case 122: /* create_cmd: "quota" obj_spec quota_obj quota_config close_scope_quota */ +#line 1330 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_CREATE, CMD_OBJ_QUOTA, &(yyvsp[-3].handle), &(yyloc), (yyvsp[-2].obj)); + } +#line 8741 "parser_bison.c" + break; + + case 123: /* create_cmd: "ct" "helper" obj_spec ct_obj_alloc '{' ct_helper_block '}' close_scope_ct */ +#line 1334 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc_obj_ct(CMD_CREATE, NFT_OBJECT_CT_HELPER, &(yyvsp[-5].handle), &(yyloc), (yyvsp[-4].obj)); + } +#line 8749 "parser_bison.c" + break; + + case 124: /* create_cmd: "ct" "timeout" obj_spec ct_obj_alloc '{' ct_timeout_block '}' close_scope_ct */ +#line 1338 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc_obj_ct(CMD_CREATE, NFT_OBJECT_CT_TIMEOUT, &(yyvsp[-5].handle), &(yyloc), (yyvsp[-4].obj)); + } +#line 8757 "parser_bison.c" + break; + + case 125: /* create_cmd: "ct" "expectation" obj_spec ct_obj_alloc '{' ct_expect_block '}' close_scope_ct */ +#line 1342 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc_obj_ct(CMD_CREATE, NFT_OBJECT_CT_EXPECT, &(yyvsp[-5].handle), &(yyloc), (yyvsp[-4].obj)); + } +#line 8765 "parser_bison.c" + break; + + case 126: /* create_cmd: "limit" obj_spec limit_obj limit_config close_scope_limit */ +#line 1346 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_CREATE, CMD_OBJ_LIMIT, &(yyvsp[-3].handle), &(yyloc), (yyvsp[-2].obj)); + } +#line 8773 "parser_bison.c" + break; + + case 127: /* create_cmd: "secmark" obj_spec secmark_obj secmark_config close_scope_secmark */ +#line 1350 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_CREATE, CMD_OBJ_SECMARK, &(yyvsp[-3].handle), &(yyloc), (yyvsp[-2].obj)); + } +#line 8781 "parser_bison.c" + break; + + case 128: /* create_cmd: "synproxy" obj_spec synproxy_obj synproxy_config close_scope_synproxy */ +#line 1354 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_CREATE, CMD_OBJ_SYNPROXY, &(yyvsp[-3].handle), &(yyloc), (yyvsp[-2].obj)); + } +#line 8789 "parser_bison.c" + break; + + case 129: /* insert_cmd: "rule" rule_position rule */ +#line 1360 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_INSERT, CMD_OBJ_RULE, &(yyvsp[-1].handle), &(yyloc), (yyvsp[0].rule)); + } +#line 8797 "parser_bison.c" + break; + + case 138: /* delete_cmd: "table" table_or_id_spec */ +#line 1382 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_DELETE, CMD_OBJ_TABLE, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 8805 "parser_bison.c" + break; + + case 139: /* delete_cmd: "chain" chain_or_id_spec */ +#line 1386 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_DELETE, CMD_OBJ_CHAIN, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 8813 "parser_bison.c" + break; + + case 140: /* delete_cmd: "chain" chain_spec chain_block_alloc '{' chain_block '}' */ +#line 1391 "parser_bison.y" + { + (yyvsp[-1].chain)->location = (yylsp[-1]); + handle_merge(&(yyvsp[-3].chain)->handle, &(yyvsp[-4].handle)); + (yyval.cmd) = cmd_alloc(CMD_DELETE, CMD_OBJ_CHAIN, &(yyvsp[-4].handle), &(yyloc), (yyvsp[-1].chain)); + } +#line 8823 "parser_bison.c" + break; + + case 141: /* delete_cmd: "rule" ruleid_spec */ +#line 1397 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_DELETE, CMD_OBJ_RULE, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 8831 "parser_bison.c" + break; + + case 142: /* delete_cmd: "set" set_or_id_spec */ +#line 1401 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_DELETE, CMD_OBJ_SET, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 8839 "parser_bison.c" + break; + + case 143: /* delete_cmd: "map" set_spec */ +#line 1405 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_DELETE, CMD_OBJ_SET, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 8847 "parser_bison.c" + break; + + case 144: /* delete_cmd: "element" set_spec set_block_expr */ +#line 1409 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_DELETE, CMD_OBJ_ELEMENTS, &(yyvsp[-1].handle), &(yyloc), (yyvsp[0].expr)); + } +#line 8855 "parser_bison.c" + break; + + case 145: /* delete_cmd: "flowtable" flowtable_spec */ +#line 1413 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_DELETE, CMD_OBJ_FLOWTABLE, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 8863 "parser_bison.c" + break; + + case 146: /* delete_cmd: "flowtable" flowtableid_spec */ +#line 1417 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_DELETE, CMD_OBJ_FLOWTABLE, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 8871 "parser_bison.c" + break; + + case 147: /* delete_cmd: "flowtable" flowtable_spec flowtable_block_alloc '{' flowtable_block '}' */ +#line 1422 "parser_bison.y" + { + (yyvsp[-1].flowtable)->location = (yylsp[-1]); + handle_merge(&(yyvsp[-3].flowtable)->handle, &(yyvsp[-4].handle)); + (yyval.cmd) = cmd_alloc(CMD_DELETE, CMD_OBJ_FLOWTABLE, &(yyvsp[-4].handle), &(yyloc), (yyvsp[-1].flowtable)); + } +#line 8881 "parser_bison.c" + break; + + case 148: /* delete_cmd: "counter" obj_or_id_spec close_scope_counter */ +#line 1428 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_DELETE, CMD_OBJ_COUNTER, &(yyvsp[-1].handle), &(yyloc), NULL); + } +#line 8889 "parser_bison.c" + break; + + case 149: /* delete_cmd: "quota" obj_or_id_spec close_scope_quota */ +#line 1432 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_DELETE, CMD_OBJ_QUOTA, &(yyvsp[-1].handle), &(yyloc), NULL); + } +#line 8897 "parser_bison.c" + break; + + case 150: /* delete_cmd: "ct" ct_obj_type obj_spec ct_obj_alloc close_scope_ct */ +#line 1436 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc_obj_ct(CMD_DELETE, (yyvsp[-3].val), &(yyvsp[-2].handle), &(yyloc), (yyvsp[-1].obj)); + if ((yyvsp[-3].val) == NFT_OBJECT_CT_TIMEOUT) + init_list_head(&(yyvsp[-1].obj)->ct_timeout.timeout_list); + } +#line 8907 "parser_bison.c" + break; + + case 151: /* delete_cmd: "limit" obj_or_id_spec close_scope_limit */ +#line 1442 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_DELETE, CMD_OBJ_LIMIT, &(yyvsp[-1].handle), &(yyloc), NULL); + } +#line 8915 "parser_bison.c" + break; + + case 152: /* delete_cmd: "secmark" obj_or_id_spec close_scope_secmark */ +#line 1446 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_DELETE, CMD_OBJ_SECMARK, &(yyvsp[-1].handle), &(yyloc), NULL); + } +#line 8923 "parser_bison.c" + break; + + case 153: /* delete_cmd: "synproxy" obj_or_id_spec close_scope_synproxy */ +#line 1450 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_DELETE, CMD_OBJ_SYNPROXY, &(yyvsp[-1].handle), &(yyloc), NULL); + } +#line 8931 "parser_bison.c" + break; + + case 154: /* destroy_cmd: "table" table_or_id_spec */ +#line 1456 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_DESTROY, CMD_OBJ_TABLE, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 8939 "parser_bison.c" + break; + + case 155: /* destroy_cmd: "chain" chain_or_id_spec */ +#line 1460 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_DESTROY, CMD_OBJ_CHAIN, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 8947 "parser_bison.c" + break; + + case 156: /* destroy_cmd: "rule" ruleid_spec */ +#line 1464 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_DESTROY, CMD_OBJ_RULE, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 8955 "parser_bison.c" + break; + + case 157: /* destroy_cmd: "set" set_or_id_spec */ +#line 1468 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_DESTROY, CMD_OBJ_SET, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 8963 "parser_bison.c" + break; + + case 158: /* destroy_cmd: "map" set_spec */ +#line 1472 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_DESTROY, CMD_OBJ_SET, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 8971 "parser_bison.c" + break; + + case 159: /* destroy_cmd: "element" set_spec set_block_expr */ +#line 1476 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_DESTROY, CMD_OBJ_ELEMENTS, &(yyvsp[-1].handle), &(yyloc), (yyvsp[0].expr)); + } +#line 8979 "parser_bison.c" + break; + + case 160: /* destroy_cmd: "flowtable" flowtable_spec */ +#line 1480 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_DESTROY, CMD_OBJ_FLOWTABLE, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 8987 "parser_bison.c" + break; + + case 161: /* destroy_cmd: "flowtable" flowtableid_spec */ +#line 1484 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_DESTROY, CMD_OBJ_FLOWTABLE, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 8995 "parser_bison.c" + break; + + case 162: /* destroy_cmd: "flowtable" flowtable_spec flowtable_block_alloc '{' flowtable_block '}' */ +#line 1489 "parser_bison.y" + { + (yyvsp[-1].flowtable)->location = (yylsp[-1]); + handle_merge(&(yyvsp[-3].flowtable)->handle, &(yyvsp[-4].handle)); + (yyval.cmd) = cmd_alloc(CMD_DESTROY, CMD_OBJ_FLOWTABLE, &(yyvsp[-4].handle), &(yyloc), (yyvsp[-1].flowtable)); + } +#line 9005 "parser_bison.c" + break; + + case 163: /* destroy_cmd: "counter" obj_or_id_spec close_scope_counter */ +#line 1495 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_DESTROY, CMD_OBJ_COUNTER, &(yyvsp[-1].handle), &(yyloc), NULL); + } +#line 9013 "parser_bison.c" + break; + + case 164: /* destroy_cmd: "quota" obj_or_id_spec close_scope_quota */ +#line 1499 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_DESTROY, CMD_OBJ_QUOTA, &(yyvsp[-1].handle), &(yyloc), NULL); + } +#line 9021 "parser_bison.c" + break; + + case 165: /* destroy_cmd: "ct" ct_obj_type obj_spec ct_obj_alloc close_scope_ct */ +#line 1503 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc_obj_ct(CMD_DESTROY, (yyvsp[-3].val), &(yyvsp[-2].handle), &(yyloc), (yyvsp[-1].obj)); + if ((yyvsp[-3].val) == NFT_OBJECT_CT_TIMEOUT) + init_list_head(&(yyvsp[-1].obj)->ct_timeout.timeout_list); + } +#line 9031 "parser_bison.c" + break; + + case 166: /* destroy_cmd: "limit" obj_or_id_spec close_scope_limit */ +#line 1509 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_DESTROY, CMD_OBJ_LIMIT, &(yyvsp[-1].handle), &(yyloc), NULL); + } +#line 9039 "parser_bison.c" + break; + + case 167: /* destroy_cmd: "secmark" obj_or_id_spec close_scope_secmark */ +#line 1513 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_DESTROY, CMD_OBJ_SECMARK, &(yyvsp[-1].handle), &(yyloc), NULL); + } +#line 9047 "parser_bison.c" + break; + + case 168: /* destroy_cmd: "synproxy" obj_or_id_spec close_scope_synproxy */ +#line 1517 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_DESTROY, CMD_OBJ_SYNPROXY, &(yyvsp[-1].handle), &(yyloc), NULL); + } +#line 9055 "parser_bison.c" + break; + + case 169: /* get_cmd: "element" set_spec set_block_expr */ +#line 1524 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_GET, CMD_OBJ_ELEMENTS, &(yyvsp[-1].handle), &(yyloc), (yyvsp[0].expr)); + } +#line 9063 "parser_bison.c" + break; + + case 170: /* list_cmd: "table" table_spec */ +#line 1530 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_TABLE, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9071 "parser_bison.c" + break; + + case 171: /* list_cmd: "tables" ruleset_spec */ +#line 1534 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_TABLE, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9079 "parser_bison.c" + break; + + case 172: /* list_cmd: "chain" chain_spec */ +#line 1538 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_CHAIN, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9087 "parser_bison.c" + break; + + case 173: /* list_cmd: "chains" ruleset_spec */ +#line 1542 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_CHAINS, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9095 "parser_bison.c" + break; + + case 174: /* list_cmd: "sets" ruleset_spec */ +#line 1546 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_SETS, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9103 "parser_bison.c" + break; + + case 175: /* list_cmd: "sets" "table" table_spec */ +#line 1550 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_SETS, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9111 "parser_bison.c" + break; + + case 176: /* list_cmd: "set" set_spec */ +#line 1554 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_SET, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9119 "parser_bison.c" + break; + + case 177: /* list_cmd: "counters" ruleset_spec */ +#line 1558 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_COUNTERS, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9127 "parser_bison.c" + break; + + case 178: /* list_cmd: "counters" "table" table_spec */ +#line 1562 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_COUNTERS, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9135 "parser_bison.c" + break; + + case 179: /* list_cmd: "counter" obj_spec close_scope_counter */ +#line 1566 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_COUNTER, &(yyvsp[-1].handle), &(yyloc), NULL); + } +#line 9143 "parser_bison.c" + break; + + case 180: /* list_cmd: "quotas" ruleset_spec */ +#line 1570 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_QUOTAS, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9151 "parser_bison.c" + break; + + case 181: /* list_cmd: "quotas" "table" table_spec */ +#line 1574 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_QUOTAS, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9159 "parser_bison.c" + break; + + case 182: /* list_cmd: "quota" obj_spec close_scope_quota */ +#line 1578 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_QUOTA, &(yyvsp[-1].handle), &(yyloc), NULL); + } +#line 9167 "parser_bison.c" + break; + + case 183: /* list_cmd: "limits" ruleset_spec */ +#line 1582 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_LIMITS, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9175 "parser_bison.c" + break; + + case 184: /* list_cmd: "limits" "table" table_spec */ +#line 1586 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_LIMITS, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9183 "parser_bison.c" + break; + + case 185: /* list_cmd: "limit" obj_spec close_scope_limit */ +#line 1590 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_LIMIT, &(yyvsp[-1].handle), &(yyloc), NULL); + } +#line 9191 "parser_bison.c" + break; + + case 186: /* list_cmd: "secmarks" ruleset_spec */ +#line 1594 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_SECMARKS, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9199 "parser_bison.c" + break; + + case 187: /* list_cmd: "secmarks" "table" table_spec */ +#line 1598 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_SECMARKS, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9207 "parser_bison.c" + break; + + case 188: /* list_cmd: "secmark" obj_spec close_scope_secmark */ +#line 1602 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_SECMARK, &(yyvsp[-1].handle), &(yyloc), NULL); + } +#line 9215 "parser_bison.c" + break; + + case 189: /* list_cmd: "synproxys" ruleset_spec */ +#line 1606 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_SYNPROXYS, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9223 "parser_bison.c" + break; + + case 190: /* list_cmd: "synproxys" "table" table_spec */ +#line 1610 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_SYNPROXYS, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9231 "parser_bison.c" + break; + + case 191: /* list_cmd: "synproxy" obj_spec close_scope_synproxy */ +#line 1614 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_SYNPROXY, &(yyvsp[-1].handle), &(yyloc), NULL); + } +#line 9239 "parser_bison.c" + break; + + case 192: /* list_cmd: "ruleset" ruleset_spec */ +#line 1618 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_RULESET, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9247 "parser_bison.c" + break; + + case 193: /* list_cmd: "flow" "tables" ruleset_spec */ +#line 1622 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_METERS, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9255 "parser_bison.c" + break; + + case 194: /* list_cmd: "flow" "table" set_spec */ +#line 1626 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_METER, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9263 "parser_bison.c" + break; + + case 195: /* list_cmd: "meters" ruleset_spec */ +#line 1630 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_METERS, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9271 "parser_bison.c" + break; + + case 196: /* list_cmd: "meter" set_spec */ +#line 1634 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_METER, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9279 "parser_bison.c" + break; + + case 197: /* list_cmd: "flowtables" ruleset_spec */ +#line 1638 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_FLOWTABLES, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9287 "parser_bison.c" + break; + + case 198: /* list_cmd: "flowtable" flowtable_spec */ +#line 1642 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_FLOWTABLE, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9295 "parser_bison.c" + break; + + case 199: /* list_cmd: "maps" ruleset_spec */ +#line 1646 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_MAPS, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9303 "parser_bison.c" + break; + + case 200: /* list_cmd: "map" set_spec */ +#line 1650 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_MAP, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9311 "parser_bison.c" + break; + + case 201: /* list_cmd: "ct" ct_obj_type obj_spec close_scope_ct */ +#line 1654 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc_obj_ct(CMD_LIST, (yyvsp[-2].val), &(yyvsp[-1].handle), &(yyloc), NULL); + } +#line 9319 "parser_bison.c" + break; + + case 202: /* list_cmd: "ct" ct_cmd_type "table" table_spec close_scope_ct */ +#line 1658 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, (yyvsp[-3].val), &(yyvsp[-1].handle), &(yyloc), NULL); + } +#line 9327 "parser_bison.c" + break; + + case 203: /* list_cmd: "hooks" basehook_spec */ +#line 1662 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_LIST, CMD_OBJ_HOOKS, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9335 "parser_bison.c" + break; + + case 204: /* basehook_device_name: "device" "string" */ +#line 1668 "parser_bison.y" + { + (yyval.string) = (yyvsp[0].string); + } +#line 9343 "parser_bison.c" + break; + + case 205: /* basehook_spec: ruleset_spec */ +#line 1674 "parser_bison.y" + { + (yyval.handle) = (yyvsp[0].handle); + } +#line 9351 "parser_bison.c" + break; + + case 206: /* basehook_spec: ruleset_spec basehook_device_name */ +#line 1678 "parser_bison.y" + { + if ((yyvsp[0].string)) { + (yyvsp[-1].handle).obj.name = (yyvsp[0].string); + (yyvsp[-1].handle).obj.location = (yylsp[0]); + } + (yyval.handle) = (yyvsp[-1].handle); + } +#line 9363 "parser_bison.c" + break; + + case 207: /* reset_cmd: "counters" ruleset_spec */ +#line 1688 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_RESET, CMD_OBJ_COUNTERS, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9371 "parser_bison.c" + break; + + case 208: /* reset_cmd: "counters" table_spec */ +#line 1692 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_RESET, CMD_OBJ_COUNTERS, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9379 "parser_bison.c" + break; + + case 209: /* reset_cmd: "counters" "table" table_spec */ +#line 1696 "parser_bison.y" + { + /* alias of previous rule. */ + (yyval.cmd) = cmd_alloc(CMD_RESET, CMD_OBJ_COUNTERS, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9388 "parser_bison.c" + break; + + case 210: /* reset_cmd: "counter" obj_spec close_scope_counter */ +#line 1701 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_RESET, CMD_OBJ_COUNTER, &(yyvsp[-1].handle),&(yyloc), NULL); + } +#line 9396 "parser_bison.c" + break; + + case 211: /* reset_cmd: "quotas" ruleset_spec */ +#line 1705 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_RESET, CMD_OBJ_QUOTAS, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9404 "parser_bison.c" + break; + + case 212: /* reset_cmd: "quotas" "table" table_spec */ +#line 1709 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_RESET, CMD_OBJ_QUOTAS, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9412 "parser_bison.c" + break; + + case 213: /* reset_cmd: "quotas" table_spec */ +#line 1713 "parser_bison.y" + { + /* alias of previous rule. */ + (yyval.cmd) = cmd_alloc(CMD_RESET, CMD_OBJ_QUOTAS, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9421 "parser_bison.c" + break; + + case 214: /* reset_cmd: "quota" obj_spec close_scope_quota */ +#line 1718 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_RESET, CMD_OBJ_QUOTA, &(yyvsp[-1].handle), &(yyloc), NULL); + } +#line 9429 "parser_bison.c" + break; + + case 215: /* reset_cmd: "rules" ruleset_spec */ +#line 1722 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_RESET, CMD_OBJ_RULES, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9437 "parser_bison.c" + break; + + case 216: /* reset_cmd: "rules" table_spec */ +#line 1726 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_RESET, CMD_OBJ_RULES, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9445 "parser_bison.c" + break; + + case 217: /* reset_cmd: "rules" "table" table_spec */ +#line 1730 "parser_bison.y" + { + /* alias of previous rule. */ + (yyval.cmd) = cmd_alloc(CMD_RESET, CMD_OBJ_RULES, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9454 "parser_bison.c" + break; + + case 218: /* reset_cmd: "rules" chain_spec */ +#line 1735 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_RESET, CMD_OBJ_RULES, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9462 "parser_bison.c" + break; + + case 219: /* reset_cmd: "rules" "chain" chain_spec */ +#line 1739 "parser_bison.y" + { + /* alias of previous rule. */ + (yyval.cmd) = cmd_alloc(CMD_RESET, CMD_OBJ_RULES, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9471 "parser_bison.c" + break; + + case 220: /* reset_cmd: "rule" ruleid_spec */ +#line 1744 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_RESET, CMD_OBJ_RULE, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9479 "parser_bison.c" + break; + + case 221: /* reset_cmd: "element" set_spec set_block_expr */ +#line 1748 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_RESET, CMD_OBJ_ELEMENTS, &(yyvsp[-1].handle), &(yyloc), (yyvsp[0].expr)); + } +#line 9487 "parser_bison.c" + break; + + case 222: /* reset_cmd: "set" set_or_id_spec */ +#line 1752 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_RESET, CMD_OBJ_SET, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9495 "parser_bison.c" + break; + + case 223: /* reset_cmd: "map" set_or_id_spec */ +#line 1756 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_RESET, CMD_OBJ_MAP, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9503 "parser_bison.c" + break; + + case 224: /* flush_cmd: "table" table_spec */ +#line 1762 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_FLUSH, CMD_OBJ_TABLE, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9511 "parser_bison.c" + break; + + case 225: /* flush_cmd: "chain" chain_spec */ +#line 1766 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_FLUSH, CMD_OBJ_CHAIN, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9519 "parser_bison.c" + break; + + case 226: /* flush_cmd: "set" set_spec */ +#line 1770 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_FLUSH, CMD_OBJ_SET, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9527 "parser_bison.c" + break; + + case 227: /* flush_cmd: "map" set_spec */ +#line 1774 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_FLUSH, CMD_OBJ_MAP, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9535 "parser_bison.c" + break; + + case 228: /* flush_cmd: "flow" "table" set_spec */ +#line 1778 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_FLUSH, CMD_OBJ_METER, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9543 "parser_bison.c" + break; + + case 229: /* flush_cmd: "meter" set_spec */ +#line 1782 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_FLUSH, CMD_OBJ_METER, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9551 "parser_bison.c" + break; + + case 230: /* flush_cmd: "ruleset" ruleset_spec */ +#line 1786 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_FLUSH, CMD_OBJ_RULESET, &(yyvsp[0].handle), &(yyloc), NULL); + } +#line 9559 "parser_bison.c" + break; + + case 231: /* rename_cmd: "chain" chain_spec identifier */ +#line 1792 "parser_bison.y" + { + (yyval.cmd) = cmd_alloc(CMD_RENAME, CMD_OBJ_CHAIN, &(yyvsp[-1].handle), &(yyloc), NULL); + (yyval.cmd)->arg = (yyvsp[0].string); + } +#line 9568 "parser_bison.c" + break; + + case 232: /* import_cmd: "ruleset" markup_format */ +#line 1799 "parser_bison.y" + { + struct handle h = { .family = NFPROTO_UNSPEC }; + struct markup *markup = markup_alloc((yyvsp[0].val)); + (yyval.cmd) = cmd_alloc(CMD_IMPORT, CMD_OBJ_MARKUP, &h, &(yyloc), markup); + } +#line 9578 "parser_bison.c" + break; + + case 233: /* import_cmd: markup_format */ +#line 1805 "parser_bison.y" + { + struct handle h = { .family = NFPROTO_UNSPEC }; + struct markup *markup = markup_alloc((yyvsp[0].val)); + (yyval.cmd) = cmd_alloc(CMD_IMPORT, CMD_OBJ_MARKUP, &h, &(yyloc), markup); + } +#line 9588 "parser_bison.c" + break; + + case 234: /* export_cmd: "ruleset" markup_format */ +#line 1813 "parser_bison.y" + { + struct handle h = { .family = NFPROTO_UNSPEC }; + struct markup *markup = markup_alloc((yyvsp[0].val)); + (yyval.cmd) = cmd_alloc(CMD_EXPORT, CMD_OBJ_MARKUP, &h, &(yyloc), markup); + } +#line 9598 "parser_bison.c" + break; + + case 235: /* export_cmd: markup_format */ +#line 1819 "parser_bison.y" + { + struct handle h = { .family = NFPROTO_UNSPEC }; + struct markup *markup = markup_alloc((yyvsp[0].val)); + (yyval.cmd) = cmd_alloc(CMD_EXPORT, CMD_OBJ_MARKUP, &h, &(yyloc), markup); + } +#line 9608 "parser_bison.c" + break; + + case 236: /* monitor_cmd: monitor_event monitor_object monitor_format */ +#line 1827 "parser_bison.y" + { + struct handle h = { .family = NFPROTO_UNSPEC }; + struct monitor *m = monitor_alloc((yyvsp[0].val), (yyvsp[-1].val), (yyvsp[-2].string)); + m->location = (yylsp[-2]); + (yyval.cmd) = cmd_alloc(CMD_MONITOR, CMD_OBJ_MONITOR, &h, &(yyloc), m); + } +#line 9619 "parser_bison.c" + break; + + case 237: /* monitor_event: %empty */ +#line 1835 "parser_bison.y" + { (yyval.string) = NULL; } +#line 9625 "parser_bison.c" + break; + + case 238: /* monitor_event: "string" */ +#line 1836 "parser_bison.y" + { (yyval.string) = (yyvsp[0].string); } +#line 9631 "parser_bison.c" + break; + + case 239: /* monitor_object: %empty */ +#line 1839 "parser_bison.y" + { (yyval.val) = CMD_MONITOR_OBJ_ANY; } +#line 9637 "parser_bison.c" + break; + + case 240: /* monitor_object: "tables" */ +#line 1840 "parser_bison.y" + { (yyval.val) = CMD_MONITOR_OBJ_TABLES; } +#line 9643 "parser_bison.c" + break; + + case 241: /* monitor_object: "chains" */ +#line 1841 "parser_bison.y" + { (yyval.val) = CMD_MONITOR_OBJ_CHAINS; } +#line 9649 "parser_bison.c" + break; + + case 242: /* monitor_object: "sets" */ +#line 1842 "parser_bison.y" + { (yyval.val) = CMD_MONITOR_OBJ_SETS; } +#line 9655 "parser_bison.c" + break; + + case 243: /* monitor_object: "rules" */ +#line 1843 "parser_bison.y" + { (yyval.val) = CMD_MONITOR_OBJ_RULES; } +#line 9661 "parser_bison.c" + break; + + case 244: /* monitor_object: "elements" */ +#line 1844 "parser_bison.y" + { (yyval.val) = CMD_MONITOR_OBJ_ELEMS; } +#line 9667 "parser_bison.c" + break; + + case 245: /* monitor_object: "ruleset" */ +#line 1845 "parser_bison.y" + { (yyval.val) = CMD_MONITOR_OBJ_RULESET; } +#line 9673 "parser_bison.c" + break; + + case 246: /* monitor_object: "trace" */ +#line 1846 "parser_bison.y" + { (yyval.val) = CMD_MONITOR_OBJ_TRACE; } +#line 9679 "parser_bison.c" + break; + + case 247: /* monitor_format: %empty */ +#line 1849 "parser_bison.y" + { (yyval.val) = NFTNL_OUTPUT_DEFAULT; } +#line 9685 "parser_bison.c" + break; + + case 249: /* markup_format: "xml" */ +#line 1853 "parser_bison.y" + { (yyval.val) = __NFT_OUTPUT_NOTSUPP; } +#line 9691 "parser_bison.c" + break; + + case 250: /* markup_format: "json" */ +#line 1854 "parser_bison.y" + { (yyval.val) = NFTNL_OUTPUT_JSON; } +#line 9697 "parser_bison.c" + break; + + case 251: /* markup_format: "vm" "json" */ +#line 1855 "parser_bison.y" + { (yyval.val) = NFTNL_OUTPUT_JSON; } +#line 9703 "parser_bison.c" + break; + + case 252: /* describe_cmd: primary_expr */ +#line 1859 "parser_bison.y" + { + struct handle h = { .family = NFPROTO_UNSPEC }; + (yyval.cmd) = cmd_alloc(CMD_DESCRIBE, CMD_OBJ_EXPR, &h, &(yyloc), NULL); + (yyval.cmd)->expr = (yyvsp[0].expr); + } +#line 9713 "parser_bison.c" + break; + + case 253: /* table_block_alloc: %empty */ +#line 1867 "parser_bison.y" + { + (yyval.table) = table_alloc(); + if (open_scope(state, &(yyval.table)->scope) < 0) { + erec_queue(error(&(yyloc), "too many levels of nesting"), + state->msgs); + state->nerrs++; + } + } +#line 9726 "parser_bison.c" + break; + + case 254: /* table_options: "flags" "string" */ +#line 1878 "parser_bison.y" + { + if (strcmp((yyvsp[0].string), "dormant") == 0) { + (yyvsp[-2].table)->flags |= TABLE_F_DORMANT; + xfree((yyvsp[0].string)); + } else if (strcmp((yyvsp[0].string), "owner") == 0) { + (yyvsp[-2].table)->flags |= TABLE_F_OWNER; + xfree((yyvsp[0].string)); + } else { + erec_queue(error(&(yylsp[0]), "unknown table option %s", (yyvsp[0].string)), + state->msgs); + xfree((yyvsp[0].string)); + YYERROR; + } + } +#line 9745 "parser_bison.c" + break; + + case 255: /* table_options: comment_spec */ +#line 1893 "parser_bison.y" + { + if (already_set((yyvsp[-1].table)->comment, &(yyloc), state)) { + xfree((yyvsp[0].string)); + YYERROR; + } + (yyvsp[-1].table)->comment = (yyvsp[0].string); + } +#line 9757 "parser_bison.c" + break; + + case 256: /* table_block: %empty */ +#line 1902 "parser_bison.y" + { (yyval.table) = (yyvsp[(-1) - (0)].table); } +#line 9763 "parser_bison.c" + break; + + case 260: /* table_block: table_block "chain" chain_identifier chain_block_alloc '{' chain_block '}' stmt_separator */ +#line 1909 "parser_bison.y" + { + (yyvsp[-4].chain)->location = (yylsp[-5]); + handle_merge(&(yyvsp[-4].chain)->handle, &(yyvsp[-5].handle)); + handle_free(&(yyvsp[-5].handle)); + close_scope(state); + list_add_tail(&(yyvsp[-4].chain)->list, &(yyvsp[-7].table)->chains); + (yyval.table) = (yyvsp[-7].table); + } +#line 9776 "parser_bison.c" + break; + + case 261: /* table_block: table_block "set" set_identifier set_block_alloc '{' set_block '}' stmt_separator */ +#line 1920 "parser_bison.y" + { + (yyvsp[-4].set)->location = (yylsp[-5]); + handle_merge(&(yyvsp[-4].set)->handle, &(yyvsp[-5].handle)); + handle_free(&(yyvsp[-5].handle)); + list_add_tail(&(yyvsp[-4].set)->list, &(yyvsp[-7].table)->sets); + (yyval.table) = (yyvsp[-7].table); + } +#line 9788 "parser_bison.c" + break; + + case 262: /* table_block: table_block "map" set_identifier map_block_alloc '{' map_block '}' stmt_separator */ +#line 1930 "parser_bison.y" + { + (yyvsp[-4].set)->location = (yylsp[-5]); + handle_merge(&(yyvsp[-4].set)->handle, &(yyvsp[-5].handle)); + handle_free(&(yyvsp[-5].handle)); + list_add_tail(&(yyvsp[-4].set)->list, &(yyvsp[-7].table)->sets); + (yyval.table) = (yyvsp[-7].table); + } +#line 9800 "parser_bison.c" + break; + + case 263: /* table_block: table_block "flowtable" flowtable_identifier flowtable_block_alloc '{' flowtable_block '}' stmt_separator */ +#line 1941 "parser_bison.y" + { + (yyvsp[-4].flowtable)->location = (yylsp[-5]); + handle_merge(&(yyvsp[-4].flowtable)->handle, &(yyvsp[-5].handle)); + handle_free(&(yyvsp[-5].handle)); + list_add_tail(&(yyvsp[-4].flowtable)->list, &(yyvsp[-7].table)->flowtables); + (yyval.table) = (yyvsp[-7].table); + } +#line 9812 "parser_bison.c" + break; + + case 264: /* table_block: table_block "counter" obj_identifier obj_block_alloc '{' counter_block '}' stmt_separator close_scope_counter */ +#line 1951 "parser_bison.y" + { + (yyvsp[-5].obj)->location = (yylsp[-6]); + (yyvsp[-5].obj)->type = NFT_OBJECT_COUNTER; + handle_merge(&(yyvsp[-5].obj)->handle, &(yyvsp[-6].handle)); + handle_free(&(yyvsp[-6].handle)); + list_add_tail(&(yyvsp[-5].obj)->list, &(yyvsp[-8].table)->objs); + (yyval.table) = (yyvsp[-8].table); + } +#line 9825 "parser_bison.c" + break; + + case 265: /* table_block: table_block "quota" obj_identifier obj_block_alloc '{' quota_block '}' stmt_separator close_scope_quota */ +#line 1962 "parser_bison.y" + { + (yyvsp[-5].obj)->location = (yylsp[-6]); + (yyvsp[-5].obj)->type = NFT_OBJECT_QUOTA; + handle_merge(&(yyvsp[-5].obj)->handle, &(yyvsp[-6].handle)); + handle_free(&(yyvsp[-6].handle)); + list_add_tail(&(yyvsp[-5].obj)->list, &(yyvsp[-8].table)->objs); + (yyval.table) = (yyvsp[-8].table); + } +#line 9838 "parser_bison.c" + break; + + case 266: /* table_block: table_block "ct" "helper" obj_identifier obj_block_alloc '{' ct_helper_block '}' close_scope_ct stmt_separator */ +#line 1971 "parser_bison.y" + { + (yyvsp[-5].obj)->location = (yylsp[-6]); + (yyvsp[-5].obj)->type = NFT_OBJECT_CT_HELPER; + handle_merge(&(yyvsp[-5].obj)->handle, &(yyvsp[-6].handle)); + handle_free(&(yyvsp[-6].handle)); + list_add_tail(&(yyvsp[-5].obj)->list, &(yyvsp[-9].table)->objs); + (yyval.table) = (yyvsp[-9].table); + } +#line 9851 "parser_bison.c" + break; + + case 267: /* table_block: table_block "ct" "timeout" obj_identifier obj_block_alloc '{' ct_timeout_block '}' close_scope_ct stmt_separator */ +#line 1980 "parser_bison.y" + { + (yyvsp[-5].obj)->location = (yylsp[-6]); + (yyvsp[-5].obj)->type = NFT_OBJECT_CT_TIMEOUT; + handle_merge(&(yyvsp[-5].obj)->handle, &(yyvsp[-6].handle)); + handle_free(&(yyvsp[-6].handle)); + list_add_tail(&(yyvsp[-5].obj)->list, &(yyvsp[-9].table)->objs); + (yyval.table) = (yyvsp[-9].table); + } +#line 9864 "parser_bison.c" + break; + + case 268: /* table_block: table_block "ct" "expectation" obj_identifier obj_block_alloc '{' ct_expect_block '}' close_scope_ct stmt_separator */ +#line 1989 "parser_bison.y" + { + (yyvsp[-5].obj)->location = (yylsp[-6]); + (yyvsp[-5].obj)->type = NFT_OBJECT_CT_EXPECT; + handle_merge(&(yyvsp[-5].obj)->handle, &(yyvsp[-6].handle)); + handle_free(&(yyvsp[-6].handle)); + list_add_tail(&(yyvsp[-5].obj)->list, &(yyvsp[-9].table)->objs); + (yyval.table) = (yyvsp[-9].table); + } +#line 9877 "parser_bison.c" + break; + + case 269: /* table_block: table_block "limit" obj_identifier obj_block_alloc '{' limit_block '}' stmt_separator close_scope_limit */ +#line 2000 "parser_bison.y" + { + (yyvsp[-5].obj)->location = (yylsp[-6]); + (yyvsp[-5].obj)->type = NFT_OBJECT_LIMIT; + handle_merge(&(yyvsp[-5].obj)->handle, &(yyvsp[-6].handle)); + handle_free(&(yyvsp[-6].handle)); + list_add_tail(&(yyvsp[-5].obj)->list, &(yyvsp[-8].table)->objs); + (yyval.table) = (yyvsp[-8].table); + } +#line 9890 "parser_bison.c" + break; + + case 270: /* table_block: table_block "secmark" obj_identifier obj_block_alloc '{' secmark_block '}' stmt_separator close_scope_secmark */ +#line 2011 "parser_bison.y" + { + (yyvsp[-5].obj)->location = (yylsp[-6]); + (yyvsp[-5].obj)->type = NFT_OBJECT_SECMARK; + handle_merge(&(yyvsp[-5].obj)->handle, &(yyvsp[-6].handle)); + handle_free(&(yyvsp[-6].handle)); + list_add_tail(&(yyvsp[-5].obj)->list, &(yyvsp[-8].table)->objs); + (yyval.table) = (yyvsp[-8].table); + } +#line 9903 "parser_bison.c" + break; + + case 271: /* table_block: table_block "synproxy" obj_identifier obj_block_alloc '{' synproxy_block '}' stmt_separator close_scope_synproxy */ +#line 2022 "parser_bison.y" + { + (yyvsp[-5].obj)->location = (yylsp[-6]); + (yyvsp[-5].obj)->type = NFT_OBJECT_SYNPROXY; + handle_merge(&(yyvsp[-5].obj)->handle, &(yyvsp[-6].handle)); + handle_free(&(yyvsp[-6].handle)); + list_add_tail(&(yyvsp[-5].obj)->list, &(yyvsp[-8].table)->objs); + (yyval.table) = (yyvsp[-8].table); + } +#line 9916 "parser_bison.c" + break; + + case 272: /* chain_block_alloc: %empty */ +#line 2033 "parser_bison.y" + { + (yyval.chain) = chain_alloc(); + if (open_scope(state, &(yyval.chain)->scope) < 0) { + erec_queue(error(&(yyloc), "too many levels of nesting"), + state->msgs); + state->nerrs++; + } + } +#line 9929 "parser_bison.c" + break; + + case 273: /* chain_block: %empty */ +#line 2043 "parser_bison.y" + { (yyval.chain) = (yyvsp[(-1) - (0)].chain); } +#line 9935 "parser_bison.c" + break; + + case 279: /* chain_block: chain_block rule stmt_separator */ +#line 2050 "parser_bison.y" + { + list_add_tail(&(yyvsp[-1].rule)->list, &(yyvsp[-2].chain)->rules); + (yyval.chain) = (yyvsp[-2].chain); + } +#line 9944 "parser_bison.c" + break; + + case 280: /* chain_block: chain_block "devices" '=' flowtable_expr stmt_separator */ +#line 2055 "parser_bison.y" + { + if ((yyval.chain)->dev_expr) { + list_splice_init(&(yyvsp[-1].expr)->expressions, &(yyval.chain)->dev_expr->expressions); + expr_free((yyvsp[-1].expr)); + break; + } + (yyval.chain)->dev_expr = (yyvsp[-1].expr); + } +#line 9957 "parser_bison.c" + break; + + case 281: /* chain_block: chain_block comment_spec stmt_separator */ +#line 2064 "parser_bison.y" + { + if (already_set((yyvsp[-2].chain)->comment, &(yylsp[-1]), state)) { + xfree((yyvsp[-1].string)); + YYERROR; + } + (yyvsp[-2].chain)->comment = (yyvsp[-1].string); + } +#line 9969 "parser_bison.c" + break; + + case 282: /* subchain_block: %empty */ +#line 2073 "parser_bison.y" + { (yyval.chain) = (yyvsp[(-1) - (0)].chain); } +#line 9975 "parser_bison.c" + break; + + case 284: /* subchain_block: subchain_block rule stmt_separator */ +#line 2076 "parser_bison.y" + { + list_add_tail(&(yyvsp[-1].rule)->list, &(yyvsp[-2].chain)->rules); + (yyval.chain) = (yyvsp[-2].chain); + } +#line 9984 "parser_bison.c" + break; + + case 285: /* typeof_data_expr: primary_expr */ +#line 2083 "parser_bison.y" + { + struct expr *e = (yyvsp[0].expr); + + if (e->etype == EXPR_SYMBOL && + strcmp("verdict", e->identifier) == 0) { + struct expr *v = verdict_expr_alloc(&(yylsp[0]), NF_ACCEPT, NULL); + + expr_free(e); + v->flags &= ~EXPR_F_CONSTANT; + e = v; + } + + if (expr_ops(e)->build_udata == NULL) { + erec_queue(error(&(yylsp[0]), "map data type '%s' lacks typeof serialization", expr_ops(e)->name), + state->msgs); + expr_free(e); + YYERROR; + } + (yyval.expr) = e; + } +#line 10009 "parser_bison.c" + break; + + case 286: /* typeof_data_expr: typeof_expr "." primary_expr */ +#line 2104 "parser_bison.y" + { + struct location rhs[] = { + [1] = (yylsp[-1]), + [2] = (yylsp[0]), + }; + + (yyval.expr) = handle_concat_expr(&(yyloc), (yyval.expr), (yyvsp[-2].expr), (yyvsp[0].expr), rhs); + } +#line 10022 "parser_bison.c" + break; + + case 287: /* typeof_expr: primary_expr */ +#line 2115 "parser_bison.y" + { + if (expr_ops((yyvsp[0].expr))->build_udata == NULL) { + erec_queue(error(&(yylsp[0]), "primary expression type '%s' lacks typeof serialization", expr_ops((yyvsp[0].expr))->name), + state->msgs); + expr_free((yyvsp[0].expr)); + YYERROR; + } + + (yyval.expr) = (yyvsp[0].expr); + } +#line 10037 "parser_bison.c" + break; + + case 288: /* typeof_expr: typeof_expr "." primary_expr */ +#line 2126 "parser_bison.y" + { + struct location rhs[] = { + [1] = (yylsp[-1]), + [2] = (yylsp[0]), + }; + + (yyval.expr) = handle_concat_expr(&(yyloc), (yyval.expr), (yyvsp[-2].expr), (yyvsp[0].expr), rhs); + } +#line 10050 "parser_bison.c" + break; + + case 289: /* set_block_alloc: %empty */ +#line 2138 "parser_bison.y" + { + (yyval.set) = set_alloc(&internal_location); + } +#line 10058 "parser_bison.c" + break; + + case 290: /* set_block: %empty */ +#line 2143 "parser_bison.y" + { (yyval.set) = (yyvsp[(-1) - (0)].set); } +#line 10064 "parser_bison.c" + break; + + case 293: /* set_block: set_block "type" data_type_expr stmt_separator close_scope_type */ +#line 2147 "parser_bison.y" + { + (yyvsp[-4].set)->key = (yyvsp[-2].expr); + (yyval.set) = (yyvsp[-4].set); + } +#line 10073 "parser_bison.c" + break; + + case 294: /* set_block: set_block "typeof" typeof_expr stmt_separator */ +#line 2152 "parser_bison.y" + { + (yyvsp[-3].set)->key = (yyvsp[-1].expr); + datatype_set((yyvsp[-3].set)->key, (yyvsp[-1].expr)->dtype); + (yyval.set) = (yyvsp[-3].set); + } +#line 10083 "parser_bison.c" + break; + + case 295: /* set_block: set_block "flags" set_flag_list stmt_separator */ +#line 2158 "parser_bison.y" + { + (yyvsp[-3].set)->flags = (yyvsp[-1].val); + (yyval.set) = (yyvsp[-3].set); + } +#line 10092 "parser_bison.c" + break; + + case 296: /* set_block: set_block "timeout" time_spec stmt_separator */ +#line 2163 "parser_bison.y" + { + (yyvsp[-3].set)->timeout = (yyvsp[-1].val); + (yyval.set) = (yyvsp[-3].set); + } +#line 10101 "parser_bison.c" + break; + + case 297: /* set_block: set_block "gc-interval" time_spec stmt_separator */ +#line 2168 "parser_bison.y" + { + (yyvsp[-3].set)->gc_int = (yyvsp[-1].val); + (yyval.set) = (yyvsp[-3].set); + } +#line 10110 "parser_bison.c" + break; + + case 298: /* set_block: set_block stateful_stmt_list stmt_separator */ +#line 2173 "parser_bison.y" + { + list_splice_tail((yyvsp[-1].list), &(yyvsp[-2].set)->stmt_list); + (yyval.set) = (yyvsp[-2].set); + free((yyvsp[-1].list)); + } +#line 10120 "parser_bison.c" + break; + + case 299: /* set_block: set_block "elements" '=' set_block_expr */ +#line 2179 "parser_bison.y" + { + (yyvsp[-3].set)->init = (yyvsp[0].expr); + (yyval.set) = (yyvsp[-3].set); + } +#line 10129 "parser_bison.c" + break; + + case 300: /* set_block: set_block "auto-merge" */ +#line 2184 "parser_bison.y" + { + (yyvsp[-1].set)->automerge = true; + (yyval.set) = (yyvsp[-1].set); + } +#line 10138 "parser_bison.c" + break; + + case 302: /* set_block: set_block comment_spec stmt_separator */ +#line 2190 "parser_bison.y" + { + if (already_set((yyvsp[-2].set)->comment, &(yylsp[-1]), state)) { + xfree((yyvsp[-1].string)); + YYERROR; + } + (yyvsp[-2].set)->comment = (yyvsp[-1].string); + (yyval.set) = (yyvsp[-2].set); + } +#line 10151 "parser_bison.c" + break; + + case 305: /* set_flag_list: set_flag_list "comma" set_flag */ +#line 2205 "parser_bison.y" + { + (yyval.val) = (yyvsp[-2].val) | (yyvsp[0].val); + } +#line 10159 "parser_bison.c" + break; + + case 307: /* set_flag: "constant" */ +#line 2211 "parser_bison.y" + { (yyval.val) = NFT_SET_CONSTANT; } +#line 10165 "parser_bison.c" + break; + + case 308: /* set_flag: "interval" */ +#line 2212 "parser_bison.y" + { (yyval.val) = NFT_SET_INTERVAL; } +#line 10171 "parser_bison.c" + break; + + case 309: /* set_flag: "timeout" */ +#line 2213 "parser_bison.y" + { (yyval.val) = NFT_SET_TIMEOUT; } +#line 10177 "parser_bison.c" + break; + + case 310: /* set_flag: "dynamic" */ +#line 2214 "parser_bison.y" + { (yyval.val) = NFT_SET_EVAL; } +#line 10183 "parser_bison.c" + break; + + case 311: /* map_block_alloc: %empty */ +#line 2218 "parser_bison.y" + { + (yyval.set) = set_alloc(&internal_location); + } +#line 10191 "parser_bison.c" + break; + + case 312: /* map_block_obj_type: "counter" close_scope_counter */ +#line 2223 "parser_bison.y" + { (yyval.val) = NFT_OBJECT_COUNTER; } +#line 10197 "parser_bison.c" + break; + + case 313: /* map_block_obj_type: "quota" close_scope_quota */ +#line 2224 "parser_bison.y" + { (yyval.val) = NFT_OBJECT_QUOTA; } +#line 10203 "parser_bison.c" + break; + + case 314: /* map_block_obj_type: "limit" close_scope_limit */ +#line 2225 "parser_bison.y" + { (yyval.val) = NFT_OBJECT_LIMIT; } +#line 10209 "parser_bison.c" + break; + + case 315: /* map_block_obj_type: "secmark" close_scope_secmark */ +#line 2226 "parser_bison.y" + { (yyval.val) = NFT_OBJECT_SECMARK; } +#line 10215 "parser_bison.c" + break; + + case 316: /* map_block_obj_type: "synproxy" close_scope_synproxy */ +#line 2227 "parser_bison.y" + { (yyval.val) = NFT_OBJECT_SYNPROXY; } +#line 10221 "parser_bison.c" + break; + + case 317: /* map_block_data_interval: "interval" */ +#line 2230 "parser_bison.y" + { (yyval.val) = EXPR_F_INTERVAL; } +#line 10227 "parser_bison.c" + break; + + case 318: /* map_block_data_interval: %empty */ +#line 2231 "parser_bison.y" + { (yyval.val) = 0; } +#line 10233 "parser_bison.c" + break; + + case 319: /* map_block: %empty */ +#line 2234 "parser_bison.y" + { (yyval.set) = (yyvsp[(-1) - (0)].set); } +#line 10239 "parser_bison.c" + break; + + case 322: /* map_block: map_block "timeout" time_spec stmt_separator */ +#line 2238 "parser_bison.y" + { + (yyvsp[-3].set)->timeout = (yyvsp[-1].val); + (yyval.set) = (yyvsp[-3].set); + } +#line 10248 "parser_bison.c" + break; + + case 323: /* map_block: map_block "gc-interval" time_spec stmt_separator */ +#line 2243 "parser_bison.y" + { + (yyvsp[-3].set)->gc_int = (yyvsp[-1].val); + (yyval.set) = (yyvsp[-3].set); + } +#line 10257 "parser_bison.c" + break; + + case 324: /* map_block: map_block "type" data_type_expr "colon" map_block_data_interval data_type_expr stmt_separator close_scope_type */ +#line 2250 "parser_bison.y" + { + (yyvsp[-7].set)->key = (yyvsp[-5].expr); + (yyvsp[-7].set)->data = (yyvsp[-2].expr); + (yyvsp[-7].set)->data->flags |= (yyvsp[-3].val); + + (yyvsp[-7].set)->flags |= NFT_SET_MAP; + (yyval.set) = (yyvsp[-7].set); + } +#line 10270 "parser_bison.c" + break; + + case 325: /* map_block: map_block "typeof" typeof_expr "colon" typeof_data_expr stmt_separator */ +#line 2261 "parser_bison.y" + { + (yyvsp[-5].set)->key = (yyvsp[-3].expr); + datatype_set((yyvsp[-5].set)->key, (yyvsp[-3].expr)->dtype); + (yyvsp[-5].set)->data = (yyvsp[-1].expr); + + (yyvsp[-5].set)->flags |= NFT_SET_MAP; + (yyval.set) = (yyvsp[-5].set); + } +#line 10283 "parser_bison.c" + break; + + case 326: /* map_block: map_block "typeof" typeof_expr "colon" "interval" typeof_expr stmt_separator */ +#line 2272 "parser_bison.y" + { + (yyvsp[-6].set)->key = (yyvsp[-4].expr); + datatype_set((yyvsp[-6].set)->key, (yyvsp[-4].expr)->dtype); + (yyvsp[-6].set)->data = (yyvsp[-1].expr); + (yyvsp[-6].set)->data->flags |= EXPR_F_INTERVAL; + + (yyvsp[-6].set)->flags |= NFT_SET_MAP; + (yyval.set) = (yyvsp[-6].set); + } +#line 10297 "parser_bison.c" + break; + + case 327: /* map_block: map_block "type" data_type_expr "colon" map_block_obj_type stmt_separator close_scope_type */ +#line 2284 "parser_bison.y" + { + (yyvsp[-6].set)->key = (yyvsp[-4].expr); + (yyvsp[-6].set)->objtype = (yyvsp[-2].val); + (yyvsp[-6].set)->flags |= NFT_SET_OBJECT; + (yyval.set) = (yyvsp[-6].set); + } +#line 10308 "parser_bison.c" + break; + + case 328: /* map_block: map_block "flags" set_flag_list stmt_separator */ +#line 2291 "parser_bison.y" + { + (yyvsp[-3].set)->flags |= (yyvsp[-1].val); + (yyval.set) = (yyvsp[-3].set); + } +#line 10317 "parser_bison.c" + break; + + case 329: /* map_block: map_block stateful_stmt_list stmt_separator */ +#line 2296 "parser_bison.y" + { + list_splice_tail((yyvsp[-1].list), &(yyvsp[-2].set)->stmt_list); + (yyval.set) = (yyvsp[-2].set); + free((yyvsp[-1].list)); + } +#line 10327 "parser_bison.c" + break; + + case 330: /* map_block: map_block "elements" '=' set_block_expr */ +#line 2302 "parser_bison.y" + { + (yyvsp[-3].set)->init = (yyvsp[0].expr); + (yyval.set) = (yyvsp[-3].set); + } +#line 10336 "parser_bison.c" + break; + + case 331: /* map_block: map_block comment_spec stmt_separator */ +#line 2307 "parser_bison.y" + { + if (already_set((yyvsp[-2].set)->comment, &(yylsp[-1]), state)) { + xfree((yyvsp[-1].string)); + YYERROR; + } + (yyvsp[-2].set)->comment = (yyvsp[-1].string); + (yyval.set) = (yyvsp[-2].set); + } +#line 10349 "parser_bison.c" + break; + + case 333: /* set_mechanism: "policy" set_policy_spec close_scope_policy */ +#line 2319 "parser_bison.y" + { + (yyvsp[-3].set)->policy = (yyvsp[-1].val); + } +#line 10357 "parser_bison.c" + break; + + case 334: /* set_mechanism: "size" "number" */ +#line 2323 "parser_bison.y" + { + (yyvsp[-2].set)->desc.size = (yyvsp[0].val); + } +#line 10365 "parser_bison.c" + break; + + case 335: /* set_policy_spec: "performance" */ +#line 2328 "parser_bison.y" + { (yyval.val) = NFT_SET_POL_PERFORMANCE; } +#line 10371 "parser_bison.c" + break; + + case 336: /* set_policy_spec: "memory" */ +#line 2329 "parser_bison.y" + { (yyval.val) = NFT_SET_POL_MEMORY; } +#line 10377 "parser_bison.c" + break; + + case 337: /* flowtable_block_alloc: %empty */ +#line 2333 "parser_bison.y" + { + (yyval.flowtable) = flowtable_alloc(&internal_location); + } +#line 10385 "parser_bison.c" + break; + + case 338: /* flowtable_block: %empty */ +#line 2338 "parser_bison.y" + { (yyval.flowtable) = (yyvsp[(-1) - (0)].flowtable); } +#line 10391 "parser_bison.c" + break; + + case 341: /* flowtable_block: flowtable_block "hook" "string" prio_spec stmt_separator */ +#line 2342 "parser_bison.y" + { + (yyval.flowtable)->hook.loc = (yylsp[-2]); + (yyval.flowtable)->hook.name = chain_hookname_lookup((yyvsp[-2].string)); + if ((yyval.flowtable)->hook.name == NULL) { + erec_queue(error(&(yylsp[-2]), "unknown chain hook"), + state->msgs); + xfree((yyvsp[-2].string)); + YYERROR; + } + xfree((yyvsp[-2].string)); + + (yyval.flowtable)->priority = (yyvsp[-1].prio_spec); + } +#line 10409 "parser_bison.c" + break; + + case 342: /* flowtable_block: flowtable_block "devices" '=' flowtable_expr stmt_separator */ +#line 2356 "parser_bison.y" + { + (yyval.flowtable)->dev_expr = (yyvsp[-1].expr); + } +#line 10417 "parser_bison.c" + break; + + case 343: /* flowtable_block: flowtable_block "counter" close_scope_counter */ +#line 2360 "parser_bison.y" + { + (yyval.flowtable)->flags |= NFT_FLOWTABLE_COUNTER; + } +#line 10425 "parser_bison.c" + break; + + case 344: /* flowtable_block: flowtable_block "flags" "offload" stmt_separator */ +#line 2364 "parser_bison.y" + { + (yyval.flowtable)->flags |= FLOWTABLE_F_HW_OFFLOAD; + } +#line 10433 "parser_bison.c" + break; + + case 345: /* flowtable_expr: '{' flowtable_list_expr '}' */ +#line 2370 "parser_bison.y" + { + (yyvsp[-1].expr)->location = (yyloc); + (yyval.expr) = (yyvsp[-1].expr); + } +#line 10442 "parser_bison.c" + break; + + case 346: /* flowtable_expr: variable_expr */ +#line 2375 "parser_bison.y" + { + (yyvsp[0].expr)->location = (yyloc); + (yyval.expr) = (yyvsp[0].expr); + } +#line 10451 "parser_bison.c" + break; + + case 347: /* flowtable_list_expr: flowtable_expr_member */ +#line 2382 "parser_bison.y" + { + (yyval.expr) = compound_expr_alloc(&(yyloc), EXPR_LIST); + compound_expr_add((yyval.expr), (yyvsp[0].expr)); + } +#line 10460 "parser_bison.c" + break; + + case 348: /* flowtable_list_expr: flowtable_list_expr "comma" flowtable_expr_member */ +#line 2387 "parser_bison.y" + { + compound_expr_add((yyvsp[-2].expr), (yyvsp[0].expr)); + (yyval.expr) = (yyvsp[-2].expr); + } +#line 10469 "parser_bison.c" + break; + + case 350: /* flowtable_expr_member: "quoted string" */ +#line 2395 "parser_bison.y" + { + struct expr *expr = ifname_expr_alloc(&(yyloc), state->msgs, (yyvsp[0].string)); + + if (!expr) + YYERROR; + + (yyval.expr) = expr; + } +#line 10482 "parser_bison.c" + break; + + case 351: /* flowtable_expr_member: "string" */ +#line 2404 "parser_bison.y" + { + struct expr *expr = ifname_expr_alloc(&(yyloc), state->msgs, (yyvsp[0].string)); + + if (!expr) + YYERROR; + + (yyval.expr) = expr; + } +#line 10495 "parser_bison.c" + break; + + case 352: /* flowtable_expr_member: variable_expr */ +#line 2413 "parser_bison.y" + { + datatype_set((yyvsp[0].expr)->sym->expr, &ifname_type); + (yyval.expr) = (yyvsp[0].expr); + } +#line 10504 "parser_bison.c" + break; + + case 353: /* data_type_atom_expr: type_identifier */ +#line 2420 "parser_bison.y" + { + const struct datatype *dtype = datatype_lookup_byname((yyvsp[0].string)); + if (dtype == NULL) { + erec_queue(error(&(yylsp[0]), "unknown datatype %s", (yyvsp[0].string)), + state->msgs); + xfree((yyvsp[0].string)); + YYERROR; + } + (yyval.expr) = constant_expr_alloc(&(yylsp[0]), dtype, dtype->byteorder, + dtype->size, NULL); + xfree((yyvsp[0].string)); + } +#line 10521 "parser_bison.c" + break; + + case 354: /* data_type_atom_expr: "time" */ +#line 2433 "parser_bison.y" + { + (yyval.expr) = constant_expr_alloc(&(yylsp[0]), &time_type, time_type.byteorder, + time_type.size, NULL); + } +#line 10530 "parser_bison.c" + break; + + case 356: /* data_type_expr: data_type_expr "." data_type_atom_expr */ +#line 2441 "parser_bison.y" + { + struct location rhs[] = { + [1] = (yylsp[-1]), + [2] = (yylsp[0]), + }; + + (yyval.expr) = handle_concat_expr(&(yyloc), (yyval.expr), (yyvsp[-2].expr), (yyvsp[0].expr), rhs); + } +#line 10543 "parser_bison.c" + break; + + case 357: /* obj_block_alloc: %empty */ +#line 2452 "parser_bison.y" + { + (yyval.obj) = obj_alloc(&internal_location); + } +#line 10551 "parser_bison.c" + break; + + case 358: /* counter_block: %empty */ +#line 2457 "parser_bison.y" + { (yyval.obj) = (yyvsp[(-1) - (0)].obj); } +#line 10557 "parser_bison.c" + break; + + case 361: /* counter_block: counter_block counter_config */ +#line 2461 "parser_bison.y" + { + (yyval.obj) = (yyvsp[-1].obj); + } +#line 10565 "parser_bison.c" + break; + + case 362: /* counter_block: counter_block comment_spec */ +#line 2465 "parser_bison.y" + { + if (already_set((yyvsp[-1].obj)->comment, &(yylsp[0]), state)) { + xfree((yyvsp[0].string)); + YYERROR; + } + (yyvsp[-1].obj)->comment = (yyvsp[0].string); + } +#line 10577 "parser_bison.c" + break; + + case 363: /* quota_block: %empty */ +#line 2474 "parser_bison.y" + { (yyval.obj) = (yyvsp[(-1) - (0)].obj); } +#line 10583 "parser_bison.c" + break; + + case 366: /* quota_block: quota_block quota_config */ +#line 2478 "parser_bison.y" + { + (yyval.obj) = (yyvsp[-1].obj); + } +#line 10591 "parser_bison.c" + break; + + case 367: /* quota_block: quota_block comment_spec */ +#line 2482 "parser_bison.y" + { + if (already_set((yyvsp[-1].obj)->comment, &(yylsp[0]), state)) { + xfree((yyvsp[0].string)); + YYERROR; + } + (yyvsp[-1].obj)->comment = (yyvsp[0].string); + } +#line 10603 "parser_bison.c" + break; + + case 368: /* ct_helper_block: %empty */ +#line 2491 "parser_bison.y" + { (yyval.obj) = (yyvsp[(-1) - (0)].obj); } +#line 10609 "parser_bison.c" + break; + + case 371: /* ct_helper_block: ct_helper_block ct_helper_config */ +#line 2495 "parser_bison.y" + { + (yyval.obj) = (yyvsp[-1].obj); + } +#line 10617 "parser_bison.c" + break; + + case 372: /* ct_helper_block: ct_helper_block comment_spec */ +#line 2499 "parser_bison.y" + { + if (already_set((yyvsp[-1].obj)->comment, &(yylsp[0]), state)) { + xfree((yyvsp[0].string)); + YYERROR; + } + (yyvsp[-1].obj)->comment = (yyvsp[0].string); + } +#line 10629 "parser_bison.c" + break; + + case 373: /* ct_timeout_block: %empty */ +#line 2509 "parser_bison.y" + { + (yyval.obj) = (yyvsp[(-1) - (0)].obj); + init_list_head(&(yyval.obj)->ct_timeout.timeout_list); + } +#line 10638 "parser_bison.c" + break; + + case 376: /* ct_timeout_block: ct_timeout_block ct_timeout_config */ +#line 2516 "parser_bison.y" + { + (yyval.obj) = (yyvsp[-1].obj); + } +#line 10646 "parser_bison.c" + break; + + case 377: /* ct_timeout_block: ct_timeout_block comment_spec */ +#line 2520 "parser_bison.y" + { + if (already_set((yyvsp[-1].obj)->comment, &(yylsp[0]), state)) { + xfree((yyvsp[0].string)); + YYERROR; + } + (yyvsp[-1].obj)->comment = (yyvsp[0].string); + } +#line 10658 "parser_bison.c" + break; + + case 378: /* ct_expect_block: %empty */ +#line 2529 "parser_bison.y" + { (yyval.obj) = (yyvsp[(-1) - (0)].obj); } +#line 10664 "parser_bison.c" + break; + + case 381: /* ct_expect_block: ct_expect_block ct_expect_config */ +#line 2533 "parser_bison.y" + { + (yyval.obj) = (yyvsp[-1].obj); + } +#line 10672 "parser_bison.c" + break; + + case 382: /* ct_expect_block: ct_expect_block comment_spec */ +#line 2537 "parser_bison.y" + { + if (already_set((yyvsp[-1].obj)->comment, &(yylsp[0]), state)) { + xfree((yyvsp[0].string)); + YYERROR; + } + (yyvsp[-1].obj)->comment = (yyvsp[0].string); + } +#line 10684 "parser_bison.c" + break; + + case 383: /* limit_block: %empty */ +#line 2546 "parser_bison.y" + { (yyval.obj) = (yyvsp[(-1) - (0)].obj); } +#line 10690 "parser_bison.c" + break; + + case 386: /* limit_block: limit_block limit_config */ +#line 2550 "parser_bison.y" + { + (yyval.obj) = (yyvsp[-1].obj); + } +#line 10698 "parser_bison.c" + break; + + case 387: /* limit_block: limit_block comment_spec */ +#line 2554 "parser_bison.y" + { + if (already_set((yyvsp[-1].obj)->comment, &(yylsp[0]), state)) { + xfree((yyvsp[0].string)); + YYERROR; + } + (yyvsp[-1].obj)->comment = (yyvsp[0].string); + } +#line 10710 "parser_bison.c" + break; + + case 388: /* secmark_block: %empty */ +#line 2563 "parser_bison.y" + { (yyval.obj) = (yyvsp[(-1) - (0)].obj); } +#line 10716 "parser_bison.c" + break; + + case 391: /* secmark_block: secmark_block secmark_config */ +#line 2567 "parser_bison.y" + { + (yyval.obj) = (yyvsp[-1].obj); + } +#line 10724 "parser_bison.c" + break; + + case 392: /* secmark_block: secmark_block comment_spec */ +#line 2571 "parser_bison.y" + { + if (already_set((yyvsp[-1].obj)->comment, &(yylsp[0]), state)) { + xfree((yyvsp[0].string)); + YYERROR; + } + (yyvsp[-1].obj)->comment = (yyvsp[0].string); + } +#line 10736 "parser_bison.c" + break; + + case 393: /* synproxy_block: %empty */ +#line 2580 "parser_bison.y" + { (yyval.obj) = (yyvsp[(-1) - (0)].obj); } +#line 10742 "parser_bison.c" + break; + + case 396: /* synproxy_block: synproxy_block synproxy_config */ +#line 2584 "parser_bison.y" + { + (yyval.obj) = (yyvsp[-1].obj); + } +#line 10750 "parser_bison.c" + break; + + case 397: /* synproxy_block: synproxy_block comment_spec */ +#line 2588 "parser_bison.y" + { + if (already_set((yyvsp[-1].obj)->comment, &(yylsp[0]), state)) { + xfree((yyvsp[0].string)); + YYERROR; + } + (yyvsp[-1].obj)->comment = (yyvsp[0].string); + } +#line 10762 "parser_bison.c" + break; + + case 398: /* type_identifier: "string" */ +#line 2597 "parser_bison.y" + { (yyval.string) = (yyvsp[0].string); } +#line 10768 "parser_bison.c" + break; + + case 399: /* type_identifier: "mark" */ +#line 2598 "parser_bison.y" + { (yyval.string) = xstrdup("mark"); } +#line 10774 "parser_bison.c" + break; + + case 400: /* type_identifier: "dscp" */ +#line 2599 "parser_bison.y" + { (yyval.string) = xstrdup("dscp"); } +#line 10780 "parser_bison.c" + break; + + case 401: /* type_identifier: "ecn" */ +#line 2600 "parser_bison.y" + { (yyval.string) = xstrdup("ecn"); } +#line 10786 "parser_bison.c" + break; + + case 402: /* type_identifier: "classid" */ +#line 2601 "parser_bison.y" + { (yyval.string) = xstrdup("classid"); } +#line 10792 "parser_bison.c" + break; + + case 403: /* hook_spec: "type" close_scope_type "string" "hook" "string" dev_spec prio_spec */ +#line 2605 "parser_bison.y" + { + const char *chain_type = chain_type_name_lookup((yyvsp[-4].string)); + + if (chain_type == NULL) { + erec_queue(error(&(yylsp[-4]), "unknown chain type"), + state->msgs); + xfree((yyvsp[-4].string)); + YYERROR; + } + (yyvsp[-7].chain)->type.loc = (yylsp[-4]); + (yyvsp[-7].chain)->type.str = xstrdup(chain_type); + xfree((yyvsp[-4].string)); + + (yyvsp[-7].chain)->loc = (yyloc); + (yyvsp[-7].chain)->hook.loc = (yylsp[-2]); + (yyvsp[-7].chain)->hook.name = chain_hookname_lookup((yyvsp[-2].string)); + if ((yyvsp[-7].chain)->hook.name == NULL) { + erec_queue(error(&(yylsp[-2]), "unknown chain hook"), + state->msgs); + xfree((yyvsp[-2].string)); + YYERROR; + } + xfree((yyvsp[-2].string)); + + (yyvsp[-7].chain)->dev_expr = (yyvsp[-1].expr); + (yyvsp[-7].chain)->priority = (yyvsp[0].prio_spec); + (yyvsp[-7].chain)->flags |= CHAIN_F_BASECHAIN; + } +#line 10825 "parser_bison.c" + break; + + case 404: /* prio_spec: "priority" extended_prio_spec */ +#line 2636 "parser_bison.y" + { + (yyval.prio_spec) = (yyvsp[0].prio_spec); + (yyval.prio_spec).loc = (yyloc); + } +#line 10834 "parser_bison.c" + break; + + case 405: /* extended_prio_name: "out" */ +#line 2643 "parser_bison.y" + { + (yyval.string) = strdup("out"); + } +#line 10842 "parser_bison.c" + break; + + case 407: /* extended_prio_spec: int_num */ +#line 2650 "parser_bison.y" + { + struct prio_spec spec = {0}; + + spec.expr = constant_expr_alloc(&(yyloc), &integer_type, + BYTEORDER_HOST_ENDIAN, + sizeof(int) * + BITS_PER_BYTE, &(yyvsp[0].val32)); + (yyval.prio_spec) = spec; + } +#line 10856 "parser_bison.c" + break; + + case 408: /* extended_prio_spec: variable_expr */ +#line 2660 "parser_bison.y" + { + struct prio_spec spec = {0}; + + spec.expr = (yyvsp[0].expr); + (yyval.prio_spec) = spec; + } +#line 10867 "parser_bison.c" + break; + + case 409: /* extended_prio_spec: extended_prio_name */ +#line 2667 "parser_bison.y" + { + struct prio_spec spec = {0}; + + spec.expr = constant_expr_alloc(&(yyloc), &string_type, + BYTEORDER_HOST_ENDIAN, + strlen((yyvsp[0].string)) * BITS_PER_BYTE, + (yyvsp[0].string)); + xfree((yyvsp[0].string)); + (yyval.prio_spec) = spec; + } +#line 10882 "parser_bison.c" + break; + + case 410: /* extended_prio_spec: extended_prio_name "+" "number" */ +#line 2678 "parser_bison.y" + { + struct prio_spec spec = {0}; + + char str[NFT_NAME_MAXLEN]; + snprintf(str, sizeof(str), "%s + %" PRIu64, (yyvsp[-2].string), (yyvsp[0].val)); + spec.expr = constant_expr_alloc(&(yyloc), &string_type, + BYTEORDER_HOST_ENDIAN, + strlen(str) * BITS_PER_BYTE, + str); + xfree((yyvsp[-2].string)); + (yyval.prio_spec) = spec; + } +#line 10899 "parser_bison.c" + break; + + case 411: /* extended_prio_spec: extended_prio_name "-" "number" */ +#line 2691 "parser_bison.y" + { + struct prio_spec spec = {0}; + char str[NFT_NAME_MAXLEN]; + + snprintf(str, sizeof(str), "%s - %" PRIu64, (yyvsp[-2].string), (yyvsp[0].val)); + spec.expr = constant_expr_alloc(&(yyloc), &string_type, + BYTEORDER_HOST_ENDIAN, + strlen(str) * BITS_PER_BYTE, + str); + xfree((yyvsp[-2].string)); + (yyval.prio_spec) = spec; + } +#line 10916 "parser_bison.c" + break; + + case 412: /* int_num: "number" */ +#line 2705 "parser_bison.y" + { (yyval.val32) = (yyvsp[0].val); } +#line 10922 "parser_bison.c" + break; + + case 413: /* int_num: "-" "number" */ +#line 2706 "parser_bison.y" + { (yyval.val32) = -(yyvsp[0].val); } +#line 10928 "parser_bison.c" + break; + + case 414: /* dev_spec: "device" string */ +#line 2710 "parser_bison.y" + { + struct expr *expr = ifname_expr_alloc(&(yyloc), state->msgs, (yyvsp[0].string)); + + if (!expr) + YYERROR; + + (yyval.expr) = compound_expr_alloc(&(yyloc), EXPR_LIST); + compound_expr_add((yyval.expr), expr); + + } +#line 10943 "parser_bison.c" + break; + + case 415: /* dev_spec: "device" variable_expr */ +#line 2721 "parser_bison.y" + { + datatype_set((yyvsp[0].expr)->sym->expr, &ifname_type); + (yyval.expr) = compound_expr_alloc(&(yyloc), EXPR_LIST); + compound_expr_add((yyval.expr), (yyvsp[0].expr)); + } +#line 10953 "parser_bison.c" + break; + + case 416: /* dev_spec: "devices" '=' flowtable_expr */ +#line 2727 "parser_bison.y" + { + (yyval.expr) = (yyvsp[0].expr); + } +#line 10961 "parser_bison.c" + break; + + case 417: /* dev_spec: %empty */ +#line 2730 "parser_bison.y" + { (yyval.expr) = NULL; } +#line 10967 "parser_bison.c" + break; + + case 418: /* flags_spec: "flags" "offload" */ +#line 2734 "parser_bison.y" + { + (yyvsp[-2].chain)->flags |= CHAIN_F_HW_OFFLOAD; + } +#line 10975 "parser_bison.c" + break; + + case 419: /* policy_spec: "policy" policy_expr close_scope_policy */ +#line 2740 "parser_bison.y" + { + if ((yyvsp[-3].chain)->policy) { + erec_queue(error(&(yyloc), "you cannot set chain policy twice"), + state->msgs); + expr_free((yyvsp[-1].expr)); + YYERROR; + } + (yyvsp[-3].chain)->policy = (yyvsp[-1].expr); + (yyvsp[-3].chain)->policy->location = (yyloc); + } +#line 10990 "parser_bison.c" + break; + + case 420: /* policy_expr: variable_expr */ +#line 2753 "parser_bison.y" + { + datatype_set((yyvsp[0].expr)->sym->expr, &policy_type); + (yyval.expr) = (yyvsp[0].expr); + } +#line 10999 "parser_bison.c" + break; + + case 421: /* policy_expr: chain_policy */ +#line 2758 "parser_bison.y" + { + (yyval.expr) = constant_expr_alloc(&(yyloc), &integer_type, + BYTEORDER_HOST_ENDIAN, + sizeof(int) * + BITS_PER_BYTE, &(yyvsp[0].val32)); + } +#line 11010 "parser_bison.c" + break; + + case 422: /* chain_policy: "accept" */ +#line 2766 "parser_bison.y" + { (yyval.val32) = NF_ACCEPT; } +#line 11016 "parser_bison.c" + break; + + case 423: /* chain_policy: "drop" */ +#line 2767 "parser_bison.y" + { (yyval.val32) = NF_DROP; } +#line 11022 "parser_bison.c" + break; + + case 425: /* identifier: "last" */ +#line 2771 "parser_bison.y" + { (yyval.string) = xstrdup("last"); } +#line 11028 "parser_bison.c" + break; + + case 429: /* time_spec: "string" */ +#line 2780 "parser_bison.y" + { + struct error_record *erec; + uint64_t res; + + erec = time_parse(&(yylsp[0]), (yyvsp[0].string), &res); + xfree((yyvsp[0].string)); + if (erec != NULL) { + erec_queue(erec, state->msgs); + YYERROR; + } + (yyval.val) = res; + } +#line 11045 "parser_bison.c" + break; + + case 431: /* time_spec_or_num_s: time_spec */ +#line 2796 "parser_bison.y" + { (yyval.val) = (yyvsp[0].val) / 1000u; } +#line 11051 "parser_bison.c" + break; + + case 432: /* family_spec: %empty */ +#line 2799 "parser_bison.y" + { (yyval.val) = NFPROTO_IPV4; } +#line 11057 "parser_bison.c" + break; + + case 434: /* family_spec_explicit: "ip" close_scope_ip */ +#line 2803 "parser_bison.y" + { (yyval.val) = NFPROTO_IPV4; } +#line 11063 "parser_bison.c" + break; + + case 435: /* family_spec_explicit: "ip6" close_scope_ip6 */ +#line 2804 "parser_bison.y" + { (yyval.val) = NFPROTO_IPV6; } +#line 11069 "parser_bison.c" + break; + + case 436: /* family_spec_explicit: "inet" */ +#line 2805 "parser_bison.y" + { (yyval.val) = NFPROTO_INET; } +#line 11075 "parser_bison.c" + break; + + case 437: /* family_spec_explicit: "arp" close_scope_arp */ +#line 2806 "parser_bison.y" + { (yyval.val) = NFPROTO_ARP; } +#line 11081 "parser_bison.c" + break; + + case 438: /* family_spec_explicit: "bridge" */ +#line 2807 "parser_bison.y" + { (yyval.val) = NFPROTO_BRIDGE; } +#line 11087 "parser_bison.c" + break; + + case 439: /* family_spec_explicit: "netdev" */ +#line 2808 "parser_bison.y" + { (yyval.val) = NFPROTO_NETDEV; } +#line 11093 "parser_bison.c" + break; + + case 440: /* table_spec: family_spec identifier */ +#line 2812 "parser_bison.y" + { + memset(&(yyval.handle), 0, sizeof((yyval.handle))); + (yyval.handle).family = (yyvsp[-1].val); + (yyval.handle).table.location = (yylsp[0]); + (yyval.handle).table.name = (yyvsp[0].string); + } +#line 11104 "parser_bison.c" + break; + + case 441: /* tableid_spec: family_spec "handle" "number" */ +#line 2821 "parser_bison.y" + { + memset(&(yyval.handle), 0, sizeof((yyval.handle))); + (yyval.handle).family = (yyvsp[-2].val); + (yyval.handle).handle.id = (yyvsp[0].val); + (yyval.handle).handle.location = (yylsp[0]); + } +#line 11115 "parser_bison.c" + break; + + case 442: /* chain_spec: table_spec identifier */ +#line 2830 "parser_bison.y" + { + (yyval.handle) = (yyvsp[-1].handle); + (yyval.handle).chain.name = (yyvsp[0].string); + (yyval.handle).chain.location = (yylsp[0]); + } +#line 11125 "parser_bison.c" + break; + + case 443: /* chainid_spec: table_spec "handle" "number" */ +#line 2838 "parser_bison.y" + { + (yyval.handle) = (yyvsp[-2].handle); + (yyval.handle).handle.location = (yylsp[0]); + (yyval.handle).handle.id = (yyvsp[0].val); + } +#line 11135 "parser_bison.c" + break; + + case 444: /* chain_identifier: identifier */ +#line 2846 "parser_bison.y" + { + memset(&(yyval.handle), 0, sizeof((yyval.handle))); + (yyval.handle).chain.name = (yyvsp[0].string); + (yyval.handle).chain.location = (yylsp[0]); + } +#line 11145 "parser_bison.c" + break; + + case 445: /* set_spec: table_spec identifier */ +#line 2854 "parser_bison.y" + { + (yyval.handle) = (yyvsp[-1].handle); + (yyval.handle).set.name = (yyvsp[0].string); + (yyval.handle).set.location = (yylsp[0]); + } +#line 11155 "parser_bison.c" + break; + + case 446: /* setid_spec: table_spec "handle" "number" */ +#line 2862 "parser_bison.y" + { + (yyval.handle) = (yyvsp[-2].handle); + (yyval.handle).handle.location = (yylsp[0]); + (yyval.handle).handle.id = (yyvsp[0].val); + } +#line 11165 "parser_bison.c" + break; + + case 447: /* set_identifier: identifier */ +#line 2870 "parser_bison.y" + { + memset(&(yyval.handle), 0, sizeof((yyval.handle))); + (yyval.handle).set.name = (yyvsp[0].string); + (yyval.handle).set.location = (yylsp[0]); + } +#line 11175 "parser_bison.c" + break; + + case 448: /* flowtable_spec: table_spec identifier */ +#line 2878 "parser_bison.y" + { + (yyval.handle) = (yyvsp[-1].handle); + (yyval.handle).flowtable.name = (yyvsp[0].string); + (yyval.handle).flowtable.location = (yylsp[0]); + } +#line 11185 "parser_bison.c" + break; + + case 449: /* flowtableid_spec: table_spec "handle" "number" */ +#line 2886 "parser_bison.y" + { + (yyval.handle) = (yyvsp[-2].handle); + (yyval.handle).handle.location = (yylsp[0]); + (yyval.handle).handle.id = (yyvsp[0].val); + } +#line 11195 "parser_bison.c" + break; + + case 450: /* flowtable_identifier: identifier */ +#line 2894 "parser_bison.y" + { + memset(&(yyval.handle), 0, sizeof((yyval.handle))); + (yyval.handle).flowtable.name = (yyvsp[0].string); + (yyval.handle).flowtable.location = (yylsp[0]); + } +#line 11205 "parser_bison.c" + break; + + case 451: /* obj_spec: table_spec identifier */ +#line 2902 "parser_bison.y" + { + (yyval.handle) = (yyvsp[-1].handle); + (yyval.handle).obj.name = (yyvsp[0].string); + (yyval.handle).obj.location = (yylsp[0]); + } +#line 11215 "parser_bison.c" + break; + + case 452: /* objid_spec: table_spec "handle" "number" */ +#line 2910 "parser_bison.y" + { + (yyval.handle) = (yyvsp[-2].handle); + (yyval.handle).handle.location = (yylsp[0]); + (yyval.handle).handle.id = (yyvsp[0].val); + } +#line 11225 "parser_bison.c" + break; + + case 453: /* obj_identifier: identifier */ +#line 2918 "parser_bison.y" + { + memset(&(yyval.handle), 0, sizeof((yyval.handle))); + (yyval.handle).obj.name = (yyvsp[0].string); + (yyval.handle).obj.location = (yylsp[0]); + } +#line 11235 "parser_bison.c" + break; + + case 454: /* handle_spec: "handle" "number" */ +#line 2926 "parser_bison.y" + { + memset(&(yyval.handle), 0, sizeof((yyval.handle))); + (yyval.handle).handle.location = (yylsp[0]); + (yyval.handle).handle.id = (yyvsp[0].val); + } +#line 11245 "parser_bison.c" + break; + + case 455: /* position_spec: "position" "number" */ +#line 2934 "parser_bison.y" + { + memset(&(yyval.handle), 0, sizeof((yyval.handle))); + (yyval.handle).position.location = (yyloc); + (yyval.handle).position.id = (yyvsp[0].val); + } +#line 11255 "parser_bison.c" + break; + + case 456: /* index_spec: "index" "number" */ +#line 2942 "parser_bison.y" + { + memset(&(yyval.handle), 0, sizeof((yyval.handle))); + (yyval.handle).index.location = (yyloc); + (yyval.handle).index.id = (yyvsp[0].val) + 1; + } +#line 11265 "parser_bison.c" + break; + + case 457: /* rule_position: chain_spec */ +#line 2950 "parser_bison.y" + { + (yyval.handle) = (yyvsp[0].handle); + } +#line 11273 "parser_bison.c" + break; + + case 458: /* rule_position: chain_spec position_spec */ +#line 2954 "parser_bison.y" + { + handle_merge(&(yyvsp[-1].handle), &(yyvsp[0].handle)); + (yyval.handle) = (yyvsp[-1].handle); + } +#line 11282 "parser_bison.c" + break; + + case 459: /* rule_position: chain_spec handle_spec */ +#line 2959 "parser_bison.y" + { + (yyvsp[0].handle).position.location = (yyvsp[0].handle).handle.location; + (yyvsp[0].handle).position.id = (yyvsp[0].handle).handle.id; + (yyvsp[0].handle).handle.id = 0; + handle_merge(&(yyvsp[-1].handle), &(yyvsp[0].handle)); + (yyval.handle) = (yyvsp[-1].handle); + } +#line 11294 "parser_bison.c" + break; + + case 460: /* rule_position: chain_spec index_spec */ +#line 2967 "parser_bison.y" + { + handle_merge(&(yyvsp[-1].handle), &(yyvsp[0].handle)); + (yyval.handle) = (yyvsp[-1].handle); + } +#line 11303 "parser_bison.c" + break; + + case 461: /* ruleid_spec: chain_spec handle_spec */ +#line 2974 "parser_bison.y" + { + handle_merge(&(yyvsp[-1].handle), &(yyvsp[0].handle)); + (yyval.handle) = (yyvsp[-1].handle); + } +#line 11312 "parser_bison.c" + break; + + case 462: /* comment_spec: "comment" string */ +#line 2981 "parser_bison.y" + { + if (strlen((yyvsp[0].string)) > NFTNL_UDATA_COMMENT_MAXLEN) { + erec_queue(error(&(yylsp[0]), "comment too long, %d characters maximum allowed", + NFTNL_UDATA_COMMENT_MAXLEN), + state->msgs); + xfree((yyvsp[0].string)); + YYERROR; + } + (yyval.string) = (yyvsp[0].string); + } +#line 11327 "parser_bison.c" + break; + + case 463: /* ruleset_spec: %empty */ +#line 2994 "parser_bison.y" + { + memset(&(yyval.handle), 0, sizeof((yyval.handle))); + (yyval.handle).family = NFPROTO_UNSPEC; + } +#line 11336 "parser_bison.c" + break; + + case 464: /* ruleset_spec: family_spec_explicit */ +#line 2999 "parser_bison.y" + { + memset(&(yyval.handle), 0, sizeof((yyval.handle))); + (yyval.handle).family = (yyvsp[0].val); + } +#line 11345 "parser_bison.c" + break; + + case 465: /* rule: rule_alloc */ +#line 3006 "parser_bison.y" + { + (yyval.rule)->comment = NULL; + } +#line 11353 "parser_bison.c" + break; + + case 466: /* rule: rule_alloc comment_spec */ +#line 3010 "parser_bison.y" + { + (yyval.rule)->comment = (yyvsp[0].string); + } +#line 11361 "parser_bison.c" + break; + + case 467: /* rule_alloc: stmt_list */ +#line 3016 "parser_bison.y" + { + struct stmt *i; + + (yyval.rule) = rule_alloc(&(yyloc), NULL); + list_for_each_entry(i, (yyvsp[0].list), list) + (yyval.rule)->num_stmts++; + list_splice_tail((yyvsp[0].list), &(yyval.rule)->stmts); + xfree((yyvsp[0].list)); + } +#line 11375 "parser_bison.c" + break; + + case 468: /* stmt_list: stmt */ +#line 3028 "parser_bison.y" + { + (yyval.list) = xmalloc(sizeof(*(yyval.list))); + init_list_head((yyval.list)); + list_add_tail(&(yyvsp[0].stmt)->list, (yyval.list)); + } +#line 11385 "parser_bison.c" + break; + + case 469: /* stmt_list: stmt_list stmt */ +#line 3034 "parser_bison.y" + { + (yyval.list) = (yyvsp[-1].list); + list_add_tail(&(yyvsp[0].stmt)->list, (yyvsp[-1].list)); + } +#line 11394 "parser_bison.c" + break; + + case 470: /* stateful_stmt_list: stateful_stmt */ +#line 3041 "parser_bison.y" + { + (yyval.list) = xmalloc(sizeof(*(yyval.list))); + init_list_head((yyval.list)); + list_add_tail(&(yyvsp[0].stmt)->list, (yyval.list)); + } +#line 11404 "parser_bison.c" + break; + + case 471: /* stateful_stmt_list: stateful_stmt_list stateful_stmt */ +#line 3047 "parser_bison.y" + { + (yyval.list) = (yyvsp[-1].list); + list_add_tail(&(yyvsp[0].stmt)->list, (yyvsp[-1].list)); + } +#line 11413 "parser_bison.c" + break; + + case 499: /* xt_stmt: "xt" "string" string */ +#line 3085 "parser_bison.y" + { + (yyval.stmt) = NULL; + xfree((yyvsp[-1].string)); + xfree((yyvsp[0].string)); + erec_queue(error(&(yyloc), "unsupported xtables compat expression, use iptables-nft with this ruleset"), + state->msgs); + YYERROR; + } +#line 11426 "parser_bison.c" + break; + + case 500: /* chain_stmt_type: "jump" */ +#line 3095 "parser_bison.y" + { (yyval.val) = NFT_JUMP; } +#line 11432 "parser_bison.c" + break; + + case 501: /* chain_stmt_type: "goto" */ +#line 3096 "parser_bison.y" + { (yyval.val) = NFT_GOTO; } +#line 11438 "parser_bison.c" + break; + + case 502: /* chain_stmt: chain_stmt_type chain_block_alloc '{' subchain_block '}' */ +#line 3100 "parser_bison.y" + { + (yyvsp[-3].chain)->location = (yylsp[-3]); + close_scope(state); + (yyvsp[-1].chain)->location = (yylsp[-1]); + (yyval.stmt) = chain_stmt_alloc(&(yyloc), (yyvsp[-1].chain), (yyvsp[-4].val)); + } +#line 11449 "parser_bison.c" + break; + + case 503: /* verdict_stmt: verdict_expr */ +#line 3109 "parser_bison.y" + { + (yyval.stmt) = verdict_stmt_alloc(&(yyloc), (yyvsp[0].expr)); + } +#line 11457 "parser_bison.c" + break; + + case 504: /* verdict_stmt: verdict_map_stmt */ +#line 3113 "parser_bison.y" + { + (yyval.stmt) = verdict_stmt_alloc(&(yyloc), (yyvsp[0].expr)); + } +#line 11465 "parser_bison.c" + break; + + case 505: /* verdict_map_stmt: concat_expr "vmap" verdict_map_expr */ +#line 3119 "parser_bison.y" + { + (yyval.expr) = map_expr_alloc(&(yyloc), (yyvsp[-2].expr), (yyvsp[0].expr)); + } +#line 11473 "parser_bison.c" + break; + + case 506: /* verdict_map_expr: '{' verdict_map_list_expr '}' */ +#line 3125 "parser_bison.y" + { + (yyvsp[-1].expr)->location = (yyloc); + (yyval.expr) = (yyvsp[-1].expr); + } +#line 11482 "parser_bison.c" + break; + + case 508: /* verdict_map_list_expr: verdict_map_list_member_expr */ +#line 3133 "parser_bison.y" + { + (yyval.expr) = set_expr_alloc(&(yyloc), NULL); + compound_expr_add((yyval.expr), (yyvsp[0].expr)); + } +#line 11491 "parser_bison.c" + break; + + case 509: /* verdict_map_list_expr: verdict_map_list_expr "comma" verdict_map_list_member_expr */ +#line 3138 "parser_bison.y" + { + compound_expr_add((yyvsp[-2].expr), (yyvsp[0].expr)); + (yyval.expr) = (yyvsp[-2].expr); + } +#line 11500 "parser_bison.c" + break; + + case 511: /* verdict_map_list_member_expr: opt_newline set_elem_expr "colon" verdict_expr opt_newline */ +#line 3146 "parser_bison.y" + { + (yyval.expr) = mapping_expr_alloc(&(yylsp[-3]), (yyvsp[-3].expr), (yyvsp[-1].expr)); + } +#line 11508 "parser_bison.c" + break; + + case 512: /* connlimit_stmt: "ct" "count" "number" close_scope_ct */ +#line 3152 "parser_bison.y" + { + (yyval.stmt) = connlimit_stmt_alloc(&(yyloc)); + (yyval.stmt)->connlimit.count = (yyvsp[-1].val); + } +#line 11517 "parser_bison.c" + break; + + case 513: /* connlimit_stmt: "ct" "count" "over" "number" close_scope_ct */ +#line 3157 "parser_bison.y" + { + (yyval.stmt) = connlimit_stmt_alloc(&(yyloc)); + (yyval.stmt)->connlimit.count = (yyvsp[-1].val); + (yyval.stmt)->connlimit.flags = NFT_CONNLIMIT_F_INV; + } +#line 11527 "parser_bison.c" + break; + + case 516: /* counter_stmt_alloc: "counter" */ +#line 3168 "parser_bison.y" + { + (yyval.stmt) = counter_stmt_alloc(&(yyloc)); + } +#line 11535 "parser_bison.c" + break; + + case 517: /* counter_stmt_alloc: "counter" "name" stmt_expr */ +#line 3172 "parser_bison.y" + { + (yyval.stmt) = objref_stmt_alloc(&(yyloc)); + (yyval.stmt)->objref.type = NFT_OBJECT_COUNTER; + (yyval.stmt)->objref.expr = (yyvsp[0].expr); + } +#line 11545 "parser_bison.c" + break; + + case 518: /* counter_args: counter_arg */ +#line 3180 "parser_bison.y" + { + (yyval.stmt) = (yyvsp[-1].stmt); + } +#line 11553 "parser_bison.c" + break; + + case 520: /* counter_arg: "packets" "number" */ +#line 3187 "parser_bison.y" + { + (yyvsp[-2].stmt)->counter.packets = (yyvsp[0].val); + } +#line 11561 "parser_bison.c" + break; + + case 521: /* counter_arg: "bytes" "number" */ +#line 3191 "parser_bison.y" + { + (yyvsp[-2].stmt)->counter.bytes = (yyvsp[0].val); + } +#line 11569 "parser_bison.c" + break; + + case 522: /* last_stmt: "last" */ +#line 3197 "parser_bison.y" + { + (yyval.stmt) = last_stmt_alloc(&(yyloc)); + } +#line 11577 "parser_bison.c" + break; + + case 523: /* last_stmt: "last" "used" "never" */ +#line 3201 "parser_bison.y" + { + (yyval.stmt) = last_stmt_alloc(&(yyloc)); + } +#line 11585 "parser_bison.c" + break; + + case 524: /* last_stmt: "last" "used" time_spec */ +#line 3205 "parser_bison.y" + { + (yyval.stmt) = last_stmt_alloc(&(yyloc)); + (yyval.stmt)->last.used = (yyvsp[0].val); + (yyval.stmt)->last.set = true; + } +#line 11595 "parser_bison.c" + break; + + case 527: /* log_stmt_alloc: "log" */ +#line 3217 "parser_bison.y" + { + (yyval.stmt) = log_stmt_alloc(&(yyloc)); + } +#line 11603 "parser_bison.c" + break; + + case 528: /* log_args: log_arg */ +#line 3223 "parser_bison.y" + { + (yyval.stmt) = (yyvsp[-1].stmt); + } +#line 11611 "parser_bison.c" + break; + + case 530: /* log_arg: "prefix" string */ +#line 3230 "parser_bison.y" + { + struct scope *scope = current_scope(state); + bool done = false, another_var = false; + char *start, *end, scratch = '\0'; + struct expr *expr, *item; + struct symbol *sym; + enum { + PARSE_TEXT, + PARSE_VAR, + } prefix_state; + + /* No variables in log prefix, skip. */ + if (!strchr((yyvsp[0].string), '$')) { + expr = constant_expr_alloc(&(yyloc), &string_type, + BYTEORDER_HOST_ENDIAN, + (strlen((yyvsp[0].string)) + 1) * BITS_PER_BYTE, (yyvsp[0].string)); + xfree((yyvsp[0].string)); + (yyvsp[-2].stmt)->log.prefix = expr; + (yyvsp[-2].stmt)->log.flags |= STMT_LOG_PREFIX; + break; + } + + /* Parse variables in log prefix string using a + * state machine parser with two states. This + * parser creates list of expressions composed + * of constant and variable expressions. + */ + expr = compound_expr_alloc(&(yyloc), EXPR_LIST); + + start = (char *)(yyvsp[0].string); + + if (*start != '$') { + prefix_state = PARSE_TEXT; + } else { + prefix_state = PARSE_VAR; + start++; + } + end = start; + + /* Not nice, but works. */ + while (!done) { + switch (prefix_state) { + case PARSE_TEXT: + while (*end != '\0' && *end != '$') + end++; + + if (*end == '\0') + done = true; + + *end = '\0'; + item = constant_expr_alloc(&(yyloc), &string_type, + BYTEORDER_HOST_ENDIAN, + (strlen(start) + 1) * BITS_PER_BYTE, + start); + compound_expr_add(expr, item); + + if (done) + break; + + start = end + 1; + end = start; + + /* fall through */ + case PARSE_VAR: + while (isalnum(*end) || *end == '_') + end++; + + if (*end == '\0') + done = true; + else if (*end == '$') + another_var = true; + else + scratch = *end; + + *end = '\0'; + + sym = symbol_get(scope, start); + if (!sym) { + sym = symbol_lookup_fuzzy(scope, start); + if (sym) { + erec_queue(error(&(yylsp[0]), "unknown identifier '%s'; " + "did you mean identifier ‘%s’?", + start, sym->identifier), + state->msgs); + } else { + erec_queue(error(&(yylsp[0]), "unknown identifier '%s'", + start), + state->msgs); + } + expr_free(expr); + xfree((yyvsp[0].string)); + YYERROR; + } + item = variable_expr_alloc(&(yyloc), scope, sym); + compound_expr_add(expr, item); + + if (done) + break; + + /* Restore original byte after + * symbol lookup. + */ + if (scratch) { + *end = scratch; + scratch = '\0'; + } + + start = end; + if (another_var) { + another_var = false; + start++; + prefix_state = PARSE_VAR; + } else { + prefix_state = PARSE_TEXT; + } + end = start; + break; + } + } + + xfree((yyvsp[0].string)); + (yyvsp[-2].stmt)->log.prefix = expr; + (yyvsp[-2].stmt)->log.flags |= STMT_LOG_PREFIX; + } +#line 11740 "parser_bison.c" + break; + + case 531: /* log_arg: "group" "number" */ +#line 3355 "parser_bison.y" + { + (yyvsp[-2].stmt)->log.group = (yyvsp[0].val); + (yyvsp[-2].stmt)->log.flags |= STMT_LOG_GROUP; + } +#line 11749 "parser_bison.c" + break; + + case 532: /* log_arg: "snaplen" "number" */ +#line 3360 "parser_bison.y" + { + (yyvsp[-2].stmt)->log.snaplen = (yyvsp[0].val); + (yyvsp[-2].stmt)->log.flags |= STMT_LOG_SNAPLEN; + } +#line 11758 "parser_bison.c" + break; + + case 533: /* log_arg: "queue-threshold" "number" */ +#line 3365 "parser_bison.y" + { + (yyvsp[-2].stmt)->log.qthreshold = (yyvsp[0].val); + (yyvsp[-2].stmt)->log.flags |= STMT_LOG_QTHRESHOLD; + } +#line 11767 "parser_bison.c" + break; + + case 534: /* log_arg: "level" level_type */ +#line 3370 "parser_bison.y" + { + (yyvsp[-2].stmt)->log.level = (yyvsp[0].val); + (yyvsp[-2].stmt)->log.flags |= STMT_LOG_LEVEL; + } +#line 11776 "parser_bison.c" + break; + + case 535: /* log_arg: "flags" log_flags */ +#line 3375 "parser_bison.y" + { + (yyvsp[-2].stmt)->log.logflags |= (yyvsp[0].val); + } +#line 11784 "parser_bison.c" + break; + + case 536: /* level_type: string */ +#line 3381 "parser_bison.y" + { + if (!strcmp("emerg", (yyvsp[0].string))) + (yyval.val) = NFT_LOGLEVEL_EMERG; + else if (!strcmp("alert", (yyvsp[0].string))) + (yyval.val) = NFT_LOGLEVEL_ALERT; + else if (!strcmp("crit", (yyvsp[0].string))) + (yyval.val) = NFT_LOGLEVEL_CRIT; + else if (!strcmp("err", (yyvsp[0].string))) + (yyval.val) = NFT_LOGLEVEL_ERR; + else if (!strcmp("warn", (yyvsp[0].string))) + (yyval.val) = NFT_LOGLEVEL_WARNING; + else if (!strcmp("notice", (yyvsp[0].string))) + (yyval.val) = NFT_LOGLEVEL_NOTICE; + else if (!strcmp("info", (yyvsp[0].string))) + (yyval.val) = NFT_LOGLEVEL_INFO; + else if (!strcmp("debug", (yyvsp[0].string))) + (yyval.val) = NFT_LOGLEVEL_DEBUG; + else if (!strcmp("audit", (yyvsp[0].string))) + (yyval.val) = NFT_LOGLEVEL_AUDIT; + else { + erec_queue(error(&(yylsp[0]), "invalid log level"), + state->msgs); + xfree((yyvsp[0].string)); + YYERROR; + } + xfree((yyvsp[0].string)); + } +#line 11816 "parser_bison.c" + break; + + case 537: /* log_flags: "tcp" log_flags_tcp close_scope_tcp */ +#line 3411 "parser_bison.y" + { + (yyval.val) = (yyvsp[-1].val); + } +#line 11824 "parser_bison.c" + break; + + case 538: /* log_flags: "ip" "options" close_scope_ip */ +#line 3415 "parser_bison.y" + { + (yyval.val) = NF_LOG_IPOPT; + } +#line 11832 "parser_bison.c" + break; + + case 539: /* log_flags: "skuid" */ +#line 3419 "parser_bison.y" + { + (yyval.val) = NF_LOG_UID; + } +#line 11840 "parser_bison.c" + break; + + case 540: /* log_flags: "ether" close_scope_eth */ +#line 3423 "parser_bison.y" + { + (yyval.val) = NF_LOG_MACDECODE; + } +#line 11848 "parser_bison.c" + break; + + case 541: /* log_flags: "all" */ +#line 3427 "parser_bison.y" + { + (yyval.val) = NF_LOG_MASK; + } +#line 11856 "parser_bison.c" + break; + + case 542: /* log_flags_tcp: log_flags_tcp "comma" log_flag_tcp */ +#line 3433 "parser_bison.y" + { + (yyval.val) = (yyvsp[-2].val) | (yyvsp[0].val); + } +#line 11864 "parser_bison.c" + break; + + case 544: /* log_flag_tcp: "seq" */ +#line 3440 "parser_bison.y" + { + (yyval.val) = NF_LOG_TCPSEQ; + } +#line 11872 "parser_bison.c" + break; + + case 545: /* log_flag_tcp: "options" */ +#line 3444 "parser_bison.y" + { + (yyval.val) = NF_LOG_TCPOPT; + } +#line 11880 "parser_bison.c" + break; + + case 546: /* limit_stmt: "limit" "rate" limit_mode limit_rate_pkts limit_burst_pkts close_scope_limit */ +#line 3450 "parser_bison.y" + { + if ((yyvsp[-1].val) == 0) { + erec_queue(error(&(yylsp[-1]), "packet limit burst must be > 0"), + state->msgs); + YYERROR; + } + (yyval.stmt) = limit_stmt_alloc(&(yyloc)); + (yyval.stmt)->limit.rate = (yyvsp[-2].limit_rate).rate; + (yyval.stmt)->limit.unit = (yyvsp[-2].limit_rate).unit; + (yyval.stmt)->limit.burst = (yyvsp[-1].val); + (yyval.stmt)->limit.type = NFT_LIMIT_PKTS; + (yyval.stmt)->limit.flags = (yyvsp[-3].val); + } +#line 11898 "parser_bison.c" + break; + + case 547: /* limit_stmt: "limit" "rate" limit_mode limit_rate_bytes limit_burst_bytes close_scope_limit */ +#line 3464 "parser_bison.y" + { + (yyval.stmt) = limit_stmt_alloc(&(yyloc)); + (yyval.stmt)->limit.rate = (yyvsp[-2].limit_rate).rate; + (yyval.stmt)->limit.unit = (yyvsp[-2].limit_rate).unit; + (yyval.stmt)->limit.burst = (yyvsp[-1].val); + (yyval.stmt)->limit.type = NFT_LIMIT_PKT_BYTES; + (yyval.stmt)->limit.flags = (yyvsp[-3].val); + } +#line 11911 "parser_bison.c" + break; + + case 548: /* limit_stmt: "limit" "name" stmt_expr close_scope_limit */ +#line 3473 "parser_bison.y" + { + (yyval.stmt) = objref_stmt_alloc(&(yyloc)); + (yyval.stmt)->objref.type = NFT_OBJECT_LIMIT; + (yyval.stmt)->objref.expr = (yyvsp[-1].expr); + } +#line 11921 "parser_bison.c" + break; + + case 549: /* quota_mode: "over" */ +#line 3480 "parser_bison.y" + { (yyval.val) = NFT_QUOTA_F_INV; } +#line 11927 "parser_bison.c" + break; + + case 550: /* quota_mode: "until" */ +#line 3481 "parser_bison.y" + { (yyval.val) = 0; } +#line 11933 "parser_bison.c" + break; + + case 551: /* quota_mode: %empty */ +#line 3482 "parser_bison.y" + { (yyval.val) = 0; } +#line 11939 "parser_bison.c" + break; + + case 552: /* quota_unit: "bytes" */ +#line 3485 "parser_bison.y" + { (yyval.string) = xstrdup("bytes"); } +#line 11945 "parser_bison.c" + break; + + case 553: /* quota_unit: "string" */ +#line 3486 "parser_bison.y" + { (yyval.string) = (yyvsp[0].string); } +#line 11951 "parser_bison.c" + break; + + case 554: /* quota_used: %empty */ +#line 3489 "parser_bison.y" + { (yyval.val) = 0; } +#line 11957 "parser_bison.c" + break; + + case 555: /* quota_used: "used" "number" quota_unit */ +#line 3491 "parser_bison.y" + { + struct error_record *erec; + uint64_t rate; + + erec = data_unit_parse(&(yyloc), (yyvsp[0].string), &rate); + xfree((yyvsp[0].string)); + if (erec != NULL) { + erec_queue(erec, state->msgs); + YYERROR; + } + (yyval.val) = (yyvsp[-1].val) * rate; + } +#line 11974 "parser_bison.c" + break; + + case 556: /* quota_stmt: "quota" quota_mode "number" quota_unit quota_used close_scope_quota */ +#line 3506 "parser_bison.y" + { + struct error_record *erec; + uint64_t rate; + + erec = data_unit_parse(&(yyloc), (yyvsp[-2].string), &rate); + xfree((yyvsp[-2].string)); + if (erec != NULL) { + erec_queue(erec, state->msgs); + YYERROR; + } + (yyval.stmt) = quota_stmt_alloc(&(yyloc)); + (yyval.stmt)->quota.bytes = (yyvsp[-3].val) * rate; + (yyval.stmt)->quota.used = (yyvsp[-1].val); + (yyval.stmt)->quota.flags = (yyvsp[-4].val); + } +#line 11994 "parser_bison.c" + break; + + case 557: /* quota_stmt: "quota" "name" stmt_expr close_scope_quota */ +#line 3522 "parser_bison.y" + { + (yyval.stmt) = objref_stmt_alloc(&(yyloc)); + (yyval.stmt)->objref.type = NFT_OBJECT_QUOTA; + (yyval.stmt)->objref.expr = (yyvsp[-1].expr); + } +#line 12004 "parser_bison.c" + break; + + case 558: /* limit_mode: "over" */ +#line 3529 "parser_bison.y" + { (yyval.val) = NFT_LIMIT_F_INV; } +#line 12010 "parser_bison.c" + break; + + case 559: /* limit_mode: "until" */ +#line 3530 "parser_bison.y" + { (yyval.val) = 0; } +#line 12016 "parser_bison.c" + break; + + case 560: /* limit_mode: %empty */ +#line 3531 "parser_bison.y" + { (yyval.val) = 0; } +#line 12022 "parser_bison.c" + break; + + case 561: /* limit_burst_pkts: %empty */ +#line 3534 "parser_bison.y" + { (yyval.val) = 5; } +#line 12028 "parser_bison.c" + break; + + case 562: /* limit_burst_pkts: "burst" "number" "packets" */ +#line 3535 "parser_bison.y" + { (yyval.val) = (yyvsp[-1].val); } +#line 12034 "parser_bison.c" + break; + + case 563: /* limit_rate_pkts: "number" "/" time_unit */ +#line 3539 "parser_bison.y" + { + (yyval.limit_rate).rate = (yyvsp[-2].val); + (yyval.limit_rate).unit = (yyvsp[0].val); + } +#line 12043 "parser_bison.c" + break; + + case 564: /* limit_burst_bytes: %empty */ +#line 3545 "parser_bison.y" + { (yyval.val) = 0; } +#line 12049 "parser_bison.c" + break; + + case 565: /* limit_burst_bytes: "burst" limit_bytes */ +#line 3546 "parser_bison.y" + { (yyval.val) = (yyvsp[0].val); } +#line 12055 "parser_bison.c" + break; + + case 566: /* limit_rate_bytes: "number" "string" */ +#line 3550 "parser_bison.y" + { + struct error_record *erec; + uint64_t rate, unit; + + erec = rate_parse(&(yyloc), (yyvsp[0].string), &rate, &unit); + xfree((yyvsp[0].string)); + if (erec != NULL) { + erec_queue(erec, state->msgs); + YYERROR; + } + (yyval.limit_rate).rate = rate * (yyvsp[-1].val); + (yyval.limit_rate).unit = unit; + } +#line 12073 "parser_bison.c" + break; + + case 567: /* limit_rate_bytes: limit_bytes "/" time_unit */ +#line 3564 "parser_bison.y" + { + (yyval.limit_rate).rate = (yyvsp[-2].val); + (yyval.limit_rate).unit = (yyvsp[0].val); + } +#line 12082 "parser_bison.c" + break; + + case 568: /* limit_bytes: "number" "bytes" */ +#line 3570 "parser_bison.y" + { (yyval.val) = (yyvsp[-1].val); } +#line 12088 "parser_bison.c" + break; + + case 569: /* limit_bytes: "number" "string" */ +#line 3572 "parser_bison.y" + { + struct error_record *erec; + uint64_t rate; + + erec = data_unit_parse(&(yyloc), (yyvsp[0].string), &rate); + xfree((yyvsp[0].string)); + if (erec != NULL) { + erec_queue(erec, state->msgs); + YYERROR; + } + (yyval.val) = (yyvsp[-1].val) * rate; + } +#line 12105 "parser_bison.c" + break; + + case 570: /* time_unit: "second" */ +#line 3586 "parser_bison.y" + { (yyval.val) = 1ULL; } +#line 12111 "parser_bison.c" + break; + + case 571: /* time_unit: "minute" */ +#line 3587 "parser_bison.y" + { (yyval.val) = 1ULL * 60; } +#line 12117 "parser_bison.c" + break; + + case 572: /* time_unit: "hour" */ +#line 3588 "parser_bison.y" + { (yyval.val) = 1ULL * 60 * 60; } +#line 12123 "parser_bison.c" + break; + + case 573: /* time_unit: "day" */ +#line 3589 "parser_bison.y" + { (yyval.val) = 1ULL * 60 * 60 * 24; } +#line 12129 "parser_bison.c" + break; + + case 574: /* time_unit: "week" */ +#line 3590 "parser_bison.y" + { (yyval.val) = 1ULL * 60 * 60 * 24 * 7; } +#line 12135 "parser_bison.c" + break; + + case 576: /* reject_stmt_alloc: "reject" */ +#line 3597 "parser_bison.y" + { + (yyval.stmt) = reject_stmt_alloc(&(yyloc)); + } +#line 12143 "parser_bison.c" + break; + + case 577: /* reject_with_expr: "string" */ +#line 3603 "parser_bison.y" + { + (yyval.expr) = symbol_expr_alloc(&(yyloc), SYMBOL_VALUE, + current_scope(state), (yyvsp[0].string)); + xfree((yyvsp[0].string)); + } +#line 12153 "parser_bison.c" + break; + + case 578: /* reject_with_expr: integer_expr */ +#line 3608 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 12159 "parser_bison.c" + break; + + case 579: /* reject_opts: %empty */ +#line 3612 "parser_bison.y" + { + (yyvsp[0].stmt)->reject.type = -1; + (yyvsp[0].stmt)->reject.icmp_code = -1; + } +#line 12168 "parser_bison.c" + break; + + case 580: /* reject_opts: "with" "icmp" "type" reject_with_expr close_scope_type close_scope_icmp */ +#line 3617 "parser_bison.y" + { + (yyvsp[-6].stmt)->reject.family = NFPROTO_IPV4; + (yyvsp[-6].stmt)->reject.type = NFT_REJECT_ICMP_UNREACH; + (yyvsp[-6].stmt)->reject.expr = (yyvsp[-2].expr); + datatype_set((yyvsp[-6].stmt)->reject.expr, &icmp_code_type); + } +#line 12179 "parser_bison.c" + break; + + case 581: /* reject_opts: "with" "icmp" reject_with_expr */ +#line 3624 "parser_bison.y" + { + (yyvsp[-3].stmt)->reject.family = NFPROTO_IPV4; + (yyvsp[-3].stmt)->reject.type = NFT_REJECT_ICMP_UNREACH; + (yyvsp[-3].stmt)->reject.expr = (yyvsp[0].expr); + datatype_set((yyvsp[-3].stmt)->reject.expr, &icmp_code_type); + } +#line 12190 "parser_bison.c" + break; + + case 582: /* reject_opts: "with" "icmpv6" "type" reject_with_expr close_scope_type close_scope_icmp */ +#line 3631 "parser_bison.y" + { + (yyvsp[-6].stmt)->reject.family = NFPROTO_IPV6; + (yyvsp[-6].stmt)->reject.type = NFT_REJECT_ICMP_UNREACH; + (yyvsp[-6].stmt)->reject.expr = (yyvsp[-2].expr); + datatype_set((yyvsp[-6].stmt)->reject.expr, &icmpv6_code_type); + } +#line 12201 "parser_bison.c" + break; + + case 583: /* reject_opts: "with" "icmpv6" reject_with_expr */ +#line 3638 "parser_bison.y" + { + (yyvsp[-3].stmt)->reject.family = NFPROTO_IPV6; + (yyvsp[-3].stmt)->reject.type = NFT_REJECT_ICMP_UNREACH; + (yyvsp[-3].stmt)->reject.expr = (yyvsp[0].expr); + datatype_set((yyvsp[-3].stmt)->reject.expr, &icmpv6_code_type); + } +#line 12212 "parser_bison.c" + break; + + case 584: /* reject_opts: "with" "icmpx" "type" reject_with_expr close_scope_type */ +#line 3645 "parser_bison.y" + { + (yyvsp[-5].stmt)->reject.type = NFT_REJECT_ICMPX_UNREACH; + (yyvsp[-5].stmt)->reject.expr = (yyvsp[-1].expr); + datatype_set((yyvsp[-5].stmt)->reject.expr, &icmpx_code_type); + } +#line 12222 "parser_bison.c" + break; + + case 585: /* reject_opts: "with" "icmpx" reject_with_expr */ +#line 3651 "parser_bison.y" + { + (yyvsp[-3].stmt)->reject.type = NFT_REJECT_ICMPX_UNREACH; + (yyvsp[-3].stmt)->reject.expr = (yyvsp[0].expr); + datatype_set((yyvsp[-3].stmt)->reject.expr, &icmpx_code_type); + } +#line 12232 "parser_bison.c" + break; + + case 586: /* reject_opts: "with" "tcp" close_scope_tcp "reset" close_scope_reset */ +#line 3657 "parser_bison.y" + { + (yyvsp[-5].stmt)->reject.type = NFT_REJECT_TCP_RST; + } +#line 12240 "parser_bison.c" + break; + + case 588: /* nat_stmt_alloc: "snat" */ +#line 3665 "parser_bison.y" + { (yyval.stmt) = nat_stmt_alloc(&(yyloc), __NFT_NAT_SNAT); } +#line 12246 "parser_bison.c" + break; + + case 589: /* nat_stmt_alloc: "dnat" */ +#line 3666 "parser_bison.y" + { (yyval.stmt) = nat_stmt_alloc(&(yyloc), __NFT_NAT_DNAT); } +#line 12252 "parser_bison.c" + break; + + case 590: /* tproxy_stmt: "tproxy" "to" stmt_expr */ +#line 3670 "parser_bison.y" + { + (yyval.stmt) = tproxy_stmt_alloc(&(yyloc)); + (yyval.stmt)->tproxy.family = NFPROTO_UNSPEC; + (yyval.stmt)->tproxy.addr = (yyvsp[0].expr); + } +#line 12262 "parser_bison.c" + break; + + case 591: /* tproxy_stmt: "tproxy" nf_key_proto "to" stmt_expr */ +#line 3676 "parser_bison.y" + { + (yyval.stmt) = tproxy_stmt_alloc(&(yyloc)); + (yyval.stmt)->tproxy.family = (yyvsp[-2].val); + (yyval.stmt)->tproxy.addr = (yyvsp[0].expr); + } +#line 12272 "parser_bison.c" + break; + + case 592: /* tproxy_stmt: "tproxy" "to" "colon" stmt_expr */ +#line 3682 "parser_bison.y" + { + (yyval.stmt) = tproxy_stmt_alloc(&(yyloc)); + (yyval.stmt)->tproxy.family = NFPROTO_UNSPEC; + (yyval.stmt)->tproxy.port = (yyvsp[0].expr); + } +#line 12282 "parser_bison.c" + break; + + case 593: /* tproxy_stmt: "tproxy" "to" stmt_expr "colon" stmt_expr */ +#line 3688 "parser_bison.y" + { + (yyval.stmt) = tproxy_stmt_alloc(&(yyloc)); + (yyval.stmt)->tproxy.family = NFPROTO_UNSPEC; + (yyval.stmt)->tproxy.addr = (yyvsp[-2].expr); + (yyval.stmt)->tproxy.port = (yyvsp[0].expr); + } +#line 12293 "parser_bison.c" + break; + + case 594: /* tproxy_stmt: "tproxy" nf_key_proto "to" stmt_expr "colon" stmt_expr */ +#line 3695 "parser_bison.y" + { + (yyval.stmt) = tproxy_stmt_alloc(&(yyloc)); + (yyval.stmt)->tproxy.family = (yyvsp[-4].val); + (yyval.stmt)->tproxy.addr = (yyvsp[-2].expr); + (yyval.stmt)->tproxy.port = (yyvsp[0].expr); + } +#line 12304 "parser_bison.c" + break; + + case 595: /* tproxy_stmt: "tproxy" nf_key_proto "to" "colon" stmt_expr */ +#line 3702 "parser_bison.y" + { + (yyval.stmt) = tproxy_stmt_alloc(&(yyloc)); + (yyval.stmt)->tproxy.family = (yyvsp[-3].val); + (yyval.stmt)->tproxy.port = (yyvsp[0].expr); + } +#line 12314 "parser_bison.c" + break; + + case 598: /* synproxy_stmt_alloc: "synproxy" */ +#line 3714 "parser_bison.y" + { + (yyval.stmt) = synproxy_stmt_alloc(&(yyloc)); + } +#line 12322 "parser_bison.c" + break; + + case 599: /* synproxy_stmt_alloc: "synproxy" "name" stmt_expr */ +#line 3718 "parser_bison.y" + { + (yyval.stmt) = objref_stmt_alloc(&(yyloc)); + (yyval.stmt)->objref.type = NFT_OBJECT_SYNPROXY; + (yyval.stmt)->objref.expr = (yyvsp[0].expr); + } +#line 12332 "parser_bison.c" + break; + + case 600: /* synproxy_args: synproxy_arg */ +#line 3726 "parser_bison.y" + { + (yyval.stmt) = (yyvsp[-1].stmt); + } +#line 12340 "parser_bison.c" + break; + + case 602: /* synproxy_arg: "mss" "number" */ +#line 3733 "parser_bison.y" + { + (yyvsp[-2].stmt)->synproxy.mss = (yyvsp[0].val); + (yyvsp[-2].stmt)->synproxy.flags |= NF_SYNPROXY_OPT_MSS; + } +#line 12349 "parser_bison.c" + break; + + case 603: /* synproxy_arg: "wscale" "number" */ +#line 3738 "parser_bison.y" + { + (yyvsp[-2].stmt)->synproxy.wscale = (yyvsp[0].val); + (yyvsp[-2].stmt)->synproxy.flags |= NF_SYNPROXY_OPT_WSCALE; + } +#line 12358 "parser_bison.c" + break; + + case 604: /* synproxy_arg: "timestamp" */ +#line 3743 "parser_bison.y" + { + (yyvsp[-1].stmt)->synproxy.flags |= NF_SYNPROXY_OPT_TIMESTAMP; + } +#line 12366 "parser_bison.c" + break; + + case 605: /* synproxy_arg: "sack-permitted" */ +#line 3747 "parser_bison.y" + { + (yyvsp[-1].stmt)->synproxy.flags |= NF_SYNPROXY_OPT_SACK_PERM; + } +#line 12374 "parser_bison.c" + break; + + case 606: /* synproxy_config: "mss" "number" "wscale" "number" synproxy_ts synproxy_sack */ +#line 3753 "parser_bison.y" + { + struct synproxy *synproxy; + uint32_t flags = 0; + + synproxy = &(yyvsp[-6].obj)->synproxy; + synproxy->mss = (yyvsp[-4].val); + flags |= NF_SYNPROXY_OPT_MSS; + synproxy->wscale = (yyvsp[-2].val); + flags |= NF_SYNPROXY_OPT_WSCALE; + if ((yyvsp[-1].val)) + flags |= (yyvsp[-1].val); + if ((yyvsp[0].val)) + flags |= (yyvsp[0].val); + synproxy->flags = flags; + } +#line 12394 "parser_bison.c" + break; + + case 607: /* synproxy_config: "mss" "number" stmt_separator "wscale" "number" stmt_separator synproxy_ts synproxy_sack */ +#line 3769 "parser_bison.y" + { + struct synproxy *synproxy; + uint32_t flags = 0; + + synproxy = &(yyvsp[-8].obj)->synproxy; + synproxy->mss = (yyvsp[-6].val); + flags |= NF_SYNPROXY_OPT_MSS; + synproxy->wscale = (yyvsp[-3].val); + flags |= NF_SYNPROXY_OPT_WSCALE; + if ((yyvsp[-1].val)) + flags |= (yyvsp[-1].val); + if ((yyvsp[0].val)) + flags |= (yyvsp[0].val); + synproxy->flags = flags; + } +#line 12414 "parser_bison.c" + break; + + case 608: /* synproxy_obj: %empty */ +#line 3787 "parser_bison.y" + { + (yyval.obj) = obj_alloc(&(yyloc)); + (yyval.obj)->type = NFT_OBJECT_SYNPROXY; + } +#line 12423 "parser_bison.c" + break; + + case 609: /* synproxy_ts: %empty */ +#line 3793 "parser_bison.y" + { (yyval.val) = 0; } +#line 12429 "parser_bison.c" + break; + + case 610: /* synproxy_ts: "timestamp" */ +#line 3795 "parser_bison.y" + { + (yyval.val) = NF_SYNPROXY_OPT_TIMESTAMP; + } +#line 12437 "parser_bison.c" + break; + + case 611: /* synproxy_sack: %empty */ +#line 3800 "parser_bison.y" + { (yyval.val) = 0; } +#line 12443 "parser_bison.c" + break; + + case 612: /* synproxy_sack: "sack-permitted" */ +#line 3802 "parser_bison.y" + { + (yyval.val) = NF_SYNPROXY_OPT_SACK_PERM; + } +#line 12451 "parser_bison.c" + break; + + case 613: /* primary_stmt_expr: symbol_expr */ +#line 3807 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 12457 "parser_bison.c" + break; + + case 614: /* primary_stmt_expr: integer_expr */ +#line 3808 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 12463 "parser_bison.c" + break; + + case 615: /* primary_stmt_expr: boolean_expr */ +#line 3809 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 12469 "parser_bison.c" + break; + + case 616: /* primary_stmt_expr: meta_expr */ +#line 3810 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 12475 "parser_bison.c" + break; + + case 617: /* primary_stmt_expr: rt_expr */ +#line 3811 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 12481 "parser_bison.c" + break; + + case 618: /* primary_stmt_expr: ct_expr */ +#line 3812 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 12487 "parser_bison.c" + break; + + case 619: /* primary_stmt_expr: numgen_expr */ +#line 3813 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 12493 "parser_bison.c" + break; + + case 620: /* primary_stmt_expr: hash_expr */ +#line 3814 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 12499 "parser_bison.c" + break; + + case 621: /* primary_stmt_expr: payload_expr */ +#line 3815 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 12505 "parser_bison.c" + break; + + case 622: /* primary_stmt_expr: keyword_expr */ +#line 3816 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 12511 "parser_bison.c" + break; + + case 623: /* primary_stmt_expr: socket_expr */ +#line 3817 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 12517 "parser_bison.c" + break; + + case 624: /* primary_stmt_expr: osf_expr */ +#line 3818 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 12523 "parser_bison.c" + break; + + case 625: /* primary_stmt_expr: '(' basic_stmt_expr ')' */ +#line 3819 "parser_bison.y" + { (yyval.expr) = (yyvsp[-1].expr); } +#line 12529 "parser_bison.c" + break; + + case 627: /* shift_stmt_expr: shift_stmt_expr "<<" primary_stmt_expr */ +#line 3824 "parser_bison.y" + { + (yyval.expr) = binop_expr_alloc(&(yyloc), OP_LSHIFT, (yyvsp[-2].expr), (yyvsp[0].expr)); + } +#line 12537 "parser_bison.c" + break; + + case 628: /* shift_stmt_expr: shift_stmt_expr ">>" primary_stmt_expr */ +#line 3828 "parser_bison.y" + { + (yyval.expr) = binop_expr_alloc(&(yyloc), OP_RSHIFT, (yyvsp[-2].expr), (yyvsp[0].expr)); + } +#line 12545 "parser_bison.c" + break; + + case 630: /* and_stmt_expr: and_stmt_expr "&" shift_stmt_expr */ +#line 3835 "parser_bison.y" + { + (yyval.expr) = binop_expr_alloc(&(yyloc), OP_AND, (yyvsp[-2].expr), (yyvsp[0].expr)); + } +#line 12553 "parser_bison.c" + break; + + case 632: /* exclusive_or_stmt_expr: exclusive_or_stmt_expr "^" and_stmt_expr */ +#line 3842 "parser_bison.y" + { + (yyval.expr) = binop_expr_alloc(&(yyloc), OP_XOR, (yyvsp[-2].expr), (yyvsp[0].expr)); + } +#line 12561 "parser_bison.c" + break; + + case 634: /* inclusive_or_stmt_expr: inclusive_or_stmt_expr '|' exclusive_or_stmt_expr */ +#line 3849 "parser_bison.y" + { + (yyval.expr) = binop_expr_alloc(&(yyloc), OP_OR, (yyvsp[-2].expr), (yyvsp[0].expr)); + } +#line 12569 "parser_bison.c" + break; + + case 637: /* concat_stmt_expr: concat_stmt_expr "." primary_stmt_expr */ +#line 3859 "parser_bison.y" + { + struct location rhs[] = { + [1] = (yylsp[-1]), + [2] = (yylsp[0]), + }; + + (yyval.expr) = handle_concat_expr(&(yyloc), (yyval.expr), (yyvsp[-2].expr), (yyvsp[0].expr), rhs); + } +#line 12582 "parser_bison.c" + break; + + case 640: /* map_stmt_expr: concat_stmt_expr "map" map_stmt_expr_set */ +#line 3874 "parser_bison.y" + { + (yyval.expr) = map_expr_alloc(&(yyloc), (yyvsp[-2].expr), (yyvsp[0].expr)); + } +#line 12590 "parser_bison.c" + break; + + case 641: /* map_stmt_expr: concat_stmt_expr */ +#line 3877 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 12596 "parser_bison.c" + break; + + case 642: /* prefix_stmt_expr: basic_stmt_expr "/" "number" */ +#line 3881 "parser_bison.y" + { + (yyval.expr) = prefix_expr_alloc(&(yyloc), (yyvsp[-2].expr), (yyvsp[0].val)); + } +#line 12604 "parser_bison.c" + break; + + case 643: /* range_stmt_expr: basic_stmt_expr "-" basic_stmt_expr */ +#line 3887 "parser_bison.y" + { + (yyval.expr) = range_expr_alloc(&(yyloc), (yyvsp[-2].expr), (yyvsp[0].expr)); + } +#line 12612 "parser_bison.c" + break; + + case 649: /* nat_stmt_args: stmt_expr */ +#line 3902 "parser_bison.y" + { + (yyvsp[-1].stmt)->nat.addr = (yyvsp[0].expr); + } +#line 12620 "parser_bison.c" + break; + + case 650: /* nat_stmt_args: "to" stmt_expr */ +#line 3906 "parser_bison.y" + { + (yyvsp[-2].stmt)->nat.addr = (yyvsp[0].expr); + } +#line 12628 "parser_bison.c" + break; + + case 651: /* nat_stmt_args: nf_key_proto "to" stmt_expr */ +#line 3910 "parser_bison.y" + { + (yyvsp[-3].stmt)->nat.family = (yyvsp[-2].val); + (yyvsp[-3].stmt)->nat.addr = (yyvsp[0].expr); + } +#line 12637 "parser_bison.c" + break; + + case 652: /* nat_stmt_args: stmt_expr "colon" stmt_expr */ +#line 3915 "parser_bison.y" + { + (yyvsp[-3].stmt)->nat.addr = (yyvsp[-2].expr); + (yyvsp[-3].stmt)->nat.proto = (yyvsp[0].expr); + } +#line 12646 "parser_bison.c" + break; + + case 653: /* nat_stmt_args: "to" stmt_expr "colon" stmt_expr */ +#line 3920 "parser_bison.y" + { + (yyvsp[-4].stmt)->nat.addr = (yyvsp[-2].expr); + (yyvsp[-4].stmt)->nat.proto = (yyvsp[0].expr); + } +#line 12655 "parser_bison.c" + break; + + case 654: /* nat_stmt_args: nf_key_proto "to" stmt_expr "colon" stmt_expr */ +#line 3925 "parser_bison.y" + { + (yyvsp[-5].stmt)->nat.family = (yyvsp[-4].val); + (yyvsp[-5].stmt)->nat.addr = (yyvsp[-2].expr); + (yyvsp[-5].stmt)->nat.proto = (yyvsp[0].expr); + } +#line 12665 "parser_bison.c" + break; + + case 655: /* nat_stmt_args: "colon" stmt_expr */ +#line 3931 "parser_bison.y" + { + (yyvsp[-2].stmt)->nat.proto = (yyvsp[0].expr); + } +#line 12673 "parser_bison.c" + break; + + case 656: /* nat_stmt_args: "to" "colon" stmt_expr */ +#line 3935 "parser_bison.y" + { + (yyvsp[-3].stmt)->nat.proto = (yyvsp[0].expr); + } +#line 12681 "parser_bison.c" + break; + + case 657: /* nat_stmt_args: nat_stmt_args nf_nat_flags */ +#line 3939 "parser_bison.y" + { + (yyvsp[-2].stmt)->nat.flags = (yyvsp[0].val); + } +#line 12689 "parser_bison.c" + break; + + case 658: /* nat_stmt_args: nf_key_proto "addr" "." "port" "to" stmt_expr */ +#line 3943 "parser_bison.y" + { + (yyvsp[-6].stmt)->nat.family = (yyvsp[-5].val); + (yyvsp[-6].stmt)->nat.addr = (yyvsp[0].expr); + (yyvsp[-6].stmt)->nat.type_flags = STMT_NAT_F_CONCAT; + } +#line 12699 "parser_bison.c" + break; + + case 659: /* nat_stmt_args: nf_key_proto "interval" "to" stmt_expr */ +#line 3949 "parser_bison.y" + { + (yyvsp[-4].stmt)->nat.family = (yyvsp[-3].val); + (yyvsp[-4].stmt)->nat.addr = (yyvsp[0].expr); + } +#line 12708 "parser_bison.c" + break; + + case 660: /* nat_stmt_args: "interval" "to" stmt_expr */ +#line 3954 "parser_bison.y" + { + (yyvsp[-3].stmt)->nat.addr = (yyvsp[0].expr); + } +#line 12716 "parser_bison.c" + break; + + case 661: /* nat_stmt_args: nf_key_proto "prefix" "to" stmt_expr */ +#line 3958 "parser_bison.y" + { + (yyvsp[-4].stmt)->nat.family = (yyvsp[-3].val); + (yyvsp[-4].stmt)->nat.addr = (yyvsp[0].expr); + (yyvsp[-4].stmt)->nat.type_flags = + STMT_NAT_F_PREFIX; + (yyvsp[-4].stmt)->nat.flags |= NF_NAT_RANGE_NETMAP; + } +#line 12728 "parser_bison.c" + break; + + case 662: /* nat_stmt_args: "prefix" "to" stmt_expr */ +#line 3966 "parser_bison.y" + { + (yyvsp[-3].stmt)->nat.addr = (yyvsp[0].expr); + (yyvsp[-3].stmt)->nat.type_flags = + STMT_NAT_F_PREFIX; + (yyvsp[-3].stmt)->nat.flags |= NF_NAT_RANGE_NETMAP; + } +#line 12739 "parser_bison.c" + break; + + case 665: /* masq_stmt_alloc: "masquerade" */ +#line 3978 "parser_bison.y" + { (yyval.stmt) = nat_stmt_alloc(&(yyloc), NFT_NAT_MASQ); } +#line 12745 "parser_bison.c" + break; + + case 666: /* masq_stmt_args: "to" "colon" stmt_expr */ +#line 3982 "parser_bison.y" + { + (yyvsp[-3].stmt)->nat.proto = (yyvsp[0].expr); + } +#line 12753 "parser_bison.c" + break; + + case 667: /* masq_stmt_args: "to" "colon" stmt_expr nf_nat_flags */ +#line 3986 "parser_bison.y" + { + (yyvsp[-4].stmt)->nat.proto = (yyvsp[-1].expr); + (yyvsp[-4].stmt)->nat.flags = (yyvsp[0].val); + } +#line 12762 "parser_bison.c" + break; + + case 668: /* masq_stmt_args: nf_nat_flags */ +#line 3991 "parser_bison.y" + { + (yyvsp[-1].stmt)->nat.flags = (yyvsp[0].val); + } +#line 12770 "parser_bison.c" + break; + + case 671: /* redir_stmt_alloc: "redirect" */ +#line 4000 "parser_bison.y" + { (yyval.stmt) = nat_stmt_alloc(&(yyloc), NFT_NAT_REDIR); } +#line 12776 "parser_bison.c" + break; + + case 672: /* redir_stmt_arg: "to" stmt_expr */ +#line 4004 "parser_bison.y" + { + (yyvsp[-2].stmt)->nat.proto = (yyvsp[0].expr); + } +#line 12784 "parser_bison.c" + break; + + case 673: /* redir_stmt_arg: "to" "colon" stmt_expr */ +#line 4008 "parser_bison.y" + { + (yyvsp[-3].stmt)->nat.proto = (yyvsp[0].expr); + } +#line 12792 "parser_bison.c" + break; + + case 674: /* redir_stmt_arg: nf_nat_flags */ +#line 4012 "parser_bison.y" + { + (yyvsp[-1].stmt)->nat.flags = (yyvsp[0].val); + } +#line 12800 "parser_bison.c" + break; + + case 675: /* redir_stmt_arg: "to" stmt_expr nf_nat_flags */ +#line 4016 "parser_bison.y" + { + (yyvsp[-3].stmt)->nat.proto = (yyvsp[-1].expr); + (yyvsp[-3].stmt)->nat.flags = (yyvsp[0].val); + } +#line 12809 "parser_bison.c" + break; + + case 676: /* redir_stmt_arg: "to" "colon" stmt_expr nf_nat_flags */ +#line 4021 "parser_bison.y" + { + (yyvsp[-4].stmt)->nat.proto = (yyvsp[-1].expr); + (yyvsp[-4].stmt)->nat.flags = (yyvsp[0].val); + } +#line 12818 "parser_bison.c" + break; + + case 677: /* dup_stmt: "dup" "to" stmt_expr */ +#line 4028 "parser_bison.y" + { + (yyval.stmt) = dup_stmt_alloc(&(yyloc)); + (yyval.stmt)->dup.to = (yyvsp[0].expr); + } +#line 12827 "parser_bison.c" + break; + + case 678: /* dup_stmt: "dup" "to" stmt_expr "device" stmt_expr */ +#line 4033 "parser_bison.y" + { + (yyval.stmt) = dup_stmt_alloc(&(yyloc)); + (yyval.stmt)->dup.to = (yyvsp[-2].expr); + (yyval.stmt)->dup.dev = (yyvsp[0].expr); + } +#line 12837 "parser_bison.c" + break; + + case 679: /* fwd_stmt: "fwd" "to" stmt_expr */ +#line 4041 "parser_bison.y" + { + (yyval.stmt) = fwd_stmt_alloc(&(yyloc)); + (yyval.stmt)->fwd.dev = (yyvsp[0].expr); + } +#line 12846 "parser_bison.c" + break; + + case 680: /* fwd_stmt: "fwd" nf_key_proto "to" stmt_expr "device" stmt_expr */ +#line 4046 "parser_bison.y" + { + (yyval.stmt) = fwd_stmt_alloc(&(yyloc)); + (yyval.stmt)->fwd.family = (yyvsp[-4].val); + (yyval.stmt)->fwd.addr = (yyvsp[-2].expr); + (yyval.stmt)->fwd.dev = (yyvsp[0].expr); + } +#line 12857 "parser_bison.c" + break; + + case 682: /* nf_nat_flags: nf_nat_flags "comma" nf_nat_flag */ +#line 4056 "parser_bison.y" + { + (yyval.val) = (yyvsp[-2].val) | (yyvsp[0].val); + } +#line 12865 "parser_bison.c" + break; + + case 683: /* nf_nat_flag: "random" */ +#line 4061 "parser_bison.y" + { (yyval.val) = NF_NAT_RANGE_PROTO_RANDOM; } +#line 12871 "parser_bison.c" + break; + + case 684: /* nf_nat_flag: "fully-random" */ +#line 4062 "parser_bison.y" + { (yyval.val) = NF_NAT_RANGE_PROTO_RANDOM_FULLY; } +#line 12877 "parser_bison.c" + break; + + case 685: /* nf_nat_flag: "persistent" */ +#line 4063 "parser_bison.y" + { (yyval.val) = NF_NAT_RANGE_PERSISTENT; } +#line 12883 "parser_bison.c" + break; + + case 687: /* queue_stmt: "queue" "to" queue_stmt_expr close_scope_queue */ +#line 4068 "parser_bison.y" + { + (yyval.stmt) = queue_stmt_alloc(&(yyloc), (yyvsp[-1].expr), 0); + } +#line 12891 "parser_bison.c" + break; + + case 688: /* queue_stmt: "queue" "flags" queue_stmt_flags "to" queue_stmt_expr close_scope_queue */ +#line 4072 "parser_bison.y" + { + (yyval.stmt) = queue_stmt_alloc(&(yyloc), (yyvsp[-1].expr), (yyvsp[-3].val)); + } +#line 12899 "parser_bison.c" + break; + + case 689: /* queue_stmt: "queue" "flags" queue_stmt_flags "num" queue_stmt_expr_simple close_scope_queue */ +#line 4076 "parser_bison.y" + { + (yyval.stmt) = queue_stmt_alloc(&(yyloc), (yyvsp[-1].expr), (yyvsp[-3].val)); + } +#line 12907 "parser_bison.c" + break; + + case 692: /* queue_stmt_alloc: "queue" */ +#line 4086 "parser_bison.y" + { + (yyval.stmt) = queue_stmt_alloc(&(yyloc), NULL, 0); + } +#line 12915 "parser_bison.c" + break; + + case 693: /* queue_stmt_args: queue_stmt_arg */ +#line 4092 "parser_bison.y" + { + (yyval.stmt) = (yyvsp[-1].stmt); + } +#line 12923 "parser_bison.c" + break; + + case 695: /* queue_stmt_arg: "num" queue_stmt_expr_simple */ +#line 4099 "parser_bison.y" + { + (yyvsp[-2].stmt)->queue.queue = (yyvsp[0].expr); + (yyvsp[-2].stmt)->queue.queue->location = (yyloc); + } +#line 12932 "parser_bison.c" + break; + + case 696: /* queue_stmt_arg: queue_stmt_flags */ +#line 4104 "parser_bison.y" + { + (yyvsp[-1].stmt)->queue.flags |= (yyvsp[0].val); + } +#line 12940 "parser_bison.c" + break; + + case 701: /* queue_stmt_expr_simple: queue_expr "-" queue_expr */ +#line 4116 "parser_bison.y" + { + (yyval.expr) = range_expr_alloc(&(yyloc), (yyvsp[-2].expr), (yyvsp[0].expr)); + } +#line 12948 "parser_bison.c" + break; + + case 707: /* queue_stmt_flags: queue_stmt_flags "comma" queue_stmt_flag */ +#line 4129 "parser_bison.y" + { + (yyval.val) = (yyvsp[-2].val) | (yyvsp[0].val); + } +#line 12956 "parser_bison.c" + break; + + case 708: /* queue_stmt_flag: "bypass" */ +#line 4134 "parser_bison.y" + { (yyval.val) = NFT_QUEUE_FLAG_BYPASS; } +#line 12962 "parser_bison.c" + break; + + case 709: /* queue_stmt_flag: "fanout" */ +#line 4135 "parser_bison.y" + { (yyval.val) = NFT_QUEUE_FLAG_CPU_FANOUT; } +#line 12968 "parser_bison.c" + break; + + case 712: /* set_elem_expr_stmt_alloc: concat_expr */ +#line 4143 "parser_bison.y" + { + (yyval.expr) = set_elem_expr_alloc(&(yylsp[0]), (yyvsp[0].expr)); + } +#line 12976 "parser_bison.c" + break; + + case 713: /* set_stmt: "set" set_stmt_op set_elem_expr_stmt set_ref_expr */ +#line 4149 "parser_bison.y" + { + (yyval.stmt) = set_stmt_alloc(&(yyloc)); + (yyval.stmt)->set.op = (yyvsp[-2].val); + (yyval.stmt)->set.key = (yyvsp[-1].expr); + (yyval.stmt)->set.set = (yyvsp[0].expr); + } +#line 12987 "parser_bison.c" + break; + + case 714: /* set_stmt: set_stmt_op set_ref_expr '{' set_elem_expr_stmt '}' */ +#line 4156 "parser_bison.y" + { + (yyval.stmt) = set_stmt_alloc(&(yyloc)); + (yyval.stmt)->set.op = (yyvsp[-4].val); + (yyval.stmt)->set.key = (yyvsp[-1].expr); + (yyval.stmt)->set.set = (yyvsp[-3].expr); + } +#line 12998 "parser_bison.c" + break; + + case 715: /* set_stmt: set_stmt_op set_ref_expr '{' set_elem_expr_stmt stateful_stmt_list '}' */ +#line 4163 "parser_bison.y" + { + (yyval.stmt) = set_stmt_alloc(&(yyloc)); + (yyval.stmt)->set.op = (yyvsp[-5].val); + (yyval.stmt)->set.key = (yyvsp[-2].expr); + (yyval.stmt)->set.set = (yyvsp[-4].expr); + list_splice_tail((yyvsp[-1].list), &(yyval.stmt)->set.stmt_list); + free((yyvsp[-1].list)); + } +#line 13011 "parser_bison.c" + break; + + case 716: /* set_stmt_op: "add" */ +#line 4173 "parser_bison.y" + { (yyval.val) = NFT_DYNSET_OP_ADD; } +#line 13017 "parser_bison.c" + break; + + case 717: /* set_stmt_op: "update" */ +#line 4174 "parser_bison.y" + { (yyval.val) = NFT_DYNSET_OP_UPDATE; } +#line 13023 "parser_bison.c" + break; + + case 718: /* set_stmt_op: "delete" */ +#line 4175 "parser_bison.y" + { (yyval.val) = NFT_DYNSET_OP_DELETE; } +#line 13029 "parser_bison.c" + break; + + case 719: /* map_stmt: set_stmt_op set_ref_expr '{' set_elem_expr_stmt "colon" set_elem_expr_stmt '}' */ +#line 4179 "parser_bison.y" + { + (yyval.stmt) = map_stmt_alloc(&(yyloc)); + (yyval.stmt)->map.op = (yyvsp[-6].val); + (yyval.stmt)->map.key = (yyvsp[-3].expr); + (yyval.stmt)->map.data = (yyvsp[-1].expr); + (yyval.stmt)->map.set = (yyvsp[-5].expr); + } +#line 13041 "parser_bison.c" + break; + + case 720: /* map_stmt: set_stmt_op set_ref_expr '{' set_elem_expr_stmt stateful_stmt_list "colon" set_elem_expr_stmt '}' */ +#line 4187 "parser_bison.y" + { + (yyval.stmt) = map_stmt_alloc(&(yyloc)); + (yyval.stmt)->map.op = (yyvsp[-7].val); + (yyval.stmt)->map.key = (yyvsp[-4].expr); + (yyval.stmt)->map.data = (yyvsp[-1].expr); + (yyval.stmt)->map.set = (yyvsp[-6].expr); + list_splice_tail((yyvsp[-3].list), &(yyval.stmt)->map.stmt_list); + free((yyvsp[-3].list)); + } +#line 13055 "parser_bison.c" + break; + + case 721: /* meter_stmt: flow_stmt_legacy_alloc flow_stmt_opts '{' meter_key_expr stmt '}' */ +#line 4199 "parser_bison.y" + { + (yyvsp[-5].stmt)->meter.key = (yyvsp[-2].expr); + (yyvsp[-5].stmt)->meter.stmt = (yyvsp[-1].stmt); + (yyval.stmt)->location = (yyloc); + (yyval.stmt) = (yyvsp[-5].stmt); + } +#line 13066 "parser_bison.c" + break; + + case 722: /* meter_stmt: meter_stmt_alloc */ +#line 4205 "parser_bison.y" + { (yyval.stmt) = (yyvsp[0].stmt); } +#line 13072 "parser_bison.c" + break; + + case 723: /* flow_stmt_legacy_alloc: "flow" */ +#line 4209 "parser_bison.y" + { + (yyval.stmt) = meter_stmt_alloc(&(yyloc)); + } +#line 13080 "parser_bison.c" + break; + + case 724: /* flow_stmt_opts: flow_stmt_opt */ +#line 4215 "parser_bison.y" + { + (yyval.stmt) = (yyvsp[-1].stmt); + } +#line 13088 "parser_bison.c" + break; + + case 726: /* flow_stmt_opt: "table" identifier */ +#line 4222 "parser_bison.y" + { + (yyvsp[-2].stmt)->meter.name = (yyvsp[0].string); + } +#line 13096 "parser_bison.c" + break; + + case 727: /* meter_stmt_alloc: "meter" identifier '{' meter_key_expr stmt '}' */ +#line 4228 "parser_bison.y" + { + (yyval.stmt) = meter_stmt_alloc(&(yyloc)); + (yyval.stmt)->meter.name = (yyvsp[-4].string); + (yyval.stmt)->meter.size = 0; + (yyval.stmt)->meter.key = (yyvsp[-2].expr); + (yyval.stmt)->meter.stmt = (yyvsp[-1].stmt); + (yyval.stmt)->location = (yyloc); + } +#line 13109 "parser_bison.c" + break; + + case 728: /* meter_stmt_alloc: "meter" identifier "size" "number" '{' meter_key_expr stmt '}' */ +#line 4237 "parser_bison.y" + { + (yyval.stmt) = meter_stmt_alloc(&(yyloc)); + (yyval.stmt)->meter.name = (yyvsp[-6].string); + (yyval.stmt)->meter.size = (yyvsp[-4].val); + (yyval.stmt)->meter.key = (yyvsp[-2].expr); + (yyval.stmt)->meter.stmt = (yyvsp[-1].stmt); + (yyval.stmt)->location = (yyloc); + } +#line 13122 "parser_bison.c" + break; + + case 729: /* match_stmt: relational_expr */ +#line 4248 "parser_bison.y" + { + (yyval.stmt) = expr_stmt_alloc(&(yyloc), (yyvsp[0].expr)); + } +#line 13130 "parser_bison.c" + break; + + case 730: /* variable_expr: '$' identifier */ +#line 4254 "parser_bison.y" + { + struct scope *scope = current_scope(state); + struct symbol *sym; + + sym = symbol_get(scope, (yyvsp[0].string)); + if (!sym) { + sym = symbol_lookup_fuzzy(scope, (yyvsp[0].string)); + if (sym) { + erec_queue(error(&(yylsp[0]), "unknown identifier '%s'; " + "did you mean identifier ‘%s’?", + (yyvsp[0].string), sym->identifier), + state->msgs); + } else { + erec_queue(error(&(yylsp[0]), "unknown identifier '%s'", (yyvsp[0].string)), + state->msgs); + } + xfree((yyvsp[0].string)); + YYERROR; + } + + (yyval.expr) = variable_expr_alloc(&(yyloc), scope, sym); + xfree((yyvsp[0].string)); + } +#line 13158 "parser_bison.c" + break; + + case 732: /* symbol_expr: string */ +#line 4281 "parser_bison.y" + { + (yyval.expr) = symbol_expr_alloc(&(yyloc), SYMBOL_VALUE, + current_scope(state), + (yyvsp[0].string)); + xfree((yyvsp[0].string)); + } +#line 13169 "parser_bison.c" + break; + + case 735: /* set_ref_symbol_expr: "@" identifier close_scope_at */ +#line 4294 "parser_bison.y" + { + (yyval.expr) = symbol_expr_alloc(&(yyloc), SYMBOL_SET, + current_scope(state), + (yyvsp[-1].string)); + xfree((yyvsp[-1].string)); + } +#line 13180 "parser_bison.c" + break; + + case 736: /* integer_expr: "number" */ +#line 4303 "parser_bison.y" + { + char str[64]; + + snprintf(str, sizeof(str), "%" PRIu64, (yyvsp[0].val)); + (yyval.expr) = symbol_expr_alloc(&(yyloc), SYMBOL_VALUE, + current_scope(state), + str); + } +#line 13193 "parser_bison.c" + break; + + case 737: /* primary_expr: symbol_expr */ +#line 4313 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 13199 "parser_bison.c" + break; + + case 738: /* primary_expr: integer_expr */ +#line 4314 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 13205 "parser_bison.c" + break; + + case 739: /* primary_expr: payload_expr */ +#line 4315 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 13211 "parser_bison.c" + break; + + case 740: /* primary_expr: exthdr_expr */ +#line 4316 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 13217 "parser_bison.c" + break; + + case 741: /* primary_expr: exthdr_exists_expr */ +#line 4317 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 13223 "parser_bison.c" + break; + + case 742: /* primary_expr: meta_expr */ +#line 4318 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 13229 "parser_bison.c" + break; + + case 743: /* primary_expr: socket_expr */ +#line 4319 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 13235 "parser_bison.c" + break; + + case 744: /* primary_expr: rt_expr */ +#line 4320 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 13241 "parser_bison.c" + break; + + case 745: /* primary_expr: ct_expr */ +#line 4321 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 13247 "parser_bison.c" + break; + + case 746: /* primary_expr: numgen_expr */ +#line 4322 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 13253 "parser_bison.c" + break; + + case 747: /* primary_expr: hash_expr */ +#line 4323 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 13259 "parser_bison.c" + break; + + case 748: /* primary_expr: fib_expr */ +#line 4324 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 13265 "parser_bison.c" + break; + + case 749: /* primary_expr: osf_expr */ +#line 4325 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 13271 "parser_bison.c" + break; + + case 750: /* primary_expr: xfrm_expr */ +#line 4326 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 13277 "parser_bison.c" + break; + + case 751: /* primary_expr: '(' basic_expr ')' */ +#line 4327 "parser_bison.y" + { (yyval.expr) = (yyvsp[-1].expr); } +#line 13283 "parser_bison.c" + break; + + case 752: /* fib_expr: "fib" fib_tuple fib_result close_scope_fib */ +#line 4331 "parser_bison.y" + { + if (((yyvsp[-2].val) & (NFTA_FIB_F_SADDR|NFTA_FIB_F_DADDR)) == 0) { + erec_queue(error(&(yylsp[-2]), "fib: need either saddr or daddr"), state->msgs); + YYERROR; + } + + if (((yyvsp[-2].val) & (NFTA_FIB_F_SADDR|NFTA_FIB_F_DADDR)) == + (NFTA_FIB_F_SADDR|NFTA_FIB_F_DADDR)) { + erec_queue(error(&(yylsp[-2]), "fib: saddr and daddr are mutually exclusive"), state->msgs); + YYERROR; + } + + if (((yyvsp[-2].val) & (NFTA_FIB_F_IIF|NFTA_FIB_F_OIF)) == + (NFTA_FIB_F_IIF|NFTA_FIB_F_OIF)) { + erec_queue(error(&(yylsp[-2]), "fib: iif and oif are mutually exclusive"), state->msgs); + YYERROR; + } + + (yyval.expr) = fib_expr_alloc(&(yyloc), (yyvsp[-2].val), (yyvsp[-1].val)); + } +#line 13308 "parser_bison.c" + break; + + case 753: /* fib_result: "oif" */ +#line 4353 "parser_bison.y" + { (yyval.val) =NFT_FIB_RESULT_OIF; } +#line 13314 "parser_bison.c" + break; + + case 754: /* fib_result: "oifname" */ +#line 4354 "parser_bison.y" + { (yyval.val) =NFT_FIB_RESULT_OIFNAME; } +#line 13320 "parser_bison.c" + break; + + case 755: /* fib_result: "type" close_scope_type */ +#line 4355 "parser_bison.y" + { (yyval.val) =NFT_FIB_RESULT_ADDRTYPE; } +#line 13326 "parser_bison.c" + break; + + case 756: /* fib_flag: "saddr" */ +#line 4358 "parser_bison.y" + { (yyval.val) = NFTA_FIB_F_SADDR; } +#line 13332 "parser_bison.c" + break; + + case 757: /* fib_flag: "daddr" */ +#line 4359 "parser_bison.y" + { (yyval.val) = NFTA_FIB_F_DADDR; } +#line 13338 "parser_bison.c" + break; + + case 758: /* fib_flag: "mark" */ +#line 4360 "parser_bison.y" + { (yyval.val) = NFTA_FIB_F_MARK; } +#line 13344 "parser_bison.c" + break; + + case 759: /* fib_flag: "iif" */ +#line 4361 "parser_bison.y" + { (yyval.val) = NFTA_FIB_F_IIF; } +#line 13350 "parser_bison.c" + break; + + case 760: /* fib_flag: "oif" */ +#line 4362 "parser_bison.y" + { (yyval.val) = NFTA_FIB_F_OIF; } +#line 13356 "parser_bison.c" + break; + + case 761: /* fib_tuple: fib_flag "." fib_tuple */ +#line 4366 "parser_bison.y" + { + (yyval.val) = (yyvsp[-2].val) | (yyvsp[0].val); + } +#line 13364 "parser_bison.c" + break; + + case 763: /* osf_expr: "osf" osf_ttl "version" close_scope_osf */ +#line 4373 "parser_bison.y" + { + (yyval.expr) = osf_expr_alloc(&(yyloc), (yyvsp[-2].val), NFT_OSF_F_VERSION); + } +#line 13372 "parser_bison.c" + break; + + case 764: /* osf_expr: "osf" osf_ttl "name" close_scope_osf */ +#line 4377 "parser_bison.y" + { + (yyval.expr) = osf_expr_alloc(&(yyloc), (yyvsp[-2].val), 0); + } +#line 13380 "parser_bison.c" + break; + + case 765: /* osf_ttl: %empty */ +#line 4383 "parser_bison.y" + { + (yyval.val) = NF_OSF_TTL_TRUE; + } +#line 13388 "parser_bison.c" + break; + + case 766: /* osf_ttl: "ttl" "string" */ +#line 4387 "parser_bison.y" + { + if (!strcmp((yyvsp[0].string), "loose")) + (yyval.val) = NF_OSF_TTL_LESS; + else if (!strcmp((yyvsp[0].string), "skip")) + (yyval.val) = NF_OSF_TTL_NOCHECK; + else { + erec_queue(error(&(yylsp[0]), "invalid ttl option"), + state->msgs); + xfree((yyvsp[0].string)); + YYERROR; + } + xfree((yyvsp[0].string)); + } +#line 13406 "parser_bison.c" + break; + + case 768: /* shift_expr: shift_expr "<<" primary_rhs_expr */ +#line 4404 "parser_bison.y" + { + (yyval.expr) = binop_expr_alloc(&(yyloc), OP_LSHIFT, (yyvsp[-2].expr), (yyvsp[0].expr)); + } +#line 13414 "parser_bison.c" + break; + + case 769: /* shift_expr: shift_expr ">>" primary_rhs_expr */ +#line 4408 "parser_bison.y" + { + (yyval.expr) = binop_expr_alloc(&(yyloc), OP_RSHIFT, (yyvsp[-2].expr), (yyvsp[0].expr)); + } +#line 13422 "parser_bison.c" + break; + + case 771: /* and_expr: and_expr "&" shift_rhs_expr */ +#line 4415 "parser_bison.y" + { + (yyval.expr) = binop_expr_alloc(&(yyloc), OP_AND, (yyvsp[-2].expr), (yyvsp[0].expr)); + } +#line 13430 "parser_bison.c" + break; + + case 773: /* exclusive_or_expr: exclusive_or_expr "^" and_rhs_expr */ +#line 4422 "parser_bison.y" + { + (yyval.expr) = binop_expr_alloc(&(yyloc), OP_XOR, (yyvsp[-2].expr), (yyvsp[0].expr)); + } +#line 13438 "parser_bison.c" + break; + + case 775: /* inclusive_or_expr: inclusive_or_expr '|' exclusive_or_rhs_expr */ +#line 4429 "parser_bison.y" + { + (yyval.expr) = binop_expr_alloc(&(yyloc), OP_OR, (yyvsp[-2].expr), (yyvsp[0].expr)); + } +#line 13446 "parser_bison.c" + break; + + case 778: /* concat_expr: concat_expr "." basic_expr */ +#line 4439 "parser_bison.y" + { + struct location rhs[] = { + [1] = (yylsp[-1]), + [2] = (yylsp[0]), + }; + + (yyval.expr) = handle_concat_expr(&(yyloc), (yyval.expr), (yyvsp[-2].expr), (yyvsp[0].expr), rhs); + } +#line 13459 "parser_bison.c" + break; + + case 779: /* prefix_rhs_expr: basic_rhs_expr "/" "number" */ +#line 4450 "parser_bison.y" + { + (yyval.expr) = prefix_expr_alloc(&(yyloc), (yyvsp[-2].expr), (yyvsp[0].val)); + } +#line 13467 "parser_bison.c" + break; + + case 780: /* range_rhs_expr: basic_rhs_expr "-" basic_rhs_expr */ +#line 4456 "parser_bison.y" + { + (yyval.expr) = range_expr_alloc(&(yyloc), (yyvsp[-2].expr), (yyvsp[0].expr)); + } +#line 13475 "parser_bison.c" + break; + + case 783: /* map_expr: concat_expr "map" rhs_expr */ +#line 4466 "parser_bison.y" + { + (yyval.expr) = map_expr_alloc(&(yyloc), (yyvsp[-2].expr), (yyvsp[0].expr)); + } +#line 13483 "parser_bison.c" + break; + + case 787: /* set_expr: '{' set_list_expr '}' */ +#line 4477 "parser_bison.y" + { + (yyvsp[-1].expr)->location = (yyloc); + (yyval.expr) = (yyvsp[-1].expr); + } +#line 13492 "parser_bison.c" + break; + + case 788: /* set_list_expr: set_list_member_expr */ +#line 4484 "parser_bison.y" + { + (yyval.expr) = set_expr_alloc(&(yyloc), NULL); + compound_expr_add((yyval.expr), (yyvsp[0].expr)); + } +#line 13501 "parser_bison.c" + break; + + case 789: /* set_list_expr: set_list_expr "comma" set_list_member_expr */ +#line 4489 "parser_bison.y" + { + compound_expr_add((yyvsp[-2].expr), (yyvsp[0].expr)); + (yyval.expr) = (yyvsp[-2].expr); + } +#line 13510 "parser_bison.c" + break; + + case 791: /* set_list_member_expr: opt_newline set_expr opt_newline */ +#line 4497 "parser_bison.y" + { + (yyval.expr) = (yyvsp[-1].expr); + } +#line 13518 "parser_bison.c" + break; + + case 792: /* set_list_member_expr: opt_newline set_elem_expr opt_newline */ +#line 4501 "parser_bison.y" + { + (yyval.expr) = (yyvsp[-1].expr); + } +#line 13526 "parser_bison.c" + break; + + case 793: /* set_list_member_expr: opt_newline set_elem_expr "colon" set_rhs_expr opt_newline */ +#line 4505 "parser_bison.y" + { + (yyval.expr) = mapping_expr_alloc(&(yylsp[-3]), (yyvsp[-3].expr), (yyvsp[-1].expr)); + } +#line 13534 "parser_bison.c" + break; + + case 795: /* meter_key_expr: meter_key_expr_alloc set_elem_options */ +#line 4512 "parser_bison.y" + { + (yyval.expr)->location = (yyloc); + (yyval.expr) = (yyvsp[-1].expr); + } +#line 13543 "parser_bison.c" + break; + + case 796: /* meter_key_expr_alloc: concat_expr */ +#line 4519 "parser_bison.y" + { + (yyval.expr) = set_elem_expr_alloc(&(yylsp[0]), (yyvsp[0].expr)); + } +#line 13551 "parser_bison.c" + break; + + case 799: /* set_elem_key_expr: set_lhs_expr */ +#line 4528 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 13557 "parser_bison.c" + break; + + case 800: /* set_elem_key_expr: "*" */ +#line 4529 "parser_bison.y" + { (yyval.expr) = set_elem_catchall_expr_alloc(&(yylsp[0])); } +#line 13563 "parser_bison.c" + break; + + case 801: /* set_elem_expr_alloc: set_elem_key_expr set_elem_stmt_list */ +#line 4533 "parser_bison.y" + { + (yyval.expr) = set_elem_expr_alloc(&(yylsp[-1]), (yyvsp[-1].expr)); + list_splice_tail((yyvsp[0].list), &(yyval.expr)->stmt_list); + xfree((yyvsp[0].list)); + } +#line 13573 "parser_bison.c" + break; + + case 802: /* set_elem_expr_alloc: set_elem_key_expr */ +#line 4539 "parser_bison.y" + { + (yyval.expr) = set_elem_expr_alloc(&(yylsp[0]), (yyvsp[0].expr)); + } +#line 13581 "parser_bison.c" + break; + + case 803: /* set_elem_options: set_elem_option */ +#line 4545 "parser_bison.y" + { + (yyval.expr) = (yyvsp[-1].expr); + } +#line 13589 "parser_bison.c" + break; + + case 805: /* set_elem_option: "timeout" time_spec */ +#line 4552 "parser_bison.y" + { + (yyvsp[-2].expr)->timeout = (yyvsp[0].val); + } +#line 13597 "parser_bison.c" + break; + + case 806: /* set_elem_option: "expires" time_spec */ +#line 4556 "parser_bison.y" + { + (yyvsp[-2].expr)->expiration = (yyvsp[0].val); + } +#line 13605 "parser_bison.c" + break; + + case 807: /* set_elem_option: comment_spec */ +#line 4560 "parser_bison.y" + { + if (already_set((yyvsp[-1].expr)->comment, &(yylsp[0]), state)) { + xfree((yyvsp[0].string)); + YYERROR; + } + (yyvsp[-1].expr)->comment = (yyvsp[0].string); + } +#line 13617 "parser_bison.c" + break; + + case 808: /* set_elem_expr_options: set_elem_expr_option */ +#line 4570 "parser_bison.y" + { + (yyval.expr) = (yyvsp[-1].expr); + } +#line 13625 "parser_bison.c" + break; + + case 810: /* set_elem_stmt_list: set_elem_stmt */ +#line 4577 "parser_bison.y" + { + (yyval.list) = xmalloc(sizeof(*(yyval.list))); + init_list_head((yyval.list)); + list_add_tail(&(yyvsp[0].stmt)->list, (yyval.list)); + } +#line 13635 "parser_bison.c" + break; + + case 811: /* set_elem_stmt_list: set_elem_stmt_list set_elem_stmt */ +#line 4583 "parser_bison.y" + { + (yyval.list) = (yyvsp[-1].list); + list_add_tail(&(yyvsp[0].stmt)->list, (yyvsp[-1].list)); + } +#line 13644 "parser_bison.c" + break; + + case 812: /* set_elem_stmt: "counter" close_scope_counter */ +#line 4590 "parser_bison.y" + { + (yyval.stmt) = counter_stmt_alloc(&(yyloc)); + } +#line 13652 "parser_bison.c" + break; + + case 813: /* set_elem_stmt: "counter" "packets" "number" "bytes" "number" close_scope_counter */ +#line 4594 "parser_bison.y" + { + (yyval.stmt) = counter_stmt_alloc(&(yyloc)); + (yyval.stmt)->counter.packets = (yyvsp[-3].val); + (yyval.stmt)->counter.bytes = (yyvsp[-1].val); + } +#line 13662 "parser_bison.c" + break; + + case 814: /* set_elem_stmt: "limit" "rate" limit_mode limit_rate_pkts limit_burst_pkts close_scope_limit */ +#line 4600 "parser_bison.y" + { + if ((yyvsp[-1].val) == 0) { + erec_queue(error(&(yylsp[-1]), "limit burst must be > 0"), + state->msgs); + YYERROR; + } + (yyval.stmt) = limit_stmt_alloc(&(yyloc)); + (yyval.stmt)->limit.rate = (yyvsp[-2].limit_rate).rate; + (yyval.stmt)->limit.unit = (yyvsp[-2].limit_rate).unit; + (yyval.stmt)->limit.burst = (yyvsp[-1].val); + (yyval.stmt)->limit.type = NFT_LIMIT_PKTS; + (yyval.stmt)->limit.flags = (yyvsp[-3].val); + } +#line 13680 "parser_bison.c" + break; + + case 815: /* set_elem_stmt: "limit" "rate" limit_mode limit_rate_bytes limit_burst_bytes close_scope_limit */ +#line 4614 "parser_bison.y" + { + if ((yyvsp[-1].val) == 0) { + erec_queue(error(&(yylsp[0]), "limit burst must be > 0"), + state->msgs); + YYERROR; + } + (yyval.stmt) = limit_stmt_alloc(&(yyloc)); + (yyval.stmt)->limit.rate = (yyvsp[-2].limit_rate).rate; + (yyval.stmt)->limit.unit = (yyvsp[-2].limit_rate).unit; + (yyval.stmt)->limit.burst = (yyvsp[-1].val); + (yyval.stmt)->limit.type = NFT_LIMIT_PKT_BYTES; + (yyval.stmt)->limit.flags = (yyvsp[-3].val); + } +#line 13698 "parser_bison.c" + break; + + case 816: /* set_elem_stmt: "ct" "count" "number" close_scope_ct */ +#line 4628 "parser_bison.y" + { + (yyval.stmt) = connlimit_stmt_alloc(&(yyloc)); + (yyval.stmt)->connlimit.count = (yyvsp[-1].val); + } +#line 13707 "parser_bison.c" + break; + + case 817: /* set_elem_stmt: "ct" "count" "over" "number" close_scope_ct */ +#line 4633 "parser_bison.y" + { + (yyval.stmt) = connlimit_stmt_alloc(&(yyloc)); + (yyval.stmt)->connlimit.count = (yyvsp[-1].val); + (yyval.stmt)->connlimit.flags = NFT_CONNLIMIT_F_INV; + } +#line 13717 "parser_bison.c" + break; + + case 818: /* set_elem_stmt: "quota" quota_mode "number" quota_unit quota_used close_scope_quota */ +#line 4639 "parser_bison.y" + { + struct error_record *erec; + uint64_t rate; + + erec = data_unit_parse(&(yyloc), (yyvsp[-2].string), &rate); + xfree((yyvsp[-2].string)); + if (erec != NULL) { + erec_queue(erec, state->msgs); + YYERROR; + } + (yyval.stmt) = quota_stmt_alloc(&(yyloc)); + (yyval.stmt)->quota.bytes = (yyvsp[-3].val) * rate; + (yyval.stmt)->quota.used = (yyvsp[-1].val); + (yyval.stmt)->quota.flags = (yyvsp[-4].val); + } +#line 13737 "parser_bison.c" + break; + + case 819: /* set_elem_stmt: "last" "used" "never" close_scope_last */ +#line 4655 "parser_bison.y" + { + (yyval.stmt) = last_stmt_alloc(&(yyloc)); + } +#line 13745 "parser_bison.c" + break; + + case 820: /* set_elem_stmt: "last" "used" time_spec close_scope_last */ +#line 4659 "parser_bison.y" + { + (yyval.stmt) = last_stmt_alloc(&(yyloc)); + (yyval.stmt)->last.used = (yyvsp[-1].val); + (yyval.stmt)->last.set = true; + } +#line 13755 "parser_bison.c" + break; + + case 821: /* set_elem_expr_option: "timeout" time_spec */ +#line 4667 "parser_bison.y" + { + (yyvsp[-2].expr)->timeout = (yyvsp[0].val); + } +#line 13763 "parser_bison.c" + break; + + case 822: /* set_elem_expr_option: "expires" time_spec */ +#line 4671 "parser_bison.y" + { + (yyvsp[-2].expr)->expiration = (yyvsp[0].val); + } +#line 13771 "parser_bison.c" + break; + + case 823: /* set_elem_expr_option: comment_spec */ +#line 4675 "parser_bison.y" + { + if (already_set((yyvsp[-1].expr)->comment, &(yylsp[0]), state)) { + xfree((yyvsp[0].string)); + YYERROR; + } + (yyvsp[-1].expr)->comment = (yyvsp[0].string); + } +#line 13783 "parser_bison.c" + break; + + case 829: /* initializer_expr: '{' '}' */ +#line 4693 "parser_bison.y" + { (yyval.expr) = compound_expr_alloc(&(yyloc), EXPR_SET); } +#line 13789 "parser_bison.c" + break; + + case 830: /* initializer_expr: "-" "number" */ +#line 4695 "parser_bison.y" + { + int32_t num = -(yyvsp[0].val); + + (yyval.expr) = constant_expr_alloc(&(yyloc), &integer_type, + BYTEORDER_HOST_ENDIAN, + sizeof(num) * BITS_PER_BYTE, + &num); + } +#line 13802 "parser_bison.c" + break; + + case 831: /* counter_config: "packets" "number" "bytes" "number" */ +#line 4706 "parser_bison.y" + { + struct counter *counter; + + counter = &(yyvsp[-4].obj)->counter; + counter->packets = (yyvsp[-2].val); + counter->bytes = (yyvsp[0].val); + } +#line 13814 "parser_bison.c" + break; + + case 832: /* counter_obj: %empty */ +#line 4716 "parser_bison.y" + { + (yyval.obj) = obj_alloc(&(yyloc)); + (yyval.obj)->type = NFT_OBJECT_COUNTER; + } +#line 13823 "parser_bison.c" + break; + + case 833: /* quota_config: quota_mode "number" quota_unit quota_used */ +#line 4723 "parser_bison.y" + { + struct error_record *erec; + struct quota *quota; + uint64_t rate; + + erec = data_unit_parse(&(yyloc), (yyvsp[-1].string), &rate); + xfree((yyvsp[-1].string)); + if (erec != NULL) { + erec_queue(erec, state->msgs); + YYERROR; + } + + quota = &(yyvsp[-4].obj)->quota; + quota->bytes = (yyvsp[-2].val) * rate; + quota->used = (yyvsp[0].val); + quota->flags = (yyvsp[-3].val); + } +#line 13845 "parser_bison.c" + break; + + case 834: /* quota_obj: %empty */ +#line 4743 "parser_bison.y" + { + (yyval.obj) = obj_alloc(&(yyloc)); + (yyval.obj)->type = NFT_OBJECT_QUOTA; + } +#line 13854 "parser_bison.c" + break; + + case 835: /* secmark_config: string */ +#line 4750 "parser_bison.y" + { + int ret; + struct secmark *secmark; + + secmark = &(yyvsp[-1].obj)->secmark; + ret = snprintf(secmark->ctx, sizeof(secmark->ctx), "%s", (yyvsp[0].string)); + if (ret <= 0 || ret >= (int)sizeof(secmark->ctx)) { + erec_queue(error(&(yylsp[0]), "invalid context '%s', max length is %u\n", (yyvsp[0].string), (int)sizeof(secmark->ctx)), state->msgs); + xfree((yyvsp[0].string)); + YYERROR; + } + xfree((yyvsp[0].string)); + } +#line 13872 "parser_bison.c" + break; + + case 836: /* secmark_obj: %empty */ +#line 4766 "parser_bison.y" + { + (yyval.obj) = obj_alloc(&(yyloc)); + (yyval.obj)->type = NFT_OBJECT_SECMARK; + } +#line 13881 "parser_bison.c" + break; + + case 837: /* ct_obj_type: "helper" */ +#line 4772 "parser_bison.y" + { (yyval.val) = NFT_OBJECT_CT_HELPER; } +#line 13887 "parser_bison.c" + break; + + case 838: /* ct_obj_type: "timeout" */ +#line 4773 "parser_bison.y" + { (yyval.val) = NFT_OBJECT_CT_TIMEOUT; } +#line 13893 "parser_bison.c" + break; + + case 839: /* ct_obj_type: "expectation" */ +#line 4774 "parser_bison.y" + { (yyval.val) = NFT_OBJECT_CT_EXPECT; } +#line 13899 "parser_bison.c" + break; + + case 840: /* ct_cmd_type: "helpers" */ +#line 4777 "parser_bison.y" + { (yyval.val) = CMD_OBJ_CT_HELPERS; } +#line 13905 "parser_bison.c" + break; + + case 841: /* ct_cmd_type: "timeout" */ +#line 4778 "parser_bison.y" + { (yyval.val) = CMD_OBJ_CT_TIMEOUTS; } +#line 13911 "parser_bison.c" + break; + + case 842: /* ct_cmd_type: "expectation" */ +#line 4779 "parser_bison.y" + { (yyval.val) = CMD_OBJ_CT_EXPECTATIONS; } +#line 13917 "parser_bison.c" + break; + + case 843: /* ct_l4protoname: "tcp" close_scope_tcp */ +#line 4782 "parser_bison.y" + { (yyval.val) = IPPROTO_TCP; } +#line 13923 "parser_bison.c" + break; + + case 844: /* ct_l4protoname: "udp" close_scope_udp */ +#line 4783 "parser_bison.y" + { (yyval.val) = IPPROTO_UDP; } +#line 13929 "parser_bison.c" + break; + + case 845: /* ct_helper_config: "type" "quoted string" "protocol" ct_l4protoname stmt_separator close_scope_type */ +#line 4787 "parser_bison.y" + { + struct ct_helper *ct; + int ret; + + ct = &(yyvsp[-6].obj)->ct_helper; + + ret = snprintf(ct->name, sizeof(ct->name), "%s", (yyvsp[-4].string)); + if (ret <= 0 || ret >= (int)sizeof(ct->name)) { + erec_queue(error(&(yylsp[-4]), "invalid name '%s', max length is %u\n", (yyvsp[-4].string), (int)sizeof(ct->name)), state->msgs); + YYERROR; + } + xfree((yyvsp[-4].string)); + + ct->l4proto = (yyvsp[-2].val); + } +#line 13949 "parser_bison.c" + break; + + case 846: /* ct_helper_config: "l3proto" family_spec_explicit stmt_separator */ +#line 4803 "parser_bison.y" + { + (yyvsp[-3].obj)->ct_helper.l3proto = (yyvsp[-1].val); + } +#line 13957 "parser_bison.c" + break; + + case 847: /* timeout_states: timeout_state */ +#line 4809 "parser_bison.y" + { + (yyval.list) = xmalloc(sizeof(*(yyval.list))); + init_list_head((yyval.list)); + list_add_tail((yyvsp[0].list), (yyval.list)); + } +#line 13967 "parser_bison.c" + break; + + case 848: /* timeout_states: timeout_states "comma" timeout_state */ +#line 4815 "parser_bison.y" + { + list_add_tail((yyvsp[0].list), (yyvsp[-2].list)); + (yyval.list) = (yyvsp[-2].list); + } +#line 13976 "parser_bison.c" + break; + + case 849: /* timeout_state: "string" "colon" time_spec_or_num_s */ +#line 4822 "parser_bison.y" + { + struct timeout_state *ts; + + ts = xzalloc(sizeof(*ts)); + ts->timeout_str = (yyvsp[-2].string); + ts->timeout_value = (yyvsp[0].val); + ts->location = (yylsp[-2]); + init_list_head(&ts->head); + (yyval.list) = &ts->head; + } +#line 13991 "parser_bison.c" + break; + + case 850: /* ct_timeout_config: "protocol" ct_l4protoname stmt_separator */ +#line 4835 "parser_bison.y" + { + struct ct_timeout *ct; + int l4proto = (yyvsp[-1].val); + + ct = &(yyvsp[-3].obj)->ct_timeout; + ct->l4proto = l4proto; + } +#line 14003 "parser_bison.c" + break; + + case 851: /* ct_timeout_config: "policy" '=' '{' timeout_states '}' stmt_separator close_scope_policy */ +#line 4843 "parser_bison.y" + { + struct ct_timeout *ct; + + ct = &(yyvsp[-7].obj)->ct_timeout; + list_splice_tail((yyvsp[-3].list), &ct->timeout_list); + xfree((yyvsp[-3].list)); + } +#line 14015 "parser_bison.c" + break; + + case 852: /* ct_timeout_config: "l3proto" family_spec_explicit stmt_separator */ +#line 4851 "parser_bison.y" + { + (yyvsp[-3].obj)->ct_timeout.l3proto = (yyvsp[-1].val); + } +#line 14023 "parser_bison.c" + break; + + case 853: /* ct_expect_config: "protocol" ct_l4protoname stmt_separator */ +#line 4857 "parser_bison.y" + { + (yyvsp[-3].obj)->ct_expect.l4proto = (yyvsp[-1].val); + } +#line 14031 "parser_bison.c" + break; + + case 854: /* ct_expect_config: "dport" "number" stmt_separator */ +#line 4861 "parser_bison.y" + { + (yyvsp[-3].obj)->ct_expect.dport = (yyvsp[-1].val); + } +#line 14039 "parser_bison.c" + break; + + case 855: /* ct_expect_config: "timeout" time_spec stmt_separator */ +#line 4865 "parser_bison.y" + { + (yyvsp[-3].obj)->ct_expect.timeout = (yyvsp[-1].val); + } +#line 14047 "parser_bison.c" + break; + + case 856: /* ct_expect_config: "size" "number" stmt_separator */ +#line 4869 "parser_bison.y" + { + (yyvsp[-3].obj)->ct_expect.size = (yyvsp[-1].val); + } +#line 14055 "parser_bison.c" + break; + + case 857: /* ct_expect_config: "l3proto" family_spec_explicit stmt_separator */ +#line 4873 "parser_bison.y" + { + (yyvsp[-3].obj)->ct_expect.l3proto = (yyvsp[-1].val); + } +#line 14063 "parser_bison.c" + break; + + case 858: /* ct_obj_alloc: %empty */ +#line 4879 "parser_bison.y" + { + (yyval.obj) = obj_alloc(&(yyloc)); + } +#line 14071 "parser_bison.c" + break; + + case 859: /* limit_config: "rate" limit_mode limit_rate_pkts limit_burst_pkts */ +#line 4885 "parser_bison.y" + { + struct limit *limit; + + limit = &(yyvsp[-4].obj)->limit; + limit->rate = (yyvsp[-1].limit_rate).rate; + limit->unit = (yyvsp[-1].limit_rate).unit; + limit->burst = (yyvsp[0].val); + limit->type = NFT_LIMIT_PKTS; + limit->flags = (yyvsp[-2].val); + } +#line 14086 "parser_bison.c" + break; + + case 860: /* limit_config: "rate" limit_mode limit_rate_bytes limit_burst_bytes */ +#line 4896 "parser_bison.y" + { + struct limit *limit; + + limit = &(yyvsp[-4].obj)->limit; + limit->rate = (yyvsp[-1].limit_rate).rate; + limit->unit = (yyvsp[-1].limit_rate).unit; + limit->burst = (yyvsp[0].val); + limit->type = NFT_LIMIT_PKT_BYTES; + limit->flags = (yyvsp[-2].val); + } +#line 14101 "parser_bison.c" + break; + + case 861: /* limit_obj: %empty */ +#line 4909 "parser_bison.y" + { + (yyval.obj) = obj_alloc(&(yyloc)); + (yyval.obj)->type = NFT_OBJECT_LIMIT; + } +#line 14110 "parser_bison.c" + break; + + case 862: /* relational_expr: expr rhs_expr */ +#line 4916 "parser_bison.y" + { + (yyval.expr) = relational_expr_alloc(&(yyloc), OP_IMPLICIT, (yyvsp[-1].expr), (yyvsp[0].expr)); + } +#line 14118 "parser_bison.c" + break; + + case 863: /* relational_expr: expr list_rhs_expr */ +#line 4920 "parser_bison.y" + { + (yyval.expr) = relational_expr_alloc(&(yyloc), OP_IMPLICIT, (yyvsp[-1].expr), (yyvsp[0].expr)); + } +#line 14126 "parser_bison.c" + break; + + case 864: /* relational_expr: expr basic_rhs_expr "/" list_rhs_expr */ +#line 4924 "parser_bison.y" + { + (yyval.expr) = flagcmp_expr_alloc(&(yyloc), OP_EQ, (yyvsp[-3].expr), (yyvsp[0].expr), (yyvsp[-2].expr)); + } +#line 14134 "parser_bison.c" + break; + + case 865: /* relational_expr: expr list_rhs_expr "/" list_rhs_expr */ +#line 4928 "parser_bison.y" + { + (yyval.expr) = flagcmp_expr_alloc(&(yyloc), OP_EQ, (yyvsp[-3].expr), (yyvsp[0].expr), (yyvsp[-2].expr)); + } +#line 14142 "parser_bison.c" + break; + + case 866: /* relational_expr: expr relational_op basic_rhs_expr "/" list_rhs_expr */ +#line 4932 "parser_bison.y" + { + (yyval.expr) = flagcmp_expr_alloc(&(yyloc), (yyvsp[-3].val), (yyvsp[-4].expr), (yyvsp[0].expr), (yyvsp[-2].expr)); + } +#line 14150 "parser_bison.c" + break; + + case 867: /* relational_expr: expr relational_op list_rhs_expr "/" list_rhs_expr */ +#line 4936 "parser_bison.y" + { + (yyval.expr) = flagcmp_expr_alloc(&(yyloc), (yyvsp[-3].val), (yyvsp[-4].expr), (yyvsp[0].expr), (yyvsp[-2].expr)); + } +#line 14158 "parser_bison.c" + break; + + case 868: /* relational_expr: expr relational_op rhs_expr */ +#line 4940 "parser_bison.y" + { + (yyval.expr) = relational_expr_alloc(&(yylsp[-1]), (yyvsp[-1].val), (yyvsp[-2].expr), (yyvsp[0].expr)); + } +#line 14166 "parser_bison.c" + break; + + case 869: /* relational_expr: expr relational_op list_rhs_expr */ +#line 4944 "parser_bison.y" + { + (yyval.expr) = relational_expr_alloc(&(yylsp[-1]), (yyvsp[-1].val), (yyvsp[-2].expr), (yyvsp[0].expr)); + } +#line 14174 "parser_bison.c" + break; + + case 870: /* list_rhs_expr: basic_rhs_expr "comma" basic_rhs_expr */ +#line 4950 "parser_bison.y" + { + (yyval.expr) = list_expr_alloc(&(yyloc)); + compound_expr_add((yyval.expr), (yyvsp[-2].expr)); + compound_expr_add((yyval.expr), (yyvsp[0].expr)); + } +#line 14184 "parser_bison.c" + break; + + case 871: /* list_rhs_expr: list_rhs_expr "comma" basic_rhs_expr */ +#line 4956 "parser_bison.y" + { + (yyvsp[-2].expr)->location = (yyloc); + compound_expr_add((yyvsp[-2].expr), (yyvsp[0].expr)); + (yyval.expr) = (yyvsp[-2].expr); + } +#line 14194 "parser_bison.c" + break; + + case 872: /* rhs_expr: concat_rhs_expr */ +#line 4963 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 14200 "parser_bison.c" + break; + + case 873: /* rhs_expr: set_expr */ +#line 4964 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 14206 "parser_bison.c" + break; + + case 874: /* rhs_expr: set_ref_symbol_expr */ +#line 4965 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 14212 "parser_bison.c" + break; + + case 876: /* shift_rhs_expr: shift_rhs_expr "<<" primary_rhs_expr */ +#line 4970 "parser_bison.y" + { + (yyval.expr) = binop_expr_alloc(&(yyloc), OP_LSHIFT, (yyvsp[-2].expr), (yyvsp[0].expr)); + } +#line 14220 "parser_bison.c" + break; + + case 877: /* shift_rhs_expr: shift_rhs_expr ">>" primary_rhs_expr */ +#line 4974 "parser_bison.y" + { + (yyval.expr) = binop_expr_alloc(&(yyloc), OP_RSHIFT, (yyvsp[-2].expr), (yyvsp[0].expr)); + } +#line 14228 "parser_bison.c" + break; + + case 879: /* and_rhs_expr: and_rhs_expr "&" shift_rhs_expr */ +#line 4981 "parser_bison.y" + { + (yyval.expr) = binop_expr_alloc(&(yyloc), OP_AND, (yyvsp[-2].expr), (yyvsp[0].expr)); + } +#line 14236 "parser_bison.c" + break; + + case 881: /* exclusive_or_rhs_expr: exclusive_or_rhs_expr "^" and_rhs_expr */ +#line 4988 "parser_bison.y" + { + (yyval.expr) = binop_expr_alloc(&(yyloc), OP_XOR, (yyvsp[-2].expr), (yyvsp[0].expr)); + } +#line 14244 "parser_bison.c" + break; + + case 883: /* inclusive_or_rhs_expr: inclusive_or_rhs_expr '|' exclusive_or_rhs_expr */ +#line 4995 "parser_bison.y" + { + (yyval.expr) = binop_expr_alloc(&(yyloc), OP_OR, (yyvsp[-2].expr), (yyvsp[0].expr)); + } +#line 14252 "parser_bison.c" + break; + + case 887: /* concat_rhs_expr: concat_rhs_expr "." multiton_rhs_expr */ +#line 5006 "parser_bison.y" + { + struct location rhs[] = { + [1] = (yylsp[-1]), + [2] = (yylsp[0]), + }; + + (yyval.expr) = handle_concat_expr(&(yyloc), (yyval.expr), (yyvsp[-2].expr), (yyvsp[0].expr), rhs); + } +#line 14265 "parser_bison.c" + break; + + case 888: /* concat_rhs_expr: concat_rhs_expr "." basic_rhs_expr */ +#line 5015 "parser_bison.y" + { + struct location rhs[] = { + [1] = (yylsp[-1]), + [2] = (yylsp[0]), + }; + + (yyval.expr) = handle_concat_expr(&(yyloc), (yyval.expr), (yyvsp[-2].expr), (yyvsp[0].expr), rhs); + } +#line 14278 "parser_bison.c" + break; + + case 889: /* boolean_keys: "exists" */ +#line 5025 "parser_bison.y" + { (yyval.val8) = true; } +#line 14284 "parser_bison.c" + break; + + case 890: /* boolean_keys: "missing" */ +#line 5026 "parser_bison.y" + { (yyval.val8) = false; } +#line 14290 "parser_bison.c" + break; + + case 891: /* boolean_expr: boolean_keys */ +#line 5030 "parser_bison.y" + { + (yyval.expr) = constant_expr_alloc(&(yyloc), &boolean_type, + BYTEORDER_HOST_ENDIAN, + sizeof((yyvsp[0].val8)) * BITS_PER_BYTE, &(yyvsp[0].val8)); + } +#line 14300 "parser_bison.c" + break; + + case 892: /* keyword_expr: "ether" close_scope_eth */ +#line 5037 "parser_bison.y" + { (yyval.expr) = symbol_value(&(yyloc), "ether"); } +#line 14306 "parser_bison.c" + break; + + case 893: /* keyword_expr: "ip" close_scope_ip */ +#line 5038 "parser_bison.y" + { (yyval.expr) = symbol_value(&(yyloc), "ip"); } +#line 14312 "parser_bison.c" + break; + + case 894: /* keyword_expr: "ip6" close_scope_ip6 */ +#line 5039 "parser_bison.y" + { (yyval.expr) = symbol_value(&(yyloc), "ip6"); } +#line 14318 "parser_bison.c" + break; + + case 895: /* keyword_expr: "vlan" close_scope_vlan */ +#line 5040 "parser_bison.y" + { (yyval.expr) = symbol_value(&(yyloc), "vlan"); } +#line 14324 "parser_bison.c" + break; + + case 896: /* keyword_expr: "arp" close_scope_arp */ +#line 5041 "parser_bison.y" + { (yyval.expr) = symbol_value(&(yyloc), "arp"); } +#line 14330 "parser_bison.c" + break; + + case 897: /* keyword_expr: "dnat" close_scope_nat */ +#line 5042 "parser_bison.y" + { (yyval.expr) = symbol_value(&(yyloc), "dnat"); } +#line 14336 "parser_bison.c" + break; + + case 898: /* keyword_expr: "snat" close_scope_nat */ +#line 5043 "parser_bison.y" + { (yyval.expr) = symbol_value(&(yyloc), "snat"); } +#line 14342 "parser_bison.c" + break; + + case 899: /* keyword_expr: "ecn" */ +#line 5044 "parser_bison.y" + { (yyval.expr) = symbol_value(&(yyloc), "ecn"); } +#line 14348 "parser_bison.c" + break; + + case 900: /* keyword_expr: "reset" close_scope_reset */ +#line 5045 "parser_bison.y" + { (yyval.expr) = symbol_value(&(yyloc), "reset"); } +#line 14354 "parser_bison.c" + break; + + case 901: /* keyword_expr: "destroy" close_scope_destroy */ +#line 5046 "parser_bison.y" + { (yyval.expr) = symbol_value(&(yyloc), "destroy"); } +#line 14360 "parser_bison.c" + break; + + case 902: /* keyword_expr: "original" */ +#line 5047 "parser_bison.y" + { (yyval.expr) = symbol_value(&(yyloc), "original"); } +#line 14366 "parser_bison.c" + break; + + case 903: /* keyword_expr: "reply" */ +#line 5048 "parser_bison.y" + { (yyval.expr) = symbol_value(&(yyloc), "reply"); } +#line 14372 "parser_bison.c" + break; + + case 904: /* keyword_expr: "label" */ +#line 5049 "parser_bison.y" + { (yyval.expr) = symbol_value(&(yyloc), "label"); } +#line 14378 "parser_bison.c" + break; + + case 905: /* keyword_expr: "last" close_scope_last */ +#line 5050 "parser_bison.y" + { (yyval.expr) = symbol_value(&(yyloc), "last"); } +#line 14384 "parser_bison.c" + break; + + case 906: /* primary_rhs_expr: symbol_expr */ +#line 5053 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 14390 "parser_bison.c" + break; + + case 907: /* primary_rhs_expr: integer_expr */ +#line 5054 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 14396 "parser_bison.c" + break; + + case 908: /* primary_rhs_expr: boolean_expr */ +#line 5055 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 14402 "parser_bison.c" + break; + + case 909: /* primary_rhs_expr: keyword_expr */ +#line 5056 "parser_bison.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 14408 "parser_bison.c" + break; + + case 910: /* primary_rhs_expr: "tcp" close_scope_tcp */ +#line 5058 "parser_bison.y" + { + uint8_t data = IPPROTO_TCP; + (yyval.expr) = constant_expr_alloc(&(yyloc), &inet_protocol_type, + BYTEORDER_HOST_ENDIAN, + sizeof(data) * BITS_PER_BYTE, &data); + } +#line 14419 "parser_bison.c" + break; + + case 911: /* primary_rhs_expr: "udp" close_scope_udp */ +#line 5065 "parser_bison.y" + { + uint8_t data = IPPROTO_UDP; + (yyval.expr) = constant_expr_alloc(&(yyloc), &inet_protocol_type, + BYTEORDER_HOST_ENDIAN, + sizeof(data) * BITS_PER_BYTE, &data); + } +#line 14430 "parser_bison.c" + break; + + case 912: /* primary_rhs_expr: "udplite" close_scope_udplite */ +#line 5072 "parser_bison.y" + { + uint8_t data = IPPROTO_UDPLITE; + (yyval.expr) = constant_expr_alloc(&(yyloc), &inet_protocol_type, + BYTEORDER_HOST_ENDIAN, + sizeof(data) * BITS_PER_BYTE, &data); + } +#line 14441 "parser_bison.c" + break; + + case 913: /* primary_rhs_expr: "esp" close_scope_esp */ +#line 5079 "parser_bison.y" + { + uint8_t data = IPPROTO_ESP; + (yyval.expr) = constant_expr_alloc(&(yyloc), &inet_protocol_type, + BYTEORDER_HOST_ENDIAN, + sizeof(data) * BITS_PER_BYTE, &data); + } +#line 14452 "parser_bison.c" + break; + + case 914: /* primary_rhs_expr: "ah" close_scope_ah */ +#line 5086 "parser_bison.y" + { + uint8_t data = IPPROTO_AH; + (yyval.expr) = constant_expr_alloc(&(yyloc), &inet_protocol_type, + BYTEORDER_HOST_ENDIAN, + sizeof(data) * BITS_PER_BYTE, &data); + } +#line 14463 "parser_bison.c" + break; + + case 915: /* primary_rhs_expr: "icmp" close_scope_icmp */ +#line 5093 "parser_bison.y" + { + uint8_t data = IPPROTO_ICMP; + (yyval.expr) = constant_expr_alloc(&(yyloc), &inet_protocol_type, + BYTEORDER_HOST_ENDIAN, + sizeof(data) * BITS_PER_BYTE, &data); + } +#line 14474 "parser_bison.c" + break; + + case 916: /* primary_rhs_expr: "igmp" */ +#line 5100 "parser_bison.y" + { + uint8_t data = IPPROTO_IGMP; + (yyval.expr) = constant_expr_alloc(&(yyloc), &inet_protocol_type, + BYTEORDER_HOST_ENDIAN, + sizeof(data) * BITS_PER_BYTE, &data); + } +#line 14485 "parser_bison.c" + break; + + case 917: /* primary_rhs_expr: "icmpv6" close_scope_icmp */ +#line 5107 "parser_bison.y" + { + uint8_t data = IPPROTO_ICMPV6; + (yyval.expr) = constant_expr_alloc(&(yyloc), &inet_protocol_type, + BYTEORDER_HOST_ENDIAN, + sizeof(data) * BITS_PER_BYTE, &data); + } +#line 14496 "parser_bison.c" + break; + + case 918: /* primary_rhs_expr: "gre" close_scope_gre */ +#line 5114 "parser_bison.y" + { + uint8_t data = IPPROTO_GRE; + (yyval.expr) = constant_expr_alloc(&(yyloc), &inet_protocol_type, + BYTEORDER_HOST_ENDIAN, + sizeof(data) * BITS_PER_BYTE, &data); + } +#line 14507 "parser_bison.c" + break; + + case 919: /* primary_rhs_expr: "comp" close_scope_comp */ +#line 5121 "parser_bison.y" + { + uint8_t data = IPPROTO_COMP; + (yyval.expr) = constant_expr_alloc(&(yyloc), &inet_protocol_type, + BYTEORDER_HOST_ENDIAN, + sizeof(data) * BITS_PER_BYTE, &data); + } +#line 14518 "parser_bison.c" + break; + + case 920: /* primary_rhs_expr: "dccp" close_scope_dccp */ +#line 5128 "parser_bison.y" + { + uint8_t data = IPPROTO_DCCP; + (yyval.expr) = constant_expr_alloc(&(yyloc), &inet_protocol_type, + BYTEORDER_HOST_ENDIAN, + sizeof(data) * BITS_PER_BYTE, &data); + } +#line 14529 "parser_bison.c" + break; + + case 921: /* primary_rhs_expr: "sctp" close_scope_sctp */ +#line 5135 "parser_bison.y" + { + uint8_t data = IPPROTO_SCTP; + (yyval.expr) = constant_expr_alloc(&(yyloc), &inet_protocol_type, + BYTEORDER_HOST_ENDIAN, + sizeof(data) * BITS_PER_BYTE, &data); + } +#line 14540 "parser_bison.c" + break; + + case 922: /* primary_rhs_expr: "redirect" close_scope_nat */ +#line 5142 "parser_bison.y" + { + uint8_t data = ICMP_REDIRECT; + (yyval.expr) = constant_expr_alloc(&(yyloc), &icmp_type_type, + BYTEORDER_HOST_ENDIAN, + sizeof(data) * BITS_PER_BYTE, &data); + } +#line 14551 "parser_bison.c" + break; + + case 923: /* primary_rhs_expr: '(' basic_rhs_expr ')' */ +#line 5148 "parser_bison.y" + { (yyval.expr) = (yyvsp[-1].expr); } +#line 14557 "parser_bison.c" + break; + + case 924: /* relational_op: "==" */ +#line 5151 "parser_bison.y" + { (yyval.val) = OP_EQ; } +#line 14563 "parser_bison.c" + break; + + case 925: /* relational_op: "!=" */ +#line 5152 "parser_bison.y" + { (yyval.val) = OP_NEQ; } +#line 14569 "parser_bison.c" + break; + + case 926: /* relational_op: "<" */ +#line 5153 "parser_bison.y" + { (yyval.val) = OP_LT; } +#line 14575 "parser_bison.c" + break; + + case 927: /* relational_op: ">" */ +#line 5154 "parser_bison.y" + { (yyval.val) = OP_GT; } +#line 14581 "parser_bison.c" + break; + + case 928: /* relational_op: ">=" */ +#line 5155 "parser_bison.y" + { (yyval.val) = OP_GTE; } +#line 14587 "parser_bison.c" + break; + + case 929: /* relational_op: "<=" */ +#line 5156 "parser_bison.y" + { (yyval.val) = OP_LTE; } +#line 14593 "parser_bison.c" + break; + + case 930: /* relational_op: "!" */ +#line 5157 "parser_bison.y" + { (yyval.val) = OP_NEG; } +#line 14599 "parser_bison.c" + break; + + case 931: /* verdict_expr: "accept" */ +#line 5161 "parser_bison.y" + { + (yyval.expr) = verdict_expr_alloc(&(yyloc), NF_ACCEPT, NULL); + } +#line 14607 "parser_bison.c" + break; + + case 932: /* verdict_expr: "drop" */ +#line 5165 "parser_bison.y" + { + (yyval.expr) = verdict_expr_alloc(&(yyloc), NF_DROP, NULL); + } +#line 14615 "parser_bison.c" + break; + + case 933: /* verdict_expr: "continue" */ +#line 5169 "parser_bison.y" + { + (yyval.expr) = verdict_expr_alloc(&(yyloc), NFT_CONTINUE, NULL); + } +#line 14623 "parser_bison.c" + break; + + case 934: /* verdict_expr: "jump" chain_expr */ +#line 5173 "parser_bison.y" + { + (yyval.expr) = verdict_expr_alloc(&(yyloc), NFT_JUMP, (yyvsp[0].expr)); + } +#line 14631 "parser_bison.c" + break; + + case 935: /* verdict_expr: "goto" chain_expr */ +#line 5177 "parser_bison.y" + { + (yyval.expr) = verdict_expr_alloc(&(yyloc), NFT_GOTO, (yyvsp[0].expr)); + } +#line 14639 "parser_bison.c" + break; + + case 936: /* verdict_expr: "return" */ +#line 5181 "parser_bison.y" + { + (yyval.expr) = verdict_expr_alloc(&(yyloc), NFT_RETURN, NULL); + } +#line 14647 "parser_bison.c" + break; + + case 938: /* chain_expr: identifier */ +#line 5188 "parser_bison.y" + { + (yyval.expr) = constant_expr_alloc(&(yyloc), &string_type, + BYTEORDER_HOST_ENDIAN, + strlen((yyvsp[0].string)) * BITS_PER_BYTE, + (yyvsp[0].string)); + xfree((yyvsp[0].string)); + } +#line 14659 "parser_bison.c" + break; + + case 939: /* meta_expr: "meta" meta_key close_scope_meta */ +#line 5198 "parser_bison.y" + { + (yyval.expr) = meta_expr_alloc(&(yyloc), (yyvsp[-1].val)); + } +#line 14667 "parser_bison.c" + break; + + case 940: /* meta_expr: meta_key_unqualified */ +#line 5202 "parser_bison.y" + { + (yyval.expr) = meta_expr_alloc(&(yyloc), (yyvsp[0].val)); + } +#line 14675 "parser_bison.c" + break; + + case 941: /* meta_expr: "meta" "string" close_scope_meta */ +#line 5206 "parser_bison.y" + { + struct error_record *erec; + unsigned int key; + + erec = meta_key_parse(&(yyloc), (yyvsp[-1].string), &key); + xfree((yyvsp[-1].string)); + if (erec != NULL) { + erec_queue(erec, state->msgs); + YYERROR; + } + + (yyval.expr) = meta_expr_alloc(&(yyloc), key); + } +#line 14693 "parser_bison.c" + break; + + case 944: /* meta_key_qualified: "length" */ +#line 5225 "parser_bison.y" + { (yyval.val) = NFT_META_LEN; } +#line 14699 "parser_bison.c" + break; + + case 945: /* meta_key_qualified: "protocol" */ +#line 5226 "parser_bison.y" + { (yyval.val) = NFT_META_PROTOCOL; } +#line 14705 "parser_bison.c" + break; + + case 946: /* meta_key_qualified: "priority" */ +#line 5227 "parser_bison.y" + { (yyval.val) = NFT_META_PRIORITY; } +#line 14711 "parser_bison.c" + break; + + case 947: /* meta_key_qualified: "random" */ +#line 5228 "parser_bison.y" + { (yyval.val) = NFT_META_PRANDOM; } +#line 14717 "parser_bison.c" + break; + + case 948: /* meta_key_qualified: "secmark" close_scope_secmark */ +#line 5229 "parser_bison.y" + { (yyval.val) = NFT_META_SECMARK; } +#line 14723 "parser_bison.c" + break; + + case 949: /* meta_key_unqualified: "mark" */ +#line 5232 "parser_bison.y" + { (yyval.val) = NFT_META_MARK; } +#line 14729 "parser_bison.c" + break; + + case 950: /* meta_key_unqualified: "iif" */ +#line 5233 "parser_bison.y" + { (yyval.val) = NFT_META_IIF; } +#line 14735 "parser_bison.c" + break; + + case 951: /* meta_key_unqualified: "iifname" */ +#line 5234 "parser_bison.y" + { (yyval.val) = NFT_META_IIFNAME; } +#line 14741 "parser_bison.c" + break; + + case 952: /* meta_key_unqualified: "iiftype" */ +#line 5235 "parser_bison.y" + { (yyval.val) = NFT_META_IIFTYPE; } +#line 14747 "parser_bison.c" + break; + + case 953: /* meta_key_unqualified: "oif" */ +#line 5236 "parser_bison.y" + { (yyval.val) = NFT_META_OIF; } +#line 14753 "parser_bison.c" + break; + + case 954: /* meta_key_unqualified: "oifname" */ +#line 5237 "parser_bison.y" + { (yyval.val) = NFT_META_OIFNAME; } +#line 14759 "parser_bison.c" + break; + + case 955: /* meta_key_unqualified: "oiftype" */ +#line 5238 "parser_bison.y" + { (yyval.val) = NFT_META_OIFTYPE; } +#line 14765 "parser_bison.c" + break; + + case 956: /* meta_key_unqualified: "skuid" */ +#line 5239 "parser_bison.y" + { (yyval.val) = NFT_META_SKUID; } +#line 14771 "parser_bison.c" + break; + + case 957: /* meta_key_unqualified: "skgid" */ +#line 5240 "parser_bison.y" + { (yyval.val) = NFT_META_SKGID; } +#line 14777 "parser_bison.c" + break; + + case 958: /* meta_key_unqualified: "nftrace" */ +#line 5241 "parser_bison.y" + { (yyval.val) = NFT_META_NFTRACE; } +#line 14783 "parser_bison.c" + break; + + case 959: /* meta_key_unqualified: "rtclassid" */ +#line 5242 "parser_bison.y" + { (yyval.val) = NFT_META_RTCLASSID; } +#line 14789 "parser_bison.c" + break; + + case 960: /* meta_key_unqualified: "ibriport" */ +#line 5243 "parser_bison.y" + { (yyval.val) = NFT_META_BRI_IIFNAME; } +#line 14795 "parser_bison.c" + break; + + case 961: /* meta_key_unqualified: "obriport" */ +#line 5244 "parser_bison.y" + { (yyval.val) = NFT_META_BRI_OIFNAME; } +#line 14801 "parser_bison.c" + break; + + case 962: /* meta_key_unqualified: "ibrname" */ +#line 5245 "parser_bison.y" + { (yyval.val) = NFT_META_BRI_IIFNAME; } +#line 14807 "parser_bison.c" + break; + + case 963: /* meta_key_unqualified: "obrname" */ +#line 5246 "parser_bison.y" + { (yyval.val) = NFT_META_BRI_OIFNAME; } +#line 14813 "parser_bison.c" + break; + + case 964: /* meta_key_unqualified: "pkttype" */ +#line 5247 "parser_bison.y" + { (yyval.val) = NFT_META_PKTTYPE; } +#line 14819 "parser_bison.c" + break; + + case 965: /* meta_key_unqualified: "cpu" */ +#line 5248 "parser_bison.y" + { (yyval.val) = NFT_META_CPU; } +#line 14825 "parser_bison.c" + break; + + case 966: /* meta_key_unqualified: "iifgroup" */ +#line 5249 "parser_bison.y" + { (yyval.val) = NFT_META_IIFGROUP; } +#line 14831 "parser_bison.c" + break; + + case 967: /* meta_key_unqualified: "oifgroup" */ +#line 5250 "parser_bison.y" + { (yyval.val) = NFT_META_OIFGROUP; } +#line 14837 "parser_bison.c" + break; + + case 968: /* meta_key_unqualified: "cgroup" */ +#line 5251 "parser_bison.y" + { (yyval.val) = NFT_META_CGROUP; } +#line 14843 "parser_bison.c" + break; + + case 969: /* meta_key_unqualified: "ipsec" close_scope_ipsec */ +#line 5252 "parser_bison.y" + { (yyval.val) = NFT_META_SECPATH; } +#line 14849 "parser_bison.c" + break; + + case 970: /* meta_key_unqualified: "time" */ +#line 5253 "parser_bison.y" + { (yyval.val) = NFT_META_TIME_NS; } +#line 14855 "parser_bison.c" + break; + + case 971: /* meta_key_unqualified: "day" */ +#line 5254 "parser_bison.y" + { (yyval.val) = NFT_META_TIME_DAY; } +#line 14861 "parser_bison.c" + break; + + case 972: /* meta_key_unqualified: "hour" */ +#line 5255 "parser_bison.y" + { (yyval.val) = NFT_META_TIME_HOUR; } +#line 14867 "parser_bison.c" + break; + + case 973: /* meta_stmt: "meta" meta_key "set" stmt_expr close_scope_meta */ +#line 5259 "parser_bison.y" + { + switch ((yyvsp[-3].val)) { + case NFT_META_SECMARK: + switch ((yyvsp[-1].expr)->etype) { + case EXPR_CT: + (yyval.stmt) = meta_stmt_alloc(&(yyloc), (yyvsp[-3].val), (yyvsp[-1].expr)); + break; + default: + (yyval.stmt) = objref_stmt_alloc(&(yyloc)); + (yyval.stmt)->objref.type = NFT_OBJECT_SECMARK; + (yyval.stmt)->objref.expr = (yyvsp[-1].expr); + break; + } + break; + default: + (yyval.stmt) = meta_stmt_alloc(&(yyloc), (yyvsp[-3].val), (yyvsp[-1].expr)); + break; + } + } +#line 14891 "parser_bison.c" + break; + + case 974: /* meta_stmt: meta_key_unqualified "set" stmt_expr */ +#line 5279 "parser_bison.y" + { + (yyval.stmt) = meta_stmt_alloc(&(yyloc), (yyvsp[-2].val), (yyvsp[0].expr)); + } +#line 14899 "parser_bison.c" + break; + + case 975: /* meta_stmt: "meta" "string" "set" stmt_expr close_scope_meta */ +#line 5283 "parser_bison.y" + { + struct error_record *erec; + unsigned int key; + + erec = meta_key_parse(&(yyloc), (yyvsp[-3].string), &key); + xfree((yyvsp[-3].string)); + if (erec != NULL) { + erec_queue(erec, state->msgs); + YYERROR; + } + + (yyval.stmt) = meta_stmt_alloc(&(yyloc), key, (yyvsp[-1].expr)); + } +#line 14917 "parser_bison.c" + break; + + case 976: /* meta_stmt: "notrack" */ +#line 5297 "parser_bison.y" + { + (yyval.stmt) = notrack_stmt_alloc(&(yyloc)); + } +#line 14925 "parser_bison.c" + break; + + case 977: /* meta_stmt: "flow" "offload" "@" string close_scope_at */ +#line 5301 "parser_bison.y" + { + (yyval.stmt) = flow_offload_stmt_alloc(&(yyloc), (yyvsp[-1].string)); + } +#line 14933 "parser_bison.c" + break; + + case 978: /* meta_stmt: "flow" "add" "@" string close_scope_at */ +#line 5305 "parser_bison.y" + { + (yyval.stmt) = flow_offload_stmt_alloc(&(yyloc), (yyvsp[-1].string)); + } +#line 14941 "parser_bison.c" + break; + + case 979: /* socket_expr: "socket" socket_key close_scope_socket */ +#line 5311 "parser_bison.y" + { + (yyval.expr) = socket_expr_alloc(&(yyloc), (yyvsp[-1].val), 0); + } +#line 14949 "parser_bison.c" + break; + + case 980: /* socket_expr: "socket" "cgroupv2" "level" "number" close_scope_socket */ +#line 5315 "parser_bison.y" + { + (yyval.expr) = socket_expr_alloc(&(yyloc), NFT_SOCKET_CGROUPV2, (yyvsp[-1].val)); + } +#line 14957 "parser_bison.c" + break; + + case 981: /* socket_key: "transparent" */ +#line 5320 "parser_bison.y" + { (yyval.val) = NFT_SOCKET_TRANSPARENT; } +#line 14963 "parser_bison.c" + break; + + case 982: /* socket_key: "mark" */ +#line 5321 "parser_bison.y" + { (yyval.val) = NFT_SOCKET_MARK; } +#line 14969 "parser_bison.c" + break; + + case 983: /* socket_key: "wildcard" */ +#line 5322 "parser_bison.y" + { (yyval.val) = NFT_SOCKET_WILDCARD; } +#line 14975 "parser_bison.c" + break; + + case 984: /* offset_opt: %empty */ +#line 5325 "parser_bison.y" + { (yyval.val) = 0; } +#line 14981 "parser_bison.c" + break; + + case 985: /* offset_opt: "offset" "number" */ +#line 5326 "parser_bison.y" + { (yyval.val) = (yyvsp[0].val); } +#line 14987 "parser_bison.c" + break; + + case 986: /* numgen_type: "inc" */ +#line 5329 "parser_bison.y" + { (yyval.val) = NFT_NG_INCREMENTAL; } +#line 14993 "parser_bison.c" + break; + + case 987: /* numgen_type: "random" */ +#line 5330 "parser_bison.y" + { (yyval.val) = NFT_NG_RANDOM; } +#line 14999 "parser_bison.c" + break; + + case 988: /* numgen_expr: "numgen" numgen_type "mod" "number" offset_opt close_scope_numgen */ +#line 5334 "parser_bison.y" + { + (yyval.expr) = numgen_expr_alloc(&(yyloc), (yyvsp[-4].val), (yyvsp[-2].val), (yyvsp[-1].val)); + } +#line 15007 "parser_bison.c" + break; + + case 989: /* xfrm_spnum: "spnum" "number" */ +#line 5339 "parser_bison.y" + { (yyval.val) = (yyvsp[0].val); } +#line 15013 "parser_bison.c" + break; + + case 990: /* xfrm_spnum: %empty */ +#line 5340 "parser_bison.y" + { (yyval.val) = 0; } +#line 15019 "parser_bison.c" + break; + + case 991: /* xfrm_dir: "in" */ +#line 5343 "parser_bison.y" + { (yyval.val) = XFRM_POLICY_IN; } +#line 15025 "parser_bison.c" + break; + + case 992: /* xfrm_dir: "out" */ +#line 5344 "parser_bison.y" + { (yyval.val) = XFRM_POLICY_OUT; } +#line 15031 "parser_bison.c" + break; + + case 993: /* xfrm_state_key: "spi" */ +#line 5347 "parser_bison.y" + { (yyval.val) = NFT_XFRM_KEY_SPI; } +#line 15037 "parser_bison.c" + break; + + case 994: /* xfrm_state_key: "reqid" */ +#line 5348 "parser_bison.y" + { (yyval.val) = NFT_XFRM_KEY_REQID; } +#line 15043 "parser_bison.c" + break; + + case 995: /* xfrm_state_proto_key: "daddr" */ +#line 5351 "parser_bison.y" + { (yyval.val) = NFT_XFRM_KEY_DADDR_IP4; } +#line 15049 "parser_bison.c" + break; + + case 996: /* xfrm_state_proto_key: "saddr" */ +#line 5352 "parser_bison.y" + { (yyval.val) = NFT_XFRM_KEY_SADDR_IP4; } +#line 15055 "parser_bison.c" + break; + + case 997: /* xfrm_expr: "ipsec" xfrm_dir xfrm_spnum xfrm_state_key close_scope_ipsec */ +#line 5356 "parser_bison.y" + { + if ((yyvsp[-2].val) > 255) { + erec_queue(error(&(yylsp[-2]), "value too large"), state->msgs); + YYERROR; + } + (yyval.expr) = xfrm_expr_alloc(&(yyloc), (yyvsp[-3].val), (yyvsp[-2].val), (yyvsp[-1].val)); + } +#line 15067 "parser_bison.c" + break; + + case 998: /* xfrm_expr: "ipsec" xfrm_dir xfrm_spnum nf_key_proto xfrm_state_proto_key close_scope_ipsec */ +#line 5364 "parser_bison.y" + { + enum nft_xfrm_keys xfrmk = (yyvsp[-1].val); + + switch ((yyvsp[-2].val)) { + case NFPROTO_IPV4: + break; + case NFPROTO_IPV6: + if ((yyvsp[-1].val) == NFT_XFRM_KEY_SADDR_IP4) + xfrmk = NFT_XFRM_KEY_SADDR_IP6; + else if ((yyvsp[-1].val) == NFT_XFRM_KEY_DADDR_IP4) + xfrmk = NFT_XFRM_KEY_DADDR_IP6; + break; + default: + YYERROR; + break; + } + + if ((yyvsp[-3].val) > 255) { + erec_queue(error(&(yylsp[-3]), "value too large"), state->msgs); + YYERROR; + } + + (yyval.expr) = xfrm_expr_alloc(&(yyloc), (yyvsp[-4].val), (yyvsp[-3].val), xfrmk); + } +#line 15096 "parser_bison.c" + break; + + case 999: /* hash_expr: "jhash" expr "mod" "number" "seed" "number" offset_opt close_scope_hash */ +#line 5391 "parser_bison.y" + { + (yyval.expr) = hash_expr_alloc(&(yyloc), (yyvsp[-4].val), true, (yyvsp[-2].val), (yyvsp[-1].val), NFT_HASH_JENKINS); + (yyval.expr)->hash.expr = (yyvsp[-6].expr); + } +#line 15105 "parser_bison.c" + break; + + case 1000: /* hash_expr: "jhash" expr "mod" "number" offset_opt close_scope_hash */ +#line 5396 "parser_bison.y" + { + (yyval.expr) = hash_expr_alloc(&(yyloc), (yyvsp[-2].val), false, 0, (yyvsp[-1].val), NFT_HASH_JENKINS); + (yyval.expr)->hash.expr = (yyvsp[-4].expr); + } +#line 15114 "parser_bison.c" + break; + + case 1001: /* hash_expr: "symhash" "mod" "number" offset_opt close_scope_hash */ +#line 5401 "parser_bison.y" + { + (yyval.expr) = hash_expr_alloc(&(yyloc), (yyvsp[-2].val), false, 0, (yyvsp[-1].val), NFT_HASH_SYM); + } +#line 15122 "parser_bison.c" + break; + + case 1002: /* nf_key_proto: "ip" close_scope_ip */ +#line 5406 "parser_bison.y" + { (yyval.val) = NFPROTO_IPV4; } +#line 15128 "parser_bison.c" + break; + + case 1003: /* nf_key_proto: "ip6" close_scope_ip6 */ +#line 5407 "parser_bison.y" + { (yyval.val) = NFPROTO_IPV6; } +#line 15134 "parser_bison.c" + break; + + case 1004: /* rt_expr: "rt" rt_key close_scope_rt */ +#line 5411 "parser_bison.y" + { + (yyval.expr) = rt_expr_alloc(&(yyloc), (yyvsp[-1].val), true); + } +#line 15142 "parser_bison.c" + break; + + case 1005: /* rt_expr: "rt" nf_key_proto rt_key close_scope_rt */ +#line 5415 "parser_bison.y" + { + enum nft_rt_keys rtk = (yyvsp[-1].val); + + switch ((yyvsp[-2].val)) { + case NFPROTO_IPV4: + break; + case NFPROTO_IPV6: + if ((yyvsp[-1].val) == NFT_RT_NEXTHOP4) + rtk = NFT_RT_NEXTHOP6; + break; + default: + YYERROR; + break; + } + + (yyval.expr) = rt_expr_alloc(&(yyloc), rtk, false); + } +#line 15164 "parser_bison.c" + break; + + case 1006: /* rt_key: "classid" */ +#line 5434 "parser_bison.y" + { (yyval.val) = NFT_RT_CLASSID; } +#line 15170 "parser_bison.c" + break; + + case 1007: /* rt_key: "nexthop" */ +#line 5435 "parser_bison.y" + { (yyval.val) = NFT_RT_NEXTHOP4; } +#line 15176 "parser_bison.c" + break; + + case 1008: /* rt_key: "mtu" */ +#line 5436 "parser_bison.y" + { (yyval.val) = NFT_RT_TCPMSS; } +#line 15182 "parser_bison.c" + break; + + case 1009: /* rt_key: "ipsec" close_scope_ipsec */ +#line 5437 "parser_bison.y" + { (yyval.val) = NFT_RT_XFRM; } +#line 15188 "parser_bison.c" + break; + + case 1010: /* ct_expr: "ct" ct_key close_scope_ct */ +#line 5441 "parser_bison.y" + { + (yyval.expr) = ct_expr_alloc(&(yyloc), (yyvsp[-1].val), -1); + } +#line 15196 "parser_bison.c" + break; + + case 1011: /* ct_expr: "ct" ct_dir ct_key_dir close_scope_ct */ +#line 5445 "parser_bison.y" + { + (yyval.expr) = ct_expr_alloc(&(yyloc), (yyvsp[-1].val), (yyvsp[-2].val)); + } +#line 15204 "parser_bison.c" + break; + + case 1012: /* ct_expr: "ct" ct_dir ct_key_proto_field close_scope_ct */ +#line 5449 "parser_bison.y" + { + (yyval.expr) = ct_expr_alloc(&(yyloc), (yyvsp[-1].val), (yyvsp[-2].val)); + } +#line 15212 "parser_bison.c" + break; + + case 1013: /* ct_dir: "original" */ +#line 5454 "parser_bison.y" + { (yyval.val) = IP_CT_DIR_ORIGINAL; } +#line 15218 "parser_bison.c" + break; + + case 1014: /* ct_dir: "reply" */ +#line 5455 "parser_bison.y" + { (yyval.val) = IP_CT_DIR_REPLY; } +#line 15224 "parser_bison.c" + break; + + case 1015: /* ct_key: "l3proto" */ +#line 5458 "parser_bison.y" + { (yyval.val) = NFT_CT_L3PROTOCOL; } +#line 15230 "parser_bison.c" + break; + + case 1016: /* ct_key: "protocol" */ +#line 5459 "parser_bison.y" + { (yyval.val) = NFT_CT_PROTOCOL; } +#line 15236 "parser_bison.c" + break; + + case 1017: /* ct_key: "mark" */ +#line 5460 "parser_bison.y" + { (yyval.val) = NFT_CT_MARK; } +#line 15242 "parser_bison.c" + break; + + case 1018: /* ct_key: "state" */ +#line 5461 "parser_bison.y" + { (yyval.val) = NFT_CT_STATE; } +#line 15248 "parser_bison.c" + break; + + case 1019: /* ct_key: "direction" */ +#line 5462 "parser_bison.y" + { (yyval.val) = NFT_CT_DIRECTION; } +#line 15254 "parser_bison.c" + break; + + case 1020: /* ct_key: "status" */ +#line 5463 "parser_bison.y" + { (yyval.val) = NFT_CT_STATUS; } +#line 15260 "parser_bison.c" + break; + + case 1021: /* ct_key: "expiration" */ +#line 5464 "parser_bison.y" + { (yyval.val) = NFT_CT_EXPIRATION; } +#line 15266 "parser_bison.c" + break; + + case 1022: /* ct_key: "helper" */ +#line 5465 "parser_bison.y" + { (yyval.val) = NFT_CT_HELPER; } +#line 15272 "parser_bison.c" + break; + + case 1023: /* ct_key: "saddr" */ +#line 5466 "parser_bison.y" + { (yyval.val) = NFT_CT_SRC; } +#line 15278 "parser_bison.c" + break; + + case 1024: /* ct_key: "daddr" */ +#line 5467 "parser_bison.y" + { (yyval.val) = NFT_CT_DST; } +#line 15284 "parser_bison.c" + break; + + case 1025: /* ct_key: "proto-src" */ +#line 5468 "parser_bison.y" + { (yyval.val) = NFT_CT_PROTO_SRC; } +#line 15290 "parser_bison.c" + break; + + case 1026: /* ct_key: "proto-dst" */ +#line 5469 "parser_bison.y" + { (yyval.val) = NFT_CT_PROTO_DST; } +#line 15296 "parser_bison.c" + break; + + case 1027: /* ct_key: "label" */ +#line 5470 "parser_bison.y" + { (yyval.val) = NFT_CT_LABELS; } +#line 15302 "parser_bison.c" + break; + + case 1028: /* ct_key: "event" */ +#line 5471 "parser_bison.y" + { (yyval.val) = NFT_CT_EVENTMASK; } +#line 15308 "parser_bison.c" + break; + + case 1029: /* ct_key: "secmark" close_scope_secmark */ +#line 5472 "parser_bison.y" + { (yyval.val) = NFT_CT_SECMARK; } +#line 15314 "parser_bison.c" + break; + + case 1030: /* ct_key: "id" */ +#line 5473 "parser_bison.y" + { (yyval.val) = NFT_CT_ID; } +#line 15320 "parser_bison.c" + break; + + case 1032: /* ct_key_dir: "saddr" */ +#line 5477 "parser_bison.y" + { (yyval.val) = NFT_CT_SRC; } +#line 15326 "parser_bison.c" + break; + + case 1033: /* ct_key_dir: "daddr" */ +#line 5478 "parser_bison.y" + { (yyval.val) = NFT_CT_DST; } +#line 15332 "parser_bison.c" + break; + + case 1034: /* ct_key_dir: "l3proto" */ +#line 5479 "parser_bison.y" + { (yyval.val) = NFT_CT_L3PROTOCOL; } +#line 15338 "parser_bison.c" + break; + + case 1035: /* ct_key_dir: "protocol" */ +#line 5480 "parser_bison.y" + { (yyval.val) = NFT_CT_PROTOCOL; } +#line 15344 "parser_bison.c" + break; + + case 1036: /* ct_key_dir: "proto-src" */ +#line 5481 "parser_bison.y" + { (yyval.val) = NFT_CT_PROTO_SRC; } +#line 15350 "parser_bison.c" + break; + + case 1037: /* ct_key_dir: "proto-dst" */ +#line 5482 "parser_bison.y" + { (yyval.val) = NFT_CT_PROTO_DST; } +#line 15356 "parser_bison.c" + break; + + case 1039: /* ct_key_proto_field: "ip" "saddr" close_scope_ip */ +#line 5486 "parser_bison.y" + { (yyval.val) = NFT_CT_SRC_IP; } +#line 15362 "parser_bison.c" + break; + + case 1040: /* ct_key_proto_field: "ip" "daddr" close_scope_ip */ +#line 5487 "parser_bison.y" + { (yyval.val) = NFT_CT_DST_IP; } +#line 15368 "parser_bison.c" + break; + + case 1041: /* ct_key_proto_field: "ip6" "saddr" close_scope_ip6 */ +#line 5488 "parser_bison.y" + { (yyval.val) = NFT_CT_SRC_IP6; } +#line 15374 "parser_bison.c" + break; + + case 1042: /* ct_key_proto_field: "ip6" "daddr" close_scope_ip6 */ +#line 5489 "parser_bison.y" + { (yyval.val) = NFT_CT_DST_IP6; } +#line 15380 "parser_bison.c" + break; + + case 1043: /* ct_key_dir_optional: "bytes" */ +#line 5492 "parser_bison.y" + { (yyval.val) = NFT_CT_BYTES; } +#line 15386 "parser_bison.c" + break; + + case 1044: /* ct_key_dir_optional: "packets" */ +#line 5493 "parser_bison.y" + { (yyval.val) = NFT_CT_PKTS; } +#line 15392 "parser_bison.c" + break; + + case 1045: /* ct_key_dir_optional: "avgpkt" */ +#line 5494 "parser_bison.y" + { (yyval.val) = NFT_CT_AVGPKT; } +#line 15398 "parser_bison.c" + break; + + case 1046: /* ct_key_dir_optional: "zone" */ +#line 5495 "parser_bison.y" + { (yyval.val) = NFT_CT_ZONE; } +#line 15404 "parser_bison.c" + break; + + case 1049: /* list_stmt_expr: symbol_stmt_expr "comma" symbol_stmt_expr */ +#line 5503 "parser_bison.y" + { + (yyval.expr) = list_expr_alloc(&(yyloc)); + compound_expr_add((yyval.expr), (yyvsp[-2].expr)); + compound_expr_add((yyval.expr), (yyvsp[0].expr)); + } +#line 15414 "parser_bison.c" + break; + + case 1050: /* list_stmt_expr: list_stmt_expr "comma" symbol_stmt_expr */ +#line 5509 "parser_bison.y" + { + (yyvsp[-2].expr)->location = (yyloc); + compound_expr_add((yyvsp[-2].expr), (yyvsp[0].expr)); + (yyval.expr) = (yyvsp[-2].expr); + } +#line 15424 "parser_bison.c" + break; + + case 1051: /* ct_stmt: "ct" ct_key "set" stmt_expr close_scope_ct */ +#line 5517 "parser_bison.y" + { + switch ((yyvsp[-3].val)) { + case NFT_CT_HELPER: + (yyval.stmt) = objref_stmt_alloc(&(yyloc)); + (yyval.stmt)->objref.type = NFT_OBJECT_CT_HELPER; + (yyval.stmt)->objref.expr = (yyvsp[-1].expr); + break; + default: + (yyval.stmt) = ct_stmt_alloc(&(yyloc), (yyvsp[-3].val), -1, (yyvsp[-1].expr)); + break; + } + } +#line 15441 "parser_bison.c" + break; + + case 1052: /* ct_stmt: "ct" "timeout" "set" stmt_expr close_scope_ct */ +#line 5530 "parser_bison.y" + { + (yyval.stmt) = objref_stmt_alloc(&(yyloc)); + (yyval.stmt)->objref.type = NFT_OBJECT_CT_TIMEOUT; + (yyval.stmt)->objref.expr = (yyvsp[-1].expr); + + } +#line 15452 "parser_bison.c" + break; + + case 1053: /* ct_stmt: "ct" "expectation" "set" stmt_expr close_scope_ct */ +#line 5537 "parser_bison.y" + { + (yyval.stmt) = objref_stmt_alloc(&(yyloc)); + (yyval.stmt)->objref.type = NFT_OBJECT_CT_EXPECT; + (yyval.stmt)->objref.expr = (yyvsp[-1].expr); + } +#line 15462 "parser_bison.c" + break; + + case 1054: /* ct_stmt: "ct" ct_dir ct_key_dir_optional "set" stmt_expr close_scope_ct */ +#line 5543 "parser_bison.y" + { + (yyval.stmt) = ct_stmt_alloc(&(yyloc), (yyvsp[-3].val), (yyvsp[-4].val), (yyvsp[-1].expr)); + } +#line 15470 "parser_bison.c" + break; + + case 1055: /* payload_stmt: payload_expr "set" stmt_expr */ +#line 5549 "parser_bison.y" + { + if ((yyvsp[-2].expr)->etype == EXPR_EXTHDR) + (yyval.stmt) = exthdr_stmt_alloc(&(yyloc), (yyvsp[-2].expr), (yyvsp[0].expr)); + else + (yyval.stmt) = payload_stmt_alloc(&(yyloc), (yyvsp[-2].expr), (yyvsp[0].expr)); + } +#line 15481 "parser_bison.c" + break; + + case 1078: /* payload_raw_expr: "@" payload_base_spec "comma" "number" "comma" "number" close_scope_at */ +#line 5582 "parser_bison.y" + { + (yyval.expr) = payload_expr_alloc(&(yyloc), NULL, 0); + payload_init_raw((yyval.expr), (yyvsp[-5].val), (yyvsp[-3].val), (yyvsp[-1].val)); + (yyval.expr)->byteorder = BYTEORDER_BIG_ENDIAN; + (yyval.expr)->payload.is_raw = true; + } +#line 15492 "parser_bison.c" + break; + + case 1079: /* payload_base_spec: "ll" */ +#line 5590 "parser_bison.y" + { (yyval.val) = PROTO_BASE_LL_HDR; } +#line 15498 "parser_bison.c" + break; + + case 1080: /* payload_base_spec: "nh" */ +#line 5591 "parser_bison.y" + { (yyval.val) = PROTO_BASE_NETWORK_HDR; } +#line 15504 "parser_bison.c" + break; + + case 1081: /* payload_base_spec: "th" close_scope_th */ +#line 5592 "parser_bison.y" + { (yyval.val) = PROTO_BASE_TRANSPORT_HDR; } +#line 15510 "parser_bison.c" + break; + + case 1082: /* payload_base_spec: "string" */ +#line 5594 "parser_bison.y" + { + if (!strcmp((yyvsp[0].string), "ih")) { + (yyval.val) = PROTO_BASE_INNER_HDR; + } else { + erec_queue(error(&(yylsp[0]), "unknown raw payload base"), state->msgs); + xfree((yyvsp[0].string)); + YYERROR; + } + xfree((yyvsp[0].string)); + } +#line 15525 "parser_bison.c" + break; + + case 1083: /* eth_hdr_expr: "ether" eth_hdr_field close_scope_eth */ +#line 5607 "parser_bison.y" + { + (yyval.expr) = payload_expr_alloc(&(yyloc), &proto_eth, (yyvsp[-1].val)); + } +#line 15533 "parser_bison.c" + break; + + case 1084: /* eth_hdr_field: "saddr" */ +#line 5612 "parser_bison.y" + { (yyval.val) = ETHHDR_SADDR; } +#line 15539 "parser_bison.c" + break; + + case 1085: /* eth_hdr_field: "daddr" */ +#line 5613 "parser_bison.y" + { (yyval.val) = ETHHDR_DADDR; } +#line 15545 "parser_bison.c" + break; + + case 1086: /* eth_hdr_field: "type" close_scope_type */ +#line 5614 "parser_bison.y" + { (yyval.val) = ETHHDR_TYPE; } +#line 15551 "parser_bison.c" + break; + + case 1087: /* vlan_hdr_expr: "vlan" vlan_hdr_field close_scope_vlan */ +#line 5618 "parser_bison.y" + { + (yyval.expr) = payload_expr_alloc(&(yyloc), &proto_vlan, (yyvsp[-1].val)); + } +#line 15559 "parser_bison.c" + break; + + case 1088: /* vlan_hdr_field: "id" */ +#line 5623 "parser_bison.y" + { (yyval.val) = VLANHDR_VID; } +#line 15565 "parser_bison.c" + break; + + case 1089: /* vlan_hdr_field: "cfi" */ +#line 5624 "parser_bison.y" + { (yyval.val) = VLANHDR_CFI; } +#line 15571 "parser_bison.c" + break; + + case 1090: /* vlan_hdr_field: "dei" */ +#line 5625 "parser_bison.y" + { (yyval.val) = VLANHDR_DEI; } +#line 15577 "parser_bison.c" + break; + + case 1091: /* vlan_hdr_field: "pcp" */ +#line 5626 "parser_bison.y" + { (yyval.val) = VLANHDR_PCP; } +#line 15583 "parser_bison.c" + break; + + case 1092: /* vlan_hdr_field: "type" close_scope_type */ +#line 5627 "parser_bison.y" + { (yyval.val) = VLANHDR_TYPE; } +#line 15589 "parser_bison.c" + break; + + case 1093: /* arp_hdr_expr: "arp" arp_hdr_field close_scope_arp */ +#line 5631 "parser_bison.y" + { + (yyval.expr) = payload_expr_alloc(&(yyloc), &proto_arp, (yyvsp[-1].val)); + } +#line 15597 "parser_bison.c" + break; + + case 1094: /* arp_hdr_field: "htype" */ +#line 5636 "parser_bison.y" + { (yyval.val) = ARPHDR_HRD; } +#line 15603 "parser_bison.c" + break; + + case 1095: /* arp_hdr_field: "ptype" */ +#line 5637 "parser_bison.y" + { (yyval.val) = ARPHDR_PRO; } +#line 15609 "parser_bison.c" + break; + + case 1096: /* arp_hdr_field: "hlen" */ +#line 5638 "parser_bison.y" + { (yyval.val) = ARPHDR_HLN; } +#line 15615 "parser_bison.c" + break; + + case 1097: /* arp_hdr_field: "plen" */ +#line 5639 "parser_bison.y" + { (yyval.val) = ARPHDR_PLN; } +#line 15621 "parser_bison.c" + break; + + case 1098: /* arp_hdr_field: "operation" */ +#line 5640 "parser_bison.y" + { (yyval.val) = ARPHDR_OP; } +#line 15627 "parser_bison.c" + break; + + case 1099: /* arp_hdr_field: "saddr" "ether" close_scope_eth */ +#line 5641 "parser_bison.y" + { (yyval.val) = ARPHDR_SADDR_ETHER; } +#line 15633 "parser_bison.c" + break; + + case 1100: /* arp_hdr_field: "daddr" "ether" close_scope_eth */ +#line 5642 "parser_bison.y" + { (yyval.val) = ARPHDR_DADDR_ETHER; } +#line 15639 "parser_bison.c" + break; + + case 1101: /* arp_hdr_field: "saddr" "ip" close_scope_ip */ +#line 5643 "parser_bison.y" + { (yyval.val) = ARPHDR_SADDR_IP; } +#line 15645 "parser_bison.c" + break; + + case 1102: /* arp_hdr_field: "daddr" "ip" close_scope_ip */ +#line 5644 "parser_bison.y" + { (yyval.val) = ARPHDR_DADDR_IP; } +#line 15651 "parser_bison.c" + break; + + case 1103: /* ip_hdr_expr: "ip" ip_hdr_field close_scope_ip */ +#line 5648 "parser_bison.y" + { + (yyval.expr) = payload_expr_alloc(&(yyloc), &proto_ip, (yyvsp[-1].val)); + } +#line 15659 "parser_bison.c" + break; + + case 1104: /* ip_hdr_expr: "ip" "option" ip_option_type ip_option_field close_scope_ip */ +#line 5652 "parser_bison.y" + { + (yyval.expr) = ipopt_expr_alloc(&(yyloc), (yyvsp[-2].val), (yyvsp[-1].val)); + if (!(yyval.expr)) { + erec_queue(error(&(yylsp[-4]), "unknown ip option type/field"), state->msgs); + YYERROR; + } + } +#line 15671 "parser_bison.c" + break; + + case 1105: /* ip_hdr_expr: "ip" "option" ip_option_type close_scope_ip */ +#line 5660 "parser_bison.y" + { + (yyval.expr) = ipopt_expr_alloc(&(yyloc), (yyvsp[-1].val), IPOPT_FIELD_TYPE); + (yyval.expr)->exthdr.flags = NFT_EXTHDR_F_PRESENT; + } +#line 15680 "parser_bison.c" + break; + + case 1106: /* ip_hdr_field: "version" */ +#line 5666 "parser_bison.y" + { (yyval.val) = IPHDR_VERSION; } +#line 15686 "parser_bison.c" + break; + + case 1107: /* ip_hdr_field: "hdrlength" */ +#line 5667 "parser_bison.y" + { (yyval.val) = IPHDR_HDRLENGTH; } +#line 15692 "parser_bison.c" + break; + + case 1108: /* ip_hdr_field: "dscp" */ +#line 5668 "parser_bison.y" + { (yyval.val) = IPHDR_DSCP; } +#line 15698 "parser_bison.c" + break; + + case 1109: /* ip_hdr_field: "ecn" */ +#line 5669 "parser_bison.y" + { (yyval.val) = IPHDR_ECN; } +#line 15704 "parser_bison.c" + break; + + case 1110: /* ip_hdr_field: "length" */ +#line 5670 "parser_bison.y" + { (yyval.val) = IPHDR_LENGTH; } +#line 15710 "parser_bison.c" + break; + + case 1111: /* ip_hdr_field: "id" */ +#line 5671 "parser_bison.y" + { (yyval.val) = IPHDR_ID; } +#line 15716 "parser_bison.c" + break; + + case 1112: /* ip_hdr_field: "frag-off" */ +#line 5672 "parser_bison.y" + { (yyval.val) = IPHDR_FRAG_OFF; } +#line 15722 "parser_bison.c" + break; + + case 1113: /* ip_hdr_field: "ttl" */ +#line 5673 "parser_bison.y" + { (yyval.val) = IPHDR_TTL; } +#line 15728 "parser_bison.c" + break; + + case 1114: /* ip_hdr_field: "protocol" */ +#line 5674 "parser_bison.y" + { (yyval.val) = IPHDR_PROTOCOL; } +#line 15734 "parser_bison.c" + break; + + case 1115: /* ip_hdr_field: "checksum" */ +#line 5675 "parser_bison.y" + { (yyval.val) = IPHDR_CHECKSUM; } +#line 15740 "parser_bison.c" + break; + + case 1116: /* ip_hdr_field: "saddr" */ +#line 5676 "parser_bison.y" + { (yyval.val) = IPHDR_SADDR; } +#line 15746 "parser_bison.c" + break; + + case 1117: /* ip_hdr_field: "daddr" */ +#line 5677 "parser_bison.y" + { (yyval.val) = IPHDR_DADDR; } +#line 15752 "parser_bison.c" + break; + + case 1118: /* ip_option_type: "lsrr" */ +#line 5680 "parser_bison.y" + { (yyval.val) = IPOPT_LSRR; } +#line 15758 "parser_bison.c" + break; + + case 1119: /* ip_option_type: "rr" */ +#line 5681 "parser_bison.y" + { (yyval.val) = IPOPT_RR; } +#line 15764 "parser_bison.c" + break; + + case 1120: /* ip_option_type: "ssrr" */ +#line 5682 "parser_bison.y" + { (yyval.val) = IPOPT_SSRR; } +#line 15770 "parser_bison.c" + break; + + case 1121: /* ip_option_type: "ra" */ +#line 5683 "parser_bison.y" + { (yyval.val) = IPOPT_RA; } +#line 15776 "parser_bison.c" + break; + + case 1122: /* ip_option_field: "type" close_scope_type */ +#line 5686 "parser_bison.y" + { (yyval.val) = IPOPT_FIELD_TYPE; } +#line 15782 "parser_bison.c" + break; + + case 1123: /* ip_option_field: "length" */ +#line 5687 "parser_bison.y" + { (yyval.val) = IPOPT_FIELD_LENGTH; } +#line 15788 "parser_bison.c" + break; + + case 1124: /* ip_option_field: "value" */ +#line 5688 "parser_bison.y" + { (yyval.val) = IPOPT_FIELD_VALUE; } +#line 15794 "parser_bison.c" + break; + + case 1125: /* ip_option_field: "ptr" */ +#line 5689 "parser_bison.y" + { (yyval.val) = IPOPT_FIELD_PTR; } +#line 15800 "parser_bison.c" + break; + + case 1126: /* ip_option_field: "addr" */ +#line 5690 "parser_bison.y" + { (yyval.val) = IPOPT_FIELD_ADDR_0; } +#line 15806 "parser_bison.c" + break; + + case 1127: /* icmp_hdr_expr: "icmp" icmp_hdr_field close_scope_icmp */ +#line 5694 "parser_bison.y" + { + (yyval.expr) = payload_expr_alloc(&(yyloc), &proto_icmp, (yyvsp[-1].val)); + } +#line 15814 "parser_bison.c" + break; + + case 1128: /* icmp_hdr_field: "type" close_scope_type */ +#line 5699 "parser_bison.y" + { (yyval.val) = ICMPHDR_TYPE; } +#line 15820 "parser_bison.c" + break; + + case 1129: /* icmp_hdr_field: "code" */ +#line 5700 "parser_bison.y" + { (yyval.val) = ICMPHDR_CODE; } +#line 15826 "parser_bison.c" + break; + + case 1130: /* icmp_hdr_field: "checksum" */ +#line 5701 "parser_bison.y" + { (yyval.val) = ICMPHDR_CHECKSUM; } +#line 15832 "parser_bison.c" + break; + + case 1131: /* icmp_hdr_field: "id" */ +#line 5702 "parser_bison.y" + { (yyval.val) = ICMPHDR_ID; } +#line 15838 "parser_bison.c" + break; + + case 1132: /* icmp_hdr_field: "seq" */ +#line 5703 "parser_bison.y" + { (yyval.val) = ICMPHDR_SEQ; } +#line 15844 "parser_bison.c" + break; + + case 1133: /* icmp_hdr_field: "gateway" */ +#line 5704 "parser_bison.y" + { (yyval.val) = ICMPHDR_GATEWAY; } +#line 15850 "parser_bison.c" + break; + + case 1134: /* icmp_hdr_field: "mtu" */ +#line 5705 "parser_bison.y" + { (yyval.val) = ICMPHDR_MTU; } +#line 15856 "parser_bison.c" + break; + + case 1135: /* igmp_hdr_expr: "igmp" igmp_hdr_field close_scope_igmp */ +#line 5709 "parser_bison.y" + { + (yyval.expr) = payload_expr_alloc(&(yyloc), &proto_igmp, (yyvsp[-1].val)); + } +#line 15864 "parser_bison.c" + break; + + case 1136: /* igmp_hdr_field: "type" close_scope_type */ +#line 5714 "parser_bison.y" + { (yyval.val) = IGMPHDR_TYPE; } +#line 15870 "parser_bison.c" + break; + + case 1137: /* igmp_hdr_field: "checksum" */ +#line 5715 "parser_bison.y" + { (yyval.val) = IGMPHDR_CHECKSUM; } +#line 15876 "parser_bison.c" + break; + + case 1138: /* igmp_hdr_field: "mrt" */ +#line 5716 "parser_bison.y" + { (yyval.val) = IGMPHDR_MRT; } +#line 15882 "parser_bison.c" + break; + + case 1139: /* igmp_hdr_field: "group" */ +#line 5717 "parser_bison.y" + { (yyval.val) = IGMPHDR_GROUP; } +#line 15888 "parser_bison.c" + break; + + case 1140: /* ip6_hdr_expr: "ip6" ip6_hdr_field close_scope_ip6 */ +#line 5721 "parser_bison.y" + { + (yyval.expr) = payload_expr_alloc(&(yyloc), &proto_ip6, (yyvsp[-1].val)); + } +#line 15896 "parser_bison.c" + break; + + case 1141: /* ip6_hdr_field: "version" */ +#line 5726 "parser_bison.y" + { (yyval.val) = IP6HDR_VERSION; } +#line 15902 "parser_bison.c" + break; + + case 1142: /* ip6_hdr_field: "dscp" */ +#line 5727 "parser_bison.y" + { (yyval.val) = IP6HDR_DSCP; } +#line 15908 "parser_bison.c" + break; + + case 1143: /* ip6_hdr_field: "ecn" */ +#line 5728 "parser_bison.y" + { (yyval.val) = IP6HDR_ECN; } +#line 15914 "parser_bison.c" + break; + + case 1144: /* ip6_hdr_field: "flowlabel" */ +#line 5729 "parser_bison.y" + { (yyval.val) = IP6HDR_FLOWLABEL; } +#line 15920 "parser_bison.c" + break; + + case 1145: /* ip6_hdr_field: "length" */ +#line 5730 "parser_bison.y" + { (yyval.val) = IP6HDR_LENGTH; } +#line 15926 "parser_bison.c" + break; + + case 1146: /* ip6_hdr_field: "nexthdr" */ +#line 5731 "parser_bison.y" + { (yyval.val) = IP6HDR_NEXTHDR; } +#line 15932 "parser_bison.c" + break; + + case 1147: /* ip6_hdr_field: "hoplimit" */ +#line 5732 "parser_bison.y" + { (yyval.val) = IP6HDR_HOPLIMIT; } +#line 15938 "parser_bison.c" + break; + + case 1148: /* ip6_hdr_field: "saddr" */ +#line 5733 "parser_bison.y" + { (yyval.val) = IP6HDR_SADDR; } +#line 15944 "parser_bison.c" + break; + + case 1149: /* ip6_hdr_field: "daddr" */ +#line 5734 "parser_bison.y" + { (yyval.val) = IP6HDR_DADDR; } +#line 15950 "parser_bison.c" + break; + + case 1150: /* icmp6_hdr_expr: "icmpv6" icmp6_hdr_field close_scope_icmp */ +#line 5737 "parser_bison.y" + { + (yyval.expr) = payload_expr_alloc(&(yyloc), &proto_icmp6, (yyvsp[-1].val)); + } +#line 15958 "parser_bison.c" + break; + + case 1151: /* icmp6_hdr_field: "type" close_scope_type */ +#line 5742 "parser_bison.y" + { (yyval.val) = ICMP6HDR_TYPE; } +#line 15964 "parser_bison.c" + break; + + case 1152: /* icmp6_hdr_field: "code" */ +#line 5743 "parser_bison.y" + { (yyval.val) = ICMP6HDR_CODE; } +#line 15970 "parser_bison.c" + break; + + case 1153: /* icmp6_hdr_field: "checksum" */ +#line 5744 "parser_bison.y" + { (yyval.val) = ICMP6HDR_CHECKSUM; } +#line 15976 "parser_bison.c" + break; + + case 1154: /* icmp6_hdr_field: "param-problem" */ +#line 5745 "parser_bison.y" + { (yyval.val) = ICMP6HDR_PPTR; } +#line 15982 "parser_bison.c" + break; + + case 1155: /* icmp6_hdr_field: "mtu" */ +#line 5746 "parser_bison.y" + { (yyval.val) = ICMP6HDR_MTU; } +#line 15988 "parser_bison.c" + break; + + case 1156: /* icmp6_hdr_field: "id" */ +#line 5747 "parser_bison.y" + { (yyval.val) = ICMP6HDR_ID; } +#line 15994 "parser_bison.c" + break; + + case 1157: /* icmp6_hdr_field: "seq" */ +#line 5748 "parser_bison.y" + { (yyval.val) = ICMP6HDR_SEQ; } +#line 16000 "parser_bison.c" + break; + + case 1158: /* icmp6_hdr_field: "max-delay" */ +#line 5749 "parser_bison.y" + { (yyval.val) = ICMP6HDR_MAXDELAY; } +#line 16006 "parser_bison.c" + break; + + case 1159: /* icmp6_hdr_field: "taddr" */ +#line 5750 "parser_bison.y" + { (yyval.val) = ICMP6HDR_TADDR; } +#line 16012 "parser_bison.c" + break; + + case 1160: /* icmp6_hdr_field: "daddr" */ +#line 5751 "parser_bison.y" + { (yyval.val) = ICMP6HDR_DADDR; } +#line 16018 "parser_bison.c" + break; + + case 1161: /* auth_hdr_expr: "ah" auth_hdr_field close_scope_ah */ +#line 5755 "parser_bison.y" + { + (yyval.expr) = payload_expr_alloc(&(yyloc), &proto_ah, (yyvsp[-1].val)); + } +#line 16026 "parser_bison.c" + break; + + case 1162: /* auth_hdr_field: "nexthdr" */ +#line 5760 "parser_bison.y" + { (yyval.val) = AHHDR_NEXTHDR; } +#line 16032 "parser_bison.c" + break; + + case 1163: /* auth_hdr_field: "hdrlength" */ +#line 5761 "parser_bison.y" + { (yyval.val) = AHHDR_HDRLENGTH; } +#line 16038 "parser_bison.c" + break; + + case 1164: /* auth_hdr_field: "reserved" */ +#line 5762 "parser_bison.y" + { (yyval.val) = AHHDR_RESERVED; } +#line 16044 "parser_bison.c" + break; + + case 1165: /* auth_hdr_field: "spi" */ +#line 5763 "parser_bison.y" + { (yyval.val) = AHHDR_SPI; } +#line 16050 "parser_bison.c" + break; + + case 1166: /* auth_hdr_field: "seq" */ +#line 5764 "parser_bison.y" + { (yyval.val) = AHHDR_SEQUENCE; } +#line 16056 "parser_bison.c" + break; + + case 1167: /* esp_hdr_expr: "esp" esp_hdr_field close_scope_esp */ +#line 5768 "parser_bison.y" + { + (yyval.expr) = payload_expr_alloc(&(yyloc), &proto_esp, (yyvsp[-1].val)); + } +#line 16064 "parser_bison.c" + break; + + case 1168: /* esp_hdr_field: "spi" */ +#line 5773 "parser_bison.y" + { (yyval.val) = ESPHDR_SPI; } +#line 16070 "parser_bison.c" + break; + + case 1169: /* esp_hdr_field: "seq" */ +#line 5774 "parser_bison.y" + { (yyval.val) = ESPHDR_SEQUENCE; } +#line 16076 "parser_bison.c" + break; + + case 1170: /* comp_hdr_expr: "comp" comp_hdr_field close_scope_comp */ +#line 5778 "parser_bison.y" + { + (yyval.expr) = payload_expr_alloc(&(yyloc), &proto_comp, (yyvsp[-1].val)); + } +#line 16084 "parser_bison.c" + break; + + case 1171: /* comp_hdr_field: "nexthdr" */ +#line 5783 "parser_bison.y" + { (yyval.val) = COMPHDR_NEXTHDR; } +#line 16090 "parser_bison.c" + break; + + case 1172: /* comp_hdr_field: "flags" */ +#line 5784 "parser_bison.y" + { (yyval.val) = COMPHDR_FLAGS; } +#line 16096 "parser_bison.c" + break; + + case 1173: /* comp_hdr_field: "cpi" */ +#line 5785 "parser_bison.y" + { (yyval.val) = COMPHDR_CPI; } +#line 16102 "parser_bison.c" + break; + + case 1174: /* udp_hdr_expr: "udp" udp_hdr_field close_scope_udp */ +#line 5789 "parser_bison.y" + { + (yyval.expr) = payload_expr_alloc(&(yyloc), &proto_udp, (yyvsp[-1].val)); + } +#line 16110 "parser_bison.c" + break; + + case 1175: /* udp_hdr_field: "sport" */ +#line 5794 "parser_bison.y" + { (yyval.val) = UDPHDR_SPORT; } +#line 16116 "parser_bison.c" + break; + + case 1176: /* udp_hdr_field: "dport" */ +#line 5795 "parser_bison.y" + { (yyval.val) = UDPHDR_DPORT; } +#line 16122 "parser_bison.c" + break; + + case 1177: /* udp_hdr_field: "length" */ +#line 5796 "parser_bison.y" + { (yyval.val) = UDPHDR_LENGTH; } +#line 16128 "parser_bison.c" + break; + + case 1178: /* udp_hdr_field: "checksum" */ +#line 5797 "parser_bison.y" + { (yyval.val) = UDPHDR_CHECKSUM; } +#line 16134 "parser_bison.c" + break; + + case 1179: /* udplite_hdr_expr: "udplite" udplite_hdr_field close_scope_udplite */ +#line 5801 "parser_bison.y" + { + (yyval.expr) = payload_expr_alloc(&(yyloc), &proto_udplite, (yyvsp[-1].val)); + } +#line 16142 "parser_bison.c" + break; + + case 1180: /* udplite_hdr_field: "sport" */ +#line 5806 "parser_bison.y" + { (yyval.val) = UDPHDR_SPORT; } +#line 16148 "parser_bison.c" + break; + + case 1181: /* udplite_hdr_field: "dport" */ +#line 5807 "parser_bison.y" + { (yyval.val) = UDPHDR_DPORT; } +#line 16154 "parser_bison.c" + break; + + case 1182: /* udplite_hdr_field: "csumcov" */ +#line 5808 "parser_bison.y" + { (yyval.val) = UDPHDR_LENGTH; } +#line 16160 "parser_bison.c" + break; + + case 1183: /* udplite_hdr_field: "checksum" */ +#line 5809 "parser_bison.y" + { (yyval.val) = UDPHDR_CHECKSUM; } +#line 16166 "parser_bison.c" + break; + + case 1184: /* tcp_hdr_expr: "tcp" tcp_hdr_field */ +#line 5813 "parser_bison.y" + { + (yyval.expr) = payload_expr_alloc(&(yyloc), &proto_tcp, (yyvsp[0].val)); + } +#line 16174 "parser_bison.c" + break; + + case 1185: /* tcp_hdr_expr: "tcp" "option" tcp_hdr_option_type */ +#line 5817 "parser_bison.y" + { + (yyval.expr) = tcpopt_expr_alloc(&(yyloc), (yyvsp[0].val), TCPOPT_COMMON_KIND); + (yyval.expr)->exthdr.flags = NFT_EXTHDR_F_PRESENT; + } +#line 16183 "parser_bison.c" + break; + + case 1186: /* tcp_hdr_expr: "tcp" "option" tcp_hdr_option_kind_and_field */ +#line 5822 "parser_bison.y" + { + (yyval.expr) = tcpopt_expr_alloc(&(yyloc), (yyvsp[0].tcp_kind_field).kind, (yyvsp[0].tcp_kind_field).field); + } +#line 16191 "parser_bison.c" + break; + + case 1187: /* tcp_hdr_expr: "tcp" "option" "@" close_scope_at tcp_hdr_option_type "comma" "number" "comma" "number" */ +#line 5826 "parser_bison.y" + { + (yyval.expr) = tcpopt_expr_alloc(&(yyloc), (yyvsp[-4].val), 0); + tcpopt_init_raw((yyval.expr), (yyvsp[-4].val), (yyvsp[-2].val), (yyvsp[0].val), 0); + } +#line 16200 "parser_bison.c" + break; + + case 1207: /* vxlan_hdr_expr: "vxlan" vxlan_hdr_field */ +#line 5858 "parser_bison.y" + { + struct expr *expr; + + expr = payload_expr_alloc(&(yyloc), &proto_vxlan, (yyvsp[0].val)); + expr->payload.inner_desc = &proto_vxlan; + (yyval.expr) = expr; + } +#line 16212 "parser_bison.c" + break; + + case 1208: /* vxlan_hdr_expr: "vxlan" inner_expr */ +#line 5866 "parser_bison.y" + { + (yyval.expr) = (yyvsp[0].expr); + (yyval.expr)->location = (yyloc); + (yyval.expr)->payload.inner_desc = &proto_vxlan; + } +#line 16222 "parser_bison.c" + break; + + case 1209: /* vxlan_hdr_field: "vni" */ +#line 5873 "parser_bison.y" + { (yyval.val) = VXLANHDR_VNI; } +#line 16228 "parser_bison.c" + break; + + case 1210: /* vxlan_hdr_field: "flags" */ +#line 5874 "parser_bison.y" + { (yyval.val) = VXLANHDR_FLAGS; } +#line 16234 "parser_bison.c" + break; + + case 1211: /* geneve_hdr_expr: "geneve" geneve_hdr_field */ +#line 5878 "parser_bison.y" + { + struct expr *expr; + + expr = payload_expr_alloc(&(yyloc), &proto_geneve, (yyvsp[0].val)); + expr->payload.inner_desc = &proto_geneve; + (yyval.expr) = expr; + } +#line 16246 "parser_bison.c" + break; + + case 1212: /* geneve_hdr_expr: "geneve" inner_expr */ +#line 5886 "parser_bison.y" + { + (yyval.expr) = (yyvsp[0].expr); + (yyval.expr)->location = (yyloc); + (yyval.expr)->payload.inner_desc = &proto_geneve; + } +#line 16256 "parser_bison.c" + break; + + case 1213: /* geneve_hdr_field: "vni" */ +#line 5893 "parser_bison.y" + { (yyval.val) = GNVHDR_VNI; } +#line 16262 "parser_bison.c" + break; + + case 1214: /* geneve_hdr_field: "type" */ +#line 5894 "parser_bison.y" + { (yyval.val) = GNVHDR_TYPE; } +#line 16268 "parser_bison.c" + break; + + case 1215: /* gre_hdr_expr: "gre" gre_hdr_field close_scope_gre */ +#line 5898 "parser_bison.y" + { + (yyval.expr) = payload_expr_alloc(&(yyloc), &proto_gre, (yyvsp[-1].val)); + } +#line 16276 "parser_bison.c" + break; + + case 1216: /* gre_hdr_expr: "gre" close_scope_gre inner_inet_expr */ +#line 5902 "parser_bison.y" + { + (yyval.expr) = (yyvsp[0].expr); + (yyval.expr)->payload.inner_desc = &proto_gre; + } +#line 16285 "parser_bison.c" + break; + + case 1217: /* gre_hdr_field: "version" */ +#line 5908 "parser_bison.y" + { (yyval.val) = GREHDR_VERSION; } +#line 16291 "parser_bison.c" + break; + + case 1218: /* gre_hdr_field: "flags" */ +#line 5909 "parser_bison.y" + { (yyval.val) = GREHDR_FLAGS; } +#line 16297 "parser_bison.c" + break; + + case 1219: /* gre_hdr_field: "protocol" */ +#line 5910 "parser_bison.y" + { (yyval.val) = GREHDR_PROTOCOL; } +#line 16303 "parser_bison.c" + break; + + case 1220: /* gretap_hdr_expr: "gretap" close_scope_gre inner_expr */ +#line 5914 "parser_bison.y" + { + (yyval.expr) = (yyvsp[0].expr); + (yyval.expr)->payload.inner_desc = &proto_gretap; + } +#line 16312 "parser_bison.c" + break; + + case 1221: /* optstrip_stmt: "reset" "tcp" "option" tcp_hdr_option_type close_scope_tcp */ +#line 5921 "parser_bison.y" + { + (yyval.stmt) = optstrip_stmt_alloc(&(yyloc), tcpopt_expr_alloc(&(yyloc), + (yyvsp[-1].val), TCPOPT_COMMON_KIND)); + } +#line 16321 "parser_bison.c" + break; + + case 1222: /* tcp_hdr_field: "sport" */ +#line 5927 "parser_bison.y" + { (yyval.val) = TCPHDR_SPORT; } +#line 16327 "parser_bison.c" + break; + + case 1223: /* tcp_hdr_field: "dport" */ +#line 5928 "parser_bison.y" + { (yyval.val) = TCPHDR_DPORT; } +#line 16333 "parser_bison.c" + break; + + case 1224: /* tcp_hdr_field: "seq" */ +#line 5929 "parser_bison.y" + { (yyval.val) = TCPHDR_SEQ; } +#line 16339 "parser_bison.c" + break; + + case 1225: /* tcp_hdr_field: "ackseq" */ +#line 5930 "parser_bison.y" + { (yyval.val) = TCPHDR_ACKSEQ; } +#line 16345 "parser_bison.c" + break; + + case 1226: /* tcp_hdr_field: "doff" */ +#line 5931 "parser_bison.y" + { (yyval.val) = TCPHDR_DOFF; } +#line 16351 "parser_bison.c" + break; + + case 1227: /* tcp_hdr_field: "reserved" */ +#line 5932 "parser_bison.y" + { (yyval.val) = TCPHDR_RESERVED; } +#line 16357 "parser_bison.c" + break; + + case 1228: /* tcp_hdr_field: "flags" */ +#line 5933 "parser_bison.y" + { (yyval.val) = TCPHDR_FLAGS; } +#line 16363 "parser_bison.c" + break; + + case 1229: /* tcp_hdr_field: "window" */ +#line 5934 "parser_bison.y" + { (yyval.val) = TCPHDR_WINDOW; } +#line 16369 "parser_bison.c" + break; + + case 1230: /* tcp_hdr_field: "checksum" */ +#line 5935 "parser_bison.y" + { (yyval.val) = TCPHDR_CHECKSUM; } +#line 16375 "parser_bison.c" + break; + + case 1231: /* tcp_hdr_field: "urgptr" */ +#line 5936 "parser_bison.y" + { (yyval.val) = TCPHDR_URGPTR; } +#line 16381 "parser_bison.c" + break; + + case 1232: /* tcp_hdr_option_kind_and_field: "mss" tcpopt_field_maxseg */ +#line 5940 "parser_bison.y" + { + struct tcp_kind_field kind_field = { .kind = TCPOPT_KIND_MAXSEG, .field = (yyvsp[0].val) }; + (yyval.tcp_kind_field) = kind_field; + } +#line 16390 "parser_bison.c" + break; + + case 1233: /* tcp_hdr_option_kind_and_field: tcp_hdr_option_sack tcpopt_field_sack */ +#line 5945 "parser_bison.y" + { + struct tcp_kind_field kind_field = { .kind = (yyvsp[-1].val), .field = (yyvsp[0].val) }; + (yyval.tcp_kind_field) = kind_field; + } +#line 16399 "parser_bison.c" + break; + + case 1234: /* tcp_hdr_option_kind_and_field: "window" tcpopt_field_window */ +#line 5950 "parser_bison.y" + { + struct tcp_kind_field kind_field = { .kind = TCPOPT_KIND_WINDOW, .field = (yyvsp[0].val) }; + (yyval.tcp_kind_field) = kind_field; + } +#line 16408 "parser_bison.c" + break; + + case 1235: /* tcp_hdr_option_kind_and_field: "timestamp" tcpopt_field_tsopt */ +#line 5955 "parser_bison.y" + { + struct tcp_kind_field kind_field = { .kind = TCPOPT_KIND_TIMESTAMP, .field = (yyvsp[0].val) }; + (yyval.tcp_kind_field) = kind_field; + } +#line 16417 "parser_bison.c" + break; + + case 1236: /* tcp_hdr_option_kind_and_field: tcp_hdr_option_type "length" */ +#line 5960 "parser_bison.y" + { + struct tcp_kind_field kind_field = { .kind = (yyvsp[-1].val), .field = TCPOPT_COMMON_LENGTH }; + (yyval.tcp_kind_field) = kind_field; + } +#line 16426 "parser_bison.c" + break; + + case 1237: /* tcp_hdr_option_kind_and_field: "mptcp" tcpopt_field_mptcp */ +#line 5965 "parser_bison.y" + { + struct tcp_kind_field kind_field = { .kind = TCPOPT_KIND_MPTCP, .field = (yyvsp[0].val) }; + (yyval.tcp_kind_field) = kind_field; + } +#line 16435 "parser_bison.c" + break; + + case 1238: /* tcp_hdr_option_sack: "sack" */ +#line 5971 "parser_bison.y" + { (yyval.val) = TCPOPT_KIND_SACK; } +#line 16441 "parser_bison.c" + break; + + case 1239: /* tcp_hdr_option_sack: "sack0" */ +#line 5972 "parser_bison.y" + { (yyval.val) = TCPOPT_KIND_SACK; } +#line 16447 "parser_bison.c" + break; + + case 1240: /* tcp_hdr_option_sack: "sack1" */ +#line 5973 "parser_bison.y" + { (yyval.val) = TCPOPT_KIND_SACK1; } +#line 16453 "parser_bison.c" + break; + + case 1241: /* tcp_hdr_option_sack: "sack2" */ +#line 5974 "parser_bison.y" + { (yyval.val) = TCPOPT_KIND_SACK2; } +#line 16459 "parser_bison.c" + break; + + case 1242: /* tcp_hdr_option_sack: "sack3" */ +#line 5975 "parser_bison.y" + { (yyval.val) = TCPOPT_KIND_SACK3; } +#line 16465 "parser_bison.c" + break; + + case 1243: /* tcp_hdr_option_type: "echo" */ +#line 5978 "parser_bison.y" + { (yyval.val) = TCPOPT_KIND_ECHO; } +#line 16471 "parser_bison.c" + break; + + case 1244: /* tcp_hdr_option_type: "eol" */ +#line 5979 "parser_bison.y" + { (yyval.val) = TCPOPT_KIND_EOL; } +#line 16477 "parser_bison.c" + break; + + case 1245: /* tcp_hdr_option_type: "fastopen" */ +#line 5980 "parser_bison.y" + { (yyval.val) = TCPOPT_KIND_FASTOPEN; } +#line 16483 "parser_bison.c" + break; + + case 1246: /* tcp_hdr_option_type: "md5sig" */ +#line 5981 "parser_bison.y" + { (yyval.val) = TCPOPT_KIND_MD5SIG; } +#line 16489 "parser_bison.c" + break; + + case 1247: /* tcp_hdr_option_type: "mptcp" */ +#line 5982 "parser_bison.y" + { (yyval.val) = TCPOPT_KIND_MPTCP; } +#line 16495 "parser_bison.c" + break; + + case 1248: /* tcp_hdr_option_type: "mss" */ +#line 5983 "parser_bison.y" + { (yyval.val) = TCPOPT_KIND_MAXSEG; } +#line 16501 "parser_bison.c" + break; + + case 1249: /* tcp_hdr_option_type: "nop" */ +#line 5984 "parser_bison.y" + { (yyval.val) = TCPOPT_KIND_NOP; } +#line 16507 "parser_bison.c" + break; + + case 1250: /* tcp_hdr_option_type: "sack-permitted" */ +#line 5985 "parser_bison.y" + { (yyval.val) = TCPOPT_KIND_SACK_PERMITTED; } +#line 16513 "parser_bison.c" + break; + + case 1251: /* tcp_hdr_option_type: "timestamp" */ +#line 5986 "parser_bison.y" + { (yyval.val) = TCPOPT_KIND_TIMESTAMP; } +#line 16519 "parser_bison.c" + break; + + case 1252: /* tcp_hdr_option_type: "window" */ +#line 5987 "parser_bison.y" + { (yyval.val) = TCPOPT_KIND_WINDOW; } +#line 16525 "parser_bison.c" + break; + + case 1253: /* tcp_hdr_option_type: tcp_hdr_option_sack */ +#line 5988 "parser_bison.y" + { (yyval.val) = (yyvsp[0].val); } +#line 16531 "parser_bison.c" + break; + + case 1254: /* tcp_hdr_option_type: "number" */ +#line 5989 "parser_bison.y" + { + if ((yyvsp[0].val) > 255) { + erec_queue(error(&(yylsp[0]), "value too large"), state->msgs); + YYERROR; + } + (yyval.val) = (yyvsp[0].val); + } +#line 16543 "parser_bison.c" + break; + + case 1255: /* tcpopt_field_sack: "left" */ +#line 5998 "parser_bison.y" + { (yyval.val) = TCPOPT_SACK_LEFT; } +#line 16549 "parser_bison.c" + break; + + case 1256: /* tcpopt_field_sack: "right" */ +#line 5999 "parser_bison.y" + { (yyval.val) = TCPOPT_SACK_RIGHT; } +#line 16555 "parser_bison.c" + break; + + case 1257: /* tcpopt_field_window: "count" */ +#line 6002 "parser_bison.y" + { (yyval.val) = TCPOPT_WINDOW_COUNT; } +#line 16561 "parser_bison.c" + break; + + case 1258: /* tcpopt_field_tsopt: "tsval" */ +#line 6005 "parser_bison.y" + { (yyval.val) = TCPOPT_TS_TSVAL; } +#line 16567 "parser_bison.c" + break; + + case 1259: /* tcpopt_field_tsopt: "tsecr" */ +#line 6006 "parser_bison.y" + { (yyval.val) = TCPOPT_TS_TSECR; } +#line 16573 "parser_bison.c" + break; + + case 1260: /* tcpopt_field_maxseg: "size" */ +#line 6009 "parser_bison.y" + { (yyval.val) = TCPOPT_MAXSEG_SIZE; } +#line 16579 "parser_bison.c" + break; + + case 1261: /* tcpopt_field_mptcp: "subtype" */ +#line 6012 "parser_bison.y" + { (yyval.val) = TCPOPT_MPTCP_SUBTYPE; } +#line 16585 "parser_bison.c" + break; + + case 1262: /* dccp_hdr_expr: "dccp" dccp_hdr_field close_scope_dccp */ +#line 6016 "parser_bison.y" + { + (yyval.expr) = payload_expr_alloc(&(yyloc), &proto_dccp, (yyvsp[-1].val)); + } +#line 16593 "parser_bison.c" + break; + + case 1263: /* dccp_hdr_expr: "dccp" "option" "number" close_scope_dccp */ +#line 6020 "parser_bison.y" + { + if ((yyvsp[-1].val) > DCCPOPT_TYPE_MAX) { + erec_queue(error(&(yylsp[-3]), "value too large"), + state->msgs); + YYERROR; + } + (yyval.expr) = dccpopt_expr_alloc(&(yyloc), (yyvsp[-1].val)); + } +#line 16606 "parser_bison.c" + break; + + case 1264: /* dccp_hdr_field: "sport" */ +#line 6030 "parser_bison.y" + { (yyval.val) = DCCPHDR_SPORT; } +#line 16612 "parser_bison.c" + break; + + case 1265: /* dccp_hdr_field: "dport" */ +#line 6031 "parser_bison.y" + { (yyval.val) = DCCPHDR_DPORT; } +#line 16618 "parser_bison.c" + break; + + case 1266: /* dccp_hdr_field: "type" close_scope_type */ +#line 6032 "parser_bison.y" + { (yyval.val) = DCCPHDR_TYPE; } +#line 16624 "parser_bison.c" + break; + + case 1267: /* sctp_chunk_type: "data" */ +#line 6035 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_TYPE_DATA; } +#line 16630 "parser_bison.c" + break; + + case 1268: /* sctp_chunk_type: "init" */ +#line 6036 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_TYPE_INIT; } +#line 16636 "parser_bison.c" + break; + + case 1269: /* sctp_chunk_type: "init-ack" */ +#line 6037 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_TYPE_INIT_ACK; } +#line 16642 "parser_bison.c" + break; + + case 1270: /* sctp_chunk_type: "sack" */ +#line 6038 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_TYPE_SACK; } +#line 16648 "parser_bison.c" + break; + + case 1271: /* sctp_chunk_type: "heartbeat" */ +#line 6039 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_TYPE_HEARTBEAT; } +#line 16654 "parser_bison.c" + break; + + case 1272: /* sctp_chunk_type: "heartbeat-ack" */ +#line 6040 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_TYPE_HEARTBEAT_ACK; } +#line 16660 "parser_bison.c" + break; + + case 1273: /* sctp_chunk_type: "abort" */ +#line 6041 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_TYPE_ABORT; } +#line 16666 "parser_bison.c" + break; + + case 1274: /* sctp_chunk_type: "shutdown" */ +#line 6042 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_TYPE_SHUTDOWN; } +#line 16672 "parser_bison.c" + break; + + case 1275: /* sctp_chunk_type: "shutdown-ack" */ +#line 6043 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_TYPE_SHUTDOWN_ACK; } +#line 16678 "parser_bison.c" + break; + + case 1276: /* sctp_chunk_type: "error" */ +#line 6044 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_TYPE_ERROR; } +#line 16684 "parser_bison.c" + break; + + case 1277: /* sctp_chunk_type: "cookie-echo" */ +#line 6045 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_TYPE_COOKIE_ECHO; } +#line 16690 "parser_bison.c" + break; + + case 1278: /* sctp_chunk_type: "cookie-ack" */ +#line 6046 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_TYPE_COOKIE_ACK; } +#line 16696 "parser_bison.c" + break; + + case 1279: /* sctp_chunk_type: "ecne" */ +#line 6047 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_TYPE_ECNE; } +#line 16702 "parser_bison.c" + break; + + case 1280: /* sctp_chunk_type: "cwr" */ +#line 6048 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_TYPE_CWR; } +#line 16708 "parser_bison.c" + break; + + case 1281: /* sctp_chunk_type: "shutdown-complete" */ +#line 6049 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_TYPE_SHUTDOWN_COMPLETE; } +#line 16714 "parser_bison.c" + break; + + case 1282: /* sctp_chunk_type: "asconf-ack" */ +#line 6050 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_TYPE_ASCONF_ACK; } +#line 16720 "parser_bison.c" + break; + + case 1283: /* sctp_chunk_type: "forward-tsn" */ +#line 6051 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_TYPE_FORWARD_TSN; } +#line 16726 "parser_bison.c" + break; + + case 1284: /* sctp_chunk_type: "asconf" */ +#line 6052 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_TYPE_ASCONF; } +#line 16732 "parser_bison.c" + break; + + case 1285: /* sctp_chunk_common_field: "type" close_scope_type */ +#line 6055 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_COMMON_TYPE; } +#line 16738 "parser_bison.c" + break; + + case 1286: /* sctp_chunk_common_field: "flags" */ +#line 6056 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_COMMON_FLAGS; } +#line 16744 "parser_bison.c" + break; + + case 1287: /* sctp_chunk_common_field: "length" */ +#line 6057 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_COMMON_LENGTH; } +#line 16750 "parser_bison.c" + break; + + case 1288: /* sctp_chunk_data_field: "tsn" */ +#line 6060 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_DATA_TSN; } +#line 16756 "parser_bison.c" + break; + + case 1289: /* sctp_chunk_data_field: "stream" */ +#line 6061 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_DATA_STREAM; } +#line 16762 "parser_bison.c" + break; + + case 1290: /* sctp_chunk_data_field: "ssn" */ +#line 6062 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_DATA_SSN; } +#line 16768 "parser_bison.c" + break; + + case 1291: /* sctp_chunk_data_field: "ppid" */ +#line 6063 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_DATA_PPID; } +#line 16774 "parser_bison.c" + break; + + case 1292: /* sctp_chunk_init_field: "init-tag" */ +#line 6066 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_INIT_TAG; } +#line 16780 "parser_bison.c" + break; + + case 1293: /* sctp_chunk_init_field: "a-rwnd" */ +#line 6067 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_INIT_RWND; } +#line 16786 "parser_bison.c" + break; + + case 1294: /* sctp_chunk_init_field: "num-outbound-streams" */ +#line 6068 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_INIT_OSTREAMS; } +#line 16792 "parser_bison.c" + break; + + case 1295: /* sctp_chunk_init_field: "num-inbound-streams" */ +#line 6069 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_INIT_ISTREAMS; } +#line 16798 "parser_bison.c" + break; + + case 1296: /* sctp_chunk_init_field: "initial-tsn" */ +#line 6070 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_INIT_TSN; } +#line 16804 "parser_bison.c" + break; + + case 1297: /* sctp_chunk_sack_field: "cum-tsn-ack" */ +#line 6073 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_SACK_CTSN_ACK; } +#line 16810 "parser_bison.c" + break; + + case 1298: /* sctp_chunk_sack_field: "a-rwnd" */ +#line 6074 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_SACK_RWND; } +#line 16816 "parser_bison.c" + break; + + case 1299: /* sctp_chunk_sack_field: "num-gap-ack-blocks" */ +#line 6075 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_SACK_GACK_BLOCKS; } +#line 16822 "parser_bison.c" + break; + + case 1300: /* sctp_chunk_sack_field: "num-dup-tsns" */ +#line 6076 "parser_bison.y" + { (yyval.val) = SCTP_CHUNK_SACK_DUP_TSNS; } +#line 16828 "parser_bison.c" + break; + + case 1301: /* sctp_chunk_alloc: sctp_chunk_type */ +#line 6080 "parser_bison.y" + { + (yyval.expr) = sctp_chunk_expr_alloc(&(yyloc), (yyvsp[0].val), SCTP_CHUNK_COMMON_TYPE); + (yyval.expr)->exthdr.flags = NFT_EXTHDR_F_PRESENT; + } +#line 16837 "parser_bison.c" + break; + + case 1302: /* sctp_chunk_alloc: sctp_chunk_type sctp_chunk_common_field */ +#line 6085 "parser_bison.y" + { + (yyval.expr) = sctp_chunk_expr_alloc(&(yyloc), (yyvsp[-1].val), (yyvsp[0].val)); + } +#line 16845 "parser_bison.c" + break; + + case 1303: /* sctp_chunk_alloc: "data" sctp_chunk_data_field */ +#line 6089 "parser_bison.y" + { + (yyval.expr) = sctp_chunk_expr_alloc(&(yyloc), SCTP_CHUNK_TYPE_DATA, (yyvsp[0].val)); + } +#line 16853 "parser_bison.c" + break; + + case 1304: /* sctp_chunk_alloc: "init" sctp_chunk_init_field */ +#line 6093 "parser_bison.y" + { + (yyval.expr) = sctp_chunk_expr_alloc(&(yyloc), SCTP_CHUNK_TYPE_INIT, (yyvsp[0].val)); + } +#line 16861 "parser_bison.c" + break; + + case 1305: /* sctp_chunk_alloc: "init-ack" sctp_chunk_init_field */ +#line 6097 "parser_bison.y" + { + (yyval.expr) = sctp_chunk_expr_alloc(&(yyloc), SCTP_CHUNK_TYPE_INIT_ACK, (yyvsp[0].val)); + } +#line 16869 "parser_bison.c" + break; + + case 1306: /* sctp_chunk_alloc: "sack" sctp_chunk_sack_field */ +#line 6101 "parser_bison.y" + { + (yyval.expr) = sctp_chunk_expr_alloc(&(yyloc), SCTP_CHUNK_TYPE_SACK, (yyvsp[0].val)); + } +#line 16877 "parser_bison.c" + break; + + case 1307: /* sctp_chunk_alloc: "shutdown" "cum-tsn-ack" */ +#line 6105 "parser_bison.y" + { + (yyval.expr) = sctp_chunk_expr_alloc(&(yyloc), SCTP_CHUNK_TYPE_SHUTDOWN, + SCTP_CHUNK_SHUTDOWN_CTSN_ACK); + } +#line 16886 "parser_bison.c" + break; + + case 1308: /* sctp_chunk_alloc: "ecne" "lowest-tsn" */ +#line 6110 "parser_bison.y" + { + (yyval.expr) = sctp_chunk_expr_alloc(&(yyloc), SCTP_CHUNK_TYPE_ECNE, + SCTP_CHUNK_ECNE_CWR_MIN_TSN); + } +#line 16895 "parser_bison.c" + break; + + case 1309: /* sctp_chunk_alloc: "cwr" "lowest-tsn" */ +#line 6115 "parser_bison.y" + { + (yyval.expr) = sctp_chunk_expr_alloc(&(yyloc), SCTP_CHUNK_TYPE_CWR, + SCTP_CHUNK_ECNE_CWR_MIN_TSN); + } +#line 16904 "parser_bison.c" + break; + + case 1310: /* sctp_chunk_alloc: "asconf-ack" "seqno" */ +#line 6120 "parser_bison.y" + { + (yyval.expr) = sctp_chunk_expr_alloc(&(yyloc), SCTP_CHUNK_TYPE_ASCONF_ACK, + SCTP_CHUNK_ASCONF_SEQNO); + } +#line 16913 "parser_bison.c" + break; + + case 1311: /* sctp_chunk_alloc: "forward-tsn" "new-cum-tsn" */ +#line 6125 "parser_bison.y" + { + (yyval.expr) = sctp_chunk_expr_alloc(&(yyloc), SCTP_CHUNK_TYPE_FORWARD_TSN, + SCTP_CHUNK_FORWARD_TSN_NCTSN); + } +#line 16922 "parser_bison.c" + break; + + case 1312: /* sctp_chunk_alloc: "asconf" "seqno" */ +#line 6130 "parser_bison.y" + { + (yyval.expr) = sctp_chunk_expr_alloc(&(yyloc), SCTP_CHUNK_TYPE_ASCONF, + SCTP_CHUNK_ASCONF_SEQNO); + } +#line 16931 "parser_bison.c" + break; + + case 1313: /* sctp_hdr_expr: "sctp" sctp_hdr_field close_scope_sctp */ +#line 6137 "parser_bison.y" + { + (yyval.expr) = payload_expr_alloc(&(yyloc), &proto_sctp, (yyvsp[-1].val)); + } +#line 16939 "parser_bison.c" + break; + + case 1314: /* sctp_hdr_expr: "sctp" "chunk" sctp_chunk_alloc close_scope_sctp_chunk close_scope_sctp */ +#line 6141 "parser_bison.y" + { + (yyval.expr) = (yyvsp[-2].expr); + } +#line 16947 "parser_bison.c" + break; + + case 1315: /* sctp_hdr_field: "sport" */ +#line 6146 "parser_bison.y" + { (yyval.val) = SCTPHDR_SPORT; } +#line 16953 "parser_bison.c" + break; + + case 1316: /* sctp_hdr_field: "dport" */ +#line 6147 "parser_bison.y" + { (yyval.val) = SCTPHDR_DPORT; } +#line 16959 "parser_bison.c" + break; + + case 1317: /* sctp_hdr_field: "vtag" */ +#line 6148 "parser_bison.y" + { (yyval.val) = SCTPHDR_VTAG; } +#line 16965 "parser_bison.c" + break; + + case 1318: /* sctp_hdr_field: "checksum" */ +#line 6149 "parser_bison.y" + { (yyval.val) = SCTPHDR_CHECKSUM; } +#line 16971 "parser_bison.c" + break; + + case 1319: /* th_hdr_expr: "th" th_hdr_field close_scope_th */ +#line 6153 "parser_bison.y" + { + (yyval.expr) = payload_expr_alloc(&(yyloc), &proto_th, (yyvsp[-1].val)); + if ((yyval.expr)) + (yyval.expr)->payload.is_raw = true; + } +#line 16981 "parser_bison.c" + break; + + case 1320: /* th_hdr_field: "sport" */ +#line 6160 "parser_bison.y" + { (yyval.val) = THDR_SPORT; } +#line 16987 "parser_bison.c" + break; + + case 1321: /* th_hdr_field: "dport" */ +#line 6161 "parser_bison.y" + { (yyval.val) = THDR_DPORT; } +#line 16993 "parser_bison.c" + break; + + case 1330: /* hbh_hdr_expr: "hbh" hbh_hdr_field close_scope_hbh */ +#line 6175 "parser_bison.y" + { + (yyval.expr) = exthdr_expr_alloc(&(yyloc), &exthdr_hbh, (yyvsp[-1].val)); + } +#line 17001 "parser_bison.c" + break; + + case 1331: /* hbh_hdr_field: "nexthdr" */ +#line 6180 "parser_bison.y" + { (yyval.val) = HBHHDR_NEXTHDR; } +#line 17007 "parser_bison.c" + break; + + case 1332: /* hbh_hdr_field: "hdrlength" */ +#line 6181 "parser_bison.y" + { (yyval.val) = HBHHDR_HDRLENGTH; } +#line 17013 "parser_bison.c" + break; + + case 1333: /* rt_hdr_expr: "rt" rt_hdr_field close_scope_rt */ +#line 6185 "parser_bison.y" + { + (yyval.expr) = exthdr_expr_alloc(&(yyloc), &exthdr_rt, (yyvsp[-1].val)); + } +#line 17021 "parser_bison.c" + break; + + case 1334: /* rt_hdr_field: "nexthdr" */ +#line 6190 "parser_bison.y" + { (yyval.val) = RTHDR_NEXTHDR; } +#line 17027 "parser_bison.c" + break; + + case 1335: /* rt_hdr_field: "hdrlength" */ +#line 6191 "parser_bison.y" + { (yyval.val) = RTHDR_HDRLENGTH; } +#line 17033 "parser_bison.c" + break; + + case 1336: /* rt_hdr_field: "type" close_scope_type */ +#line 6192 "parser_bison.y" + { (yyval.val) = RTHDR_TYPE; } +#line 17039 "parser_bison.c" + break; + + case 1337: /* rt_hdr_field: "seg-left" */ +#line 6193 "parser_bison.y" + { (yyval.val) = RTHDR_SEG_LEFT; } +#line 17045 "parser_bison.c" + break; + + case 1338: /* rt0_hdr_expr: "rt0" rt0_hdr_field close_scope_rt */ +#line 6197 "parser_bison.y" + { + (yyval.expr) = exthdr_expr_alloc(&(yyloc), &exthdr_rt0, (yyvsp[-1].val)); + } +#line 17053 "parser_bison.c" + break; + + case 1339: /* rt0_hdr_field: "addr" '[' "number" ']' */ +#line 6203 "parser_bison.y" + { + (yyval.val) = RT0HDR_ADDR_1 + (yyvsp[-1].val) - 1; + } +#line 17061 "parser_bison.c" + break; + + case 1340: /* rt2_hdr_expr: "rt2" rt2_hdr_field close_scope_rt */ +#line 6209 "parser_bison.y" + { + (yyval.expr) = exthdr_expr_alloc(&(yyloc), &exthdr_rt2, (yyvsp[-1].val)); + } +#line 17069 "parser_bison.c" + break; + + case 1341: /* rt2_hdr_field: "addr" */ +#line 6214 "parser_bison.y" + { (yyval.val) = RT2HDR_ADDR; } +#line 17075 "parser_bison.c" + break; + + case 1342: /* rt4_hdr_expr: "srh" rt4_hdr_field close_scope_rt */ +#line 6218 "parser_bison.y" + { + (yyval.expr) = exthdr_expr_alloc(&(yyloc), &exthdr_rt4, (yyvsp[-1].val)); + } +#line 17083 "parser_bison.c" + break; + + case 1343: /* rt4_hdr_field: "last-entry" */ +#line 6223 "parser_bison.y" + { (yyval.val) = RT4HDR_LASTENT; } +#line 17089 "parser_bison.c" + break; + + case 1344: /* rt4_hdr_field: "flags" */ +#line 6224 "parser_bison.y" + { (yyval.val) = RT4HDR_FLAGS; } +#line 17095 "parser_bison.c" + break; + + case 1345: /* rt4_hdr_field: "tag" */ +#line 6225 "parser_bison.y" + { (yyval.val) = RT4HDR_TAG; } +#line 17101 "parser_bison.c" + break; + + case 1346: /* rt4_hdr_field: "sid" '[' "number" ']' */ +#line 6227 "parser_bison.y" + { + (yyval.val) = RT4HDR_SID_1 + (yyvsp[-1].val) - 1; + } +#line 17109 "parser_bison.c" + break; + + case 1347: /* frag_hdr_expr: "frag" frag_hdr_field close_scope_frag */ +#line 6233 "parser_bison.y" + { + (yyval.expr) = exthdr_expr_alloc(&(yyloc), &exthdr_frag, (yyvsp[-1].val)); + } +#line 17117 "parser_bison.c" + break; + + case 1348: /* frag_hdr_field: "nexthdr" */ +#line 6238 "parser_bison.y" + { (yyval.val) = FRAGHDR_NEXTHDR; } +#line 17123 "parser_bison.c" + break; + + case 1349: /* frag_hdr_field: "reserved" */ +#line 6239 "parser_bison.y" + { (yyval.val) = FRAGHDR_RESERVED; } +#line 17129 "parser_bison.c" + break; + + case 1350: /* frag_hdr_field: "frag-off" */ +#line 6240 "parser_bison.y" + { (yyval.val) = FRAGHDR_FRAG_OFF; } +#line 17135 "parser_bison.c" + break; + + case 1351: /* frag_hdr_field: "reserved2" */ +#line 6241 "parser_bison.y" + { (yyval.val) = FRAGHDR_RESERVED2; } +#line 17141 "parser_bison.c" + break; + + case 1352: /* frag_hdr_field: "more-fragments" */ +#line 6242 "parser_bison.y" + { (yyval.val) = FRAGHDR_MFRAGS; } +#line 17147 "parser_bison.c" + break; + + case 1353: /* frag_hdr_field: "id" */ +#line 6243 "parser_bison.y" + { (yyval.val) = FRAGHDR_ID; } +#line 17153 "parser_bison.c" + break; + + case 1354: /* dst_hdr_expr: "dst" dst_hdr_field close_scope_dst */ +#line 6247 "parser_bison.y" + { + (yyval.expr) = exthdr_expr_alloc(&(yyloc), &exthdr_dst, (yyvsp[-1].val)); + } +#line 17161 "parser_bison.c" + break; + + case 1355: /* dst_hdr_field: "nexthdr" */ +#line 6252 "parser_bison.y" + { (yyval.val) = DSTHDR_NEXTHDR; } +#line 17167 "parser_bison.c" + break; + + case 1356: /* dst_hdr_field: "hdrlength" */ +#line 6253 "parser_bison.y" + { (yyval.val) = DSTHDR_HDRLENGTH; } +#line 17173 "parser_bison.c" + break; + + case 1357: /* mh_hdr_expr: "mh" mh_hdr_field close_scope_mh */ +#line 6257 "parser_bison.y" + { + (yyval.expr) = exthdr_expr_alloc(&(yyloc), &exthdr_mh, (yyvsp[-1].val)); + } +#line 17181 "parser_bison.c" + break; + + case 1358: /* mh_hdr_field: "nexthdr" */ +#line 6262 "parser_bison.y" + { (yyval.val) = MHHDR_NEXTHDR; } +#line 17187 "parser_bison.c" + break; + + case 1359: /* mh_hdr_field: "hdrlength" */ +#line 6263 "parser_bison.y" + { (yyval.val) = MHHDR_HDRLENGTH; } +#line 17193 "parser_bison.c" + break; + + case 1360: /* mh_hdr_field: "type" close_scope_type */ +#line 6264 "parser_bison.y" + { (yyval.val) = MHHDR_TYPE; } +#line 17199 "parser_bison.c" + break; + + case 1361: /* mh_hdr_field: "reserved" */ +#line 6265 "parser_bison.y" + { (yyval.val) = MHHDR_RESERVED; } +#line 17205 "parser_bison.c" + break; + + case 1362: /* mh_hdr_field: "checksum" */ +#line 6266 "parser_bison.y" + { (yyval.val) = MHHDR_CHECKSUM; } +#line 17211 "parser_bison.c" + break; + + case 1363: /* exthdr_exists_expr: "exthdr" exthdr_key */ +#line 6270 "parser_bison.y" + { + const struct exthdr_desc *desc; + + desc = exthdr_find_proto((yyvsp[0].val)); + + /* Assume that NEXTHDR template is always + * the first one in list of templates. + */ + (yyval.expr) = exthdr_expr_alloc(&(yyloc), desc, 1); + (yyval.expr)->exthdr.flags = NFT_EXTHDR_F_PRESENT; + } +#line 17227 "parser_bison.c" + break; + + case 1364: /* exthdr_key: "hbh" close_scope_hbh */ +#line 6283 "parser_bison.y" + { (yyval.val) = IPPROTO_HOPOPTS; } +#line 17233 "parser_bison.c" + break; + + case 1365: /* exthdr_key: "rt" close_scope_rt */ +#line 6284 "parser_bison.y" + { (yyval.val) = IPPROTO_ROUTING; } +#line 17239 "parser_bison.c" + break; + + case 1366: /* exthdr_key: "frag" close_scope_frag */ +#line 6285 "parser_bison.y" + { (yyval.val) = IPPROTO_FRAGMENT; } +#line 17245 "parser_bison.c" + break; + + case 1367: /* exthdr_key: "dst" close_scope_dst */ +#line 6286 "parser_bison.y" + { (yyval.val) = IPPROTO_DSTOPTS; } +#line 17251 "parser_bison.c" + break; + + case 1368: /* exthdr_key: "mh" close_scope_mh */ +#line 6287 "parser_bison.y" + { (yyval.val) = IPPROTO_MH; } +#line 17257 "parser_bison.c" + break; + + +#line 17261 "parser_bison.c" + + default: break; + } + /* User semantic actions sometimes alter yychar, and that requires + that yytoken be updated with the new translation. We take the + approach of translating immediately before every use of yytoken. + One alternative is translating here after every semantic action, + but that translation would be missed if the semantic action invokes + YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or + if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an + incorrect destructor might then be invoked immediately. In the + case of YYERROR or YYBACKUP, subsequent parser actions might lead + to an incorrect destructor call or verbose syntax error message + before the lookahead is translated. */ + YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc); + + YYPOPSTACK (yylen); + yylen = 0; + + *++yyvsp = yyval; + *++yylsp = yyloc; + + /* Now 'shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + { + const int yylhs = yyr1[yyn] - YYNTOKENS; + const int yyi = yypgoto[yylhs] + *yyssp; + yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp + ? yytable[yyi] + : yydefgoto[yylhs]); + } + + goto yynewstate; + + +/*--------------------------------------. +| yyerrlab -- here on detecting error. | +`--------------------------------------*/ +yyerrlab: + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar); + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; + { + yypcontext_t yyctx + = {yyssp, yytoken, &yylloc}; + char const *yymsgp = YY_("syntax error"); + int yysyntax_error_status; + yysyntax_error_status = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx); + if (yysyntax_error_status == 0) + yymsgp = yymsg; + else if (yysyntax_error_status == -1) + { + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = YY_CAST (char *, + YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc))); + if (yymsg) + { + yysyntax_error_status + = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx); + yymsgp = yymsg; + } + else + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + yysyntax_error_status = YYENOMEM; + } + } + yyerror (&yylloc, nft, scanner, state, yymsgp); + if (yysyntax_error_status == YYENOMEM) + goto yyexhaustedlab; + } + } + + yyerror_range[1] = yylloc; + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + + if (yychar <= TOKEN_EOF) + { + /* Return failure if at end of input. */ + if (yychar == TOKEN_EOF) + YYABORT; + } + else + { + yydestruct ("Error: discarding", + yytoken, &yylval, &yylloc, nft, scanner, state); + yychar = YYEMPTY; + } + } + + /* Else will try to reuse lookahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + /* Pacify compilers when the user code never invokes YYERROR and the + label yyerrorlab therefore never appears in user code. */ + if (0) + YYERROR; + + /* Do not reclaim the symbols of the rule whose action triggered + this YYERROR. */ + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + yystate = *yyssp; + goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + /* Pop stack until we find a state that shifts the error token. */ + for (;;) + { + yyn = yypact[yystate]; + if (!yypact_value_is_default (yyn)) + { + yyn += YYSYMBOL_YYerror; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + yyerror_range[1] = *yylsp; + yydestruct ("Error: popping", + YY_ACCESSING_SYMBOL (yystate), yyvsp, yylsp, nft, scanner, state); + YYPOPSTACK (1); + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); + } + + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END + + yyerror_range[2] = yylloc; + ++yylsp; + YYLLOC_DEFAULT (*yylsp, yyerror_range, 2); + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp); + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + + +#if 1 +/*-------------------------------------------------. +| yyexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +yyexhaustedlab: + yyerror (&yylloc, nft, scanner, state, YY_("memory exhausted")); + yyresult = 2; + goto yyreturn; +#endif + + +/*-------------------------------------------------------. +| yyreturn -- parsing is finished, clean up and return. | +`-------------------------------------------------------*/ +yyreturn: + if (yychar != YYEMPTY) + { + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = YYTRANSLATE (yychar); + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval, &yylloc, nft, scanner, state); + } + /* Do not reclaim the symbols of the rule whose action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (yylen); + YY_STACK_PRINT (yyss, yyssp); + while (yyssp != yyss) + { + yydestruct ("Cleanup: popping", + YY_ACCESSING_SYMBOL (+*yyssp), yyvsp, yylsp, nft, scanner, state); + YYPOPSTACK (1); + } +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + return yyresult; +} + +#line 6290 "parser_bison.y" + |