// Code generated by goyacc -o proto.y.go -p proto proto.y. DO NOT EDIT.

//line proto.y:2
package protoparse

import __yyfmt__ "fmt"

//line proto.y:2

//lint:file-ignore SA4006 generated parser has unused values

import (
	"fmt"
	"math"
	"unicode"

	"github.com/jhump/protoreflect/desc/internal"
)

//line proto.y:18
type protoSymType struct {
	yys       int
	file      *fileNode
	fileDecls []*fileElement
	syn       *syntaxNode
	pkg       *packageNode
	imprt     *importNode
	msg       *messageNode
	msgDecls  []*messageElement
	fld       *fieldNode
	mapFld    *mapFieldNode
	grp       *groupNode
	oo        *oneOfNode
	ooDecls   []*oneOfElement
	ext       *extensionRangeNode
	resvd     *reservedNode
	en        *enumNode
	enDecls   []*enumElement
	env       *enumValueNode
	extend    *extendNode
	extDecls  []*extendElement
	svc       *serviceNode
	svcDecls  []*serviceElement
	mtd       *methodNode
	rpcType   *rpcTypeNode
	opts      []*optionNode
	optNm     []*optionNamePartNode
	rngs      []*rangeNode
	names     []*stringLiteralNode
	sl        []valueNode
	agg       []*aggregateEntryNode
	aggName   *aggregateNameNode
	v         valueNode
	str       *stringLiteralNode
	i         *negativeIntLiteralNode
	ui        *intLiteralNode
	f         *floatLiteralNode
	id        *identNode
	b         *basicNode
	err       error
}

const _STRING_LIT = 57346
const _INT_LIT = 57347
const _FLOAT_LIT = 57348
const _NAME = 57349
const _FQNAME = 57350
const _TYPENAME = 57351
const _SYNTAX = 57352
const _IMPORT = 57353
const _WEAK = 57354
const _PUBLIC = 57355
const _PACKAGE = 57356
const _OPTION = 57357
const _TRUE = 57358
const _FALSE = 57359
const _INF = 57360
const _NAN = 57361
const _REPEATED = 57362
const _OPTIONAL = 57363
const _REQUIRED = 57364
const _DOUBLE = 57365
const _FLOAT = 57366
const _INT32 = 57367
const _INT64 = 57368
const _UINT32 = 57369
const _UINT64 = 57370
const _SINT32 = 57371
const _SINT64 = 57372
const _FIXED32 = 57373
const _FIXED64 = 57374
const _SFIXED32 = 57375
const _SFIXED64 = 57376
const _BOOL = 57377
const _STRING = 57378
const _BYTES = 57379
const _GROUP = 57380
const _ONEOF = 57381
const _MAP = 57382
const _EXTENSIONS = 57383
const _TO = 57384
const _MAX = 57385
const _RESERVED = 57386
const _ENUM = 57387
const _MESSAGE = 57388
const _EXTEND = 57389
const _SERVICE = 57390
const _RPC = 57391
const _STREAM = 57392
const _RETURNS = 57393
const _ERROR = 57394

var protoToknames = [...]string{
	"$end",
	"error",
	"$unk",
	"_STRING_LIT",
	"_INT_LIT",
	"_FLOAT_LIT",
	"_NAME",
	"_FQNAME",
	"_TYPENAME",
	"_SYNTAX",
	"_IMPORT",
	"_WEAK",
	"_PUBLIC",
	"_PACKAGE",
	"_OPTION",
	"_TRUE",
	"_FALSE",
	"_INF",
	"_NAN",
	"_REPEATED",
	"_OPTIONAL",
	"_REQUIRED",
	"_DOUBLE",
	"_FLOAT",
	"_INT32",
	"_INT64",
	"_UINT32",
	"_UINT64",
	"_SINT32",
	"_SINT64",
	"_FIXED32",
	"_FIXED64",
	"_SFIXED32",
	"_SFIXED64",
	"_BOOL",
	"_STRING",
	"_BYTES",
	"_GROUP",
	"_ONEOF",
	"_MAP",
	"_EXTENSIONS",
	"_TO",
	"_MAX",
	"_RESERVED",
	"_ENUM",
	"_MESSAGE",
	"_EXTEND",
	"_SERVICE",
	"_RPC",
	"_STREAM",
	"_RETURNS",
	"_ERROR",
	"'='",
	"';'",
	"':'",
	"'{'",
	"'}'",
	"'\\\\'",
	"'/'",
	"'?'",
	"'.'",
	"','",
	"'>'",
	"'<'",
	"'+'",
	"'-'",
	"'('",
	"')'",
	"'['",
	"']'",
	"'*'",
	"'&'",
	"'^'",
	"'%'",
	"'$'",
	"'#'",
	"'@'",
	"'!'",
	"'~'",
	"'`'",
}
var protoStatenames = [...]string{}

const protoEofCode = 1
const protoErrCode = 2
const protoInitialStackSize = 16

//line proto.y:937

//line yacctab:1
var protoExca = [...]int{
	-1, 1,
	1, -1,
	-2, 0,
}

const protoPrivate = 57344

const protoLast = 2050

