@irrelon/battlescript 4.1.2 → 5.0.0

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 (47) hide show
  1. package/bin/index.js +357 -278
  2. package/bin/index.js.map +1 -1
  3. package/dist/bin/functionality.cjs +357 -278
  4. package/dist/bin/functionality.cjs.map +1 -1
  5. package/dist/bin/functionality.mjs +357 -278
  6. package/dist/bin/functionality.mjs.map +1 -1
  7. package/dist/exports/typescript/enums/EnumNodeProp.d.ts +11 -7
  8. package/dist/exports/typescript/enums/EnumNodeProp.d.ts.map +1 -1
  9. package/dist/exports/typescript/enums/EnumOperator.d.ts +7 -4
  10. package/dist/exports/typescript/enums/EnumOperator.d.ts.map +1 -1
  11. package/dist/index.cjs +378 -285
  12. package/dist/index.cjs.map +1 -1
  13. package/dist/index.mjs +377 -286
  14. package/dist/index.mjs.map +1 -1
  15. package/dist/services/grammar/ts/language/BattleScriptLexer.d.ts.map +1 -1
  16. package/dist/services/miniAst/binaryTypeToByteSize.d.ts +1 -1
  17. package/dist/services/utils.d.ts +10 -0
  18. package/dist/services/utils.d.ts.map +1 -1
  19. package/dist/tests/ast/compoundAssignment.test.d.ts +2 -0
  20. package/dist/tests/ast/compoundAssignment.test.d.ts.map +1 -0
  21. package/dist/tests/ast/hex-literal.test.d.ts +2 -0
  22. package/dist/tests/ast/hex-literal.test.d.ts.map +1 -0
  23. package/dist/tests/ast/number-literal.test.d.ts +2 -0
  24. package/dist/tests/ast/number-literal.test.d.ts.map +1 -0
  25. package/dist/tsconfig.types.tsbuildinfo +1 -1
  26. package/dist/types/ast/nodes/AssignmentExpressionNode.d.ts +6 -0
  27. package/dist/types/ast/nodes/AssignmentExpressionNode.d.ts.map +1 -1
  28. package/dist/types/ast/nodes/ForwardStatementNode.d.ts +2 -0
  29. package/dist/types/ast/nodes/ForwardStatementNode.d.ts.map +1 -1
  30. package/dist/types/ast/nodes/LiteralIntNode.d.ts +10 -0
  31. package/dist/types/ast/nodes/LiteralIntNode.d.ts.map +1 -1
  32. package/dist/types/ast/nodes/OffsetStatementNode.d.ts +2 -0
  33. package/dist/types/ast/nodes/OffsetStatementNode.d.ts.map +1 -1
  34. package/dist/types/ast/nodes/OptimisedAssignmentExpressionNode.d.ts.map +1 -1
  35. package/dist/types/ast/nodes/ProtocolReadTypeNode.d.ts +2 -0
  36. package/dist/types/ast/nodes/ProtocolReadTypeNode.d.ts.map +1 -1
  37. package/dist/types/ast/nodes/ProtocolTypeNode.d.ts +2 -0
  38. package/dist/types/ast/nodes/ProtocolTypeNode.d.ts.map +1 -1
  39. package/dist/types/ast/nodes/RewindStatementNode.d.ts +2 -0
  40. package/dist/types/ast/nodes/RewindStatementNode.d.ts.map +1 -1
  41. package/dist/types/ast/nodes/RuleStatementNode.d.ts +4 -0
  42. package/dist/types/ast/nodes/RuleStatementNode.d.ts.map +1 -1
  43. package/dist/types/ast/operators/ArithmaticOperator.d.ts +1 -1
  44. package/dist/types/ast/operators/ArithmaticOperator.d.ts.map +1 -1
  45. package/dist/types/ast/operators/OtherOperator.d.ts +1 -1
  46. package/dist/types/ast/operators/OtherOperator.d.ts.map +1 -1
  47. package/package.json +1 -1
package/dist/index.cjs CHANGED
@@ -23925,7 +23925,7 @@ BattleScriptLexer._SYMBOLIC_NAMES = [
23925
23925
  ];
23926
23926
  BattleScriptLexer.VOCABULARY = new VocabularyImplExports.VocabularyImpl(BattleScriptLexer._LITERAL_NAMES, BattleScriptLexer._SYMBOLIC_NAMES, []);
23927
23927
  BattleScriptLexer._serializedATNSegments = 2;
23928
- BattleScriptLexer._serializedATNSegment0 = "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02r\u0378\b\x01" +
23928
+ BattleScriptLexer._serializedATNSegment0 = "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02r\u037F\b\x01" +
23929
23929
  "\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06" +
23930
23930
  "\x04\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r" +
23931
23931
  "\t\r\x04\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t" +
@@ -23981,77 +23981,78 @@ BattleScriptLexer._serializedATNSegment0 = "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u
23981
23981
  "A\x03A\x03A\x03B\x03B\x03B\x03B\x03C\x03C\x03C\x03C\x03C\x03D\x03D\x03" +
23982
23982
  "D\x03D\x03D\x03D\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03F\x03F\x03F\x03" +
23983
23983
  "F\x03F\x03G\x03G\x03G\x03G\x03G\x03H\x03H\x03H\x03H\x03H\x03I\x03I\x03" +
