// 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 (
	"math"

	"github.com/jhump/protoreflect/desc/protoparse/ast"
)

//line proto.y:16
type protoSymType struct {
	yys       int
	file      *ast.FileNode
	syn       *ast.SyntaxNode
	fileDecl  ast.FileElement
	fileDecls []ast.FileElement
	pkg       *ast.PackageNode
	imprt     *ast.ImportNode
	msg       *ast.MessageNode
	msgDecl   ast.MessageElement
	msgDecls  []ast.MessageElement
	fld       *ast.FieldNode
	mapFld    *ast.MapFieldNode
	mapType   *ast.MapTypeNode
	grp       *ast.GroupNode
	oo        *ast.OneOfNode
	ooDecl    ast.OneOfElement
	ooDecls   []ast.OneOfElement
	ext       *ast.ExtensionRangeNode
	resvd     *ast.ReservedNode
	en        *ast.EnumNode
	enDecl    ast.EnumElement
	enDecls   []ast.EnumElement
	env       *ast.EnumValueNode
	extend    *ast.ExtendNode
	extDecl   ast.ExtendElement
	extDecls  []ast.ExtendElement
	svc       *ast.ServiceNode
	svcDecl   ast.ServiceElement
	svcDecls  []ast.ServiceElement
	mtd       *ast.RPCNode
	rpcType   *ast.RPCTypeNode
	rpcDecl   ast.RPCElement
	rpcDecls  []ast.RPCElement
	opt       *ast.OptionNode
	opts      *compactOptionList
	ref       *ast.FieldReferenceNode
	optNms    *fieldRefList
	cmpctOpts *ast.CompactOptionsNode
	rng       *ast.RangeNode
	rngs      *rangeList
	names     *nameList
	cid       *identList
	tid       ast.IdentValueNode
	sl        *valueList
	msgField  *ast.MessageFieldNode
	msgEntry  *messageFieldEntry
	msgLit    *messageFieldList
	v         ast.ValueNode
	il        ast.IntValueNode
	str       *stringList
	s         *ast.StringLiteralNode
	i         *ast.UintLiteralNode
	f         *ast.FloatLiteralNode
	id        *ast.IdentNode
	b         *ast.RuneNode
	err       error
}

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

