package main

// Code generated by /Users/andhop/go/bin/peg delocate.peg DO NOT EDIT.

import (
	"fmt"
	"io"
	"os"
	"sort"
	"strconv"
	"strings"
)

const endSymbol rune = 1114112

/* The rule types inferred from the grammar are below. */
type pegRule uint8

const (
	ruleUnknown pegRule = iota
	ruleAsmFile
	ruleStatement
	ruleGlobalDirective
	ruleDirective
	ruleDirectiveName
	ruleLocationDirective
	ruleZeroDirective
	ruleFileDirective
	ruleLocDirective
	ruleArgs
	ruleArg
	ruleQuotedArg
	ruleQuotedText
	ruleLabelContainingDirective
	ruleLabelContainingDirectiveName
	ruleSymbolArgs
	ruleSymbolArg
	ruleSymbolExpr
	ruleSymbolAtom
	ruleSymbolOperator
	ruleOpenParen
	ruleCloseParen
	ruleSymbolType
	ruleDot
	ruleTCMarker
	ruleEscapedChar
	ruleWS
	ruleComment
	ruleLabel
	ruleSymbolName
	ruleLocalSymbol
	ruleLocalLabel
	ruleLocalLabelRef
	ruleInstruction
	ruleInstructionName
	ruleInstructionArg
	ruleGOTLocation
	ruleGOTSymbolOffset
	ruleAVX512Token
	ruleTOCRefHigh
	ruleTOCRefLow
	ruleIndirectionIndicator
	ruleRegisterOrConstant
	ruleARMConstantTweak
	ruleARMRegister
	ruleARMVectorRegister
	ruleSVE2PredicateRegister
	ruleARMRegisterBoundary
	ruleMemoryRef
	ruleSymbolRef
	ruleLow12BitsSymbolRef
	ruleARMBaseIndexScale
	ruleARMGOTLow12
	ruleARMPostincrement
	ruleBaseIndexScale
	ruleOperator
	ruleOffsetOperator
	ruleS2nBignumHelper
	ruleOffset
	ruleSection
	ruleSegmentRegister
)

var rul3s = [...]string{
	"Unknown",
	"AsmFile",
	"Statement",
	"GlobalDirective",
	"Directive",
	"DirectiveName",
	"LocationDirective",
	"ZeroDirective",
	"FileDirective",
	"LocDirective",
	"Args",
	"Arg",
	"QuotedArg",
	"QuotedText",
	"LabelContainingDirective",
	"LabelContainingDirectiveName",
	"SymbolArgs",
	"SymbolArg",
	"SymbolExpr",
	"SymbolAtom",
	"SymbolOperator",
	"OpenParen",
	"CloseParen",
	"SymbolType",
	"Dot",
	"TCMarker",
	"EscapedChar",
	"WS",
	"Comment",
	"Label",
	"SymbolName",
	"LocalSymbol",
	"LocalLabel",
	"LocalLabelRef",
	"Instruction",
	"InstructionName",
	"InstructionArg",
	"GOTLocation",
	"GOTSymbolOffset",
	"AVX512Token",
	"TOCRefHigh",
	"TOCRefLow",
	"IndirectionIndicator",
	"RegisterOrConstant",
	"ARMConstantTweak",
	"ARMRegister",
	"ARMVectorRegister",
	"SVE2PredicateRegister",
	"ARMRegisterBoundary",
	"MemoryRef",
	"SymbolRef",
	"Low12BitsSymbolRef",
	"ARMBaseIndexScale",
	"ARMGOTLow12",
	"ARMPostincrement",
	"BaseIndexScale",
	"Operator",
	"OffsetOperator",
	"S2nBignumHelper",
	"Offset",
	"Section",
	"SegmentRegister",
}

type token32 struct {
	pegRule
	begin, end uint32
}

func (t *token32) String() string {
	return fmt.Sprintf("\x1B[34m%v\x1B[m %v %v", rul3s[t.pegRule], t.begin, t.end)
}

type node32 struct {
	token32
	up, next *node32
}

func (node *node32) print(w io.Writer, pretty bool, buffer string) {
	var print func(node *node32, depth int)
	print = func(node *node32, depth int) {
		for node != nil {
			for c := 0; c < depth; c++ {
				fmt.Fprintf(w, " ")
			}
			rule := rul3s[node.pegRule]
			quote := strconv.Quote(string(([]rune(buffer)[node.begin:node.end])))
			if !pretty {
				fmt.Fprintf(w, "%v %v\n", rule, quote)
			} else {
				fmt.Fprintf(w, "\x1B[36m%v\x1B[m %v\n", rule, quote)
			}
			if node.up != nil {
				print(node.up, depth+1)
			}
			node = node.next
		}
	}
	print(node, 0)
}

func (node *node32) Print(w io.Writer, buffer string) {
	node.print(w, false, buffer)
}

func (node *node32) PrettyPrint(w io.Writer, buffer string) {
	node.print(w, true, buffer)
}

type tokens32 struct {
	tree []token32
}

func (t *tokens32) Trim(length uint32) {
	t.tree = t.tree[:length]
}

func (t *tokens32) Print() {
	for _, token := range t.tree {
		fmt.Println(token.String())
	}
}

func (t *tokens32) AST() *node32 {
	type element struct {
		node *node32
		down *element
	}
	tokens := t.Tokens()
	var stack *element
	for _, token := range tokens {
		if token.begin == token.end {
			continue
		}
		node := &node32{token32: token}
		for stack != nil && stack.node.begin >= token.begin && stack.node.end <= token.end {
			stack.node.next = node.up
			node.up = stack.node
			stack = stack.down
		}
		stack = &element{node: node, down: stack}
	}
	if stack != nil {
		return stack.node
	}
	return nil
}

func (t *tokens32) PrintSyntaxTree(buffer string) {
	t.AST().Print(os.Stdout, buffer)
}

func (t *tokens32) WriteSyntaxTree(w io.Writer, buffer string) {
	t.AST().Print(w, buffer)
}

func (t *tokens32) PrettyPrintSyntaxTree(buffer string) {
	t.AST().PrettyPrint(os.Stdout, buffer)
}

func (t *tokens32) Add(rule pegRule, begin, end, index uint32) {
	tree, i := t.tree, int(index)
	if i >= len(tree) {
		t.tree = append(tree, token32{pegRule: rule, begin: begin, end: end})
		return
	}
	tree[i] = token32{pegRule: rule, begin: begin, end: end}
}

func (t *tokens32) Tokens() []token32 {
	return t.tree
}

type Asm struct {
	Buffer string
	buffer []rune
	rules  [62]func() bool
	parse  func(rule ...int) error
	reset  func()
	Pretty bool
	tokens32
}

func (p *Asm) Parse(rule ...int) error {
	return p.parse(rule...)
}

func (p *Asm) Reset() {
	p.reset()
}

type textPosition struct {
	line, symbol int
}

type textPositionMap map[int]textPosition

func translatePositions(buffer []rune, positions []int) textPositionMap {
	length, translations, j, line, symbol := len(positions), make(textPositionMap, len(positions)), 0, 1, 0
	sort.Ints(positions)

search:
	for i, c := range buffer {
		if c == '\n' {
			line, symbol = line+1, 0
		} else {
			symbol++
		}
		if i == positions[j] {
			translations[positions[j]] = textPosition{line, symbol}
			for j++; j < length; j++ {
				if i != positions[j] {
					continue search
				}
			}
			break search
		}
	}

	return translations
}

type parseError struct {
	p   *Asm
	max token32
}

func (e *parseError) Error() string {
	tokens, err := []token32{e.max}, "\n"
	positions, p := make([]int, 2*len(tokens)), 0
	for _, token := range tokens {
		positions[p], p = int(token.begin), p+1
		positions[p], p = int(token.end), p+1
	}
	translations := translatePositions(e.p.buffer, positions)
	format := "parse error near %v (line %v symbol %v - line %v symbol %v):\n%v\n"
	if e.p.Pretty {
		format = "parse error near \x1B[34m%v\x1B[m (line %v symbol %v - line %v symbol %v):\n%v\n"
	}
	for _, token := range tokens {
		begin, end := int(token.begin), int(token.end)
		err += fmt.Sprintf(format,
			rul3s[token.pegRule],
			translations[begin].line, translations[begin].symbol,
			translations[end].line, translations[end].symbol,
			strconv.Quote(string(e.p.buffer[begin:end])))
	}

	return err
}

func (p *Asm) PrintSyntaxTree() {
	if p.Pretty {
		p.tokens32.PrettyPrintSyntaxTree(p.Buffer)
	} else {
		p.tokens32.PrintSyntaxTree(p.Buffer)
	}
}

func (p *Asm) WriteSyntaxTree(w io.Writer) {
	p.tokens32.WriteSyntaxTree(w, p.Buffer)
}

func (p *Asm) SprintSyntaxTree() string {
	var bldr strings.Builder
	p.WriteSyntaxTree(&bldr)
	return bldr.String()
}

func Pretty(pretty bool) func(*Asm) error {
	return func(p *Asm) error {
		p.Pretty = pretty
		return nil
	}
}