23984
- "I\x03I\x03I\x03I\x03I\x03I\x03I\x03I\x03J\x06J\u02B9\nJ\rJ\x0EJ\u02BA" +
23985
- "\x03J\x03J\x06J\u02BF\nJ\rJ\x0EJ\u02C0\x05J\u02C3\nJ\x03J\x03J\x05J\u02C7" +
23986
- "\nJ\x03J\x06J\u02CA\nJ\rJ\x0EJ\u02CB\x05J\u02CE\nJ\x03J\x03J\x06J\u02D2" +
23987
- "\nJ\rJ\x0EJ\u02D3\x03J\x03J\x05J\u02D8\nJ\x03J\x06J\u02DB\nJ\rJ\x0EJ\u02DC" +
23988
- "\x05J\u02DF\nJ\x05J\u02E1\nJ\x03K\x03K\x03K\x03K\x03K\x03K\x03K\x03K\x03" +
23989
- "K\x05K\u02EC\nK\x03L\x03L\x07L\u02F0\nL\fL\x0EL\u02F3\vL\x03L\x03L\x03" +
23990
- "M\x03M\x03M\x03M\x07M\u02FB\nM\fM\x0EM\u02FE\vM\x03M\x03M\x03M\x03M\x07" +
23991
- "M\u0304\nM\fM\x0EM\u0307\vM\x03M\x03M\x05M\u030B\nM\x03N\x03N\x03N\x03" +
23992
- "O\x03O\x03O\x03P\x03P\x03P\x03Q\x03Q\x03R\x03R\x03S\x03S\x03T\x03T\x03" +
23993
- "U\x03U\x03V\x03V\x03W\x03W\x03X\x03X\x03X\x03Y\x03Y\x03Y\x03Z\x03Z\x03" +
23994
- "Z\x03[\x03[\x03[\x03\\\x03\\\x03]\x03]\x03]\x03^\x03^\x03^\x03_\x03_\x03" +
23995
- "`\x03`\x03a\x03a\x03a\x03b\x03b\x03b\x03c\x03c\x03c\x03c\x03d\x03d\x03" +
23996
- "e\x03e\x03f\x03f\x03g\x03g\x03h\x03h\x03i\x03i\x03j\x03j\x03k\x03k\x03" +
23997
- "l\x03l\x03m\x03m\x03m\x03n\x03n\x03o\x03o\x03p\x03p\x07p\u0361\np\fp\x0E" +
23998
- "p\u0364\vp\x03p\x06p\u0367\np\rp\x0Ep\u0368\x03p\x06p\u036C\np\rp\x0E" +
23999
- "p\u036D\x05p\u0370\np\x03q\x06q\u0373\nq\rq\x0Eq\u0374\x03q\x03q\x03\u0305" +
24000
- "\x02\x02r\x03\x02\x03\x05\x02\x04\x07\x02\x05\t\x02\x06\v\x02\x07\r\x02" +
24001
- "\b\x0F\x02\t\x11\x02\n\x13\x02\v\x15\x02\f\x17\x02\r\x19\x02\x0E\x1B\x02" +
24002
- "\x0F\x1D\x02\x10\x1F\x02\x11!\x02\x12#\x02\x13%\x02\x14\'\x02\x15)\x02" +
24003
- "\x16+\x02\x17-\x02\x18/\x02\x191\x02\x1A3\x02\x1B5\x02\x1C7\x02\x1D9\x02" +
24004
- "\x1E;\x02\x1F=\x02 ?\x02!A\x02\"C\x02#E\x02$G\x02%I\x02&K\x02\'M\x02(" +
24005
- "O\x02)Q\x02*S\x02+U\x02,W\x02-Y\x02.[\x02/]\x020_\x021a\x022c\x023e\x02" +
24006
- "4g\x025i\x026k\x027m\x028o\x029q\x02:s\x02;u\x02<w\x02=y\x02>{\x02?}\x02" +
24007
- "@\x7F\x02A\x81\x02B\x83\x02C\x85\x02D\x87\x02E\x89\x02F\x8B\x02G\x8D\x02" +
24008
- "H\x8F\x02I\x91\x02J\x93\x02K\x95\x02L\x97\x02M\x99\x02N\x9B\x02O\x9D\x02" +
24009
- "P\x9F\x02Q\xA1\x02R\xA3\x02S\xA5\x02T\xA7\x02U\xA9\x02V\xAB\x02W\xAD\x02" +
24010
- "X\xAF\x02Y\xB1\x02Z\xB3\x02[\xB5\x02\\\xB7\x02]\xB9\x02^\xBB\x02_\xBD" +
24011
- "\x02`\xBF\x02a\xC1\x02b\xC3\x02c\xC5\x02d\xC7\x02e\xC9\x02f\xCB\x02g\xCD" +
24012
- "\x02h\xCF\x02i\xD1\x02j\xD3\x02k\xD5\x02l\xD7\x02m\xD9\x02n\xDB\x02o\xDD" +
24013
- "\x02p\xDF\x02q\xE1\x02r\x03\x02\v\x03\x022;\x04\x02GGgg\x04\x02--//\x03" +
24014
- "\x02$$\x04\x02\f\f\x0F\x0F\x05\x02&&C\\c|\x07\x02&&2;C\\aac|\x03\x02a" +
24015
- "a\x05\x02\v\f\x0F\x0F\"\"\x02\u038C\x02\x03\x03\x02\x02\x02\x02\x05\x03" +
24016
- "\x02\x02\x02\x02\x07\x03\x02\x02\x02\x02\t\x03\x02\x02\x02\x02\v\x03\x02" +
24017
- "\x02\x02\x02\r\x03\x02\x02\x02\x02\x0F\x03\x02\x02\x02\x02\x11\x03\x02" +
24018
- "\x02\x02\x02\x13\x03\x02\x02\x02\x02\x15\x03\x02\x02\x02\x02\x17\x03\x02" +
24019
- "\x02\x02\x02\x19\x03\x02\x02\x02\x02\x1B\x03\x02\x02\x02\x02\x1D\x03\x02" +
24020
- "\x02\x02\x02\x1F\x03\x02\x02\x02\x02!\x03\x02\x02\x02\x02#\x03\x02\x02" +
24021
- "\x02\x02%\x03\x02\x02\x02\x02\'\x03\x02\x02\x02\x02)\x03\x02\x02\x02\x02" +
24022
- "+\x03\x02\x02\x02\x02-\x03\x02\x02\x02\x02/\x03\x02\x02\x02\x021\x03\x02" +
24023
- "\x02\x02\x023\x03\x02\x02\x02\x025\x03\x02\x02\x02\x027\x03\x02\x02\x02" +
24024
- "\x029\x03\x02\x02\x02\x02;\x03\x02\x02\x02\x02=\x03\x02\x02\x02\x02?\x03" +
24025
- "\x02\x02\x02\x02A\x03\x02\x02\x02\x02C\x03\x02\x02\x02\x02E\x03\x02\x02" +
24026
- "\x02\x02G\x03\x02\x02\x02\x02I\x03\x02\x02\x02\x02K\x03\x02\x02\x02\x02" +
24027
- "M\x03\x02\x02\x02\x02O\x03\x02\x02\x02\x02Q\x03\x02\x02\x02\x02S\x03\x02" +
24028
- "\x02\x02\x02U\x03\x02\x02\x02\x02W\x03\x02\x02\x02\x02Y\x03\x02\x02\x02" +
24029
- "\x02[\x03\x02\x02\x02\x02]\x03\x02\x02\x02\x02_\x03\x02\x02\x02\x02a\x03" +
24030
- "\x02\x02\x02\x02c\x03\x02\x02\x02\x02e\x03\x02\x02\x02\x02g\x03\x02\x02" +
24031
- "\x02\x02i\x03\x02\x02\x02\x02k\x03\x02\x02\x02\x02m\x03\x02\x02\x02\x02" +
24032
- "o\x03\x02\x02\x02\x02q\x03\x02\x02\x02\x02s\x03\x02\x02\x02\x02u\x03\x02" +
24033
- "\x02\x02\x02w\x03\x02\x02\x02\x02y\x03\x02\x02\x02\x02{\x03\x02\x02\x02" +
24034
- "\x02}\x03\x02\x02\x02\x02\x7F\x03\x02\x02\x02\x02\x81\x03\x02\x02\x02" +
24035
- "\x02\x83\x03\x02\x02\x02\x02\x85\x03\x02\x02\x02\x02\x87\x03\x02\x02\x02" +
24036
- "\x02\x89\x03\x02\x02\x02\x02\x8B\x03\x02\x02\x02\x02\x8D\x03\x02\x02\x02" +
24037
- "\x02\x8F\x03\x02\x02\x02\x02\x91\x03\x02\x02\x02\x02\x93\x03\x02\x02\x02" +
24038
- "\x02\x95\x03\x02\x02\x02\x02\x97\x03\x02\x02\x02\x02\x99\x03\x02\x02\x02" +
24039
- "\x02\x9B\x03\x02\x02\x02\x02\x9D\x03\x02\x02\x02\x02\x9F\x03\x02\x02\x02" +
24040
- "\x02\xA1\x03\x02\x02\x02\x02\xA3\x03\x02\x02\x02\x02\xA5\x03\x02\x02\x02" +
24041
- "\x02\xA7\x03\x02\x02\x02\x02\xA9\x03\x02\x02\x02\x02\xAB\x03\x02\x02\x02" +
24042
- "\x02\xAD\x03\x02\x02\x02\x02\xAF\x03\x02\x02\x02\x02\xB1\x03\x02\x02\x02" +
24043
- "\x02\xB3\x03\x02\x02\x02\x02\xB5\x03\x02\x02\x02\x02\xB7\x03\x02\x02\x02" +
24044
- "\x02\xB9\x03\x02\x02\x02\x02\xBB\x03\x02\x02\x02\x02\xBD\x03\x02\x02\x02" +
24045
- "\x02\xBF\x03\x02\x02\x02\x02\xC1\x03\x02\x02\x02\x02\xC3\x03\x02\x02\x02" +
24046
- "\x02\xC5\x03\x02\x02\x02\x02\xC7\x03\x02\x02\x02\x02\xC9\x03\x02\x02\x02" +
24047
- "\x02\xCB\x03\x02\x02\x02\x02\xCD\x03\x02\x02\x02\x02\xCF\x03\x02\x02\x02" +
24048
- "\x02\xD1\x03\x02\x02\x02\x02\xD3\x03\x02\x02\x02\x02\xD5\x03\x02\x02\x02" +
24049
- "\x02\xD7\x03\x02\x02\x02\x02\xD9\x03\x02\x02\x02\x02\xDB\x03\x02\x02\x02" +
24050
- "\x02\xDD\x03\x02\x02\x02\x02\xDF\x03\x02\x02\x02\x02\xE1\x03\x02\x02\x02" +
24051
- "\x03\xE3\x03\x02\x02\x02\x05\xEC\x03\x02\x02\x02\x07\xF5\x03\x02\x02\x02" +
24052
- "\t\xFC\x03\x02\x02\x02\v\u0101\x03\x02\x02\x02\r\u0109\x03\x02\x02\x02" +
24053
- "\x0F\u0110\x03\x02\x02\x02\x11\u0118\x03\x02\x02\x02\x13\u011F\x03\x02" +
24054
- "\x02\x02\x15\u0123\x03\x02\x02\x02\x17\u0128\x03\x02\x02\x02\x19\u0132" +
23984
+ "I\x03I\x03I\x03I\x03I\x03I\x03I\x03I\x03J\x03J\x03J\x06J\u02BB\nJ\rJ\x0E" +
23985
+ "J\u02BC\x03J\x06J\u02C0\nJ\rJ\x0EJ\u02C1\x03J\x03J\x06J\u02C6\nJ\rJ\x0E" +
23986
+ "J\u02C7\x05J\u02CA\nJ\x03J\x03J\x05J\u02CE\nJ\x03J\x06J\u02D1\nJ\rJ\x0E" +
23987
+ "J\u02D2\x05J\u02D5\nJ\x03J\x03J\x06J\u02D9\nJ\rJ\x0EJ\u02DA\x03J\x03J" +
23988
+ "\x05J\u02DF\nJ\x03J\x06J\u02E2\nJ\rJ\x0EJ\u02E3\x05J\u02E6\nJ\x05J\u02E8" +
23989
+ "\nJ\x03K\x03K\x03K\x03K\x03K\x03K\x03K\x03K\x03K\x05K\u02F3\nK\x03L\x03" +
23990
+ "L\x07L\u02F7\nL\fL\x0EL\u02FA\vL\x03L\x03L\x03M\x03M\x03M\x03M\x07M\u0302" +
23991
+ "\nM\fM\x0EM\u0305\vM\x03M\x03M\x03M\x03M\x07M\u030B\nM\fM\x0EM\u030E\v" +
23992
+ "M\x03M\x03M\x05M\u0312\nM\x03N\x03N\x03N\x03O\x03O\x03O\x03P\x03P\x03" +
23993
+ "P\x03Q\x03Q\x03R\x03R\x03S\x03S\x03T\x03T\x03U\x03U\x03V\x03V\x03W\x03" +
23994
+ "W\x03X\x03X\x03X\x03Y\x03Y\x03Y\x03Z\x03Z\x03Z\x03[\x03[\x03[\x03\\\x03" +
23995
+ "\\\x03]\x03]\x03]\x03^\x03^\x03^\x03_\x03_\x03`\x03`\x03a\x03a\x03a\x03" +
23996
+ "b\x03b\x03b\x03c\x03c\x03c\x03c\x03d\x03d\x03e\x03e\x03f\x03f\x03g\x03" +
23997
+ "g\x03h\x03h\x03i\x03i\x03j\x03j\x03k\x03k\x03l\x03l\x03m\x03m\x03m\x03" +
23998
+ "n\x03n\x03o\x03o\x03p\x03p\x07p\u0368\np\fp\x0Ep\u036B\vp\x03p\x06p\u036E" +
23999
+ "\np\rp\x0Ep\u036F\x03p\x06p\u0373\np\rp\x0Ep\u0374\x05p\u0377\np\x03q" +
24000
+ "\x06q\u037A\nq\rq\x0Eq\u037B\x03q\x03q\x03\u030C\x02\x02r\x03\x02\x03" +
24001
+ "\x05\x02\x04\x07\x02\x05\t\x02\x06\v\x02\x07\r\x02\b\x0F\x02\t\x11\x02" +
24002
+ "\n\x13\x02\v\x15\x02\f\x17\x02\r\x19\x02\x0E\x1B\x02\x0F\x1D\x02\x10\x1F" +
24003
+ "\x02\x11!\x02\x12#\x02\x13%\x02\x14\'\x02\x15)\x02\x16+\x02\x17-\x02\x18" +
24004
+ "/\x02\x191\x02\x1A3\x02\x1B5\x02\x1C7\x02\x1D9\x02\x1E;\x02\x1F=\x02 " +
24005
+ "?\x02!A\x02\"C\x02#E\x02$G\x02%I\x02&K\x02\'M\x02(O\x02)Q\x02*S\x02+U" +
24006
+ "\x02,W\x02-Y\x02.[\x02/]\x020_\x021a\x022c\x023e\x024g\x025i\x026k\x02" +
24007
+ "7m\x028o\x029q\x02:s\x02;u\x02<w\x02=y\x02>{\x02?}\x02@\x7F\x02A\x81\x02" +
24008
+ "B\x83\x02C\x85\x02D\x87\x02E\x89\x02F\x8B\x02G\x8D\x02H\x8F\x02I\x91\x02" +
24009
+ "J\x93\x02K\x95\x02L\x97\x02M\x99\x02N\x9B\x02O\x9D\x02P\x9F\x02Q\xA1\x02" +
24010
+ "R\xA3\x02S\xA5\x02T\xA7\x02U\xA9\x02V\xAB\x02W\xAD\x02X\xAF\x02Y\xB1\x02" +
24011
+ "Z\xB3\x02[\xB5\x02\\\xB7\x02]\xB9\x02^\xBB\x02_\xBD\x02`\xBF\x02a\xC1" +
24012
+ "\x02b\xC3\x02c\xC5\x02d\xC7\x02e\xC9\x02f\xCB\x02g\xCD\x02h\xCF\x02i\xD1" +
24013
+ "\x02j\xD3\x02k\xD5\x02l\xD7\x02m\xD9\x02n\xDB\x02o\xDD\x02p\xDF\x02q\xE1" +
24014
+ "\x02r\x03\x02\r\x04\x02ZZzz\x05\x022;CHch\x03\x022;\x04\x02GGgg\x04\x02" +
24015
+ "--//\x03\x02$$\x04\x02\f\f\x0F\x0F\x05\x02&&C\\c|\x07\x02&&2;C\\aac|\x03" +
24016
+ "\x02aa\x05\x02\v\f\x0F\x0F\"\"\x02\u0395\x02\x03\x03\x02\x02\x02\x02\x05" +
24017
+ "\x03\x02\x02\x02\x02\x07\x03\x02\x02\x02\x02\t\x03\x02\x02\x02\x02\v\x03" +
24018
+ "\x02\x02\x02\x02\r\x03\x02\x02\x02\x02\x0F\x03\x02\x02\x02\x02\x11\x03" +
24019
+ "\x02\x02\x02\x02\x13\x03\x02\x02\x02\x02\x15\x03\x02\x02\x02\x02\x17\x03" +
24020
+ "\x02\x02\x02\x02\x19\x03\x02\x02\x02\x02\x1B\x03\x02\x02\x02\x02\x1D\x03" +
24021
+ "\x02\x02\x02\x02\x1F\x03\x02\x02\x02\x02!\x03\x02\x02\x02\x02#\x03\x02" +
24022
+ "\x02\x02\x02%\x03\x02\x02\x02\x02\'\x03\x02\x02\x02\x02)\x03\x02\x02\x02" +
24023
+ "\x02+\x03\x02\x02\x02\x02-\x03\x02\x02\x02\x02/\x03\x02\x02\x02\x021\x03" +
24024
+ "\x02\x02\x02\x023\x03\x02\x02\x02\x025\x03\x02\x02\x02\x027\x03\x02\x02" +
24025
+ "\x02\x029\x03\x02\x02\x02\x02;\x03\x02\x02\x02\x02=\x03\x02\x02\x02\x02" +
24026
+ "?\x03\x02\x02\x02\x02A\x03\x02\x02\x02\x02C\x03\x02\x02\x02\x02E\x03\x02" +
24027
+ "\x02\x02\x02G\x03\x02\x02\x02\x02I\x03\x02\x02\x02\x02K\x03\x02\x02\x02" +
24028
+ "\x02M\x03\x02\x02\x02\x02O\x03\x02\x02\x02\x02Q\x03\x02\x02\x02\x02S\x03" +
24029
+ "\x02\x02\x02\x02U\x03\x02\x02\x02\x02W\x03\x02\x02\x02\x02Y\x03\x02\x02" +
24030
+ "\x02\x02[\x03\x02\x02\x02\x02]\x03\x02\x02\x02\x02_\x03\x02\x02\x02\x02" +
24031
+ "a\x03\x02\x02\x02\x02c\x03\x02\x02\x02\x02e\x03\x02\x02\x02\x02g\x03\x02" +
24032
+ "\x02\x02\x02i\x03\x02\x02\x02\x02k\x03\x02\x02\x02\x02m\x03\x02\x02\x02" +
24033
+ "\x02o\x03\x02\x02\x02\x02q\x03\x02\x02\x02\x02s\x03\x02\x02\x02\x02u\x03" +
24034
+ "\x02\x02\x02\x02w\x03\x02\x02\x02\x02y\x03\x02\x02\x02\x02{\x03\x02\x02" +
24035
+ "\x02\x02}\x03\x02\x02\x02\x02\x7F\x03\x02\x02\x02\x02\x81\x03\x02\x02" +
24036
+ "\x02\x02\x83\x03\x02\x02\x02\x02\x85\x03\x02\x02\x02\x02\x87\x03\x02\x02" +
24037
+ "\x02\x02\x89\x03\x02\x02\x02\x02\x8B\x03\x02\x02\x02\x02\x8D\x03\x02\x02" +
24038
+ "\x02\x02\x8F\x03\x02\x02\x02\x02\x91\x03\x02\x02\x02\x02\x93\x03\x02\x02" +
24039
+ "\x02\x02\x95\x03\x02\x02\x02\x02\x97\x03\x02\x02\x02\x02\x99\x03\x02\x02" +
24040
+ "\x02\x02\x9B\x03\x02\x02\x02\x02\x9D\x03\x02\x02\x02\x02\x9F\x03\x02\x02" +
24041
+ "\x02\x02\xA1\x03\x02\x02\x02\x02\xA3\x03\x02\x02\x02\x02\xA5\x03\x02\x02" +
24042
+ "\x02\x02\xA7\x03\x02\x02\x02\x02\xA9\x03\x02\x02\x02\x02\xAB\x03\x02\x02" +
24043
+ "\x02\x02\xAD\x03\x02\x02\x02\x02\xAF\x03\x02\x02\x02\x02\xB1\x03\x02\x02" +
24044
+ "\x02\x02\xB3\x03\x02\x02\x02\x02\xB5\x03\x02\x02\x02\x02\xB7\x03\x02\x02" +
24045
+ "\x02\x02\xB9\x03\x02\x02\x02\x02\xBB\x03\x02\x02\x02\x02\xBD\x03\x02\x02" +
24046
+ "\x02\x02\xBF\x03\x02\x02\x02\x02\xC1\x03\x02\x02\x02\x02\xC3\x03\x02\x02" +
24047
+ "\x02\x02\xC5\x03\x02\x02\x02\x02\xC7\x03\x02\x02\x02\x02\xC9\x03\x02\x02" +
24048
+ "\x02\x02\xCB\x03\x02\x02\x02\x02\xCD\x03\x02\x02\x02\x02\xCF\x03\x02\x02" +
24049
+ "\x02\x02\xD1\x03\x02\x02\x02\x02\xD3\x03\x02\x02\x02\x02\xD5\x03\x02\x02" +
24050
+ "\x02\x02\xD7\x03\x02\x02\x02\x02\xD9\x03\x02\x02\x02\x02\xDB\x03\x02\x02" +
24051
+ "\x02\x02\xDD\x03\x02\x02\x02\x02\xDF\x03\x02\x02\x02\x02\xE1\x03\x02\x02" +
24052
+ "\x02\x03\xE3\x03\x02\x02\x02\x05\xEC\x03\x02\x02\x02\x07\xF5\x03\x02\x02" +
24053
+ "\x02\t\xFC\x03\x02\x02\x02\v\u0101\x03\x02\x02\x02\r\u0109\x03\x02\x02" +
24054
+ "\x02\x0F\u0110\x03\x02\x02\x02\x11\u0118\x03\x02\x02\x02\x13\u011F\x03" +
24055
+ "\x02\x02\x02\x15\u0123\x03\x02\x02\x02\x17\u0128\x03\x02\x02\x02\x19\u0132" +
24055
24056
  "\x03\x02\x02\x02\x1B\u013A\x03\x02\x02\x02\x1D\u0141\x03\x02\x02\x02\x1F" +