var protoToknames = [...]string{
	"$end",
	"error",
	"$unk",
	"_STRING_LIT",
	"_INT_LIT",
	"_FLOAT_LIT",
	"_NAME",
	"_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:1205

//line yacctab:1
var protoExca = [...]int{
	-1, 0,
	1, 4,
	-2, 0,
	-1, 1,
	1, -1,
	-2, 0,
	-1, 2,
	1, 1,
	-2, 0,
	-1, 3,
	1, 2,
	-2, 0,
	-1, 22,
	1, 3,
	-2, 0,
	-1, 95,
	55, 181,
	-2, 0,
	-1, 96,
	55, 169,
	-2, 0,
	-1, 97,
	55, 198,
	-2, 0,
	-1, 99,
	55, 207,
	-2, 0,
	-1, 110,
	55, 53,
	-2, 0,
	-1, 289,
	55, 51,
	61, 51,
	-2, 0,
	-1, 353,
	61, 53,
	-2, 0,
	-1, 368,
	55, 119,
	-2, 0,
	-1, 402,
	61, 53,
	-2, 0,
	-1, 406,
	61, 53,
	-2, 0,
	-1, 543,
	55, 181,
	-2, 0,
	-1, 547,
	55, 181,
	-2, 0,
	-1, 551,
	55, 181,
	-2, 0,
	-1, 569,
	55, 219,
	-2, 0,
	-1, 575,
	55, 181,
	-2, 0,
	-1, 578,
	55, 181,
	-2, 0,
	-1, 581,
	55, 181,
	-2, 0,
	-1, 602,
	55, 181,
	-2, 0,
	-1, 612,
	55, 181,
	-2, 0,
}

const protoPrivate = 57344

const protoLast = 2437

var protoAct = [...]int{
	118, 117, 125, 8, 405, 8, 8, 588, 364, 420,
	81, 427, 31, 397, 288, 326, 328, 107, 317, 82,
	311, 404, 106, 105, 281, 8, 124, 228, 139, 177,
	77, 79, 80, 26, 84, 422, 30, 410, 602, 540,
	350, 110, 85, 600, 565, 87, 88, 89, 409, 353,
	563, 365, 561, 75, 351, 551, 549, 547, 365, 365,
	545, 543, 541, 534, 533, 365, 528, 365, 365, 521,
	365, 365, 509, 511, 365, 365, 479, 365, 363, 496,
	411, 365, 570, 398, 365, 532, 329, 365, 116, 94,
	320, 365, 329, 365, 29, 329, 560, 104, 538, 178,
	349, 535, 282, 98, 349, 109, 77, 349, 348, 539,
	500, 103, 348, 536, 572, 348, 501, 571, 302, 349,
	347, 512, 483, 293, 230, 185, 14, 348, 346, 115,
	497, 478, 4, 15, 389, 372, 16, 17, 366, 520,
	344, 339, 304, 306, 308, 330, 612, 310, 321, 314,
	315, 330, 93, 14, 330, 91, 318, 581, 578, 316,
	15, 319, 285, 16, 17, 575, 591, 19, 18, 20,
	21, 591, 568, 17, 569, 285, 13, 17, 283, 178,
	368, 99, 17, 97, 96, 95, 17, 610, 606, 586,
	585, 584, 579, 576, 19, 18, 20, 21, 573, 567,
	559, 553, 318, 13, 524, 185, 323, 286, 516, 419,
	388, 371, 284, 370, 342, 340, 590, 333, 324, 604,
	286, 590, 303, 287, 102, 284, 101, 100, 90, 86,
	25, 557, 556, 513, 486, 485, 484, 417, 416, 415,
	414, 413, 412, 395, 334, 335, 336, 369, 362, 337,
	325, 92, 24, 488, 230, 332, 424, 390, 338, 374,
	375, 376, 377, 378, 379, 380, 381, 382, 383, 384,
	385, 367, 122, 11, 583, 11, 11, 120, 10, 582,
	10, 10, 527, 282, 121, 9, 5, 9, 9, 526,
	23, 525, 425, 29, 313, 11, 508, 300, 298, 343,
	10, 507, 293, 506, 345, 341, 505, 9, 299, 23,
	504, 503, 297, 295, 354, 352, 487, 356, 357, 358,
	359, 360, 361, 296, 29, 280, 476, 313, 418, 391,
	27, 28, 29, 3, 12, 227, 22, 179, 176, 123,
	327, 386, 387, 312, 180, 128, 426, 392, 393, 394,
	137, 127, 430, 126, 229, 119, 429, 289, 290, 396,
	433, 236, 134, 109, 109, 435, 293, 237, 407, 140,
	183, 428, 437, 401, 399, 239, 143, 373, 77, 108,
	292, 76, 587, 421, 7, 6, 2, 423, 1, 0,
	318, 477, 0, 0, 0, 0, 480, 0, 0, 0,
	0, 0, 0, 0, 0, 481, 0, 482, 0, 490,
	0, 0, 0, 109, 0, 293, 0, 494, 0, 293,
	0, 498, 492, 0, 0, 0, 0, 510, 0, 428,
	502, 0, 0, 0, 0, 0, 0, 0, 515, 0,
	0, 0, 0, 0, 0, 0, 517, 518, 0, 0,
	0, 0, 0, 0, 0, 0, 519, 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, 522, 0, 0, 0, 523,
	0, 0, 0, 0, 0, 0, 529, 0, 0, 0,
	531, 0, 530, 0, 0, 0, 0, 0, 0, 0,
	109, 0, 542, 544, 546, 548, 550, 552, 555, 537,
	0, 0, 554, 0, 0, 77, 109, 0, 0, 0,
	0, 0, 0, 0, 562, 564, 566, 0, 0, 0,
	558, 0, 0, 0, 0, 574, 0, 0, 0, 577,
	0, 0, 0, 580, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 589, 0, 0, 302, 0, 595, 302, 0,
	597, 302, 0, 599, 109, 109, 0, 0, 0, 0,
	589, 601, 603, 592, 593, 605, 302, 0, 302, 0,
	302, 0, 0, 0, 611, 0, 0, 0, 0, 0,
	0, 0, 302, 0, 614, 302, 493, 0, 29, 114,
	111, 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, 0, 0, 0, 0, 110, 0,
	0, 0, 0, 0, 0, 0, 406, 113, 112, 0,
	0, 0, 491, 29, 114, 111, 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, 0,
	0, 0, 0, 110, 0, 0, 0, 0, 0, 0,
	0, 406, 113, 112, 0, 0, 0, 403, 29, 114,
	111, 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, 0, 0, 0, 0, 110, 0,
	0, 0, 0, 0, 0, 0, 402, 113, 112, 0,
	0, 400, 29, 114, 111, 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, 0, 0,
	0, 0, 110, 0, 0, 0, 0, 0, 0, 0,
	406, 113, 112, 29, 114, 111, 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, 0,
	0, 0, 0, 110, 0, 0, 0, 0, 0, 499,
	0, 0, 113, 112, 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, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	495, 0, 0, 0, 294, 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, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 408, 0, 0, 0, 294, 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, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 291, 0, 0, 0, 294, 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,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 294, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 130, 0, 0, 0, 78, 144, 145, 146,
	147, 148, 149, 17, 150, 151, 152, 153, 133, 132,
	131, 154, 155, 156, 157, 158, 159, 160, 161, 162,
	163, 164, 165, 166, 167, 168, 169, 136, 142, 135,
	170, 171, 138, 19, 18, 20, 172, 173, 174, 175,
	0, 0, 129, 0, 0, 615, 130, 0, 0, 141,
	0, 144, 145, 146, 147, 148, 149, 17, 150, 151,
	152, 153, 133, 132, 131, 154, 155, 156, 157, 158,
	159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
	169, 136, 142, 135, 170, 171, 138, 19, 18, 20,
	172, 173, 174, 175, 0, 0, 129, 0, 0, 613,
	130, 0, 0, 141, 0, 144, 145, 146, 147, 148,
	149, 17, 150, 151, 152, 153, 133, 132, 131, 154,
	155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
	165, 166, 167, 168, 169, 136, 142, 135, 170, 171,
	138, 19, 18, 20, 172, 173, 174, 175, 0, 0,
	129, 0, 0, 609, 130, 0, 0, 141, 0, 144,
	145, 146, 147, 148, 149, 17, 150, 151, 152, 153,
	133, 132, 131, 154, 155, 156, 157, 158, 159, 160,
	161, 162, 163, 164, 165, 166, 167, 168, 169, 136,
	142, 135, 170, 171, 138, 19, 18, 20, 172, 173,
	174, 175, 0, 0, 129, 0, 0, 608, 130, 0,
	0, 141, 0, 144, 145, 146, 147, 148, 149, 17,
	150, 151, 152, 153, 133, 132, 131, 154, 155, 156,
	157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
	167, 168, 169, 136, 142, 135, 170, 171, 138, 19,
	18, 20, 172, 173, 174, 175, 0, 0, 129, 0,
	0, 607, 130, 0, 0, 141, 0, 144, 145, 146,
	147, 148, 149, 17, 150, 151, 152, 153, 133, 132,
	131, 154, 155, 156, 157, 158, 159, 160, 161, 162,
	163, 164, 165, 166, 167, 168, 169, 136, 142, 135,
	170, 171, 138, 19, 18, 20, 172, 173, 174, 175,
	0, 0, 129, 0, 0, 598, 130, 0, 0, 141,
	0, 144, 145, 146, 147, 148, 149, 17, 150, 151,
	152, 153, 133, 132, 131, 154, 155, 156, 157, 158,
	159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
	169, 136, 142, 135, 170, 171, 138, 19, 18, 20,
	172, 173, 174, 175, 0, 0, 129, 0, 0, 596,
	130, 0, 0, 141, 0, 144, 145, 146, 147, 148,
	149, 17, 150, 151, 152, 153, 133, 132, 131, 154,
	155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
	165, 166, 167, 168, 169, 136, 142, 135, 170, 171,
	138, 19, 18, 20, 172, 173, 174, 175, 0, 0,
	129, 0, 0, 594, 232, 0, 0, 141, 0, 240,
	241, 242, 243, 244, 245, 246, 247, 248, 249, 250,
	235, 234, 233, 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, 0, 0, 231, 0, 0, 331, 130, 0,
	0, 238, 0, 144, 145, 146, 147, 148, 149, 17,
	150, 151, 152, 153, 133, 132, 131, 154, 155, 156,
	157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
	167, 168, 169, 136, 142, 135, 170, 171, 138, 19,
	18, 20, 172, 173, 174, 175, 0, 0, 129, 0,
	0, 301, 130, 0, 0, 141, 0, 144, 145, 146,
	147, 148, 149, 17, 150, 151, 152, 153, 133, 132,
	131, 154, 155, 156, 157, 158, 159, 160, 161, 162,
	163, 164, 165, 166, 167, 168, 169, 136, 142, 135,
	170, 171, 138, 19, 18, 20, 172, 173, 174, 175,
	0, 0, 129, 0, 0, 232, 0, 0, 0, 141,
	240, 241, 242, 243, 244, 245, 246, 247, 248, 249,
	250, 235, 234, 233, 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, 0, 0, 231, 0, 0, 0, 0,
	0, 0, 238, 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, 0, 0, 0, 0,
	0, 432, 0, 0, 0, 83, 438, 439, 440, 441,
	442, 443, 17, 444, 445, 446, 447, 0, 0, 0,
	448, 449, 450, 451, 452, 453, 454, 455, 456, 457,
	458, 459, 460, 461, 462, 434, 463, 464, 465, 466,
	467, 468, 469, 470, 471, 472, 473, 474, 475, 0,
	0, 431, 0, 0, 514, 0, 0, 0, 436, 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,
	489, 74, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 83, 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, 309, 62, 63, 64, 65, 66, 67, 68, 69,
	70, 71, 72, 73, 74, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 83, 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, 307, 62, 63, 64, 65, 66,
	67, 68, 69, 70, 71, 72, 73, 74, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 83, 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, 305, 62, 63,
	64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
	74, 0, 0, 0, 0, 0, 432, 0, 0, 0,
	83, 438, 439, 440, 441, 442, 443, 17, 444, 445,
	446, 447, 0, 0, 0, 448, 449, 450, 451, 452,
	453, 454, 455, 456, 457, 458, 459, 460, 461, 462,
	434, 463, 464, 465, 466, 467, 468, 469, 470, 471,
	472, 473, 474, 475, 0, 0, 431, 0, 0, 182,
	0, 0, 0, 436, 186, 187, 188, 189, 190, 191,
	17, 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, 184,
	220, 221, 222, 223, 224, 225, 226, 0, 182, 181,
	0, 0, 322, 186, 187, 188, 189, 190, 191, 17,
	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, 184, 220,
	221, 222, 223, 224, 225, 226, 355, 0, 181, 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, 74, 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,
}

var protoPact = [...]int{
	124, -1000, 151, 151, 201, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, 178, 320, 2387, 1171, 2387, 2387,
	1876, 2387, 151, -1000, 328, -1000, 177, 328, 328, 328,
	176, 96, -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, 200, 93, -1000, 1876, 131,
	130, 129, -1000, 2387, 127, 175, -1000, 174, 172, -1000,
	-1000, 2387, 869, 1171, 22, 1770, 2296, 1823, -1000, 173,
	-1000, -1000, -1000, -1000, 171, -1000, -1000, -1000, -1000, -1000,
	1110, -1000, 307, 292, -1000, -1000, -1000, 1716, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	170, 2141, 2088, 2035, 2387, 322, 2387, 2387, 289, -1000,
	-1000, 2387, 28, 89, -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, 2247, -1000, -1000, -1000,
	-1000, -1000, 166, 199, 90, -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, 1662, -1000, -1000,
	-1000, -1000, 165, 2141, 2088, 2035, 2387, -1000, 2387, 82,
	-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,
	160, -1000, -1000, -1000, -1000, 162, 2387, -1000, 85, 1110,
	68, 67, -13, -1000, 2344, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, 2387, 2387, 2387, 2387, 2387, 2387,
	197, 26, 78, 231, 126, 196, 161, 159, 75, -1000,
	236, 2387, -1000, -1000, -1000, 87, 158, 74, 217, -1000,
	324, -1000, -1000, -1000, 2387, 2387, 2387, 192, -1000, 2387,
	-1000, -1000, -1000, 18, -1000, -1000, -1000, -1000, -1000, -1000,
	744, 679, -1000, 1049, -20, 12, 191, 190, 189, 188,
	187, 186, 323, -1000, 157, 1171, 322, 251, 2194, 321,
	-1000, -1000, 328, 71, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, -1000, 24, -1000, 87,
	81, -1000, 185, 184, 183, 311, -1000, 204, 1982, -1000,
	614, -1000, 988, -1000, 11, 70, 927, 49, 55, -1000,
	2387, -1000, 306, 305, 301, 298, 296, 291, 20, -1000,
	5, 61, 182, -1000, -1000, -1000, 1929, -1000, -1000, -1000,
	-1000, -1000, 156, 2387, 2387, -1000, 2387, 80, -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, 17, -1000, 1876, -1000,
	152, -1000, -1000, -1000, 286, 284, 277, 14, 18, 1876,
	19, -1000, -4, -5, 40, 52, -1000, 808, 37, 48,
	-1000, -1000, -29, 10, 7, 8, 3, 4, 1, -1000,
	149, -1000, 1171, 869, -1000, -1000, -1000, 181, 180, -1000,
	2387, -1000, 148, 35, -1000, 0, -2, -8, -1000, 147,
	120, 16, -1000, -1000, -1000, -1000, -1000, -1000, 57, 54,
	-1000, -1000, 146, 1770, 111, -1000, 141, 1770, 104, -1000,
	140, 1770, 103, -1000, -1000, -1000, 274, 269, -1000, -1000,
	-1000, -1000, 139, -1000, 138, -1000, 137, -1000, -1000, 169,
	-1000, 808, 808, -1000, 1608, 1770, -1000, 1554, 1770, -1000,
	1500, 1770, -9, -16, -1000, -1000, -1000, 164, -1000, -1000,
	-1000, 136, -1000, -1000, -1000, 1446, -1000, 1392, -1000, 1338,
	-1000, 135, 1770, 92, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, 1284, 1770, -1000, 1230, -1000,
}

var protoPgo = [...]int{
	0, 388, 386, 286, 333, 385, 384, 2, 383, 9,
	7, 382, 381, 380, 35, 8, 4, 23, 22, 379,
	16, 12, 377, 376, 375, 372, 370, 19, 369, 367,
	365, 10, 362, 361, 360, 21, 358, 357, 14, 356,
	355, 354, 353, 26, 352, 351, 350, 284, 0, 1,
	11, 346, 18, 345, 344, 28, 343, 340, 20, 15,
	339, 277, 29, 338, 337, 272, 27, 335, 17, 334,
	24, 325, 178, 13,
}

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

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

var protoDef = [...]int{
	-2, -2, -2, -2, 0, 6, 7, 8, 9, 10,
	11, 12, 13, 14, 16, 0, 0, 0, 0, 0,
	0, 0, -2, 5, 0, 15, 0, 0, 0, 48,
	0, 22, 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, 0, 31, 33, 0, 0,
	0, 0, 82, 0, 0, 0, 18, 0, 0, 49,
	21, 0, 0, 0, 0, -2, -2, -2, 83, -2,
	17, 19, 20, 23, 0, 35, 36, 37, 38, 39,
	-2, 40, 0, 0, 45, 32, 34, 0, 180, 182,
	183, 184, 185, 186, 187, 188, 189, 190, 191, 192,
	194, 0, 0, 0, 0, 0, 0, 0, 0, 160,
	84, 0, 250, 24, 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,
	251, 252, 253, 254, 255, 256, 0, 168, 170, 171,
	172, 173, 175, 0, 0, 162, 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, 0, 197, 199,
	200, 201, 203, 0, 0, 0, 0, 86, 0, 26,
	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,
	0, 206, 208, 209, 210, 212, 0, 30, 0, -2,
	54, 59, 0, 72, 0, 41, 44, 47, 42, 43,
	46, 178, 179, 193, 0, 406, 0, 406, 0, 406,
	0, 0, 147, 149, 0, 0, 0, 0, 164, 85,
	0, 0, 166, 167, 174, 0, 0, 152, 154, 157,
	0, 195, 196, 202, 0, 0, 0, 0, 87, 0,
	204, 205, 211, 0, 50, 52, 55, 56, 57, 58,
	0, 0, 67, -2, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 145, 0, 0, 0, 0, -2, 0,
	159, 163, 0, 0, 133, 134, 135, 136, 137, 138,
	139, 140, 141, 142, 143, 144, 25, 0, 161, 0,
	0, 158, 0, 0, 0, 0, 27, 0, 0, 60,
	0, 66, -2, 61, 0, 76, -2, 0, 59, 73,
	0, 75, 0, 0, 0, 0, 0, 0, 0, 146,
	0, 107, 0, 148, 150, 151, 0, 118, 120, 121,
	122, 123, 125, 0, 363, 88, 0, 28, 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, 364, 365, 366, 367, 368, 369, 370,
	371, 372, 373, 374, 375, 376, 0, 165, 0, 176,
	0, 153, 155, 156, 0, 0, 0, 0, 0, 418,
	0, 62, 0, 0, 0, 59, 63, 0, 0, 59,
	69, 71, 0, 0, 0, 0, 0, 0, 0, 96,
	0, 106, 0, 0, 116, 117, 124, 0, 0, 89,
	0, 130, 0, 0, 177, 0, 0, 0, 104, 0,
	0, 0, 216, 64, 65, 68, 70, 77, 78, 80,
	74, 90, 0, -2, 0, 91, 0, -2, 0, 92,
	0, -2, 0, 97, 108, 109, 0, 0, 29, 131,
	132, 98, 0, 99, 0, 100, 0, 105, 213, -2,
	215, 0, 0, 93, 0, -2, 94, 0, -2, 95,
	0, -2, 0, 0, 101, 102, 103, 0, 218, 220,
	221, 223, 79, 81, 110, 0, 111, 0, 112, 0,
	126, 0, -2, 0, 214, 217, 222, 113, 114, 115,
	127, 0, -2, 128, 0, 129,
}

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, 76, 3, 74, 73, 72, 70, 3,
	65, 66, 69, 63, 60, 64, 59, 57, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 3, 53, 52,
	62, 51, 61, 58, 75, 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, 67, 56, 68, 71, 3, 78, 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, 54, 3, 55, 77,
}

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,
}

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:143
		{
			protoVAL.file = ast.NewFileNode(protoDollar[1].syn, nil)
			protolex.(*protoLex).res = protoVAL.file
		}
	case 2:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:147
		{
			protoVAL.file = ast.NewFileNode(nil, protoDollar[1].fileDecls)
			protolex.(*protoLex).res = protoVAL.file
		}
	case 3:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:151
		{
			protoVAL.file = ast.NewFileNode(protoDollar[1].syn, protoDollar[2].fileDecls)
			protolex.(*protoLex).res = protoVAL.file
		}
	case 4:
		protoDollar = protoS[protopt-0 : protopt+1]