func Size(size int) func(*Asm) error {
	return func(p *Asm) error {
		p.tokens32 = tokens32{tree: make([]token32, 0, size)}
		return nil
	}
}
func (p *Asm) Init(options ...func(*Asm) error) error {
	var (
		max                  token32
		position, tokenIndex uint32
		buffer               []rune
	)
	for _, option := range options {
		err := option(p)
		if err != nil {
			return err
		}
	}
	p.reset = func() {
		max = token32{}
		position, tokenIndex = 0, 0

		p.buffer = []rune(p.Buffer)
		if len(p.buffer) == 0 || p.buffer[len(p.buffer)-1] != endSymbol {
			p.buffer = append(p.buffer, endSymbol)
		}
		buffer = p.buffer
	}
	p.reset()

	_rules := p.rules
	tree := p.tokens32
	p.parse = func(rule ...int) error {
		r := 1
		if len(rule) > 0 {
			r = rule[0]
		}
		matches := p.rules[r]()
		p.tokens32 = tree
		if matches {
			p.Trim(tokenIndex)
			return nil
		}
		return &parseError{p, max}
	}

	add := func(rule pegRule, begin uint32) {
		tree.Add(rule, begin, position, tokenIndex)
		tokenIndex++
		if begin != position && position > max.end {
			max = token32{rule, begin, position}
		}
	}

	matchDot := func() bool {
		if buffer[position] != endSymbol {
			position++
			return true
		}
		return false
	}

	/*matchChar := func(c byte) bool {
		if buffer[position] == c {
			position++
			return true
		}
		return false
	}*/

	/*matchRange := func(lower byte, upper byte) bool {
		if c := buffer[position]; c >= lower && c <= upper {
			position++
			return true
		}
		return false
	}*/

	_rules = [...]func() bool{
		nil,
		/* 0 AsmFile <- <(Statement* !.)> */
		func() bool {
			position0, tokenIndex0 := position, tokenIndex
			{
				position1 := position
			l2:
				{
					position3, tokenIndex3 := position, tokenIndex
					if !_rules[ruleStatement]() {
						goto l3
					}
					goto l2
				l3:
					position, tokenIndex = position3, tokenIndex3
				}
				{
					position4, tokenIndex4 := position, tokenIndex
					if !matchDot() {
						goto l4
					}
					goto l0
				l4:
					position, tokenIndex = position4, tokenIndex4
				}
				add(ruleAsmFile, position1)
			}
			return true
		l0:
			position, tokenIndex = position0, tokenIndex0
			return false
		},
		/* 1 Statement <- <(WS? (Label / ((GlobalDirective / LocationDirective / LabelContainingDirective / ZeroDirective / Instruction / Directive / Comment / ) WS? ((Comment? '\n') / ';'))))> */
		func() bool {
			position5, tokenIndex5 := position, tokenIndex
			{
				position6 := position
				{
					position7, tokenIndex7 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l7
					}
					goto l8
				l7:
					position, tokenIndex = position7, tokenIndex7
				}
			l8:
				{
					position9, tokenIndex9 := position, tokenIndex
					if !_rules[ruleLabel]() {
						goto l10
					}
					goto l9
				l10:
					position, tokenIndex = position9, tokenIndex9
					{
						position11, tokenIndex11 := position, tokenIndex
						if !_rules[ruleGlobalDirective]() {
							goto l12
						}
						goto l11
					l12:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleLocationDirective]() {
							goto l13
						}
						goto l11
					l13:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleLabelContainingDirective]() {
							goto l14
						}
						goto l11
					l14:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleZeroDirective]() {
							goto l15
						}
						goto l11
					l15:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleInstruction]() {
							goto l16
						}
						goto l11
					l16:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleDirective]() {
							goto l17
						}
						goto l11
					l17:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleComment]() {
							goto l18
						}
						goto l11
					l18:
						position, tokenIndex = position11, tokenIndex11
					}
				l11:
					{
						position19, tokenIndex19 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l19
						}
						goto l20
					l19:
						position, tokenIndex = position19, tokenIndex19
					}
				l20:
					{
						position21, tokenIndex21 := position, tokenIndex
						{
							position23, tokenIndex23 := position, tokenIndex
							if !_rules[ruleComment]() {
								goto l23
							}
							goto l24
						l23:
							position, tokenIndex = position23, tokenIndex23
						}
					l24:
						if buffer[position] != rune('\n') {
							goto l22
						}
						position++
						goto l21
					l22:
						position, tokenIndex = position21, tokenIndex21
						if buffer[position] != rune(';') {
							goto l5
						}
						position++
					}
				l21:
				}
			l9:
				add(ruleStatement, position6)
			}
			return true
		l5:
			position, tokenIndex = position5, tokenIndex5
			return false
		},
		/* 2 GlobalDirective <- <((('.' ('g' / 'G') ('l' / 'L') ('o' / 'O') ('b' / 'B') ('a' / 'A') ('l' / 'L')) / ('.' ('g' / 'G') ('l' / 'L') ('o' / 'O') ('b' / 'B') ('l' / 'L'))) WS SymbolName)> */
		func() bool {
			position25, tokenIndex25 := position, tokenIndex
			{
				position26 := position
				{
					position27, tokenIndex27 := position, tokenIndex
					if buffer[position] != rune('.') {
						goto l28
					}
					position++
					{
						position29, tokenIndex29 := position, tokenIndex
						if buffer[position] != rune('g') {
							goto l30
						}
						position++
						goto l29
					l30:
						position, tokenIndex = position29, tokenIndex29
						if buffer[position] != rune('G') {
							goto l28
						}
						position++
					}
				l29:
					{
						position31, tokenIndex31 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l32
						}
						position++
						goto l31
					l32:
						position, tokenIndex = position31, tokenIndex31
						if buffer[position] != rune('L') {
							goto l28
						}
						position++
					}
				l31:
					{
						position33, tokenIndex33 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l34
						}
						position++
						goto l33
					l34:
						position, tokenIndex = position33, tokenIndex33
						if buffer[position] != rune('O') {
							goto l28
						}
						position++
					}
				l33:
					{
						position35, tokenIndex35 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l36
						}
						position++
						goto l35
					l36:
						position, tokenIndex = position35, tokenIndex35
						if buffer[position] != rune('B') {
							goto l28
						}
						position++
					}
				l35:
					{
						position37, tokenIndex37 := position, tokenIndex
						if buffer[position] != rune('a') {
							goto l38
						}
						position++
						goto l37
					l38:
						position, tokenIndex = position37, tokenIndex37
						if buffer[position] != rune('A') {
							goto l28
						}
						position++
					}
				l37:
					{
						position39, tokenIndex39 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l40
						}
						position++
						goto l39
					l40:
						position, tokenIndex = position39, tokenIndex39
						if buffer[position] != rune('L') {
							goto l28
						}
						position++
					}
				l39:
					goto l27
				l28:
					position, tokenIndex = position27, tokenIndex27
					if buffer[position] != rune('.') {
						goto l25
					}
					position++
					{
						position41, tokenIndex41 := position, tokenIndex
						if buffer[position] != rune('g') {
							goto l42
						}
						position++
						goto l41
					l42:
						position, tokenIndex = position41, tokenIndex41
						if buffer[position] != rune('G') {
							goto l25
						}
						position++
					}
				l41:
					{
						position43, tokenIndex43 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l44
						}
						position++
						goto l43
					l44:
						position, tokenIndex = position43, tokenIndex43
						if buffer[position] != rune('L') {
							goto l25
						}
						position++
					}
				l43:
					{
						position45, tokenIndex45 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l46
						}
						position++
						goto l45
					l46:
						position, tokenIndex = position45, tokenIndex45
						if buffer[position] != rune('O') {
							goto l25
						}
						position++
					}
				l45:
					{
						position47, tokenIndex47 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l48
						}
						position++
						goto l47
					l48:
						position, tokenIndex = position47, tokenIndex47
						if buffer[position] != rune('B') {
							goto l25
						}
						position++
					}
				l47:
					{
						position49, tokenIndex49 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l50
						}
						position++
						goto l49
					l50:
						position, tokenIndex = position49, tokenIndex49
						if buffer[position] != rune('L') {
							goto l25
						}
						position++
					}
				l49:
				}
			l27:
				if !_rules[ruleWS]() {
					goto l25
				}
				if !_rules[ruleSymbolName]() {
					goto l25
				}
				add(ruleGlobalDirective, position26)
			}
			return true
		l25:
			position, tokenIndex = position25, tokenIndex25
			return false
		},
		/* 3 Directive <- <('.' DirectiveName (WS Args)?)> */
		func() bool {
			position51, tokenIndex51 := position, tokenIndex
			{
				position52 := position
				if buffer[position] != rune('.') {
					goto l51
				}
				position++
				if !_rules[ruleDirectiveName]() {
					goto l51
				}
				{
					position53, tokenIndex53 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l53
					}
					if !_rules[ruleArgs]() {
						goto l53
					}
					goto l54
				l53:
					position, tokenIndex = position53, tokenIndex53
				}
			l54:
				add(ruleDirective, position52)
			}
			return true
		l51:
			position, tokenIndex = position51, tokenIndex51
			return false
		},
		/* 4 DirectiveName <- <([a-z] / [A-Z] / ([0-9] / [0-9]) / '_')+> */
		func() bool {
			position55, tokenIndex55 := position, tokenIndex
			{
				position56 := position
				{
					position59, tokenIndex59 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l60
					}
					position++
					goto l59
				l60:
					position, tokenIndex = position59, tokenIndex59
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l61
					}
					position++
					goto l59
				l61:
					position, tokenIndex = position59, tokenIndex59
					{
						position63, tokenIndex63 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l64
						}
						position++
						goto l63
					l64:
						position, tokenIndex = position63, tokenIndex63
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l62
						}
						position++
					}
				l63:
					goto l59
				l62:
					position, tokenIndex = position59, tokenIndex59
					if buffer[position] != rune('_') {
						goto l55
					}
					position++
				}
			l59:
			l57:
				{
					position58, tokenIndex58 := position, tokenIndex
					{
						position65, tokenIndex65 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l66
						}
						position++
						goto l65
					l66:
						position, tokenIndex = position65, tokenIndex65
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l67
						}
						position++
						goto l65
					l67:
						position, tokenIndex = position65, tokenIndex65
						{
							position69, tokenIndex69 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l70
							}
							position++
							goto l69
						l70:
							position, tokenIndex = position69, tokenIndex69
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l68
							}
							position++
						}
					l69:
						goto l65
					l68:
						position, tokenIndex = position65, tokenIndex65
						if buffer[position] != rune('_') {
							goto l58
						}
						position++
					}
				l65:
					goto l57
				l58:
					position, tokenIndex = position58, tokenIndex58
				}
				add(ruleDirectiveName, position56)
			}
			return true
		l55:
			position, tokenIndex = position55, tokenIndex55
			return false
		},
		/* 5 LocationDirective <- <(FileDirective / LocDirective)> */
		func() bool {
			position71, tokenIndex71 := position, tokenIndex
			{
				position72 := position
				{
					position73, tokenIndex73 := position, tokenIndex
					if !_rules[ruleFileDirective]() {
						goto l74
					}
					goto l73
				l74:
					position, tokenIndex = position73, tokenIndex73
					if !_rules[ruleLocDirective]() {
						goto l71
					}
				}
			l73:
				add(ruleLocationDirective, position72)
			}
			return true
		l71:
			position, tokenIndex = position71, tokenIndex71
			return false
		},
		/* 6 ZeroDirective <- <('.' ('z' / 'Z') ('e' / 'E') ('r' / 'R') ('o' / 'O') WS (!('#' / '\n') .)+)> */
		func() bool {
			position75, tokenIndex75 := position, tokenIndex
			{
				position76 := position
				if buffer[position] != rune('.') {
					goto l75
				}
				position++
				{
					position77, tokenIndex77 := position, tokenIndex
					if buffer[position] != rune('z') {
						goto l78
					}
					position++
					goto l77
				l78:
					position, tokenIndex = position77, tokenIndex77
					if buffer[position] != rune('Z') {
						goto l75
					}
					position++
				}
			l77:
				{
					position79, tokenIndex79 := position, tokenIndex
					if buffer[position] != rune('e') {
						goto l80
					}
					position++
					goto l79
				l80:
					position, tokenIndex = position79, tokenIndex79
					if buffer[position] != rune('E') {
						goto l75
					}
					position++
				}
			l79:
				{
					position81, tokenIndex81 := position, tokenIndex
					if buffer[position] != rune('r') {
						goto l82
					}
					position++
					goto l81
				l82:
					position, tokenIndex = position81, tokenIndex81
					if buffer[position] != rune('R') {
						goto l75
					}
					position++
				}
			l81:
				{
					position83, tokenIndex83 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l84
					}
					position++
					goto l83
				l84:
					position, tokenIndex = position83, tokenIndex83
					if buffer[position] != rune('O') {
						goto l75
					}
					position++
				}
			l83:
				if !_rules[ruleWS]() {
					goto l75
				}
				{
					position87, tokenIndex87 := position, tokenIndex
					{
						position88, tokenIndex88 := position, tokenIndex
						if buffer[position] != rune('#') {
							goto l89
						}
						position++
						goto l88
					l89:
						position, tokenIndex = position88, tokenIndex88
						if buffer[position] != rune('\n') {
							goto l87
						}
						position++
					}
				l88:
					goto l75
				l87:
					position, tokenIndex = position87, tokenIndex87
				}
				if !matchDot() {
					goto l75
				}
			l85:
				{
					position86, tokenIndex86 := position, tokenIndex
					{
						position90, tokenIndex90 := position, tokenIndex
						{
							position91, tokenIndex91 := position, tokenIndex
							if buffer[position] != rune('#') {
								goto l92
							}
							position++
							goto l91
						l92:
							position, tokenIndex = position91, tokenIndex91
							if buffer[position] != rune('\n') {
								goto l90
							}
							position++
						}
					l91:
						goto l86
					l90:
						position, tokenIndex = position90, tokenIndex90
					}
					if !matchDot() {
						goto l86
					}
					goto l85
				l86:
					position, tokenIndex = position86, tokenIndex86
				}
				add(ruleZeroDirective, position76)
			}
			return true
		l75:
			position, tokenIndex = position75, tokenIndex75
			return false
		},
		/* 7 FileDirective <- <('.' ('f' / 'F') ('i' / 'I') ('l' / 'L') ('e' / 'E') WS (!('#' / '\n') .)+)> */
		func() bool {
			position93, tokenIndex93 := position, tokenIndex
			{
				position94 := position
				if buffer[position] != rune('.') {
					goto l93
				}
				position++
				{
					position95, tokenIndex95 := position, tokenIndex
					if buffer[position] != rune('f') {
						goto l96
					}
					position++
					goto l95
				l96:
					position, tokenIndex = position95, tokenIndex95
					if buffer[position] != rune('F') {
						goto l93
					}
					position++
				}
			l95:
				{
					position97, tokenIndex97 := position, tokenIndex
					if buffer[position] != rune('i') {
						goto l98
					}
					position++
					goto l97
				l98:
					position, tokenIndex = position97, tokenIndex97
					if buffer[position] != rune('I') {
						goto l93
					}
					position++
				}
			l97:
				{
					position99, tokenIndex99 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l100
					}
					position++
					goto l99
				l100:
					position, tokenIndex = position99, tokenIndex99
					if buffer[position] != rune('L') {
						goto l93
					}
					position++
				}
			l99:
				{
					position101, tokenIndex101 := position, tokenIndex
					if buffer[position] != rune('e') {
						goto l102
					}
					position++
					goto l101
				l102:
					position, tokenIndex = position101, tokenIndex101
					if buffer[position] != rune('E') {
						goto l93
					}
					position++
				}
			l101:
				if !_rules[ruleWS]() {
					goto l93
				}
				{
					position105, tokenIndex105 := position, tokenIndex
					{
						position106, tokenIndex106 := position, tokenIndex
						if buffer[position] != rune('#') {
							goto l107
						}
						position++
						goto l106
					l107:
						position, tokenIndex = position106, tokenIndex106
						if buffer[position] != rune('\n') {
							goto l105
						}
						position++
					}
				l106:
					goto l93
				l105:
					position, tokenIndex = position105, tokenIndex105
				}
				if !matchDot() {
					goto l93
				}
			l103:
				{
					position104, tokenIndex104 := position, tokenIndex
					{
						position108, tokenIndex108 := position, tokenIndex
						{
							position109, tokenIndex109 := position, tokenIndex
							if buffer[position] != rune('#') {
								goto l110
							}
							position++
							goto l109
						l110:
							position, tokenIndex = position109, tokenIndex109
							if buffer[position] != rune('\n') {
								goto l108
							}
							position++
						}
					l109:
						goto l104
					l108:
						position, tokenIndex = position108, tokenIndex108
					}
					if !matchDot() {
						goto l104
					}
					goto l103
				l104:
					position, tokenIndex = position104, tokenIndex104
				}
				add(ruleFileDirective, position94)
			}
			return true
		l93:
			position, tokenIndex = position93, tokenIndex93
			return false
		},
		/* 8 LocDirective <- <('.' ('l' / 'L') ('o' / 'O') ('c' / 'C') WS (!('#' / '/' / '\n') .)+)> */
		func() bool {
			position111, tokenIndex111 := position, tokenIndex
			{
				position112 := position
				if buffer[position] != rune('.') {
					goto l111
				}
				position++
				{
					position113, tokenIndex113 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l114
					}
					position++
					goto l113
				l114:
					position, tokenIndex = position113, tokenIndex113
					if buffer[position] != rune('L') {
						goto l111
					}
					position++
				}
			l113:
				{
					position115, tokenIndex115 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l116
					}
					position++
					goto l115
				l116:
					position, tokenIndex = position115, tokenIndex115
					if buffer[position] != rune('O') {
						goto l111
					}
					position++
				}
			l115:
				{
					position117, tokenIndex117 := position, tokenIndex
					if buffer[position] != rune('c') {
						goto l118
					}
					position++
					goto l117
				l118:
					position, tokenIndex = position117, tokenIndex117
					if buffer[position] != rune('C') {
						goto l111
					}
					position++
				}
			l117:
				if !_rules[ruleWS]() {
					goto l111
				}
				{
					position121, tokenIndex121 := position, tokenIndex
					{
						position122, tokenIndex122 := position, tokenIndex
						if buffer[position] != rune('#') {
							goto l123
						}
						position++
						goto l122
					l123:
						position, tokenIndex = position122, tokenIndex122
						if buffer[position] != rune('/') {
							goto l124
						}
						position++
						goto l122
					l124:
						position, tokenIndex = position122, tokenIndex122
						if buffer[position] != rune('\n') {
							goto l121
						}
						position++
					}
				l122:
					goto l111
				l121:
					position, tokenIndex = position121, tokenIndex121
				}
				if !matchDot() {
					goto l111
				}
			l119:
				{
					position120, tokenIndex120 := position, tokenIndex
					{
						position125, tokenIndex125 := position, tokenIndex
						{
							position126, tokenIndex126 := position, tokenIndex
							if buffer[position] != rune('#') {
								goto l127
							}
							position++
							goto l126
						l127:
							position, tokenIndex = position126, tokenIndex126
							if buffer[position] != rune('/') {
								goto l128
							}
							position++
							goto l126
						l128:
							position, tokenIndex = position126, tokenIndex126
							if buffer[position] != rune('\n') {
								goto l125
							}
							position++
						}
					l126:
						goto l120
					l125:
						position, tokenIndex = position125, tokenIndex125
					}
					if !matchDot() {
						goto l120
					}
					goto l119
				l120:
					position, tokenIndex = position120, tokenIndex120
				}
				add(ruleLocDirective, position112)
			}
			return true
		l111:
			position, tokenIndex = position111, tokenIndex111
			return false
		},
		/* 9 Args <- <(Arg (WS? ',' WS? Arg)*)> */
		func() bool {
			position129, tokenIndex129 := position, tokenIndex
			{
				position130 := position
				if !_rules[ruleArg]() {
					goto l129
				}
			l131:
				{
					position132, tokenIndex132 := position, tokenIndex
					{
						position133, tokenIndex133 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l133
						}
						goto l134
					l133:
						position, tokenIndex = position133, tokenIndex133
					}
				l134:
					if buffer[position] != rune(',') {
						goto l132
					}
					position++
					{
						position135, tokenIndex135 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l135
						}
						goto l136
					l135:
						position, tokenIndex = position135, tokenIndex135
					}
				l136:
					if !_rules[ruleArg]() {
						goto l132
					}
					goto l131
				l132:
					position, tokenIndex = position132, tokenIndex132
				}
				add(ruleArgs, position130)
			}
			return true
		l129:
			position, tokenIndex = position129, tokenIndex129
			return false
		},
		/* 10 Arg <- <(QuotedArg / ([0-9] / [0-9] / ([a-z] / [A-Z]) / '%' / '+' / '-' / '*' / '_' / '@' / '.')*)> */
		func() bool {
			{
				position138 := position
				{
					position139, tokenIndex139 := position, tokenIndex
					if !_rules[ruleQuotedArg]() {
						goto l140
					}
					goto l139
				l140:
					position, tokenIndex = position139, tokenIndex139
				l141:
					{
						position142, tokenIndex142 := position, tokenIndex
						{
							position143, tokenIndex143 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l144
							}
							position++
							goto l143
						l144:
							position, tokenIndex = position143, tokenIndex143
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l145
							}
							position++
							goto l143
						l145:
							position, tokenIndex = position143, tokenIndex143
							{
								position147, tokenIndex147 := position, tokenIndex
								if c := buffer[position]; c < rune('a') || c > rune('z') {
									goto l148
								}
								position++
								goto l147
							l148:
								position, tokenIndex = position147, tokenIndex147
								if c := buffer[position]; c < rune('A') || c > rune('Z') {
									goto l146
								}
								position++
							}
						l147:
							goto l143
						l146:
							position, tokenIndex = position143, tokenIndex143
							if buffer[position] != rune('%') {
								goto l149
							}
							position++
							goto l143
						l149:
							position, tokenIndex = position143, tokenIndex143
							if buffer[position] != rune('+') {
								goto l150
							}
							position++
							goto l143
						l150:
							position, tokenIndex = position143, tokenIndex143
							if buffer[position] != rune('-') {
								goto l151
							}
							position++
							goto l143
						l151:
							position, tokenIndex = position143, tokenIndex143
							if buffer[position] != rune('*') {
								goto l152
							}
							position++
							goto l143
						l152:
							position, tokenIndex = position143, tokenIndex143
							if buffer[position] != rune('_') {
								goto l153
							}
							position++
							goto l143
						l153:
							position, tokenIndex = position143, tokenIndex143
							if buffer[position] != rune('@') {
								goto l154
							}
							position++
							goto l143
						l154:
							position, tokenIndex = position143, tokenIndex143
							if buffer[position] != rune('.') {
								goto l142
							}
							position++
						}
					l143:
						goto l141
					l142:
						position, tokenIndex = position142, tokenIndex142
					}
				}
			l139:
				add(ruleArg, position138)
			}
			return true
		},
		/* 11 QuotedArg <- <('"' QuotedText '"')> */
		func() bool {
			position155, tokenIndex155 := position, tokenIndex
			{
				position156 := position
				if buffer[position] != rune('"') {
					goto l155
				}
				position++
				if !_rules[ruleQuotedText]() {
					goto l155
				}
				if buffer[position] != rune('"') {
					goto l155
				}
				position++
				add(ruleQuotedArg, position156)
			}
			return true
		l155:
			position, tokenIndex = position155, tokenIndex155
			return false
		},
		/* 12 QuotedText <- <(EscapedChar / (!'"' .))*> */
		func() bool {
			{
				position158 := position
			l159:
				{
					position160, tokenIndex160 := position, tokenIndex
					{
						position161, tokenIndex161 := position, tokenIndex
						if !_rules[ruleEscapedChar]() {
							goto l162
						}
						goto l161
					l162:
						position, tokenIndex = position161, tokenIndex161
						{
							position163, tokenIndex163 := position, tokenIndex
							if buffer[position] != rune('"') {
								goto l163
							}
							position++
							goto l160
						l163:
							position, tokenIndex = position163, tokenIndex163
						}
						if !matchDot() {
							goto l160
						}
					}
				l161:
					goto l159
				l160:
					position, tokenIndex = position160, tokenIndex160
				}
				add(ruleQuotedText, position158)
			}
			return true
		},
		/* 13 LabelContainingDirective <- <(LabelContainingDirectiveName WS SymbolArgs)> */
		func() bool {
			position164, tokenIndex164 := position, tokenIndex
			{
				position165 := position
				if !_rules[ruleLabelContainingDirectiveName]() {
					goto l164
				}
				if !_rules[ruleWS]() {
					goto l164
				}
				if !_rules[ruleSymbolArgs]() {
					goto l164
				}
				add(ruleLabelContainingDirective, position165)
			}
			return true
		l164:
			position, tokenIndex = position164, tokenIndex164
			return false
		},
		/* 14 LabelContainingDirectiveName <- <(('.' ('x' / 'X') ('w' / 'W') ('o' / 'O') ('r' / 'R') ('d' / 'D')) / ('.' ('w' / 'W') ('o' / 'O') ('r' / 'R') ('d' / 'D')) / ('.' ('h' / 'H') ('w' / 'W') ('o' / 'O') ('r' / 'R') ('d' / 'D')) / ('.' ('l' / 'L') ('o' / 'O') ('n' / 'N') ('g' / 'G')) / ('.' ('s' / 'S') ('e' / 'E') ('t' / 'T')) / ('.' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' '8' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' '4' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' ('q' / 'Q') ('u' / 'U') ('a' / 'A') ('d' / 'D')) / ('.' ('t' / 'T') ('c' / 'C')) / ('.' ('l' / 'L') ('o' / 'O') ('c' / 'C') ('a' / 'A') ('l' / 'L') ('e' / 'E') ('n' / 'N') ('t' / 'T') ('r' / 'R') ('y' / 'Y')) / ('.' ('s' / 'S') ('i' / 'I') ('z' / 'Z') ('e' / 'E')) / ('.' ('t' / 'T') ('y' / 'Y') ('p' / 'P') ('e' / 'E')) / ('.' ('u' / 'U') ('l' / 'L') ('e' / 'E') ('b' / 'B') '1' '2' '8') / ('.' ('s' / 'S') ('l' / 'L') ('e' / 'E') ('b' / 'B') '1' '2' '8'))> */
		func() bool {
			position166, tokenIndex166 := position, tokenIndex
			{
				position167 := position
				{
					position168, tokenIndex168 := position, tokenIndex
					if buffer[position] != rune('.') {
						goto l169
					}
					position++
					{
						position170, tokenIndex170 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l171
						}
						position++
						goto l170
					l171:
						position, tokenIndex = position170, tokenIndex170
						if buffer[position] != rune('X') {
							goto l169
						}
						position++
					}
				l170:
					{
						position172, tokenIndex172 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l173
						}
						position++
						goto l172
					l173:
						position, tokenIndex = position172, tokenIndex172
						if buffer[position] != rune('W') {
							goto l169
						}
						position++
					}
				l172:
					{
						position174, tokenIndex174 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l175
						}
						position++
						goto l174
					l175:
						position, tokenIndex = position174, tokenIndex174
						if buffer[position] != rune('O') {
							goto l169
						}
						position++
					}
				l174:
					{
						position176, tokenIndex176 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l177
						}
						position++
						goto l176
					l177:
						position, tokenIndex = position176, tokenIndex176
						if buffer[position] != rune('R') {
							goto l169
						}
						position++
					}
				l176:
					{
						position178, tokenIndex178 := position, tokenIndex
						if buffer[position] != rune('d') {
							goto l179
						}
						position++
						goto l178
					l179:
						position, tokenIndex = position178, tokenIndex178
						if buffer[position] != rune('D') {
							goto l169
						}
						position++
					}
				l178:
					goto l168
				l169:
					position, tokenIndex = position168, tokenIndex168
					if buffer[position] != rune('.') {
						goto l180
					}
					position++
					{
						position181, tokenIndex181 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l182
						}
						position++
						goto l181
					l182:
						position, tokenIndex = position181, tokenIndex181
						if buffer[position] != rune('W') {
							goto l180
						}
						position++
					}
				l181:
					{
						position183, tokenIndex183 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l184
						}
						position++
						goto l183
					l184:
						position, tokenIndex = position183, tokenIndex183
						if buffer[position] != rune('O') {
							goto l180
						}
						position++
					}
				l183:
					{
						position185, tokenIndex185 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l186
						}
						position++
						goto l185
					l186:
						position, tokenIndex = position185, tokenIndex185
						if buffer[position] != rune('R') {
							goto l180
						}
						position++
					}
				l185:
					{
						position187, tokenIndex187 := position, tokenIndex
						if buffer[position] != rune('d') {
							goto l188
						}
						position++
						goto l187
					l188:
						position, tokenIndex = position187, tokenIndex187
						if buffer[position] != rune('D') {
							goto l180
						}
						position++
					}
				l187:
					goto l168
				l180:
					position, tokenIndex = position168, tokenIndex168
					if buffer[position] != rune('.') {
						goto l189
					}
					position++
					{
						position190, tokenIndex190 := position, tokenIndex
						if buffer[position] != rune('h') {
							goto l191
						}
						position++
						goto l190
					l191:
						position, tokenIndex = position190, tokenIndex190
						if buffer[position] != rune('H') {
							goto l189
						}
						position++
					}
				l190:
					{
						position192, tokenIndex192 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l193
						}
						position++
						goto l192
					l193:
						position, tokenIndex = position192, tokenIndex192
						if buffer[position] != rune('W') {
							goto l189
						}
						position++
					}
				l192:
					{
						position194, tokenIndex194 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l195
						}
						position++
						goto l194
					l195:
						position, tokenIndex = position194, tokenIndex194
						if buffer[position] != rune('O') {
							goto l189
						}
						position++
					}
				l194:
					{
						position196, tokenIndex196 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l197
						}
						position++
						goto l196
					l197:
						position, tokenIndex = position196, tokenIndex196
						if buffer[position] != rune('R') {
							goto l189
						}
						position++
					}
				l196:
					{
						position198, tokenIndex198 := position, tokenIndex
						if buffer[position] != rune('d') {
							goto l199
						}
						position++
						goto l198
					l199:
						position, tokenIndex = position198, tokenIndex198
						if buffer[position] != rune('D') {
							goto l189
						}
						position++
					}
				l198:
					goto l168
				l189:
					position, tokenIndex = position168, tokenIndex168
					if buffer[position] != rune('.') {
						goto l200
					}
					position++
					{
						position201, tokenIndex201 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l202
						}
						position++
						goto l201
					l202:
						position, tokenIndex = position201, tokenIndex201
						if buffer[position] != rune('L') {
							goto l200
						}
						position++
					}
				l201:
					{
						position203, tokenIndex203 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l204
						}
						position++
						goto l203
					l204:
						position, tokenIndex = position203, tokenIndex203
						if buffer[position] != rune('O') {
							goto l200
						}
						position++
					}
				l203:
					{
						position205, tokenIndex205 := position, tokenIndex
						if buffer[position] != rune('n') {
							goto l206
						}
						position++
						goto l205
					l206:
						position, tokenIndex = position205, tokenIndex205
						if buffer[position] != rune('N') {
							goto l200
						}
						position++
					}
				l205:
					{
						position207, tokenIndex207 := position, tokenIndex
						if buffer[position] != rune('g') {
							goto l208
						}
						position++
						goto l207
					l208:
						position, tokenIndex = position207, tokenIndex207
						if buffer[position] != rune('G') {
							goto l200
						}
						position++
					}
				l207:
					goto l168
				l200:
					position, tokenIndex = position168, tokenIndex168
					if buffer[position] != rune('.') {
						goto l209
					}
					position++
					{
						position210, tokenIndex210 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l211
						}
						position++
						goto l210
					l211:
						position, tokenIndex = position210, tokenIndex210
						if buffer[position] != rune('S') {
							goto l209
						}
						position++
					}
				l210:
					{
						position212, tokenIndex212 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l213
						}
						position++
						goto l212
					l213:
						position, tokenIndex = position212, tokenIndex212
						if buffer[position] != rune('E') {
							goto l209
						}
						position++
					}
				l212:
					{
						position214, tokenIndex214 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l215
						}
						position++
						goto l214
					l215:
						position, tokenIndex = position214, tokenIndex214
						if buffer[position] != rune('T') {
							goto l209
						}
						position++
					}
				l214:
					goto l168
				l209:
					position, tokenIndex = position168, tokenIndex168
					if buffer[position] != rune('.') {
						goto l216
					}
					position++
					{
						position217, tokenIndex217 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l218
						}
						position++
						goto l217
					l218:
						position, tokenIndex = position217, tokenIndex217
						if buffer[position] != rune('B') {
							goto l216
						}
						position++
					}
				l217:
					{
						position219, tokenIndex219 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l220
						}
						position++
						goto l219
					l220:
						position, tokenIndex = position219, tokenIndex219
						if buffer[position] != rune('Y') {
							goto l216
						}
						position++
					}
				l219:
					{
						position221, tokenIndex221 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l222
						}
						position++
						goto l221
					l222:
						position, tokenIndex = position221, tokenIndex221
						if buffer[position] != rune('T') {
							goto l216
						}
						position++
					}
				l221:
					{
						position223, tokenIndex223 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l224
						}
						position++
						goto l223
					l224:
						position, tokenIndex = position223, tokenIndex223
						if buffer[position] != rune('E') {
							goto l216
						}
						position++
					}
				l223:
					goto l168
				l216:
					position, tokenIndex = position168, tokenIndex168
					if buffer[position] != rune('.') {
						goto l225
					}
					position++
					if buffer[position] != rune('8') {
						goto l225
					}
					position++
					{
						position226, tokenIndex226 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l227
						}
						position++
						goto l226
					l227:
						position, tokenIndex = position226, tokenIndex226
						if buffer[position] != rune('B') {
							goto l225
						}
						position++
					}
				l226:
					{
						position228, tokenIndex228 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l229
						}
						position++
						goto l228
					l229:
						position, tokenIndex = position228, tokenIndex228
						if buffer[position] != rune('Y') {
							goto l225
						}
						position++
					}
				l228:
					{
						position230, tokenIndex230 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l231
						}
						position++
						goto l230
					l231:
						position, tokenIndex = position230, tokenIndex230
						if buffer[position] != rune('T') {
							goto l225
						}
						position++
					}
				l230:
					{
						position232, tokenIndex232 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l233
						}
						position++
						goto l232
					l233:
						position, tokenIndex = position232, tokenIndex232
						if buffer[position] != rune('E') {
							goto l225
						}
						position++
					}
				l232:
					goto l168
				l225:
					position, tokenIndex = position168, tokenIndex168
					if buffer[position] != rune('.') {
						goto l234
					}
					position++
					if buffer[position] != rune('4') {
						goto l234
					}
					position++
					{
						position235, tokenIndex235 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l236
						}
						position++
						goto l235
					l236:
						position, tokenIndex = position235, tokenIndex235
						if buffer[position] != rune('B') {
							goto l234
						}
						position++
					}
				l235:
					{
						position237, tokenIndex237 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l238
						}
						position++
						goto l237
					l238:
						position, tokenIndex = position237, tokenIndex237
						if buffer[position] != rune('Y') {
							goto l234
						}
						position++
					}
				l237:
					{
						position239, tokenIndex239 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l240
						}
						position++
						goto l239
					l240:
						position, tokenIndex = position239, tokenIndex239
						if buffer[position] != rune('T') {
							goto l234
						}
						position++
					}
				l239:
					{
						position241, tokenIndex241 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l242
						}
						position++
						goto l241
					l242:
						position, tokenIndex = position241, tokenIndex241
						if buffer[position] != rune('E') {
							goto l234
						}
						position++
					}
				l241:
					goto l168
				l234:
					position, tokenIndex = position168, tokenIndex168
					if buffer[position] != rune('.') {
						goto l243
					}
					position++
					{
						position244, tokenIndex244 := position, tokenIndex
						if buffer[position] != rune('q') {
							goto l245
						}
						position++
						goto l244
					l245:
						position, tokenIndex = position244, tokenIndex244
						if buffer[position] != rune('Q') {
							goto l243
						}
						position++
					}
				l244:
					{
						position246, tokenIndex246 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l247
						}
						position++
						goto l246
					l247:
						position, tokenIndex = position246, tokenIndex246
						if buffer[position] != rune('U') {
							goto l243
						}
						position++
					}
				l246:
					{
						position248, tokenIndex248 := position, tokenIndex
						if buffer[position] != rune('a') {
							goto l249
						}
						position++
						goto l248
					l249:
						position, tokenIndex = position248, tokenIndex248
						if buffer[position] != rune('A') {
							goto l243
						}
						position++
					}
				l248:
					{
						position250, tokenIndex250 := position, tokenIndex
						if buffer[position] != rune('d') {
							goto l251
						}
						position++
						goto l250
					l251:
						position, tokenIndex = position250, tokenIndex250
						if buffer[position] != rune('D') {
							goto l243
						}
						position++
					}
				l250:
					goto l168
				l243:
					position, tokenIndex = position168, tokenIndex168
					if buffer[position] != rune('.') {
						goto l252
					}
					position++
					{
						position253, tokenIndex253 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l254
						}
						position++
						goto l253
					l254:
						position, tokenIndex = position253, tokenIndex253
						if buffer[position] != rune('T') {
							goto l252
						}
						position++
					}
				l253:
					{
						position255, tokenIndex255 := position, tokenIndex
						if buffer[position] != rune('c') {
							goto l256
						}
						position++
						goto l255
					l256:
						position, tokenIndex = position255, tokenIndex255
						if buffer[position] != rune('C') {
							goto l252
						}
						position++
					}
				l255:
					goto l168
				l252:
					position, tokenIndex = position168, tokenIndex168
					if buffer[position] != rune('.') {
						goto l257
					}
					position++
					{
						position258, tokenIndex258 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l259
						}
						position++
						goto l258
					l259:
						position, tokenIndex = position258, tokenIndex258
						if buffer[position] != rune('L') {
							goto l257
						}
						position++
					}
				l258:
					{
						position260, tokenIndex260 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l261
						}
						position++
						goto l260
					l261:
						position, tokenIndex = position260, tokenIndex260
						if buffer[position] != rune('O') {
							goto l257
						}
						position++
					}
				l260:
					{
						position262, tokenIndex262 := position, tokenIndex
						if buffer[position] != rune('c') {
							goto l263
						}
						position++
						goto l262
					l263:
						position, tokenIndex = position262, tokenIndex262
						if buffer[position] != rune('C') {
							goto l257
						}
						position++
					}
				l262:
					{
						position264, tokenIndex264 := position, tokenIndex
						if buffer[position] != rune('a') {
							goto l265
						}
						position++
						goto l264
					l265:
						position, tokenIndex = position264, tokenIndex264
						if buffer[position] != rune('A') {
							goto l257
						}
						position++
					}
				l264:
					{
						position266, tokenIndex266 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l267
						}
						position++
						goto l266
					l267:
						position, tokenIndex = position266, tokenIndex266
						if buffer[position] != rune('L') {
							goto l257
						}
						position++
					}
				l266:
					{
						position268, tokenIndex268 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l269
						}
						position++
						goto l268
					l269:
						position, tokenIndex = position268, tokenIndex268
						if buffer[position] != rune('E') {
							goto l257
						}
						position++
					}
				l268:
					{
						position270, tokenIndex270 := position, tokenIndex
						if buffer[position] != rune('n') {
							goto l271
						}
						position++
						goto l270
					l271:
						position, tokenIndex = position270, tokenIndex270
						if buffer[position] != rune('N') {
							goto l257
						}
						position++
					}
				l270:
					{
						position272, tokenIndex272 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l273
						}
						position++
						goto l272
					l273:
						position, tokenIndex = position272, tokenIndex272
						if buffer[position] != rune('T') {
							goto l257
						}
						position++
					}
				l272:
					{
						position274, tokenIndex274 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l275
						}
						position++
						goto l274
					l275:
						position, tokenIndex = position274, tokenIndex274
						if buffer[position] != rune('R') {
							goto l257
						}
						position++
					}
				l274:
					{
						position276, tokenIndex276 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l277
						}
						position++
						goto l276
					l277:
						position, tokenIndex = position276, tokenIndex276
						if buffer[position] != rune('Y') {
							goto l257
						}
						position++
					}
				l276:
					goto l168
				l257:
					position, tokenIndex = position168, tokenIndex168
					if buffer[position] != rune('.') {
						goto l278
					}
					position++
					{
						position279, tokenIndex279 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l280
						}
						position++
						goto l279
					l280:
						position, tokenIndex = position279, tokenIndex279
						if buffer[position] != rune('S') {
							goto l278
						}
						position++
					}
				l279:
					{
						position281, tokenIndex281 := position, tokenIndex
						if buffer[position] != rune('i') {
							goto l282
						}
						position++
						goto l281
					l282:
						position, tokenIndex = position281, tokenIndex281
						if buffer[position] != rune('I') {
							goto l278
						}
						position++
					}
				l281:
					{
						position283, tokenIndex283 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l284
						}
						position++
						goto l283
					l284:
						position, tokenIndex = position283, tokenIndex283
						if buffer[position] != rune('Z') {
							goto l278
						}
						position++
					}
				l283:
					{
						position285, tokenIndex285 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l286
						}
						position++
						goto l285
					l286:
						position, tokenIndex = position285, tokenIndex285
						if buffer[position] != rune('E') {
							goto l278
						}
						position++
					}
				l285:
					goto l168
				l278:
					position, tokenIndex = position168, tokenIndex168
					if buffer[position] != rune('.') {
						goto l287
					}
					position++
					{
						position288, tokenIndex288 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l289
						}
						position++
						goto l288
					l289:
						position, tokenIndex = position288, tokenIndex288
						if buffer[position] != rune('T') {
							goto l287
						}
						position++
					}
				l288:
					{
						position290, tokenIndex290 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l291
						}
						position++
						goto l290
					l291:
						position, tokenIndex = position290, tokenIndex290
						if buffer[position] != rune('Y') {
							goto l287
						}
						position++
					}
				l290:
					{
						position292, tokenIndex292 := position, tokenIndex
						if buffer[position] != rune('p') {
							goto l293
						}
						position++
						goto l292
					l293:
						position, tokenIndex = position292, tokenIndex292
						if buffer[position] != rune('P') {
							goto l287
						}
						position++
					}
				l292:
					{
						position294, tokenIndex294 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l295
						}
						position++
						goto l294
					l295:
						position, tokenIndex = position294, tokenIndex294
						if buffer[position] != rune('E') {
							goto l287
						}
						position++
					}
				l294:
					goto l168
				l287:
					position, tokenIndex = position168, tokenIndex168
					if buffer[position] != rune('.') {
						goto l296
					}
					position++
					{
						position297, tokenIndex297 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l298
						}
						position++
						goto l297
					l298:
						position, tokenIndex = position297, tokenIndex297
						if buffer[position] != rune('U') {
							goto l296
						}
						position++
					}
				l297:
					{
						position299, tokenIndex299 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l300
						}
						position++
						goto l299
					l300:
						position, tokenIndex = position299, tokenIndex299
						if buffer[position] != rune('L') {
							goto l296
						}
						position++
					}
				l299:
					{
						position301, tokenIndex301 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l302
						}
						position++
						goto l301
					l302:
						position, tokenIndex = position301, tokenIndex301
						if buffer[position] != rune('E') {
							goto l296
						}
						position++
					}
				l301:
					{
						position303, tokenIndex303 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l304
						}
						position++
						goto l303
					l304:
						position, tokenIndex = position303, tokenIndex303
						if buffer[position] != rune('B') {
							goto l296
						}
						position++
					}
				l303:
					if buffer[position] != rune('1') {
						goto l296
					}
					position++
					if buffer[position] != rune('2') {
						goto l296
					}
					position++
					if buffer[position] != rune('8') {
						goto l296
					}
					position++
					goto l168
				l296:
					position, tokenIndex = position168, tokenIndex168
					if buffer[position] != rune('.') {
						goto l166
					}
					position++
					{
						position305, tokenIndex305 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l306
						}
						position++
						goto l305
					l306:
						position, tokenIndex = position305, tokenIndex305
						if buffer[position] != rune('S') {
							goto l166
						}
						position++
					}
				l305:
					{
						position307, tokenIndex307 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l308
						}
						position++
						goto l307
					l308:
						position, tokenIndex = position307, tokenIndex307
						if buffer[position] != rune('L') {
							goto l166
						}
						position++
					}
				l307:
					{
						position309, tokenIndex309 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l310
						}
						position++
						goto l309
					l310:
						position, tokenIndex = position309, tokenIndex309
						if buffer[position] != rune('E') {
							goto l166
						}
						position++
					}
				l309:
					{
						position311, tokenIndex311 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l312
						}
						position++
						goto l311
					l312:
						position, tokenIndex = position311, tokenIndex311
						if buffer[position] != rune('B') {
							goto l166
						}
						position++
					}
				l311:
					if buffer[position] != rune('1') {
						goto l166
					}
					position++
					if buffer[position] != rune('2') {
						goto l166
					}
					position++
					if buffer[position] != rune('8') {
						goto l166
					}
					position++
				}
			l168:
				add(ruleLabelContainingDirectiveName, position167)
			}
			return true
		l166:
			position, tokenIndex = position166, tokenIndex166
			return false
		},
		/* 15 SymbolArgs <- <(SymbolArg (WS? ',' WS? SymbolArg)*)> */
		func() bool {
			position313, tokenIndex313 := position, tokenIndex
			{
				position314 := position
				if !_rules[ruleSymbolArg]() {
					goto l313
				}
			l315:
				{
					position316, tokenIndex316 := position, tokenIndex
					{
						position317, tokenIndex317 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l317
						}
						goto l318
					l317:
						position, tokenIndex = position317, tokenIndex317
					}
				l318:
					if buffer[position] != rune(',') {
						goto l316
					}
					position++
					{
						position319, tokenIndex319 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l319
						}
						goto l320
					l319:
						position, tokenIndex = position319, tokenIndex319
					}
				l320:
					if !_rules[ruleSymbolArg]() {
						goto l316
					}
					goto l315
				l316:
					position, tokenIndex = position316, tokenIndex316
				}
				add(ruleSymbolArgs, position314)
			}
			return true
		l313:
			position, tokenIndex = position313, tokenIndex313
			return false
		},
		/* 16 SymbolArg <- <SymbolExpr> */
		func() bool {
			position321, tokenIndex321 := position, tokenIndex
			{
				position322 := position
				if !_rules[ruleSymbolExpr]() {
					goto l321
				}
				add(ruleSymbolArg, position322)
			}
			return true
		l321:
			position, tokenIndex = position321, tokenIndex321
			return false
		},
		/* 17 SymbolExpr <- <(SymbolAtom (WS? SymbolOperator WS? SymbolExpr)?)> */
		func() bool {
			position323, tokenIndex323 := position, tokenIndex
			{
				position324 := position
				if !_rules[ruleSymbolAtom]() {
					goto l323
				}
				{
					position325, tokenIndex325 := position, tokenIndex
					{
						position327, tokenIndex327 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l327
						}
						goto l328
					l327:
						position, tokenIndex = position327, tokenIndex327
					}
				l328:
					if !_rules[ruleSymbolOperator]() {
						goto l325
					}
					{
						position329, tokenIndex329 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l329
						}
						goto l330
					l329:
						position, tokenIndex = position329, tokenIndex329
					}
				l330:
					if !_rules[ruleSymbolExpr]() {
						goto l325
					}
					goto l326
				l325:
					position, tokenIndex = position325, tokenIndex325
				}
			l326:
				add(ruleSymbolExpr, position324)
			}
			return true
		l323:
			position, tokenIndex = position323, tokenIndex323
			return false
		},
		/* 18 SymbolAtom <- <(Offset / SymbolType / LocalLabelRef / (LocalSymbol TCMarker?) / (SymbolName Offset) / (SymbolName TCMarker?) / Dot / (OpenParen WS? SymbolExpr WS? CloseParen))> */
		func() bool {
			position331, tokenIndex331 := position, tokenIndex
			{
				position332 := position
				{
					position333, tokenIndex333 := position, tokenIndex
					if !_rules[ruleOffset]() {
						goto l334
					}
					goto l333
				l334:
					position, tokenIndex = position333, tokenIndex333
					if !_rules[ruleSymbolType]() {
						goto l335
					}
					goto l333
				l335:
					position, tokenIndex = position333, tokenIndex333
					if !_rules[ruleLocalLabelRef]() {
						goto l336
					}
					goto l333
				l336:
					position, tokenIndex = position333, tokenIndex333
					if !_rules[ruleLocalSymbol]() {
						goto l337
					}
					{
						position338, tokenIndex338 := position, tokenIndex
						if !_rules[ruleTCMarker]() {
							goto l338
						}
						goto l339
					l338:
						position, tokenIndex = position338, tokenIndex338
					}
				l339:
					goto l333
				l337:
					position, tokenIndex = position333, tokenIndex333
					if !_rules[ruleSymbolName]() {
						goto l340
					}
					if !_rules[ruleOffset]() {
						goto l340
					}
					goto l333
				l340:
					position, tokenIndex = position333, tokenIndex333
					if !_rules[ruleSymbolName]() {
						goto l341
					}
					{
						position342, tokenIndex342 := position, tokenIndex
						if !_rules[ruleTCMarker]() {
							goto l342
						}
						goto l343
					l342:
						position, tokenIndex = position342, tokenIndex342
					}
				l343:
					goto l333
				l341:
					position, tokenIndex = position333, tokenIndex333
					if !_rules[ruleDot]() {
						goto l344
					}
					goto l333
				l344:
					position, tokenIndex = position333, tokenIndex333
					if !_rules[ruleOpenParen]() {
						goto l331
					}
					{
						position345, tokenIndex345 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l345
						}
						goto l346
					l345:
						position, tokenIndex = position345, tokenIndex345
					}
				l346:
					if !_rules[ruleSymbolExpr]() {
						goto l331
					}
					{
						position347, tokenIndex347 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l347
						}
						goto l348
					l347:
						position, tokenIndex = position347, tokenIndex347
					}
				l348:
					if !_rules[ruleCloseParen]() {
						goto l331
					}
				}
			l333:
				add(ruleSymbolAtom, position332)
			}
			return true
		l331:
			position, tokenIndex = position331, tokenIndex331
			return false
		},
		/* 19 SymbolOperator <- <('+' / '-' / '|' / ('<' '<') / ('>' '>'))> */
		func() bool {
			position349, tokenIndex349 := position, tokenIndex
			{
				position350 := position
				{
					position351, tokenIndex351 := position, tokenIndex
					if buffer[position] != rune('+') {
						goto l352
					}
					position++
					goto l351
				l352:
					position, tokenIndex = position351, tokenIndex351
					if buffer[position] != rune('-') {
						goto l353
					}
					position++
					goto l351
				l353:
					position, tokenIndex = position351, tokenIndex351
					if buffer[position] != rune('|') {
						goto l354
					}
					position++
					goto l351
				l354:
					position, tokenIndex = position351, tokenIndex351
					if buffer[position] != rune('<') {
						goto l355
					}
					position++
					if buffer[position] != rune('<') {
						goto l355
					}
					position++
					goto l351
				l355:
					position, tokenIndex = position351, tokenIndex351
					if buffer[position] != rune('>') {
						goto l349
					}
					position++
					if buffer[position] != rune('>') {
						goto l349
					}
					position++
				}
			l351:
				add(ruleSymbolOperator, position350)
			}
			return true
		l349:
			position, tokenIndex = position349, tokenIndex349
			return false
		},
		/* 20 OpenParen <- <'('> */
		func() bool {
			position356, tokenIndex356 := position, tokenIndex
			{
				position357 := position
				if buffer[position] != rune('(') {
					goto l356
				}
				position++
				add(ruleOpenParen, position357)
			}
			return true
		l356:
			position, tokenIndex = position356, tokenIndex356
			return false
		},
		/* 21 CloseParen <- <')'> */
		func() bool {
			position358, tokenIndex358 := position, tokenIndex
			{
				position359 := position
				if buffer[position] != rune(')') {
					goto l358
				}
				position++
				add(ruleCloseParen, position359)
			}
			return true
		l358:
			position, tokenIndex = position358, tokenIndex358
			return false
		},
		/* 22 SymbolType <- <(('@' / '%') (('f' 'u' 'n' 'c' 't' 'i' 'o' 'n') / ('o' 'b' 'j' 'e' 'c' 't')))> */
		func() bool {
			position360, tokenIndex360 := position, tokenIndex
			{
				position361 := position
				{
					position362, tokenIndex362 := position, tokenIndex
					if buffer[position] != rune('@') {
						goto l363
					}
					position++
					goto l362
				l363:
					position, tokenIndex = position362, tokenIndex362
					if buffer[position] != rune('%') {
						goto l360
					}
					position++
				}
			l362:
				{
					position364, tokenIndex364 := position, tokenIndex
					if buffer[position] != rune('f') {
						goto l365
					}
					position++
					if buffer[position] != rune('u') {
						goto l365
					}
					position++
					if buffer[position] != rune('n') {
						goto l365
					}
					position++
					if buffer[position] != rune('c') {
						goto l365
					}
					position++
					if buffer[position] != rune('t') {
						goto l365
					}
					position++
					if buffer[position] != rune('i') {
						goto l365
					}
					position++
					if buffer[position] != rune('o') {
						goto l365
					}
					position++
					if buffer[position] != rune('n') {
						goto l365
					}
					position++
					goto l364
				l365:
					position, tokenIndex = position364, tokenIndex364
					if buffer[position] != rune('o') {
						goto l360
					}
					position++
					if buffer[position] != rune('b') {
						goto l360
					}
					position++
					if buffer[position] != rune('j') {
						goto l360
					}
					position++
					if buffer[position] != rune('e') {
						goto l360
					}
					position++
					if buffer[position] != rune('c') {
						goto l360
					}
					position++
					if buffer[position] != rune('t') {
						goto l360
					}
					position++
				}
			l364:
				add(ruleSymbolType, position361)
			}
			return true
		l360:
			position, tokenIndex = position360, tokenIndex360
			return false
		},
		/* 23 Dot <- <'.'> */
		func() bool {
			position366, tokenIndex366 := position, tokenIndex
			{
				position367 := position
				if buffer[position] != rune('.') {
					goto l366
				}
				position++
				add(ruleDot, position367)
			}
			return true
		l366:
			position, tokenIndex = position366, tokenIndex366
			return false
		},
		/* 24 TCMarker <- <('[' 'T' 'C' ']')> */
		func() bool {
			position368, tokenIndex368 := position, tokenIndex
			{
				position369 := position
				if buffer[position] != rune('[') {
					goto l368
				}
				position++
				if buffer[position] != rune('T') {
					goto l368
				}
				position++
				if buffer[position] != rune('C') {
					goto l368
				}
				position++
				if buffer[position] != rune(']') {
					goto l368
				}
				position++
				add(ruleTCMarker, position369)
			}
			return true
		l368:
			position, tokenIndex = position368, tokenIndex368
			return false
		},
		/* 25 EscapedChar <- <('\\' .)> */
		func() bool {
			position370, tokenIndex370 := position, tokenIndex
			{
				position371 := position
				if buffer[position] != rune('\\') {
					goto l370
				}
				position++
				if !matchDot() {
					goto l370
				}
				add(ruleEscapedChar, position371)
			}
			return true
		l370:
			position, tokenIndex = position370, tokenIndex370
			return false
		},
		/* 26 WS <- <(' ' / '\t')+> */
		func() bool {
			position372, tokenIndex372 := position, tokenIndex
			{
				position373 := position
				{
					position376, tokenIndex376 := position, tokenIndex
					if buffer[position] != rune(' ') {
						goto l377
					}
					position++
					goto l376
				l377:
					position, tokenIndex = position376, tokenIndex376
					if buffer[position] != rune('\t') {
						goto l372
					}
					position++
				}
			l376:
			l374:
				{
					position375, tokenIndex375 := position, tokenIndex
					{
						position378, tokenIndex378 := position, tokenIndex
						if buffer[position] != rune(' ') {
							goto l379
						}
						position++
						goto l378
					l379:
						position, tokenIndex = position378, tokenIndex378
						if buffer[position] != rune('\t') {
							goto l375
						}
						position++
					}
				l378:
					goto l374
				l375:
					position, tokenIndex = position375, tokenIndex375
				}
				add(ruleWS, position373)
			}
			return true
		l372:
			position, tokenIndex = position372, tokenIndex372
			return false
		},
		/* 27 Comment <- <((('/' '/') / '#') (!'\n' .)*)> */
		func() bool {
			position380, tokenIndex380 := position, tokenIndex
			{
				position381 := position
				{
					position382, tokenIndex382 := position, tokenIndex
					if buffer[position] != rune('/') {
						goto l383
					}
					position++
					if buffer[position] != rune('/') {
						goto l383
					}
					position++
					goto l382
				l383:
					position, tokenIndex = position382, tokenIndex382
					if buffer[position] != rune('#') {
						goto l380
					}
					position++
				}
			l382:
			l384:
				{
					position385, tokenIndex385 := position, tokenIndex
					{
						position386, tokenIndex386 := position, tokenIndex
						if buffer[position] != rune('\n') {
							goto l386
						}
						position++
						goto l385
					l386:
						position, tokenIndex = position386, tokenIndex386
					}
					if !matchDot() {
						goto l385
					}
					goto l384
				l385:
					position, tokenIndex = position385, tokenIndex385
				}
				add(ruleComment, position381)
			}
			return true
		l380:
			position, tokenIndex = position380, tokenIndex380
			return false
		},
		/* 28 Label <- <((LocalSymbol / LocalLabel / SymbolName) ':')> */
		func() bool {
			position387, tokenIndex387 := position, tokenIndex
			{
				position388 := position
				{
					position389, tokenIndex389 := position, tokenIndex
					if !_rules[ruleLocalSymbol]() {
						goto l390
					}
					goto l389
				l390:
					position, tokenIndex = position389, tokenIndex389
					if !_rules[ruleLocalLabel]() {
						goto l391
					}
					goto l389
				l391:
					position, tokenIndex = position389, tokenIndex389
					if !_rules[ruleSymbolName]() {
						goto l387
					}
				}
			l389:
				if buffer[position] != rune(':') {
					goto l387
				}
				position++
				add(ruleLabel, position388)
			}
			return true
		l387:
			position, tokenIndex = position387, tokenIndex387
			return false
		},
		/* 29 SymbolName <- <(([a-z] / [A-Z] / '.' / '_') ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]) / '$' / '_')*)> */
		func() bool {
			position392, tokenIndex392 := position, tokenIndex
			{
				position393 := position
				{
					position394, tokenIndex394 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l395
					}
					position++
					goto l394
				l395:
					position, tokenIndex = position394, tokenIndex394
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l396
					}
					position++
					goto l394
				l396:
					position, tokenIndex = position394, tokenIndex394
					if buffer[position] != rune('.') {
						goto l397
					}
					position++
					goto l394
				l397:
					position, tokenIndex = position394, tokenIndex394
					if buffer[position] != rune('_') {
						goto l392
					}
					position++
				}
			l394:
			l398:
				{
					position399, tokenIndex399 := position, tokenIndex
					{
						position400, tokenIndex400 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l401
						}
						position++
						goto l400
					l401:
						position, tokenIndex = position400, tokenIndex400
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l402
						}
						position++
						goto l400
					l402:
						position, tokenIndex = position400, tokenIndex400
						if buffer[position] != rune('.') {
							goto l403
						}
						position++
						goto l400
					l403:
						position, tokenIndex = position400, tokenIndex400
						{
							position405, tokenIndex405 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l406
							}
							position++
							goto l405
						l406:
							position, tokenIndex = position405, tokenIndex405
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l404
							}
							position++
						}
					l405:
						goto l400
					l404:
						position, tokenIndex = position400, tokenIndex400
						if buffer[position] != rune('$') {
							goto l407
						}
						position++
						goto l400
					l407:
						position, tokenIndex = position400, tokenIndex400
						if buffer[position] != rune('_') {
							goto l399
						}
						position++
					}
				l400:
					goto l398
				l399:
					position, tokenIndex = position399, tokenIndex399
				}
				add(ruleSymbolName, position393)
			}
			return true
		l392:
			position, tokenIndex = position392, tokenIndex392
			return false
		},
		/* 30 LocalSymbol <- <('.' 'L' ([a-z] / [A-Z] / ([a-z] / [A-Z]) / '.' / ([0-9] / [0-9]) / '$' / '_')+)> */
		func() bool {
			position408, tokenIndex408 := position, tokenIndex
			{
				position409 := position
				if buffer[position] != rune('.') {
					goto l408
				}
				position++
				if buffer[position] != rune('L') {
					goto l408
				}
				position++
				{
					position412, tokenIndex412 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l413
					}
					position++
					goto l412
				l413:
					position, tokenIndex = position412, tokenIndex412
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l414
					}
					position++
					goto l412
				l414:
					position, tokenIndex = position412, tokenIndex412
					{
						position416, tokenIndex416 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l417
						}
						position++
						goto l416
					l417:
						position, tokenIndex = position416, tokenIndex416
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l415
						}
						position++
					}
				l416:
					goto l412
				l415:
					position, tokenIndex = position412, tokenIndex412
					if buffer[position] != rune('.') {
						goto l418
					}
					position++
					goto l412
				l418:
					position, tokenIndex = position412, tokenIndex412
					{
						position420, tokenIndex420 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l421
						}
						position++
						goto l420
					l421:
						position, tokenIndex = position420, tokenIndex420
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l419
						}
						position++
					}
				l420:
					goto l412
				l419:
					position, tokenIndex = position412, tokenIndex412
					if buffer[position] != rune('$') {
						goto l422
					}
					position++
					goto l412
				l422:
					position, tokenIndex = position412, tokenIndex412
					if buffer[position] != rune('_') {
						goto l408
					}
					position++
				}
			l412:
			l410:
				{
					position411, tokenIndex411 := position, tokenIndex
					{
						position423, tokenIndex423 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l424
						}
						position++
						goto l423
					l424:
						position, tokenIndex = position423, tokenIndex423
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l425
						}
						position++
						goto l423
					l425:
						position, tokenIndex = position423, tokenIndex423
						{
							position427, tokenIndex427 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l428
							}
							position++
							goto l427
						l428:
							position, tokenIndex = position427, tokenIndex427
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l426
							}
							position++
						}
					l427:
						goto l423
					l426:
						position, tokenIndex = position423, tokenIndex423
						if buffer[position] != rune('.') {
							goto l429
						}
						position++
						goto l423
					l429:
						position, tokenIndex = position423, tokenIndex423
						{
							position431, tokenIndex431 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l432
							}
							position++
							goto l431
						l432:
							position, tokenIndex = position431, tokenIndex431
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l430
							}
							position++
						}
					l431:
						goto l423
					l430:
						position, tokenIndex = position423, tokenIndex423
						if buffer[position] != rune('$') {
							goto l433
						}
						position++
						goto l423
					l433:
						position, tokenIndex = position423, tokenIndex423
						if buffer[position] != rune('_') {
							goto l411
						}
						position++
					}
				l423:
					goto l410
				l411:
					position, tokenIndex = position411, tokenIndex411
				}
				add(ruleLocalSymbol, position409)
			}
			return true
		l408:
			position, tokenIndex = position408, tokenIndex408
			return false
		},
		/* 31 LocalLabel <- <([0-9] ([0-9] / '$')*)> */
		func() bool {
			position434, tokenIndex434 := position, tokenIndex
			{
				position435 := position
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l434
				}
				position++
			l436:
				{
					position437, tokenIndex437 := position, tokenIndex
					{
						position438, tokenIndex438 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l439
						}
						position++
						goto l438
					l439:
						position, tokenIndex = position438, tokenIndex438
						if buffer[position] != rune('$') {
							goto l437
						}
						position++
					}
				l438:
					goto l436
				l437:
					position, tokenIndex = position437, tokenIndex437
				}
				add(ruleLocalLabel, position435)
			}
			return true
		l434:
			position, tokenIndex = position434, tokenIndex434
			return false
		},
		/* 32 LocalLabelRef <- <([0-9] ([0-9] / '$')* ('b' / 'f'))> */
		func() bool {
			position440, tokenIndex440 := position, tokenIndex
			{
				position441 := position
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l440
				}
				position++
			l442:
				{
					position443, tokenIndex443 := position, tokenIndex
					{
						position444, tokenIndex444 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l445
						}
						position++
						goto l444
					l445:
						position, tokenIndex = position444, tokenIndex444
						if buffer[position] != rune('$') {
							goto l443
						}
						position++
					}
				l444:
					goto l442
				l443:
					position, tokenIndex = position443, tokenIndex443
				}
				{
					position446, tokenIndex446 := position, tokenIndex
					if buffer[position] != rune('b') {
						goto l447
					}
					position++
					goto l446
				l447:
					position, tokenIndex = position446, tokenIndex446
					if buffer[position] != rune('f') {
						goto l440
					}
					position++
				}
			l446:
				add(ruleLocalLabelRef, position441)
			}
			return true
		l440:
			position, tokenIndex = position440, tokenIndex440
			return false
		},
		/* 33 Instruction <- <(InstructionName (WS InstructionArg (WS? ','? WS? InstructionArg)*)?)> */
		func() bool {
			position448, tokenIndex448 := position, tokenIndex
			{
				position449 := position
				if !_rules[ruleInstructionName]() {
					goto l448
				}
				{
					position450, tokenIndex450 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l450
					}
					if !_rules[ruleInstructionArg]() {
						goto l450
					}
				l452:
					{
						position453, tokenIndex453 := position, tokenIndex
						{
							position454, tokenIndex454 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l454
							}
							goto l455
						l454:
							position, tokenIndex = position454, tokenIndex454
						}
					l455:
						{
							position456, tokenIndex456 := position, tokenIndex
							if buffer[position] != rune(',') {
								goto l456
							}
							position++
							goto l457
						l456:
							position, tokenIndex = position456, tokenIndex456
						}
					l457:
						{
							position458, tokenIndex458 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l458
							}
							goto l459
						l458:
							position, tokenIndex = position458, tokenIndex458
						}
					l459:
						if !_rules[ruleInstructionArg]() {
							goto l453
						}
						goto l452
					l453:
						position, tokenIndex = position453, tokenIndex453
					}
					goto l451
				l450:
					position, tokenIndex = position450, tokenIndex450
				}
			l451:
				add(ruleInstruction, position449)
			}
			return true
		l448:
			position, tokenIndex = position448, tokenIndex448
			return false
		},
		/* 34 InstructionName <- <(([a-z] / [A-Z]) ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]))* ('.' / '+' / '-')?)> */
		func() bool {
			position460, tokenIndex460 := position, tokenIndex
			{
				position461 := position
				{
					position462, tokenIndex462 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l463
					}
					position++
					goto l462
				l463:
					position, tokenIndex = position462, tokenIndex462
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l460
					}
					position++
				}
			l462:
			l464:
				{
					position465, tokenIndex465 := position, tokenIndex
					{
						position466, tokenIndex466 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l467
						}
						position++
						goto l466
					l467:
						position, tokenIndex = position466, tokenIndex466
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l468
						}
						position++
						goto l466
					l468:
						position, tokenIndex = position466, tokenIndex466
						if buffer[position] != rune('.') {
							goto l469
						}
						position++
						goto l466
					l469:
						position, tokenIndex = position466, tokenIndex466
						{
							position470, tokenIndex470 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l471
							}
							position++
							goto l470
						l471:
							position, tokenIndex = position470, tokenIndex470
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l465
							}
							position++
						}
					l470:
					}
				l466:
					goto l464
				l465:
					position, tokenIndex = position465, tokenIndex465
				}
				{
					position472, tokenIndex472 := position, tokenIndex
					{
						position474, tokenIndex474 := position, tokenIndex
						if buffer[position] != rune('.') {
							goto l475
						}
						position++
						goto l474
					l475:
						position, tokenIndex = position474, tokenIndex474
						if buffer[position] != rune('+') {
							goto l476
						}
						position++
						goto l474
					l476:
						position, tokenIndex = position474, tokenIndex474
						if buffer[position] != rune('-') {
							goto l472
						}
						position++
					}
				l474:
					goto l473
				l472:
					position, tokenIndex = position472, tokenIndex472
				}
			l473:
				add(ruleInstructionName, position461)
			}
			return true
		l460:
			position, tokenIndex = position460, tokenIndex460
			return false
		},
		/* 35 InstructionArg <- <(IndirectionIndicator? (ARMConstantTweak / RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / GOTLocation / GOTSymbolOffset / MemoryRef / AVX512Token))> */
		func() bool {
			position477, tokenIndex477 := position, tokenIndex
			{
				position478 := position
				{
					position479, tokenIndex479 := position, tokenIndex
					if !_rules[ruleIndirectionIndicator]() {
						goto l479
					}
					goto l480
				l479:
					position, tokenIndex = position479, tokenIndex479
				}
			l480:
				{
					position481, tokenIndex481 := position, tokenIndex
					if !_rules[ruleARMConstantTweak]() {
						goto l482
					}
					goto l481
				l482:
					position, tokenIndex = position481, tokenIndex481
					if !_rules[ruleRegisterOrConstant]() {
						goto l483
					}
					goto l481
				l483:
					position, tokenIndex = position481, tokenIndex481
					if !_rules[ruleLocalLabelRef]() {
						goto l484
					}
					goto l481
				l484:
					position, tokenIndex = position481, tokenIndex481
					if !_rules[ruleTOCRefHigh]() {
						goto l485
					}
					goto l481
				l485:
					position, tokenIndex = position481, tokenIndex481
					if !_rules[ruleTOCRefLow]() {
						goto l486
					}
					goto l481
				l486:
					position, tokenIndex = position481, tokenIndex481
					if !_rules[ruleGOTLocation]() {
						goto l487
					}
					goto l481
				l487:
					position, tokenIndex = position481, tokenIndex481
					if !_rules[ruleGOTSymbolOffset]() {
						goto l488
					}
					goto l481
				l488:
					position, tokenIndex = position481, tokenIndex481
					if !_rules[ruleMemoryRef]() {
						goto l489
					}
					goto l481
				l489:
					position, tokenIndex = position481, tokenIndex481
					if !_rules[ruleAVX512Token]() {
						goto l477
					}
				}
			l481:
				add(ruleInstructionArg, position478)
			}
			return true
		l477:
			position, tokenIndex = position477, tokenIndex477
			return false
		},
		/* 36 GOTLocation <- <('$' '_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '-' LocalSymbol)> */
		func() bool {
			position490, tokenIndex490 := position, tokenIndex
			{
				position491 := position
				if buffer[position] != rune('$') {
					goto l490
				}
				position++
				if buffer[position] != rune('_') {
					goto l490
				}
				position++
				if buffer[position] != rune('G') {
					goto l490
				}
				position++
				if buffer[position] != rune('L') {
					goto l490
				}
				position++
				if buffer[position] != rune('O') {
					goto l490
				}
				position++
				if buffer[position] != rune('B') {
					goto l490
				}
				position++
				if buffer[position] != rune('A') {
					goto l490
				}
				position++
				if buffer[position] != rune('L') {
					goto l490
				}
				position++
				if buffer[position] != rune('_') {
					goto l490
				}
				position++
				if buffer[position] != rune('O') {
					goto l490
				}
				position++
				if buffer[position] != rune('F') {
					goto l490
				}
				position++
				if buffer[position] != rune('F') {
					goto l490
				}
				position++
				if buffer[position] != rune('S') {
					goto l490
				}
				position++
				if buffer[position] != rune('E') {
					goto l490
				}
				position++
				if buffer[position] != rune('T') {
					goto l490
				}
				position++
				if buffer[position] != rune('_') {
					goto l490
				}
				position++
				if buffer[position] != rune('T') {
					goto l490
				}
				position++
				if buffer[position] != rune('A') {
					goto l490
				}
				position++
				if buffer[position] != rune('B') {
					goto l490
				}
				position++
				if buffer[position] != rune('L') {
					goto l490
				}
				position++
				if buffer[position] != rune('E') {
					goto l490
				}
				position++
				if buffer[position] != rune('_') {
					goto l490
				}
				position++
				if buffer[position] != rune('-') {
					goto l490
				}
				position++
				if !_rules[ruleLocalSymbol]() {
					goto l490
				}
				add(ruleGOTLocation, position491)
			}
			return true
		l490:
			position, tokenIndex = position490, tokenIndex490
			return false
		},
		/* 37 GOTSymbolOffset <- <(('$' SymbolName ('@' 'G' 'O' 'T') ('O' 'F' 'F')?) / (':' ('g' / 'G') ('o' / 'O') ('t' / 'T') ':' SymbolName))> */
		func() bool {
			position492, tokenIndex492 := position, tokenIndex
			{
				position493 := position
				{
					position494, tokenIndex494 := position, tokenIndex
					if buffer[position] != rune('$') {
						goto l495
					}
					position++
					if !_rules[ruleSymbolName]() {
						goto l495
					}
					if buffer[position] != rune('@') {
						goto l495
					}
					position++
					if buffer[position] != rune('G') {
						goto l495
					}
					position++
					if buffer[position] != rune('O') {
						goto l495
					}
					position++
					if buffer[position] != rune('T') {
						goto l495
					}
					position++
					{
						position496, tokenIndex496 := position, tokenIndex
						if buffer[position] != rune('O') {
							goto l496
						}
						position++
						if buffer[position] != rune('F') {
							goto l496
						}
						position++
						if buffer[position] != rune('F') {
							goto l496
						}
						position++
						goto l497
					l496:
						position, tokenIndex = position496, tokenIndex496
					}
				l497:
					goto l494
				l495:
					position, tokenIndex = position494, tokenIndex494
					if buffer[position] != rune(':') {
						goto l492
					}
					position++
					{
						position498, tokenIndex498 := position, tokenIndex
						if buffer[position] != rune('g') {
							goto l499
						}
						position++
						goto l498
					l499:
						position, tokenIndex = position498, tokenIndex498
						if buffer[position] != rune('G') {
							goto l492
						}
						position++
					}
				l498:
					{
						position500, tokenIndex500 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l501
						}
						position++
						goto l500
					l501:
						position, tokenIndex = position500, tokenIndex500
						if buffer[position] != rune('O') {
							goto l492
						}
						position++
					}
				l500:
					{
						position502, tokenIndex502 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l503
						}
						position++
						goto l502
					l503:
						position, tokenIndex = position502, tokenIndex502
						if buffer[position] != rune('T') {
							goto l492
						}
						position++
					}
				l502:
					if buffer[position] != rune(':') {
						goto l492
					}
					position++
					if !_rules[ruleSymbolName]() {
						goto l492
					}
				}
			l494:
				add(ruleGOTSymbolOffset, position493)
			}
			return true
		l492:
			position, tokenIndex = position492, tokenIndex492
			return false
		},
		/* 38 AVX512Token <- <(WS? '{' '%'? ([0-9] / [a-z])* '}')> */
		func() bool {
			position504, tokenIndex504 := position, tokenIndex
			{
				position505 := position
				{
					position506, tokenIndex506 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l506
					}
					goto l507
				l506:
					position, tokenIndex = position506, tokenIndex506
				}
			l507:
				if buffer[position] != rune('{') {
					goto l504
				}
				position++
				{
					position508, tokenIndex508 := position, tokenIndex
					if buffer[position] != rune('%') {
						goto l508
					}
					position++
					goto l509
				l508:
					position, tokenIndex = position508, tokenIndex508
				}
			l509:
			l510:
				{
					position511, tokenIndex511 := position, tokenIndex
					{
						position512, tokenIndex512 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l513
						}
						position++
						goto l512
					l513:
						position, tokenIndex = position512, tokenIndex512
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l511
						}
						position++
					}
				l512:
					goto l510
				l511:
					position, tokenIndex = position511, tokenIndex511
				}
				if buffer[position] != rune('}') {
					goto l504
				}
				position++
				add(ruleAVX512Token, position505)
			}
			return true
		l504:
			position, tokenIndex = position504, tokenIndex504
			return false
		},
		/* 39 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */
		func() bool {
			position514, tokenIndex514 := position, tokenIndex
			{
				position515 := position
				if buffer[position] != rune('.') {
					goto l514
				}
				position++
				if buffer[position] != rune('T') {
					goto l514
				}
				position++
				if buffer[position] != rune('O') {
					goto l514
				}
				position++
				if buffer[position] != rune('C') {
					goto l514
				}
				position++
				if buffer[position] != rune('.') {
					goto l514
				}
				position++
				if buffer[position] != rune('-') {
					goto l514
				}
				position++
				{
					position516, tokenIndex516 := position, tokenIndex
					if buffer[position] != rune('0') {
						goto l517
					}
					position++
					if buffer[position] != rune('b') {
						goto l517
					}
					position++
					goto l516
				l517:
					position, tokenIndex = position516, tokenIndex516
					if buffer[position] != rune('.') {
						goto l514
					}
					position++
					if buffer[position] != rune('L') {
						goto l514
					}
					position++
					{
						position520, tokenIndex520 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l521
						}
						position++
						goto l520
					l521:
						position, tokenIndex = position520, tokenIndex520
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l522
						}
						position++
						goto l520
					l522:
						position, tokenIndex = position520, tokenIndex520
						if buffer[position] != rune('_') {
							goto l523
						}
						position++
						goto l520
					l523:
						position, tokenIndex = position520, tokenIndex520
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l514
						}
						position++
					}
				l520:
				l518:
					{
						position519, tokenIndex519 := position, tokenIndex
						{
							position524, tokenIndex524 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l525
							}
							position++
							goto l524
						l525:
							position, tokenIndex = position524, tokenIndex524
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l526
							}
							position++
							goto l524
						l526:
							position, tokenIndex = position524, tokenIndex524
							if buffer[position] != rune('_') {
								goto l527
							}
							position++
							goto l524
						l527:
							position, tokenIndex = position524, tokenIndex524
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l519
							}
							position++
						}
					l524:
						goto l518
					l519:
						position, tokenIndex = position519, tokenIndex519
					}
				}
			l516:
				if buffer[position] != rune('@') {
					goto l514
				}
				position++
				{
					position528, tokenIndex528 := position, tokenIndex
					if buffer[position] != rune('h') {
						goto l529
					}
					position++
					goto l528
				l529:
					position, tokenIndex = position528, tokenIndex528
					if buffer[position] != rune('H') {
						goto l514
					}
					position++
				}
			l528:
				{
					position530, tokenIndex530 := position, tokenIndex
					if buffer[position] != rune('a') {
						goto l531
					}
					position++
					goto l530
				l531:
					position, tokenIndex = position530, tokenIndex530
					if buffer[position] != rune('A') {
						goto l514
					}
					position++
				}
			l530:
				add(ruleTOCRefHigh, position515)
			}
			return true
		l514:
			position, tokenIndex = position514, tokenIndex514
			return false
		},
		/* 40 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */
		func() bool {
			position532, tokenIndex532 := position, tokenIndex
			{
				position533 := position
				if buffer[position] != rune('.') {
					goto l532
				}
				position++
				if buffer[position] != rune('T') {
					goto l532
				}
				position++
				if buffer[position] != rune('O') {
					goto l532
				}
				position++
				if buffer[position] != rune('C') {
					goto l532
				}
				position++
				if buffer[position] != rune('.') {
					goto l532
				}
				position++
				if buffer[position] != rune('-') {
					goto l532
				}
				position++
				{
					position534, tokenIndex534 := position, tokenIndex
					if buffer[position] != rune('0') {
						goto l535
					}
					position++
					if buffer[position] != rune('b') {
						goto l535
					}
					position++
					goto l534
				l535:
					position, tokenIndex = position534, tokenIndex534
					if buffer[position] != rune('.') {
						goto l532
					}
					position++
					if buffer[position] != rune('L') {
						goto l532
					}
					position++
					{
						position538, tokenIndex538 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l539
						}
						position++
						goto l538
					l539:
						position, tokenIndex = position538, tokenIndex538
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l540
						}
						position++
						goto l538
					l540:
						position, tokenIndex = position538, tokenIndex538
						if buffer[position] != rune('_') {
							goto l541
						}
						position++
						goto l538
					l541:
						position, tokenIndex = position538, tokenIndex538
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l532
						}
						position++
					}
				l538:
				l536:
					{
						position537, tokenIndex537 := position, tokenIndex
						{
							position542, tokenIndex542 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l543
							}
							position++
							goto l542
						l543:
							position, tokenIndex = position542, tokenIndex542
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l544
							}
							position++
							goto l542
						l544:
							position, tokenIndex = position542, tokenIndex542
							if buffer[position] != rune('_') {
								goto l545
							}
							position++
							goto l542
						l545:
							position, tokenIndex = position542, tokenIndex542
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l537
							}
							position++
						}
					l542:
						goto l536
					l537:
						position, tokenIndex = position537, tokenIndex537
					}
				}
			l534:
				if buffer[position] != rune('@') {
					goto l532
				}
				position++
				{
					position546, tokenIndex546 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l547
					}
					position++
					goto l546
				l547:
					position, tokenIndex = position546, tokenIndex546
					if buffer[position] != rune('L') {
						goto l532
					}
					position++
				}
			l546:
				add(ruleTOCRefLow, position533)
			}
			return true
		l532:
			position, tokenIndex = position532, tokenIndex532
			return false
		},
		/* 41 IndirectionIndicator <- <'*'> */
		func() bool {
			position548, tokenIndex548 := position, tokenIndex
			{
				position549 := position
				if buffer[position] != rune('*') {
					goto l548
				}
				position++
				add(ruleIndirectionIndicator, position549)
			}
			return true
		l548:
			position, tokenIndex = position548, tokenIndex548
			return false
		},
		/* 42 RegisterOrConstant <- <((('%' ([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))*) / ('$' [0-9]+ WS? '*' WS? '(' [0-9]+ WS? '-' WS? [0-9]+ ')') / ('$'? ((Offset Offset) / Offset)) / ('#' Offset ('*' [0-9]+ ('-' [0-9] [0-9]*)?)?) / ('#' '~'? '(' [0-9] WS? ('<' '<') WS? [0-9] [0-9]? ')') / (('#' / '$') '~'? ('0' 'x')? ([0-9] / [0-9] / ([a-f] / [A-F]))+) / ('$' '(' '-' [0-9]+ ')') / ('#' '(' [0-9]+ ')') / ARMRegister) !('f' / 'b' / ':' / '(' / '+' / '-'))> */
		func() bool {
			position550, tokenIndex550 := position, tokenIndex
			{
				position551 := position
				{
					position552, tokenIndex552 := position, tokenIndex
					if buffer[position] != rune('%') {
						goto l553
					}
					position++
					{
						position554, tokenIndex554 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l555
						}
						position++
						goto l554
					l555:
						position, tokenIndex = position554, tokenIndex554
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l553
						}
						position++
					}
				l554:
				l556:
					{
						position557, tokenIndex557 := position, tokenIndex
						{
							position558, tokenIndex558 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l559
							}
							position++
							goto l558
						l559:
							position, tokenIndex = position558, tokenIndex558
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l560
							}
							position++
							goto l558
						l560:
							position, tokenIndex = position558, tokenIndex558
							{
								position561, tokenIndex561 := position, tokenIndex
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l562
								}
								position++
								goto l561
							l562:
								position, tokenIndex = position561, tokenIndex561
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l557
								}
								position++
							}
						l561:
						}
					l558:
						goto l556
					l557:
						position, tokenIndex = position557, tokenIndex557
					}
					goto l552
				l553:
					position, tokenIndex = position552, tokenIndex552
					if buffer[position] != rune('$') {
						goto l563
					}
					position++
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l563
					}
					position++
				l564:
					{
						position565, tokenIndex565 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l565
						}
						position++
						goto l564
					l565:
						position, tokenIndex = position565, tokenIndex565
					}
					{
						position566, tokenIndex566 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l566
						}
						goto l567
					l566:
						position, tokenIndex = position566, tokenIndex566
					}
				l567:
					if buffer[position] != rune('*') {
						goto l563
					}
					position++
					{
						position568, tokenIndex568 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l568
						}
						goto l569
					l568:
						position, tokenIndex = position568, tokenIndex568
					}
				l569:
					if buffer[position] != rune('(') {
						goto l563
					}
					position++
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l563
					}
					position++
				l570:
					{
						position571, tokenIndex571 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l571
						}
						position++
						goto l570
					l571:
						position, tokenIndex = position571, tokenIndex571
					}
					{
						position572, tokenIndex572 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l572
						}
						goto l573
					l572:
						position, tokenIndex = position572, tokenIndex572
					}
				l573:
					if buffer[position] != rune('-') {
						goto l563
					}
					position++
					{
						position574, tokenIndex574 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l574
						}
						goto l575
					l574:
						position, tokenIndex = position574, tokenIndex574
					}
				l575:
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l563
					}
					position++
				l576:
					{
						position577, tokenIndex577 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l577
						}
						position++
						goto l576
					l577:
						position, tokenIndex = position577, tokenIndex577
					}
					if buffer[position] != rune(')') {
						goto l563
					}
					position++
					goto l552
				l563:
					position, tokenIndex = position552, tokenIndex552
					{
						position579, tokenIndex579 := position, tokenIndex
						if buffer[position] != rune('$') {
							goto l579
						}
						position++
						goto l580
					l579:
						position, tokenIndex = position579, tokenIndex579
					}
				l580:
					{
						position581, tokenIndex581 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l582
						}
						if !_rules[ruleOffset]() {
							goto l582
						}
						goto l581
					l582:
						position, tokenIndex = position581, tokenIndex581
						if !_rules[ruleOffset]() {
							goto l578
						}
					}
				l581:
					goto l552
				l578:
					position, tokenIndex = position552, tokenIndex552
					if buffer[position] != rune('#') {
						goto l583
					}
					position++
					if !_rules[ruleOffset]() {
						goto l583
					}
					{
						position584, tokenIndex584 := position, tokenIndex
						if buffer[position] != rune('*') {
							goto l584
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l584
						}
						position++
					l586:
						{
							position587, tokenIndex587 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l587
							}
							position++
							goto l586
						l587:
							position, tokenIndex = position587, tokenIndex587
						}
						{
							position588, tokenIndex588 := position, tokenIndex
							if buffer[position] != rune('-') {
								goto l588
							}
							position++
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l588
							}
							position++
						l590:
							{
								position591, tokenIndex591 := position, tokenIndex
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l591
								}
								position++
								goto l590
							l591:
								position, tokenIndex = position591, tokenIndex591
							}
							goto l589
						l588:
							position, tokenIndex = position588, tokenIndex588
						}
					l589:
						goto l585
					l584:
						position, tokenIndex = position584, tokenIndex584
					}
				l585:
					goto l552
				l583:
					position, tokenIndex = position552, tokenIndex552
					if buffer[position] != rune('#') {
						goto l592
					}
					position++
					{
						position593, tokenIndex593 := position, tokenIndex
						if buffer[position] != rune('~') {
							goto l593
						}
						position++
						goto l594
					l593:
						position, tokenIndex = position593, tokenIndex593
					}
				l594:
					if buffer[position] != rune('(') {
						goto l592
					}
					position++
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l592
					}
					position++
					{
						position595, tokenIndex595 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l595
						}
						goto l596
					l595:
						position, tokenIndex = position595, tokenIndex595
					}
				l596:
					if buffer[position] != rune('<') {
						goto l592
					}
					position++
					if buffer[position] != rune('<') {
						goto l592
					}
					position++
					{
						position597, tokenIndex597 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l597
						}
						goto l598
					l597:
						position, tokenIndex = position597, tokenIndex597
					}
				l598:
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l592
					}
					position++
					{
						position599, tokenIndex599 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l599
						}
						position++
						goto l600
					l599:
						position, tokenIndex = position599, tokenIndex599
					}
				l600:
					if buffer[position] != rune(')') {
						goto l592
					}
					position++
					goto l552
				l592:
					position, tokenIndex = position552, tokenIndex552
					{
						position602, tokenIndex602 := position, tokenIndex
						if buffer[position] != rune('#') {
							goto l603
						}
						position++
						goto l602
					l603:
						position, tokenIndex = position602, tokenIndex602
						if buffer[position] != rune('$') {
							goto l601
						}
						position++
					}
				l602:
					{
						position604, tokenIndex604 := position, tokenIndex
						if buffer[position] != rune('~') {
							goto l604
						}
						position++
						goto l605
					l604:
						position, tokenIndex = position604, tokenIndex604
					}
				l605:
					{
						position606, tokenIndex606 := position, tokenIndex
						if buffer[position] != rune('0') {
							goto l606
						}
						position++
						if buffer[position] != rune('x') {
							goto l606
						}
						position++
						goto l607
					l606:
						position, tokenIndex = position606, tokenIndex606
					}
				l607:
					{
						position610, tokenIndex610 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l611
						}
						position++
						goto l610
					l611:
						position, tokenIndex = position610, tokenIndex610
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l612
						}
						position++
						goto l610
					l612:
						position, tokenIndex = position610, tokenIndex610
						{
							position613, tokenIndex613 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('f') {
								goto l614
							}
							position++
							goto l613
						l614:
							position, tokenIndex = position613, tokenIndex613
							if c := buffer[position]; c < rune('A') || c > rune('F') {
								goto l601
							}
							position++
						}
					l613:
					}
				l610:
				l608:
					{
						position609, tokenIndex609 := position, tokenIndex
						{
							position615, tokenIndex615 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l616
							}
							position++
							goto l615
						l616:
							position, tokenIndex = position615, tokenIndex615
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l617
							}
							position++
							goto l615
						l617:
							position, tokenIndex = position615, tokenIndex615
							{
								position618, tokenIndex618 := position, tokenIndex
								if c := buffer[position]; c < rune('a') || c > rune('f') {
									goto l619
								}
								position++
								goto l618
							l619:
								position, tokenIndex = position618, tokenIndex618
								if c := buffer[position]; c < rune('A') || c > rune('F') {
									goto l609
								}
								position++
							}
						l618:
						}
					l615:
						goto l608
					l609:
						position, tokenIndex = position609, tokenIndex609
					}
					goto l552
				l601:
					position, tokenIndex = position552, tokenIndex552
					if buffer[position] != rune('$') {
						goto l620
					}
					position++
					if buffer[position] != rune('(') {
						goto l620
					}
					position++
					if buffer[position] != rune('-') {
						goto l620
					}
					position++
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l620
					}
					position++
				l621:
					{
						position622, tokenIndex622 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l622
						}
						position++
						goto l621
					l622:
						position, tokenIndex = position622, tokenIndex622
					}
					if buffer[position] != rune(')') {
						goto l620
					}
					position++
					goto l552
				l620:
					position, tokenIndex = position552, tokenIndex552
					if buffer[position] != rune('#') {
						goto l623
					}
					position++
					if buffer[position] != rune('(') {
						goto l623
					}
					position++
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l623
					}
					position++
				l624:
					{
						position625, tokenIndex625 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l625
						}
						position++
						goto l624
					l625:
						position, tokenIndex = position625, tokenIndex625
					}
					if buffer[position] != rune(')') {
						goto l623
					}
					position++
					goto l552
				l623:
					position, tokenIndex = position552, tokenIndex552
					if !_rules[ruleARMRegister]() {
						goto l550
					}
				}
			l552:
				{
					position626, tokenIndex626 := position, tokenIndex
					{
						position627, tokenIndex627 := position, tokenIndex
						if buffer[position] != rune('f') {
							goto l628
						}
						position++
						goto l627
					l628:
						position, tokenIndex = position627, tokenIndex627
						if buffer[position] != rune('b') {
							goto l629
						}
						position++
						goto l627
					l629:
						position, tokenIndex = position627, tokenIndex627
						if buffer[position] != rune(':') {
							goto l630
						}
						position++
						goto l627
					l630:
						position, tokenIndex = position627, tokenIndex627
						if buffer[position] != rune('(') {
							goto l631
						}
						position++
						goto l627
					l631:
						position, tokenIndex = position627, tokenIndex627
						if buffer[position] != rune('+') {
							goto l632
						}
						position++
						goto l627
					l632:
						position, tokenIndex = position627, tokenIndex627
						if buffer[position] != rune('-') {
							goto l626
						}
						position++
					}
				l627:
					goto l550
				l626:
					position, tokenIndex = position626, tokenIndex626
				}
				add(ruleRegisterOrConstant, position551)
			}
			return true
		l550:
			position, tokenIndex = position550, tokenIndex550
			return false
		},
		/* 43 ARMConstantTweak <- <((((('u' / 's') (('x' / 'X') ('t' / 'T')) ('x' / 'w' / 'h' / 'b')) / (((('l' / 'L') ('s' / 'S') ('l' / 'L')) / (('l' / 'L') ('s' / 'S') ('r' / 'R')) / (('r' / 'R') ('o' / 'O') ('r' / 'R')) / (('r' / 'R') ('o' / 'O') ('l' / 'L')) / (('a' / 'A') ('s' / 'S') ('r' / 'R')) / (('a' / 'A') ('s' / 'S') ('l' / 'L')) / (('m' / 'M') ('s' / 'S') ('l' / 'L'))) !([A-Z] / [a-z] / [0-9] / '_'))) (WS '#'? Offset)?) / (('m' / 'M') ('u' / 'U') ('l' / 'L') ' ' ('v' / 'V') ('l' / 'L')))> */
		func() bool {
			position633, tokenIndex633 := position, tokenIndex
			{
				position634 := position
				{
					position635, tokenIndex635 := position, tokenIndex
					{
						position637, tokenIndex637 := position, tokenIndex
						{
							position639, tokenIndex639 := position, tokenIndex
							if buffer[position] != rune('u') {
								goto l640
							}
							position++
							goto l639
						l640:
							position, tokenIndex = position639, tokenIndex639
							if buffer[position] != rune('s') {
								goto l638
							}
							position++
						}
					l639:
						{
							position641, tokenIndex641 := position, tokenIndex
							if buffer[position] != rune('x') {
								goto l642
							}
							position++
							goto l641
						l642:
							position, tokenIndex = position641, tokenIndex641
							if buffer[position] != rune('X') {
								goto l638
							}
							position++
						}
					l641:
						{
							position643, tokenIndex643 := position, tokenIndex
							if buffer[position] != rune('t') {
								goto l644
							}
							position++
							goto l643
						l644:
							position, tokenIndex = position643, tokenIndex643
							if buffer[position] != rune('T') {
								goto l638
							}
							position++
						}
					l643:
						{
							position645, tokenIndex645 := position, tokenIndex
							if buffer[position] != rune('x') {
								goto l646
							}
							position++
							goto l645
						l646:
							position, tokenIndex = position645, tokenIndex645
							if buffer[position] != rune('w') {
								goto l647
							}
							position++
							goto l645
						l647:
							position, tokenIndex = position645, tokenIndex645
							if buffer[position] != rune('h') {
								goto l648
							}
							position++
							goto l645
						l648:
							position, tokenIndex = position645, tokenIndex645
							if buffer[position] != rune('b') {
								goto l638
							}
							position++
						}
					l645:
						goto l637
					l638:
						position, tokenIndex = position637, tokenIndex637
						{
							position649, tokenIndex649 := position, tokenIndex
							{
								position651, tokenIndex651 := position, tokenIndex
								if buffer[position] != rune('l') {
									goto l652
								}
								position++
								goto l651
							l652:
								position, tokenIndex = position651, tokenIndex651
								if buffer[position] != rune('L') {
									goto l650
								}
								position++
							}
						l651:
							{
								position653, tokenIndex653 := position, tokenIndex
								if buffer[position] != rune('s') {
									goto l654
								}
								position++
								goto l653
							l654:
								position, tokenIndex = position653, tokenIndex653
								if buffer[position] != rune('S') {
									goto l650
								}
								position++
							}
						l653:
							{
								position655, tokenIndex655 := position, tokenIndex
								if buffer[position] != rune('l') {
									goto l656
								}
								position++
								goto l655
							l656:
								position, tokenIndex = position655, tokenIndex655
								if buffer[position] != rune('L') {
									goto l650
								}
								position++
							}
						l655:
							goto l649
						l650:
							position, tokenIndex = position649, tokenIndex649
							{
								position658, tokenIndex658 := position, tokenIndex
								if buffer[position] != rune('l') {
									goto l659
								}
								position++
								goto l658
							l659:
								position, tokenIndex = position658, tokenIndex658
								if buffer[position] != rune('L') {
									goto l657
								}
								position++
							}
						l658:
							{
								position660, tokenIndex660 := position, tokenIndex
								if buffer[position] != rune('s') {
									goto l661
								}
								position++
								goto l660
							l661:
								position, tokenIndex = position660, tokenIndex660
								if buffer[position] != rune('S') {
									goto l657
								}
								position++
							}
						l660:
							{
								position662, tokenIndex662 := position, tokenIndex
								if buffer[position] != rune('r') {
									goto l663
								}
								position++
								goto l662
							l663:
								position, tokenIndex = position662, tokenIndex662
								if buffer[position] != rune('R') {
									goto l657
								}
								position++
							}
						l662:
							goto l649
						l657:
							position, tokenIndex = position649, tokenIndex649
							{
								position665, tokenIndex665 := position, tokenIndex
								if buffer[position] != rune('r') {
									goto l666
								}
								position++
								goto l665
							l666:
								position, tokenIndex = position665, tokenIndex665
								if buffer[position] != rune('R') {
									goto l664
								}
								position++
							}
						l665:
							{
								position667, tokenIndex667 := position, tokenIndex
								if buffer[position] != rune('o') {
									goto l668
								}
								position++
								goto l667
							l668:
								position, tokenIndex = position667, tokenIndex667
								if buffer[position] != rune('O') {
									goto l664
								}
								position++
							}
						l667:
							{
								position669, tokenIndex669 := position, tokenIndex
								if buffer[position] != rune('r') {
									goto l670
								}
								position++
								goto l669
							l670:
								position, tokenIndex = position669, tokenIndex669
								if buffer[position] != rune('R') {
									goto l664
								}
								position++
							}
						l669:
							goto l649
						l664:
							position, tokenIndex = position649, tokenIndex649
							{
								position672, tokenIndex672 := position, tokenIndex
								if buffer[position] != rune('r') {
									goto l673
								}
								position++
								goto l672
							l673:
								position, tokenIndex = position672, tokenIndex672
								if buffer[position] != rune('R') {
									goto l671
								}
								position++
							}
						l672:
							{
								position674, tokenIndex674 := position, tokenIndex
								if buffer[position] != rune('o') {
									goto l675
								}
								position++
								goto l674
							l675:
								position, tokenIndex = position674, tokenIndex674
								if buffer[position] != rune('O') {
									goto l671
								}
								position++
							}
						l674:
							{
								position676, tokenIndex676 := position, tokenIndex
								if buffer[position] != rune('l') {
									goto l677
								}
								position++
								goto l676
							l677:
								position, tokenIndex = position676, tokenIndex676
								if buffer[position] != rune('L') {
									goto l671
								}
								position++
							}
						l676:
							goto l649
						l671:
							position, tokenIndex = position649, tokenIndex649
							{
								position679, tokenIndex679 := position, tokenIndex
								if buffer[position] != rune('a') {
									goto l680
								}
								position++
								goto l679
							l680:
								position, tokenIndex = position679, tokenIndex679
								if buffer[position] != rune('A') {
									goto l678
								}
								position++
							}
						l679:
							{
								position681, tokenIndex681 := position, tokenIndex
								if buffer[position] != rune('s') {
									goto l682
								}
								position++
								goto l681
							l682:
								position, tokenIndex = position681, tokenIndex681
								if buffer[position] != rune('S') {
									goto l678
								}
								position++
							}
						l681:
							{
								position683, tokenIndex683 := position, tokenIndex
								if buffer[position] != rune('r') {
									goto l684
								}
								position++
								goto l683
							l684:
								position, tokenIndex = position683, tokenIndex683
								if buffer[position] != rune('R') {
									goto l678
								}
								position++
							}
						l683:
							goto l649
						l678:
							position, tokenIndex = position649, tokenIndex649
							{
								position686, tokenIndex686 := position, tokenIndex
								if buffer[position] != rune('a') {
									goto l687
								}
								position++
								goto l686
							l687:
								position, tokenIndex = position686, tokenIndex686
								if buffer[position] != rune('A') {
									goto l685
								}
								position++
							}
						l686:
							{
								position688, tokenIndex688 := position, tokenIndex
								if buffer[position] != rune('s') {
									goto l689
								}
								position++
								goto l688
							l689:
								position, tokenIndex = position688, tokenIndex688
								if buffer[position] != rune('S') {
									goto l685
								}
								position++
							}
						l688:
							{
								position690, tokenIndex690 := position, tokenIndex
								if buffer[position] != rune('l') {
									goto l691
								}
								position++
								goto l690
							l691:
								position, tokenIndex = position690, tokenIndex690
								if buffer[position] != rune('L') {
									goto l685
								}
								position++
							}
						l690:
							goto l649
						l685:
							position, tokenIndex = position649, tokenIndex649
							{
								position692, tokenIndex692 := position, tokenIndex
								if buffer[position] != rune('m') {
									goto l693
								}
								position++
								goto l692
							l693:
								position, tokenIndex = position692, tokenIndex692
								if buffer[position] != rune('M') {
									goto l636
								}
								position++
							}
						l692:
							{
								position694, tokenIndex694 := position, tokenIndex
								if buffer[position] != rune('s') {
									goto l695
								}
								position++
								goto l694
							l695:
								position, tokenIndex = position694, tokenIndex694
								if buffer[position] != rune('S') {
									goto l636
								}
								position++
							}
						l694:
							{
								position696, tokenIndex696 := position, tokenIndex
								if buffer[position] != rune('l') {
									goto l697
								}
								position++
								goto l696
							l697:
								position, tokenIndex = position696, tokenIndex696
								if buffer[position] != rune('L') {
									goto l636
								}
								position++
							}
						l696:
						}
					l649:
						{
							position698, tokenIndex698 := position, tokenIndex
							{
								position699, tokenIndex699 := position, tokenIndex
								if c := buffer[position]; c < rune('A') || c > rune('Z') {
									goto l700
								}
								position++
								goto l699
							l700:
								position, tokenIndex = position699, tokenIndex699
								if c := buffer[position]; c < rune('a') || c > rune('z') {
									goto l701
								}
								position++
								goto l699
							l701:
								position, tokenIndex = position699, tokenIndex699
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l702
								}
								position++
								goto l699
							l702:
								position, tokenIndex = position699, tokenIndex699
								if buffer[position] != rune('_') {
									goto l698
								}
								position++
							}
						l699:
							goto l636
						l698:
							position, tokenIndex = position698, tokenIndex698
						}
					}
				l637:
					{
						position703, tokenIndex703 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l703
						}
						{
							position705, tokenIndex705 := position, tokenIndex
							if buffer[position] != rune('#') {
								goto l705
							}
							position++
							goto l706
						l705:
							position, tokenIndex = position705, tokenIndex705
						}
					l706:
						if !_rules[ruleOffset]() {
							goto l703
						}
						goto l704
					l703:
						position, tokenIndex = position703, tokenIndex703
					}
				l704:
					goto l635
				l636:
					position, tokenIndex = position635, tokenIndex635
					{
						position707, tokenIndex707 := position, tokenIndex
						if buffer[position] != rune('m') {
							goto l708
						}
						position++
						goto l707
					l708:
						position, tokenIndex = position707, tokenIndex707
						if buffer[position] != rune('M') {
							goto l633
						}
						position++
					}
				l707:
					{
						position709, tokenIndex709 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l710
						}
						position++
						goto l709
					l710:
						position, tokenIndex = position709, tokenIndex709
						if buffer[position] != rune('U') {
							goto l633
						}
						position++
					}
				l709:
					{
						position711, tokenIndex711 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l712
						}
						position++
						goto l711
					l712:
						position, tokenIndex = position711, tokenIndex711
						if buffer[position] != rune('L') {
							goto l633
						}
						position++
					}
				l711:
					if buffer[position] != rune(' ') {
						goto l633
					}
					position++
					{
						position713, tokenIndex713 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l714
						}
						position++
						goto l713
					l714:
						position, tokenIndex = position713, tokenIndex713
						if buffer[position] != rune('V') {
							goto l633
						}
						position++
					}
				l713:
					{
						position715, tokenIndex715 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l716
						}
						position++
						goto l715
					l716:
						position, tokenIndex = position715, tokenIndex715
						if buffer[position] != rune('L') {
							goto l633
						}
						position++
					}
				l715:
				}
			l635:
				add(ruleARMConstantTweak, position634)
			}
			return true
		l633:
			position, tokenIndex = position633, tokenIndex633
			return false
		},
		/* 44 ARMRegister <- <((('s' / 'S') ('p' / 'P')) / (('x' / 'w' / 'd' / 'q' / 's' / 'h' / 'b') [0-9] [0-9]? !ARMRegisterBoundary) / (('x' / 'X') ('z' / 'Z') ('r' / 'R')) / (('w' / 'W') ('z' / 'Z') ('r' / 'R')) / (('n' / 'N') ('z' / 'Z') ('c' / 'C') ('v' / 'V')) / ARMVectorRegister / SVE2PredicateRegister / ('{' WS? ARMVectorRegister WS? ((',' / '-') WS? ARMVectorRegister)* WS? '}' ('[' [0-9] [0-9]? ']')?))> */
		func() bool {
			position717, tokenIndex717 := position, tokenIndex
			{
				position718 := position
				{
					position719, tokenIndex719 := position, tokenIndex
					{
						position721, tokenIndex721 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l722
						}
						position++
						goto l721
					l722:
						position, tokenIndex = position721, tokenIndex721
						if buffer[position] != rune('S') {
							goto l720
						}
						position++
					}
				l721:
					{
						position723, tokenIndex723 := position, tokenIndex
						if buffer[position] != rune('p') {
							goto l724
						}
						position++
						goto l723
					l724:
						position, tokenIndex = position723, tokenIndex723
						if buffer[position] != rune('P') {
							goto l720
						}
						position++
					}
				l723:
					goto l719
				l720:
					position, tokenIndex = position719, tokenIndex719
					{
						position726, tokenIndex726 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l727
						}
						position++
						goto l726
					l727:
						position, tokenIndex = position726, tokenIndex726
						if buffer[position] != rune('w') {
							goto l728
						}
						position++
						goto l726
					l728:
						position, tokenIndex = position726, tokenIndex726
						if buffer[position] != rune('d') {
							goto l729
						}
						position++
						goto l726
					l729:
						position, tokenIndex = position726, tokenIndex726
						if buffer[position] != rune('q') {
							goto l730
						}
						position++
						goto l726
					l730:
						position, tokenIndex = position726, tokenIndex726
						if buffer[position] != rune('s') {
							goto l731
						}
						position++
						goto l726
					l731:
						position, tokenIndex = position726, tokenIndex726
						if buffer[position] != rune('h') {
							goto l732
						}
						position++
						goto l726
					l732:
						position, tokenIndex = position726, tokenIndex726
						if buffer[position] != rune('b') {
							goto l725
						}
						position++
					}
				l726:
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l725
					}
					position++
					{
						position733, tokenIndex733 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l733
						}
						position++
						goto l734
					l733:
						position, tokenIndex = position733, tokenIndex733
					}
				l734:
					{
						position735, tokenIndex735 := position, tokenIndex
						if !_rules[ruleARMRegisterBoundary]() {
							goto l735
						}
						goto l725
					l735:
						position, tokenIndex = position735, tokenIndex735
					}
					goto l719
				l725:
					position, tokenIndex = position719, tokenIndex719
					{
						position737, tokenIndex737 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l738
						}
						position++
						goto l737
					l738:
						position, tokenIndex = position737, tokenIndex737
						if buffer[position] != rune('X') {
							goto l736
						}
						position++
					}
				l737:
					{
						position739, tokenIndex739 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l740
						}
						position++
						goto l739
					l740:
						position, tokenIndex = position739, tokenIndex739
						if buffer[position] != rune('Z') {
							goto l736
						}
						position++
					}
				l739:
					{
						position741, tokenIndex741 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l742
						}
						position++
						goto l741
					l742:
						position, tokenIndex = position741, tokenIndex741
						if buffer[position] != rune('R') {
							goto l736
						}
						position++
					}
				l741:
					goto l719
				l736:
					position, tokenIndex = position719, tokenIndex719
					{
						position744, tokenIndex744 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l745
						}
						position++
						goto l744
					l745:
						position, tokenIndex = position744, tokenIndex744
						if buffer[position] != rune('W') {
							goto l743
						}
						position++
					}
				l744:
					{
						position746, tokenIndex746 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l747
						}
						position++
						goto l746
					l747:
						position, tokenIndex = position746, tokenIndex746
						if buffer[position] != rune('Z') {
							goto l743
						}
						position++
					}
				l746:
					{
						position748, tokenIndex748 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l749
						}
						position++
						goto l748
					l749:
						position, tokenIndex = position748, tokenIndex748
						if buffer[position] != rune('R') {
							goto l743
						}
						position++
					}
				l748:
					goto l719
				l743:
					position, tokenIndex = position719, tokenIndex719
					{
						position751, tokenIndex751 := position, tokenIndex
						if buffer[position] != rune('n') {
							goto l752
						}
						position++
						goto l751
					l752:
						position, tokenIndex = position751, tokenIndex751
						if buffer[position] != rune('N') {
							goto l750
						}
						position++
					}
				l751:
					{
						position753, tokenIndex753 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l754
						}
						position++
						goto l753
					l754:
						position, tokenIndex = position753, tokenIndex753
						if buffer[position] != rune('Z') {
							goto l750
						}
						position++
					}
				l753:
					{
						position755, tokenIndex755 := position, tokenIndex
						if buffer[position] != rune('c') {
							goto l756
						}
						position++
						goto l755
					l756:
						position, tokenIndex = position755, tokenIndex755
						if buffer[position] != rune('C') {
							goto l750
						}
						position++
					}
				l755:
					{
						position757, tokenIndex757 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l758
						}
						position++
						goto l757
					l758:
						position, tokenIndex = position757, tokenIndex757
						if buffer[position] != rune('V') {
							goto l750
						}
						position++
					}
				l757:
					goto l719
				l750:
					position, tokenIndex = position719, tokenIndex719
					if !_rules[ruleARMVectorRegister]() {
						goto l759
					}
					goto l719
				l759:
					position, tokenIndex = position719, tokenIndex719
					if !_rules[ruleSVE2PredicateRegister]() {
						goto l760
					}
					goto l719
				l760:
					position, tokenIndex = position719, tokenIndex719
					if buffer[position] != rune('{') {
						goto l717
					}
					position++
					{
						position761, tokenIndex761 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l761
						}
						goto l762
					l761:
						position, tokenIndex = position761, tokenIndex761
					}
				l762:
					if !_rules[ruleARMVectorRegister]() {
						goto l717
					}
					{
						position763, tokenIndex763 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l763
						}
						goto l764
					l763:
						position, tokenIndex = position763, tokenIndex763
					}
				l764:
				l765:
					{
						position766, tokenIndex766 := position, tokenIndex
						{
							position767, tokenIndex767 := position, tokenIndex
							if buffer[position] != rune(',') {
								goto l768
							}
							position++
							goto l767
						l768:
							position, tokenIndex = position767, tokenIndex767
							if buffer[position] != rune('-') {
								goto l766
							}
							position++
						}
					l767:
						{
							position769, tokenIndex769 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l769
							}
							goto l770
						l769:
							position, tokenIndex = position769, tokenIndex769
						}
					l770:
						if !_rules[ruleARMVectorRegister]() {
							goto l766
						}
						goto l765
					l766:
						position, tokenIndex = position766, tokenIndex766
					}
					{
						position771, tokenIndex771 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l771
						}
						goto l772
					l771:
						position, tokenIndex = position771, tokenIndex771
					}
				l772:
					if buffer[position] != rune('}') {
						goto l717
					}
					position++
					{
						position773, tokenIndex773 := position, tokenIndex
						if buffer[position] != rune('[') {
							goto l773
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l773
						}
						position++
						{
							position775, tokenIndex775 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l775
							}
							position++
							goto l776
						l775:
							position, tokenIndex = position775, tokenIndex775
						}
					l776:
						if buffer[position] != rune(']') {
							goto l773
						}
						position++
						goto l774
					l773:
						position, tokenIndex = position773, tokenIndex773
					}
				l774:
				}
			l719:
				add(ruleARMRegister, position718)
			}
			return true
		l717:
			position, tokenIndex = position717, tokenIndex717
			return false
		},
		/* 45 ARMVectorRegister <- <(('v' / 'z') [0-9] [0-9]? ('.' [0-9]* ('b' / 's' / 'd' / 'h' / 'q' / 'B' / 'S' / 'D' / 'H' / 'Q') ('[' [0-9] [0-9]? ']')?)?)> */
		func() bool {
			position777, tokenIndex777 := position, tokenIndex
			{
				position778 := position
				{
					position779, tokenIndex779 := position, tokenIndex
					if buffer[position] != rune('v') {
						goto l780
					}
					position++
					goto l779
				l780:
					position, tokenIndex = position779, tokenIndex779
					if buffer[position] != rune('z') {
						goto l777
					}
					position++
				}
			l779:
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l777
				}
				position++
				{
					position781, tokenIndex781 := position, tokenIndex
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l781
					}
					position++
					goto l782
				l781:
					position, tokenIndex = position781, tokenIndex781
				}
			l782:
				{
					position783, tokenIndex783 := position, tokenIndex
					if buffer[position] != rune('.') {
						goto l783
					}
					position++
				l785:
					{
						position786, tokenIndex786 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l786
						}
						position++
						goto l785
					l786:
						position, tokenIndex = position786, tokenIndex786
					}
					{
						position787, tokenIndex787 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l788
						}
						position++
						goto l787
					l788:
						position, tokenIndex = position787, tokenIndex787
						if buffer[position] != rune('s') {
							goto l789
						}
						position++
						goto l787
					l789:
						position, tokenIndex = position787, tokenIndex787
						if buffer[position] != rune('d') {
							goto l790
						}
						position++
						goto l787
					l790:
						position, tokenIndex = position787, tokenIndex787
						if buffer[position] != rune('h') {
							goto l791
						}
						position++
						goto l787
					l791:
						position, tokenIndex = position787, tokenIndex787
						if buffer[position] != rune('q') {
							goto l792
						}
						position++
						goto l787
					l792:
						position, tokenIndex = position787, tokenIndex787
						if buffer[position] != rune('B') {
							goto l793
						}
						position++
						goto l787
					l793:
						position, tokenIndex = position787, tokenIndex787
						if buffer[position] != rune('S') {
							goto l794
						}
						position++
						goto l787
					l794:
						position, tokenIndex = position787, tokenIndex787
						if buffer[position] != rune('D') {
							goto l795
						}
						position++
						goto l787
					l795:
						position, tokenIndex = position787, tokenIndex787
						if buffer[position] != rune('H') {
							goto l796
						}
						position++
						goto l787
					l796:
						position, tokenIndex = position787, tokenIndex787
						if buffer[position] != rune('Q') {
							goto l783
						}
						position++
					}
				l787:
					{
						position797, tokenIndex797 := position, tokenIndex
						if buffer[position] != rune('[') {
							goto l797
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l797
						}
						position++
						{
							position799, tokenIndex799 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l799
							}
							position++
							goto l800
						l799:
							position, tokenIndex = position799, tokenIndex799
						}
					l800:
						if buffer[position] != rune(']') {
							goto l797
						}
						position++
						goto l798
					l797:
						position, tokenIndex = position797, tokenIndex797
					}
				l798:
					goto l784
				l783:
					position, tokenIndex = position783, tokenIndex783
				}
			l784:
				add(ruleARMVectorRegister, position778)
			}
			return true
		l777:
			position, tokenIndex = position777, tokenIndex777
			return false
		},
		/* 46 SVE2PredicateRegister <- <(('p' / 'P') [0-9] [0-9]? '/' ('m' / 'M' / 'z' / 'Z'))> */
		func() bool {
			position801, tokenIndex801 := position, tokenIndex
			{
				position802 := position
				{
					position803, tokenIndex803 := position, tokenIndex
					if buffer[position] != rune('p') {
						goto l804
					}
					position++
					goto l803
				l804:
					position, tokenIndex = position803, tokenIndex803
					if buffer[position] != rune('P') {
						goto l801
					}
					position++
				}
			l803:
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l801
				}
				position++
				{
					position805, tokenIndex805 := position, tokenIndex
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l805
					}
					position++
					goto l806
				l805:
					position, tokenIndex = position805, tokenIndex805
				}
			l806:
				if buffer[position] != rune('/') {
					goto l801
				}
				position++
				{
					position807, tokenIndex807 := position, tokenIndex
					if buffer[position] != rune('m') {
						goto l808
					}
					position++
					goto l807
				l808:
					position, tokenIndex = position807, tokenIndex807
					if buffer[position] != rune('M') {
						goto l809
					}
					position++
					goto l807
				l809:
					position, tokenIndex = position807, tokenIndex807
					if buffer[position] != rune('z') {
						goto l810
					}
					position++
					goto l807
				l810:
					position, tokenIndex = position807, tokenIndex807
					if buffer[position] != rune('Z') {
						goto l801
					}
					position++
				}
			l807:
				add(ruleSVE2PredicateRegister, position802)
			}
			return true
		l801:
			position, tokenIndex = position801, tokenIndex801
			return false
		},
		/* 47 ARMRegisterBoundary <- <([a-z] / [A-Z] / [0-9] / '_')> */
		func() bool {
			position811, tokenIndex811 := position, tokenIndex
			{
				position812 := position
				{
					position813, tokenIndex813 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l814
					}
					position++
					goto l813
				l814:
					position, tokenIndex = position813, tokenIndex813
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l815
					}
					position++
					goto l813
				l815:
					position, tokenIndex = position813, tokenIndex813
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l816
					}
					position++
					goto l813
				l816:
					position, tokenIndex = position813, tokenIndex813
					if buffer[position] != rune('_') {
						goto l811
					}
					position++
				}
			l813:
				add(ruleARMRegisterBoundary, position812)
			}
			return true
		l811:
			position, tokenIndex = position811, tokenIndex811
			return false
		},
		/* 48 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / Low12BitsSymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / ARMBaseIndexScale / BaseIndexScale)> */
		func() bool {
			position817, tokenIndex817 := position, tokenIndex
			{
				position818 := position
				{
					position819, tokenIndex819 := position, tokenIndex
					if !_rules[ruleSymbolRef]() {
						goto l820
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l820
					}
					goto l819
				l820:
					position, tokenIndex = position819, tokenIndex819
					if !_rules[ruleSymbolRef]() {
						goto l821
					}
					goto l819
				l821:
					position, tokenIndex = position819, tokenIndex819
					if !_rules[ruleLow12BitsSymbolRef]() {
						goto l822
					}
					goto l819
				l822:
					position, tokenIndex = position819, tokenIndex819
				l824:
					{
						position825, tokenIndex825 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l825
						}
						goto l824
					l825:
						position, tokenIndex = position825, tokenIndex825
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l823
					}
					goto l819
				l823:
					position, tokenIndex = position819, tokenIndex819
					if !_rules[ruleSegmentRegister]() {
						goto l826
					}
					if !_rules[ruleOffset]() {
						goto l826
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l826
					}
					goto l819
				l826:
					position, tokenIndex = position819, tokenIndex819
					if !_rules[ruleSegmentRegister]() {
						goto l827
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l827
					}
					goto l819
				l827:
					position, tokenIndex = position819, tokenIndex819
					if !_rules[ruleSegmentRegister]() {
						goto l828
					}
					if !_rules[ruleOffset]() {
						goto l828
					}
					goto l819
				l828:
					position, tokenIndex = position819, tokenIndex819
					if !_rules[ruleARMBaseIndexScale]() {
						goto l829
					}
					goto l819
				l829:
					position, tokenIndex = position819, tokenIndex819
					if !_rules[ruleBaseIndexScale]() {
						goto l817
					}
				}
			l819:
				add(ruleMemoryRef, position818)
			}
			return true
		l817:
			position, tokenIndex = position817, tokenIndex817
			return false
		},
		/* 49 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */
		func() bool {
			position830, tokenIndex830 := position, tokenIndex
			{
				position831 := position
				{
					position832, tokenIndex832 := position, tokenIndex
				l834:
					{
						position835, tokenIndex835 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l835
						}
						goto l834
					l835:
						position, tokenIndex = position835, tokenIndex835
					}
					if buffer[position] != rune('+') {
						goto l832
					}
					position++
					goto l833
				l832:
					position, tokenIndex = position832, tokenIndex832
				}
			l833:
				{
					position836, tokenIndex836 := position, tokenIndex
					if !_rules[ruleLocalSymbol]() {
						goto l837
					}
					goto l836
				l837:
					position, tokenIndex = position836, tokenIndex836
					if !_rules[ruleSymbolName]() {
						goto l830
					}
				}
			l836:
			l838:
				{
					position839, tokenIndex839 := position, tokenIndex
					if !_rules[ruleOffset]() {
						goto l839
					}
					goto l838
				l839:
					position, tokenIndex = position839, tokenIndex839
				}
				{
					position840, tokenIndex840 := position, tokenIndex
					if buffer[position] != rune('@') {
						goto l840
					}
					position++
					if !_rules[ruleSection]() {
						goto l840
					}
				l842:
					{
						position843, tokenIndex843 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l843
						}
						goto l842
					l843:
						position, tokenIndex = position843, tokenIndex843
					}
					goto l841
				l840:
					position, tokenIndex = position840, tokenIndex840
				}
			l841:
				add(ruleSymbolRef, position831)
			}
			return true
		l830:
			position, tokenIndex = position830, tokenIndex830
			return false
		},
		/* 50 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */
		func() bool {
			position844, tokenIndex844 := position, tokenIndex
			{
				position845 := position
				if buffer[position] != rune(':') {
					goto l844
				}
				position++
				{
					position846, tokenIndex846 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l847
					}
					position++
					goto l846
				l847:
					position, tokenIndex = position846, tokenIndex846
					if buffer[position] != rune('L') {
						goto l844
					}
					position++
				}
			l846:
				{
					position848, tokenIndex848 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l849
					}
					position++
					goto l848
				l849:
					position, tokenIndex = position848, tokenIndex848
					if buffer[position] != rune('O') {
						goto l844
					}
					position++
				}
			l848:
				if buffer[position] != rune('1') {
					goto l844
				}
				position++
				if buffer[position] != rune('2') {
					goto l844
				}
				position++
				if buffer[position] != rune(':') {
					goto l844
				}
				position++
				{
					position850, tokenIndex850 := position, tokenIndex
					if !_rules[ruleLocalSymbol]() {
						goto l851
					}
					goto l850
				l851:
					position, tokenIndex = position850, tokenIndex850
					if !_rules[ruleSymbolName]() {
						goto l844
					}
				}
			l850:
				{
					position852, tokenIndex852 := position, tokenIndex
					if !_rules[ruleOffset]() {
						goto l852
					}
					goto l853
				l852:
					position, tokenIndex = position852, tokenIndex852
				}
			l853:
				add(ruleLow12BitsSymbolRef, position845)
			}
			return true
		l844:
			position, tokenIndex = position844, tokenIndex844
			return false
		},
		/* 51 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#'? Offset (('*' [0-9]+) / ('*' '(' [0-9]+ Operator [0-9]+ ')') / ('+' [0-9]+)*)?) / ('#'? ARMGOTLow12) / ('#'? Low12BitsSymbolRef) / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?)> */
		func() bool {
			position854, tokenIndex854 := position, tokenIndex
			{
				position855 := position
				if buffer[position] != rune('[') {
					goto l854
				}
				position++
				if !_rules[ruleARMRegister]() {
					goto l854
				}
				{
					position856, tokenIndex856 := position, tokenIndex
					if buffer[position] != rune(',') {
						goto l856
					}
					position++
					{
						position858, tokenIndex858 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l858
						}
						goto l859
					l858:
						position, tokenIndex = position858, tokenIndex858
					}
				l859:
					{
						position860, tokenIndex860 := position, tokenIndex
						{
							position862, tokenIndex862 := position, tokenIndex
							if buffer[position] != rune('#') {
								goto l862
							}
							position++
							goto l863
						l862:
							position, tokenIndex = position862, tokenIndex862
						}
					l863:
						if !_rules[ruleOffset]() {
							goto l861
						}
						{
							position864, tokenIndex864 := position, tokenIndex
							{
								position866, tokenIndex866 := position, tokenIndex
								if buffer[position] != rune('*') {
									goto l867
								}
								position++
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l867
								}
								position++
							l868:
								{
									position869, tokenIndex869 := position, tokenIndex
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l869
									}
									position++
									goto l868
								l869:
									position, tokenIndex = position869, tokenIndex869
								}
								goto l866
							l867:
								position, tokenIndex = position866, tokenIndex866
								if buffer[position] != rune('*') {
									goto l870
								}
								position++
								if buffer[position] != rune('(') {
									goto l870
								}
								position++
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l870
								}
								position++
							l871:
								{
									position872, tokenIndex872 := position, tokenIndex
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l872
									}
									position++
									goto l871
								l872:
									position, tokenIndex = position872, tokenIndex872
								}
								if !_rules[ruleOperator]() {
									goto l870
								}
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l870
								}
								position++
							l873:
								{
									position874, tokenIndex874 := position, tokenIndex
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l874
									}
									position++
									goto l873
								l874:
									position, tokenIndex = position874, tokenIndex874
								}
								if buffer[position] != rune(')') {
									goto l870
								}
								position++
								goto l866
							l870:
								position, tokenIndex = position866, tokenIndex866
							l875:
								{
									position876, tokenIndex876 := position, tokenIndex
									if buffer[position] != rune('+') {
										goto l876
									}
									position++
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l876
									}
									position++
								l877:
									{
										position878, tokenIndex878 := position, tokenIndex
										if c := buffer[position]; c < rune('0') || c > rune('9') {
											goto l878
										}
										position++
										goto l877
									l878:
										position, tokenIndex = position878, tokenIndex878
									}
									goto l875
								l876:
									position, tokenIndex = position876, tokenIndex876
								}
							}
						l866:
							goto l865

							position, tokenIndex = position864, tokenIndex864
						}
					l865:
						goto l860
					l861:
						position, tokenIndex = position860, tokenIndex860
						{
							position880, tokenIndex880 := position, tokenIndex
							if buffer[position] != rune('#') {
								goto l880
							}
							position++
							goto l881
						l880:
							position, tokenIndex = position880, tokenIndex880
						}
					l881:
						if !_rules[ruleARMGOTLow12]() {
							goto l879
						}
						goto l860
					l879:
						position, tokenIndex = position860, tokenIndex860
						{
							position883, tokenIndex883 := position, tokenIndex
							if buffer[position] != rune('#') {
								goto l883
							}
							position++
							goto l884
						l883:
							position, tokenIndex = position883, tokenIndex883
						}
					l884:
						if !_rules[ruleLow12BitsSymbolRef]() {
							goto l882
						}
						goto l860
					l882:
						position, tokenIndex = position860, tokenIndex860
						if !_rules[ruleARMRegister]() {
							goto l856
						}
					}
				l860:
					{
						position885, tokenIndex885 := position, tokenIndex
						if buffer[position] != rune(',') {
							goto l885
						}
						position++
						{
							position887, tokenIndex887 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l887
							}
							goto l888
						l887:
							position, tokenIndex = position887, tokenIndex887
						}
					l888:
						if !_rules[ruleARMConstantTweak]() {
							goto l885
						}
						goto l886
					l885:
						position, tokenIndex = position885, tokenIndex885
					}
				l886:
					goto l857
				l856:
					position, tokenIndex = position856, tokenIndex856
				}
			l857:
				if buffer[position] != rune(']') {
					goto l854
				}
				position++
				{
					position889, tokenIndex889 := position, tokenIndex
					if !_rules[ruleARMPostincrement]() {
						goto l889
					}
					goto l890
				l889:
					position, tokenIndex = position889, tokenIndex889
				}
			l890:
				add(ruleARMBaseIndexScale, position855)
			}
			return true
		l854:
			position, tokenIndex = position854, tokenIndex854
			return false
		},
		/* 52 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */
		func() bool {
			position891, tokenIndex891 := position, tokenIndex
			{
				position892 := position
				if buffer[position] != rune(':') {
					goto l891
				}
				position++
				{
					position893, tokenIndex893 := position, tokenIndex
					if buffer[position] != rune('g') {
						goto l894
					}
					position++
					goto l893
				l894:
					position, tokenIndex = position893, tokenIndex893
					if buffer[position] != rune('G') {
						goto l891
					}
					position++
				}
			l893:
				{
					position895, tokenIndex895 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l896
					}
					position++
					goto l895
				l896:
					position, tokenIndex = position895, tokenIndex895
					if buffer[position] != rune('O') {
						goto l891
					}
					position++
				}
			l895:
				{
					position897, tokenIndex897 := position, tokenIndex
					if buffer[position] != rune('t') {
						goto l898
					}
					position++
					goto l897
				l898:
					position, tokenIndex = position897, tokenIndex897
					if buffer[position] != rune('T') {
						goto l891
					}
					position++
				}
			l897:
				if buffer[position] != rune('_') {
					goto l891
				}
				position++
				{
					position899, tokenIndex899 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l900
					}
					position++
					goto l899
				l900:
					position, tokenIndex = position899, tokenIndex899
					if buffer[position] != rune('L') {
						goto l891
					}
					position++
				}
			l899:
				{
					position901, tokenIndex901 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l902
					}
					position++
					goto l901
				l902:
					position, tokenIndex = position901, tokenIndex901
					if buffer[position] != rune('O') {
						goto l891
					}
					position++
				}
			l901:
				if buffer[position] != rune('1') {
					goto l891
				}
				position++
				if buffer[position] != rune('2') {
					goto l891
				}
				position++
				if buffer[position] != rune(':') {
					goto l891
				}
				position++
				if !_rules[ruleSymbolName]() {
					goto l891
				}
				add(ruleARMGOTLow12, position892)
			}
			return true
		l891:
			position, tokenIndex = position891, tokenIndex891
			return false
		},
		/* 53 ARMPostincrement <- <'!'> */
		func() bool {
			position903, tokenIndex903 := position, tokenIndex
			{
				position904 := position
				if buffer[position] != rune('!') {
					goto l903
				}
				position++
				add(ruleARMPostincrement, position904)
			}
			return true
		l903:
			position, tokenIndex = position903, tokenIndex903
			return false
		},
		/* 54 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
		func() bool {
			position905, tokenIndex905 := position, tokenIndex
			{
				position906 := position
				if buffer[position] != rune('(') {
					goto l905
				}
				position++
				{
					position907, tokenIndex907 := position, tokenIndex
					if !_rules[ruleRegisterOrConstant]() {
						goto l907
					}
					goto l908
				l907:
					position, tokenIndex = position907, tokenIndex907
				}
			l908:
				{
					position909, tokenIndex909 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l909
					}
					goto l910
				l909:
					position, tokenIndex = position909, tokenIndex909
				}
			l910:
				{
					position911, tokenIndex911 := position, tokenIndex
					if buffer[position] != rune(',') {
						goto l911
					}
					position++
					{
						position913, tokenIndex913 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l913
						}
						goto l914
					l913:
						position, tokenIndex = position913, tokenIndex913
					}
				l914:
					if !_rules[ruleRegisterOrConstant]() {
						goto l911
					}
					{
						position915, tokenIndex915 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l915
						}
						goto l916
					l915:
						position, tokenIndex = position915, tokenIndex915
					}
				l916:
					{
						position917, tokenIndex917 := position, tokenIndex
						if buffer[position] != rune(',') {
							goto l917
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l917
						}
						position++
					l919:
						{
							position920, tokenIndex920 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l920
							}
							position++
							goto l919
						l920:
							position, tokenIndex = position920, tokenIndex920
						}
						goto l918
					l917:
						position, tokenIndex = position917, tokenIndex917
					}
				l918:
					goto l912
				l911:
					position, tokenIndex = position911, tokenIndex911
				}
			l912:
				if buffer[position] != rune(')') {
					goto l905
				}
				position++
				add(ruleBaseIndexScale, position906)
			}
			return true
		l905:
			position, tokenIndex = position905, tokenIndex905
			return false
		},
		/* 55 Operator <- <('+' / '-')> */
		func() bool {
			position921, tokenIndex921 := position, tokenIndex
			{
				position922 := position
				{
					position923, tokenIndex923 := position, tokenIndex
					if buffer[position] != rune('+') {
						goto l924
					}
					position++
					goto l923
				l924:
					position, tokenIndex = position923, tokenIndex923
					if buffer[position] != rune('-') {
						goto l921
					}
					position++
				}
			l923:
				add(ruleOperator, position922)
			}
			return true
		l921:
			position, tokenIndex = position921, tokenIndex921
			return false
		},
		/* 56 OffsetOperator <- <('+' / '-' / '*')> */
		func() bool {
			position925, tokenIndex925 := position, tokenIndex
			{
				position926 := position
				{
					position927, tokenIndex927 := position, tokenIndex
					if buffer[position] != rune('+') {
						goto l928
					}
					position++
					goto l927
				l928:
					position, tokenIndex = position927, tokenIndex927
					if buffer[position] != rune('-') {
						goto l929
					}
					position++
					goto l927
				l929:
					position, tokenIndex = position927, tokenIndex927
					if buffer[position] != rune('*') {
						goto l925
					}
					position++
				}
			l927:
				add(ruleOffsetOperator, position926)
			}
			return true
		l925:
			position, tokenIndex = position925, tokenIndex925
			return false
		},
		/* 57 S2nBignumHelper <- <('(' [0-9]+ WS? OffsetOperator WS? [0-9]+ ')' WS? OffsetOperator? WS?)> */
		func() bool {
			position930, tokenIndex930 := position, tokenIndex
			{
				position931 := position
				if buffer[position] != rune('(') {
					goto l930
				}
				position++
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l930
				}
				position++
			l932:
				{
					position933, tokenIndex933 := position, tokenIndex
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l933
					}
					position++
					goto l932
				l933:
					position, tokenIndex = position933, tokenIndex933
				}
				{
					position934, tokenIndex934 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l934
					}
					goto l935
				l934:
					position, tokenIndex = position934, tokenIndex934
				}
			l935:
				if !_rules[ruleOffsetOperator]() {
					goto l930
				}
				{
					position936, tokenIndex936 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l936
					}
					goto l937
				l936:
					position, tokenIndex = position936, tokenIndex936
				}
			l937:
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l930
				}
				position++
			l938:
				{
					position939, tokenIndex939 := position, tokenIndex
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l939
					}
					position++
					goto l938
				l939:
					position, tokenIndex = position939, tokenIndex939
				}
				if buffer[position] != rune(')') {
					goto l930
				}
				position++
				{
					position940, tokenIndex940 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l940
					}
					goto l941
				l940:
					position, tokenIndex = position940, tokenIndex940
				}
			l941:
				{
					position942, tokenIndex942 := position, tokenIndex
					if !_rules[ruleOffsetOperator]() {
						goto l942
					}
					goto l943
				l942:
					position, tokenIndex = position942, tokenIndex942
				}
			l943:
				{
					position944, tokenIndex944 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l944
					}
					goto l945
				l944:
					position, tokenIndex = position944, tokenIndex944
				}
			l945:
				add(ruleS2nBignumHelper, position931)
			}
			return true
		l930:
			position, tokenIndex = position930, tokenIndex930
			return false
		},
		/* 58 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / ((([0-9]+ WS OffsetOperator [0-9]+) / ([0-9]+ (OffsetOperator '(' [0-9]+ OffsetOperator [0-9]+ ')')?) / ([0-9]+ (OffsetOperator [0-9]+ OffsetOperator [0-9]+)?) / ([0-9]+ (OffsetOperator [0-9]+)?) / (S2nBignumHelper S2nBignumHelper (S2nBignumHelper ([0-9]+ OffsetOperator)? [0-9]+ OffsetOperator)? [0-9]+) / (S2nBignumHelper [0-9]+ ((WS? OffsetOperator [0-9]+ (WS? OffsetOperator [0-9]+)?) / !'x')) / S2nBignumHelper / ('(' [0-9]+ WS? OffsetOperator WS? [0-9]+ WS? OffsetOperator WS? [0-9]+ ')')) !([a-z] / [A-Z]))))> */
		func() bool {
			position946, tokenIndex946 := position, tokenIndex
			{
				position947 := position
				{
					position948, tokenIndex948 := position, tokenIndex
					if buffer[position] != rune('+') {
						goto l948
					}
					position++
					goto l949
				l948:
					position, tokenIndex = position948, tokenIndex948
				}
			l949:
				{
					position950, tokenIndex950 := position, tokenIndex
					if buffer[position] != rune('-') {
						goto l950
					}
					position++
					goto l951
				l950:
					position, tokenIndex = position950, tokenIndex950
				}
			l951:
				{
					position952, tokenIndex952 := position, tokenIndex
					if buffer[position] != rune('0') {
						goto l953
					}
					position++
					{
						position954, tokenIndex954 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l955
						}
						position++
						goto l954
					l955:
						position, tokenIndex = position954, tokenIndex954
						if buffer[position] != rune('B') {
							goto l953
						}
						position++
					}
				l954:
					{
						position958, tokenIndex958 := position, tokenIndex
						if buffer[position] != rune('0') {
							goto l959
						}
						position++
						goto l958
					l959:
						position, tokenIndex = position958, tokenIndex958
						if buffer[position] != rune('1') {
							goto l953
						}
						position++
					}
				l958:
				l956:
					{
						position957, tokenIndex957 := position, tokenIndex
						{
							position960, tokenIndex960 := position, tokenIndex
							if buffer[position] != rune('0') {
								goto l961
							}
							position++
							goto l960
						l961:
							position, tokenIndex = position960, tokenIndex960
							if buffer[position] != rune('1') {
								goto l957
							}
							position++
						}
					l960:
						goto l956
					l957:
						position, tokenIndex = position957, tokenIndex957
					}
					goto l952
				l953:
					position, tokenIndex = position952, tokenIndex952
					if buffer[position] != rune('0') {
						goto l962
					}
					position++
					{
						position963, tokenIndex963 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l964
						}
						position++
						goto l963
					l964:
						position, tokenIndex = position963, tokenIndex963
						if buffer[position] != rune('X') {
							goto l962
						}
						position++
					}
				l963:
					{
						position967, tokenIndex967 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l968
						}
						position++
						goto l967
					l968:
						position, tokenIndex = position967, tokenIndex967
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l969
						}
						position++
						goto l967
					l969:
						position, tokenIndex = position967, tokenIndex967
						{
							position970, tokenIndex970 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('f') {
								goto l971
							}
							position++
							goto l970
						l971:
							position, tokenIndex = position970, tokenIndex970
							if c := buffer[position]; c < rune('A') || c > rune('F') {
								goto l962
							}
							position++
						}
					l970:
					}
				l967:
				l965:
					{
						position966, tokenIndex966 := position, tokenIndex
						{
							position972, tokenIndex972 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l973
							}
							position++
							goto l972
						l973:
							position, tokenIndex = position972, tokenIndex972
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l974
							}
							position++
							goto l972
						l974:
							position, tokenIndex = position972, tokenIndex972
							{
								position975, tokenIndex975 := position, tokenIndex
								if c := buffer[position]; c < rune('a') || c > rune('f') {
									goto l976
								}
								position++
								goto l975
							l976:
								position, tokenIndex = position975, tokenIndex975
								if c := buffer[position]; c < rune('A') || c > rune('F') {
									goto l966
								}
								position++
							}
						l975:
						}
					l972:
						goto l965
					l966:
						position, tokenIndex = position966, tokenIndex966
					}
					goto l952
				l962:
					position, tokenIndex = position952, tokenIndex952
					{
						position977, tokenIndex977 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l978
						}
						position++
					l979:
						{
							position980, tokenIndex980 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l980
							}
							position++
							goto l979
						l980:
							position, tokenIndex = position980, tokenIndex980
						}
						if !_rules[ruleWS]() {
							goto l978
						}
						if !_rules[ruleOffsetOperator]() {
							goto l978
						}
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l978
						}
						position++
					l981:
						{
							position982, tokenIndex982 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l982
							}
							position++
							goto l981
						l982:
							position, tokenIndex = position982, tokenIndex982
						}
						goto l977
					l978:
						position, tokenIndex = position977, tokenIndex977
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l983
						}
						position++
					l984:
						{
							position985, tokenIndex985 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l985
							}
							position++
							goto l984
						l985:
							position, tokenIndex = position985, tokenIndex985
						}
						{
							position986, tokenIndex986 := position, tokenIndex
							if !_rules[ruleOffsetOperator]() {
								goto l986
							}
							if buffer[position] != rune('(') {
								goto l986
							}
							position++
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l986
							}
							position++
						l988:
							{
								position989, tokenIndex989 := position, tokenIndex
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l989
								}
								position++
								goto l988
							l989:
								position, tokenIndex = position989, tokenIndex989
							}
							if !_rules[ruleOffsetOperator]() {
								goto l986
							}
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l986
							}
							position++
						l990:
							{
								position991, tokenIndex991 := position, tokenIndex
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l991
								}
								position++
								goto l990
							l991:
								position, tokenIndex = position991, tokenIndex991
							}
							if buffer[position] != rune(')') {
								goto l986
							}
							position++
							goto l987
						l986:
							position, tokenIndex = position986, tokenIndex986
						}
					l987:
						goto l977
					l983:
						position, tokenIndex = position977, tokenIndex977
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l992
						}
						position++
					l993:
						{
							position994, tokenIndex994 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l994
							}
							position++
							goto l993
						l994:
							position, tokenIndex = position994, tokenIndex994
						}
						{
							position995, tokenIndex995 := position, tokenIndex
							if !_rules[ruleOffsetOperator]() {
								goto l995
							}
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l995
							}
							position++
						l997:
							{
								position998, tokenIndex998 := position, tokenIndex
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l998
								}
								position++
								goto l997
							l998:
								position, tokenIndex = position998, tokenIndex998
							}
							if !_rules[ruleOffsetOperator]() {
								goto l995
							}
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l995
							}
							position++
						l999:
							{
								position1000, tokenIndex1000 := position, tokenIndex
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l1000
								}
								position++
								goto l999
							l1000:
								position, tokenIndex = position1000, tokenIndex1000
							}
							goto l996
						l995:
							position, tokenIndex = position995, tokenIndex995
						}
					l996:
						goto l977
					l992:
						position, tokenIndex = position977, tokenIndex977
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l1001
						}
						position++
					l1002:
						{
							position1003, tokenIndex1003 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l1003
							}
							position++
							goto l1002
						l1003:
							position, tokenIndex = position1003, tokenIndex1003
						}
						{
							position1004, tokenIndex1004 := position, tokenIndex
							if !_rules[ruleOffsetOperator]() {
								goto l1004
							}
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l1004
							}
							position++
						l1006:
							{
								position1007, tokenIndex1007 := position, tokenIndex
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l1007
								}
								position++
								goto l1006
							l1007:
								position, tokenIndex = position1007, tokenIndex1007
							}
							goto l1005
						l1004:
							position, tokenIndex = position1004, tokenIndex1004
						}
					l1005:
						goto l977
					l1001:
						position, tokenIndex = position977, tokenIndex977
						if !_rules[ruleS2nBignumHelper]() {
							goto l1008
						}
						if !_rules[ruleS2nBignumHelper]() {
							goto l1008
						}
						{
							position1009, tokenIndex1009 := position, tokenIndex
							if !_rules[ruleS2nBignumHelper]() {
								goto l1009
							}
							{
								position1011, tokenIndex1011 := position, tokenIndex
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l1011
								}
								position++
							l1013:
								{
									position1014, tokenIndex1014 := position, tokenIndex
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l1014
									}
									position++
									goto l1013
								l1014:
									position, tokenIndex = position1014, tokenIndex1014
								}
								if !_rules[ruleOffsetOperator]() {
									goto l1011
								}
								goto l1012
							l1011:
								position, tokenIndex = position1011, tokenIndex1011
							}
						l1012:
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l1009
							}
							position++
						l1015:
							{
								position1016, tokenIndex1016 := position, tokenIndex
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l1016
								}
								position++
								goto l1015
							l1016:
								position, tokenIndex = position1016, tokenIndex1016
							}
							if !_rules[ruleOffsetOperator]() {
								goto l1009
							}
							goto l1010
						l1009:
							position, tokenIndex = position1009, tokenIndex1009
						}
					l1010:
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l1008
						}
						position++
					l1017:
						{
							position1018, tokenIndex1018 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l1018
							}
							position++
							goto l1017
						l1018:
							position, tokenIndex = position1018, tokenIndex1018
						}
						goto l977
					l1008:
						position, tokenIndex = position977, tokenIndex977
						if !_rules[ruleS2nBignumHelper]() {
							goto l1019
						}
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l1019
						}
						position++
					l1020:
						{
							position1021, tokenIndex1021 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l1021
							}
							position++
							goto l1020
						l1021:
							position, tokenIndex = position1021, tokenIndex1021
						}
						{
							position1022, tokenIndex1022 := position, tokenIndex
							{
								position1024, tokenIndex1024 := position, tokenIndex
								if !_rules[ruleWS]() {
									goto l1024
								}
								goto l1025
							l1024:
								position, tokenIndex = position1024, tokenIndex1024
							}
						l1025:
							if !_rules[ruleOffsetOperator]() {
								goto l1023
							}
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l1023
							}
							position++
						l1026:
							{
								position1027, tokenIndex1027 := position, tokenIndex
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l1027
								}
								position++
								goto l1026
							l1027:
								position, tokenIndex = position1027, tokenIndex1027
							}
							{
								position1028, tokenIndex1028 := position, tokenIndex
								{
									position1030, tokenIndex1030 := position, tokenIndex
									if !_rules[ruleWS]() {
										goto l1030
									}
									goto l1031
								l1030:
									position, tokenIndex = position1030, tokenIndex1030
								}
							l1031:
								if !_rules[ruleOffsetOperator]() {
									goto l1028
								}
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l1028
								}
								position++
							l1032:
								{
									position1033, tokenIndex1033 := position, tokenIndex
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l1033
									}
									position++
									goto l1032
								l1033:
									position, tokenIndex = position1033, tokenIndex1033
								}
								goto l1029
							l1028:
								position, tokenIndex = position1028, tokenIndex1028
							}
						l1029:
							goto l1022
						l1023:
							position, tokenIndex = position1022, tokenIndex1022
							{
								position1034, tokenIndex1034 := position, tokenIndex
								if buffer[position] != rune('x') {
									goto l1034
								}
								position++
								goto l1019
							l1034:
								position, tokenIndex = position1034, tokenIndex1034
							}
						}
					l1022:
						goto l977
					l1019:
						position, tokenIndex = position977, tokenIndex977
						if !_rules[ruleS2nBignumHelper]() {
							goto l1035
						}
						goto l977
					l1035:
						position, tokenIndex = position977, tokenIndex977
						if buffer[position] != rune('(') {
							goto l946
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l946
						}
						position++
					l1036:
						{
							position1037, tokenIndex1037 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l1037
							}
							position++
							goto l1036
						l1037:
							position, tokenIndex = position1037, tokenIndex1037
						}
						{
							position1038, tokenIndex1038 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l1038
							}
							goto l1039
						l1038:
							position, tokenIndex = position1038, tokenIndex1038
						}
					l1039:
						if !_rules[ruleOffsetOperator]() {
							goto l946
						}
						{
							position1040, tokenIndex1040 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l1040
							}
							goto l1041
						l1040:
							position, tokenIndex = position1040, tokenIndex1040
						}
					l1041:
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l946
						}
						position++
					l1042:
						{
							position1043, tokenIndex1043 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l1043
							}
							position++
							goto l1042
						l1043:
							position, tokenIndex = position1043, tokenIndex1043
						}
						{
							position1044, tokenIndex1044 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l1044
							}
							goto l1045
						l1044:
							position, tokenIndex = position1044, tokenIndex1044
						}
					l1045:
						if !_rules[ruleOffsetOperator]() {
							goto l946
						}
						{
							position1046, tokenIndex1046 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l1046
							}
							goto l1047
						l1046:
							position, tokenIndex = position1046, tokenIndex1046
						}
					l1047:
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l946
						}
						position++
					l1048:
						{
							position1049, tokenIndex1049 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l1049
							}
							position++
							goto l1048
						l1049:
							position, tokenIndex = position1049, tokenIndex1049
						}
						if buffer[position] != rune(')') {
							goto l946
						}
						position++
					}
				l977:
					{
						position1050, tokenIndex1050 := position, tokenIndex
						{
							position1051, tokenIndex1051 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l1052
							}
							position++
							goto l1051
						l1052:
							position, tokenIndex = position1051, tokenIndex1051
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l1050
							}
							position++
						}
					l1051:
						goto l946
					l1050:
						position, tokenIndex = position1050, tokenIndex1050
					}
				}
			l952:
				add(ruleOffset, position947)
			}
			return true
		l946:
			position, tokenIndex = position946, tokenIndex946
			return false
		},
		/* 59 Section <- <([a-z] / [A-Z] / '@')+> */
		func() bool {
			position1053, tokenIndex1053 := position, tokenIndex
			{
				position1054 := position
				{
					position1057, tokenIndex1057 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l1058
					}
					position++
					goto l1057
				l1058:
					position, tokenIndex = position1057, tokenIndex1057
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l1059
					}
					position++
					goto l1057
				l1059:
					position, tokenIndex = position1057, tokenIndex1057
					if buffer[position] != rune('@') {
						goto l1053
					}
					position++
				}
			l1057:
			l1055:
				{
					position1056, tokenIndex1056 := position, tokenIndex
					{
						position1060, tokenIndex1060 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l1061
						}
						position++
						goto l1060
					l1061:
						position, tokenIndex = position1060, tokenIndex1060
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l1062
						}
						position++
						goto l1060
					l1062:
						position, tokenIndex = position1060, tokenIndex1060
						if buffer[position] != rune('@') {
							goto l1056
						}
						position++
					}
				l1060:
					goto l1055
				l1056:
					position, tokenIndex = position1056, tokenIndex1056
				}
				add(ruleSection, position1054)
			}
			return true
		l1053:
			position, tokenIndex = position1053, tokenIndex1053
			return false
		},
		/* 60 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */
		func() bool {
			position1063, tokenIndex1063 := position, tokenIndex
			{
				position1064 := position
				if buffer[position] != rune('%') {
					goto l1063
				}
				position++
				{
					position1065, tokenIndex1065 := position, tokenIndex
					if c := buffer[position]; c < rune('c') || c > rune('g') {
						goto l1066
					}
					position++
					goto l1065
				l1066:
					position, tokenIndex = position1065, tokenIndex1065
					if buffer[position] != rune('s') {
						goto l1063
					}
					position++
				}
			l1065:
				if buffer[position] != rune('s') {
					goto l1063
				}
				position++
				if buffer[position] != rune(':') {
					goto l1063
				}
				position++
				add(ruleSegmentRegister, position1064)
			}
			return true
		l1063:
			position, tokenIndex = position1063, tokenIndex1063
			return false
		},
	}
	p.rules = _rules
	return nil
}