24056
24057
  "\u0147\x03\x02\x02\x02!\u014F\x03\x02\x02\x02#\u0156\x03\x02\x02\x02%" +
24057
24058
  "\u015F\x03\x02\x02\x02\'\u0169\x03\x02\x02\x02)\u0171\x03\x02\x02\x02" +
@@ -24072,21 +24073,21 @@ BattleScriptLexer._serializedATNSegment0 = "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u
24072
24073
  "\x7F\u027B\x03\x02\x02\x02\x81\u0281\x03\x02\x02\x02\x83\u0288\x03\x02" +
24073
24074
  "\x02\x02\x85\u028C\x03\x02\x02\x02\x87\u0291\x03\x02\x02\x02\x89\u0297" +
24074
24075
  "\x03\x02\x02\x02\x8B\u029E\x03\x02\x02\x02\x8D\u02A3\x03\x02\x02\x02\x8F" +
24075
- "\u02A8\x03\x02\x02\x02\x91\u02AD\x03\x02\x02\x02\x93\u02E0\x03\x02\x02" +
24076
- "\x02\x95\u02EB\x03\x02\x02\x02\x97\u02ED\x03\x02\x02\x02\x99\u030A\x03" +
24077
- "\x02\x02\x02\x9B\u030C\x03\x02\x02\x02\x9D\u030F\x03\x02\x02\x02\x9F\u0312" +
24078
- "\x03\x02\x02\x02\xA1\u0315\x03\x02\x02\x02\xA3\u0317\x03\x02\x02\x02\xA5" +
24079
- "\u0319\x03\x02\x02\x02\xA7\u031B\x03\x02\x02\x02\xA9\u031D\x03\x02\x02" +
24080
- "\x02\xAB\u031F\x03\x02\x02\x02\xAD\u0321\x03\x02\x02\x02\xAF\u0323\x03" +
24081
- "\x02\x02\x02\xB1\u0326\x03\x02\x02\x02\xB3\u0329\x03\x02\x02\x02\xB5\u032C" +
24082
- "\x03\x02\x02\x02\xB7\u032F\x03\x02\x02\x02\xB9\u0331\x03\x02\x02\x02\xBB" +
24083
- "\u0334\x03\x02\x02\x02\xBD\u0337\x03\x02\x02\x02\xBF\u0339\x03\x02\x02" +
24084
- "\x02\xC1\u033B\x03\x02\x02\x02\xC3\u033E\x03\x02\x02\x02\xC5\u0341\x03" +
24085
- "\x02\x02\x02\xC7\u0345\x03\x02\x02\x02\xC9\u0347\x03\x02\x02\x02\xCB\u0349" +
24086
- "\x03\x02\x02\x02\xCD\u034B\x03\x02\x02\x02\xCF\u034D\x03\x02\x02\x02\xD1" +
24087
- "\u034F\x03\x02\x02\x02\xD3\u0351\x03\x02\x02\x02\xD5\u0353\x03\x02\x02" +
24088
- "\x02\xD7\u0355\x03\x02\x02\x02\xD9\u0357\x03\x02\x02\x02\xDB\u035A\x03" +
24089
- "\x02\x02\x02\xDD\u035C\x03\x02\x02\x02\xDF\u036F\x03\x02\x02\x02\xE1\u0372" +
24076
+ "\u02A8\x03\x02\x02\x02\x91\u02AD\x03\x02\x02\x02\x93\u02E7\x03\x02\x02" +
24077
+ "\x02\x95\u02F2\x03\x02\x02\x02\x97\u02F4\x03\x02\x02\x02\x99\u0311\x03" +
24078
+ "\x02\x02\x02\x9B\u0313\x03\x02\x02\x02\x9D\u0316\x03\x02\x02\x02\x9F\u0319" +
24079
+ "\x03\x02\x02\x02\xA1\u031C\x03\x02\x02\x02\xA3\u031E\x03\x02\x02\x02\xA5" +
24080
+ "\u0320\x03\x02\x02\x02\xA7\u0322\x03\x02\x02\x02\xA9\u0324\x03\x02\x02" +
24081
+ "\x02\xAB\u0326\x03\x02\x02\x02\xAD\u0328\x03\x02\x02\x02\xAF\u032A\x03" +
24082
+ "\x02\x02\x02\xB1\u032D\x03\x02\x02\x02\xB3\u0330\x03\x02\x02\x02\xB5\u0333" +
24083
+ "\x03\x02\x02\x02\xB7\u0336\x03\x02\x02\x02\xB9\u0338\x03\x02\x02\x02\xBB" +
24084
+ "\u033B\x03\x02\x02\x02\xBD\u033E\x03\x02\x02\x02\xBF\u0340\x03\x02\x02" +
24085
+ "\x02\xC1\u0342\x03\x02\x02\x02\xC3\u0345\x03\x02\x02\x02\xC5\u0348\x03" +
24086
+ "\x02\x02\x02\xC7\u034C\x03\x02\x02\x02\xC9\u034E\x03\x02\x02\x02\xCB\u0350" +
24087
+ "\x03\x02\x02\x02\xCD\u0352\x03\x02\x02\x02\xCF\u0354\x03\x02\x02\x02\xD1" +
24088
+ "\u0356\x03\x02\x02\x02\xD3\u0358\x03\x02\x02\x02\xD5\u035A\x03\x02\x02" +
24089
+ "\x02\xD7\u035C\x03\x02\x02\x02\xD9\u035E\x03\x02\x02\x02\xDB\u0361\x03" +
24090
+ "\x02\x02\x02\xDD\u0363\x03\x02\x02\x02\xDF\u0376\x03\x02\x02\x02\xE1\u0379" +
24090
24091
  "\x03\x02\x02\x02\xE3\xE4\x07f\x02\x02\xE4\xE5\x07g\x02\x02\xE5\xE6\x07" +
24091
24092
  "d\x02\x02\xE6\xE7\x07w\x02\x02\xE7\xE8\x07i\x02\x02\xE8\xE9\x07i\x02\x02" +
24092
24093
  "\xE9\xEA\x07g\x02\x02\xEA\xEB\x07t\x02\x02\xEB\x04\x03\x02\x02\x02\xEC" +
@@ -24168,172 +24169,175 @@ BattleScriptLexer._serializedATNSegment0 = "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u
24168
24169
  "\x07h\x02\x02\u01C4\u01C5\x07q\x02\x02\u01C5\u01C6\x07t\x02\x02\u01C6" +
24169
24170
  "F\x03\x02\x02\x02\u01C7\u01C8\x07g\x02\x02\u01C8\u01C9\x07x\x02\x02\u01C9" +
24170
24171
  "\u01CA\x07c\x02\x02\u01CA\u01CB\x07n\x02\x02\u01CB\u01CC\x07w\x02\x02" +