var protoAct = [...]int{

	120, 8, 288, 8, 8, 386, 264, 80, 128, 113,
	159, 160, 265, 271, 103, 196, 185, 112, 100, 101,
	29, 171, 8, 28, 75, 119, 99, 114, 79, 153,
	137, 148, 266, 184, 24, 139, 306, 255, 77, 78,
	319, 82, 306, 83, 389, 86, 87, 306, 318, 74,
	378, 306, 98, 306, 306, 363, 317, 306, 306, 361,
	306, 359, 351, 222, 379, 338, 337, 366, 307, 328,
	377, 224, 325, 322, 304, 280, 278, 286, 223, 380,
	315, 356, 367, 197, 329, 90, 243, 326, 323, 305,
	281, 279, 297, 140, 111, 154, 27, 197, 249, 214,
	209, 106, 188, 336, 246, 276, 241, 330, 240, 211,
	105, 173, 245, 144, 242, 287, 224, 208, 381, 150,
	382, 149, 176, 146, 327, 207, 324, 163, 16, 226,
	94, 93, 92, 91, 177, 179, 181, 16, 199, 140,
	79, 75, 85, 392, 199, 383, 368, 199, 374, 183,
	78, 77, 373, 154, 16, 187, 191, 372, 199, 144,
	198, 365, 157, 174, 85, 191, 74, 156, 355, 146,
	189, 206, 212, 150, 193, 149, 388, 354, 204, 201,
	163, 210, 203, 14, 333, 158, 15, 16, 157, 85,
	85, 88, 97, 156, 213, 16, 202, 335, 215, 216,
	217, 218, 219, 220, 308, 262, 261, 4, 14, 244,
	260, 15, 16, 376, 96, 259, 258, 18, 17, 19,
	20, 257, 254, 256, 221, 339, 13, 272, 252, 194,
	105, 75, 163, 248, 388, 275, 250, 390, 283, 95,
	84, 267, 18, 17, 19, 20, 89, 23, 247, 225,
	352, 13, 268, 303, 168, 169, 27, 186, 290, 302,
	198, 282, 277, 285, 295, 301, 206, 170, 300, 5,
	299, 272, 105, 22, 163, 163, 284, 117, 11, 275,
	11, 11, 165, 166, 310, 312, 313, 75, 314, 75,
	269, 22, 27, 155, 298, 167, 311, 186, 316, 11,
	25, 26, 263, 168, 293, 320, 85, 206, 27, 152,
	12, 147, 331, 75, 75, 163, 163, 3, 141, 332,
	21, 115, 10, 138, 10, 10, 118, 195, 142, 105,
	345, 75, 206, 347, 75, 123, 349, 75, 190, 105,
	105, 163, 346, 10, 270, 348, 116, 9, 350, 9,
	9, 122, 357, 121, 358, 273, 176, 353, 176, 369,
	176, 334, 163, 161, 163, 290, 292, 104, 9, 206,
	206, 340, 342, 102, 375, 75, 162, 227, 163, 163,
	172, 385, 7, 387, 6, 2, 387, 384, 75, 1,
	0, 391, 27, 107, 110, 31, 0, 0, 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,
	0, 0, 0, 0, 106, 0, 0, 0, 0, 0,
	0, 0, 294, 108, 109, 0, 0, 0, 291, 27,
	107, 110, 31, 0, 0, 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, 0, 0, 0,
	0, 106, 0, 0, 0, 0, 0, 0, 0, 253,
	108, 109, 0, 0, 251, 27, 107, 110, 31, 0,
	0, 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, 0, 0, 0, 0, 106, 0, 0,
	0, 0, 0, 0, 0, 343, 108, 109, 27, 107,
	110, 31, 0, 0, 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, 0, 0, 0, 0,
	106, 0, 0, 0, 0, 0, 0, 0, 341, 108,
	109, 27, 107, 110, 31, 0, 0, 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, 0,
	0, 0, 0, 106, 0, 0, 0, 0, 0, 0,
	0, 31, 108, 109, 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, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 371, 0, 0,
	0, 31, 0, 164, 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, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 370, 0, 0,
	0, 31, 0, 164, 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, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 344, 0, 0,
	0, 31, 0, 164, 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, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 321, 0, 0,
	0, 31, 0, 164, 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, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 296, 0, 0,
	0, 31, 0, 164, 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, 0, 0, 0, 0,
	0, 205, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 31, 0, 164, 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, 228, 229, 230, 231,
	232, 233, 234, 235, 236, 237, 238, 239, 0, 0,
	0, 31, 30, 164, 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, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 76, 31, 30, 81, 32, 33, 34, 35, 36,
	133, 38, 39, 40, 41, 127, 126, 125, 45, 46,
	47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
	57, 58, 59, 60, 134, 135, 132, 64, 65, 136,
	129, 130, 131, 70, 71, 72, 73, 0, 0, 124,
	0, 0, 364, 31, 30, 81, 32, 33, 34, 35,
	36, 133, 38, 39, 40, 41, 127, 126, 125, 45,
	46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
	56, 57, 58, 59, 60, 134, 135, 132, 64, 65,
	136, 129, 130, 131, 70, 71, 72, 73, 0, 0,
	124, 0, 0, 362, 31, 30, 81, 32, 33, 34,
	35, 36, 133, 38, 39, 40, 41, 127, 126, 125,
	45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
	55, 56, 57, 58, 59, 60, 134, 135, 132, 64,
	65, 136, 129, 130, 131, 70, 71, 72, 73, 0,
	0, 124, 0, 0, 360, 31, 30, 81, 32, 33,
	34, 35, 36, 133, 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,
	0, 0, 274, 0, 0, 309, 31, 30, 81, 32,
	33, 34, 35, 36, 37, 38, 39, 40, 41, 127,
	126, 125, 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, 0, 0, 151, 0, 0, 200, 31, 30, 81,
	32, 33, 34, 35, 36, 133, 38, 39, 40, 41,
	127, 126, 125, 45, 46, 47, 48, 49, 50, 51,
	52, 53, 54, 55, 56, 57, 58, 59, 60, 134,
	135, 132, 64, 65, 136, 129, 130, 131, 70, 71,
	72, 73, 0, 0, 124, 31, 0, 175, 32, 33,
	34, 35, 36, 133, 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, 145, 67, 68, 69, 70, 71, 72, 73,
	0, 0, 143, 0, 0, 192, 31, 30, 81, 32,
	33, 34, 35, 36, 133, 38, 39, 40, 41, 127,
	126, 125, 45, 46, 47, 48, 49, 50, 51, 52,
	53, 54, 55, 56, 57, 58, 59, 60, 134, 135,
	132, 64, 65, 136, 129, 130, 131, 70, 71, 72,
	73, 0, 0, 124, 31, 30, 81, 32, 33, 34,
	35, 36, 133, 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, 0,
	0, 274, 31, 30, 81, 32, 33, 34, 35, 36,
	37, 38, 39, 40, 41, 127, 126, 125, 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, 31, 0, 151,
	32, 33, 34, 35, 36, 133, 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, 145, 67, 68, 69, 70, 71,
	72, 73, 0, 0, 143, 31, 30, 81, 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, 289, 73,
	31, 30, 81, 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, 31, 30, 81, 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, 182, 61, 62, 63,
	64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
	31, 30, 81, 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, 180, 61, 62, 63, 64, 65, 66, 67, 68,
	69, 70, 71, 72, 73, 31, 30, 81, 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, 178, 61, 62, 63,
	64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
	31, 30, 0, 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, 31, 0, 0, 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,
}
var protoPact = [...]int{

	197, -1000, 172, 172, 194, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, 288, 1953, 1124, 1998, 1998, 1773,
	1998, 172, -1000, 304, 186, 304, 304, -1000, 137, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, 193, -1000, 1773, 77, 76, 75,
	-1000, -1000, 74, 185, -1000, -1000, 160, 138, -1000, 647,
	26, 1539, 1680, 1635, 113, -1000, -1000, -1000, 131, -1000,
	-1000, 302, -1000, -1000, -1000, -1000, 1064, -1000, 277, 249,
	-1000, 102, 1440, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, 1908, 1863, 1818, 1998, 1998,
	1998, 1773, 292, 1124, 1998, 38, 252, -1000, 1488, -1000,
	-1000, -1000, -1000, -1000, 176, 92, -1000, 1389, -1000, -1000,
	-1000, -1000, 139, -1000, -1000, -1000, -1000, 1998, -1000, 1004,
	-1000, 63, 45, -1000, 1953, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, 102, -1000, 32, -1000, -1000, 1998, 1998, 1998,
	1998, 1998, 1998, 171, 9, -1000, 207, 73, 1091, 54,
	52, 302, -1000, -1000, 81, 50, -1000, 206, 191, 298,
	-1000, -1000, -1000, -1000, 31, -1000, -1000, -1000, -1000, 455,
	-1000, 1064, -33, -1000, 1773, 168, 163, 162, 157, 153,
	152, 297, -1000, 1124, 292, 247, 1587, 43, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, 304, 22, 21, 78, -1000, 233, 72, 1728,
	-1000, 388, -1000, 1064, 944, -1000, 24, 289, 265, 263,
	260, 254, 248, 20, -2, -1000, 151, -1000, -1000, -1000,
	1338, -1000, -1000, -1000, -1000, 1998, 1773, 302, -1000, 1124,
	-1000, 1124, -1000, -1000, -1000, -1000, -1000, -1000, 12, 1773,
	-1000, -1000, -14, -1000, 1064, 884, -1000, -1000, 19, 70,
	18, 68, 15, 51, -1000, 1124, 1124, 130, 647, -1000,
	-1000, 144, 40, -4, -5, 174, -1000, -1000, 584, 521,
	824, -1000, -1000, 1124, 1539, -1000, 1124, 1539, -1000, 1124,
	1539, -8, -1000, -1000, -1000, 245, 1998, 123, 114, 14,
	-1000, 1064, -1000, 1064, -1000, -9, 1287, -11, 1236, -15,
	1185, 107, 13, 93, -1000, -1000, 1728, 764, 704, 103,
	-1000, 98, -1000, 94, -1000, -1000, -1000, 1124, 208, 2,
	-1000, -1000, -1000, -1000, -1000, -20, 10, 64, 91, -1000,
	1124, -1000, 122, -1000, -26, 180, -1000, -1000, -1000, 89,
	-1000, -1000, -1000,
}
var protoPgo = [...]int{

	0, 389, 385, 269, 317, 384, 382, 0, 12, 6,
	5, 381, 32, 21, 380, 52, 26, 18, 20, 7,
	8, 377, 376, 14, 373, 367, 366, 10, 11, 363,
	27, 355, 353, 25, 351, 346, 9, 17, 13, 344,
	338, 335, 328, 30, 16, 33, 15, 327, 326, 321,
	35, 323, 318, 277, 31, 311, 19, 310, 29, 309,
	293, 2,
}
var protoR1 = [...]int{

	0, 1, 1, 1, 1, 4, 4, 3, 3, 3,
	3, 3, 3, 3, 3, 2, 5, 5, 5, 6,
	19, 19, 7, 12, 12, 12, 13, 13, 14, 14,
	15, 15, 16, 16, 16, 16, 16, 24, 24, 23,
	25, 25, 25, 25, 25, 56, 56, 17, 27, 27,
	27, 28, 28, 28, 29, 29, 29, 29, 29, 29,
	29, 22, 22, 26, 26, 26, 26, 26, 26, 20,
	20, 30, 30, 30, 30, 30, 30, 30, 30, 9,
	9, 8, 33, 33, 33, 32, 39, 39, 39, 38,
	38, 38, 31, 31, 34, 34, 21, 21, 21, 21,
	21, 21, 21, 21, 21, 21, 21, 21, 48, 48,
	45, 45, 44, 44, 44, 47, 47, 46, 46, 46,
	46, 46, 46, 46, 41, 41, 42, 42, 43, 40,
	40, 49, 51, 51, 51, 50, 50, 50, 50, 52,
	52, 52, 52, 35, 37, 37, 37, 36, 36, 36,
	36, 36, 36, 36, 36, 36, 36, 36, 53, 55,
	55, 55, 54, 54, 54, 57, 59, 59, 59, 58,
	58, 58, 60, 60, 61, 61, 11, 11, 11, 10,
	10, 18, 18, 18, 18, 18, 18, 18, 18, 18,
	18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
	18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
	18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
	18, 18, 18, 18,
}
var protoR2 = [...]int{

	0, 1, 1, 2, 0, 2, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 4, 3, 4, 4, 3,
	1, 1, 5, 1, 3, 4, 1, 2, 1, 4,
	1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
	1, 2, 2, 2, 2, 1, 2, 3, 1, 2,
	0, 1, 2, 2, 3, 4, 5, 3, 2, 5,
	4, 1, 3, 1, 3, 3, 3, 5, 5, 1,
	1, 6, 6, 6, 5, 9, 9, 9, 8, 3,
	1, 3, 8, 8, 8, 5, 2, 1, 0, 1,
	1, 1, 5, 8, 10, 13, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 3, 6,
	3, 1, 1, 3, 3, 3, 1, 1, 1, 3,
	3, 3, 3, 3, 3, 1, 3, 1, 3, 3,
	1, 5, 2, 1, 0, 1, 1, 1, 1, 4,
	7, 4, 7, 5, 2, 1, 0, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 5, 2,
	1, 0, 1, 1, 1, 5, 2, 1, 0, 1,
	1, 1, 10, 12, 2, 1, 2, 1, 0, 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, 1, 1, 1,
}
var protoChk = [...]int{

	-1000, -1, -2, -4, 10, -3, -5, -6, -7, -35,
	-49, -53, -57, 54, 11, 14, 15, 46, 45, 47,
	48, -4, -3, 53, -56, 12, 13, 4, -19, -18,
	8, 7, 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, -12, -19, 67, -18, -18, -20,
	-19, 9, -18, -56, 54, 4, -56, -56, 54, 53,
	-20, 56, 56, 56, 56, 54, 54, 54, -15, -16,
	-17, -56, -24, -23, -25, -18, 56, 5, 65, 66,
	6, 68, -37, -36, -30, -49, -35, -53, -48, -33,
	-7, -32, -34, -41, 54, 22, 21, 20, -20, 45,
	46, 47, 41, 15, 39, 40, 44, -43, -51, -50,
	-7, -52, -42, 54, -18, 44, -43, -55, -54, -30,
	-33, 54, -59, -58, -7, -60, 54, 49, 54, -27,
	-28, -29, -22, -18, 69, 5, 6, 18, 5, 6,
	18, -13, -14, 9, 61, 57, -36, -20, 38, -20,
	38, -20, 38, -18, -45, -44, 5, -18, 64, -45,
	-40, -56, 57, -50, 53, -47, -46, 5, -23, 66,
	57, -54, 57, -58, -18, 57, -28, 62, 54, 55,
	-17, 64, -19, -13, 67, -18, -18, -18, -18, -18,
	-18, 53, 54, 69, 62, 42, 56, -21, 25, 26,
	27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
	54, 54, 62, 5, -23, 62, 54, 42, 42, 67,
	-16, 69, -17, 64, -27, 70, -20, 53, 53, 53,
	53, 53, 53, 5, -9, -8, -12, -44, 5, 43,
	-39, -38, -7, -31, 54, -20, 62, -56, 54, 69,
	54, 69, -46, 5, 43, -23, 5, 43, -61, 50,
	-20, 70, -26, -15, 64, -27, 63, 68, 5, 5,
	5, 5, 5, 5, 54, 69, 62, 70, 53, 57,
	-38, -18, -20, -9, -9, 68, -20, 70, 62, 54,
	-27, 63, 54, 69, 56, 54, 69, 56, 54, 69,
	56, -9, -8, 54, -15, 53, 63, 70, 70, 51,
	-15, 64, -15, 64, 63, -9, -37, -9, -37, -9,
	-37, 70, 5, -18, 54, 54, 67, -27, -27, 70,
	57, 70, 57, 70, 57, 54, 54, 69, 53, -61,
	63, 63, 54, 54, 54, -9, 5, 68, 70, 54,
	69, 54, 56, 54, -9, -11, -10, -7, 54, 70,
	57, -10, 54,
}
var protoDef = [...]int{

	4, -2, 1, 2, 0, 6, 7, 8, 9, 10,
	11, 12, 13, 14, 0, 0, 0, 0, 0, 0,
	0, 3, 5, 0, 0, 0, 0, 45, 0, 20,
	21, 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, 0, 23, 0, 0, 0, 0,
	69, 70, 0, 0, 16, 46, 0, 0, 19, 0,
	0, 146, 134, 161, 168, 15, 17, 18, 0, 30,
	31, 32, 33, 34, 35, 36, 50, 37, 0, 0,
	40, 24, 0, 145, 147, 148, 149, 150, 151, 152,
	153, 154, 155, 156, 157, 0, 0, 0, 0, 0,
	0, 0, 213, 187, 0, 212, 216, 125, 0, 133,
	135, 136, 137, 138, 0, 216, 127, 0, 160, 162,
	163, 164, 0, 167, 169, 170, 171, 0, 22, 0,
	48, 51, 0, 61, 0, 38, 42, 43, 39, 41,
	44, 25, 26, 28, 0, 143, 144, 0, 0, 0,
	0, 0, 0, 0, 0, 111, 112, 0, 0, 0,
	0, 130, 131, 132, 0, 0, 116, 117, 118, 0,
	158, 159, 165, 166, 0, 47, 49, 52, 53, 0,
	58, 50, 0, 27, 0, 0, 0, 0, 0, 0,
	0, 0, 108, 0, 0, 0, 88, 0, 96, 97,
	98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
	124, 128, 0, 0, 0, 0, 126, 0, 0, 0,
	54, 0, 57, 50, 0, 62, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 80, 0, 110, 113, 114,
	0, 87, 89, 90, 91, 0, 0, 129, 139, 0,
	141, 0, 115, 119, 122, 120, 121, 123, 0, 222,
	175, 55, 0, 63, 50, 0, 60, 29, 0, 0,
	0, 0, 0, 0, 74, 0, 0, 0, 0, 85,
	86, 0, 0, 0, 0, 0, 174, 56, 0, 0,
	0, 59, 71, 0, 146, 72, 0, 146, 73, 0,
	146, 0, 79, 109, 81, 0, 0, 0, 0, 0,
	64, 50, 65, 50, 66, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 140, 142, 0, 0, 0, 0,
	82, 0, 83, 0, 84, 78, 92, 0, 0, 0,
	67, 68, 75, 76, 77, 0, 0, 0, 0, 94,
	0, 172, 178, 93, 0, 0, 177, 179, 180, 0,
	173, 176, 95,
}
var protoTok1 = [...]int{

	1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 3, 3, 78, 3, 76, 75, 74, 72, 3,
	67, 68, 71, 65, 62, 66, 61, 59, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 3, 55, 54,
	64, 53, 63, 60, 77, 3, 3, 3, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 69, 58, 70, 73, 3, 80, 3, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 3, 3, 56, 3, 57, 79,
}
var protoTok2 = [...]int{

	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,
}
var protoTok3 = [...]int{
	0,
}