//line proto.y:155
		{
		}
	case 5:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:158
		{
			if protoDollar[2].fileDecl != nil {
				protoVAL.fileDecls = append(protoDollar[1].fileDecls, protoDollar[2].fileDecl)
			} else {
				protoVAL.fileDecls = protoDollar[1].fileDecls
			}
		}
	case 6:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:165
		{
			if protoDollar[1].fileDecl != nil {
				protoVAL.fileDecls = []ast.FileElement{protoDollar[1].fileDecl}
			} else {
				protoVAL.fileDecls = nil
			}
		}
	case 7:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:173
		{
			protoVAL.fileDecl = protoDollar[1].imprt
		}
	case 8:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:176
		{
			protoVAL.fileDecl = protoDollar[1].pkg
		}
	case 9:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:179
		{
			protoVAL.fileDecl = protoDollar[1].opt
		}
	case 10:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:182
		{
			protoVAL.fileDecl = protoDollar[1].msg
		}
	case 11:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:185
		{
			protoVAL.fileDecl = protoDollar[1].en
		}
	case 12:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:188
		{
			protoVAL.fileDecl = protoDollar[1].extend
		}
	case 13:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:191
		{
			protoVAL.fileDecl = protoDollar[1].svc
		}
	case 14:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:194
		{
			protoVAL.fileDecl = ast.NewEmptyDeclNode(protoDollar[1].b)
		}
	case 15:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:197
		{
			protoVAL.fileDecl = nil
		}
	case 16:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:200
		{
			protoVAL.fileDecl = nil
		}
	case 17:
		protoDollar = protoS[protopt-4 : protopt+1]
