kodexa 7.5.514404640805__py3-none-any.whl → 8.0.14958192442__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. kodexa/dataclasses/__init__.py +1 -1
  2. kodexa/model/__init__.py +2 -2
  3. kodexa/model/objects.py +21 -1
  4. kodexa/model/utils.py +1 -1
  5. kodexa/pipeline/pipeline.py +1 -1
  6. kodexa/platform/client.py +1 -2
  7. kodexa/platform/kodexa.py +4 -1
  8. kodexa/platform/manifest.py +447 -0
  9. kodexa/selectors/__init__.py +1 -1
  10. kodexa/selectors/ast.py +371 -98
  11. kodexa/selectors/error.py +29 -0
  12. kodexa/selectors/kodexa-ast-visitor.py +268 -0
  13. kodexa/selectors/parser.py +91 -0
  14. kodexa/selectors/resources/KodexaSelector.interp +99 -0
  15. kodexa/selectors/resources/KodexaSelector.tokens +56 -0
  16. kodexa/selectors/resources/KodexaSelectorLexer.interp +119 -0
  17. kodexa/selectors/resources/KodexaSelectorLexer.py +204 -0
  18. kodexa/selectors/resources/KodexaSelectorLexer.tokens +56 -0
  19. kodexa/selectors/resources/KodexaSelectorListener.py +570 -0
  20. kodexa/selectors/resources/KodexaSelectorParser.py +3246 -0
  21. kodexa/selectors/resources/KodexaSelectorVisitor.py +323 -0
  22. kodexa/selectors/visitor.py +265 -0
  23. kodexa/steps/__init__.py +4 -2
  24. kodexa/steps/common.py +0 -68
  25. kodexa/testing/test_utils.py +1 -1
  26. {kodexa-7.5.514404640805.dist-info → kodexa-8.0.14958192442.dist-info}/METADATA +7 -3
  27. kodexa-8.0.14958192442.dist-info/RECORD +53 -0
  28. {kodexa-7.5.514404640805.dist-info → kodexa-8.0.14958192442.dist-info}/WHEEL +1 -1
  29. kodexa/model/model.py +0 -3259
  30. kodexa/model/persistence.py +0 -2017
  31. kodexa/selectors/core.py +0 -124
  32. kodexa/selectors/lexrules.py +0 -137
  33. kodexa/selectors/lextab.py +0 -83
  34. kodexa/selectors/lextab.pyi +0 -1
  35. kodexa/selectors/parserules.py +0 -414
  36. kodexa/selectors/parserules.pyi +0 -1
  37. kodexa/selectors/parsetab.py +0 -4149
  38. kodexa/selectors/parsetab.pyi +0 -1
  39. kodexa-7.5.514404640805.dist-info/RECORD +0 -50
  40. {kodexa-7.5.514404640805.dist-info → kodexa-8.0.14958192442.dist-info}/LICENSE +0 -0