var protoErrorMessages = [...]struct {
	state int
	token int
	msg   string
}{}

//line yaccpar:1

/*	parser for yacc output	*/

var (
	protoDebug        = 0
	protoErrorVerbose = false
)

type protoLexer interface {
	Lex(lval *protoSymType) int
	Error(s string)
}

type protoParser interface {
	Parse(protoLexer) int
	Lookahead() int
}

type protoParserImpl struct {
	lval  protoSymType
	stack [protoInitialStackSize]protoSymType
	char  int
}

func (p *protoParserImpl) Lookahead() int {
	return p.char
}

func protoNewParser() protoParser {
	return &protoParserImpl{}
}

const protoFlag = -1000

func protoTokname(c int) string {
	if c >= 1 && c-1 < len(protoToknames) {
		if protoToknames[c-1] != "" {
			return protoToknames[c-1]
		}
	}
	return __yyfmt__.Sprintf("tok-%v", c)
}

func protoStatname(s int) string {
	if s >= 0 && s < len(protoStatenames) {
		if protoStatenames[s] != "" {
			return protoStatenames[s]
		}
	}
	return __yyfmt__.Sprintf("state-%v", s)
}

func protoErrorMessage(state, lookAhead int) string {
	const TOKSTART = 4

	if !protoErrorVerbose {
		return "syntax error"
	}

	for _, e := range protoErrorMessages {
		if e.state == state && e.token == lookAhead {
			return "syntax error: " + e.msg
		}
	}

	res := "syntax error: unexpected " + protoTokname(lookAhead)

	// To match Bison, suggest at most four expected tokens.
	expected := make([]int, 0, 4)

	// Look for shiftable tokens.
	base := protoPact[state]
	for tok := TOKSTART; tok-1 < len(protoToknames); tok++ {
		if n := base + tok; n >= 0 && n < protoLast && protoChk[protoAct[n]] == tok {
			if len(expected) == cap(expected) {
				return res
			}
			expected = append(expected, tok)
		}
	}

	if protoDef[state] == -2 {
		i := 0
		for protoExca[i] != -1 || protoExca[i+1] != state {
			i += 2
		}

		// Look for tokens that we accept or reduce.
		for i += 2; protoExca[i] >= 0; i += 2 {
			tok := protoExca[i]
			if tok < TOKSTART || protoExca[i+1] == 0 {
				continue
			}
			if len(expected) == cap(expected) {
				return res
			}
			expected = append(expected, tok)
		}

		// If the default action is to accept or reduce, give up.
		if protoExca[i+1] != 0 {
			return res
		}
	}

	for i, tok := range expected {
		if i == 0 {
			res += ", expecting "
		} else {
			res += " or "
		}
		res += protoTokname(tok)
	}
	return res
}

func protolex1(lex protoLexer, lval *protoSymType) (char, token int) {
	token = 0
	char = lex.Lex(lval)
	if char <= 0 {
		token = protoTok1[0]
		goto out
	}
	if char < len(protoTok1) {
		token = protoTok1[char]
		goto out
	}
	if char >= protoPrivate {
		if char < protoPrivate+len(protoTok2) {
			token = protoTok2[char-protoPrivate]
			goto out
		}
	}
	for i := 0; i < len(protoTok3); i += 2 {
		token = protoTok3[i+0]
		if token == char {
			token = protoTok3[i+1]
			goto out
		}
	}

out:
	if token == 0 {
		token = protoTok2[1] /* unknown char */
	}
	if protoDebug >= 3 {
		__yyfmt__.Printf("lex %s(%d)\n", protoTokname(token), uint(char))
	}
	return char, token
}