//line proto.y:204
		{
			protoVAL.syn = ast.NewSyntaxNode(protoDollar[1].id.ToKeyword(), protoDollar[2].b, protoDollar[3].str.toStringValueNode(), protoDollar[4].b)
		}
	case 18:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:208
		{
			protoVAL.imprt = ast.NewImportNode(protoDollar[1].id.ToKeyword(), nil, nil, protoDollar[2].str.toStringValueNode(), protoDollar[3].b)
		}
	case 19:
		protoDollar = protoS[protopt-4 : protopt+1]
//line proto.y:211
		{
			protoVAL.imprt = ast.NewImportNode(protoDollar[1].id.ToKeyword(), nil, protoDollar[2].id.ToKeyword(), protoDollar[3].str.toStringValueNode(), protoDollar[4].b)
		}
	case 20:
		protoDollar = protoS[protopt-4 : protopt+1]
//line proto.y:214
		{
			protoVAL.imprt = ast.NewImportNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id.ToKeyword(), nil, protoDollar[3].str.toStringValueNode(), protoDollar[4].b)
		}
	case 21:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:218
		{
			protoVAL.pkg = ast.NewPackageNode(protoDollar[1].id.ToKeyword(), protoDollar[2].cid.toIdentValueNode(nil), protoDollar[3].b)
		}
	case 22:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:222
		{
			protoVAL.cid = &identList{protoDollar[1].id, nil, nil}
		}
	case 23:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:225
		{
			protoVAL.cid = &identList{protoDollar[1].id, protoDollar[2].b, protoDollar[3].cid}
		}
	case 24:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:233
		{
			protoVAL.cid = &identList{protoDollar[1].id, nil, nil}
		}
	case 25:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:236
		{
			protoVAL.cid = &identList{protoDollar[1].id, protoDollar[2].b, protoDollar[3].cid}
		}
	case 26:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:240
		{
			protoVAL.cid = &identList{protoDollar[1].id, nil, nil}
		}
	case 27:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:243
		{
			protoVAL.cid = &identList{protoDollar[1].id, protoDollar[2].b, protoDollar[3].cid}
		}
	case 28:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:247
		{
			protoVAL.cid = &identList{protoDollar[1].id, nil, nil}
		}
	case 29:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:250
		{
			protoVAL.cid = &identList{protoDollar[1].id, protoDollar[2].b, protoDollar[3].cid}
		}
	case 30:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:254
		{
			refs, dots := protoDollar[2].optNms.toNodes()
			optName := ast.NewOptionNameNode(refs, dots)
			protoVAL.opt = ast.NewOptionNode(protoDollar[1].id.ToKeyword(), optName, protoDollar[3].b, protoDollar[4].v, protoDollar[5].b)
		}
	case 31:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:260
		{
			protoVAL.optNms = &fieldRefList{protoDollar[1].ref, nil, nil}
		}
	case 32:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:263
		{
			protoVAL.optNms = &fieldRefList{protoDollar[1].ref, protoDollar[2].b, protoDollar[3].optNms}
		}
	case 33:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:267
		{
			protoVAL.ref = ast.NewFieldReferenceNode(protoDollar[1].id)
		}
	case 34:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:270
		{
			protoVAL.ref = ast.NewExtensionFieldReferenceNode(protoDollar[1].b, protoDollar[2].tid, protoDollar[3].b)
		}
	case 37:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:277
		{
			protoVAL.v = protoDollar[1].str.toStringValueNode()
		}
	case 39:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:281
		{
			protoVAL.v = protoDollar[1].id
		}
	case 40:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:285
		{
			protoVAL.v = protoDollar[1].f
		}
	case 41:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:288
		{
			protoVAL.v = ast.NewSignedFloatLiteralNode(protoDollar[1].b, protoDollar[2].f)
		}
	case 42:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:291
		{
			protoVAL.v = ast.NewSignedFloatLiteralNode(protoDollar[1].b, protoDollar[2].f)
		}
	case 43:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:294
		{
			f := ast.NewSpecialFloatLiteralNode(protoDollar[2].id.ToKeyword())
			protoVAL.v = ast.NewSignedFloatLiteralNode(protoDollar[1].b, f)
		}
	case 44:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:298
		{
			f := ast.NewSpecialFloatLiteralNode(protoDollar[2].id.ToKeyword())
			protoVAL.v = ast.NewSignedFloatLiteralNode(protoDollar[1].b, f)
		}
	case 45:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:302
		{
			protoVAL.v = protoDollar[1].i
		}
	case 46:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:305
		{
			protoVAL.v = ast.NewPositiveUintLiteralNode(protoDollar[1].b, protoDollar[2].i)
		}
	case 47:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:308
		{
			if protoDollar[2].i.Val > math.MaxInt64+1 {
				// can't represent as int so treat as float literal
				protoVAL.v = ast.NewSignedFloatLiteralNode(protoDollar[1].b, protoDollar[2].i)
			} else {
				protoVAL.v = ast.NewNegativeIntLiteralNode(protoDollar[1].b, protoDollar[2].i)
			}
		}
	case 48:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:317
		{
			protoVAL.str = &stringList{protoDollar[1].s, nil}
		}
	case 49:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:320
		{
			protoVAL.str = &stringList{protoDollar[1].s, protoDollar[2].str}
		}
	case 50:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:324
		{
			fields, delims := protoDollar[2].msgLit.toNodes()
			protoVAL.v = ast.NewMessageLiteralNode(protoDollar[1].b, fields, delims, protoDollar[3].b)
		}
	case 51:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:329
		{
			if protoDollar[1].msgEntry != nil {
				protoVAL.msgLit = &messageFieldList{protoDollar[1].msgEntry, nil}
			} else {
				protoVAL.msgLit = nil
			}
		}
	case 52:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:336
		{
			if protoDollar[1].msgEntry != nil {
				protoVAL.msgLit = &messageFieldList{protoDollar[1].msgEntry, protoDollar[2].msgLit}
			} else {
				protoVAL.msgLit = protoDollar[2].msgLit
			}
		}
	case 53:
		protoDollar = protoS[protopt-0 : protopt+1]