@@ -0,0 +1,29 @@
1
+ from antlr4.error.ErrorListener import ErrorListener
2
+
3
+ class KodexaSyntaxErrorListener(ErrorListener):
4
+ """
5
+ Custom error listener for ANTLR parser to provide better error messages.
6
+ """
7
+
8
+ def __init__(self):
9
+ super(KodexaSyntaxErrorListener, self).__init__()
10
+ self.errors = []
11
+
12
+ def syntaxError(self, recognizer, offendingSymbol, line, column, msg, e):
13
+ """
14
+ Collect syntax errors during parsing.
15
+ """
16
+ error_msg = f"line {line}:{column} {msg}"
17
+ self.errors.append(error_msg)
18
+
19
+ def hasErrors(self):
20
+ """
21
+ Check if any errors were detected.
22
+ """
23
+ return len(self.errors) > 0
24
+
25
+ def getErrors(self):
26
+ """
27
+ Get the list of error messages.
28
+ """
29
+ return self.errors
@@ -0,0 +1,268 @@
1
+ from antlr4 import *
2
+ from kodexa.selectors.resources.KodexaSelectorParser import KodexaSelectorParser
3
+ from kodexa.selectors.resources.KodexaSelectorVisitor import KodexaSelectorVisitor
4
+ import kodexa.selectors.ast as ast
5
+
6
+ class KodexaASTVisitor(KodexaSelectorVisitor):
7
+ """
8
+ Visitor implementation for building an AST from an ANTLR parse tree.
9
+ This converts the ANTLR parse tree to the same AST structure used in the original code.
10
+ """
11
+
12
+ def visitOrExpr(self, ctx:KodexaSelectorParser.OrExprContext):
13
+ left = self.visit(ctx.expr(0))
14
+ right = self.visit(ctx.expr(1))
15
+ return ast.BinaryExpression(left, 'or', right)
16
+
17
+ def visitAndExpr(self, ctx:KodexaSelectorParser.AndExprContext):
18
+ left = self.visit(ctx.expr(0))
19
+ right = self.visit(ctx.expr(1))
20
+ return ast.BinaryExpression(left, 'and', right)
21
+
22
+ def visitEqualsExpr(self, ctx:KodexaSelectorParser.EqualsExprContext):
23
+ left = self.visit(ctx.expr(0))
24
+ right = self.visit(ctx.expr(1))
25
+ op = ctx.EQUALS().getText()
26
+ return ast.BinaryExpression(left, op, right)
27
+
28
+ def visitRelationalExpr(self, ctx:KodexaSelectorParser.RelationalExprContext):
29
+ left = self.visit(ctx.expr(0))
30
+ right = self.visit(ctx.expr(1))
31
+ op = ctx.REL_OP().getText()
32
+ return ast.BinaryExpression(left, op, right)
33
+
34
+ def visitAddExpr(self, ctx:KodexaSelectorParser.AddExprContext):
35
+ left = self.visit(ctx.expr(0))
36
+ right = self.visit(ctx.expr(1))
37
+ return ast.BinaryExpression(left, '+', right)
38
+
39
+ def visitSubtractExpr(self, ctx:KodexaSelectorParser.SubtractExprContext):
40
+ left = self.visit(ctx.expr(0))
41
+ right = self.visit(ctx.expr(1))
42
+ return ast.BinaryExpression(left, '-', right)
43
+
44
+ def visitUnionExpr(self, ctx:KodexaSelectorParser.UnionExprContext):
45
+ left = self.visit(ctx.expr(0))
46
+ right = self.visit(ctx.expr(1))
47
+ return ast.BinaryExpression(left, '|', right)
48
+
49
+ def visitIntersectExpr(self, ctx:KodexaSelectorParser.IntersectExprContext):
50
+ left = self.visit(ctx.expr(0))
51
+ right = self.visit(ctx.expr(1))
52
+ return ast.BinaryExpression(left, 'intersect', right)
53
+
54
+ def visitUnaryMinusExpr(self, ctx:KodexaSelectorParser.UnaryMinusExprContext):
55
+ operand = self.visit(ctx.expr())
56
+ return ast.UnaryExpression('-', operand)
57
+
58
+ def visitPipelineExpr(self, ctx:KodexaSelectorParser.PipelineExprContext):
59
+ left = self.visit(ctx.expr(0))
60
+ right = self.visit(ctx.expr(1))
61
+ return ast.PipelineExpression(left, 'stream', right)
62
+
63
+ def visitFuncCallExpr(self, ctx:KodexaSelectorParser.FuncCallExprContext):
64
+ return self.visit(ctx.functionCall())
65
+
66
+ def visitBooleanLiteralExpr(self, ctx:KodexaSelectorParser.BooleanLiteralExprContext):
67
+ return self.visit(ctx.booleanLiteral())
68
+
69
+ def visitPathBinaryExpr(self, ctx:KodexaSelectorParser.PathBinaryExprContext):
70
+ left = self.visit(ctx.filterExpr())
71
+ op = self.visit(ctx.pathSep())
72
+ right = self.visit(ctx.relativeLocationPath())
73
+ return ast.BinaryExpression(left, op, right)
74
+
75
+ def visitRootOnly(self, ctx:KodexaSelectorParser.RootOnlyContext):
76
+ return ast.AbsolutePath('/')
77
+
78
+ def visitRootPath(self, ctx:KodexaSelectorParser.RootPathContext):
79
+ relative = self.visit(ctx.relativeLocationPath())
80
+ return ast.AbsolutePath('/', relative)
81
+
82
+ def visitAbbreviatedAbsoluteLocationPath(self, ctx:KodexaSelectorParser.AbbreviatedAbsoluteLocationPathContext):
83
+ relative = self.visit(ctx.relativeLocationPath())
84
+ return ast.AbsolutePath('//', relative)
85
+
86
+ def visitSingleStep(self, ctx:KodexaSelectorParser.SingleStepContext):
87
+ return self.visit(ctx.step())
88
+
89
+ def visitPathStep(self, ctx:KodexaSelectorParser.PathStepContext):
90
+ left = self.visit(ctx.relativeLocationPath())
91
+ right = self.visit(ctx.step())
92
+ return ast.BinaryExpression(left, '/', right)
93
+
94
+ def visitAbbrevPathStep(self, ctx:KodexaSelectorParser.AbbrevPathStepContext):
95
+ left = self.visit(ctx.relativeLocationPath())
96
+ right = self.visit(ctx.step())
97
+ return ast.BinaryExpression(left, '//', right)
98
+
99
+ def visitNodeTestStep(self, ctx:KodexaSelectorParser.NodeTestStepContext):
100
+ node_test = self.visit(ctx.nodeTest())
101
+ return ast.Step(None, node_test, [])
102
+
103
+ def visitNodeTestPredStep(self, ctx:KodexaSelectorParser.NodeTestPredStepContext):
104
+ node_test = self.visit(ctx.nodeTest())
105
+ predicates = self.visit(ctx.predicateList())
106
+ return ast.Step(None, node_test, predicates)
107
+
108
+ def visitAxisNodeTestStep(self, ctx:KodexaSelectorParser.AxisNodeTestStepContext):
109
+ axis = self.visit(ctx.axisSpecifier())
110
+ node_test = self.visit(ctx.nodeTest())
111
+ return ast.Step(axis, node_test, [])
112
+
113
+ def visitAxisNodeTestPredStep(self, ctx:KodexaSelectorParser.AxisNodeTestPredStepContext):
114
+ axis = self.visit(ctx.axisSpecifier())
115
+ node_test = self.visit(ctx.nodeTest())
116
+ predicates = self.visit(ctx.predicateList())
117
+ return ast.Step(axis, node_test, predicates)
118
+
119
+ def visitSelfStep(self, ctx:KodexaSelectorParser.SelfStepContext):
120
+ return ast.AbbreviatedStep('.')
121
+
122
+ def visitParentStep(self, ctx:KodexaSelectorParser.ParentStepContext):
123
+ return ast.AbbreviatedStep('..')
124
+
125
+ def visitFullAxis(self, ctx:KodexaSelectorParser.FullAxisContext):
126
+ return ctx.AXISNAME().getText()
127
+
128
+ def visitAttrAxis(self, ctx:KodexaSelectorParser.AttrAxisContext):
129
+ return '@'
130
+
131
+ def visitNameTestNode(self, ctx:KodexaSelectorParser.NameTestNodeContext):
132
+ return self.visit(ctx.nameTest())
133
+
134
+ def visitAnyNameTest(self, ctx:KodexaSelectorParser.AnyNameTestContext):
135
+ return ast.NameTest(None, '*')
136
+
137
+ def visitPrefixedAnyNameTest(self, ctx:KodexaSelectorParser.PrefixedAnyNameTestContext):
138
+ prefix = ctx.NCNAME().getText()
139
+ return ast.NameTest(prefix, '*')
140
+
141
+ def visitQNameTest(self, ctx:KodexaSelectorParser.QNameTestContext):
142
+ qname = self.visit(ctx.qName())
143
+ return ast.NameTest(qname[0], qname[1])
144
+
145
+ def visitPrefixedName(self, ctx:KodexaSelectorParser.PrefixedNameContext):
146
+ prefix = ctx.NCNAME(0).getText()
147
+ name = ctx.NCNAME(1).getText()
148
+ return (prefix, name)
149
+
150
+ def visitSimpleName(self, ctx:KodexaSelectorParser.SimpleNameContext):
151
+ return (None, ctx.NCNAME().getText())
152
+
153
+ def visitPrefixedFuncName(self, ctx:KodexaSelectorParser.PrefixedFuncNameContext):
154
+ prefix = ctx.NCNAME().getText()
155
+ name = ctx.FUNCNAME().getText()
156
+ return (prefix, name)
157
+
158
+ def visitSimpleFuncName(self, ctx:KodexaSelectorParser.SimpleFuncNameContext):
159
+ return (None, ctx.FUNCNAME().getText())
160
+
161
+ def visitVarRefFilter(self, ctx:KodexaSelectorParser.VarRefFilterContext):
162
+ return self.visit(ctx.variableReference())
163
+
164
+ def visitLiteralFilter(self, ctx:KodexaSelectorParser.LiteralFilterContext):
165
+ literal = ctx.LITERAL().getText()
166
+ return literal[1:-1] # Remove quotes
167
+
168
+ def visitBooleanFilter(self, ctx:KodexaSelectorParser.BooleanFilterContext):
169
+ return self.visit(ctx.booleanLiteral())
170
+
171
+ def visitBooleanLiteral(self, ctx:KodexaSelectorParser.BooleanLiteralContext):
172
+ if ctx.TRUE() is not None:
173
+ return True
174
+ else:
175
+ return False
176
+
177
+ def visitTrueFunction(self, ctx:KodexaSelectorParser.TrueFunctionContext):
178
+ args = self.visit(ctx.formalArguments())
179
+ return ast.FunctionCall(None, "true", args)
180
+
181
+ def visitFalseFunction(self, ctx:KodexaSelectorParser.FalseFunctionContext):
182
+ args = self.visit(ctx.formalArguments())
183
+ return ast.FunctionCall(None, "false", args)
184
+
185
+ def visitNumberFilter(self, ctx:KodexaSelectorParser.NumberFilterContext):
186
+ return self.visit(ctx.number())
187
+
188
+ def visitFuncCallFilter(self, ctx:KodexaSelectorParser.FuncCallFilterContext):
189
+ return self.visit(ctx.functionCall())
190
+
191
+ def visitGroupedFilter(self, ctx:KodexaSelectorParser.GroupedFilterContext):
192
+ return self.visit(ctx.expr())
193
+
194
+ def visitPredicatedFilter(self, ctx:KodexaSelectorParser.PredicatedFilterContext):
195
+ base = self.visit(ctx.filterExpr())
196
+ predicate = self.visit(ctx.predicate())
197
+
198
+ if not hasattr(base, 'append_predicate'):
199
+ base = ast.PredicatedExpression(base)
200
+
201
+ base.append_predicate(predicate)
202
+ return base
203
+
204
+ def visitSinglePredicate(self, ctx:KodexaSelectorParser.SinglePredicateContext):
205
+ return [self.visit(ctx.predicate())]
206
+
207
+ def visitMultiplePredicate(self, ctx:KodexaSelectorParser.MultiplePredicateContext):
208
+ predicates = self.visit(ctx.predicateList())
209
+ predicates.append(self.visit(ctx.predicate()))
210
+ return predicates
211
+
212
+ def visitPredicate(self, ctx:KodexaSelectorParser.PredicateContext):
213
+ return self.visit(ctx.expr())
214
+
215
+ def visitVariableReference(self, ctx:KodexaSelectorParser.VariableReferenceContext):
216
+ qname = self.visit(ctx.qName())
217
+ return ast.VariableReference(qname)
218
+
219
+ def visitNumber(self, ctx:KodexaSelectorParser.NumberContext):
220
+ if ctx.FLOAT() is not None:
221
+ return float(ctx.FLOAT().getText())
222
+ else:
223
+ return int(ctx.INTEGER().getText())
224
+
225
+ def visitFunctionCall(self, ctx:KodexaSelectorParser.FunctionCallContext):
226
+ if ctx.builtInFunctionCall() is not None:
227
+ return self.visit(ctx.builtInFunctionCall())
228
+ else:
229
+ qname = self.visit(ctx.funcQName())
230
+ args = self.visit(ctx.formalArguments())
231
+ return ast.FunctionCall(qname[0], qname[1], args)
232
+
233
+ def visitEmptyArgs(self, ctx:KodexaSelectorParser.EmptyArgsContext):
234
+ return []
235
+
236
+ def visitArgsList(self, ctx:KodexaSelectorParser.ArgsListContext):
237
+ return self.visit(ctx.argumentList())
238
+
239
+ def visitSingleArg(self, ctx:KodexaSelectorParser.SingleArgContext):
240
+ return [self.visit(ctx.expr())]
241
+
242
+ def visitMultipleArgs(self, ctx:KodexaSelectorParser.MultipleArgsContext):
243
+ args = self.visit(ctx.argumentList())
244
+ args.append(self.visit(ctx.expr()))
245
+ return args
246
+
247
+ def visitPathSep(self, ctx:KodexaSelectorParser.PathSepContext):
248
+ if ctx.PATH_SEP() is not None:
249
+ return '/'
250
+ else:
251
+ return '//'
252
+
253
+ # Add default implementations for any missing visit methods
254
+ def visitChildren(self, ctx):
255
+ result = self.defaultResult()
256
+ n = ctx.getChildCount()
257
+ for i in range(n):
258
+ if not ctx.getChild(i).getText() in ['{', '}', ';']:
259
+ c = ctx.getChild(i)
260
+ childResult = c.accept(self)
261
+ result = self.aggregateResult(result, childResult)
262
+ return result
263
+
264
+ def defaultResult(self):
265
+ return None
266
+
267
+ def aggregateResult(self, aggregate, nextResult):
268
+ return nextResult if nextResult is not None else aggregate
@@ -0,0 +1,91 @@
1
+ """Core XPath parsing using ANTLR.
2
+
3
+ This module provides the interface for parsing XPath expressions using ANTLR.
4
+ """
5
+
6
+ import re
7
+ from antlr4 import InputStream, CommonTokenStream
8
+ from kodexa.model.model import Document
9
+ from kodexa.selectors.resources.KodexaSelectorLexer import KodexaSelectorLexer
10
+ from kodexa.selectors.resources.KodexaSelectorParser import KodexaSelectorParser
11
+ from kodexa.selectors.visitor import KodexaASTVisitor
12
+ from kodexa.selectors.error import KodexaSyntaxErrorListener
13
+
14
+ __all__ = ["parse"]
15
+
16
+ class SelectorContext:
17
+ def __init__(self, document: Document, first_only=False):
18
+ self.pattern_cache = {}
19
+ self.last_op = None
20
+ self.document: Document = document
21
+ self.stream = 0
22
+ self.first_only = first_only
23
+
24
+ def cache_pattern(self, pattern):
25
+ if pattern not in self.pattern_cache:
26
+ self.pattern_cache[pattern] = re.compile(pattern)
27
+ return self.pattern_cache[pattern]
28
+
29
+ def parse(xpath):
30
+ """Parse an xpath expression.
31
+
32
+ Args:
33
+ xpath (str): The XPath expression to parse.
34
+
35
+ Returns:
36
+ The AST representing the parsed XPath expression.
37
+
38
+ Raises:
39
+ RuntimeError: If there are syntax errors in the XPath expression.
40
+ """
41
+ # Create an input stream from the xpath string
42
+ input_stream = InputStream(xpath)
43
+
44
+ # Create a lexer that feeds off of the input stream
45
+ lexer = KodexaSelectorLexer(input_stream)
46
+
47
+ # Remove the default console error listener
48
+ lexer.removeErrorListeners()
49
+
50
+ # Add our custom error listener
51
+ error_listener = KodexaSyntaxErrorListener()
52
+ lexer.addErrorListener(error_listener)
53
+
54
+ # Create a buffer of tokens pulled from the lexer
55
+ token_stream = CommonTokenStream(lexer)
56
+
57
+ # Create a parser that feeds off the tokens buffer
58
+ parser = KodexaSelectorParser(token_stream)
59
+
60
+ # Remove the default console error listener
61
+ parser.removeErrorListeners()
62
+
63
+ # Add our custom error listener
64
+ parser.addErrorListener(error_listener)
65
+
66
+ # Begin parsing at the "xpath" rule
67
+ tree = parser.xpath()
68
+
69
+ # Check if there were any syntax errors
70
+ if error_listener.hasErrors():
71
+ error_msg = "\n".join(error_listener.getErrors())
72
+ raise RuntimeError(f"Syntax error in Kodexa selector expression: {error_msg}")
73
+
74
+ # Create a visitor to build the AST
75
+ visitor = KodexaASTVisitor()
76
+
77
+ # Visit the parse tree and get the resulting AST
78
+ ast = visitor.visit(tree)
79
+
80
+ return ast
81
+
82
+ def debug_tokens(s):
83
+ """Lex a string as XPath tokens, and print each token as it is lexed.
84
+ This is used primarily for debugging."""
85
+ input_stream = InputStream(s)
86
+ lexer = KodexaSelectorLexer(input_stream)
87
+ token_stream = CommonTokenStream(lexer)
88
+ token_stream.fill()
89
+
90
+ for token in token_stream.tokens:
91
+ print(token)
@@ -0,0 +1,99 @@
1
+ token literal names:
2
+ null
3
+ 'or'
4
+ 'and'
5
+ 'intersect'
6
+ 'stream'
7
+ '/'
8
+ '//'
9
+ '.'
10
+ '..'
11
+ '::'
12
+ '@'
13
+ '('
14
+ ')'
15
+ '['
16
+ ']'
17
+ '|'
18
+ null
19
+ null
20
+ '+'
21
+ '-'
22
+ '*'
23
+ ','
24
+ ':'
25
+ '$'
26
+ 'true'
27
+ 'false'
28
+ null
29
+ null
30
+ null
31
+ null
32
+ null
33
+ null
34
+ null
35
+ null
36
+
37
+ token symbolic names:
38
+ null
39
+ OR
40
+ AND
41
+ INTERSECT
42
+ PIPELINE
43
+ PATH_SEP
44
+ ABBREV_PATH_SEP
45
+ ABBREV_STEP_SELF
46
+ ABBREV_STEP_PARENT
47
+ AXIS_SEP
48
+ ABBREV_AXIS_AT
49
+ LPAREN
50
+ RPAREN
51
+ LBRACKET
52
+ RBRACKET
53
+ UNION
54
+ EQUALS
55
+ REL_OP
56
+ PLUS
57
+ MINUS
58
+ STAR
59
+ COMMA
60
+ COLON
61
+ DOLLAR
62
+ TRUE
63
+ FALSE
64
+ FUNCTION_NAME
65
+ LITERAL
66
+ FLOAT
67
+ INTEGER
68
+ NCNAME
69
+ FUNCNAME
70
+ AXISNAME
71
+ WS
72
+
73
+ rule names:
74
+ xpath
75
+ expr
76
+ absoluteLocationPath
77
+ abbreviatedAbsoluteLocationPath
78
+ relativeLocationPath
79
+ step
80
+ axisSpecifier
81
+ nodeTest
82
+ nameTest
83
+ qName
84
+ filterExpr
85
+ predicateList
86
+ predicate
87
+ variableReference
88
+ number
89
+ booleanLiteral
90
+ functionCall
91
+ builtInFunctionCall
92
+ funcQName
93
+ formalArguments
94
+ argumentList
95
+ pathSep
96
+
97
+
98
+ atn:
99
+ [4, 1, 33, 229, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 63, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 92, 8, 1, 10, 1, 12, 1, 95, 9, 1, 1, 2, 1, 2, 1, 2, 3, 2, 100, 8, 2, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 5, 4, 114, 8, 4, 10, 4, 12, 4, 117, 9, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 132, 8, 5, 1, 6, 1, 6, 1, 6, 3, 6, 137, 8, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 146, 8, 8, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 152, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 164, 8, 10, 1, 10, 1, 10, 5, 10, 168, 8, 10, 10, 10, 12, 10, 171, 9, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 178, 8, 11, 10, 11, 12, 11, 181, 9, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 198, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 204, 8, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 214, 8, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 5, 20, 222, 8, 20, 10, 20, 12, 20, 225, 9, 20, 1, 21, 1, 21, 1, 21, 0, 5, 2, 8, 20, 22, 40, 22, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 0, 3, 1, 0, 28, 29, 1, 0, 24, 25, 1, 0, 5, 6, 247, 0, 44, 1, 0, 0, 0, 2, 62, 1, 0, 0, 0, 4, 99, 1, 0, 0, 0, 6, 101, 1, 0, 0, 0, 8, 104, 1, 0, 0, 0, 10, 131, 1, 0, 0, 0, 12, 136, 1, 0, 0, 0, 14, 138, 1, 0, 0, 0, 16, 145, 1, 0, 0, 0, 18, 151, 1, 0, 0, 0, 20, 163, 1, 0, 0, 0, 22, 172, 1, 0, 0, 0, 24, 182, 1, 0, 0, 0, 26, 186, 1, 0, 0, 0, 28, 189, 1, 0, 0, 0, 30, 191, 1, 0, 0, 0, 32, 197, 1, 0, 0, 0, 34, 203, 1, 0, 0, 0, 36, 205, 1, 0, 0, 0, 38, 213, 1, 0, 0, 0, 40, 215, 1, 0, 0, 0, 42, 226, 1, 0, 0, 0, 44, 45, 3, 2, 1, 0, 45, 1, 1, 0, 0, 0, 46, 47, 6, 1, -1, 0, 47, 48, 5, 19, 0, 0, 48, 63, 3, 2, 1, 11, 49, 63, 3, 32, 16, 0, 50, 51, 3, 20, 10, 0, 51, 52, 3, 42, 21, 0, 52, 53, 3, 8, 4, 0, 53, 63, 1, 0, 0, 0, 54, 63, 3, 8, 4, 0, 55, 63, 3, 4, 2, 0, 56, 63, 3, 6, 3, 0, 57, 63, 3, 20, 10, 0, 58, 63, 3, 16, 8, 0, 59, 60, 5, 5, 0, 0, 60, 63, 3, 16, 8, 0, 61, 63, 3, 30, 15, 0, 62, 46, 1, 0, 0, 0, 62, 49, 1, 0, 0, 0, 62, 50, 1, 0, 0, 0, 62, 54, 1, 0, 0, 0, 62, 55, 1, 0, 0, 0, 62, 56, 1, 0, 0, 0, 62, 57, 1, 0, 0, 0, 62, 58, 1, 0, 0, 0, 62, 59, 1, 0, 0, 0, 62, 61, 1, 0, 0, 0, 63, 93, 1, 0, 0, 0, 64, 65, 10, 19, 0, 0, 65, 66, 5, 1, 0, 0, 66, 92, 3, 2, 1, 20, 67, 68, 10, 18, 0, 0, 68, 69, 5, 2, 0, 0, 69, 92, 3, 2, 1, 19, 70, 71, 10, 17, 0, 0, 71, 72, 5, 16, 0, 0, 72, 92, 3, 2, 1, 18, 73, 74, 10, 16, 0, 0, 74, 75, 5, 17, 0, 0, 75, 92, 3, 2, 1, 17, 76, 77, 10, 15, 0, 0, 77, 78, 5, 18, 0, 0, 78, 92, 3, 2, 1, 16, 79, 80, 10, 14, 0, 0, 80, 81, 5, 19, 0, 0, 81, 92, 3, 2, 1, 15, 82, 83, 10, 13, 0, 0, 83, 84, 5, 15, 0, 0, 84, 92, 3, 2, 1, 14, 85, 86, 10, 12, 0, 0, 86, 87, 5, 3, 0, 0, 87, 92, 3, 2, 1, 13, 88, 89, 10, 10, 0, 0, 89, 90, 5, 4, 0, 0, 90, 92, 3, 2, 1, 11, 91, 64, 1, 0, 0, 0, 91, 67, 1, 0, 0, 0, 91, 70, 1, 0, 0, 0, 91, 73, 1, 0, 0, 0, 91, 76, 1, 0, 0, 0, 91, 79, 1, 0, 0, 0, 91, 82, 1, 0, 0, 0, 91, 85, 1, 0, 0, 0, 91, 88, 1, 0, 0, 0, 92, 95, 1, 0, 0, 0, 93, 91, 1, 0, 0, 0, 93, 94, 1, 0, 0, 0, 94, 3, 1, 0, 0, 0, 95, 93, 1, 0, 0, 0, 96, 100, 5, 5, 0, 0, 97, 98, 5, 5, 0, 0, 98, 100, 3, 8, 4, 0, 99, 96, 1, 0, 0, 0, 99, 97, 1, 0, 0, 0, 100, 5, 1, 0, 0, 0, 101, 102, 5, 6, 0, 0, 102, 103, 3, 8, 4, 0, 103, 7, 1, 0, 0, 0, 104, 105, 6, 4, -1, 0, 105, 106, 3, 10, 5, 0, 106, 115, 1, 0, 0, 0, 107, 108, 10, 2, 0, 0, 108, 109, 5, 5, 0, 0, 109, 114, 3, 10, 5, 0, 110, 111, 10, 1, 0, 0, 111, 112, 5, 6, 0, 0, 112, 114, 3, 10, 5, 0, 113, 107, 1, 0, 0, 0, 113, 110, 1, 0, 0, 0, 114, 117, 1, 0, 0, 0, 115, 113, 1, 0, 0, 0, 115, 116, 1, 0, 0, 0, 116, 9, 1, 0, 0, 0, 117, 115, 1, 0, 0, 0, 118, 132, 3, 14, 7, 0, 119, 120, 3, 14, 7, 0, 120, 121, 3, 22, 11, 0, 121, 132, 1, 0, 0, 0, 122, 123, 3, 12, 6, 0, 123, 124, 3, 14, 7, 0, 124, 132, 1, 0, 0, 0, 125, 126, 3, 12, 6, 0, 126, 127, 3, 14, 7, 0, 127, 128, 3, 22, 11, 0, 128, 132, 1, 0, 0, 0, 129, 132, 5, 7, 0, 0, 130, 132, 5, 8, 0, 0, 131, 118, 1, 0, 0, 0, 131, 119, 1, 0, 0, 0, 131, 122, 1, 0, 0, 0, 131, 125, 1, 0, 0, 0, 131, 129, 1, 0, 0, 0, 131, 130, 1, 0, 0, 0, 132, 11, 1, 0, 0, 0, 133, 134, 5, 32, 0, 0, 134, 137, 5, 9, 0, 0, 135, 137, 5, 10, 0, 0, 136, 133, 1, 0, 0, 0, 136, 135, 1, 0, 0, 0, 137, 13, 1, 0, 0, 0, 138, 139, 3, 16, 8, 0, 139, 15, 1, 0, 0, 0, 140, 146, 5, 20, 0, 0, 141, 142, 5, 30, 0, 0, 142, 143, 5, 22, 0, 0, 143, 146, 5, 20, 0, 0, 144, 146, 3, 18, 9, 0, 145, 140, 1, 0, 0, 0, 145, 141, 1, 0, 0, 0, 145, 144, 1, 0, 0, 0, 146, 17, 1, 0, 0, 0, 147, 148, 5, 30, 0, 0, 148, 149, 5, 22, 0, 0, 149, 152, 5, 30, 0, 0, 150, 152, 5, 30, 0, 0, 151, 147, 1, 0, 0, 0, 151, 150, 1, 0, 0, 0, 152, 19, 1, 0, 0, 0, 153, 154, 6, 10, -1, 0, 154, 164, 3, 26, 13, 0, 155, 164, 5, 27, 0, 0, 156, 164, 3, 28, 14, 0, 157, 164, 3, 30, 15, 0, 158, 164, 3, 32, 16, 0, 159, 160, 5, 11, 0, 0, 160, 161, 3, 2, 1, 0, 161, 162, 5, 12, 0, 0, 162, 164, 1, 0, 0, 0, 163, 153, 1, 0, 0, 0, 163, 155, 1, 0, 0, 0, 163, 156, 1, 0, 0, 0, 163, 157, 1, 0, 0, 0, 163, 158, 1, 0, 0, 0, 163, 159, 1, 0, 0, 0, 164, 169, 1, 0, 0, 0, 165, 166, 10, 1, 0, 0, 166, 168, 3, 24, 12, 0, 167, 165, 1, 0, 0, 0, 168, 171, 1, 0, 0, 0, 169, 167, 1, 0, 0, 0, 169, 170, 1, 0, 0, 0, 170, 21, 1, 0, 0, 0, 171, 169, 1, 0, 0, 0, 172, 173, 6, 11, -1, 0, 173, 174, 3, 24, 12, 0, 174, 179, 1, 0, 0, 0, 175, 176, 10, 1, 0, 0, 176, 178, 3, 24, 12, 0, 177, 175, 1, 0, 0, 0, 178, 181, 1, 0, 0, 0, 179, 177, 1, 0, 0, 0, 179, 180, 1, 0, 0, 0, 180, 23, 1, 0, 0, 0, 181, 179, 1, 0, 0, 0, 182, 183, 5, 13, 0, 0, 183, 184, 3, 2, 1, 0, 184, 185, 5, 14, 0, 0, 185, 25, 1, 0, 0, 0, 186, 187, 5, 23, 0, 0, 187, 188, 3, 18, 9, 0, 188, 27, 1, 0, 0, 0, 189, 190, 7, 0, 0, 0, 190, 29, 1, 0, 0, 0, 191, 192, 7, 1, 0, 0, 192, 31, 1, 0, 0, 0, 193, 194, 3, 36, 18, 0, 194, 195, 3, 38, 19, 0, 195, 198, 1, 0, 0, 0, 196, 198, 3, 34, 17, 0, 197, 193, 1, 0, 0, 0, 197, 196, 1, 0, 0, 0, 198, 33, 1, 0, 0, 0, 199, 200, 5, 24, 0, 0, 200, 204, 3, 38, 19, 0, 201, 202, 5, 25, 0, 0, 202, 204, 3, 38, 19, 0, 203, 199, 1, 0, 0, 0, 203, 201, 1, 0, 0, 0, 204, 35, 1, 0, 0, 0, 205, 206, 5, 26, 0, 0, 206, 37, 1, 0, 0, 0, 207, 208, 5, 11, 0, 0, 208, 214, 5, 12, 0, 0, 209, 210, 5, 11, 0, 0, 210, 211, 3, 40, 20, 0, 211, 212, 5, 12, 0, 0, 212, 214, 1, 0, 0, 0, 213, 207, 1, 0, 0, 0, 213, 209, 1, 0, 0, 0, 214, 39, 1, 0, 0, 0, 215, 216, 6, 20, -1, 0, 216, 217, 3, 2, 1, 0, 217, 223, 1, 0, 0, 0, 218, 219, 10, 1, 0, 0, 219, 220, 5, 21, 0, 0, 220, 222, 3, 2, 1, 0, 221, 218, 1, 0, 0, 0, 222, 225, 1, 0, 0, 0, 223, 221, 1, 0, 0, 0, 223, 224, 1, 0, 0, 0, 224, 41, 1, 0, 0, 0, 225, 223, 1, 0, 0, 0, 226, 227, 7, 2, 0, 0, 227, 43, 1, 0, 0, 0, 17, 62, 91, 93, 99, 113, 115, 131, 136, 145, 151, 163, 169, 179, 197, 203, 213, 223]
@@ -0,0 +1,56 @@
1
+ OR=1
2
+ AND=2
3
+ INTERSECT=3
4
+ PIPELINE=4
5
+ PATH_SEP=5
6
+ ABBREV_PATH_SEP=6
7
+ ABBREV_STEP_SELF=7
8
+ ABBREV_STEP_PARENT=8
9
+ AXIS_SEP=9
10
+ ABBREV_AXIS_AT=10
11
+ LPAREN=11
12
+ RPAREN=12
13
+ LBRACKET=13
14
+ RBRACKET=14
15
+ UNION=15
16
+ EQUALS=16
17
+ REL_OP=17
18
+ PLUS=18
19
+ MINUS=19
20
+ STAR=20
21
+ COMMA=21
22
+ COLON=22
23
+ DOLLAR=23
24
+ TRUE=24
25
+ FALSE=25
26
+ FUNCTION_NAME=26
27
+ LITERAL=27
28
+ FLOAT=28
29
+ INTEGER=29
30
+ NCNAME=30
31
+ FUNCNAME=31
32
+ AXISNAME=32
33
+ WS=33
34
+ 'or'=1
35
+ 'and'=2
36
+ 'intersect'=3
37
+ 'stream'=4
38
+ '/'=5
39
+ '//'=6
40
+ '.'=7
41
+ '..'=8
42
+ '::'=9
43
+ '@'=10
44
+ '('=11
45
+ ')'=12
46
+ '['=13
47
+ ']'=14
48
+ '|'=15
49
+ '+'=18
50
+ '-'=19
51
+ '*'=20
52
+ ','=21
53
+ ':'=22
54
+ '$'=23
55
+ 'true'=24
56
+ 'false'=25
@@ -0,0 +1,119 @@
1
+ token literal names:
2
+ null
3
+ 'or'
4
+ 'and'
5
+ 'intersect'
6
+ 'stream'
7
+ '/'
8
+ '//'
9
+ '.'
10
+ '..'
11
+ '::'
12
+ '@'
13
+ '('
14
+ ')'
15
+ '['
16
+ ']'
17
+ '|'
18
+ null
19
+ null
20
+ '+'
21
+ '-'
22
+ '*'
23
+ ','
24
+ ':'
25
+ '$'
26
+ 'true'
27
+ 'false'
28
+ null
29
+ null
30
+ null
31
+ null
32
+ null
33
+ null
34
+ null
35
+ null
36
+
37
+ token symbolic names:
38
+ null
39
+ OR
40
+ AND
41
+ INTERSECT
42
+ PIPELINE
43
+ PATH_SEP
44
+ ABBREV_PATH_SEP
45
+ ABBREV_STEP_SELF
46
+ ABBREV_STEP_PARENT
47
+ AXIS_SEP
48
+ ABBREV_AXIS_AT
49
+ LPAREN
50
+ RPAREN
51
+ LBRACKET
52
+ RBRACKET
53
+ UNION
54
+ EQUALS
55
+ REL_OP
56
+ PLUS
57
+ MINUS
58
+ STAR
59
+ COMMA
60
+ COLON
61
+ DOLLAR
62
+ TRUE
63
+ FALSE
64
+ FUNCTION_NAME
65
+ LITERAL
66
+ FLOAT
67
+ INTEGER
68
+ NCNAME
69
+ FUNCNAME
70
+ AXISNAME
71
+ WS
72
+
73
+ rule names:
74
+ OR
75
+ AND
76
+ INTERSECT
77
+ PIPELINE
78
+ PATH_SEP
79
+ ABBREV_PATH_SEP
80
+ ABBREV_STEP_SELF
81
+ ABBREV_STEP_PARENT
82
+ AXIS_SEP
83
+ ABBREV_AXIS_AT
84
+ LPAREN
85
+ RPAREN
86
+ LBRACKET
87
+ RBRACKET
88
+ UNION
89
+ EQUALS
90
+ REL_OP
91
+ PLUS
92
+ MINUS
93
+ STAR
94
+ COMMA
95
+ COLON
96
+ DOLLAR
97
+ TRUE
98
+ FALSE
99
+ FUNCTION_NAME
100
+ LITERAL
101
+ FLOAT
102
+ INTEGER
103
+ NCNAME
104
+ FUNCNAME
105
+ AXISNAME
106
+ NameStartChar
107
+ NameChar
108
+ DIGIT
109
+ WS
110
+
111
+ channel names:
112
+ DEFAULT_TOKEN_CHANNEL
113
+ HIDDEN
114
+
115
+ mode names:
116
+ DEFAULT_MODE
117
+
118
+ atn:
119
+ [4, 0, 33, 312, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 3, 15, 126, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 133, 8, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 241, 8, 25, 1, 26, 1, 26, 5, 26, 245, 8, 26, 10, 26, 12, 26, 248, 9, 26, 1, 26, 1, 26, 1, 26, 5, 26, 253, 8, 26, 10, 26, 12, 26, 256, 9, 26, 1, 26, 3, 26, 259, 8, 26, 1, 27, 4, 27, 262, 8, 27, 11, 27, 12, 27, 263, 1, 27, 1, 27, 5, 27, 268, 8, 27, 10, 27, 12, 27, 271, 9, 27, 1, 27, 1, 27, 4, 27, 275, 8, 27, 11, 27, 12, 27, 276, 3, 27, 279, 8, 27, 1, 28, 4, 28, 282, 8, 28, 11, 28, 12, 28, 283, 1, 29, 1, 29, 5, 29, 288, 8, 29, 10, 29, 12, 29, 291, 9, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 3, 32, 298, 8, 32, 1, 33, 1, 33, 3, 33, 302, 8, 33, 1, 34, 1, 34, 1, 35, 4, 35, 307, 8, 35, 11, 35, 12, 35, 308, 1, 35, 1, 35, 0, 0, 36, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 0, 67, 0, 69, 0, 71, 33, 1, 0, 7, 2, 0, 60, 60, 62, 62, 1, 0, 34, 34, 1, 0, 39, 39, 14, 0, 65, 90, 95, 95, 97, 122, 192, 214, 216, 246, 248, 767, 880, 893, 895, 8191, 8204, 8205, 8304, 8591, 11264, 12271, 12289, 55295, 63744, 64975, 65008, 65533, 5, 0, 45, 46, 48, 57, 183, 183, 768, 879, 8255, 8256, 1, 0, 48, 57, 3, 0, 9, 10, 13, 13, 32, 32, 331, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 1, 73, 1, 0, 0, 0, 3, 76, 1, 0, 0, 0, 5, 80, 1, 0, 0, 0, 7, 90, 1, 0, 0, 0, 9, 97, 1, 0, 0, 0, 11, 99, 1, 0, 0, 0, 13, 102, 1, 0, 0, 0, 15, 104, 1, 0, 0, 0, 17, 107, 1, 0, 0, 0, 19, 110, 1, 0, 0, 0, 21, 112, 1, 0, 0, 0, 23, 114, 1, 0, 0, 0, 25, 116, 1, 0, 0, 0, 27, 118, 1, 0, 0, 0, 29, 120, 1, 0, 0, 0, 31, 125, 1, 0, 0, 0, 33, 132, 1, 0, 0, 0, 35, 134, 1, 0, 0, 0, 37, 136, 1, 0, 0, 0, 39, 138, 1, 0, 0, 0, 41, 140, 1, 0, 0, 0, 43, 142, 1, 0, 0, 0, 45, 144, 1, 0, 0, 0, 47, 146, 1, 0, 0, 0, 49, 151, 1, 0, 0, 0, 51, 240, 1, 0, 0, 0, 53, 258, 1, 0, 0, 0, 55, 278, 1, 0, 0, 0, 57, 281, 1, 0, 0, 0, 59, 285, 1, 0, 0, 0, 61, 292, 1, 0, 0, 0, 63, 294, 1, 0, 0, 0, 65, 297, 1, 0, 0, 0, 67, 301, 1, 0, 0, 0, 69, 303, 1, 0, 0, 0, 71, 306, 1, 0, 0, 0, 73, 74, 5, 111, 0, 0, 74, 75, 5, 114, 0, 0, 75, 2, 1, 0, 0, 0, 76, 77, 5, 97, 0, 0, 77, 78, 5, 110, 0, 0, 78, 79, 5, 100, 0, 0, 79, 4, 1, 0, 0, 0, 80, 81, 5, 105, 0, 0, 81, 82, 5, 110, 0, 0, 82, 83, 5, 116, 0, 0, 83, 84, 5, 101, 0, 0, 84, 85, 5, 114, 0, 0, 85, 86, 5, 115, 0, 0, 86, 87, 5, 101, 0, 0, 87, 88, 5, 99, 0, 0, 88, 89, 5, 116, 0, 0, 89, 6, 1, 0, 0, 0, 90, 91, 5, 115, 0, 0, 91, 92, 5, 116, 0, 0, 92, 93, 5, 114, 0, 0, 93, 94, 5, 101, 0, 0, 94, 95, 5, 97, 0, 0, 95, 96, 5, 109, 0, 0, 96, 8, 1, 0, 0, 0, 97, 98, 5, 47, 0, 0, 98, 10, 1, 0, 0, 0, 99, 100, 5, 47, 0, 0, 100, 101, 5, 47, 0, 0, 101, 12, 1, 0, 0, 0, 102, 103, 5, 46, 0, 0, 103, 14, 1, 0, 0, 0, 104, 105, 5, 46, 0, 0, 105, 106, 5, 46, 0, 0, 106, 16, 1, 0, 0, 0, 107, 108, 5, 58, 0, 0, 108, 109, 5, 58, 0, 0, 109, 18, 1, 0, 0, 0, 110, 111, 5, 64, 0, 0, 111, 20, 1, 0, 0, 0, 112, 113, 5, 40, 0, 0, 113, 22, 1, 0, 0, 0, 114, 115, 5, 41, 0, 0, 115, 24, 1, 0, 0, 0, 116, 117, 5, 91, 0, 0, 117, 26, 1, 0, 0, 0, 118, 119, 5, 93, 0, 0, 119, 28, 1, 0, 0, 0, 120, 121, 5, 124, 0, 0, 121, 30, 1, 0, 0, 0, 122, 123, 5, 33, 0, 0, 123, 126, 5, 61, 0, 0, 124, 126, 5, 61, 0, 0, 125, 122, 1, 0, 0, 0, 125, 124, 1, 0, 0, 0, 126, 32, 1, 0, 0, 0, 127, 128, 5, 60, 0, 0, 128, 133, 5, 61, 0, 0, 129, 130, 5, 62, 0, 0, 130, 133, 5, 61, 0, 0, 131, 133, 7, 0, 0, 0, 132, 127, 1, 0, 0, 0, 132, 129, 1, 0, 0, 0, 132, 131, 1, 0, 0, 0, 133, 34, 1, 0, 0, 0, 134, 135, 5, 43, 0, 0, 135, 36, 1, 0, 0, 0, 136, 137, 5, 45, 0, 0, 137, 38, 1, 0, 0, 0, 138, 139, 5, 42, 0, 0, 139, 40, 1, 0, 0, 0, 140, 141, 5, 44, 0, 0, 141, 42, 1, 0, 0, 0, 142, 143, 5, 58, 0, 0, 143, 44, 1, 0, 0, 0, 144, 145, 5, 36, 0, 0, 145, 46, 1, 0, 0, 0, 146, 147, 5, 116, 0, 0, 147, 148, 5, 114, 0, 0, 148, 149, 5, 117, 0, 0, 149, 150, 5, 101, 0, 0, 150, 48, 1, 0, 0, 0, 151, 152, 5, 102, 0, 0, 152, 153, 5, 97, 0, 0, 153, 154, 5, 108, 0, 0, 154, 155, 5, 115, 0, 0, 155, 156, 5, 101, 0, 0, 156, 50, 1, 0, 0, 0, 157, 158, 5, 99, 0, 0, 158, 159, 5, 111, 0, 0, 159, 160, 5, 110, 0, 0, 160, 161, 5, 116, 0, 0, 161, 162, 5, 101, 0, 0, 162, 163, 5, 110, 0, 0, 163, 164, 5, 116, 0, 0, 164, 165, 5, 82, 0, 0, 165, 166, 5, 101, 0, 0, 166, 167, 5, 103, 0, 0, 167, 168, 5, 101, 0, 0, 168, 241, 5, 120, 0, 0, 169, 170, 5, 116, 0, 0, 170, 171, 5, 121, 0, 0, 171, 172, 5, 112, 0, 0, 172, 173, 5, 101, 0, 0, 173, 174, 5, 82, 0, 0, 174, 175, 5, 101, 0, 0, 175, 176, 5, 103, 0, 0, 176, 177, 5, 101, 0, 0, 177, 241, 5, 120, 0, 0, 178, 179, 5, 116, 0, 0, 179, 180, 5, 97, 0, 0, 180, 181, 5, 103, 0, 0, 181, 182, 5, 82, 0, 0, 182, 183, 5, 101, 0, 0, 183, 184, 5, 103, 0, 0, 184, 185, 5, 101, 0, 0, 185, 241, 5, 120, 0, 0, 186, 187, 5, 104, 0, 0, 187, 188, 5, 97, 0, 0, 188, 189, 5, 115, 0, 0, 189, 190, 5, 84, 0, 0, 190, 191, 5, 97, 0, 0, 191, 241, 5, 103, 0, 0, 192, 193, 5, 104, 0, 0, 193, 194, 5, 97, 0, 0, 194, 195, 5, 115, 0, 0, 195, 196, 5, 70, 0, 0, 196, 197, 5, 101, 0, 0, 197, 198, 5, 97, 0, 0, 198, 199, 5, 116, 0, 0, 199, 200, 5, 117, 0, 0, 200, 201, 5, 114, 0, 0, 201, 241, 5, 101, 0, 0, 202, 203, 5, 104, 0, 0, 203, 204, 5, 97, 0, 0, 204, 205, 5, 115, 0, 0, 205, 206, 5, 70, 0, 0, 206, 207, 5, 101, 0, 0, 207, 208, 5, 97, 0, 0, 208, 209, 5, 116, 0, 0, 209, 210, 5, 117, 0, 0, 210, 211, 5, 114, 0, 0, 211, 212, 5, 101, 0, 0, 212, 213, 5, 86, 0, 0, 213, 214, 5, 97, 0, 0, 214, 215, 5, 108, 0, 0, 215, 216, 5, 117, 0, 0, 216, 241, 5, 101, 0, 0, 217, 218, 5, 99, 0, 0, 218, 219, 5, 111, 0, 0, 219, 220, 5, 110, 0, 0, 220, 221, 5, 116, 0, 0, 221, 222, 5, 101, 0, 0, 222, 223, 5, 110, 0, 0, 223, 241, 5, 116, 0, 0, 224, 225, 5, 105, 0, 0, 225, 241, 5, 100, 0, 0, 226, 227, 5, 110, 0, 0, 227, 228, 5, 111, 0, 0, 228, 229, 5, 100, 0, 0, 229, 230, 5, 101, 0, 0, 230, 231, 5, 95, 0, 0, 231, 232, 5, 116, 0, 0, 232, 233, 5, 121, 0, 0, 233, 234, 5, 112, 0, 0, 234, 241, 5, 101, 0, 0, 235, 236, 5, 105, 0, 0, 236, 237, 5, 110, 0, 0, 237, 238, 5, 100, 0, 0, 238, 239, 5, 101, 0, 0, 239, 241, 5, 120, 0, 0, 240, 157, 1, 0, 0, 0, 240, 169, 1, 0, 0, 0, 240, 178, 1, 0, 0, 0, 240, 186, 1, 0, 0, 0, 240, 192, 1, 0, 0, 0, 240, 202, 1, 0, 0, 0, 240, 217, 1, 0, 0, 0, 240, 224, 1, 0, 0, 0, 240, 226, 1, 0, 0, 0, 240, 235, 1, 0, 0, 0, 241, 52, 1, 0, 0, 0, 242, 246, 5, 34, 0, 0, 243, 245, 8, 1, 0, 0, 244, 243, 1, 0, 0, 0, 245, 248, 1, 0, 0, 0, 246, 244, 1, 0, 0, 0, 246, 247, 1, 0, 0, 0, 247, 249, 1, 0, 0, 0, 248, 246, 1, 0, 0, 0, 249, 259, 5, 34, 0, 0, 250, 254, 5, 39, 0, 0, 251, 253, 8, 2, 0, 0, 252, 251, 1, 0, 0, 0, 253, 256, 1, 0, 0, 0, 254, 252, 1, 0, 0, 0, 254, 255, 1, 0, 0, 0, 255, 257, 1, 0, 0, 0, 256, 254, 1, 0, 0, 0, 257, 259, 5, 39, 0, 0, 258, 242, 1, 0, 0, 0, 258, 250, 1, 0, 0, 0, 259, 54, 1, 0, 0, 0, 260, 262, 3, 69, 34, 0, 261, 260, 1, 0, 0, 0, 262, 263, 1, 0, 0, 0, 263, 261, 1, 0, 0, 0, 263, 264, 1, 0, 0, 0, 264, 265, 1, 0, 0, 0, 265, 269, 5, 46, 0, 0, 266, 268, 3, 69, 34, 0, 267, 266, 1, 0, 0, 0, 268, 271, 1, 0, 0, 0, 269, 267, 1, 0, 0, 0, 269, 270, 1, 0, 0, 0, 270, 279, 1, 0, 0, 0, 271, 269, 1, 0, 0, 0, 272, 274, 5, 46, 0, 0, 273, 275, 3, 69, 34, 0, 274, 273, 1, 0, 0, 0, 275, 276, 1, 0, 0, 0, 276, 274, 1, 0, 0, 0, 276, 277, 1, 0, 0, 0, 277, 279, 1, 0, 0, 0, 278, 261, 1, 0, 0, 0, 278, 272, 1, 0, 0, 0, 279, 56, 1, 0, 0, 0, 280, 282, 3, 69, 34, 0, 281, 280, 1, 0, 0, 0, 282, 283, 1, 0, 0, 0, 283, 281, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 58, 1, 0, 0, 0, 285, 289, 3, 65, 32, 0, 286, 288, 3, 67, 33, 0, 287, 286, 1, 0, 0, 0, 288, 291, 1, 0, 0, 0, 289, 287, 1, 0, 0, 0, 289, 290, 1, 0, 0, 0, 290, 60, 1, 0, 0, 0, 291, 289, 1, 0, 0, 0, 292, 293, 3, 59, 29, 0, 293, 62, 1, 0, 0, 0, 294, 295, 3, 59, 29, 0, 295, 64, 1, 0, 0, 0, 296, 298, 7, 3, 0, 0, 297, 296, 1, 0, 0, 0, 298, 66, 1, 0, 0, 0, 299, 302, 3, 65, 32, 0, 300, 302, 7, 4, 0, 0, 301, 299, 1, 0, 0, 0, 301, 300, 1, 0, 0, 0, 302, 68, 1, 0, 0, 0, 303, 304, 7, 5, 0, 0, 304, 70, 1, 0, 0, 0, 305, 307, 7, 6, 0, 0, 306, 305, 1, 0, 0, 0, 307, 308, 1, 0, 0, 0, 308, 306, 1, 0, 0, 0, 308, 309, 1, 0, 0, 0, 309, 310, 1, 0, 0, 0, 310, 311, 6, 35, 0, 0, 311, 72, 1, 0, 0, 0, 16, 0, 125, 132, 240, 246, 254, 258, 263, 269, 276, 278, 283, 289, 297, 301, 308, 1, 6, 0, 0]