func protoParse(protolex protoLexer) int {
	return protoNewParser().Parse(protolex)
}

func (protorcvr *protoParserImpl) Parse(protolex protoLexer) int {
	var proton int
	var protoVAL protoSymType
	var protoDollar []protoSymType
	_ = protoDollar // silence set and not used
	protoS := protorcvr.stack[:]

	Nerrs := 0   /* number of errors */
	Errflag := 0 /* error recovery flag */
	protostate := 0
	protorcvr.char = -1
	prototoken := -1 // protorcvr.char translated into internal numbering
	defer func() {
		// Make sure we report no lookahead when not parsing.
		protostate = -1
		protorcvr.char = -1
		prototoken = -1
	}()
	protop := -1
	goto protostack

ret0:
	return 0

ret1:
	return 1

protostack:
	/* put a state and value onto the stack */
	if protoDebug >= 4 {
		__yyfmt__.Printf("char %v in %v\n", protoTokname(prototoken), protoStatname(protostate))
	}

	protop++
	if protop >= len(protoS) {
		nyys := make([]protoSymType, len(protoS)*2)
		copy(nyys, protoS)
		protoS = nyys
	}
	protoS[protop] = protoVAL
	protoS[protop].yys = protostate

protonewstate:
	proton = protoPact[protostate]
	if proton <= protoFlag {
		goto protodefault /* simple state */
	}
	if protorcvr.char < 0 {
		protorcvr.char, prototoken = protolex1(protolex, &protorcvr.lval)
	}
	proton += prototoken
	if proton < 0 || proton >= protoLast {
		goto protodefault
	}
	proton = protoAct[proton]
	if protoChk[proton] == prototoken { /* valid shift */
		protorcvr.char = -1
		prototoken = -1
		protoVAL = protorcvr.lval
		protostate = proton
		if Errflag > 0 {
			Errflag--
		}
		goto protostack
	}

protodefault:
	/* default state action */
	proton = protoDef[protostate]
	if proton == -2 {
		if protorcvr.char < 0 {
			protorcvr.char, prototoken = protolex1(protolex, &protorcvr.lval)
		}

		/* look through exception table */
		xi := 0
		for {
			if protoExca[xi+0] == -1 && protoExca[xi+1] == protostate {
				break
			}
			xi += 2
		}
		for xi += 2; ; xi += 2 {
			proton = protoExca[xi+0]
			if proton < 0 || proton == prototoken {
				break
			}
		}
		proton = protoExca[xi+1]
		if proton < 0 {
			goto ret0
		}
	}
	if proton == 0 {
		/* error ... attempt to resume parsing */
		switch Errflag {
		case 0: /* brand new error */
			protolex.Error(protoErrorMessage(protostate, prototoken))
			Nerrs++
			if protoDebug >= 1 {
				__yyfmt__.Printf("%s", protoStatname(protostate))
				__yyfmt__.Printf(" saw %s\n", protoTokname(prototoken))
			}
			fallthrough

		case 1, 2: /* incompletely recovered error ... try again */
			Errflag = 3

			/* find a state where "error" is a legal shift action */
			for protop >= 0 {
				proton = protoPact[protoS[protop].yys] + protoErrCode
				if proton >= 0 && proton < protoLast {
					protostate = protoAct[proton] /* simulate a shift of "error" */
					if protoChk[protostate] == protoErrCode {
						goto protostack
					}
				}

				/* the current p has no shift on "error", pop stack */
				if protoDebug >= 2 {
					__yyfmt__.Printf("error recovery pops state %d\n", protoS[protop].yys)
				}
				protop--
			}
			/* there is no state on the stack with an error shift ... abort */
			goto ret1

		case 3: /* no shift yet; clobber input char */
			if protoDebug >= 2 {
				__yyfmt__.Printf("error recovery discards %s\n", protoTokname(prototoken))
			}
			if prototoken == protoEofCode {
				goto ret1
			}
			protorcvr.char = -1
			prototoken = -1
			goto protonewstate /* try again in the same state */
		}
	}

	/* reduction by production proton */
	if protoDebug >= 2 {
		__yyfmt__.Printf("reduce %v in:\n\t%v\n", proton, protoStatname(protostate))
	}

	protont := proton
	protopt := protop
	_ = protopt // guard against "declared and not used"

	protop -= protoR2[proton]
	// protop is now the index of $0. Perform the default action. Iff the
	// reduced production is ε, $1 is possibly out of range.
	if protop+1 >= len(protoS) {
		nyys := make([]protoSymType, len(protoS)*2)
		copy(nyys, protoS)
		protoS = nyys
	}
	protoVAL = protoS[protop+1]

	/* consult goto table to find next state */
	proton = protoR1[proton]
	protog := protoPgo[proton]
	protoj := protog + protoS[protop].yys + 1

	if protoj >= protoLast {
		protostate = protoAct[protog]
	} else {
		protostate = protoAct[protoj]
		if protoChk[protostate] != -proton {
			protostate = protoAct[protog]
		}
	}
	// dummy call; replaced with literal code
	switch protont {

	case 1:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:114
		{
			protoVAL.file = &fileNode{syntax: protoDollar[1].syn}
			protoVAL.file.setRange(protoDollar[1].syn, protoDollar[1].syn)
			protolex.(*protoLex).res = protoVAL.file
		}
	case 2:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:119
		{
			protoVAL.file = &fileNode{decls: protoDollar[1].fileDecls}
			if len(protoDollar[1].fileDecls) > 0 {
				protoVAL.file.setRange(protoDollar[1].fileDecls[0], protoDollar[1].fileDecls[len(protoDollar[1].fileDecls)-1])
			}
			protolex.(*protoLex).res = protoVAL.file
		}
	case 3:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:126
		{
			protoVAL.file = &fileNode{syntax: protoDollar[1].syn, decls: protoDollar[2].fileDecls}
			var end node
			if len(protoDollar[2].fileDecls) > 0 {
				end = protoDollar[2].fileDecls[len(protoDollar[2].fileDecls)-1]
			} else {
				end = protoDollar[1].syn
			}
			protoVAL.file.setRange(protoDollar[1].syn, end)
			protolex.(*protoLex).res = protoVAL.file
		}
	case 4:
		protoDollar = protoS[protopt-0 : protopt+1]
//line proto.y:137
		{
		}
	case 5:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:140
		{
			protoVAL.fileDecls = append(protoDollar[1].fileDecls, protoDollar[2].fileDecls...)
		}
	case 7:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:145
		{
			protoVAL.fileDecls = []*fileElement{{imp: protoDollar[1].imprt}}
		}
	case 8:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:148
		{
			protoVAL.fileDecls = []*fileElement{{pkg: protoDollar[1].pkg}}
		}
	case 9:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:151
		{
			protoVAL.fileDecls = []*fileElement{{option: protoDollar[1].opts[0]}}
		}
	case 10:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:154
		{
			protoVAL.fileDecls = []*fileElement{{message: protoDollar[1].msg}}
		}
	case 11:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:157
		{
			protoVAL.fileDecls = []*fileElement{{enum: protoDollar[1].en}}
		}
	case 12:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:160
		{
			protoVAL.fileDecls = []*fileElement{{extend: protoDollar[1].extend}}
		}
	case 13:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:163
		{
			protoVAL.fileDecls = []*fileElement{{service: protoDollar[1].svc}}
		}
	case 14:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:166
		{
			protoVAL.fileDecls = []*fileElement{{empty: protoDollar[1].b}}
		}
	case 15:
		protoDollar = protoS[protopt-4 : protopt+1]
//line proto.y:170
		{
			if protoDollar[3].str.val != "proto2" && protoDollar[3].str.val != "proto3" {
				lexError(protolex, protoDollar[3].str.start(), "syntax value must be 'proto2' or 'proto3'")
			}
			protoVAL.syn = &syntaxNode{syntax: protoDollar[3].str}
			protoVAL.syn.setRange(protoDollar[1].id, protoDollar[4].b)
		}
	case 16:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:178
		{
			protoVAL.imprt = &importNode{name: protoDollar[2].str}
			protoVAL.imprt.setRange(protoDollar[1].id, protoDollar[3].b)
		}
	case 17:
		protoDollar = protoS[protopt-4 : protopt+1]
//line proto.y:182
		{
			protoVAL.imprt = &importNode{name: protoDollar[3].str, weak: true}
			protoVAL.imprt.setRange(protoDollar[1].id, protoDollar[4].b)
		}
	case 18:
		protoDollar = protoS[protopt-4 : protopt+1]
//line proto.y:186
		{
			protoVAL.imprt = &importNode{name: protoDollar[3].str, public: true}
			protoVAL.imprt.setRange(protoDollar[1].id, protoDollar[4].b)
		}
	case 19:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:191
		{
			protoVAL.pkg = &packageNode{name: protoDollar[2].id}
			protoVAL.pkg.setRange(protoDollar[1].id, protoDollar[3].b)
		}
	case 22:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:199
		{
			n := &optionNameNode{parts: protoDollar[2].optNm}
			n.setRange(protoDollar[2].optNm[0], protoDollar[2].optNm[len(protoDollar[2].optNm)-1])
			o := &optionNode{name: n, val: protoDollar[4].v}
			o.setRange(protoDollar[1].id, protoDollar[5].b)
			protoVAL.opts = []*optionNode{o}
		}
	case 23:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:207
		{
			protoVAL.optNm = toNameParts(protoDollar[1].id, 0)
		}
	case 24:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:210
		{
			p := &optionNamePartNode{text: protoDollar[2].id, isExtension: true}
			p.setRange(protoDollar[1].b, protoDollar[3].b)
			protoVAL.optNm = []*optionNamePartNode{p}
		}
	case 25:
		protoDollar = protoS[protopt-4 : protopt+1]
//line proto.y:215
		{
			p := &optionNamePartNode{text: protoDollar[2].id, isExtension: true}
			p.setRange(protoDollar[1].b, protoDollar[3].b)
			ps := make([]*optionNamePartNode, 1, len(protoDollar[4].optNm)+1)
			ps[0] = p
			protoVAL.optNm = append(ps, protoDollar[4].optNm...)
		}
	case 27:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:224
		{
			protoVAL.optNm = append(protoDollar[1].optNm, protoDollar[2].optNm...)
		}
	case 28:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:228
		{
			protoVAL.optNm = toNameParts(protoDollar[1].id, 1 /* exclude leading dot */)
		}
	case 29:
		protoDollar = protoS[protopt-4 : protopt+1]
//line proto.y:231
		{
			p := &optionNamePartNode{text: protoDollar[3].id, isExtension: true}
			p.setRange(protoDollar[2].b, protoDollar[4].b)
			protoVAL.optNm = []*optionNamePartNode{p}
		}
	case 32:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:240
		{
			protoVAL.v = protoDollar[1].str
		}
	case 33:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:243
		{
			protoVAL.v = protoDollar[1].ui
		}
	case 34:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:246
		{
			protoVAL.v = protoDollar[1].i
		}
	case 35:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:249
		{
			protoVAL.v = protoDollar[1].f
		}
	case 36:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:252
		{
			if protoDollar[1].id.val == "true" {
				protoVAL.v = &boolLiteralNode{basicNode: protoDollar[1].id.basicNode, val: true}
			} else if protoDollar[1].id.val == "false" {
				protoVAL.v = &boolLiteralNode{basicNode: protoDollar[1].id.basicNode, val: false}
			} else if protoDollar[1].id.val == "inf" {
				f := &floatLiteralNode{val: math.Inf(1)}
				f.setRange(protoDollar[1].id, protoDollar[1].id)
				protoVAL.v = f
			} else if protoDollar[1].id.val == "nan" {
				f := &floatLiteralNode{val: math.NaN()}
				f.setRange(protoDollar[1].id, protoDollar[1].id)
				protoVAL.v = f
			} else {
				protoVAL.v = protoDollar[1].id
			}
		}
	case 38:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:271
		{
			protoVAL.ui = protoDollar[2].ui
		}
	case 39:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:275
		{
			if protoDollar[2].ui.val > math.MaxInt64+1 {
				lexError(protolex, protoDollar[2].ui.start(), fmt.Sprintf("numeric constant %d would underflow (allowed range is %d to %d)", protoDollar[2].ui.val, int64(math.MinInt64), int64(math.MaxInt64)))
			}
			protoVAL.i = &negativeIntLiteralNode{val: -int64(protoDollar[2].ui.val)}
			protoVAL.i.setRange(protoDollar[1].b, protoDollar[2].ui)
		}
	case 41:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:284
		{
			protoVAL.f = &floatLiteralNode{val: -protoDollar[2].f.val}
			protoVAL.f.setRange(protoDollar[1].b, protoDollar[2].f)
		}
	case 42:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:288
		{
			protoVAL.f = &floatLiteralNode{val: protoDollar[2].f.val}
			protoVAL.f.setRange(protoDollar[1].b, protoDollar[2].f)
		}
	case 43:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:292
		{
			protoVAL.f = &floatLiteralNode{val: math.Inf(1)}
			protoVAL.f.setRange(protoDollar[1].b, protoDollar[2].id)
		}
	case 44:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:296
		{
			protoVAL.f = &floatLiteralNode{val: math.Inf(-1)}
			protoVAL.f.setRange(protoDollar[1].b, protoDollar[2].id)
		}
	case 46:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:302
		{
			protoVAL.str = &stringLiteralNode{val: protoDollar[1].str.val + protoDollar[2].str.val}
			protoVAL.str.setRange(protoDollar[1].str, protoDollar[2].str)
		}
	case 47:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:307
		{
			a := &aggregateLiteralNode{elements: protoDollar[2].agg}
			a.setRange(protoDollar[1].b, protoDollar[3].b)
			protoVAL.v = a
		}
	case 49:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:314
		{
			protoVAL.agg = append(protoDollar[1].agg, protoDollar[2].agg...)
		}
	case 50:
		protoDollar = protoS[protopt-0 : protopt+1]
//line proto.y:317
		{
			protoVAL.agg = nil
		}
	case 52:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:322
		{
			protoVAL.agg = protoDollar[1].agg
		}
	case 53:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:325
		{
			protoVAL.agg = protoDollar[1].agg
		}
	case 54:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:329
		{
			a := &aggregateEntryNode{name: protoDollar[1].aggName, val: protoDollar[3].v}
			a.setRange(protoDollar[1].aggName, protoDollar[3].v)
			protoVAL.agg = []*aggregateEntryNode{a}
		}
	case 55:
		protoDollar = protoS[protopt-4 : protopt+1]
//line proto.y:334
		{
			s := &sliceLiteralNode{}
			s.setRange(protoDollar[3].b, protoDollar[4].b)
			a := &aggregateEntryNode{name: protoDollar[1].aggName, val: s}
			a.setRange(protoDollar[1].aggName, protoDollar[4].b)
			protoVAL.agg = []*aggregateEntryNode{a}
		}
	case 56:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:341
		{
			s := &sliceLiteralNode{elements: protoDollar[4].sl}
			s.setRange(protoDollar[3].b, protoDollar[5].b)
			a := &aggregateEntryNode{name: protoDollar[1].aggName, val: s}
			a.setRange(protoDollar[1].aggName, protoDollar[5].b)
			protoVAL.agg = []*aggregateEntryNode{a}
		}
	case 57:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:348
		{
			a := &aggregateEntryNode{name: protoDollar[1].aggName, val: protoDollar[3].v}
			a.setRange(protoDollar[1].aggName, protoDollar[3].v)
			protoVAL.agg = []*aggregateEntryNode{a}
		}
	case 58:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:353
		{
			a := &aggregateEntryNode{name: protoDollar[1].aggName, val: protoDollar[2].v}
			a.setRange(protoDollar[1].aggName, protoDollar[2].v)
			protoVAL.agg = []*aggregateEntryNode{a}
		}
	case 59:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:358
		{
			s := &aggregateLiteralNode{elements: protoDollar[4].agg}
			s.setRange(protoDollar[3].b, protoDollar[5].b)
			a := &aggregateEntryNode{name: protoDollar[1].aggName, val: s}
			a.setRange(protoDollar[1].aggName, protoDollar[5].b)
			protoVAL.agg = []*aggregateEntryNode{a}
		}
	case 60:
		protoDollar = protoS[protopt-4 : protopt+1]
//line proto.y:365
		{
			s := &aggregateLiteralNode{elements: protoDollar[3].agg}
			s.setRange(protoDollar[2].b, protoDollar[4].b)
			a := &aggregateEntryNode{name: protoDollar[1].aggName, val: s}
			a.setRange(protoDollar[1].aggName, protoDollar[4].b)
			protoVAL.agg = []*aggregateEntryNode{a}
		}
	case 61:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:373
		{
			protoVAL.aggName = &aggregateNameNode{name: protoDollar[1].id}
			protoVAL.aggName.setRange(protoDollar[1].id, protoDollar[1].id)
		}
	case 62:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:377
		{
			protoVAL.aggName = &aggregateNameNode{name: protoDollar[2].id, isExtension: true}
			protoVAL.aggName.setRange(protoDollar[1].b, protoDollar[3].b)
		}
	case 63:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:382
		{
			protoVAL.sl = []valueNode{protoDollar[1].v}
		}
	case 64:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:385
		{
			protoVAL.sl = append(protoDollar[1].sl, protoDollar[3].v)
		}
	case 65:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:388
		{
			protoVAL.sl = append(protoDollar[1].sl, protoDollar[3].v)
		}
	case 66:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:391
		{
			s := &aggregateLiteralNode{elements: protoDollar[2].agg}
			s.setRange(protoDollar[1].b, protoDollar[3].b)
			protoVAL.sl = []valueNode{s}
		}
	case 67:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:396
		{
			s := &aggregateLiteralNode{elements: protoDollar[4].agg}
			s.setRange(protoDollar[3].b, protoDollar[5].b)
			protoVAL.sl = append(protoDollar[1].sl, s)
		}
	case 68:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:401
		{
			s := &aggregateLiteralNode{elements: protoDollar[4].agg}
			s.setRange(protoDollar[3].b, protoDollar[5].b)
			protoVAL.sl = append(protoDollar[1].sl, s)
		}
	case 71:
		protoDollar = protoS[protopt-6 : protopt+1]
//line proto.y:410
		{
			checkTag(protolex, protoDollar[5].ui.start(), protoDollar[5].ui.val)
			lbl := &labelNode{basicNode: protoDollar[1].id.basicNode, required: true}
			protoVAL.fld = &fieldNode{label: lbl, fldType: protoDollar[2].id, name: protoDollar[3].id, tag: protoDollar[5].ui}
			protoVAL.fld.setRange(protoDollar[1].id, protoDollar[6].b)
		}
	case 72:
		protoDollar = protoS[protopt-6 : protopt+1]
//line proto.y:416
		{
			checkTag(protolex, protoDollar[5].ui.start(), protoDollar[5].ui.val)
			lbl := &labelNode{basicNode: protoDollar[1].id.basicNode}
			protoVAL.fld = &fieldNode{label: lbl, fldType: protoDollar[2].id, name: protoDollar[3].id, tag: protoDollar[5].ui}
			protoVAL.fld.setRange(protoDollar[1].id, protoDollar[6].b)
		}
	case 73:
		protoDollar = protoS[protopt-6 : protopt+1]
//line proto.y:422
		{
			checkTag(protolex, protoDollar[5].ui.start(), protoDollar[5].ui.val)
			lbl := &labelNode{basicNode: protoDollar[1].id.basicNode, repeated: true}
			protoVAL.fld = &fieldNode{label: lbl, fldType: protoDollar[2].id, name: protoDollar[3].id, tag: protoDollar[5].ui}
			protoVAL.fld.setRange(protoDollar[1].id, protoDollar[6].b)
		}
	case 74:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:428
		{
			checkTag(protolex, protoDollar[4].ui.start(), protoDollar[4].ui.val)
			protoVAL.fld = &fieldNode{fldType: protoDollar[1].id, name: protoDollar[2].id, tag: protoDollar[4].ui}
			protoVAL.fld.setRange(protoDollar[1].id, protoDollar[5].b)
		}
	case 75:
		protoDollar = protoS[protopt-9 : protopt+1]
//line proto.y:433
		{
			checkTag(protolex, protoDollar[5].ui.start(), protoDollar[5].ui.val)
			lbl := &labelNode{basicNode: protoDollar[1].id.basicNode, required: true}
			protoVAL.fld = &fieldNode{label: lbl, fldType: protoDollar[2].id, name: protoDollar[3].id, tag: protoDollar[5].ui, options: protoDollar[7].opts}
			protoVAL.fld.setRange(protoDollar[1].id, protoDollar[9].b)
		}
	case 76:
		protoDollar = protoS[protopt-9 : protopt+1]
//line proto.y:439
		{
			checkTag(protolex, protoDollar[5].ui.start(), protoDollar[5].ui.val)
			lbl := &labelNode{basicNode: protoDollar[1].id.basicNode}
			protoVAL.fld = &fieldNode{label: lbl, fldType: protoDollar[2].id, name: protoDollar[3].id, tag: protoDollar[5].ui, options: protoDollar[7].opts}
			protoVAL.fld.setRange(protoDollar[1].id, protoDollar[9].b)
		}
	case 77:
		protoDollar = protoS[protopt-9 : protopt+1]
//line proto.y:445
		{
			checkTag(protolex, protoDollar[5].ui.start(), protoDollar[5].ui.val)
			lbl := &labelNode{basicNode: protoDollar[1].id.basicNode, repeated: true}
			protoVAL.fld = &fieldNode{label: lbl, fldType: protoDollar[2].id, name: protoDollar[3].id, tag: protoDollar[5].ui, options: protoDollar[7].opts}
			protoVAL.fld.setRange(protoDollar[1].id, protoDollar[9].b)
		}
	case 78:
		protoDollar = protoS[protopt-8 : protopt+1]
//line proto.y:451
		{
			checkTag(protolex, protoDollar[4].ui.start(), protoDollar[4].ui.val)
			protoVAL.fld = &fieldNode{fldType: protoDollar[1].id, name: protoDollar[2].id, tag: protoDollar[4].ui, options: protoDollar[6].opts}
			protoVAL.fld.setRange(protoDollar[1].id, protoDollar[8].b)
		}
	case 79:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:457
		{
			protoVAL.opts = append(protoDollar[1].opts, protoDollar[3].opts...)
		}
	case 81:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:462
		{
			n := &optionNameNode{parts: protoDollar[1].optNm}
			n.setRange(protoDollar[1].optNm[0], protoDollar[1].optNm[len(protoDollar[1].optNm)-1])
			o := &optionNode{name: n, val: protoDollar[3].v}
			o.setRange(protoDollar[1].optNm[0], protoDollar[3].v)
			protoVAL.opts = []*optionNode{o}
		}
	case 82:
		protoDollar = protoS[protopt-8 : protopt+1]
//line proto.y:470
		{
			checkTag(protolex, protoDollar[5].ui.start(), protoDollar[5].ui.val)
			if !unicode.IsUpper(rune(protoDollar[3].id.val[0])) {
				lexError(protolex, protoDollar[3].id.start(), fmt.Sprintf("group %s should have a name that starts with a capital letter", protoDollar[3].id.val))
			}
			lbl := &labelNode{basicNode: protoDollar[1].id.basicNode, required: true}
			protoVAL.grp = &groupNode{groupKeyword: protoDollar[2].id, label: lbl, name: protoDollar[3].id, tag: protoDollar[5].ui, decls: protoDollar[7].msgDecls}
			protoVAL.grp.setRange(protoDollar[1].id, protoDollar[8].b)
		}
	case 83:
		protoDollar = protoS[protopt-8 : protopt+1]
//line proto.y:479
		{
			checkTag(protolex, protoDollar[5].ui.start(), protoDollar[5].ui.val)
			if !unicode.IsUpper(rune(protoDollar[3].id.val[0])) {
				lexError(protolex, protoDollar[3].id.start(), fmt.Sprintf("group %s should have a name that starts with a capital letter", protoDollar[3].id.val))
			}
			lbl := &labelNode{basicNode: protoDollar[1].id.basicNode}
			protoVAL.grp = &groupNode{groupKeyword: protoDollar[2].id, label: lbl, name: protoDollar[3].id, tag: protoDollar[5].ui, decls: protoDollar[7].msgDecls}
			protoVAL.grp.setRange(protoDollar[1].id, protoDollar[8].b)
		}
	case 84:
		protoDollar = protoS[protopt-8 : protopt+1]
//line proto.y:488
		{
			checkTag(protolex, protoDollar[5].ui.start(), protoDollar[5].ui.val)
			if !unicode.IsUpper(rune(protoDollar[3].id.val[0])) {
				lexError(protolex, protoDollar[3].id.start(), fmt.Sprintf("group %s should have a name that starts with a capital letter", protoDollar[3].id.val))
			}
			lbl := &labelNode{basicNode: protoDollar[1].id.basicNode, repeated: true}
			protoVAL.grp = &groupNode{groupKeyword: protoDollar[2].id, label: lbl, name: protoDollar[3].id, tag: protoDollar[5].ui, decls: protoDollar[7].msgDecls}
			protoVAL.grp.setRange(protoDollar[1].id, protoDollar[8].b)
		}
	case 85:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:498
		{
			c := 0
			for _, el := range protoDollar[4].ooDecls {
				if el.field != nil {
					c++
				}
			}
			if c == 0 {
				lexError(protolex, protoDollar[1].id.start(), "oneof must contain at least one field")
			}
			protoVAL.oo = &oneOfNode{name: protoDollar[2].id, decls: protoDollar[4].ooDecls}
			protoVAL.oo.setRange(protoDollar[1].id, protoDollar[5].b)
		}
	case 86:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:512
		{
			protoVAL.ooDecls = append(protoDollar[1].ooDecls, protoDollar[2].ooDecls...)
		}
	case 88:
		protoDollar = protoS[protopt-0 : protopt+1]
//line proto.y:516
		{
			protoVAL.ooDecls = nil
		}
	case 89:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:520
		{
			protoVAL.ooDecls = []*oneOfElement{{option: protoDollar[1].opts[0]}}
		}
	case 90:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:523
		{
			protoVAL.ooDecls = []*oneOfElement{{field: protoDollar[1].fld}}
		}
	case 91:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:526
		{
			protoVAL.ooDecls = []*oneOfElement{{empty: protoDollar[1].b}}
		}
	case 92:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:530
		{
			checkTag(protolex, protoDollar[4].ui.start(), protoDollar[4].ui.val)
			protoVAL.fld = &fieldNode{fldType: protoDollar[1].id, name: protoDollar[2].id, tag: protoDollar[4].ui}
			protoVAL.fld.setRange(protoDollar[1].id, protoDollar[5].b)
		}
	case 93:
		protoDollar = protoS[protopt-8 : protopt+1]
//line proto.y:535
		{
			checkTag(protolex, protoDollar[4].ui.start(), protoDollar[4].ui.val)
			protoVAL.fld = &fieldNode{fldType: protoDollar[1].id, name: protoDollar[2].id, tag: protoDollar[4].ui, options: protoDollar[6].opts}
			protoVAL.fld.setRange(protoDollar[1].id, protoDollar[8].b)
		}
	case 94:
		protoDollar = protoS[protopt-10 : protopt+1]
//line proto.y:541
		{
			checkTag(protolex, protoDollar[9].ui.start(), protoDollar[9].ui.val)
			protoVAL.mapFld = &mapFieldNode{mapKeyword: protoDollar[1].id, keyType: protoDollar[3].id, valueType: protoDollar[5].id, name: protoDollar[7].id, tag: protoDollar[9].ui}
			protoVAL.mapFld.setRange(protoDollar[1].id, protoDollar[10].b)
		}
	case 95:
		protoDollar = protoS[protopt-13 : protopt+1]
//line proto.y:546
		{
			checkTag(protolex, protoDollar[9].ui.start(), protoDollar[9].ui.val)
			protoVAL.mapFld = &mapFieldNode{mapKeyword: protoDollar[1].id, keyType: protoDollar[3].id, valueType: protoDollar[5].id, name: protoDollar[7].id, tag: protoDollar[9].ui, options: protoDollar[11].opts}
			protoVAL.mapFld.setRange(protoDollar[1].id, protoDollar[13].b)
		}
	case 108:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:565
		{
			protoVAL.ext = &extensionRangeNode{ranges: protoDollar[2].rngs}
			protoVAL.ext.setRange(protoDollar[1].id, protoDollar[3].b)
		}
	case 109:
		protoDollar = protoS[protopt-6 : protopt+1]
//line proto.y:569
		{
			protoVAL.ext = &extensionRangeNode{ranges: protoDollar[2].rngs, options: protoDollar[4].opts}
			protoVAL.ext.setRange(protoDollar[1].id, protoDollar[6].b)
		}
	case 110:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:574
		{
			protoVAL.rngs = append(protoDollar[1].rngs, protoDollar[3].rngs...)
		}
	case 112:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:579
		{
			if protoDollar[1].ui.val > internal.MaxTag {
				lexError(protolex, protoDollar[1].ui.start(), fmt.Sprintf("range includes out-of-range tag: %d (should be between 0 and %d)", protoDollar[1].ui.val, internal.MaxTag))
			}
			r := &rangeNode{stNode: protoDollar[1].ui, enNode: protoDollar[1].ui, st: int32(protoDollar[1].ui.val), en: int32(protoDollar[1].ui.val)}
			r.setRange(protoDollar[1].ui, protoDollar[1].ui)
			protoVAL.rngs = []*rangeNode{r}
		}
	case 113:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:587
		{
			if protoDollar[1].ui.val > internal.MaxTag {
				lexError(protolex, protoDollar[1].ui.start(), fmt.Sprintf("range start is out-of-range tag: %d (should be between 0 and %d)", protoDollar[1].ui.val, internal.MaxTag))
			}
			if protoDollar[3].ui.val > internal.MaxTag {
				lexError(protolex, protoDollar[3].ui.start(), fmt.Sprintf("range end is out-of-range tag: %d (should be between 0 and %d)", protoDollar[3].ui.val, internal.MaxTag))
			}
			if protoDollar[1].ui.val > protoDollar[3].ui.val {
				lexError(protolex, protoDollar[1].ui.start(), fmt.Sprintf("range, %d to %d, is invalid: start must be <= end", protoDollar[1].ui.val, protoDollar[3].ui.val))
			}
			r := &rangeNode{stNode: protoDollar[1].ui, enNode: protoDollar[3].ui, st: int32(protoDollar[1].ui.val), en: int32(protoDollar[3].ui.val)}
			r.setRange(protoDollar[1].ui, protoDollar[3].ui)
			protoVAL.rngs = []*rangeNode{r}
		}
	case 114:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:601
		{
			if protoDollar[1].ui.val > internal.MaxTag {
				lexError(protolex, protoDollar[1].ui.start(), fmt.Sprintf("range start is out-of-range tag: %d (should be between 0 and %d)", protoDollar[1].ui.val, internal.MaxTag))
			}
			r := &rangeNode{stNode: protoDollar[1].ui, enNode: protoDollar[3].id, st: int32(protoDollar[1].ui.val), en: internal.MaxTag}
			r.setRange(protoDollar[1].ui, protoDollar[3].id)
			protoVAL.rngs = []*rangeNode{r}
		}
	case 115:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:610
		{
			protoVAL.rngs = append(protoDollar[1].rngs, protoDollar[3].rngs...)
		}
	case 117:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:615
		{
			checkUint64InInt32Range(protolex, protoDollar[1].ui.start(), protoDollar[1].ui.val)
			r := &rangeNode{stNode: protoDollar[1].ui, enNode: protoDollar[1].ui, st: int32(protoDollar[1].ui.val), en: int32(protoDollar[1].ui.val)}
			r.setRange(protoDollar[1].ui, protoDollar[1].ui)
			protoVAL.rngs = []*rangeNode{r}
		}
	case 118:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:621
		{
			checkInt64InInt32Range(protolex, protoDollar[1].i.start(), protoDollar[1].i.val)
			r := &rangeNode{stNode: protoDollar[1].i, enNode: protoDollar[1].i, st: int32(protoDollar[1].i.val), en: int32(protoDollar[1].i.val)}
			r.setRange(protoDollar[1].i, protoDollar[1].i)
			protoVAL.rngs = []*rangeNode{r}
		}
	case 119:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:627
		{
			checkUint64InInt32Range(protolex, protoDollar[1].ui.start(), protoDollar[1].ui.val)
			checkUint64InInt32Range(protolex, protoDollar[3].ui.start(), protoDollar[3].ui.val)
			if protoDollar[1].ui.val > protoDollar[3].ui.val {
				lexError(protolex, protoDollar[1].ui.start(), fmt.Sprintf("range, %d to %d, is invalid: start must be <= end", protoDollar[1].ui.val, protoDollar[3].ui.val))
			}
			r := &rangeNode{stNode: protoDollar[1].ui, enNode: protoDollar[3].ui, st: int32(protoDollar[1].ui.val), en: int32(protoDollar[3].ui.val)}
			r.setRange(protoDollar[1].ui, protoDollar[3].ui)
			protoVAL.rngs = []*rangeNode{r}
		}
	case 120:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:637
		{
			checkInt64InInt32Range(protolex, protoDollar[1].i.start(), protoDollar[1].i.val)
			checkInt64InInt32Range(protolex, protoDollar[3].i.start(), protoDollar[3].i.val)
			if protoDollar[1].i.val > protoDollar[3].i.val {
				lexError(protolex, protoDollar[1].i.start(), fmt.Sprintf("range, %d to %d, is invalid: start must be <= end", protoDollar[1].i.val, protoDollar[3].i.val))
			}
			r := &rangeNode{stNode: protoDollar[1].i, enNode: protoDollar[3].i, st: int32(protoDollar[1].i.val), en: int32(protoDollar[3].i.val)}
			r.setRange(protoDollar[1].i, protoDollar[3].i)
			protoVAL.rngs = []*rangeNode{r}
		}
	case 121:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:647
		{
			checkInt64InInt32Range(protolex, protoDollar[1].i.start(), protoDollar[1].i.val)
			checkUint64InInt32Range(protolex, protoDollar[3].ui.start(), protoDollar[3].ui.val)
			r := &rangeNode{stNode: protoDollar[1].i, enNode: protoDollar[3].ui, st: int32(protoDollar[1].i.val), en: int32(protoDollar[3].ui.val)}
			r.setRange(protoDollar[1].i, protoDollar[3].ui)
			protoVAL.rngs = []*rangeNode{r}
		}
	case 122:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:654
		{
			checkUint64InInt32Range(protolex, protoDollar[1].ui.start(), protoDollar[1].ui.val)
			r := &rangeNode{stNode: protoDollar[1].ui, enNode: protoDollar[3].id, st: int32(protoDollar[1].ui.val), en: math.MaxInt32}
			r.setRange(protoDollar[1].ui, protoDollar[3].id)
			protoVAL.rngs = []*rangeNode{r}
		}
	case 123:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:660
		{
			checkInt64InInt32Range(protolex, protoDollar[1].i.start(), protoDollar[1].i.val)
			r := &rangeNode{stNode: protoDollar[1].i, enNode: protoDollar[3].id, st: int32(protoDollar[1].i.val), en: math.MaxInt32}
			r.setRange(protoDollar[1].i, protoDollar[3].id)
			protoVAL.rngs = []*rangeNode{r}
		}
	case 124:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:667
		{
			protoVAL.resvd = &reservedNode{ranges: protoDollar[2].rngs}
			protoVAL.resvd.setRange(protoDollar[1].id, protoDollar[3].b)
		}
	case 126:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:673
		{
			protoVAL.resvd = &reservedNode{ranges: protoDollar[2].rngs}
			protoVAL.resvd.setRange(protoDollar[1].id, protoDollar[3].b)
		}
	case 128:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:679
		{
			rsvd := map[string]struct{}{}
			for _, n := range protoDollar[2].names {
				if _, ok := rsvd[n.val]; ok {
					lexError(protolex, n.start(), fmt.Sprintf("name %q is reserved multiple times", n.val))
					break
				}
				rsvd[n.val] = struct{}{}
			}
			protoVAL.resvd = &reservedNode{names: protoDollar[2].names}
			protoVAL.resvd.setRange(protoDollar[1].id, protoDollar[3].b)
		}
	case 129:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:692
		{
			protoVAL.names = append(protoDollar[1].names, protoDollar[3].str)
		}
	case 130:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:695
		{
			protoVAL.names = []*stringLiteralNode{protoDollar[1].str}
		}
	case 131:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:699
		{
			c := 0
			for _, el := range protoDollar[4].enDecls {
				if el.value != nil {
					c++
				}
			}
			if c == 0 {
				lexError(protolex, protoDollar[1].id.start(), "enums must define at least one value")
			}
			protoVAL.en = &enumNode{name: protoDollar[2].id, decls: protoDollar[4].enDecls}
			protoVAL.en.setRange(protoDollar[1].id, protoDollar[5].b)
		}
	case 132:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:713
		{
			protoVAL.enDecls = append(protoDollar[1].enDecls, protoDollar[2].enDecls...)
		}
	case 134:
		protoDollar = protoS[protopt-0 : protopt+1]
//line proto.y:717
		{
			protoVAL.enDecls = nil
		}
	case 135:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:721
		{
			protoVAL.enDecls = []*enumElement{{option: protoDollar[1].opts[0]}}
		}
	case 136:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:724
		{
			protoVAL.enDecls = []*enumElement{{value: protoDollar[1].env}}
		}
	case 137:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:727
		{
			protoVAL.enDecls = []*enumElement{{reserved: protoDollar[1].resvd}}
		}
	case 138:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:730
		{
			protoVAL.enDecls = []*enumElement{{empty: protoDollar[1].b}}
		}
	case 139:
		protoDollar = protoS[protopt-4 : protopt+1]
//line proto.y:734
		{
			checkUint64InInt32Range(protolex, protoDollar[3].ui.start(), protoDollar[3].ui.val)
			protoVAL.env = &enumValueNode{name: protoDollar[1].id, numberP: protoDollar[3].ui}
			protoVAL.env.setRange(protoDollar[1].id, protoDollar[4].b)
		}
	case 140:
		protoDollar = protoS[protopt-7 : protopt+1]
//line proto.y:739
		{
			checkUint64InInt32Range(protolex, protoDollar[3].ui.start(), protoDollar[3].ui.val)
			protoVAL.env = &enumValueNode{name: protoDollar[1].id, numberP: protoDollar[3].ui, options: protoDollar[5].opts}
			protoVAL.env.setRange(protoDollar[1].id, protoDollar[7].b)
		}
	case 141:
		protoDollar = protoS[protopt-4 : protopt+1]
//line proto.y:744
		{
			checkInt64InInt32Range(protolex, protoDollar[3].i.start(), protoDollar[3].i.val)
			protoVAL.env = &enumValueNode{name: protoDollar[1].id, numberN: protoDollar[3].i}
			protoVAL.env.setRange(protoDollar[1].id, protoDollar[4].b)
		}
	case 142:
		protoDollar = protoS[protopt-7 : protopt+1]
//line proto.y:749
		{
			checkInt64InInt32Range(protolex, protoDollar[3].i.start(), protoDollar[3].i.val)
			protoVAL.env = &enumValueNode{name: protoDollar[1].id, numberN: protoDollar[3].i, options: protoDollar[5].opts}
			protoVAL.env.setRange(protoDollar[1].id, protoDollar[7].b)
		}
	case 143:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:755
		{
			protoVAL.msg = &messageNode{name: protoDollar[2].id, decls: protoDollar[4].msgDecls}
			protoVAL.msg.setRange(protoDollar[1].id, protoDollar[5].b)
		}
	case 144:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:760
		{
			protoVAL.msgDecls = append(protoDollar[1].msgDecls, protoDollar[2].msgDecls...)
		}
	case 146:
		protoDollar = protoS[protopt-0 : protopt+1]
//line proto.y:764
		{
			protoVAL.msgDecls = nil
		}
	case 147:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:768
		{
			protoVAL.msgDecls = []*messageElement{{field: protoDollar[1].fld}}
		}
	case 148:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:771
		{
			protoVAL.msgDecls = []*messageElement{{enum: protoDollar[1].en}}
		}
	case 149:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:774
		{
			protoVAL.msgDecls = []*messageElement{{nested: protoDollar[1].msg}}
		}
	case 150:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:777
		{
			protoVAL.msgDecls = []*messageElement{{extend: protoDollar[1].extend}}
		}
	case 151:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:780
		{
			protoVAL.msgDecls = []*messageElement{{extensionRange: protoDollar[1].ext}}
		}
	case 152:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:783
		{
			protoVAL.msgDecls = []*messageElement{{group: protoDollar[1].grp}}
		}
	case 153:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:786
		{
			protoVAL.msgDecls = []*messageElement{{option: protoDollar[1].opts[0]}}
		}
	case 154:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:789
		{
			protoVAL.msgDecls = []*messageElement{{oneOf: protoDollar[1].oo}}
		}
	case 155:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:792
		{
			protoVAL.msgDecls = []*messageElement{{mapField: protoDollar[1].mapFld}}
		}
	case 156:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:795
		{
			protoVAL.msgDecls = []*messageElement{{reserved: protoDollar[1].resvd}}
		}
	case 157:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:798
		{
			protoVAL.msgDecls = []*messageElement{{empty: protoDollar[1].b}}
		}
	case 158:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:802
		{
			c := 0
			for _, el := range protoDollar[4].extDecls {
				if el.field != nil || el.group != nil {
					c++
				}
			}
			if c == 0 {
				lexError(protolex, protoDollar[1].id.start(), "extend sections must define at least one extension")
			}
			protoVAL.extend = &extendNode{extendee: protoDollar[2].id, decls: protoDollar[4].extDecls}
			protoVAL.extend.setRange(protoDollar[1].id, protoDollar[5].b)
		}
	case 159:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:816
		{
			protoVAL.extDecls = append(protoDollar[1].extDecls, protoDollar[2].extDecls...)
		}
	case 161:
		protoDollar = protoS[protopt-0 : protopt+1]
//line proto.y:820
		{
			protoVAL.extDecls = nil
		}
	case 162:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:824
		{
			protoVAL.extDecls = []*extendElement{{field: protoDollar[1].fld}}
		}
	case 163:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:827
		{
			protoVAL.extDecls = []*extendElement{{group: protoDollar[1].grp}}
		}
	case 164:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:830
		{
			protoVAL.extDecls = []*extendElement{{empty: protoDollar[1].b}}
		}
	case 165:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:834
		{
			protoVAL.svc = &serviceNode{name: protoDollar[2].id, decls: protoDollar[4].svcDecls}
			protoVAL.svc.setRange(protoDollar[1].id, protoDollar[5].b)
		}
	case 166:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:839
		{
			protoVAL.svcDecls = append(protoDollar[1].svcDecls, protoDollar[2].svcDecls...)
		}
	case 168:
		protoDollar = protoS[protopt-0 : protopt+1]
//line proto.y:843
		{
			protoVAL.svcDecls = nil
		}
	case 169:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:850
		{
			protoVAL.svcDecls = []*serviceElement{{option: protoDollar[1].opts[0]}}
		}
	case 170:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:853
		{
			protoVAL.svcDecls = []*serviceElement{{rpc: protoDollar[1].mtd}}
		}
	case 171:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:856
		{
			protoVAL.svcDecls = []*serviceElement{{empty: protoDollar[1].b}}
		}
	case 172:
		protoDollar = protoS[protopt-10 : protopt+1]
//line proto.y:860
		{
			protoVAL.mtd = &methodNode{name: protoDollar[2].id, input: protoDollar[4].rpcType, output: protoDollar[8].rpcType}
			protoVAL.mtd.setRange(protoDollar[1].id, protoDollar[10].b)
		}
	case 173:
		protoDollar = protoS[protopt-12 : protopt+1]
//line proto.y:864
		{
			protoVAL.mtd = &methodNode{name: protoDollar[2].id, input: protoDollar[4].rpcType, output: protoDollar[8].rpcType, options: protoDollar[11].opts}
			protoVAL.mtd.setRange(protoDollar[1].id, protoDollar[12].b)
		}
	case 174:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:869
		{
			protoVAL.rpcType = &rpcTypeNode{msgType: protoDollar[2].id, streamKeyword: protoDollar[1].id}
			protoVAL.rpcType.setRange(protoDollar[1].id, protoDollar[2].id)
		}
	case 175:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:873
		{
			protoVAL.rpcType = &rpcTypeNode{msgType: protoDollar[1].id}
			protoVAL.rpcType.setRange(protoDollar[1].id, protoDollar[1].id)
		}
	case 176:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:878
		{
			protoVAL.opts = append(protoDollar[1].opts, protoDollar[2].opts...)
		}
	case 178:
		protoDollar = protoS[protopt-0 : protopt+1]
//line proto.y:882
		{
			protoVAL.opts = []*optionNode{}
		}
	case 179:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:886
		{
			protoVAL.opts = protoDollar[1].opts
		}
	case 180:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:889
		{
			protoVAL.opts = []*optionNode{}
		}
	}
	goto protostack /* stack new state and value */
}