//line proto.y:343
		{
			protoVAL.msgLit = nil
		}
	case 54:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:347
		{
			if protoDollar[1].msgField != nil {
				protoVAL.msgEntry = &messageFieldEntry{protoDollar[1].msgField, nil}
			} else {
				protoVAL.msgEntry = nil
			}
		}
	case 55:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:354
		{
			if protoDollar[1].msgField != nil {
				protoVAL.msgEntry = &messageFieldEntry{protoDollar[1].msgField, protoDollar[2].b}
			} else {
				protoVAL.msgEntry = nil
			}
		}
	case 56:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:361
		{
			if protoDollar[1].msgField != nil {
				protoVAL.msgEntry = &messageFieldEntry{protoDollar[1].msgField, protoDollar[2].b}
			} else {
				protoVAL.msgEntry = nil
			}
		}
	case 57:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:368
		{
			protoVAL.msgEntry = nil
		}
	case 58:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:371
		{
			protoVAL.msgEntry = nil
		}
	case 59:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:374
		{
			protoVAL.msgEntry = nil
		}
	case 60:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:378
		{
			if protoDollar[1].ref != nil {
				protoVAL.msgField = ast.NewMessageFieldNode(protoDollar[1].ref, protoDollar[2].b, protoDollar[3].v)
			} else {
				protoVAL.msgField = nil
			}
		}
	case 61:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:385
		{
			if protoDollar[1].ref != nil {
				val := ast.NewArrayLiteralNode(protoDollar[2].b, nil, nil, protoDollar[3].b)
				protoVAL.msgField = ast.NewMessageFieldNode(protoDollar[1].ref, nil, val)
			} else {
				protoVAL.msgField = nil
			}
		}
	case 62:
		protoDollar = protoS[protopt-4 : protopt+1]
//line proto.y:393
		{
			if protoDollar[1].ref != nil {
				val := ast.NewArrayLiteralNode(protoDollar[3].b, nil, nil, protoDollar[4].b)
				protoVAL.msgField = ast.NewMessageFieldNode(protoDollar[1].ref, protoDollar[2].b, val)
			} else {
				protoVAL.msgField = nil
			}
		}
	case 63:
		protoDollar = protoS[protopt-4 : protopt+1]
//line proto.y:401
		{
			if protoDollar[1].ref != nil {
				vals, commas := protoDollar[3].sl.toNodes()
				val := ast.NewArrayLiteralNode(protoDollar[2].b, vals, commas, protoDollar[4].b)
				protoVAL.msgField = ast.NewMessageFieldNode(protoDollar[1].ref, nil, val)
			} else {
				protoVAL.msgField = nil
			}
		}
	case 64:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:410
		{
			if protoDollar[1].ref != nil {
				vals, commas := protoDollar[4].sl.toNodes()
				val := ast.NewArrayLiteralNode(protoDollar[3].b, vals, commas, protoDollar[5].b)
				protoVAL.msgField = ast.NewMessageFieldNode(protoDollar[1].ref, protoDollar[2].b, val)
			} else {
				protoVAL.msgField = nil
			}
		}
	case 65:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:419
		{
			protoVAL.msgField = nil
		}
	case 66:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:422
		{
			if protoDollar[1].ref != nil {
				protoVAL.msgField = ast.NewMessageFieldNode(protoDollar[1].ref, protoDollar[2].b, protoDollar[3].v)
			} else {
				protoVAL.msgField = nil
			}
		}
	case 67:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:429
		{
			if protoDollar[1].ref != nil {
				protoVAL.msgField = ast.NewMessageFieldNode(protoDollar[1].ref, nil, protoDollar[2].v)
			} else {
				protoVAL.msgField = nil
			}
		}
	case 68:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:436
		{
			if protoDollar[1].ref != nil {
				fields, delims := protoDollar[4].msgLit.toNodes()
				msg := ast.NewMessageLiteralNode(protoDollar[3].b, fields, delims, protoDollar[5].b)
				protoVAL.msgField = ast.NewMessageFieldNode(protoDollar[1].ref, protoDollar[2].b, msg)
			} else {
				protoVAL.msgField = nil
			}
		}
	case 69:
		protoDollar = protoS[protopt-4 : protopt+1]
//line proto.y:445
		{
			if protoDollar[1].ref != nil {
				fields, delims := protoDollar[3].msgLit.toNodes()
				msg := ast.NewMessageLiteralNode(protoDollar[2].b, fields, delims, protoDollar[4].b)
				protoVAL.msgField = ast.NewMessageFieldNode(protoDollar[1].ref, nil, msg)
			} else {
				protoVAL.msgField = nil
			}
		}
	case 70:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:454
		{
			protoVAL.msgField = nil
		}
	case 71:
		protoDollar = protoS[protopt-4 : protopt+1]
//line proto.y:457
		{
			protoVAL.msgField = nil
		}
	case 72:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:461
		{
			protoVAL.ref = ast.NewFieldReferenceNode(protoDollar[1].id)
		}
	case 73:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:464
		{
			protoVAL.ref = ast.NewExtensionFieldReferenceNode(protoDollar[1].b, protoDollar[2].cid.toIdentValueNode(nil), protoDollar[3].b)
		}
	case 74:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:467
		{
			protoVAL.ref = ast.NewAnyTypeReferenceNode(protoDollar[1].b, protoDollar[2].cid.toIdentValueNode(nil), protoDollar[3].b, protoDollar[4].cid.toIdentValueNode(nil), protoDollar[5].b)
		}
	case 75:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:470
		{
			protoVAL.ref = nil
		}
	case 76:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:474
		{
			protoVAL.sl = &valueList{protoDollar[1].v, nil, nil}
		}
	case 77:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:477
		{
			protoVAL.sl = &valueList{protoDollar[1].v, protoDollar[2].b, protoDollar[3].sl}
		}
	case 78:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:480
		{
			fields, delims := protoDollar[2].msgLit.toNodes()
			msg := ast.NewMessageLiteralNode(protoDollar[1].b, fields, delims, protoDollar[3].b)
			protoVAL.sl = &valueList{msg, nil, nil}
		}
	case 79:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:485
		{
			fields, delims := protoDollar[2].msgLit.toNodes()
			msg := ast.NewMessageLiteralNode(protoDollar[1].b, fields, delims, protoDollar[3].b)
			protoVAL.sl = &valueList{msg, protoDollar[4].b, protoDollar[5].sl}
		}
	case 80:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:490
		{
			protoVAL.sl = nil
		}
	case 81:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:493
		{
			protoVAL.sl = protoDollar[5].sl
		}
	case 82:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:497
		{
			protoVAL.tid = protoDollar[1].cid.toIdentValueNode(nil)
		}
	case 83:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:500
		{
			protoVAL.tid = protoDollar[2].cid.toIdentValueNode(protoDollar[1].b)
		}
	case 84:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:504
		{
			protoVAL.tid = protoDollar[1].cid.toIdentValueNode(nil)
		}
	case 85:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:507
		{
			protoVAL.tid = protoDollar[2].cid.toIdentValueNode(protoDollar[1].b)
		}
	case 86:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:511
		{
			protoVAL.tid = protoDollar[1].cid.toIdentValueNode(nil)
		}
	case 87:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:514
		{
			protoVAL.tid = protoDollar[2].cid.toIdentValueNode(protoDollar[1].b)
		}
	case 88:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:518
		{
			protoVAL.tid = protoDollar[1].cid.toIdentValueNode(nil)
		}
	case 89:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:521
		{
			protoVAL.tid = protoDollar[2].cid.toIdentValueNode(protoDollar[1].b)
		}
	case 90:
		protoDollar = protoS[protopt-6 : protopt+1]