24171
- "\u01CC\u01CD\x07c\x02\x02\u01CD\u01CE\x07v\x02\x02\u01CE\u01CF\x07g\x02" +
24172
- "\x02\u01CFH\x03\x02\x02\x02\u01D0\u01D1\x07e\x02\x02\u01D1\u01D2\x07c" +
24173
- "\x02\x02\u01D2";
24174
- BattleScriptLexer._serializedATNSegment1 = "\u01D3\x07u\x02\x02\u01D3\u01D4\x07g\x02\x02\u01D4J\x03\x02\x02\x02\u01D5" +
24175
- "\u01D6\x07d\x02\x02\u01D6\u01D7\x07t\x02\x02\u01D7\u01D8\x07g\x02\x02" +
24176
- "\u01D8\u01D9\x07c\x02\x02\u01D9\u01DA\x07m\x02\x02\u01DAL\x03\x02\x02" +
24177
- "\x02\u01DB\u01DC\x07e\x02\x02\u01DC\u01DD\x07q\x02\x02\u01DD\u01DE\x07" +
24178
- "p\x02\x02\u01DE\u01DF\x07v\x02\x02\u01DF\u01E0\x07k\x02\x02\u01E0\u01E1" +
24179
- "\x07p\x02\x02\u01E1\u01E2\x07w\x02\x02\u01E2\u01E3\x07g\x02\x02\u01E3" +
24180
- "N\x03\x02\x02\x02\u01E4\u01E5\x07h\x02\x02\u01E5\u01E6\x07c\x02\x02\u01E6" +
24181
- "\u01E7\x07n\x02\x02\u01E7\u01E8\x07n\x02\x02\u01E8\u01E9\x07d\x02\x02" +
24182
- "\u01E9\u01EA\x07c\x02\x02\u01EA\u01EB\x07e\x02\x02\u01EB\u01EC\x07m\x02" +
24183
- "\x02\u01ECP\x03\x02\x02\x02\u01ED\u01EE\x07e\x02\x02\u01EE\u01EF\x07c" +
24184
- "\x02\x02\u01EF\u01F0\x07v\x02\x02\u01F0\u01F1\x07e\x02\x02\u01F1\u01F2" +
24185
- "\x07j\x02\x02\u01F2R\x03\x02\x02\x02\u01F3\u01F4\x07c\x02\x02\u01F4\u01F5" +
24186
- "\x07u\x02\x02\u01F5T\x03\x02\x02\x02\u01F6\u01F7\x07g\x02\x02\u01F7\u01F8" +
24187
- "\x07p\x02\x02\u01F8\u01F9\x07w\x02\x02\u01F9\u01FA\x07o\x02\x02\u01FA" +
24188
- "V\x03\x02\x02\x02\u01FB\u01FC\x07c\x02\x02\u01FC\u01FD\x07p\x02\x02\u01FD" +
24189
- "\u01FE\x07{\x02\x02\u01FEX\x03\x02\x02\x02\u01FF\u0200\x07r\x02\x02\u0200" +
24190
- "\u0201\x07t\x02\x02\u0201\u0202\x07q\x02\x02\u0202\u0203\x07v\x02\x02" +
24191
- "\u0203\u0204\x07q\x02\x02\u0204\u0205\x07e\x02\x02\u0205\u0206\x07q\x02" +
24192
- "\x02\u0206\u0207\x07n\x02\x02\u0207Z\x03\x02\x02\x02\u0208\u0209\x07f" +
24193
- "\x02\x02\u0209\u020A\x07g\x02\x02\u020A\u020B\x07h\x02\x02\u020B\u020C" +
24194
- "\x07k\x02\x02\u020C\u020D\x07p\x02\x02\u020D\u020E\x07g\x02\x02\u020E" +
24195
- "\\\x03\x02\x02\x02\u020F\u0210\x07t\x02\x02\u0210\u0211\x07g\x02\x02\u0211" +
24196
- "\u0212\x07s\x02\x02\u0212\u0213\x07w\x02\x02\u0213\u0214\x07k\x02\x02" +
24197
- "\u0214\u0215\x07t\x02\x02\u0215\u0216\x07g\x02\x02\u0216^\x03\x02\x02" +
24198
- "\x02\u0217\u0218\x07v\x02\x02\u0218\u0219\x07g\x02\x02\u0219\u021A\x07" +
24199
- "t\x02\x02\u021A\u021B\x07o\x02\x02\u021B\u021C\x07k\x02\x02\u021C\u021D" +
24200
- "\x07p\x02\x02\u021D\u021E\x07c\x02\x02\u021E\u021F\x07v\x02\x02\u021F" +
24201
- "\u0220\x07g\x02\x02\u0220`\x03\x02\x02\x02\u0221\u0222\x07u\x02\x02\u0222" +
24202
- "\u0223\x07v\x02\x02\u0223\u0224\x07g\x02\x02\u0224\u0225\x07r\x02\x02" +
24203
- "\u0225b\x03\x02\x02\x02\u0226\u0227\x07f\x02\x02\u0227\u0228\x07g\x02" +
24204
- "\x02\u0228\u0229\x07e\x02\x02\u0229\u022A\x07q\x02\x02\u022A\u022B\x07" +
24205
- "f\x02\x02\u022B\u022C\x07g\x02\x02\u022Cd\x03\x02\x02\x02\u022D\u022E" +
24206
- "\x07g\x02\x02\u022E\u022F\x07p\x02\x02\u022F\u0230\x07e\x02\x02\u0230" +
24207
- "\u0231\x07q\x02\x02\u0231\u0232\x07f\x02\x02\u0232\u0233\x07g\x02\x02" +
24208
- "\u0233f\x03\x02\x02\x02\u0234\u0235\x07g\x02\x02\u0235\u0236\x07p\x02" +
24209
- "\x02\u0236\u0237\x07f\x02\x02\u0237h\x03\x02\x02\x02\u0238\u0239\x07h" +
24210
- "\x02\x02\u0239\u023A\x07q\x02\x02\u023A\u023B\x07t\x02\x02\u023B\u023C" +
24211
- "\x07y\x02\x02\u023C\u023D\x07c\x02\x02\u023D\u023E\x07t\x02\x02\u023E" +
24212
- "\u023F\x07f\x02\x02\u023Fj\x03\x02\x02\x02\u0240\u0241\x07t\x02\x02\u0241" +
24213
- "\u0242\x07g\x02\x02\u0242\u0243\x07y\x02\x02\u0243\u0244\x07k\x02\x02" +
24214
- "\u0244\u0245\x07p\x02\x02\u0245\u0246\x07f\x02\x02\u0246l\x03\x02\x02" +
24215
- "\x02\u0247\u0248\x07q\x02\x02\u0248\u0249\x07h\x02\x02\u0249\u024A\x07" +
24216
- "h\x02\x02\u024A\u024B\x07u\x02\x02\u024B\u024C\x07g\x02\x02\u024C\u024D" +
24217
- "\x07v\x02\x02\u024Dn\x03\x02\x02\x02\u024E\u024F\x07z\x02\x02\u024F\u0250" +
24218
- "\x07q\x02\x02\u0250\u0251\x07t\x02\x02\u0251p\x03\x02\x02\x02\u0252\u0253" +
24219
- "\x07z\x02\x02\u0253\u0254\x07p\x02\x02\u0254\u0255\x07q\x02\x02\u0255" +
24220
- "\u0256\x07t\x02\x02\u0256r\x03\x02\x02\x02\u0257\u0258\x07d\x02\x02\u0258" +
24221
- "\u0259\x07k\x02\x02\u0259\u025A\x07v\x02\x02\u025A\u025B\x07u\x02\x02" +
24222
- "\u025Bt\x03\x02\x02\x02\u025C\u025D\x07d\x02\x02\u025D\u025E\x07{\x02" +
24223
- "\x02\u025E\u025F\x07v\x02\x02\u025F\u0260\x07g\x02\x02\u0260\u0261\x07" +
24224
- "u\x02\x02\u0261v\x03\x02\x02\x02\u0262\u0263\x07t\x02\x02\u0263\u0264" +
24225
- "\x07w\x02\x02\u0264\u0265\x07n\x02\x02\u0265\u0266\x07g\x02\x02\u0266" +
24226
- "x\x03\x02\x02\x02\u0267\u0268\x07r\x02\x02\u0268\u0269\x07c\x02\x02\u0269" +
24227
- "\u026A\x07t\x02\x02\u026A\u026B\x07k\x02\x02\u026B\u026C\x07v\x02\x02" +
24228
- "\u026C\u026D\x07{\x02\x02\u026Dz\x03\x02\x02\x02\u026E\u026F\x07e\x02" +
24229
- "\x02\u026F\u0270\x07q\x02\x02\u0270\u0271\x07p\x02\x02\u0271\u0272\x07" +
24230
- "u\x02\x02\u0272\u0273\x07v\x02\x02\u0273|\x03\x02\x02\x02\u0274\u0275" +
24231
- "\x07q\x02\x02\u0275\u0276\x07d\x02\x02\u0276\u0277\x07l\x02\x02\u0277" +
24232
- "\u0278\x07g\x02\x02\u0278\u0279\x07e\x02\x02\u0279\u027A\x07v\x02\x02" +
24233
- "\u027A~\x03\x02\x02\x02\u027B\u027C\x07c\x02\x02\u027C\u027D\x07t\x02" +
24234
- "\x02\u027D\u027E\x07t\x02\x02\u027E\u027F\x07c\x02\x02\u027F\u0280\x07" +
24235
- "{\x02\x02\u0280\x80\x03\x02\x02\x02\u0281\u0282\x07u\x02\x02\u0282\u0283" +
24236
- "\x07v\x02\x02\u0283\u0284\x07t\x02\x02\u0284\u0285\x07k\x02\x02\u0285" +
24237
- "\u0286\x07p\x02\x02\u0286\u0287\x07i\x02\x02\u0287\x82\x03\x02\x02\x02" +
24238
- "\u0288\u0289\x07k\x02\x02\u0289\u028A\x07p\x02\x02\u028A\u028B\x07v\x02" +
24239
- "\x02\u028B\x84\x03\x02\x02\x02\u028C\u028D\x07w\x02\x02\u028D\u028E\x07" +
24240
- "k\x02\x02\u028E\u028F\x07p\x02\x02\u028F\u0290\x07v\x02\x02\u0290\x86" +
24241
- "\x03\x02\x02\x02\u0291\u0292\x07h\x02\x02\u0292\u0293\x07n\x02\x02\u0293" +
24242
- "\u0294\x07q\x02\x02\u0294\u0295\x07c\x02\x02\u0295\u0296\x07v\x02\x02" +
24243
- "\u0296\x88\x03\x02\x02\x02\u0297\u0298\x07f\x02\x02\u0298\u0299\x07q\x02" +
24244
- "\x02\u0299\u029A\x07w\x02\x02\u029A\u029B\x07d\x02\x02\u029B\u029C\x07" +
24245
- "n\x02\x02\u029C\u029D\x07g\x02\x02\u029D\x8A\x03\x02\x02\x02\u029E\u029F" +
24246
- "\x07d\x02\x02\u029F\u02A0\x07q\x02\x02\u02A0\u02A1\x07q\x02\x02\u02A1" +
24247
- "\u02A2\x07n\x02\x02\u02A2\x8C\x03\x02\x02\x02\u02A3\u02A4\x07p\x02\x02" +
24248
- "\u02A4\u02A5\x07w\x02\x02\u02A5\u02A6\x07n\x02\x02\u02A6\u02A7\x07n\x02" +
24249
- "\x02\u02A7\x8E\x03\x02\x02\x02\u02A8\u02A9\x07x\x02\x02\u02A9\u02AA\x07" +
24250
- "q\x02\x02\u02AA\u02AB\x07k\x02\x02\u02AB\u02AC\x07f\x02\x02\u02AC\x90" +
24251
- "\x03\x02\x02\x02\u02AD\u02AE\x07w\x02\x02\u02AE\u02AF\x07p\x02\x02\u02AF" +
24252
- "\u02B0\x07f\x02\x02\u02B0\u02B1\x07g\x02\x02\u02B1\u02B2\x07h\x02\x02" +
24253
- "\u02B2\u02B3\x07k\x02\x02\u02B3\u02B4\x07p\x02\x02\u02B4\u02B5\x07g\x02" +
24254
- "\x02\u02B5\u02B6\x07f\x02\x02\u02B6\x92\x03\x02\x02\x02\u02B7\u02B9\t" +
24255
- "\x02\x02\x02\u02B8\u02B7\x03\x02\x02\x02\u02B9\u02BA\x03\x02\x02\x02\u02BA" +
24256
- "\u02B8\x03\x02\x02\x02\u02BA\u02BB\x03\x02\x02\x02\u02BB\u02C2\x03\x02" +
24257
- "\x02\x02\u02BC\u02BE\x070\x02\x02\u02BD\u02BF\t\x02\x02\x02\u02BE\u02BD" +
24258
- "\x03\x02\x02\x02\u02BF\u02C0\x03\x02\x02\x02\u02C0\u02BE\x03\x02\x02\x02" +
24259
- "\u02C0\u02C1\x03\x02\x02\x02\u02C1\u02C3\x03\x02\x02\x02\u02C2\u02BC\x03" +
24260
- "\x02\x02\x02\u02C2\u02C3\x03\x02\x02\x02\u02C3\u02CD\x03\x02\x02\x02\u02C4" +
24261
- "\u02C6\t\x03\x02\x02\u02C5\u02C7\t\x04\x02\x02\u02C6\u02C5\x03\x02\x02" +
24262
- "\x02\u02C6\u02C7\x03\x02\x02\x02\u02C7\u02C9\x03\x02\x02\x02\u02C8\u02CA" +
24263
- "\t\x02\x02\x02\u02C9\u02C8\x03\x02\x02\x02\u02CA\u02CB\x03\x02\x02\x02" +
24264
- "\u02CB\u02C9\x03\x02\x02\x02\u02CB\u02CC\x03\x02\x02\x02\u02CC\u02CE\x03" +
24265
- "\x02\x02\x02\u02CD\u02C4\x03\x02\x02\x02\u02CD\u02CE\x03\x02\x02\x02\u02CE" +
24266
- "\u02E1\x03\x02\x02\x02\u02CF\u02D1\x070\x02\x02\u02D0\u02D2\t\x02\x02" +
24267
- "\x02\u02D1\u02D0\x03\x02\x02\x02\u02D2\u02D3\x03\x02\x02\x02\u02D3\u02D1" +
24268
- "\x03\x02\x02\x02\u02D3\u02D4\x03\x02\x02\x02\u02D4\u02DE\x03\x02\x02\x02" +
24269
- "\u02D5\u02D7\t\x03\x02\x02\u02D6\u02D8\t\x04\x02\x02\u02D7\u02D6\x03\x02" +
24270
- "\x02\x02\u02D7\u02D8\x03\x02\x02\x02\u02D8\u02DA\x03\x02\x02\x02\u02D9" +
24271
- "\u02DB\t\x02\x02\x02\u02DA\u02D9\x03\x02\x02\x02\u02DB\u02DC\x03\x02\x02" +
24272
- "\x02\u02DC\u02DA\x03\x02\x02\x02\u02DC\u02DD\x03\x02\x02\x02\u02DD\u02DF" +
24273
- "\x03\x02\x02\x02\u02DE\u02D5\x03\x02\x02\x02\u02DE\u02DF\x03\x02\x02\x02" +
24274
- "\u02DF\u02E1\x03\x02\x02\x02\u02E0\u02B8\x03\x02\x02\x02\u02E0\u02CF\x03" +
24275
- "\x02\x02\x02\u02E1\x94\x03\x02\x02\x02\u02E2\u02E3\x07v\x02\x02\u02E3" +
24276
- "\u02E4\x07t\x02\x02\u02E4\u02E5\x07w\x02\x02\u02E5\u02EC\x07g\x02\x02" +
24277
- "\u02E6\u02E7\x07h\x02\x02\u02E7\u02E8\x07c\x02\x02\u02E8\u02E9\x07n\x02" +
24278
- "\x02\u02E9\u02EA\x07u\x02\x02\u02EA\u02EC\x07g\x02\x02\u02EB\u02E2\x03" +
24279
- "\x02\x02\x02\u02EB\u02E6\x03\x02\x02\x02\u02EC\x96\x03\x02\x02\x02\u02ED" +
24280
- "\u02F1\x07$\x02\x02\u02EE\u02F0\n\x05\x02\x02\u02EF\u02EE\x03\x02\x02" +
24281
- "\x02\u02F0\u02F3\x03\x02\x02\x02\u02F1\u02EF\x03\x02\x02\x02\u02F1\u02F2" +
24282
- "\x03\x02\x02\x02\u02F2\u02F4\x03\x02\x02\x02\u02F3\u02F1\x03\x02\x02\x02" +
24283
- "\u02F4\u02F5\x07$\x02\x02\u02F5\x98\x03\x02\x02\x02\u02F6\u02F7\x071\x02" +
24284
- "\x02\u02F7\u02F8\x071\x02\x02\u02F8\u02FC\x03\x02\x02\x02\u02F9\u02FB" +
24285
- "\n\x06\x02\x02\u02FA\u02F9\x03\x02\x02\x02\u02FB\u02FE\x03\x02\x02\x02" +
24286
- "\u02FC\u02FA\x03\x02\x02\x02\u02FC\u02FD\x03\x02\x02\x02\u02FD\u030B\x03" +
24287
- "\x02\x02\x02\u02FE\u02FC\x03\x02\x02\x02\u02FF\u0300\x071\x02\x02\u0300" +
24288
- "\u0301\x07,\x02\x02\u0301\u0305\x03\x02\x02\x02\u0302\u0304\v\x02\x02" +
24289
- "\x02\u0303\u0302\x03\x02\x02\x02\u0304\u0307\x03\x02\x02\x02\u0305\u0306" +
24290
- "\x03\x02\x02\x02\u0305\u0303\x03\x02\x02\x02\u0306\u0308\x03\x02\x02\x02" +
24291
- "\u0307\u0305\x03\x02\x02\x02\u0308\u0309\x07,\x02\x02\u0309\u030B\x07" +
24292
- "1\x02\x02\u030A\u02F6\x03\x02\x02\x02\u030A\u02FF\x03\x02\x02\x02\u030B" +
24293
- "\x9A\x03\x02\x02\x02\u030C\u030D\x07?\x02\x02\u030D\u030E\x07@\x02\x02" +
24294
- "\u030E\x9C\x03\x02\x02\x02\u030F\u0310\x07-\x02\x02\u0310\u0311\x07-\x02" +
24295
- "\x02\u0311\x9E\x03\x02\x02\x02\u0312\u0313\x07/\x02\x02\u0313\u0314\x07" +
24296
- "/\x02\x02\u0314\xA0\x03\x02\x02\x02\u0315\u0316\x07-\x02\x02\u0316\xA2" +
24297
- "\x03\x02\x02\x02\u0317\u0318\x07/\x02\x02\u0318\xA4\x03\x02\x02\x02\u0319" +
24298
- "\u031A\x071\x02\x02\u031A\xA6\x03\x02\x02\x02\u031B\u031C\x07,\x02\x02" +
24299
- "\u031C\xA8\x03\x02\x02\x02\u031D\u031E\x07\'\x02\x02\u031E\xAA\x03\x02" +
24300
- "\x02\x02\u031F\u0320\x07A\x02\x02\u0320\xAC\x03\x02\x02\x02\u0321\u0322" +
24301
- "\x07?\x02\x02\u0322\xAE\x03\x02\x02\x02\u0323\u0324\x07-\x02\x02\u0324" +
24302
- "\u0325\x07?\x02\x02\u0325\xB0\x03\x02\x02\x02\u0326\u0327\x07/\x02\x02" +
24303
- "\u0327\u0328\x07?\x02\x02\u0328\xB2\x03\x02\x02\x02\u0329\u032A\x07(\x02" +
24304
- "\x02\u032A\u032B\x07(\x02\x02\u032B\xB4\x03\x02\x02\x02\u032C\u032D\x07" +
24305
- "~\x02\x02\u032D\u032E\x07~\x02\x02\u032E\xB6\x03\x02\x02\x02\u032F\u0330" +
24306
- "\x07#\x02\x02\u0330\xB8\x03\x02\x02\x02\u0331\u0332\x07?\x02\x02\u0332" +
24307
- "\u0333\x07?\x02\x02\u0333\xBA\x03\x02\x02\x02\u0334\u0335\x07#\x02\x02" +
24308
- "\u0335\u0336\x07?\x02\x02\u0336\xBC\x03\x02\x02\x02\u0337\u0338\x07@\x02" +
24309
- "\x02\u0338\xBE\x03\x02\x02\x02\u0339\u033A\x07>\x02\x02\u033A\xC0\x03" +
24310
- "\x02\x02\x02\u033B\u033C\x07@\x02\x02\u033C\u033D\x07?\x02\x02\u033D\xC2" +
24311
- "\x03\x02\x02\x02\u033E\u033F\x07>\x02\x02\u033F\u0340\x07?\x02\x02\u0340" +
24312
- "\xC4\x03\x02\x02\x02\u0341\u0342\x070\x02\x02\u0342\u0343\x070\x02\x02" +
24313
- "\u0343\u0344\x070\x02\x02\u0344\xC6\x03\x02\x02\x02\u0345\u0346\x070\x02" +
24314
- "\x02\u0346\xC8\x03\x02\x02\x02\u0347\u0348\x07.\x02\x02\u0348\xCA\x03" +
24315
- "\x02\x02\x02\u0349\u034A\x07a\x02\x02\u034A\xCC\x03\x02\x02\x02\u034B" +
24316
- "\u034C\x07*\x02\x02\u034C\xCE\x03\x02\x02\x02\u034D\u034E\x07+\x02\x02" +
24317
- "\u034E\xD0\x03\x02\x02\x02\u034F\u0350\x07}\x02\x02\u0350\xD2\x03\x02" +
24318
- "\x02\x02\u0351\u0352\x07\x7F\x02\x02\u0352\xD4\x03\x02\x02\x02\u0353\u0354" +
24319
- "\x07]\x02\x02\u0354\xD6\x03\x02\x02\x02\u0355\u0356\x07_\x02\x02\u0356" +
24320
- "\xD8\x03\x02\x02\x02\u0357\u0358\x07<\x02\x02\u0358\u0359\x07<\x02\x02" +
24321
- "\u0359\xDA\x03\x02\x02\x02\u035A\u035B\x07=\x02\x02\u035B\xDC\x03\x02" +
24322
- "\x02\x02\u035C\u035D\x07<\x02\x02\u035D\xDE\x03\x02\x02\x02\u035E\u0362" +
24323
- "\t\x07\x02\x02\u035F\u0361\t\b\x02\x02\u0360\u035F\x03\x02\x02\x02\u0361" +
24324
- "\u0364\x03\x02\x02\x02\u0362\u0360\x03\x02\x02\x02\u0362\u0363\x03\x02" +
24325
- "\x02\x02\u0363\u0370\x03\x02\x02\x02\u0364\u0362\x03\x02\x02\x02\u0365" +
24326
- "\u0367\t\t\x02\x02\u0366\u0365\x03\x02\x02\x02\u0367\u0368\x03\x02\x02" +
24327
- "\x02\u0368\u0366\x03\x02\x02\x02\u0368\u0369\x03\x02\x02\x02\u0369\u036B" +
24328
- "\x03\x02\x02\x02\u036A\u036C\t\b\x02\x02\u036B\u036A\x03\x02\x02\x02\u036C" +
24329
- "\u036D\x03\x02\x02\x02\u036D\u036B\x03\x02\x02\x02\u036D\u036E\x03\x02" +
24330
- "\x02\x02\u036E\u0370\x03\x02\x02\x02\u036F\u035E\x03\x02\x02\x02\u036F" +
24331
- "\u0366\x03\x02\x02\x02\u0370\xE0\x03\x02\x02\x02\u0371\u0373\t\n\x02\x02" +
24332
- "\u0372\u0371\x03\x02\x02\x02\u0373\u0374\x03\x02\x02\x02\u0374\u0372\x03" +
24333
- "\x02\x02\x02\u0374\u0375\x03\x02\x02\x02\u0375\u0376\x03\x02\x02\x02\u0376" +
24334
- "\u0377\bq\x02\x02\u0377\xE2\x03\x02\x02\x02\x18\x02\u02BA\u02C0\u02C2" +
24335
- "\u02C6\u02CB\u02CD\u02D3\u02D7\u02DC\u02DE\u02E0\u02EB\u02F1\u02FC\u0305" +
24336
- "\u030A\u0362\u0368\u036D\u036F\u0374\x03\b\x02\x02";
24172
+ "\u01CC\u01CD\x07c\x02\x02\u01CD";
24173
+ BattleScriptLexer._serializedATNSegment1 = "\u01CE\x07v\x02\x02\u01CE\u01CF\x07g\x02\x02\u01CFH\x03\x02\x02\x02\u01D0" +
24174
+ "\u01D1\x07e\x02\x02\u01D1\u01D2\x07c\x02\x02\u01D2\u01D3\x07u\x02\x02" +
24175
+ "\u01D3\u01D4\x07g\x02\x02\u01D4J\x03\x02\x02\x02\u01D5\u01D6\x07d\x02" +
24176
+ "\x02\u01D6\u01D7\x07t\x02\x02\u01D7\u01D8\x07g\x02\x02\u01D8\u01D9\x07" +
24177
+ "c\x02\x02\u01D9\u01DA\x07m\x02\x02\u01DAL\x03\x02\x02\x02\u01DB\u01DC" +
24178
+ "\x07e\x02\x02\u01DC\u01DD\x07q\x02\x02\u01DD\u01DE\x07p\x02\x02\u01DE" +
24179
+ "\u01DF\x07v\x02\x02\u01DF\u01E0\x07k\x02\x02\u01E0\u01E1\x07p\x02\x02" +
24180
+ "\u01E1\u01E2\x07w\x02\x02\u01E2\u01E3\x07g\x02\x02\u01E3N\x03\x02\x02" +
24181
+ "\x02\u01E4\u01E5\x07h\x02\x02\u01E5\u01E6\x07c\x02\x02\u01E6\u01E7\x07" +
24182
+ "n\x02\x02\u01E7\u01E8\x07n\x02\x02\u01E8\u01E9\x07d\x02\x02\u01E9\u01EA" +
24183
+ "\x07c\x02\x02\u01EA\u01EB\x07e\x02\x02\u01EB\u01EC\x07m\x02\x02\u01EC" +
24184
+ "P\x03\x02\x02\x02\u01ED\u01EE\x07e\x02\x02\u01EE\u01EF\x07c\x02\x02\u01EF" +
24185
+ "\u01F0\x07v\x02\x02\u01F0\u01F1\x07e\x02\x02\u01F1\u01F2\x07j\x02\x02" +
24186
+ "\u01F2R\x03\x02\x02\x02\u01F3\u01F4\x07c\x02\x02\u01F4\u01F5\x07u\x02" +
24187
+ "\x02\u01F5T\x03\x02\x02\x02\u01F6\u01F7\x07g\x02\x02\u01F7\u01F8\x07p" +
24188
+ "\x02\x02\u01F8\u01F9\x07w\x02\x02\u01F9\u01FA\x07o\x02\x02\u01FAV\x03" +
24189
+ "\x02\x02\x02\u01FB\u01FC\x07c\x02\x02\u01FC\u01FD\x07p\x02\x02\u01FD\u01FE" +
24190
+ "\x07{\x02\x02\u01FEX\x03\x02\x02\x02\u01FF\u0200\x07r\x02\x02\u0200\u0201" +
24191
+ "\x07t\x02\x02\u0201\u0202\x07q\x02\x02\u0202\u0203\x07v\x02\x02\u0203" +
24192
+ "\u0204\x07q\x02\x02\u0204\u0205\x07e\x02\x02\u0205\u0206\x07q\x02\x02" +
24193
+ "\u0206\u0207\x07n\x02\x02\u0207Z\x03\x02\x02\x02\u0208\u0209\x07f\x02" +
24194
+ "\x02\u0209\u020A\x07g\x02\x02\u020A\u020B\x07h\x02\x02\u020B\u020C\x07" +
24195
+ "k\x02\x02\u020C\u020D\x07p\x02\x02\u020D\u020E\x07g\x02\x02\u020E\\\x03" +
24196
+ "\x02\x02\x02\u020F\u0210\x07t\x02\x02\u0210\u0211\x07g\x02\x02\u0211\u0212" +
24197
+ "\x07s\x02\x02\u0212\u0213\x07w\x02\x02\u0213\u0214\x07k\x02\x02\u0214" +
24198
+ "\u0215\x07t\x02\x02\u0215\u0216\x07g\x02\x02\u0216^\x03\x02\x02\x02\u0217" +
24199
+ "\u0218\x07v\x02\x02\u0218\u0219\x07g\x02\x02\u0219\u021A\x07t\x02\x02" +
24200
+ "\u021A\u021B\x07o\x02\x02\u021B\u021C\x07k\x02\x02\u021C\u021D\x07p\x02" +
24201
+ "\x02\u021D\u021E\x07c\x02\x02\u021E\u021F\x07v\x02\x02\u021F\u0220\x07" +
24202
+ "g\x02\x02\u0220`\x03\x02\x02\x02\u0221\u0222\x07u\x02\x02\u0222\u0223" +
24203
+ "\x07v\x02\x02\u0223\u0224\x07g\x02\x02\u0224\u0225\x07r\x02\x02\u0225" +
24204
+ "b\x03\x02\x02\x02\u0226\u0227\x07f\x02\x02\u0227\u0228\x07g\x02\x02\u0228" +
24205
+ "\u0229\x07e\x02\x02\u0229\u022A\x07q\x02\x02\u022A\u022B\x07f\x02\x02" +
24206
+ "\u022B\u022C\x07g\x02\x02\u022Cd\x03\x02\x02\x02\u022D\u022E\x07g\x02" +
24207
+ "\x02\u022E\u022F\x07p\x02\x02\u022F\u0230\x07e\x02\x02\u0230\u0231\x07" +
24208
+ "q\x02\x02\u0231\u0232\x07f\x02\x02\u0232\u0233\x07g\x02\x02\u0233f\x03" +
24209
+ "\x02\x02\x02\u0234\u0235\x07g\x02\x02\u0235\u0236\x07p\x02\x02\u0236\u0237" +
24210
+ "\x07f\x02\x02\u0237h\x03\x02\x02\x02\u0238\u0239\x07h\x02\x02\u0239\u023A" +
24211
+ "\x07q\x02\x02\u023A\u023B\x07t\x02\x02\u023B\u023C\x07y\x02\x02\u023C" +
24212
+ "\u023D\x07c\x02\x02\u023D\u023E\x07t\x02\x02\u023E\u023F\x07f\x02\x02" +
24213
+ "\u023Fj\x03\x02\x02\x02\u0240\u0241\x07t\x02\x02\u0241\u0242\x07g\x02" +
24214
+ "\x02\u0242\u0243\x07y\x02\x02\u0243\u0244\x07k\x02\x02\u0244\u0245\x07" +
24215
+ "p\x02\x02\u0245\u0246\x07f\x02\x02\u0246l\x03\x02\x02\x02\u0247\u0248" +
24216
+ "\x07q\x02\x02\u0248\u0249\x07h\x02\x02\u0249\u024A\x07h\x02\x02\u024A" +
24217
+ "\u024B\x07u\x02\x02\u024B\u024C\x07g\x02\x02\u024C\u024D\x07v\x02\x02" +
24218
+ "\u024Dn\x03\x02\x02\x02\u024E\u024F\x07z\x02\x02\u024F\u0250\x07q\x02" +
24219
+ "\x02\u0250\u0251\x07t\x02\x02\u0251p\x03\x02\x02\x02\u0252\u0253\x07z" +
24220
+ "\x02\x02\u0253\u0254\x07p\x02\x02\u0254\u0255\x07q\x02\x02\u0255\u0256" +
24221
+ "\x07t\x02\x02\u0256r\x03\x02\x02\x02\u0257\u0258\x07d\x02\x02\u0258\u0259" +
24222
+ "\x07k\x02\x02\u0259\u025A\x07v\x02\x02\u025A\u025B\x07u\x02\x02\u025B" +
24223
+ "t\x03\x02\x02\x02\u025C\u025D\x07d\x02\x02\u025D\u025E\x07{\x02\x02\u025E" +
24224
+ "\u025F\x07v\x02\x02\u025F\u0260\x07g\x02\x02\u0260\u0261\x07u\x02\x02" +
24225
+ "\u0261v\x03\x02\x02\x02\u0262\u0263\x07t\x02\x02\u0263\u0264\x07w\x02" +
24226
+ "\x02\u0264\u0265\x07n\x02\x02\u0265\u0266\x07g\x02\x02\u0266x\x03\x02" +
24227
+ "\x02\x02\u0267\u0268\x07r\x02\x02\u0268\u0269\x07c\x02\x02\u0269\u026A" +
24228
+ "\x07t\x02\x02\u026A\u026B\x07k\x02\x02\u026B\u026C\x07v\x02\x02\u026C" +
24229
+ "\u026D\x07{\x02\x02\u026Dz\x03\x02\x02\x02\u026E\u026F\x07e\x02\x02\u026F" +
24230
+ "\u0270\x07q\x02\x02\u0270\u0271\x07p\x02\x02\u0271\u0272\x07u\x02\x02" +
24231
+ "\u0272\u0273\x07v\x02\x02\u0273|\x03\x02\x02\x02\u0274\u0275\x07q\x02" +
24232
+ "\x02\u0275\u0276\x07d\x02\x02\u0276\u0277\x07l\x02\x02\u0277\u0278\x07" +
24233
+ "g\x02\x02\u0278\u0279\x07e\x02\x02\u0279\u027A\x07v\x02\x02\u027A~\x03" +
24234
+ "\x02\x02\x02\u027B\u027C\x07c\x02\x02\u027C\u027D\x07t\x02\x02\u027D\u027E" +
24235
+ "\x07t\x02\x02\u027E\u027F\x07c\x02\x02\u027F\u0280\x07{\x02\x02\u0280" +
24236
+ "\x80\x03\x02\x02\x02\u0281\u0282\x07u\x02\x02\u0282\u0283\x07v\x02\x02" +
24237
+ "\u0283\u0284\x07t\x02\x02\u0284\u0285\x07k\x02\x02\u0285\u0286\x07p\x02" +
24238
+ "\x02\u0286\u0287\x07i\x02\x02\u0287\x82\x03\x02\x02\x02\u0288\u0289\x07" +
24239
+ "k\x02\x02\u0289\u028A\x07p\x02\x02\u028A\u028B\x07v\x02\x02\u028B\x84" +
24240
+ "\x03\x02\x02\x02\u028C\u028D\x07w\x02\x02\u028D\u028E\x07k\x02\x02\u028E" +
24241
+ "\u028F\x07p\x02\x02\u028F\u0290\x07v\x02\x02\u0290\x86\x03\x02\x02\x02" +
24242
+ "\u0291\u0292\x07h\x02\x02\u0292\u0293\x07n\x02\x02\u0293\u0294\x07q\x02" +
24243
+ "\x02\u0294\u0295\x07c\x02\x02\u0295\u0296\x07v\x02\x02\u0296\x88\x03\x02" +
24244
+ "\x02\x02\u0297\u0298\x07f\x02\x02\u0298\u0299\x07q\x02\x02\u0299\u029A" +
24245
+ "\x07w\x02\x02\u029A\u029B\x07d\x02\x02\u029B\u029C\x07n\x02\x02\u029C" +
24246
+ "\u029D\x07g\x02\x02\u029D\x8A\x03\x02\x02\x02\u029E\u029F\x07d\x02\x02" +
24247
+ "\u029F\u02A0\x07q\x02\x02\u02A0\u02A1\x07q\x02\x02\u02A1\u02A2\x07n\x02" +
24248
+ "\x02\u02A2\x8C\x03\x02\x02\x02\u02A3\u02A4\x07p\x02\x02\u02A4\u02A5\x07" +
24249
+ "w\x02\x02\u02A5\u02A6\x07n\x02\x02\u02A6\u02A7\x07n\x02\x02\u02A7\x8E" +
24250
+ "\x03\x02\x02\x02\u02A8\u02A9\x07x\x02\x02\u02A9\u02AA\x07q\x02\x02\u02AA" +
24251
+ "\u02AB\x07k\x02\x02\u02AB\u02AC\x07f\x02\x02\u02AC\x90\x03\x02\x02\x02" +
24252
+ "\u02AD\u02AE\x07w\x02\x02\u02AE\u02AF\x07p\x02\x02\u02AF\u02B0\x07f\x02" +
24253
+ "\x02\u02B0\u02B1\x07g\x02\x02\u02B1\u02B2\x07h\x02\x02\u02B2\u02B3\x07" +
24254
+ "k\x02\x02\u02B3\u02B4\x07p\x02\x02\u02B4\u02B5\x07g\x02\x02\u02B5\u02B6" +
24255
+ "\x07f\x02\x02\u02B6\x92\x03\x02\x02\x02\u02B7\u02B8\x072\x02\x02\u02B8" +
24256
+ "\u02BA\t\x02\x02\x02\u02B9\u02BB\t\x03\x02\x02\u02BA\u02B9\x03\x02\x02" +
24257
+ "\x02\u02BB\u02BC\x03\x02\x02\x02\u02BC\u02BA\x03\x02\x02\x02\u02BC\u02BD" +
24258
+ "\x03\x02\x02\x02\u02BD\u02E8\x03\x02\x02\x02\u02BE\u02C0\t\x04\x02\x02" +
24259
+ "\u02BF\u02BE\x03\x02\x02\x02\u02C0\u02C1\x03\x02\x02\x02\u02C1\u02BF\x03" +
24260
+ "\x02\x02\x02\u02C1\u02C2\x03\x02\x02\x02\u02C2\u02C9\x03\x02\x02\x02\u02C3" +
24261
+ "\u02C5\x070\x02\x02\u02C4\u02C6\t\x04\x02\x02\u02C5\u02C4\x03\x02\x02" +
24262
+ "\x02\u02C6\u02C7\x03\x02\x02\x02\u02C7\u02C5\x03\x02\x02\x02\u02C7\u02C8" +
24263
+ "\x03\x02\x02\x02\u02C8\u02CA\x03\x02\x02\x02\u02C9\u02C3\x03\x02\x02\x02" +
24264
+ "\u02C9\u02CA\x03\x02\x02\x02\u02CA\u02D4\x03\x02\x02\x02\u02CB\u02CD\t" +
24265
+ "\x05\x02\x02\u02CC\u02CE\t\x06\x02\x02\u02CD\u02CC\x03\x02\x02\x02\u02CD" +
24266
+ "\u02CE\x03\x02\x02\x02\u02CE\u02D0\x03\x02\x02\x02\u02CF\u02D1\t\x04\x02" +
24267
+ "\x02\u02D0\u02CF\x03\x02\x02\x02\u02D1\u02D2\x03\x02\x02\x02\u02D2\u02D0" +
24268
+ "\x03\x02\x02\x02\u02D2\u02D3\x03\x02\x02\x02\u02D3\u02D5\x03\x02\x02\x02" +
24269
+ "\u02D4\u02CB\x03\x02\x02\x02\u02D4\u02D5\x03\x02\x02\x02\u02D5\u02E8\x03" +
24270
+ "\x02\x02\x02\u02D6\u02D8\x070\x02\x02\u02D7\u02D9\t\x04\x02\x02\u02D8" +
24271
+ "\u02D7\x03\x02\x02\x02\u02D9\u02DA\x03\x02\x02\x02\u02DA\u02D8\x03\x02" +
24272
+ "\x02\x02\u02DA\u02DB\x03\x02\x02\x02\u02DB\u02E5\x03\x02\x02\x02\u02DC" +
24273
+ "\u02DE\t\x05\x02\x02\u02DD\u02DF\t\x06\x02\x02\u02DE\u02DD\x03\x02\x02" +
24274
+ "\x02\u02DE\u02DF\x03\x02\x02\x02\u02DF\u02E1\x03\x02\x02\x02\u02E0\u02E2" +
24275
+ "\t\x04\x02\x02\u02E1\u02E0\x03\x02\x02\x02\u02E2\u02E3\x03\x02\x02\x02" +
24276
+ "\u02E3\u02E1\x03\x02\x02\x02\u02E3\u02E4\x03\x02\x02\x02\u02E4\u02E6\x03" +
24277
+ "\x02\x02\x02\u02E5\u02DC\x03\x02\x02\x02\u02E5\u02E6\x03\x02\x02\x02\u02E6" +
24278
+ "\u02E8\x03\x02\x02\x02\u02E7\u02B7\x03\x02\x02\x02\u02E7\u02BF\x03\x02" +
24279
+ "\x02\x02\u02E7\u02D6\x03\x02\x02\x02\u02E8\x94\x03\x02\x02\x02\u02E9\u02EA" +
24280
+ "\x07v\x02\x02\u02EA\u02EB\x07t\x02\x02\u02EB\u02EC\x07w\x02\x02\u02EC" +
24281
+ "\u02F3\x07g\x02\x02\u02ED\u02EE\x07h\x02\x02\u02EE\u02EF\x07c\x02\x02" +
24282
+ "\u02EF\u02F0\x07n\x02\x02\u02F0\u02F1\x07u\x02\x02\u02F1\u02F3\x07g\x02" +
24283
+ "\x02\u02F2\u02E9\x03\x02\x02\x02\u02F2\u02ED\x03\x02\x02\x02\u02F3\x96" +
24284
+ "\x03\x02\x02\x02\u02F4\u02F8\x07$\x02\x02\u02F5\u02F7\n\x07\x02\x02\u02F6" +
24285
+ "\u02F5\x03\x02\x02\x02\u02F7\u02FA\x03\x02\x02\x02\u02F8\u02F6\x03\x02" +
24286
+ "\x02\x02\u02F8\u02F9\x03\x02\x02\x02\u02F9\u02FB\x03\x02\x02\x02\u02FA" +
24287
+ "\u02F8\x03\x02\x02\x02\u02FB\u02FC\x07$\x02\x02\u02FC\x98\x03\x02\x02" +
24288
+ "\x02\u02FD\u02FE\x071\x02\x02\u02FE\u02FF\x071\x02\x02\u02FF\u0303\x03" +
24289
+ "\x02\x02\x02\u0300\u0302\n\b\x02\x02\u0301\u0300\x03\x02\x02\x02\u0302" +
24290
+ "\u0305\x03\x02\x02\x02\u0303\u0301\x03\x02\x02\x02\u0303\u0304\x03\x02" +
24291
+ "\x02\x02\u0304\u0312\x03\x02\x02\x02\u0305\u0303\x03\x02\x02\x02\u0306" +
24292
+ "\u0307\x071\x02\x02\u0307\u0308\x07,\x02\x02\u0308\u030C\x03\x02\x02\x02" +
24293
+ "\u0309\u030B\v\x02\x02\x02\u030A\u0309\x03\x02\x02\x02\u030B\u030E\x03" +
24294
+ "\x02\x02\x02\u030C\u030D\x03\x02\x02\x02\u030C\u030A\x03\x02\x02\x02\u030D" +
24295
+ "\u030F\x03\x02\x02\x02\u030E\u030C\x03\x02\x02\x02\u030F\u0310\x07,\x02" +
24296
+ "\x02\u0310\u0312\x071\x02\x02\u0311\u02FD\x03\x02\x02\x02\u0311\u0306" +
24297
+ "\x03\x02\x02\x02\u0312\x9A\x03\x02\x02\x02\u0313\u0314\x07?\x02\x02\u0314" +
24298
+ "\u0315\x07@\x02\x02\u0315\x9C\x03\x02\x02\x02\u0316\u0317\x07-\x02\x02" +
24299
+ "\u0317\u0318\x07-\x02\x02\u0318\x9E\x03\x02\x02\x02\u0319\u031A\x07/\x02" +
24300
+ "\x02\u031A\u031B\x07/\x02\x02\u031B\xA0\x03\x02\x02\x02\u031C\u031D\x07" +
24301
+ "-\x02\x02\u031D\xA2\x03\x02\x02\x02\u031E\u031F\x07/\x02\x02\u031F\xA4" +
24302
+ "\x03\x02\x02\x02\u0320\u0321\x071\x02\x02\u0321\xA6\x03\x02\x02\x02\u0322" +
24303
+ "\u0323\x07,\x02\x02\u0323\xA8\x03\x02\x02\x02\u0324\u0325\x07\'\x02\x02" +
24304
+ "\u0325\xAA\x03\x02\x02\x02\u0326\u0327\x07A\x02\x02\u0327\xAC\x03\x02" +
24305
+ "\x02\x02\u0328\u0329\x07?\x02\x02\u0329\xAE\x03\x02\x02\x02\u032A\u032B" +
24306
+ "\x07-\x02\x02\u032B\u032C\x07?\x02\x02\u032C\xB0\x03\x02\x02\x02\u032D" +
24307
+ "\u032E\x07/\x02\x02\u032E\u032F\x07?\x02\x02\u032F\xB2\x03\x02\x02\x02" +
24308
+ "\u0330\u0331\x07(\x02\x02\u0331\u0332\x07(\x02\x02\u0332\xB4\x03\x02\x02" +
24309
+ "\x02\u0333\u0334\x07~\x02\x02\u0334\u0335\x07~\x02\x02\u0335\xB6\x03\x02" +
24310
+ "\x02\x02\u0336\u0337\x07#\x02\x02\u0337\xB8\x03\x02\x02\x02\u0338\u0339" +
24311
+ "\x07?\x02\x02\u0339\u033A\x07?\x02\x02\u033A\xBA\x03\x02\x02\x02\u033B" +
24312
+ "\u033C\x07#\x02\x02\u033C\u033D\x07?\x02\x02\u033D\xBC\x03\x02\x02\x02" +
24313
+ "\u033E\u033F\x07@\x02\x02\u033F\xBE\x03\x02\x02\x02\u0340\u0341\x07>\x02" +
24314
+ "\x02\u0341\xC0\x03\x02\x02\x02\u0342\u0343\x07@\x02\x02\u0343\u0344\x07" +
24315
+ "?\x02\x02\u0344\xC2\x03\x02\x02\x02\u0345\u0346\x07>\x02\x02\u0346\u0347" +
24316
+ "\x07?\x02\x02\u0347\xC4\x03\x02\x02\x02\u0348\u0349\x070\x02\x02\u0349" +
24317
+ "\u034A\x070\x02\x02\u034A\u034B\x070\x02\x02\u034B\xC6\x03\x02\x02\x02" +
24318
+ "\u034C\u034D\x070\x02\x02\u034D\xC8\x03\x02\x02\x02\u034E\u034F\x07.\x02" +
24319
+ "\x02\u034F\xCA\x03\x02\x02\x02\u0350\u0351\x07a\x02\x02\u0351\xCC\x03" +
24320
+ "\x02\x02\x02\u0352\u0353\x07*\x02\x02\u0353\xCE\x03\x02\x02\x02\u0354" +
24321
+ "\u0355\x07+\x02\x02\u0355\xD0\x03\x02\x02\x02\u0356\u0357\x07}\x02\x02" +
24322
+ "\u0357\xD2\x03\x02\x02\x02\u0358\u0359\x07\x7F\x02\x02\u0359\xD4\x03\x02" +
24323
+ "\x02\x02\u035A\u035B\x07]\x02\x02\u035B\xD6\x03\x02\x02\x02\u035C\u035D" +
24324
+ "\x07_\x02\x02\u035D\xD8\x03\x02\x02\x02\u035E\u035F\x07<\x02\x02\u035F" +
24325
+ "\u0360\x07<\x02\x02\u0360\xDA\x03\x02\x02\x02\u0361\u0362\x07=\x02\x02" +
24326
+ "\u0362\xDC\x03\x02\x02\x02\u0363\u0364\x07<\x02\x02\u0364\xDE\x03\x02" +
24327
+ "\x02\x02\u0365\u0369\t\t\x02\x02\u0366\u0368\t\n\x02\x02\u0367\u0366\x03" +
24328
+ "\x02\x02\x02\u0368\u036B\x03\x02\x02\x02\u0369\u0367\x03\x02\x02\x02\u0369" +
24329
+ "\u036A\x03\x02\x02\x02\u036A\u0377\x03\x02\x02\x02\u036B\u0369\x03\x02" +
24330
+ "\x02\x02\u036C\u036E\t\v\x02\x02\u036D\u036C\x03\x02\x02\x02\u036E\u036F" +
24331
+ "\x03\x02\x02\x02\u036F\u036D\x03\x02\x02\x02\u036F\u0370\x03\x02\x02\x02" +
24332
+ "\u0370\u0372\x03\x02\x02\x02\u0371\u0373\t\n\x02\x02\u0372\u0371\x03\x02" +
24333
+ "\x02\x02\u0373\u0374\x03\x02\x02\x02\u0374\u0372\x03\x02\x02\x02\u0374" +
24334
+ "\u0375\x03\x02\x02\x02\u0375\u0377\x03\x02\x02\x02\u0376\u0365\x03\x02" +
24335
+ "\x02\x02\u0376\u036D\x03\x02\x02\x02\u0377\xE0\x03\x02\x02\x02\u0378\u037A" +
24336
+ "\t\f\x02\x02\u0379\u0378\x03\x02\x02\x02\u037A\u037B\x03\x02\x02\x02\u037B" +
24337
+ "\u0379\x03\x02\x02\x02\u037B\u037C\x03\x02\x02\x02\u037C\u037D\x03\x02" +
24338
+ "\x02\x02\u037D\u037E\bq\x02\x02\u037E\xE2\x03\x02\x02\x02\x19\x02\u02BC" +
24339
+ "\u02C1\u02C7\u02C9\u02CD\u02D2\u02D4\u02DA\u02DE\u02E3\u02E5\u02E7\u02F2" +
24340
+ "\u02F8\u0303\u030C\u0311\u0369\u036F\u0374\u0376\u037B\x03\b\x02\x02";
24337
24341
  BattleScriptLexer._serializedATN = UtilsExports.join([
24338
24342
  BattleScriptLexer._serializedATNSegment0,
24339
24343
  BattleScriptLexer._serializedATNSegment1,
@@ -24407,6 +24411,18 @@ const throwIfUndefined = (value, message) => {
24407
24411
  }
24408
24412
  return value;
24409
24413
  };
24414
+ /**
24415
+ * Write a number held directly on a node back to source.
24416
+ *
24417
+ * Nodes such as `forward`/`offset`/`rewind`, `rule`, and the `uint<n>`/`bits<n>` widths store a
24418
+ * decoded number rather than a literal child, so each keeps a companion `<field>Raw` holding the
24419
+ * text it was written as - otherwise `forward 0x10;` would come back as `forward 16;`. The raw
24420
+ * text is a full-AST convenience and is not in the binary layout, so a node rebuilt from a binary
24421
+ * has no raw text and falls back to decimal.
24422
+ */
24423
+ const numberToSourceCode = (value, raw) => {
24424
+ return raw ?? value.toString();
24425
+ };
24410
24426
  const applyMetaDataToFunctionDeclarationNode = (node, meta) => {
24411
24427
  return {
24412
24428
  ...node,
@@ -24486,6 +24502,18 @@ const AssignmentExpressionNodeLayout = [{
24486
24502
  key: "right",
24487
24503
  shape: [exports.EnumNodeLayoutEntry.LAYOUT_POINTER_NODE],
24488
24504
  }];
24505
+ /**
24506
+ * The operator as written: `=`, `+=` or `-=`. The grammar gives all three the
24507
+ * same rule, so it is the token between the two expressions. It used to be
24508
+ * written as "=" whatever the source said, which turned `a += b` into `a = b`.
24509
+ */
24510
+ const assignmentOperator = (ctx) => {
24511
+ if (ctx.PLUS_ASSIGN())
24512
+ return "+=";
24513
+ if (ctx.MINUS_ASSIGN())
24514
+ return "-=";
24515
+ return "=";
24516
+ };
24489
24517
  const assignmentExpressionToAstNode = (instance, ctx) => {
24490
24518
  // Check for optimisations
24491
24519
  const canOptimise = isOptimisable(instance, ctx);
@@ -24493,7 +24521,7 @@ const assignmentExpressionToAstNode = (instance, ctx) => {
24493
24521
  return {
24494
24522
  kind: "OPTIMISED_ASSIGNMENT_EXPRESSION",
24495
24523
  left: ctx.expression(0).text,
24496
- operator: "=",
24524
+ operator: assignmentOperator(ctx),
24497
24525
  right: ctx.expression(1).text,
24498
24526
  ...instance.contextMetaData(ctx)
24499
24527
  };
@@ -24501,7 +24529,7 @@ const assignmentExpressionToAstNode = (instance, ctx) => {
24501
24529
  return {
24502
24530
  kind: "ASSIGNMENT_EXPRESSION",
24503
24531
  left: instance.visit(ctx.expression(0)),
24504
- operator: "=",
24532
+ operator: assignmentOperator(ctx),
24505
24533
  right: instance.visit(ctx.expression(1)),
24506
24534
  ...instance.contextMetaData(ctx)
24507
24535
  };
@@ -25479,24 +25507,48 @@ const LiteralIntNodeLayout = [{
25479
25507
  key: "value",
25480
25508
  shape: [exports.EnumNodeLayoutEntry.LAYOUT_RAW_INT],
25481
25509
  }];
25510
+ /**
25511
+ * Decode the text of a NUMBER token to its numeric value.
25512
+ *
25513
+ * `Number()` rather than `JSON.parse()`, because the NUMBER rule accepts three forms JSON
25514
+ * rejects: hex (`0xFF`), a bare fraction (`.5`), and leading zeroes (`010`). Decoding those
25515
+ * with `JSON.parse` threw on source the parser had already accepted. Note that a leading zero
25516
+ * is not a base marker - BattleScript has no octal, so `010` is ten, and a C-style bitmask is
25517
+ * written `0x…`.
25518
+ */
25519
+ const decodeNumberLiteral = (raw) => {
25520
+ const value = Number(raw);
25521
+ if (Number.isNaN(value)) {
25522
+ throw new Error(`Could not decode number literal "${raw}"`);
25523
+ }
25524
+ return value;
25525
+ };
25482
25526
  // TODO: We don't currently have a way to distinguish between float and double
25483
25527
  // and would need to add support at the grammar level to do so. I think adding
25484
25528
  // support for 1.2453L with a capital L would be the best way to do this,
25485
25529
  // defaulting to 32-bit floats when L is not present.
25486
25530
  const numberLiteralToAstNode = (instance, ctx) => {
25531
+ // `raw` is kept verbatim so codegen writes the literal back exactly as it was authored -
25532
+ // a colour written as 0xFF0000 should not come back out as 16711680.
25487
25533
  const raw = ctx.NUMBER().text;
25488
- const isInteger = Number.isInteger(JSON.parse(raw));
25489
- if (isInteger) {
25534
+ const value = decodeNumberLiteral(raw);
25535
+ // Int or float is decided by how the literal was written, not by its value:
25536
+ // `2.0` and `1e3` are floats the author spelled as floats, and deciding on
25537
+ // the value made `7 / 2.0` integer division in the interpreter. Hex is
25538
+ // always an int (its digits can include `e`).
25539
+ const isHex = /^0[xX]/.test(raw);
25540
+ const writtenAsFloat = !isHex && /[.eE]/.test(raw);
25541
+ if (!writtenAsFloat) {
25490
25542
  return {
25491
25543
  kind: `LITERAL_INT`,
25492
- value: JSON.parse(raw),
25544
+ value,
25493
25545
  raw,
25494
25546
  ...instance.contextMetaData(ctx),
25495
25547
  };
25496
25548
  }
25497
25549
  return {
25498
25550
  kind: `LITERAL_FLOAT`,
25499
- value: JSON.parse(raw),
25551
+ value,
25500
25552
  raw,
25501
25553
  ...instance.contextMetaData(ctx),
25502
25554
  };
@@ -40270,7 +40322,7 @@ const optimisedAssignmentExpressionToAstNode = (instance, ctx) => {
40270
40322
  return {
40271
40323
  kind: "OPTIMISED_ASSIGNMENT_EXPRESSION",
40272
40324
  left: ctx.expression(0).text,
40273
- operator: "=",
40325
+ operator: assignmentOperator(ctx),
40274
40326
  right: ctx.expression(1).text,
40275
40327
  ...instance.contextMetaData(ctx)
40276
40328
  };
@@ -40404,8 +40456,11 @@ const ProtocolTypeNodeLayout = [{
40404
40456
  const protocolTypeToAstNode = (instance, ctx) => {
40405
40457
  const numLiteralNode = ctx.numberLiteral();
40406
40458
  let bitCount = 0;
40459
+ let bitCountRaw;
40407
40460
  if (numLiteralNode) {
40408
- bitCount = instance.visit(numLiteralNode).value;
40461
+ const literal = instance.visit(numLiteralNode);
40462
+ bitCount = literal.value;
40463
+ bitCountRaw = literal.raw;
40409
40464
  }
40410
40465
  let value = "";
40411
40466
  if (ctx.TYPE_STRING()) {
@@ -40424,13 +40479,14 @@ const protocolTypeToAstNode = (instance, ctx) => {
40424
40479
  kind: "PROTOCOL_TYPE",
40425
40480
  value,
40426
40481
  bits: bitCount,
40482
+ bitsRaw: bitCountRaw,
40427
40483
  ...instance.contextMetaData(ctx)
40428
40484
  };
40429
40485
  };
40430
40486
  const protocolTypeFromAstNode = (instance, node, options = {}) => {
40431
40487
  if (node.value === "string")
40432
40488
  return instance.raw(`${node.value}`);
40433
- return instance.raw(`${node.value}<${node.bits}>`);
40489
+ return instance.raw(`${node.value}<${numberToSourceCode(node.bits, node.bitsRaw)}>`);
40434
40490
  };
40435
40491
 
40436
40492
  const DefineStatementNodeLayout = [{
@@ -40651,20 +40707,26 @@ const RuleStatementNodeLayout = [{
40651
40707
  shape: [exports.EnumNodeLayoutEntry.LAYOUT_RAW_INT]
40652
40708
  }];
40653
40709
  const ruleStatementToAstNode = (instance, ctx) => {
40710
+ const value = instance.visit(ctx.numberLiteral(0));
40711
+ const consequent = instance.visit(ctx.numberLiteral(1));
40712
+ const alternate = instance.visit(ctx.numberLiteral(2));
40654
40713
  return {
40655
40714
  kind: "RULE_STATEMENT",
40656
40715
  type: instance.visit(ctx.protocolType()),
40657
40716
  id: instance.visit(ctx.stringLiteral(0)).value,
40658
40717
  inspect: instance.visit(ctx.stringLiteral(1)).value,
40659
40718
  comparator: ctx.protocolComparator().text,
40660
- value: instance.visit(ctx.numberLiteral(0)).value,
40661
- consequent: instance.visit(ctx.numberLiteral(1)).value,
40662
- alternate: instance.visit(ctx.numberLiteral(2)).value,
40719
+ value: value.value,
40720
+ consequent: consequent.value,
40721
+ alternate: alternate.value,
40722
+ valueRaw: value.raw,
40723
+ consequentRaw: consequent.raw,
40724
+ alternateRaw: alternate.raw,
40663
40725
  ...instance.contextMetaData(ctx)
40664
40726
  };
40665
40727
  };
40666
40728
  const ruleStatementFromAstNode = (instance, node, options = {}) => {
40667
- return instance.inline(instance.getTokenLiteralText(BattleScriptLexer.RULE), " ", instance.visit(node.type), " ", `"${node.id}"`, " ", instance.getTokenLiteralText(BattleScriptLexer.ASSIGN), " ", `"${node.inspect}"`, " ", node.comparator, " ", node.value.toString(), " ", instance.getTokenLiteralText(BattleScriptLexer.QUESTION_MARK), " ", node.consequent.toString(), " ", instance.getTokenLiteralText(BattleScriptLexer.COLON), " ", node.alternate.toString(), ";", instance.newLine());
40729
+ return instance.inline(instance.getTokenLiteralText(BattleScriptLexer.RULE), " ", instance.visit(node.type), " ", `"${node.id}"`, " ", instance.getTokenLiteralText(BattleScriptLexer.ASSIGN), " ", `"${node.inspect}"`, " ", node.comparator, " ", numberToSourceCode(node.value, node.valueRaw), " ", instance.getTokenLiteralText(BattleScriptLexer.QUESTION_MARK), " ", numberToSourceCode(node.consequent, node.consequentRaw), " ", instance.getTokenLiteralText(BattleScriptLexer.COLON), " ", numberToSourceCode(node.alternate, node.alternateRaw), ";", instance.newLine());
40668
40730
  };
40669
40731
 
40670
40732
  const ParityDeclarationNodeLayout = [{
@@ -40720,14 +40782,16 @@ const ForwardStatementNodeLayout = [{
40720
40782
  shape: [exports.EnumNodeLayoutEntry.LAYOUT_RAW_INT]
40721
40783
  }];
40722
40784
  const forwardStatementToAstNode = (instance, ctx) => {
40785
+ const literal = instance.visit(ctx.numberLiteral());
40723
40786
  return {
40724
40787
  kind: "FORWARD_STATEMENT",
40725
- value: instance.visit(ctx.numberLiteral()).value,
40788
+ value: literal.value,
40789
+ valueRaw: literal.raw,
40726
40790
  ...instance.contextMetaData(ctx)
40727
40791
  };
40728
40792
  };
40729
40793
  const forwardStatementFromAstNode = (instance, node, options = {}) => {
40730
- return instance.raw(instance.inline(`${instance.getTokenLiteralText(BattleScriptLexer.FORWARD)} `, node.value.toString(), ";", instance.newLine()));
40794
+ return instance.raw(instance.inline(`${instance.getTokenLiteralText(BattleScriptLexer.FORWARD)} `, numberToSourceCode(node.value, node.valueRaw), ";", instance.newLine()));
40731
40795
  };
40732
40796
 
40733
40797
  const OffsetStatementNodeLayout = [{
@@ -40738,14 +40802,16 @@ const OffsetStatementNodeLayout = [{
40738
40802
  shape: [exports.EnumNodeLayoutEntry.LAYOUT_RAW_INT]
40739
40803
  }];
40740
40804
  const offsetStatementToAstNode = (instance, ctx) => {
40805
+ const literal = instance.visit(ctx.numberLiteral());
40741
40806
  return {
40742
40807
  kind: "OFFSET_STATEMENT",
40743
- value: instance.visit(ctx.numberLiteral()).value,
40808
+ value: literal.value,
40809
+ valueRaw: literal.raw,
40744
40810
  ...instance.contextMetaData(ctx)
40745
40811
  };
40746
40812
  };
40747
40813
  const offsetStatementFromAstNode = (instance, node, options = {}) => {
40748
- return instance.raw(instance.inline(`${instance.getTokenLiteralText(BattleScriptLexer.OFFSET)} `, node.value.toString(), ";", instance.newLine()));
40814
+ return instance.raw(instance.inline(`${instance.getTokenLiteralText(BattleScriptLexer.OFFSET)} `, numberToSourceCode(node.value, node.valueRaw), ";", instance.newLine()));
40749
40815
  };
40750
40816
 
40751
40817
  const RewindStatementNodeLayout = [{
@@ -40756,14 +40822,16 @@ const RewindStatementNodeLayout = [{
40756
40822
  shape: [exports.EnumNodeLayoutEntry.LAYOUT_RAW_INT]
40757
40823
  }];
40758
40824
  const rewindStatementToAstNode = (instance, ctx) => {
40825
+ const literal = instance.visit(ctx.numberLiteral());
40759
40826
  return {
40760
40827
  kind: "REWIND_STATEMENT",
40761
- value: instance.visit(ctx.numberLiteral()).value,
40828
+ value: literal.value,
40829
+ valueRaw: literal.raw,
40762
40830
  ...instance.contextMetaData(ctx)
40763
40831
  };
40764
40832
  };
40765
40833
  const rewindStatementFromAstNode = (instance, node, options = {}) => {
40766
- return instance.raw(instance.inline(`${instance.getTokenLiteralText(BattleScriptLexer.REWIND)} `, node.value.toString(), ";", instance.newLine()));
40834
+ return instance.raw(instance.inline(`${instance.getTokenLiteralText(BattleScriptLexer.REWIND)} `, numberToSourceCode(node.value, node.valueRaw), ";", instance.newLine()));
40767
40835
  };
40768
40836
 
40769
40837
  const ProtocolOpStatementNodeLayout = [{
@@ -40828,10 +40896,12 @@ const protocolReadTypeToAstNode = (instance, ctx) => {
40828
40896
  else {
40829
40897
  throw new Error(`Unknown PROTOCOL_READ_TYPE type: ${ctx.text}`);
40830
40898
  }
40899
+ const literal = instance.visit(ctx.numberLiteral());
40831
40900
  return {
40832
40901
  kind: "PROTOCOL_READ_TYPE",
40833
40902
  value,
40834
- bits: instance.visit(ctx.numberLiteral()).value,
40903
+ bits: literal.value,
40904
+ bitsRaw: literal.raw,
40835
40905
  ...instance.contextMetaData(ctx)
40836
40906
  };
40837
40907
  };
@@ -40846,7 +40916,7 @@ const protocolReadTypeFromAstNode = (instance, node, options = {}) => {
40846
40916
  else {
40847
40917
  throw new Error(`Unknown PROTOCOL_READ_TYPE type (ReadDataType enum from dyna protocol repo): ${node.value}`);
40848
40918
  }
40849
- return instance.raw(`${value}<${node.bits}>`);
40919
+ return instance.raw(`${value}<${numberToSourceCode(node.bits, node.bitsRaw)}>`);
40850
40920
  };
40851
40921
 
40852
40922
  const StopStatementNodeLayout = [{
@@ -42462,10 +42532,13 @@ exports.EnumOperator = void 0;
42462
42532
  EnumOperator[EnumOperator["OPERATOR_SUB"] = 13] = "OPERATOR_SUB";
42463
42533
  EnumOperator[EnumOperator["OPERATOR_MUL"] = 14] = "OPERATOR_MUL";
42464
42534
  EnumOperator[EnumOperator["OPERATOR_DIV"] = 15] = "OPERATOR_DIV";
42465
- EnumOperator[EnumOperator["OPERATOR_PERIOD"] = 16] = "OPERATOR_PERIOD";
42466
- EnumOperator[EnumOperator["OPERATOR_NAMESPACE"] = 17] = "OPERATOR_NAMESPACE";
42467
- EnumOperator[EnumOperator["OPERATOR_ASSIGN"] = 18] = "OPERATOR_ASSIGN";
42468
- EnumOperator[EnumOperator["OPERATOR_ARROW"] = 19] = "OPERATOR_ARROW";
42535
+ EnumOperator[EnumOperator["OPERATOR_MOD"] = 16] = "OPERATOR_MOD";
42536
+ EnumOperator[EnumOperator["OPERATOR_PERIOD"] = 17] = "OPERATOR_PERIOD";
42537
+ EnumOperator[EnumOperator["OPERATOR_NAMESPACE"] = 18] = "OPERATOR_NAMESPACE";
42538
+ EnumOperator[EnumOperator["OPERATOR_ASSIGN"] = 19] = "OPERATOR_ASSIGN";
42539
+ EnumOperator[EnumOperator["OPERATOR_ARROW"] = 20] = "OPERATOR_ARROW";
42540
+ EnumOperator[EnumOperator["OPERATOR_ADD_ASSIGN"] = 21] = "OPERATOR_ADD_ASSIGN";
42541
+ EnumOperator[EnumOperator["OPERATOR_SUB_ASSIGN"] = 22] = "OPERATOR_SUB_ASSIGN";
42469
42542
  })(exports.EnumOperator || (exports.EnumOperator = {}));
42470
42543
  function EnumOperatorToString(opTor) {
42471
42544
  switch (opTor) {
@@ -42484,10 +42557,13 @@ function EnumOperatorToString(opTor) {
42484
42557
  case exports.EnumOperator.OPERATOR_SUB: return "-";
42485
42558
  case exports.EnumOperator.OPERATOR_MUL: return "*";
42486
42559
  case exports.EnumOperator.OPERATOR_DIV: return "/";
42560
+ case exports.EnumOperator.OPERATOR_MOD: return "%";
42487
42561
  case exports.EnumOperator.OPERATOR_PERIOD: return ".";
42488
42562
  case exports.EnumOperator.OPERATOR_NAMESPACE: return "::";
42489
42563
  case exports.EnumOperator.OPERATOR_ASSIGN: return "=";
42490
42564
  case exports.EnumOperator.OPERATOR_ARROW: return "=>";
42565
+ case exports.EnumOperator.OPERATOR_ADD_ASSIGN: return "+=";
42566
+ case exports.EnumOperator.OPERATOR_SUB_ASSIGN: return "-=";
42491
42567
  default: return "UNKNOWN";
42492
42568
  }
42493
42569
  }
@@ -42508,10 +42584,13 @@ function EnumOperatorFromString(opTor) {
42508
42584
  case "-": return exports.EnumOperator.OPERATOR_SUB;
42509
42585
  case "*": return exports.EnumOperator.OPERATOR_MUL;
42510
42586
  case "/": return exports.EnumOperator.OPERATOR_DIV;
42587
+ case "%": return exports.EnumOperator.OPERATOR_MOD;
42511
42588
  case ".": return exports.EnumOperator.OPERATOR_PERIOD;
42512
42589
  case "::": return exports.EnumOperator.OPERATOR_NAMESPACE;
42513
42590
  case "=": return exports.EnumOperator.OPERATOR_ASSIGN;
42514
42591
  case "=>": return exports.EnumOperator.OPERATOR_ARROW;
42592
+ case "+=": return exports.EnumOperator.OPERATOR_ADD_ASSIGN;
42593
+ case "-=": return exports.EnumOperator.OPERATOR_SUB_ASSIGN;
42515
42594
  default: return exports.EnumOperator.OPERATOR_UNKNOWN;
42516
42595
  }
42517
42596
  }
@@ -45170,13 +45249,17 @@ exports.EnumNodeProp = void 0;
45170
45249
  EnumNodeProp[EnumNodeProp["PROP_LOCALIDENTIFIER"] = 53] = "PROP_LOCALIDENTIFIER";
45171
45250
  EnumNodeProp[EnumNodeProp["PROP_TRANSPORT"] = 54] = "PROP_TRANSPORT";
45172
45251
  EnumNodeProp[EnumNodeProp["PROP_BITS"] = 55] = "PROP_BITS";
45173
- EnumNodeProp[EnumNodeProp["PROP_COMPARATOR"] = 56] = "PROP_COMPARATOR";
45174
- EnumNodeProp[EnumNodeProp["PROP_ISTERMINAL"] = 57] = "PROP_ISTERMINAL";
45175
- EnumNodeProp[EnumNodeProp["PROP_MODE"] = 58] = "PROP_MODE";
45176
- EnumNodeProp[EnumNodeProp["PROP_SUCCESS"] = 59] = "PROP_SUCCESS";
45177
- EnumNodeProp[EnumNodeProp["PROP_INSPECT"] = 60] = "PROP_INSPECT";
45178
- EnumNodeProp[EnumNodeProp["PROP_OP"] = 61] = "PROP_OP";
45179
- EnumNodeProp[EnumNodeProp["PROP_READTYPE"] = 62] = "PROP_READTYPE";
45252
+ EnumNodeProp[EnumNodeProp["PROP_BITSRAW"] = 56] = "PROP_BITSRAW";
45253
+ EnumNodeProp[EnumNodeProp["PROP_COMPARATOR"] = 57] = "PROP_COMPARATOR";
45254
+ EnumNodeProp[EnumNodeProp["PROP_ISTERMINAL"] = 58] = "PROP_ISTERMINAL";
45255
+ EnumNodeProp[EnumNodeProp["PROP_MODE"] = 59] = "PROP_MODE";
45256
+ EnumNodeProp[EnumNodeProp["PROP_SUCCESS"] = 60] = "PROP_SUCCESS";
45257
+ EnumNodeProp[EnumNodeProp["PROP_INSPECT"] = 61] = "PROP_INSPECT";
45258
+ EnumNodeProp[EnumNodeProp["PROP_VALUERAW"] = 62] = "PROP_VALUERAW";
45259
+ EnumNodeProp[EnumNodeProp["PROP_CONSEQUENTRAW"] = 63] = "PROP_CONSEQUENTRAW";
45260
+ EnumNodeProp[EnumNodeProp["PROP_ALTERNATERAW"] = 64] = "PROP_ALTERNATERAW";
45261
+ EnumNodeProp[EnumNodeProp["PROP_OP"] = 65] = "PROP_OP";
45262
+ EnumNodeProp[EnumNodeProp["PROP_READTYPE"] = 66] = "PROP_READTYPE";
45180
45263
  })(exports.EnumNodeProp || (exports.EnumNodeProp = {}));
45181
45264
  function EnumNodePropToString(prop) {
45182
45265
  switch (prop) {
@@ -45235,11 +45318,15 @@ function EnumNodePropToString(prop) {
45235
45318
  case exports.EnumNodeProp.PROP_LOCALIDENTIFIER: return "localIdentifier";
45236
45319
  case exports.EnumNodeProp.PROP_TRANSPORT: return "transport";
45237
45320
  case exports.EnumNodeProp.PROP_BITS: return "bits";
45321
+ case exports.EnumNodeProp.PROP_BITSRAW: return "bitsRaw";
45238
45322
  case exports.EnumNodeProp.PROP_COMPARATOR: return "comparator";
45239
45323
  case exports.EnumNodeProp.PROP_ISTERMINAL: return "isTerminal";
45240
45324
  case exports.EnumNodeProp.PROP_MODE: return "mode";
45241
45325
  case exports.EnumNodeProp.PROP_SUCCESS: return "success";
45242
45326
  case exports.EnumNodeProp.PROP_INSPECT: return "inspect";
45327
+ case exports.EnumNodeProp.PROP_VALUERAW: return "valueRaw";
45328
+ case exports.EnumNodeProp.PROP_CONSEQUENTRAW: return "consequentRaw";
45329
+ case exports.EnumNodeProp.PROP_ALTERNATERAW: return "alternateRaw";
45243
45330
  case exports.EnumNodeProp.PROP_OP: return "op";
45244
45331
  case exports.EnumNodeProp.PROP_READTYPE: return "readType";
45245
45332
  default: return "unknown";
@@ -45302,11 +45389,15 @@ function EnumNodePropFromString(prop) {
45302
45389
  case "localIdentifier": return exports.EnumNodeProp.PROP_LOCALIDENTIFIER;
45303
45390
  case "transport": return exports.EnumNodeProp.PROP_TRANSPORT;
45304
45391
  case "bits": return exports.EnumNodeProp.PROP_BITS;
45392
+ case "bitsRaw": return exports.EnumNodeProp.PROP_BITSRAW;
45305
45393
  case "comparator": return exports.EnumNodeProp.PROP_COMPARATOR;
45306
45394
  case "isTerminal": return exports.EnumNodeProp.PROP_ISTERMINAL;
45307
45395
  case "mode": return exports.EnumNodeProp.PROP_MODE;
45308
45396
  case "success": return exports.EnumNodeProp.PROP_SUCCESS;
45309
45397
  case "inspect": return exports.EnumNodeProp.PROP_INSPECT;
45398
+ case "valueRaw": return exports.EnumNodeProp.PROP_VALUERAW;
45399
+ case "consequentRaw": return exports.EnumNodeProp.PROP_CONSEQUENTRAW;
45400
+ case "alternateRaw": return exports.EnumNodeProp.PROP_ALTERNATERAW;
45310
45401
  case "op": return exports.EnumNodeProp.PROP_OP;
45311
45402
  case "readType": return exports.EnumNodeProp.PROP_READTYPE;
45312
45403
  default: return exports.EnumNodeProp.PROP_UNKNOWN;
@@ -45429,6 +45520,7 @@ exports.arrayExpressionFromAstNode = arrayExpressionFromAstNode;
45429
45520
  exports.arrayExpressionInternalToAstNode = arrayExpressionInternalToAstNode;
45430
45521
  exports.assignmentExpressionFromAstNode = assignmentExpressionFromAstNode;
45431
45522
  exports.assignmentExpressionToAstNode = assignmentExpressionToAstNode;
45523
+ exports.assignmentOperator = assignmentOperator;
45432
45524
  exports.assignmentPatternToAstNode = assignmentPatternToAstNode;
45433
45525
  exports.binaryExpressionFromAstNode = binaryExpressionFromAstNode;
45434
45526
  exports.binaryExpressionToAstNode = binaryExpressionToAstNode;
@@ -45458,6 +45550,7 @@ exports.dataTypeFromAstNode = dataTypeFromAstNode;
45458
45550
  exports.dataTypeToAstNode = dataTypeToAstNode;
45459
45551
  exports.debuggerStatementFromAstNode = debuggerStatementFromAstNode;
45460
45552
  exports.debuggerStatementToAstNode = debuggerStatementToAstNode;
45553
+ exports.decodeNumberLiteral = decodeNumberLiteral;
45461
45554
  exports.defineStatementFromAstNode = defineStatementFromAstNode;
45462
45555
  exports.defineStatementToAstNode = defineStatementToAstNode;
45463
45556
  exports.endStatementFromAstNode = endStatementFromAstNode;