//line proto.y:525
		{
			protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, nil, protoDollar[6].b)
		}
	case 91:
		protoDollar = protoS[protopt-6 : protopt+1]
//line proto.y:528
		{
			protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, nil, protoDollar[6].b)
		}
	case 92:
		protoDollar = protoS[protopt-6 : protopt+1]
//line proto.y:531
		{
			protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, nil, protoDollar[6].b)
		}
	case 93:
		protoDollar = protoS[protopt-7 : protopt+1]
//line proto.y:534
		{
			protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, protoDollar[6].cmpctOpts, protoDollar[7].b)
		}
	case 94:
		protoDollar = protoS[protopt-7 : protopt+1]
//line proto.y:537
		{
			protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, protoDollar[6].cmpctOpts, protoDollar[7].b)
		}
	case 95:
		protoDollar = protoS[protopt-7 : protopt+1]
//line proto.y:540
		{
			protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, protoDollar[6].cmpctOpts, protoDollar[7].b)
		}
	case 96:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:543
		{
			protoVAL.fld = ast.NewFieldNode(nil, protoDollar[1].tid, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, nil, protoDollar[5].b)
		}
	case 97:
		protoDollar = protoS[protopt-6 : protopt+1]
//line proto.y:546
		{
			protoVAL.fld = ast.NewFieldNode(nil, protoDollar[1].tid, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, protoDollar[5].cmpctOpts, protoDollar[6].b)
		}
	case 98:
		protoDollar = protoS[protopt-6 : protopt+1]
//line proto.y:550
		{
			protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, nil, protoDollar[6].b)
		}
	case 99:
		protoDollar = protoS[protopt-6 : protopt+1]
//line proto.y:553
		{
			protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, nil, protoDollar[6].b)
		}
	case 100:
		protoDollar = protoS[protopt-6 : protopt+1]
//line proto.y:556
		{
			protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, nil, protoDollar[6].b)
		}
	case 101:
		protoDollar = protoS[protopt-7 : protopt+1]
//line proto.y:559
		{
			protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, protoDollar[6].cmpctOpts, protoDollar[7].b)
		}
	case 102:
		protoDollar = protoS[protopt-7 : protopt+1]
//line proto.y:562
		{
			protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, protoDollar[6].cmpctOpts, protoDollar[7].b)
		}
	case 103:
		protoDollar = protoS[protopt-7 : protopt+1]
//line proto.y:565
		{
			protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, protoDollar[6].cmpctOpts, protoDollar[7].b)
		}
	case 104:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:568
		{
			protoVAL.fld = ast.NewFieldNode(nil, protoDollar[1].tid, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, nil, protoDollar[5].b)
		}
	case 105:
		protoDollar = protoS[protopt-6 : protopt+1]
//line proto.y:571
		{
			protoVAL.fld = ast.NewFieldNode(nil, protoDollar[1].tid, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, protoDollar[5].cmpctOpts, protoDollar[6].b)
		}
	case 106:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:575
		{
			opts, commas := protoDollar[2].opts.toNodes()
			protoVAL.cmpctOpts = ast.NewCompactOptionsNode(protoDollar[1].b, opts, commas, protoDollar[3].b)
		}
	case 107:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:580
		{
			protoVAL.opts = &compactOptionList{protoDollar[1].opt, nil, nil}
		}
	case 108:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:583
		{
			protoVAL.opts = &compactOptionList{protoDollar[1].opt, protoDollar[2].b, protoDollar[3].opts}
		}
	case 109:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:587
		{
			refs, dots := protoDollar[1].optNms.toNodes()
			optName := ast.NewOptionNameNode(refs, dots)
			protoVAL.opt = ast.NewCompactOptionNode(optName, protoDollar[2].b, protoDollar[3].v)
		}
	case 110:
		protoDollar = protoS[protopt-8 : protopt+1]
//line proto.y:593
		{
			protoVAL.grp = ast.NewGroupNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id.ToKeyword(), protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, nil, protoDollar[6].b, protoDollar[7].msgDecls, protoDollar[8].b)
		}
	case 111:
		protoDollar = protoS[protopt-8 : protopt+1]
//line proto.y:596
		{
			protoVAL.grp = ast.NewGroupNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id.ToKeyword(), protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, nil, protoDollar[6].b, protoDollar[7].msgDecls, protoDollar[8].b)
		}
	case 112:
		protoDollar = protoS[protopt-8 : protopt+1]
//line proto.y:599
		{
			protoVAL.grp = ast.NewGroupNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id.ToKeyword(), protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, nil, protoDollar[6].b, protoDollar[7].msgDecls, protoDollar[8].b)
		}
	case 113:
		protoDollar = protoS[protopt-9 : protopt+1]
//line proto.y:602
		{
			protoVAL.grp = ast.NewGroupNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id.ToKeyword(), protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, protoDollar[6].cmpctOpts, protoDollar[7].b, protoDollar[8].msgDecls, protoDollar[9].b)
		}
	case 114:
		protoDollar = protoS[protopt-9 : protopt+1]
//line proto.y:605
		{
			protoVAL.grp = ast.NewGroupNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id.ToKeyword(), protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, protoDollar[6].cmpctOpts, protoDollar[7].b, protoDollar[8].msgDecls, protoDollar[9].b)
		}
	case 115:
		protoDollar = protoS[protopt-9 : protopt+1]
//line proto.y:608
		{
			protoVAL.grp = ast.NewGroupNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id.ToKeyword(), protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, protoDollar[6].cmpctOpts, protoDollar[7].b, protoDollar[8].msgDecls, protoDollar[9].b)
		}
	case 116:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:612
		{
			protoVAL.oo = ast.NewOneOfNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].b, protoDollar[4].ooDecls, protoDollar[5].b)
		}
	case 117:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:616
		{
			if protoDollar[2].ooDecl != nil {
				protoVAL.ooDecls = append(protoDollar[1].ooDecls, protoDollar[2].ooDecl)
			} else {
				protoVAL.ooDecls = protoDollar[1].ooDecls
			}
		}
	case 118:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:623
		{
			if protoDollar[1].ooDecl != nil {
				protoVAL.ooDecls = []ast.OneOfElement{protoDollar[1].ooDecl}
			} else {
				protoVAL.ooDecls = nil
			}
		}
	case 119:
		protoDollar = protoS[protopt-0 : protopt+1]
//line proto.y:630
		{
			protoVAL.ooDecls = nil
		}
	case 120:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:634
		{
			protoVAL.ooDecl = protoDollar[1].opt
		}
	case 121:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:637
		{
			protoVAL.ooDecl = protoDollar[1].fld
		}
	case 122:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:640
		{
			protoVAL.ooDecl = protoDollar[1].grp
		}
	case 123:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:643
		{
			protoVAL.ooDecl = ast.NewEmptyDeclNode(protoDollar[1].b)
		}
	case 124:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:646
		{
			protoVAL.ooDecl = nil
		}
	case 125:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:649
		{
			protoVAL.ooDecl = nil
		}
	case 126:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:653
		{
			protoVAL.fld = ast.NewFieldNode(nil, protoDollar[1].tid, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, nil, protoDollar[5].b)
		}
	case 127:
		protoDollar = protoS[protopt-6 : protopt+1]
//line proto.y:656
		{
			protoVAL.fld = ast.NewFieldNode(nil, protoDollar[1].tid, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, protoDollar[5].cmpctOpts, protoDollar[6].b)
		}
	case 128:
		protoDollar = protoS[protopt-7 : protopt+1]
//line proto.y:660
		{
			protoVAL.grp = ast.NewGroupNode(nil, protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, nil, protoDollar[5].b, protoDollar[6].msgDecls, protoDollar[7].b)
		}
	case 129:
		protoDollar = protoS[protopt-8 : protopt+1]
//line proto.y:663
		{
			protoVAL.grp = ast.NewGroupNode(nil, protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, protoDollar[5].cmpctOpts, protoDollar[6].b, protoDollar[7].msgDecls, protoDollar[8].b)
		}
	case 130:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:667
		{
			protoVAL.mapFld = ast.NewMapFieldNode(protoDollar[1].mapType, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, nil, protoDollar[5].b)
		}
	case 131:
		protoDollar = protoS[protopt-6 : protopt+1]
//line proto.y:670
		{
			protoVAL.mapFld = ast.NewMapFieldNode(protoDollar[1].mapType, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, protoDollar[5].cmpctOpts, protoDollar[6].b)
		}
	case 132:
		protoDollar = protoS[protopt-6 : protopt+1]
//line proto.y:674
		{
			protoVAL.mapType = ast.NewMapTypeNode(protoDollar[1].id.ToKeyword(), protoDollar[2].b, protoDollar[3].id, protoDollar[4].b, protoDollar[5].tid, protoDollar[6].b)
		}
	case 145:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:691
		{
			ranges, commas := protoDollar[2].rngs.toNodes()
			protoVAL.ext = ast.NewExtensionRangeNode(protoDollar[1].id.ToKeyword(), ranges, commas, nil, protoDollar[3].b)
		}
	case 146:
		protoDollar = protoS[protopt-4 : protopt+1]
//line proto.y:695
		{
			ranges, commas := protoDollar[2].rngs.toNodes()
			protoVAL.ext = ast.NewExtensionRangeNode(protoDollar[1].id.ToKeyword(), ranges, commas, protoDollar[3].cmpctOpts, protoDollar[4].b)
		}
	case 147:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:700
		{
			protoVAL.rngs = &rangeList{protoDollar[1].rng, nil, nil}
		}
	case 148:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:703
		{
			protoVAL.rngs = &rangeList{protoDollar[1].rng, protoDollar[2].b, protoDollar[3].rngs}
		}
	case 149:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:707
		{
			protoVAL.rng = ast.NewRangeNode(protoDollar[1].i, nil, nil, nil)
		}
	case 150:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:710
		{
			protoVAL.rng = ast.NewRangeNode(protoDollar[1].i, protoDollar[2].id.ToKeyword(), protoDollar[3].i, nil)
		}
	case 151:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:713
		{
			protoVAL.rng = ast.NewRangeNode(protoDollar[1].i, protoDollar[2].id.ToKeyword(), nil, protoDollar[3].id.ToKeyword())
		}
	case 152:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:717
		{
			protoVAL.rngs = &rangeList{protoDollar[1].rng, nil, nil}
		}
	case 153:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:720
		{
			protoVAL.rngs = &rangeList{protoDollar[1].rng, protoDollar[2].b, protoDollar[3].rngs}
		}
	case 154:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:724
		{
			protoVAL.rng = ast.NewRangeNode(protoDollar[1].il, nil, nil, nil)
		}
	case 155:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:727
		{
			protoVAL.rng = ast.NewRangeNode(protoDollar[1].il, protoDollar[2].id.ToKeyword(), protoDollar[3].il, nil)
		}
	case 156:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:730
		{
			protoVAL.rng = ast.NewRangeNode(protoDollar[1].il, protoDollar[2].id.ToKeyword(), nil, protoDollar[3].id.ToKeyword())
		}
	case 157:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:734
		{
			protoVAL.il = protoDollar[1].i
		}
	case 158:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:737
		{
			protoVAL.il = ast.NewNegativeIntLiteralNode(protoDollar[1].b, protoDollar[2].i)
		}
	case 159:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:741
		{
			ranges, commas := protoDollar[2].rngs.toNodes()
			protoVAL.resvd = ast.NewReservedRangesNode(protoDollar[1].id.ToKeyword(), ranges, commas, protoDollar[3].b)
		}
	case 161:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:747
		{
			ranges, commas := protoDollar[2].rngs.toNodes()
			protoVAL.resvd = ast.NewReservedRangesNode(protoDollar[1].id.ToKeyword(), ranges, commas, protoDollar[3].b)
		}
	case 163:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:753
		{
			names, commas := protoDollar[2].names.toNodes()
			protoVAL.resvd = ast.NewReservedNamesNode(protoDollar[1].id.ToKeyword(), names, commas, protoDollar[3].b)
		}
	case 164:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:758
		{
			protoVAL.names = &nameList{protoDollar[1].str.toStringValueNode(), nil, nil}
		}
	case 165:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:761
		{
			protoVAL.names = &nameList{protoDollar[1].str.toStringValueNode(), protoDollar[2].b, protoDollar[3].names}
		}
	case 166:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:765
		{
			protoVAL.en = ast.NewEnumNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].b, protoDollar[4].enDecls, protoDollar[5].b)
		}
	case 167:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:769
		{
			if protoDollar[2].enDecl != nil {
				protoVAL.enDecls = append(protoDollar[1].enDecls, protoDollar[2].enDecl)
			} else {
				protoVAL.enDecls = protoDollar[1].enDecls
			}
		}
	case 168:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:776
		{
			if protoDollar[1].enDecl != nil {
				protoVAL.enDecls = []ast.EnumElement{protoDollar[1].enDecl}
			} else {
				protoVAL.enDecls = nil
			}
		}
	case 169:
		protoDollar = protoS[protopt-0 : protopt+1]
//line proto.y:783
		{
			protoVAL.enDecls = nil
		}
	case 170:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:787
		{
			protoVAL.enDecl = protoDollar[1].opt
		}
	case 171:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:790
		{
			protoVAL.enDecl = protoDollar[1].env
		}
	case 172:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:793
		{
			protoVAL.enDecl = protoDollar[1].resvd
		}
	case 173:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:796
		{
			protoVAL.enDecl = ast.NewEmptyDeclNode(protoDollar[1].b)
		}
	case 174:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:799
		{
			protoVAL.enDecl = nil
		}
	case 175:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:802
		{
			protoVAL.enDecl = nil
		}
	case 176:
		protoDollar = protoS[protopt-4 : protopt+1]
//line proto.y:806
		{
			protoVAL.env = ast.NewEnumValueNode(protoDollar[1].id, protoDollar[2].b, protoDollar[3].il, nil, protoDollar[4].b)
		}
	case 177:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:809
		{
			protoVAL.env = ast.NewEnumValueNode(protoDollar[1].id, protoDollar[2].b, protoDollar[3].il, protoDollar[4].cmpctOpts, protoDollar[5].b)
		}
	case 178:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:813
		{
			protoVAL.msg = ast.NewMessageNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].b, protoDollar[4].msgDecls, protoDollar[5].b)
		}
	case 179:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:817
		{
			if protoDollar[2].msgDecl != nil {
				protoVAL.msgDecls = append(protoDollar[1].msgDecls, protoDollar[2].msgDecl)
			} else {
				protoVAL.msgDecls = protoDollar[1].msgDecls
			}
		}
	case 180:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:824
		{
			if protoDollar[1].msgDecl != nil {
				protoVAL.msgDecls = []ast.MessageElement{protoDollar[1].msgDecl}
			} else {
				protoVAL.msgDecls = nil
			}
		}
	case 181:
		protoDollar = protoS[protopt-0 : protopt+1]
//line proto.y:831
		{
			protoVAL.msgDecls = nil
		}
	case 182:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:835
		{
			protoVAL.msgDecl = protoDollar[1].fld
		}
	case 183:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:838
		{
			protoVAL.msgDecl = protoDollar[1].en
		}
	case 184:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:841
		{
			protoVAL.msgDecl = protoDollar[1].msg
		}
	case 185:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:844
		{
			protoVAL.msgDecl = protoDollar[1].extend
		}
	case 186:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:847
		{
			protoVAL.msgDecl = protoDollar[1].ext
		}
	case 187:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:850
		{
			protoVAL.msgDecl = protoDollar[1].grp
		}
	case 188:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:853
		{
			protoVAL.msgDecl = protoDollar[1].opt
		}
	case 189:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:856
		{
			protoVAL.msgDecl = protoDollar[1].oo
		}
	case 190:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:859
		{
			protoVAL.msgDecl = protoDollar[1].mapFld
		}
	case 191:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:862
		{
			protoVAL.msgDecl = protoDollar[1].resvd
		}
	case 192:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:865
		{
			protoVAL.msgDecl = ast.NewEmptyDeclNode(protoDollar[1].b)
		}
	case 193:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:868
		{
			protoVAL.msgDecl = nil
		}
	case 194:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:871
		{
			protoVAL.msgDecl = nil
		}
	case 195:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:875
		{
			protoVAL.extend = ast.NewExtendNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].b, protoDollar[4].extDecls, protoDollar[5].b)
		}
	case 196:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:879
		{
			if protoDollar[2].extDecl != nil {
				protoVAL.extDecls = append(protoDollar[1].extDecls, protoDollar[2].extDecl)
			} else {
				protoVAL.extDecls = protoDollar[1].extDecls
			}
		}
	case 197:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:886
		{
			if protoDollar[1].extDecl != nil {
				protoVAL.extDecls = []ast.ExtendElement{protoDollar[1].extDecl}
			} else {
				protoVAL.extDecls = nil
			}
		}
	case 198:
		protoDollar = protoS[protopt-0 : protopt+1]
//line proto.y:893
		{
			protoVAL.extDecls = nil
		}
	case 199:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:897
		{
			protoVAL.extDecl = protoDollar[1].fld
		}
	case 200:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:900
		{
			protoVAL.extDecl = protoDollar[1].grp
		}
	case 201:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:903
		{
			protoVAL.extDecl = ast.NewEmptyDeclNode(protoDollar[1].b)
		}
	case 202:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:906
		{
			protoVAL.extDecl = nil
		}
	case 203:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:909
		{
			protoVAL.extDecl = nil
		}
	case 204:
		protoDollar = protoS[protopt-5 : protopt+1]
//line proto.y:913
		{
			protoVAL.svc = ast.NewServiceNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].b, protoDollar[4].svcDecls, protoDollar[5].b)
		}
	case 205:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:917
		{
			if protoDollar[2].svcDecl != nil {
				protoVAL.svcDecls = append(protoDollar[1].svcDecls, protoDollar[2].svcDecl)
			} else {
				protoVAL.svcDecls = protoDollar[1].svcDecls
			}
		}
	case 206:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:924
		{
			if protoDollar[1].svcDecl != nil {
				protoVAL.svcDecls = []ast.ServiceElement{protoDollar[1].svcDecl}
			} else {
				protoVAL.svcDecls = nil
			}
		}
	case 207:
		protoDollar = protoS[protopt-0 : protopt+1]
//line proto.y:931
		{
			protoVAL.svcDecls = nil
		}
	case 208:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:938
		{
			protoVAL.svcDecl = protoDollar[1].opt
		}
	case 209:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:941
		{
			protoVAL.svcDecl = protoDollar[1].mtd
		}
	case 210:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:944
		{
			protoVAL.svcDecl = ast.NewEmptyDeclNode(protoDollar[1].b)
		}
	case 211:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:947
		{
			protoVAL.svcDecl = nil
		}
	case 212:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:950
		{
			protoVAL.svcDecl = nil
		}
	case 213:
		protoDollar = protoS[protopt-6 : protopt+1]
//line proto.y:954
		{
			protoVAL.mtd = ast.NewRPCNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].rpcType, protoDollar[4].id.ToKeyword(), protoDollar[5].rpcType, protoDollar[6].b)
		}
	case 214:
		protoDollar = protoS[protopt-8 : protopt+1]
//line proto.y:957
		{
			protoVAL.mtd = ast.NewRPCNodeWithBody(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].rpcType, protoDollar[4].id.ToKeyword(), protoDollar[5].rpcType, protoDollar[6].b, protoDollar[7].rpcDecls, protoDollar[8].b)
		}
	case 215:
		protoDollar = protoS[protopt-4 : protopt+1]
//line proto.y:961
		{
			protoVAL.rpcType = ast.NewRPCTypeNode(protoDollar[1].b, protoDollar[2].id.ToKeyword(), protoDollar[3].tid, protoDollar[4].b)
		}
	case 216:
		protoDollar = protoS[protopt-3 : protopt+1]
//line proto.y:964
		{
			protoVAL.rpcType = ast.NewRPCTypeNode(protoDollar[1].b, nil, protoDollar[2].tid, protoDollar[3].b)
		}
	case 217:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:968
		{
			if protoDollar[2].rpcDecl != nil {
				protoVAL.rpcDecls = append(protoDollar[1].rpcDecls, protoDollar[2].rpcDecl)
			} else {
				protoVAL.rpcDecls = protoDollar[1].rpcDecls
			}
		}
	case 218:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:975
		{
			if protoDollar[1].rpcDecl != nil {
				protoVAL.rpcDecls = []ast.RPCElement{protoDollar[1].rpcDecl}
			} else {
				protoVAL.rpcDecls = nil
			}
		}
	case 219:
		protoDollar = protoS[protopt-0 : protopt+1]
//line proto.y:982
		{
			protoVAL.rpcDecls = nil
		}
	case 220:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:986
		{
			protoVAL.rpcDecl = protoDollar[1].opt
		}
	case 221:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:989
		{
			protoVAL.rpcDecl = ast.NewEmptyDeclNode(protoDollar[1].b)
		}
	case 222:
		protoDollar = protoS[protopt-2 : protopt+1]
//line proto.y:992
		{
			protoVAL.rpcDecl = nil
		}
	case 223:
		protoDollar = protoS[protopt-1 : protopt+1]
//line proto.y:995
		{
			protoVAL.rpcDecl = nil
		}
	}
	goto protostack /* stack new state and value */
}
