From b9c09bfa4eeb031bd99495171aeb9a4a47766fb9 Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Sun, 17 Jan 2010 18:33:31 -0500 Subject: [PATCH 01/32] doc updates -- widened the code segments for the sake of the JavaScript --- documentation/coffee/expressions_try.coffee | 2 +- documentation/coffee/while.coffee | 2 + documentation/css/docs.css | 4 +- documentation/index.html.erb | 30 ++++++++------ documentation/js/expressions_try.js | 2 +- documentation/js/while.js | 2 + index.html | 44 +++++++++++++-------- 7 files changed, 54 insertions(+), 32 deletions(-) diff --git a/documentation/coffee/expressions_try.coffee b/documentation/coffee/expressions_try.coffee index 7b635287db..13fdfec201 100644 --- a/documentation/coffee/expressions_try.coffee +++ b/documentation/coffee/expressions_try.coffee @@ -2,5 +2,5 @@ alert( try nonexistent / undefined catch error - "Caught an error: " + error + "And the error is ... " + error ) \ No newline at end of file diff --git a/documentation/coffee/while.coffee b/documentation/coffee/while.coffee index 625e6ed6a1..0d2b3a21da 100644 --- a/documentation/coffee/while.coffee +++ b/documentation/coffee/while.coffee @@ -1,7 +1,9 @@ +# Econ 101 if this.studying_economics while supply > demand then buy() while supply < demand then sell() +# Nursery Rhyme num: 6 lyrics: while num -= 1 num + " little monkeys, jumping on the bed. diff --git a/documentation/css/docs.css b/documentation/css/docs.css index 1a4361f3a1..b105dd8319 100644 --- a/documentation/css/docs.css +++ b/documentation/css/docs.css @@ -6,7 +6,7 @@ body { font-family: Arial, Helvetica, sans-serif; } div.container { - width: 850px; + width: 950px; margin: 50px 0 50px 50px; } p { @@ -77,7 +77,7 @@ div.code { } div.code pre { float: left; - width: 410px; + width: 450px; border-left: 1px dotted #559; padding: 0 0 0 12px; margin: 0; diff --git a/documentation/index.html.erb b/documentation/index.html.erb index 145d2e097b..fa561d35de 100644 --- a/documentation/index.html.erb +++ b/documentation/index.html.erb @@ -250,19 +250,20 @@ coffee --print app/scripts/*.coffee > concatenation.js

You can use newlines to break up your expression into smaller pieces, - as long as CoffeeScript can tell that the line hasn't finished - (similar to how Ruby handles it). For example, - if the line ends in an operator, dot, or keyword. + as long as CoffeeScript can determine that the line hasn't finished yet.

Functions and Invocation Functions are defined by a list of parameters, an arrow, and the function body. The empty function looks like this: =>. All - functions in CoffeeScript are named by default, for the benefit of debug messages. - If you'd like to create an anonymous function, just wrap it in parentheses. + functions in CoffeeScript are named by default, for easier debugging.

<%= code_for('functions', 'cube(5)') %> +

+ If you'd like to create an anonymous function, just wrap it in parentheses: + (x => x * x) +

Assignment @@ -272,7 +273,7 @@ coffee --print app/scripts/*.coffee > concatenation.js

<%= code_for('assignment', 'greeting') %>

- Declarations of new variables are pushed up to the top of the nearest + Declaration of new variables are pushed up to the top of the nearest lexical scope, so that assignment may always be performed within expressions.

@@ -281,7 +282,7 @@ coffee --print app/scripts/*.coffee > concatenation.js Object and Array literals look very similar to their JavaScript cousins. When you spread out each assignment on a separate line, the commas are optional. In this way, assigning object properties looks the same as - assigning local variables, and can be moved around freely. You can mix + assigning local variables, and can be moved around freely. Feel free to mix and match the two styles.

<%= code_for('objects_and_arrays', 'song.join(",")') %> @@ -306,9 +307,14 @@ coffee --print app/scripts/*.coffee > concatenation.js CoffeeScript output is wrapped in an anonymous function: (function(){ ... })(); This safety wrapper, combined with the automatic generation of the var keyword, make it exceedingly difficult - to pollute the global namespace by accident. If you'd like to create - global variables, attach them as properties on window, - or on the exports object in CommonJS. + to pollute the global namespace by accident. +

+

+ If you'd like to create top-level variables for other scripts to use, + attach them as properties on window, or on the exports + object in CommonJS. The existential operator (below), gives you a + reliable way to figure out where to add them, if you're targeting both + CommonJS and the browser: root: exports ? this

@@ -379,7 +385,7 @@ coffee --print app/scripts/*.coffee > concatenation.js The JavaScript arguments object is a useful way to work with functions that accept variable numbers of arguments. CoffeeScript provides splats ..., both for function definition as well as invocation, - making variable arguments a little bit more palatable. + making variable numbers of arguments a little bit more palatable.

<%= code_for('splats', true) %> @@ -481,7 +487,7 @@ coffee --print app/scripts/*.coffee > concatenation.js <%= code_for('expressions_try', true) %>

There are a handful of statements in JavaScript that can't be meaningfully - converted into expressions: break, continue, + converted into expressions, namely break, continue, and return. If you make use of them within a block of code, CoffeeScript won't try to perform the conversion.

diff --git a/documentation/js/expressions_try.js b/documentation/js/expressions_try.js index 7787cfb74e..b0dcc4460e 100644 --- a/documentation/js/expressions_try.js +++ b/documentation/js/expressions_try.js @@ -3,7 +3,7 @@ try { return nonexistent / undefined; } catch (error) { - return "Caught an error: " + error; + return "And the error is ... " + error; } })()); })(); \ No newline at end of file diff --git a/documentation/js/while.js b/documentation/js/while.js index 0ac87e11a4..96a1626e91 100644 --- a/documentation/js/while.js +++ b/documentation/js/while.js @@ -1,5 +1,6 @@ (function(){ var __a, lyrics, num; + // Econ 101 if (this.studying_economics) { while (supply > demand) { buy(); @@ -8,6 +9,7 @@ sell(); } } + // Nursery Rhyme num = 6; lyrics = (function() { __a = []; diff --git a/index.html b/index.html index f0e579af5e..4fe624d3ef 100644 --- a/index.html +++ b/index.html @@ -347,17 +347,14 @@

Language Reference

You can use newlines to break up your expression into smaller pieces, - as long as CoffeeScript can tell that the line hasn't finished - (similar to how Ruby handles it). For example, - if the line ends in an operator, dot, or keyword. + as long as CoffeeScript can determine that the line hasn't finished yet.

Functions and Invocation Functions are defined by a list of parameters, an arrow, and the function body. The empty function looks like this: =>. All - functions in CoffeeScript are named by default, for the benefit of debug messages. - If you'd like to create an anonymous function, just wrap it in parentheses. + functions in CoffeeScript are named by default, for easier debugging.

square: x => x * x
 cube:   x => square(x) * x
@@ -376,6 +373,10 @@ 

Language Reference

return square(x) * x; }; ;alert(cube(5));'>run: cube(5)
+

+ If you'd like to create an anonymous function, just wrap it in parentheses: + (x => x * x) +

Assignment @@ -393,7 +394,7 @@

Language Reference

difficulty = 0.5; ;alert(greeting);'>run: greeting

- Declarations of new variables are pushed up to the top of the nearest + Declaration of new variables are pushed up to the top of the nearest lexical scope, so that assignment may always be performed within expressions.

@@ -402,7 +403,7 @@

Language Reference

Object and Array literals look very similar to their JavaScript cousins. When you spread out each assignment on a separate line, the commas are optional. In this way, assigning object properties looks the same as - assigning local variables, and can be moved around freely. You can mix + assigning local variables, and can be moved around freely. Feel free to mix and match the two styles.

song: ["do", "re", "mi", "fa", "so"]
@@ -477,9 +478,14 @@ 

Language Reference

CoffeeScript output is wrapped in an anonymous function: (function(){ ... })(); This safety wrapper, combined with the automatic generation of the var keyword, make it exceedingly difficult - to pollute the global namespace by accident. If you'd like to create - global variables, attach them as properties on window, - or on the exports object in CommonJS. + to pollute the global namespace by accident. +

+

+ If you'd like to create top-level variables for other scripts to use, + attach them as properties on window, or on the exports + object in CommonJS. The existential operator (below), gives you a + reliable way to figure out where to add them, if you're targeting both + CommonJS and the browser: root: exports ? this

@@ -605,7 +611,7 @@

Language Reference

The JavaScript arguments object is a useful way to work with functions that accept variable numbers of arguments. CoffeeScript provides splats ..., both for function definition as well as invocation, - making variable arguments a little bit more palatable. + making variable numbers of arguments a little bit more palatable.

gold: silver: the_field: "unknown"
 
@@ -694,15 +700,18 @@ 

Language Reference

as an expression, returning an array containing the result of each iteration through the loop.

-
if this.studying_economics
+    
# Econ 101
+if this.studying_economics
   while supply > demand then buy()
   while supply < demand then sell()
 
+# Nursery Rhyme
 num: 6
 lyrics: while num -= 1
   num + " little monkeys, jumping on the bed.
     One fell out and bumped his head."
 
var __a, lyrics, num;
+// Econ 101
 if (this.studying_economics) {
   while (supply > demand) {
     buy();
@@ -711,6 +720,7 @@ 

Language Reference

sell(); } } +// Nursery Rhyme num = 6; lyrics = (function() { __a = []; @@ -721,6 +731,7 @@

Language Reference

return __a; })();

There are a handful of statements in JavaScript that can't be meaningfully - converted into expressions: break, continue, + converted into expressions, namely break, continue, and return. If you make use of them within a block of code, CoffeeScript won't try to perform the conversion.

From a8ae37a4288a0140a8873b55c9717882181d8071 Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Tue, 19 Jan 2010 09:49:23 -0500 Subject: [PATCH 02/32] fixing bug with multiple linebreaks in heredocs --- lib/coffee_script/lexer.rb | 8 ++++---- test/fixtures/execution/test_heredocs.coffee | 11 ++++++++++- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/lib/coffee_script/lexer.rb b/lib/coffee_script/lexer.rb index dad8b3d777..767c6f394a 100644 --- a/lib/coffee_script/lexer.rb +++ b/lib/coffee_script/lexer.rb @@ -23,7 +23,7 @@ class Lexer IDENTIFIER = /\A([a-zA-Z$_](\w|\$)*)/ NUMBER = /\A(\b((0(x|X)[0-9a-fA-F]+)|([0-9]+(\.[0-9]+)?(e[+\-]?[0-9]+)?)))\b/i STRING = /\A(""|''|"(.*?)([^\\]|\\\\)"|'(.*?)([^\\]|\\\\)')/m - HEREDOC = /\A("{6}|'{6}|"{3}\n?(.*?)\n?(\s*)"{3}|'{3}\n?(.*?)\n?(\s*)'{3})/m + HEREDOC = /\A("{6}|'{6}|"{3}\n?(.*?)\n?([ \t]*)"{3}|'{3}\n?(.*?)\n?([ \t]*)'{3})/m JS = /\A(``|`(.*?)([^\\]|\\\\)`)/m OPERATOR = /\A([+\*&|\/\-%=<>:!?]+)/ WHITESPACE = /\A([ \t]+)/ @@ -37,10 +37,10 @@ class Lexer # Token cleaning regexes. JS_CLEANER = /(\A`|`\Z)/ MULTILINER = /\n/ - STRING_NEWLINES = /\n\s*/ - COMMENT_CLEANER = /(^\s*#|\n\s*$)/ + STRING_NEWLINES = /\n[ \t]*/ + COMMENT_CLEANER = /(^[ \t]*#|\n[ \t]*$)/ NO_NEWLINE = /\A([+\*&|\/\-%=<>:!.\\][<>=&|]*|and|or|is|isnt|not|delete|typeof|instanceof)\Z/ - HEREDOC_INDENT = /^\s+/ + HEREDOC_INDENT = /^[ \t]+/ # Tokens which a regular expression will never immediately follow, but which # a division operator might. diff --git a/test/fixtures/execution/test_heredocs.coffee b/test/fixtures/execution/test_heredocs.coffee index b5dcaabdba..34d999af42 100644 --- a/test/fixtures/execution/test_heredocs.coffee +++ b/test/fixtures/execution/test_heredocs.coffee @@ -34,4 +34,13 @@ a: ''' c ''' -print(a is " a\n b\nc") \ No newline at end of file +print(a is " a\n b\nc") + +a: ''' +a + + +b c +''' + +print(a is "a\n\n\nb c") From 791d8740587fe88848250c022e6afe27f5081836 Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Wed, 20 Jan 2010 20:36:31 -0500 Subject: [PATCH 03/32] fixing comments as the last line of a block --- lib/coffee_script/rewriter.rb | 2 +- test/fixtures/execution/test_funky_comments.coffee | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/coffee_script/rewriter.rb b/lib/coffee_script/rewriter.rb index 9635ed183e..ae1a62aa56 100644 --- a/lib/coffee_script/rewriter.rb +++ b/lib/coffee_script/rewriter.rb @@ -70,7 +70,7 @@ def adjust_comments @tokens.delete_at(i + 2) @tokens.delete_at(i - 2) next 0 - elsif prev[0] == "\n" && [:INDENT, :OUTDENT].include?(after[0]) + elsif prev[0] == "\n" && [:INDENT].include?(after[0]) @tokens.delete_at(i + 2) @tokens[i - 1] = after next 1 diff --git a/test/fixtures/execution/test_funky_comments.coffee b/test/fixtures/execution/test_funky_comments.coffee index 2072847e5e..ca461a784e 100644 --- a/test/fixtures/execution/test_funky_comments.coffee +++ b/test/fixtures/execution/test_funky_comments.coffee @@ -14,4 +14,8 @@ switch 'string' when null something_else() +=> + code() + # comment + print(func()) From 5f94186b4042e6713c604274b181f386a776585f Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Sat, 23 Jan 2010 12:44:36 -0500 Subject: [PATCH 04/32] adding the compiled parser back into the repo (after all that) so that it can be used as the source for the narwhal package --- .gitignore | 1 - Rakefile | 2 + lib/coffee_script/parser.rb | 2496 +++++++++++++++++++++++++++++++++++ 3 files changed, 2498 insertions(+), 1 deletion(-) create mode 100644 lib/coffee_script/parser.rb diff --git a/.gitignore b/.gitignore index 115973f647..5381d48f23 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,6 @@ presentation test.coffee parser.output -lib/coffee_script/parser.rb test/fixtures/underscore examples/beautiful_code/parse.coffee *.gem \ No newline at end of file diff --git a/Rakefile b/Rakefile index 8409bfad28..8505900249 100644 --- a/Rakefile +++ b/Rakefile @@ -58,6 +58,8 @@ namespace :gem do desc 'Build and install the coffee-script gem' task :install do + verbose = "lib/coffee_script/parser.output" + FileUtils.rm(verbose) if File.exists?(verbose) sh "gem build coffee-script.gemspec" sh "sudo gem install #{Dir['*.gem'].join(' ')} --local --no-ri --no-rdoc" end diff --git a/lib/coffee_script/parser.rb b/lib/coffee_script/parser.rb new file mode 100644 index 0000000000..37dc4c6b66 --- /dev/null +++ b/lib/coffee_script/parser.rb @@ -0,0 +1,2496 @@ +# +# DO NOT MODIFY!!!! +# This file is automatically generated by Racc 1.4.6 +# from Racc grammer file "". +# + +require 'racc/parser.rb' + +module CoffeeScript + +class Parser < Racc::Parser + +module_eval(<<'...end grammar.y/module_eval...', 'grammar.y', 450) + # Lex and parse a CoffeeScript. + def parse(code) + # Uncomment the following line to enable grammar debugging, in combination + # with the -g flag in the Rake build task. + # @yydebug = true + @tokens = Lexer.new.tokenize(code) + do_parse + end + + # Retrieve the next token from the list. + def next_token + @tokens.shift + end + + # Raise a custom error class that knows about line numbers. + def on_error(error_token_id, error_value, value_stack) + raise ParseError.new(token_to_str(error_token_id), error_value, value_stack) + end + +...end grammar.y/module_eval... +##### State transition tables begin ### + +clist = [ +'104,30,113,20,23,27,33,35,39,45,49,55,61,82,82,95,268,269,264,274,274', +'81,81,24,28,117,122,15,15,110,134,30,183,184,108,133,138,30,11,8,110', +'18,26,73,73,110,-181,-181,301,15,15,133,138,100,103,107,112,116,120', +'124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136,98,101', +'105,109,114,118,121,30,127,130,135,148,150,148,150,144,70,30,2,8,9,182', +'20,23,27,33,35,39,45,49,55,61,253,148,150,73,1,5,10,50,56,17,24,28,32', +'82,171,293,238,51,57,261,68,81,74,3,82,11,30,15,18,26,30,254,81,82,43', +'47,53,59,63,67,189,81,148,150,13,144,274,190,191,15,30,188,78,283,15', +'62,65,149,292,149,15,154,240,154,148,150,62,65,186,15,148,150,78,50', +'56,62,65,175,70,149,2,8,9,154,20,23,27,33,35,39,45,49,55,61,151,62,65', +'73,1,5,10,190,191,17,24,28,32,282,62,65,247,51,57,247,68,30,74,3,177', +'11,149,15,18,26,154,247,62,65,43,47,53,59,63,67,110,62,65,110,13,152', +'-181,-181,149,133,138,95,154,178,149,50,56,91,154,140,62,65,249,62,65', +'249,268,269,260,30,263,273,84,50,56,62,65,249,70,250,2,8,9,308,20,23', +'27,33,35,39,45,49,55,61,271,110,216,73,1,5,10,133,138,17,24,28,32,62', +'65,175,,51,57,176,68,,74,3,110,11,110,15,18,26,-181,-181,-181,-181,43', +'47,53,59,63,67,110,,,,13,,133,138,100,103,107,112,116,120,124,126,129', +'132,137,99,102,106,111,115,119,123,125,,,110,,,,50,56,-181,-181,,70', +',2,8,9,,20,23,27,33,35,39,45,49,55,61,,110,,73,1,5,10,-181,-181,17,24', +'28,32,,,,,51,57,,68,,74,3,110,11,,15,18,26,-181,-181,,,43,47,53,59,63', +'67,110,,,,13,,133,138,100,103,107,112,116,120,124,126,129,132,137,99', +'102,106,111,115,119,123,125,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35', +'39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15', +'18,26,,,,,43,47,53,59,63,67,110,,,,13,,133,138,100,103,107,112,116,120', +'124,126,129,132,137,99,102,106,111,115,119,123,125,,,,,,,50,56,,,,70', +',2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,', +',51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,110,,,,13,,133', +'138,100,103,107,112,116,120,124,126,129,132,137,99,102,106,111,115,119', +'123,125,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73', +'1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53', +'59,63,67,110,,,,13,,133,138,100,103,107,112,116,120,124,126,129,132', +'137,99,102,106,111,115,119,123,125,,,,,,,50,56,,,,70,,2,8,9,,20,23,27', +'33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3', +',11,,15,18,26,,,,,43,47,53,59,63,67,110,,,,13,,133,138,100,103,107,112', +'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,,,,,,,50', +'56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24', +'28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,110,,', +',13,,133,138,100,103,107,112,116,120,124,126,129,132,137,99,102,106', +'111,115,119,123,125,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49', +'55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,', +',,,43,47,53,59,63,67,110,,,,13,,133,138,100,103,107,112,116,120,124', +'126,129,132,137,99,102,106,111,115,119,123,125,,,,,,,50,56,,,,70,,2', +'8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51', +'57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,110,,,,13,,133,138', +'100,103,107,112,116,120,124,126,129,132,137,110,,,,,,133,138,100,103', +'107,112,116,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73', +'1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,94,,,43,47,53', +'59,63,67,110,,,,13,,133,138,100,103,107,112,116,120,124,126,129,132', +'137,110,,,,,,133,138,100,103,107,112,116,,50,56,,,,70,,2,8,9,,20,23', +'27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74', +'3,,11,,15,18,26,,,,,43,47,53,59,63,67,110,,,,13,,133,138,100,103,107', +'112,116,120,124,126,129,132,137,110,,,,,,133,138,100,103,107,112,116', +',50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17', +'24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,110', +',,,13,,133,138,100,103,107,112,116,120,124,126,129,132,137,110,,,,,', +'133,138,100,103,107,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55', +'61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,', +'43,47,53,59,63,67,110,,,,13,,133,138,100,103,107,112,116,120,124,126', +'110,,,,,,133,138,100,103,107,112,116,120,124,126,,50,56,,,,70,,2,8,9', +',20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57', +',68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,110,,,,13,,133,138,100', +'103,107,112,116,120,124,126,110,,,,,,133,138,100,103,107,,298,,,,,50', +'56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24', +'28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45', +'49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26', +',,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70', +',2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,', +',51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61', +',,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43', +'47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9', +',20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57', +',68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73', +'1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53', +'59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23', +'27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74', +'3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10', +',,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67', +',,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35', +'39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15', +'18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56', +',,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28', +'32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49', +'55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,', +',,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70', +',2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,', +',51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61', +',,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,167,,,', +'43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2', +'8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51', +'57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,', +',73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47', +'53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20', +'23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68', +',74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5', +'10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63', +'67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33', +'35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11', +',15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50', +'56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24', +'28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45', +'49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26', +',,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70', +',2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,', +',51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61', +',,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,280,,,', +'43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,62,65,,70', +',2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,', +',51,57,,68,,74,3,,11,,15,18,26,167,,,,43,47,53,59,63,67,,,,,13,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55', +'61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,', +'43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2', +'8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51', +'57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,', +',73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,30,,,,43', +'47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,62,65,,70,,2', +'8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51', +'57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,', +',,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,', +',73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47', +'53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20', +'23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68', +',74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5', +'10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63', +'67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33', +'35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11', +',15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50', +'56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24', +'28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45', +'49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26', +',,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70', +',2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,', +',51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61', +',,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43', +'47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9', +',20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57', +',68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73', +'1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53', +'59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23', +'27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74', +'3,,11,,15,18,26,167,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5', +'10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63', +'67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33', +'35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11', +',15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50', +'56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24', +'28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45', +'49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26', +',,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70', +',2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,', +',51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61', +',,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43', +'47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9', +',20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57', +',68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73', +'1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53', +'59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23', +'27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74', +'3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10', +',,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67', +',,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35', +'39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15', +'18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56', +',,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28', +'32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49', +'55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,', +',,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70', +',2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,', +',51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,', +',,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61', +',,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43', +'47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9', +',20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57', +',68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73', +'1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53', +'59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23', +'27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74', +'3,,11,,15,18,26,,,,,43,47,53,59,63,67,,104,,113,13,,,,,,,,,,,,,,,,,', +',,,,117,122,,,,134,,50,56,108,,,70,,2,,9,,,,110,,,,,,133,138,100,103', +'107,112,116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128', +'131,136,98,101,105,109,114,118,121,,127,130,135,,,,,,,309,20,23,27,33', +'35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,,,,,,,57,,68,,74,3,,11,,15', +'18,26,,,,,43,47,53,59,,,,,,,,,20,23,27,33,35,39,45,49,55,61,,,,,,,,', +',,24,28,,,,,,50,56,,,,70,,2,11,9,,18,26,,,,,,,,,,,,,,,,,,,,,,20,23,27', +'33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,70,57,2,68,9,74', +'3,,11,,15,18,26,,,,,43,47,53,59,63,67,,104,,113,13,,,,,,,,,,,,,,,,,', +',,,,117,122,,,,134,,50,56,108,,,70,,2,,9,,,,110,,,,,,133,138,100,103', +'107,112,116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128', +'131,136,98,101,105,109,114,118,121,,127,130,135,,,,,,,305,20,23,27,33', +'35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,,,,,,,57,,68,,74,3,,11,,15', +'18,26,,,,,43,47,53,59,63,67,,104,,113,13,,,,,,,,,,,,,,,,,,,,,,117,122', +',,,134,,50,56,108,,,70,,2,,9,,,,110,,,,,,133,138,100,103,107,112,116', +'120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136,98', +'101,105,109,114,118,252,,127,130,135,104,,113,,,,272,,,,,,,,,,,,,,,', +',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', +'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', +'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', +',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', +'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', +'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', +',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', +'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', +'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', +',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', +'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', +'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', +',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', +'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', +'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', +',,,117,122,,,,134,,,,108,,,,,,,,,30,,110,,,,,,133,138,100,103,107,112', +'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', +'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', +',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', +'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', +'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', +',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', +'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', +'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', +',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', +'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', +'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', +',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', +'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', +'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', +',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', +'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', +'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', +',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', +'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', +'98,101,105,109,114,118,252,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', +',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', +'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', +'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', +',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', +'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', +'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', +',,,117,122,,,,134,,,,108,,,,,,,,,246,,110,,,,,,133,138,100,103,107,112', +'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', +'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', +',,,117,122,,,,134,,,,108,,,,,,,,,30,,110,,,,,,133,138,100,103,107,112', +'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', +'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', +',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', +'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', +'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', +',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', +'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', +'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', +',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', +'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', +'98,101,105,109,114,118,121,,127,130,135,117,122,,,,,,,,108,,,,,,,,,', +',110,,,,,,133,138,100,103,107,112,116,120,124,126,129,132,137,99,102', +'106,111,115,119,123,125,128,131,136,98,101,105,109,114,118,121,,127', +'130,135,117,122,,,,,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', +'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', +'98,101,105,109,114,118,121,117,122,,,,,,,,108,,,,,,,,,,,110,,,,,,133', +'138,100,103,107,112,116,120,124,126,129,132,137,99,102,106,111,115,119', +'123,125,128,131,136,98,101,105,109,114,118,121,117,122,,,,,,,,108,,', +',,,,,,,,110,,,,,,133,138,100,103,107,112,116,120,124,126,129,132,137', +'99,102,106,111,115,119,123,125,128,131,136,98,101,105,109,114,118,121', +'117,122,,,,,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112,116,120', +'124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136,98,101', +'105,109,114,118,121,117,122,,,,,,,,108,,,,,,,,,,,110,,,,,,133,138,100', +'103,107,112,116,120,124,126,129,132,137,99,102,106,111,115,119,123,125', +'128,131,136,98,101,105,109,114,118,121,122,,,,,,,,108,,,,,,,,,,,110', +',,,,,133,138,100,103,107,112,116,120,124,126,129,132,137,99,102,106', +'111,115,119,123,125,128,131,136,98,101,105,109,114,118,121,122,,,,,', +',,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112,116,120,124,126,129', +'132,137,99,102,106,111,115,119,123,125,128,131,136,98,101,105,109,114', +'118,121,122,,,,,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112,116', +'120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136,98', +'101,105,109,114,118,121,122,,,,,,,,108,,,,,,,,,,,110,,,,,,133,138,100', +'103,107,112,116,120,124,126,129,132,137,99,102,106,111,115,119,123,125', +'128,131,136,98,101,105,109,114,118,121,122,,,,,,,,108,,,,,,,,,,,110', +',,,,,133,138,100,103,107,112,116,120,124,126,129,132,137,99,102,106', +'111,115,119,123,125,128,131,136,98,101,105,109,114,118,121,108,,,,,', +',,,,,110,,,,,,133,138,100,103,107,112,116,120,124,126,129,132,137,99', +'102,106,111,115,119,123,125,128,131,136,98,101,105,109,114,118,108,', +',,,,,,,,,110,,,,,,133,138,100,103,107,112,116,120,124,126,129,132,137', +'99,102,106,111,115,119,123,125,128,131,136,98,101,105,109,114,118,108', +',,,,,,,,,,110,,,,,,133,138,100,103,107,112,116,120,124,126,129,132,137', +'99,102,106,111,115,119,123,125,128,131,136,98,101,105,109,114,118,110', +',,,,,133,138,100,103,107,112,116,120,124,126,129,132,137,99,102,106', +'111,115,119,123,125,128,131,136,98,101,105,109,114,118,110,,,,,,133', +'138,100,103,107,112,116,120,124,126,129,132,137,99,102,106,111,115,119', +'123,125,128,131,136,98,101,105,109,114,118,110,,,,,,133,138,100,103', +'107,112,116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128', +'131,136,98,101,105,109,114,118,110,,,,,,133,138,100,103,107,112,116', +'120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136,98', +'101,105,109,114,118,110,,,,,,133,138,100,103,107,112,116,120,124,126', +'129,132,137,99,102,106,111,115,119,123,125,128,131,136,98,101,105,109', +'114,118' ] + racc_action_table = arr = Array.new(9894, nil) + idx = 0 + clist.each do |str| + str.split(',', -1).each do |i| + arr[idx] = i.to_i unless i.empty? + idx += 1 + end + end + +clist = [ +'87,290,87,1,1,1,1,1,1,1,1,1,1,257,174,117,192,192,189,295,246,257,174', +'1,1,87,87,295,246,202,87,192,88,88,87,202,202,139,1,144,157,1,1,140', +'273,87,157,157,290,257,174,87,87,87,87,87,87,87,87,87,87,87,87,87,87', +'87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,144,87,87,87,241', +'241,242,242,142,1,261,1,101,1,87,101,101,101,101,101,101,101,101,101', +'101,171,76,76,101,101,101,101,273,273,101,101,101,101,78,73,275,148', +'101,101,183,101,78,101,101,175,101,263,101,101,101,41,173,175,2,101', +'101,101,101,101,101,95,2,71,71,101,38,275,212,212,78,184,93,78,253,275', +'34,34,241,275,242,175,241,150,242,77,77,29,29,91,2,40,40,2,101,101,173', +'173,173,101,76,101,152,101,76,152,152,152,152,152,152,152,152,152,152', +'40,93,93,152,152,152,152,96,96,152,152,152,152,252,175,175,179,152,152', +'244,152,293,152,152,81,152,71,152,152,152,71,166,300,300,152,152,152', +'152,152,152,160,276,276,198,152,40,160,160,77,198,198,32,77,82,40,37', +'37,21,40,37,179,179,179,244,244,244,270,270,179,10,185,244,3,152,152', +'166,166,166,152,166,152,301,152,302,301,301,301,301,301,301,301,301', +'301,301,216,195,121,301,301,301,301,195,195,301,301,301,301,80,80,80', +',301,301,80,301,,301,301,162,301,163,301,301,301,162,162,163,163,301', +'301,301,301,301,301,223,,,,301,,223,223,223,223,223,223,223,223,223', +'223,223,223,223,223,223,223,223,223,223,223,223,,,164,,,,301,301,164', +'164,,301,,301,149,301,,149,149,149,149,149,149,149,149,149,149,,89,', +'149,149,149,149,89,89,149,149,149,149,,,,,149,149,,149,,149,149,158', +'149,,149,149,149,158,158,,,149,149,149,149,149,149,220,,,,149,,220,220', +'220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220', +'220,220,,,,,,,149,149,,,,149,,149,8,149,,8,8,8,8,8,8,8,8,8,8,,,,8,8', +'8,8,,,8,8,8,8,,,,,8,8,,8,,8,8,,8,,8,8,8,,,,,8,8,8,8,8,8,214,,,,8,,214', +'214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214', +'214,214,214,,,,,,,8,8,,,,8,,8,9,8,,9,9,9,9,9,9,9,9,9,9,,,,9,9,9,9,,', +'9,9,9,9,,,,,9,9,,9,,9,9,,9,,9,9,9,,,,,9,9,9,9,9,9,226,,,,9,,226,226', +'226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226', +'226,226,,,,,,,9,9,,,,9,,9,167,9,,167,167,167,167,167,167,167,167,167', +'167,,,,167,167,167,167,,,167,167,167,167,,,,,167,167,,167,,167,167,', +'167,,167,167,167,,,,,167,167,167,167,167,167,230,,,,167,,230,230,230', +'230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230', +'230,,,,,,,167,167,,,,167,,167,13,167,,13,13,13,13,13,13,13,13,13,13', +',,,13,13,13,13,,,13,13,13,13,,,,,13,13,,13,,13,13,,13,,13,13,13,,,,', +'13,13,13,13,13,13,193,,,,13,,193,193,193,193,193,193,193,193,193,193', +'193,193,193,193,193,193,193,193,193,193,193,,,,,,,13,13,,,,13,,13,17', +'13,,17,17,17,17,17,17,17,17,17,17,,,,17,17,17,17,,,17,17,17,17,,,,,17', +'17,,17,,17,17,,17,,17,17,17,,,,,17,17,17,17,17,17,210,,,,17,,210,210', +'210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210', +'210,210,,,,,,,17,17,,,,17,,17,177,17,,177,177,177,177,177,177,177,177', +'177,177,,,,177,177,177,177,,,177,177,177,177,,,,,177,177,,177,,177,177', +',177,,177,177,177,,,,,177,177,177,177,177,177,218,,,,177,,218,218,218', +'218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218', +'218,,,,,,,177,177,,,,177,,177,178,177,,178,178,178,178,178,178,178,178', +'178,178,,,,178,178,178,178,,,178,178,178,178,,,,,178,178,,178,,178,178', +',178,,178,178,178,,,,,178,178,178,178,178,178,197,,,,178,,197,197,197', +'197,197,197,197,197,197,197,197,197,197,219,,,,,,219,219,219,219,219', +'219,219,,178,178,,,,178,,178,30,178,,30,30,30,30,30,30,30,30,30,30,', +',,30,30,30,30,,,30,30,30,30,,,,,30,30,,30,,30,30,,30,,30,30,30,,30,', +',30,30,30,30,30,30,194,,,,30,,194,194,194,194,194,194,194,194,194,194', +'194,194,194,221,,,,,,221,221,221,221,221,221,221,,30,30,,,,30,,30,137', +'30,,137,137,137,137,137,137,137,137,137,137,,,,137,137,137,137,,,137', +'137,137,137,,,,,137,137,,137,,137,137,,137,,137,137,137,,,,,137,137', +'137,137,137,137,206,,,,137,,206,206,206,206,206,206,206,206,206,206', +'206,206,206,215,,,,,,215,215,215,215,215,215,215,,137,137,,,,137,,137', +'136,137,,136,136,136,136,136,136,136,136,136,136,,,,136,136,136,136', +',,136,136,136,136,,,,,136,136,,136,,136,136,,136,,136,136,136,,,,,136', +'136,136,136,136,136,201,,,,136,,201,201,201,201,201,201,201,201,201', +'201,201,201,201,207,,,,,,207,207,207,207,207,,,,136,136,,,,136,,136', +'135,136,,135,135,135,135,135,135,135,135,135,135,,,,135,135,135,135', +',,135,135,135,135,,,,,135,135,,135,,135,135,,135,,135,135,135,,,,,135', +'135,135,135,135,135,231,,,,135,,231,231,231,231,231,231,231,231,231', +'231,227,,,,,,227,227,227,227,227,227,227,227,227,227,,135,135,,,,135', +',135,282,135,,282,282,282,282,282,282,282,282,282,282,,,,282,282,282', +'282,,,282,282,282,282,,,,,282,282,,282,,282,282,,282,,282,282,282,,', +',,282,282,282,282,282,282,224,,,,282,,224,224,224,224,224,224,224,224', +'224,224,211,,,,,,211,211,211,211,211,,282,,,,,282,282,,,,282,,282,134', +'282,,134,134,134,134,134,134,134,134,134,134,,,,134,134,134,134,,,134', +'134,134,134,,,,,134,134,,134,,134,134,,134,,134,134,134,,,,,134,134', +'134,134,134,134,,,,,134,,,,,,,,,,,,,,,,,,,,,,,,,,,,,134,134,,,,134,', +'134,280,134,,280,280,280,280,280,280,280,280,280,280,,,,280,280,280', +'280,,,280,280,280,280,,,,,280,280,,280,,280,280,,280,,280,280,280,,', +',,280,280,280,280,280,280,,,,,280,,,,,,,,,,,,,,,,,,,,,,,,,,,,,280,280', +',,,280,,280,279,280,,279,279,279,279,279,279,279,279,279,279,,,,279', +'279,279,279,,,279,279,279,279,,,,,279,279,,279,,279,279,,279,,279,279', +'279,,,,,279,279,279,279,279,279,,,,,279,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +'279,279,,,,279,,279,43,279,,43,43,43,43,43,43,43,43,43,43,,,,43,43,43', +'43,,,43,43,43,43,,,,,43,43,,43,,43,43,,43,,43,43,43,,,,,43,43,43,43', +'43,43,,,,,43,,,,,,,,,,,,,,,,,,,,,,,,,,,,,43,43,,,,43,,43,47,43,,47,47', +'47,47,47,47,47,47,47,47,,,,47,47,47,47,,,47,47,47,47,,,,,47,47,,47,', +'47,47,,47,,47,47,47,,,,,47,47,47,47,47,47,,,,,47,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,47,47,,,,47,,47,51,47,,51,51,51,51,51,51,51,51,51,51,,,,51', +'51,51,51,,,51,51,51,51,,,,,51,51,,51,,51,51,,51,,51,51,51,,,,,51,51', +'51,51,51,51,,,,,51,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,51,,,,51,,51,53,51', +',53,53,53,53,53,53,53,53,53,53,,,,53,53,53,53,,,53,53,53,53,,,,,53,53', +',53,,53,53,,53,,53,53,53,,,,,53,53,53,53,53,53,,,,,53,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,53,53,,,,53,,53,57,53,,57,57,57,57,57,57,57,57,57,57,', +',,57,57,57,57,,,57,57,57,57,,,,,57,57,,57,,57,57,,57,,57,57,57,,,,,57', +'57,57,57,57,57,,,,,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,57,57,,,,57,,57,59', +'57,,59,59,59,59,59,59,59,59,59,59,,,,59,59,59,59,,,59,59,59,59,,,,,59', +'59,,59,,59,59,,59,,59,59,59,,,,,59,59,59,59,59,59,,,,,59,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,59,59,,,,59,,59,63,59,,63,63,63,63,63,63,63,63,63,63', +',,,63,63,63,63,,,63,63,63,63,,,,,63,63,,63,,63,63,,63,,63,63,63,,,,', +'63,63,63,63,63,63,,,,,63,,,,,,,,,,,,,,,,,,,,,,,,,,,,,63,63,,,,63,,63', +'67,63,,67,67,67,67,67,67,67,67,67,67,,,,67,67,67,67,,,67,67,67,67,,', +',,67,67,,67,,67,67,,67,,67,67,67,,,,,67,67,67,67,67,67,,,,,67,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,67,67,,,,67,,67,68,67,,68,68,68,68,68,68,68,68', +'68,68,,,,68,68,68,68,,,68,68,68,68,,,,,68,68,,68,,68,68,,68,,68,68,68', +',,,,68,68,68,68,68,68,,,,,68,,,,,,,,,,,,,,,,,,,,,,,,,,,,,68,68,,,,68', +',68,70,68,,70,70,70,70,70,70,70,70,70,70,,,,70,70,70,70,,,70,70,70,70', +',,,,70,70,,70,,70,70,,70,,70,70,70,70,,,,70,70,70,70,70,70,,,,,70,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,70,70,,,,70,,70,132,70,,132,132,132,132,132', +'132,132,132,132,132,,,,132,132,132,132,,,132,132,132,132,,,,,132,132', +',132,,132,132,,132,,132,132,132,,,,,132,132,132,132,132,132,,,,,132', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,132,132,,,,132,,132,274,132,,274,274,274', +'274,274,274,274,274,274,274,,,,274,274,274,274,,,274,274,274,274,,,', +',274,274,,274,,274,274,,274,,274,274,274,,,,,274,274,274,274,274,274', +',,,,274,,,,,,,,,,,,,,,,,,,,,,,,,,,,,274,274,,,,274,,274,74,274,,74,74', +'74,74,74,74,74,74,74,74,,,,74,74,74,74,,,74,74,74,74,,,,,74,74,,74,', +'74,74,,74,,74,74,74,,,,,74,74,74,74,74,74,,,,,74,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,74,74,,,,74,,74,269,74,,269,269,269,269,269,269,269,269,269', +'269,,,,269,269,269,269,,,269,269,269,269,,,,,269,269,,269,,269,269,', +'269,,269,269,269,,,,,269,269,269,269,269,269,,,,,269,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,269,269,,,,269,,269,268,269,,268,268,268,268,268,268,268', +'268,268,268,,,,268,268,268,268,,,268,268,268,268,,,,,268,268,,268,,268', +'268,,268,,268,268,268,,,,,268,268,268,268,268,268,,,,,268,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,268,268,,,,268,,268,131,268,,131,131,131,131,131,131', +'131,131,131,131,,,,131,131,131,131,,,131,131,131,131,,,,,131,131,,131', +',131,131,,131,,131,131,131,,,,,131,131,131,131,131,131,,,,,131,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,131,131,,,,131,,131,130,131,,130,130,130,130', +'130,130,130,130,130,130,,,,130,130,130,130,,,130,130,130,130,,,,,130', +'130,,130,,130,130,,130,,130,130,130,,,,,130,130,130,130,130,130,,,,', +'130,,,,,,,,,,,,,,,,,,,,,,,,,,,,,130,130,,,,130,,130,129,130,,129,129', +'129,129,129,129,129,129,129,129,,,,129,129,129,129,,,129,129,129,129', +',,,,129,129,,129,,129,129,,129,,129,129,129,,,,,129,129,129,129,129', +'129,,,,,129,,,,,,,,,,,,,,,,,,,,,,,,,,,,,129,129,,,,129,,129,249,129', +',249,249,249,249,249,249,249,249,249,249,,,,249,249,249,249,,,249,249', +'249,249,,,,,249,249,,249,,249,249,,249,,249,249,249,249,,,,249,249,249', +'249,249,249,,,,,249,,,,,,,,,,,,,,,,,,,,,,,,,,,,,249,249,249,249,,249', +',249,84,249,,84,84,84,84,84,84,84,84,84,84,,,,84,84,84,84,,,84,84,84', +'84,,,,,84,84,,84,,84,84,,84,,84,84,84,84,,,,84,84,84,84,84,84,,,,,84', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,84,84,,,,84,,84,248,84,,248,248,248,248', +'248,248,248,248,248,248,,,,248,248,248,248,,,248,248,248,248,,,,,248', +'248,,248,,248,248,,248,,248,248,248,,,,,248,248,248,248,248,248,,,,', +'248,,,,,,,,,,,,,,,,,,,,,,,,,,,,,248,248,,,,248,,248,128,248,,128,128', +'128,128,128,128,128,128,128,128,,,,128,128,128,128,,,128,128,128,128', +',,,,128,128,,128,,128,128,,128,,128,128,128,,,,,128,128,128,128,128', +'128,,,,,128,,,,,,,,,,,,,,,,,,,,,,,,,,,,,128,128,,,,128,,128,0,128,,0', +'0,0,0,0,0,0,0,0,0,,,,0,0,0,0,,,0,0,0,0,,,,,0,0,,0,,0,0,,0,,0,0,0,0,', +',,0,0,0,0,0,0,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,,0,127,0', +',127,127,127,127,127,127,127,127,127,127,,,,127,127,127,127,,,127,127', +'127,127,,,,,127,127,,127,,127,127,,127,,127,127,127,,,,,127,127,127', +'127,127,127,,,,,127,,,,,,,,,,,,,,,,,,,,,,,,,,,,,127,127,,,,127,,127', +'126,127,,126,126,126,126,126,126,126,126,126,126,,,,126,126,126,126', +',,126,126,126,126,,,,,126,126,,126,,126,126,,126,,126,126,126,,,,,126', +'126,126,126,126,126,,,,,126,,,,,,,,,,,,,,,,,,,,,,,,,,,,,126,126,,,,126', +',126,125,126,,125,125,125,125,125,125,125,125,125,125,,,,125,125,125', +'125,,,125,125,125,125,,,,,125,125,,125,,125,125,,125,,125,125,125,,', +',,125,125,125,125,125,125,,,,,125,,,,,,,,,,,,,,,,,,,,,,,,,,,,,125,125', +',,,125,,125,124,125,,124,124,124,124,124,124,124,124,124,124,,,,124', +'124,124,124,,,124,124,124,124,,,,,124,124,,124,,124,124,,124,,124,124', +'124,,,,,124,124,124,124,124,124,,,,,124,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +'124,124,,,,124,,124,92,124,,92,92,92,92,92,92,92,92,92,92,,,,92,92,92', +'92,,,92,92,92,92,,,,,92,92,,92,,92,92,,92,,92,92,92,,,,,92,92,92,92', +'92,92,,,,,92,,,,,,,,,,,,,,,,,,,,,,,,,,,,,92,92,,,,92,,92,123,92,,123', +'123,123,123,123,123,123,123,123,123,,,,123,123,123,123,,,123,123,123', +'123,,,,,123,123,,123,,123,123,,123,,123,123,123,,,,,123,123,123,123', +'123,123,,,,,123,,,,,,,,,,,,,,,,,,,,,,,,,,,,,123,123,,,,123,,123,191', +'123,,191,191,191,191,191,191,191,191,191,191,,,,191,191,191,191,,,191', +'191,191,191,,,,,191,191,,191,,191,191,,191,,191,191,191,,,,,191,191', +'191,191,191,191,,,,,191,,,,,,,,,,,,,,,,,,,,,,,,,,,,,191,191,,,,191,', +'191,190,191,,190,190,190,190,190,190,190,190,190,190,,,,190,190,190', +'190,,,190,190,190,190,,,,,190,190,,190,,190,190,,190,,190,190,190,,', +',,190,190,190,190,190,190,,,,,190,,,,,,,,,,,,,,,,,,,,,,,,,,,,,190,190', +',,,190,,190,98,190,,98,98,98,98,98,98,98,98,98,98,,,,98,98,98,98,,,98', +'98,98,98,,,,,98,98,,98,,98,98,,98,,98,98,98,,,,,98,98,98,98,98,98,,', +',,98,,,,,,,,,,,,,,,,,,,,,,,,,,,,,98,98,,,,98,,98,99,98,,99,99,99,99', +'99,99,99,99,99,99,,,,99,99,99,99,,,99,99,99,99,,,,,99,99,,99,,99,99', +',99,,99,99,99,,,,,99,99,99,99,99,99,,,,,99,,,,,,,,,,,,,,,,,,,,,,,,,', +',,,99,99,,,,99,,99,100,99,,100,100,100,100,100,100,100,100,100,100,', +',,100,100,100,100,,,100,100,100,100,,,,,100,100,,100,,100,100,,100,', +'100,100,100,,,,,100,100,100,100,100,100,,,,,100,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,100,100,,,,100,,100,154,100,,154,154,154,154,154,154,154,154', +'154,154,,,,154,154,154,154,,,154,154,154,154,,,,,154,154,,154,,154,154', +',154,,154,154,154,154,,,,154,154,154,154,154,154,,,,,154,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,154,154,,,,154,,154,102,154,,102,102,102,102,102,102', +'102,102,102,102,,,,102,102,102,102,,,102,102,102,102,,,,,102,102,,102', +',102,102,,102,,102,102,102,,,,,102,102,102,102,102,102,,,,,102,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,102,102,,,,102,,102,103,102,,103,103,103,103', +'103,103,103,103,103,103,,,,103,103,103,103,,,103,103,103,103,,,,,103', +'103,,103,,103,103,,103,,103,103,103,,,,,103,103,103,103,103,103,,,,', +'103,,,,,,,,,,,,,,,,,,,,,,,,,,,,,103,103,,,,103,,103,104,103,,104,104', +'104,104,104,104,104,104,104,104,,,,104,104,104,104,,,104,104,104,104', +',,,,104,104,,104,,104,104,,104,,104,104,104,,,,,104,104,104,104,104', +'104,,,,,104,,,,,,,,,,,,,,,,,,,,,,,,,,,,,104,104,,,,104,,104,105,104', +',105,105,105,105,105,105,105,105,105,105,,,,105,105,105,105,,,105,105', +'105,105,,,,,105,105,,105,,105,105,,105,,105,105,105,,,,,105,105,105', +'105,105,105,,,,,105,,,,,,,,,,,,,,,,,,,,,,,,,,,,,105,105,,,,105,,105', +'106,105,,106,106,106,106,106,106,106,106,106,106,,,,106,106,106,106', +',,106,106,106,106,,,,,106,106,,106,,106,106,,106,,106,106,106,,,,,106', +'106,106,106,106,106,,,,,106,,,,,,,,,,,,,,,,,,,,,,,,,,,,,106,106,,,,106', +',106,107,106,,107,107,107,107,107,107,107,107,107,107,,,,107,107,107', +'107,,,107,107,107,107,,,,,107,107,,107,,107,107,,107,,107,107,107,,', +',,107,107,107,107,107,107,,,,,107,,,,,,,,,,,,,,,,,,,,,,,,,,,,,107,107', +',,,107,,107,108,107,,108,108,108,108,108,108,108,108,108,108,,,,108', +'108,108,108,,,108,108,108,108,,,,,108,108,,108,,108,108,,108,,108,108', +'108,,,,,108,108,108,108,108,108,,,,,108,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +'108,108,,,,108,,108,109,108,,109,109,109,109,109,109,109,109,109,109', +',,,109,109,109,109,,,109,109,109,109,,,,,109,109,,109,,109,109,,109', +',109,109,109,,,,,109,109,109,109,109,109,,,,,109,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,109,109,,,,109,,109,119,109,,119,119,119,119,119,119,119,119', +'119,119,,,,119,119,119,119,,,119,119,119,119,,,,,119,119,,119,,119,119', +',119,,119,119,119,,,,,119,119,119,119,119,119,,,,,119,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,119,119,,,,119,,119,111,119,,111,111,111,111,111,111,111', +'111,111,111,,,,111,111,111,111,,,111,111,111,111,,,,,111,111,,111,,111', +'111,,111,,111,111,111,,,,,111,111,111,111,111,111,,,,,111,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,111,111,,,,111,,111,112,111,,112,112,112,112,112,112', +'112,112,112,112,,,,112,112,112,112,,,112,112,112,112,,,,,112,112,,112', +',112,112,,112,,112,112,112,,,,,112,112,112,112,112,112,,,,,112,,,,,', +',,,,,,,,,,,,,,,,,,,,,,,112,112,,,,112,,112,113,112,,113,113,113,113', +'113,113,113,113,113,113,,,,113,113,113,113,,,113,113,113,113,,,,,113', +'113,,113,,113,113,,113,,113,113,113,,,,,113,113,113,113,113,113,,,,', +'113,,,,,,,,,,,,,,,,,,,,,,,,,,,,,113,113,,,,113,,113,114,113,,114,114', +'114,114,114,114,114,114,114,114,,,,114,114,114,114,,,114,114,114,114', +',,,,114,114,,114,,114,114,,114,,114,114,114,,,,,114,114,114,114,114', +'114,,,,,114,,,,,,,,,,,,,,,,,,,,,,,,,,,,,114,114,,,,114,,114,115,114', +',115,115,115,115,115,115,115,115,115,115,,,,115,115,115,115,,,115,115', +'115,115,,,,,115,115,,115,,115,115,,115,,115,115,115,,,,,115,115,115', +'115,115,115,,,,,115,,,,,,,,,,,,,,,,,,,,,,,,,,,,,115,115,,,,115,,115', +'116,115,,116,116,116,116,116,116,116,116,116,116,,,,116,116,116,116', +',,116,116,116,116,,,,,116,116,,116,,116,116,,116,,116,116,116,,,,,116', +'116,116,116,116,116,,,,,116,,,,,,,,,,,,,,,,,,,,,,,,,,,,,116,116,,,,116', +',116,120,116,,120,120,120,120,120,120,120,120,120,120,,,,120,120,120', +'120,,,120,120,120,120,,,,,120,120,,120,,120,120,,120,,120,120,120,,', +',,120,120,120,120,120,120,,,,,120,,,,,,,,,,,,,,,,,,,,,,,,,,,,,120,120', +',,,120,,120,118,120,,118,118,118,118,118,118,118,118,118,118,,,,118', +'118,118,118,,,118,118,118,118,,,,,118,118,,118,,118,118,,118,,118,118', +'118,,,,,118,118,118,118,118,118,,,,,118,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +'118,118,,,,118,,118,122,118,,122,122,122,122,122,122,122,122,122,122', +',,,122,122,122,122,,,122,122,122,122,,,,,122,122,,122,,122,122,,122', +',122,122,122,,,,,122,122,122,122,122,122,,304,,304,122,,,,,,,,,,,,,', +',,,,,,,,304,304,,,,304,,122,122,304,,,122,,122,,122,,,,304,,,,,,304', +'304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304', +'304,304,304,304,304,304,304,304,304,304,304,304,304,,304,304,304,,,', +',,,304,110,110,110,110,110,110,110,110,110,110,,,,110,110,110,110,,', +'110,110,110,,,,,,,110,,110,,110,110,,110,,110,110,110,,,,,110,110,110', +'110,,,,,,,,,151,151,151,151,151,151,151,151,151,151,,,,,,,,,,,151,151', +',,,,,110,110,,,,110,,110,151,110,,151,151,,,,,,,,,,,,,,,,,,,,,,5,5,5', +'5,5,5,5,5,5,5,,,,5,5,5,5,,,5,5,5,5,,,,,151,5,151,5,151,5,5,,5,,5,5,5', +',,,,5,5,5,5,5,5,,299,,299,5,,,,,,,,,,,,,,,,,,,,,,299,299,,,,299,,5,5', +'299,,,5,,5,,5,,,,299,,,,,,299,299,299,299,299,299,299,299,299,299,299', +'299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299', +'299,299,299,,299,299,299,,,,,,,299,298,298,298,298,298,298,298,298,298', +'298,,,,298,298,298,298,,,298,298,298,,,,,,,298,,298,,298,298,,298,,298', +'298,298,,,,,298,298,298,298,298,298,,239,,239,298,,,,,,,,,,,,,,,,,,', +',,,239,239,,,,239,,298,298,239,,,298,,298,,298,,,,239,,,,,,239,239,239', +'239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239', +'239,239,239,239,239,239,239,239,239,239,239,,239,239,239,281,,281,,', +',239,,,,,,,,,,,,,,,,,,,281,281,,,,281,,,,281,,,,,,,,,,,281,,,,,,281', +'281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281', +'281,281,281,281,281,281,281,281,281,281,281,281,281,,281,281,281,251', +',251,,,,,,,,,,,,,,,,,,,,,,,251,251,,,,251,,,,251,,,,,,,,,,,251,,,,,', +'251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251', +'251,251,251,251,251,251,251,251,251,251,251,251,251,251,,251,251,251', +'258,,258,,,,,,,,,,,,,,,,,,,,,,,258,258,,,,258,,,,258,,,,,,,,,,,258,', +',,,,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258', +'258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,,258,258', +'258,259,,259,,,,,,,,,,,,,,,,,,,,,,,259,259,,,,259,,,,259,,,,,,,,,,,259', +',,,,,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259', +'259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,,259,259', +'259,278,,278,,,,,,,,,,,,,,,,,,,,,,,278,278,,,,278,,,,278,,,,,,,,,,,278', +',,,,,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278', +'278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,,278,278', +'278,86,,86,,,,,,,,,,,,,,,,,,,,,,,86,86,,,,86,,,,86,,,,,,,,,86,,86,,', +',,,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86', +'86,86,86,86,86,86,86,86,86,,86,86,86,36,,36,,,,,,,,,,,,,,,,,,,,,,,36', +'36,,,,36,,,,36,,,,,,,,,,,36,,,,,,36,36,36,36,36,36,36,36,36,36,36,36', +'36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,,36,36,36,291', +',291,,,,,,,,,,,,,,,,,,,,,,,291,291,,,,291,,,,291,,,,,,,,,,,291,,,,,', +'291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291', +'291,291,291,291,291,291,291,291,291,291,291,291,291,291,,291,291,291', +'296,,296,,,,,,,,,,,,,,,,,,,,,,,296,296,,,,296,,,,296,,,,,,,,,,,296,', +',,,,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296', +'296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,,296,296', +'296,297,,297,,,,,,,,,,,,,,,,,,,,,,,297,297,,,,297,,,,297,,,,,,,,,,,297', +',,,,,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297', +'297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,,297,297', +'297,228,,228,,,,,,,,,,,,,,,,,,,,,,,228,228,,,,228,,,,228,,,,,,,,,,,228', +',,,,,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228', +'228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,,228,228', +'228,168,,168,,,,,,,,,,,,,,,,,,,,,,,168,168,,,,168,,,,168,,,,,,,,,,,168', +',,,,,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168', +'168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,,168,168', +'168,208,,208,,,,,,,,,,,,,,,,,,,,,,,208,208,,,,208,,,,208,,,,,,,,,,,208', +',,,,,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208', +'208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,,208,208', +'208,199,,199,,,,,,,,,,,,,,,,,,,,,,,199,199,,,,199,,,,199,,,,,,,,,,,199', +',,,,,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199', +'199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,,199,199', +'199,161,,161,,,,,,,,,,,,,,,,,,,,,,,161,161,,,,161,,,,161,,,,,,,,,161', +',161,,,,,,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161', +'161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,,161', +'161,161,159,,159,,,,,,,,,,,,,,,,,,,,,,,159,159,,,,159,,,,159,,,,,,,', +',159,,159,,,,,,159,159,159,159,159,159,159,159,159,159,159,159,159,159', +'159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159', +',159,159,159,180,,180,,,,,,,,,,,,,,,,,,,,,,,180,180,,,,180,,,,180,,', +',,,,,,,,180,,,,,,180,180,180,180,180,180,180,180,180,180,180,180,180', +'180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180', +'180,,180,180,180,187,,187,,,,,,,,,,,,,,,,,,,,,,,187,187,,,,187,,,,187', +',,,,,,,,,,187,,,,,,187,187,187,187,187,187,187,187,187,187,187,187,187', +'187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187', +'187,,187,187,187,307,,307,,,,,,,,,,,,,,,,,,,,,,,307,307,,,,307,,,,307', +',,,,,,,,,,307,,,,,,307,307,307,307,307,307,307,307,307,307,307,307,307', +'307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307', +'307,,307,307,307,85,85,,,,,,,,85,,,,,,,,,,,85,,,,,,85,85,85,85,85,85', +'85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85', +'85,85,,85,85,85,222,222,,,,,,,,222,,,,,,,,,,,222,,,,,,222,222,222,222', +'222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222', +'222,222,222,222,222,222,222,222,222,222,225,225,,,,,,,,225,,,,,,,,,', +',225,,,,,,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225', +'225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,243', +'243,,,,,,,,243,,,,,,,,,,,243,,,,,,243,243,243,243,243,243,243,243,243', +'243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243', +'243,243,243,243,243,90,90,,,,,,,,90,,,,,,,,,,,90,,,,,,90,90,90,90,90', +'90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90', +'90,90,90,229,229,,,,,,,,229,,,,,,,,,,,229,,,,,,229,229,229,229,229,229', +'229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229', +'229,229,229,229,229,229,229,229,265,,,,,,,,265,,,,,,,,,,,265,,,,,,265', +'265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265', +'265,265,265,265,265,265,265,265,265,265,265,265,265,287,,,,,,,,287,', +',,,,,,,,,287,,,,,,287,287,287,287,287,287,287,287,287,287,287,287,287', +'287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287', +'287,288,,,,,,,,288,,,,,,,,,,,288,,,,,,288,288,288,288,288,288,288,288', +'288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288', +'288,288,288,288,288,288,266,,,,,,,,266,,,,,,,,,,,266,,,,,,266,266,266', +'266,266,266,266,266,266,266,266,266,266,266,266,266,266,266,266,266', +'266,266,266,266,266,266,266,266,266,266,266,217,,,,,,,,217,,,,,,,,,', +',217,,,,,,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217', +'217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,172', +',,,,,,,,,,172,,,,,,172,172,172,172,172,172,172,172,172,172,172,172,172', +'172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172', +'165,,,,,,,,,,,165,,,,,,165,165,165,165,165,165,165,165,165,165,165,165', +'165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165', +'165,203,,,,,,,,,,,203,,,,,,203,203,203,203,203,203,203,203,203,203,203', +'203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203', +'203,203,196,,,,,,196,196,196,196,196,196,196,196,196,196,196,196,196', +'196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196', +'209,,,,,,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209', +'209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,200,,,,', +',200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200', +'200,200,200,200,200,200,200,200,200,200,200,200,200,213,,,,,,213,213', +'213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213', +'213,213,213,213,213,213,213,213,213,213,213,204,,,,,,204,204,204,204', +'204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204', +'204,204,204,204,204,204,204,204,204' ] + racc_action_check = arr = Array.new(9894, nil) + idx = 0 + clist.each do |str| + str.split(',', -1).each do |i| + arr[idx] = i.to_i unless i.empty? + idx += 1 + end + end + +racc_action_pointer = [ + 3946, -2, 134, 176, nil, 7027, nil, nil, 468, 562, + 225, nil, nil, 750, nil, nil, nil, 844, nil, nil, + nil, 258, nil, nil, nil, nil, nil, nil, nil, 83, + 1126, nil, 238, nil, 72, nil, 7827, 168, 149, nil, + 162, 92, nil, 1878, nil, nil, nil, 1972, nil, nil, + nil, 2066, nil, 2160, nil, nil, nil, 2254, nil, 2348, + nil, nil, nil, 2442, nil, nil, nil, 2536, 2630, nil, + 2724, 134, nil, 38, 3006, nil, 93, 156, 114, nil, + 218, 141, 170, nil, 3664, 8920, 7741, -2, 10, 343, + 9152, 175, 4416, 112, nil, 55, 180, nil, 4792, 4886, + 4980, 92, 5168, 5262, 5356, 5450, 5544, 5638, 5732, 5826, + 6910, 6014, 6108, 6202, 6296, 6390, 6484, 1, 6672, 5920, + 6578, 214, 6766, 4510, 4322, 4228, 4134, 4040, 3852, 3476, + 3382, 3288, 2818, nil, 1596, 1408, 1314, 1220, nil, -8, + 25, nil, 87, nil, 37, nil, nil, nil, 109, 374, + 155, 6966, 186, nil, 5074, nil, nil, -7, 366, 8601, + 194, 8515, 272, 274, 317, 9584, 186, 656, 8257, nil, + nil, 24, 9537, 92, 8, 125, nil, 938, 1032, 171, + 8687, nil, nil, 112, 112, 248, nil, 8773, nil, 4, + 4698, 4604, -14, 758, 1134, 249, 9667, 1040, 197, 8429, + 9739, 1322, -18, 9631, 9811, nil, 1228, 1341, 8343, 9703, + 852, 1526, 126, 9775, 476, 1247, 212, 9489, 946, 1059, + 382, 1153, 8981, 288, 1510, 9038, 570, 1432, 8171, 9209, + 664, 1416, nil, nil, nil, nil, nil, nil, nil, 7225, + nil, 71, 73, 9095, 174, nil, -14, nil, 3758, 3570, + nil, 7397, 131, 77, nil, nil, nil, 7, 7483, 7569, + nil, 47, nil, 88, nil, 9265, 9433, nil, 3194, 3100, + 237, nil, nil, 26, 2912, 119, 152, nil, 7655, 1784, + 1690, 7311, 1502, nil, nil, nil, nil, 9321, 9377, nil, + -44, 7913, nil, 177, nil, -15, 7999, 8085, 7171, 7081, + 143, 280, 238, nil, 6820, nil, nil, 8859, nil, nil ] + +racc_action_default = [ + -1, -181, -118, -181, -17, -46, -18, -126, -181, -181, + -181, -34, -19, -181, -20, -47, -21, -181, -30, -22, + -28, -181, -23, -29, -32, -2, -111, -31, -33, -3, + -181, -104, -181, -35, -181, -36, -5, -181, -174, -37, + -8, -181, -9, -181, -98, -38, -10, -181, -105, -39, + -96, -181, -11, -181, -106, -40, -97, -181, -12, -181, + -107, -103, -26, -181, -108, -27, -13, -181, -181, -14, + -136, -124, -15, -100, -181, -16, -181, -125, -118, -119, + -181, -181, -181, -44, -136, -45, -181, -181, -181, -50, + -150, -181, -7, -181, -25, -157, -181, -4, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -93, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -58, -181, -181, -181, -181, -57, -181, + -181, -172, -174, -176, -181, -178, -114, -128, -181, -181, + -181, -181, -181, -115, -136, -109, -95, -51, -48, -153, + -49, -181, -52, -54, -53, -55, -181, -181, -137, -129, + -110, -181, -56, -181, -181, -181, -117, -181, -181, -181, + -137, -170, -151, -181, -181, -146, 310, -6, -24, -181, + -181, -181, -181, -81, -70, -59, -83, -71, -60, -179, + -84, -72, -61, -91, -85, -82, -73, -62, -180, -86, + -74, -63, -181, -87, -75, -64, -181, -92, -76, -65, + -77, -66, -88, -78, -67, -89, -79, -68, -154, -90, + -80, -69, -94, -99, -173, -177, -171, -175, -112, -181, + -113, -127, -181, -41, -181, -152, -181, -143, -181, -181, + -135, -138, -181, -181, -123, -121, -120, -181, -42, -43, + -132, -181, -147, -181, -158, -159, -160, -156, -181, -181, + -155, -102, -116, -130, -181, -181, -181, -165, -140, -181, + -181, -139, -181, -101, -122, -149, -148, -162, -161, -131, + -181, -144, -163, -181, -166, -181, -141, -142, -102, -181, + -167, -181, -181, -169, -181, -133, -168, -145, -164, -134 ] + +racc_goto_table = [ + 25, 153, 80, 34, 77, 96, 83, 21, 85, 76, + 166, 86, 87, 88, 277, 169, 89, 170, 29, 290, + 90, 169, 185, 170, 179, 192, 275, 233, 236, 92, + 139, 142, 153, 289, 97, 145, nil, 153, 153, 143, + 141, 255, 256, 294, 156, nil, 157, nil, 93, nil, + 158, nil, nil, nil, 159, nil, 160, nil, nil, nil, + 161, nil, 162, 303, nil, nil, 163, nil, nil, nil, + 164, 165, nil, 168, nil, nil, nil, 172, 173, nil, + 174, nil, 83, nil, nil, nil, nil, 180, nil, 181, + 212, nil, nil, 92, 244, 187, nil, nil, nil, nil, + nil, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, + nil, 213, 214, 215, 284, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, nil, 228, 229, 230, + 231, 270, 232, 235, 234, nil, nil, 237, nil, nil, + nil, nil, 239, nil, 242, 243, nil, 180, nil, 241, + nil, nil, 245, nil, nil, nil, nil, nil, nil, nil, + 251, nil, nil, 174, nil, 257, nil, nil, 83, 83, + 258, 259, nil, nil, nil, nil, 169, 262, 170, nil, + nil, nil, nil, 265, 266, 267, nil, nil, nil, nil, + nil, nil, 153, 153, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, 279, + 276, 278, 281, nil, nil, nil, nil, nil, nil, nil, + nil, 83, nil, nil, 285, nil, 286, nil, nil, nil, + nil, 287, 288, nil, nil, nil, 295, 291, nil, 276, + nil, nil, 296, 297, nil, 299, nil, nil, nil, nil, + nil, nil, nil, 300, nil, nil, 302, nil, nil, 276, + 306, 304, nil, nil, 307 ] + +racc_goto_check = [ + 2, 30, 34, 4, 32, 40, 21, 1, 5, 6, + 37, 5, 5, 4, 43, 36, 5, 31, 3, 38, + 5, 36, 39, 31, 37, 41, 42, 26, 44, 2, + 25, 46, 30, 8, 2, 48, nil, 30, 30, 47, + 45, 23, 23, 43, 4, nil, 5, nil, 3, nil, + 5, nil, nil, nil, 5, nil, 5, nil, nil, nil, + 5, nil, 5, 43, nil, nil, 5, nil, nil, nil, + 5, 5, nil, 5, nil, nil, nil, 5, 34, nil, + 2, nil, 21, nil, nil, nil, nil, 5, nil, 4, + 40, nil, nil, 2, 37, 5, nil, nil, nil, nil, + nil, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + nil, 5, 5, 5, 23, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, nil, 5, 5, 5, + 5, 41, 4, 47, 45, nil, nil, 4, nil, nil, + nil, nil, 5, nil, 32, 5, nil, 5, nil, 6, + nil, nil, 4, nil, nil, nil, nil, nil, nil, nil, + 5, nil, nil, 2, nil, 2, nil, nil, 21, 21, + 5, 5, nil, nil, nil, nil, 36, 4, 31, nil, + nil, nil, nil, 5, 5, 4, nil, nil, nil, nil, + nil, nil, 30, 30, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, 2, + 21, 5, 5, nil, nil, nil, nil, nil, nil, nil, + nil, 21, nil, nil, 4, nil, 4, nil, nil, nil, + nil, 5, 5, nil, nil, nil, 2, 5, nil, 21, + nil, nil, 5, 5, nil, 5, nil, nil, nil, nil, + nil, nil, nil, 4, nil, nil, 4, nil, nil, 21, + 2, 5, nil, nil, 5 ] + +racc_goto_pointer = [ + nil, 7, 0, 18, 3, 3, 8, nil, -240, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, 4, nil, -133, nil, -7, -113, nil, nil, nil, + -39, -54, 3, nil, 0, nil, -56, -60, -255, -66, + -27, -71, -220, -232, -116, 2, -7, 1, -3 ] + +racc_goto_default = [ + nil, nil, 248, nil, nil, 36, 40, 42, 46, 52, + 58, 66, 69, 72, 75, 4, 6, 12, 14, 16, + 19, 22, 31, 79, 37, 41, 44, 48, 54, 60, + 64, 155, 71, 146, nil, 7, 147, nil, nil, nil, + nil, nil, nil, nil, 38, nil, nil, nil, nil ] + +racc_reduce_table = [ + 0, 0, :racc_error, + 0, 100, :_reduce_1, + 1, 100, :_reduce_2, + 1, 100, :_reduce_3, + 2, 100, :_reduce_4, + 1, 102, :_reduce_5, + 3, 102, :_reduce_6, + 2, 102, :_reduce_7, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 3, 103, :_reduce_24, + 2, 103, :_reduce_25, + 1, 101, :_reduce_none, + 1, 101, :_reduce_none, + 1, 121, :_reduce_28, + 1, 121, :_reduce_29, + 1, 121, :_reduce_30, + 1, 121, :_reduce_31, + 1, 121, :_reduce_32, + 1, 121, :_reduce_33, + 1, 121, :_reduce_34, + 1, 121, :_reduce_35, + 1, 121, :_reduce_36, + 1, 121, :_reduce_37, + 1, 121, :_reduce_38, + 1, 121, :_reduce_39, + 1, 121, :_reduce_40, + 3, 109, :_reduce_41, + 3, 122, :_reduce_42, + 3, 122, :_reduce_43, + 1, 122, :_reduce_44, + 2, 113, :_reduce_45, + 1, 113, :_reduce_46, + 1, 120, :_reduce_47, + 2, 108, :_reduce_48, + 2, 108, :_reduce_49, + 2, 108, :_reduce_50, + 2, 108, :_reduce_51, + 2, 108, :_reduce_52, + 2, 108, :_reduce_53, + 2, 108, :_reduce_54, + 2, 108, :_reduce_55, + 2, 108, :_reduce_56, + 2, 108, :_reduce_57, + 2, 108, :_reduce_58, + 3, 108, :_reduce_59, + 3, 108, :_reduce_60, + 3, 108, :_reduce_61, + 3, 108, :_reduce_62, + 3, 108, :_reduce_63, + 3, 108, :_reduce_64, + 3, 108, :_reduce_65, + 3, 108, :_reduce_66, + 3, 108, :_reduce_67, + 3, 108, :_reduce_68, + 3, 108, :_reduce_69, + 3, 108, :_reduce_70, + 3, 108, :_reduce_71, + 3, 108, :_reduce_72, + 3, 108, :_reduce_73, + 3, 108, :_reduce_74, + 3, 108, :_reduce_75, + 3, 108, :_reduce_76, + 3, 108, :_reduce_77, + 3, 108, :_reduce_78, + 3, 108, :_reduce_79, + 3, 108, :_reduce_80, + 3, 108, :_reduce_81, + 3, 108, :_reduce_82, + 3, 108, :_reduce_83, + 3, 108, :_reduce_84, + 3, 108, :_reduce_85, + 3, 108, :_reduce_86, + 3, 108, :_reduce_87, + 3, 108, :_reduce_88, + 3, 108, :_reduce_89, + 3, 108, :_reduce_90, + 3, 108, :_reduce_91, + 3, 108, :_reduce_92, + 2, 119, :_reduce_93, + 3, 107, :_reduce_94, + 2, 107, :_reduce_95, + 1, 124, :_reduce_96, + 1, 124, :_reduce_97, + 1, 123, :_reduce_98, + 3, 123, :_reduce_99, + 1, 125, :_reduce_none, + 4, 125, :_reduce_101, + 4, 118, :_reduce_102, + 1, 105, :_reduce_103, + 1, 105, :_reduce_104, + 1, 105, :_reduce_105, + 1, 105, :_reduce_106, + 1, 105, :_reduce_107, + 1, 105, :_reduce_108, + 2, 105, :_reduce_109, + 2, 105, :_reduce_110, + 1, 105, :_reduce_111, + 2, 130, :_reduce_112, + 2, 130, :_reduce_113, + 1, 130, :_reduce_114, + 1, 130, :_reduce_115, + 3, 132, :_reduce_116, + 3, 127, :_reduce_117, + 0, 133, :_reduce_118, + 1, 133, :_reduce_119, + 3, 133, :_reduce_120, + 3, 133, :_reduce_121, + 4, 133, :_reduce_122, + 3, 133, :_reduce_123, + 1, 106, :_reduce_124, + 2, 106, :_reduce_125, + 1, 106, :_reduce_126, + 3, 117, :_reduce_127, + 2, 131, :_reduce_128, + 2, 131, :_reduce_129, + 3, 135, :_reduce_130, + 4, 135, :_reduce_131, + 4, 134, :_reduce_132, + 6, 129, :_reduce_133, + 7, 129, :_reduce_134, + 3, 126, :_reduce_135, + 0, 136, :_reduce_136, + 1, 136, :_reduce_137, + 2, 136, :_reduce_138, + 3, 136, :_reduce_139, + 3, 136, :_reduce_140, + 4, 136, :_reduce_141, + 4, 136, :_reduce_142, + 2, 136, :_reduce_143, + 1, 137, :_reduce_144, + 3, 137, :_reduce_145, + 3, 111, :_reduce_146, + 4, 111, :_reduce_147, + 5, 111, :_reduce_148, + 3, 138, :_reduce_149, + 2, 112, :_reduce_150, + 3, 128, :_reduce_151, + 3, 114, :_reduce_152, + 2, 114, :_reduce_153, + 3, 114, :_reduce_154, + 4, 115, :_reduce_155, + 4, 115, :_reduce_156, + 1, 139, :_reduce_157, + 3, 139, :_reduce_158, + 2, 140, :_reduce_159, + 2, 140, :_reduce_160, + 3, 140, :_reduce_161, + 3, 140, :_reduce_162, + 5, 116, :_reduce_163, + 7, 116, :_reduce_164, + 1, 141, :_reduce_165, + 2, 141, :_reduce_166, + 3, 142, :_reduce_167, + 4, 142, :_reduce_168, + 3, 142, :_reduce_169, + 3, 143, :_reduce_170, + 2, 144, :_reduce_171, + 1, 145, :_reduce_172, + 2, 145, :_reduce_173, + 0, 146, :_reduce_174, + 2, 146, :_reduce_175, + 1, 147, :_reduce_176, + 2, 147, :_reduce_177, + 2, 110, :_reduce_178, + 3, 110, :_reduce_179, + 3, 110, :_reduce_180 ] + +racc_reduce_n = 181 + +racc_shift_n = 310 + +racc_token_table = { + false => 0, + :error => 1, + :IF => 2, + :ELSE => 3, + :UNLESS => 4, + :NUMBER => 5, + :STRING => 6, + :REGEX => 7, + :TRUE => 8, + :FALSE => 9, + :YES => 10, + :NO => 11, + :ON => 12, + :OFF => 13, + :IDENTIFIER => 14, + :PROPERTY_ACCESS => 15, + :PROTOTYPE_ACCESS => 16, + :CODE => 17, + :PARAM => 18, + :NEW => 19, + :RETURN => 20, + :TRY => 21, + :CATCH => 22, + :FINALLY => 23, + :THROW => 24, + :BREAK => 25, + :CONTINUE => 26, + :FOR => 27, + :IN => 28, + :OF => 29, + :BY => 30, + :WHEN => 31, + :WHILE => 32, + :SWITCH => 33, + :LEADING_WHEN => 34, + :DELETE => 35, + :INSTANCEOF => 36, + :TYPEOF => 37, + :SUPER => 38, + :EXTENDS => 39, + :ARGUMENTS => 40, + :NEWLINE => 41, + :COMMENT => 42, + :JS => 43, + :THIS => 44, + :INDENT => 45, + :OUTDENT => 46, + "?" => 47, + :UMINUS => 48, + :NOT => 49, + "!" => 50, + "!!" => 51, + "~" => 52, + "++" => 53, + "--" => 54, + "*" => 55, + "/" => 56, + "%" => 57, + "+" => 58, + "-" => 59, + "<<" => 60, + ">>" => 61, + ">>>" => 62, + "&" => 63, + "|" => 64, + "^" => 65, + "<=" => 66, + "<" => 67, + ">" => 68, + ">=" => 69, + "==" => 70, + "!=" => 71, + :IS => 72, + :ISNT => 73, + "&&" => 74, + "||" => 75, + :AND => 76, + :OR => 77, + "-=" => 78, + "+=" => 79, + "/=" => 80, + "*=" => 81, + "%=" => 82, + "." => 83, + :ASSIGN => 84, + "||=" => 85, + "&&=" => 86, + "?=" => 87, + "=>" => 88, + "==>" => 89, + "\n" => 90, + ";" => 91, + "," => 92, + "[" => 93, + "]" => 94, + "{" => 95, + "}" => 96, + "(" => 97, + ")" => 98 } + +racc_nt_base = 99 + +racc_use_result_var = true + +Racc_arg = [ + racc_action_table, + racc_action_check, + racc_action_default, + racc_action_pointer, + racc_goto_table, + racc_goto_check, + racc_goto_default, + racc_goto_pointer, + racc_nt_base, + racc_reduce_table, + racc_token_table, + racc_shift_n, + racc_reduce_n, + racc_use_result_var ] + +Racc_token_to_s_table = [ + "$end", + "error", + "IF", + "ELSE", + "UNLESS", + "NUMBER", + "STRING", + "REGEX", + "TRUE", + "FALSE", + "YES", + "NO", + "ON", + "OFF", + "IDENTIFIER", + "PROPERTY_ACCESS", + "PROTOTYPE_ACCESS", + "CODE", + "PARAM", + "NEW", + "RETURN", + "TRY", + "CATCH", + "FINALLY", + "THROW", + "BREAK", + "CONTINUE", + "FOR", + "IN", + "OF", + "BY", + "WHEN", + "WHILE", + "SWITCH", + "LEADING_WHEN", + "DELETE", + "INSTANCEOF", + "TYPEOF", + "SUPER", + "EXTENDS", + "ARGUMENTS", + "NEWLINE", + "COMMENT", + "JS", + "THIS", + "INDENT", + "OUTDENT", + "\"?\"", + "UMINUS", + "NOT", + "\"!\"", + "\"!!\"", + "\"~\"", + "\"++\"", + "\"--\"", + "\"*\"", + "\"/\"", + "\"%\"", + "\"+\"", + "\"-\"", + "\"<<\"", + "\">>\"", + "\">>>\"", + "\"&\"", + "\"|\"", + "\"^\"", + "\"<=\"", + "\"<\"", + "\">\"", + "\">=\"", + "\"==\"", + "\"!=\"", + "IS", + "ISNT", + "\"&&\"", + "\"||\"", + "AND", + "OR", + "\"-=\"", + "\"+=\"", + "\"/=\"", + "\"*=\"", + "\"%=\"", + "\".\"", + "ASSIGN", + "\"||=\"", + "\"&&=\"", + "\"?=\"", + "\"=>\"", + "\"==>\"", + "\"\\n\"", + "\";\"", + "\",\"", + "\"[\"", + "\"]\"", + "\"{\"", + "\"}\"", + "\"(\"", + "\")\"", + "$start", + "Root", + "Terminator", + "Expressions", + "Block", + "Expression", + "Value", + "Call", + "Code", + "Operation", + "Assign", + "If", + "Try", + "Throw", + "Return", + "While", + "For", + "Switch", + "Extends", + "Splat", + "Existence", + "Comment", + "Literal", + "AssignObj", + "ParamList", + "FuncGlyph", + "Param", + "Array", + "Object", + "Parenthetical", + "Range", + "Accessor", + "Invocation", + "Index", + "AssignList", + "Super", + "Arguments", + "ArgList", + "SimpleArgs", + "Catch", + "ForVariables", + "ForSource", + "Whens", + "When", + "IfBlock", + "ElsIf", + "ElsIfs", + "ElseBody", + "IfEnd" ] + +Racc_debug_parser = false + +##### State transition tables end ##### + +# reduce 0 omitted + +module_eval(<<'.,.,', 'grammar.y', 49) + def _reduce_1(val, _values, result) + result = Expressions.new + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 50) + def _reduce_2(val, _values, result) + result = Expressions.new + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 51) + def _reduce_3(val, _values, result) + result = val[0] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 52) + def _reduce_4(val, _values, result) + result = val[0] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 57) + def _reduce_5(val, _values, result) + result = Expressions.wrap(val) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 58) + def _reduce_6(val, _values, result) + result = val[0] << val[2] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 59) + def _reduce_7(val, _values, result) + result = val[0] + result + end +.,., + +# reduce 8 omitted + +# reduce 9 omitted + +# reduce 10 omitted + +# reduce 11 omitted + +# reduce 12 omitted + +# reduce 13 omitted + +# reduce 14 omitted + +# reduce 15 omitted + +# reduce 16 omitted + +# reduce 17 omitted + +# reduce 18 omitted + +# reduce 19 omitted + +# reduce 20 omitted + +# reduce 21 omitted + +# reduce 22 omitted + +# reduce 23 omitted + +module_eval(<<'.,.,', 'grammar.y', 86) + def _reduce_24(val, _values, result) + result = val[1] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 87) + def _reduce_25(val, _values, result) + result = Expressions.new + result + end +.,., + +# reduce 26 omitted + +# reduce 27 omitted + +module_eval(<<'.,.,', 'grammar.y', 98) + def _reduce_28(val, _values, result) + result = LiteralNode.new(val[0]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 99) + def _reduce_29(val, _values, result) + result = LiteralNode.new(val[0]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 100) + def _reduce_30(val, _values, result) + result = LiteralNode.new(val[0]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 101) + def _reduce_31(val, _values, result) + result = LiteralNode.new(val[0]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 102) + def _reduce_32(val, _values, result) + result = LiteralNode.new(val[0]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 103) + def _reduce_33(val, _values, result) + result = LiteralNode.new(val[0]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 104) + def _reduce_34(val, _values, result) + result = LiteralNode.new(val[0]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 105) + def _reduce_35(val, _values, result) + result = LiteralNode.new(Value.new(true)) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 106) + def _reduce_36(val, _values, result) + result = LiteralNode.new(Value.new(false)) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 107) + def _reduce_37(val, _values, result) + result = LiteralNode.new(Value.new(true)) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 108) + def _reduce_38(val, _values, result) + result = LiteralNode.new(Value.new(false)) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 109) + def _reduce_39(val, _values, result) + result = LiteralNode.new(Value.new(true)) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 110) + def _reduce_40(val, _values, result) + result = LiteralNode.new(Value.new(false)) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 115) + def _reduce_41(val, _values, result) + result = AssignNode.new(val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 120) + def _reduce_42(val, _values, result) + result = AssignNode.new(ValueNode.new(val[0]), val[2], :object) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 121) + def _reduce_43(val, _values, result) + result = AssignNode.new(ValueNode.new(LiteralNode.new(val[0])), val[2], :object) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 122) + def _reduce_44(val, _values, result) + result = val[0] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 127) + def _reduce_45(val, _values, result) + result = ReturnNode.new(val[1]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 128) + def _reduce_46(val, _values, result) + result = ReturnNode.new(ValueNode.new(Value.new('null'))) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 133) + def _reduce_47(val, _values, result) + result = CommentNode.new(val[0]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 140) + def _reduce_48(val, _values, result) + result = OpNode.new(val[0], val[1]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 141) + def _reduce_49(val, _values, result) + result = OpNode.new(val[0], val[1]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 142) + def _reduce_50(val, _values, result) + result = OpNode.new(val[0], val[1]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 143) + def _reduce_51(val, _values, result) + result = OpNode.new(val[0], val[1]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 144) + def _reduce_52(val, _values, result) + result = OpNode.new(val[0], val[1]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 145) + def _reduce_53(val, _values, result) + result = OpNode.new(val[0], val[1]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 146) + def _reduce_54(val, _values, result) + result = OpNode.new(val[0], val[1]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 147) + def _reduce_55(val, _values, result) + result = OpNode.new(val[0], val[1]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 148) + def _reduce_56(val, _values, result) + result = OpNode.new(val[0], val[1]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 149) + def _reduce_57(val, _values, result) + result = OpNode.new(val[1], val[0], nil, true) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 150) + def _reduce_58(val, _values, result) + result = OpNode.new(val[1], val[0], nil, true) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 152) + def _reduce_59(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 153) + def _reduce_60(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 154) + def _reduce_61(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 156) + def _reduce_62(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 157) + def _reduce_63(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 159) + def _reduce_64(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 160) + def _reduce_65(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 161) + def _reduce_66(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 163) + def _reduce_67(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 164) + def _reduce_68(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 165) + def _reduce_69(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 167) + def _reduce_70(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 168) + def _reduce_71(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 169) + def _reduce_72(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 170) + def _reduce_73(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 172) + def _reduce_74(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 173) + def _reduce_75(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 174) + def _reduce_76(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 175) + def _reduce_77(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 177) + def _reduce_78(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 178) + def _reduce_79(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 179) + def _reduce_80(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 180) + def _reduce_81(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 181) + def _reduce_82(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 183) + def _reduce_83(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 184) + def _reduce_84(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 185) + def _reduce_85(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 186) + def _reduce_86(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 187) + def _reduce_87(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 188) + def _reduce_88(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 189) + def _reduce_89(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 190) + def _reduce_90(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 192) + def _reduce_91(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 193) + def _reduce_92(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 198) + def _reduce_93(val, _values, result) + result = ExistenceNode.new(val[0]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 203) + def _reduce_94(val, _values, result) + result = CodeNode.new(val[0], val[2], val[1]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 204) + def _reduce_95(val, _values, result) + result = CodeNode.new([], val[1], val[0]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 209) + def _reduce_96(val, _values, result) + result = :func + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 210) + def _reduce_97(val, _values, result) + result = :boundfunc + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 215) + def _reduce_98(val, _values, result) + result = val + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 216) + def _reduce_99(val, _values, result) + result = val[0] << val[2] + result + end +.,., + +# reduce 100 omitted + +module_eval(<<'.,.,', 'grammar.y', 222) + def _reduce_101(val, _values, result) + result = SplatNode.new(val[0]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 227) + def _reduce_102(val, _values, result) + result = SplatNode.new(val[0]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 232) + def _reduce_103(val, _values, result) + result = ValueNode.new(val[0]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 233) + def _reduce_104(val, _values, result) + result = ValueNode.new(val[0]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 234) + def _reduce_105(val, _values, result) + result = ValueNode.new(val[0]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 235) + def _reduce_106(val, _values, result) + result = ValueNode.new(val[0]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 236) + def _reduce_107(val, _values, result) + result = ValueNode.new(val[0]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 237) + def _reduce_108(val, _values, result) + result = ValueNode.new(val[0]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 238) + def _reduce_109(val, _values, result) + result = val[0] << val[1] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 239) + def _reduce_110(val, _values, result) + result = ValueNode.new(val[0], [val[1]]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 240) + def _reduce_111(val, _values, result) + result = ValueNode.new(ThisNode.new) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 245) + def _reduce_112(val, _values, result) + result = AccessorNode.new(val[1]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 246) + def _reduce_113(val, _values, result) + result = AccessorNode.new(val[1], true) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 247) + def _reduce_114(val, _values, result) + result = val[0] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 248) + def _reduce_115(val, _values, result) + result = SliceNode.new(val[0]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 253) + def _reduce_116(val, _values, result) + result = IndexNode.new(val[1]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 258) + def _reduce_117(val, _values, result) + result = ObjectNode.new(val[1]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 263) + def _reduce_118(val, _values, result) + result = [] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 264) + def _reduce_119(val, _values, result) + result = val + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 265) + def _reduce_120(val, _values, result) + result = val[0] << val[2] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 266) + def _reduce_121(val, _values, result) + result = val[0] << val[2] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 268) + def _reduce_122(val, _values, result) + result = val[0] << val[3] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 269) + def _reduce_123(val, _values, result) + result = val[1] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 274) + def _reduce_124(val, _values, result) + result = val[0] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 275) + def _reduce_125(val, _values, result) + result = val[1].new_instance + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 276) + def _reduce_126(val, _values, result) + result = val[0] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 281) + def _reduce_127(val, _values, result) + result = ExtendsNode.new(val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 286) + def _reduce_128(val, _values, result) + result = CallNode.new(val[0], val[1]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 287) + def _reduce_129(val, _values, result) + result = CallNode.new(val[0], val[1]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 292) + def _reduce_130(val, _values, result) + result = val[1] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 293) + def _reduce_131(val, _values, result) + result = val[1] << val[3] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 298) + def _reduce_132(val, _values, result) + result = CallNode.new(Value.new('super'), val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 304) + def _reduce_133(val, _values, result) + result = RangeNode.new(val[1], val[4]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 306) + def _reduce_134(val, _values, result) + result = RangeNode.new(val[1], val[5], true) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 311) + def _reduce_135(val, _values, result) + result = ArrayNode.new(val[1]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 316) + def _reduce_136(val, _values, result) + result = [] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 317) + def _reduce_137(val, _values, result) + result = val + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 318) + def _reduce_138(val, _values, result) + result = [val[1]] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 319) + def _reduce_139(val, _values, result) + result = val[0] << val[2] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 320) + def _reduce_140(val, _values, result) + result = val[0] << val[2] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 321) + def _reduce_141(val, _values, result) + result = val[0] << val[3] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 322) + def _reduce_142(val, _values, result) + result = val[0] << val[3] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 323) + def _reduce_143(val, _values, result) + result = val[0] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 328) + def _reduce_144(val, _values, result) + result = val[0] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 329) + def _reduce_145(val, _values, result) + result = ([val[0]] << val[2]).flatten + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 334) + def _reduce_146(val, _values, result) + result = TryNode.new(val[1], val[2][0], val[2][1]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 335) + def _reduce_147(val, _values, result) + result = TryNode.new(val[1], nil, nil, val[3]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 337) + def _reduce_148(val, _values, result) + result = TryNode.new(val[1], val[2][0], val[2][1], val[4]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 342) + def _reduce_149(val, _values, result) + result = [val[1], val[2]] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 347) + def _reduce_150(val, _values, result) + result = ThrowNode.new(val[1]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 352) + def _reduce_151(val, _values, result) + result = ParentheticalNode.new(val[1], val[0].line) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 357) + def _reduce_152(val, _values, result) + result = WhileNode.new(val[1], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 358) + def _reduce_153(val, _values, result) + result = WhileNode.new(val[1], nil) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 359) + def _reduce_154(val, _values, result) + result = WhileNode.new(val[2], Expressions.wrap(val[0])) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 366) + def _reduce_155(val, _values, result) + result = ForNode.new(val[0], val[3], val[2][0], val[2][1]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 367) + def _reduce_156(val, _values, result) + result = ForNode.new(val[3], val[2], val[1][0], val[1][1]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 372) + def _reduce_157(val, _values, result) + result = val + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 373) + def _reduce_158(val, _values, result) + result = [val[0], val[2]] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 378) + def _reduce_159(val, _values, result) + result = {:source => val[1]} + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 379) + def _reduce_160(val, _values, result) + result = {:source => val[1], :object => true} + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 381) + def _reduce_161(val, _values, result) + result = val[0].merge(:filter => val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 383) + def _reduce_162(val, _values, result) + result = val[0].merge(:step => val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 389) + def _reduce_163(val, _values, result) + result = val[3].rewrite_condition(val[1]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 391) + def _reduce_164(val, _values, result) + result = val[3].rewrite_condition(val[1]).add_else(val[5]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 396) + def _reduce_165(val, _values, result) + result = val[0] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 397) + def _reduce_166(val, _values, result) + result = val[0] << val[1] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 402) + def _reduce_167(val, _values, result) + result = IfNode.new(val[1], val[2], nil, {:statement => true}) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 404) + def _reduce_168(val, _values, result) + result = IfNode.new(val[1], val[2], nil, {:statement => true}) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 405) + def _reduce_169(val, _values, result) + result = val[2].add_comment(val[0]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 410) + def _reduce_170(val, _values, result) + result = IfNode.new(val[1], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 415) + def _reduce_171(val, _values, result) + result = val[1].force_statement + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 420) + def _reduce_172(val, _values, result) + result = val[0] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 421) + def _reduce_173(val, _values, result) + result = val[0].add_else(val[1]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 426) + def _reduce_174(val, _values, result) + result = nil + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 427) + def _reduce_175(val, _values, result) + result = val[1] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 432) + def _reduce_176(val, _values, result) + result = val[0] + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 433) + def _reduce_177(val, _values, result) + result = val[0].add_else(val[1]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 438) + def _reduce_178(val, _values, result) + result = val[0].add_else(val[1]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 439) + def _reduce_179(val, _values, result) + result = IfNode.new(val[2], Expressions.wrap(val[0]), nil, {:statement => true}) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 440) + def _reduce_180(val, _values, result) + result = IfNode.new(val[2], Expressions.wrap(val[0]), nil, {:statement => true, :invert => true}) + result + end +.,., + +def _reduce_none(val, _values, result) + val[0] +end + +end # class Parser + +end From c3ce2ea9b15496f042d19ecec6633eb3ce28b46d Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Sat, 23 Jan 2010 17:53:07 -0500 Subject: [PATCH 05/32] added automatic safety closure wrapper for functions declared within for loops. --- lib/coffee_script/nodes.rb | 22 ++++++++++++------- .../execution/test_array_comprehension.coffee | 17 ++++++++++++++ 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/lib/coffee_script/nodes.rb b/lib/coffee_script/nodes.rb index 8269040664..f9b7a2162e 100644 --- a/lib/coffee_script/nodes.rb +++ b/lib/coffee_script/nodes.rb @@ -749,6 +749,14 @@ def self.wrap(array, expressions) end end + # A faux-node used to wrap an expressions body in a closure. + class ClosureNode + def self.wrap(expressions) + Expressions.wrap(CallNode.new(ParentheticalNode.new( + ValueNode.new(CodeNode.new([], Expressions.wrap(expressions)))))) + end + end + # A while loop, the only sort of low-level loop exposed by CoffeeScript. From # it, all other loops can be manufactured. class WhileNode < Node @@ -808,25 +816,23 @@ def compile_node(o) rvar = scope.free_variable unless top_level svar = scope.free_variable ivar = range ? name : @index ? @index : scope.free_variable + var_part = '' + body = Expressions.wrap(@body) if range index_var = scope.free_variable source_part = source.compile_variables(o) for_part = "#{index_var}=0, #{source.compile(o.merge(:index => ivar, :step => @step))}, #{index_var}++" - var_part = '' else index_var = nil source_part = "#{svar} = #{source.compile(o)};\n#{idt}" for_part = @object ? "#{ivar} in #{svar}" : "#{ivar} = 0; #{ivar} < #{svar}.length; #{ivar}++" - var_part = @name ? "#{body_dent}#{@name} = #{svar}[#{ivar}];\n" : '' + var_part = "#{body_dent}#{@name} = #{svar}[#{ivar}];\n" if @name + # body.unshift(AssignNode.new(@name, ValueNode.new(svar, [IndexNode.new(ivar)]))) if @name end - body = @body set_result = rvar ? "#{idt}#{rvar} = []; " : idt return_result = rvar || '' - if top_level - body = Expressions.wrap(body) - else - body = PushNode.wrap(rvar, body) - end + body = ClosureNode.wrap(body) if top_level && contains? {|n| n.is_a? CodeNode } + body = PushNode.wrap(rvar, body) unless top_level if o[:return] return_result = "return #{return_result}" if o[:return] o.delete(:return) diff --git a/test/fixtures/execution/test_array_comprehension.coffee b/test/fixtures/execution/test_array_comprehension.coffee index d39ce6d439..5eb6fa4b34 100644 --- a/test/fixtures/execution/test_array_comprehension.coffee +++ b/test/fixtures/execution/test_array_comprehension.coffee @@ -19,7 +19,24 @@ evens: for num in [1, 2, 3, 4, 5, 6] when num % 2 is 0 print(evens.join(', ') is '4, 6, 8') + # Make sure that the "in" operator still works. print(2 in evens) + +# When functions are being defined within the body of a comprehension, make +# sure that their safely wrapped in a closure to preserve local variables. + +obj: {} + +methods: ['one', 'two', 'three'] + +for method in methods + name: method + obj[name]: => + "I'm " + name + +print(obj.one() is "I'm one") +print(obj.two() is "I'm two") +print(obj.three() is "I'm three") From 9160500e84b67c7369b3f85498270e5c16d5cd22 Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Sat, 23 Jan 2010 21:11:27 -0500 Subject: [PATCH 06/32] removing 'this' rewriting in favor of correctly calling generated closures --- lib/coffee_script/grammar.y | 2 - lib/coffee_script/lexer.rb | 5 +- lib/coffee_script/nodes.rb | 29 +- lib/coffee_script/parser.rb | 2460 +++++++++++++++++------------------ 4 files changed, 1225 insertions(+), 1271 deletions(-) diff --git a/lib/coffee_script/grammar.y b/lib/coffee_script/grammar.y index 1cb1337ec8..83bb0b923b 100644 --- a/lib/coffee_script/grammar.y +++ b/lib/coffee_script/grammar.y @@ -16,7 +16,6 @@ token ARGUMENTS token NEWLINE token COMMENT token JS -token THIS token INDENT OUTDENT # Declare order of operations. @@ -238,7 +237,6 @@ rule | Range { result = ValueNode.new(val[0]) } | Value Accessor { result = val[0] << val[1] } | Invocation Accessor { result = ValueNode.new(val[0], [val[1]]) } - | THIS { result = ValueNode.new(ThisNode.new) } ; # Accessing into an object or array, through dot or index notation. diff --git a/lib/coffee_script/lexer.rb b/lib/coffee_script/lexer.rb index 767c6f394a..52c33d7b58 100644 --- a/lib/coffee_script/lexer.rb +++ b/lib/coffee_script/lexer.rb @@ -16,8 +16,7 @@ class Lexer "delete", "instanceof", "typeof", "switch", "when", "super", "extends", - "arguments", - "this"] + "arguments"] # Token matching regexes. IDENTIFIER = /\A([a-zA-Z$_](\w|\$)*)/ @@ -48,7 +47,7 @@ class Lexer NOT_REGEX = [ :IDENTIFIER, :NUMBER, :REGEX, :STRING, ')', '++', '--', ']', '}', - :FALSE, :NULL, :THIS, :TRUE + :FALSE, :NULL, :TRUE ] # Scan by attempting to match tokens one character at a time. Slow and steady. diff --git a/lib/coffee_script/nodes.rb b/lib/coffee_script/nodes.rb index f9b7a2162e..3821641502 100644 --- a/lib/coffee_script/nodes.rb +++ b/lib/coffee_script/nodes.rb @@ -56,12 +56,9 @@ def compile(o={}) end def compile_closure(o={}) - indent = o[:indent] - @indent = (o[:indent] = idt(1)) - pass_this = !o[:closure] && contains? {|node| node.is_a?(ThisNode) } - param = pass_this ? '__this' : '' - body = compile_node(o.merge(:return => true, :closure => true)) - "(function(#{param}) {\n#{body}\n#{indent}})(#{pass_this ? 'this' : ''})" + indent = o[:indent] + @indent = (o[:indent] = idt(1)) + ClosureNode.wrap(self).compile(o) end # Quick short method for the current indentation level, plus tabbing in. @@ -407,16 +404,6 @@ def compile_node(o) end end - # A node to represent a reference to "this". Needs to be transformed into a - # reference to the correct value of "this", when used within a closure wrapper. - class ThisNode < Node - - def compile_node(o) - write(o[:closure] ? "__this" : "this") - end - - end - # A range literal. Ranges can be used to extract portions (slices) of arrays, # or to specify a range for array comprehensions. class RangeNode < Node @@ -647,7 +634,6 @@ def compile_node(o) o[:indent] = idt(@bound ? 2 : 1) o.delete(:no_wrap) o.delete(:globals) - o.delete(:closure) if @params.last.is_a?(SplatNode) splat = @params.pop splat.index = @params.length @@ -751,9 +737,10 @@ def self.wrap(array, expressions) # A faux-node used to wrap an expressions body in a closure. class ClosureNode - def self.wrap(expressions) - Expressions.wrap(CallNode.new(ParentheticalNode.new( - ValueNode.new(CodeNode.new([], Expressions.wrap(expressions)))))) + def self.wrap(expressions, statement=false) + func = ParentheticalNode.new(CodeNode.new([], Expressions.wrap(expressions))) + call = CallNode.new(ValueNode.new(func, AccessorNode.new(Value.new('call'))), [Value.new('this')]) + statement ? Expressions.wrap(call) : call end end @@ -831,7 +818,7 @@ def compile_node(o) end set_result = rvar ? "#{idt}#{rvar} = []; " : idt return_result = rvar || '' - body = ClosureNode.wrap(body) if top_level && contains? {|n| n.is_a? CodeNode } + body = ClosureNode.wrap(body, true) if top_level && contains? {|n| n.is_a? CodeNode } body = PushNode.wrap(rvar, body) unless top_level if o[:return] return_result = "return #{return_result}" if o[:return] diff --git a/lib/coffee_script/parser.rb b/lib/coffee_script/parser.rb index 37dc4c6b66..99774b65a9 100644 --- a/lib/coffee_script/parser.rb +++ b/lib/coffee_script/parser.rb @@ -10,7 +10,7 @@ module CoffeeScript class Parser < Racc::Parser -module_eval(<<'...end grammar.y/module_eval...', 'grammar.y', 450) +module_eval(<<'...end grammar.y/module_eval...', 'grammar.y', 448) # Lex and parse a CoffeeScript. def parse(code) # Uncomment the following line to enable grammar debugging, in combination @@ -34,320 +34,310 @@ def on_error(error_token_id, error_value, value_stack) ##### State transition tables begin ### clist = [ -'104,30,113,20,23,27,33,35,39,45,49,55,61,82,82,95,268,269,264,274,274', -'81,81,24,28,117,122,15,15,110,134,30,183,184,108,133,138,30,11,8,110', -'18,26,73,73,110,-181,-181,301,15,15,133,138,100,103,107,112,116,120', -'124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136,98,101', -'105,109,114,118,121,30,127,130,135,148,150,148,150,144,70,30,2,8,9,182', -'20,23,27,33,35,39,45,49,55,61,253,148,150,73,1,5,10,50,56,17,24,28,32', -'82,171,293,238,51,57,261,68,81,74,3,82,11,30,15,18,26,30,254,81,82,43', -'47,53,59,63,67,189,81,148,150,13,144,274,190,191,15,30,188,78,283,15', -'62,65,149,292,149,15,154,240,154,148,150,62,65,186,15,148,150,78,50', -'56,62,65,175,70,149,2,8,9,154,20,23,27,33,35,39,45,49,55,61,151,62,65', -'73,1,5,10,190,191,17,24,28,32,282,62,65,247,51,57,247,68,30,74,3,177', -'11,149,15,18,26,154,247,62,65,43,47,53,59,63,67,110,62,65,110,13,152', -'-181,-181,149,133,138,95,154,178,149,50,56,91,154,140,62,65,249,62,65', -'249,268,269,260,30,263,273,84,50,56,62,65,249,70,250,2,8,9,308,20,23', -'27,33,35,39,45,49,55,61,271,110,216,73,1,5,10,133,138,17,24,28,32,62', -'65,175,,51,57,176,68,,74,3,110,11,110,15,18,26,-181,-181,-181,-181,43', -'47,53,59,63,67,110,,,,13,,133,138,100,103,107,112,116,120,124,126,129', -'132,137,99,102,106,111,115,119,123,125,,,110,,,,50,56,-181,-181,,70', -',2,8,9,,20,23,27,33,35,39,45,49,55,61,,110,,73,1,5,10,-181,-181,17,24', -'28,32,,,,,51,57,,68,,74,3,110,11,,15,18,26,-181,-181,,,43,47,53,59,63', -'67,110,,,,13,,133,138,100,103,107,112,116,120,124,126,129,132,137,99', -'102,106,111,115,119,123,125,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35', -'39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15', -'18,26,,,,,43,47,53,59,63,67,110,,,,13,,133,138,100,103,107,112,116,120', -'124,126,129,132,137,99,102,106,111,115,119,123,125,,,,,,,50,56,,,,70', -',2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,', -',51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,110,,,,13,,133', -'138,100,103,107,112,116,120,124,126,129,132,137,99,102,106,111,115,119', -'123,125,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73', -'1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53', -'59,63,67,110,,,,13,,133,138,100,103,107,112,116,120,124,126,129,132', -'137,99,102,106,111,115,119,123,125,,,,,,,50,56,,,,70,,2,8,9,,20,23,27', -'33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3', -',11,,15,18,26,,,,,43,47,53,59,63,67,110,,,,13,,133,138,100,103,107,112', -'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,,,,,,,50', -'56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24', -'28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,110,,', -',13,,133,138,100,103,107,112,116,120,124,126,129,132,137,99,102,106', -'111,115,119,123,125,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49', -'55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,', -',,,43,47,53,59,63,67,110,,,,13,,133,138,100,103,107,112,116,120,124', -'126,129,132,137,99,102,106,111,115,119,123,125,,,,,,,50,56,,,,70,,2', -'8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51', -'57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,110,,,,13,,133,138', -'100,103,107,112,116,120,124,126,129,132,137,110,,,,,,133,138,100,103', -'107,112,116,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73', -'1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,94,,,43,47,53', -'59,63,67,110,,,,13,,133,138,100,103,107,112,116,120,124,126,129,132', -'137,110,,,,,,133,138,100,103,107,112,116,,50,56,,,,70,,2,8,9,,20,23', -'27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74', -'3,,11,,15,18,26,,,,,43,47,53,59,63,67,110,,,,13,,133,138,100,103,107', -'112,116,120,124,126,129,132,137,110,,,,,,133,138,100,103,107,112,116', -',50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17', -'24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,110', -',,,13,,133,138,100,103,107,112,116,120,124,126,129,132,137,110,,,,,', -'133,138,100,103,107,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55', -'61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,', -'43,47,53,59,63,67,110,,,,13,,133,138,100,103,107,112,116,120,124,126', -'110,,,,,,133,138,100,103,107,112,116,120,124,126,,50,56,,,,70,,2,8,9', -',20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57', -',68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,110,,,,13,,133,138,100', -'103,107,112,116,120,124,126,110,,,,,,133,138,100,103,107,,298,,,,,50', -'56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24', -'28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45', -'49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26', -',,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70', -',2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,', -',51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61', -',,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43', -'47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9', -',20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57', -',68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73', -'1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53', -'59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23', -'27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74', -'3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10', -',,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67', -',,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35', -'39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15', -'18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56', -',,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28', -'32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49', -'55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,', -',,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70', -',2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,', -',51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61', -',,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,167,,,', -'43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2', -'8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51', -'57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,', -',73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47', -'53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20', -'23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68', -',74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5', -'10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63', -'67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33', -'35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11', -',15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50', -'56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24', -'28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45', -'49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26', -',,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70', -',2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,', -',51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61', -',,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,280,,,', -'43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,62,65,,70', -',2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,', -',51,57,,68,,74,3,,11,,15,18,26,167,,,,43,47,53,59,63,67,,,,,13,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55', -'61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,', -'43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2', -'8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51', -'57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,', -',73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,30,,,,43', -'47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,62,65,,70,,2', -'8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51', -'57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,', -',73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47', -'53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20', -'23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68', -',74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5', -'10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63', -'67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33', -'35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11', -',15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50', -'56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24', -'28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45', -'49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26', -',,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70', -',2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,', -',51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61', -',,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43', -'47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9', -',20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57', -',68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73', -'1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53', -'59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23', -'27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74', -'3,,11,,15,18,26,167,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5', -'10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63', -'67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33', -'35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11', -',15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50', -'56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24', -'28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45', -'49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26', -',,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70', -',2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,', -',51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61', -',,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43', -'47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9', -',20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57', -',68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73', -'1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53', -'59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23', -'27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74', -'3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10', -',,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67', -',,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35', -'39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15', -'18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56', -',,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28', -'32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49', -'55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,', -',,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70', -',2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,', -',51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61', -',,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43', -'47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9', -',20,23,27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57', -',68,,74,3,,11,,15,18,26,,,,,43,47,53,59,63,67,,,,,13,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23,27,33,35,39,45,49,55,61,,,,73', -'1,5,10,,,17,24,28,32,,,,,51,57,,68,,74,3,,11,,15,18,26,,,,,43,47,53', -'59,63,67,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,56,,,,70,,2,8,9,,20,23', -'27,33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,51,57,,68,,74', -'3,,11,,15,18,26,,,,,43,47,53,59,63,67,,104,,113,13,,,,,,,,,,,,,,,,,', -',,,,117,122,,,,134,,50,56,108,,,70,,2,,9,,,,110,,,,,,133,138,100,103', -'107,112,116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128', -'131,136,98,101,105,109,114,118,121,,127,130,135,,,,,,,309,20,23,27,33', -'35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,,,,,,,57,,68,,74,3,,11,,15', -'18,26,,,,,43,47,53,59,,,,,,,,,20,23,27,33,35,39,45,49,55,61,,,,,,,,', -',,24,28,,,,,,50,56,,,,70,,2,11,9,,18,26,,,,,,,,,,,,,,,,,,,,,,20,23,27', -'33,35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,32,,,,,70,57,2,68,9,74', -'3,,11,,15,18,26,,,,,43,47,53,59,63,67,,104,,113,13,,,,,,,,,,,,,,,,,', -',,,,117,122,,,,134,,50,56,108,,,70,,2,,9,,,,110,,,,,,133,138,100,103', -'107,112,116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128', -'131,136,98,101,105,109,114,118,121,,127,130,135,,,,,,,305,20,23,27,33', -'35,39,45,49,55,61,,,,73,1,5,10,,,17,24,28,,,,,,,57,,68,,74,3,,11,,15', -'18,26,,,,,43,47,53,59,63,67,,104,,113,13,,,,,,,,,,,,,,,,,,,,,,117,122', -',,,134,,50,56,108,,,70,,2,,9,,,,110,,,,,,133,138,100,103,107,112,116', -'120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136,98', -'101,105,109,114,118,252,,127,130,135,104,,113,,,,272,,,,,,,,,,,,,,,', -',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', -'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', -'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', -',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', -'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', -'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', -',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', -'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', -'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', -',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', -'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', -'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', -',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', -'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', -'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', -',,,117,122,,,,134,,,,108,,,,,,,,,30,,110,,,,,,133,138,100,103,107,112', -'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', -'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', -',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', -'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', -'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', -',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', -'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', -'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', -',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', -'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', -'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', -',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', -'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', -'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', -',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', -'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', -'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', -',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', -'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', -'98,101,105,109,114,118,252,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', -',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', -'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', -'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', -',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', -'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', -'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', -',,,117,122,,,,134,,,,108,,,,,,,,,246,,110,,,,,,133,138,100,103,107,112', -'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', -'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', -',,,117,122,,,,134,,,,108,,,,,,,,,30,,110,,,,,,133,138,100,103,107,112', -'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', -'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', -',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', -'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', -'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', -',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', -'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', -'98,101,105,109,114,118,121,,127,130,135,104,,113,,,,,,,,,,,,,,,,,,,', -',,,117,122,,,,134,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', -'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', -'98,101,105,109,114,118,121,,127,130,135,117,122,,,,,,,,108,,,,,,,,,', -',110,,,,,,133,138,100,103,107,112,116,120,124,126,129,132,137,99,102', -'106,111,115,119,123,125,128,131,136,98,101,105,109,114,118,121,,127', -'130,135,117,122,,,,,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112', -'116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136', -'98,101,105,109,114,118,121,117,122,,,,,,,,108,,,,,,,,,,,110,,,,,,133', -'138,100,103,107,112,116,120,124,126,129,132,137,99,102,106,111,115,119', -'123,125,128,131,136,98,101,105,109,114,118,121,117,122,,,,,,,,108,,', -',,,,,,,,110,,,,,,133,138,100,103,107,112,116,120,124,126,129,132,137', -'99,102,106,111,115,119,123,125,128,131,136,98,101,105,109,114,118,121', -'117,122,,,,,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112,116,120', -'124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136,98,101', -'105,109,114,118,121,117,122,,,,,,,,108,,,,,,,,,,,110,,,,,,133,138,100', -'103,107,112,116,120,124,126,129,132,137,99,102,106,111,115,119,123,125', -'128,131,136,98,101,105,109,114,118,121,122,,,,,,,,108,,,,,,,,,,,110', -',,,,,133,138,100,103,107,112,116,120,124,126,129,132,137,99,102,106', -'111,115,119,123,125,128,131,136,98,101,105,109,114,118,121,122,,,,,', -',,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112,116,120,124,126,129', -'132,137,99,102,106,111,115,119,123,125,128,131,136,98,101,105,109,114', -'118,121,122,,,,,,,,108,,,,,,,,,,,110,,,,,,133,138,100,103,107,112,116', -'120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136,98', -'101,105,109,114,118,121,122,,,,,,,,108,,,,,,,,,,,110,,,,,,133,138,100', -'103,107,112,116,120,124,126,129,132,137,99,102,106,111,115,119,123,125', -'128,131,136,98,101,105,109,114,118,121,122,,,,,,,,108,,,,,,,,,,,110', -',,,,,133,138,100,103,107,112,116,120,124,126,129,132,137,99,102,106', -'111,115,119,123,125,128,131,136,98,101,105,109,114,118,121,108,,,,,', -',,,,,110,,,,,,133,138,100,103,107,112,116,120,124,126,129,132,137,99', -'102,106,111,115,119,123,125,128,131,136,98,101,105,109,114,118,108,', -',,,,,,,,,110,,,,,,133,138,100,103,107,112,116,120,124,126,129,132,137', -'99,102,106,111,115,119,123,125,128,131,136,98,101,105,109,114,118,108', -',,,,,,,,,,110,,,,,,133,138,100,103,107,112,116,120,124,126,129,132,137', -'99,102,106,111,115,119,123,125,128,131,136,98,101,105,109,114,118,110', -',,,,,133,138,100,103,107,112,116,120,124,126,129,132,137,99,102,106', -'111,115,119,123,125,128,131,136,98,101,105,109,114,118,110,,,,,,133', -'138,100,103,107,112,116,120,124,126,129,132,137,99,102,106,111,115,119', -'123,125,128,131,136,98,101,105,109,114,118,110,,,,,,133,138,100,103', -'107,112,116,120,124,126,129,132,137,99,102,106,111,115,119,123,125,128', -'131,136,98,101,105,109,114,118,110,,,,,,133,138,100,103,107,112,116', -'120,124,126,129,132,137,99,102,106,111,115,119,123,125,128,131,136,98', -'101,105,109,114,118,110,,,,,,133,138,100,103,107,112,116,120,124,126', -'129,132,137,99,102,106,111,115,119,123,125,128,131,136,98,101,105,109', -'114,118' ] - racc_action_table = arr = Array.new(9894, nil) +'97,9,106,20,23,27,31,35,38,46,50,56,62,261,262,179,71,1,6,10,267,267', +'17,24,28,110,114,26,14,14,128,58,138,68,102,73,2,26,11,26,14,18,26,26', +'99,26,40,44,48,54,123,127,131,93,96,101,105,109,113,116,119,122,126', +'130,92,95,100,104,108,112,115,118,121,125,129,91,94,98,103,107,111,71', +'117,120,124,42,51,141,142,300,67,277,72,9,5,174,20,23,27,31,35,38,46', +'50,56,62,246,141,142,71,1,6,10,240,251,17,24,28,30,169,252,291,276,52', +'58,89,68,168,73,2,169,11,275,14,18,57,63,249,168,40,44,48,54,60,64,254', +'169,57,63,8,42,51,267,164,168,14,181,57,63,242,14,183,184,290,140,253', +'14,206,146,141,142,233,141,142,232,141,142,138,42,51,141,142,14,67,140', +'72,9,5,146,20,23,27,31,35,38,46,50,56,62,143,57,63,71,1,6,10,57,63,17', +'24,28,30,71,57,63,26,52,58,240,68,26,73,2,26,11,182,14,18,256,240,169', +'169,40,44,48,54,60,64,168,168,257,99,8,144,57,63,140,-180,-180,140,146', +'83,140,146,42,51,146,140,133,57,63,146,57,63,242,264,14,14,165,165,266', +'42,51,57,63,242,67,243,72,9,5,26,20,23,27,31,35,38,46,50,56,62,307,99', +'77,71,1,6,10,123,127,17,24,28,30,57,63,249,89,52,58,250,68,,73,2,99', +'11,,14,18,,-180,-180,,40,44,48,54,60,64,99,261,262,,8,,123,127,131,93', +'96,101,105,109,113,116,119,122,126,130,92,95,100,104,108,112,115,183', +'184,99,176,177,,42,51,123,127,,67,,72,9,5,,20,23,27,31,35,38,46,50,56', +'62,,99,,71,1,6,10,-180,-180,17,24,28,30,,,,,52,58,,68,,73,2,99,11,,14', +'18,,123,127,,40,44,48,54,60,64,99,,,,8,,123,127,131,93,96,101,105,109', +'113,116,119,122,126,130,92,95,100,104,108,112,115,,,99,,,,42,51,-180', +'-180,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,99,,71,1,6,10,-180', +'-180,17,24,28,30,,,,,52,58,,68,,73,2,99,11,,14,18,,-180,-180,,40,44', +'48,54,60,64,99,,,,8,,123,127,131,93,96,101,105,109,113,116,119,122,126', +'130,92,95,100,104,108,112,115,,,99,,,,42,51,-180,-180,,67,,72,9,5,,20', +'23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68', +',73,2,,11,,14,18,,,,,40,44,48,54,60,64,99,,,,8,,123,127,131,93,96,101', +'105,109,113,116,119,122,126,130,92,95,100,104,108,112,115,,,,,,,42,51', +',,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28', +'30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,99,,,,8,,123', +'127,131,93,96,101,105,109,113,116,119,122,126,130,92,95,100,104,108', +'112,115,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,', +'71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48', +'54,60,64,99,,,,8,,123,127,131,93,96,101,105,109,113,116,119,122,126', +'130,92,95,100,104,108,112,115,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31', +'35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11', +',14,18,,,,,40,44,48,54,60,64,99,,,,8,,123,127,131,93,96,101,105,109', +'113,116,119,122,126,130,92,95,100,104,108,112,115,,,,,,,42,51,,,,67', +',72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,', +',,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,99,,,,8,,123,127', +'131,93,96,101,105,109,113,116,119,122,126,130,92,95,100,104,108,112', +'115,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1', +'6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,87,,,40,44,48,54', +'60,64,99,,,,8,,123,127,131,93,96,101,105,109,113,116,119,122,126,99', +',,,,,123,127,131,93,96,101,105,,42,51,,,,67,,72,9,5,,20,23,27,31,35', +'38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14', +'18,,,,,40,44,48,54,60,64,99,,,,8,,123,127,131,93,96,101,105,109,113', +'116,119,122,126,,,,,,,,,,296,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35', +'38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14', +'18,,,,,40,44,48,54,60,64,99,,,,8,,123,127,131,93,96,101,105,109,113', +'116,119,122,126,99,,,,,,123,127,131,93,96,101,105,,42,51,,,,67,,72,9', +'5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58', +',68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,99,,,,8,,123,127,131,93,96', +'101,105,109,113,116,119,122,126,99,,,,,,123,127,131,93,96,101,105,,42', +'51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24', +'28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,99,,,,8,', +'123,127,131,93,96,101,105,109,113,116,99,,,,,,123,127,131,93,96,101', +'105,109,113,116,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62', +',,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44', +'48,54,60,64,99,,,,8,,123,127,131,93,96,101,105,109,113,116,99,,,,,99', +'123,127,131,93,96,123,127,131,93,96,,42,51,,,,67,,72,9,5,,20,23,27,31', +'35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11', +',14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51', +',,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28', +'30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56', +'62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40', +'44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5', +',20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58', +',68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1', +'6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60', +'64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31', +'35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11', +',14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51', +',,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28', +'30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56', +'62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40', +'44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5', +',20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58', +',68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1', +'6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60', +'64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31', +'35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11', +',14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51', +',,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28', +'30,,,,,52,58,,68,,73,2,,11,,14,18,161,,,,40,44,48,54,60,64,,,,,8,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50', +'56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,', +'40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72', +'9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52', +'58,,68,,73,2,,11,,14,18,273,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,42,51,57,63,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62', +',,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44', +'48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20', +'23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68', +',73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10', +',,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,', +',,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35', +'38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14', +'18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,', +'67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30', +',,,,52,58,,68,,73,2,,11,,14,18,161,,,,40,44,48,54,60,64,,,,,8,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56', +'62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,26,,,,40', +'44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,57,63,,67,,72', +'9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52', +'58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71', +'1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54', +'60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27', +'31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2', +',11,,14,18,161,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,', +'17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,', +',8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38', +'46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18', +',,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67', +',72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,', +',,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62', +',,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44', +'48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20', +'23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68', +',73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10', +',,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,', +',,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35', +'38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14', +'18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,', +'67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30', +',,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62', +',,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44', +'48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20', +'23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68', +',73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10', +',,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,', +',,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35', +'38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14', +'18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,', +'67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30', +',,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62', +',,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44', +'48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20', +'23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68', +',73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10', +',,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,', +',,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35', +'38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14', +'18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,', +'67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30', +',,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62', +',,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44', +'48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20', +'23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68', +',73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10', +',,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,', +',,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35', +'38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14', +'18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,', +'67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30', +',,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62', +',,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44', +'48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20', +'23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68', +',73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10', +',,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,', +',,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35', +'38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14', +'18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,', +'67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30', +',,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62', +',,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44', +'48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20', +'23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68', +',73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10', +',,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,', +',,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35', +'38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14', +'18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,', +'67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30', +',,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,20,23,27', +'31,35,38,46,50,56,62,,,,,,,,,,,24,28,,,,,,42,51,,,,67,,72,11,5,,18,', +',,97,,106,,,,,,,,,,,,,,,,,,,,,,,110,114,,,,128,,,,102,,,,,,,,,,99,67', +',72,,5,123,127,131,93,96,101,105,109,113,116,119,122,126,130,92,95,100', +'104,108,112,115,118,121,125,129,91,94,98,103,107,245,,117,120,124,,', +',,,,265,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,,,,,,', +'58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,,97,,106,8,,,,,,,,,,,', +',,,,,,,,,,110,114,,,,128,,42,51,102,,,67,,72,,5,,,99,,,,,,123,127,131', +'93,96,101,105,109,113,116,119,122,126,130,92,95,100,104,108,112,115', +'118,121,125,129,91,94,98,103,107,111,,117,120,124,,,,,,,304,20,23,27', +'31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,,58,,68,,73,2,,11', +',14,18,,,,,40,44,48,54,60,64,,97,,106,8,,,,20,23,27,31,35,38,46,50,56', +'62,,,,,,,,,110,114,24,28,,128,,42,51,102,,,67,,72,,5,11,,99,18,,,,,123', +'127,131,93,96,101,105,109,113,116,119,122,126,130,92,95,100,104,108', +'112,115,118,121,125,129,91,94,98,103,107,111,,117,120,124,97,,106,,', +',308,,,67,,72,,5,,,,,,,,,,,,110,114,,,,128,,,,102,,,,,,,,,,99,,,,,,123', +'127,131,93,96,101,105,109,113,116,119,122,126,130,92,95,100,104,108', +'112,115,118,121,125,129,91,94,98,103,107,245,,117,120,124,97,,106,,', +',,,,,,,,,,,,,,,,,,,,110,114,,,,128,,,,102,,,,,,,,,,99,,,,,,123,127,131', +'93,96,101,105,109,113,116,119,122,126,130,92,95,100,104,108,112,115', +'118,121,125,129,91,94,98,103,107,111,,117,120,124,97,,106,,,,,,,,,,', +',,,,,,,,,,,,110,114,,,,128,,,,102,,,,,,,,,,99,,,,,,123,127,131,93,96', +'101,105,109,113,116,119,122,126,130,92,95,100,104,108,112,115,118,121', +'125,129,91,94,98,103,107,111,,117,120,124,97,,106,,,,,,,,,,,,,,,,,,', +',,,,110,114,,,,128,,,,102,,,,,,,,,,99,,,,,,123,127,131,93,96,101,105', +'109,113,116,119,122,126,130,92,95,100,104,108,112,115,118,121,125,129', +'91,94,98,103,107,111,,117,120,124,97,,106,,,,,,,,,,,,,,,,,,,,,,,110', +'114,,,,128,,,,102,,,,,,,,,,99,,,,,,123,127,131,93,96,101,105,109,113', +'116,119,122,126,130,92,95,100,104,108,112,115,118,121,125,129,91,94', +'98,103,107,111,,117,120,124,97,,106,,,,,,,,,,,,,,,,,,,,,,,110,114,,', +',128,,,,102,,,,,,,,,,99,,,,,,123,127,131,93,96,101,105,109,113,116,119', +'122,126,130,92,95,100,104,108,112,115,118,121,125,129,91,94,98,103,107', +'111,,117,120,124,97,,106,,,,,,,,,,,,,,,,,,,,,,,110,114,,,,128,,,,102', +',,,,,,,,,99,,,,,,123,127,131,93,96,101,105,109,113,116,119,122,126,130', +'92,95,100,104,108,112,115,118,121,125,129,91,94,98,103,107,111,,117', +'120,124,97,,106,,,,,,,,,,,,,,,,,,,,,,,110,114,,,,128,,,,102,,,,,,,,', +',99,,,,,,123,127,131,93,96,101,105,109,113,116,119,122,126,130,92,95', +'100,104,108,112,115,118,121,125,129,91,94,98,103,107,111,,117,120,124', +'97,,106,,,,,,,,,,,,,,,,,,,,,,,110,114,,,,128,,,,102,,,,,,,,,,99,,,,', +',123,127,131,93,96,101,105,109,113,116,119,122,126,130,92,95,100,104', +'108,112,115,118,121,125,129,91,94,98,103,107,111,,117,120,124,97,,106', +',,,,,,,,,,,,,,,,,,,,,,110,114,,,,128,,,,102,,,,,,,,,,99,,,,,,123,127', +'131,93,96,101,105,109,113,116,119,122,126,130,92,95,100,104,108,112', +'115,118,121,125,129,91,94,98,103,107,111,,117,120,124,97,,106,,,,,,', +',,,,,,,,,,,,,,,,110,114,,,,128,,,,102,,,,,,,,,,99,,,,,,123,127,131,93', +'96,101,105,109,113,116,119,122,126,130,92,95,100,104,108,112,115,118', +'121,125,129,91,94,98,103,107,111,,117,120,124,97,,106,,,,,,,,,,,,,,', +',,,,,,,,110,114,,,,128,,,,102,,,,,,,,,,99,,,,,,123,127,131,93,96,101', +'105,109,113,116,119,122,126,130,92,95,100,104,108,112,115,118,121,125', +'129,91,94,98,103,107,111,,117,120,124,97,,106,,,,,,,,,,,,,,,,,,,,,,', +'110,114,,,,128,,,,102,,,,,,,,,,99,,,,,,123,127,131,93,96,101,105,109', +'113,116,119,122,126,130,92,95,100,104,108,112,115,118,121,125,129,91', +'94,98,103,107,111,,117,120,124,97,,106,,,,,,,,,,,,,,,,,,,,,,,110,114', +',,,128,,,,102,,,,,,,,26,,99,,,,,,123,127,131,93,96,101,105,109,113,116', +'119,122,126,130,92,95,100,104,108,112,115,118,121,125,129,91,94,98,103', +'107,111,,117,120,124,97,,106,,,,,,,,,,,,,,,,,,,,,,,110,114,,,,128,,', +',102,,,,,,,,,,99,,,,,,123,127,131,93,96,101,105,109,113,116,119,122', +'126,130,92,95,100,104,108,112,115,118,121,125,129,91,94,98,103,107,111', +',117,120,124,97,,106,,,,,,,,,,,,,,,,,,,,,,,110,114,,,,128,,,,102,,,', +',,,,,,99,,,,,,123,127,131,93,96,101,105,109,113,116,119,122,126,130', +'92,95,100,104,108,112,115,118,121,125,129,91,94,98,103,107,111,,117', +'120,124,97,,106,,,,,,,,,,,,,,,,,,,,,,,110,114,,,,128,,,,102,,,,,,,,239', +',99,,,,,,123,127,131,93,96,101,105,109,113,116,119,122,126,130,92,95', +'100,104,108,112,115,118,121,125,129,91,94,98,103,107,111,,117,120,124', +'97,,106,,,,,,,,,,,,,,,,,,,,,,,110,114,,,,128,,,,102,,,,,,,,26,,99,,', +',,,123,127,131,93,96,101,105,109,113,116,119,122,126,130,92,95,100,104', +'108,112,115,118,121,125,129,91,94,98,103,107,111,,117,120,124,97,,106', +',,,,,,,,,,,,,,,,,,,,,,110,114,,,,128,,,,102,,,,,,,,,,99,,,,,,123,127', +'131,93,96,101,105,109,113,116,119,122,126,130,92,95,100,104,108,112', +'115,118,121,125,129,91,94,98,103,107,111,,117,120,124,110,114,,,,,,', +',102,,,,,,,,,,99,,,,,,123,127,131,93,96,101,105,109,113,116,119,122', +'126,130,92,95,100,104,108,112,115,118,121,125,129,91,94,98,103,107,111', +',117,120,124,110,114,,,,,,,,102,,,,,,,,,,99,,,,,,123,127,131,93,96,101', +'105,109,113,116,119,122,126,130,92,95,100,104,108,112,115,118,121,125', +'129,91,94,98,103,107,111,110,114,,,,,,,,102,,,,,,,,,,99,,,,,,123,127', +'131,93,96,101,105,109,113,116,119,122,126,130,92,95,100,104,108,112', +'115,118,121,125,129,91,94,98,103,107,111,110,114,,,,,,,,102,,,,,,,,', +',99,,,,,,123,127,131,93,96,101,105,109,113,116,119,122,126,130,92,95', +'100,104,108,112,115,118,121,125,129,91,94,98,103,107,111,110,114,,,', +',,,,102,,,,,,,,,,99,,,,,,123,127,131,93,96,101,105,109,113,116,119,122', +'126,130,92,95,100,104,108,112,115,118,121,125,129,91,94,98,103,107,111', +'110,114,,,,,,,,102,,,,,,,,,,99,,,,,,123,127,131,93,96,101,105,109,113', +'116,119,122,126,130,92,95,100,104,108,112,115,118,121,125,129,91,94', +'98,103,107,111,114,,,,,,,,102,,,,,,,,,,99,,,,,,123,127,131,93,96,101', +'105,109,113,116,119,122,126,130,92,95,100,104,108,112,115,118,121,125', +'129,91,94,98,103,107,111,114,,,,,,,,102,,,,,,,,,,99,,,,,,123,127,131', +'93,96,101,105,109,113,116,119,122,126,130,92,95,100,104,108,112,115', +'118,121,125,129,91,94,98,103,107,111,114,,,,,,,,102,,,,,,,,,,99,,,,', +',123,127,131,93,96,101,105,109,113,116,119,122,126,130,92,95,100,104', +'108,112,115,118,121,125,129,91,94,98,103,107,111,114,,,,,,,,102,,,,', +',,,,,99,,,,,,123,127,131,93,96,101,105,109,113,116,119,122,126,130,92', +'95,100,104,108,112,115,118,121,125,129,91,94,98,103,107,111,114,,,,', +',,,102,,,,,,,,,,99,,,,,,123,127,131,93,96,101,105,109,113,116,119,122', +'126,130,92,95,100,104,108,112,115,118,121,125,129,91,94,98,103,107,111', +'102,,,,,,,,,,99,,,,,,123,127,131,93,96,101,105,109,113,116,119,122,126', +'130,92,95,100,104,108,112,115,118,121,125,129,91,94,98,103,107,102,', +',,,,,,,,99,,,,,,123,127,131,93,96,101,105,109,113,116,119,122,126,130', +'92,95,100,104,108,112,115,118,121,125,129,91,94,98,103,107,102,,,,,', +',,,,99,,,,,,123,127,131,93,96,101,105,109,113,116,119,122,126,130,92', +'95,100,104,108,112,115,118,121,125,129,91,94,98,103,107,99,,,,,,123', +'127,131,93,96,101,105,109,113,116,119,122,126,130,92,95,100,104,108', +'112,115,118,121,125,129,91,94,98,103,107,99,,,,,,123,127,131,93,96,101', +'105,109,113,116,119,122,126,130,92,95,100,104,108,112,115,118,121,125', +'129,91,94,98,103,107,99,,,,,,123,127,131,93,96,101,105,109,113,116,119', +'122,126,130,92,95,100,104,108,112,115,118,121,125,129,91,94,98,103,107', +'99,,,,,,123,127,131,93,96,101,105,109,113,116,119,122,126,130,92,95', +'100,104,108,112,115,118,121,125,129,91,94,98,103,107,99,,,,,,123,127', +'131,93,96,101,105,109,113,116,119,122,126,130,92,95,100,104,108,112', +'115,118,121,125,129,91,94,98,103,107' ] + racc_action_table = arr = Array.new(9713, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -357,353 +347,343 @@ def on_error(error_token_id, error_value, value_stack) end clist = [ -'87,290,87,1,1,1,1,1,1,1,1,1,1,257,174,117,192,192,189,295,246,257,174', -'1,1,87,87,295,246,202,87,192,88,88,87,202,202,139,1,144,157,1,1,140', -'273,87,157,157,290,257,174,87,87,87,87,87,87,87,87,87,87,87,87,87,87', -'87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,144,87,87,87,241', -'241,242,242,142,1,261,1,101,1,87,101,101,101,101,101,101,101,101,101', -'101,171,76,76,101,101,101,101,273,273,101,101,101,101,78,73,275,148', -'101,101,183,101,78,101,101,175,101,263,101,101,101,41,173,175,2,101', -'101,101,101,101,101,95,2,71,71,101,38,275,212,212,78,184,93,78,253,275', -'34,34,241,275,242,175,241,150,242,77,77,29,29,91,2,40,40,2,101,101,173', -'173,173,101,76,101,152,101,76,152,152,152,152,152,152,152,152,152,152', -'40,93,93,152,152,152,152,96,96,152,152,152,152,252,175,175,179,152,152', -'244,152,293,152,152,81,152,71,152,152,152,71,166,300,300,152,152,152', -'152,152,152,160,276,276,198,152,40,160,160,77,198,198,32,77,82,40,37', -'37,21,40,37,179,179,179,244,244,244,270,270,179,10,185,244,3,152,152', -'166,166,166,152,166,152,301,152,302,301,301,301,301,301,301,301,301', -'301,301,216,195,121,301,301,301,301,195,195,301,301,301,301,80,80,80', -',301,301,80,301,,301,301,162,301,163,301,301,301,162,162,163,163,301', -'301,301,301,301,301,223,,,,301,,223,223,223,223,223,223,223,223,223', -'223,223,223,223,223,223,223,223,223,223,223,223,,,164,,,,301,301,164', -'164,,301,,301,149,301,,149,149,149,149,149,149,149,149,149,149,,89,', -'149,149,149,149,89,89,149,149,149,149,,,,,149,149,,149,,149,149,158', -'149,,149,149,149,158,158,,,149,149,149,149,149,149,220,,,,149,,220,220', -'220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220', -'220,220,,,,,,,149,149,,,,149,,149,8,149,,8,8,8,8,8,8,8,8,8,8,,,,8,8', -'8,8,,,8,8,8,8,,,,,8,8,,8,,8,8,,8,,8,8,8,,,,,8,8,8,8,8,8,214,,,,8,,214', -'214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214', -'214,214,214,,,,,,,8,8,,,,8,,8,9,8,,9,9,9,9,9,9,9,9,9,9,,,,9,9,9,9,,', -'9,9,9,9,,,,,9,9,,9,,9,9,,9,,9,9,9,,,,,9,9,9,9,9,9,226,,,,9,,226,226', -'226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226', -'226,226,,,,,,,9,9,,,,9,,9,167,9,,167,167,167,167,167,167,167,167,167', -'167,,,,167,167,167,167,,,167,167,167,167,,,,,167,167,,167,,167,167,', -'167,,167,167,167,,,,,167,167,167,167,167,167,230,,,,167,,230,230,230', -'230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230', -'230,,,,,,,167,167,,,,167,,167,13,167,,13,13,13,13,13,13,13,13,13,13', -',,,13,13,13,13,,,13,13,13,13,,,,,13,13,,13,,13,13,,13,,13,13,13,,,,', -'13,13,13,13,13,13,193,,,,13,,193,193,193,193,193,193,193,193,193,193', -'193,193,193,193,193,193,193,193,193,193,193,,,,,,,13,13,,,,13,,13,17', -'13,,17,17,17,17,17,17,17,17,17,17,,,,17,17,17,17,,,17,17,17,17,,,,,17', -'17,,17,,17,17,,17,,17,17,17,,,,,17,17,17,17,17,17,210,,,,17,,210,210', +'78,138,78,99,99,99,99,99,99,99,99,99,99,185,185,83,99,99,99,99,293,239', +'99,99,99,78,78,185,293,239,78,99,34,99,78,99,99,256,99,254,99,99,288', +'138,78,37,99,99,99,99,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78', +'78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,266,78,78,78,99,99,235', +'235,288,99,247,99,98,99,78,98,98,98,98,98,98,98,98,98,98,164,66,66,98', +'98,98,98,172,168,98,98,98,98,280,169,268,246,98,98,30,98,280,98,98,249', +'98,245,98,98,247,247,247,249,98,98,98,98,98,98,176,248,29,29,98,266', +'266,268,71,248,280,86,172,172,172,268,90,90,268,235,172,249,111,235', +'75,75,142,234,234,141,36,36,135,98,98,76,76,248,98,66,98,124,98,66,124', +'124,124,124,124,124,124,124,124,124,36,86,86,124,124,124,124,25,25,124', +'124,124,124,133,249,249,132,124,124,237,124,291,124,124,177,124,89,124', +'124,178,160,165,72,124,124,124,124,124,124,165,72,182,154,124,36,269', +'269,75,154,154,234,75,16,36,234,33,33,36,76,33,299,299,76,237,237,237', +'206,165,72,165,72,237,124,124,160,160,160,124,160,124,5,124,10,5,5,5', +'5,5,5,5,5,5,5,301,191,2,5,5,5,5,191,191,5,5,5,5,167,167,167,110,5,5', +'167,5,,5,5,157,5,,5,5,,157,157,,5,5,5,5,5,5,203,263,263,,5,,203,203', +'203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203', +'203,203,205,205,188,82,82,,5,5,188,188,,5,,5,122,5,,122,122,122,122', +'122,122,122,122,122,122,,152,,122,122,122,122,152,152,122,122,122,122', +',,,,122,122,,122,,122,122,224,122,,122,122,,224,224,,122,122,122,122', +'122,122,222,,,,122,,222,222,222,222,222,222,222,222,222,222,222,222', +'222,222,222,222,222,222,222,222,222,,,156,,,,122,122,156,156,,122,,122', +'8,122,,8,8,8,8,8,8,8,8,8,8,,150,,8,8,8,8,150,150,8,8,8,8,,,,,8,8,,8', +',8,8,151,8,,8,8,,151,151,,8,8,8,8,8,8,216,,,,8,,216,216,216,216,216', +'216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,,,80', +',,,8,8,80,80,,8,,8,9,8,,9,9,9,9,9,9,9,9,9,9,,,,9,9,9,9,,,9,9,9,9,,,', +',9,9,,9,,9,9,,9,,9,9,,,,,9,9,9,9,9,9,213,,,,9,,213,213,213,213,213,213', +'213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,,,,,,,9', +'9,,,,9,,9,300,9,,300,300,300,300,300,300,300,300,300,300,,,,300,300', +'300,300,,,300,300,300,300,,,,,300,300,,300,,300,300,,300,,300,300,,', +',,300,300,300,300,300,300,199,,,,300,,199,199,199,199,199,199,199,199', +'199,199,199,199,199,199,199,199,199,199,199,199,199,,,,,,,300,300,,', +',300,,300,121,300,,121,121,121,121,121,121,121,121,121,121,,,,121,121', +'121,121,,,121,121,121,121,,,,,121,121,,121,,121,121,,121,,121,121,,', +',,121,121,121,121,121,121,207,,,,121,,207,207,207,207,207,207,207,207', +'207,207,207,207,207,207,207,207,207,207,207,207,207,,,,,,,121,121,,', +',121,,121,17,121,,17,17,17,17,17,17,17,17,17,17,,,,17,17,17,17,,,17', +'17,17,17,,,,,17,17,,17,,17,17,,17,,17,17,,,,,17,17,17,17,17,17,219,', +',,17,,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219', +'219,219,219,219,219,,,,,,,17,17,,,,17,,17,120,17,,120,120,120,120,120', +'120,120,120,120,120,,,,120,120,120,120,,,120,120,120,120,,,,,120,120', +',120,,120,120,,120,,120,120,,,,,120,120,120,120,120,120,210,,,,120,', '210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210', -'210,210,,,,,,,17,17,,,,17,,17,177,17,,177,177,177,177,177,177,177,177', -'177,177,,,,177,177,177,177,,,177,177,177,177,,,,,177,177,,177,,177,177', -',177,,177,177,177,,,,,177,177,177,177,177,177,218,,,,177,,218,218,218', -'218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218', -'218,,,,,,,177,177,,,,177,,177,178,177,,178,178,178,178,178,178,178,178', -'178,178,,,,178,178,178,178,,,178,178,178,178,,,,,178,178,,178,,178,178', -',178,,178,178,178,,,,,178,178,178,178,178,178,197,,,,178,,197,197,197', -'197,197,197,197,197,197,197,197,197,197,219,,,,,,219,219,219,219,219', -'219,219,,178,178,,,,178,,178,30,178,,30,30,30,30,30,30,30,30,30,30,', -',,30,30,30,30,,,30,30,30,30,,,,,30,30,,30,,30,30,,30,,30,30,30,,30,', -',30,30,30,30,30,30,194,,,,30,,194,194,194,194,194,194,194,194,194,194', -'194,194,194,221,,,,,,221,221,221,221,221,221,221,,30,30,,,,30,,30,137', -'30,,137,137,137,137,137,137,137,137,137,137,,,,137,137,137,137,,,137', -'137,137,137,,,,,137,137,,137,,137,137,,137,,137,137,137,,,,,137,137', -'137,137,137,137,206,,,,137,,206,206,206,206,206,206,206,206,206,206', -'206,206,206,215,,,,,,215,215,215,215,215,215,215,,137,137,,,,137,,137', -'136,137,,136,136,136,136,136,136,136,136,136,136,,,,136,136,136,136', -',,136,136,136,136,,,,,136,136,,136,,136,136,,136,,136,136,136,,,,,136', -'136,136,136,136,136,201,,,,136,,201,201,201,201,201,201,201,201,201', -'201,201,201,201,207,,,,,,207,207,207,207,207,,,,136,136,,,,136,,136', -'135,136,,135,135,135,135,135,135,135,135,135,135,,,,135,135,135,135', -',,135,135,135,135,,,,,135,135,,135,,135,135,,135,,135,135,135,,,,,135', -'135,135,135,135,135,231,,,,135,,231,231,231,231,231,231,231,231,231', -'231,227,,,,,,227,227,227,227,227,227,227,227,227,227,,135,135,,,,135', -',135,282,135,,282,282,282,282,282,282,282,282,282,282,,,,282,282,282', -'282,,,282,282,282,282,,,,,282,282,,282,,282,282,,282,,282,282,282,,', -',,282,282,282,282,282,282,224,,,,282,,224,224,224,224,224,224,224,224', -'224,224,211,,,,,,211,211,211,211,211,,282,,,,,282,282,,,,282,,282,134', -'282,,134,134,134,134,134,134,134,134,134,134,,,,134,134,134,134,,,134', -'134,134,134,,,,,134,134,,134,,134,134,,134,,134,134,134,,,,,134,134', -'134,134,134,134,,,,,134,,,,,,,,,,,,,,,,,,,,,,,,,,,,,134,134,,,,134,', -'134,280,134,,280,280,280,280,280,280,280,280,280,280,,,,280,280,280', -'280,,,280,280,280,280,,,,,280,280,,280,,280,280,,280,,280,280,280,,', -',,280,280,280,280,280,280,,,,,280,,,,,,,,,,,,,,,,,,,,,,,,,,,,,280,280', -',,,280,,280,279,280,,279,279,279,279,279,279,279,279,279,279,,,,279', -'279,279,279,,,279,279,279,279,,,,,279,279,,279,,279,279,,279,,279,279', -'279,,,,,279,279,279,279,279,279,,,,,279,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -'279,279,,,,279,,279,43,279,,43,43,43,43,43,43,43,43,43,43,,,,43,43,43', -'43,,,43,43,43,43,,,,,43,43,,43,,43,43,,43,,43,43,43,,,,,43,43,43,43', -'43,43,,,,,43,,,,,,,,,,,,,,,,,,,,,,,,,,,,,43,43,,,,43,,43,47,43,,47,47', -'47,47,47,47,47,47,47,47,,,,47,47,47,47,,,47,47,47,47,,,,,47,47,,47,', -'47,47,,47,,47,47,47,,,,,47,47,47,47,47,47,,,,,47,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,47,47,,,,47,,47,51,47,,51,51,51,51,51,51,51,51,51,51,,,,51', -'51,51,51,,,51,51,51,51,,,,,51,51,,51,,51,51,,51,,51,51,51,,,,,51,51', -'51,51,51,51,,,,,51,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,51,,,,51,,51,53,51', -',53,53,53,53,53,53,53,53,53,53,,,,53,53,53,53,,,53,53,53,53,,,,,53,53', -',53,,53,53,,53,,53,53,53,,,,,53,53,53,53,53,53,,,,,53,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,53,53,,,,53,,53,57,53,,57,57,57,57,57,57,57,57,57,57,', -',,57,57,57,57,,,57,57,57,57,,,,,57,57,,57,,57,57,,57,,57,57,57,,,,,57', -'57,57,57,57,57,,,,,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,57,57,,,,57,,57,59', -'57,,59,59,59,59,59,59,59,59,59,59,,,,59,59,59,59,,,59,59,59,59,,,,,59', -'59,,59,,59,59,,59,,59,59,59,,,,,59,59,59,59,59,59,,,,,59,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,59,59,,,,59,,59,63,59,,63,63,63,63,63,63,63,63,63,63', -',,,63,63,63,63,,,63,63,63,63,,,,,63,63,,63,,63,63,,63,,63,63,63,,,,', -'63,63,63,63,63,63,,,,,63,,,,,,,,,,,,,,,,,,,,,,,,,,,,,63,63,,,,63,,63', -'67,63,,67,67,67,67,67,67,67,67,67,67,,,,67,67,67,67,,,67,67,67,67,,', -',,67,67,,67,,67,67,,67,,67,67,67,,,,,67,67,67,67,67,67,,,,,67,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,67,67,,,,67,,67,68,67,,68,68,68,68,68,68,68,68', -'68,68,,,,68,68,68,68,,,68,68,68,68,,,,,68,68,,68,,68,68,,68,,68,68,68', -',,,,68,68,68,68,68,68,,,,,68,,,,,,,,,,,,,,,,,,,,,,,,,,,,,68,68,,,,68', -',68,70,68,,70,70,70,70,70,70,70,70,70,70,,,,70,70,70,70,,,70,70,70,70', -',,,,70,70,,70,,70,70,,70,,70,70,70,70,,,,70,70,70,70,70,70,,,,,70,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,70,70,,,,70,,70,132,70,,132,132,132,132,132', -'132,132,132,132,132,,,,132,132,132,132,,,132,132,132,132,,,,,132,132', -',132,,132,132,,132,,132,132,132,,,,,132,132,132,132,132,132,,,,,132', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,132,132,,,,132,,132,274,132,,274,274,274', -'274,274,274,274,274,274,274,,,,274,274,274,274,,,274,274,274,274,,,', -',274,274,,274,,274,274,,274,,274,274,274,,,,,274,274,274,274,274,274', -',,,,274,,,,,,,,,,,,,,,,,,,,,,,,,,,,,274,274,,,,274,,274,74,274,,74,74', -'74,74,74,74,74,74,74,74,,,,74,74,74,74,,,74,74,74,74,,,,,74,74,,74,', -'74,74,,74,,74,74,74,,,,,74,74,74,74,74,74,,,,,74,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,74,74,,,,74,,74,269,74,,269,269,269,269,269,269,269,269,269', -'269,,,,269,269,269,269,,,269,269,269,269,,,,,269,269,,269,,269,269,', -'269,,269,269,269,,,,,269,269,269,269,269,269,,,,,269,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,269,269,,,,269,,269,268,269,,268,268,268,268,268,268,268', -'268,268,268,,,,268,268,268,268,,,268,268,268,268,,,,,268,268,,268,,268', -'268,,268,,268,268,268,,,,,268,268,268,268,268,268,,,,,268,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,268,268,,,,268,,268,131,268,,131,131,131,131,131,131', -'131,131,131,131,,,,131,131,131,131,,,131,131,131,131,,,,,131,131,,131', -',131,131,,131,,131,131,131,,,,,131,131,131,131,131,131,,,,,131,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,131,131,,,,131,,131,130,131,,130,130,130,130', -'130,130,130,130,130,130,,,,130,130,130,130,,,130,130,130,130,,,,,130', -'130,,130,,130,130,,130,,130,130,130,,,,,130,130,130,130,130,130,,,,', -'130,,,,,,,,,,,,,,,,,,,,,,,,,,,,,130,130,,,,130,,130,129,130,,129,129', -'129,129,129,129,129,129,129,129,,,,129,129,129,129,,,129,129,129,129', -',,,,129,129,,129,,129,129,,129,,129,129,129,,,,,129,129,129,129,129', -'129,,,,,129,,,,,,,,,,,,,,,,,,,,,,,,,,,,,129,129,,,,129,,129,249,129', -',249,249,249,249,249,249,249,249,249,249,,,,249,249,249,249,,,249,249', -'249,249,,,,,249,249,,249,,249,249,,249,,249,249,249,249,,,,249,249,249', -'249,249,249,,,,,249,,,,,,,,,,,,,,,,,,,,,,,,,,,,,249,249,249,249,,249', -',249,84,249,,84,84,84,84,84,84,84,84,84,84,,,,84,84,84,84,,,84,84,84', -'84,,,,,84,84,,84,,84,84,,84,,84,84,84,84,,,,84,84,84,84,84,84,,,,,84', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,84,84,,,,84,,84,248,84,,248,248,248,248', -'248,248,248,248,248,248,,,,248,248,248,248,,,248,248,248,248,,,,,248', -'248,,248,,248,248,,248,,248,248,248,,,,,248,248,248,248,248,248,,,,', -'248,,,,,,,,,,,,,,,,,,,,,,,,,,,,,248,248,,,,248,,248,128,248,,128,128', -'128,128,128,128,128,128,128,128,,,,128,128,128,128,,,128,128,128,128', -',,,,128,128,,128,,128,128,,128,,128,128,128,,,,,128,128,128,128,128', -'128,,,,,128,,,,,,,,,,,,,,,,,,,,,,,,,,,,,128,128,,,,128,,128,0,128,,0', -'0,0,0,0,0,0,0,0,0,,,,0,0,0,0,,,0,0,0,0,,,,,0,0,,0,,0,0,,0,,0,0,0,0,', -',,0,0,0,0,0,0,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,,0,127,0', -',127,127,127,127,127,127,127,127,127,127,,,,127,127,127,127,,,127,127', -'127,127,,,,,127,127,,127,,127,127,,127,,127,127,127,,,,,127,127,127', -'127,127,127,,,,,127,,,,,,,,,,,,,,,,,,,,,,,,,,,,,127,127,,,,127,,127', -'126,127,,126,126,126,126,126,126,126,126,126,126,,,,126,126,126,126', -',,126,126,126,126,,,,,126,126,,126,,126,126,,126,,126,126,126,,,,,126', -'126,126,126,126,126,,,,,126,,,,,,,,,,,,,,,,,,,,,,,,,,,,,126,126,,,,126', -',126,125,126,,125,125,125,125,125,125,125,125,125,125,,,,125,125,125', -'125,,,125,125,125,125,,,,,125,125,,125,,125,125,,125,,125,125,125,,', -',,125,125,125,125,125,125,,,,,125,,,,,,,,,,,,,,,,,,,,,,,,,,,,,125,125', -',,,125,,125,124,125,,124,124,124,124,124,124,124,124,124,124,,,,124', -'124,124,124,,,124,124,124,124,,,,,124,124,,124,,124,124,,124,,124,124', -'124,,,,,124,124,124,124,124,124,,,,,124,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -'124,124,,,,124,,124,92,124,,92,92,92,92,92,92,92,92,92,92,,,,92,92,92', -'92,,,92,92,92,92,,,,,92,92,,92,,92,92,,92,,92,92,92,,,,,92,92,92,92', -'92,92,,,,,92,,,,,,,,,,,,,,,,,,,,,,,,,,,,,92,92,,,,92,,92,123,92,,123', -'123,123,123,123,123,123,123,123,123,,,,123,123,123,123,,,123,123,123', -'123,,,,,123,123,,123,,123,123,,123,,123,123,123,,,,,123,123,123,123', -'123,123,,,,,123,,,,,,,,,,,,,,,,,,,,,,,,,,,,,123,123,,,,123,,123,191', -'123,,191,191,191,191,191,191,191,191,191,191,,,,191,191,191,191,,,191', -'191,191,191,,,,,191,191,,191,,191,191,,191,,191,191,191,,,,,191,191', -'191,191,191,191,,,,,191,,,,,,,,,,,,,,,,,,,,,,,,,,,,,191,191,,,,191,', -'191,190,191,,190,190,190,190,190,190,190,190,190,190,,,,190,190,190', -'190,,,190,190,190,190,,,,,190,190,,190,,190,190,,190,,190,190,190,,', -',,190,190,190,190,190,190,,,,,190,,,,,,,,,,,,,,,,,,,,,,,,,,,,,190,190', -',,,190,,190,98,190,,98,98,98,98,98,98,98,98,98,98,,,,98,98,98,98,,,98', -'98,98,98,,,,,98,98,,98,,98,98,,98,,98,98,98,,,,,98,98,98,98,98,98,,', -',,98,,,,,,,,,,,,,,,,,,,,,,,,,,,,,98,98,,,,98,,98,99,98,,99,99,99,99', -'99,99,99,99,99,99,,,,99,99,99,99,,,99,99,99,99,,,,,99,99,,99,,99,99', -',99,,99,99,99,,,,,99,99,99,99,99,99,,,,,99,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,99,99,,,,99,,99,100,99,,100,100,100,100,100,100,100,100,100,100,', -',,100,100,100,100,,,100,100,100,100,,,,,100,100,,100,,100,100,,100,', -'100,100,100,,,,,100,100,100,100,100,100,,,,,100,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,100,100,,,,100,,100,154,100,,154,154,154,154,154,154,154,154', -'154,154,,,,154,154,154,154,,,154,154,154,154,,,,,154,154,,154,,154,154', -',154,,154,154,154,154,,,,154,154,154,154,154,154,,,,,154,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,154,154,,,,154,,154,102,154,,102,102,102,102,102,102', -'102,102,102,102,,,,102,102,102,102,,,102,102,102,102,,,,,102,102,,102', -',102,102,,102,,102,102,102,,,,,102,102,102,102,102,102,,,,,102,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,102,102,,,,102,,102,103,102,,103,103,103,103', -'103,103,103,103,103,103,,,,103,103,103,103,,,103,103,103,103,,,,,103', -'103,,103,,103,103,,103,,103,103,103,,,,,103,103,103,103,103,103,,,,', -'103,,,,,,,,,,,,,,,,,,,,,,,,,,,,,103,103,,,,103,,103,104,103,,104,104', -'104,104,104,104,104,104,104,104,,,,104,104,104,104,,,104,104,104,104', -',,,,104,104,,104,,104,104,,104,,104,104,104,,,,,104,104,104,104,104', -'104,,,,,104,,,,,,,,,,,,,,,,,,,,,,,,,,,,,104,104,,,,104,,104,105,104', -',105,105,105,105,105,105,105,105,105,105,,,,105,105,105,105,,,105,105', -'105,105,,,,,105,105,,105,,105,105,,105,,105,105,105,,,,,105,105,105', +'210,210,210,210,,,,,,,120,120,,,,120,,120,26,120,,26,26,26,26,26,26', +'26,26,26,26,,,,26,26,26,26,,,26,26,26,26,,,,,26,26,,26,,26,26,,26,,26', +'26,,26,,,26,26,26,26,26,26,190,,,,26,,190,190,190,190,190,190,190,190', +'190,190,190,190,190,208,,,,,,208,208,208,208,208,208,208,,26,26,,,,26', +',26,275,26,,275,275,275,275,275,275,275,275,275,275,,,,275,275,275,275', +',,275,275,275,275,,,,,275,275,,275,,275,275,,275,,275,275,,,,,275,275', +'275,275,275,275,187,,,,275,,187,187,187,187,187,187,187,187,187,187', +'187,187,187,,,,,,,,,,275,,,,,275,275,,,,275,,275,273,275,,273,273,273', +'273,273,273,273,273,273,273,,,,273,273,273,273,,,273,273,273,273,,,', +',273,273,,273,,273,273,,273,,273,273,,,,,273,273,273,273,273,273,223', +',,,273,,223,223,223,223,223,223,223,223,223,223,223,223,223,211,,,,', +',211,211,211,211,211,211,211,,273,273,,,,273,,273,272,273,,272,272,272', +'272,272,272,272,272,272,272,,,,272,272,272,272,,,272,272,272,272,,,', +',272,272,,272,,272,272,,272,,272,272,,,,,272,272,272,272,272,272,195', +',,,272,,195,195,195,195,195,195,195,195,195,195,195,195,195,204,,,,', +',204,204,204,204,204,204,204,,272,272,,,,272,,272,267,272,,267,267,267', +'267,267,267,267,267,267,267,,,,267,267,267,267,,,267,267,267,267,,,', +',267,267,,267,,267,267,,267,,267,267,,,,,267,267,267,267,267,267,217', +',,,267,,217,217,217,217,217,217,217,217,217,217,220,,,,,,220,220,220', +'220,220,220,220,220,220,220,,267,267,,,,267,,267,262,267,,262,262,262', +'262,262,262,262,262,262,262,,,,262,262,262,262,,,262,262,262,262,,,', +',262,262,,262,,262,262,,262,,262,262,,,,,262,262,262,262,262,262,214', +',,,262,,214,214,214,214,214,214,214,214,214,214,200,,,,,196,200,200', +'200,200,200,196,196,196,196,196,,262,262,,,,262,,262,261,262,,261,261', +'261,261,261,261,261,261,261,261,,,,261,261,261,261,,,261,261,261,261', +',,,,261,261,,261,,261,261,,261,,261,261,,,,,261,261,261,261,261,261', +',,,,261,,,,,,,,,,,,,,,,,,,,,,,,,,,,,261,261,,,,261,,261,252,261,,252', +'252,252,252,252,252,252,252,252,252,,,,252,252,252,252,,,252,252,252', +'252,,,,,252,252,,252,,252,252,,252,,252,252,,,,,252,252,252,252,252', +'252,,,,,252,,,,,,,,,,,,,,,,,,,,,,,,,,,,,252,252,,,,252,,252,40,252,', +'40,40,40,40,40,40,40,40,40,40,,,,40,40,40,40,,,40,40,40,40,,,,,40,40', +',40,,40,40,,40,,40,40,,,,,40,40,40,40,40,40,,,,,40,,,,,,,,,,,,,,,,,', +',,,,,,,,,,,40,40,,,,40,,40,44,40,,44,44,44,44,44,44,44,44,44,44,,,,44', +'44,44,44,,,44,44,44,44,,,,,44,44,,44,,44,44,,44,,44,44,,,,,44,44,44', +'44,44,44,,,,,44,,,,,,,,,,,,,,,,,,,,,,,,,,,,,44,44,,,,44,,44,48,44,,48', +'48,48,48,48,48,48,48,48,48,,,,48,48,48,48,,,48,48,48,48,,,,,48,48,,48', +',48,48,,48,,48,48,,,,,48,48,48,48,48,48,,,,,48,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,48,48,,,,48,,48,52,48,,52,52,52,52,52,52,52,52,52,52,,,,52,52', +'52,52,,,52,52,52,52,,,,,52,52,,52,,52,52,,52,,52,52,,,,,52,52,52,52', +'52,52,,,,,52,,,,,,,,,,,,,,,,,,,,,,,,,,,,,52,52,,,,52,,52,54,52,,54,54', +'54,54,54,54,54,54,54,54,,,,54,54,54,54,,,54,54,54,54,,,,,54,54,,54,', +'54,54,,54,,54,54,,,,,54,54,54,54,54,54,,,,,54,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,54,54,,,,54,,54,58,54,,58,58,58,58,58,58,58,58,58,58,,,,58,58', +'58,58,,,58,58,58,58,,,,,58,58,,58,,58,58,,58,,58,58,,,,,58,58,58,58', +'58,58,,,,,58,,,,,,,,,,,,,,,,,,,,,,,,,,,,,58,58,,,,58,,58,60,58,,60,60', +'60,60,60,60,60,60,60,60,,,,60,60,60,60,,,60,60,60,60,,,,,60,60,,60,', +'60,60,,60,,60,60,,,,,60,60,60,60,60,60,,,,,60,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,60,60,,,,60,,60,64,60,,64,64,64,64,64,64,64,64,64,64,,,,64,64', +'64,64,,,64,64,64,64,,,,,64,64,,64,,64,64,,64,,64,64,,,,,64,64,64,64', +'64,64,,,,,64,,,,,,,,,,,,,,,,,,,,,,,,,,,,,64,64,,,,64,,64,251,64,,251', +'251,251,251,251,251,251,251,251,251,,,,251,251,251,251,,,251,251,251', +'251,,,,,251,251,,251,,251,251,,251,,251,251,,,,,251,251,251,251,251', +'251,,,,,251,,,,,,,,,,,,,,,,,,,,,,,,,,,,,251,251,,,,251,,251,67,251,', +'67,67,67,67,67,67,67,67,67,67,,,,67,67,67,67,,,67,67,67,67,,,,,67,67', +',67,,67,67,,67,,67,67,67,,,,67,67,67,67,67,67,,,,,67,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,67,67,,,,67,,67,68,67,,68,68,68,68,68,68,68,68,68,68,,', +',68,68,68,68,,,68,68,68,68,,,,,68,68,,68,,68,68,,68,,68,68,,,,,68,68', +'68,68,68,68,,,,,68,,,,,,,,,,,,,,,,,,,,,,,,,,,,,68,68,,,,68,,68,242,68', +',242,242,242,242,242,242,242,242,242,242,,,,242,242,242,242,,,242,242', +'242,242,,,,,242,242,,242,,242,242,,242,,242,242,242,,,,242,242,242,242', +'242,242,,,,,242,,,,,,,,,,,,,,,,,,,,,,,,,,,,,242,242,242,242,,242,,242', +'241,242,,241,241,241,241,241,241,241,241,241,241,,,,241,241,241,241', +',,241,241,241,241,,,,,241,241,,241,,241,241,,241,,241,241,,,,,241,241', +'241,241,241,241,,,,,241,,,,,,,,,,,,,,,,,,,,,,,,,,,,,241,241,,,,241,', +'241,73,241,,73,73,73,73,73,73,73,73,73,73,,,,73,73,73,73,,,73,73,73', +'73,,,,,73,73,,73,,73,73,,73,,73,73,,,,,73,73,73,73,73,73,,,,,73,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,73,73,,,,73,,73,119,73,,119,119,119,119,119', +'119,119,119,119,119,,,,119,119,119,119,,,119,119,119,119,,,,,119,119', +',119,,119,119,,119,,119,119,,,,,119,119,119,119,119,119,,,,,119,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,119,119,,,,119,,119,184,119,,184,184,184,184', +'184,184,184,184,184,184,,,,184,184,184,184,,,184,184,184,184,,,,,184', +'184,,184,,184,184,,184,,184,184,,,,,184,184,184,184,184,184,,,,,184', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,184,184,,,,184,,184,77,184,,77,77,77,77', +'77,77,77,77,77,77,,,,77,77,77,77,,,77,77,77,77,,,,,77,77,,77,,77,77', +',77,,77,77,77,,,,77,77,77,77,77,77,,,,,77,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,77,77,,,,77,,77,0,77,,0,0,0,0,0,0,0,0,0,0,,,,0,0,0,0,,,0,0,0,0,,,', +',0,0,,0,,0,0,,0,,0,0,0,,,,0,0,0,0,0,0,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,0,0,0,0,,0,,0,183,0,,183,183,183,183,183,183,183,183,183,183,,,', +'183,183,183,183,,,183,183,183,183,,,,,183,183,,183,,183,183,,183,,183', +'183,,,,,183,183,183,183,183,183,,,,,183,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +'183,183,,,,183,,183,161,183,,161,161,161,161,161,161,161,161,161,161', +',,,161,161,161,161,,,161,161,161,161,,,,,161,161,,161,,161,161,,161', +',161,161,,,,,161,161,161,161,161,161,,,,,161,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,161,161,,,,161,,161,146,161,,146,146,146,146,146,146,146,146,146', +'146,,,,146,146,146,146,,,146,146,146,146,,,,,146,146,,146,,146,146,', +'146,,146,146,146,,,,146,146,146,146,146,146,,,,,146,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,146,146,,,,146,,146,144,146,,144,144,144,144,144,144,144', +'144,144,144,,,,144,144,144,144,,,144,144,144,144,,,,,144,144,,144,,144', +'144,,144,,144,144,,,,,144,144,144,144,144,144,,,,,144,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,144,144,,,,144,,144,118,144,,118,118,118,118,118,118,118', +'118,118,118,,,,118,118,118,118,,,118,118,118,118,,,,,118,118,,118,,118', +'118,,118,,118,118,,,,,118,118,118,118,118,118,,,,,118,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,118,118,,,,118,,118,140,118,,140,140,140,140,140,140,140', +'140,140,140,,,,140,140,140,140,,,140,140,140,140,,,,,140,140,,140,,140', +'140,,140,,140,140,,,,,140,140,140,140,140,140,,,,,140,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,140,140,,,,140,,140,85,140,,85,85,85,85,85,85,85,85,85', +'85,,,,85,85,85,85,,,85,85,85,85,,,,,85,85,,85,,85,85,,85,,85,85,,,,', +'85,85,85,85,85,85,,,,,85,,,,,,,,,,,,,,,,,,,,,,,,,,,,,85,85,,,,85,,85', +'131,85,,131,131,131,131,131,131,131,131,131,131,,,,131,131,131,131,', +',131,131,131,131,,,,,131,131,,131,,131,131,,131,,131,131,,,,,131,131', +'131,131,131,131,,,,,131,,,,,,,,,,,,,,,,,,,,,,,,,,,,,131,131,,,,131,', +'131,130,131,,130,130,130,130,130,130,130,130,130,130,,,,130,130,130', +'130,,,130,130,130,130,,,,,130,130,,130,,130,130,,130,,130,130,,,,,130', +'130,130,130,130,130,,,,,130,,,,,,,,,,,,,,,,,,,,,,,,,,,,,130,130,,,,130', +',130,129,130,,129,129,129,129,129,129,129,129,129,129,,,,129,129,129', +'129,,,129,129,129,129,,,,,129,129,,129,,129,129,,129,,129,129,,,,,129', +'129,129,129,129,129,,,,,129,,,,,,,,,,,,,,,,,,,,,,,,,,,,,129,129,,,,129', +',129,91,129,,91,91,91,91,91,91,91,91,91,91,,,,91,91,91,91,,,91,91,91', +'91,,,,,91,91,,91,,91,91,,91,,91,91,,,,,91,91,91,91,91,91,,,,,91,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,91,91,,,,91,,91,92,91,,92,92,92,92,92,92,92', +'92,92,92,,,,92,92,92,92,,,92,92,92,92,,,,,92,92,,92,,92,92,,92,,92,92', +',,,,92,92,92,92,92,92,,,,,92,,,,,,,,,,,,,,,,,,,,,,,,,,,,,92,92,,,,92', +',92,93,92,,93,93,93,93,93,93,93,93,93,93,,,,93,93,93,93,,,93,93,93,93', +',,,,93,93,,93,,93,93,,93,,93,93,,,,,93,93,93,93,93,93,,,,,93,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,93,93,,,,93,,93,94,93,,94,94,94,94,94,94,94,94', +'94,94,,,,94,94,94,94,,,94,94,94,94,,,,,94,94,,94,,94,94,,94,,94,94,', +',,,94,94,94,94,94,94,,,,,94,,,,,,,,,,,,,,,,,,,,,,,,,,,,,94,94,,,,94', +',94,95,94,,95,95,95,95,95,95,95,95,95,95,,,,95,95,95,95,,,95,95,95,95', +',,,,95,95,,95,,95,95,,95,,95,95,,,,,95,95,95,95,95,95,,,,,95,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,95,95,,,,95,,95,96,95,,96,96,96,96,96,96,96,96', +'96,96,,,,96,96,96,96,,,96,96,96,96,,,,,96,96,,96,,96,96,,96,,96,96,', +',,,96,96,96,96,96,96,,,,,96,,,,,,,,,,,,,,,,,,,,,,,,,,,,,96,96,,,,96', +',96,97,96,,97,97,97,97,97,97,97,97,97,97,,,,97,97,97,97,,,97,97,97,97', +',,,,97,97,,97,,97,97,,97,,97,97,,,,,97,97,97,97,97,97,,,,,97,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,97,97,,,,97,,97,125,97,,125,125,125,125,125,125', +'125,125,125,125,,,,125,125,125,125,,,125,125,125,125,,,,,125,125,,125', +',125,125,,125,,125,125,,,,,125,125,125,125,125,125,,,,,125,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,125,125,,,,125,,125,117,125,,117,117,117,117,117', +'117,117,117,117,117,,,,117,117,117,117,,,117,117,117,117,,,,,117,117', +',117,,117,117,,117,,117,117,,,,,117,117,117,117,117,117,,,,,117,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,117,117,,,,117,,117,100,117,,100,100,100,100', +'100,100,100,100,100,100,,,,100,100,100,100,,,100,100,100,100,,,,,100', +'100,,100,,100,100,,100,,100,100,,,,,100,100,100,100,100,100,,,,,100', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,100,100,,,,100,,100,101,100,,101,101,101', +'101,101,101,101,101,101,101,,,,101,101,101,101,,,101,101,101,101,,,', +',101,101,,101,,101,101,,101,,101,101,,,,,101,101,101,101,101,101,,,', +',101,,,,,,,,,,,,,,,,,,,,,,,,,,,,,101,101,,,,101,,101,102,101,,102,102', +'102,102,102,102,102,102,102,102,,,,102,102,102,102,,,102,102,102,102', +',,,,102,102,,102,,102,102,,102,,102,102,,,,,102,102,102,102,102,102', +',,,,102,,,,,,,,,,,,,,,,,,,,,,,,,,,,,102,102,,,,102,,102,103,102,,103', +'103,103,103,103,103,103,103,103,103,,,,103,103,103,103,,,103,103,103', +'103,,,,,103,103,,103,,103,103,,103,,103,103,,,,,103,103,103,103,103', +'103,,,,,103,,,,,,,,,,,,,,,,,,,,,,,,,,,,,103,103,,,,103,,103,116,103', +',116,116,116,116,116,116,116,116,116,116,,,,116,116,116,116,,,116,116', +'116,116,,,,,116,116,,116,,116,116,,116,,116,116,,,,,116,116,116,116', +'116,116,,,,,116,,,,,,,,,,,,,,,,,,,,,,,,,,,,,116,116,,,,116,,116,105', +'116,,105,105,105,105,105,105,105,105,105,105,,,,105,105,105,105,,,105', +'105,105,105,,,,,105,105,,105,,105,105,,105,,105,105,,,,,105,105,105', '105,105,105,,,,,105,,,,,,,,,,,,,,,,,,,,,,,,,,,,,105,105,,,,105,,105', '106,105,,106,106,106,106,106,106,106,106,106,106,,,,106,106,106,106', -',,106,106,106,106,,,,,106,106,,106,,106,106,,106,,106,106,106,,,,,106', -'106,106,106,106,106,,,,,106,,,,,,,,,,,,,,,,,,,,,,,,,,,,,106,106,,,,106', -',106,107,106,,107,107,107,107,107,107,107,107,107,107,,,,107,107,107', -'107,,,107,107,107,107,,,,,107,107,,107,,107,107,,107,,107,107,107,,', -',,107,107,107,107,107,107,,,,,107,,,,,,,,,,,,,,,,,,,,,,,,,,,,,107,107', -',,,107,,107,108,107,,108,108,108,108,108,108,108,108,108,108,,,,108', -'108,108,108,,,108,108,108,108,,,,,108,108,,108,,108,108,,108,,108,108', -'108,,,,,108,108,108,108,108,108,,,,,108,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -'108,108,,,,108,,108,109,108,,109,109,109,109,109,109,109,109,109,109', -',,,109,109,109,109,,,109,109,109,109,,,,,109,109,,109,,109,109,,109', -',109,109,109,,,,,109,109,109,109,109,109,,,,,109,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,109,109,,,,109,,109,119,109,,119,119,119,119,119,119,119,119', -'119,119,,,,119,119,119,119,,,119,119,119,119,,,,,119,119,,119,,119,119', -',119,,119,119,119,,,,,119,119,119,119,119,119,,,,,119,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,119,119,,,,119,,119,111,119,,111,111,111,111,111,111,111', -'111,111,111,,,,111,111,111,111,,,111,111,111,111,,,,,111,111,,111,,111', -'111,,111,,111,111,111,,,,,111,111,111,111,111,111,,,,,111,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,111,111,,,,111,,111,112,111,,112,112,112,112,112,112', -'112,112,112,112,,,,112,112,112,112,,,112,112,112,112,,,,,112,112,,112', -',112,112,,112,,112,112,112,,,,,112,112,112,112,112,112,,,,,112,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,112,112,,,,112,,112,113,112,,113,113,113,113', -'113,113,113,113,113,113,,,,113,113,113,113,,,113,113,113,113,,,,,113', -'113,,113,,113,113,,113,,113,113,113,,,,,113,113,113,113,113,113,,,,', -'113,,,,,,,,,,,,,,,,,,,,,,,,,,,,,113,113,,,,113,,113,114,113,,114,114', -'114,114,114,114,114,114,114,114,,,,114,114,114,114,,,114,114,114,114', -',,,,114,114,,114,,114,114,,114,,114,114,114,,,,,114,114,114,114,114', -'114,,,,,114,,,,,,,,,,,,,,,,,,,,,,,,,,,,,114,114,,,,114,,114,115,114', -',115,115,115,115,115,115,115,115,115,115,,,,115,115,115,115,,,115,115', -'115,115,,,,,115,115,,115,,115,115,,115,,115,115,115,,,,,115,115,115', -'115,115,115,,,,,115,,,,,,,,,,,,,,,,,,,,,,,,,,,,,115,115,,,,115,,115', -'116,115,,116,116,116,116,116,116,116,116,116,116,,,,116,116,116,116', -',,116,116,116,116,,,,,116,116,,116,,116,116,,116,,116,116,116,,,,,116', -'116,116,116,116,116,,,,,116,,,,,,,,,,,,,,,,,,,,,,,,,,,,,116,116,,,,116', -',116,120,116,,120,120,120,120,120,120,120,120,120,120,,,,120,120,120', -'120,,,120,120,120,120,,,,,120,120,,120,,120,120,,120,,120,120,120,,', -',,120,120,120,120,120,120,,,,,120,,,,,,,,,,,,,,,,,,,,,,,,,,,,,120,120', -',,,120,,120,118,120,,118,118,118,118,118,118,118,118,118,118,,,,118', -'118,118,118,,,118,118,118,118,,,,,118,118,,118,,118,118,,118,,118,118', -'118,,,,,118,118,118,118,118,118,,,,,118,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -'118,118,,,,118,,118,122,118,,122,122,122,122,122,122,122,122,122,122', -',,,122,122,122,122,,,122,122,122,122,,,,,122,122,,122,,122,122,,122', -',122,122,122,,,,,122,122,122,122,122,122,,304,,304,122,,,,,,,,,,,,,', -',,,,,,,,304,304,,,,304,,122,122,304,,,122,,122,,122,,,,304,,,,,,304', -'304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304', -'304,304,304,304,304,304,304,304,304,304,304,304,304,,304,304,304,,,', -',,,304,110,110,110,110,110,110,110,110,110,110,,,,110,110,110,110,,', -'110,110,110,,,,,,,110,,110,,110,110,,110,,110,110,110,,,,,110,110,110', -'110,,,,,,,,,151,151,151,151,151,151,151,151,151,151,,,,,,,,,,,151,151', -',,,,,110,110,,,,110,,110,151,110,,151,151,,,,,,,,,,,,,,,,,,,,,,5,5,5', -'5,5,5,5,5,5,5,,,,5,5,5,5,,,5,5,5,5,,,,,151,5,151,5,151,5,5,,5,,5,5,5', -',,,,5,5,5,5,5,5,,299,,299,5,,,,,,,,,,,,,,,,,,,,,,299,299,,,,299,,5,5', -'299,,,5,,5,,5,,,,299,,,,,,299,299,299,299,299,299,299,299,299,299,299', -'299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299', -'299,299,299,,299,299,299,,,,,,,299,298,298,298,298,298,298,298,298,298', -'298,,,,298,298,298,298,,,298,298,298,,,,,,,298,,298,,298,298,,298,,298', -'298,298,,,,,298,298,298,298,298,298,,239,,239,298,,,,,,,,,,,,,,,,,,', -',,,239,239,,,,239,,298,298,239,,,298,,298,,298,,,,239,,,,,,239,239,239', -'239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239', -'239,239,239,239,239,239,239,239,239,239,239,,239,239,239,281,,281,,', -',239,,,,,,,,,,,,,,,,,,,281,281,,,,281,,,,281,,,,,,,,,,,281,,,,,,281', -'281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281', -'281,281,281,281,281,281,281,281,281,281,281,281,281,,281,281,281,251', -',251,,,,,,,,,,,,,,,,,,,,,,,251,251,,,,251,,,,251,,,,,,,,,,,251,,,,,', -'251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251', -'251,251,251,251,251,251,251,251,251,251,251,251,251,251,,251,251,251', -'258,,258,,,,,,,,,,,,,,,,,,,,,,,258,258,,,,258,,,,258,,,,,,,,,,,258,', -',,,,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258', -'258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,,258,258', -'258,259,,259,,,,,,,,,,,,,,,,,,,,,,,259,259,,,,259,,,,259,,,,,,,,,,,259', -',,,,,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259', -'259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,,259,259', -'259,278,,278,,,,,,,,,,,,,,,,,,,,,,,278,278,,,,278,,,,278,,,,,,,,,,,278', -',,,,,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278', -'278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,,278,278', -'278,86,,86,,,,,,,,,,,,,,,,,,,,,,,86,86,,,,86,,,,86,,,,,,,,,86,,86,,', -',,,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86', -'86,86,86,86,86,86,86,86,86,,86,86,86,36,,36,,,,,,,,,,,,,,,,,,,,,,,36', -'36,,,,36,,,,36,,,,,,,,,,,36,,,,,,36,36,36,36,36,36,36,36,36,36,36,36', -'36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,,36,36,36,291', -',291,,,,,,,,,,,,,,,,,,,,,,,291,291,,,,291,,,,291,,,,,,,,,,,291,,,,,', -'291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291', -'291,291,291,291,291,291,291,291,291,291,291,291,291,291,,291,291,291', -'296,,296,,,,,,,,,,,,,,,,,,,,,,,296,296,,,,296,,,,296,,,,,,,,,,,296,', -',,,,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296', -'296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,,296,296', -'296,297,,297,,,,,,,,,,,,,,,,,,,,,,,297,297,,,,297,,,,297,,,,,,,,,,,297', -',,,,,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297', -'297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,,297,297', -'297,228,,228,,,,,,,,,,,,,,,,,,,,,,,228,228,,,,228,,,,228,,,,,,,,,,,228', -',,,,,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228', -'228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,,228,228', -'228,168,,168,,,,,,,,,,,,,,,,,,,,,,,168,168,,,,168,,,,168,,,,,,,,,,,168', -',,,,,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168', -'168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,,168,168', -'168,208,,208,,,,,,,,,,,,,,,,,,,,,,,208,208,,,,208,,,,208,,,,,,,,,,,208', -',,,,,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208', -'208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,,208,208', -'208,199,,199,,,,,,,,,,,,,,,,,,,,,,,199,199,,,,199,,,,199,,,,,,,,,,,199', -',,,,,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199', -'199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,,199,199', -'199,161,,161,,,,,,,,,,,,,,,,,,,,,,,161,161,,,,161,,,,161,,,,,,,,,161', -',161,,,,,,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161', -'161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,,161', -'161,161,159,,159,,,,,,,,,,,,,,,,,,,,,,,159,159,,,,159,,,,159,,,,,,,', -',159,,159,,,,,,159,159,159,159,159,159,159,159,159,159,159,159,159,159', -'159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159', -',159,159,159,180,,180,,,,,,,,,,,,,,,,,,,,,,,180,180,,,,180,,,,180,,', -',,,,,,,,180,,,,,,180,180,180,180,180,180,180,180,180,180,180,180,180', +',,106,106,106,106,,,,,106,106,,106,,106,106,,106,,106,106,,,,,106,106', +'106,106,106,106,,,,,106,,,,,,,,,,,,,,,,,,,,,,,,,,,,,106,106,,,,106,', +'106,107,106,,107,107,107,107,107,107,107,107,107,107,,,,107,107,107', +'107,,,107,107,107,107,,,,,107,107,,107,,107,107,,107,,107,107,,,,,107', +'107,107,107,107,107,,,,,107,,,,,,,,,,,,,,,,,,,,,,,,,,,,,107,107,,,,107', +',107,108,107,,108,108,108,108,108,108,108,108,108,108,,,,108,108,108', +'108,,,108,108,108,108,,,,,108,108,,108,,108,108,,108,,108,108,,,,,108', +'108,108,108,108,108,,,,,108,,,,,,,,,,,,,,,,,,,,,,,,,,,,,108,108,,,,108', +',108,109,108,,109,109,109,109,109,109,109,109,109,109,,,,109,109,109', +'109,,,109,109,109,109,,,,,109,109,,109,,109,109,,109,,109,109,,,,,109', +'109,109,109,109,109,,,,,109,,,,,,,,,,,,,,,,,,,,,,,,,,,,,109,109,,,,109', +',109,128,109,,128,128,128,128,128,128,128,128,128,128,,,,128,128,128', +'128,,,128,128,128,128,,,,,128,128,,128,,128,128,,128,,128,128,,,,,128', +'128,128,128,128,128,,,,,128,,,,,,,,,,,,,,,,,,,,,,,,,,,,,128,128,,,,128', +',128,126,128,,126,126,126,126,126,126,126,126,126,126,,,,126,126,126', +'126,,,126,126,126,126,,,,,126,126,,126,,126,126,,126,,126,126,,,,,126', +'126,126,126,126,126,,,,,126,,,,,,,,,,,,,,,,,,,,,,,,,,,,,126,126,,,,126', +',126,112,126,,112,112,112,112,112,112,112,112,112,112,,,,112,112,112', +'112,,,112,112,112,112,,,,,112,112,,112,,112,112,,112,,112,112,,,,,112', +'112,112,112,112,112,,,,,112,,,,,,,,,,,,,,,,,,,,,,,,,,,,,112,112,,,,112', +',112,113,112,,113,113,113,113,113,113,113,113,113,113,,,,113,113,113', +'113,,,113,113,113,113,,,,,113,113,,113,,113,113,,113,,113,113,,,,,113', +'113,113,113,113,113,,,,,113,,,,,,,,,,,,,,,,,,,,,,,,,,,,,113,113,,,,113', +',113,114,113,,114,114,114,114,114,114,114,114,114,114,,,,114,114,114', +'114,,,114,114,114,114,,,,,114,114,,114,,114,114,,114,,114,114,,,,,114', +'114,114,114,114,114,,,,,114,,,,,,,,,,,,,,,,,,,,,,,,,,,,,114,114,,,,114', +',114,115,114,,115,115,115,115,115,115,115,115,115,115,,,,115,115,115', +'115,,,115,115,115,115,,,,,115,115,,115,,115,115,,115,,115,115,,,,,115', +'115,115,115,115,115,,,,,115,,,,,,,,,,,,,,,,,,,,,,,,,,,,,115,115,,,,115', +',115,104,115,,104,104,104,104,104,104,104,104,104,104,,,,104,104,104', +'104,,,104,104,104,104,,,,,104,104,,104,,104,104,,104,,104,104,,,,,104', +'104,104,104,104,104,,,,,104,,143,143,143,143,143,143,143,143,143,143', +',,,,,,,,,,143,143,,,,,,104,104,,,,104,,104,143,104,,143,,,,231,,231', +',,,,,,,,,,,,,,,,,,,,,,231,231,,,,231,,,,231,,,,,,,,,,231,143,,143,,143', +'231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231', +'231,231,231,231,231,231,231,231,231,231,231,231,231,231,,231,231,231', +',,,,,,231,296,296,296,296,296,296,296,296,296,296,,,,296,296,296,296', +',,296,296,296,,,,,,,296,,296,,296,296,,296,,296,296,,,,,296,296,296', +'296,296,296,,297,,297,296,,,,,,,,,,,,,,,,,,,,,,297,297,,,,297,,296,296', +'297,,,296,,296,,296,,,297,,,,,,297,297,297,297,297,297,297,297,297,297', +'297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297', +'297,297,297,297,,297,297,297,,,,,,,297,6,6,6,6,6,6,6,6,6,6,,,,6,6,6', +'6,,,6,6,6,6,,,,,,6,,6,,6,6,,6,,6,6,,,,,6,6,6,6,6,6,,303,,303,6,,,,1', +'1,1,1,1,1,1,1,1,1,,,,,,,,,303,303,1,1,,303,,6,6,303,,,6,,6,,6,1,,303', +'1,,,,,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303', +'303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,,303,303', +'303,162,,162,,,,303,,,1,,1,,1,,,,,,,,,,,,162,162,,,,162,,,,162,,,,,', +',,,,162,,,,,,162,162,162,162,162,162,162,162,162,162,162,162,162,162', +'162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162', +',162,162,162,306,,306,,,,,,,,,,,,,,,,,,,,,,,306,306,,,,306,,,,306,,', +',,,,,,,306,,,,,,306,306,306,306,306,306,306,306,306,306,306,306,306', +'306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306', +'306,,306,306,306,295,,295,,,,,,,,,,,,,,,,,,,,,,,295,295,,,,295,,,,295', +',,,,,,,,,295,,,,,,295,295,295,295,295,295,295,295,295,295,295,295,295', +'295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295', +'295,,295,295,295,294,,294,,,,,,,,,,,,,,,,,,,,,,,294,294,,,,294,,,,294', +',,,,,,,,,294,,,,,,294,294,294,294,294,294,294,294,294,294,294,294,294', +'294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294', +'294,,294,294,294,201,,201,,,,,,,,,,,,,,,,,,,,,,,201,201,,,,201,,,,201', +',,,,,,,,,201,,,,,,201,201,201,201,201,201,201,201,201,201,201,201,201', +'201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201', +'201,,201,201,201,289,,289,,,,,,,,,,,,,,,,,,,,,,,289,289,,,,289,,,,289', +',,,,,,,,,289,,,,,,289,289,289,289,289,289,289,289,289,289,289,289,289', +'289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289', +'289,,289,289,289,192,,192,,,,,,,,,,,,,,,,,,,,,,,192,192,,,,192,,,,192', +',,,,,,,,,192,,,,,,192,192,192,192,192,192,192,192,192,192,192,192,192', +'192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192', +'192,,192,192,192,221,,221,,,,,,,,,,,,,,,,,,,,,,,221,221,,,,221,,,,221', +',,,,,,,,,221,,,,,,221,221,221,221,221,221,221,221,221,221,221,221,221', +'221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221', +'221,,221,221,221,180,,180,,,,,,,,,,,,,,,,,,,,,,,180,180,,,,180,,,,180', +',,,,,,,,,180,,,,,,180,180,180,180,180,180,180,180,180,180,180,180,180', '180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180', -'180,,180,180,180,187,,187,,,,,,,,,,,,,,,,,,,,,,,187,187,,,,187,,,,187', -',,,,,,,,,,187,,,,,,187,187,187,187,187,187,187,187,187,187,187,187,187', -'187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187', -'187,,187,187,187,307,,307,,,,,,,,,,,,,,,,,,,,,,,307,307,,,,307,,,,307', -',,,,,,,,,,307,,,,,,307,307,307,307,307,307,307,307,307,307,307,307,307', -'307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307', -'307,,307,307,307,85,85,,,,,,,,85,,,,,,,,,,,85,,,,,,85,85,85,85,85,85', -'85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85', -'85,85,,85,85,85,222,222,,,,,,,,222,,,,,,,,,,,222,,,,,,222,222,222,222', -'222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222', -'222,222,222,222,222,222,222,222,222,222,225,225,,,,,,,,225,,,,,,,,,', -',225,,,,,,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225', -'225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,243', -'243,,,,,,,,243,,,,,,,,,,,243,,,,,,243,243,243,243,243,243,243,243,243', -'243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243', -'243,243,243,243,243,90,90,,,,,,,,90,,,,,,,,,,,90,,,,,,90,90,90,90,90', -'90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90', -'90,90,90,229,229,,,,,,,,229,,,,,,,,,,,229,,,,,,229,229,229,229,229,229', -'229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229', -'229,229,229,229,229,229,229,229,265,,,,,,,,265,,,,,,,,,,,265,,,,,,265', -'265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265', -'265,265,265,265,265,265,265,265,265,265,265,265,265,287,,,,,,,,287,', -',,,,,,,,,287,,,,,,287,287,287,287,287,287,287,287,287,287,287,287,287', -'287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287', -'287,288,,,,,,,,288,,,,,,,,,,,288,,,,,,288,288,288,288,288,288,288,288', -'288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288', -'288,288,288,288,288,288,266,,,,,,,,266,,,,,,,,,,,266,,,,,,266,266,266', -'266,266,266,266,266,266,266,266,266,266,266,266,266,266,266,266,266', -'266,266,266,266,266,266,266,266,266,266,266,217,,,,,,,,217,,,,,,,,,', -',217,,,,,,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217', -'217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,172', -',,,,,,,,,,172,,,,,,172,172,172,172,172,172,172,172,172,172,172,172,172', -'172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172', -'165,,,,,,,,,,,165,,,,,,165,165,165,165,165,165,165,165,165,165,165,165', -'165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165', -'165,203,,,,,,,,,,,203,,,,,,203,203,203,203,203,203,203,203,203,203,203', -'203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203', -'203,203,196,,,,,,196,196,196,196,196,196,196,196,196,196,196,196,196', -'196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196', +'180,,180,180,180,244,,244,,,,,,,,,,,,,,,,,,,,,,,244,244,,,,244,,,,244', +',,,,,,,,,244,,,,,,244,244,244,244,244,244,244,244,244,244,244,244,244', +'244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244', +'244,,244,244,244,173,,173,,,,,,,,,,,,,,,,,,,,,,,173,173,,,,173,,,,173', +',,,,,,,,,173,,,,,,173,173,173,173,173,173,173,173,173,173,173,173,173', +'173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173', +'173,,173,173,173,282,,282,,,,,,,,,,,,,,,,,,,,,,,282,282,,,,282,,,,282', +',,,,,,,,,282,,,,,,282,282,282,282,282,282,282,282,282,282,282,282,282', +'282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282', +'282,,282,282,282,281,,281,,,,,,,,,,,,,,,,,,,,,,,281,281,,,,281,,,,281', +',,,,,,,,,281,,,,,,281,281,281,281,281,281,281,281,281,281,281,281,281', +'281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281', +'281,,281,281,281,81,,81,,,,,,,,,,,,,,,,,,,,,,,81,81,,,,81,,,,81,,,,', +',,,81,,81,,,,,,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81', +'81,81,81,81,81,81,81,81,81,81,81,81,81,,81,81,81,274,,274,,,,,,,,,,', +',,,,,,,,,,,,274,274,,,,274,,,,274,,,,,,,,,,274,,,,,,274,274,274,274', +'274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274', +'274,274,274,274,274,274,274,274,274,274,,274,274,274,32,,32,,,,,,,,', +',,,,,,,,,,,,,,32,32,,,,32,,,,32,,,,,,,,,,32,,,,,,32,32,32,32,32,32,32', +'32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32', +'32,,32,32,32,155,,155,,,,,,,,,,,,,,,,,,,,,,,155,155,,,,155,,,,155,,', +',,,,,155,,155,,,,,,155,155,155,155,155,155,155,155,155,155,155,155,155', +'155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155', +'155,,155,155,155,153,,153,,,,,,,,,,,,,,,,,,,,,,,153,153,,,,153,,,,153', +',,,,,,,153,,153,,,,,,153,153,153,153,153,153,153,153,153,153,153,153', +'153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153', +'153,153,,153,153,153,271,,271,,,,,,,,,,,,,,,,,,,,,,,271,271,,,,271,', +',,271,,,,,,,,,,271,,,,,,271,271,271,271,271,271,271,271,271,271,271', +'271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271', +'271,271,271,,271,271,271,79,79,,,,,,,,79,,,,,,,,,,79,,,,,,79,79,79,79', +'79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79', +'79,79,79,79,,79,79,79,215,215,,,,,,,,215,,,,,,,,,,215,,,,,,215,215,215', +'215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215', +'215,215,215,215,215,215,215,215,215,215,215,218,218,,,,,,,,218,,,,,', +',,,,218,,,,,,218,218,218,218,218,218,218,218,218,218,218,218,218,218', +'218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218', +'84,84,,,,,,,,84,,,,,,,,,,84,,,,,,84,84,84,84,84,84,84,84,84,84,84,84', +'84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,212,212,,,', +',,,,212,,,,,,,,,,212,,,,,,212,212,212,212,212,212,212,212,212,212,212', +'212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212', +'212,212,212,236,236,,,,,,,,236,,,,,,,,,,236,,,,,,236,236,236,236,236', +'236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236', +'236,236,236,236,236,236,236,236,236,259,,,,,,,,259,,,,,,,,,,259,,,,', +',259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259', +'259,259,259,259,259,259,259,259,259,259,259,259,259,259,285,,,,,,,,285', +',,,,,,,,,285,,,,,,285,285,285,285,285,285,285,285,285,285,285,285,285', +'285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285', +'285,258,,,,,,,,258,,,,,,,,,,258,,,,,,258,258,258,258,258,258,258,258', +'258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258', +'258,258,258,258,258,258,286,,,,,,,,286,,,,,,,,,,286,,,,,,286,286,286', +'286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286', +'286,286,286,286,286,286,286,286,286,286,286,209,,,,,,,,209,,,,,,,,,', '209,,,,,,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209', -'209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,200,,,,', -',200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200', -'200,200,200,200,200,200,200,200,200,200,200,200,200,213,,,,,,213,213', -'213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213', -'213,213,213,213,213,213,213,213,213,213,213,204,,,,,,204,204,204,204', -'204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204', -'204,204,204,204,204,204,204,204,204' ] - racc_action_check = arr = Array.new(9894, nil) +'209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,171', +',,,,,,,,,171,,,,,,171,171,171,171,171,171,171,171,171,171,171,171,171', +'171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171', +'197,,,,,,,,,,197,,,,,,197,197,197,197,197,197,197,197,197,197,197,197', +'197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197', +'197,163,,,,,,,,,,163,,,,,,163,163,163,163,163,163,163,163,163,163,163', +'163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163', +'163,163,189,,,,,,189,189,189,189,189,189,189,189,189,189,189,189,189', +'189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189', +'198,,,,,,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198', +'198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,193,,,,', +',193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193', +'193,193,193,193,193,193,193,193,193,193,193,193,193,186,,,,,,186,186', +'186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186', +'186,186,186,186,186,186,186,186,186,186,186,202,,,,,,202,202,202,202', +'202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202', +'202,202,202,202,202,202,202,202,202' ] + racc_action_check = arr = Array.new(9713, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -713,337 +693,336 @@ def on_error(error_token_id, error_value, value_stack) end racc_action_pointer = [ - 3946, -2, 134, 176, nil, 7027, nil, nil, 468, 562, - 225, nil, nil, 750, nil, nil, nil, 844, nil, nil, - nil, 258, nil, nil, nil, nil, nil, nil, nil, 83, - 1126, nil, 238, nil, 72, nil, 7827, 168, 149, nil, - 162, 92, nil, 1878, nil, nil, nil, 1972, nil, nil, - nil, 2066, nil, 2160, nil, nil, nil, 2254, nil, 2348, - nil, nil, nil, 2442, nil, nil, nil, 2536, 2630, nil, - 2724, 134, nil, 38, 3006, nil, 93, 156, 114, nil, - 218, 141, 170, nil, 3664, 8920, 7741, -2, 10, 343, - 9152, 175, 4416, 112, nil, 55, 180, nil, 4792, 4886, - 4980, 92, 5168, 5262, 5356, 5450, 5544, 5638, 5732, 5826, - 6910, 6014, 6108, 6202, 6296, 6390, 6484, 1, 6672, 5920, - 6578, 214, 6766, 4510, 4322, 4228, 4134, 4040, 3852, 3476, - 3382, 3288, 2818, nil, 1596, 1408, 1314, 1220, nil, -8, - 25, nil, 87, nil, 37, nil, nil, nil, 109, 374, - 155, 6966, 186, nil, 5074, nil, nil, -7, 366, 8601, - 194, 8515, 272, 274, 317, 9584, 186, 656, 8257, nil, - nil, 24, 9537, 92, 8, 125, nil, 938, 1032, 171, - 8687, nil, nil, 112, 112, 248, nil, 8773, nil, 4, - 4698, 4604, -14, 758, 1134, 249, 9667, 1040, 197, 8429, - 9739, 1322, -18, 9631, 9811, nil, 1228, 1341, 8343, 9703, - 852, 1526, 126, 9775, 476, 1247, 212, 9489, 946, 1059, - 382, 1153, 8981, 288, 1510, 9038, 570, 1432, 8171, 9209, - 664, 1416, nil, nil, nil, nil, nil, nil, nil, 7225, - nil, 71, 73, 9095, 174, nil, -14, nil, 3758, 3570, - nil, 7397, 131, 77, nil, nil, nil, 7, 7483, 7569, - nil, 47, nil, 88, nil, 9265, 9433, nil, 3194, 3100, - 237, nil, nil, 26, 2912, 119, 152, nil, 7655, 1784, - 1690, 7311, 1502, nil, nil, nil, nil, 9321, 9377, nil, - -44, 7913, nil, 177, nil, -15, 7999, 8085, 7171, 7081, - 143, 280, 238, nil, 6820, nil, nil, 8859, nil, nil ] + 3346, 7082, 198, nil, nil, 277, 7025, nil, 463, 556, + 237, nil, nil, nil, nil, nil, 251, 835, nil, nil, + nil, nil, nil, nil, nil, 117, 1021, nil, nil, 58, + 111, nil, 8438, 167, 29, nil, 160, 1, nil, nil, + 1765, nil, nil, nil, 1858, nil, nil, nil, 1951, nil, + nil, nil, 2044, nil, 2137, nil, nil, nil, 2230, nil, + 2323, nil, nil, nil, 2416, nil, 92, 2602, 2695, nil, + nil, 71, 225, 2974, nil, 154, 165, 3253, -2, 8753, + 500, 8268, 339, 15, 8925, 3997, 111, nil, nil, 134, + 133, 4369, 4462, 4555, 4648, 4741, 4834, 4927, 91, -2, + 5206, 5299, 5392, 5485, 6694, 5671, 5764, 5857, 5950, 6043, + 294, 85, 6322, 6415, 6508, 6601, 5578, 5113, 3811, 3067, + 928, 742, 370, nil, 184, 5020, 6229, nil, 6136, 4276, + 4183, 4090, 171, 194, nil, 174, nil, nil, -1, nil, + 3904, 160, 157, 6749, 3718, nil, 3625, nil, nil, nil, + 433, 456, 340, 8608, 195, 8523, 407, 270, nil, nil, + 184, 3532, 7163, 9451, 24, 224, nil, 216, 31, 37, + nil, 9359, 68, 8013, nil, nil, 131, 179, 205, nil, + 7843, nil, 226, 3439, 3160, -17, 9595, 1122, 314, 9487, + 1029, 247, 7673, 9559, nil, 1308, 1515, 9405, 9523, 657, + 1510, 7503, 9631, 285, 1327, 330, 183, 750, 1048, 9312, + 936, 1234, 8981, 564, 1494, 8813, 471, 1401, 8869, 843, + 1417, 7758, 378, 1215, 363, nil, nil, nil, nil, nil, + nil, 6794, nil, nil, 157, 72, 9037, 173, nil, -13, + nil, 2881, 2788, nil, 7928, 50, 40, 46, 140, 124, + nil, 2509, 1672, nil, -5, nil, -7, nil, 9202, 9092, + nil, 1579, 1486, 302, nil, nil, 63, 1393, 118, 155, + nil, 8693, 1300, 1207, 8353, 1114, nil, nil, nil, nil, + 113, 8183, 8098, nil, nil, 9147, 9257, nil, -2, 7588, + nil, 176, nil, -14, 7418, 7333, 6883, 6936, nil, 170, + 649, 247, nil, 7078, nil, nil, 7248, nil, nil ] racc_action_default = [ - -1, -181, -118, -181, -17, -46, -18, -126, -181, -181, - -181, -34, -19, -181, -20, -47, -21, -181, -30, -22, - -28, -181, -23, -29, -32, -2, -111, -31, -33, -3, - -181, -104, -181, -35, -181, -36, -5, -181, -174, -37, - -8, -181, -9, -181, -98, -38, -10, -181, -105, -39, - -96, -181, -11, -181, -106, -40, -97, -181, -12, -181, - -107, -103, -26, -181, -108, -27, -13, -181, -181, -14, - -136, -124, -15, -100, -181, -16, -181, -125, -118, -119, - -181, -181, -181, -44, -136, -45, -181, -181, -181, -50, - -150, -181, -7, -181, -25, -157, -181, -4, -181, -181, - -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, - -93, -181, -181, -181, -181, -181, -181, -181, -181, -181, - -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, - -181, -181, -181, -58, -181, -181, -181, -181, -57, -181, - -181, -172, -174, -176, -181, -178, -114, -128, -181, -181, - -181, -181, -181, -115, -136, -109, -95, -51, -48, -153, - -49, -181, -52, -54, -53, -55, -181, -181, -137, -129, - -110, -181, -56, -181, -181, -181, -117, -181, -181, -181, - -137, -170, -151, -181, -181, -146, 310, -6, -24, -181, - -181, -181, -181, -81, -70, -59, -83, -71, -60, -179, - -84, -72, -61, -91, -85, -82, -73, -62, -180, -86, - -74, -63, -181, -87, -75, -64, -181, -92, -76, -65, - -77, -66, -88, -78, -67, -89, -79, -68, -154, -90, - -80, -69, -94, -99, -173, -177, -171, -175, -112, -181, - -113, -127, -181, -41, -181, -152, -181, -143, -181, -181, - -135, -138, -181, -181, -123, -121, -120, -181, -42, -43, - -132, -181, -147, -181, -158, -159, -160, -156, -181, -181, - -155, -102, -116, -130, -181, -181, -181, -165, -140, -181, - -181, -139, -181, -101, -122, -149, -148, -162, -161, -131, - -181, -144, -163, -181, -166, -181, -141, -142, -102, -181, - -167, -181, -181, -169, -181, -133, -168, -145, -164, -134 ] + -1, -180, -180, -18, -125, -180, -46, -19, -180, -180, + -180, -34, -20, -21, -47, -22, -180, -180, -30, -23, + -28, -2, -104, -29, -32, -3, -180, -31, -33, -180, + -180, -35, -5, -180, -173, -36, -8, -180, -37, -9, + -180, -98, -96, -10, -180, -105, -38, -11, -180, -106, + -39, -97, -180, -12, -180, -107, -40, -26, -180, -13, + -180, -108, -103, -27, -180, -14, -123, -135, -180, -15, + -16, -100, -117, -180, -17, -180, -124, -135, -180, -45, + -50, -180, -180, -180, -149, -7, -180, -25, -4, -156, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -93, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -58, -180, -180, -180, -57, -180, -180, + -180, -180, -180, -180, -171, -173, -175, -177, -180, -127, + -180, -180, -180, -180, -180, -114, -135, -109, -113, -95, + -51, -48, -49, -152, -52, -180, -54, -53, -128, -110, + -180, -180, -136, -55, -180, -117, -118, -180, -180, -180, + -44, -56, -180, -136, -150, -169, -180, -180, -145, 309, + -6, -24, -180, -180, -180, -180, -83, -71, -60, -84, + -72, -61, -178, -85, -82, -73, -62, -91, -86, -74, + -63, -179, -87, -75, -64, -180, -180, -76, -65, -92, + -77, -66, -88, -78, -67, -89, -79, -68, -90, -80, + -69, -153, -81, -70, -59, -94, -99, -172, -176, -174, + -170, -180, -111, -112, -126, -180, -41, -180, -151, -180, + -142, -180, -180, -134, -137, -180, -180, -180, -180, -180, + -116, -180, -180, -131, -180, -146, -180, -157, -158, -159, + -155, -180, -180, -154, -102, -115, -129, -180, -180, -180, + -164, -139, -180, -180, -138, -180, -101, -122, -120, -119, + -180, -42, -43, -148, -147, -161, -160, -130, -180, -143, + -162, -180, -165, -180, -140, -141, -102, -180, -121, -166, + -180, -180, -168, -180, -132, -167, -144, -163, -133 ] racc_goto_table = [ - 25, 153, 80, 34, 77, 96, 83, 21, 85, 76, - 166, 86, 87, 88, 277, 169, 89, 170, 29, 290, - 90, 169, 185, 170, 179, 192, 275, 233, 236, 92, - 139, 142, 153, 289, 97, 145, nil, 153, 153, 143, - 141, 255, 256, 294, 156, nil, 157, nil, 93, nil, - 158, nil, nil, nil, 159, nil, 160, nil, nil, nil, - 161, nil, 162, 303, nil, nil, 163, nil, nil, nil, - 164, 165, nil, 168, nil, nil, nil, 172, 173, nil, - 174, nil, 83, nil, nil, nil, nil, 180, nil, 181, - 212, nil, nil, 92, 244, 187, nil, nil, nil, nil, - nil, 193, 194, 195, 196, 197, 198, 199, 200, 201, - 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, - nil, 213, 214, 215, 284, 217, 218, 219, 220, 221, - 222, 223, 224, 225, 226, 227, nil, 228, 229, 230, - 231, 270, 232, 235, 234, nil, nil, 237, nil, nil, - nil, nil, 239, nil, 242, 243, nil, 180, nil, 241, - nil, nil, 245, nil, nil, nil, nil, nil, nil, nil, - 251, nil, nil, 174, nil, 257, nil, nil, 83, 83, - 258, 259, nil, nil, nil, nil, 169, 262, 170, nil, - nil, nil, nil, 265, 266, 267, nil, nil, nil, nil, - nil, nil, 153, 153, nil, nil, nil, nil, nil, nil, + 21, 170, 90, 145, 29, 158, 159, 75, 160, 78, + 79, 76, 80, 81, 82, 158, 159, 16, 172, 288, + 270, 84, 185, 278, 279, 85, 136, 25, 178, 88, + 134, 268, 226, 145, 230, 132, 135, 287, 137, nil, + nil, 149, 145, 145, 150, 167, nil, nil, 151, 292, + nil, nil, 152, 86, nil, 298, 153, nil, 154, nil, + nil, nil, 155, nil, 156, nil, nil, nil, 157, nil, + nil, 162, 163, nil, 302, nil, nil, 171, nil, nil, + nil, 173, 205, nil, nil, 175, 85, 237, nil, 180, + nil, nil, nil, nil, 170, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, nil, nil, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 228, 218, 219, + 220, 227, 221, 222, 223, 224, 225, 263, 247, nil, + nil, nil, 229, nil, 231, nil, nil, nil, 236, 234, + 173, nil, nil, 235, nil, nil, nil, 238, nil, nil, + nil, nil, nil, nil, nil, 244, nil, 248, 269, nil, + nil, nil, nil, nil, 158, 159, nil, 170, 170, nil, + nil, 255, nil, nil, nil, nil, nil, 258, 259, 260, + nil, nil, nil, nil, nil, nil, nil, 269, nil, nil, + nil, 145, 145, nil, nil, nil, nil, nil, nil, 170, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, 269, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, 272, nil, nil, 271, 274, 248, nil, 280, + nil, nil, nil, nil, nil, 281, 282, nil, 283, nil, + 284, nil, nil, nil, nil, 285, 286, nil, nil, 293, + nil, 289, nil, nil, nil, nil, 294, 295, nil, 297, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 279, - 276, 278, 281, nil, nil, nil, nil, nil, nil, nil, - nil, 83, nil, nil, 285, nil, 286, nil, nil, nil, - nil, 287, 288, nil, nil, nil, 295, 291, nil, 276, - nil, nil, 296, 297, nil, 299, nil, nil, nil, nil, - nil, nil, nil, 300, nil, nil, 302, nil, nil, 276, - 306, 304, nil, nil, 307 ] + nil, nil, 299, nil, nil, 301, nil, nil, nil, 305, + 303, nil, nil, nil, 306 ] racc_goto_check = [ - 2, 30, 34, 4, 32, 40, 21, 1, 5, 6, - 37, 5, 5, 4, 43, 36, 5, 31, 3, 38, - 5, 36, 39, 31, 37, 41, 42, 26, 44, 2, - 25, 46, 30, 8, 2, 48, nil, 30, 30, 47, - 45, 23, 23, 43, 4, nil, 5, nil, 3, nil, - 5, nil, nil, nil, 5, nil, 5, nil, nil, nil, - 5, nil, 5, 43, nil, nil, 5, nil, nil, nil, - 5, 5, nil, 5, nil, nil, nil, 5, 34, nil, - 2, nil, 21, nil, nil, nil, nil, 5, nil, 4, - 40, nil, nil, 2, 37, 5, nil, nil, nil, nil, - nil, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 2, 21, 40, 30, 4, 36, 31, 6, 37, 5, + 5, 32, 5, 5, 4, 36, 31, 1, 37, 38, + 43, 5, 41, 23, 23, 2, 47, 3, 39, 2, + 45, 42, 26, 30, 44, 25, 46, 8, 48, nil, + nil, 4, 30, 30, 5, 34, nil, nil, 5, 43, + nil, nil, 5, 3, nil, 23, 5, nil, 5, nil, + nil, nil, 5, nil, 5, nil, nil, nil, 5, nil, + nil, 5, 5, nil, 43, nil, nil, 5, nil, nil, + nil, 5, 40, nil, nil, 4, 2, 37, nil, 5, + nil, nil, nil, nil, 21, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - nil, 5, 5, 5, 23, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, nil, 5, 5, 5, - 5, 41, 4, 47, 45, nil, nil, 4, nil, nil, - nil, nil, 5, nil, 32, 5, nil, 5, nil, 6, - nil, nil, 4, nil, nil, nil, nil, nil, nil, nil, - 5, nil, nil, 2, nil, 2, nil, nil, 21, 21, - 5, 5, nil, nil, nil, nil, 36, 4, 31, nil, - nil, nil, nil, 5, 5, 4, nil, nil, nil, nil, - nil, nil, 30, 30, nil, nil, nil, nil, nil, nil, + 5, 5, 5, 5, nil, nil, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 47, 5, 5, + 5, 45, 5, 5, 5, 5, 4, 41, 34, nil, + nil, nil, 4, nil, 5, nil, nil, nil, 5, 6, + 5, nil, nil, 32, nil, nil, nil, 4, nil, nil, + nil, nil, nil, nil, nil, 5, nil, 2, 21, nil, + nil, nil, nil, nil, 36, 31, nil, 21, 21, nil, + nil, 4, nil, nil, nil, nil, nil, 5, 5, 4, + nil, nil, nil, nil, nil, nil, nil, 21, nil, nil, + nil, 30, 30, nil, nil, nil, nil, nil, nil, 21, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, 21, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, 2, nil, nil, 5, 5, 2, nil, 2, + nil, nil, nil, nil, nil, 5, 5, nil, 4, nil, + 4, nil, nil, nil, nil, 5, 5, nil, nil, 2, + nil, 5, nil, nil, nil, nil, 5, 5, nil, 5, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 2, - 21, 5, 5, nil, nil, nil, nil, nil, nil, nil, - nil, 21, nil, nil, 4, nil, 4, nil, nil, nil, - nil, 5, 5, nil, nil, nil, 2, 5, nil, 21, - nil, nil, 5, 5, nil, 5, nil, nil, nil, nil, - nil, nil, nil, 4, nil, nil, 4, nil, nil, 21, - 2, 5, nil, nil, 5 ] + nil, nil, 4, nil, nil, 4, nil, nil, nil, 2, + 5, nil, nil, nil, 5 ] racc_goto_pointer = [ - nil, 7, 0, 18, 3, 3, 8, nil, -240, nil, + nil, 17, 0, 27, 4, 4, 6, nil, -229, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 4, nil, -133, nil, -7, -113, nil, nil, nil, - -39, -54, 3, nil, 0, nil, -56, -60, -255, -66, - -27, -71, -220, -232, -116, 2, -7, 1, -3 ] + nil, -71, nil, -225, nil, 2, -101, nil, nil, nil, + -33, -60, 10, nil, -27, nil, -61, -59, -248, -54, + -28, -68, -208, -219, -104, -4, 2, -8, 4 ] racc_goto_default = [ - nil, nil, 248, nil, nil, 36, 40, 42, 46, 52, - 58, 66, 69, 72, 75, 4, 6, 12, 14, 16, - 19, 22, 31, 79, 37, 41, 44, 48, 54, 60, - 64, 155, 71, 146, nil, 7, 147, nil, nil, nil, - nil, nil, nil, nil, 38, nil, nil, nil, nil ] + nil, nil, 241, nil, nil, 32, 36, 39, 43, 47, + 53, 59, 65, 69, 70, 74, 3, 7, 12, 13, + 15, 19, 22, 166, 33, 37, 41, 45, 49, 55, + 61, 147, 66, 148, nil, 4, 139, nil, nil, nil, + nil, nil, nil, nil, 34, nil, nil, nil, nil ] racc_reduce_table = [ 0, 0, :racc_error, - 0, 100, :_reduce_1, - 1, 100, :_reduce_2, - 1, 100, :_reduce_3, - 2, 100, :_reduce_4, - 1, 102, :_reduce_5, - 3, 102, :_reduce_6, - 2, 102, :_reduce_7, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 3, 103, :_reduce_24, - 2, 103, :_reduce_25, - 1, 101, :_reduce_none, - 1, 101, :_reduce_none, - 1, 121, :_reduce_28, - 1, 121, :_reduce_29, - 1, 121, :_reduce_30, - 1, 121, :_reduce_31, - 1, 121, :_reduce_32, - 1, 121, :_reduce_33, - 1, 121, :_reduce_34, - 1, 121, :_reduce_35, - 1, 121, :_reduce_36, - 1, 121, :_reduce_37, - 1, 121, :_reduce_38, - 1, 121, :_reduce_39, - 1, 121, :_reduce_40, - 3, 109, :_reduce_41, - 3, 122, :_reduce_42, - 3, 122, :_reduce_43, - 1, 122, :_reduce_44, - 2, 113, :_reduce_45, - 1, 113, :_reduce_46, - 1, 120, :_reduce_47, - 2, 108, :_reduce_48, - 2, 108, :_reduce_49, - 2, 108, :_reduce_50, - 2, 108, :_reduce_51, - 2, 108, :_reduce_52, - 2, 108, :_reduce_53, - 2, 108, :_reduce_54, - 2, 108, :_reduce_55, - 2, 108, :_reduce_56, - 2, 108, :_reduce_57, - 2, 108, :_reduce_58, - 3, 108, :_reduce_59, - 3, 108, :_reduce_60, - 3, 108, :_reduce_61, - 3, 108, :_reduce_62, - 3, 108, :_reduce_63, - 3, 108, :_reduce_64, - 3, 108, :_reduce_65, - 3, 108, :_reduce_66, - 3, 108, :_reduce_67, - 3, 108, :_reduce_68, - 3, 108, :_reduce_69, - 3, 108, :_reduce_70, - 3, 108, :_reduce_71, - 3, 108, :_reduce_72, - 3, 108, :_reduce_73, - 3, 108, :_reduce_74, - 3, 108, :_reduce_75, - 3, 108, :_reduce_76, - 3, 108, :_reduce_77, - 3, 108, :_reduce_78, - 3, 108, :_reduce_79, - 3, 108, :_reduce_80, - 3, 108, :_reduce_81, - 3, 108, :_reduce_82, - 3, 108, :_reduce_83, - 3, 108, :_reduce_84, - 3, 108, :_reduce_85, - 3, 108, :_reduce_86, - 3, 108, :_reduce_87, - 3, 108, :_reduce_88, - 3, 108, :_reduce_89, - 3, 108, :_reduce_90, - 3, 108, :_reduce_91, - 3, 108, :_reduce_92, - 2, 119, :_reduce_93, - 3, 107, :_reduce_94, - 2, 107, :_reduce_95, - 1, 124, :_reduce_96, - 1, 124, :_reduce_97, - 1, 123, :_reduce_98, - 3, 123, :_reduce_99, - 1, 125, :_reduce_none, - 4, 125, :_reduce_101, - 4, 118, :_reduce_102, - 1, 105, :_reduce_103, - 1, 105, :_reduce_104, - 1, 105, :_reduce_105, - 1, 105, :_reduce_106, - 1, 105, :_reduce_107, - 1, 105, :_reduce_108, - 2, 105, :_reduce_109, - 2, 105, :_reduce_110, - 1, 105, :_reduce_111, - 2, 130, :_reduce_112, - 2, 130, :_reduce_113, - 1, 130, :_reduce_114, - 1, 130, :_reduce_115, - 3, 132, :_reduce_116, - 3, 127, :_reduce_117, - 0, 133, :_reduce_118, - 1, 133, :_reduce_119, - 3, 133, :_reduce_120, - 3, 133, :_reduce_121, - 4, 133, :_reduce_122, - 3, 133, :_reduce_123, - 1, 106, :_reduce_124, - 2, 106, :_reduce_125, - 1, 106, :_reduce_126, - 3, 117, :_reduce_127, - 2, 131, :_reduce_128, - 2, 131, :_reduce_129, - 3, 135, :_reduce_130, - 4, 135, :_reduce_131, - 4, 134, :_reduce_132, - 6, 129, :_reduce_133, - 7, 129, :_reduce_134, - 3, 126, :_reduce_135, - 0, 136, :_reduce_136, - 1, 136, :_reduce_137, - 2, 136, :_reduce_138, - 3, 136, :_reduce_139, - 3, 136, :_reduce_140, - 4, 136, :_reduce_141, - 4, 136, :_reduce_142, - 2, 136, :_reduce_143, - 1, 137, :_reduce_144, - 3, 137, :_reduce_145, - 3, 111, :_reduce_146, - 4, 111, :_reduce_147, - 5, 111, :_reduce_148, - 3, 138, :_reduce_149, - 2, 112, :_reduce_150, - 3, 128, :_reduce_151, - 3, 114, :_reduce_152, - 2, 114, :_reduce_153, - 3, 114, :_reduce_154, - 4, 115, :_reduce_155, - 4, 115, :_reduce_156, - 1, 139, :_reduce_157, - 3, 139, :_reduce_158, - 2, 140, :_reduce_159, - 2, 140, :_reduce_160, - 3, 140, :_reduce_161, - 3, 140, :_reduce_162, - 5, 116, :_reduce_163, - 7, 116, :_reduce_164, - 1, 141, :_reduce_165, - 2, 141, :_reduce_166, - 3, 142, :_reduce_167, - 4, 142, :_reduce_168, + 0, 99, :_reduce_1, + 1, 99, :_reduce_2, + 1, 99, :_reduce_3, + 2, 99, :_reduce_4, + 1, 101, :_reduce_5, + 3, 101, :_reduce_6, + 2, 101, :_reduce_7, + 1, 103, :_reduce_none, + 1, 103, :_reduce_none, + 1, 103, :_reduce_none, + 1, 103, :_reduce_none, + 1, 103, :_reduce_none, + 1, 103, :_reduce_none, + 1, 103, :_reduce_none, + 1, 103, :_reduce_none, + 1, 103, :_reduce_none, + 1, 103, :_reduce_none, + 1, 103, :_reduce_none, + 1, 103, :_reduce_none, + 1, 103, :_reduce_none, + 1, 103, :_reduce_none, + 1, 103, :_reduce_none, + 1, 103, :_reduce_none, + 3, 102, :_reduce_24, + 2, 102, :_reduce_25, + 1, 100, :_reduce_none, + 1, 100, :_reduce_none, + 1, 120, :_reduce_28, + 1, 120, :_reduce_29, + 1, 120, :_reduce_30, + 1, 120, :_reduce_31, + 1, 120, :_reduce_32, + 1, 120, :_reduce_33, + 1, 120, :_reduce_34, + 1, 120, :_reduce_35, + 1, 120, :_reduce_36, + 1, 120, :_reduce_37, + 1, 120, :_reduce_38, + 1, 120, :_reduce_39, + 1, 120, :_reduce_40, + 3, 108, :_reduce_41, + 3, 121, :_reduce_42, + 3, 121, :_reduce_43, + 1, 121, :_reduce_44, + 2, 112, :_reduce_45, + 1, 112, :_reduce_46, + 1, 119, :_reduce_47, + 2, 107, :_reduce_48, + 2, 107, :_reduce_49, + 2, 107, :_reduce_50, + 2, 107, :_reduce_51, + 2, 107, :_reduce_52, + 2, 107, :_reduce_53, + 2, 107, :_reduce_54, + 2, 107, :_reduce_55, + 2, 107, :_reduce_56, + 2, 107, :_reduce_57, + 2, 107, :_reduce_58, + 3, 107, :_reduce_59, + 3, 107, :_reduce_60, + 3, 107, :_reduce_61, + 3, 107, :_reduce_62, + 3, 107, :_reduce_63, + 3, 107, :_reduce_64, + 3, 107, :_reduce_65, + 3, 107, :_reduce_66, + 3, 107, :_reduce_67, + 3, 107, :_reduce_68, + 3, 107, :_reduce_69, + 3, 107, :_reduce_70, + 3, 107, :_reduce_71, + 3, 107, :_reduce_72, + 3, 107, :_reduce_73, + 3, 107, :_reduce_74, + 3, 107, :_reduce_75, + 3, 107, :_reduce_76, + 3, 107, :_reduce_77, + 3, 107, :_reduce_78, + 3, 107, :_reduce_79, + 3, 107, :_reduce_80, + 3, 107, :_reduce_81, + 3, 107, :_reduce_82, + 3, 107, :_reduce_83, + 3, 107, :_reduce_84, + 3, 107, :_reduce_85, + 3, 107, :_reduce_86, + 3, 107, :_reduce_87, + 3, 107, :_reduce_88, + 3, 107, :_reduce_89, + 3, 107, :_reduce_90, + 3, 107, :_reduce_91, + 3, 107, :_reduce_92, + 2, 118, :_reduce_93, + 3, 106, :_reduce_94, + 2, 106, :_reduce_95, + 1, 123, :_reduce_96, + 1, 123, :_reduce_97, + 1, 122, :_reduce_98, + 3, 122, :_reduce_99, + 1, 124, :_reduce_none, + 4, 124, :_reduce_101, + 4, 117, :_reduce_102, + 1, 104, :_reduce_103, + 1, 104, :_reduce_104, + 1, 104, :_reduce_105, + 1, 104, :_reduce_106, + 1, 104, :_reduce_107, + 1, 104, :_reduce_108, + 2, 104, :_reduce_109, + 2, 104, :_reduce_110, + 2, 129, :_reduce_111, + 2, 129, :_reduce_112, + 1, 129, :_reduce_113, + 1, 129, :_reduce_114, + 3, 131, :_reduce_115, + 3, 126, :_reduce_116, + 0, 132, :_reduce_117, + 1, 132, :_reduce_118, + 3, 132, :_reduce_119, + 3, 132, :_reduce_120, + 4, 132, :_reduce_121, + 3, 132, :_reduce_122, + 1, 105, :_reduce_123, + 2, 105, :_reduce_124, + 1, 105, :_reduce_125, + 3, 116, :_reduce_126, + 2, 130, :_reduce_127, + 2, 130, :_reduce_128, + 3, 134, :_reduce_129, + 4, 134, :_reduce_130, + 4, 133, :_reduce_131, + 6, 128, :_reduce_132, + 7, 128, :_reduce_133, + 3, 125, :_reduce_134, + 0, 135, :_reduce_135, + 1, 135, :_reduce_136, + 2, 135, :_reduce_137, + 3, 135, :_reduce_138, + 3, 135, :_reduce_139, + 4, 135, :_reduce_140, + 4, 135, :_reduce_141, + 2, 135, :_reduce_142, + 1, 136, :_reduce_143, + 3, 136, :_reduce_144, + 3, 110, :_reduce_145, + 4, 110, :_reduce_146, + 5, 110, :_reduce_147, + 3, 137, :_reduce_148, + 2, 111, :_reduce_149, + 3, 127, :_reduce_150, + 3, 113, :_reduce_151, + 2, 113, :_reduce_152, + 3, 113, :_reduce_153, + 4, 114, :_reduce_154, + 4, 114, :_reduce_155, + 1, 138, :_reduce_156, + 3, 138, :_reduce_157, + 2, 139, :_reduce_158, + 2, 139, :_reduce_159, + 3, 139, :_reduce_160, + 3, 139, :_reduce_161, + 5, 115, :_reduce_162, + 7, 115, :_reduce_163, + 1, 140, :_reduce_164, + 2, 140, :_reduce_165, + 3, 141, :_reduce_166, + 4, 141, :_reduce_167, + 3, 141, :_reduce_168, 3, 142, :_reduce_169, - 3, 143, :_reduce_170, - 2, 144, :_reduce_171, - 1, 145, :_reduce_172, - 2, 145, :_reduce_173, - 0, 146, :_reduce_174, - 2, 146, :_reduce_175, - 1, 147, :_reduce_176, - 2, 147, :_reduce_177, - 2, 110, :_reduce_178, - 3, 110, :_reduce_179, - 3, 110, :_reduce_180 ] - -racc_reduce_n = 181 - -racc_shift_n = 310 + 2, 143, :_reduce_170, + 1, 144, :_reduce_171, + 2, 144, :_reduce_172, + 0, 145, :_reduce_173, + 2, 145, :_reduce_174, + 1, 146, :_reduce_175, + 2, 146, :_reduce_176, + 2, 109, :_reduce_177, + 3, 109, :_reduce_178, + 3, 109, :_reduce_179 ] + +racc_reduce_n = 180 + +racc_shift_n = 309 racc_token_table = { false => 0, @@ -1090,63 +1069,62 @@ def on_error(error_token_id, error_value, value_stack) :NEWLINE => 41, :COMMENT => 42, :JS => 43, - :THIS => 44, - :INDENT => 45, - :OUTDENT => 46, - "?" => 47, - :UMINUS => 48, - :NOT => 49, - "!" => 50, - "!!" => 51, - "~" => 52, - "++" => 53, - "--" => 54, - "*" => 55, - "/" => 56, - "%" => 57, - "+" => 58, - "-" => 59, - "<<" => 60, - ">>" => 61, - ">>>" => 62, - "&" => 63, - "|" => 64, - "^" => 65, - "<=" => 66, - "<" => 67, - ">" => 68, - ">=" => 69, - "==" => 70, - "!=" => 71, - :IS => 72, - :ISNT => 73, - "&&" => 74, - "||" => 75, - :AND => 76, - :OR => 77, - "-=" => 78, - "+=" => 79, - "/=" => 80, - "*=" => 81, - "%=" => 82, - "." => 83, - :ASSIGN => 84, - "||=" => 85, - "&&=" => 86, - "?=" => 87, - "=>" => 88, - "==>" => 89, - "\n" => 90, - ";" => 91, - "," => 92, - "[" => 93, - "]" => 94, - "{" => 95, - "}" => 96, - "(" => 97, - ")" => 98 } - -racc_nt_base = 99 + :INDENT => 44, + :OUTDENT => 45, + "?" => 46, + :UMINUS => 47, + :NOT => 48, + "!" => 49, + "!!" => 50, + "~" => 51, + "++" => 52, + "--" => 53, + "*" => 54, + "/" => 55, + "%" => 56, + "+" => 57, + "-" => 58, + "<<" => 59, + ">>" => 60, + ">>>" => 61, + "&" => 62, + "|" => 63, + "^" => 64, + "<=" => 65, + "<" => 66, + ">" => 67, + ">=" => 68, + "==" => 69, + "!=" => 70, + :IS => 71, + :ISNT => 72, + "&&" => 73, + "||" => 74, + :AND => 75, + :OR => 76, + "-=" => 77, + "+=" => 78, + "/=" => 79, + "*=" => 80, + "%=" => 81, + "." => 82, + :ASSIGN => 83, + "||=" => 84, + "&&=" => 85, + "?=" => 86, + "=>" => 87, + "==>" => 88, + "\n" => 89, + ";" => 90, + "," => 91, + "[" => 92, + "]" => 93, + "{" => 94, + "}" => 95, + "(" => 96, + ")" => 97 } + +racc_nt_base = 98 racc_use_result_var = true @@ -1211,7 +1189,6 @@ def on_error(error_token_id, error_value, value_stack) "NEWLINE", "COMMENT", "JS", - "THIS", "INDENT", "OUTDENT", "\"?\"", @@ -1322,49 +1299,49 @@ def on_error(error_token_id, error_value, value_stack) # reduce 0 omitted -module_eval(<<'.,.,', 'grammar.y', 49) +module_eval(<<'.,.,', 'grammar.y', 48) def _reduce_1(val, _values, result) result = Expressions.new result end .,., -module_eval(<<'.,.,', 'grammar.y', 50) +module_eval(<<'.,.,', 'grammar.y', 49) def _reduce_2(val, _values, result) result = Expressions.new result end .,., -module_eval(<<'.,.,', 'grammar.y', 51) +module_eval(<<'.,.,', 'grammar.y', 50) def _reduce_3(val, _values, result) result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 52) +module_eval(<<'.,.,', 'grammar.y', 51) def _reduce_4(val, _values, result) result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 57) +module_eval(<<'.,.,', 'grammar.y', 56) def _reduce_5(val, _values, result) result = Expressions.wrap(val) result end .,., -module_eval(<<'.,.,', 'grammar.y', 58) +module_eval(<<'.,.,', 'grammar.y', 57) def _reduce_6(val, _values, result) result = val[0] << val[2] result end .,., -module_eval(<<'.,.,', 'grammar.y', 59) +module_eval(<<'.,.,', 'grammar.y', 58) def _reduce_7(val, _values, result) result = val[0] result @@ -1403,14 +1380,14 @@ def _reduce_7(val, _values, result) # reduce 23 omitted -module_eval(<<'.,.,', 'grammar.y', 86) +module_eval(<<'.,.,', 'grammar.y', 85) def _reduce_24(val, _values, result) result = val[1] result end .,., -module_eval(<<'.,.,', 'grammar.y', 87) +module_eval(<<'.,.,', 'grammar.y', 86) def _reduce_25(val, _values, result) result = Expressions.new result @@ -1421,504 +1398,504 @@ def _reduce_25(val, _values, result) # reduce 27 omitted -module_eval(<<'.,.,', 'grammar.y', 98) +module_eval(<<'.,.,', 'grammar.y', 97) def _reduce_28(val, _values, result) result = LiteralNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 99) +module_eval(<<'.,.,', 'grammar.y', 98) def _reduce_29(val, _values, result) result = LiteralNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 100) +module_eval(<<'.,.,', 'grammar.y', 99) def _reduce_30(val, _values, result) result = LiteralNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 101) +module_eval(<<'.,.,', 'grammar.y', 100) def _reduce_31(val, _values, result) result = LiteralNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 102) +module_eval(<<'.,.,', 'grammar.y', 101) def _reduce_32(val, _values, result) result = LiteralNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 103) +module_eval(<<'.,.,', 'grammar.y', 102) def _reduce_33(val, _values, result) result = LiteralNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 104) +module_eval(<<'.,.,', 'grammar.y', 103) def _reduce_34(val, _values, result) result = LiteralNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 105) +module_eval(<<'.,.,', 'grammar.y', 104) def _reduce_35(val, _values, result) result = LiteralNode.new(Value.new(true)) result end .,., -module_eval(<<'.,.,', 'grammar.y', 106) +module_eval(<<'.,.,', 'grammar.y', 105) def _reduce_36(val, _values, result) result = LiteralNode.new(Value.new(false)) result end .,., -module_eval(<<'.,.,', 'grammar.y', 107) +module_eval(<<'.,.,', 'grammar.y', 106) def _reduce_37(val, _values, result) result = LiteralNode.new(Value.new(true)) result end .,., -module_eval(<<'.,.,', 'grammar.y', 108) +module_eval(<<'.,.,', 'grammar.y', 107) def _reduce_38(val, _values, result) result = LiteralNode.new(Value.new(false)) result end .,., -module_eval(<<'.,.,', 'grammar.y', 109) +module_eval(<<'.,.,', 'grammar.y', 108) def _reduce_39(val, _values, result) result = LiteralNode.new(Value.new(true)) result end .,., -module_eval(<<'.,.,', 'grammar.y', 110) +module_eval(<<'.,.,', 'grammar.y', 109) def _reduce_40(val, _values, result) result = LiteralNode.new(Value.new(false)) result end .,., -module_eval(<<'.,.,', 'grammar.y', 115) +module_eval(<<'.,.,', 'grammar.y', 114) def _reduce_41(val, _values, result) result = AssignNode.new(val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 120) +module_eval(<<'.,.,', 'grammar.y', 119) def _reduce_42(val, _values, result) result = AssignNode.new(ValueNode.new(val[0]), val[2], :object) result end .,., -module_eval(<<'.,.,', 'grammar.y', 121) +module_eval(<<'.,.,', 'grammar.y', 120) def _reduce_43(val, _values, result) result = AssignNode.new(ValueNode.new(LiteralNode.new(val[0])), val[2], :object) result end .,., -module_eval(<<'.,.,', 'grammar.y', 122) +module_eval(<<'.,.,', 'grammar.y', 121) def _reduce_44(val, _values, result) result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 127) +module_eval(<<'.,.,', 'grammar.y', 126) def _reduce_45(val, _values, result) result = ReturnNode.new(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 128) +module_eval(<<'.,.,', 'grammar.y', 127) def _reduce_46(val, _values, result) result = ReturnNode.new(ValueNode.new(Value.new('null'))) result end .,., -module_eval(<<'.,.,', 'grammar.y', 133) +module_eval(<<'.,.,', 'grammar.y', 132) def _reduce_47(val, _values, result) result = CommentNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 140) +module_eval(<<'.,.,', 'grammar.y', 139) def _reduce_48(val, _values, result) result = OpNode.new(val[0], val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 141) +module_eval(<<'.,.,', 'grammar.y', 140) def _reduce_49(val, _values, result) result = OpNode.new(val[0], val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 142) +module_eval(<<'.,.,', 'grammar.y', 141) def _reduce_50(val, _values, result) result = OpNode.new(val[0], val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 143) +module_eval(<<'.,.,', 'grammar.y', 142) def _reduce_51(val, _values, result) result = OpNode.new(val[0], val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 144) +module_eval(<<'.,.,', 'grammar.y', 143) def _reduce_52(val, _values, result) result = OpNode.new(val[0], val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 145) +module_eval(<<'.,.,', 'grammar.y', 144) def _reduce_53(val, _values, result) result = OpNode.new(val[0], val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 146) +module_eval(<<'.,.,', 'grammar.y', 145) def _reduce_54(val, _values, result) result = OpNode.new(val[0], val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 147) +module_eval(<<'.,.,', 'grammar.y', 146) def _reduce_55(val, _values, result) result = OpNode.new(val[0], val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 148) +module_eval(<<'.,.,', 'grammar.y', 147) def _reduce_56(val, _values, result) result = OpNode.new(val[0], val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 149) +module_eval(<<'.,.,', 'grammar.y', 148) def _reduce_57(val, _values, result) result = OpNode.new(val[1], val[0], nil, true) result end .,., -module_eval(<<'.,.,', 'grammar.y', 150) +module_eval(<<'.,.,', 'grammar.y', 149) def _reduce_58(val, _values, result) result = OpNode.new(val[1], val[0], nil, true) result end .,., -module_eval(<<'.,.,', 'grammar.y', 152) +module_eval(<<'.,.,', 'grammar.y', 151) def _reduce_59(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 153) +module_eval(<<'.,.,', 'grammar.y', 152) def _reduce_60(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 154) +module_eval(<<'.,.,', 'grammar.y', 153) def _reduce_61(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 156) +module_eval(<<'.,.,', 'grammar.y', 155) def _reduce_62(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 157) +module_eval(<<'.,.,', 'grammar.y', 156) def _reduce_63(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 159) +module_eval(<<'.,.,', 'grammar.y', 158) def _reduce_64(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 160) +module_eval(<<'.,.,', 'grammar.y', 159) def _reduce_65(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 161) +module_eval(<<'.,.,', 'grammar.y', 160) def _reduce_66(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 163) +module_eval(<<'.,.,', 'grammar.y', 162) def _reduce_67(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 164) +module_eval(<<'.,.,', 'grammar.y', 163) def _reduce_68(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 165) +module_eval(<<'.,.,', 'grammar.y', 164) def _reduce_69(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 167) +module_eval(<<'.,.,', 'grammar.y', 166) def _reduce_70(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 168) +module_eval(<<'.,.,', 'grammar.y', 167) def _reduce_71(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 169) +module_eval(<<'.,.,', 'grammar.y', 168) def _reduce_72(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 170) +module_eval(<<'.,.,', 'grammar.y', 169) def _reduce_73(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 172) +module_eval(<<'.,.,', 'grammar.y', 171) def _reduce_74(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 173) +module_eval(<<'.,.,', 'grammar.y', 172) def _reduce_75(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 174) +module_eval(<<'.,.,', 'grammar.y', 173) def _reduce_76(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 175) +module_eval(<<'.,.,', 'grammar.y', 174) def _reduce_77(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 177) +module_eval(<<'.,.,', 'grammar.y', 176) def _reduce_78(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 178) +module_eval(<<'.,.,', 'grammar.y', 177) def _reduce_79(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 179) +module_eval(<<'.,.,', 'grammar.y', 178) def _reduce_80(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 180) +module_eval(<<'.,.,', 'grammar.y', 179) def _reduce_81(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 181) +module_eval(<<'.,.,', 'grammar.y', 180) def _reduce_82(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 183) +module_eval(<<'.,.,', 'grammar.y', 182) def _reduce_83(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 184) +module_eval(<<'.,.,', 'grammar.y', 183) def _reduce_84(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 185) +module_eval(<<'.,.,', 'grammar.y', 184) def _reduce_85(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 186) +module_eval(<<'.,.,', 'grammar.y', 185) def _reduce_86(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 187) +module_eval(<<'.,.,', 'grammar.y', 186) def _reduce_87(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 188) +module_eval(<<'.,.,', 'grammar.y', 187) def _reduce_88(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 189) +module_eval(<<'.,.,', 'grammar.y', 188) def _reduce_89(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 190) +module_eval(<<'.,.,', 'grammar.y', 189) def _reduce_90(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 192) +module_eval(<<'.,.,', 'grammar.y', 191) def _reduce_91(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 193) +module_eval(<<'.,.,', 'grammar.y', 192) def _reduce_92(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 198) +module_eval(<<'.,.,', 'grammar.y', 197) def _reduce_93(val, _values, result) result = ExistenceNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 203) +module_eval(<<'.,.,', 'grammar.y', 202) def _reduce_94(val, _values, result) result = CodeNode.new(val[0], val[2], val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 204) +module_eval(<<'.,.,', 'grammar.y', 203) def _reduce_95(val, _values, result) result = CodeNode.new([], val[1], val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 209) +module_eval(<<'.,.,', 'grammar.y', 208) def _reduce_96(val, _values, result) result = :func result end .,., -module_eval(<<'.,.,', 'grammar.y', 210) +module_eval(<<'.,.,', 'grammar.y', 209) def _reduce_97(val, _values, result) result = :boundfunc result end .,., -module_eval(<<'.,.,', 'grammar.y', 215) +module_eval(<<'.,.,', 'grammar.y', 214) def _reduce_98(val, _values, result) result = val result end .,., -module_eval(<<'.,.,', 'grammar.y', 216) +module_eval(<<'.,.,', 'grammar.y', 215) def _reduce_99(val, _values, result) result = val[0] << val[2] result @@ -1927,140 +1904,140 @@ def _reduce_99(val, _values, result) # reduce 100 omitted -module_eval(<<'.,.,', 'grammar.y', 222) +module_eval(<<'.,.,', 'grammar.y', 221) def _reduce_101(val, _values, result) result = SplatNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 227) +module_eval(<<'.,.,', 'grammar.y', 226) def _reduce_102(val, _values, result) result = SplatNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 232) +module_eval(<<'.,.,', 'grammar.y', 231) def _reduce_103(val, _values, result) result = ValueNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 233) +module_eval(<<'.,.,', 'grammar.y', 232) def _reduce_104(val, _values, result) result = ValueNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 234) +module_eval(<<'.,.,', 'grammar.y', 233) def _reduce_105(val, _values, result) result = ValueNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 235) +module_eval(<<'.,.,', 'grammar.y', 234) def _reduce_106(val, _values, result) result = ValueNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 236) +module_eval(<<'.,.,', 'grammar.y', 235) def _reduce_107(val, _values, result) result = ValueNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 237) +module_eval(<<'.,.,', 'grammar.y', 236) def _reduce_108(val, _values, result) result = ValueNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 238) +module_eval(<<'.,.,', 'grammar.y', 237) def _reduce_109(val, _values, result) result = val[0] << val[1] result end .,., -module_eval(<<'.,.,', 'grammar.y', 239) +module_eval(<<'.,.,', 'grammar.y', 238) def _reduce_110(val, _values, result) result = ValueNode.new(val[0], [val[1]]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 240) +module_eval(<<'.,.,', 'grammar.y', 243) def _reduce_111(val, _values, result) - result = ValueNode.new(ThisNode.new) + result = AccessorNode.new(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 245) +module_eval(<<'.,.,', 'grammar.y', 244) def _reduce_112(val, _values, result) - result = AccessorNode.new(val[1]) + result = AccessorNode.new(val[1], true) result end .,., -module_eval(<<'.,.,', 'grammar.y', 246) +module_eval(<<'.,.,', 'grammar.y', 245) def _reduce_113(val, _values, result) - result = AccessorNode.new(val[1], true) + result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 247) +module_eval(<<'.,.,', 'grammar.y', 246) def _reduce_114(val, _values, result) - result = val[0] + result = SliceNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 248) +module_eval(<<'.,.,', 'grammar.y', 251) def _reduce_115(val, _values, result) - result = SliceNode.new(val[0]) + result = IndexNode.new(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 253) +module_eval(<<'.,.,', 'grammar.y', 256) def _reduce_116(val, _values, result) - result = IndexNode.new(val[1]) + result = ObjectNode.new(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 258) +module_eval(<<'.,.,', 'grammar.y', 261) def _reduce_117(val, _values, result) - result = ObjectNode.new(val[1]) + result = [] result end .,., -module_eval(<<'.,.,', 'grammar.y', 263) +module_eval(<<'.,.,', 'grammar.y', 262) def _reduce_118(val, _values, result) - result = [] + result = val result end .,., -module_eval(<<'.,.,', 'grammar.y', 264) +module_eval(<<'.,.,', 'grammar.y', 263) def _reduce_119(val, _values, result) - result = val + result = val[0] << val[2] result end .,., -module_eval(<<'.,.,', 'grammar.y', 265) +module_eval(<<'.,.,', 'grammar.y', 264) def _reduce_120(val, _values, result) result = val[0] << val[2] result @@ -2069,322 +2046,322 @@ def _reduce_120(val, _values, result) module_eval(<<'.,.,', 'grammar.y', 266) def _reduce_121(val, _values, result) - result = val[0] << val[2] + result = val[0] << val[3] result end .,., -module_eval(<<'.,.,', 'grammar.y', 268) +module_eval(<<'.,.,', 'grammar.y', 267) def _reduce_122(val, _values, result) - result = val[0] << val[3] + result = val[1] result end .,., -module_eval(<<'.,.,', 'grammar.y', 269) +module_eval(<<'.,.,', 'grammar.y', 272) def _reduce_123(val, _values, result) - result = val[1] + result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 274) +module_eval(<<'.,.,', 'grammar.y', 273) def _reduce_124(val, _values, result) - result = val[0] + result = val[1].new_instance result end .,., -module_eval(<<'.,.,', 'grammar.y', 275) +module_eval(<<'.,.,', 'grammar.y', 274) def _reduce_125(val, _values, result) - result = val[1].new_instance + result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 276) +module_eval(<<'.,.,', 'grammar.y', 279) def _reduce_126(val, _values, result) - result = val[0] + result = ExtendsNode.new(val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 281) +module_eval(<<'.,.,', 'grammar.y', 284) def _reduce_127(val, _values, result) - result = ExtendsNode.new(val[0], val[2]) + result = CallNode.new(val[0], val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 286) +module_eval(<<'.,.,', 'grammar.y', 285) def _reduce_128(val, _values, result) result = CallNode.new(val[0], val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 287) +module_eval(<<'.,.,', 'grammar.y', 290) def _reduce_129(val, _values, result) - result = CallNode.new(val[0], val[1]) + result = val[1] result end .,., -module_eval(<<'.,.,', 'grammar.y', 292) +module_eval(<<'.,.,', 'grammar.y', 291) def _reduce_130(val, _values, result) - result = val[1] + result = val[1] << val[3] result end .,., -module_eval(<<'.,.,', 'grammar.y', 293) +module_eval(<<'.,.,', 'grammar.y', 296) def _reduce_131(val, _values, result) - result = val[1] << val[3] + result = CallNode.new(Value.new('super'), val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 298) +module_eval(<<'.,.,', 'grammar.y', 302) def _reduce_132(val, _values, result) - result = CallNode.new(Value.new('super'), val[2]) + result = RangeNode.new(val[1], val[4]) result end .,., module_eval(<<'.,.,', 'grammar.y', 304) def _reduce_133(val, _values, result) - result = RangeNode.new(val[1], val[4]) + result = RangeNode.new(val[1], val[5], true) result end .,., -module_eval(<<'.,.,', 'grammar.y', 306) +module_eval(<<'.,.,', 'grammar.y', 309) def _reduce_134(val, _values, result) - result = RangeNode.new(val[1], val[5], true) + result = ArrayNode.new(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 311) +module_eval(<<'.,.,', 'grammar.y', 314) def _reduce_135(val, _values, result) - result = ArrayNode.new(val[1]) + result = [] result end .,., -module_eval(<<'.,.,', 'grammar.y', 316) +module_eval(<<'.,.,', 'grammar.y', 315) def _reduce_136(val, _values, result) - result = [] + result = val result end .,., -module_eval(<<'.,.,', 'grammar.y', 317) +module_eval(<<'.,.,', 'grammar.y', 316) def _reduce_137(val, _values, result) - result = val + result = [val[1]] result end .,., -module_eval(<<'.,.,', 'grammar.y', 318) +module_eval(<<'.,.,', 'grammar.y', 317) def _reduce_138(val, _values, result) - result = [val[1]] + result = val[0] << val[2] result end .,., -module_eval(<<'.,.,', 'grammar.y', 319) +module_eval(<<'.,.,', 'grammar.y', 318) def _reduce_139(val, _values, result) result = val[0] << val[2] result end .,., -module_eval(<<'.,.,', 'grammar.y', 320) +module_eval(<<'.,.,', 'grammar.y', 319) def _reduce_140(val, _values, result) - result = val[0] << val[2] + result = val[0] << val[3] result end .,., -module_eval(<<'.,.,', 'grammar.y', 321) +module_eval(<<'.,.,', 'grammar.y', 320) def _reduce_141(val, _values, result) result = val[0] << val[3] result end .,., -module_eval(<<'.,.,', 'grammar.y', 322) +module_eval(<<'.,.,', 'grammar.y', 321) def _reduce_142(val, _values, result) - result = val[0] << val[3] + result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 323) +module_eval(<<'.,.,', 'grammar.y', 326) def _reduce_143(val, _values, result) result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 328) +module_eval(<<'.,.,', 'grammar.y', 327) def _reduce_144(val, _values, result) - result = val[0] + result = ([val[0]] << val[2]).flatten result end .,., -module_eval(<<'.,.,', 'grammar.y', 329) +module_eval(<<'.,.,', 'grammar.y', 332) def _reduce_145(val, _values, result) - result = ([val[0]] << val[2]).flatten + result = TryNode.new(val[1], val[2][0], val[2][1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 334) +module_eval(<<'.,.,', 'grammar.y', 333) def _reduce_146(val, _values, result) - result = TryNode.new(val[1], val[2][0], val[2][1]) + result = TryNode.new(val[1], nil, nil, val[3]) result end .,., module_eval(<<'.,.,', 'grammar.y', 335) def _reduce_147(val, _values, result) - result = TryNode.new(val[1], nil, nil, val[3]) + result = TryNode.new(val[1], val[2][0], val[2][1], val[4]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 337) +module_eval(<<'.,.,', 'grammar.y', 340) def _reduce_148(val, _values, result) - result = TryNode.new(val[1], val[2][0], val[2][1], val[4]) + result = [val[1], val[2]] result end .,., -module_eval(<<'.,.,', 'grammar.y', 342) +module_eval(<<'.,.,', 'grammar.y', 345) def _reduce_149(val, _values, result) - result = [val[1], val[2]] + result = ThrowNode.new(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 347) +module_eval(<<'.,.,', 'grammar.y', 350) def _reduce_150(val, _values, result) - result = ThrowNode.new(val[1]) + result = ParentheticalNode.new(val[1], val[0].line) result end .,., -module_eval(<<'.,.,', 'grammar.y', 352) +module_eval(<<'.,.,', 'grammar.y', 355) def _reduce_151(val, _values, result) - result = ParentheticalNode.new(val[1], val[0].line) + result = WhileNode.new(val[1], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 357) +module_eval(<<'.,.,', 'grammar.y', 356) def _reduce_152(val, _values, result) - result = WhileNode.new(val[1], val[2]) + result = WhileNode.new(val[1], nil) result end .,., -module_eval(<<'.,.,', 'grammar.y', 358) +module_eval(<<'.,.,', 'grammar.y', 357) def _reduce_153(val, _values, result) - result = WhileNode.new(val[1], nil) + result = WhileNode.new(val[2], Expressions.wrap(val[0])) result end .,., -module_eval(<<'.,.,', 'grammar.y', 359) +module_eval(<<'.,.,', 'grammar.y', 364) def _reduce_154(val, _values, result) - result = WhileNode.new(val[2], Expressions.wrap(val[0])) + result = ForNode.new(val[0], val[3], val[2][0], val[2][1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 366) +module_eval(<<'.,.,', 'grammar.y', 365) def _reduce_155(val, _values, result) - result = ForNode.new(val[0], val[3], val[2][0], val[2][1]) + result = ForNode.new(val[3], val[2], val[1][0], val[1][1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 367) +module_eval(<<'.,.,', 'grammar.y', 370) def _reduce_156(val, _values, result) - result = ForNode.new(val[3], val[2], val[1][0], val[1][1]) + result = val result end .,., -module_eval(<<'.,.,', 'grammar.y', 372) +module_eval(<<'.,.,', 'grammar.y', 371) def _reduce_157(val, _values, result) - result = val + result = [val[0], val[2]] result end .,., -module_eval(<<'.,.,', 'grammar.y', 373) +module_eval(<<'.,.,', 'grammar.y', 376) def _reduce_158(val, _values, result) - result = [val[0], val[2]] + result = {:source => val[1]} result end .,., -module_eval(<<'.,.,', 'grammar.y', 378) +module_eval(<<'.,.,', 'grammar.y', 377) def _reduce_159(val, _values, result) - result = {:source => val[1]} + result = {:source => val[1], :object => true} result end .,., module_eval(<<'.,.,', 'grammar.y', 379) def _reduce_160(val, _values, result) - result = {:source => val[1], :object => true} + result = val[0].merge(:filter => val[2]) result end .,., module_eval(<<'.,.,', 'grammar.y', 381) def _reduce_161(val, _values, result) - result = val[0].merge(:filter => val[2]) + result = val[0].merge(:step => val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 383) +module_eval(<<'.,.,', 'grammar.y', 387) def _reduce_162(val, _values, result) - result = val[0].merge(:step => val[2]) + result = val[3].rewrite_condition(val[1]) result end .,., module_eval(<<'.,.,', 'grammar.y', 389) def _reduce_163(val, _values, result) - result = val[3].rewrite_condition(val[1]) + result = val[3].rewrite_condition(val[1]).add_else(val[5]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 391) +module_eval(<<'.,.,', 'grammar.y', 394) def _reduce_164(val, _values, result) - result = val[3].rewrite_condition(val[1]).add_else(val[5]) + result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 396) +module_eval(<<'.,.,', 'grammar.y', 395) def _reduce_165(val, _values, result) - result = val[0] + result = val[0] << val[1] result end .,., -module_eval(<<'.,.,', 'grammar.y', 397) +module_eval(<<'.,.,', 'grammar.y', 400) def _reduce_166(val, _values, result) - result = val[0] << val[1] + result = IfNode.new(val[1], val[2], nil, {:statement => true}) result end .,., @@ -2396,92 +2373,85 @@ def _reduce_167(val, _values, result) end .,., -module_eval(<<'.,.,', 'grammar.y', 404) +module_eval(<<'.,.,', 'grammar.y', 403) def _reduce_168(val, _values, result) - result = IfNode.new(val[1], val[2], nil, {:statement => true}) + result = val[2].add_comment(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 405) +module_eval(<<'.,.,', 'grammar.y', 408) def _reduce_169(val, _values, result) - result = val[2].add_comment(val[0]) + result = IfNode.new(val[1], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 410) +module_eval(<<'.,.,', 'grammar.y', 413) def _reduce_170(val, _values, result) - result = IfNode.new(val[1], val[2]) + result = val[1].force_statement result end .,., -module_eval(<<'.,.,', 'grammar.y', 415) +module_eval(<<'.,.,', 'grammar.y', 418) def _reduce_171(val, _values, result) - result = val[1].force_statement + result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 420) +module_eval(<<'.,.,', 'grammar.y', 419) def _reduce_172(val, _values, result) - result = val[0] + result = val[0].add_else(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 421) +module_eval(<<'.,.,', 'grammar.y', 424) def _reduce_173(val, _values, result) - result = val[0].add_else(val[1]) + result = nil result end .,., -module_eval(<<'.,.,', 'grammar.y', 426) +module_eval(<<'.,.,', 'grammar.y', 425) def _reduce_174(val, _values, result) - result = nil + result = val[1] result end .,., -module_eval(<<'.,.,', 'grammar.y', 427) +module_eval(<<'.,.,', 'grammar.y', 430) def _reduce_175(val, _values, result) - result = val[1] + result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 432) +module_eval(<<'.,.,', 'grammar.y', 431) def _reduce_176(val, _values, result) - result = val[0] + result = val[0].add_else(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 433) +module_eval(<<'.,.,', 'grammar.y', 436) def _reduce_177(val, _values, result) result = val[0].add_else(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 438) +module_eval(<<'.,.,', 'grammar.y', 437) def _reduce_178(val, _values, result) - result = val[0].add_else(val[1]) - result - end -.,., - -module_eval(<<'.,.,', 'grammar.y', 439) - def _reduce_179(val, _values, result) result = IfNode.new(val[2], Expressions.wrap(val[0]), nil, {:statement => true}) result end .,., -module_eval(<<'.,.,', 'grammar.y', 440) - def _reduce_180(val, _values, result) +module_eval(<<'.,.,', 'grammar.y', 438) + def _reduce_179(val, _values, result) result = IfNode.new(val[2], Expressions.wrap(val[0]), nil, {:statement => true, :invert => true}) result end From d728c3d6694103224d757473d94f1677000904a6 Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Sat, 23 Jan 2010 23:30:55 -0500 Subject: [PATCH 07/32] added existence chains with '?.' -- soaks up attempts to access undefined properties, returning 'undefined' --- lib/coffee_script/grammar.y | 5 +- lib/coffee_script/lexer.rb | 9 +- lib/coffee_script/nodes.rb | 28 +- lib/coffee_script/parser.rb | 2274 +++++++++-------- test/fixtures/execution/test_existence.coffee | 13 +- 5 files changed, 1200 insertions(+), 1129 deletions(-) diff --git a/lib/coffee_script/grammar.y b/lib/coffee_script/grammar.y index 83bb0b923b..40374b02a4 100644 --- a/lib/coffee_script/grammar.y +++ b/lib/coffee_script/grammar.y @@ -4,7 +4,7 @@ class Parser token IF ELSE UNLESS token NUMBER STRING REGEX token TRUE FALSE YES NO ON OFF -token IDENTIFIER PROPERTY_ACCESS PROTOTYPE_ACCESS +token IDENTIFIER PROPERTY_ACCESS PROTOTYPE_ACCESS SOAK_ACCESS token CODE PARAM NEW RETURN token TRY CATCH FINALLY THROW token BREAK CONTINUE @@ -242,7 +242,8 @@ rule # Accessing into an object or array, through dot or index notation. Accessor: PROPERTY_ACCESS IDENTIFIER { result = AccessorNode.new(val[1]) } - | PROTOTYPE_ACCESS IDENTIFIER { result = AccessorNode.new(val[1], true) } + | PROTOTYPE_ACCESS IDENTIFIER { result = AccessorNode.new(val[1], :prototype) } + | SOAK_ACCESS IDENTIFIER { result = AccessorNode.new(val[1], :soak) } | Index { result = val[0] } | Range { result = SliceNode.new(val[0]) } ; diff --git a/lib/coffee_script/lexer.rb b/lib/coffee_script/lexer.rb index 52c33d7b58..08980b3bfb 100644 --- a/lib/coffee_script/lexer.rb +++ b/lib/coffee_script/lexer.rb @@ -91,8 +91,15 @@ def identifier_token # 'if' will result in an [:IF, "if"] token. tag = KEYWORDS.include?(identifier) ? identifier.upcase.to_sym : :IDENTIFIER tag = :LEADING_WHEN if tag == :WHEN && [:OUTDENT, :INDENT, "\n"].include?(last_tag) - @tokens[-1][0] = :PROPERTY_ACCESS if tag == :IDENTIFIER && last_value == '.' && !(@tokens[-2] && @tokens[-2][1] == '.') @tokens[-1][0] = :PROTOTYPE_ACCESS if tag == :IDENTIFIER && last_value == '::' + if tag == :IDENTIFIER && last_value == '.' && !(@tokens[-2] && @tokens[-2][1] == '.') + if @tokens[-2][0] == "?" + @tokens[-1][0] = :SOAK_ACCESS + @tokens.delete_at(-2) + else + @tokens[-1][0] = :PROPERTY_ACCESS + end + end token(tag, identifier) @i += identifier.length end diff --git a/lib/coffee_script/nodes.rb b/lib/coffee_script/nodes.rb index 3821641502..8f7cb20fa1 100644 --- a/lib/coffee_script/nodes.rb +++ b/lib/coffee_script/nodes.rb @@ -333,7 +333,7 @@ class ValueNode < Node attr_reader :last, :source def initialize(base, properties=[]) - @base, @properties = base, properties + @base, @properties = base, [properties].flatten end def <<(other) @@ -367,12 +367,23 @@ def statement? end def compile_node(o) - only = o.delete(:only_first) - props = only ? @properties[0...-1] : @properties - parts = [@base, props].flatten.map {|val| val.compile(o) } + soaked = false + only = o.delete(:only_first) + props = only ? @properties[0...-1] : @properties + baseline = @base.compile(o) + parts = [baseline.dup] + props.each do |prop| + if prop.is_a?(AccessorNode) && prop.soak + soaked = true + parts[-1] << " == undefined ? undefined : #{baseline += prop.compile(o)}" + else + parts << prop.compile(o) + end + end @last = parts.last @source = parts.length > 1 ? parts[0...-1].join('') : nil - write(parts.join('')) + code = parts.join('') + write(soaked ? "(#{code})" : code) end end @@ -380,9 +391,12 @@ def compile_node(o) # an accessor into the object's prototype. class AccessorNode < Node children :name + attr_reader :soak - def initialize(name, prototype=false) - @name, @prototype = name, prototype + def initialize(name, tag=nil) + @name = name + @prototype = tag == :prototype + @soak = tag == :soak end def compile_node(o) diff --git a/lib/coffee_script/parser.rb b/lib/coffee_script/parser.rb index 99774b65a9..1cb6d55ed2 100644 --- a/lib/coffee_script/parser.rb +++ b/lib/coffee_script/parser.rb @@ -10,7 +10,7 @@ module CoffeeScript class Parser < Racc::Parser -module_eval(<<'...end grammar.y/module_eval...', 'grammar.y', 448) +module_eval(<<'...end grammar.y/module_eval...', 'grammar.y', 449) # Lex and parse a CoffeeScript. def parse(code) # Uncomment the following line to enable grammar debugging, in combination @@ -34,310 +34,319 @@ def on_error(error_token_id, error_value, value_stack) ##### State transition tables begin ### clist = [ -'97,9,106,20,23,27,31,35,38,46,50,56,62,261,262,179,71,1,6,10,267,267', -'17,24,28,110,114,26,14,14,128,58,138,68,102,73,2,26,11,26,14,18,26,26', -'99,26,40,44,48,54,123,127,131,93,96,101,105,109,113,116,119,122,126', -'130,92,95,100,104,108,112,115,118,121,125,129,91,94,98,103,107,111,71', -'117,120,124,42,51,141,142,300,67,277,72,9,5,174,20,23,27,31,35,38,46', -'50,56,62,246,141,142,71,1,6,10,240,251,17,24,28,30,169,252,291,276,52', -'58,89,68,168,73,2,169,11,275,14,18,57,63,249,168,40,44,48,54,60,64,254', -'169,57,63,8,42,51,267,164,168,14,181,57,63,242,14,183,184,290,140,253', -'14,206,146,141,142,233,141,142,232,141,142,138,42,51,141,142,14,67,140', -'72,9,5,146,20,23,27,31,35,38,46,50,56,62,143,57,63,71,1,6,10,57,63,17', -'24,28,30,71,57,63,26,52,58,240,68,26,73,2,26,11,182,14,18,256,240,169', -'169,40,44,48,54,60,64,168,168,257,99,8,144,57,63,140,-180,-180,140,146', -'83,140,146,42,51,146,140,133,57,63,146,57,63,242,264,14,14,165,165,266', -'42,51,57,63,242,67,243,72,9,5,26,20,23,27,31,35,38,46,50,56,62,307,99', -'77,71,1,6,10,123,127,17,24,28,30,57,63,249,89,52,58,250,68,,73,2,99', -'11,,14,18,,-180,-180,,40,44,48,54,60,64,99,261,262,,8,,123,127,131,93', -'96,101,105,109,113,116,119,122,126,130,92,95,100,104,108,112,115,183', -'184,99,176,177,,42,51,123,127,,67,,72,9,5,,20,23,27,31,35,38,46,50,56', -'62,,99,,71,1,6,10,-180,-180,17,24,28,30,,,,,52,58,,68,,73,2,99,11,,14', -'18,,123,127,,40,44,48,54,60,64,99,,,,8,,123,127,131,93,96,101,105,109', -'113,116,119,122,126,130,92,95,100,104,108,112,115,,,99,,,,42,51,-180', -'-180,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,99,,71,1,6,10,-180', -'-180,17,24,28,30,,,,,52,58,,68,,73,2,99,11,,14,18,,-180,-180,,40,44', -'48,54,60,64,99,,,,8,,123,127,131,93,96,101,105,109,113,116,119,122,126', -'130,92,95,100,104,108,112,115,,,99,,,,42,51,-180,-180,,67,,72,9,5,,20', -'23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68', -',73,2,,11,,14,18,,,,,40,44,48,54,60,64,99,,,,8,,123,127,131,93,96,101', -'105,109,113,116,119,122,126,130,92,95,100,104,108,112,115,,,,,,,42,51', -',,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28', -'30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,99,,,,8,,123', -'127,131,93,96,101,105,109,113,116,119,122,126,130,92,95,100,104,108', -'112,115,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,', -'71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48', -'54,60,64,99,,,,8,,123,127,131,93,96,101,105,109,113,116,119,122,126', -'130,92,95,100,104,108,112,115,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31', -'35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11', -',14,18,,,,,40,44,48,54,60,64,99,,,,8,,123,127,131,93,96,101,105,109', -'113,116,119,122,126,130,92,95,100,104,108,112,115,,,,,,,42,51,,,,67', -',72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,', -',,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,99,,,,8,,123,127', -'131,93,96,101,105,109,113,116,119,122,126,130,92,95,100,104,108,112', -'115,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1', -'6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,87,,,40,44,48,54', -'60,64,99,,,,8,,123,127,131,93,96,101,105,109,113,116,119,122,126,99', -',,,,,123,127,131,93,96,101,105,,42,51,,,,67,,72,9,5,,20,23,27,31,35', -'38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14', -'18,,,,,40,44,48,54,60,64,99,,,,8,,123,127,131,93,96,101,105,109,113', -'116,119,122,126,,,,,,,,,,296,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35', -'38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14', -'18,,,,,40,44,48,54,60,64,99,,,,8,,123,127,131,93,96,101,105,109,113', -'116,119,122,126,99,,,,,,123,127,131,93,96,101,105,,42,51,,,,67,,72,9', -'5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58', -',68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,99,,,,8,,123,127,131,93,96', -'101,105,109,113,116,119,122,126,99,,,,,,123,127,131,93,96,101,105,,42', -'51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24', -'28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,99,,,,8,', -'123,127,131,93,96,101,105,109,113,116,99,,,,,,123,127,131,93,96,101', -'105,109,113,116,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62', -',,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44', -'48,54,60,64,99,,,,8,,123,127,131,93,96,101,105,109,113,116,99,,,,,99', -'123,127,131,93,96,123,127,131,93,96,,42,51,,,,67,,72,9,5,,20,23,27,31', -'35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11', -',14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51', -',,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28', -'30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56', -'62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40', -'44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5', -',20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58', -',68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1', -'6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60', -'64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31', -'35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11', -',14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51', -',,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28', -'30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56', -'62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40', -'44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5', -',20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58', -',68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1', -'6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60', -'64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31', -'35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11', -',14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51', -',,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28', -'30,,,,,52,58,,68,,73,2,,11,,14,18,161,,,,40,44,48,54,60,64,,,,,8,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50', -'56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,', -'40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72', -'9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52', -'58,,68,,73,2,,11,,14,18,273,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,42,51,57,63,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62', -',,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44', -'48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20', -'23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68', -',73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10', -',,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,', -',,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35', -'38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14', -'18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,', -'67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30', -',,,,52,58,,68,,73,2,,11,,14,18,161,,,,40,44,48,54,60,64,,,,,8,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56', -'62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,26,,,,40', -'44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,57,63,,67,,72', -'9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52', -'58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71', -'1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54', -'60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27', -'31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2', -',11,,14,18,161,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,', -'17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,', -',8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38', -'46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18', -',,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67', -',72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,', -',,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62', -',,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44', -'48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20', -'23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68', -',73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10', -',,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,', -',,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35', -'38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14', -'18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,', -'67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30', -',,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62', -',,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44', -'48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20', -'23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68', -',73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10', -',,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,', -',,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35', -'38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14', -'18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,', -'67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30', -',,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62', -',,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44', -'48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20', -'23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68', -',73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10', -',,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,', -',,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35', -'38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14', -'18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,', -'67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30', -',,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62', -',,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44', -'48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20', -'23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68', -',73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10', -',,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,', -',,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35', -'38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14', -'18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,', -'67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30', -',,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62', -',,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44', -'48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20', -'23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68', -',73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10', -',,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,', -',,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35', -'38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14', -'18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,', -'67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30', -',,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62', -',,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44', -'48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20', -'23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68', -',73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10', -',,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,', -',,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,,67,,72,9,5,,20,23,27,31,35', -'38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,52,58,,68,,73,2,,11,,14', -'18,,,,,40,44,48,54,60,64,,,,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42,51,,,', -'67,,72,9,5,,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30', -',,,,52,58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,,,,,8,,20,23,27', -'31,35,38,46,50,56,62,,,,,,,,,,,24,28,,,,,,42,51,,,,67,,72,11,5,,18,', -',,97,,106,,,,,,,,,,,,,,,,,,,,,,,110,114,,,,128,,,,102,,,,,,,,,,99,67', -',72,,5,123,127,131,93,96,101,105,109,113,116,119,122,126,130,92,95,100', -'104,108,112,115,118,121,125,129,91,94,98,103,107,245,,117,120,124,,', -',,,,265,20,23,27,31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,,,,,,', -'58,,68,,73,2,,11,,14,18,,,,,40,44,48,54,60,64,,97,,106,8,,,,,,,,,,,', -',,,,,,,,,,110,114,,,,128,,42,51,102,,,67,,72,,5,,,99,,,,,,123,127,131', -'93,96,101,105,109,113,116,119,122,126,130,92,95,100,104,108,112,115', -'118,121,125,129,91,94,98,103,107,111,,117,120,124,,,,,,,304,20,23,27', -'31,35,38,46,50,56,62,,,,71,1,6,10,,,17,24,28,30,,,,,,58,,68,,73,2,,11', -',14,18,,,,,40,44,48,54,60,64,,97,,106,8,,,,20,23,27,31,35,38,46,50,56', -'62,,,,,,,,,110,114,24,28,,128,,42,51,102,,,67,,72,,5,11,,99,18,,,,,123', -'127,131,93,96,101,105,109,113,116,119,122,126,130,92,95,100,104,108', -'112,115,118,121,125,129,91,94,98,103,107,111,,117,120,124,97,,106,,', -',308,,,67,,72,,5,,,,,,,,,,,,110,114,,,,128,,,,102,,,,,,,,,,99,,,,,,123', -'127,131,93,96,101,105,109,113,116,119,122,126,130,92,95,100,104,108', -'112,115,118,121,125,129,91,94,98,103,107,245,,117,120,124,97,,106,,', -',,,,,,,,,,,,,,,,,,,,110,114,,,,128,,,,102,,,,,,,,,,99,,,,,,123,127,131', -'93,96,101,105,109,113,116,119,122,126,130,92,95,100,104,108,112,115', -'118,121,125,129,91,94,98,103,107,111,,117,120,124,97,,106,,,,,,,,,,', -',,,,,,,,,,,,110,114,,,,128,,,,102,,,,,,,,,,99,,,,,,123,127,131,93,96', -'101,105,109,113,116,119,122,126,130,92,95,100,104,108,112,115,118,121', -'125,129,91,94,98,103,107,111,,117,120,124,97,,106,,,,,,,,,,,,,,,,,,', -',,,,110,114,,,,128,,,,102,,,,,,,,,,99,,,,,,123,127,131,93,96,101,105', -'109,113,116,119,122,126,130,92,95,100,104,108,112,115,118,121,125,129', -'91,94,98,103,107,111,,117,120,124,97,,106,,,,,,,,,,,,,,,,,,,,,,,110', -'114,,,,128,,,,102,,,,,,,,,,99,,,,,,123,127,131,93,96,101,105,109,113', -'116,119,122,126,130,92,95,100,104,108,112,115,118,121,125,129,91,94', -'98,103,107,111,,117,120,124,97,,106,,,,,,,,,,,,,,,,,,,,,,,110,114,,', -',128,,,,102,,,,,,,,,,99,,,,,,123,127,131,93,96,101,105,109,113,116,119', -'122,126,130,92,95,100,104,108,112,115,118,121,125,129,91,94,98,103,107', -'111,,117,120,124,97,,106,,,,,,,,,,,,,,,,,,,,,,,110,114,,,,128,,,,102', -',,,,,,,,,99,,,,,,123,127,131,93,96,101,105,109,113,116,119,122,126,130', -'92,95,100,104,108,112,115,118,121,125,129,91,94,98,103,107,111,,117', -'120,124,97,,106,,,,,,,,,,,,,,,,,,,,,,,110,114,,,,128,,,,102,,,,,,,,', -',99,,,,,,123,127,131,93,96,101,105,109,113,116,119,122,126,130,92,95', -'100,104,108,112,115,118,121,125,129,91,94,98,103,107,111,,117,120,124', -'97,,106,,,,,,,,,,,,,,,,,,,,,,,110,114,,,,128,,,,102,,,,,,,,,,99,,,,', -',123,127,131,93,96,101,105,109,113,116,119,122,126,130,92,95,100,104', -'108,112,115,118,121,125,129,91,94,98,103,107,111,,117,120,124,97,,106', -',,,,,,,,,,,,,,,,,,,,,,110,114,,,,128,,,,102,,,,,,,,,,99,,,,,,123,127', -'131,93,96,101,105,109,113,116,119,122,126,130,92,95,100,104,108,112', -'115,118,121,125,129,91,94,98,103,107,111,,117,120,124,97,,106,,,,,,', -',,,,,,,,,,,,,,,,110,114,,,,128,,,,102,,,,,,,,,,99,,,,,,123,127,131,93', -'96,101,105,109,113,116,119,122,126,130,92,95,100,104,108,112,115,118', -'121,125,129,91,94,98,103,107,111,,117,120,124,97,,106,,,,,,,,,,,,,,', -',,,,,,,,110,114,,,,128,,,,102,,,,,,,,,,99,,,,,,123,127,131,93,96,101', -'105,109,113,116,119,122,126,130,92,95,100,104,108,112,115,118,121,125', -'129,91,94,98,103,107,111,,117,120,124,97,,106,,,,,,,,,,,,,,,,,,,,,,', -'110,114,,,,128,,,,102,,,,,,,,,,99,,,,,,123,127,131,93,96,101,105,109', -'113,116,119,122,126,130,92,95,100,104,108,112,115,118,121,125,129,91', -'94,98,103,107,111,,117,120,124,97,,106,,,,,,,,,,,,,,,,,,,,,,,110,114', -',,,128,,,,102,,,,,,,,26,,99,,,,,,123,127,131,93,96,101,105,109,113,116', -'119,122,126,130,92,95,100,104,108,112,115,118,121,125,129,91,94,98,103', -'107,111,,117,120,124,97,,106,,,,,,,,,,,,,,,,,,,,,,,110,114,,,,128,,', -',102,,,,,,,,,,99,,,,,,123,127,131,93,96,101,105,109,113,116,119,122', -'126,130,92,95,100,104,108,112,115,118,121,125,129,91,94,98,103,107,111', -',117,120,124,97,,106,,,,,,,,,,,,,,,,,,,,,,,110,114,,,,128,,,,102,,,', -',,,,,,99,,,,,,123,127,131,93,96,101,105,109,113,116,119,122,126,130', -'92,95,100,104,108,112,115,118,121,125,129,91,94,98,103,107,111,,117', -'120,124,97,,106,,,,,,,,,,,,,,,,,,,,,,,110,114,,,,128,,,,102,,,,,,,,239', -',99,,,,,,123,127,131,93,96,101,105,109,113,116,119,122,126,130,92,95', -'100,104,108,112,115,118,121,125,129,91,94,98,103,107,111,,117,120,124', -'97,,106,,,,,,,,,,,,,,,,,,,,,,,110,114,,,,128,,,,102,,,,,,,,26,,99,,', -',,,123,127,131,93,96,101,105,109,113,116,119,122,126,130,92,95,100,104', -'108,112,115,118,121,125,129,91,94,98,103,107,111,,117,120,124,97,,106', -',,,,,,,,,,,,,,,,,,,,,,110,114,,,,128,,,,102,,,,,,,,,,99,,,,,,123,127', -'131,93,96,101,105,109,113,116,119,122,126,130,92,95,100,104,108,112', -'115,118,121,125,129,91,94,98,103,107,111,,117,120,124,110,114,,,,,,', -',102,,,,,,,,,,99,,,,,,123,127,131,93,96,101,105,109,113,116,119,122', -'126,130,92,95,100,104,108,112,115,118,121,125,129,91,94,98,103,107,111', -',117,120,124,110,114,,,,,,,,102,,,,,,,,,,99,,,,,,123,127,131,93,96,101', -'105,109,113,116,119,122,126,130,92,95,100,104,108,112,115,118,121,125', -'129,91,94,98,103,107,111,110,114,,,,,,,,102,,,,,,,,,,99,,,,,,123,127', -'131,93,96,101,105,109,113,116,119,122,126,130,92,95,100,104,108,112', -'115,118,121,125,129,91,94,98,103,107,111,110,114,,,,,,,,102,,,,,,,,', -',99,,,,,,123,127,131,93,96,101,105,109,113,116,119,122,126,130,92,95', -'100,104,108,112,115,118,121,125,129,91,94,98,103,107,111,110,114,,,', -',,,,102,,,,,,,,,,99,,,,,,123,127,131,93,96,101,105,109,113,116,119,122', -'126,130,92,95,100,104,108,112,115,118,121,125,129,91,94,98,103,107,111', -'110,114,,,,,,,,102,,,,,,,,,,99,,,,,,123,127,131,93,96,101,105,109,113', -'116,119,122,126,130,92,95,100,104,108,112,115,118,121,125,129,91,94', -'98,103,107,111,114,,,,,,,,102,,,,,,,,,,99,,,,,,123,127,131,93,96,101', -'105,109,113,116,119,122,126,130,92,95,100,104,108,112,115,118,121,125', -'129,91,94,98,103,107,111,114,,,,,,,,102,,,,,,,,,,99,,,,,,123,127,131', -'93,96,101,105,109,113,116,119,122,126,130,92,95,100,104,108,112,115', -'118,121,125,129,91,94,98,103,107,111,114,,,,,,,,102,,,,,,,,,,99,,,,', -',123,127,131,93,96,101,105,109,113,116,119,122,126,130,92,95,100,104', -'108,112,115,118,121,125,129,91,94,98,103,107,111,114,,,,,,,,102,,,,', -',,,,,99,,,,,,123,127,131,93,96,101,105,109,113,116,119,122,126,130,92', -'95,100,104,108,112,115,118,121,125,129,91,94,98,103,107,111,114,,,,', -',,,102,,,,,,,,,,99,,,,,,123,127,131,93,96,101,105,109,113,116,119,122', -'126,130,92,95,100,104,108,112,115,118,121,125,129,91,94,98,103,107,111', -'102,,,,,,,,,,99,,,,,,123,127,131,93,96,101,105,109,113,116,119,122,126', -'130,92,95,100,104,108,112,115,118,121,125,129,91,94,98,103,107,102,', -',,,,,,,,99,,,,,,123,127,131,93,96,101,105,109,113,116,119,122,126,130', -'92,95,100,104,108,112,115,118,121,125,129,91,94,98,103,107,102,,,,,', -',,,,99,,,,,,123,127,131,93,96,101,105,109,113,116,119,122,126,130,92', -'95,100,104,108,112,115,118,121,125,129,91,94,98,103,107,99,,,,,,123', -'127,131,93,96,101,105,109,113,116,119,122,126,130,92,95,100,104,108', -'112,115,118,121,125,129,91,94,98,103,107,99,,,,,,123,127,131,93,96,101', -'105,109,113,116,119,122,126,130,92,95,100,104,108,112,115,118,121,125', -'129,91,94,98,103,107,99,,,,,,123,127,131,93,96,101,105,109,113,116,119', -'122,126,130,92,95,100,104,108,112,115,118,121,125,129,91,94,98,103,107', -'99,,,,,,123,127,131,93,96,101,105,109,113,116,119,122,126,130,92,95', -'100,104,108,112,115,118,121,125,129,91,94,98,103,107,99,,,,,,123,127', -'131,93,96,101,105,109,113,116,119,122,126,130,92,95,100,104,108,112', -'115,118,121,125,129,91,94,98,103,107' ] - racc_action_table = arr = Array.new(9713, nil) +'106,9,114,20,24,27,32,36,40,46,50,55,61,276,270,271,30,1,5,11,14,18', +'276,22,28,33,122,126,30,30,18,99,63,218,72,115,3,6,284,15,145,18,26', +'179,30,111,1,44,48,53,59,135,139,102,105,109,113,118,121,125,128,131', +'134,138,101,104,108,112,117,120,124,127,130,133,137,100,103,107,110', +'116,119,123,30,129,132,136,51,56,149,151,152,71,178,2,9,10,183,20,24', +'27,32,36,40,46,50,55,61,294,149,151,152,1,5,11,14,51,56,22,28,33,35', +'62,66,189,242,57,63,97,72,302,3,6,80,15,241,18,26,255,256,276,79,44', +'48,53,59,64,68,18,111,239,293,13,111,263,135,139,30,249,135,139,102', +'105,109,113,118,145,150,62,66,18,156,149,151,152,149,151,152,149,151', +'152,51,56,62,66,176,71,150,2,9,10,156,20,24,27,32,36,40,46,50,55,61', +'62,66,251,91,1,5,11,14,262,1,22,28,33,35,30,62,66,249,57,63,249,72,80', +'3,6,111,15,30,18,26,79,-181,-181,265,44,48,53,59,64,68,111,30,80,266', +'13,187,-181,-181,150,190,79,150,156,30,150,156,51,56,156,18,141,62,66', +'251,62,66,251,85,252,275,149,151,152,51,56,62,66,173,71,18,2,9,10,273', +'20,24,27,32,36,40,46,50,55,61,309,153,270,271,1,5,11,14,75,80,22,28', +'33,35,80,62,66,79,57,63,97,72,79,3,6,111,15,,18,26,,-181,-181,,44,48', +'53,59,64,68,184,185,,111,13,154,18,,76,-181,-181,18,,76,150,111,191', +'192,156,62,66,135,139,102,105,109,113,118,121,125,128,191,192,51,56', +',,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,111,,1,5,11,14,135,139', +'22,28,33,35,62,66,176,,57,63,177,72,,3,6,111,15,,18,26,,135,139,,44', +'48,53,59,64,68,111,,,,13,,135,139,102,105,109,113,118,121,125,128,131', +'134,138,101,104,108,112,117,120,124,127,,,111,,,,51,56,-181,-181,,71', +',2,9,10,,20,24,27,32,36,40,46,50,55,61,,,111,,1,5,11,14,-181,-181,22', +'28,33,35,,,,,57,63,,72,,3,6,111,15,,18,26,,-181,-181,,44,48,53,59,64', +'68,111,,,,13,,135,139,102,105,109,113,118,121,125,128,131,134,138,101', +'104,108,112,117,120,124,127,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36', +'40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18', +'26,,,,,44,48,53,59,64,68,111,,,,13,,135,139,102,105,109,113,118,121', +'125,128,131,134,138,101,104,108,112,117,120,124,127,,,,,,,51,56,,,,71', +',2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,', +',,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,,13,,135,139', +'102,105,109,113,118,121,125,128,131,134,138,101,104,108,112,117,120', +'124,127,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,', +',1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53', +'59,64,68,111,,,,13,,135,139,102,105,109,113,118,121,125,128,131,134', +'138,101,104,108,112,117,120,124,127,,,,,,,51,56,,,,71,,2,9,10,,20,24', +'27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3', +'6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,,13,,135,139,102,105,109,113', +'118,121,125,128,131,134,138,101,104,108,112,117,120,124,127,,,,,,,51', +'56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28', +'33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,,13', +',135,139,102,105,109,113,118,121,125,128,131,134,138,101,104,108,112', +'117,120,124,127,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55', +'61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44', +'48,53,59,64,68,111,,,,13,,135,139,102,105,109,113,118,121,125,128,131', +'134,138,101,104,108,112,117,120,124,127,,299,,,,,51,56,,,,71,,2,9,10', +',20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63', +',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,,13,,135,139,102,105', +'109,113,118,121,125,128,131,134,138,111,,,,,,135,139,102,105,109,113', +'118,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14', +',,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,111', +',,,13,,135,139,102,105,109,113,118,121,125,128,131,134,138,111,,,,,', +'135,139,102,105,109,113,118,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40', +'46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26', +',95,,,44,48,53,59,64,68,111,,,,13,,135,139,102,105,109,113,118,121,125', +'128,131,134,138,111,,,,,,135,139,102,105,109,,,,51,56,,,,71,,2,9,10', +',20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63', +',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,,13,,135,139,102,105', +'109,113,118,121,125,128,131,134,138,111,,,,,,135,139,102,105,109,,,', +'51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22', +'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,', +'13,,135,139,102,105,109,113,118,121,125,128,111,,,,,,135,139,102,105', +'109,113,118,121,125,128,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50', +'55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,', +'44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2', +'9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,', +'57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,', +',,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,', +',,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,282,,,,44,48', +'53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,62,66,,71,,2,9', +'10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57', +'63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1', +'5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59', +'64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24', +'27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3', +'6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,', +',22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,', +',13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36', +'40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18', +'26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,', +',71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33', +'35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55', +'61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44', +'48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10', +',20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63', +',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5', +'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64', +'68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27', +'32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6', +',15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +'51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22', +'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46', +'50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,170', +',,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71', +',2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,', +',,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61', +',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48', +'53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,', +'20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63', +',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5', +'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64', +'68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27', +'32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6', +',15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +'51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22', +'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,170,,,,44,48,53,59,64,68,,,,', +'13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40', +'46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26', +',,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71', +',2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,', +',,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61', +',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48', +'53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,', +'20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63', +',72,,3,6,,15,,18,26,170,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,', +',,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1', +'5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59', +'64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24', +'27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3', +'6,,15,,18,26,30,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,', +',,,,51,56,62,66,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11', +'14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68', +',,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32', +'36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15', +',18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56', +',,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33', +'35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55', +'61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44', +'48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10', +',20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63', +',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5', +'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64', +'68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27', +'32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6', +',15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +'51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22', +'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46', +'50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,', +',,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71', +',2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,', +',,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61', +',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48', +'53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,', +'20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63', +',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5', +'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64', +'68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27', +'32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6', +',15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +'51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22', +'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46', +'50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,', +',,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71', +',2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,', +',,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61', +',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48', +'53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,', +'20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63', +',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5', +'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64', +'68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27', +'32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6', +',15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +'51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22', +'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46', +'50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,', +',,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71', +',2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,', +',,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61', +',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48', +'53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,', +'20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63', +',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5', +'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64', +'68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27', +'32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6', +',15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +'51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22', +'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13', +'20,24,27,32,36,40,46,50,55,61,,,,,,,,,,,,28,33,,,,,,51,56,,,,71,,2,15', +'10,,26,,,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99,,,,115,,,,,,', +',,,111,71,,2,,10,135,139,102,105,109,113,118,121,125,128,131,134,138', +'101,104,108,112,117,120,124,127,130,133,137,100,103,107,110,116,119', +'254,,129,132,136,,,,,,,274,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11', +'14,,,22,28,33,,,,,,,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,', +',13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,,10,20,24,27,32,36,40', +'46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,,63,,72,,3,6,,15,,18,26', +',,,,44,48,53,59,64,68,106,,114,,13,,,20,24,27,32,36,40,46,50,55,61,', +',,,,,,,,122,126,28,33,,99,,51,56,115,,,71,,2,,10,15,,111,26,,,,,135', +'139,102,105,109,113,118,121,125,128,131,134,138,101,104,108,112,117', +'120,124,127,130,133,137,100,103,107,110,116,119,123,,129,132,136,106', +',114,,,,306,,,71,,2,,10,,,,,,,,,,,,,122,126,,,,99,,,,115,,,,,,,,,,111', +',,,,,135,139,102,105,109,113,118,121,125,128,131,134,138,101,104,108', +'112,117,120,124,127,130,133,137,100,103,107,110,116,119,123,,129,132', +'136,106,,114,,,,310,,,,,,,,,,,,,,,,,,,,122,126,,,,99,,,,115,,,,,,,,30', +',111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138,101,104', +'108,112,117,120,124,127,130,133,137,100,103,107,110,116,119,123,,129', +'132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99,,,,115,,,,,,,', +',,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138,101,104', +'108,112,117,120,124,127,130,133,137,100,103,107,110,116,119,123,,129', +'132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99,,,,115,,,,,,,', +',,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138,101,104', +'108,112,117,120,124,127,130,133,137,100,103,107,110,116,119,123,,129', +'132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99,,,,115,,,,,,,', +',,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138,101,104', +'108,112,117,120,124,127,130,133,137,100,103,107,110,116,119,123,,129', +'132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99,,,,115,,,,,,,', +',,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138,101,104', +'108,112,117,120,124,127,130,133,137,100,103,107,110,116,119,123,,129', +'132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99,,,,115,,,,,,,', +',,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138,101,104', +'108,112,117,120,124,127,130,133,137,100,103,107,110,116,119,123,,129', +'132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99,,,,115,,,,,,,', +',,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138,101,104', +'108,112,117,120,124,127,130,133,137,100,103,107,110,116,119,123,,129', +'132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99,,,,115,,,,,,,', +',,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138,101,104', +'108,112,117,120,124,127,130,133,137,100,103,107,110,116,119,123,,129', +'132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99,,,,115,,,,,,,', +',,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138,101,104', +'108,112,117,120,124,127,130,133,137,100,103,107,110,116,119,123,,129', +'132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99,,,,115,,,,,,,', +'30,,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138,101', +'104,108,112,117,120,124,127,130,133,137,100,103,107,110,116,119,123', +',129,132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99,,,,115,,', +',,,,,,,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138', +'101,104,108,112,117,120,124,127,130,133,137,100,103,107,110,116,119', +'254,,129,132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99,,,,115', +',,,,,,,,,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138', +'101,104,108,112,117,120,124,127,130,133,137,100,103,107,110,116,119', +'123,,129,132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99,,,,115', +',,,,,,,,,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138', +'101,104,108,112,117,120,124,127,130,133,137,100,103,107,110,116,119', +'123,,129,132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99,,,,115', +',,,,,,,248,,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134', +'138,101,104,108,112,117,120,124,127,130,133,137,100,103,107,110,116', +'119,123,,129,132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99,', +',,115,,,,,,,,,,111,,,,,,135,139,102,105,109,113,118,121,125,128,131', +'134,138,101,104,108,112,117,120,124,127,130,133,137,100,103,107,110', +'116,119,123,,129,132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,', +'99,,,,115,,,,,,,,,,111,,,,,,135,139,102,105,109,113,118,121,125,128', +'131,134,138,101,104,108,112,117,120,124,127,130,133,137,100,103,107', +'110,116,119,123,,129,132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126', +',,,99,,,,115,,,,,,,,,,111,,,,,,135,139,102,105,109,113,118,121,125,128', +'131,134,138,101,104,108,112,117,120,124,127,130,133,137,100,103,107', +'110,116,119,123,,129,132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126', +',,,99,,,,115,,,,,,,,,,111,,,,,,135,139,102,105,109,113,118,121,125,128', +'131,134,138,101,104,108,112,117,120,124,127,130,133,137,100,103,107', +'110,116,119,123,,129,132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126', +',,,99,,,,115,,,,,,,,,,111,,,,,,135,139,102,105,109,113,118,121,125,128', +'131,134,138,101,104,108,112,117,120,124,127,130,133,137,100,103,107', +'110,116,119,123,,129,132,136,122,126,,,,,,,,115,,,,,,,,,,111,,,,,,135', +'139,102,105,109,113,118,121,125,128,131,134,138,101,104,108,112,117', +'120,124,127,130,133,137,100,103,107,110,116,119,123,,129,132,136,122', +'126,,,,,,,,115,,,,,,,,,,111,,,,,,135,139,102,105,109,113,118,121,125', +'128,131,134,138,101,104,108,112,117,120,124,127,130,133,137,100,103', +'107,110,116,119,123,122,126,,,,,,,,115,,,,,,,,,,111,,,,,,135,139,102', +'105,109,113,118,121,125,128,131,134,138,101,104,108,112,117,120,124', +'127,130,133,137,100,103,107,110,116,119,123,122,126,,,,,,,,115,,,,,', +',,,,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138,101', +'104,108,112,117,120,124,127,130,133,137,100,103,107,110,116,119,123', +'122,126,,,,,,,,115,,,,,,,,,,111,,,,,,135,139,102,105,109,113,118,121', +'125,128,131,134,138,101,104,108,112,117,120,124,127,130,133,137,100', +'103,107,110,116,119,123,122,126,,,,,,,,115,,,,,,,,,,111,,,,,,135,139', +'102,105,109,113,118,121,125,128,131,134,138,101,104,108,112,117,120', +'124,127,130,133,137,100,103,107,110,116,119,123,126,,,,,,,,115,,,,,', +',,,,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138,101', +'104,108,112,117,120,124,127,130,133,137,100,103,107,110,116,119,123', +'126,,,,,,,,115,,,,,,,,,,111,,,,,,135,139,102,105,109,113,118,121,125', +'128,131,134,138,101,104,108,112,117,120,124,127,130,133,137,100,103', +'107,110,116,119,123,126,,,,,,,,115,,,,,,,,,,111,,,,,,135,139,102,105', +'109,113,118,121,125,128,131,134,138,101,104,108,112,117,120,124,127', +'130,133,137,100,103,107,110,116,119,123,126,,,,,,,,115,,,,,,,,,,111', +',,,,,135,139,102,105,109,113,118,121,125,128,131,134,138,101,104,108', +'112,117,120,124,127,130,133,137,100,103,107,110,116,119,123,126,,,,', +',,,115,,,,,,,,,,111,,,,,,135,139,102,105,109,113,118,121,125,128,131', +'134,138,101,104,108,112,117,120,124,127,130,133,137,100,103,107,110', +'116,119,123,115,,,,,,,,,,111,,,,,,135,139,102,105,109,113,118,121,125', +'128,131,134,138,101,104,108,112,117,120,124,127,130,133,137,100,103', +'107,110,116,119,115,,,,,,,,,,111,,,,,,135,139,102,105,109,113,118,121', +'125,128,131,134,138,101,104,108,112,117,120,124,127,130,133,137,100', +'103,107,110,116,119,115,,,,,,,,,,111,,,,,,135,139,102,105,109,113,118', +'121,125,128,131,134,138,101,104,108,112,117,120,124,127,130,133,137', +'100,103,107,110,116,119,111,,,,,,135,139,102,105,109,113,118,121,125', +'128,131,134,138,101,104,108,112,117,120,124,127,130,133,137,100,103', +'107,110,116,119,111,,,,,,135,139,102,105,109,113,118,121,125,128,131', +'134,138,101,104,108,112,117,120,124,127,130,133,137,100,103,107,110', +'116,119,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138', +'101,104,108,112,117,120,124,127,130,133,137,100,103,107,110,116,119', +'111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138,101,104', +'108,112,117,120,124,127,130,133,137,100,103,107,110,116,119,111,,,,', +',135,139,102,105,109,113,118,121,125,128,131,134,138,101,104,108,112', +'117,120,124,127,130,133,137,100,103,107,110,116,119' ] + racc_action_table = arr = Array.new(9843, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -347,343 +356,350 @@ def on_error(error_token_id, error_value, value_stack) end clist = [ -'78,138,78,99,99,99,99,99,99,99,99,99,99,185,185,83,99,99,99,99,293,239', -'99,99,99,78,78,185,293,239,78,99,34,99,78,99,99,256,99,254,99,99,288', -'138,78,37,99,99,99,99,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78', -'78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,266,78,78,78,99,99,235', -'235,288,99,247,99,98,99,78,98,98,98,98,98,98,98,98,98,98,164,66,66,98', -'98,98,98,172,168,98,98,98,98,280,169,268,246,98,98,30,98,280,98,98,249', -'98,245,98,98,247,247,247,249,98,98,98,98,98,98,176,248,29,29,98,266', -'266,268,71,248,280,86,172,172,172,268,90,90,268,235,172,249,111,235', -'75,75,142,234,234,141,36,36,135,98,98,76,76,248,98,66,98,124,98,66,124', -'124,124,124,124,124,124,124,124,124,36,86,86,124,124,124,124,25,25,124', -'124,124,124,133,249,249,132,124,124,237,124,291,124,124,177,124,89,124', -'124,178,160,165,72,124,124,124,124,124,124,165,72,182,154,124,36,269', -'269,75,154,154,234,75,16,36,234,33,33,36,76,33,299,299,76,237,237,237', -'206,165,72,165,72,237,124,124,160,160,160,124,160,124,5,124,10,5,5,5', -'5,5,5,5,5,5,5,301,191,2,5,5,5,5,191,191,5,5,5,5,167,167,167,110,5,5', -'167,5,,5,5,157,5,,5,5,,157,157,,5,5,5,5,5,5,203,263,263,,5,,203,203', -'203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203', -'203,203,205,205,188,82,82,,5,5,188,188,,5,,5,122,5,,122,122,122,122', -'122,122,122,122,122,122,,152,,122,122,122,122,152,152,122,122,122,122', -',,,,122,122,,122,,122,122,224,122,,122,122,,224,224,,122,122,122,122', -'122,122,222,,,,122,,222,222,222,222,222,222,222,222,222,222,222,222', -'222,222,222,222,222,222,222,222,222,,,156,,,,122,122,156,156,,122,,122', -'8,122,,8,8,8,8,8,8,8,8,8,8,,150,,8,8,8,8,150,150,8,8,8,8,,,,,8,8,,8', -',8,8,151,8,,8,8,,151,151,,8,8,8,8,8,8,216,,,,8,,216,216,216,216,216', -'216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,,,80', -',,,8,8,80,80,,8,,8,9,8,,9,9,9,9,9,9,9,9,9,9,,,,9,9,9,9,,,9,9,9,9,,,', -',9,9,,9,,9,9,,9,,9,9,,,,,9,9,9,9,9,9,213,,,,9,,213,213,213,213,213,213', -'213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,,,,,,,9', -'9,,,,9,,9,300,9,,300,300,300,300,300,300,300,300,300,300,,,,300,300', -'300,300,,,300,300,300,300,,,,,300,300,,300,,300,300,,300,,300,300,,', -',,300,300,300,300,300,300,199,,,,300,,199,199,199,199,199,199,199,199', -'199,199,199,199,199,199,199,199,199,199,199,199,199,,,,,,,300,300,,', -',300,,300,121,300,,121,121,121,121,121,121,121,121,121,121,,,,121,121', -'121,121,,,121,121,121,121,,,,,121,121,,121,,121,121,,121,,121,121,,', -',,121,121,121,121,121,121,207,,,,121,,207,207,207,207,207,207,207,207', -'207,207,207,207,207,207,207,207,207,207,207,207,207,,,,,,,121,121,,', -',121,,121,17,121,,17,17,17,17,17,17,17,17,17,17,,,,17,17,17,17,,,17', -'17,17,17,,,,,17,17,,17,,17,17,,17,,17,17,,,,,17,17,17,17,17,17,219,', -',,17,,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219', -'219,219,219,219,219,,,,,,,17,17,,,,17,,17,120,17,,120,120,120,120,120', -'120,120,120,120,120,,,,120,120,120,120,,,120,120,120,120,,,,,120,120', -',120,,120,120,,120,,120,120,,,,,120,120,120,120,120,120,210,,,,120,', -'210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210', -'210,210,210,210,,,,,,,120,120,,,,120,,120,26,120,,26,26,26,26,26,26', -'26,26,26,26,,,,26,26,26,26,,,26,26,26,26,,,,,26,26,,26,,26,26,,26,,26', -'26,,26,,,26,26,26,26,26,26,190,,,,26,,190,190,190,190,190,190,190,190', -'190,190,190,190,190,208,,,,,,208,208,208,208,208,208,208,,26,26,,,,26', -',26,275,26,,275,275,275,275,275,275,275,275,275,275,,,,275,275,275,275', -',,275,275,275,275,,,,,275,275,,275,,275,275,,275,,275,275,,,,,275,275', -'275,275,275,275,187,,,,275,,187,187,187,187,187,187,187,187,187,187', -'187,187,187,,,,,,,,,,275,,,,,275,275,,,,275,,275,273,275,,273,273,273', -'273,273,273,273,273,273,273,,,,273,273,273,273,,,273,273,273,273,,,', -',273,273,,273,,273,273,,273,,273,273,,,,,273,273,273,273,273,273,223', -',,,273,,223,223,223,223,223,223,223,223,223,223,223,223,223,211,,,,', -',211,211,211,211,211,211,211,,273,273,,,,273,,273,272,273,,272,272,272', -'272,272,272,272,272,272,272,,,,272,272,272,272,,,272,272,272,272,,,', -',272,272,,272,,272,272,,272,,272,272,,,,,272,272,272,272,272,272,195', -',,,272,,195,195,195,195,195,195,195,195,195,195,195,195,195,204,,,,', -',204,204,204,204,204,204,204,,272,272,,,,272,,272,267,272,,267,267,267', -'267,267,267,267,267,267,267,,,,267,267,267,267,,,267,267,267,267,,,', -',267,267,,267,,267,267,,267,,267,267,,,,,267,267,267,267,267,267,217', -',,,267,,217,217,217,217,217,217,217,217,217,217,220,,,,,,220,220,220', -'220,220,220,220,220,220,220,,267,267,,,,267,,267,262,267,,262,262,262', -'262,262,262,262,262,262,262,,,,262,262,262,262,,,262,262,262,262,,,', -',262,262,,262,,262,262,,262,,262,262,,,,,262,262,262,262,262,262,214', -',,,262,,214,214,214,214,214,214,214,214,214,214,200,,,,,196,200,200', -'200,200,200,196,196,196,196,196,,262,262,,,,262,,262,261,262,,261,261', -'261,261,261,261,261,261,261,261,,,,261,261,261,261,,,261,261,261,261', -',,,,261,261,,261,,261,261,,261,,261,261,,,,,261,261,261,261,261,261', -',,,,261,,,,,,,,,,,,,,,,,,,,,,,,,,,,,261,261,,,,261,,261,252,261,,252', -'252,252,252,252,252,252,252,252,252,,,,252,252,252,252,,,252,252,252', -'252,,,,,252,252,,252,,252,252,,252,,252,252,,,,,252,252,252,252,252', -'252,,,,,252,,,,,,,,,,,,,,,,,,,,,,,,,,,,,252,252,,,,252,,252,40,252,', -'40,40,40,40,40,40,40,40,40,40,,,,40,40,40,40,,,40,40,40,40,,,,,40,40', -',40,,40,40,,40,,40,40,,,,,40,40,40,40,40,40,,,,,40,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,40,40,,,,40,,40,44,40,,44,44,44,44,44,44,44,44,44,44,,,,44', -'44,44,44,,,44,44,44,44,,,,,44,44,,44,,44,44,,44,,44,44,,,,,44,44,44', -'44,44,44,,,,,44,,,,,,,,,,,,,,,,,,,,,,,,,,,,,44,44,,,,44,,44,48,44,,48', -'48,48,48,48,48,48,48,48,48,,,,48,48,48,48,,,48,48,48,48,,,,,48,48,,48', -',48,48,,48,,48,48,,,,,48,48,48,48,48,48,,,,,48,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,48,48,,,,48,,48,52,48,,52,52,52,52,52,52,52,52,52,52,,,,52,52', -'52,52,,,52,52,52,52,,,,,52,52,,52,,52,52,,52,,52,52,,,,,52,52,52,52', -'52,52,,,,,52,,,,,,,,,,,,,,,,,,,,,,,,,,,,,52,52,,,,52,,52,54,52,,54,54', -'54,54,54,54,54,54,54,54,,,,54,54,54,54,,,54,54,54,54,,,,,54,54,,54,', -'54,54,,54,,54,54,,,,,54,54,54,54,54,54,,,,,54,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,54,54,,,,54,,54,58,54,,58,58,58,58,58,58,58,58,58,58,,,,58,58', -'58,58,,,58,58,58,58,,,,,58,58,,58,,58,58,,58,,58,58,,,,,58,58,58,58', -'58,58,,,,,58,,,,,,,,,,,,,,,,,,,,,,,,,,,,,58,58,,,,58,,58,60,58,,60,60', -'60,60,60,60,60,60,60,60,,,,60,60,60,60,,,60,60,60,60,,,,,60,60,,60,', -'60,60,,60,,60,60,,,,,60,60,60,60,60,60,,,,,60,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,60,60,,,,60,,60,64,60,,64,64,64,64,64,64,64,64,64,64,,,,64,64', -'64,64,,,64,64,64,64,,,,,64,64,,64,,64,64,,64,,64,64,,,,,64,64,64,64', -'64,64,,,,,64,,,,,,,,,,,,,,,,,,,,,,,,,,,,,64,64,,,,64,,64,251,64,,251', -'251,251,251,251,251,251,251,251,251,,,,251,251,251,251,,,251,251,251', -'251,,,,,251,251,,251,,251,251,,251,,251,251,,,,,251,251,251,251,251', -'251,,,,,251,,,,,,,,,,,,,,,,,,,,,,,,,,,,,251,251,,,,251,,251,67,251,', -'67,67,67,67,67,67,67,67,67,67,,,,67,67,67,67,,,67,67,67,67,,,,,67,67', -',67,,67,67,,67,,67,67,67,,,,67,67,67,67,67,67,,,,,67,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,67,67,,,,67,,67,68,67,,68,68,68,68,68,68,68,68,68,68,,', -',68,68,68,68,,,68,68,68,68,,,,,68,68,,68,,68,68,,68,,68,68,,,,,68,68', -'68,68,68,68,,,,,68,,,,,,,,,,,,,,,,,,,,,,,,,,,,,68,68,,,,68,,68,242,68', -',242,242,242,242,242,242,242,242,242,242,,,,242,242,242,242,,,242,242', -'242,242,,,,,242,242,,242,,242,242,,242,,242,242,242,,,,242,242,242,242', -'242,242,,,,,242,,,,,,,,,,,,,,,,,,,,,,,,,,,,,242,242,242,242,,242,,242', -'241,242,,241,241,241,241,241,241,241,241,241,241,,,,241,241,241,241', -',,241,241,241,241,,,,,241,241,,241,,241,241,,241,,241,241,,,,,241,241', -'241,241,241,241,,,,,241,,,,,,,,,,,,,,,,,,,,,,,,,,,,,241,241,,,,241,', -'241,73,241,,73,73,73,73,73,73,73,73,73,73,,,,73,73,73,73,,,73,73,73', -'73,,,,,73,73,,73,,73,73,,73,,73,73,,,,,73,73,73,73,73,73,,,,,73,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,73,73,,,,73,,73,119,73,,119,119,119,119,119', -'119,119,119,119,119,,,,119,119,119,119,,,119,119,119,119,,,,,119,119', -',119,,119,119,,119,,119,119,,,,,119,119,119,119,119,119,,,,,119,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,119,119,,,,119,,119,184,119,,184,184,184,184', -'184,184,184,184,184,184,,,,184,184,184,184,,,184,184,184,184,,,,,184', -'184,,184,,184,184,,184,,184,184,,,,,184,184,184,184,184,184,,,,,184', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,184,184,,,,184,,184,77,184,,77,77,77,77', -'77,77,77,77,77,77,,,,77,77,77,77,,,77,77,77,77,,,,,77,77,,77,,77,77', -',77,,77,77,77,,,,77,77,77,77,77,77,,,,,77,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,77,77,,,,77,,77,0,77,,0,0,0,0,0,0,0,0,0,0,,,,0,0,0,0,,,0,0,0,0,,,', -',0,0,,0,,0,0,,0,,0,0,0,,,,0,0,0,0,0,0,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,0,0,0,0,,0,,0,183,0,,183,183,183,183,183,183,183,183,183,183,,,', -'183,183,183,183,,,183,183,183,183,,,,,183,183,,183,,183,183,,183,,183', -'183,,,,,183,183,183,183,183,183,,,,,183,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -'183,183,,,,183,,183,161,183,,161,161,161,161,161,161,161,161,161,161', -',,,161,161,161,161,,,161,161,161,161,,,,,161,161,,161,,161,161,,161', -',161,161,,,,,161,161,161,161,161,161,,,,,161,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,161,161,,,,161,,161,146,161,,146,146,146,146,146,146,146,146,146', -'146,,,,146,146,146,146,,,146,146,146,146,,,,,146,146,,146,,146,146,', -'146,,146,146,146,,,,146,146,146,146,146,146,,,,,146,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,146,146,,,,146,,146,144,146,,144,144,144,144,144,144,144', -'144,144,144,,,,144,144,144,144,,,144,144,144,144,,,,,144,144,,144,,144', -'144,,144,,144,144,,,,,144,144,144,144,144,144,,,,,144,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,144,144,,,,144,,144,118,144,,118,118,118,118,118,118,118', -'118,118,118,,,,118,118,118,118,,,118,118,118,118,,,,,118,118,,118,,118', -'118,,118,,118,118,,,,,118,118,118,118,118,118,,,,,118,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,118,118,,,,118,,118,140,118,,140,140,140,140,140,140,140', -'140,140,140,,,,140,140,140,140,,,140,140,140,140,,,,,140,140,,140,,140', -'140,,140,,140,140,,,,,140,140,140,140,140,140,,,,,140,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,140,140,,,,140,,140,85,140,,85,85,85,85,85,85,85,85,85', -'85,,,,85,85,85,85,,,85,85,85,85,,,,,85,85,,85,,85,85,,85,,85,85,,,,', -'85,85,85,85,85,85,,,,,85,,,,,,,,,,,,,,,,,,,,,,,,,,,,,85,85,,,,85,,85', -'131,85,,131,131,131,131,131,131,131,131,131,131,,,,131,131,131,131,', -',131,131,131,131,,,,,131,131,,131,,131,131,,131,,131,131,,,,,131,131', -'131,131,131,131,,,,,131,,,,,,,,,,,,,,,,,,,,,,,,,,,,,131,131,,,,131,', -'131,130,131,,130,130,130,130,130,130,130,130,130,130,,,,130,130,130', -'130,,,130,130,130,130,,,,,130,130,,130,,130,130,,130,,130,130,,,,,130', -'130,130,130,130,130,,,,,130,,,,,,,,,,,,,,,,,,,,,,,,,,,,,130,130,,,,130', -',130,129,130,,129,129,129,129,129,129,129,129,129,129,,,,129,129,129', -'129,,,129,129,129,129,,,,,129,129,,129,,129,129,,129,,129,129,,,,,129', -'129,129,129,129,129,,,,,129,,,,,,,,,,,,,,,,,,,,,,,,,,,,,129,129,,,,129', -',129,91,129,,91,91,91,91,91,91,91,91,91,91,,,,91,91,91,91,,,91,91,91', -'91,,,,,91,91,,91,,91,91,,91,,91,91,,,,,91,91,91,91,91,91,,,,,91,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,91,91,,,,91,,91,92,91,,92,92,92,92,92,92,92', -'92,92,92,,,,92,92,92,92,,,92,92,92,92,,,,,92,92,,92,,92,92,,92,,92,92', -',,,,92,92,92,92,92,92,,,,,92,,,,,,,,,,,,,,,,,,,,,,,,,,,,,92,92,,,,92', -',92,93,92,,93,93,93,93,93,93,93,93,93,93,,,,93,93,93,93,,,93,93,93,93', -',,,,93,93,,93,,93,93,,93,,93,93,,,,,93,93,93,93,93,93,,,,,93,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,93,93,,,,93,,93,94,93,,94,94,94,94,94,94,94,94', -'94,94,,,,94,94,94,94,,,94,94,94,94,,,,,94,94,,94,,94,94,,94,,94,94,', -',,,94,94,94,94,94,94,,,,,94,,,,,,,,,,,,,,,,,,,,,,,,,,,,,94,94,,,,94', -',94,95,94,,95,95,95,95,95,95,95,95,95,95,,,,95,95,95,95,,,95,95,95,95', -',,,,95,95,,95,,95,95,,95,,95,95,,,,,95,95,95,95,95,95,,,,,95,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,95,95,,,,95,,95,96,95,,96,96,96,96,96,96,96,96', -'96,96,,,,96,96,96,96,,,96,96,96,96,,,,,96,96,,96,,96,96,,96,,96,96,', -',,,96,96,96,96,96,96,,,,,96,,,,,,,,,,,,,,,,,,,,,,,,,,,,,96,96,,,,96', -',96,97,96,,97,97,97,97,97,97,97,97,97,97,,,,97,97,97,97,,,97,97,97,97', -',,,,97,97,,97,,97,97,,97,,97,97,,,,,97,97,97,97,97,97,,,,,97,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,97,97,,,,97,,97,125,97,,125,125,125,125,125,125', -'125,125,125,125,,,,125,125,125,125,,,125,125,125,125,,,,,125,125,,125', -',125,125,,125,,125,125,,,,,125,125,125,125,125,125,,,,,125,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,125,125,,,,125,,125,117,125,,117,117,117,117,117', -'117,117,117,117,117,,,,117,117,117,117,,,117,117,117,117,,,,,117,117', -',117,,117,117,,117,,117,117,,,,,117,117,117,117,117,117,,,,,117,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,117,117,,,,117,,117,100,117,,100,100,100,100', -'100,100,100,100,100,100,,,,100,100,100,100,,,100,100,100,100,,,,,100', -'100,,100,,100,100,,100,,100,100,,,,,100,100,100,100,100,100,,,,,100', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,100,100,,,,100,,100,101,100,,101,101,101', -'101,101,101,101,101,101,101,,,,101,101,101,101,,,101,101,101,101,,,', -',101,101,,101,,101,101,,101,,101,101,,,,,101,101,101,101,101,101,,,', -',101,,,,,,,,,,,,,,,,,,,,,,,,,,,,,101,101,,,,101,,101,102,101,,102,102', -'102,102,102,102,102,102,102,102,,,,102,102,102,102,,,102,102,102,102', -',,,,102,102,,102,,102,102,,102,,102,102,,,,,102,102,102,102,102,102', -',,,,102,,,,,,,,,,,,,,,,,,,,,,,,,,,,,102,102,,,,102,,102,103,102,,103', -'103,103,103,103,103,103,103,103,103,,,,103,103,103,103,,,103,103,103', -'103,,,,,103,103,,103,,103,103,,103,,103,103,,,,,103,103,103,103,103', -'103,,,,,103,,,,,,,,,,,,,,,,,,,,,,,,,,,,,103,103,,,,103,,103,116,103', -',116,116,116,116,116,116,116,116,116,116,,,,116,116,116,116,,,116,116', -'116,116,,,,,116,116,,116,,116,116,,116,,116,116,,,,,116,116,116,116', -'116,116,,,,,116,,,,,,,,,,,,,,,,,,,,,,,,,,,,,116,116,,,,116,,116,105', -'116,,105,105,105,105,105,105,105,105,105,105,,,,105,105,105,105,,,105', -'105,105,105,,,,,105,105,,105,,105,105,,105,,105,105,,,,,105,105,105', -'105,105,105,,,,,105,,,,,,,,,,,,,,,,,,,,,,,,,,,,,105,105,,,,105,,105', -'106,105,,106,106,106,106,106,106,106,106,106,106,,,,106,106,106,106', -',,106,106,106,106,,,,,106,106,,106,,106,106,,106,,106,106,,,,,106,106', -'106,106,106,106,,,,,106,,,,,,,,,,,,,,,,,,,,,,,,,,,,,106,106,,,,106,', -'106,107,106,,107,107,107,107,107,107,107,107,107,107,,,,107,107,107', -'107,,,107,107,107,107,,,,,107,107,,107,,107,107,,107,,107,107,,,,,107', -'107,107,107,107,107,,,,,107,,,,,,,,,,,,,,,,,,,,,,,,,,,,,107,107,,,,107', -',107,108,107,,108,108,108,108,108,108,108,108,108,108,,,,108,108,108', -'108,,,108,108,108,108,,,,,108,108,,108,,108,108,,108,,108,108,,,,,108', -'108,108,108,108,108,,,,,108,,,,,,,,,,,,,,,,,,,,,,,,,,,,,108,108,,,,108', -',108,109,108,,109,109,109,109,109,109,109,109,109,109,,,,109,109,109', -'109,,,109,109,109,109,,,,,109,109,,109,,109,109,,109,,109,109,,,,,109', -'109,109,109,109,109,,,,,109,,,,,,,,,,,,,,,,,,,,,,,,,,,,,109,109,,,,109', -',109,128,109,,128,128,128,128,128,128,128,128,128,128,,,,128,128,128', -'128,,,128,128,128,128,,,,,128,128,,128,,128,128,,128,,128,128,,,,,128', -'128,128,128,128,128,,,,,128,,,,,,,,,,,,,,,,,,,,,,,,,,,,,128,128,,,,128', -',128,126,128,,126,126,126,126,126,126,126,126,126,126,,,,126,126,126', -'126,,,126,126,126,126,,,,,126,126,,126,,126,126,,126,,126,126,,,,,126', -'126,126,126,126,126,,,,,126,,,,,,,,,,,,,,,,,,,,,,,,,,,,,126,126,,,,126', -',126,112,126,,112,112,112,112,112,112,112,112,112,112,,,,112,112,112', -'112,,,112,112,112,112,,,,,112,112,,112,,112,112,,112,,112,112,,,,,112', -'112,112,112,112,112,,,,,112,,,,,,,,,,,,,,,,,,,,,,,,,,,,,112,112,,,,112', -',112,113,112,,113,113,113,113,113,113,113,113,113,113,,,,113,113,113', +'87,145,87,111,111,111,111,111,111,111,111,111,111,296,193,193,263,111', +'111,111,111,296,248,111,111,111,87,87,193,265,248,87,111,123,111,87', +'111,111,254,111,39,111,111,80,145,87,275,111,111,111,111,87,87,87,87', +'87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87', +'87,87,87,87,291,87,87,87,111,111,243,243,243,111,79,111,100,111,87,100', +'100,100,100,100,100,100,100,100,100,277,83,83,83,100,100,100,100,275', +'275,100,100,100,100,278,278,94,152,100,100,35,100,291,100,100,176,100', +'151,100,100,173,174,277,176,100,100,100,100,100,100,277,197,149,277', +'100,216,184,197,197,42,180,216,216,216,216,216,216,216,143,243,94,94', +'176,243,244,244,244,70,70,70,84,84,84,100,100,174,174,174,100,83,100', +'302,100,83,302,302,302,302,302,302,302,302,302,302,180,180,180,21,302', +'302,302,302,180,141,302,302,302,302,140,176,176,246,302,302,169,302', +'175,302,302,159,302,185,302,302,175,159,159,186,302,302,302,302,302', +'302,161,294,259,190,302,91,161,161,244,97,259,70,244,14,84,70,38,38', +'84,175,38,246,246,246,169,169,169,6,169,246,41,41,41,302,302,34,34,75', +'302,259,302,3,302,218,3,3,3,3,3,3,3,3,3,3,303,41,272,272,3,3,3,3,1,76', +'3,3,3,3,2,29,29,76,3,3,122,3,2,3,3,163,3,,3,3,,163,163,,3,3,3,3,3,3', +'90,90,,89,3,41,76,,76,89,89,2,,2,41,232,98,98,41,301,301,232,232,232', +'232,232,232,232,232,232,232,217,217,3,3,,,,3,,3,125,3,,125,125,125,125', +'125,125,125,125,125,125,,,204,,125,125,125,125,204,204,125,125,125,125', +'78,78,78,,125,125,78,125,,125,125,200,125,,125,125,,200,200,,125,125', +'125,125,125,125,215,,,,125,,215,215,215,215,215,215,215,215,215,215', +'215,215,215,215,215,215,215,215,215,215,215,,,165,,,,125,125,165,165', +',125,,125,124,125,,124,124,124,124,124,124,124,124,124,124,,,166,,124', +'124,124,124,166,166,124,124,124,124,,,,,124,124,,124,,124,124,160,124', +',124,124,,160,160,,124,124,124,124,124,124,228,,,,124,,228,228,228,228', +'228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228', +',,,,,,124,124,,,,124,,124,9,124,,9,9,9,9,9,9,9,9,9,9,,,,,9,9,9,9,,,9', +'9,9,9,,,,,9,9,,9,,9,9,,9,,9,9,,,,,9,9,9,9,9,9,231,,,,9,,231,231,231', +'231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231', +'231,,,,,,,9,9,,,,9,,9,10,9,,10,10,10,10,10,10,10,10,10,10,,,,,10,10', +'10,10,,,10,10,10,10,,,,,10,10,,10,,10,10,,10,,10,10,,,,,10,10,10,10', +'10,10,219,,,,10,,219,219,219,219,219,219,219,219,219,219,219,219,219', +'219,219,219,219,219,219,219,219,,,,,,,10,10,,,,10,,10,127,10,,127,127', +'127,127,127,127,127,127,127,127,,,,,127,127,127,127,,,127,127,127,127', +',,,,127,127,,127,,127,127,,127,,127,127,,,,,127,127,127,127,127,127', +'222,,,,127,,222,222,222,222,222,222,222,222,222,222,222,222,222,222', +'222,222,222,222,222,222,222,,,,,,,127,127,,,,127,,127,13,127,,13,13', +'13,13,13,13,13,13,13,13,,,,,13,13,13,13,,,13,13,13,13,,,,,13,13,,13', +',13,13,,13,,13,13,,,,,13,13,13,13,13,13,225,,,,13,,225,225,225,225,225', +'225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,,,,', +',,13,13,,,,13,,13,128,13,,128,128,128,128,128,128,128,128,128,128,,', +',,128,128,128,128,,,128,128,128,128,,,,,128,128,,128,,128,128,,128,', +'128,128,,,,,128,128,128,128,128,128,195,,,,128,,195,195,195,195,195', +'195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,,,,', +',,128,128,,,,128,,128,284,128,,284,284,284,284,284,284,284,284,284,284', +',,,,284,284,284,284,,,284,284,284,284,,,,,284,284,,284,,284,284,,284', +',284,284,,,,,284,284,284,284,284,284,212,,,,284,,212,212,212,212,212', +'212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,,284', +',,,,284,284,,,,284,,284,22,284,,22,22,22,22,22,22,22,22,22,22,,,,,22', +'22,22,22,,,22,22,22,22,,,,,22,22,,22,,22,22,,22,,22,22,,,,,22,22,22', +'22,22,22,196,,,,22,,196,196,196,196,196,196,196,196,196,196,196,196', +'196,220,,,,,,220,220,220,220,220,220,220,,22,22,,,,22,,22,282,22,,282', +'282,282,282,282,282,282,282,282,282,,,,,282,282,282,282,,,282,282,282', +'282,,,,,282,282,,282,,282,282,,282,,282,282,,,,,282,282,282,282,282', +'282,199,,,,282,,199,199,199,199,199,199,199,199,199,199,199,199,199', +'223,,,,,,223,223,223,223,223,223,223,,282,282,,,,282,,282,30,282,,30', +'30,30,30,30,30,30,30,30,30,,,,,30,30,30,30,,,30,30,30,30,,,,,30,30,', +'30,,30,30,,30,,30,30,,30,,,30,30,30,30,30,30,203,,,,30,,203,203,203', +'203,203,203,203,203,203,203,203,203,203,208,,,,,,208,208,208,208,208', +',,,30,30,,,,30,,30,281,30,,281,281,281,281,281,281,281,281,281,281,', +',,,281,281,281,281,,,281,281,281,281,,,,,281,281,,281,,281,281,,281', +',281,281,,,,,281,281,281,281,281,281,207,,,,281,,207,207,207,207,207', +'207,207,207,207,207,207,207,207,213,,,,,,213,213,213,213,213,,,,281', +'281,,,,281,,281,276,281,,276,276,276,276,276,276,276,276,276,276,,,', +',276,276,276,276,,,276,276,276,276,,,,,276,276,,276,,276,276,,276,,276', +'276,,,,,276,276,276,276,276,276,229,,,,276,,229,229,229,229,229,229', +'229,229,229,229,226,,,,,,226,226,226,226,226,226,226,226,226,226,,276', +'276,,,,276,,276,271,276,,271,271,271,271,271,271,271,271,271,271,,,', +',271,271,271,271,,,271,271,271,271,,,,,271,271,,271,,271,271,,271,,271', +'271,,,,,271,271,271,271,271,271,,,,,271,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +'271,271,,,,271,,271,270,271,,270,270,270,270,270,270,270,270,270,270', +',,,,270,270,270,270,,,270,270,270,270,,,,,270,270,,270,,270,270,,270', +',270,270,,,,,270,270,270,270,270,270,,,,,270,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,270,270,,,,270,,270,251,270,,251,251,251,251,251,251,251,251,251', +'251,,,,,251,251,251,251,,,251,251,251,251,,,,,251,251,,251,,251,251', +',251,,251,251,251,,,,251,251,251,251,251,251,,,,,251,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,251,251,251,251,,251,,251,250,251,,250,250,250,250,250', +'250,250,250,250,250,,,,,250,250,250,250,,,250,250,250,250,,,,,250,250', +',250,,250,250,,250,,250,250,,,,,250,250,250,250,250,250,,,,,250,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,250,250,,,,250,,250,121,250,,121,121,121,121', +'121,121,121,121,121,121,,,,,121,121,121,121,,,121,121,121,121,,,,,121', +'121,,121,,121,121,,121,,121,121,,,,,121,121,121,121,121,121,,,,,121', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,121,121,,,,121,,121,44,121,,44,44,44,44', +'44,44,44,44,44,44,,,,,44,44,44,44,,,44,44,44,44,,,,,44,44,,44,,44,44', +',44,,44,44,,,,,44,44,44,44,44,44,,,,,44,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +'44,44,,,,44,,44,48,44,,48,48,48,48,48,48,48,48,48,48,,,,,48,48,48,48', +',,48,48,48,48,,,,,48,48,,48,,48,48,,48,,48,48,,,,,48,48,48,48,48,48', +',,,,48,,,,,,,,,,,,,,,,,,,,,,,,,,,,,48,48,,,,48,,48,53,48,,53,53,53,53', +'53,53,53,53,53,53,,,,,53,53,53,53,,,53,53,53,53,,,,,53,53,,53,,53,53', +',53,,53,53,,,,,53,53,53,53,53,53,,,,,53,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +'53,53,,,,53,,53,57,53,,57,57,57,57,57,57,57,57,57,57,,,,,57,57,57,57', +',,57,57,57,57,,,,,57,57,,57,,57,57,,57,,57,57,,,,,57,57,57,57,57,57', +',,,,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,57,57,,,,57,,57,59,57,,59,59,59,59', +'59,59,59,59,59,59,,,,,59,59,59,59,,,59,59,59,59,,,,,59,59,,59,,59,59', +',59,,59,59,,,,,59,59,59,59,59,59,,,,,59,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +'59,59,,,,59,,59,63,59,,63,63,63,63,63,63,63,63,63,63,,,,,63,63,63,63', +',,63,63,63,63,,,,,63,63,,63,,63,63,,63,,63,63,,,,,63,63,63,63,63,63', +',,,,63,,,,,,,,,,,,,,,,,,,,,,,,,,,,,63,63,,,,63,,63,64,63,,64,64,64,64', +'64,64,64,64,64,64,,,,,64,64,64,64,,,64,64,64,64,,,,,64,64,,64,,64,64', +',64,,64,64,,,,,64,64,64,64,64,64,,,,,64,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +'64,64,,,,64,,64,68,64,,68,68,68,68,68,68,68,68,68,68,,,,,68,68,68,68', +',,68,68,68,68,,,,,68,68,,68,,68,68,,68,,68,68,,,,,68,68,68,68,68,68', +',,,,68,,,,,,,,,,,,,,,,,,,,,,,,,,,,,68,68,,,,68,,68,192,68,,192,192,192', +'192,192,192,192,192,192,192,,,,,192,192,192,192,,,192,192,192,192,,', +',,192,192,,192,,192,192,,192,,192,192,,,,,192,192,192,192,192,192,,', +',,192,,,,,,,,,,,,,,,,,,,,,,,,,,,,,192,192,,,,192,,192,71,192,,71,71', +'71,71,71,71,71,71,71,71,,,,,71,71,71,71,,,71,71,71,71,,,,,71,71,,71', +',71,71,,71,,71,71,71,,,,71,71,71,71,71,71,,,,,71,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,71,71,,,,71,,71,72,71,,72,72,72,72,72,72,72,72,72,72,,,,,72', +'72,72,72,,,72,72,72,72,,,,,72,72,,72,,72,72,,72,,72,72,,,,,72,72,72', +'72,72,72,,,,,72,,,,,,,,,,,,,,,,,,,,,,,,,,,,,72,72,,,,72,,72,191,72,', +'191,191,191,191,191,191,191,191,191,191,,,,,191,191,191,191,,,191,191', +'191,191,,,,,191,191,,191,,191,191,,191,,191,191,,,,,191,191,191,191', +'191,191,,,,,191,,,,,,,,,,,,,,,,,,,,,,,,,,,,,191,191,,,,191,,191,179', +'191,,179,179,179,179,179,179,179,179,179,179,,,,,179,179,179,179,,,179', +'179,179,179,,,,,179,179,,179,,179,179,,179,,179,179,,,,,179,179,179', +'179,179,179,,,,,179,,,,,,,,,,,,,,,,,,,,,,,,,,,,,179,179,,,,179,,179', +'178,179,,178,178,178,178,178,178,178,178,178,178,,,,,178,178,178,178', +',,178,178,178,178,,,,,178,178,,178,,178,178,,178,,178,178,,,,,178,178', +'178,178,178,178,,,,,178,,,,,,,,,,,,,,,,,,,,,,,,,,,,,178,178,,,,178,', +'178,170,178,,170,170,170,170,170,170,170,170,170,170,,,,,170,170,170', +'170,,,170,170,170,170,,,,,170,170,,170,,170,170,,170,,170,170,,,,,170', +'170,170,170,170,170,,,,,170,,,,,,,,,,,,,,,,,,,,,,,,,,,,,170,170,,,,170', +',170,156,170,,156,156,156,156,156,156,156,156,156,156,,,,,156,156,156', +'156,,,156,156,156,156,,,,,156,156,,156,,156,156,,156,,156,156,156,,', +',156,156,156,156,156,156,,,,,156,,,,,,,,,,,,,,,,,,,,,,,,,,,,,156,156', +',,,156,,156,154,156,,154,154,154,154,154,154,154,154,154,154,,,,,154', +'154,154,154,,,154,154,154,154,,,,,154,154,,154,,154,154,,154,,154,154', +',,,,154,154,154,154,154,154,,,,,154,,,,,,,,,,,,,,,,,,,,,,,,,,,,,154', +'154,,,,154,,154,120,154,,120,120,120,120,120,120,120,120,120,120,,,', +',120,120,120,120,,,120,120,120,120,,,,,120,120,,120,,120,120,,120,,120', +'120,,,,,120,120,120,120,120,120,,,,,120,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +'120,120,,,,120,,120,150,120,,150,150,150,150,150,150,150,150,150,150', +',,,,150,150,150,150,,,150,150,150,150,,,,,150,150,,150,,150,150,,150', +',150,150,,,,,150,150,150,150,150,150,,,,,150,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,150,150,,,,150,,150,85,150,,85,85,85,85,85,85,85,85,85,85,,,,,85', +'85,85,85,,,85,85,85,85,,,,,85,85,,85,,85,85,,85,,85,85,85,,,,85,85,85', +'85,85,85,,,,,85,,,,,,,,,,,,,,,,,,,,,,,,,,,,,85,85,,,,85,,85,138,85,', +'138,138,138,138,138,138,138,138,138,138,,,,,138,138,138,138,,,138,138', +'138,138,,,,,138,138,,138,,138,138,,138,,138,138,,,,,138,138,138,138', +'138,138,,,,,138,,,,,,,,,,,,,,,,,,,,,,,,,,,,,138,138,,,,138,,138,0,138', +',0,0,0,0,0,0,0,0,0,0,,,,,0,0,0,0,,,0,0,0,0,,,,,0,0,,0,,0,0,,0,,0,0,0', +',,,0,0,0,0,0,0,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,,0,137,0', +',137,137,137,137,137,137,137,137,137,137,,,,,137,137,137,137,,,137,137', +'137,137,,,,,137,137,,137,,137,137,,137,,137,137,,,,,137,137,137,137', +'137,137,,,,,137,,,,,,,,,,,,,,,,,,,,,,,,,,,,,137,137,,,,137,,137,136', +'137,,136,136,136,136,136,136,136,136,136,136,,,,,136,136,136,136,,,136', +'136,136,136,,,,,136,136,,136,,136,136,,136,,136,136,,,,,136,136,136', +'136,136,136,,,,,136,,,,,,,,,,,,,,,,,,,,,,,,,,,,,136,136,,,,136,,136', +'134,136,,134,134,134,134,134,134,134,134,134,134,,,,,134,134,134,134', +',,134,134,134,134,,,,,134,134,,134,,134,134,,134,,134,134,,,,,134,134', +'134,134,134,134,,,,,134,,,,,,,,,,,,,,,,,,,,,,,,,,,,,134,134,,,,134,', +'134,133,134,,133,133,133,133,133,133,133,133,133,133,,,,,133,133,133', +'133,,,133,133,133,133,,,,,133,133,,133,,133,133,,133,,133,133,,,,,133', +'133,133,133,133,133,,,,,133,,,,,,,,,,,,,,,,,,,,,,,,,,,,,133,133,,,,133', +',133,132,133,,132,132,132,132,132,132,132,132,132,132,,,,,132,132,132', +'132,,,132,132,132,132,,,,,132,132,,132,,132,132,,132,,132,132,,,,,132', +'132,132,132,132,132,,,,,132,,,,,,,,,,,,,,,,,,,,,,,,,,,,,132,132,,,,132', +',132,93,132,,93,93,93,93,93,93,93,93,93,93,,,,,93,93,93,93,,,93,93,93', +'93,,,,,93,93,,93,,93,93,,93,,93,93,,,,,93,93,93,93,93,93,,,,,93,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,93,93,,,,93,,93,131,93,,131,131,131,131,131', +'131,131,131,131,131,,,,,131,131,131,131,,,131,131,131,131,,,,,131,131', +',131,,131,131,,131,,131,131,,,,,131,131,131,131,131,131,,,,,131,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,131,131,,,,131,,131,130,131,,130,130,130,130', +'130,130,130,130,130,130,,,,,130,130,130,130,,,130,130,130,130,,,,,130', +'130,,130,,130,130,,130,,130,130,,,,,130,130,130,130,130,130,,,,,130', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,130,130,,,,130,,130,129,130,,129,129,129', +'129,129,129,129,129,129,129,,,,,129,129,129,129,,,129,129,129,129,,', +',,129,129,,129,,129,129,,129,,129,129,,,,,129,129,129,129,129,129,,', +',,129,,,,,,,,,,,,,,,,,,,,,,,,,,,,,129,129,,,,129,,129,99,129,,99,99', +'99,99,99,99,99,99,99,99,,,,,99,99,99,99,,,99,99,99,99,,,,,99,99,,99', +',99,99,,99,,99,99,,,,,99,99,99,99,99,99,,,,,99,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,99,99,,,,99,,99,126,99,,126,126,126,126,126,126,126,126,126,126', +',,,,126,126,126,126,,,126,126,126,126,,,,,126,126,,126,,126,126,,126', +',126,126,,,,,126,126,126,126,126,126,,,,,126,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,126,126,,,,126,,126,101,126,,101,101,101,101,101,101,101,101,101', +'101,,,,,101,101,101,101,,,101,101,101,101,,,,,101,101,,101,,101,101', +',101,,101,101,,,,,101,101,101,101,101,101,,,,,101,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,101,101,,,,101,,101,102,101,,102,102,102,102,102,102,102,102', +'102,102,,,,,102,102,102,102,,,102,102,102,102,,,,,102,102,,102,,102', +'102,,102,,102,102,,,,,102,102,102,102,102,102,,,,,102,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,102,102,,,,102,,102,103,102,,103,103,103,103,103,103,103', +'103,103,103,,,,,103,103,103,103,,,103,103,103,103,,,,,103,103,,103,', +'103,103,,103,,103,103,,,,,103,103,103,103,103,103,,,,,103,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,103,103,,,,103,,103,104,103,,104,104,104,104,104,104', +'104,104,104,104,,,,,104,104,104,104,,,104,104,104,104,,,,,104,104,,104', +',104,104,,104,,104,104,,,,,104,104,104,104,104,104,,,,,104,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,104,104,,,,104,,104,105,104,,105,105,105,105,105', +'105,105,105,105,105,,,,,105,105,105,105,,,105,105,105,105,,,,,105,105', +',105,,105,105,,105,,105,105,,,,,105,105,105,105,105,105,,,,,105,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,105,105,,,,105,,105,118,105,,118,118,118,118', +'118,118,118,118,118,118,,,,,118,118,118,118,,,118,118,118,118,,,,,118', +'118,,118,,118,118,,118,,118,118,,,,,118,118,118,118,118,118,,,,,118', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,118,118,,,,118,,118,107,118,,107,107,107', +'107,107,107,107,107,107,107,,,,,107,107,107,107,,,107,107,107,107,,', +',,107,107,,107,,107,107,,107,,107,107,,,,,107,107,107,107,107,107,,', +',,107,,,,,,,,,,,,,,,,,,,,,,,,,,,,,107,107,,,,107,,107,108,107,,108,108', +'108,108,108,108,108,108,108,108,,,,,108,108,108,108,,,108,108,108,108', +',,,,108,108,,108,,108,108,,108,,108,108,,,,,108,108,108,108,108,108', +',,,,108,,,,,,,,,,,,,,,,,,,,,,,,,,,,,108,108,,,,108,,108,109,108,,109', +'109,109,109,109,109,109,109,109,109,,,,,109,109,109,109,,,109,109,109', +'109,,,,,109,109,,109,,109,109,,109,,109,109,,,,,109,109,109,109,109', +'109,,,,,109,,,,,,,,,,,,,,,,,,,,,,,,,,,,,109,109,,,,109,,109,110,109', +',110,110,110,110,110,110,110,110,110,110,,,,,110,110,110,110,,,110,110', +'110,110,,,,,110,110,,110,,110,110,,110,,110,110,,,,,110,110,110,110', +'110,110,,,,,110,,,,,,,,,,,,,,,,,,,,,,,,,,,,,110,110,,,,110,,110,119', +'110,,119,119,119,119,119,119,119,119,119,119,,,,,119,119,119,119,,,119', +'119,119,119,,,,,119,119,,119,,119,119,,119,,119,119,,,,,119,119,119', +'119,119,119,,,,,119,,,,,,,,,,,,,,,,,,,,,,,,,,,,,119,119,,,,119,,119', +'112,119,,112,112,112,112,112,112,112,112,112,112,,,,,112,112,112,112', +',,112,112,112,112,,,,,112,112,,112,,112,112,,112,,112,112,,,,,112,112', +'112,112,112,112,,,,,112,,,,,,,,,,,,,,,,,,,,,,,,,,,,,112,112,,,,112,', +'112,113,112,,113,113,113,113,113,113,113,113,113,113,,,,,113,113,113', '113,,,113,113,113,113,,,,,113,113,,113,,113,113,,113,,113,113,,,,,113', '113,113,113,113,113,,,,,113,,,,,,,,,,,,,,,,,,,,,,,,,,,,,113,113,,,,113', -',113,114,113,,114,114,114,114,114,114,114,114,114,114,,,,114,114,114', +',113,114,113,,114,114,114,114,114,114,114,114,114,114,,,,,114,114,114', '114,,,114,114,114,114,,,,,114,114,,114,,114,114,,114,,114,114,,,,,114', '114,114,114,114,114,,,,,114,,,,,,,,,,,,,,,,,,,,,,,,,,,,,114,114,,,,114', -',114,115,114,,115,115,115,115,115,115,115,115,115,115,,,,115,115,115', +',114,115,114,,115,115,115,115,115,115,115,115,115,115,,,,,115,115,115', '115,,,115,115,115,115,,,,,115,115,,115,,115,115,,115,,115,115,,,,,115', '115,115,115,115,115,,,,,115,,,,,,,,,,,,,,,,,,,,,,,,,,,,,115,115,,,,115', -',115,104,115,,104,104,104,104,104,104,104,104,104,104,,,,104,104,104', -'104,,,104,104,104,104,,,,,104,104,,104,,104,104,,104,,104,104,,,,,104', -'104,104,104,104,104,,,,,104,,143,143,143,143,143,143,143,143,143,143', -',,,,,,,,,,143,143,,,,,,104,104,,,,104,,104,143,104,,143,,,,231,,231', -',,,,,,,,,,,,,,,,,,,,,,231,231,,,,231,,,,231,,,,,,,,,,231,143,,143,,143', -'231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231', -'231,231,231,231,231,231,231,231,231,231,231,231,231,231,,231,231,231', -',,,,,,231,296,296,296,296,296,296,296,296,296,296,,,,296,296,296,296', -',,296,296,296,,,,,,,296,,296,,296,296,,296,,296,296,,,,,296,296,296', -'296,296,296,,297,,297,296,,,,,,,,,,,,,,,,,,,,,,297,297,,,,297,,296,296', -'297,,,296,,296,,296,,,297,,,,,,297,297,297,297,297,297,297,297,297,297', -'297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297', -'297,297,297,297,,297,297,297,,,,,,,297,6,6,6,6,6,6,6,6,6,6,,,,6,6,6', -'6,,,6,6,6,6,,,,,,6,,6,,6,6,,6,,6,6,,,,,6,6,6,6,6,6,,303,,303,6,,,,1', -'1,1,1,1,1,1,1,1,1,,,,,,,,,303,303,1,1,,303,,6,6,303,,,6,,6,,6,1,,303', -'1,,,,,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303', -'303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,,303,303', -'303,162,,162,,,,303,,,1,,1,,1,,,,,,,,,,,,162,162,,,,162,,,,162,,,,,', -',,,,162,,,,,,162,162,162,162,162,162,162,162,162,162,162,162,162,162', +',115,116,115,,116,116,116,116,116,116,116,116,116,116,,,,,116,116,116', +'116,,,116,116,116,116,,,,,116,116,,116,,116,116,,116,,116,116,,,,,116', +'116,116,116,116,116,,,,,116,,,,,,,,,,,,,,,,,,,,,,,,,,,,,116,116,,,,116', +',116,117,116,,117,117,117,117,117,117,117,117,117,117,,,,,117,117,117', +'117,,,117,117,117,117,,,,,117,117,,117,,117,117,,117,,117,117,,,,,117', +'117,117,117,117,117,,,,,117,,,,,,,,,,,,,,,,,,,,,,,,,,,,,117,117,,,,117', +',117,106,117,,106,106,106,106,106,106,106,106,106,106,,,,,106,106,106', +'106,,,106,106,106,106,,,,,106,106,,106,,106,106,,106,,106,106,,,,,106', +'106,106,106,106,106,,,,,106,153,153,153,153,153,153,153,153,153,153', +',,,,,,,,,,,153,153,,,,,,106,106,,,,106,,106,153,106,,153,,,240,,240', +',,,,,,,,,,,,,,,,,,,,,,,240,240,,,,240,,,,240,,,,,,,,,,240,153,,153,', +'153,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240', +'240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,,240,240', +'240,,,,,,,240,299,299,299,299,299,299,299,299,299,299,,,,,299,299,299', +'299,,,299,299,299,,,,,,,299,,299,,299,299,,299,,299,299,,,,,299,299', +'299,299,299,299,,,,,299,,,,,,,,,,,,,,,,,,,,,,,,,,,,,299,299,,,,299,', +'299,,299,11,11,11,11,11,11,11,11,11,11,,,,,11,11,11,11,,,11,11,11,11', +',,,,,11,,11,,11,11,,11,,11,11,,,,,11,11,11,11,11,11,300,,300,,11,,,5', +'5,5,5,5,5,5,5,5,5,,,,,,,,,,300,300,5,5,,300,,11,11,300,,,11,,11,,11', +'5,,300,5,,,,,300,300,300,300,300,300,300,300,300,300,300,300,300,300', +'300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300', +',300,300,300,305,,305,,,,300,,,5,,5,,5,,,,,,,,,,,,,305,305,,,,305,,', +',305,,,,,,,,,,305,,,,,,305,305,305,305,305,305,305,305,305,305,305,305', +'305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305', +'305,305,,305,305,305,162,,162,,,,305,,,,,,,,,,,,,,,,,,,,162,162,,,,162', +',,,162,,,,,,,,162,,162,,,,,,162,162,162,162,162,162,162,162,162,162', '162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162', -',162,162,162,306,,306,,,,,,,,,,,,,,,,,,,,,,,306,306,,,,306,,,,306,,', -',,,,,,,306,,,,,,306,306,306,306,306,306,306,306,306,306,306,306,306', -'306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306', -'306,,306,306,306,295,,295,,,,,,,,,,,,,,,,,,,,,,,295,295,,,,295,,,,295', -',,,,,,,,,295,,,,,,295,295,295,295,295,295,295,295,295,295,295,295,295', -'295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295', -'295,,295,295,295,294,,294,,,,,,,,,,,,,,,,,,,,,,,294,294,,,,294,,,,294', -',,,,,,,,,294,,,,,,294,294,294,294,294,294,294,294,294,294,294,294,294', -'294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294', -'294,,294,294,294,201,,201,,,,,,,,,,,,,,,,,,,,,,,201,201,,,,201,,,,201', +'162,162,162,162,,162,162,162,308,,308,,,,,,,,,,,,,,,,,,,,,,,,308,308', +',,,308,,,,308,,,,,,,,,,308,,,,,,308,308,308,308,308,308,308,308,308', +'308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308', +'308,308,308,308,308,,308,308,308,209,,209,,,,,,,,,,,,,,,,,,,,,,,,209', +'209,,,,209,,,,209,,,,,,,,,,209,,,,,,209,209,209,209,209,209,209,209', +'209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209', +'209,209,209,209,209,209,,209,209,209,298,,298,,,,,,,,,,,,,,,,,,,,,,', +',298,298,,,,298,,,,298,,,,,,,,,,298,,,,,,298,298,298,298,298,298,298', +'298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298', +'298,298,298,298,298,298,298,,298,298,298,194,,194,,,,,,,,,,,,,,,,,,', +',,,,,194,194,,,,194,,,,194,,,,,,,,,,194,,,,,,194,194,194,194,194,194', +'194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194', +'194,194,194,194,194,194,194,194,,194,194,194,188,,188,,,,,,,,,,,,,,', +',,,,,,,,,188,188,,,,188,,,,188,,,,,,,,,,188,,,,,,188,188,188,188,188', +'188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188', +'188,188,188,188,188,188,188,188,188,,188,188,188,297,,297,,,,,,,,,,', +',,,,,,,,,,,,,297,297,,,,297,,,,297,,,,,,,,,,297,,,,,,297,297,297,297', +'297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297', +'297,297,297,297,297,297,297,297,297,297,,297,297,297,292,,292,,,,,,', +',,,,,,,,,,,,,,,,,292,292,,,,292,,,,292,,,,,,,,,,292,,,,,,292,292,292', +'292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292', +'292,292,292,292,292,292,292,292,292,292,292,,292,292,292,181,,181,,', +',,,,,,,,,,,,,,,,,,,,,181,181,,,,181,,,,181,,,,,,,,,,181,,,,,,181,181', +'181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181', +'181,181,181,181,181,181,181,181,181,181,181,181,,181,181,181,86,,86', +',,,,,,,,,,,,,,,,,,,,,,,86,86,,,,86,,,,86,,,,,,,,86,,86,,,,,,86,86,86', +'86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86', +'86,86,86,86,86,,86,86,86,171,,171,,,,,,,,,,,,,,,,,,,,,,,,171,171,,,', +'171,,,,171,,,,,,,,,,171,,,,,,171,171,171,171,171,171,171,171,171,171', +'171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171', +'171,171,171,171,,171,171,171,253,,253,,,,,,,,,,,,,,,,,,,,,,,,253,253', +',,,253,,,,253,,,,,,,,,,253,,,,,,253,253,253,253,253,253,253,253,253', +'253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253', +'253,253,253,253,253,,253,253,253,283,,283,,,,,,,,,,,,,,,,,,,,,,,,283', +'283,,,,283,,,,283,,,,,,,,,,283,,,,,,283,283,283,283,283,283,283,283', +'283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283', +'283,283,283,283,283,283,,283,283,283,164,,164,,,,,,,,,,,,,,,,,,,,,,', +',164,164,,,,164,,,,164,,,,,,,,164,,164,,,,,,164,164,164,164,164,164', +'164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164', +'164,164,164,164,164,164,164,164,,164,164,164,280,,280,,,,,,,,,,,,,,', +',,,,,,,,,280,280,,,,280,,,,280,,,,,,,,,,280,,,,,,280,280,280,280,280', +'280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280', +'280,280,280,280,280,280,280,280,280,,280,280,280,37,,37,,,,,,,,,,,,', +',,,,,,,,,,,37,37,,,,37,,,,37,,,,,,,,,,37,,,,,,37,37,37,37,37,37,37,37', +'37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37', +',37,37,37,260,,260,,,,,,,,,,,,,,,,,,,,,,,,260,260,,,,260,,,,260,,,,', +',,,,,260,,,,,,260,260,260,260,260,260,260,260,260,260,260,260,260,260', +'260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260', +',260,260,260,261,,261,,,,,,,,,,,,,,,,,,,,,,,,261,261,,,,261,,,,261,', +',,,,,,,,261,,,,,,261,261,261,261,261,261,261,261,261,261,261,261,261', +'261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261', +'261,,261,261,261,201,,201,,,,,,,,,,,,,,,,,,,,,,,,201,201,,,,201,,,,201', ',,,,,,,,,201,,,,,,201,201,201,201,201,201,201,201,201,201,201,201,201', '201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201', -'201,,201,201,201,289,,289,,,,,,,,,,,,,,,,,,,,,,,289,289,,,,289,,,,289', -',,,,,,,,,289,,,,,,289,289,289,289,289,289,289,289,289,289,289,289,289', +'201,,201,201,201,88,88,,,,,,,,88,,,,,,,,,,88,,,,,,88,88,88,88,88,88', +'88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88', +'88,88,,88,88,88,92,92,,,,,,,,92,,,,,,,,,,92,,,,,,92,92,92,92,92,92,92', +'92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92', +'92,227,227,,,,,,,,227,,,,,,,,,,227,,,,,,227,227,227,227,227,227,227', +'227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227', +'227,227,227,227,227,227,227,245,245,,,,,,,,245,,,,,,,,,,245,,,,,,245', +'245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245', +'245,245,245,245,245,245,245,245,245,245,245,245,245,230,230,,,,,,,,230', +',,,,,,,,,230,,,,,,230,230,230,230,230,230,230,230,230,230,230,230,230', +'230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230', +'230,224,224,,,,,,,,224,,,,,,,,,,224,,,,,,224,224,224,224,224,224,224', +'224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224', +'224,224,224,224,224,224,224,289,,,,,,,,289,,,,,,,,,,289,,,,,,289,289', '289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289', -'289,,289,289,289,192,,192,,,,,,,,,,,,,,,,,,,,,,,192,192,,,,192,,,,192', -',,,,,,,,,192,,,,,,192,192,192,192,192,192,192,192,192,192,192,192,192', -'192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192', -'192,,192,192,192,221,,221,,,,,,,,,,,,,,,,,,,,,,,221,221,,,,221,,,,221', -',,,,,,,,,221,,,,,,221,221,221,221,221,221,221,221,221,221,221,221,221', +'289,289,289,289,289,289,289,289,289,289,289,289,268,,,,,,,,268,,,,,', +',,,,268,,,,,,268,268,268,268,268,268,268,268,268,268,268,268,268,268', +'268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268', +'267,,,,,,,,267,,,,,,,,,,267,,,,,,267,267,267,267,267,267,267,267,267', +'267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267', +'267,267,267,267,267,221,,,,,,,,221,,,,,,,,,,221,,,,,,221,221,221,221', '221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221', -'221,,221,221,221,180,,180,,,,,,,,,,,,,,,,,,,,,,,180,180,,,,180,,,,180', -',,,,,,,,,180,,,,,,180,180,180,180,180,180,180,180,180,180,180,180,180', -'180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180', -'180,,180,180,180,244,,244,,,,,,,,,,,,,,,,,,,,,,,244,244,,,,244,,,,244', -',,,,,,,,,244,,,,,,244,244,244,244,244,244,244,244,244,244,244,244,244', -'244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244', -'244,,244,244,244,173,,173,,,,,,,,,,,,,,,,,,,,,,,173,173,,,,173,,,,173', -',,,,,,,,,173,,,,,,173,173,173,173,173,173,173,173,173,173,173,173,173', -'173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173', -'173,,173,173,173,282,,282,,,,,,,,,,,,,,,,,,,,,,,282,282,,,,282,,,,282', -',,,,,,,,,282,,,,,,282,282,282,282,282,282,282,282,282,282,282,282,282', -'282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282', -'282,,282,282,282,281,,281,,,,,,,,,,,,,,,,,,,,,,,281,281,,,,281,,,,281', -',,,,,,,,,281,,,,,,281,281,281,281,281,281,281,281,281,281,281,281,281', -'281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281', -'281,,281,281,281,81,,81,,,,,,,,,,,,,,,,,,,,,,,81,81,,,,81,,,,81,,,,', -',,,81,,81,,,,,,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81', -'81,81,81,81,81,81,81,81,81,81,81,81,81,,81,81,81,274,,274,,,,,,,,,,', -',,,,,,,,,,,,274,274,,,,274,,,,274,,,,,,,,,,274,,,,,,274,274,274,274', -'274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274', -'274,274,274,274,274,274,274,274,274,274,,274,274,274,32,,32,,,,,,,,', -',,,,,,,,,,,,,,32,32,,,,32,,,,32,,,,,,,,,,32,,,,,,32,32,32,32,32,32,32', -'32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32', -'32,,32,32,32,155,,155,,,,,,,,,,,,,,,,,,,,,,,155,155,,,,155,,,,155,,', -',,,,,155,,155,,,,,,155,155,155,155,155,155,155,155,155,155,155,155,155', -'155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155', -'155,,155,155,155,153,,153,,,,,,,,,,,,,,,,,,,,,,,153,153,,,,153,,,,153', -',,,,,,,153,,153,,,,,,153,153,153,153,153,153,153,153,153,153,153,153', -'153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153', -'153,153,,153,153,153,271,,271,,,,,,,,,,,,,,,,,,,,,,,271,271,,,,271,', -',,271,,,,,,,,,,271,,,,,,271,271,271,271,271,271,271,271,271,271,271', -'271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271', -'271,271,271,,271,271,271,79,79,,,,,,,,79,,,,,,,,,,79,,,,,,79,79,79,79', -'79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79', -'79,79,79,79,,79,79,79,215,215,,,,,,,,215,,,,,,,,,,215,,,,,,215,215,215', -'215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215', -'215,215,215,215,215,215,215,215,215,215,215,218,218,,,,,,,,218,,,,,', -',,,,218,,,,,,218,218,218,218,218,218,218,218,218,218,218,218,218,218', -'218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218', -'84,84,,,,,,,,84,,,,,,,,,,84,,,,,,84,84,84,84,84,84,84,84,84,84,84,84', -'84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,212,212,,,', -',,,,212,,,,,,,,,,212,,,,,,212,212,212,212,212,212,212,212,212,212,212', -'212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212', -'212,212,212,236,236,,,,,,,,236,,,,,,,,,,236,,,,,,236,236,236,236,236', -'236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236', -'236,236,236,236,236,236,236,236,236,259,,,,,,,,259,,,,,,,,,,259,,,,', -',259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259', -'259,259,259,259,259,259,259,259,259,259,259,259,259,259,285,,,,,,,,285', -',,,,,,,,,285,,,,,,285,285,285,285,285,285,285,285,285,285,285,285,285', -'285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285', -'285,258,,,,,,,,258,,,,,,,,,,258,,,,,,258,258,258,258,258,258,258,258', -'258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258', -'258,258,258,258,258,258,286,,,,,,,,286,,,,,,,,,,286,,,,,,286,286,286', -'286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286', -'286,286,286,286,286,286,286,286,286,286,286,209,,,,,,,,209,,,,,,,,,', -'209,,,,,,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209', -'209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,171', -',,,,,,,,,171,,,,,,171,171,171,171,171,171,171,171,171,171,171,171,171', -'171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171', -'197,,,,,,,,,,197,,,,,,197,197,197,197,197,197,197,197,197,197,197,197', -'197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197', -'197,163,,,,,,,,,,163,,,,,,163,163,163,163,163,163,163,163,163,163,163', -'163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163', -'163,163,189,,,,,,189,189,189,189,189,189,189,189,189,189,189,189,189', -'189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189', -'198,,,,,,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198', -'198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,193,,,,', -',193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193', -'193,193,193,193,193,193,193,193,193,193,193,193,193,186,,,,,,186,186', -'186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186', -'186,186,186,186,186,186,186,186,186,186,186,202,,,,,,202,202,202,202', -'202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202', -'202,202,202,202,202,202,202,202,202' ] - racc_action_check = arr = Array.new(9713, nil) +'221,221,221,221,221,221,221,221,221,221,288,,,,,,,,288,,,,,,,,,,288', +',,,,,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288', +'288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,82,,,,,', +',,,,82,,,,,,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82', +'82,82,82,82,82,82,82,82,82,82,82,172,,,,,,,,,,172,,,,,,172,172,172,172', +'172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172', +'172,172,172,172,172,172,172,172,172,210,,,,,,,,,,210,,,,,,210,210,210', +'210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210', +'210,210,210,210,210,210,210,210,210,210,198,,,,,,198,198,198,198,198', +'198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198', +'198,198,198,198,198,198,198,198,211,,,,,,211,211,211,211,211,211,211', +'211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211', +'211,211,211,211,211,211,214,,,,,,214,214,214,214,214,214,214,214,214', +'214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214', +'214,214,214,214,205,,,,,,205,205,205,205,205,205,205,205,205,205,205', +'205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205', +'205,205,202,,,,,,202,202,202,202,202,202,202,202,202,202,202,202,202', +'202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202' ] + racc_action_check = arr = Array.new(9843, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -693,336 +709,349 @@ def on_error(error_token_id, error_value, value_stack) end racc_action_pointer = [ - 3346, 7082, 198, nil, nil, 277, 7025, nil, 463, 556, - 237, nil, nil, nil, nil, nil, 251, 835, nil, nil, - nil, nil, nil, nil, nil, 117, 1021, nil, nil, 58, - 111, nil, 8438, 167, 29, nil, 160, 1, nil, nil, - 1765, nil, nil, nil, 1858, nil, nil, nil, 1951, nil, - nil, nil, 2044, nil, 2137, nil, nil, nil, 2230, nil, - 2323, nil, nil, nil, 2416, nil, 92, 2602, 2695, nil, - nil, 71, 225, 2974, nil, 154, 165, 3253, -2, 8753, - 500, 8268, 339, 15, 8925, 3997, 111, nil, nil, 134, - 133, 4369, 4462, 4555, 4648, 4741, 4834, 4927, 91, -2, - 5206, 5299, 5392, 5485, 6694, 5671, 5764, 5857, 5950, 6043, - 294, 85, 6322, 6415, 6508, 6601, 5578, 5113, 3811, 3067, - 928, 742, 370, nil, 184, 5020, 6229, nil, 6136, 4276, - 4183, 4090, 171, 194, nil, 174, nil, nil, -1, nil, - 3904, 160, 157, 6749, 3718, nil, 3625, nil, nil, nil, - 433, 456, 340, 8608, 195, 8523, 407, 270, nil, nil, - 184, 3532, 7163, 9451, 24, 224, nil, 216, 31, 37, - nil, 9359, 68, 8013, nil, nil, 131, 179, 205, nil, - 7843, nil, 226, 3439, 3160, -17, 9595, 1122, 314, 9487, - 1029, 247, 7673, 9559, nil, 1308, 1515, 9405, 9523, 657, - 1510, 7503, 9631, 285, 1327, 330, 183, 750, 1048, 9312, - 936, 1234, 8981, 564, 1494, 8813, 471, 1401, 8869, 843, - 1417, 7758, 378, 1215, 363, nil, nil, nil, nil, nil, - nil, 6794, nil, nil, 157, 72, 9037, 173, nil, -13, - nil, 2881, 2788, nil, 7928, 50, 40, 46, 140, 124, - nil, 2509, 1672, nil, -5, nil, -7, nil, 9202, 9092, - nil, 1579, 1486, 302, nil, nil, 63, 1393, 118, 155, - nil, 8693, 1300, 1207, 8353, 1114, nil, nil, nil, nil, - 113, 8183, 8098, nil, nil, 9147, 9257, nil, -2, 7588, - nil, 176, nil, -14, 7418, 7333, 6883, 6936, nil, 170, - 649, 247, nil, 7078, nil, nil, 7248, nil, nil ] + 4040, 220, 303, 280, nil, 7106, 171, nil, nil, 562, + 656, 7049, nil, 844, 209, nil, nil, nil, nil, nil, + nil, 204, 1126, nil, nil, nil, nil, nil, nil, 220, + 1314, nil, nil, nil, 186, 113, nil, 8564, 169, 37, + nil, 256, 111, nil, 2066, nil, nil, nil, 2160, nil, + nil, nil, nil, 2254, nil, nil, nil, 2348, nil, 2442, + nil, nil, nil, 2536, 2630, nil, nil, nil, 2724, nil, + 159, 2912, 3006, nil, nil, 195, 298, nil, 313, 8, + -41, nil, 9488, 93, 162, 3852, 8048, -2, 8882, 291, + 312, 246, 8942, 4604, 77, nil, nil, 158, 322, 4980, + 92, 5168, 5262, 5356, 5450, 5544, 6766, 5732, 5826, 5920, + 6014, -2, 6202, 6296, 6390, 6484, 6578, 6672, 5638, 6108, + 3664, 1972, 301, -50, 468, 374, 5074, 750, 938, 4886, + 4792, 4698, 4510, 4416, 4322, nil, 4228, 4134, 3946, nil, + 170, 191, nil, 162, nil, -1, nil, nil, nil, 135, + 3758, 120, 110, 6821, 3570, nil, 3476, nil, nil, 179, + 461, 194, 7274, 273, 8392, 411, 438, nil, nil, 175, + 3382, 8134, 9534, 54, 92, 217, 126, nil, 3288, 3194, + 111, 7962, nil, nil, 139, 183, 210, nil, 7704, nil, + 230, 3100, 2818, -17, 7618, 946, 1134, 101, 9616, 1228, + 367, 8822, 9760, 1322, 344, 9724, nil, 1416, 1341, 7446, + 9580, 9652, 1040, 1435, 9688, 382, 105, 337, 201, 664, + 1153, 9386, 758, 1247, 9166, 852, 1526, 8998, 476, 1510, + 9110, 570, 303, nil, nil, nil, nil, nil, nil, nil, + 6866, nil, nil, 73, 156, 9054, 172, nil, -13, nil, + 1878, 1784, nil, 8220, -45, nil, nil, nil, nil, 237, + 8650, 8736, nil, -29, nil, -16, nil, 9331, 9276, nil, + 1690, 1596, 266, nil, nil, 27, 1502, 104, 31, nil, + 8478, 1408, 1220, 8306, 1032, nil, nil, nil, 9441, 9221, + nil, 37, 7876, nil, 197, nil, -22, 7790, 7532, 6956, + 7102, 264, 186, 249, nil, 7188, nil, nil, 7360, nil, + nil ] racc_action_default = [ - -1, -180, -180, -18, -125, -180, -46, -19, -180, -180, - -180, -34, -20, -21, -47, -22, -180, -180, -30, -23, - -28, -2, -104, -29, -32, -3, -180, -31, -33, -180, - -180, -35, -5, -180, -173, -36, -8, -180, -37, -9, - -180, -98, -96, -10, -180, -105, -38, -11, -180, -106, - -39, -97, -180, -12, -180, -107, -40, -26, -180, -13, - -180, -108, -103, -27, -180, -14, -123, -135, -180, -15, - -16, -100, -117, -180, -17, -180, -124, -135, -180, -45, - -50, -180, -180, -180, -149, -7, -180, -25, -4, -156, - -180, -180, -180, -180, -180, -180, -180, -180, -180, -93, - -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, - -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, - -180, -180, -180, -58, -180, -180, -180, -57, -180, -180, - -180, -180, -180, -180, -171, -173, -175, -177, -180, -127, - -180, -180, -180, -180, -180, -114, -135, -109, -113, -95, - -51, -48, -49, -152, -52, -180, -54, -53, -128, -110, - -180, -180, -136, -55, -180, -117, -118, -180, -180, -180, - -44, -56, -180, -136, -150, -169, -180, -180, -145, 309, - -6, -24, -180, -180, -180, -180, -83, -71, -60, -84, - -72, -61, -178, -85, -82, -73, -62, -91, -86, -74, - -63, -179, -87, -75, -64, -180, -180, -76, -65, -92, - -77, -66, -88, -78, -67, -89, -79, -68, -90, -80, - -69, -153, -81, -70, -59, -94, -99, -172, -176, -174, - -170, -180, -111, -112, -126, -180, -41, -180, -151, -180, - -142, -180, -180, -134, -137, -180, -180, -180, -180, -180, - -116, -180, -180, -131, -180, -146, -180, -157, -158, -159, - -155, -180, -180, -154, -102, -115, -129, -180, -180, -180, - -164, -139, -180, -180, -138, -180, -101, -122, -120, -119, - -180, -42, -43, -148, -147, -161, -160, -130, -180, -143, - -162, -180, -165, -180, -140, -141, -102, -180, -121, -166, - -180, -180, -168, -180, -132, -167, -144, -163, -133 ] + -1, -100, -118, -181, -17, -181, -181, -18, -126, -181, + -181, -46, -19, -181, -181, -34, -20, -21, -47, -22, + -28, -181, -181, -23, -29, -2, -30, -31, -32, -3, + -181, -104, -35, -33, -181, -181, -36, -5, -181, -174, + -37, -8, -181, -9, -181, -98, -38, -10, -181, -105, + -39, -96, -11, -181, -106, -40, -97, -181, -12, -181, + -107, -103, -26, -181, -181, -108, -27, -13, -181, -14, + -124, -136, -181, -15, -16, -181, -118, -119, -181, -181, + -181, -44, -56, -181, -125, -136, -181, -181, -45, -50, + -181, -181, -150, -7, -181, -25, -4, -157, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -93, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -58, -181, -181, -181, -57, + -181, -181, -172, -174, -176, -181, -178, -114, -128, -181, + -181, -181, -181, -181, -181, -115, -136, -109, -95, -51, + -48, -49, -153, -52, -181, -54, -53, -129, -110, -181, + -181, -137, -55, -181, -181, -181, -181, -117, -181, -181, + -181, -137, -170, -151, -181, -181, -146, 311, -6, -24, + -181, -181, -181, -181, -154, -81, -70, -59, -83, -71, + -60, -179, -84, -72, -61, -85, -82, -73, -62, -180, + -91, -86, -74, -63, -87, -75, -64, -181, -181, -76, + -65, -92, -77, -66, -88, -78, -67, -89, -79, -68, + -90, -80, -69, -94, -99, -173, -177, -171, -175, -111, + -181, -112, -113, -127, -181, -41, -181, -152, -181, -143, + -181, -181, -135, -138, -181, -101, -123, -121, -120, -181, + -42, -43, -132, -181, -147, -181, -158, -159, -160, -156, + -181, -181, -155, -102, -116, -130, -181, -181, -181, -165, + -140, -181, -181, -139, -181, -122, -149, -148, -162, -161, + -131, -181, -144, -163, -181, -166, -181, -141, -142, -102, + -181, -167, -181, -181, -169, -181, -133, -168, -145, -164, + -134 ] racc_goto_table = [ - 21, 170, 90, 145, 29, 158, 159, 75, 160, 78, - 79, 76, 80, 81, 82, 158, 159, 16, 172, 288, - 270, 84, 185, 278, 279, 85, 136, 25, 178, 88, - 134, 268, 226, 145, 230, 132, 135, 287, 137, nil, - nil, 149, 145, 145, 150, 167, nil, nil, 151, 292, - nil, nil, 152, 86, nil, 298, 153, nil, 154, nil, - nil, nil, 155, nil, 156, nil, nil, nil, 157, nil, - nil, 162, 163, nil, 302, nil, nil, 171, nil, nil, - nil, 173, 205, nil, nil, 175, 85, 237, nil, 180, - nil, nil, nil, nil, 170, 186, 187, 188, 189, 190, - 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, - 201, 202, 203, 204, nil, nil, 207, 208, 209, 210, - 211, 212, 213, 214, 215, 216, 217, 228, 218, 219, - 220, 227, 221, 222, 223, 224, 225, 263, 247, nil, - nil, nil, 229, nil, 231, nil, nil, nil, 236, 234, - 173, nil, nil, 235, nil, nil, nil, 238, nil, nil, - nil, nil, nil, nil, nil, 244, nil, 248, 269, nil, - nil, nil, nil, nil, 158, 159, nil, 170, 170, nil, - nil, 255, nil, nil, nil, nil, nil, 258, 259, 260, - nil, nil, nil, nil, nil, nil, nil, 269, nil, nil, - nil, 145, 145, nil, nil, nil, nil, nil, nil, 170, + 25, 84, 83, 155, 167, 168, 82, 193, 98, 257, + 258, 78, 86, 87, 88, 81, 89, 21, 167, 168, + 279, 144, 29, 291, 186, 92, 277, 234, 237, 93, + 140, 143, 155, 290, 96, 146, nil, nil, 142, nil, + nil, nil, nil, nil, nil, 155, 155, 159, nil, 295, + nil, 160, 94, nil, nil, nil, 161, nil, 169, 34, + 162, nil, 163, nil, nil, nil, 164, 165, 304, nil, + nil, 166, 180, 90, 171, 172, nil, nil, 175, nil, + nil, nil, nil, nil, nil, 174, nil, nil, 181, 81, + nil, nil, nil, 285, 93, 217, 188, nil, nil, nil, + nil, 158, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, 236, 272, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, nil, 230, + 231, 232, 235, 246, nil, 182, nil, nil, nil, 244, + 243, nil, nil, 240, nil, nil, nil, 245, nil, 181, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, 253, 175, nil, 259, nil, 167, 168, + nil, 260, 261, nil, nil, nil, nil, nil, 81, 81, + nil, nil, nil, nil, 267, 268, nil, nil, nil, 233, + nil, nil, nil, nil, 238, 155, 155, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 269, nil, nil, nil, nil, nil, nil, nil, + nil, 247, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 272, nil, nil, 271, 274, 248, nil, 280, - nil, nil, nil, nil, nil, 281, 282, nil, 283, nil, - 284, nil, nil, nil, nil, 285, 286, nil, nil, 293, - nil, 289, nil, nil, nil, nil, 294, 295, nil, 297, + nil, nil, nil, nil, 264, nil, nil, nil, nil, nil, + nil, 281, 269, 280, 283, nil, nil, nil, nil, nil, + nil, 278, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, 81, 288, 289, nil, nil, nil, 296, 292, + nil, nil, nil, nil, 297, 298, nil, 300, nil, nil, + 278, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, 307, 305, nil, nil, 308, nil, nil, nil, 278, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 299, nil, nil, 301, nil, nil, nil, 305, - 303, nil, nil, nil, 306 ] + nil, nil, 286, nil, 287, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 301, nil, nil, 303 ] racc_goto_check = [ - 2, 21, 40, 30, 4, 36, 31, 6, 37, 5, - 5, 32, 5, 5, 4, 36, 31, 1, 37, 38, - 43, 5, 41, 23, 23, 2, 47, 3, 39, 2, - 45, 42, 26, 30, 44, 25, 46, 8, 48, nil, - nil, 4, 30, 30, 5, 34, nil, nil, 5, 43, - nil, nil, 5, 3, nil, 23, 5, nil, 5, nil, - nil, nil, 5, nil, 5, nil, nil, nil, 5, nil, - nil, 5, 5, nil, 43, nil, nil, 5, nil, nil, - nil, 5, 40, nil, nil, 4, 2, 37, nil, 5, - nil, nil, nil, nil, 21, 5, 5, 5, 5, 5, + 2, 32, 6, 30, 36, 31, 5, 41, 40, 23, + 23, 34, 5, 5, 5, 21, 5, 1, 36, 31, + 43, 47, 3, 38, 39, 5, 42, 26, 44, 2, + 25, 46, 30, 8, 2, 48, nil, nil, 45, nil, + nil, nil, nil, nil, nil, 30, 30, 5, nil, 43, + nil, 5, 3, nil, nil, nil, 5, nil, 37, 4, + 5, nil, 5, nil, nil, nil, 5, 5, 43, nil, + nil, 5, 37, 4, 5, 5, nil, nil, 2, nil, + nil, nil, nil, nil, nil, 34, nil, nil, 5, 21, + nil, nil, nil, 23, 2, 40, 5, nil, nil, nil, + nil, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, nil, nil, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 47, 5, 5, - 5, 45, 5, 5, 5, 5, 4, 41, 34, nil, - nil, nil, 4, nil, 5, nil, nil, nil, 5, 6, - 5, nil, nil, 32, nil, nil, nil, 4, nil, nil, - nil, nil, nil, nil, nil, 5, nil, 2, 21, nil, - nil, nil, nil, nil, 36, 31, nil, 21, 21, nil, - nil, 4, nil, nil, nil, nil, nil, 5, 5, 4, - nil, nil, nil, nil, nil, nil, nil, 21, nil, nil, - nil, 30, 30, nil, nil, nil, nil, nil, nil, 21, + 5, 5, 5, 5, 5, 47, 41, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, nil, 5, + 5, 5, 45, 37, nil, 4, nil, nil, nil, 32, + 6, nil, nil, 5, nil, nil, nil, 5, nil, 5, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, 5, 2, nil, 2, nil, 36, 31, + nil, 5, 5, nil, nil, nil, nil, nil, 21, 21, + nil, nil, nil, nil, 5, 5, nil, nil, nil, 4, + nil, nil, nil, nil, 4, 30, 30, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, 4, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, 4, nil, nil, nil, nil, nil, + nil, 2, 4, 5, 5, nil, nil, nil, nil, nil, + nil, 21, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, 21, 5, 5, nil, nil, nil, 2, 5, + nil, nil, nil, nil, 5, 5, nil, 5, nil, nil, + 21, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, 2, 5, nil, nil, 5, nil, nil, nil, 21, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 21, nil, nil, nil, nil, nil, nil, nil, + nil, nil, 4, nil, 4, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 2, nil, nil, 5, 5, 2, nil, 2, - nil, nil, nil, nil, nil, 5, 5, nil, 4, nil, - 4, nil, nil, nil, nil, 5, 5, nil, nil, 2, - nil, 5, nil, nil, nil, nil, 5, 5, nil, 5, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 4, nil, nil, 4, nil, nil, nil, 2, - 5, nil, nil, nil, 5 ] + 4, nil, nil, 4 ] racc_goto_pointer = [ - nil, 17, 0, 27, 4, 4, 6, nil, -229, nil, + nil, 17, 0, 22, 59, 3, -3, nil, -242, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, -71, nil, -225, nil, 2, -101, nil, nil, nil, - -33, -60, 10, nil, -27, nil, -61, -59, -248, -54, - -28, -68, -208, -219, -104, -4, 2, -8, 4 ] + nil, 13, nil, -166, nil, -8, -114, nil, nil, nil, + -38, -65, -4, nil, 9, nil, -66, -13, -253, -66, + -27, -91, -222, -228, -117, -1, -8, -18, -4 ] racc_goto_default = [ - nil, nil, 241, nil, nil, 32, 36, 39, 43, 47, - 53, 59, 65, 69, 70, 74, 3, 7, 12, 13, - 15, 19, 22, 166, 33, 37, 41, 45, 49, 55, - 61, 147, 66, 148, nil, 4, 139, nil, nil, nil, - nil, nil, nil, nil, 34, nil, nil, nil, nil ] + nil, nil, 250, nil, nil, 37, 41, 43, 47, 52, + 58, 67, 69, 73, 74, 4, 7, 12, 16, 17, + 19, 23, 31, 77, 38, 42, 45, 49, 54, 60, + 65, 157, 70, 147, nil, 8, 148, nil, nil, nil, + nil, nil, nil, nil, 39, nil, nil, nil, nil ] racc_reduce_table = [ 0, 0, :racc_error, - 0, 99, :_reduce_1, - 1, 99, :_reduce_2, - 1, 99, :_reduce_3, - 2, 99, :_reduce_4, - 1, 101, :_reduce_5, - 3, 101, :_reduce_6, - 2, 101, :_reduce_7, - 1, 103, :_reduce_none, - 1, 103, :_reduce_none, - 1, 103, :_reduce_none, - 1, 103, :_reduce_none, - 1, 103, :_reduce_none, - 1, 103, :_reduce_none, - 1, 103, :_reduce_none, - 1, 103, :_reduce_none, - 1, 103, :_reduce_none, - 1, 103, :_reduce_none, - 1, 103, :_reduce_none, - 1, 103, :_reduce_none, - 1, 103, :_reduce_none, - 1, 103, :_reduce_none, - 1, 103, :_reduce_none, - 1, 103, :_reduce_none, - 3, 102, :_reduce_24, - 2, 102, :_reduce_25, - 1, 100, :_reduce_none, - 1, 100, :_reduce_none, - 1, 120, :_reduce_28, - 1, 120, :_reduce_29, - 1, 120, :_reduce_30, - 1, 120, :_reduce_31, - 1, 120, :_reduce_32, - 1, 120, :_reduce_33, - 1, 120, :_reduce_34, - 1, 120, :_reduce_35, - 1, 120, :_reduce_36, - 1, 120, :_reduce_37, - 1, 120, :_reduce_38, - 1, 120, :_reduce_39, - 1, 120, :_reduce_40, - 3, 108, :_reduce_41, - 3, 121, :_reduce_42, - 3, 121, :_reduce_43, - 1, 121, :_reduce_44, - 2, 112, :_reduce_45, - 1, 112, :_reduce_46, - 1, 119, :_reduce_47, - 2, 107, :_reduce_48, - 2, 107, :_reduce_49, - 2, 107, :_reduce_50, - 2, 107, :_reduce_51, - 2, 107, :_reduce_52, - 2, 107, :_reduce_53, - 2, 107, :_reduce_54, - 2, 107, :_reduce_55, - 2, 107, :_reduce_56, - 2, 107, :_reduce_57, - 2, 107, :_reduce_58, - 3, 107, :_reduce_59, - 3, 107, :_reduce_60, - 3, 107, :_reduce_61, - 3, 107, :_reduce_62, - 3, 107, :_reduce_63, - 3, 107, :_reduce_64, - 3, 107, :_reduce_65, - 3, 107, :_reduce_66, - 3, 107, :_reduce_67, - 3, 107, :_reduce_68, - 3, 107, :_reduce_69, - 3, 107, :_reduce_70, - 3, 107, :_reduce_71, - 3, 107, :_reduce_72, - 3, 107, :_reduce_73, - 3, 107, :_reduce_74, - 3, 107, :_reduce_75, - 3, 107, :_reduce_76, - 3, 107, :_reduce_77, - 3, 107, :_reduce_78, - 3, 107, :_reduce_79, - 3, 107, :_reduce_80, - 3, 107, :_reduce_81, - 3, 107, :_reduce_82, - 3, 107, :_reduce_83, - 3, 107, :_reduce_84, - 3, 107, :_reduce_85, - 3, 107, :_reduce_86, - 3, 107, :_reduce_87, - 3, 107, :_reduce_88, - 3, 107, :_reduce_89, - 3, 107, :_reduce_90, - 3, 107, :_reduce_91, - 3, 107, :_reduce_92, - 2, 118, :_reduce_93, - 3, 106, :_reduce_94, - 2, 106, :_reduce_95, - 1, 123, :_reduce_96, - 1, 123, :_reduce_97, - 1, 122, :_reduce_98, - 3, 122, :_reduce_99, - 1, 124, :_reduce_none, - 4, 124, :_reduce_101, - 4, 117, :_reduce_102, - 1, 104, :_reduce_103, - 1, 104, :_reduce_104, - 1, 104, :_reduce_105, - 1, 104, :_reduce_106, - 1, 104, :_reduce_107, - 1, 104, :_reduce_108, - 2, 104, :_reduce_109, - 2, 104, :_reduce_110, - 2, 129, :_reduce_111, - 2, 129, :_reduce_112, - 1, 129, :_reduce_113, - 1, 129, :_reduce_114, - 3, 131, :_reduce_115, - 3, 126, :_reduce_116, - 0, 132, :_reduce_117, - 1, 132, :_reduce_118, - 3, 132, :_reduce_119, - 3, 132, :_reduce_120, - 4, 132, :_reduce_121, - 3, 132, :_reduce_122, - 1, 105, :_reduce_123, - 2, 105, :_reduce_124, - 1, 105, :_reduce_125, - 3, 116, :_reduce_126, - 2, 130, :_reduce_127, - 2, 130, :_reduce_128, - 3, 134, :_reduce_129, - 4, 134, :_reduce_130, - 4, 133, :_reduce_131, - 6, 128, :_reduce_132, - 7, 128, :_reduce_133, - 3, 125, :_reduce_134, - 0, 135, :_reduce_135, - 1, 135, :_reduce_136, - 2, 135, :_reduce_137, - 3, 135, :_reduce_138, - 3, 135, :_reduce_139, - 4, 135, :_reduce_140, - 4, 135, :_reduce_141, - 2, 135, :_reduce_142, - 1, 136, :_reduce_143, - 3, 136, :_reduce_144, - 3, 110, :_reduce_145, - 4, 110, :_reduce_146, - 5, 110, :_reduce_147, - 3, 137, :_reduce_148, - 2, 111, :_reduce_149, - 3, 127, :_reduce_150, - 3, 113, :_reduce_151, - 2, 113, :_reduce_152, - 3, 113, :_reduce_153, - 4, 114, :_reduce_154, - 4, 114, :_reduce_155, - 1, 138, :_reduce_156, - 3, 138, :_reduce_157, - 2, 139, :_reduce_158, - 2, 139, :_reduce_159, - 3, 139, :_reduce_160, - 3, 139, :_reduce_161, - 5, 115, :_reduce_162, - 7, 115, :_reduce_163, - 1, 140, :_reduce_164, - 2, 140, :_reduce_165, - 3, 141, :_reduce_166, - 4, 141, :_reduce_167, - 3, 141, :_reduce_168, + 0, 100, :_reduce_1, + 1, 100, :_reduce_2, + 1, 100, :_reduce_3, + 2, 100, :_reduce_4, + 1, 102, :_reduce_5, + 3, 102, :_reduce_6, + 2, 102, :_reduce_7, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 1, 104, :_reduce_none, + 3, 103, :_reduce_24, + 2, 103, :_reduce_25, + 1, 101, :_reduce_none, + 1, 101, :_reduce_none, + 1, 121, :_reduce_28, + 1, 121, :_reduce_29, + 1, 121, :_reduce_30, + 1, 121, :_reduce_31, + 1, 121, :_reduce_32, + 1, 121, :_reduce_33, + 1, 121, :_reduce_34, + 1, 121, :_reduce_35, + 1, 121, :_reduce_36, + 1, 121, :_reduce_37, + 1, 121, :_reduce_38, + 1, 121, :_reduce_39, + 1, 121, :_reduce_40, + 3, 109, :_reduce_41, + 3, 122, :_reduce_42, + 3, 122, :_reduce_43, + 1, 122, :_reduce_44, + 2, 113, :_reduce_45, + 1, 113, :_reduce_46, + 1, 120, :_reduce_47, + 2, 108, :_reduce_48, + 2, 108, :_reduce_49, + 2, 108, :_reduce_50, + 2, 108, :_reduce_51, + 2, 108, :_reduce_52, + 2, 108, :_reduce_53, + 2, 108, :_reduce_54, + 2, 108, :_reduce_55, + 2, 108, :_reduce_56, + 2, 108, :_reduce_57, + 2, 108, :_reduce_58, + 3, 108, :_reduce_59, + 3, 108, :_reduce_60, + 3, 108, :_reduce_61, + 3, 108, :_reduce_62, + 3, 108, :_reduce_63, + 3, 108, :_reduce_64, + 3, 108, :_reduce_65, + 3, 108, :_reduce_66, + 3, 108, :_reduce_67, + 3, 108, :_reduce_68, + 3, 108, :_reduce_69, + 3, 108, :_reduce_70, + 3, 108, :_reduce_71, + 3, 108, :_reduce_72, + 3, 108, :_reduce_73, + 3, 108, :_reduce_74, + 3, 108, :_reduce_75, + 3, 108, :_reduce_76, + 3, 108, :_reduce_77, + 3, 108, :_reduce_78, + 3, 108, :_reduce_79, + 3, 108, :_reduce_80, + 3, 108, :_reduce_81, + 3, 108, :_reduce_82, + 3, 108, :_reduce_83, + 3, 108, :_reduce_84, + 3, 108, :_reduce_85, + 3, 108, :_reduce_86, + 3, 108, :_reduce_87, + 3, 108, :_reduce_88, + 3, 108, :_reduce_89, + 3, 108, :_reduce_90, + 3, 108, :_reduce_91, + 3, 108, :_reduce_92, + 2, 119, :_reduce_93, + 3, 107, :_reduce_94, + 2, 107, :_reduce_95, + 1, 124, :_reduce_96, + 1, 124, :_reduce_97, + 1, 123, :_reduce_98, + 3, 123, :_reduce_99, + 1, 125, :_reduce_none, + 4, 125, :_reduce_101, + 4, 118, :_reduce_102, + 1, 105, :_reduce_103, + 1, 105, :_reduce_104, + 1, 105, :_reduce_105, + 1, 105, :_reduce_106, + 1, 105, :_reduce_107, + 1, 105, :_reduce_108, + 2, 105, :_reduce_109, + 2, 105, :_reduce_110, + 2, 130, :_reduce_111, + 2, 130, :_reduce_112, + 2, 130, :_reduce_113, + 1, 130, :_reduce_114, + 1, 130, :_reduce_115, + 3, 132, :_reduce_116, + 3, 127, :_reduce_117, + 0, 133, :_reduce_118, + 1, 133, :_reduce_119, + 3, 133, :_reduce_120, + 3, 133, :_reduce_121, + 4, 133, :_reduce_122, + 3, 133, :_reduce_123, + 1, 106, :_reduce_124, + 2, 106, :_reduce_125, + 1, 106, :_reduce_126, + 3, 117, :_reduce_127, + 2, 131, :_reduce_128, + 2, 131, :_reduce_129, + 3, 135, :_reduce_130, + 4, 135, :_reduce_131, + 4, 134, :_reduce_132, + 6, 129, :_reduce_133, + 7, 129, :_reduce_134, + 3, 126, :_reduce_135, + 0, 136, :_reduce_136, + 1, 136, :_reduce_137, + 2, 136, :_reduce_138, + 3, 136, :_reduce_139, + 3, 136, :_reduce_140, + 4, 136, :_reduce_141, + 4, 136, :_reduce_142, + 2, 136, :_reduce_143, + 1, 137, :_reduce_144, + 3, 137, :_reduce_145, + 3, 111, :_reduce_146, + 4, 111, :_reduce_147, + 5, 111, :_reduce_148, + 3, 138, :_reduce_149, + 2, 112, :_reduce_150, + 3, 128, :_reduce_151, + 3, 114, :_reduce_152, + 2, 114, :_reduce_153, + 3, 114, :_reduce_154, + 4, 115, :_reduce_155, + 4, 115, :_reduce_156, + 1, 139, :_reduce_157, + 3, 139, :_reduce_158, + 2, 140, :_reduce_159, + 2, 140, :_reduce_160, + 3, 140, :_reduce_161, + 3, 140, :_reduce_162, + 5, 116, :_reduce_163, + 7, 116, :_reduce_164, + 1, 141, :_reduce_165, + 2, 141, :_reduce_166, + 3, 142, :_reduce_167, + 4, 142, :_reduce_168, 3, 142, :_reduce_169, - 2, 143, :_reduce_170, - 1, 144, :_reduce_171, - 2, 144, :_reduce_172, - 0, 145, :_reduce_173, - 2, 145, :_reduce_174, - 1, 146, :_reduce_175, - 2, 146, :_reduce_176, - 2, 109, :_reduce_177, - 3, 109, :_reduce_178, - 3, 109, :_reduce_179 ] - -racc_reduce_n = 180 - -racc_shift_n = 309 + 3, 143, :_reduce_170, + 2, 144, :_reduce_171, + 1, 145, :_reduce_172, + 2, 145, :_reduce_173, + 0, 146, :_reduce_174, + 2, 146, :_reduce_175, + 1, 147, :_reduce_176, + 2, 147, :_reduce_177, + 2, 110, :_reduce_178, + 3, 110, :_reduce_179, + 3, 110, :_reduce_180 ] + +racc_reduce_n = 181 + +racc_shift_n = 311 racc_token_table = { false => 0, @@ -1042,89 +1071,90 @@ def on_error(error_token_id, error_value, value_stack) :IDENTIFIER => 14, :PROPERTY_ACCESS => 15, :PROTOTYPE_ACCESS => 16, - :CODE => 17, - :PARAM => 18, - :NEW => 19, - :RETURN => 20, - :TRY => 21, - :CATCH => 22, - :FINALLY => 23, - :THROW => 24, - :BREAK => 25, - :CONTINUE => 26, - :FOR => 27, - :IN => 28, - :OF => 29, - :BY => 30, - :WHEN => 31, - :WHILE => 32, - :SWITCH => 33, - :LEADING_WHEN => 34, - :DELETE => 35, - :INSTANCEOF => 36, - :TYPEOF => 37, - :SUPER => 38, - :EXTENDS => 39, - :ARGUMENTS => 40, - :NEWLINE => 41, - :COMMENT => 42, - :JS => 43, - :INDENT => 44, - :OUTDENT => 45, - "?" => 46, - :UMINUS => 47, - :NOT => 48, - "!" => 49, - "!!" => 50, - "~" => 51, - "++" => 52, - "--" => 53, - "*" => 54, - "/" => 55, - "%" => 56, - "+" => 57, - "-" => 58, - "<<" => 59, - ">>" => 60, - ">>>" => 61, - "&" => 62, - "|" => 63, - "^" => 64, - "<=" => 65, - "<" => 66, - ">" => 67, - ">=" => 68, - "==" => 69, - "!=" => 70, - :IS => 71, - :ISNT => 72, - "&&" => 73, - "||" => 74, - :AND => 75, - :OR => 76, - "-=" => 77, - "+=" => 78, - "/=" => 79, - "*=" => 80, - "%=" => 81, - "." => 82, - :ASSIGN => 83, - "||=" => 84, - "&&=" => 85, - "?=" => 86, - "=>" => 87, - "==>" => 88, - "\n" => 89, - ";" => 90, - "," => 91, - "[" => 92, - "]" => 93, - "{" => 94, - "}" => 95, - "(" => 96, - ")" => 97 } - -racc_nt_base = 98 + :SOAK_ACCESS => 17, + :CODE => 18, + :PARAM => 19, + :NEW => 20, + :RETURN => 21, + :TRY => 22, + :CATCH => 23, + :FINALLY => 24, + :THROW => 25, + :BREAK => 26, + :CONTINUE => 27, + :FOR => 28, + :IN => 29, + :OF => 30, + :BY => 31, + :WHEN => 32, + :WHILE => 33, + :SWITCH => 34, + :LEADING_WHEN => 35, + :DELETE => 36, + :INSTANCEOF => 37, + :TYPEOF => 38, + :SUPER => 39, + :EXTENDS => 40, + :ARGUMENTS => 41, + :NEWLINE => 42, + :COMMENT => 43, + :JS => 44, + :INDENT => 45, + :OUTDENT => 46, + "?" => 47, + :UMINUS => 48, + :NOT => 49, + "!" => 50, + "!!" => 51, + "~" => 52, + "++" => 53, + "--" => 54, + "*" => 55, + "/" => 56, + "%" => 57, + "+" => 58, + "-" => 59, + "<<" => 60, + ">>" => 61, + ">>>" => 62, + "&" => 63, + "|" => 64, + "^" => 65, + "<=" => 66, + "<" => 67, + ">" => 68, + ">=" => 69, + "==" => 70, + "!=" => 71, + :IS => 72, + :ISNT => 73, + "&&" => 74, + "||" => 75, + :AND => 76, + :OR => 77, + "-=" => 78, + "+=" => 79, + "/=" => 80, + "*=" => 81, + "%=" => 82, + "." => 83, + :ASSIGN => 84, + "||=" => 85, + "&&=" => 86, + "?=" => 87, + "=>" => 88, + "==>" => 89, + "\n" => 90, + ";" => 91, + "," => 92, + "[" => 93, + "]" => 94, + "{" => 95, + "}" => 96, + "(" => 97, + ")" => 98 } + +racc_nt_base = 99 racc_use_result_var = true @@ -1162,6 +1192,7 @@ def on_error(error_token_id, error_value, value_stack) "IDENTIFIER", "PROPERTY_ACCESS", "PROTOTYPE_ACCESS", + "SOAK_ACCESS", "CODE", "PARAM", "NEW", @@ -1983,56 +2014,56 @@ def _reduce_111(val, _values, result) module_eval(<<'.,.,', 'grammar.y', 244) def _reduce_112(val, _values, result) - result = AccessorNode.new(val[1], true) + result = AccessorNode.new(val[1], :prototype) result end .,., module_eval(<<'.,.,', 'grammar.y', 245) def _reduce_113(val, _values, result) - result = val[0] + result = AccessorNode.new(val[1], :soak) result end .,., module_eval(<<'.,.,', 'grammar.y', 246) def _reduce_114(val, _values, result) - result = SliceNode.new(val[0]) + result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 251) +module_eval(<<'.,.,', 'grammar.y', 247) def _reduce_115(val, _values, result) - result = IndexNode.new(val[1]) + result = SliceNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 256) +module_eval(<<'.,.,', 'grammar.y', 252) def _reduce_116(val, _values, result) - result = ObjectNode.new(val[1]) + result = IndexNode.new(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 261) +module_eval(<<'.,.,', 'grammar.y', 257) def _reduce_117(val, _values, result) - result = [] + result = ObjectNode.new(val[1]) result end .,., module_eval(<<'.,.,', 'grammar.y', 262) def _reduce_118(val, _values, result) - result = val + result = [] result end .,., module_eval(<<'.,.,', 'grammar.y', 263) def _reduce_119(val, _values, result) - result = val[0] << val[2] + result = val result end .,., @@ -2044,51 +2075,51 @@ def _reduce_120(val, _values, result) end .,., -module_eval(<<'.,.,', 'grammar.y', 266) +module_eval(<<'.,.,', 'grammar.y', 265) def _reduce_121(val, _values, result) - result = val[0] << val[3] + result = val[0] << val[2] result end .,., module_eval(<<'.,.,', 'grammar.y', 267) def _reduce_122(val, _values, result) - result = val[1] + result = val[0] << val[3] result end .,., -module_eval(<<'.,.,', 'grammar.y', 272) +module_eval(<<'.,.,', 'grammar.y', 268) def _reduce_123(val, _values, result) - result = val[0] + result = val[1] result end .,., module_eval(<<'.,.,', 'grammar.y', 273) def _reduce_124(val, _values, result) - result = val[1].new_instance + result = val[0] result end .,., module_eval(<<'.,.,', 'grammar.y', 274) def _reduce_125(val, _values, result) - result = val[0] + result = val[1].new_instance result end .,., -module_eval(<<'.,.,', 'grammar.y', 279) +module_eval(<<'.,.,', 'grammar.y', 275) def _reduce_126(val, _values, result) - result = ExtendsNode.new(val[0], val[2]) + result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 284) +module_eval(<<'.,.,', 'grammar.y', 280) def _reduce_127(val, _values, result) - result = CallNode.new(val[0], val[1]) + result = ExtendsNode.new(val[0], val[2]) result end .,., @@ -2100,72 +2131,72 @@ def _reduce_128(val, _values, result) end .,., -module_eval(<<'.,.,', 'grammar.y', 290) +module_eval(<<'.,.,', 'grammar.y', 286) def _reduce_129(val, _values, result) - result = val[1] + result = CallNode.new(val[0], val[1]) result end .,., module_eval(<<'.,.,', 'grammar.y', 291) def _reduce_130(val, _values, result) - result = val[1] << val[3] + result = val[1] result end .,., -module_eval(<<'.,.,', 'grammar.y', 296) +module_eval(<<'.,.,', 'grammar.y', 292) def _reduce_131(val, _values, result) - result = CallNode.new(Value.new('super'), val[2]) + result = val[1] << val[3] result end .,., -module_eval(<<'.,.,', 'grammar.y', 302) +module_eval(<<'.,.,', 'grammar.y', 297) def _reduce_132(val, _values, result) - result = RangeNode.new(val[1], val[4]) + result = CallNode.new(Value.new('super'), val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 304) +module_eval(<<'.,.,', 'grammar.y', 303) def _reduce_133(val, _values, result) - result = RangeNode.new(val[1], val[5], true) + result = RangeNode.new(val[1], val[4]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 309) +module_eval(<<'.,.,', 'grammar.y', 305) def _reduce_134(val, _values, result) - result = ArrayNode.new(val[1]) + result = RangeNode.new(val[1], val[5], true) result end .,., -module_eval(<<'.,.,', 'grammar.y', 314) +module_eval(<<'.,.,', 'grammar.y', 310) def _reduce_135(val, _values, result) - result = [] + result = ArrayNode.new(val[1]) result end .,., module_eval(<<'.,.,', 'grammar.y', 315) def _reduce_136(val, _values, result) - result = val + result = [] result end .,., module_eval(<<'.,.,', 'grammar.y', 316) def _reduce_137(val, _values, result) - result = [val[1]] + result = val result end .,., module_eval(<<'.,.,', 'grammar.y', 317) def _reduce_138(val, _values, result) - result = val[0] << val[2] + result = [val[1]] result end .,., @@ -2179,7 +2210,7 @@ def _reduce_139(val, _values, result) module_eval(<<'.,.,', 'grammar.y', 319) def _reduce_140(val, _values, result) - result = val[0] << val[3] + result = val[0] << val[2] result end .,., @@ -2193,12 +2224,12 @@ def _reduce_141(val, _values, result) module_eval(<<'.,.,', 'grammar.y', 321) def _reduce_142(val, _values, result) - result = val[0] + result = val[0] << val[3] result end .,., -module_eval(<<'.,.,', 'grammar.y', 326) +module_eval(<<'.,.,', 'grammar.y', 322) def _reduce_143(val, _values, result) result = val[0] result @@ -2207,166 +2238,166 @@ def _reduce_143(val, _values, result) module_eval(<<'.,.,', 'grammar.y', 327) def _reduce_144(val, _values, result) - result = ([val[0]] << val[2]).flatten + result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 332) +module_eval(<<'.,.,', 'grammar.y', 328) def _reduce_145(val, _values, result) - result = TryNode.new(val[1], val[2][0], val[2][1]) + result = ([val[0]] << val[2]).flatten result end .,., module_eval(<<'.,.,', 'grammar.y', 333) def _reduce_146(val, _values, result) - result = TryNode.new(val[1], nil, nil, val[3]) + result = TryNode.new(val[1], val[2][0], val[2][1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 335) +module_eval(<<'.,.,', 'grammar.y', 334) def _reduce_147(val, _values, result) - result = TryNode.new(val[1], val[2][0], val[2][1], val[4]) + result = TryNode.new(val[1], nil, nil, val[3]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 340) +module_eval(<<'.,.,', 'grammar.y', 336) def _reduce_148(val, _values, result) - result = [val[1], val[2]] + result = TryNode.new(val[1], val[2][0], val[2][1], val[4]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 345) +module_eval(<<'.,.,', 'grammar.y', 341) def _reduce_149(val, _values, result) - result = ThrowNode.new(val[1]) + result = [val[1], val[2]] result end .,., -module_eval(<<'.,.,', 'grammar.y', 350) +module_eval(<<'.,.,', 'grammar.y', 346) def _reduce_150(val, _values, result) - result = ParentheticalNode.new(val[1], val[0].line) + result = ThrowNode.new(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 355) +module_eval(<<'.,.,', 'grammar.y', 351) def _reduce_151(val, _values, result) - result = WhileNode.new(val[1], val[2]) + result = ParentheticalNode.new(val[1], val[0].line) result end .,., module_eval(<<'.,.,', 'grammar.y', 356) def _reduce_152(val, _values, result) - result = WhileNode.new(val[1], nil) + result = WhileNode.new(val[1], val[2]) result end .,., module_eval(<<'.,.,', 'grammar.y', 357) def _reduce_153(val, _values, result) - result = WhileNode.new(val[2], Expressions.wrap(val[0])) + result = WhileNode.new(val[1], nil) result end .,., -module_eval(<<'.,.,', 'grammar.y', 364) +module_eval(<<'.,.,', 'grammar.y', 358) def _reduce_154(val, _values, result) - result = ForNode.new(val[0], val[3], val[2][0], val[2][1]) + result = WhileNode.new(val[2], Expressions.wrap(val[0])) result end .,., module_eval(<<'.,.,', 'grammar.y', 365) def _reduce_155(val, _values, result) - result = ForNode.new(val[3], val[2], val[1][0], val[1][1]) + result = ForNode.new(val[0], val[3], val[2][0], val[2][1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 370) +module_eval(<<'.,.,', 'grammar.y', 366) def _reduce_156(val, _values, result) - result = val + result = ForNode.new(val[3], val[2], val[1][0], val[1][1]) result end .,., module_eval(<<'.,.,', 'grammar.y', 371) def _reduce_157(val, _values, result) - result = [val[0], val[2]] + result = val result end .,., -module_eval(<<'.,.,', 'grammar.y', 376) +module_eval(<<'.,.,', 'grammar.y', 372) def _reduce_158(val, _values, result) - result = {:source => val[1]} + result = [val[0], val[2]] result end .,., module_eval(<<'.,.,', 'grammar.y', 377) def _reduce_159(val, _values, result) - result = {:source => val[1], :object => true} + result = {:source => val[1]} result end .,., -module_eval(<<'.,.,', 'grammar.y', 379) +module_eval(<<'.,.,', 'grammar.y', 378) def _reduce_160(val, _values, result) - result = val[0].merge(:filter => val[2]) + result = {:source => val[1], :object => true} result end .,., -module_eval(<<'.,.,', 'grammar.y', 381) +module_eval(<<'.,.,', 'grammar.y', 380) def _reduce_161(val, _values, result) - result = val[0].merge(:step => val[2]) + result = val[0].merge(:filter => val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 387) +module_eval(<<'.,.,', 'grammar.y', 382) def _reduce_162(val, _values, result) - result = val[3].rewrite_condition(val[1]) + result = val[0].merge(:step => val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 389) +module_eval(<<'.,.,', 'grammar.y', 388) def _reduce_163(val, _values, result) - result = val[3].rewrite_condition(val[1]).add_else(val[5]) + result = val[3].rewrite_condition(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 394) +module_eval(<<'.,.,', 'grammar.y', 390) def _reduce_164(val, _values, result) - result = val[0] + result = val[3].rewrite_condition(val[1]).add_else(val[5]) result end .,., module_eval(<<'.,.,', 'grammar.y', 395) def _reduce_165(val, _values, result) - result = val[0] << val[1] + result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 400) +module_eval(<<'.,.,', 'grammar.y', 396) def _reduce_166(val, _values, result) - result = IfNode.new(val[1], val[2], nil, {:statement => true}) + result = val[0] << val[1] result end .,., -module_eval(<<'.,.,', 'grammar.y', 402) +module_eval(<<'.,.,', 'grammar.y', 401) def _reduce_167(val, _values, result) result = IfNode.new(val[1], val[2], nil, {:statement => true}) result @@ -2375,68 +2406,68 @@ def _reduce_167(val, _values, result) module_eval(<<'.,.,', 'grammar.y', 403) def _reduce_168(val, _values, result) - result = val[2].add_comment(val[0]) + result = IfNode.new(val[1], val[2], nil, {:statement => true}) result end .,., -module_eval(<<'.,.,', 'grammar.y', 408) +module_eval(<<'.,.,', 'grammar.y', 404) def _reduce_169(val, _values, result) - result = IfNode.new(val[1], val[2]) + result = val[2].add_comment(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 413) +module_eval(<<'.,.,', 'grammar.y', 409) def _reduce_170(val, _values, result) - result = val[1].force_statement + result = IfNode.new(val[1], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 418) +module_eval(<<'.,.,', 'grammar.y', 414) def _reduce_171(val, _values, result) - result = val[0] + result = val[1].force_statement result end .,., module_eval(<<'.,.,', 'grammar.y', 419) def _reduce_172(val, _values, result) - result = val[0].add_else(val[1]) + result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 424) +module_eval(<<'.,.,', 'grammar.y', 420) def _reduce_173(val, _values, result) - result = nil + result = val[0].add_else(val[1]) result end .,., module_eval(<<'.,.,', 'grammar.y', 425) def _reduce_174(val, _values, result) - result = val[1] + result = nil result end .,., -module_eval(<<'.,.,', 'grammar.y', 430) +module_eval(<<'.,.,', 'grammar.y', 426) def _reduce_175(val, _values, result) - result = val[0] + result = val[1] result end .,., module_eval(<<'.,.,', 'grammar.y', 431) def _reduce_176(val, _values, result) - result = val[0].add_else(val[1]) + result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 436) +module_eval(<<'.,.,', 'grammar.y', 432) def _reduce_177(val, _values, result) result = val[0].add_else(val[1]) result @@ -2445,13 +2476,20 @@ def _reduce_177(val, _values, result) module_eval(<<'.,.,', 'grammar.y', 437) def _reduce_178(val, _values, result) - result = IfNode.new(val[2], Expressions.wrap(val[0]), nil, {:statement => true}) + result = val[0].add_else(val[1]) result end .,., module_eval(<<'.,.,', 'grammar.y', 438) def _reduce_179(val, _values, result) + result = IfNode.new(val[2], Expressions.wrap(val[0]), nil, {:statement => true}) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 439) + def _reduce_180(val, _values, result) result = IfNode.new(val[2], Expressions.wrap(val[0]), nil, {:statement => true, :invert => true}) result end diff --git a/test/fixtures/execution/test_existence.coffee b/test/fixtures/execution/test_existence.coffee index 798cd5abd4..227206313e 100644 --- a/test/fixtures/execution/test_existence.coffee +++ b/test/fixtures/execution/test_existence.coffee @@ -30,4 +30,15 @@ get_next_node: => throw "up" if counter counter++ -print(if get_next_node()? then true else false) \ No newline at end of file +print(if get_next_node()? then true else false) + + +# Existence chains, soaking up undefined properties: + +obj: { + prop: "hello" +} + +print(obj?.prop is "hello") + +print(obj?.prop?.non?.existent?.property is undefined) \ No newline at end of file From 817e8deb2704b89d5e7106f81188e68be6ae900c Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Sun, 24 Jan 2010 12:52:15 -0500 Subject: [PATCH 08/32] adding soaked method calls, with caching --- examples/computer_science/README | 4 +++ .../computer_science/binary_search.coffee | 25 +++++++++++++++++++ examples/computer_science/bubble_sort.coffee | 11 ++++++++ lib/coffee_script/nodes.rb | 12 +++++++-- test/fixtures/execution/test_existence.coffee | 12 ++++++++- test/unit/test_execution.rb | 3 ++- 6 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 examples/computer_science/README create mode 100644 examples/computer_science/binary_search.coffee create mode 100644 examples/computer_science/bubble_sort.coffee diff --git a/examples/computer_science/README b/examples/computer_science/README new file mode 100644 index 0000000000..1046f9f9b5 --- /dev/null +++ b/examples/computer_science/README @@ -0,0 +1,4 @@ +Ported from Nicholas Zakas' collection of computer science fundamentals, written +in JavaScript. Originals available here: + +http://github.com/nzakas/computer-science-in-javascript diff --git a/examples/computer_science/binary_search.coffee b/examples/computer_science/binary_search.coffee new file mode 100644 index 0000000000..e5447fa42c --- /dev/null +++ b/examples/computer_science/binary_search.coffee @@ -0,0 +1,25 @@ +# Uses a binary search algorithm to locate a value in the specified array. +binary_search: items, value => + + start: 0 + stop: items.length - 1 + pivot: Math.floor((start + stop) / 2) + + while items[pivot] isnt value and start < stop + + # Adjust the search area. + stop: pivot - 1 if value < items[pivot] + start: pivot + 1 if value > items[pivot] + + # Recalculate the pivot. + pivot: Math.floor((stop + start) / 2) + + # Make sure we've found the correct value. + if items[pivot] is value then pivot else -1 + + +# Test the function. +print(2 is binary_search([10, 20, 30, 40, 50], 30)) +print(4 is binary_search([-97, 35, 67, 88, 1200], 1200)) +print(0 is binary_search([0, 45, 70], 0)) +print(-1 is binary_search([0, 45, 70], 10)) \ No newline at end of file diff --git a/examples/computer_science/bubble_sort.coffee b/examples/computer_science/bubble_sort.coffee new file mode 100644 index 0000000000..f55787800c --- /dev/null +++ b/examples/computer_science/bubble_sort.coffee @@ -0,0 +1,11 @@ +# A bubble sort implementation, sorting the given array in-place. +bubble_sort: list => + for i in [0...list.length] + for j in [0...list.length - i] + [list[j], list[j+1]]: [list[j+1], list[j]] if list[j] > list[j+1] + list + + +# Test the function. +print(bubble_sort([3, 2, 1]).join(' ') is '1 2 3') +print(bubble_sort([9, 2, 7, 0, 1]).join(' ') is '0 1 2 7 9') \ No newline at end of file diff --git a/lib/coffee_script/nodes.rb b/lib/coffee_script/nodes.rb index 8f7cb20fa1..77016db46e 100644 --- a/lib/coffee_script/nodes.rb +++ b/lib/coffee_script/nodes.rb @@ -332,6 +332,9 @@ class ValueNode < Node children :base, :properties attr_reader :last, :source + # Soak up undefined properties and call attempts. + SOAK = " == undefined ? undefined : " + def initialize(base, properties=[]) @base, @properties = base, [properties].flatten end @@ -375,14 +378,19 @@ def compile_node(o) props.each do |prop| if prop.is_a?(AccessorNode) && prop.soak soaked = true - parts[-1] << " == undefined ? undefined : #{baseline += prop.compile(o)}" + if @base.is_a?(CallNode) && prop == props.first + temp = o[:scope].free_variable + parts[-1] = "(#{temp} = #{baseline})#{SOAK}#{baseline = temp.to_s + prop.compile(o)}" + else + parts[-1] << "#{SOAK}#{baseline += prop.compile(o)}" + end else parts << prop.compile(o) end end @last = parts.last @source = parts.length > 1 ? parts[0...-1].join('') : nil - code = parts.join('') + code = parts.join('').gsub(')())', '()))') write(soaked ? "(#{code})" : code) end end diff --git a/test/fixtures/execution/test_existence.coffee b/test/fixtures/execution/test_existence.coffee index 227206313e..a532b8e7e5 100644 --- a/test/fixtures/execution/test_existence.coffee +++ b/test/fixtures/execution/test_existence.coffee @@ -41,4 +41,14 @@ obj: { print(obj?.prop is "hello") -print(obj?.prop?.non?.existent?.property is undefined) \ No newline at end of file +print(obj?.prop?.non?.existent?.property is undefined) + + +# Soaks and caches method calls as well. + +arr: ["--", "----"] + +print(arr.pop()?.length is 4) +print(arr.pop()?.length is 2) +print(arr.pop()?.length is undefined) +print(arr.pop()?.length?.non?.existent()?.property is undefined) diff --git a/test/unit/test_execution.rb b/test/unit/test_execution.rb index 81db6a6d85..8eea7479b5 100644 --- a/test/unit/test_execution.rb +++ b/test/unit/test_execution.rb @@ -6,7 +6,8 @@ class ExecutionTest < Test::Unit::TestCase SOURCES = [ 'test/fixtures/execution/*.coffee', - 'examples/beautiful_code/*.coffee' + 'examples/beautiful_code/*.coffee', + 'examples/computer_science/*.coffee' ] # This is by far the most important test. It evaluates all of the From af53a04932a8a2de7fc626caa8541747ee33a395 Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Sun, 24 Jan 2010 13:39:27 -0500 Subject: [PATCH 09/32] added test for lexical scope sharing through generated closure wrappers, something uncommonly used, but that was a regression --- lib/coffee_script/nodes.rb | 7 ++++--- test/fixtures/execution/test_existence.coffee | 1 + test/fixtures/execution/test_lexical_scope.coffee | 9 ++++++++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/lib/coffee_script/nodes.rb b/lib/coffee_script/nodes.rb index 77016db46e..3822e54388 100644 --- a/lib/coffee_script/nodes.rb +++ b/lib/coffee_script/nodes.rb @@ -55,10 +55,11 @@ def compile(o={}) closure ? compile_closure(@options) : compile_node(@options) end + # Statements converted into expressions share scope with their parent + # closure, to preserve JavaScript-style lexical scope. def compile_closure(o={}) - indent = o[:indent] - @indent = (o[:indent] = idt(1)) - ClosureNode.wrap(self).compile(o) + @indent = o[:indent] + ClosureNode.wrap(self).compile(o.merge(:shared_scope => o[:scope])) end # Quick short method for the current indentation level, plus tabbing in. diff --git a/test/fixtures/execution/test_existence.coffee b/test/fixtures/execution/test_existence.coffee index a532b8e7e5..c572eabee3 100644 --- a/test/fixtures/execution/test_existence.coffee +++ b/test/fixtures/execution/test_existence.coffee @@ -51,4 +51,5 @@ arr: ["--", "----"] print(arr.pop()?.length is 4) print(arr.pop()?.length is 2) print(arr.pop()?.length is undefined) +print(arr[0]?.length is undefined) print(arr.pop()?.length?.non?.existent()?.property is undefined) diff --git a/test/fixtures/execution/test_lexical_scope.coffee b/test/fixtures/execution/test_lexical_scope.coffee index 7f46928b5b..b8d8259f8d 100644 --- a/test/fixtures/execution/test_lexical_scope.coffee +++ b/test/fixtures/execution/test_lexical_scope.coffee @@ -1,3 +1,10 @@ num: 1 + 2 + (a: 3) -print(num is 6) \ No newline at end of file +print(num is 6) + + +result: if true + false + other: "result" + +print(result is "result" and other is "result") \ No newline at end of file From e6f010b98369638d97d031544d9028b1c2ecf7fe Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Sun, 24 Jan 2010 18:59:29 -0500 Subject: [PATCH 10/32] adding more examples to the computer_science folder, and fiddling with operator precedence --- examples/computer_science/linked_list.coffee | 106 ++ .../computer_science/luhn_algorithm.coffee | 36 + examples/computer_science/merge_sort.coffee | 19 + .../computer_science/selection_sort.coffee | 23 + lib/coffee_script/grammar.y | 4 +- lib/coffee_script/parser.rb | 1164 ++++++++--------- 6 files changed, 767 insertions(+), 585 deletions(-) create mode 100644 examples/computer_science/linked_list.coffee create mode 100644 examples/computer_science/luhn_algorithm.coffee create mode 100644 examples/computer_science/merge_sort.coffee create mode 100644 examples/computer_science/selection_sort.coffee diff --git a/examples/computer_science/linked_list.coffee b/examples/computer_science/linked_list.coffee new file mode 100644 index 0000000000..f63da641b3 --- /dev/null +++ b/examples/computer_science/linked_list.coffee @@ -0,0 +1,106 @@ +# "Classic" linked list implementation that doesn't keep track of its size. +LinkedList: => + this._head: null # Pointer to the first item in the list. + + +# Appends some data to the end of the list. This method traverses the existing +# list and places the value at the end in a new node. +LinkedList::add: data => + + # Create a new node object to wrap the data. + node: {data: data, next: null} + + current: this._head ||= node + + if this._head isnt node + current: current.next while current.next + current.next: node + + this + + +# Retrieves the data at the given position in the list. +LinkedList::item: index => + + # Check for out-of-bounds values. + return null if index < 0 + + current: this._head or null + i: -1 + + # Advance through the list. + current: current.next while current and index > (i += 1) + + # Return null if we've reached the end. + current and current.data + + +# Remove the item from the given location in the list. +LinkedList::remove: index => + + # Check for out-of-bounds values. + return null if index < 0 + + current: this._head or null + i: -1 + + # Special case: removing the first item. + if index is 0 + this._head: current.next + else + + # Find the right location. + [previous, current]: [current, current.next] while index > (i += 1) + + # Skip over the item to remove. + previous.next: current.next + + # Return the value. + current and current.data + + +# Calculate the number of items in the list. +LinkedList::size: => + current: this._head + count: 0 + + while current + count += 1 + current: current.next + + count + + +# Convert the list into an array. +LinkedList::toArray: => + result: [] + current: this._head + + while current + result.push(current.data) + current: current.next + + result + + +# The string representation of the linked list. +LinkedList::toString: => this.toArray().toString() + + +# Tests. +list: new LinkedList() + +list.add("Hi") +print(list.size() is 1) +print(list.item(0) is "Hi") +print(list.item(1) is null) + +list: new LinkedList() +list.add("zero").add("one").add("two") +print(list.size() is 3) +print(list.item(2) is "two") +print(list.remove(1) is "one") +print(list.item(0) is "zero") +print(list.item(1) is "two") +print(list.size() is 2) +print(list.item(-10) is null) diff --git a/examples/computer_science/luhn_algorithm.coffee b/examples/computer_science/luhn_algorithm.coffee new file mode 100644 index 0000000000..2398fb2611 --- /dev/null +++ b/examples/computer_science/luhn_algorithm.coffee @@ -0,0 +1,36 @@ +# Use the Luhn algorithm to validate a numeric identifier, such as credit card +# numbers, national insurance numbers, etc. +# See: http://en.wikipedia.org/wiki/Luhn_algorithm + +is_valid_identifier: identifier => + + sum: 0 + alt: false + + for i in [(identifier.length - 1)..0] + + # Get the next digit. + num: parseInt(identifier.charAt(i), 10) + + # If it's not a valid number, abort. + return false if isNaN(num) + + # If it's an alternate number... + if alt + num *= 2 + num: (num % 10) + 1 if num > 9 + + # Flip the alternate bit. + alt: !alt + + # Add to the rest of the sum. + sum += num + + # Determine if it's valid. + sum % 10 is 0 + + +# Tests. +print(is_valid_identifier("49927398716") is true) +print(is_valid_identifier("4408041234567893") is true) +print(is_valid_identifier("4408041234567890") is false) diff --git a/examples/computer_science/merge_sort.coffee b/examples/computer_science/merge_sort.coffee new file mode 100644 index 0000000000..ac8d0fe22a --- /dev/null +++ b/examples/computer_science/merge_sort.coffee @@ -0,0 +1,19 @@ +# Sorts an array in ascending natural order using merge sort. +merge_sort: list => + + return list if list.length is 1 + + result: [] + pivot: Math.floor(list.length / 2) + left: merge_sort(list.slice(0, pivot)) + right: merge_sort(list.slice(pivot)) + + while left.length and right.length + result.push(if left[0] < right[0] then left.shift() else right.shift()) + + result.concat(left).concat(right) + + +# Test the function. +print(merge_sort([3, 2, 1]).join(' ') is '1 2 3') +print(merge_sort([9, 2, 7, 0, 1]).join(' ') is '0 1 2 7 9') \ No newline at end of file diff --git a/examples/computer_science/selection_sort.coffee b/examples/computer_science/selection_sort.coffee new file mode 100644 index 0000000000..e8b3b53e88 --- /dev/null +++ b/examples/computer_science/selection_sort.coffee @@ -0,0 +1,23 @@ +# An in-place selection sort. +selection_sort: list => + len: list.length + + # For each item in the list. + for i in [0...len] + + # Set the minimum to this position. + min: i + + # Check the rest of the array to see if anything is smaller. + (min: j if list[j] < list[min]) for j in [i+1...len] + + # Swap if a smaller item has been found. + [list[i], list[min]]: [list[min], list[i]] if i isnt min + + # The list is now sorted. + list + + +# Test the function. +print(selection_sort([3, 2, 1]).join(' ') is '1 2 3') +print(selection_sort([9, 2, 7, 0, 1]).join(' ') is '0 1 2 7 9') \ No newline at end of file diff --git a/lib/coffee_script/grammar.y b/lib/coffee_script/grammar.y index 40374b02a4..617bda01f1 100644 --- a/lib/coffee_script/grammar.y +++ b/lib/coffee_script/grammar.y @@ -37,8 +37,8 @@ prechigh right WHEN LEADING_WHEN IN OF BY right THROW FOR NEW SUPER left EXTENDS - left ASSIGN '||=' '&&=' '?=' - right RETURN + left '||=' '&&=' '?=' + right ASSIGN RETURN right '=>' '==>' UNLESS IF ELSE WHILE preclow diff --git a/lib/coffee_script/parser.rb b/lib/coffee_script/parser.rb index 1cb6d55ed2..a375ea28c6 100644 --- a/lib/coffee_script/parser.rb +++ b/lib/coffee_script/parser.rb @@ -34,86 +34,81 @@ def on_error(error_token_id, error_value, value_stack) ##### State transition tables begin ### clist = [ -'106,9,114,20,24,27,32,36,40,46,50,55,61,276,270,271,30,1,5,11,14,18', -'276,22,28,33,122,126,30,30,18,99,63,218,72,115,3,6,284,15,145,18,26', -'179,30,111,1,44,48,53,59,135,139,102,105,109,113,118,121,125,128,131', -'134,138,101,104,108,112,117,120,124,127,130,133,137,100,103,107,110', -'116,119,123,30,129,132,136,51,56,149,151,152,71,178,2,9,10,183,20,24', -'27,32,36,40,46,50,55,61,294,149,151,152,1,5,11,14,51,56,22,28,33,35', -'62,66,189,242,57,63,97,72,302,3,6,80,15,241,18,26,255,256,276,79,44', -'48,53,59,64,68,18,111,239,293,13,111,263,135,139,30,249,135,139,102', -'105,109,113,118,145,150,62,66,18,156,149,151,152,149,151,152,149,151', -'152,51,56,62,66,176,71,150,2,9,10,156,20,24,27,32,36,40,46,50,55,61', -'62,66,251,91,1,5,11,14,262,1,22,28,33,35,30,62,66,249,57,63,249,72,80', -'3,6,111,15,30,18,26,79,-181,-181,265,44,48,53,59,64,68,111,30,80,266', -'13,187,-181,-181,150,190,79,150,156,30,150,156,51,56,156,18,141,62,66', -'251,62,66,251,85,252,275,149,151,152,51,56,62,66,173,71,18,2,9,10,273', -'20,24,27,32,36,40,46,50,55,61,309,153,270,271,1,5,11,14,75,80,22,28', -'33,35,80,62,66,79,57,63,97,72,79,3,6,111,15,,18,26,,-181,-181,,44,48', -'53,59,64,68,184,185,,111,13,154,18,,76,-181,-181,18,,76,150,111,191', -'192,156,62,66,135,139,102,105,109,113,118,121,125,128,191,192,51,56', -',,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,111,,1,5,11,14,135,139', -'22,28,33,35,62,66,176,,57,63,177,72,,3,6,111,15,,18,26,,135,139,,44', -'48,53,59,64,68,111,,,,13,,135,139,102,105,109,113,118,121,125,128,131', -'134,138,101,104,108,112,117,120,124,127,,,111,,,,51,56,-181,-181,,71', -',2,9,10,,20,24,27,32,36,40,46,50,55,61,,,111,,1,5,11,14,-181,-181,22', -'28,33,35,,,,,57,63,,72,,3,6,111,15,,18,26,,-181,-181,,44,48,53,59,64', -'68,111,,,,13,,135,139,102,105,109,113,118,121,125,128,131,134,138,101', -'104,108,112,117,120,124,127,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36', -'40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18', -'26,,,,,44,48,53,59,64,68,111,,,,13,,135,139,102,105,109,113,118,121', -'125,128,131,134,138,101,104,108,112,117,120,124,127,,,,,,,51,56,,,,71', -',2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,', -',,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,,13,,135,139', -'102,105,109,113,118,121,125,128,131,134,138,101,104,108,112,117,120', -'124,127,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,', -',1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53', -'59,64,68,111,,,,13,,135,139,102,105,109,113,118,121,125,128,131,134', -'138,101,104,108,112,117,120,124,127,,,,,,,51,56,,,,71,,2,9,10,,20,24', +'106,9,114,20,24,27,32,36,40,46,50,55,61,276,270,271,178,1,5,11,14,18', +'276,22,28,33,122,126,30,30,18,99,63,265,72,115,3,6,30,15,266,18,26,218', +'30,111,1,44,48,53,59,136,139,102,105,109,113,118,121,125,129,132,135', +'138,101,104,108,112,117,120,124,128,131,134,137,100,103,107,110,116', +'119,123,127,130,133,302,51,56,149,151,152,71,173,2,9,10,183,20,24,27', +'32,36,40,46,50,55,61,294,149,151,152,1,5,11,14,51,56,22,28,33,35,80', +'30,189,242,57,63,97,72,79,3,6,80,15,241,18,26,184,185,276,79,44,48,53', +'59,64,68,18,51,56,293,13,141,62,66,111,191,192,18,30,76,136,139,102', +'105,109,150,62,66,18,155,149,151,152,191,192,149,151,152,239,51,56,149', +'151,152,71,150,2,9,10,155,20,24,27,32,36,40,46,50,55,61,153,149,151', +'152,1,5,11,14,30,80,22,28,33,35,80,62,66,79,57,63,249,72,79,3,6,249', +'15,284,18,26,62,66,62,66,44,48,53,59,64,68,270,271,145,111,13,91,18', +'157,150,-181,-181,18,155,150,111,62,66,155,1,150,136,139,30,155,62,66', +'251,273,263,62,66,251,275,51,56,30,145,262,71,150,2,9,10,155,20,24,27', +'32,36,40,46,50,55,61,187,249,190,30,1,5,11,14,256,111,22,28,33,35,85', +'-181,-181,179,57,63,255,72,80,3,6,111,15,309,18,26,79,-181,-181,75,44', +'48,53,59,64,68,97,,,,13,62,66,251,,252,,111,62,66,176,,111,136,139,18', +',76,136,139,102,105,109,113,118,121,125,129,,51,56,,,,71,,2,9,10,,20', +'24,27,32,36,40,46,50,55,61,,,111,,1,5,11,14,-181,-181,22,28,33,35,62', +'66,176,,57,63,177,72,,3,6,111,15,,18,26,,136,139,,44,48,53,59,64,68', +'111,,,,13,,136,139,102,105,109,113,118,121,125,129,132,135,138,101,104', +'108,112,117,120,124,128,,,111,,,,51,56,-181,-181,,71,,2,9,10,,20,24', +'27,32,36,40,46,50,55,61,,,111,,1,5,11,14,-181,-181,22,28,33,35,,,,,57', +'63,,72,,3,6,111,15,,18,26,,-181,-181,,44,48,53,59,64,68,111,,,,13,,136', +'139,102,105,109,113,118,121,125,129,132,135,138,101,104,108,112,117', +'120,124,128,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61', +',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48', +'53,59,64,68,111,,,,13,,136,139,102,105,109,113,118,121,125,129,132,135', +'138,101,104,108,112,117,120,124,128,,,,,,,51,56,,,,71,,2,9,10,,20,24', '27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3', -'6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,,13,,135,139,102,105,109,113', -'118,121,125,128,131,134,138,101,104,108,112,117,120,124,127,,,,,,,51', +'6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,,13,,136,139,102,105,109,113', +'118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,,,,,,,51', '56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28', '33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,,13', -',135,139,102,105,109,113,118,121,125,128,131,134,138,101,104,108,112', -'117,120,124,127,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55', +',136,139,102,105,109,113,118,121,125,129,132,135,138,101,104,108,112', +'117,120,124,128,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55', '61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44', -'48,53,59,64,68,111,,,,13,,135,139,102,105,109,113,118,121,125,128,131', -'134,138,101,104,108,112,117,120,124,127,,299,,,,,51,56,,,,71,,2,9,10', -',20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63', -',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,,13,,135,139,102,105', -'109,113,118,121,125,128,131,134,138,111,,,,,,135,139,102,105,109,113', -'118,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14', -',,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,111', -',,,13,,135,139,102,105,109,113,118,121,125,128,131,134,138,111,,,,,', -'135,139,102,105,109,113,118,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40', +'48,53,59,64,68,111,,,,13,,136,139,102,105,109,113,118,121,125,129,132', +'135,138,101,104,108,112,117,120,124,128,,,,,,,51,56,,,,71,,2,9,10,,20', +'24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72', +',3,6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,,13,,136,139,102,105,109', +'113,118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,,,,', +',,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,', +',22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,111', +',,,13,,136,139,102,105,109,113,118,121,125,129,132,135,138,101,104,108', +'112,117,120,124,128,,299,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40', '46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26', -',95,,,44,48,53,59,64,68,111,,,,13,,135,139,102,105,109,113,118,121,125', -'128,131,134,138,111,,,,,,135,139,102,105,109,,,,51,56,,,,71,,2,9,10', -',20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63', -',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,,13,,135,139,102,105', -'109,113,118,121,125,128,131,134,138,111,,,,,,135,139,102,105,109,,,', -'51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22', -'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,', -'13,,135,139,102,105,109,113,118,121,125,128,111,,,,,,135,139,102,105', -'109,113,118,121,125,128,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50', -'55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,', -'44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2', +',,,,44,48,53,59,64,68,111,,,,13,,136,139,102,105,109,113,118,121,125', +'129,132,135,138,111,,,,,,136,139,102,105,109,113,118,,51,56,,,,71,,2', '9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,', -'57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,', -',,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,282,,,,44,48', -'53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,62,66,,71,,2,9', -'10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57', -'63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1', -'5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59', -'64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24', -'27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3', -'6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,', -',22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,', -',13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36', +'57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,,13,,136,139,102', +'105,109,113,118,121,125,129,132,135,138,111,,,,,,136,139,102,105,109', +'113,118,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5', +'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,95,,,44,48,53,59', +'64,68,111,,,,13,,136,139,102,105,109,113,118,121,125,129,132,135,138', +'111,,,,,,136,139,102,105,109,113,118,,51,56,,,,71,,2,9,10,,20,24,27', +'32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6', +',15,,18,26,,,,,44,48,53,59,64,68,111,,,,13,,136,139,102,105,109,113', +'118,121,125,129,132,135,138,111,,,,,,136,139,102,105,109,,,,51,56,,', +',71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33', +'35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,,13,,136', +'139,102,105,109,113,118,121,125,129,111,,,,,,136,139,102,105,109,113', +'118,121,125,129,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61', +',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48', +'53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,', +'20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63', +',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5', +'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,282,,,,44,48,53,59', +'64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,62,66,,71,,2,9,10,,20', +'24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72', +',3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14', +',,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,', +',,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36', '40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18', '26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,', ',71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33', @@ -131,14 +126,14 @@ def on_error(error_token_id, error_value, value_stack) '51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22', '28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46', -'50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,170', +'50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,', ',,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71', ',2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,', ',,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61', -',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48', -'53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,', -'20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63', +',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,170,,,,44', +'48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10', +',20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63', ',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5', '11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64', @@ -146,10 +141,10 @@ def on_error(error_token_id, error_value, value_stack) '32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6', ',15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,', '51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22', -'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,170,,,,44,48,53,59,64,68,,,,', -'13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40', -'46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26', -',,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71', +'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46', +'50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,', +',,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71', ',2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,', ',,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61', @@ -161,18 +156,23 @@ def on_error(error_token_id, error_value, value_stack) '5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59', '64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24', '27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3', -'6,,15,,18,26,30,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,51,56,62,66,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11', -'14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68', -',,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32', -'36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15', -',18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56', -',,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33', -'35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55', -'61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44', -'48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10', -',20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63', +'6,,15,,18,26,170,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14', +',,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,', +',,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36', +'40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18', +'26,30,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56', +'62,66,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22', +'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46', +'50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,', +',,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71', +',2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,', +',,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61', +',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48', +'53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,', +'20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63', ',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5', '11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64', @@ -233,120 +233,120 @@ def on_error(error_token_id, error_value, value_stack) '51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22', '28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13', '20,24,27,32,36,40,46,50,55,61,,,,,,,,,,,,28,33,,,,,,51,56,,,,71,,2,15', -'10,,26,,,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99,,,,115,,,,,,', -',,,111,71,,2,,10,135,139,102,105,109,113,118,121,125,128,131,134,138', -'101,104,108,112,117,120,124,127,130,133,137,100,103,107,110,116,119', -'254,,129,132,136,,,,,,,274,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11', -'14,,,22,28,33,,,,,,,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,', -',13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,,10,20,24,27,32,36,40', -'46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,,63,,72,,3,6,,15,,18,26', -',,,,44,48,53,59,64,68,106,,114,,13,,,20,24,27,32,36,40,46,50,55,61,', -',,,,,,,,122,126,28,33,,99,,51,56,115,,,71,,2,,10,15,,111,26,,,,,135', -'139,102,105,109,113,118,121,125,128,131,134,138,101,104,108,112,117', -'120,124,127,130,133,137,100,103,107,110,116,119,123,,129,132,136,106', -',114,,,,306,,,71,,2,,10,,,,,,,,,,,,,122,126,,,,99,,,,115,,,,,,,,,,111', -',,,,,135,139,102,105,109,113,118,121,125,128,131,134,138,101,104,108', -'112,117,120,124,127,130,133,137,100,103,107,110,116,119,123,,129,132', -'136,106,,114,,,,310,,,,,,,,,,,,,,,,,,,,122,126,,,,99,,,,115,,,,,,,,30', -',111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138,101,104', -'108,112,117,120,124,127,130,133,137,100,103,107,110,116,119,123,,129', -'132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99,,,,115,,,,,,,', -',,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138,101,104', -'108,112,117,120,124,127,130,133,137,100,103,107,110,116,119,123,,129', -'132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99,,,,115,,,,,,,', -',,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138,101,104', -'108,112,117,120,124,127,130,133,137,100,103,107,110,116,119,123,,129', -'132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99,,,,115,,,,,,,', -',,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138,101,104', -'108,112,117,120,124,127,130,133,137,100,103,107,110,116,119,123,,129', -'132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99,,,,115,,,,,,,', -',,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138,101,104', -'108,112,117,120,124,127,130,133,137,100,103,107,110,116,119,123,,129', -'132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99,,,,115,,,,,,,', -',,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138,101,104', -'108,112,117,120,124,127,130,133,137,100,103,107,110,116,119,123,,129', -'132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99,,,,115,,,,,,,', -',,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138,101,104', -'108,112,117,120,124,127,130,133,137,100,103,107,110,116,119,123,,129', -'132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99,,,,115,,,,,,,', -',,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138,101,104', -'108,112,117,120,124,127,130,133,137,100,103,107,110,116,119,123,,129', -'132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99,,,,115,,,,,,,', -',,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138,101,104', -'108,112,117,120,124,127,130,133,137,100,103,107,110,116,119,123,,129', -'132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99,,,,115,,,,,,,', -'30,,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138,101', -'104,108,112,117,120,124,127,130,133,137,100,103,107,110,116,119,123', -',129,132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99,,,,115,,', -',,,,,,,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138', -'101,104,108,112,117,120,124,127,130,133,137,100,103,107,110,116,119', -'254,,129,132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99,,,,115', -',,,,,,,,,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138', -'101,104,108,112,117,120,124,127,130,133,137,100,103,107,110,116,119', -'123,,129,132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99,,,,115', -',,,,,,,,,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138', -'101,104,108,112,117,120,124,127,130,133,137,100,103,107,110,116,119', -'123,,129,132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99,,,,115', -',,,,,,,248,,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134', -'138,101,104,108,112,117,120,124,127,130,133,137,100,103,107,110,116', -'119,123,,129,132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99,', -',,115,,,,,,,,,,111,,,,,,135,139,102,105,109,113,118,121,125,128,131', -'134,138,101,104,108,112,117,120,124,127,130,133,137,100,103,107,110', -'116,119,123,,129,132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126,,,', -'99,,,,115,,,,,,,,,,111,,,,,,135,139,102,105,109,113,118,121,125,128', -'131,134,138,101,104,108,112,117,120,124,127,130,133,137,100,103,107', -'110,116,119,123,,129,132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126', -',,,99,,,,115,,,,,,,,,,111,,,,,,135,139,102,105,109,113,118,121,125,128', -'131,134,138,101,104,108,112,117,120,124,127,130,133,137,100,103,107', -'110,116,119,123,,129,132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126', -',,,99,,,,115,,,,,,,,,,111,,,,,,135,139,102,105,109,113,118,121,125,128', -'131,134,138,101,104,108,112,117,120,124,127,130,133,137,100,103,107', -'110,116,119,123,,129,132,136,106,,114,,,,,,,,,,,,,,,,,,,,,,,,122,126', -',,,99,,,,115,,,,,,,,,,111,,,,,,135,139,102,105,109,113,118,121,125,128', -'131,134,138,101,104,108,112,117,120,124,127,130,133,137,100,103,107', -'110,116,119,123,,129,132,136,122,126,,,,,,,,115,,,,,,,,,,111,,,,,,135', -'139,102,105,109,113,118,121,125,128,131,134,138,101,104,108,112,117', -'120,124,127,130,133,137,100,103,107,110,116,119,123,,129,132,136,122', -'126,,,,,,,,115,,,,,,,,,,111,,,,,,135,139,102,105,109,113,118,121,125', -'128,131,134,138,101,104,108,112,117,120,124,127,130,133,137,100,103', -'107,110,116,119,123,122,126,,,,,,,,115,,,,,,,,,,111,,,,,,135,139,102', -'105,109,113,118,121,125,128,131,134,138,101,104,108,112,117,120,124', -'127,130,133,137,100,103,107,110,116,119,123,122,126,,,,,,,,115,,,,,', -',,,,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138,101', -'104,108,112,117,120,124,127,130,133,137,100,103,107,110,116,119,123', -'122,126,,,,,,,,115,,,,,,,,,,111,,,,,,135,139,102,105,109,113,118,121', -'125,128,131,134,138,101,104,108,112,117,120,124,127,130,133,137,100', -'103,107,110,116,119,123,122,126,,,,,,,,115,,,,,,,,,,111,,,,,,135,139', -'102,105,109,113,118,121,125,128,131,134,138,101,104,108,112,117,120', -'124,127,130,133,137,100,103,107,110,116,119,123,126,,,,,,,,115,,,,,', -',,,,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138,101', -'104,108,112,117,120,124,127,130,133,137,100,103,107,110,116,119,123', -'126,,,,,,,,115,,,,,,,,,,111,,,,,,135,139,102,105,109,113,118,121,125', -'128,131,134,138,101,104,108,112,117,120,124,127,130,133,137,100,103', -'107,110,116,119,123,126,,,,,,,,115,,,,,,,,,,111,,,,,,135,139,102,105', -'109,113,118,121,125,128,131,134,138,101,104,108,112,117,120,124,127', -'130,133,137,100,103,107,110,116,119,123,126,,,,,,,,115,,,,,,,,,,111', -',,,,,135,139,102,105,109,113,118,121,125,128,131,134,138,101,104,108', -'112,117,120,124,127,130,133,137,100,103,107,110,116,119,123,126,,,,', -',,,115,,,,,,,,,,111,,,,,,135,139,102,105,109,113,118,121,125,128,131', -'134,138,101,104,108,112,117,120,124,127,130,133,137,100,103,107,110', -'116,119,123,115,,,,,,,,,,111,,,,,,135,139,102,105,109,113,118,121,125', -'128,131,134,138,101,104,108,112,117,120,124,127,130,133,137,100,103', -'107,110,116,119,115,,,,,,,,,,111,,,,,,135,139,102,105,109,113,118,121', -'125,128,131,134,138,101,104,108,112,117,120,124,127,130,133,137,100', -'103,107,110,116,119,115,,,,,,,,,,111,,,,,,135,139,102,105,109,113,118', -'121,125,128,131,134,138,101,104,108,112,117,120,124,127,130,133,137', -'100,103,107,110,116,119,111,,,,,,135,139,102,105,109,113,118,121,125', -'128,131,134,138,101,104,108,112,117,120,124,127,130,133,137,100,103', -'107,110,116,119,111,,,,,,135,139,102,105,109,113,118,121,125,128,131', -'134,138,101,104,108,112,117,120,124,127,130,133,137,100,103,107,110', -'116,119,111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138', -'101,104,108,112,117,120,124,127,130,133,137,100,103,107,110,116,119', -'111,,,,,,135,139,102,105,109,113,118,121,125,128,131,134,138,101,104', -'108,112,117,120,124,127,130,133,137,100,103,107,110,116,119,111,,,,', -',135,139,102,105,109,113,118,121,125,128,131,134,138,101,104,108,112', -'117,120,124,127,130,133,137,100,103,107,110,116,119' ] - racc_action_table = arr = Array.new(9843, nil) +'10,,26,,,106,,114,20,24,27,32,36,40,46,50,55,61,,,,,,,,,,,,28,33,122', +'126,,,,99,,,,115,,,,15,,,26,,,111,71,,2,,10,136,139,102,105,109,113', +'118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134', +'137,100,103,107,110,116,119,123,127,130,133,106,,114,,,,71,310,2,,10', +',,,,,,,,,,,,,,,122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105', +'109,113,118,121,125,129,132,135,138,101,104,108,112,117,120,124,128', +'131,134,137,100,103,107,110,116,119,254,127,130,133,,,,,,,,274,20,24', +'27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,,63,,72,,3,6', +',15,,18,26,,,,,44,48,53,59,64,68,106,,114,,13,,,,,,,,,,,,,,,,,,,,,,122', +'126,,,,99,,51,56,115,,,71,,2,,10,,,111,,,,,,136,139,102,105,109,113', +'118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134', +'137,100,103,107,110,116,119,123,127,130,133,,,,,,,,306,20,24,27,32,36', +'40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,,,,,,,63,,72,,3,6,,15,,18,26', +',,,,44,48,53,59,64,68,106,,114,,13,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99', +',51,56,115,,,71,,2,,10,30,,111,,,,,,136,139,102,105,109,113,118,121', +'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100', +'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,', +'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121', +'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100', +'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,', +'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121', +'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100', +'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,', +'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121', +'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100', +'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,', +'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121', +'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100', +'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,', +'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121', +'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100', +'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,', +'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121', +'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100', +'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,', +'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121', +'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100', +'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,', +'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121', +'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100', +'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,', +'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121', +'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100', +'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,', +'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121', +'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100', +'103,107,110,116,119,254,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,', +'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121', +'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100', +'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,', +'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121', +'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100', +'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,', +'122,126,,,,99,,,,115,,,,,,,,248,,111,,,,,,136,139,102,105,109,113,118', +'121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137', +'100,103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,', +',,,,122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118', +'121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137', +'100,103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,', +',,,,122,126,,,,99,,,,115,,,,,,,,30,,111,,,,,,136,139,102,105,109,113', +'118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134', +'137,100,103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,', +',,,,,,,,122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113', +'118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134', +'137,100,103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,', +',,,,,,,,122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113', +'118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134', +'137,100,103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,', +',,,,,,,,122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113', +'118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134', +'137,100,103,107,110,116,119,123,127,130,133,122,126,,,,,,,,115,,,,,', +',,,,111,,,,,,136,139,102,105,109,113,118,121,125,129,132,135,138,101', +'104,108,112,117,120,124,128,131,134,137,100,103,107,110,116,119,123', +'127,130,133,122,126,,,,,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109', +'113,118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131', +'134,137,100,103,107,110,116,119,123,127,130,133,122,126,,,,,,,,115,', +',,,,,,,,111,,,,,,136,139,102,105,109,113,118,121,125,129,132,135,138', +'101,104,108,112,117,120,124,128,131,134,137,100,103,107,110,116,119', +'123,122,126,,,,,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118', +'121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137', +'100,103,107,110,116,119,123,122,126,,,,,,,,115,,,,,,,,,,111,,,,,,136', +'139,102,105,109,113,118,121,125,129,132,135,138,101,104,108,112,117', +'120,124,128,131,134,137,100,103,107,110,116,119,123,122,126,,,,,,,,115', +',,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121,125,129,132,135,138', +'101,104,108,112,117,120,124,128,131,134,137,100,103,107,110,116,119', +'123,126,,,,,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121', +'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100', +'103,107,110,116,119,123,126,,,,,,,,115,,,,,,,,,,111,,,,,,136,139,102', +'105,109,113,118,121,125,129,132,135,138,101,104,108,112,117,120,124', +'128,131,134,137,100,103,107,110,116,119,123,126,,,,,,,,115,,,,,,,,,', +'111,,,,,,136,139,102,105,109,113,118,121,125,129,132,135,138,101,104', +'108,112,117,120,124,128,131,134,137,100,103,107,110,116,119,123,126', +',,,,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121,125,129', +'132,135,138,101,104,108,112,117,120,124,128,131,134,137,100,103,107', +'110,116,119,123,126,,,,,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109', +'113,118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131', +'134,137,100,103,107,110,116,119,123,115,,,,,,,,,,111,,,,,,136,139,102', +'105,109,113,118,121,125,129,132,135,138,101,104,108,112,117,120,124', +'128,131,134,137,100,103,107,110,116,119,115,,,,,,,,,,111,,,,,,136,139', +'102,105,109,113,118,121,125,129,132,135,138,101,104,108,112,117,120', +'124,128,131,134,137,100,103,107,110,116,119,115,,,,,,,,,,111,,,,,,136', +'139,102,105,109,113,118,121,125,129,132,135,138,101,104,108,112,117', +'120,124,128,131,134,137,100,103,107,110,116,119,111,,,,,,136,139,102', +'105,109,113,118,121,125,129,132,135,138,101,104,108,112,117,120,124', +'128,131,134,137,100,103,107,110,116,119,111,,,,,,136,139,102,105,109', +'113,118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131', +'134,137,100,103,107,110,116,119,111,,,,,,136,139,102,105,109,113,118', +'121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137', +'100,103,107,110,116,119,111,,,,,,136,139,102,105,109,113,118,121,125', +'129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100,103', +'107,110,116,119,111,,,,,,136,139,102,105,109,113,118,121,125,129,132', +'135,138,101,104,108,112,117,120,124,128,131,134,137,100,103,107,110', +'116,119' ] + racc_action_table = arr = Array.new(9789, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -356,220 +356,219 @@ def on_error(error_token_id, error_value, value_stack) end clist = [ -'87,145,87,111,111,111,111,111,111,111,111,111,111,296,193,193,263,111', -'111,111,111,296,248,111,111,111,87,87,193,265,248,87,111,123,111,87', -'111,111,254,111,39,111,111,80,145,87,275,111,111,111,111,87,87,87,87', +'87,145,87,111,111,111,111,111,111,111,111,111,111,296,193,193,79,111', +'111,111,111,296,248,111,111,111,87,87,193,265,248,87,111,186,111,87', +'111,111,291,111,190,111,111,123,145,87,275,111,111,111,111,87,87,87', '87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87', -'87,87,87,87,291,87,87,87,111,111,243,243,243,111,79,111,100,111,87,100', -'100,100,100,100,100,100,100,100,100,277,83,83,83,100,100,100,100,275', -'275,100,100,100,100,278,278,94,152,100,100,35,100,291,100,100,176,100', -'151,100,100,173,174,277,176,100,100,100,100,100,100,277,197,149,277', -'100,216,184,197,197,42,180,216,216,216,216,216,216,216,143,243,94,94', -'176,243,244,244,244,70,70,70,84,84,84,100,100,174,174,174,100,83,100', -'302,100,83,302,302,302,302,302,302,302,302,302,302,180,180,180,21,302', -'302,302,302,180,141,302,302,302,302,140,176,176,246,302,302,169,302', -'175,302,302,159,302,185,302,302,175,159,159,186,302,302,302,302,302', -'302,161,294,259,190,302,91,161,161,244,97,259,70,244,14,84,70,38,38', -'84,175,38,246,246,246,169,169,169,6,169,246,41,41,41,302,302,34,34,75', -'302,259,302,3,302,218,3,3,3,3,3,3,3,3,3,3,303,41,272,272,3,3,3,3,1,76', -'3,3,3,3,2,29,29,76,3,3,122,3,2,3,3,163,3,,3,3,,163,163,,3,3,3,3,3,3', -'90,90,,89,3,41,76,,76,89,89,2,,2,41,232,98,98,41,301,301,232,232,232', -'232,232,232,232,232,232,232,217,217,3,3,,,,3,,3,125,3,,125,125,125,125', -'125,125,125,125,125,125,,,204,,125,125,125,125,204,204,125,125,125,125', -'78,78,78,,125,125,78,125,,125,125,200,125,,125,125,,200,200,,125,125', -'125,125,125,125,215,,,,125,,215,215,215,215,215,215,215,215,215,215', -'215,215,215,215,215,215,215,215,215,215,215,,,165,,,,125,125,165,165', -',125,,125,124,125,,124,124,124,124,124,124,124,124,124,124,,,166,,124', -'124,124,124,166,166,124,124,124,124,,,,,124,124,,124,,124,124,160,124', -',124,124,,160,160,,124,124,124,124,124,124,228,,,,124,,228,228,228,228', -'228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228', -',,,,,,124,124,,,,124,,124,9,124,,9,9,9,9,9,9,9,9,9,9,,,,,9,9,9,9,,,9', -'9,9,9,,,,,9,9,,9,,9,9,,9,,9,9,,,,,9,9,9,9,9,9,231,,,,9,,231,231,231', +'87,87,87,87,87,87,87,87,291,111,111,83,83,83,111,75,111,100,111,87,100', +'100,100,100,100,100,100,100,100,100,277,70,70,70,100,100,100,100,275', +'275,100,100,100,100,76,185,94,152,100,100,35,100,76,100,100,176,100', +'151,100,100,90,90,277,176,100,100,100,100,100,100,277,38,38,277,100', +'38,301,301,208,217,217,76,263,76,208,208,208,208,208,83,94,94,176,83', +'84,84,84,98,98,41,41,41,149,100,100,244,244,244,100,70,100,302,100,70', +'302,302,302,302,302,302,302,302,302,302,41,243,243,243,302,302,302,302', +'42,175,302,302,302,302,259,176,176,175,302,302,245,302,259,302,302,180', +'302,254,302,302,29,29,34,34,302,302,302,302,302,302,272,272,143,161', +'302,21,175,41,84,161,161,259,84,41,197,278,278,41,141,244,197,197,140', +'244,245,245,245,218,184,180,180,180,245,302,302,294,39,180,302,243,302', +'3,302,243,3,3,3,3,3,3,3,3,3,3,91,169,97,14,3,3,3,3,174,160,3,3,3,3,6', +'160,160,80,3,3,173,3,2,3,3,159,3,303,3,3,2,159,159,1,3,3,3,3,3,3,122', +',,,3,169,169,169,,169,,204,174,174,174,,230,204,204,2,,2,230,230,230', +'230,230,230,230,230,230,230,,3,3,,,,3,,3,126,3,,126,126,126,126,126', +'126,126,126,126,126,,,89,,126,126,126,126,89,89,126,126,126,126,78,78', +'78,,126,126,78,126,,126,126,200,126,,126,126,,200,200,,126,126,126,126', +'126,126,219,,,,126,,219,219,219,219,219,219,219,219,219,219,219,219', +'219,219,219,219,219,219,219,219,219,,,165,,,,126,126,165,165,,126,,126', +'125,126,,125,125,125,125,125,125,125,125,125,125,,,166,,125,125,125', +'125,166,166,125,125,125,125,,,,,125,125,,125,,125,125,163,125,,125,125', +',163,163,,125,125,125,125,125,125,215,,,,125,,215,215,215,215,215,215', +'215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,,,,,,,125', +'125,,,,125,,125,9,125,,9,9,9,9,9,9,9,9,9,9,,,,,9,9,9,9,,,9,9,9,9,,,', +',9,9,,9,,9,9,,9,,9,9,,,,,9,9,9,9,9,9,223,,,,9,,223,223,223,223,223,223', +'223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,,,,,,,9', +'9,,,,9,,9,10,9,,10,10,10,10,10,10,10,10,10,10,,,,,10,10,10,10,,,10,10', +'10,10,,,,,10,10,,10,,10,10,,10,,10,10,,,,,10,10,10,10,10,10,195,,,,10', +',195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195', +'195,195,195,195,,,,,,,10,10,,,,10,,10,124,10,,124,124,124,124,124,124', +'124,124,124,124,,,,,124,124,124,124,,,124,124,124,124,,,,,124,124,,124', +',124,124,,124,,124,124,,,,,124,124,124,124,124,124,231,,,,124,,231,231', '231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231', -'231,,,,,,,9,9,,,,9,,9,10,9,,10,10,10,10,10,10,10,10,10,10,,,,,10,10', -'10,10,,,10,10,10,10,,,,,10,10,,10,,10,10,,10,,10,10,,,,,10,10,10,10', -'10,10,219,,,,10,,219,219,219,219,219,219,219,219,219,219,219,219,219', -'219,219,219,219,219,219,219,219,,,,,,,10,10,,,,10,,10,127,10,,127,127', -'127,127,127,127,127,127,127,127,,,,,127,127,127,127,,,127,127,127,127', -',,,,127,127,,127,,127,127,,127,,127,127,,,,,127,127,127,127,127,127', -'222,,,,127,,222,222,222,222,222,222,222,222,222,222,222,222,222,222', -'222,222,222,222,222,222,222,,,,,,,127,127,,,,127,,127,13,127,,13,13', -'13,13,13,13,13,13,13,13,,,,,13,13,13,13,,,13,13,13,13,,,,,13,13,,13', -',13,13,,13,,13,13,,,,,13,13,13,13,13,13,225,,,,13,,225,225,225,225,225', -'225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,,,,', -',,13,13,,,,13,,13,128,13,,128,128,128,128,128,128,128,128,128,128,,', -',,128,128,128,128,,,128,128,128,128,,,,,128,128,,128,,128,128,,128,', -'128,128,,,,,128,128,128,128,128,128,195,,,,128,,195,195,195,195,195', -'195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,,,,', -',,128,128,,,,128,,128,284,128,,284,284,284,284,284,284,284,284,284,284', -',,,,284,284,284,284,,,284,284,284,284,,,,,284,284,,284,,284,284,,284', -',284,284,,,,,284,284,284,284,284,284,212,,,,284,,212,212,212,212,212', -'212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,,284', -',,,,284,284,,,,284,,284,22,284,,22,22,22,22,22,22,22,22,22,22,,,,,22', -'22,22,22,,,22,22,22,22,,,,,22,22,,22,,22,22,,22,,22,22,,,,,22,22,22', -'22,22,22,196,,,,22,,196,196,196,196,196,196,196,196,196,196,196,196', -'196,220,,,,,,220,220,220,220,220,220,220,,22,22,,,,22,,22,282,22,,282', -'282,282,282,282,282,282,282,282,282,,,,,282,282,282,282,,,282,282,282', -'282,,,,,282,282,,282,,282,282,,282,,282,282,,,,,282,282,282,282,282', -'282,199,,,,282,,199,199,199,199,199,199,199,199,199,199,199,199,199', -'223,,,,,,223,223,223,223,223,223,223,,282,282,,,,282,,282,30,282,,30', -'30,30,30,30,30,30,30,30,30,,,,,30,30,30,30,,,30,30,30,30,,,,,30,30,', -'30,,30,30,,30,,30,30,,30,,,30,30,30,30,30,30,203,,,,30,,203,203,203', -'203,203,203,203,203,203,203,203,203,203,208,,,,,,208,208,208,208,208', -',,,30,30,,,,30,,30,281,30,,281,281,281,281,281,281,281,281,281,281,', -',,,281,281,281,281,,,281,281,281,281,,,,,281,281,,281,,281,281,,281', -',281,281,,,,,281,281,281,281,281,281,207,,,,281,,207,207,207,207,207', -'207,207,207,207,207,207,207,207,213,,,,,,213,213,213,213,213,,,,281', -'281,,,,281,,281,276,281,,276,276,276,276,276,276,276,276,276,276,,,', -',276,276,276,276,,,276,276,276,276,,,,,276,276,,276,,276,276,,276,,276', -'276,,,,,276,276,276,276,276,276,229,,,,276,,229,229,229,229,229,229', -'229,229,229,229,226,,,,,,226,226,226,226,226,226,226,226,226,226,,276', -'276,,,,276,,276,271,276,,271,271,271,271,271,271,271,271,271,271,,,', -',271,271,271,271,,,271,271,271,271,,,,,271,271,,271,,271,271,,271,,271', -'271,,,,,271,271,271,271,271,271,,,,,271,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -'271,271,,,,271,,271,270,271,,270,270,270,270,270,270,270,270,270,270', -',,,,270,270,270,270,,,270,270,270,270,,,,,270,270,,270,,270,270,,270', -',270,270,,,,,270,270,270,270,270,270,,,,,270,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,270,270,,,,270,,270,251,270,,251,251,251,251,251,251,251,251,251', -'251,,,,,251,251,251,251,,,251,251,251,251,,,,,251,251,,251,,251,251', -',251,,251,251,251,,,,251,251,251,251,251,251,,,,,251,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,251,251,251,251,,251,,251,250,251,,250,250,250,250,250', -'250,250,250,250,250,,,,,250,250,250,250,,,250,250,250,250,,,,,250,250', -',250,,250,250,,250,,250,250,,,,,250,250,250,250,250,250,,,,,250,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,250,250,,,,250,,250,121,250,,121,121,121,121', -'121,121,121,121,121,121,,,,,121,121,121,121,,,121,121,121,121,,,,,121', -'121,,121,,121,121,,121,,121,121,,,,,121,121,121,121,121,121,,,,,121', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,121,121,,,,121,,121,44,121,,44,44,44,44', -'44,44,44,44,44,44,,,,,44,44,44,44,,,44,44,44,44,,,,,44,44,,44,,44,44', -',44,,44,44,,,,,44,44,44,44,44,44,,,,,44,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -'44,44,,,,44,,44,48,44,,48,48,48,48,48,48,48,48,48,48,,,,,48,48,48,48', -',,48,48,48,48,,,,,48,48,,48,,48,48,,48,,48,48,,,,,48,48,48,48,48,48', -',,,,48,,,,,,,,,,,,,,,,,,,,,,,,,,,,,48,48,,,,48,,48,53,48,,53,53,53,53', -'53,53,53,53,53,53,,,,,53,53,53,53,,,53,53,53,53,,,,,53,53,,53,,53,53', -',53,,53,53,,,,,53,53,53,53,53,53,,,,,53,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -'53,53,,,,53,,53,57,53,,57,57,57,57,57,57,57,57,57,57,,,,,57,57,57,57', -',,57,57,57,57,,,,,57,57,,57,,57,57,,57,,57,57,,,,,57,57,57,57,57,57', -',,,,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,57,57,,,,57,,57,59,57,,59,59,59,59', -'59,59,59,59,59,59,,,,,59,59,59,59,,,59,59,59,59,,,,,59,59,,59,,59,59', -',59,,59,59,,,,,59,59,59,59,59,59,,,,,59,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -'59,59,,,,59,,59,63,59,,63,63,63,63,63,63,63,63,63,63,,,,,63,63,63,63', -',,63,63,63,63,,,,,63,63,,63,,63,63,,63,,63,63,,,,,63,63,63,63,63,63', -',,,,63,,,,,,,,,,,,,,,,,,,,,,,,,,,,,63,63,,,,63,,63,64,63,,64,64,64,64', -'64,64,64,64,64,64,,,,,64,64,64,64,,,64,64,64,64,,,,,64,64,,64,,64,64', -',64,,64,64,,,,,64,64,64,64,64,64,,,,,64,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -'64,64,,,,64,,64,68,64,,68,68,68,68,68,68,68,68,68,68,,,,,68,68,68,68', -',,68,68,68,68,,,,,68,68,,68,,68,68,,68,,68,68,,,,,68,68,68,68,68,68', -',,,,68,,,,,,,,,,,,,,,,,,,,,,,,,,,,,68,68,,,,68,,68,192,68,,192,192,192', -'192,192,192,192,192,192,192,,,,,192,192,192,192,,,192,192,192,192,,', -',,192,192,,192,,192,192,,192,,192,192,,,,,192,192,192,192,192,192,,', -',,192,,,,,,,,,,,,,,,,,,,,,,,,,,,,,192,192,,,,192,,192,71,192,,71,71', -'71,71,71,71,71,71,71,71,,,,,71,71,71,71,,,71,71,71,71,,,,,71,71,,71', -',71,71,,71,,71,71,71,,,,71,71,71,71,71,71,,,,,71,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,71,71,,,,71,,71,72,71,,72,72,72,72,72,72,72,72,72,72,,,,,72', -'72,72,72,,,72,72,72,72,,,,,72,72,,72,,72,72,,72,,72,72,,,,,72,72,72', -'72,72,72,,,,,72,,,,,,,,,,,,,,,,,,,,,,,,,,,,,72,72,,,,72,,72,191,72,', -'191,191,191,191,191,191,191,191,191,191,,,,,191,191,191,191,,,191,191', -'191,191,,,,,191,191,,191,,191,191,,191,,191,191,,,,,191,191,191,191', -'191,191,,,,,191,,,,,,,,,,,,,,,,,,,,,,,,,,,,,191,191,,,,191,,191,179', -'191,,179,179,179,179,179,179,179,179,179,179,,,,,179,179,179,179,,,179', -'179,179,179,,,,,179,179,,179,,179,179,,179,,179,179,,,,,179,179,179', -'179,179,179,,,,,179,,,,,,,,,,,,,,,,,,,,,,,,,,,,,179,179,,,,179,,179', -'178,179,,178,178,178,178,178,178,178,178,178,178,,,,,178,178,178,178', -',,178,178,178,178,,,,,178,178,,178,,178,178,,178,,178,178,,,,,178,178', -'178,178,178,178,,,,,178,,,,,,,,,,,,,,,,,,,,,,,,,,,,,178,178,,,,178,', -'178,170,178,,170,170,170,170,170,170,170,170,170,170,,,,,170,170,170', -'170,,,170,170,170,170,,,,,170,170,,170,,170,170,,170,,170,170,,,,,170', -'170,170,170,170,170,,,,,170,,,,,,,,,,,,,,,,,,,,,,,,,,,,,170,170,,,,170', -',170,156,170,,156,156,156,156,156,156,156,156,156,156,,,,,156,156,156', -'156,,,156,156,156,156,,,,,156,156,,156,,156,156,,156,,156,156,156,,', -',156,156,156,156,156,156,,,,,156,,,,,,,,,,,,,,,,,,,,,,,,,,,,,156,156', -',,,156,,156,154,156,,154,154,154,154,154,154,154,154,154,154,,,,,154', -'154,154,154,,,154,154,154,154,,,,,154,154,,154,,154,154,,154,,154,154', -',,,,154,154,154,154,154,154,,,,,154,,,,,,,,,,,,,,,,,,,,,,,,,,,,,154', -'154,,,,154,,154,120,154,,120,120,120,120,120,120,120,120,120,120,,,', -',120,120,120,120,,,120,120,120,120,,,,,120,120,,120,,120,120,,120,,120', -'120,,,,,120,120,120,120,120,120,,,,,120,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -'120,120,,,,120,,120,150,120,,150,150,150,150,150,150,150,150,150,150', -',,,,150,150,150,150,,,150,150,150,150,,,,,150,150,,150,,150,150,,150', -',150,150,,,,,150,150,150,150,150,150,,,,,150,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,150,150,,,,150,,150,85,150,,85,85,85,85,85,85,85,85,85,85,,,,,85', -'85,85,85,,,85,85,85,85,,,,,85,85,,85,,85,85,,85,,85,85,85,,,,85,85,85', -'85,85,85,,,,,85,,,,,,,,,,,,,,,,,,,,,,,,,,,,,85,85,,,,85,,85,138,85,', -'138,138,138,138,138,138,138,138,138,138,,,,,138,138,138,138,,,138,138', -'138,138,,,,,138,138,,138,,138,138,,138,,138,138,,,,,138,138,138,138', -'138,138,,,,,138,,,,,,,,,,,,,,,,,,,,,,,,,,,,,138,138,,,,138,,138,0,138', -',0,0,0,0,0,0,0,0,0,0,,,,,0,0,0,0,,,0,0,0,0,,,,,0,0,,0,,0,0,,0,,0,0,0', -',,,0,0,0,0,0,0,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,,0,137,0', -',137,137,137,137,137,137,137,137,137,137,,,,,137,137,137,137,,,137,137', -'137,137,,,,,137,137,,137,,137,137,,137,,137,137,,,,,137,137,137,137', -'137,137,,,,,137,,,,,,,,,,,,,,,,,,,,,,,,,,,,,137,137,,,,137,,137,136', -'137,,136,136,136,136,136,136,136,136,136,136,,,,,136,136,136,136,,,136', -'136,136,136,,,,,136,136,,136,,136,136,,136,,136,136,,,,,136,136,136', -'136,136,136,,,,,136,,,,,,,,,,,,,,,,,,,,,,,,,,,,,136,136,,,,136,,136', -'134,136,,134,134,134,134,134,134,134,134,134,134,,,,,134,134,134,134', -',,134,134,134,134,,,,,134,134,,134,,134,134,,134,,134,134,,,,,134,134', -'134,134,134,134,,,,,134,,,,,,,,,,,,,,,,,,,,,,,,,,,,,134,134,,,,134,', -'134,133,134,,133,133,133,133,133,133,133,133,133,133,,,,,133,133,133', -'133,,,133,133,133,133,,,,,133,133,,133,,133,133,,133,,133,133,,,,,133', -'133,133,133,133,133,,,,,133,,,,,,,,,,,,,,,,,,,,,,,,,,,,,133,133,,,,133', -',133,132,133,,132,132,132,132,132,132,132,132,132,132,,,,,132,132,132', -'132,,,132,132,132,132,,,,,132,132,,132,,132,132,,132,,132,132,,,,,132', -'132,132,132,132,132,,,,,132,,,,,,,,,,,,,,,,,,,,,,,,,,,,,132,132,,,,132', -',132,93,132,,93,93,93,93,93,93,93,93,93,93,,,,,93,93,93,93,,,93,93,93', -'93,,,,,93,93,,93,,93,93,,93,,93,93,,,,,93,93,93,93,93,93,,,,,93,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,93,93,,,,93,,93,131,93,,131,131,131,131,131', -'131,131,131,131,131,,,,,131,131,131,131,,,131,131,131,131,,,,,131,131', -',131,,131,131,,131,,131,131,,,,,131,131,131,131,131,131,,,,,131,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,131,131,,,,131,,131,130,131,,130,130,130,130', -'130,130,130,130,130,130,,,,,130,130,130,130,,,130,130,130,130,,,,,130', -'130,,130,,130,130,,130,,130,130,,,,,130,130,130,130,130,130,,,,,130', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,130,130,,,,130,,130,129,130,,129,129,129', -'129,129,129,129,129,129,129,,,,,129,129,129,129,,,129,129,129,129,,', -',,129,129,,129,,129,129,,129,,129,129,,,,,129,129,129,129,129,129,,', -',,129,,,,,,,,,,,,,,,,,,,,,,,,,,,,,129,129,,,,129,,129,99,129,,99,99', -'99,99,99,99,99,99,99,99,,,,,99,99,99,99,,,99,99,99,99,,,,,99,99,,99', -',99,99,,99,,99,99,,,,,99,99,99,99,99,99,,,,,99,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,99,99,,,,99,,99,126,99,,126,126,126,126,126,126,126,126,126,126', -',,,,126,126,126,126,,,126,126,126,126,,,,,126,126,,126,,126,126,,126', -',126,126,,,,,126,126,126,126,126,126,,,,,126,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,126,126,,,,126,,126,101,126,,101,101,101,101,101,101,101,101,101', -'101,,,,,101,101,101,101,,,101,101,101,101,,,,,101,101,,101,,101,101', -',101,,101,101,,,,,101,101,101,101,101,101,,,,,101,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,101,101,,,,101,,101,102,101,,102,102,102,102,102,102,102,102', -'102,102,,,,,102,102,102,102,,,102,102,102,102,,,,,102,102,,102,,102', -'102,,102,,102,102,,,,,102,102,102,102,102,102,,,,,102,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,102,102,,,,102,,102,103,102,,103,103,103,103,103,103,103', -'103,103,103,,,,,103,103,103,103,,,103,103,103,103,,,,,103,103,,103,', -'103,103,,103,,103,103,,,,,103,103,103,103,103,103,,,,,103,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,103,103,,,,103,,103,104,103,,104,104,104,104,104,104', -'104,104,104,104,,,,,104,104,104,104,,,104,104,104,104,,,,,104,104,,104', -',104,104,,104,,104,104,,,,,104,104,104,104,104,104,,,,,104,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,104,104,,,,104,,104,105,104,,105,105,105,105,105', -'105,105,105,105,105,,,,,105,105,105,105,,,105,105,105,105,,,,,105,105', -',105,,105,105,,105,,105,105,,,,,105,105,105,105,105,105,,,,,105,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,105,105,,,,105,,105,118,105,,118,118,118,118', -'118,118,118,118,118,118,,,,,118,118,118,118,,,118,118,118,118,,,,,118', -'118,,118,,118,118,,118,,118,118,,,,,118,118,118,118,118,118,,,,,118', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,118,118,,,,118,,118,107,118,,107,107,107', -'107,107,107,107,107,107,107,,,,,107,107,107,107,,,107,107,107,107,,', -',,107,107,,107,,107,107,,107,,107,107,,,,,107,107,107,107,107,107,,', -',,107,,,,,,,,,,,,,,,,,,,,,,,,,,,,,107,107,,,,107,,107,108,107,,108,108', -'108,108,108,108,108,108,108,108,,,,,108,108,108,108,,,108,108,108,108', -',,,,108,108,,108,,108,108,,108,,108,108,,,,,108,108,108,108,108,108', -',,,,108,,,,,,,,,,,,,,,,,,,,,,,,,,,,,108,108,,,,108,,108,109,108,,109', -'109,109,109,109,109,109,109,109,109,,,,,109,109,109,109,,,109,109,109', -'109,,,,,109,109,,109,,109,109,,109,,109,109,,,,,109,109,109,109,109', -'109,,,,,109,,,,,,,,,,,,,,,,,,,,,,,,,,,,,109,109,,,,109,,109,110,109', -',110,110,110,110,110,110,110,110,110,110,,,,,110,110,110,110,,,110,110', -'110,110,,,,,110,110,,110,,110,110,,110,,110,110,,,,,110,110,110,110', -'110,110,,,,,110,,,,,,,,,,,,,,,,,,,,,,,,,,,,,110,110,,,,110,,110,119', -'110,,119,119,119,119,119,119,119,119,119,119,,,,,119,119,119,119,,,119', -'119,119,119,,,,,119,119,,119,,119,119,,119,,119,119,,,,,119,119,119', -'119,119,119,,,,,119,,,,,,,,,,,,,,,,,,,,,,,,,,,,,119,119,,,,119,,119', -'112,119,,112,112,112,112,112,112,112,112,112,112,,,,,112,112,112,112', -',,112,112,112,112,,,,,112,112,,112,,112,112,,112,,112,112,,,,,112,112', -'112,112,112,112,,,,,112,,,,,,,,,,,,,,,,,,,,,,,,,,,,,112,112,,,,112,', -'112,113,112,,113,113,113,113,113,113,113,113,113,113,,,,,113,113,113', +'231,231,,,,,,,124,124,,,,124,,124,13,124,,13,13,13,13,13,13,13,13,13', +'13,,,,,13,13,13,13,,,13,13,13,13,,,,,13,13,,13,,13,13,,13,,13,13,,,', +',13,13,13,13,13,13,229,,,,13,,229,229,229,229,229,229,229,229,229,229', +'229,229,229,229,229,229,229,229,229,229,229,,,,,,,13,13,,,,13,,13,128', +'13,,128,128,128,128,128,128,128,128,128,128,,,,,128,128,128,128,,,128', +'128,128,128,,,,,128,128,,128,,128,128,,128,,128,128,,,,,128,128,128', +'128,128,128,226,,,,128,,226,226,226,226,226,226,226,226,226,226,226', +'226,226,226,226,226,226,226,226,226,226,,,,,,,128,128,,,,128,,128,284', +'128,,284,284,284,284,284,284,284,284,284,284,,,,,284,284,284,284,,,284', +'284,284,284,,,,,284,284,,284,,284,284,,284,,284,284,,,,,284,284,284', +'284,284,284,212,,,,284,,212,212,212,212,212,212,212,212,212,212,212', +'212,212,212,212,212,212,212,212,212,212,,284,,,,,284,284,,,,284,,284', +'22,284,,22,22,22,22,22,22,22,22,22,22,,,,,22,22,22,22,,,22,22,22,22', +',,,,22,22,,22,,22,22,,22,,22,22,,,,,22,22,22,22,22,22,196,,,,22,,196', +'196,196,196,196,196,196,196,196,196,196,196,196,224,,,,,,224,224,224', +'224,224,224,224,,22,22,,,,22,,22,282,22,,282,282,282,282,282,282,282', +'282,282,282,,,,,282,282,282,282,,,282,282,282,282,,,,,282,282,,282,', +'282,282,,282,,282,282,,,,,282,282,282,282,282,282,207,,,,282,,207,207', +'207,207,207,207,207,207,207,207,207,207,207,220,,,,,,220,220,220,220', +'220,220,220,,282,282,,,,282,,282,30,282,,30,30,30,30,30,30,30,30,30', +'30,,,,,30,30,30,30,,,30,30,30,30,,,,,30,30,,30,,30,30,,30,,30,30,,30', +',,30,30,30,30,30,30,203,,,,30,,203,203,203,203,203,203,203,203,203,203', +'203,203,203,216,,,,,,216,216,216,216,216,216,216,,30,30,,,,30,,30,281', +'30,,281,281,281,281,281,281,281,281,281,281,,,,,281,281,281,281,,,281', +'281,281,281,,,,,281,281,,281,,281,281,,281,,281,281,,,,,281,281,281', +'281,281,281,199,,,,281,,199,199,199,199,199,199,199,199,199,199,199', +'199,199,213,,,,,,213,213,213,213,213,,,,281,281,,,,281,,281,276,281', +',276,276,276,276,276,276,276,276,276,276,,,,,276,276,276,276,,,276,276', +'276,276,,,,,276,276,,276,,276,276,,276,,276,276,,,,,276,276,276,276', +'276,276,232,,,,276,,232,232,232,232,232,232,232,232,232,232,227,,,,', +',227,227,227,227,227,227,227,227,227,227,,276,276,,,,276,,276,271,276', +',271,271,271,271,271,271,271,271,271,271,,,,,271,271,271,271,,,271,271', +'271,271,,,,,271,271,,271,,271,271,,271,,271,271,,,,,271,271,271,271', +'271,271,,,,,271,,,,,,,,,,,,,,,,,,,,,,,,,,,,,271,271,,,,271,,271,270', +'271,,270,270,270,270,270,270,270,270,270,270,,,,,270,270,270,270,,,270', +'270,270,270,,,,,270,270,,270,,270,270,,270,,270,270,,,,,270,270,270', +'270,270,270,,,,,270,,,,,,,,,,,,,,,,,,,,,,,,,,,,,270,270,,,,270,,270', +'251,270,,251,251,251,251,251,251,251,251,251,251,,,,,251,251,251,251', +',,251,251,251,251,,,,,251,251,,251,,251,251,,251,,251,251,251,,,,251', +'251,251,251,251,251,,,,,251,,,,,,,,,,,,,,,,,,,,,,,,,,,,,251,251,251', +'251,,251,,251,250,251,,250,250,250,250,250,250,250,250,250,250,,,,,250', +'250,250,250,,,250,250,250,250,,,,,250,250,,250,,250,250,,250,,250,250', +',,,,250,250,250,250,250,250,,,,,250,,,,,,,,,,,,,,,,,,,,,,,,,,,,,250', +'250,,,,250,,250,129,250,,129,129,129,129,129,129,129,129,129,129,,,', +',129,129,129,129,,,129,129,129,129,,,,,129,129,,129,,129,129,,129,,129', +'129,,,,,129,129,129,129,129,129,,,,,129,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +'129,129,,,,129,,129,44,129,,44,44,44,44,44,44,44,44,44,44,,,,,44,44', +'44,44,,,44,44,44,44,,,,,44,44,,44,,44,44,,44,,44,44,,,,,44,44,44,44', +'44,44,,,,,44,,,,,,,,,,,,,,,,,,,,,,,,,,,,,44,44,,,,44,,44,48,44,,48,48', +'48,48,48,48,48,48,48,48,,,,,48,48,48,48,,,48,48,48,48,,,,,48,48,,48', +',48,48,,48,,48,48,,,,,48,48,48,48,48,48,,,,,48,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,48,48,,,,48,,48,53,48,,53,53,53,53,53,53,53,53,53,53,,,,,53,53', +'53,53,,,53,53,53,53,,,,,53,53,,53,,53,53,,53,,53,53,,,,,53,53,53,53', +'53,53,,,,,53,,,,,,,,,,,,,,,,,,,,,,,,,,,,,53,53,,,,53,,53,57,53,,57,57', +'57,57,57,57,57,57,57,57,,,,,57,57,57,57,,,57,57,57,57,,,,,57,57,,57', +',57,57,,57,,57,57,,,,,57,57,57,57,57,57,,,,,57,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,57,57,,,,57,,57,59,57,,59,59,59,59,59,59,59,59,59,59,,,,,59,59', +'59,59,,,59,59,59,59,,,,,59,59,,59,,59,59,,59,,59,59,,,,,59,59,59,59', +'59,59,,,,,59,,,,,,,,,,,,,,,,,,,,,,,,,,,,,59,59,,,,59,,59,63,59,,63,63', +'63,63,63,63,63,63,63,63,,,,,63,63,63,63,,,63,63,63,63,,,,,63,63,,63', +',63,63,,63,,63,63,,,,,63,63,63,63,63,63,,,,,63,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,63,63,,,,63,,63,64,63,,64,64,64,64,64,64,64,64,64,64,,,,,64,64', +'64,64,,,64,64,64,64,,,,,64,64,,64,,64,64,,64,,64,64,,,,,64,64,64,64', +'64,64,,,,,64,,,,,,,,,,,,,,,,,,,,,,,,,,,,,64,64,,,,64,,64,68,64,,68,68', +'68,68,68,68,68,68,68,68,,,,,68,68,68,68,,,68,68,68,68,,,,,68,68,,68', +',68,68,,68,,68,68,,,,,68,68,68,68,68,68,,,,,68,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,68,68,,,,68,,68,192,68,,192,192,192,192,192,192,192,192,192,192', +',,,,192,192,192,192,,,192,192,192,192,,,,,192,192,,192,,192,192,,192', +',192,192,,,,,192,192,192,192,192,192,,,,,192,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,192,192,,,,192,,192,71,192,,71,71,71,71,71,71,71,71,71,71,,,,,71', +'71,71,71,,,71,71,71,71,,,,,71,71,,71,,71,71,,71,,71,71,71,,,,71,71,71', +'71,71,71,,,,,71,,,,,,,,,,,,,,,,,,,,,,,,,,,,,71,71,,,,71,,71,72,71,,72', +'72,72,72,72,72,72,72,72,72,,,,,72,72,72,72,,,72,72,72,72,,,,,72,72,', +'72,,72,72,,72,,72,72,,,,,72,72,72,72,72,72,,,,,72,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,72,72,,,,72,,72,191,72,,191,191,191,191,191,191,191,191,191', +'191,,,,,191,191,191,191,,,191,191,191,191,,,,,191,191,,191,,191,191', +',191,,191,191,,,,,191,191,191,191,191,191,,,,,191,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,191,191,,,,191,,191,179,191,,179,179,179,179,179,179,179,179', +'179,179,,,,,179,179,179,179,,,179,179,179,179,,,,,179,179,,179,,179', +'179,,179,,179,179,,,,,179,179,179,179,179,179,,,,,179,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,179,179,,,,179,,179,178,179,,178,178,178,178,178,178,178', +'178,178,178,,,,,178,178,178,178,,,178,178,178,178,,,,,178,178,,178,', +'178,178,,178,,178,178,,,,,178,178,178,178,178,178,,,,,178,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,178,178,,,,178,,178,121,178,,121,121,121,121,121,121', +'121,121,121,121,,,,,121,121,121,121,,,121,121,121,121,,,,,121,121,,121', +',121,121,,121,,121,121,,,,,121,121,121,121,121,121,,,,,121,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,121,121,,,,121,,121,170,121,,170,170,170,170,170', +'170,170,170,170,170,,,,,170,170,170,170,,,170,170,170,170,,,,,170,170', +',170,,170,170,,170,,170,170,,,,,170,170,170,170,170,170,,,,,170,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,170,170,,,,170,,170,157,170,,157,157,157,157', +'157,157,157,157,157,157,,,,,157,157,157,157,,,157,157,157,157,,,,,157', +'157,,157,,157,157,,157,,157,157,,,,,157,157,157,157,157,157,,,,,157', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,157,157,,,,157,,157,155,157,,155,155,155', +'155,155,155,155,155,155,155,,,,,155,155,155,155,,,155,155,155,155,,', +',,155,155,,155,,155,155,,155,,155,155,155,,,,155,155,155,155,155,155', +',,,,155,,,,,,,,,,,,,,,,,,,,,,,,,,,,,155,155,,,,155,,155,120,155,,120', +'120,120,120,120,120,120,120,120,120,,,,,120,120,120,120,,,120,120,120', +'120,,,,,120,120,,120,,120,120,,120,,120,120,,,,,120,120,120,120,120', +'120,,,,,120,,,,,,,,,,,,,,,,,,,,,,,,,,,,,120,120,,,,120,,120,85,120,', +'85,85,85,85,85,85,85,85,85,85,,,,,85,85,85,85,,,85,85,85,85,,,,,85,85', +',85,,85,85,,85,,85,85,85,,,,85,85,85,85,85,85,,,,,85,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,85,85,,,,85,,85,150,85,,150,150,150,150,150,150,150,150', +'150,150,,,,,150,150,150,150,,,150,150,150,150,,,,,150,150,,150,,150', +'150,,150,,150,150,,,,,150,150,150,150,150,150,,,,,150,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,150,150,,,,150,,150,0,150,,0,0,0,0,0,0,0,0,0,0,,,,,0,0', +'0,0,,,0,0,0,0,,,,,0,0,,0,,0,0,,0,,0,0,0,,,,0,0,0,0,0,0,,,,,0,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,,0,138,0,,138,138,138,138,138,138,138', +'138,138,138,,,,,138,138,138,138,,,138,138,138,138,,,,,138,138,,138,', +'138,138,,138,,138,138,,,,,138,138,138,138,138,138,,,,,138,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,138,138,,,,138,,138,137,138,,137,137,137,137,137,137', +'137,137,137,137,,,,,137,137,137,137,,,137,137,137,137,,,,,137,137,,137', +',137,137,,137,,137,137,,,,,137,137,137,137,137,137,,,,,137,,,,,,,,,', +',,,,,,,,,,,,,,,,,,,137,137,,,,137,,137,135,137,,135,135,135,135,135', +'135,135,135,135,135,,,,,135,135,135,135,,,135,135,135,135,,,,,135,135', +',135,,135,135,,135,,135,135,,,,,135,135,135,135,135,135,,,,,135,,,,', +',,,,,,,,,,,,,,,,,,,,,,,,135,135,,,,135,,135,134,135,,134,134,134,134', +'134,134,134,134,134,134,,,,,134,134,134,134,,,134,134,134,134,,,,,134', +'134,,134,,134,134,,134,,134,134,,,,,134,134,134,134,134,134,,,,,134', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,134,134,,,,134,,134,133,134,,133,133,133', +'133,133,133,133,133,133,133,,,,,133,133,133,133,,,133,133,133,133,,', +',,133,133,,133,,133,133,,133,,133,133,,,,,133,133,133,133,133,133,,', +',,133,,,,,,,,,,,,,,,,,,,,,,,,,,,,,133,133,,,,133,,133,93,133,,93,93', +'93,93,93,93,93,93,93,93,,,,,93,93,93,93,,,93,93,93,93,,,,,93,93,,93', +',93,93,,93,,93,93,,,,,93,93,93,93,93,93,,,,,93,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,93,93,,,,93,,93,132,93,,132,132,132,132,132,132,132,132,132,132', +',,,,132,132,132,132,,,132,132,132,132,,,,,132,132,,132,,132,132,,132', +',132,132,,,,,132,132,132,132,132,132,,,,,132,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,132,132,,,,132,,132,131,132,,131,131,131,131,131,131,131,131,131', +'131,,,,,131,131,131,131,,,131,131,131,131,,,,,131,131,,131,,131,131', +',131,,131,131,,,,,131,131,131,131,131,131,,,,,131,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,131,131,,,,131,,131,130,131,,130,130,130,130,130,130,130,130', +'130,130,,,,,130,130,130,130,,,130,130,130,130,,,,,130,130,,130,,130', +'130,,130,,130,130,,,,,130,130,130,130,130,130,,,,,130,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,130,130,,,,130,,130,99,130,,99,99,99,99,99,99,99,99,99', +'99,,,,,99,99,99,99,,,99,99,99,99,,,,,99,99,,99,,99,99,,99,,99,99,,,', +',99,99,99,99,99,99,,,,,99,,,,,,,,,,,,,,,,,,,,,,,,,,,,,99,99,,,,99,,99', +'127,99,,127,127,127,127,127,127,127,127,127,127,,,,,127,127,127,127', +',,127,127,127,127,,,,,127,127,,127,,127,127,,127,,127,127,,,,,127,127', +'127,127,127,127,,,,,127,,,,,,,,,,,,,,,,,,,,,,,,,,,,,127,127,,,,127,', +'127,101,127,,101,101,101,101,101,101,101,101,101,101,,,,,101,101,101', +'101,,,101,101,101,101,,,,,101,101,,101,,101,101,,101,,101,101,,,,,101', +'101,101,101,101,101,,,,,101,,,,,,,,,,,,,,,,,,,,,,,,,,,,,101,101,,,,101', +',101,102,101,,102,102,102,102,102,102,102,102,102,102,,,,,102,102,102', +'102,,,102,102,102,102,,,,,102,102,,102,,102,102,,102,,102,102,,,,,102', +'102,102,102,102,102,,,,,102,,,,,,,,,,,,,,,,,,,,,,,,,,,,,102,102,,,,102', +',102,103,102,,103,103,103,103,103,103,103,103,103,103,,,,,103,103,103', +'103,,,103,103,103,103,,,,,103,103,,103,,103,103,,103,,103,103,,,,,103', +'103,103,103,103,103,,,,,103,,,,,,,,,,,,,,,,,,,,,,,,,,,,,103,103,,,,103', +',103,104,103,,104,104,104,104,104,104,104,104,104,104,,,,,104,104,104', +'104,,,104,104,104,104,,,,,104,104,,104,,104,104,,104,,104,104,,,,,104', +'104,104,104,104,104,,,,,104,,,,,,,,,,,,,,,,,,,,,,,,,,,,,104,104,,,,104', +',104,105,104,,105,105,105,105,105,105,105,105,105,105,,,,,105,105,105', +'105,,,105,105,105,105,,,,,105,105,,105,,105,105,,105,,105,105,,,,,105', +'105,105,105,105,105,,,,,105,,,,,,,,,,,,,,,,,,,,,,,,,,,,,105,105,,,,105', +',105,106,105,,106,106,106,106,106,106,106,106,106,106,,,,,106,106,106', +'106,,,106,106,106,106,,,,,106,106,,106,,106,106,,106,,106,106,,,,,106', +'106,106,106,106,106,,,,,106,,,,,,,,,,,,,,,,,,,,,,,,,,,,,106,106,,,,106', +',106,118,106,,118,118,118,118,118,118,118,118,118,118,,,,,118,118,118', +'118,,,118,118,118,118,,,,,118,118,,118,,118,118,,118,,118,118,,,,,118', +'118,118,118,118,118,,,,,118,,,,,,,,,,,,,,,,,,,,,,,,,,,,,118,118,,,,118', +',118,108,118,,108,108,108,108,108,108,108,108,108,108,,,,,108,108,108', +'108,,,108,108,108,108,,,,,108,108,,108,,108,108,,108,,108,108,,,,,108', +'108,108,108,108,108,,,,,108,,,,,,,,,,,,,,,,,,,,,,,,,,,,,108,108,,,,108', +',108,109,108,,109,109,109,109,109,109,109,109,109,109,,,,,109,109,109', +'109,,,109,109,109,109,,,,,109,109,,109,,109,109,,109,,109,109,,,,,109', +'109,109,109,109,109,,,,,109,,,,,,,,,,,,,,,,,,,,,,,,,,,,,109,109,,,,109', +',109,110,109,,110,110,110,110,110,110,110,110,110,110,,,,,110,110,110', +'110,,,110,110,110,110,,,,,110,110,,110,,110,110,,110,,110,110,,,,,110', +'110,110,110,110,110,,,,,110,,,,,,,,,,,,,,,,,,,,,,,,,,,,,110,110,,,,110', +',110,119,110,,119,119,119,119,119,119,119,119,119,119,,,,,119,119,119', +'119,,,119,119,119,119,,,,,119,119,,119,,119,119,,119,,119,119,,,,,119', +'119,119,119,119,119,,,,,119,,,,,,,,,,,,,,,,,,,,,,,,,,,,,119,119,,,,119', +',119,112,119,,112,112,112,112,112,112,112,112,112,112,,,,,112,112,112', +'112,,,112,112,112,112,,,,,112,112,,112,,112,112,,112,,112,112,,,,,112', +'112,112,112,112,112,,,,,112,,,,,,,,,,,,,,,,,,,,,,,,,,,,,112,112,,,,112', +',112,113,112,,113,113,113,113,113,113,113,113,113,113,,,,,113,113,113', '113,,,113,113,113,113,,,,,113,113,,113,,113,113,,113,,113,113,,,,,113', '113,113,113,113,113,,,,,113,,,,,,,,,,,,,,,,,,,,,,,,,,,,,113,113,,,,113', ',113,114,113,,114,114,114,114,114,114,114,114,114,114,,,,,114,114,114', @@ -584,122 +583,121 @@ def on_error(error_token_id, error_value, value_stack) ',116,117,116,,117,117,117,117,117,117,117,117,117,117,,,,,117,117,117', '117,,,117,117,117,117,,,,,117,117,,117,,117,117,,117,,117,117,,,,,117', '117,117,117,117,117,,,,,117,,,,,,,,,,,,,,,,,,,,,,,,,,,,,117,117,,,,117', -',117,106,117,,106,106,106,106,106,106,106,106,106,106,,,,,106,106,106', -'106,,,106,106,106,106,,,,,106,106,,106,,106,106,,106,,106,106,,,,,106', -'106,106,106,106,106,,,,,106,153,153,153,153,153,153,153,153,153,153', -',,,,,,,,,,,153,153,,,,,,106,106,,,,106,,106,153,106,,153,,,240,,240', -',,,,,,,,,,,,,,,,,,,,,,,240,240,,,,240,,,,240,,,,,,,,,,240,153,,153,', -'153,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240', -'240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,,240,240', -'240,,,,,,,240,299,299,299,299,299,299,299,299,299,299,,,,,299,299,299', -'299,,,299,299,299,,,,,,,299,,299,,299,299,,299,,299,299,,,,,299,299', -'299,299,299,299,,,,,299,,,,,,,,,,,,,,,,,,,,,,,,,,,,,299,299,,,,299,', -'299,,299,11,11,11,11,11,11,11,11,11,11,,,,,11,11,11,11,,,11,11,11,11', -',,,,,11,,11,,11,11,,11,,11,11,,,,,11,11,11,11,11,11,300,,300,,11,,,5', -'5,5,5,5,5,5,5,5,5,,,,,,,,,,300,300,5,5,,300,,11,11,300,,,11,,11,,11', -'5,,300,5,,,,,300,300,300,300,300,300,300,300,300,300,300,300,300,300', -'300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300', -',300,300,300,305,,305,,,,300,,,5,,5,,5,,,,,,,,,,,,,305,305,,,,305,,', -',305,,,,,,,,,,305,,,,,,305,305,305,305,305,305,305,305,305,305,305,305', +',117,107,117,,107,107,107,107,107,107,107,107,107,107,,,,,107,107,107', +'107,,,107,107,107,107,,,,,107,107,,107,,107,107,,107,,107,107,,,,,107', +'107,107,107,107,107,,,,,107,153,153,153,153,153,153,153,153,153,153', +',,,,,,,,,,,153,153,,,,,,107,107,,,,107,,107,153,107,,153,,,305,,305', +'5,5,5,5,5,5,5,5,5,5,,,,,,,,,,,,5,5,305,305,,,,305,,,,305,,,,5,,,5,,', +'305,153,,153,,153,305,305,305,305,305,305,305,305,305,305,305,305,305', '305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305', -'305,305,,305,305,305,162,,162,,,,305,,,,,,,,,,,,,,,,,,,,162,162,,,,162', -',,,162,,,,,,,,162,,162,,,,,,162,162,162,162,162,162,162,162,162,162', +'305,305,305,305,240,,240,,,,5,305,5,,5,,,,,,,,,,,,,,,,240,240,,,,240', +',,,240,,,,,,,,,,240,,,,,,240,240,240,240,240,240,240,240,240,240,240', +'240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240', +'240,240,240,240,240,240,,,,,,,,240,11,11,11,11,11,11,11,11,11,11,,,', +',11,11,11,11,,,11,11,11,11,,,,,,11,,11,,11,11,,11,,11,11,,,,,11,11,11', +'11,11,11,300,,300,,11,,,,,,,,,,,,,,,,,,,,,,300,300,,,,300,,11,11,300', +',,11,,11,,11,,,300,,,,,,300,300,300,300,300,300,300,300,300,300,300', +'300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300', +'300,300,300,300,300,300,,,,,,,,300,299,299,299,299,299,299,299,299,299', +'299,,,,,299,299,299,299,,,299,299,299,,,,,,,299,,299,,299,299,,299,', +'299,299,,,,,299,299,299,299,299,299,162,,162,,299,,,,,,,,,,,,,,,,,,', +',,,162,162,,,,162,,299,299,162,,,299,,299,,299,162,,162,,,,,,162,162', '162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162', -'162,162,162,162,,162,162,162,308,,308,,,,,,,,,,,,,,,,,,,,,,,,308,308', -',,,308,,,,308,,,,,,,,,,308,,,,,,308,308,308,308,308,308,308,308,308', +'162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,308,,308', +',,,,,,,,,,,,,,,,,,,,,,,308,308,,,,308,,,,308,,,,,,,,,,308,,,,,,308,308', '308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308', -'308,308,308,308,308,,308,308,308,209,,209,,,,,,,,,,,,,,,,,,,,,,,,209', -'209,,,,209,,,,209,,,,,,,,,,209,,,,,,209,209,209,209,209,209,209,209', -'209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209', -'209,209,209,209,209,209,,209,209,209,298,,298,,,,,,,,,,,,,,,,,,,,,,', -',298,298,,,,298,,,,298,,,,,,,,,,298,,,,,,298,298,298,298,298,298,298', +'308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,201,,201', +',,,,,,,,,,,,,,,,,,,,,,,201,201,,,,201,,,,201,,,,,,,,,,201,,,,,,201,201', +'201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201', +'201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,298,,298', +',,,,,,,,,,,,,,,,,,,,,,,298,298,,,,298,,,,298,,,,,,,,,,298,,,,,,298,298', '298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298', -'298,298,298,298,298,298,298,,298,298,298,194,,194,,,,,,,,,,,,,,,,,,', -',,,,,194,194,,,,194,,,,194,,,,,,,,,,194,,,,,,194,194,194,194,194,194', +'298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,194,,194', +',,,,,,,,,,,,,,,,,,,,,,,194,194,,,,194,,,,194,,,,,,,,,,194,,,,,,194,194', '194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194', -'194,194,194,194,194,194,194,194,,194,194,194,188,,188,,,,,,,,,,,,,,', -',,,,,,,,,188,188,,,,188,,,,188,,,,,,,,,,188,,,,,,188,188,188,188,188', +'194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,188,,188', +',,,,,,,,,,,,,,,,,,,,,,,188,188,,,,188,,,,188,,,,,,,,,,188,,,,,,188,188', '188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188', -'188,188,188,188,188,188,188,188,188,,188,188,188,297,,297,,,,,,,,,,', -',,,,,,,,,,,,,297,297,,,,297,,,,297,,,,,,,,,,297,,,,,,297,297,297,297', +'188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,297,,297', +',,,,,,,,,,,,,,,,,,,,,,,297,297,,,,297,,,,297,,,,,,,,,,297,,,,,,297,297', '297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297', -'297,297,297,297,297,297,297,297,297,297,,297,297,297,292,,292,,,,,,', -',,,,,,,,,,,,,,,,,292,292,,,,292,,,,292,,,,,,,,,,292,,,,,,292,292,292', +'297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,292,,292', +',,,,,,,,,,,,,,,,,,,,,,,292,292,,,,292,,,,292,,,,,,,,,,292,,,,,,292,292', '292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292', -'292,292,292,292,292,292,292,292,292,292,292,,292,292,292,181,,181,,', -',,,,,,,,,,,,,,,,,,,,,181,181,,,,181,,,,181,,,,,,,,,,181,,,,,,181,181', +'292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,181,,181', +',,,,,,,,,,,,,,,,,,,,,,,181,181,,,,181,,,,181,,,,,,,,,,181,,,,,,181,181', '181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181', -'181,181,181,181,181,181,181,181,181,181,181,181,,181,181,181,86,,86', -',,,,,,,,,,,,,,,,,,,,,,,86,86,,,,86,,,,86,,,,,,,,86,,86,,,,,,86,86,86', -'86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86', -'86,86,86,86,86,,86,86,86,171,,171,,,,,,,,,,,,,,,,,,,,,,,,171,171,,,', -'171,,,,171,,,,,,,,,,171,,,,,,171,171,171,171,171,171,171,171,171,171', +'181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,37,,37,', +',,,,,,,,,,,,,,,,,,,,,,37,37,,,,37,,,,37,,,,,,,,,,37,,,,,,37,37,37,37', +'37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37', +'37,37,37,37,37,37,37,171,,171,,,,,,,,,,,,,,,,,,,,,,,,171,171,,,,171', +',,,171,,,,,,,,,,171,,,,,,171,171,171,171,171,171,171,171,171,171,171', '171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171', -'171,171,171,171,,171,171,171,253,,253,,,,,,,,,,,,,,,,,,,,,,,,253,253', -',,,253,,,,253,,,,,,,,,,253,,,,,,253,253,253,253,253,253,253,253,253', +'171,171,171,171,171,171,253,,253,,,,,,,,,,,,,,,,,,,,,,,,253,253,,,,253', +',,,253,,,,,,,,,,253,,,,,,253,253,253,253,253,253,253,253,253,253,253', '253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253', -'253,253,253,253,253,,253,253,253,283,,283,,,,,,,,,,,,,,,,,,,,,,,,283', -'283,,,,283,,,,283,,,,,,,,,,283,,,,,,283,283,283,283,283,283,283,283', +'253,253,253,253,253,253,283,,283,,,,,,,,,,,,,,,,,,,,,,,,283,283,,,,283', +',,,283,,,,,,,,,,283,,,,,,283,283,283,283,283,283,283,283,283,283,283', '283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283', -'283,283,283,283,283,283,,283,283,283,164,,164,,,,,,,,,,,,,,,,,,,,,,', -',164,164,,,,164,,,,164,,,,,,,,164,,164,,,,,,164,164,164,164,164,164', +'283,283,283,283,283,283,164,,164,,,,,,,,,,,,,,,,,,,,,,,,164,164,,,,164', +',,,164,,,,,,,,164,,164,,,,,,164,164,164,164,164,164,164,164,164,164', '164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164', -'164,164,164,164,164,164,164,164,,164,164,164,280,,280,,,,,,,,,,,,,,', -',,,,,,,,,280,280,,,,280,,,,280,,,,,,,,,,280,,,,,,280,280,280,280,280', +'164,164,164,164,164,164,164,280,,280,,,,,,,,,,,,,,,,,,,,,,,,280,280', +',,,280,,,,280,,,,,,,,,,280,,,,,,280,280,280,280,280,280,280,280,280', '280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280', -'280,280,280,280,280,280,280,280,280,,280,280,280,37,,37,,,,,,,,,,,,', -',,,,,,,,,,,37,37,,,,37,,,,37,,,,,,,,,,37,,,,,,37,37,37,37,37,37,37,37', -'37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37', -',37,37,37,260,,260,,,,,,,,,,,,,,,,,,,,,,,,260,260,,,,260,,,,260,,,,', -',,,,,260,,,,,,260,260,260,260,260,260,260,260,260,260,260,260,260,260', +'280,280,280,280,280,280,280,280,86,,86,,,,,,,,,,,,,,,,,,,,,,,,86,86', +',,,86,,,,86,,,,,,,,86,,86,,,,,,86,86,86,86,86,86,86,86,86,86,86,86,86', +'86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,260,', +'260,,,,,,,,,,,,,,,,,,,,,,,,260,260,,,,260,,,,260,,,,,,,,,,260,,,,,,260', '260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260', -',260,260,260,261,,261,,,,,,,,,,,,,,,,,,,,,,,,261,261,,,,261,,,,261,', -',,,,,,,,261,,,,,,261,261,261,261,261,261,261,261,261,261,261,261,261', +'260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,261', +',261,,,,,,,,,,,,,,,,,,,,,,,,261,261,,,,261,,,,261,,,,,,,,,,261,,,,,', '261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261', -'261,,261,261,261,201,,201,,,,,,,,,,,,,,,,,,,,,,,,201,201,,,,201,,,,201', -',,,,,,,,,201,,,,,,201,201,201,201,201,201,201,201,201,201,201,201,201', -'201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201', -'201,,201,201,201,88,88,,,,,,,,88,,,,,,,,,,88,,,,,,88,88,88,88,88,88', -'88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88', -'88,88,,88,88,88,92,92,,,,,,,,92,,,,,,,,,,92,,,,,,92,92,92,92,92,92,92', +'261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261', +'209,,209,,,,,,,,,,,,,,,,,,,,,,,,209,209,,,,209,,,,209,,,,,,,,,,209,', +',,,,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209', +'209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209', +'209,246,246,,,,,,,,246,,,,,,,,,,246,,,,,,246,246,246,246,246,246,246', +'246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246', +'246,246,246,246,246,246,246,246,246,246,88,88,,,,,,,,88,,,,,,,,,,88', +',,,,,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88', +'88,88,88,88,88,88,88,88,88,88,88,88,88,225,225,,,,,,,,225,,,,,,,,,,225', +',,,,,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225', +'225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,228,228', +',,,,,,,228,,,,,,,,,,228,,,,,,228,228,228,228,228,228,228,228,228,228', +'228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228', +'228,228,228,228,92,92,,,,,,,,92,,,,,,,,,,92,,,,,,92,92,92,92,92,92,92', '92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92', -'92,227,227,,,,,,,,227,,,,,,,,,,227,,,,,,227,227,227,227,227,227,227', -'227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227', -'227,227,227,227,227,227,227,245,245,,,,,,,,245,,,,,,,,,,245,,,,,,245', -'245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245', -'245,245,245,245,245,245,245,245,245,245,245,245,245,230,230,,,,,,,,230', -',,,,,,,,,230,,,,,,230,230,230,230,230,230,230,230,230,230,230,230,230', -'230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230', -'230,224,224,,,,,,,,224,,,,,,,,,,224,,,,,,224,224,224,224,224,224,224', -'224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224', -'224,224,224,224,224,224,224,289,,,,,,,,289,,,,,,,,,,289,,,,,,289,289', +'92,222,222,,,,,,,,222,,,,,,,,,,222,,,,,,222,222,222,222,222,222,222', +'222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222', +'222,222,222,222,222,222,222,289,,,,,,,,289,,,,,,,,,,289,,,,,,289,289', '289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289', '289,289,289,289,289,289,289,289,289,289,289,289,268,,,,,,,,268,,,,,', ',,,,268,,,,,,268,268,268,268,268,268,268,268,268,268,268,268,268,268', '268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268', -'267,,,,,,,,267,,,,,,,,,,267,,,,,,267,267,267,267,267,267,267,267,267', -'267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267', -'267,267,267,267,267,221,,,,,,,,221,,,,,,,,,,221,,,,,,221,221,221,221', +'221,,,,,,,,221,,,,,,,,,,221,,,,,,221,221,221,221,221,221,221,221,221', '221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221', -'221,221,221,221,221,221,221,221,221,221,288,,,,,,,,288,,,,,,,,,,288', -',,,,,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288', -'288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,82,,,,,', +'221,221,221,221,221,288,,,,,,,,288,,,,,,,,,,288,,,,,,288,288,288,288', +'288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288', +'288,288,288,288,288,288,288,288,288,288,267,,,,,,,,267,,,,,,,,,,267', +',,,,,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267', +'267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,82,,,,,', ',,,,82,,,,,,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82', -'82,82,82,82,82,82,82,82,82,82,82,172,,,,,,,,,,172,,,,,,172,172,172,172', -'172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172', -'172,172,172,172,172,172,172,172,172,210,,,,,,,,,,210,,,,,,210,210,210', +'82,82,82,82,82,82,82,82,82,82,82,210,,,,,,,,,,210,,,,,,210,210,210,210', '210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210', -'210,210,210,210,210,210,210,210,210,210,198,,,,,,198,198,198,198,198', +'210,210,210,210,210,210,210,210,210,172,,,,,,,,,,172,,,,,,172,172,172', +'172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172', +'172,172,172,172,172,172,172,172,172,172,198,,,,,,198,198,198,198,198', '198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198', -'198,198,198,198,198,198,198,198,211,,,,,,211,211,211,211,211,211,211', -'211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211', -'211,211,211,211,211,211,214,,,,,,214,214,214,214,214,214,214,214,214', -'214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214', -'214,214,214,214,205,,,,,,205,205,205,205,205,205,205,205,205,205,205', +'198,198,198,198,198,198,198,198,205,,,,,,205,205,205,205,205,205,205', '205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205', -'205,205,202,,,,,,202,202,202,202,202,202,202,202,202,202,202,202,202', -'202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202' ] - racc_action_check = arr = Array.new(9843, nil) +'205,205,205,205,205,205,211,,,,,,211,211,211,211,211,211,211,211,211', +'211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211', +'211,211,211,211,202,,,,,,202,202,202,202,202,202,202,202,202,202,202', +'202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202', +'202,202,214,,,,,,214,214,214,214,214,214,214,214,214,214,214,214,214', +'214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214' ] + racc_action_check = arr = Array.new(9789, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -709,37 +707,37 @@ def on_error(error_token_id, error_value, value_stack) end racc_action_pointer = [ - 4040, 220, 303, 280, nil, 7106, 171, nil, nil, 562, - 656, 7049, nil, 844, 209, nil, nil, nil, nil, nil, - nil, 204, 1126, nil, nil, nil, nil, nil, nil, 220, - 1314, nil, nil, nil, 186, 113, nil, 8564, 169, 37, - nil, 256, 111, nil, 2066, nil, nil, nil, 2160, nil, + 4040, 245, 311, 280, nil, 6866, 212, nil, nil, 562, + 656, 7041, nil, 844, 253, nil, nil, nil, nil, nil, + nil, 246, 1126, nil, nil, nil, nil, nil, nil, 141, + 1314, nil, nil, nil, 143, 113, nil, 8002, 60, 274, + nil, 161, 164, nil, 2066, nil, nil, nil, 2160, nil, nil, nil, nil, 2254, nil, nil, nil, 2348, nil, 2442, nil, nil, nil, 2536, 2630, nil, nil, nil, 2724, nil, - 159, 2912, 3006, nil, nil, 195, 298, nil, 313, 8, - -41, nil, 9488, 93, 162, 3852, 8048, -2, 8882, 291, - 312, 246, 8942, 4604, 77, nil, nil, 158, 322, 4980, - 92, 5168, 5262, 5356, 5450, 5544, 6766, 5732, 5826, 5920, - 6014, -2, 6202, 6296, 6390, 6484, 6578, 6672, 5638, 6108, - 3664, 1972, 301, -50, 468, 374, 5074, 750, 938, 4886, - 4792, 4698, 4510, 4416, 4322, nil, 4228, 4134, 3946, nil, - 170, 191, nil, 162, nil, -1, nil, nil, nil, 135, - 3758, 120, 110, 6821, 3570, nil, 3476, nil, nil, 179, - 461, 194, 7274, 273, 8392, 411, 438, nil, nil, 175, - 3382, 8134, 9534, 54, 92, 217, 126, nil, 3288, 3194, - 111, 7962, nil, nil, 139, 183, 210, nil, 7704, nil, - 230, 3100, 2818, -17, 7618, 946, 1134, 101, 9616, 1228, - 367, 8822, 9760, 1322, 344, 9724, nil, 1416, 1341, 7446, - 9580, 9652, 1040, 1435, 9688, 382, 105, 337, 201, 664, - 1153, 9386, 758, 1247, 9166, 852, 1526, 8998, 476, 1510, - 9110, 570, 303, nil, nil, nil, nil, nil, nil, nil, - 6866, nil, nil, 73, 156, 9054, 172, nil, -13, nil, - 1878, 1784, nil, 8220, -45, nil, nil, nil, nil, 237, - 8650, 8736, nil, -29, nil, -16, nil, 9331, 9276, nil, - 1690, 1596, 266, nil, nil, 27, 1502, 104, 31, nil, - 8478, 1408, 1220, 8306, 1032, nil, nil, nil, 9441, 9221, - nil, 37, 7876, nil, 197, nil, -22, 7790, 7532, 6956, - 7102, 264, 186, 249, nil, 7188, nil, nil, 7360, nil, + 93, 2912, 3006, nil, nil, 9, 115, nil, 313, -71, + 225, nil, 9434, 73, 156, 3852, 8512, -2, 8885, 344, + 114, 295, 9056, 4604, 77, nil, nil, 205, 145, 4980, + 92, 5168, 5262, 5356, 5450, 5544, 5638, 6766, 5826, 5920, + 6014, -2, 6202, 6296, 6390, 6484, 6578, 6672, 5732, 6108, + 3758, 3382, 321, -40, 750, 468, 374, 5074, 938, 1972, + 4886, 4792, 4698, 4510, 4416, 4322, nil, 4228, 4134, nil, + 218, 240, nil, 240, nil, -1, nil, nil, nil, 165, + 3946, 120, 110, 6821, nil, 3664, nil, 3570, nil, 273, + 257, 197, 7237, 461, 8342, 411, 438, nil, nil, 250, + 3476, 8087, 9526, 232, 257, 204, 126, nil, 3288, 3194, + 180, 7917, nil, nil, 255, 77, 9, nil, 7662, nil, + 26, 3100, 2818, -17, 7577, 664, 1134, 208, 9562, 1416, + 367, 7407, 9670, 1322, 299, 9598, nil, 1228, 108, 8767, + 9480, 9634, 1040, 1435, 9706, 476, 1341, 127, 185, 382, + 1247, 9277, 9112, 570, 1153, 8944, 946, 1526, 9000, 852, + 304, 758, 1510, nil, nil, nil, nil, nil, nil, nil, + 6951, nil, nil, 187, 167, 175, 8826, nil, -13, nil, + 1878, 1784, nil, 8172, 145, nil, nil, nil, nil, 209, + 8597, 8682, nil, 114, nil, -16, nil, 9387, 9222, nil, + 1690, 1596, 210, nil, nil, 27, 1502, 104, 166, nil, + 8427, 1408, 1220, 8257, 1032, nil, nil, nil, 9332, 9167, + nil, -7, 7832, nil, 231, nil, -22, 7747, 7492, 7184, + 7094, 63, 186, 276, nil, 6866, nil, nil, 7322, nil, nil ] racc_action_default = [ @@ -756,18 +754,18 @@ def on_error(error_token_id, error_value, value_stack) -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -93, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, - -181, -181, -181, -181, -181, -58, -181, -181, -181, -57, + -181, -181, -181, -181, -181, -181, -58, -181, -181, -57, -181, -181, -172, -174, -176, -181, -178, -114, -128, -181, - -181, -181, -181, -181, -181, -115, -136, -109, -95, -51, + -181, -181, -181, -181, -115, -136, -109, -181, -95, -51, -48, -49, -153, -52, -181, -54, -53, -129, -110, -181, -181, -137, -55, -181, -181, -181, -181, -117, -181, -181, -181, -137, -170, -151, -181, -181, -146, 311, -6, -24, -181, -181, -181, -181, -154, -81, -70, -59, -83, -71, -60, -179, -84, -72, -61, -85, -82, -73, -62, -180, -91, -86, -74, -63, -87, -75, -64, -181, -181, -76, - -65, -92, -77, -66, -88, -78, -67, -89, -79, -68, - -90, -80, -69, -94, -99, -173, -177, -171, -175, -111, - -181, -112, -113, -127, -181, -41, -181, -152, -181, -143, + -65, -92, -88, -77, -66, -89, -78, -67, -90, -79, + -68, -80, -69, -94, -99, -173, -177, -171, -175, -111, + -181, -112, -113, -127, -181, -181, -41, -152, -181, -143, -181, -181, -135, -138, -181, -101, -123, -121, -120, -181, -42, -43, -132, -181, -147, -181, -158, -159, -160, -156, -181, -181, -155, -102, -116, -130, -181, -181, -181, -165, @@ -777,27 +775,27 @@ def on_error(error_token_id, error_value, value_stack) -134 ] racc_goto_table = [ - 25, 84, 83, 155, 167, 168, 82, 193, 98, 257, - 258, 78, 86, 87, 88, 81, 89, 21, 167, 168, - 279, 144, 29, 291, 186, 92, 277, 234, 237, 93, - 140, 143, 155, 290, 96, 146, nil, nil, 142, nil, - nil, nil, nil, nil, nil, 155, 155, 159, nil, 295, - nil, 160, 94, nil, nil, nil, 161, nil, 169, 34, - 162, nil, 163, nil, nil, nil, 164, 165, 304, nil, - nil, 166, 180, 90, 171, 172, nil, nil, 175, nil, - nil, nil, nil, nil, nil, 174, nil, nil, 181, 81, - nil, nil, nil, 285, 93, 217, 188, nil, nil, nil, + 25, 84, 83, 154, 167, 168, 82, 193, 98, 169, + 78, 29, 86, 87, 88, 81, 89, 21, 167, 168, + 279, 144, 291, 180, 186, 92, 277, 234, 237, 93, + 140, 143, 154, 290, 96, 142, 146, nil, nil, nil, + nil, 94, nil, nil, nil, 154, 154, 159, nil, 295, + nil, 160, nil, nil, nil, nil, 161, nil, nil, 34, + 162, nil, 163, 257, 258, nil, 164, 165, 304, nil, + nil, 166, nil, 90, 171, 172, nil, nil, 175, nil, + nil, nil, nil, nil, 174, nil, nil, nil, 181, 81, + nil, nil, nil, 245, 93, 217, 188, nil, nil, nil, nil, 158, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 236, 272, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, 229, nil, 230, - 231, 232, 235, 246, nil, 182, nil, nil, nil, 244, - 243, nil, nil, 240, nil, nil, nil, 245, nil, 181, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 235, + 231, 232, nil, nil, nil, 182, nil, 285, nil, 244, + 243, nil, nil, 240, nil, nil, nil, nil, 181, nil, + 246, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 253, 175, nil, 259, nil, 167, 168, nil, 260, 261, nil, nil, nil, nil, nil, 81, 81, nil, nil, nil, nil, 267, 268, nil, nil, nil, 233, - nil, nil, nil, nil, 238, 155, 155, nil, nil, nil, + nil, nil, nil, nil, 238, 154, 154, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 247, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, @@ -815,23 +813,23 @@ def on_error(error_token_id, error_value, value_stack) 301, nil, nil, 303 ] racc_goto_check = [ - 2, 32, 6, 30, 36, 31, 5, 41, 40, 23, - 23, 34, 5, 5, 5, 21, 5, 1, 36, 31, - 43, 47, 3, 38, 39, 5, 42, 26, 44, 2, - 25, 46, 30, 8, 2, 48, nil, nil, 45, nil, - nil, nil, nil, nil, nil, 30, 30, 5, nil, 43, - nil, 5, 3, nil, nil, nil, 5, nil, 37, 4, - 5, nil, 5, nil, nil, nil, 5, 5, 43, nil, - nil, 5, 37, 4, 5, 5, nil, nil, 2, nil, - nil, nil, nil, nil, nil, 34, nil, nil, 5, 21, - nil, nil, nil, 23, 2, 40, 5, nil, nil, nil, + 2, 32, 6, 30, 36, 31, 5, 41, 40, 37, + 34, 3, 5, 5, 5, 21, 5, 1, 36, 31, + 43, 47, 38, 37, 39, 5, 42, 26, 44, 2, + 25, 46, 30, 8, 2, 45, 48, nil, nil, nil, + nil, 3, nil, nil, nil, 30, 30, 5, nil, 43, + nil, 5, nil, nil, nil, nil, 5, nil, nil, 4, + 5, nil, 5, 23, 23, nil, 5, 5, 43, nil, + nil, 5, nil, 4, 5, 5, nil, nil, 2, nil, + nil, nil, nil, nil, 34, nil, nil, nil, 5, 21, + nil, nil, nil, 37, 2, 40, 5, nil, nil, nil, nil, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 47, 41, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, nil, 5, - 5, 5, 45, 37, nil, 4, nil, nil, nil, 32, - 6, nil, nil, 5, nil, nil, nil, 5, nil, 5, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 45, + 5, 5, nil, nil, nil, 4, nil, 23, nil, 32, + 6, nil, nil, 5, nil, nil, nil, nil, 5, nil, + 5, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 5, 2, nil, 2, nil, 36, 31, nil, 5, 5, nil, nil, nil, nil, nil, 21, 21, nil, nil, nil, nil, 5, 5, nil, nil, nil, 4, @@ -853,17 +851,17 @@ def on_error(error_token_id, error_value, value_stack) 4, nil, nil, 4 ] racc_goto_pointer = [ - nil, 17, 0, 22, 59, 3, -3, nil, -242, nil, + nil, 17, 0, 11, 59, 3, -3, nil, -242, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 13, nil, -166, nil, -8, -114, nil, nil, nil, - -38, -65, -4, nil, 9, nil, -66, -13, -253, -66, - -27, -91, -222, -228, -117, -1, -8, -18, -4 ] + nil, 13, nil, -112, nil, -8, -114, nil, nil, nil, + -38, -65, -4, nil, 8, nil, -66, -62, -254, -66, + -27, -91, -222, -228, -117, -4, -8, -18, -3 ] racc_goto_default = [ nil, nil, 250, nil, nil, 37, 41, 43, 47, 52, 58, 67, 69, 73, 74, 4, 7, 12, 16, 17, 19, 23, 31, 77, 38, 42, 45, 49, 54, 60, - 65, 157, 70, 147, nil, 8, 148, nil, nil, nil, + 65, 156, 70, 147, nil, 8, 148, nil, nil, nil, nil, nil, nil, nil, 39, nil, nil, nil, nil ] racc_reduce_table = [ @@ -1138,10 +1136,10 @@ def on_error(error_token_id, error_value, value_stack) "*=" => 81, "%=" => 82, "." => 83, - :ASSIGN => 84, - "||=" => 85, - "&&=" => 86, - "?=" => 87, + "||=" => 84, + "&&=" => 85, + "?=" => 86, + :ASSIGN => 87, "=>" => 88, "==>" => 89, "\n" => 90, @@ -1259,10 +1257,10 @@ def on_error(error_token_id, error_value, value_stack) "\"*=\"", "\"%=\"", "\".\"", - "ASSIGN", "\"||=\"", "\"&&=\"", "\"?=\"", + "ASSIGN", "\"=>\"", "\"==>\"", "\"\\n\"", From 4b267b401a92fc1178d1f1abb0b49bd66343fc85 Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Sun, 24 Jan 2010 20:04:28 -0500 Subject: [PATCH 11/32] another poignant example --- examples/poignant.coffee | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/examples/poignant.coffee b/examples/poignant.coffee index 9ed24328c8..5ac07defcb 100644 --- a/examples/poignant.coffee +++ b/examples/poignant.coffee @@ -22,6 +22,39 @@ LotteryTicket: { +# class << LotteryDraw +# def play +# result = LotteryTicket.new_random +# winners = {} +# @@tickets.each do |buyer, ticket_list| +# ticket_list.each do |ticket| +# score = ticket.score( result ) +# next if score.zero? +# winners[buyer] ||= [] +# winners[buyer] << [ ticket, score ] +# end +# end +# @@tickets.clear +# winners +# end +# end + +LotteryDraw: { + play: => + result: LotteryTicket.new_random() + winners: {} + this.tickets.each() buyer, ticket_list => + ticket_list.each() ticket => + score: ticket.score(result) + return if score is 0 + winners[buyer] ||= [] + winners[buyer].push([ticket, score]) + this.tickets: {} + winners +} + + + # module WishScanner # def scan_for_a_wish # wish = self.read.detect do |thought| From 70e3a6ef2f678f36ea4d2faf8c068122a9ab5f13 Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Sun, 24 Jan 2010 22:32:06 -0500 Subject: [PATCH 12/32] first draft of optional parentheses, with a couple tests ... more to follow --- lib/coffee_script/rewriter.rb | 23 +++++++++++++++++++ test/fixtures/execution/test_arguments.coffee | 8 +++---- .../execution/test_array_comprehension.coffee | 16 ++++++------- .../fixtures/execution/test_assignment.coffee | 6 ++--- 4 files changed, 38 insertions(+), 15 deletions(-) diff --git a/lib/coffee_script/rewriter.rb b/lib/coffee_script/rewriter.rb index ae1a62aa56..3510a6f306 100644 --- a/lib/coffee_script/rewriter.rb +++ b/lib/coffee_script/rewriter.rb @@ -17,6 +17,10 @@ class Rewriter # Tokens that indicate the close of a clause of an expression. EXPRESSION_CLOSE = [:CATCH, :WHEN, :ELSE, :FINALLY] + EXPRESSION_TAIL + # Tokens that, when immediately following an identifier, activate an + # implicit method call. + IMPLICIT_CALL = [:IDENTIFIER, :NUMBER, :STRING, :JS, :REGEX] + # The inverse mappings of token pairs we're trying to fix up. INVERSES = BALANCED_PAIRS.inject({}) do |memo, pair| memo[pair.first] = pair.last @@ -39,6 +43,7 @@ def rewrite(tokens) remove_mid_expression_newlines move_commas_outside_outdents add_implicit_indentation + add_implicit_parentheses ensure_balance(*BALANCED_PAIRS) rewrite_closing_parens @tokens @@ -140,6 +145,24 @@ def add_implicit_indentation end end + # Methods may be optionally called without parentheses, for simple cases. + # Insert the implicit parentheses here, so that the parser doesn't have to + # deal with them. + def add_implicit_parentheses + open = false + scan_tokens do |prev, token, post, i| + if open && token[0] == "\n" + @tokens.insert(i, [')', Value.new(')', token[1].line)]) + open = false + next 2 + end + next 1 unless prev[0] == :IDENTIFIER && IMPLICIT_CALL.include?(token[0]) + @tokens.insert(i, ['(', Value.new('(', token[1].line)]) + open = true + next 2 + end + end + # Ensure that all listed pairs of tokens are correctly balanced throughout # the course of the token stream. def ensure_balance(*pairs) diff --git a/test/fixtures/execution/test_arguments.coffee b/test/fixtures/execution/test_arguments.coffee index ecaf118ab1..dcfb7d28b3 100644 --- a/test/fixtures/execution/test_arguments.coffee +++ b/test/fixtures/execution/test_arguments.coffee @@ -4,7 +4,7 @@ area: x, y, x1, y1 => x: y: 10 x1: y1: 20 -print(area(x, y, x1, y1) is 100) +print area(x, y, x1, y1) is 100 print(area(x, y, x1, y1) is 100) @@ -19,9 +19,9 @@ print(area( # Arguments are turned into arrays. curried: => - print(area.apply(this, arguments.concat(20, 20)) is 100) + print area.apply(this, arguments.concat(20, 20)) is 100 -curried(10, 10) +curried 10, 10 # Arguments is not a special keyword -- it can be assigned to: @@ -29,4 +29,4 @@ func: => arguments: 25 arguments -print(func(100) is 25) +print func(100) is 25 diff --git a/test/fixtures/execution/test_array_comprehension.coffee b/test/fixtures/execution/test_array_comprehension.coffee index 5eb6fa4b34..b5005bd650 100644 --- a/test/fixtures/execution/test_array_comprehension.coffee +++ b/test/fixtures/execution/test_array_comprehension.coffee @@ -1,15 +1,15 @@ nums: n * n for n in [1, 2, 3] when n % 2 isnt 0 results: n * 2 for n in nums -print(results.join(',') is '2,18') +print results.join(',') is '2,18' obj: {one: 1, two: 2, three: 3} names: prop + '!' for prop of obj odds: prop + '!' for prop, value of obj when value % 2 isnt 0 -print(names.join(' ') is "one! two! three!") -print(odds.join(' ') is "one! three!") +print names.join(' ') is "one! two! three!" +print odds.join(' ') is "one! three!" evens: for num in [1, 2, 3, 4, 5, 6] when num % 2 is 0 @@ -17,12 +17,12 @@ evens: for num in [1, 2, 3, 4, 5, 6] when num % 2 is 0 num -= 2 num * -1 -print(evens.join(', ') is '4, 6, 8') +print evens.join(', ') is '4, 6, 8' # Make sure that the "in" operator still works. -print(2 in evens) +print 2 in evens # When functions are being defined within the body of a comprehension, make @@ -37,6 +37,6 @@ for method in methods obj[name]: => "I'm " + name -print(obj.one() is "I'm one") -print(obj.two() is "I'm two") -print(obj.three() is "I'm three") +print obj.one() is "I'm one" +print obj.two() is "I'm two" +print obj.three() is "I'm three" diff --git a/test/fixtures/execution/test_assignment.coffee b/test/fixtures/execution/test_assignment.coffee index 550f7d5cfc..c1b5d127e3 100644 --- a/test/fixtures/execution/test_assignment.coffee +++ b/test/fixtures/execution/test_assignment.coffee @@ -7,7 +7,7 @@ catch error result2: try nonexistent * missing catch error then true -print(result is true and result2 is true) +print result is true and result2 is true # Assign to conditional. @@ -16,8 +16,8 @@ get_x: => 10 if x: get_x() then 100 -print(x is 10) +print x is 10 x: if get_x() then 100 -print(x is 100) \ No newline at end of file +print x is 100 \ No newline at end of file From a5d39efdd22c5bbc32f998c5e4347e72e1bb9e7c Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Sun, 24 Jan 2010 23:40:45 -0500 Subject: [PATCH 13/32] converted the tests to use optional parentheses -- lot's of little subtleties to work out --- .../Syntaxes/CoffeeScript.tmLanguage | 4 ++-- lib/coffee_script/lexer.rb | 10 +++++++-- lib/coffee_script/rewriter.rb | 12 +++++----- test/fixtures/execution/test_blocks.coffee | 2 +- .../execution/test_calling_super.coffee | 8 +++---- .../execution/test_chained_calls.coffee | 6 ++--- .../test_destructuring_assignment.coffee | 22 +++++++++---------- .../fixtures/execution/test_everything.coffee | 4 ++-- test/fixtures/execution/test_existence.coffee | 18 +++++++-------- .../execution/test_expressions.coffee | 6 ++--- .../execution/test_fancy_if_statement.coffee | 2 +- test/fixtures/execution/test_functions.coffee | 16 +++++++------- .../execution/test_funky_comments.coffee | 2 +- test/fixtures/execution/test_heredocs.coffee | 12 +++++----- .../execution/test_lexical_scope.coffee | 4 ++-- test/fixtures/execution/test_literals.coffee | 14 ++++++------ .../test_nested_comprehensions.coffee | 6 ++--- .../execution/test_newline_escaping.coffee | 2 +- .../fixtures/execution/test_operations.coffee | 10 ++++----- .../execution/test_range_comprehension.coffee | 6 ++--- .../execution/test_ranges_and_slices.coffee | 4 ++-- test/fixtures/execution/test_splats.coffee | 16 +++++++------- test/fixtures/execution/test_splices.coffee | 4 +--- test/fixtures/execution/test_switch.coffee | 11 +++++----- test/fixtures/execution/test_while.coffee | 6 ++--- 25 files changed, 106 insertions(+), 101 deletions(-) diff --git a/lib/coffee_script/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage b/lib/coffee_script/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage index f0daaede1e..f394402b9d 100644 --- a/lib/coffee_script/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage +++ b/lib/coffee_script/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage @@ -55,7 +55,7 @@ name variable.parameter.function.coffee - 2 + 3 name storage.type.function.coffee @@ -64,7 +64,7 @@ comment match stuff like: a => … match - ([a-zA-Z0-9_?., $*]*)\s*(=+>) + ([a-zA-Z0-9_?.$]*(,\s*[a-zA-Z0-9_?.$]+)*)\s*(=+>) name meta.inline.function.coffee diff --git a/lib/coffee_script/lexer.rb b/lib/coffee_script/lexer.rb index 08980b3bfb..6dcf7a1c34 100644 --- a/lib/coffee_script/lexer.rb +++ b/lib/coffee_script/lexer.rb @@ -163,7 +163,7 @@ def indent_token @line += indent.scan(MULTILINER).size @i += indent.size next_character = @chunk[MULTI_DENT, 4] - no_newlines = next_character == '.' || (last_value.to_s.match(NO_NEWLINE) && !last_value.match(CODE)) + no_newlines = next_character == '.' || (last_value.to_s.match(NO_NEWLINE) && @tokens[-2][0] != '.' && !last_value.match(CODE)) return suppress_newlines(indent) if no_newlines size = indent.scan(LAST_DENT).last.last.length return newline_token(indent) if size == @indent @@ -242,13 +242,19 @@ def last_tag # make use of splats. def tag_parameters i = 0 + tagged = false loop do i -= 1 tok = @tokens[i] return if !tok - next if ['.', ','].include?(tok[0]) + if ['.', ','].include?(tok[0]) + tagged = false + next + end + return if tagged return if tok[0] != :IDENTIFIER tok[0] = :PARAM + tagged = true end end diff --git a/lib/coffee_script/rewriter.rb b/lib/coffee_script/rewriter.rb index 3510a6f306..069d1fc358 100644 --- a/lib/coffee_script/rewriter.rb +++ b/lib/coffee_script/rewriter.rb @@ -17,9 +17,11 @@ class Rewriter # Tokens that indicate the close of a clause of an expression. EXPRESSION_CLOSE = [:CATCH, :WHEN, :ELSE, :FINALLY] + EXPRESSION_TAIL - # Tokens that, when immediately following an identifier, activate an - # implicit method call. - IMPLICIT_CALL = [:IDENTIFIER, :NUMBER, :STRING, :JS, :REGEX] + # Tokens pairs that, in immediate succession, indicate an implicit call. + IMPLICIT_FUNC = [:IDENTIFIER, :SUPER] + IMPLICIT_CALL = [:IDENTIFIER, :NUMBER, :STRING, :JS, :REGEX, :NEW, :PARAM, + :TRY, :DELETE, :INSTANCEOF, :TYPEOF, :SWITCH, :ARGUMENTS, + :TRUE, :FALSE, :YES, :NO, :ON, :OFF, '!', '!!', :NOT] # The inverse mappings of token pairs we're trying to fix up. INVERSES = BALANCED_PAIRS.inject({}) do |memo, pair| @@ -42,8 +44,8 @@ def rewrite(tokens) remove_leading_newlines remove_mid_expression_newlines move_commas_outside_outdents - add_implicit_indentation add_implicit_parentheses + add_implicit_indentation ensure_balance(*BALANCED_PAIRS) rewrite_closing_parens @tokens @@ -156,7 +158,7 @@ def add_implicit_parentheses open = false next 2 end - next 1 unless prev[0] == :IDENTIFIER && IMPLICIT_CALL.include?(token[0]) + next 1 unless IMPLICIT_FUNC.include?(prev[0]) && IMPLICIT_CALL.include?(token[0]) @tokens.insert(i, ['(', Value.new('(', token[1].line)]) open = true next 2 diff --git a/test/fixtures/execution/test_blocks.coffee b/test/fixtures/execution/test_blocks.coffee index a28eecc955..720d82af81 100644 --- a/test/fixtures/execution/test_blocks.coffee +++ b/test/fixtures/execution/test_blocks.coffee @@ -1,4 +1,4 @@ results: [1, 2, 3].map() x => x * x -print(results.join(' ') is '1 4 9') \ No newline at end of file +print results.join(' ') is '1 4 9' \ No newline at end of file diff --git a/test/fixtures/execution/test_calling_super.coffee b/test/fixtures/execution/test_calling_super.coffee index 33a59bd3e1..c2f619ce02 100644 --- a/test/fixtures/execution/test_calling_super.coffee +++ b/test/fixtures/execution/test_calling_super.coffee @@ -18,19 +18,19 @@ ThirdChild extends SecondChild ThirdChild::func: string => super('three/') + string -result: (new ThirdChild()).func('four') +result: (new ThirdChild()).func 'four' -print(result is 'zero/one/two/three/four') +print result is 'zero/one/two/three/four' TopClass: arg => this.prop: 'top-' + arg SuperClass: arg => - super('super-' + arg) + super 'super-' + arg SubClass: => - super('sub') + super 'sub' SuperClass extends TopClass SubClass extends SuperClass diff --git a/test/fixtures/execution/test_chained_calls.coffee b/test/fixtures/execution/test_chained_calls.coffee index d48b50db82..1355015cd6 100644 --- a/test/fixtures/execution/test_chained_calls.coffee +++ b/test/fixtures/execution/test_chained_calls.coffee @@ -2,7 +2,7 @@ identity_wrap: x => => x result: identity_wrap(identity_wrap(true))()() -print(result) +print result str: 'god' @@ -13,7 +13,7 @@ result: str. reverse(). reverse() -print(result.join('') is 'dog') +print result.join('') is 'dog' result: str .split('') @@ -21,4 +21,4 @@ result: str .reverse() .reverse() -print(result.join('') is 'dog') \ No newline at end of file +print result.join('') is 'dog' \ No newline at end of file diff --git a/test/fixtures/execution/test_destructuring_assignment.coffee b/test/fixtures/execution/test_destructuring_assignment.coffee index aba854a87a..3aa454c3de 100644 --- a/test/fixtures/execution/test_destructuring_assignment.coffee +++ b/test/fixtures/execution/test_destructuring_assignment.coffee @@ -3,26 +3,26 @@ b: -2 [a, b]: [b, a] -print(a is -2) -print(b is -1) +print a is -2 +print b is -1 arr: [1, 2, 3] [a, b, c]: arr -print(a is 1) -print(b is 2) -print(c is 3) +print a is 1 +print b is 2 +print c is 3 obj: {x: 10, y: 20, z: 30} {x: a, y: b, z: c}: obj -print(a is 10) -print(b is 20) -print(c is 30) +print a is 10 +print b is 20 +print c is 30 person: { @@ -42,8 +42,8 @@ person: { {name: a, family: {brother: {addresses: [one, {city: b}]}}}: person -print(a is "Bob") -print(b is "Moquasset NY, 10021") +print a is "Bob" +print b is "Moquasset NY, 10021" test: { @@ -59,4 +59,4 @@ test: { {person: {address: [ignore, addr...]}}: test -print(addr.join(', ') is "Street 101, Apt 101, City 101") \ No newline at end of file +print addr.join(', ') is "Street 101, Apt 101, City 101" \ No newline at end of file diff --git a/test/fixtures/execution/test_everything.coffee b/test/fixtures/execution/test_everything.coffee index a1ae6b8ffa..7a482e5a36 100644 --- a/test/fixtures/execution/test_everything.coffee +++ b/test/fixtures/execution/test_everything.coffee @@ -3,7 +3,7 @@ func: => b: [] while a >= 0 - b.push('o') + b.push 'o' a-- c: { @@ -26,4 +26,4 @@ func: => c.single: c.list[1..1][0] -print(func() is '-') +print func() is '-' diff --git a/test/fixtures/execution/test_existence.coffee b/test/fixtures/execution/test_existence.coffee index c572eabee3..16c64c74c5 100644 --- a/test/fixtures/execution/test_existence.coffee +++ b/test/fixtures/execution/test_existence.coffee @@ -12,7 +12,7 @@ a: null a ?= 10 b ?= 10 -print(a is 10 and b is 10) +print a is 10 and b is 10 # The existential operator. @@ -20,7 +20,7 @@ print(a is 10 and b is 10) z: null x: z ? "EX" -print(z is null and x is "EX") +print z is null and x is "EX" # Only evaluate once. @@ -39,17 +39,17 @@ obj: { prop: "hello" } -print(obj?.prop is "hello") +print obj?.prop is "hello" -print(obj?.prop?.non?.existent?.property is undefined) +print obj?.prop?.non?.existent?.property is undefined # Soaks and caches method calls as well. arr: ["--", "----"] -print(arr.pop()?.length is 4) -print(arr.pop()?.length is 2) -print(arr.pop()?.length is undefined) -print(arr[0]?.length is undefined) -print(arr.pop()?.length?.non?.existent()?.property is undefined) +print arr.pop()?.length is 4 +print arr.pop()?.length is 2 +print arr.pop()?.length is undefined +print arr[0]?.length is undefined +print arr.pop()?.length?.non?.existent()?.property is undefined diff --git a/test/fixtures/execution/test_expressions.coffee b/test/fixtures/execution/test_expressions.coffee index 5472906126..1760e341ea 100644 --- a/test/fixtures/execution/test_expressions.coffee +++ b/test/fixtures/execution/test_expressions.coffee @@ -9,7 +9,7 @@ findit: items => for item in items return item if item is "bacon" -print(findit(items) is "bacon") +print findit(items) is "bacon" # When when a closure wrapper is generated for expression conversion, make sure @@ -26,5 +26,5 @@ obj: { this.num } -print(obj.num is obj.func()) -print(obj.num is obj.result) \ No newline at end of file +print obj.num is obj.func() +print obj.num is obj.result \ No newline at end of file diff --git a/test/fixtures/execution/test_fancy_if_statement.coffee b/test/fixtures/execution/test_fancy_if_statement.coffee index 1e7546a0a1..d877698b79 100644 --- a/test/fixtures/execution/test_fancy_if_statement.coffee +++ b/test/fixtures/execution/test_fancy_if_statement.coffee @@ -7,4 +7,4 @@ result: if a if d true -print(result) \ No newline at end of file +print result \ No newline at end of file diff --git a/test/fixtures/execution/test_functions.coffee b/test/fixtures/execution/test_functions.coffee index 0a5c66767a..786d494d8a 100644 --- a/test/fixtures/execution/test_functions.coffee +++ b/test/fixtures/execution/test_functions.coffee @@ -2,10 +2,10 @@ x: 1 y: {} y.x: => 3 -print(x is 1) -print(typeof(y.x) is 'function') -print(y.x() is 3) -print(y.x.name is 'x') +print x is 1 +print typeof(y.x) is 'function' +print y.x() is 3 +print y.x.name is 'x' # The empty function should not cause a syntax error. @@ -40,9 +40,9 @@ memoize: fn => Math: { Add: a, b => a + b AnonymousAdd: (a, b => a + b) - FastAdd: memoize() a, b => a + b + FastAdd: memoize a, b => a + b } -print(Math.Add(5, 5) is 10) -print(Math.AnonymousAdd(10, 10) is 20) -print(Math.FastAdd(20, 20) is 40) +print Math.Add(5, 5) is 10 +print Math.AnonymousAdd(10, 10) is 20 +print Math.FastAdd(20, 20) is 40 diff --git a/test/fixtures/execution/test_funky_comments.coffee b/test/fixtures/execution/test_funky_comments.coffee index ca461a784e..8acaafd8f8 100644 --- a/test/fixtures/execution/test_funky_comments.coffee +++ b/test/fixtures/execution/test_funky_comments.coffee @@ -18,4 +18,4 @@ switch 'string' code() # comment -print(func()) +print func() diff --git a/test/fixtures/execution/test_heredocs.coffee b/test/fixtures/execution/test_heredocs.coffee index 34d999af42..bb0becfda8 100644 --- a/test/fixtures/execution/test_heredocs.coffee +++ b/test/fixtures/execution/test_heredocs.coffee @@ -3,7 +3,7 @@ a: """ on two lines """ -print(a is "basic heredoc\non two lines") +print a is "basic heredoc\non two lines" a: ''' @@ -12,12 +12,12 @@ a: ''' c ''' -print(a is "a\n \"b\nc") +print a is "a\n \"b\nc" a: '''one-liner''' -print(a is 'one-liner') +print a is 'one-liner' a: """ @@ -25,7 +25,7 @@ a: """ here """ -print(a is "out\nhere") +print a is "out\nhere" a: ''' @@ -34,7 +34,7 @@ a: ''' c ''' -print(a is " a\n b\nc") +print a is " a\n b\nc" a: ''' a @@ -43,4 +43,4 @@ a b c ''' -print(a is "a\n\n\nb c") +print a is "a\n\n\nb c" diff --git a/test/fixtures/execution/test_lexical_scope.coffee b/test/fixtures/execution/test_lexical_scope.coffee index b8d8259f8d..769b50961c 100644 --- a/test/fixtures/execution/test_lexical_scope.coffee +++ b/test/fixtures/execution/test_lexical_scope.coffee @@ -1,10 +1,10 @@ num: 1 + 2 + (a: 3) -print(num is 6) +print num is 6 result: if true false other: "result" -print(result is "result" and other is "result") \ No newline at end of file +print result is "result" and other is "result" \ No newline at end of file diff --git a/test/fixtures/execution/test_literals.coffee b/test/fixtures/execution/test_literals.coffee index 89271965f4..4dfb3b8c40 100644 --- a/test/fixtures/execution/test_literals.coffee +++ b/test/fixtures/execution/test_literals.coffee @@ -1,37 +1,37 @@ a: [(x => x), (x => x * x)] -print(a.length is 2) +print a.length is 2 regex: /match/i words: "I think there is a match in here." -print(!!words.match(regex)) +print !!words.match(regex) neg: (3 -4) -print(neg is -1) +print neg is -1 func: => return if true -print(func() is null) +print func() is null str: "\\" reg: /\\/ -print(reg(str) and str is '\\') +print reg(str) and str is '\\' i: 10 while i -= 1 -print(i is 0) +print i is 0 money$: 'dollars' -print(money$ is 'dollars') \ No newline at end of file +print money$ is 'dollars' \ No newline at end of file diff --git a/test/fixtures/execution/test_nested_comprehensions.coffee b/test/fixtures/execution/test_nested_comprehensions.coffee index ce6952d857..8f50c49082 100644 --- a/test/fixtures/execution/test_nested_comprehensions.coffee +++ b/test/fixtures/execution/test_nested_comprehensions.coffee @@ -6,6 +6,6 @@ multi_liner: single_liner: [x, y] for y in [3..5] for x in [3..5] -print(multi_liner.length is single_liner.length) -print(5 is multi_liner[2][2][1]) -print(5 is single_liner[2][2][1]) +print multi_liner.length is single_liner.length +print 5 is multi_liner[2][2][1] +print 5 is single_liner[2][2][1] diff --git a/test/fixtures/execution/test_newline_escaping.coffee b/test/fixtures/execution/test_newline_escaping.coffee index 117c228479..9e91f45290 100644 --- a/test/fixtures/execution/test_newline_escaping.coffee +++ b/test/fixtures/execution/test_newline_escaping.coffee @@ -3,4 +3,4 @@ six: 2 + 3 -print(six is 6) \ No newline at end of file +print six is 6 \ No newline at end of file diff --git a/test/fixtures/execution/test_operations.coffee b/test/fixtures/execution/test_operations.coffee index 56f57b6c79..9f0d51db94 100644 --- a/test/fixtures/execution/test_operations.coffee +++ b/test/fixtures/execution/test_operations.coffee @@ -1,12 +1,12 @@ # CoffeeScript's operations should be chainable, like Python's. -print(500 > 50 > 5 > -5) +print 500 > 50 > 5 > -5 -print(true is not false is true is not false) +print true is not false is true is not false -print(10 < 20 > 10) +print 10 < 20 > 10 -print(50 > 10 > 5 is parseInt('5', 10)) +print 50 > 10 > 5 is parseInt('5', 10) # Make sure that each argument is only evaluated once, even if used @@ -15,4 +15,4 @@ print(50 > 10 > 5 is parseInt('5', 10)) i: 0 func: => i++ -print(1 > func() < 1) +print 1 > func() < 1 diff --git a/test/fixtures/execution/test_range_comprehension.coffee b/test/fixtures/execution/test_range_comprehension.coffee index 8917550b41..947c27d204 100644 --- a/test/fixtures/execution/test_range_comprehension.coffee +++ b/test/fixtures/execution/test_range_comprehension.coffee @@ -5,16 +5,16 @@ negs: negs[0..2] result: nums.concat(negs).join(', ') -print(result is '3, 6, 9, -20, -19, -18') +print result is '3, 6, 9, -20, -19, -18' # Ensure that ranges are safe. This used to infinite loop: j = 5 result: for j in [j..(j+3)] j -print(result.join(' ') is '5 6 7 8') +print result.join(' ') is '5 6 7 8' # With range comprehensions, you can loop in steps. results: x for x in [0..25] by 5 -print(results.join(' ') is '0 5 10 15 20 25') \ No newline at end of file +print results.join(' ') is '0 5 10 15 20 25' \ No newline at end of file diff --git a/test/fixtures/execution/test_ranges_and_slices.coffee b/test/fixtures/execution/test_ranges_and_slices.coffee index 3850067a48..a6a0bf18bf 100644 --- a/test/fixtures/execution/test_ranges_and_slices.coffee +++ b/test/fixtures/execution/test_ranges_and_slices.coffee @@ -5,7 +5,7 @@ b: array[2...4] result: a.concat(b).join(' ') -print(result is "7 8 9 2 3") +print result is "7 8 9 2 3" countdown: [10..1].join(' ') -print(countdown is "10 9 8 7 6 5 4 3 2 1") \ No newline at end of file +print countdown is "10 9 8 7 6 5 4 3 2 1" \ No newline at end of file diff --git a/test/fixtures/execution/test_splats.coffee b/test/fixtures/execution/test_splats.coffee index 683998d3e9..c00cf11660 100644 --- a/test/fixtures/execution/test_splats.coffee +++ b/test/fixtures/execution/test_splats.coffee @@ -1,9 +1,9 @@ func: first, second, rest... => - rest.join(' ') + rest.join ' ' -result: func(1, 2, 3, 4, 5) +result: func 1, 2, 3, 4, 5 -print(result is "3 4 5") +print result is "3 4 5" gold: silver: bronze: the_field: null @@ -27,9 +27,9 @@ contenders: [ "Usain Bolt" ] -medalists("Mighty Mouse", contenders...) +medalists "Mighty Mouse", contenders... -print(gold is "Mighty Mouse") -print(silver is "Michael Phelps") -print(bronze is "Liu Xiang") -print(the_field.length is 8) \ No newline at end of file +print gold is "Mighty Mouse" +print silver is "Michael Phelps" +print bronze is "Liu Xiang" +print the_field.length is 8 \ No newline at end of file diff --git a/test/fixtures/execution/test_splices.coffee b/test/fixtures/execution/test_splices.coffee index 7f28d7978b..e9baf87793 100644 --- a/test/fixtures/execution/test_splices.coffee +++ b/test/fixtures/execution/test_splices.coffee @@ -1,7 +1,5 @@ - - array: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] array[5..10]: [0, 0, 0] -print(array.join(' ') is '0 1 2 3 4 0 0 0') \ No newline at end of file +print array.join(' ') is '0 1 2 3 4 0 0 0' \ No newline at end of file diff --git a/test/fixtures/execution/test_switch.coffee b/test/fixtures/execution/test_switch.coffee index 35ff3c7ab8..80535cd042 100644 --- a/test/fixtures/execution/test_switch.coffee +++ b/test/fixtures/execution/test_switch.coffee @@ -14,8 +14,7 @@ result: switch num when 11 then false else false -print(result) - +print result func: num => switch num @@ -25,7 +24,7 @@ func: num => false else false -print(func(2)) -print(func(6)) -print(!func(3)) -print(!func(8)) +print func(2) +print func(6) +print !func(3) +print !func(8) diff --git a/test/fixtures/execution/test_while.coffee b/test/fixtures/execution/test_while.coffee index 16972f1fe4..c065fe046d 100644 --- a/test/fixtures/execution/test_while.coffee +++ b/test/fixtures/execution/test_while.coffee @@ -1,17 +1,17 @@ i: 100 while i -= 1 -print(i is 0) +print i is 0 i: 5 list: while i -= 1 i * 2 -print(list.join(' ') is "8 6 4 2") +print list.join(' ') is "8 6 4 2" i: 5 list: (i * 3 while i -= 1) -print(list.join(' ') is "12 9 6 3") \ No newline at end of file +print list.join(' ') is "12 9 6 3" \ No newline at end of file From 8d63d269b8f7e8904aa971babb9f796c3d0f3a81 Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Sun, 24 Jan 2010 23:56:27 -0500 Subject: [PATCH 14/32] making all postfix forms close out implicit calls, as in Ruby --- lib/coffee_script/rewriter.rb | 3 ++- test/fixtures/execution/test_functions.coffee | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/coffee_script/rewriter.rb b/lib/coffee_script/rewriter.rb index 069d1fc358..a710bbec3b 100644 --- a/lib/coffee_script/rewriter.rb +++ b/lib/coffee_script/rewriter.rb @@ -19,6 +19,7 @@ class Rewriter # Tokens pairs that, in immediate succession, indicate an implicit call. IMPLICIT_FUNC = [:IDENTIFIER, :SUPER] + IMPLICIT_END = [:IF, :UNLESS, :FOR, :WHILE, "\n"] IMPLICIT_CALL = [:IDENTIFIER, :NUMBER, :STRING, :JS, :REGEX, :NEW, :PARAM, :TRY, :DELETE, :INSTANCEOF, :TYPEOF, :SWITCH, :ARGUMENTS, :TRUE, :FALSE, :YES, :NO, :ON, :OFF, '!', '!!', :NOT] @@ -153,7 +154,7 @@ def add_implicit_indentation def add_implicit_parentheses open = false scan_tokens do |prev, token, post, i| - if open && token[0] == "\n" + if open && IMPLICIT_END.include?(token[0]) @tokens.insert(i, [')', Value.new(')', token[1].line)]) open = false next 2 diff --git a/test/fixtures/execution/test_functions.coffee b/test/fixtures/execution/test_functions.coffee index 786d494d8a..bc85e206f3 100644 --- a/test/fixtures/execution/test_functions.coffee +++ b/test/fixtures/execution/test_functions.coffee @@ -46,3 +46,9 @@ Math: { print Math.Add(5, 5) is 10 print Math.AnonymousAdd(10, 10) is 20 print Math.FastAdd(20, 20) is 40 + + +# Parens are optional on simple function calls. +print 100 > 1 if 1 > 0 +print true unless false +print true for i in [1..3] From 2875de5e7330e49f3479c0f9186ca5040537d5ae Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Mon, 25 Jan 2010 00:14:00 -0500 Subject: [PATCH 15/32] changed the docs for optional parens --- documentation/coffee/arguments.coffee | 4 +- .../coffee/array_comprehensions.coffee | 2 +- documentation/coffee/long_arrow.coffee | 2 +- .../coffee/multiple_return_values.coffee | 2 +- documentation/coffee/overview.coffee | 4 +- .../coffee/range_comprehensions.coffee | 2 +- documentation/coffee/splats.coffee | 8 +- documentation/coffee/super.coffee | 14 +-- documentation/coffee/try.coffee | 2 +- documentation/js/array_comprehensions.js | 2 +- documentation/js/expressions_comprehension.js | 2 +- documentation/js/expressions_try.js | 2 +- documentation/js/object_comprehensions.js | 2 +- documentation/js/overview.js | 2 +- documentation/js/range_comprehensions.js | 4 +- documentation/js/while.js | 2 +- index.html | 86 +++++++++---------- 17 files changed, 71 insertions(+), 71 deletions(-) diff --git a/documentation/coffee/arguments.coffee b/documentation/coffee/arguments.coffee index fd4f2fbaee..afee37415a 100644 --- a/documentation/coffee/arguments.coffee +++ b/documentation/coffee/arguments.coffee @@ -1,4 +1,4 @@ backwards: => - alert(arguments.reverse()) + alert arguments.reverse() -backwards("stairway", "to", "heaven") \ No newline at end of file +backwards "stairway", "to", "heaven" \ No newline at end of file diff --git a/documentation/coffee/array_comprehensions.coffee b/documentation/coffee/array_comprehensions.coffee index 3510e1fb0a..2a90a136e7 100644 --- a/documentation/coffee/array_comprehensions.coffee +++ b/documentation/coffee/array_comprehensions.coffee @@ -4,4 +4,4 @@ lunch: eat(food) for food in ['toast', 'cheese', 'wine'] # Naive collision detection. for roid in asteroids for roid2 in asteroids when roid isnt roid2 - roid.explode() if roid.overlaps(roid2) \ No newline at end of file + roid.explode() if roid.overlaps roid2 \ No newline at end of file diff --git a/documentation/coffee/long_arrow.coffee b/documentation/coffee/long_arrow.coffee index 86c64e9be4..3b6e65042a 100644 --- a/documentation/coffee/long_arrow.coffee +++ b/documentation/coffee/long_arrow.coffee @@ -3,4 +3,4 @@ Account: customer, cart => this.cart: cart $('.shopping_cart').bind('click') event ==> - this.customer.purchase(this.cart) \ No newline at end of file + this.customer.purchase this.cart \ No newline at end of file diff --git a/documentation/coffee/multiple_return_values.coffee b/documentation/coffee/multiple_return_values.coffee index d175cc8043..ef83ee0f49 100644 --- a/documentation/coffee/multiple_return_values.coffee +++ b/documentation/coffee/multiple_return_values.coffee @@ -2,4 +2,4 @@ weather_report: location => # Make an Ajax request to fetch the weather... [location, 72, "Mostly Sunny"] -[city, temp, forecast]: weather_report("Berkeley, CA") \ No newline at end of file +[city, temp, forecast]: weather_report "Berkeley, CA" \ No newline at end of file diff --git a/documentation/coffee/overview.coffee b/documentation/coffee/overview.coffee index 6c940d9fd2..1b45bb696a 100644 --- a/documentation/coffee/overview.coffee +++ b/documentation/coffee/overview.coffee @@ -20,10 +20,10 @@ math: { # Splats: race: winner, runners... => - print(winner, runners) + print winner, runners # Existence: -alert("I knew it!") if elvis? +alert "I knew it!" if elvis? # Array comprehensions: cubed_list: math.cube(num) for num in list diff --git a/documentation/coffee/range_comprehensions.coffee b/documentation/coffee/range_comprehensions.coffee index 63ee92e2e2..8baa2e8787 100644 --- a/documentation/coffee/range_comprehensions.coffee +++ b/documentation/coffee/range_comprehensions.coffee @@ -3,4 +3,4 @@ countdown: num for num in [10..1] egg_delivery: => for i in [0...eggs.length] by 12 dozen_eggs: eggs[i...i+12] - deliver(new egg_carton(dozen)) + deliver new egg_carton(dozen) diff --git a/documentation/coffee/splats.coffee b/documentation/coffee/splats.coffee index 035b902f51..93ca192dac 100644 --- a/documentation/coffee/splats.coffee +++ b/documentation/coffee/splats.coffee @@ -18,8 +18,8 @@ contenders: [ "Usain Bolt" ] -medalists(contenders...) +medalists contenders... -alert("Gold: " + gold) -alert("Silver: " + silver) -alert("The Field: " + the_field) \ No newline at end of file +alert "Gold: " + gold +alert "Silver: " + silver +alert "The Field: " + the_field \ No newline at end of file diff --git a/documentation/coffee/super.coffee b/documentation/coffee/super.coffee index a64eff39b2..fa58a032a1 100644 --- a/documentation/coffee/super.coffee +++ b/documentation/coffee/super.coffee @@ -1,21 +1,21 @@ Animal: => Animal::move: meters => - alert(this.name + " moved " + meters + "m.") + alert this.name + " moved " + meters + "m." Snake: name => this.name: name Snake extends Animal Snake::move: => - alert("Slithering...") - super(5) + alert "Slithering..." + super 5 Horse: name => this.name: name Horse extends Animal Horse::move: => - alert("Galloping...") - super(45) + alert "Galloping..." + super 45 -sam: new Snake("Sammy the Python") -tom: new Horse("Tommy the Palomino") +sam: new Snake "Sammy the Python" +tom: new Horse "Tommy the Palomino" sam.move() tom.move() diff --git a/documentation/coffee/try.coffee b/documentation/coffee/try.coffee index 169df020af..67f4d19763 100644 --- a/documentation/coffee/try.coffee +++ b/documentation/coffee/try.coffee @@ -2,6 +2,6 @@ try all_hell_breaks_loose() cats_and_dogs_living_together() catch error - print(error) + print error finally clean_up() \ No newline at end of file diff --git a/documentation/js/array_comprehensions.js b/documentation/js/array_comprehensions.js index fae31ce941..85ca79927b 100644 --- a/documentation/js/array_comprehensions.js +++ b/documentation/js/array_comprehensions.js @@ -8,7 +8,7 @@ __a.push(eat(food)); } return __a; - })(); + }).call(this); // Naive collision detection. __d = asteroids; for (__e = 0; __e < __d.length; __e++) { diff --git a/documentation/js/expressions_comprehension.js b/documentation/js/expressions_comprehension.js index 294c3db4ed..01d5ba45a5 100644 --- a/documentation/js/expressions_comprehension.js +++ b/documentation/js/expressions_comprehension.js @@ -10,5 +10,5 @@ } } return __a; - })()).slice(0, 10); + }).call(this)).slice(0, 10); })(); \ No newline at end of file diff --git a/documentation/js/expressions_try.js b/documentation/js/expressions_try.js index b0dcc4460e..79c77e40c7 100644 --- a/documentation/js/expressions_try.js +++ b/documentation/js/expressions_try.js @@ -5,5 +5,5 @@ } catch (error) { return "And the error is ... " + error; } - })()); + }).call(this)); })(); \ No newline at end of file diff --git a/documentation/js/object_comprehensions.js b/documentation/js/object_comprehensions.js index 9c7d3783b9..ddc81f0526 100644 --- a/documentation/js/object_comprehensions.js +++ b/documentation/js/object_comprehensions.js @@ -15,5 +15,5 @@ } } return __a; - })(); + }).call(this); })(); \ No newline at end of file diff --git a/documentation/js/overview.js b/documentation/js/overview.js index 2098e3a30f..97b0f43589 100644 --- a/documentation/js/overview.js +++ b/documentation/js/overview.js @@ -39,5 +39,5 @@ __a.push(math.cube(num)); } return __a; - })(); + }).call(this); })(); \ No newline at end of file diff --git a/documentation/js/range_comprehensions.js b/documentation/js/range_comprehensions.js index 9272dcff38..a67917f4bb 100644 --- a/documentation/js/range_comprehensions.js +++ b/documentation/js/range_comprehensions.js @@ -6,7 +6,7 @@ __a.push(num); } return __a; - })(); + }).call(this); egg_delivery = function egg_delivery() { var __f, __g, __h, __i, __j, dozen_eggs, i; __f = []; __i = 0; __j = eggs.length; @@ -14,7 +14,7 @@ __f.push((function() { dozen_eggs = eggs.slice(i, i + 12); return deliver(new egg_carton(dozen)); - })()); + }).call(this)); } return __f; }; diff --git a/documentation/js/while.js b/documentation/js/while.js index 96a1626e91..ee7f0b06bb 100644 --- a/documentation/js/while.js +++ b/documentation/js/while.js @@ -18,5 +18,5 @@ One fell out and bumped his head."); } return __a; - })(); + }).call(this); })(); \ No newline at end of file diff --git a/index.html b/index.html index 4fe624d3ef..b97f4a35eb 100644 --- a/index.html +++ b/index.html @@ -94,15 +94,15 @@

Mini Overview

math: { root: Math.sqrt square: square - cube: x => x * square(x) + cube: x => x * square(x) } # Splats: -race: winner, runners... => - print(winner, runners) +race: winner, runners... => + print winner, runners # Existence: -alert("I knew it!") if elvis? +alert "I knew it!" if elvis? # Array comprehensions: cubed_list: math.cube(num) for num in list @@ -146,7 +146,7 @@

Mini Overview

__a.push(math.cube(num)); } return __a; -})(); +}).call(this);

@@ -615,7 +615,7 @@

Language Reference

gold: silver: the_field: "unknown"
 
-medalists: first, second, rest... =>
+medalists: first, second, rest... =>
   gold:       first
   silver:     second
   the_field:  rest
@@ -633,11 +633,11 @@ 

Language Reference

"Usain Bolt" ] -medalists(contenders...) +medalists contenders... -alert("Gold: " + gold) -alert("Silver: " + silver) -alert("The Field: " + the_field) +alert "Gold: " + gold +alert "Silver: " + silver +alert "The Field: " + the_field
var contenders, gold, medalists, silver, the_field;
 gold = (silver = (the_field = "unknown"));
 medalists = function medalists(first, second) {
@@ -676,9 +676,9 @@ 

Language Reference

available.

backwards: =>
-  alert(arguments.reverse())
+  alert arguments.reverse()
 
-backwards("stairway", "to", "heaven")
+backwards "stairway", "to", "heaven"
 
var backwards;
 backwards = function backwards() {
   var arguments = Array.prototype.slice.call(arguments, 0);
@@ -729,7 +729,7 @@ 

Language Reference

One fell out and bumped his head."); } return __a; -})(); +}).call(this);

Other JavaScript loops, such as for loops and do-while loops @@ -773,7 +773,7 @@

Language Reference

# Naive collision detection. for roid in asteroids for roid2 in asteroids when roid isnt roid2 - roid.explode() if roid.overlaps(roid2) + roid.explode() if roid.overlaps roid2
var __a, __b, __c, __d, __e, __f, __g, food, lunch, roid, roid2;
 // Eat lunch.
 lunch = (function() {
@@ -783,7 +783,7 @@ 

Language Reference

__a.push(eat(food)); } return __a; -})(); +}).call(this); // Naive collision detection. __d = asteroids; for (__e = 0; __e < __d.length; __e++) { @@ -810,7 +810,7 @@

Language Reference

egg_delivery: => for i in [0...eggs.length] by 12 dozen_eggs: eggs[i...i+12] - deliver(new egg_carton(dozen)) + deliver new egg_carton(dozen)
var __a, __b, __c, __d, __e, countdown, egg_delivery, num;
 countdown = (function() {
   __a = []; __d = 10; __e = 1;
@@ -818,7 +818,7 @@ 

Language Reference

__a.push(num); } return __a; -})(); +}).call(this); egg_delivery = function egg_delivery() { var __f, __g, __h, __i, __j, dozen_eggs, i; __f = []; __i = 0; __j = eggs.length; @@ -826,7 +826,7 @@

Language Reference

__f.push((function() { dozen_eggs = eggs.slice(i, i + 12); return deliver(new egg_carton(dozen)); - })()); + }).call(this)); } return __f; }; @@ -837,7 +837,7 @@

Language Reference

__a.push(num); } return __a; -})(); +}).call(this); egg_delivery = function egg_delivery() { var __f, __g, __h, __i, __j, dozen_eggs, i; __f = []; __i = 0; __j = eggs.length; @@ -845,7 +845,7 @@

Language Reference

__f.push((function() { dozen_eggs = eggs.slice(i, i + 12); return deliver(new egg_carton(dozen)); - })()); + }).call(this)); } return __f; }; @@ -875,7 +875,7 @@

Language Reference

} } return __a; -})(); +}).call(this);

@@ -1012,7 +1012,7 @@

Language Reference

} } return __a; -})()).slice(0, 10); +}).call(this)).slice(0, 10);

As well as silly things, like passing a try/catch statement directly @@ -1042,14 +1042,14 @@

Language Reference

} catch (error) { return "And the error is ... " + error; } -})()); +}).call(this));

There are a handful of statements in JavaScript that can't be meaningfully @@ -1080,22 +1080,22 @@

Language Reference

Animal: =>
 Animal::move: meters =>
-  alert(this.name + " moved " + meters + "m.")
+  alert this.name + " moved " + meters + "m."
 
 Snake: name => this.name: name
 Snake extends Animal
 Snake::move: =>
-  alert("Slithering...")
-  super(5)
+  alert "Slithering..."
+  super 5
 
 Horse: name => this.name: name
 Horse extends Animal
 Horse::move: =>
-  alert("Galloping...")
-  super(45)
+  alert "Galloping..."
+  super 45
 
-sam: new Snake("Sammy the Python")
-tom: new Horse("Tommy the Palomino")
+sam: new Snake "Sammy the Python"
+tom: new Horse "Tommy the Palomino"
 
 sam.move()
 tom.move()
@@ -1186,8 +1186,8 @@ 

Language Reference

final functions easier to pass, CoffeeScript includes block syntax, so you don't have to close the parentheses on the other side.

-
$('table.list').each() table =>
-  $('tr.account', table).each() row =>
+    
$('table.list').each() table =>
+  $('tr.account', table).each() row =>
     row.show()
     row.highlight()
 
$('table.list').each(function(table) {
@@ -1238,7 +1238,7 @@ 

Language Reference

# Make an Ajax request to fetch the weather... [location, 72, "Mostly Sunny"] -[city, temp, forecast]: weather_report("Berkeley, CA") +[city, temp, forecast]: weather_report "Berkeley, CA"
var __a, city, forecast, temp, weather_report;
 weather_report = function weather_report(location) {
   // Make an Ajax request to fetch the weather...
@@ -1320,8 +1320,8 @@ 

Language Reference

this.customer: customer this.cart: cart - $('.shopping_cart').bind('click') event ==> - this.customer.purchase(this.cart) + $('.shopping_cart').bind('click') event ==> + this.customer.purchase this.cart
var Account;
 Account = function Account(customer, cart) {
   var __a;
@@ -1412,7 +1412,7 @@ 

Language Reference

all_hell_breaks_loose() cats_and_dogs_living_together() catch error - print(error) + print error finally clean_up()
try {
@@ -1478,11 +1478,11 @@ 

Language Reference

indentation level that begins the heredoc is maintained throughout, so you can keep it all aligned with the body of your code.

-
html: '''
+    
html: '''
       <strong>
         cup of coffeescript
       </strong>
-      '''
+      '''
 
var html;
 html = "<strong>\n  cup of coffeescript\n</strong>";
 

From f393b1c89725d67d217e610577b83cf8bcc334ba Mon Sep 17 00:00:00 2001 From: Jeffery Olson Date: Mon, 25 Jan 2010 07:38:34 -0800 Subject: [PATCH 16/32] adding vim syntax file in a new "extras" folder - also added a VIM-SYNTAX-HOWTO.md readme file --- extras/VIM-SYNTAX-HOWTO.md | 21 +++++++ extras/coffee.vim | 111 +++++++++++++++++++++++++++++++++++++ 2 files changed, 132 insertions(+) create mode 100644 extras/VIM-SYNTAX-HOWTO.md create mode 100644 extras/coffee.vim diff --git a/extras/VIM-SYNTAX-HOWTO.md b/extras/VIM-SYNTAX-HOWTO.md new file mode 100644 index 0000000000..cf43afa64f --- /dev/null +++ b/extras/VIM-SYNTAX-HOWTO.md @@ -0,0 +1,21 @@ +##Syntax Highlighting For .coffee Files in vim72 + +After copying the coffee.vim file into the `syntax` directory for your vim72 install, you have two options for enabling syntax highlighting of .coffee files + +### Manually + +In the vim console, do: + + :set syntax=coffee + +### Automagically +The "least intrusive" way to add syntax highlighting for `.coffee` files in vim72 is to create a file (named, say, `filetype.vim`) in your `~/.vim` (or platform appropriate) folder. In it, you would put someting like: + + if exists("did_load_filetypes") + finish + end + augroup filetypedetect + au! BufRead,BufNewFile *.coffee setfiletype coffee + augroup END + +And the next time you open a `.coffee` file, voila! diff --git a/extras/coffee.vim b/extras/coffee.vim new file mode 100644 index 0000000000..e0999d89f4 --- /dev/null +++ b/extras/coffee.vim @@ -0,0 +1,111 @@ +" Vim syntax file +" Language: CoffeeScript +" Maintainer: Jeff Olson +" URL: http://github.com/olsonjeffery +" Changes: (jro) initial port from javascript +" Last Change: 2006 Jun 19 +" Adaptation of javascript.vim syntax file (distro'd w/ vim72), +" maintained by Claudio Fleiner +" with updates from Scott Shattuck (ss) + +if !exists("main_syntax") + if version < 600 + syntax clear + elseif exists("b:current_syntax") + finish + endif + let main_syntax = 'coffee' +endif + +syn case ignore + +syn match coffeeLineComment "#.*" contains=@Spell,CoffeeCommentTodo +syn match coffeeSpecial "\\\d\d\d\|\\." +syn region coffeeStringD start=+"+ skip=+\\\\\|\\"+ end=+"\|$+ contains=coffeeSpecial,@htmlPreproc +syn region coffeeStringS start=+'+ skip=+\\\\\|\\'+ end=+'\|$+ contains=coffeeSpecial,@htmlPreproc + +syn match coffeeSpecialCharacter "'\\.'" +syn match coffeeNumber "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>" +syn region coffeeRegexpString start=+/[^/*]+me=e-1 skip=+\\\\\|\\/+ end=+/[gi]\{0,2\}\s*$+ end=+/[gi]\{0,2\}\s*[;.,)\]}]+me=e-1 contains=@htmlPreproc oneline + +syn match coffeePrototypeAccess "::" +syn match coffeeFunction "=>" + +syn keyword coffeeExtends extends +syn keyword coffeeConditional if else switch then +syn keyword coffeeRepeat while for in of +syn keyword coffeeBranch break continue +syn keyword coffeeOperator delete instanceof typeof +syn keyword coffeeType Array Boolean Date Function Number Object String RegExp +syn keyword coffeeStatement return with +syn keyword coffeeBoolean true false +syn keyword coffeeNull null undefined +syn keyword coffeeIdentifier arguments this var +syn keyword coffeeLabel case default +syn keyword coffeeException try catch finally throw +syn keyword coffeeMessage alert confirm prompt status +syn keyword coffeeGlobal self window top parent +syn keyword coffeeMember document event location +syn keyword coffeeDeprecated escape unescape +syn keyword coffeeReserved abstract boolean byte char class const debugger double enum export final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile + +syn sync fromstart +syn sync maxlines=100 + +if main_syntax == "coffee" + syn sync ccomment coffeeComment +endif + +" Define the default highlighting. +" For version 5.7 and earlier: only when not done already +" For version 5.8 and later: only when an item doesn't have highlighting yet +if version >= 508 || !exists("did_coffee_syn_inits") + if version < 508 + let did_coffee_syn_inits = 1 + command -nargs=+ HiLink hi link + else + command -nargs=+ HiLink hi def link + endif + HiLink coffeePrototypeAccess Keyword + HiLink coffeeExtends Keyword + HiLink coffeeLineComment Comment + HiLink coffeeSpecial Special + HiLink coffeeStringS String + HiLink coffeeStringD String + HiLink coffeeCharacter Character + HiLink coffeeSpecialCharacter coffeeSpecial + HiLink coffeeNumber coffeeValue + HiLink coffeeConditional Conditional + HiLink coffeeRepeat Repeat + HiLink coffeeBranch Conditional + HiLink coffeeOperator Operator + HiLink coffeeType Type + HiLink coffeeStatement Statement + HiLink coffeeFunction Function + HiLink coffeeBraces Function + HiLink coffeeError Error + HiLink coffeeScrParenError coffeeError + HiLink coffeeNull Keyword + HiLink coffeeBoolean Boolean + HiLink coffeeRegexpString String + + HiLink coffeeIdentifier Identifier + HiLink coffeeLabel Label + HiLink coffeeException Exception + HiLink coffeeMessage Keyword + HiLink coffeeGlobal Keyword + HiLink coffeeMember Keyword + HiLink coffeeDeprecated Exception + HiLink coffeeReserved Keyword + HiLink coffeeDebug Debug + HiLink coffeeConstant Label + + delcommand HiLink +endif + +let b:current_syntax = "coffee" +if main_syntax == 'coffee' + unlet main_syntax +endif + +" vim: ts=8 From 91e703052c756c78986960e0a23b7bea4e9e0d2d Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Mon, 25 Jan 2010 20:52:33 -0500 Subject: [PATCH 17/32] fixing chained single-line if-elses with a smarter rewriter. --- lib/coffee_script/rewriter.rb | 6 ++++-- test/fixtures/execution/test_fancy_if_statement.coffee | 8 +++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/lib/coffee_script/rewriter.rb b/lib/coffee_script/rewriter.rb index a710bbec3b..1b802822d7 100644 --- a/lib/coffee_script/rewriter.rb +++ b/lib/coffee_script/rewriter.rb @@ -127,6 +127,7 @@ def add_implicit_indentation scan_tokens do |prev, token, post, i| next 1 unless SINGLE_LINERS.include?(token[0]) && post[0] != :INDENT && !(token[0] == :ELSE && post[0] == :IF) # Elsifs shouldn't get blocks. + starter = token[0] line = token[1].line @tokens.insert(i + 1, [:INDENT, Value.new(2, line)]) idx = i + 1 @@ -134,8 +135,9 @@ def add_implicit_indentation loop do idx += 1 tok = @tokens[idx] - if !tok || SINGLE_CLOSERS.include?(tok[0]) || - (tok[0] == ')' && parens == 0) + if (!tok || SINGLE_CLOSERS.include?(tok[0]) || + (tok[0] == ')' && parens == 0)) && + !(starter == :ELSE && tok[0] == :ELSE) @tokens.insert(idx, [:OUTDENT, Value.new(2, line)]) break end diff --git a/test/fixtures/execution/test_fancy_if_statement.coffee b/test/fixtures/execution/test_fancy_if_statement.coffee index d877698b79..f71dd51193 100644 --- a/test/fixtures/execution/test_fancy_if_statement.coffee +++ b/test/fixtures/execution/test_fancy_if_statement.coffee @@ -7,4 +7,10 @@ result: if a if d true -print result \ No newline at end of file +print result + + +first: if false then false else second: if false then false else true + +print first +print second \ No newline at end of file From d6e206b4206b651a3009b9eacbd10467aac8ea6e Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Mon, 25 Jan 2010 21:07:18 -0500 Subject: [PATCH 18/32] adding line number info to unclosed parens, objects, arrays, and indents --- lib/coffee_script/command_line.rb | 2 +- lib/coffee_script/parse_error.rb | 10 +++++----- lib/coffee_script/rewriter.rb | 6 ++++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/lib/coffee_script/command_line.rb b/lib/coffee_script/command_line.rb index 30ad1e11a0..ada64f1b06 100644 --- a/lib/coffee_script/command_line.rb +++ b/lib/coffee_script/command_line.rb @@ -141,7 +141,7 @@ def compile(script, source='error') options[:no_wrap] = true if @options[:no_wrap] options[:globals] = true if @options[:globals] CoffeeScript.compile(script, options) - rescue CoffeeScript::ParseError, SyntaxError => e + rescue CoffeeScript::ParseError => e STDERR.puts "#{source}: #{e.message}" exit(1) unless @options[:watch] nil diff --git a/lib/coffee_script/parse_error.rb b/lib/coffee_script/parse_error.rb index 6fbc86d127..0f23bc922d 100644 --- a/lib/coffee_script/parse_error.rb +++ b/lib/coffee_script/parse_error.rb @@ -11,16 +11,16 @@ class ParseError < Racc::ParseError "\n" => 'newline' } - def initialize(token_id, value, stack) - @token_id, @value, @stack = token_id, value, stack + def initialize(token_id, value, stack=nil, message=nil) + @token_id, @value, @stack, @message = token_id, value, stack, message end def message line = @value.respond_to?(:line) ? @value.line : "END" line_part = "line #{line}:" - id_part = @token_id != @value.inspect ? ", unexpected #{@token_id.to_s.downcase}" : "" - val_part = " for #{TOKEN_MAP[@value.to_s] || "'#{@value}'"}" - "#{line_part} syntax error#{val_part}#{id_part}" + id_part = @token_id != @value.to_s ? "unexpected #{@token_id.to_s.downcase}" : "" + val_part = @message || "for #{TOKEN_MAP[@value.to_s] || "'#{@value}'"}" + "#{line_part} syntax error, #{val_part}#{id_part}" end alias_method :inspect, :message diff --git a/lib/coffee_script/rewriter.rb b/lib/coffee_script/rewriter.rb index 1b802822d7..964aa191e2 100644 --- a/lib/coffee_script/rewriter.rb +++ b/lib/coffee_script/rewriter.rb @@ -171,18 +171,20 @@ def add_implicit_parentheses # Ensure that all listed pairs of tokens are correctly balanced throughout # the course of the token stream. def ensure_balance(*pairs) - levels = Hash.new(0) + levels, lines = Hash.new(0), Hash.new scan_tokens do |prev, token, post, i| pairs.each do |pair| open, close = *pair levels[open] += 1 if token[0] == open levels[open] -= 1 if token[0] == close + lines[token[0]] = token[1].line raise ParseError.new(token[0], token[1], nil) if levels[open] < 0 end next 1 end unclosed = levels.detect {|k, v| v > 0 } - raise SyntaxError, "unclosed '#{unclosed[0]}'" if unclosed + sym = unclosed && unclosed[0] + raise ParseError.new(sym, Value.new(sym, lines[sym]), nil, "unclosed '#{sym}'") if unclosed end # We'd like to support syntax like this: From 8efcaf6eec74a3b5d58f161f5f602d64f471cccf Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Mon, 25 Jan 2010 22:22:39 -0500 Subject: [PATCH 19/32] moved CoffeeScript.tmbundle to extras and rewrote the installation instructions in plain text --- Rakefile | 2 +- coffee-script.gemspec | 3 ++- .../Preferences/CoffeeScript.tmPreferences | 0 .../Syntaxes/CoffeeScript.tmLanguage | 0 .../CoffeeScript.tmbundle/info.plist | 0 extras/EXTRAS | 20 ++++++++++++++++++ extras/VIM-SYNTAX-HOWTO.md | 21 ------------------- lib/coffee_script/command_line.rb | 8 ++++--- 8 files changed, 28 insertions(+), 26 deletions(-) rename {lib/coffee_script => extras}/CoffeeScript.tmbundle/Preferences/CoffeeScript.tmPreferences (100%) rename {lib/coffee_script => extras}/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage (100%) rename {lib/coffee_script => extras}/CoffeeScript.tmbundle/info.plist (100%) create mode 100644 extras/EXTRAS delete mode 100644 extras/VIM-SYNTAX-HOWTO.md diff --git a/Rakefile b/Rakefile index 8505900249..ce2a0b9783 100644 --- a/Rakefile +++ b/Rakefile @@ -25,7 +25,7 @@ namespace :build do desc "Compile and install the Ultraviolet syntax highlighter" task :ultraviolet do - sh "plist2syntax lib/coffee_script/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage" + sh "plist2syntax extras/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage" sh "sudo mv coffeescript.yaml /usr/local/lib/ruby/gems/1.8/gems/ultraviolet-0.10.2/syntax/coffeescript.syntax" end diff --git a/coffee-script.gemspec b/coffee-script.gemspec index df04ad5e5f..f8a1c08a3a 100644 --- a/coffee-script.gemspec +++ b/coffee-script.gemspec @@ -22,5 +22,6 @@ Gem::Specification.new do |s| s.require_paths = ['lib'] s.executables = ['coffee'] - s.files = Dir['bin/*', 'examples/*', 'lib/**/*', 'coffee-script.gemspec', 'LICENSE', 'README', 'package.json'] + s.files = Dir['bin/*', 'examples/*', 'extras/**/*', 'lib/**/*', + 'coffee-script.gemspec', 'LICENSE', 'README', 'package.json'] end \ No newline at end of file diff --git a/lib/coffee_script/CoffeeScript.tmbundle/Preferences/CoffeeScript.tmPreferences b/extras/CoffeeScript.tmbundle/Preferences/CoffeeScript.tmPreferences similarity index 100% rename from lib/coffee_script/CoffeeScript.tmbundle/Preferences/CoffeeScript.tmPreferences rename to extras/CoffeeScript.tmbundle/Preferences/CoffeeScript.tmPreferences diff --git a/lib/coffee_script/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage b/extras/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage similarity index 100% rename from lib/coffee_script/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage rename to extras/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage diff --git a/lib/coffee_script/CoffeeScript.tmbundle/info.plist b/extras/CoffeeScript.tmbundle/info.plist similarity index 100% rename from lib/coffee_script/CoffeeScript.tmbundle/info.plist rename to extras/CoffeeScript.tmbundle/info.plist diff --git a/extras/EXTRAS b/extras/EXTRAS new file mode 100644 index 0000000000..d555e3fb76 --- /dev/null +++ b/extras/EXTRAS @@ -0,0 +1,20 @@ +This folder includes rough cuts of CoffeeScript syntax highlighters for +TextMate and Vim. Improvements to their lexing ability are always welcome. + +To install the TextMate bundle, run `bin/coffee --install-bundle`, or drop it +into "~/Library/Application Support/TextMate/Bundles". + +To install the Vim highlighter, copy "coffee.vim" into the "syntax" directory of +your vim72, and enable it in either of the following two ways: + + * Manually, by running `:set syntax=coffee` + + * Or automatically, by creating a "filetype.vim" file within "~/.vim", which + contains something along these lines: + + if exists("did_load_filetypes") + finish + end + augroup filetypedetect + au! BufRead,BufNewFile *.coffee setfiletype coffee + augroup END diff --git a/extras/VIM-SYNTAX-HOWTO.md b/extras/VIM-SYNTAX-HOWTO.md deleted file mode 100644 index cf43afa64f..0000000000 --- a/extras/VIM-SYNTAX-HOWTO.md +++ /dev/null @@ -1,21 +0,0 @@ -##Syntax Highlighting For .coffee Files in vim72 - -After copying the coffee.vim file into the `syntax` directory for your vim72 install, you have two options for enabling syntax highlighting of .coffee files - -### Manually - -In the vim console, do: - - :set syntax=coffee - -### Automagically -The "least intrusive" way to add syntax highlighting for `.coffee` files in vim72 is to create a file (named, say, `filetype.vim`) in your `~/.vim` (or platform appropriate) folder. In it, you would put someting like: - - if exists("did_load_filetypes") - finish - end - augroup filetypedetect - au! BufRead,BufNewFile *.coffee setfiletype coffee - augroup END - -And the next time you open a `.coffee` file, voila! diff --git a/lib/coffee_script/command_line.rb b/lib/coffee_script/command_line.rb index ada64f1b06..2427169a1c 100644 --- a/lib/coffee_script/command_line.rb +++ b/lib/coffee_script/command_line.rb @@ -25,9 +25,11 @@ class CommandLine # Seconds to pause between checks for changed source files. WATCH_INTERVAL = 0.5 + # Path to the root of the CoffeeScript install. + ROOT = File.expand_path(File.dirname(__FILE__) + '/../..') + # Command to execute in Narwhal - PACKAGE = File.expand_path(File.dirname(__FILE__) + '/../..') - LAUNCHER = "narwhal -p #{PACKAGE} -e 'require(\"coffee-script\").run(system.args);'" + LAUNCHER = "narwhal -p #{ROOT} -e 'require(\"coffee-script\").run(system.args);'" # Run the CommandLine off the contents of ARGV. def initialize @@ -159,7 +161,7 @@ def path_for(source) # Install the CoffeeScript TextMate bundle to ~/Library. def install_bundle bundle_dir = File.expand_path('~/Library/Application Support/TextMate/Bundles/') - FileUtils.cp_r(File.dirname(__FILE__) + '/CoffeeScript.tmbundle', bundle_dir) + FileUtils.cp_r("#{ROOT}/extras/CoffeeScript.tmbundle", bundle_dir) end # Use OptionParser for all the options. From 63b44a2b0368fa25024f8f97438f73adbffaca34 Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Mon, 25 Jan 2010 22:44:36 -0500 Subject: [PATCH 20/32] odd and even were backwards --- examples/code.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/code.coffee b/examples/code.coffee index 4917d0feee..4cc02b7289 100644 --- a/examples/code.coffee +++ b/examples/code.coffee @@ -3,9 +3,9 @@ square: x => x * x sum: x, y => x + y -odd: x => x % 2 is 0 +odd: x => x % 2 isnt 0 -even: x => x % 2 isnt 0 +even: x => x % 2 is 0 run_loop: => fire_events(e => e.stopPropagation()) From 460b3f6d8e58e326d84437f93cb05e79970baaf2 Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Tue, 26 Jan 2010 00:40:58 -0500 Subject: [PATCH 21/32] first draft of mandatory parentheses around function definition param lists -- all tests pass --- documentation/coffee/arguments.coffee | 2 +- documentation/coffee/blocks.coffee | 4 +- documentation/coffee/expressions.coffee | 2 +- documentation/coffee/functions.coffee | 4 +- documentation/coffee/long_arrow.coffee | 4 +- .../coffee/multiple_return_values.coffee | 2 +- documentation/coffee/overview.coffee | 6 +- .../coffee/range_comprehensions.coffee | 2 +- documentation/coffee/scope.coffee | 2 +- documentation/coffee/splats.coffee | 2 +- documentation/coffee/super.coffee | 12 +- documentation/index.html.erb | 9 +- examples/beautiful_code/binary_search.coffee | 2 +- .../beautiful_code/quicksort_runtime.coffee | 2 +- .../regular_expression_matcher.coffee | 6 +- examples/code.coffee | 34 +- .../computer_science/binary_search.coffee | 2 +- examples/computer_science/bubble_sort.coffee | 2 +- examples/computer_science/linked_list.coffee | 14 +- .../computer_science/luhn_algorithm.coffee | 2 +- examples/computer_science/merge_sort.coffee | 2 +- .../computer_science/selection_sort.coffee | 2 +- examples/documents.coffee | 72 - examples/poignant.coffee | 30 +- examples/potion.coffee | 22 +- examples/syntax_errors.coffee | 20 - examples/underscore.coffee | 200 +- .../Syntaxes/CoffeeScript.tmLanguage | 29 +- index.html | 51 +- lib/coffee_script/grammar.y | 8 +- lib/coffee_script/lexer.rb | 12 +- .../narwhal/coffee-script.coffee | 12 +- lib/coffee_script/narwhal/loader.coffee | 6 +- lib/coffee_script/parse_error.rb | 2 +- lib/coffee_script/parser.rb | 2235 ++++++++--------- lib/coffee_script/rewriter.rb | 15 +- test/fixtures/execution/test_arguments.coffee | 6 +- .../execution/test_array_comprehension.coffee | 2 +- .../fixtures/execution/test_assignment.coffee | 2 +- test/fixtures/execution/test_blocks.coffee | 2 +- .../execution/test_calling_super.coffee | 22 +- .../execution/test_chained_calls.coffee | 3 +- .../fixtures/execution/test_everything.coffee | 4 +- test/fixtures/execution/test_existence.coffee | 2 +- .../execution/test_expressions.coffee | 4 +- test/fixtures/execution/test_functions.coffee | 22 +- .../execution/test_funky_comments.coffee | 4 +- test/fixtures/execution/test_literals.coffee | 4 +- .../fixtures/execution/test_operations.coffee | 2 +- test/fixtures/execution/test_splats.coffee | 4 +- test/fixtures/execution/test_switch.coffee | 2 +- test/fixtures/generation/each.coffee | 2 +- test/fixtures/generation/each.tokens | 2 +- .../statements_as_expressions.coffee | 2 +- test/fixtures/generation/whitespace.coffee | 12 +- test/unit/test_lexer.rb | 5 +- test/unit/test_parser.rb | 2 +- 57 files changed, 1389 insertions(+), 1554 deletions(-) delete mode 100644 examples/documents.coffee delete mode 100644 examples/syntax_errors.coffee diff --git a/documentation/coffee/arguments.coffee b/documentation/coffee/arguments.coffee index afee37415a..55c83348e4 100644 --- a/documentation/coffee/arguments.coffee +++ b/documentation/coffee/arguments.coffee @@ -1,4 +1,4 @@ -backwards: => +backwards: () => alert arguments.reverse() backwards "stairway", "to", "heaven" \ No newline at end of file diff --git a/documentation/coffee/blocks.coffee b/documentation/coffee/blocks.coffee index 6f31ee164c..a80196b306 100644 --- a/documentation/coffee/blocks.coffee +++ b/documentation/coffee/blocks.coffee @@ -1,4 +1,4 @@ -$('table.list').each() table => - $('tr.account', table).each() row => +$('table.list').each (table) => + $('tr.account', table).each (row) => row.show() row.highlight() diff --git a/documentation/coffee/expressions.coffee b/documentation/coffee/expressions.coffee index fa0c1e3af4..f74f84427e 100644 --- a/documentation/coffee/expressions.coffee +++ b/documentation/coffee/expressions.coffee @@ -1,4 +1,4 @@ -grade: student => +grade: (student) => if student.excellent_work "A+" else if student.okay_stuff diff --git a/documentation/coffee/functions.coffee b/documentation/coffee/functions.coffee index ccc9401df5..3d00c8f1b3 100644 --- a/documentation/coffee/functions.coffee +++ b/documentation/coffee/functions.coffee @@ -1,2 +1,2 @@ -square: x => x * x -cube: x => square(x) * x +square: (x) => x * x +cube: (x) => square(x) * x diff --git a/documentation/coffee/long_arrow.coffee b/documentation/coffee/long_arrow.coffee index 3b6e65042a..90c3373187 100644 --- a/documentation/coffee/long_arrow.coffee +++ b/documentation/coffee/long_arrow.coffee @@ -1,6 +1,6 @@ -Account: customer, cart => +Account: (customer, cart) => this.customer: customer this.cart: cart - $('.shopping_cart').bind('click') event ==> + $('.shopping_cart').bind('click') (event) ==> this.customer.purchase this.cart \ No newline at end of file diff --git a/documentation/coffee/multiple_return_values.coffee b/documentation/coffee/multiple_return_values.coffee index ef83ee0f49..116f8b534c 100644 --- a/documentation/coffee/multiple_return_values.coffee +++ b/documentation/coffee/multiple_return_values.coffee @@ -1,4 +1,4 @@ -weather_report: location => +weather_report: (location) => # Make an Ajax request to fetch the weather... [location, 72, "Mostly Sunny"] diff --git a/documentation/coffee/overview.coffee b/documentation/coffee/overview.coffee index 1b45bb696a..0d8cd4d503 100644 --- a/documentation/coffee/overview.coffee +++ b/documentation/coffee/overview.coffee @@ -6,7 +6,7 @@ opposite_day: true number: -42 if opposite_day # Functions: -square: x => x * x +square: (x) => x * x # Arrays: list: [1, 2, 3, 4, 5] @@ -15,11 +15,11 @@ list: [1, 2, 3, 4, 5] math: { root: Math.sqrt square: square - cube: x => x * square(x) + cube: (x) => x * square x } # Splats: -race: winner, runners... => +race: (winner, runners...) => print winner, runners # Existence: diff --git a/documentation/coffee/range_comprehensions.coffee b/documentation/coffee/range_comprehensions.coffee index 8baa2e8787..9b10f15571 100644 --- a/documentation/coffee/range_comprehensions.coffee +++ b/documentation/coffee/range_comprehensions.coffee @@ -1,6 +1,6 @@ countdown: num for num in [10..1] -egg_delivery: => +egg_delivery: () => for i in [0...eggs.length] by 12 dozen_eggs: eggs[i...i+12] deliver new egg_carton(dozen) diff --git a/documentation/coffee/scope.coffee b/documentation/coffee/scope.coffee index b074dad293..4ae8401dec 100644 --- a/documentation/coffee/scope.coffee +++ b/documentation/coffee/scope.coffee @@ -1,5 +1,5 @@ num: 1 -change_numbers: => +change_numbers: () => new_num: -1 num: 10 new_num: change_numbers() \ No newline at end of file diff --git a/documentation/coffee/splats.coffee b/documentation/coffee/splats.coffee index 93ca192dac..ad919a5ca1 100644 --- a/documentation/coffee/splats.coffee +++ b/documentation/coffee/splats.coffee @@ -1,6 +1,6 @@ gold: silver: the_field: "unknown" -medalists: first, second, rest... => +medalists: (first, second, rest...) => gold: first silver: second the_field: rest diff --git a/documentation/coffee/super.coffee b/documentation/coffee/super.coffee index fa58a032a1..7cedbf4451 100644 --- a/documentation/coffee/super.coffee +++ b/documentation/coffee/super.coffee @@ -1,16 +1,16 @@ -Animal: => -Animal::move: meters => +Animal: () => +Animal::move: (meters) => alert this.name + " moved " + meters + "m." -Snake: name => this.name: name +Snake: (name) => this.name: name Snake extends Animal -Snake::move: => +Snake::move: () => alert "Slithering..." super 5 -Horse: name => this.name: name +Horse: (name) => this.name: name Horse extends Animal -Horse::move: => +Horse::move: () => alert "Galloping..." super 45 diff --git a/documentation/index.html.erb b/documentation/index.html.erb index fa561d35de..34f23c02d2 100644 --- a/documentation/index.html.erb +++ b/documentation/index.html.erb @@ -174,7 +174,7 @@ gem install coffee-script
-e, --eval Compile and print a little snippet of CoffeeScript directly from the - command line (or from stdin). For example:
coffee -e "square: x => x * x" + command line (or from stdin). For example:
coffee -e "square: (x) => x * x" @@ -262,7 +262,7 @@ coffee --print app/scripts/*.coffee > concatenation.js
<%= code_for('functions', 'cube(5)') %>

If you'd like to create an anonymous function, just wrap it in parentheses: - (x => x * x) + ((x) => x * x)

@@ -522,11 +522,6 @@ coffee --print app/scripts/*.coffee > concatenation.js

so you don't have to close the parentheses on the other side.

<%= code_for('blocks') %> -

- If you prefer not to use blocks, you'll need to add a pair of parentheses - to help distinguish the arguments from the definition of the function: - _.map(array, (num => num * 2)) -

Pattern Matching (Destructuring Assignment) diff --git a/examples/beautiful_code/binary_search.coffee b/examples/beautiful_code/binary_search.coffee index 92e674096c..2c65982526 100644 --- a/examples/beautiful_code/binary_search.coffee +++ b/examples/beautiful_code/binary_search.coffee @@ -2,7 +2,7 @@ # The implementation of binary search that is tested. # Return the index of an element in a sorted list. (or -1, if not present) -index: list, target => +index: (list, target) => [low, high]: [0, list.length] while low < high mid: (low + high) >> 1 diff --git a/examples/beautiful_code/quicksort_runtime.coffee b/examples/beautiful_code/quicksort_runtime.coffee index bbba050443..2d1dc0b68d 100644 --- a/examples/beautiful_code/quicksort_runtime.coffee +++ b/examples/beautiful_code/quicksort_runtime.coffee @@ -1,7 +1,7 @@ # Beautiful Code, Chapter 3. # Produces the expected runtime of Quicksort, for every integer from 1 to N. -runtime: N => +runtime: (N) => [sum, t]: [0, 0] for n in [1..N] sum += 2 * t diff --git a/examples/beautiful_code/regular_expression_matcher.coffee b/examples/beautiful_code/regular_expression_matcher.coffee index da6bd6962c..7f67840277 100644 --- a/examples/beautiful_code/regular_expression_matcher.coffee +++ b/examples/beautiful_code/regular_expression_matcher.coffee @@ -3,7 +3,7 @@ # '.', '^', '$', and '*'. # Search for the regexp anywhere in the text. -match: regexp, text => +match: (regexp, text) => return match_here(regexp.slice(1), text) if regexp[0] is '^' while text return true if match_here(regexp, text) @@ -11,7 +11,7 @@ match: regexp, text => false # Search for the regexp at the beginning of the text. -match_here: regexp, text => +match_here: (regexp, text) => [cur, next]: [regexp[0], regexp[1]] if regexp.length is 0 then return true if next is '*' then return match_star(cur, regexp.slice(2), text) @@ -20,7 +20,7 @@ match_here: regexp, text => false # Search for a kleene star match at the beginning of the text. -match_star: c, regexp, text => +match_star: (c, regexp, text) => while true return true if match_here(regexp, text) return false unless text and (text[0] is c or c is '.') diff --git a/examples/code.coffee b/examples/code.coffee index 4cc02b7289..df8d54bdce 100644 --- a/examples/code.coffee +++ b/examples/code.coffee @@ -1,14 +1,14 @@ # Functions: -square: x => x * x +square: (x) => x * x -sum: x, y => x + y +sum: (x, y) => x + y -odd: x => x % 2 isnt 0 +odd: (x) => x % 2 isnt 0 -even: x => x % 2 is 0 +even: (x) => x % 2 is 0 -run_loop: => - fire_events(e => e.stopPropagation()) +run_loop: () => + fire_events((e) => e.stopPropagation()) listen() wait() @@ -22,14 +22,14 @@ spaced_out_multiline_object: { three: new Idea() inner_obj: { - freedom: => _.freedom() + freedom: () => _.freedom() } } # Arrays: stooges: [{moe: 45}, {curly: 43}, {larry: 46}] -exponents: [(x => x), (x => x * x), (x => x * x * x)] +exponents: [(x) => x, (x) => x * x, (x) => x * x * x] empty: [] @@ -54,7 +54,7 @@ decoration: medal_of_honor if war_hero go_to_sleep() unless coffee # Returning early: -race: => +race: () => run() walk() crawl() @@ -103,7 +103,7 @@ while true # Lexical scoping. v_1: 5 -change_a_and_set_b: => +change_a_and_set_b: () => v_1: 10 v_2: 15 v_2: 20 @@ -128,7 +128,7 @@ activity: switch day else go_to_work() # Semicolons can optionally be used instead of newlines. -wednesday: => eat_breakfast(); go_to_work(); eat_dinner() +wednesday: () => eat_breakfast(); go_to_work(); eat_dinner() # Array slice literals. zero_to_nine: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] @@ -140,19 +140,19 @@ sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad." # Inheritance and calling super. -Animal: => -Animal::move: meters => +Animal: () => +Animal::move: (meters) => alert(this.name + " moved " + meters + "m.") -Snake: name => this.name: name +Snake: (name) => this.name: name Snake extends Animal -Snake::move: => +Snake::move: () => alert('Slithering...') super(5) -Horse: name => this.name: name +Horse: (name) => this.name: name Horse extends Animal -Horse::move: => +Horse::move: () => alert('Galloping...') super(45) diff --git a/examples/computer_science/binary_search.coffee b/examples/computer_science/binary_search.coffee index e5447fa42c..8b07f7a551 100644 --- a/examples/computer_science/binary_search.coffee +++ b/examples/computer_science/binary_search.coffee @@ -1,5 +1,5 @@ # Uses a binary search algorithm to locate a value in the specified array. -binary_search: items, value => +binary_search: (items, value) => start: 0 stop: items.length - 1 diff --git a/examples/computer_science/bubble_sort.coffee b/examples/computer_science/bubble_sort.coffee index f55787800c..0d9a3aca39 100644 --- a/examples/computer_science/bubble_sort.coffee +++ b/examples/computer_science/bubble_sort.coffee @@ -1,5 +1,5 @@ # A bubble sort implementation, sorting the given array in-place. -bubble_sort: list => +bubble_sort: (list) => for i in [0...list.length] for j in [0...list.length - i] [list[j], list[j+1]]: [list[j+1], list[j]] if list[j] > list[j+1] diff --git a/examples/computer_science/linked_list.coffee b/examples/computer_science/linked_list.coffee index f63da641b3..7154f71d07 100644 --- a/examples/computer_science/linked_list.coffee +++ b/examples/computer_science/linked_list.coffee @@ -1,11 +1,11 @@ # "Classic" linked list implementation that doesn't keep track of its size. -LinkedList: => +LinkedList: () => this._head: null # Pointer to the first item in the list. # Appends some data to the end of the list. This method traverses the existing # list and places the value at the end in a new node. -LinkedList::add: data => +LinkedList::add: (data) => # Create a new node object to wrap the data. node: {data: data, next: null} @@ -20,7 +20,7 @@ LinkedList::add: data => # Retrieves the data at the given position in the list. -LinkedList::item: index => +LinkedList::item: (index) => # Check for out-of-bounds values. return null if index < 0 @@ -36,7 +36,7 @@ LinkedList::item: index => # Remove the item from the given location in the list. -LinkedList::remove: index => +LinkedList::remove: (index) => # Check for out-of-bounds values. return null if index < 0 @@ -60,7 +60,7 @@ LinkedList::remove: index => # Calculate the number of items in the list. -LinkedList::size: => +LinkedList::size: () => current: this._head count: 0 @@ -72,7 +72,7 @@ LinkedList::size: => # Convert the list into an array. -LinkedList::toArray: => +LinkedList::toArray: () => result: [] current: this._head @@ -84,7 +84,7 @@ LinkedList::toArray: => # The string representation of the linked list. -LinkedList::toString: => this.toArray().toString() +LinkedList::toString: () => this.toArray().toString() # Tests. diff --git a/examples/computer_science/luhn_algorithm.coffee b/examples/computer_science/luhn_algorithm.coffee index 2398fb2611..ce3a78da07 100644 --- a/examples/computer_science/luhn_algorithm.coffee +++ b/examples/computer_science/luhn_algorithm.coffee @@ -2,7 +2,7 @@ # numbers, national insurance numbers, etc. # See: http://en.wikipedia.org/wiki/Luhn_algorithm -is_valid_identifier: identifier => +is_valid_identifier: (identifier) => sum: 0 alt: false diff --git a/examples/computer_science/merge_sort.coffee b/examples/computer_science/merge_sort.coffee index ac8d0fe22a..4df0a59db8 100644 --- a/examples/computer_science/merge_sort.coffee +++ b/examples/computer_science/merge_sort.coffee @@ -1,5 +1,5 @@ # Sorts an array in ascending natural order using merge sort. -merge_sort: list => +merge_sort: (list) => return list if list.length is 1 diff --git a/examples/computer_science/selection_sort.coffee b/examples/computer_science/selection_sort.coffee index e8b3b53e88..c134b225d9 100644 --- a/examples/computer_science/selection_sort.coffee +++ b/examples/computer_science/selection_sort.coffee @@ -1,5 +1,5 @@ # An in-place selection sort. -selection_sort: list => +selection_sort: (list) => len: list.length # For each item in the list. diff --git a/examples/documents.coffee b/examples/documents.coffee deleted file mode 100644 index 31d38d8ed4..0000000000 --- a/examples/documents.coffee +++ /dev/null @@ -1,72 +0,0 @@ -# Document Model -dc.model.Document: dc.Model.extend({ - - constructor: attributes => this.base(attributes) - - # For display, show either the highlighted search results, or the summary, - # if no highlights are available. - # The import process will take care of this in the future, but the inline - # version of the summary has all runs of whitespace squeezed out. - displaySummary: => - text: this.get('highlight') or this.get('summary') or '' - text and text.replace(/\s+/g, ' ') - - # Return a list of the document's metadata. Think about caching this on the - # document by binding to Metadata, instead of on-the-fly. - metadata: => - docId: this.id - _.select(Metadata.models(), (meta => - _.any(meta.get('instances'), instance => - instance.document_id is docId))) - - bookmark: pageNumber => - bookmark: new dc.model.Bookmark({title: this.get('title'), page_number: pageNumber, document_id: this.id}) - Bookmarks.create(bookmark) - - # Inspect. - toString: => 'Document ' + this.id + ' "' + this.get('title') + '"' - -}) - -# Document Set -dc.model.DocumentSet: dc.model.RESTfulSet.extend({ - - resource: 'documents' - - SELECTION_CHANGED: 'documents:selection_changed' - - constructor: options => - this.base(options) - _.bindAll(this, 'downloadSelectedViewers', 'downloadSelectedPDF', 'downloadSelectedFullText') - - selected: => _.select(this.models(), m => m.get('selected')) - - selectedIds: => _.pluck(this.selected(), 'id') - - countSelected: => this.selected().length - - downloadSelectedViewers: => - dc.app.download('/download/' + this.selectedIds().join('/') + '/document_viewer.zip') - - downloadSelectedPDF: => - if this.countSelected() <= 1 then return window.open(this.selected()[0].get('pdf_url')) - dc.app.download('/download/' + this.selectedIds().join('/') + '/document_pdfs.zip') - - downloadSelectedFullText: => - if this.countSelected() <= 1 then return window.open(this.selected()[0].get('full_text_url')) - dc.app.download('/download/' + this.selectedIds().join('/') + '/document_text.zip') - - # We override "_onModelEvent" to fire selection changed events when documents - # change their selected state. - _onModelEvent: e, model => - this.base(e, model) - fire: e is dc.Model.CHANGED and model.hasChanged('selected') - if fire then _.defer(_(this.fire).bind(this, this.SELECTION_CHANGED, this)) - -}) - -# The main set of Documents, used by the search tab. -window.Documents: new dc.model.DocumentSet() - -# The set of documents that is used to look at a particular label. -dc.app.LabeledDocuments: new dc.model.DocumentSet() diff --git a/examples/poignant.coffee b/examples/poignant.coffee index 5ac07defcb..836a6155d5 100644 --- a/examples/poignant.coffee +++ b/examples/poignant.coffee @@ -2,7 +2,7 @@ # ['toast', 'cheese', 'wine'].each { |food| print food.capitalize } -['toast', 'wine', 'cheese'].each(food => print(food.capitalize())) +['toast', 'wine', 'cheese'].each (food) => print(food.capitalize()) @@ -14,10 +14,10 @@ # end LotteryTicket: { - get_picks: => this.picks - set_picks: nums => this.picks: nums - get_purchase: => this.purchase - set_purchase: amount => this.purchase: amount + get_picks: () => this.picks + set_picks: (nums) => this.picks: nums + get_purchase: () => this.purchase + set_purchase: (amount) => this.purchase: amount } @@ -40,11 +40,11 @@ LotteryTicket: { # end LotteryDraw: { - play: => + play: () => result: LotteryTicket.new_random() winners: {} - this.tickets.each() buyer, ticket_list => - ticket_list.each() ticket => + this.tickets.each (buyer, ticket_list) => + ticket_list.each (ticket) => score: ticket.score(result) return if score is 0 winners[buyer] ||= [] @@ -65,8 +65,8 @@ LotteryDraw: { # end WishScanner: { - scan_for_a_wish: => - wish: this.read().detect(thought => thought.index('wish: ') is 0) + scan_for_a_wish: () => + wish: this.read().detect((thought) => thought.index('wish: ') is 0) wish.replace('wish: ', '') } @@ -111,7 +111,7 @@ WishScanner: { Creature : { # This method applies a hit taken during a fight. - hit: damage => + hit: (damage) => p_up: Math.rand(this.charisma) if p_up % 9 is 7 this.life += p_up / 4 @@ -120,7 +120,7 @@ Creature : { if this.life <= 0 then puts("[" + this.name + " has died.]") # This method takes one turn in a fight. - fight: enemy, weapon => + fight: (enemy, weapon) => if this.life <= 0 then return puts("[" + this.name + "is too dead to fight!]") # Attack the opponent. @@ -156,12 +156,12 @@ Creature : { # Get evil idea and swap in code words print("Enter your new idea: ") idea: gets() -code_words.each(real, code => idea.replace(real, code)) +code_words.each((real, code) => idea.replace(real, code)) # Save the jibberish to a new file print("File encoded. Please enter a name for this idea: ") idea_name: gets().strip() -File.open("idea-" + idea_name + '.txt', 'w', file => file.write(idea)) +File.open("idea-" + idea_name + '.txt', 'w', (file) => file.write(idea)) @@ -177,7 +177,7 @@ File.open("idea-" + idea_name + '.txt', 'w', file => file.write(idea)) # end # end -wipe_mutterings_from: sentence => +wipe_mutterings_from: (sentence) => throw new Error("cannot wipe mutterings") unless sentence.indexOf while sentence.indexOf('(') >= 0 open: sentence.indexOf('(') - 1 diff --git a/examples/potion.coffee b/examples/potion.coffee index de8f72c591..06e6a142f4 100644 --- a/examples/potion.coffee +++ b/examples/potion.coffee @@ -8,7 +8,7 @@ print("Odelay!") for i in [1..5] # add = (x, y): x + y. # add(2, 4) string print -add: x, y => x + y +add: (x, y) => x + y print(add(2, 4)) @@ -31,7 +31,7 @@ print({language: 'Potion', pointless: true}['language']) # minus = (x, y): x - y. # minus (y=10, x=6) -minus: x, y => x - y +minus: (x, y) => x - y minus(6, 10) @@ -53,8 +53,8 @@ for key, val of {dog: 'canine', cat: 'feline', fox: 'vulpine'} # Person print = (): # ('My name is ', /name, '.') join print. -Person: => -Person::print: => +Person: () => +Person::print: () => print('My name is ' + this.name + '.') @@ -71,9 +71,9 @@ print(p.name) # # Policeman ('Constable') print -Policeman: rank => this.rank: rank +Policeman: (rank) => this.rank: rank Policeman extends Person -Policeman::print: => +Policeman::print: () => print('My name is ' + this.name + " and I'm a " + this.rank + '.') print(new Policeman('Constable')) @@ -115,13 +115,13 @@ table: { # String length = (): 10. # this foul business... -String::length: => 10 +String::length: () => 10 # block = : # 'potion' print. -block: => +block: () => print('potion') @@ -178,7 +178,7 @@ if (3).gender? # HomePage get = (url): # session = url query ? at ('session'). -HomePage::get: url => +HomePage::get: (url) => session: url.query.session if url.query? @@ -187,7 +187,7 @@ HomePage::get: url => # b /left = BTree () # b /right = BTree () -BTree: => +BTree: () => b: new BTree() b.left: new BTree() b.right: new BTree() @@ -199,7 +199,7 @@ b.right: new BTree() # if (b ? /left): # 'left path found!' print. -BTree: => +BTree: () => b: new BTree() print('left path found!') if b.left? diff --git a/examples/syntax_errors.coffee b/examples/syntax_errors.coffee deleted file mode 100644 index aa72cd71ee..0000000000 --- a/examples/syntax_errors.coffee +++ /dev/null @@ -1,20 +0,0 @@ -# Identifiers run together: -# a b c - -# Trailing comma in array: -# array: [1, 2, 3, 4, 5,] - -# Unterminated object literal: -# obj: { one: 1, two: 2 - -# Numbers run together: -# 101 202 - -# Strings run together: -# str: "broken" "words" - -# Forgot to terminate a function: -# obj: { -# first: a => a[0]. -# last: a => a[a.length-1] -# } \ No newline at end of file diff --git a/examples/underscore.coffee b/examples/underscore.coffee index edc3cb9a03..b2dfc1298b 100644 --- a/examples/underscore.coffee +++ b/examples/underscore.coffee @@ -21,7 +21,7 @@ # If Underscore is called as a function, it returns a wrapped object that # can be used OO-style. This wrapper holds altered versions of all the # underscore functions. Wrapped objects may be chained. - wrapper: obj => + wrapper: (obj) => this._wrapped: obj this @@ -31,7 +31,7 @@ # Create a safe reference to the Underscore object forreference below. - _: root._: obj => new wrapper(obj) + _: root._: (obj) => new wrapper(obj) # Export the Underscore object for CommonJS. @@ -54,7 +54,7 @@ # The cornerstone, an each implementation. # Handles objects implementing forEach, arrays, and raw objects. - _.each: obj, iterator, context => + _.each: (obj, iterator, context) => index: 0 try return obj.forEach(iterator, context) if obj.forEach @@ -68,36 +68,36 @@ # Return the results of applying the iterator to each element. Use JavaScript # 1.6's version of map, if possible. - _.map: obj, iterator, context => + _.map: (obj, iterator, context) => return obj.map(iterator, context) if (obj and _.isFunction(obj.map)) results: [] - _.each(obj) value, index, list => + _.each(obj) (value, index, list) => results.push(iterator.call(context, value, index, list)) results # Reduce builds up a single result from a list of values. Also known as # inject, or foldl. Uses JavaScript 1.8's version of reduce, if possible. - _.reduce: obj, memo, iterator, context => + _.reduce: (obj, memo, iterator, context) => return obj.reduce(_.bind(iterator, context), memo) if (obj and _.isFunction(obj.reduce)) - _.each(obj) value, index, list => + _.each(obj) (value, index, list) => memo: iterator.call(context, memo, value, index, list) memo # The right-associative version of reduce, also known as foldr. Uses # JavaScript 1.8's version of reduceRight, if available. - _.reduceRight: obj, memo, iterator, context => + _.reduceRight: (obj, memo, iterator, context) => return obj.reduceRight(_.bind(iterator, context), memo) if (obj and _.isFunction(obj.reduceRight)) - _.each(_.clone(_.toArray(obj)).reverse()) value, index => + _.each(_.clone(_.toArray(obj)).reverse()) (value, index) => memo: iterator.call(context, memo, value, index, obj) memo # Return the first value which passes a truth test. - _.detect: obj, iterator, context => + _.detect: (obj, iterator, context) => result: null - _.each(obj) value, index, list => + _.each(obj) (value, index, list) => if iterator.call(context, value, index, list) result: value _.breakLoop() @@ -106,47 +106,47 @@ # Return all the elements that pass a truth test. Use JavaScript 1.6's # filter(), if it exists. - _.select: obj, iterator, context => + _.select: (obj, iterator, context) => if obj and _.isFunction(obj.filter) then return obj.filter(iterator, context) results: [] - _.each(obj) value, index, list => + _.each(obj) (value, index, list) => results.push(value) if iterator.call(context, value, index, list) results # Return all the elements for which a truth test fails. - _.reject: obj, iterator, context => + _.reject: (obj, iterator, context) => results: [] - _.each(obj) value, index, list => + _.each(obj) (value, index, list) => results.push(value) if not iterator.call(context, value, index, list) results # Determine whether all of the elements match a truth test. Delegate to # JavaScript 1.6's every(), if it is present. - _.all: obj, iterator, context => + _.all: (obj, iterator, context) => iterator ||= _.identity return obj.every(iterator, context) if obj and _.isFunction(obj.every) result: true - _.each(obj) value, index, list => + _.each(obj) (value, index, list) => _.breakLoop() unless (result: result and iterator.call(context, value, index, list)) result # Determine if at least one element in the object matches a truth test. Use # JavaScript 1.6's some(), if it exists. - _.any: obj, iterator, context => + _.any: (obj, iterator, context) => iterator ||= _.identity return obj.some(iterator, context) if obj and _.isFunction(obj.some) result: false - _.each(obj) value, index, list => + _.each(obj) (value, index, list) => _.breakLoop() if (result: iterator.call(context, value, index, list)) result # Determine if a given value is included in the array or object, # based on '==='. - _.include: obj, target => + _.include: (obj, target) => return _.indexOf(obj, target) isnt -1 if _.isArray(obj) for key, val of obj return true if val is target @@ -154,41 +154,41 @@ # Invoke a method with arguments on every item in a collection. - _.invoke: obj, method => + _.invoke: (obj, method) => args: _.rest(arguments, 2) (if method then val[method] else val).apply(val, args) for val in obj # Convenience version of a common use case of map: fetching a property. - _.pluck: obj, key => - _.map(obj, (val => val[key])) + _.pluck: (obj, key) => + _.map(obj, ((val) => val[key])) # Return the maximum item or (item-based computation). - _.max: obj, iterator, context => + _.max: (obj, iterator, context) => return Math.max.apply(Math, obj) if not iterator and _.isArray(obj) result: {computed: -Infinity} - _.each(obj) value, index, list => + _.each(obj) (value, index, list) => computed: if iterator then iterator.call(context, value, index, list) else value computed >= result.computed and (result: {value: value, computed: computed}) result.value # Return the minimum element (or element-based computation). - _.min: obj, iterator, context => + _.min: (obj, iterator, context) => return Math.min.apply(Math, obj) if not iterator and _.isArray(obj) result: {computed: Infinity} - _.each(obj) value, index, list => + _.each(obj) (value, index, list) => computed: if iterator then iterator.call(context, value, index, list) else value computed < result.computed and (result: {value: value, computed: computed}) result.value # Sort the object's values by a criteria produced by an iterator. - _.sortBy: obj, iterator, context => - _.pluck(((_.map(obj) value, index, list => + _.sortBy: (obj, iterator, context) => + _.pluck(((_.map(obj) (value, index, list) => {value: value, criteria: iterator.call(context, value, index, list)} - ).sort() left, right => + ).sort() (left, right) => a: left.criteria; b: right.criteria if a < b then -1 else if a > b then 1 else 0 ), 'value') @@ -196,7 +196,7 @@ # Use a comparator function to figure out at what index an object should # be inserted so as to maintain order. Uses binary search. - _.sortedIndex: array, obj, iterator => + _.sortedIndex: (array, obj, iterator) => iterator ||= _.identity low: 0; high: array.length while low < high @@ -206,7 +206,7 @@ # Convert anything iterable into a real, live array. - _.toArray: iterable => + _.toArray: (iterable) => return [] if (!iterable) return iterable.toArray() if (iterable.toArray) return iterable if (_.isArray(iterable)) @@ -215,7 +215,7 @@ # Return the number of elements in an object. - _.size: obj => _.toArray(obj).length + _.size: (obj) => _.toArray(obj).length # -------------------------- Array Functions: ------------------------------ @@ -223,7 +223,7 @@ # Get the first element of an array. Passing "n" will return the first N # values in the array. Aliased as "head". The "guard" check allows it to work # with _.map. - _.first: array, n, guard => + _.first: (array, n, guard) => if n and not guard then slice.call(array, 0, n) else array[0] @@ -231,35 +231,35 @@ # Especially useful on the arguments object. Passing an "index" will return # the rest of the values in the array from that index onward. The "guard" # check allows it to work with _.map. - _.rest: array, index, guard => + _.rest: (array, index, guard) => slice.call(array, if _.isUndefined(index) or guard then 1 else index) # Get the last element of an array. - _.last: array => array[array.length - 1] + _.last: (array) => array[array.length - 1] # Trim out all falsy values from an array. - _.compact: array => array[i] for i in [0...array.length] when array[i] + _.compact: (array) => array[i] for i in [0...array.length] when array[i] # Return a completely flattened version of an array. - _.flatten: array => - _.reduce(array, []) memo, value => + _.flatten: (array) => + _.reduce(array, []) (memo, value) => return memo.concat(_.flatten(value)) if _.isArray(value) memo.push(value) memo # Return a version of the array that does not contain the specified value(s). - _.without: array => + _.without: (array) => values: _.rest(arguments) val for val in _.toArray(array) when not _.include(values, val) # Produce a duplicate-free version of the array. If the array has already # been sorted, you have the option of using a faster algorithm. - _.uniq: array, isSorted => + _.uniq: (array, isSorted) => memo: [] for el, i in _.toArray(array) memo.push(el) if i is 0 || (if isSorted is true then _.last(memo) isnt el else not _.include(memo, el)) @@ -268,28 +268,27 @@ # Produce an array that contains every item shared between all the # passed-in arrays. - _.intersect: array => + _.intersect: (array) => rest: _.rest(arguments) - _.select(_.uniq(array)) item => - _.all(rest) other => + _.select(_.uniq(array)) (item) => + _.all(rest) (other) => _.indexOf(other, item) >= 0 # Zip together multiple lists into a single array -- elements that share # an index go together. - _.zip: => - args: _.toArray(arguments) - length: _.max(_.pluck(args, 'length')) + _.zip: () => + length: _.max(_.pluck(arguments, 'length')) results: new Array(length) for i in [0...length] - results[i]: _.pluck(args, String(i)) + results[i]: _.pluck(arguments, String(i)) results # If the browser doesn't supply us with indexOf (I'm looking at you, MSIE), # we need this function. Return the position of the first occurence of an # item in an array, or -1 if the item is not included in the array. - _.indexOf: array, item => + _.indexOf: (array, item) => return array.indexOf(item) if array.indexOf i: 0; l: array.length while l - i @@ -299,7 +298,7 @@ # Provide JavaScript 1.6's lastIndexOf, delegating to the native function, # if possible. - _.lastIndexOf: array, item => + _.lastIndexOf: (array, item) => return array.lastIndexOf(item) if array.lastIndexOf i: array.length while i @@ -310,8 +309,8 @@ # Generate an integer Array containing an arithmetic progression. A port of # the native Python range() function. See: # http://docs.python.org/library/functions.html#range - _.range: start, stop, step => - a: _.toArray(arguments) + _.range: (start, stop, step) => + a: arguments solo: a.length <= 1 i: start: if solo then 0 else a[0]; stop: if solo then a[0] else a[1]; @@ -331,45 +330,45 @@ # Create a function bound to a given object (assigning 'this', and arguments, # optionally). Binding with arguments is also known as 'curry'. - _.bind: func, obj => + _.bind: (func, obj) => args: _.rest(arguments, 2) - => func.apply(obj or root, args.concat(_.toArray(arguments))) + () => func.apply(obj or root, args.concat(arguments)) # Bind all of an object's methods to that object. Useful for ensuring that # all callbacks defined on an object belong to it. - _.bindAll: obj => + _.bindAll: (obj) => funcs: if arguments.length > 1 then _.rest(arguments) else _.functions(obj) - _.each(funcs, (f => obj[f]: _.bind(obj[f], obj))) + _.each(funcs, (f) => obj[f]: _.bind(obj[f], obj)) obj # Delays a function for the given number of milliseconds, and then calls # it with the arguments supplied. - _.delay: func, wait => + _.delay: (func, wait) => args: _.rest(arguments, 2) - setTimeout((=> func.apply(func, args)), wait) + setTimeout((() => func.apply(func, args)), wait) # Defers a function, scheduling it to run after the current call stack has # cleared. - _.defer: func => + _.defer: (func) => _.delay.apply(_, [func, 1].concat(_.rest(arguments))) # Returns the first function passed as an argument to the second, # allowing you to adjust arguments, run code before and after, and # conditionally execute the original function. - _.wrap: func, wrapper => - => wrapper.apply(wrapper, [func].concat(_.toArray(arguments))) + _.wrap: (func, wrapper) => + () => wrapper.apply(wrapper, [func].concat(arguments)) # Returns a function that is the composition of a list of functions, each # consuming the return value of the function that follows. - _.compose: => - funcs: _.toArray(arguments) - => - args: _.toArray(arguments) + _.compose: () => + funcs: arguments + () => + args: arguments for i in [(funcs.length - 1)..0] args: [funcs[i].apply(this, args)] args[0] @@ -378,43 +377,43 @@ # ------------------------- Object Functions: ---------------------------- # Retrieve the names of an object's properties. - _.keys: obj => + _.keys: (obj) => return _.range(0, obj.length) if _.isArray(obj) key for key, val of obj # Retrieve the values of an object's properties. - _.values: obj => + _.values: (obj) => _.map(obj, _.identity) # Return a sorted list of the function names available in Underscore. - _.functions: obj => - _.select(_.keys(obj), key => _.isFunction(obj[key])).sort() + _.functions: (obj) => + _.select(_.keys(obj), (key) => _.isFunction(obj[key])).sort() # Extend a given object with all of the properties in a source object. - _.extend: destination, source => + _.extend: (destination, source) => for key, val of source destination[key]: val destination # Create a (shallow-cloned) duplicate of an object. - _.clone: obj => + _.clone: (obj) => return obj.slice(0) if _.isArray(obj) _.extend({}, obj) # Invokes interceptor with the obj, and then returns obj. # The primary purpose of this method is to "tap into" a method chain, in order to perform operations on intermediate results within the chain. - _.tap: obj, interceptor => + _.tap: (obj, interceptor) => interceptor(obj) obj # Perform a deep comparison to check if two objects are equal. - _.isEqual: a, b => + _.isEqual: (a, b) => # Check object identity. return true if a is b # Different types? @@ -450,81 +449,81 @@ # Is a given array or object empty? - _.isEmpty: obj => _.keys(obj).length is 0 + _.isEmpty: (obj) => _.keys(obj).length is 0 # Is a given value a DOM element? - _.isElement: obj => obj and obj.nodeType is 1 + _.isElement: (obj) => obj and obj.nodeType is 1 # Is a given value an array? - _.isArray: obj => !!(obj and obj.concat and obj.unshift) + _.isArray: (obj) => !!(obj and obj.concat and obj.unshift) # Is a given variable an arguments object? - _.isArguments: obj => obj and _.isNumber(obj.length) and !_.isArray(obj) and !propertyIsEnumerable.call(obj, 'length') + _.isArguments: (obj) => obj and _.isNumber(obj.length) and !_.isArray(obj) and !propertyIsEnumerable.call(obj, 'length') # Is the given value a function? - _.isFunction: obj => !!(obj and obj.constructor and obj.call and obj.apply) + _.isFunction: (obj) => !!(obj and obj.constructor and obj.call and obj.apply) # Is the given value a string? - _.isString: obj => !!(obj is '' or (obj and obj.charCodeAt and obj.substr)) + _.isString: (obj) => !!(obj is '' or (obj and obj.charCodeAt and obj.substr)) # Is a given value a number? - _.isNumber: obj => toString.call(obj) is '[object Number]' + _.isNumber: (obj) => toString.call(obj) is '[object Number]' # Is a given value a Date? - _.isDate: obj => !!(obj and obj.getTimezoneOffset and obj.setUTCFullYear) + _.isDate: (obj) => !!(obj and obj.getTimezoneOffset and obj.setUTCFullYear) # Is the given value a regular expression? - _.isRegExp: obj => !!(obj and obj.exec and (obj.ignoreCase or obj.ignoreCase is false)) + _.isRegExp: (obj) => !!(obj and obj.exec and (obj.ignoreCase or obj.ignoreCase is false)) # Is the given value NaN -- this one is interesting. NaN != NaN, and # isNaN(undefined) == true, so we make sure it's a number first. - _.isNaN: obj => _.isNumber(obj) and window.isNaN(obj) + _.isNaN: (obj) => _.isNumber(obj) and window.isNaN(obj) # Is a given value equal to null? - _.isNull: obj => obj is null + _.isNull: (obj) => obj is null # Is a given variable undefined? - _.isUndefined: obj => typeof obj is 'undefined' + _.isUndefined: (obj) => typeof obj is 'undefined' # -------------------------- Utility Functions: -------------------------- # Run Underscore.js in noConflict mode, returning the '_' variable to its # previous owner. Returns a reference to the Underscore object. - _.noConflict: => + _.noConflict: () => root._: previousUnderscore this # Keep the identity function around for default iterators. - _.identity: value => value + _.identity: (value) => value # Break out of the middle of an iteration. - _.breakLoop: => throw breaker + _.breakLoop: () => throw breaker # Generate a unique integer id (unique within the entire client session). # Useful for temporary DOM ids. idCounter: 0 - _.uniqueId: prefix => + _.uniqueId: (prefix) => (prefix or '') + idCounter++ # JavaScript templating a-la ERB, pilfered from John Resig's # "Secrets of the JavaScript Ninja", page 83. - _.template: str, data => + _.template: (str, data) => `var fn = new Function('obj', 'var p=[],print=function(){p.push.apply(p,arguments);};' + 'with(obj){p.push(\'' + @@ -556,39 +555,38 @@ # /*------------------------ Setup the OOP Wrapper: --------------------------*/ # Helper function to continue chaining intermediate results. - result: obj, chain => + result: (obj, chain) => if chain then _(obj).chain() else obj # Add all of the Underscore functions to the wrapper object. - _.each(_.functions(_)) name => + _.each(_.functions(_)) (name) => method: _[name] - wrapper.prototype[name]: => - args: _.toArray(arguments) - unshift.call(args, this._wrapped) + wrapper.prototype[name]: () => + unshift.call(arguments, this._wrapped) result(method.apply(_, args), this._chain) # Add all mutator Array functions to the wrapper. - _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift']) name => + _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift']) (name) => method: Array.prototype[name] - wrapper.prototype[name]: => + wrapper.prototype[name]: () => method.apply(this._wrapped, arguments) result(this._wrapped, this._chain) # Add all accessor Array functions to the wrapper. - _.each(['concat', 'join', 'slice']) name => + _.each(['concat', 'join', 'slice']) (name) => method: Array.prototype[name] - wrapper.prototype[name]: => + wrapper.prototype[name]: () => result(method.apply(this._wrapped, arguments), this._chain) # Start chaining a wrapped Underscore object. - wrapper::chain: => + wrapper::chain: () => this._chain: true this # Extracts the result from a wrapped and chained object. - wrapper::value: => this._wrapped + wrapper::value: () => this._wrapped diff --git a/extras/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage b/extras/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage index f394402b9d..850870fe04 100644 --- a/extras/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage +++ b/extras/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage @@ -19,17 +19,12 @@ captures - 1 + 1 name - entity.name.function.coffee + storage.type.function.coffee 2 - - name - keyword.operator.coffee - - 3 name variable.parameter.function.coffee @@ -39,23 +34,7 @@ name storage.type.function.coffee - - comment - match stuff like: funcName: => … - match - ([a-zA-Z0-9_?.$:*]*?)\s*(=\b|:\b)\s*([\w,\s]*?)\s*(=+>) - name - meta.function.coffee - - - captures - - 1 - - name - variable.parameter.function.coffee - - 3 + 5 name storage.type.function.coffee @@ -64,7 +43,7 @@ comment match stuff like: a => … match - ([a-zA-Z0-9_?.$]*(,\s*[a-zA-Z0-9_?.$]+)*)\s*(=+>) + (\()([a-zA-Z0-9_?.$]*(,\s*[a-zA-Z0-9_?.$]+)*)(\))\s*(=+>) name meta.inline.function.coffee diff --git a/index.html b/index.html index b97f4a35eb..5c8c1effe3 100644 --- a/index.html +++ b/index.html @@ -85,7 +85,7 @@

Mini Overview

number: -42 if opposite_day # Functions: -square: x => x * x +square: (x) => x * x # Arrays: list: [1, 2, 3, 4, 5] @@ -94,11 +94,11 @@

Mini Overview

math: { root: Math.sqrt square: square - cube: x => x * square(x) + cube: (x) => x * square x } # Splats: -race: winner, runners... => +race: (winner, runners...) => print winner, runners # Existence: @@ -271,7 +271,7 @@

Installation and Usage

-e, --eval Compile and print a little snippet of CoffeeScript directly from the - command line (or from stdin). For example:
coffee -e "square: x => x * x" + command line (or from stdin). For example:
coffee -e "square: (x) => x * x" @@ -356,8 +356,8 @@

Language Reference

function body. The empty function looks like this: =>. All functions in CoffeeScript are named by default, for easier debugging.

-
square: x => x * x
-cube:   x => square(x) * x
+    
square: (x) => x * x
+cube:   (x) => square(x) * x
 
var cube, square;
 square = function square(x) {
   return x * x;
@@ -375,7 +375,7 @@ 

Language Reference

;alert(cube(5));'>run: cube(5)

If you'd like to create an anonymous function, just wrap it in parentheses: - (x => x * x) + ((x) => x * x)

@@ -444,7 +444,7 @@

Language Reference

var yourself.

num: 1
-change_numbers: =>
+change_numbers: () =>
   new_num: -1
   num: 10
 new_num: change_numbers()
@@ -615,7 +615,7 @@ 

Language Reference

gold: silver: the_field: "unknown"
 
-medalists: first, second, rest... =>
+medalists: (first, second, rest...) =>
   gold:       first
   silver:     second
   the_field:  rest
@@ -675,7 +675,7 @@ 

Language Reference

Array methods available.

-
backwards: =>
+    
backwards: () =>
   alert arguments.reverse()
 
 backwards "stairway", "to", "heaven"
@@ -807,7 +807,7 @@ 

Language Reference

countdown: num for num in [10..1]
 
-egg_delivery: =>
+egg_delivery: () =>
   for i in [0...eggs.length] by 12
     dozen_eggs: eggs[i...i+12]
     deliver new egg_carton(dozen)
@@ -945,7 +945,7 @@ 

Language Reference

pushed down into each possible branch of execution, in the function below.

-
grade: student =>
+    
grade: (student) =>
   if student.excellent_work
     "A+"
   else if student.okay_stuff
@@ -1078,19 +1078,19 @@ 

Language Reference

object's prototype, and converts super() into a call against the immediate ancestor's method of the same name.

-
Animal: =>
-Animal::move: meters =>
+    
Animal: () =>
+Animal::move: (meters) =>
   alert this.name + " moved " + meters + "m."
 
-Snake: name => this.name: name
+Snake: (name) => this.name: name
 Snake extends Animal
-Snake::move: =>
+Snake::move: () =>
   alert "Slithering..."
   super 5
 
-Horse: name => this.name: name
+Horse: (name) => this.name: name
 Horse extends Animal
-Horse::move: =>
+Horse::move: () =>
   alert "Galloping..."
   super 45
 
@@ -1186,8 +1186,8 @@ 

Language Reference

final functions easier to pass, CoffeeScript includes block syntax, so you don't have to close the parentheses on the other side.

-
$('table.list').each() table =>
-  $('tr.account', table).each() row =>
+    
$('table.list').each (table) =>
+  $('tr.account', table).each (row) =>
     row.show()
     row.highlight()
 
$('table.list').each(function(table) {
@@ -1197,11 +1197,6 @@ 

Language Reference

}); });

-

- If you prefer not to use blocks, you'll need to add a pair of parentheses - to help distinguish the arguments from the definition of the function: - _.map(array, (num => num * 2)) -

Pattern Matching (Destructuring Assignment) @@ -1234,7 +1229,7 @@

Language Reference

But it's also helpful for dealing with functions that return multiple values.

-
weather_report: location =>
+    
weather_report: (location) =>
   # Make an Ajax request to fetch the weather...
   [location, 72, "Mostly Sunny"]
 
@@ -1316,11 +1311,11 @@ 

Language Reference

to use with bind. Functions created with the long arrow are able to access properties of the this where they're defined.

-
Account: customer, cart =>
+    
Account: (customer, cart) =>
   this.customer: customer
   this.cart: cart
 
-  $('.shopping_cart').bind('click') event ==>
+  $('.shopping_cart').bind('click') (event) ==>
     this.customer.purchase this.cart
 
var Account;
 Account = function Account(customer, cart) {
diff --git a/lib/coffee_script/grammar.y b/lib/coffee_script/grammar.y
index 617bda01f1..ce1eaac7b4 100644
--- a/lib/coffee_script/grammar.y
+++ b/lib/coffee_script/grammar.y
@@ -5,7 +5,7 @@ token IF ELSE UNLESS
 token NUMBER STRING REGEX
 token TRUE FALSE YES NO ON OFF
 token IDENTIFIER PROPERTY_ACCESS PROTOTYPE_ACCESS SOAK_ACCESS
-token CODE PARAM NEW RETURN
+token CODE PARAM_START PARAM PARAM_END NEW RETURN
 token TRY CATCH FINALLY THROW
 token BREAK CONTINUE
 token FOR IN OF BY WHEN WHILE
@@ -200,8 +200,10 @@ rule
 
   # Function definition.
   Code:
-    ParamList FuncGlyph Block         { result = CodeNode.new(val[0], val[2], val[1]) }
-  | FuncGlyph Block                   { result = CodeNode.new([], val[1], val[0]) }
+    PARAM_START ParamList PARAM_END
+      FuncGlyph Block                 { result = CodeNode.new(val[1], val[4], val[3]) }
+  | PARAM_START PARAM_END
+      FuncGlyph Block                 { result = CodeNode.new([], val[3], val[2]) }
   ;
 
   # The symbols to signify functions, and bound functions.
diff --git a/lib/coffee_script/lexer.rb b/lib/coffee_script/lexer.rb
index 6dcf7a1c34..bf4ff7f936 100644
--- a/lib/coffee_script/lexer.rb
+++ b/lib/coffee_script/lexer.rb
@@ -242,19 +242,15 @@ def last_tag
     # make use of splats.
     def tag_parameters
       i = 0
-      tagged = false
       loop do
         i -= 1
         tok = @tokens[i]
         return if !tok
-        if ['.', ','].include?(tok[0])
-          tagged = false
-          next
+        case tok[0]
+        when :IDENTIFIER  then tok[0] = :PARAM
+        when ')'          then tok[0] = :PARAM_END
+        when '('          then return tok[0] = :PARAM_START
         end
-        return if tagged
-        return if tok[0] != :IDENTIFIER
-        tok[0] = :PARAM
-        tagged = true
       end
     end
 
diff --git a/lib/coffee_script/narwhal/coffee-script.coffee b/lib/coffee_script/narwhal/coffee-script.coffee
index d3bc2b338e..ce0ba01122 100644
--- a/lib/coffee_script/narwhal/coffee-script.coffee
+++ b/lib/coffee_script/narwhal/coffee-script.coffee
@@ -12,14 +12,14 @@ Readline: require('readline')
 coffeePath: File.path(module.path).dirname().dirname().dirname().dirname().dirname().join('bin', 'coffee')
 
 # Our general-purpose error handler.
-checkForErrors: coffeeProcess =>
+checkForErrors: (coffeeProcess) =>
   return true if coffeeProcess.wait() is 0
   system.stderr.print(coffeeProcess.stderr.read())
   throw new Error("CoffeeScript compile error")
 
 # Run a simple REPL, round-tripping to the CoffeeScript compiler for every
 # command.
-exports.run: args =>
+exports.run: (args) =>
   if args.length
     for path, i in args
       exports.evalCS(File.read(path))
@@ -35,24 +35,24 @@ exports.run: args =>
       print(e)
 
 # Compile a given CoffeeScript file into JavaScript.
-exports.compileFile: path =>
+exports.compileFile: (path) =>
   coffee: OS.popen([coffeePath, "--print", "--no-wrap", path])
   checkForErrors(coffee)
   coffee.stdout.read()
 
 # Compile a string of CoffeeScript into JavaScript.
-exports.compile: source, flags =>
+exports.compile: (source, flags) =>
   coffee: OS.popen([coffeePath, "--eval", "--no-wrap"].concat(flags or []))
   coffee.stdin.write(source).flush().close()
   checkForErrors(coffee)
   coffee.stdout.read()
 
 # Evaluating a string of CoffeeScript first compiles it externally.
-exports.evalCS: source, flags =>
+exports.evalCS: (source, flags) =>
   eval(exports.compile(source, flags))
 
 # Make a factory for the CoffeeScript environment.
-exports.makeNarwhalFactory: path =>
+exports.makeNarwhalFactory: (path) =>
   code: exports.compileFile(path)
   factoryText: "function(require,exports,module,system,print){" + code + "/**/\n}"
   if system.engine is "rhino"
diff --git a/lib/coffee_script/narwhal/loader.coffee b/lib/coffee_script/narwhal/loader.coffee
index ea6e2a0edc..5012286f93 100644
--- a/lib/coffee_script/narwhal/loader.coffee
+++ b/lib/coffee_script/narwhal/loader.coffee
@@ -6,12 +6,12 @@ factories: {}
 loader: {
 
   # Reload the coffee-script environment from source.
-  reload: topId, path =>
+  reload: (topId, path) =>
     coffeescript ||= require('coffee-script')
-    factories[topId]: => coffeescript.makeNarwhalFactory(path)
+    factories[topId]: () => coffeescript.makeNarwhalFactory(path)
 
   # Ensure that the coffee-script environment is loaded.
-  load: topId, path =>
+  load: (topId, path) =>
     factories[topId] ||= this.reload(topId, path)
 
 }
diff --git a/lib/coffee_script/parse_error.rb b/lib/coffee_script/parse_error.rb
index 0f23bc922d..4903deb50b 100644
--- a/lib/coffee_script/parse_error.rb
+++ b/lib/coffee_script/parse_error.rb
@@ -18,7 +18,7 @@ def initialize(token_id, value, stack=nil, message=nil)
     def message
       line      = @value.respond_to?(:line) ? @value.line : "END"
       line_part = "line #{line}:"
-      id_part   = @token_id != @value.to_s ? "unexpected #{@token_id.to_s.downcase}" : ""
+      id_part   = @token_id != @value.to_s ? " unexpected #{@token_id.to_s.downcase}" : ""
       val_part  = @message || "for #{TOKEN_MAP[@value.to_s] || "'#{@value}'"}"
       "#{line_part} syntax error, #{val_part}#{id_part}"
     end
diff --git a/lib/coffee_script/parser.rb b/lib/coffee_script/parser.rb
index a375ea28c6..deb2bc3324 100644
--- a/lib/coffee_script/parser.rb
+++ b/lib/coffee_script/parser.rb
@@ -10,7 +10,7 @@ module CoffeeScript
 
 class Parser < Racc::Parser
 
-module_eval(<<'...end grammar.y/module_eval...', 'grammar.y', 449)
+module_eval(<<'...end grammar.y/module_eval...', 'grammar.y', 451)
   # Lex and parse a CoffeeScript.
   def parse(code)
     # Uncomment the following line to enable grammar debugging, in combination
@@ -34,319 +34,301 @@ def on_error(error_token_id, error_value, value_stack)
 ##### State transition tables begin ###
 
 clist = [
-'106,9,114,20,24,27,32,36,40,46,50,55,61,276,270,271,178,1,5,11,14,18',
-'276,22,28,33,122,126,30,30,18,99,63,265,72,115,3,6,30,15,266,18,26,218',
-'30,111,1,44,48,53,59,136,139,102,105,109,113,118,121,125,129,132,135',
-'138,101,104,108,112,117,120,124,128,131,134,137,100,103,107,110,116',
-'119,123,127,130,133,302,51,56,149,151,152,71,173,2,9,10,183,20,24,27',
-'32,36,40,46,50,55,61,294,149,151,152,1,5,11,14,51,56,22,28,33,35,80',
-'30,189,242,57,63,97,72,79,3,6,80,15,241,18,26,184,185,276,79,44,48,53',
-'59,64,68,18,51,56,293,13,141,62,66,111,191,192,18,30,76,136,139,102',
-'105,109,150,62,66,18,155,149,151,152,191,192,149,151,152,239,51,56,149',
-'151,152,71,150,2,9,10,155,20,24,27,32,36,40,46,50,55,61,153,149,151',
-'152,1,5,11,14,30,80,22,28,33,35,80,62,66,79,57,63,249,72,79,3,6,249',
-'15,284,18,26,62,66,62,66,44,48,53,59,64,68,270,271,145,111,13,91,18',
-'157,150,-181,-181,18,155,150,111,62,66,155,1,150,136,139,30,155,62,66',
-'251,273,263,62,66,251,275,51,56,30,145,262,71,150,2,9,10,155,20,24,27',
-'32,36,40,46,50,55,61,187,249,190,30,1,5,11,14,256,111,22,28,33,35,85',
-'-181,-181,179,57,63,255,72,80,3,6,111,15,309,18,26,79,-181,-181,75,44',
-'48,53,59,64,68,97,,,,13,62,66,251,,252,,111,62,66,176,,111,136,139,18',
-',76,136,139,102,105,109,113,118,121,125,129,,51,56,,,,71,,2,9,10,,20',
-'24,27,32,36,40,46,50,55,61,,,111,,1,5,11,14,-181,-181,22,28,33,35,62',
-'66,176,,57,63,177,72,,3,6,111,15,,18,26,,136,139,,44,48,53,59,64,68',
-'111,,,,13,,136,139,102,105,109,113,118,121,125,129,132,135,138,101,104',
-'108,112,117,120,124,128,,,111,,,,51,56,-181,-181,,71,,2,9,10,,20,24',
-'27,32,36,40,46,50,55,61,,,111,,1,5,11,14,-181,-181,22,28,33,35,,,,,57',
-'63,,72,,3,6,111,15,,18,26,,-181,-181,,44,48,53,59,64,68,111,,,,13,,136',
-'139,102,105,109,113,118,121,125,129,132,135,138,101,104,108,112,117',
-'120,124,128,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61',
-',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48',
-'53,59,64,68,111,,,,13,,136,139,102,105,109,113,118,121,125,129,132,135',
-'138,101,104,108,112,117,120,124,128,,,,,,,51,56,,,,71,,2,9,10,,20,24',
-'27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3',
-'6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,,13,,136,139,102,105,109,113',
-'118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,,,,,,,51',
-'56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28',
-'33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,,13',
-',136,139,102,105,109,113,118,121,125,129,132,135,138,101,104,108,112',
-'117,120,124,128,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55',
-'61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44',
-'48,53,59,64,68,111,,,,13,,136,139,102,105,109,113,118,121,125,129,132',
-'135,138,101,104,108,112,117,120,124,128,,,,,,,51,56,,,,71,,2,9,10,,20',
-'24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72',
-',3,6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,,13,,136,139,102,105,109',
-'113,118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,,,,',
-',,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,',
-',22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,111',
-',,,13,,136,139,102,105,109,113,118,121,125,129,132,135,138,101,104,108',
-'112,117,120,124,128,,299,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40',
-'46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26',
-',,,,44,48,53,59,64,68,111,,,,13,,136,139,102,105,109,113,118,121,125',
-'129,132,135,138,111,,,,,,136,139,102,105,109,113,118,,51,56,,,,71,,2',
-'9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,',
-'57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,,13,,136,139,102',
-'105,109,113,118,121,125,129,132,135,138,111,,,,,,136,139,102,105,109',
-'113,118,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5',
-'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,95,,,44,48,53,59',
-'64,68,111,,,,13,,136,139,102,105,109,113,118,121,125,129,132,135,138',
-'111,,,,,,136,139,102,105,109,113,118,,51,56,,,,71,,2,9,10,,20,24,27',
-'32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6',
-',15,,18,26,,,,,44,48,53,59,64,68,111,,,,13,,136,139,102,105,109,113',
-'118,121,125,129,132,135,138,111,,,,,,136,139,102,105,109,,,,51,56,,',
-',71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33',
-'35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,,13,,136',
-'139,102,105,109,113,118,121,125,129,111,,,,,,136,139,102,105,109,113',
-'118,121,125,129,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61',
-',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48',
-'53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,',
-'20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63',
-',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,',
-',,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5',
-'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,282,,,,44,48,53,59',
-'64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,62,66,,71,,2,9,10,,20',
-'24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72',
-',3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,',
-',,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14',
-',,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,',
-',,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36',
-'40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18',
-'26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,',
-',71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33',
-'35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,',
-',,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55',
-'61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44',
-'48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10',
-',20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63',
-',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,',
-',,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5',
-'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64',
-'68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27',
-'32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6',
-',15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
-'51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22',
-'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13',
-',,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46',
-'50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,',
-',,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71',
-',2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,',
-',,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,',
-',,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61',
-',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,170,,,,44',
-'48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10',
-',20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63',
-',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,',
-',,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5',
-'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64',
-'68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27',
-'32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6',
-',15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
-'51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22',
-'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13',
-',,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46',
-'50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,',
-',,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71',
-',2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,',
-',,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,',
-',,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61',
-',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48',
-'53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,',
-'20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63',
-',72,,3,6,,15,,18,26,170,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,',
-',,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1',
-'5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59',
-'64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24',
-'27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3',
-'6,,15,,18,26,170,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,',
-',,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14',
-',,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,',
-',,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36',
-'40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18',
-'26,30,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56',
-'62,66,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22',
-'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13',
-',,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46',
-'50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,',
-',,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71',
-',2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,',
-',,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,',
-',,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61',
-',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48',
-'53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,',
-'20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63',
-',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,',
-',,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5',
-'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64',
-'68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27',
-'32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6',
-',15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
-'51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22',
-'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13',
-',,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46',
-'50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,',
-',,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71',
-',2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,',
-',,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,',
-',,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61',
-',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48',
-'53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,',
-'20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63',
-',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,',
-',,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5',
-'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64',
-'68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27',
-'32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6',
-',15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
-'51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22',
-'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13',
-',,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46',
-'50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,',
-',,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71',
-',2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,',
-',,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,',
-',,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61',
-',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48',
-'53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,',
-'20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63',
-',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,',
-',,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5',
-'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64',
-'68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27',
-'32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6',
-',15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
-'51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22',
-'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13',
-',,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46',
-'50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,',
-',,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71',
-',2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,',
-',,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,',
-',,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61',
-',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48',
-'53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,',
-'20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63',
-',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,',
-',,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5',
-'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64',
-'68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27',
-'32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6',
-',15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
-'51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22',
-'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13',
-'20,24,27,32,36,40,46,50,55,61,,,,,,,,,,,,28,33,,,,,,51,56,,,,71,,2,15',
-'10,,26,,,106,,114,20,24,27,32,36,40,46,50,55,61,,,,,,,,,,,,28,33,122',
-'126,,,,99,,,,115,,,,15,,,26,,,111,71,,2,,10,136,139,102,105,109,113',
-'118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134',
-'137,100,103,107,110,116,119,123,127,130,133,106,,114,,,,71,310,2,,10',
-',,,,,,,,,,,,,,,122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105',
-'109,113,118,121,125,129,132,135,138,101,104,108,112,117,120,124,128',
-'131,134,137,100,103,107,110,116,119,254,127,130,133,,,,,,,,274,20,24',
-'27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,,63,,72,,3,6',
-',15,,18,26,,,,,44,48,53,59,64,68,106,,114,,13,,,,,,,,,,,,,,,,,,,,,,122',
-'126,,,,99,,51,56,115,,,71,,2,,10,,,111,,,,,,136,139,102,105,109,113',
-'118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134',
-'137,100,103,107,110,116,119,123,127,130,133,,,,,,,,306,20,24,27,32,36',
-'40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,,,,,,,63,,72,,3,6,,15,,18,26',
-',,,,44,48,53,59,64,68,106,,114,,13,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99',
-',51,56,115,,,71,,2,,10,30,,111,,,,,,136,139,102,105,109,113,118,121',
-'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100',
-'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,',
-'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121',
-'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100',
-'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,',
-'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121',
-'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100',
-'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,',
-'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121',
-'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100',
-'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,',
-'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121',
-'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100',
-'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,',
-'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121',
-'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100',
-'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,',
-'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121',
-'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100',
-'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,',
-'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121',
-'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100',
-'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,',
-'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121',
-'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100',
-'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,',
-'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121',
-'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100',
-'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,',
-'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121',
-'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100',
-'103,107,110,116,119,254,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,',
-'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121',
-'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100',
-'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,',
-'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121',
-'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100',
-'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,',
-'122,126,,,,99,,,,115,,,,,,,,248,,111,,,,,,136,139,102,105,109,113,118',
-'121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137',
-'100,103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,',
-',,,,122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118',
-'121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137',
-'100,103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,',
-',,,,122,126,,,,99,,,,115,,,,,,,,30,,111,,,,,,136,139,102,105,109,113',
-'118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134',
-'137,100,103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,',
-',,,,,,,,122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113',
-'118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134',
-'137,100,103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,',
-',,,,,,,,122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113',
-'118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134',
-'137,100,103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,',
-',,,,,,,,122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113',
-'118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134',
-'137,100,103,107,110,116,119,123,127,130,133,122,126,,,,,,,,115,,,,,',
-',,,,111,,,,,,136,139,102,105,109,113,118,121,125,129,132,135,138,101',
-'104,108,112,117,120,124,128,131,134,137,100,103,107,110,116,119,123',
-'127,130,133,122,126,,,,,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109',
-'113,118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131',
-'134,137,100,103,107,110,116,119,123,127,130,133,122,126,,,,,,,,115,',
-',,,,,,,,111,,,,,,136,139,102,105,109,113,118,121,125,129,132,135,138',
-'101,104,108,112,117,120,124,128,131,134,137,100,103,107,110,116,119',
-'123,122,126,,,,,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118',
-'121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137',
-'100,103,107,110,116,119,123,122,126,,,,,,,,115,,,,,,,,,,111,,,,,,136',
-'139,102,105,109,113,118,121,125,129,132,135,138,101,104,108,112,117',
-'120,124,128,131,134,137,100,103,107,110,116,119,123,122,126,,,,,,,,115',
-',,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121,125,129,132,135,138',
-'101,104,108,112,117,120,124,128,131,134,137,100,103,107,110,116,119',
-'123,126,,,,,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121',
-'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100',
-'103,107,110,116,119,123,126,,,,,,,,115,,,,,,,,,,111,,,,,,136,139,102',
-'105,109,113,118,121,125,129,132,135,138,101,104,108,112,117,120,124',
-'128,131,134,137,100,103,107,110,116,119,123,126,,,,,,,,115,,,,,,,,,',
-'111,,,,,,136,139,102,105,109,113,118,121,125,129,132,135,138,101,104',
-'108,112,117,120,124,128,131,134,137,100,103,107,110,116,119,123,126',
-',,,,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121,125,129',
-'132,135,138,101,104,108,112,117,120,124,128,131,134,137,100,103,107',
-'110,116,119,123,126,,,,,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109',
-'113,118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131',
-'134,137,100,103,107,110,116,119,123,115,,,,,,,,,,111,,,,,,136,139,102',
-'105,109,113,118,121,125,129,132,135,138,101,104,108,112,117,120,124',
-'128,131,134,137,100,103,107,110,116,119,115,,,,,,,,,,111,,,,,,136,139',
-'102,105,109,113,118,121,125,129,132,135,138,101,104,108,112,117,120',
-'124,128,131,134,137,100,103,107,110,116,119,115,,,,,,,,,,111,,,,,,136',
-'139,102,105,109,113,118,121,125,129,132,135,138,101,104,108,112,117',
-'120,124,128,131,134,137,100,103,107,110,116,119,111,,,,,,136,139,102',
-'105,109,113,118,121,125,129,132,135,138,101,104,108,112,117,120,124',
-'128,131,134,137,100,103,107,110,116,119,111,,,,,,136,139,102,105,109',
-'113,118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131',
-'134,137,100,103,107,110,116,119,111,,,,,,136,139,102,105,109,113,118',
-'121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137',
-'100,103,107,110,116,119,111,,,,,,136,139,102,105,109,113,118,121,125',
-'129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100,103',
-'107,110,116,119,111,,,,,,136,139,102,105,109,113,118,121,125,129,132',
-'135,138,101,104,108,112,117,120,124,128,131,134,137,100,103,107,110',
-'116,119' ]
-        racc_action_table = arr = Array.new(9789, nil)
+'117,37,125,21,24,25,29,34,39,44,47,50,54,130,202,203,285,285,108,-181',
+'-181,169,277,278,27,27,35,40,140,144,81,83,84,118,171,172,37,133,287',
+'130,37,19,1,130,32,-181,-181,130,309,-181,-181,60,65,113,116,121,124',
+'128,132,136,139,143,147,150,112,115,120,123,127,131,135,138,142,146',
+'149,111,114,119,122,126,129,134,137,141,145,148,110,81,83,84,81,83,84',
+'2,168,8,7,18,194,21,24,25,29,34,39,44,47,50,54,200,85,7,72,1,78,175',
+'14,17,22,93,175,30,35,40,42,277,278,92,255,61,63,182,3,37,9,11,130,19',
+'37,27,32,258,113,116,183,49,52,55,58,67,69,171,172,60,65,16,37,152,27',
+'60,65,177,130,178,60,65,177,85,113,116,85,78,262,37,78,81,83,84,81,83',
+'84,102,299,81,83,84,60,65,261,2,184,8,7,18,264,21,24,25,29,34,39,44',
+'47,50,54,60,65,170,175,1,159,37,14,17,22,130,285,30,35,40,42,-181,-181',
+'281,27,61,63,300,3,191,9,11,95,19,192,27,32,74,60,65,189,49,52,55,58',
+'67,69,72,73,202,203,16,60,65,177,85,234,157,85,78,270,93,78,85,60,65',
+'130,78,108,92,37,7,113,116,21,24,25,29,34,39,44,47,50,54,271,2,37,8',
+'1,18,273,14,17,22,198,93,30,35,40,42,27,311,89,92,61,63,274,3,93,9,11',
+'130,19,152,27,32,92,-181,-181,201,49,52,55,58,67,69,130,60,65,,16,130',
+'-181,-181,27,93,89,113,116,121,124,128,130,92,195,196,,27,-181,-181',
+'7,60,65,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,27,30,35',
+'40,42,60,65,189,,61,63,190,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69',
+'130,,,,16,,113,116,121,124,128,132,136,139,143,147,150,112,115,,,,,',
+'7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42',
+',,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,130,,,,16,,113,116',
+'121,124,128,132,136,139,143,147,150,112,115,,,,,,7,,,21,24,25,29,34',
+'39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11',
+',19,,27,32,,,,,49,52,55,58,67,69,130,,,,16,,113,116,121,124,128,132',
+'136,139,143,147,150,112,115,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,',
+'2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,',
+'49,52,55,58,67,69,130,,,,16,,113,116,121,124,128,132,136,139,143,147',
+'150,112,115,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17',
+'22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69',
+'130,,,,16,,113,116,121,124,128,132,136,139,143,147,,,,,,,,,7,,,21,24',
+'25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63',
+',3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,130,,,,16,,113,116,121,124',
+'128,132,136,139,143,147,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2',
+',8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49',
+'52,55,58,67,69,130,,,,16,,113,116,121,124,128,132,136,139,143,147,,',
+',,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35',
+'40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,130,,,,16',
+',113,116,121,124,128,132,136,130,,,,,,113,116,121,124,128,7,,,21,24',
+'25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63',
+',3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,130,,,,16,,113,116,121,124',
+'128,132,136,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18',
+',14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58',
+'67,69,130,,,,16,,113,116,121,124,128,132,136,,,,,,,,,,,,7,,,21,24,25',
+'29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3',
+',9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,',
+',21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,',
+',,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,',
+',,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30',
+'35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16',
+',,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14',
+'17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,105,,,49,52,55,58',
+'67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2',
+',8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49',
+'52,55,58,67,69,130,,,,16,,113,116,121,124,128,132,136,139,143,147,150',
+'112,115,120,123,127,131,135,138,142,146,,291,,,,,,,,,,2,,8,7,18,,21',
+'24,25,29,34,39,44,47,50,54,,,,,1,,,14,17,22,,,30,35,40,42,,,,,61,63',
+',3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,',
+'7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42',
+',,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,',
+',,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30',
+'35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16',
+',,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14',
+'17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67',
+'69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8',
+'1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52',
+'55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50',
+'54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32',
+',,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39',
+'44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19',
+',27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25',
+'29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3',
+',9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,',
+',21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,',
+',,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,',
+',,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30',
+'35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16',
+',,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14',
+'17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67',
+'69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8',
+'1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52',
+'55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50',
+'54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32',
+',,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39',
+'44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19',
+',27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25',
+'29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3',
+',9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,',
+',21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,',
+',,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,',
+',,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30',
+'35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16',
+',,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14',
+'17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67',
+'69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8',
+'1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52',
+'55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50',
+'54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32',
+'74,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34',
+'39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11',
+',19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24',
+'25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63',
+',3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,',
+'7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42',
+',,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,',
+',,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30',
+'35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16',
+',,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14',
+'17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67',
+'69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8',
+'1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52',
+'55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50',
+'54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32',
+',,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39',
+'44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19',
+',27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25',
+'29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3',
+',9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,',
+',21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,',
+',,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,',
+',,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30',
+'35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,74,,,,49,52,55,58,67,69,,,,,16',
+',,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14',
+'17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67',
+'69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8',
+'1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52',
+'55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50',
+'54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32',
+',,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39',
+'44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19',
+',27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25',
+'29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3',
+',9,11,,19,,27,32,37,,,,49,52,55,58,67,69,130,,,,16,,113,116,121,124',
+'128,132,136,139,143,147,150,112,115,120,123,127,131,135,138,142,146',
+',,,,,,,,60,65,,2,,8,7,18,,21,24,25,29,34,39,44,47,50,54,,,,,1,,,14,17',
+'22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69',
+',,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1',
+'18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55',
+'58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54',
+',2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,',
+',49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44',
+'47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,',
+'27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29',
+'34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9',
+'11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21',
+'24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61',
+'63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,',
+',,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40',
+'42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,',
+',,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22',
+',,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,',
+',,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18',
+',14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58',
+'67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2',
+',8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49',
+'52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47',
+'50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27',
+'32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34',
+'39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11',
+',19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24',
+'25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63',
+',3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,',
+'7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42',
+',,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,',
+',,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30',
+'35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16',
+',,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14',
+'17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67',
+'69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8',
+'1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52',
+'55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50',
+'54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32',
+'117,,125,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,140,144,,,,118,,,,133',
+',,,,,,,,,130,2,,8,,18,113,116,121,124,128,132,136,139,143,147,150,112',
+'115,120,123,127,131,135,138,142,146,149,111,114,119,122,126,129,134',
+'137,179,145,148,110,117,,125,,,,,263,,,,,,,,,,,,,,,,,,,,,140,144,,,',
+'118,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147',
+'150,112,115,120,123,127,131,135,138,142,146,149,111,114,119,122,126',
+'129,134,137,141,145,148,110,,,,,,,,310,21,24,25,29,34,39,44,47,50,54',
+',,,,1,,,14,17,22,,,30,35,40,42,,,,,,63,,3,,9,11,,19,,27,32,,,,,49,52',
+'55,58,67,69,,,,,16,,,,21,24,25,29,34,39,44,47,50,54,,,,,1,,,14,17,22',
+',,30,35,40,,,,,,2,63,8,3,18,9,11,,19,,27,32,117,,125,,49,52,55,58,,',
+',,,,,,,,,,,,,,,,,,140,144,,,,118,,,,133,,,,,,,,,,130,2,,8,,18,113,116',
+'121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135,138',
+'142,146,149,111,114,119,122,126,129,134,137,141,145,148,110,,,,,,,,304',
+'21,24,25,29,34,39,44,47,50,54,,,,,1,,,14,17,22,,,30,35,40,,,,,,,63,',
+'3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,21,24,25,29,34,39,44',
+'47,50,54,,,,,,,,,,,,,,35,40,,,,,,,,,2,,8,,18,19,130,,32,117,,125,113',
+'116,121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135',
+'138,142,146,,,,,140,144,,,,118,,,,133,,,,,,,,,,130,2,,8,,18,113,116',
+'121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135,138',
+'142,146,149,111,114,119,122,126,129,134,137,141,145,148,110,117,130',
+'125,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120,123',
+'127,131,135,138,142,146,140,144,,,,118,,,,133,,,,,,,,,,130,,,,,,113',
+'116,121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135',
+'138,142,146,149,111,114,119,122,126,129,134,137,141,145,148,110,117',
+'130,125,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120',
+'123,127,131,135,138,142,146,140,144,,,,118,,,,133,,,,,,,,,,130,,,,,',
+'113,116,121,124,128,132,136,139,143,147,150,112,115,120,123,127,131',
+'135,138,142,146,149,111,114,119,122,126,129,134,137,141,145,148,110',
+'117,130,125,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115',
+'120,123,127,131,135,138,142,146,140,144,,,,118,,,,133,,,,,,,,,,130,',
+',,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120,123,127',
+'131,135,138,142,146,149,111,114,119,122,126,129,134,137,141,145,148',
+'110,117,130,125,,,,,113,116,121,124,128,132,136,139,143,147,150,112',
+'115,120,123,127,131,135,138,142,146,140,144,,,,118,,,,133,,,,,,,,,,130',
+',,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120,123,127',
+'131,135,138,142,146,149,111,114,119,122,126,129,134,137,141,145,148',
+'110,117,130,125,,,,,113,116,121,124,128,132,136,139,143,147,150,112',
+'115,120,123,127,131,135,138,142,146,140,144,,,,118,,,,133,,,,,,,,,,130',
+',,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120,123,127',
+'131,135,138,142,146,149,111,114,119,122,126,129,134,137,141,145,148',
+'110,117,,125,,,,,,,,,,,,,,,,,,,,,,,,,,140,144,,,,118,,,,133,,,,,,,,',
+',130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120,123',
+'127,131,135,138,142,146,149,111,114,119,122,126,129,134,137,141,145',
+'148,110,117,,125,,,,,,,,,,,,,,,,,,,,,,,,,,140,144,,,,118,,,,133,,,,',
+',,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120',
+'123,127,131,135,138,142,146,149,111,114,119,122,126,129,134,137,141',
+'145,148,110,117,,125,,,,,,,,,,,,,,,,,,,,,,,,,,140,144,,,,118,,,,133',
+',,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115',
+'120,123,127,131,135,138,142,146,149,111,114,119,122,126,129,134,137',
+'179,145,148,110,117,,125,,,,,,,,,,,,,,,,,,,,,,,,,,140,144,,,,118,,,',
+'133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112',
+'115,120,123,127,131,135,138,142,146,149,111,114,119,122,126,129,134',
+'137,141,145,148,110,117,,125,,,,,,,,,,,,,,,,,,,,,,,,,,140,144,,,,118',
+',,,133,,,,,,,,252,,130,,,,,,113,116,121,124,128,132,136,139,143,147',
+'150,112,115,120,123,127,131,135,138,142,146,149,111,114,119,122,126',
+'129,134,137,141,145,148,110,117,,125,,,,,,,,,,,,,,,,,,,,,,,,,,140,144',
+',,,118,,,,133,,,,,,,,37,,130,,,,,,113,116,121,124,128,132,136,139,143',
+'147,150,112,115,120,123,127,131,135,138,142,146,149,111,114,119,122',
+'126,129,134,137,141,145,148,110,117,,125,,,,,,,,,,,,,,,,,,,,,,,,,,140',
+'144,,,,118,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139',
+'143,147,150,112,115,120,123,127,131,135,138,142,146,149,111,114,119',
+'122,126,129,134,137,141,145,148,110,117,,125,,,,,,,,,,,,,,,,,,,,,,,',
+',,140,144,,,,118,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136',
+'139,143,147,150,112,115,120,123,127,131,135,138,142,146,149,111,114',
+'119,122,126,129,134,137,141,145,148,110,117,,125,,,,,,,,,,,,,,,,,,,',
+',,,,,,140,144,,,,118,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132',
+'136,139,143,147,150,112,115,120,123,127,131,135,138,142,146,149,111',
+'114,119,122,126,129,134,137,141,145,148,110,117,,125,,,,,,,,,,,,,,,',
+',,,,,,,,,,140,144,,,,118,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128',
+'132,136,139,143,147,150,112,115,120,123,127,131,135,138,142,146,149',
+'111,114,119,122,126,129,134,137,141,145,148,110,117,,125,,,,,,,,,,,',
+',,,,,,,,,,,,,,140,144,,,,118,,,,133,,,,,,,,,,130,,,,,,113,116,121,124',
+'128,132,136,139,143,147,150,112,115,120,123,127,131,135,138,142,146',
+'149,111,114,119,122,126,129,134,137,141,145,148,110,117,,125,,,,,,,',
+',,,,,,,,,,,,,,,,,,140,144,,,,118,,,,133,,,,,,,,37,,130,,,,,,113,116',
+'121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135,138',
+'142,146,149,111,114,119,122,126,129,134,137,141,145,148,110,117,,125',
+',,,,,,,,,,,,,,,,,,,,,,,,,140,144,,,,118,,,,133,,,,,,,,,,130,,,,,,113',
+'116,121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135',
+'138,142,146,149,111,114,119,122,126,129,134,137,141,145,148,110,140',
+'144,,,,,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143',
+'147,150,112,115,120,123,127,131,135,138,142,146,149,111,114,119,122',
+'126,129,134,137,141,145,148,110,140,144,,,,,,,,133,,,,,,,,,,130,,,,',
+',113,116,121,124,128,132,136,139,143,147,150,112,115,120,123,127,131',
+'135,138,142,146,149,111,114,119,122,126,129,134,137,141,145,148,110',
+'140,144,,,,,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139',
+'143,147,150,112,115,120,123,127,131,135,138,142,146,149,111,114,119',
+'122,126,129,134,137,141,140,144,,,,,,,,133,,,,,,,,,,130,,,,,,113,116',
+'121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135,138',
+'142,146,149,111,114,119,122,126,129,134,137,141,140,144,,,,,,,,133,',
+',,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115',
+'120,123,127,131,135,138,142,146,149,111,114,119,122,126,129,134,137',
+'141,140,144,,,,,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136',
+'139,143,147,150,112,115,120,123,127,131,135,138,142,146,149,111,114',
+'119,122,126,129,134,137,141,144,,,,,,,,133,,,,,,,,,,130,,,,,,113,116',
+'121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135,138',
+'142,146,149,111,114,119,122,126,129,134,137,141,144,,,,,,,,133,,,,,',
+',,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120',
+'123,127,131,135,138,142,146,149,111,114,119,122,126,129,134,137,141',
+'144,,,,,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143',
+'147,150,112,115,120,123,127,131,135,138,142,146,149,111,114,119,122',
+'126,129,134,137,141,144,,,,,,,,133,,,,,,,,,,130,,,,,,113,116,121,124',
+'128,132,136,139,143,147,150,112,115,120,123,127,131,135,138,142,146',
+'149,111,114,119,122,126,129,134,137,141,144,,,,,,,,133,,,,,,,,,,130',
+',,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120,123,127',
+'131,135,138,142,146,149,111,114,119,122,126,129,134,137,141,133,,,,',
+',,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120',
+'123,127,131,135,138,142,146,149,111,114,119,122,126,129,134,137,133',
+',,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115',
+'120,123,127,131,135,138,142,146,149,111,114,119,122,126,129,134,137',
+'133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112',
+'115,120,123,127,131,135,138,142,146,149,111,114,119,122,126,129,134',
+'137,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120',
+'123,127,131,135,138,142,146,149,111,114,119,122,126,129,134,137,130',
+',,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120,123,127',
+'131,135,138,142,146,149,111,114,119,122,126,129,134,137,130,,,,,,113',
+'116,121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135',
+'138,142,146,149,111,114,119,122,126,129,134,137,130,,,,,,113,116,121',
+'124,128,132,136,139,143,147,150,112,115,120,123,127,131,135,138,142',
+'146,149,111,114,119,122,126,129,134,137,130,,,,,,113,116,121,124,128',
+'132,136,139,143,147,150,112,115,120,123,127,131,135,138,142,146,149',
+'111,114,119,122,126,129,134,137' ]
+        racc_action_table = arr = Array.new(8867, nil)
         idx = 0
         clist.each do |str|
           str.split(',', -1).each do |i|
@@ -356,348 +338,329 @@ def on_error(error_token_id, error_value, value_stack)
         end
 
 clist = [
-'87,145,87,111,111,111,111,111,111,111,111,111,111,296,193,193,79,111',
-'111,111,111,296,248,111,111,111,87,87,193,265,248,87,111,186,111,87',
-'111,111,291,111,190,111,111,123,145,87,275,111,111,111,111,87,87,87',
-'87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87',
-'87,87,87,87,87,87,87,87,291,111,111,83,83,83,111,75,111,100,111,87,100',
-'100,100,100,100,100,100,100,100,100,277,70,70,70,100,100,100,100,275',
-'275,100,100,100,100,76,185,94,152,100,100,35,100,76,100,100,176,100',
-'151,100,100,90,90,277,176,100,100,100,100,100,100,277,38,38,277,100',
-'38,301,301,208,217,217,76,263,76,208,208,208,208,208,83,94,94,176,83',
-'84,84,84,98,98,41,41,41,149,100,100,244,244,244,100,70,100,302,100,70',
-'302,302,302,302,302,302,302,302,302,302,41,243,243,243,302,302,302,302',
-'42,175,302,302,302,302,259,176,176,175,302,302,245,302,259,302,302,180',
-'302,254,302,302,29,29,34,34,302,302,302,302,302,302,272,272,143,161',
-'302,21,175,41,84,161,161,259,84,41,197,278,278,41,141,244,197,197,140',
-'244,245,245,245,218,184,180,180,180,245,302,302,294,39,180,302,243,302',
-'3,302,243,3,3,3,3,3,3,3,3,3,3,91,169,97,14,3,3,3,3,174,160,3,3,3,3,6',
-'160,160,80,3,3,173,3,2,3,3,159,3,303,3,3,2,159,159,1,3,3,3,3,3,3,122',
-',,,3,169,169,169,,169,,204,174,174,174,,230,204,204,2,,2,230,230,230',
-'230,230,230,230,230,230,230,,3,3,,,,3,,3,126,3,,126,126,126,126,126',
-'126,126,126,126,126,,,89,,126,126,126,126,89,89,126,126,126,126,78,78',
-'78,,126,126,78,126,,126,126,200,126,,126,126,,200,200,,126,126,126,126',
-'126,126,219,,,,126,,219,219,219,219,219,219,219,219,219,219,219,219',
-'219,219,219,219,219,219,219,219,219,,,165,,,,126,126,165,165,,126,,126',
-'125,126,,125,125,125,125,125,125,125,125,125,125,,,166,,125,125,125',
-'125,166,166,125,125,125,125,,,,,125,125,,125,,125,125,163,125,,125,125',
-',163,163,,125,125,125,125,125,125,215,,,,125,,215,215,215,215,215,215',
-'215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,,,,,,,125',
-'125,,,,125,,125,9,125,,9,9,9,9,9,9,9,9,9,9,,,,,9,9,9,9,,,9,9,9,9,,,',
-',9,9,,9,,9,9,,9,,9,9,,,,,9,9,9,9,9,9,223,,,,9,,223,223,223,223,223,223',
-'223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,,,,,,,9',
-'9,,,,9,,9,10,9,,10,10,10,10,10,10,10,10,10,10,,,,,10,10,10,10,,,10,10',
-'10,10,,,,,10,10,,10,,10,10,,10,,10,10,,,,,10,10,10,10,10,10,195,,,,10',
-',195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195',
-'195,195,195,195,,,,,,,10,10,,,,10,,10,124,10,,124,124,124,124,124,124',
-'124,124,124,124,,,,,124,124,124,124,,,124,124,124,124,,,,,124,124,,124',
-',124,124,,124,,124,124,,,,,124,124,124,124,124,124,231,,,,124,,231,231',
-'231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231',
-'231,231,,,,,,,124,124,,,,124,,124,13,124,,13,13,13,13,13,13,13,13,13',
-'13,,,,,13,13,13,13,,,13,13,13,13,,,,,13,13,,13,,13,13,,13,,13,13,,,',
-',13,13,13,13,13,13,229,,,,13,,229,229,229,229,229,229,229,229,229,229',
-'229,229,229,229,229,229,229,229,229,229,229,,,,,,,13,13,,,,13,,13,128',
-'13,,128,128,128,128,128,128,128,128,128,128,,,,,128,128,128,128,,,128',
-'128,128,128,,,,,128,128,,128,,128,128,,128,,128,128,,,,,128,128,128',
-'128,128,128,226,,,,128,,226,226,226,226,226,226,226,226,226,226,226',
-'226,226,226,226,226,226,226,226,226,226,,,,,,,128,128,,,,128,,128,284',
-'128,,284,284,284,284,284,284,284,284,284,284,,,,,284,284,284,284,,,284',
-'284,284,284,,,,,284,284,,284,,284,284,,284,,284,284,,,,,284,284,284',
-'284,284,284,212,,,,284,,212,212,212,212,212,212,212,212,212,212,212',
-'212,212,212,212,212,212,212,212,212,212,,284,,,,,284,284,,,,284,,284',
-'22,284,,22,22,22,22,22,22,22,22,22,22,,,,,22,22,22,22,,,22,22,22,22',
-',,,,22,22,,22,,22,22,,22,,22,22,,,,,22,22,22,22,22,22,196,,,,22,,196',
-'196,196,196,196,196,196,196,196,196,196,196,196,224,,,,,,224,224,224',
-'224,224,224,224,,22,22,,,,22,,22,282,22,,282,282,282,282,282,282,282',
-'282,282,282,,,,,282,282,282,282,,,282,282,282,282,,,,,282,282,,282,',
-'282,282,,282,,282,282,,,,,282,282,282,282,282,282,207,,,,282,,207,207',
-'207,207,207,207,207,207,207,207,207,207,207,220,,,,,,220,220,220,220',
-'220,220,220,,282,282,,,,282,,282,30,282,,30,30,30,30,30,30,30,30,30',
-'30,,,,,30,30,30,30,,,30,30,30,30,,,,,30,30,,30,,30,30,,30,,30,30,,30',
-',,30,30,30,30,30,30,203,,,,30,,203,203,203,203,203,203,203,203,203,203',
-'203,203,203,216,,,,,,216,216,216,216,216,216,216,,30,30,,,,30,,30,281',
-'30,,281,281,281,281,281,281,281,281,281,281,,,,,281,281,281,281,,,281',
-'281,281,281,,,,,281,281,,281,,281,281,,281,,281,281,,,,,281,281,281',
-'281,281,281,199,,,,281,,199,199,199,199,199,199,199,199,199,199,199',
-'199,199,213,,,,,,213,213,213,213,213,,,,281,281,,,,281,,281,276,281',
-',276,276,276,276,276,276,276,276,276,276,,,,,276,276,276,276,,,276,276',
-'276,276,,,,,276,276,,276,,276,276,,276,,276,276,,,,,276,276,276,276',
-'276,276,232,,,,276,,232,232,232,232,232,232,232,232,232,232,227,,,,',
-',227,227,227,227,227,227,227,227,227,227,,276,276,,,,276,,276,271,276',
-',271,271,271,271,271,271,271,271,271,271,,,,,271,271,271,271,,,271,271',
-'271,271,,,,,271,271,,271,,271,271,,271,,271,271,,,,,271,271,271,271',
-'271,271,,,,,271,,,,,,,,,,,,,,,,,,,,,,,,,,,,,271,271,,,,271,,271,270',
-'271,,270,270,270,270,270,270,270,270,270,270,,,,,270,270,270,270,,,270',
-'270,270,270,,,,,270,270,,270,,270,270,,270,,270,270,,,,,270,270,270',
-'270,270,270,,,,,270,,,,,,,,,,,,,,,,,,,,,,,,,,,,,270,270,,,,270,,270',
-'251,270,,251,251,251,251,251,251,251,251,251,251,,,,,251,251,251,251',
-',,251,251,251,251,,,,,251,251,,251,,251,251,,251,,251,251,251,,,,251',
-'251,251,251,251,251,,,,,251,,,,,,,,,,,,,,,,,,,,,,,,,,,,,251,251,251',
-'251,,251,,251,250,251,,250,250,250,250,250,250,250,250,250,250,,,,,250',
-'250,250,250,,,250,250,250,250,,,,,250,250,,250,,250,250,,250,,250,250',
-',,,,250,250,250,250,250,250,,,,,250,,,,,,,,,,,,,,,,,,,,,,,,,,,,,250',
-'250,,,,250,,250,129,250,,129,129,129,129,129,129,129,129,129,129,,,',
-',129,129,129,129,,,129,129,129,129,,,,,129,129,,129,,129,129,,129,,129',
-'129,,,,,129,129,129,129,129,129,,,,,129,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
-'129,129,,,,129,,129,44,129,,44,44,44,44,44,44,44,44,44,44,,,,,44,44',
-'44,44,,,44,44,44,44,,,,,44,44,,44,,44,44,,44,,44,44,,,,,44,44,44,44',
-'44,44,,,,,44,,,,,,,,,,,,,,,,,,,,,,,,,,,,,44,44,,,,44,,44,48,44,,48,48',
-'48,48,48,48,48,48,48,48,,,,,48,48,48,48,,,48,48,48,48,,,,,48,48,,48',
-',48,48,,48,,48,48,,,,,48,48,48,48,48,48,,,,,48,,,,,,,,,,,,,,,,,,,,,',
-',,,,,,,48,48,,,,48,,48,53,48,,53,53,53,53,53,53,53,53,53,53,,,,,53,53',
-'53,53,,,53,53,53,53,,,,,53,53,,53,,53,53,,53,,53,53,,,,,53,53,53,53',
-'53,53,,,,,53,,,,,,,,,,,,,,,,,,,,,,,,,,,,,53,53,,,,53,,53,57,53,,57,57',
-'57,57,57,57,57,57,57,57,,,,,57,57,57,57,,,57,57,57,57,,,,,57,57,,57',
-',57,57,,57,,57,57,,,,,57,57,57,57,57,57,,,,,57,,,,,,,,,,,,,,,,,,,,,',
-',,,,,,,57,57,,,,57,,57,59,57,,59,59,59,59,59,59,59,59,59,59,,,,,59,59',
-'59,59,,,59,59,59,59,,,,,59,59,,59,,59,59,,59,,59,59,,,,,59,59,59,59',
-'59,59,,,,,59,,,,,,,,,,,,,,,,,,,,,,,,,,,,,59,59,,,,59,,59,63,59,,63,63',
-'63,63,63,63,63,63,63,63,,,,,63,63,63,63,,,63,63,63,63,,,,,63,63,,63',
-',63,63,,63,,63,63,,,,,63,63,63,63,63,63,,,,,63,,,,,,,,,,,,,,,,,,,,,',
-',,,,,,,63,63,,,,63,,63,64,63,,64,64,64,64,64,64,64,64,64,64,,,,,64,64',
-'64,64,,,64,64,64,64,,,,,64,64,,64,,64,64,,64,,64,64,,,,,64,64,64,64',
-'64,64,,,,,64,,,,,,,,,,,,,,,,,,,,,,,,,,,,,64,64,,,,64,,64,68,64,,68,68',
-'68,68,68,68,68,68,68,68,,,,,68,68,68,68,,,68,68,68,68,,,,,68,68,,68',
-',68,68,,68,,68,68,,,,,68,68,68,68,68,68,,,,,68,,,,,,,,,,,,,,,,,,,,,',
-',,,,,,,68,68,,,,68,,68,192,68,,192,192,192,192,192,192,192,192,192,192',
-',,,,192,192,192,192,,,192,192,192,192,,,,,192,192,,192,,192,192,,192',
-',192,192,,,,,192,192,192,192,192,192,,,,,192,,,,,,,,,,,,,,,,,,,,,,,',
-',,,,,192,192,,,,192,,192,71,192,,71,71,71,71,71,71,71,71,71,71,,,,,71',
-'71,71,71,,,71,71,71,71,,,,,71,71,,71,,71,71,,71,,71,71,71,,,,71,71,71',
-'71,71,71,,,,,71,,,,,,,,,,,,,,,,,,,,,,,,,,,,,71,71,,,,71,,71,72,71,,72',
-'72,72,72,72,72,72,72,72,72,,,,,72,72,72,72,,,72,72,72,72,,,,,72,72,',
-'72,,72,72,,72,,72,72,,,,,72,72,72,72,72,72,,,,,72,,,,,,,,,,,,,,,,,,',
-',,,,,,,,,,72,72,,,,72,,72,191,72,,191,191,191,191,191,191,191,191,191',
-'191,,,,,191,191,191,191,,,191,191,191,191,,,,,191,191,,191,,191,191',
-',191,,191,191,,,,,191,191,191,191,191,191,,,,,191,,,,,,,,,,,,,,,,,,',
-',,,,,,,,,,191,191,,,,191,,191,179,191,,179,179,179,179,179,179,179,179',
-'179,179,,,,,179,179,179,179,,,179,179,179,179,,,,,179,179,,179,,179',
-'179,,179,,179,179,,,,,179,179,179,179,179,179,,,,,179,,,,,,,,,,,,,,',
-',,,,,,,,,,,,,,179,179,,,,179,,179,178,179,,178,178,178,178,178,178,178',
-'178,178,178,,,,,178,178,178,178,,,178,178,178,178,,,,,178,178,,178,',
-'178,178,,178,,178,178,,,,,178,178,178,178,178,178,,,,,178,,,,,,,,,,',
-',,,,,,,,,,,,,,,,,,178,178,,,,178,,178,121,178,,121,121,121,121,121,121',
-'121,121,121,121,,,,,121,121,121,121,,,121,121,121,121,,,,,121,121,,121',
-',121,121,,121,,121,121,,,,,121,121,121,121,121,121,,,,,121,,,,,,,,,',
-',,,,,,,,,,,,,,,,,,,121,121,,,,121,,121,170,121,,170,170,170,170,170',
-'170,170,170,170,170,,,,,170,170,170,170,,,170,170,170,170,,,,,170,170',
-',170,,170,170,,170,,170,170,,,,,170,170,170,170,170,170,,,,,170,,,,',
-',,,,,,,,,,,,,,,,,,,,,,,,170,170,,,,170,,170,157,170,,157,157,157,157',
-'157,157,157,157,157,157,,,,,157,157,157,157,,,157,157,157,157,,,,,157',
-'157,,157,,157,157,,157,,157,157,,,,,157,157,157,157,157,157,,,,,157',
-',,,,,,,,,,,,,,,,,,,,,,,,,,,,157,157,,,,157,,157,155,157,,155,155,155',
-'155,155,155,155,155,155,155,,,,,155,155,155,155,,,155,155,155,155,,',
-',,155,155,,155,,155,155,,155,,155,155,155,,,,155,155,155,155,155,155',
-',,,,155,,,,,,,,,,,,,,,,,,,,,,,,,,,,,155,155,,,,155,,155,120,155,,120',
-'120,120,120,120,120,120,120,120,120,,,,,120,120,120,120,,,120,120,120',
-'120,,,,,120,120,,120,,120,120,,120,,120,120,,,,,120,120,120,120,120',
-'120,,,,,120,,,,,,,,,,,,,,,,,,,,,,,,,,,,,120,120,,,,120,,120,85,120,',
-'85,85,85,85,85,85,85,85,85,85,,,,,85,85,85,85,,,85,85,85,85,,,,,85,85',
-',85,,85,85,,85,,85,85,85,,,,85,85,85,85,85,85,,,,,85,,,,,,,,,,,,,,,',
-',,,,,,,,,,,,,85,85,,,,85,,85,150,85,,150,150,150,150,150,150,150,150',
-'150,150,,,,,150,150,150,150,,,150,150,150,150,,,,,150,150,,150,,150',
-'150,,150,,150,150,,,,,150,150,150,150,150,150,,,,,150,,,,,,,,,,,,,,',
-',,,,,,,,,,,,,,150,150,,,,150,,150,0,150,,0,0,0,0,0,0,0,0,0,0,,,,,0,0',
-'0,0,,,0,0,0,0,,,,,0,0,,0,,0,0,,0,,0,0,0,,,,0,0,0,0,0,0,,,,,0,,,,,,,',
-',,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,,0,138,0,,138,138,138,138,138,138,138',
-'138,138,138,,,,,138,138,138,138,,,138,138,138,138,,,,,138,138,,138,',
-'138,138,,138,,138,138,,,,,138,138,138,138,138,138,,,,,138,,,,,,,,,,',
-',,,,,,,,,,,,,,,,,,138,138,,,,138,,138,137,138,,137,137,137,137,137,137',
-'137,137,137,137,,,,,137,137,137,137,,,137,137,137,137,,,,,137,137,,137',
-',137,137,,137,,137,137,,,,,137,137,137,137,137,137,,,,,137,,,,,,,,,',
-',,,,,,,,,,,,,,,,,,,137,137,,,,137,,137,135,137,,135,135,135,135,135',
-'135,135,135,135,135,,,,,135,135,135,135,,,135,135,135,135,,,,,135,135',
-',135,,135,135,,135,,135,135,,,,,135,135,135,135,135,135,,,,,135,,,,',
-',,,,,,,,,,,,,,,,,,,,,,,,135,135,,,,135,,135,134,135,,134,134,134,134',
-'134,134,134,134,134,134,,,,,134,134,134,134,,,134,134,134,134,,,,,134',
-'134,,134,,134,134,,134,,134,134,,,,,134,134,134,134,134,134,,,,,134',
-',,,,,,,,,,,,,,,,,,,,,,,,,,,,134,134,,,,134,,134,133,134,,133,133,133',
-'133,133,133,133,133,133,133,,,,,133,133,133,133,,,133,133,133,133,,',
-',,133,133,,133,,133,133,,133,,133,133,,,,,133,133,133,133,133,133,,',
-',,133,,,,,,,,,,,,,,,,,,,,,,,,,,,,,133,133,,,,133,,133,93,133,,93,93',
-'93,93,93,93,93,93,93,93,,,,,93,93,93,93,,,93,93,93,93,,,,,93,93,,93',
-',93,93,,93,,93,93,,,,,93,93,93,93,93,93,,,,,93,,,,,,,,,,,,,,,,,,,,,',
-',,,,,,,93,93,,,,93,,93,132,93,,132,132,132,132,132,132,132,132,132,132',
-',,,,132,132,132,132,,,132,132,132,132,,,,,132,132,,132,,132,132,,132',
-',132,132,,,,,132,132,132,132,132,132,,,,,132,,,,,,,,,,,,,,,,,,,,,,,',
-',,,,,132,132,,,,132,,132,131,132,,131,131,131,131,131,131,131,131,131',
-'131,,,,,131,131,131,131,,,131,131,131,131,,,,,131,131,,131,,131,131',
-',131,,131,131,,,,,131,131,131,131,131,131,,,,,131,,,,,,,,,,,,,,,,,,',
-',,,,,,,,,,131,131,,,,131,,131,130,131,,130,130,130,130,130,130,130,130',
-'130,130,,,,,130,130,130,130,,,130,130,130,130,,,,,130,130,,130,,130',
-'130,,130,,130,130,,,,,130,130,130,130,130,130,,,,,130,,,,,,,,,,,,,,',
-',,,,,,,,,,,,,,130,130,,,,130,,130,99,130,,99,99,99,99,99,99,99,99,99',
-'99,,,,,99,99,99,99,,,99,99,99,99,,,,,99,99,,99,,99,99,,99,,99,99,,,',
-',99,99,99,99,99,99,,,,,99,,,,,,,,,,,,,,,,,,,,,,,,,,,,,99,99,,,,99,,99',
-'127,99,,127,127,127,127,127,127,127,127,127,127,,,,,127,127,127,127',
-',,127,127,127,127,,,,,127,127,,127,,127,127,,127,,127,127,,,,,127,127',
-'127,127,127,127,,,,,127,,,,,,,,,,,,,,,,,,,,,,,,,,,,,127,127,,,,127,',
-'127,101,127,,101,101,101,101,101,101,101,101,101,101,,,,,101,101,101',
-'101,,,101,101,101,101,,,,,101,101,,101,,101,101,,101,,101,101,,,,,101',
-'101,101,101,101,101,,,,,101,,,,,,,,,,,,,,,,,,,,,,,,,,,,,101,101,,,,101',
-',101,102,101,,102,102,102,102,102,102,102,102,102,102,,,,,102,102,102',
-'102,,,102,102,102,102,,,,,102,102,,102,,102,102,,102,,102,102,,,,,102',
-'102,102,102,102,102,,,,,102,,,,,,,,,,,,,,,,,,,,,,,,,,,,,102,102,,,,102',
-',102,103,102,,103,103,103,103,103,103,103,103,103,103,,,,,103,103,103',
-'103,,,103,103,103,103,,,,,103,103,,103,,103,103,,103,,103,103,,,,,103',
-'103,103,103,103,103,,,,,103,,,,,,,,,,,,,,,,,,,,,,,,,,,,,103,103,,,,103',
-',103,104,103,,104,104,104,104,104,104,104,104,104,104,,,,,104,104,104',
-'104,,,104,104,104,104,,,,,104,104,,104,,104,104,,104,,104,104,,,,,104',
-'104,104,104,104,104,,,,,104,,,,,,,,,,,,,,,,,,,,,,,,,,,,,104,104,,,,104',
-',104,105,104,,105,105,105,105,105,105,105,105,105,105,,,,,105,105,105',
-'105,,,105,105,105,105,,,,,105,105,,105,,105,105,,105,,105,105,,,,,105',
-'105,105,105,105,105,,,,,105,,,,,,,,,,,,,,,,,,,,,,,,,,,,,105,105,,,,105',
-',105,106,105,,106,106,106,106,106,106,106,106,106,106,,,,,106,106,106',
-'106,,,106,106,106,106,,,,,106,106,,106,,106,106,,106,,106,106,,,,,106',
-'106,106,106,106,106,,,,,106,,,,,,,,,,,,,,,,,,,,,,,,,,,,,106,106,,,,106',
-',106,118,106,,118,118,118,118,118,118,118,118,118,118,,,,,118,118,118',
-'118,,,118,118,118,118,,,,,118,118,,118,,118,118,,118,,118,118,,,,,118',
-'118,118,118,118,118,,,,,118,,,,,,,,,,,,,,,,,,,,,,,,,,,,,118,118,,,,118',
-',118,108,118,,108,108,108,108,108,108,108,108,108,108,,,,,108,108,108',
-'108,,,108,108,108,108,,,,,108,108,,108,,108,108,,108,,108,108,,,,,108',
-'108,108,108,108,108,,,,,108,,,,,,,,,,,,,,,,,,,,,,,,,,,,,108,108,,,,108',
-',108,109,108,,109,109,109,109,109,109,109,109,109,109,,,,,109,109,109',
-'109,,,109,109,109,109,,,,,109,109,,109,,109,109,,109,,109,109,,,,,109',
-'109,109,109,109,109,,,,,109,,,,,,,,,,,,,,,,,,,,,,,,,,,,,109,109,,,,109',
-',109,110,109,,110,110,110,110,110,110,110,110,110,110,,,,,110,110,110',
-'110,,,110,110,110,110,,,,,110,110,,110,,110,110,,110,,110,110,,,,,110',
-'110,110,110,110,110,,,,,110,,,,,,,,,,,,,,,,,,,,,,,,,,,,,110,110,,,,110',
-',110,119,110,,119,119,119,119,119,119,119,119,119,119,,,,,119,119,119',
-'119,,,119,119,119,119,,,,,119,119,,119,,119,119,,119,,119,119,,,,,119',
-'119,119,119,119,119,,,,,119,,,,,,,,,,,,,,,,,,,,,,,,,,,,,119,119,,,,119',
-',119,112,119,,112,112,112,112,112,112,112,112,112,112,,,,,112,112,112',
-'112,,,112,112,112,112,,,,,112,112,,112,,112,112,,112,,112,112,,,,,112',
-'112,112,112,112,112,,,,,112,,,,,,,,,,,,,,,,,,,,,,,,,,,,,112,112,,,,112',
-',112,113,112,,113,113,113,113,113,113,113,113,113,113,,,,,113,113,113',
-'113,,,113,113,113,113,,,,,113,113,,113,,113,113,,113,,113,113,,,,,113',
-'113,113,113,113,113,,,,,113,,,,,,,,,,,,,,,,,,,,,,,,,,,,,113,113,,,,113',
-',113,114,113,,114,114,114,114,114,114,114,114,114,114,,,,,114,114,114',
-'114,,,114,114,114,114,,,,,114,114,,114,,114,114,,114,,114,114,,,,,114',
-'114,114,114,114,114,,,,,114,,,,,,,,,,,,,,,,,,,,,,,,,,,,,114,114,,,,114',
-',114,115,114,,115,115,115,115,115,115,115,115,115,115,,,,,115,115,115',
-'115,,,115,115,115,115,,,,,115,115,,115,,115,115,,115,,115,115,,,,,115',
-'115,115,115,115,115,,,,,115,,,,,,,,,,,,,,,,,,,,,,,,,,,,,115,115,,,,115',
-',115,116,115,,116,116,116,116,116,116,116,116,116,116,,,,,116,116,116',
-'116,,,116,116,116,116,,,,,116,116,,116,,116,116,,116,,116,116,,,,,116',
-'116,116,116,116,116,,,,,116,,,,,,,,,,,,,,,,,,,,,,,,,,,,,116,116,,,,116',
-',116,117,116,,117,117,117,117,117,117,117,117,117,117,,,,,117,117,117',
-'117,,,117,117,117,117,,,,,117,117,,117,,117,117,,117,,117,117,,,,,117',
-'117,117,117,117,117,,,,,117,,,,,,,,,,,,,,,,,,,,,,,,,,,,,117,117,,,,117',
-',117,107,117,,107,107,107,107,107,107,107,107,107,107,,,,,107,107,107',
-'107,,,107,107,107,107,,,,,107,107,,107,,107,107,,107,,107,107,,,,,107',
-'107,107,107,107,107,,,,,107,153,153,153,153,153,153,153,153,153,153',
-',,,,,,,,,,,153,153,,,,,,107,107,,,,107,,107,153,107,,153,,,305,,305',
-'5,5,5,5,5,5,5,5,5,5,,,,,,,,,,,,5,5,305,305,,,,305,,,,305,,,,5,,,5,,',
-'305,153,,153,,153,305,305,305,305,305,305,305,305,305,305,305,305,305',
+'100,302,100,159,159,159,159,159,159,159,159,159,159,162,109,109,252',
+'301,42,162,162,70,204,204,252,301,159,159,100,100,96,96,96,100,169,169',
+'204,100,255,163,254,159,262,161,159,163,163,100,302,161,161,36,36,100',
+'100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100',
+'100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,249',
+'249,249,250,250,250,159,70,159,177,159,100,177,177,177,177,177,177,177',
+'177,177,177,106,96,152,168,177,96,75,177,177,177,189,180,177,177,177',
+'177,280,280,189,170,177,177,81,177,271,177,177,214,177,273,177,177,177',
+'214,214,83,177,177,177,177,177,177,73,73,106,106,177,152,153,189,75',
+'75,75,221,75,180,180,180,249,221,221,250,249,180,173,250,97,97,97,5',
+'5,5,26,282,46,46,46,177,177,179,177,84,177,2,177,187,2,2,2,2,2,2,2,2',
+'2,2,189,189,72,193,2,46,22,2,2,2,98,282,2,2,2,2,98,98,234,282,2,2,282',
+'2,92,2,2,11,2,93,2,2,2,187,187,187,2,2,2,2,2,2,1,1,233,233,2,193,193',
+'193,97,141,46,5,97,193,8,5,46,41,41,217,46,140,8,299,3,217,217,3,3,3',
+'3,3,3,3,3,3,3,195,2,196,2,3,2,197,3,3,3,102,89,3,3,3,3,8,306,8,89,3',
+'3,201,3,267,3,3,167,3,45,3,3,267,167,167,108,3,3,3,3,3,3,160,308,308',
+',3,225,160,160,89,188,89,225,225,225,225,225,166,188,101,101,,267,166',
+'166,131,283,283,131,131,131,131,131,131,131,131,131,131,,3,,3,131,3',
+',131,131,131,,188,131,131,131,131,91,91,91,,131,131,91,131,,131,131',
+',131,,131,131,,,,,131,131,131,131,131,131,213,,,,131,,213,213,213,213',
+'213,213,213,213,213,213,213,213,213,,,,,,7,,,7,7,7,7,7,7,7,7,7,7,,131',
+',131,7,131,,7,7,7,,,7,7,7,7,,,,,7,7,,7,,7,7,,7,,7,7,,,,,7,7,7,7,7,7',
+'224,,,,7,,224,224,224,224,224,224,224,224,224,224,224,224,224,,,,,,129',
+',,129,129,129,129,129,129,129,129,129,129,,7,,7,129,7,,129,129,129,',
+',129,129,129,129,,,,,129,129,,129,,129,129,,129,,129,129,,,,,129,129',
+'129,129,129,129,220,,,,129,,220,220,220,220,220,220,220,220,220,220',
+'220,220,220,,,,,,9,,,9,9,9,9,9,9,9,9,9,9,,129,,129,9,129,,9,9,9,,,9',
+'9,9,9,,,,,9,9,,9,,9,9,,9,,9,9,,,,,9,9,9,9,9,9,216,,,,9,,216,216,216',
+'216,216,216,216,216,216,216,216,216,216,,,,,,128,,,128,128,128,128,128',
+'128,128,128,128,128,,9,,9,128,9,,128,128,128,,,128,128,128,128,,,,,128',
+'128,,128,,128,128,,128,,128,128,,,,,128,128,128,128,128,128,209,,,,128',
+',209,209,209,209,209,209,209,209,209,209,,,,,,,,,127,,,127,127,127,127',
+'127,127,127,127,127,127,,128,,128,127,128,,127,127,127,,,127,127,127',
+'127,,,,,127,127,,127,,127,127,,127,,127,127,,,,,127,127,127,127,127',
+'127,207,,,,127,,207,207,207,207,207,207,207,207,207,207,,,,,,,,,16,',
+',16,16,16,16,16,16,16,16,16,16,,127,,127,16,127,,16,16,16,,,16,16,16',
+'16,,,,,16,16,,16,,16,16,,16,,16,16,,,,,16,16,16,16,16,16,243,,,,16,',
+'243,243,243,243,243,243,243,243,243,243,,,,,,,,,126,,,126,126,126,126',
+'126,126,126,126,126,126,,16,,16,126,16,,126,126,126,,,126,126,126,126',
+',,,,126,126,,126,,126,126,,126,,126,126,,,,,126,126,126,126,126,126',
+'240,,,,126,,240,240,240,240,240,240,240,229,,,,,,229,229,229,229,229',
+'18,,,18,18,18,18,18,18,18,18,18,18,,126,,126,18,126,,18,18,18,,,18,18',
+'18,18,,,,,18,18,,18,,18,18,,18,,18,18,,,,,18,18,18,18,18,18,232,,,,18',
+',232,232,232,232,232,232,232,,,,,,,,,,,,285,,,285,285,285,285,285,285',
+'285,285,285,285,,18,,18,285,18,,285,285,285,,,285,285,285,285,,,,,285',
+'285,,285,,285,285,,285,,285,285,,,,,285,285,285,285,285,285,236,,,,285',
+',236,236,236,236,236,236,236,,,,,,,,,,,,278,,,278,278,278,278,278,278',
+'278,278,278,278,,285,,285,278,285,,278,278,278,,,278,278,278,278,,,',
+',278,278,,278,,278,278,,278,,278,278,,,,,278,278,278,278,278,278,,,',
+',278,,,,,,,,,,,,,,,,,,,,30,,,30,30,30,30,30,30,30,30,30,30,,278,,278',
+'30,278,,30,30,30,,,30,30,30,30,,,,,30,30,,30,,30,30,,30,,30,30,,,,,30',
+'30,30,30,30,30,,,,,30,,,,,,,,,,,,,,,,,,,,277,,,277,277,277,277,277,277',
+'277,277,277,277,,30,,30,277,30,,277,277,277,,,277,277,277,277,,,,,277',
+'277,,277,,277,277,,277,,277,277,,,,,277,277,277,277,277,277,,,,,277',
+',,,,,,,,,,,,,,,,,,,37,,,37,37,37,37,37,37,37,37,37,37,,277,,277,37,277',
+',37,37,37,,,37,37,37,37,,,,,37,37,,37,,37,37,,37,,37,37,,37,,,37,37',
+'37,37,37,37,,,,,37,,,,,,,,,,,,,,,,,,,,261,,,261,261,261,261,261,261',
+'261,261,261,261,,37,,37,261,37,,261,261,261,,,261,261,261,261,,,,,261',
+'261,,261,,261,261,,261,,261,261,,,,,261,261,261,261,261,261,206,,,,261',
+',206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206',
+'206,206,206,206,,261,,,,,,,,,,261,,261,259,261,,259,259,259,259,259',
+'259,259,259,259,259,,,,,259,,,259,259,259,,,259,259,259,259,,,,,259',
+'259,,259,,259,259,,259,,259,259,,,,,259,259,259,259,259,259,,,,,259',
+',,,,,,,,,,,,,,,,,,,258,,,258,258,258,258,258,258,258,258,258,258,,259',
+',259,258,259,,258,258,258,,,258,258,258,258,,,,,258,258,,258,,258,258',
+',258,,258,258,,,,,258,258,258,258,258,258,,,,,258,,,,,,,,,,,,,,,,,,',
+',203,,,203,203,203,203,203,203,203,203,203,203,,258,,258,203,258,,203',
+'203,203,,,203,203,203,203,,,,,203,203,,203,,203,203,,203,,203,203,,',
+',,203,203,203,203,203,203,,,,,203,,,,,,,,,,,,,,,,,,,,202,,,202,202,202',
+'202,202,202,202,202,202,202,,203,,203,202,203,,202,202,202,,,202,202',
+'202,202,,,,,202,202,,202,,202,202,,202,,202,202,,,,,202,202,202,202',
+'202,202,,,,,202,,,,,,,,,,,,,,,,,,,,49,,,49,49,49,49,49,49,49,49,49,49',
+',202,,202,49,202,,49,49,49,,,49,49,49,49,,,,,49,49,,49,,49,49,,49,,49',
+'49,,,,,49,49,49,49,49,49,,,,,49,,,,,,,,,,,,,,,,,,,,52,,,52,52,52,52',
+'52,52,52,52,52,52,,49,,49,52,49,,52,52,52,,,52,52,52,52,,,,,52,52,,52',
+',52,52,,52,,52,52,,,,,52,52,52,52,52,52,,,,,52,,,,,,,,,,,,,,,,,,,,55',
+',,55,55,55,55,55,55,55,55,55,55,,52,,52,55,52,,55,55,55,,,55,55,55,55',
+',,,,55,55,,55,,55,55,,55,,55,55,,,,,55,55,55,55,55,55,,,,,55,,,,,,,',
+',,,,,,,,,,,,58,,,58,58,58,58,58,58,58,58,58,58,,55,,55,58,55,,58,58',
+'58,,,58,58,58,58,,,,,58,58,,58,,58,58,,58,,58,58,,,,,58,58,58,58,58',
+'58,,,,,58,,,,,,,,,,,,,,,,,,,,61,,,61,61,61,61,61,61,61,61,61,61,,58',
+',58,61,58,,61,61,61,,,61,61,61,61,,,,,61,61,,61,,61,61,,61,,61,61,,',
+',,61,61,61,61,61,61,,,,,61,,,,,,,,,,,,,,,,,,,,63,,,63,63,63,63,63,63',
+'63,63,63,63,,61,,61,63,61,,63,63,63,,,63,63,63,63,,,,,63,63,,63,,63',
+'63,,63,,63,63,,,,,63,63,63,63,63,63,,,,,63,,,,,,,,,,,,,,,,,,,,67,,,67',
+'67,67,67,67,67,67,67,67,67,,63,,63,67,63,,67,67,67,,,67,67,67,67,,,',
+',67,67,,67,,67,67,,67,,67,67,,,,,67,67,67,67,67,67,,,,,67,,,,,,,,,,',
+',,,,,,,,,69,,,69,69,69,69,69,69,69,69,69,69,,67,,67,69,67,,69,69,69',
+',,69,69,69,69,,,,,69,69,,69,,69,69,,69,,69,69,,,,,69,69,69,69,69,69',
+',,,,69,,,,,,,,,,,,,,,,,,,,192,,,192,192,192,192,192,192,192,192,192',
+'192,,69,,69,192,69,,192,192,192,,,192,192,192,192,,,,,192,192,,192,',
+'192,192,,192,,192,192,,,,,192,192,192,192,192,192,,,,,192,,,,,,,,,,',
+',,,,,,,,,191,,,191,191,191,191,191,191,191,191,191,191,,192,,192,191',
+'192,,191,191,191,,,191,191,191,191,,,,,191,191,,191,,191,191,,191,,191',
+'191,,,,,191,191,191,191,191,191,,,,,191,,,,,,,,,,,,,,,,,,,,125,,,125',
+'125,125,125,125,125,125,125,125,125,,191,,191,125,191,,125,125,125,',
+',125,125,125,125,,,,,125,125,,125,,125,125,,125,,125,125,,,,,125,125',
+'125,125,125,125,,,,,125,,,,,,,,,,,,,,,,,,,,74,,,74,74,74,74,74,74,74',
+'74,74,74,,125,,125,74,125,,74,74,74,,,74,74,74,74,,,,,74,74,,74,,74',
+'74,,74,,74,74,,,,,74,74,74,74,74,74,,,,,74,,,,,,,,,,,,,,,,,,,,124,,',
+'124,124,124,124,124,124,124,124,124,124,,74,,74,124,74,,124,124,124',
+',,124,124,124,124,,,,,124,124,,124,,124,124,,124,,124,124,,,,,124,124',
+'124,124,124,124,,,,,124,,,,,,,,,,,,,,,,,,,,309,,,309,309,309,309,309',
+'309,309,309,309,309,,124,,124,309,124,,309,309,309,,,309,309,309,309',
+',,,,309,309,,309,,309,309,,309,,309,309,,,,,309,309,309,309,309,309',
+',,,,309,,,,,,,,,,,,,,,,,,,,176,,,176,176,176,176,176,176,176,176,176',
+'176,,309,,309,176,309,,176,176,176,,,176,176,176,176,,,,,176,176,,176',
+',176,176,,176,,176,176,,,,,176,176,176,176,176,176,,,,,176,,,,,,,,,',
+',,,,,,,,,,78,,,78,78,78,78,78,78,78,78,78,78,,176,,176,78,176,,78,78',
+'78,,,78,78,78,78,,,,,78,78,,78,,78,78,,78,,78,78,78,,,,78,78,78,78,78',
+'78,,,,,78,,,,,,,,,,,,,,,,,,,,123,,,123,123,123,123,123,123,123,123,123',
+'123,,78,,78,123,78,,123,123,123,,,123,123,123,123,,,,,123,123,,123,',
+'123,123,,123,,123,123,,,,,123,123,123,123,123,123,,,,,123,,,,,,,,,,',
+',,,,,,,,,157,,,157,157,157,157,157,157,157,157,157,157,,123,,123,157',
+'123,,157,157,157,,,157,157,157,157,,,,,157,157,,157,,157,157,,157,,157',
+'157,,,,,157,157,157,157,157,157,,,,,157,,,,,,,,,,,,,,,,,,,,150,,,150',
+'150,150,150,150,150,150,150,150,150,,157,,157,150,157,,150,150,150,',
+',150,150,150,150,,,,,150,150,,150,,150,150,,150,,150,150,,,,,150,150',
+'150,150,150,150,,,,,150,,,,,,,,,,,,,,,,,,,,85,,,85,85,85,85,85,85,85',
+'85,85,85,,150,,150,85,150,,85,85,85,,,85,85,85,85,,,,,85,85,,85,,85',
+'85,,85,,85,85,,,,,85,85,85,85,85,85,,,,,85,,,,,,,,,,,,,,,,,,,,149,,',
+'149,149,149,149,149,149,149,149,149,149,,85,,85,149,85,,149,149,149',
+',,149,149,149,149,,,,,149,149,,149,,149,149,,149,,149,149,,,,,149,149',
+'149,149,149,149,,,,,149,,,,,,,,,,,,,,,,,,,,148,,,148,148,148,148,148',
+'148,148,148,148,148,,149,,149,148,149,,148,148,148,,,148,148,148,148',
+',,,,148,148,,148,,148,148,,148,,148,148,,,,,148,148,148,148,148,148',
+',,,,148,,,,,,,,,,,,,,,,,,,,147,,,147,147,147,147,147,147,147,147,147',
+'147,,148,,148,147,148,,147,147,147,,,147,147,147,147,,,,,147,147,,147',
+',147,147,,147,,147,147,,,,,147,147,147,147,147,147,,,,,147,,,,,,,,,',
+',,,,,,,,,,146,,,146,146,146,146,146,146,146,146,146,146,,147,,147,146',
+'147,,146,146,146,,,146,146,146,146,,,,,146,146,,146,,146,146,,146,,146',
+'146,,,,,146,146,146,146,146,146,,,,,146,,,,,,,,,,,,,,,,,,,,145,,,145',
+'145,145,145,145,145,145,145,145,145,,146,,146,145,146,,145,145,145,',
+',145,145,145,145,,,,,145,145,,145,,145,145,,145,,145,145,,,,,145,145',
+'145,145,145,145,,,,,145,,,,,,,,,,,,,,,,,,,,144,,,144,144,144,144,144',
+'144,144,144,144,144,,145,,145,144,145,,144,144,144,,,144,144,144,144',
+',,,,144,144,,144,,144,144,,144,,144,144,,,,,144,144,144,144,144,144',
+',,,,144,,,,,,,,,,,,,,,,,,,,95,,,95,95,95,95,95,95,95,95,95,95,,144,',
+'144,95,144,,95,95,95,,,95,95,95,95,,,,,95,95,,95,,95,95,,95,,95,95,95',
+',,,95,95,95,95,95,95,,,,,95,,,,,,,,,,,,,,,,,,,,143,,,143,143,143,143',
+'143,143,143,143,143,143,,95,,95,143,95,,143,143,143,,,143,143,143,143',
+',,,,143,143,,143,,143,143,,143,,143,143,,,,,143,143,143,143,143,143',
+',,,,143,,,,,,,,,,,,,,,,,,,,142,,,142,142,142,142,142,142,142,142,142',
+'142,,143,,143,142,143,,142,142,142,,,142,142,142,142,,,,,142,142,,142',
+',142,142,,142,,142,142,,,,,142,142,142,142,142,142,,,,,142,,,,,,,,,',
+',,,,,,,,,,139,,,139,139,139,139,139,139,139,139,139,139,,142,,142,139',
+'142,,139,139,139,,,139,139,139,139,,,,,139,139,,139,,139,139,,139,,139',
+'139,,,,,139,139,139,139,139,139,,,,,139,,,,,,,,,,,,,,,,,,,,138,,,138',
+'138,138,138,138,138,138,138,138,138,,139,,139,138,139,,138,138,138,',
+',138,138,138,138,,,,,138,138,,138,,138,138,,138,,138,138,,,,,138,138',
+'138,138,138,138,,,,,138,,,,,,,,,,,,,,,,,,,,0,,,0,0,0,0,0,0,0,0,0,0,',
+'138,,138,0,138,,0,0,0,,,0,0,0,0,,,,,0,0,,0,,0,0,,0,,0,0,0,,,,0,0,0,0',
+'0,0,235,,,,0,,235,235,235,235,235,235,235,235,235,235,235,235,235,235',
+'235,235,235,235,235,235,235,,,,,,,,,0,0,,0,,0,137,0,,137,137,137,137',
+'137,137,137,137,137,137,,,,,137,,,137,137,137,,,137,137,137,137,,,,',
+'137,137,,137,,137,137,,137,,137,137,,,,,137,137,137,137,137,137,,,,',
+'137,,,,,,,,,,,,,,,,,,,,136,,,136,136,136,136,136,136,136,136,136,136',
+',137,,137,136,137,,136,136,136,,,136,136,136,136,,,,,136,136,,136,,136',
+'136,,136,,136,136,,,,,136,136,136,136,136,136,,,,,136,,,,,,,,,,,,,,',
+',,,,,135,,,135,135,135,135,135,135,135,135,135,135,,136,,136,135,136',
+',135,135,135,,,135,135,135,135,,,,,135,135,,135,,135,135,,135,,135,135',
+',,,,135,135,135,135,135,135,,,,,135,,,,,,,,,,,,,,,,,,,,104,,,104,104',
+'104,104,104,104,104,104,104,104,,135,,135,104,135,,104,104,104,,,104',
+'104,104,104,,,,,104,104,,104,,104,104,,104,,104,104,,,,,104,104,104',
+'104,104,104,,,,,104,,,,,,,,,,,,,,,,,,,,134,,,134,134,134,134,134,134',
+'134,134,134,134,,104,,104,134,104,,134,134,134,,,134,134,134,134,,,',
+',134,134,,134,,134,134,,134,,134,134,,,,,134,134,134,134,134,134,,,',
+',134,,,,,,,,,,,,,,,,,,,,133,,,133,133,133,133,133,133,133,133,133,133',
+',134,,134,133,134,,133,133,133,,,133,133,133,133,,,,,133,133,,133,,133',
+'133,,133,,133,133,,,,,133,133,133,133,133,133,,,,,133,,,,,,,,,,,,,,',
+',,,,,122,,,122,122,122,122,122,122,122,122,122,122,,133,,133,122,133',
+',122,122,122,,,122,122,122,122,,,,,122,122,,122,,122,122,,122,,122,122',
+',,,,122,122,122,122,122,122,,,,,122,,,,,,,,,,,,,,,,,,,,110,,,110,110',
+'110,110,110,110,110,110,110,110,,122,,122,110,122,,110,110,110,,,110',
+'110,110,110,,,,,110,110,,110,,110,110,,110,,110,110,,,,,110,110,110',
+'110,110,110,,,,,110,,,,,,,,,,,,,,,,,,,,111,,,111,111,111,111,111,111',
+'111,111,111,111,,110,,110,111,110,,111,111,111,,,111,111,111,111,,,',
+',111,111,,111,,111,111,,111,,111,111,,,,,111,111,111,111,111,111,,,',
+',111,,,,,,,,,,,,,,,,,,,,112,,,112,112,112,112,112,112,112,112,112,112',
+',111,,111,112,111,,112,112,112,,,112,112,112,112,,,,,112,112,,112,,112',
+'112,,112,,112,112,,,,,112,112,112,112,112,112,,,,,112,,,,,,,,,,,,,,',
+',,,,,114,,,114,114,114,114,114,114,114,114,114,114,,112,,112,114,112',
+',114,114,114,,,114,114,114,114,,,,,114,114,,114,,114,114,,114,,114,114',
+',,,,114,114,114,114,114,114,,,,,114,,,,,,,,,,,,,,,,,,,,115,,,115,115',
+'115,115,115,115,115,115,115,115,,114,,114,115,114,,115,115,115,,,115',
+'115,115,115,,,,,115,115,,115,,115,115,,115,,115,115,,,,,115,115,115',
+'115,115,115,,,,,115,,,,,,,,,,,,,,,,,,,,117,,,117,117,117,117,117,117',
+'117,117,117,117,,115,,115,117,115,,117,117,117,,,117,117,117,117,,,',
+',117,117,,117,,117,117,,117,,117,117,,,,,117,117,117,117,117,117,,,',
+',117,,,,,,,,,,,,,,,,,,,,118,,,118,118,118,118,118,118,118,118,118,118',
+',117,,117,118,117,,118,118,118,,,118,118,118,118,,,,,118,118,,118,,118',
+'118,,118,,118,118,,,,,118,118,118,118,118,118,,,,,118,,,,,,,,,,,,,,',
+',,,,,119,,,119,119,119,119,119,119,119,119,119,119,,118,,118,119,118',
+',119,119,119,,,119,119,119,119,,,,,119,119,,119,,119,119,,119,,119,119',
+',,,,119,119,119,119,119,119,,,,,119,,,,,,,,,,,,,,,,,,,,120,,,120,120',
+'120,120,120,120,120,120,120,120,,119,,119,120,119,,120,120,120,,,120',
+'120,120,120,,,,,120,120,,120,,120,120,,120,,120,120,,,,,120,120,120',
+'120,120,120,,,,,120,,,,,,,,,,,,,,,,,,,,121,,,121,121,121,121,121,121',
+'121,121,121,121,,120,,120,121,120,,121,121,121,,,121,121,121,121,,,',
+',121,121,,121,,121,121,,121,,121,121,,,,,121,121,121,121,121,121,,,',
+',121,,,,,,,,,,,,,,,,,,,,132,,,132,132,132,132,132,132,132,132,132,132',
+',121,,121,132,121,,132,132,132,,,132,132,132,132,,,,,132,132,,132,,132',
+'132,,132,,132,132,185,,185,,132,132,132,132,132,132,,,,,132,,,,,,,,',
+',,,,,185,185,,,,185,,,,185,,,,,,,,,,185,132,,132,,132,185,185,185,185',
+'185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185',
+'185,185,185,185,185,185,185,185,185,185,185,185,185,305,,305,,,,,185',
+',,,,,,,,,,,,,,,,,,,,305,305,,,,305,,,,305,,,,,,,,,,305,,,,,,305,305',
 '305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305',
-'305,305,305,305,240,,240,,,,5,305,5,,5,,,,,,,,,,,,,,,,240,240,,,,240',
-',,,240,,,,,,,,,,240,,,,,,240,240,240,240,240,240,240,240,240,240,240',
-'240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240',
-'240,240,240,240,240,240,,,,,,,,240,11,11,11,11,11,11,11,11,11,11,,,',
-',11,11,11,11,,,11,11,11,11,,,,,,11,,11,,11,11,,11,,11,11,,,,,11,11,11',
-'11,11,11,300,,300,,11,,,,,,,,,,,,,,,,,,,,,,300,300,,,,300,,11,11,300',
-',,11,,11,,11,,,300,,,,,,300,300,300,300,300,300,300,300,300,300,300',
-'300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300',
-'300,300,300,300,300,300,,,,,,,,300,299,299,299,299,299,299,299,299,299',
-'299,,,,,299,299,299,299,,,299,299,299,,,,,,,299,,299,,299,299,,299,',
-'299,299,,,,,299,299,299,299,299,299,162,,162,,299,,,,,,,,,,,,,,,,,,',
-',,,162,162,,,,162,,299,299,162,,,299,,299,,299,162,,162,,,,,,162,162',
-'162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162',
-'162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,308,,308',
-',,,,,,,,,,,,,,,,,,,,,,,308,308,,,,308,,,,308,,,,,,,,,,308,,,,,,308,308',
-'308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308',
-'308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,201,,201',
-',,,,,,,,,,,,,,,,,,,,,,,201,201,,,,201,,,,201,,,,,,,,,,201,,,,,,201,201',
-'201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201',
-'201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,298,,298',
-',,,,,,,,,,,,,,,,,,,,,,,298,298,,,,298,,,,298,,,,,,,,,,298,,,,,,298,298',
-'298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298',
-'298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,194,,194',
-',,,,,,,,,,,,,,,,,,,,,,,194,194,,,,194,,,,194,,,,,,,,,,194,,,,,,194,194',
-'194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194',
-'194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,188,,188',
-',,,,,,,,,,,,,,,,,,,,,,,188,188,,,,188,,,,188,,,,,,,,,,188,,,,,,188,188',
-'188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188',
-'188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,297,,297',
-',,,,,,,,,,,,,,,,,,,,,,,297,297,,,,297,,,,297,,,,,,,,,,297,,,,,,297,297',
-'297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297',
-'297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,292,,292',
-',,,,,,,,,,,,,,,,,,,,,,,292,292,,,,292,,,,292,,,,,,,,,,292,,,,,,292,292',
-'292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292',
-'292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,181,,181',
-',,,,,,,,,,,,,,,,,,,,,,,181,181,,,,181,,,,181,,,,,,,,,,181,,,,,,181,181',
+'305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,,,,,,,,305',
+'17,17,17,17,17,17,17,17,17,17,,,,,17,,,17,17,17,,,17,17,17,17,,,,,,17',
+',17,,17,17,,17,,17,17,,,,,17,17,17,17,17,17,,,,,17,,,,130,130,130,130',
+'130,130,130,130,130,130,,,,,130,,,130,130,130,,,130,130,130,,,,,,17',
+'130,17,130,17,130,130,,130,,130,130,290,,290,,130,130,130,130,,,,,,',
+',,,,,,,,,,,,,,290,290,,,,290,,,,290,,,,,,,,,,290,130,,130,,130,290,290',
+'290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290',
+'290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,,,,,,,,290',
+'291,291,291,291,291,291,291,291,291,291,,,,,291,,,291,291,291,,,291',
+'291,291,,,,,,,291,,291,,291,291,,291,,291,291,,,,,291,291,291,291,291',
+'291,,,,,291,14,14,14,14,14,14,14,14,14,14,,,,,,,,,,,,,,14,14,,,,,,,',
+',291,,291,,291,14,208,,14,268,,268,208,208,208,208,208,208,208,208,208',
+'208,208,208,208,208,208,208,208,208,208,208,208,,,,,268,268,,,,268,',
+',,268,,,,,,,,,,268,14,,14,,14,268,268,268,268,268,268,268,268,268,268',
+'268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268',
+'268,268,268,268,268,268,268,313,231,313,,,,,231,231,231,231,231,231',
+'231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,313,313',
+',,,313,,,,313,,,,,,,,,,313,,,,,,313,313,313,313,313,313,313,313,313',
+'313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313',
+'313,313,313,313,313,313,313,313,211,239,211,,,,,239,239,239,239,239',
+'239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,211',
+'211,,,,211,,,,211,,,,,,,,,,211,,,,,,211,211,211,211,211,211,211,211',
+'211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211',
+'211,211,211,211,211,211,211,211,211,210,242,210,,,,,242,242,242,242',
+'242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242',
+'210,210,,,,210,,,,210,,,,,,,,,,210,,,,,,210,210,210,210,210,210,210',
+'210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210',
+'210,210,210,210,210,210,210,210,210,210,199,212,199,,,,,212,212,212',
+'212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212',
+'212,199,199,,,,199,,,,199,,,,,,,,,,199,,,,,,199,199,199,199,199,199',
+'199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199',
+'199,199,199,199,199,199,199,199,199,199,199,303,228,303,,,,,228,228',
+'228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228',
+'228,228,303,303,,,,303,,,,303,,,,,,,,,,303,,,,,,303,303,303,303,303',
+'303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303',
+'303,303,303,303,303,303,303,303,303,303,303,303,269,,269,,,,,,,,,,,',
+',,,,,,,,,,,,,,269,269,,,,269,,,,269,,,,,,,,,,269,,,,,,269,269,269,269',
+'269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269',
+'269,269,269,269,269,269,269,269,269,269,269,269,269,181,,181,,,,,,,',
+',,,,,,,,,,,,,,,,,,181,181,,,,181,,,,181,,,,,,,,,,181,,,,,,181,181,181',
 '181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181',
-'181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,37,,37,',
-',,,,,,,,,,,,,,,,,,,,,,37,37,,,,37,,,,37,,,,,,,,,,37,,,,,,37,37,37,37',
-'37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37',
-'37,37,37,37,37,37,37,171,,171,,,,,,,,,,,,,,,,,,,,,,,,171,171,,,,171',
-',,,171,,,,,,,,,,171,,,,,,171,171,171,171,171,171,171,171,171,171,171',
-'171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171',
-'171,171,171,171,171,171,253,,253,,,,,,,,,,,,,,,,,,,,,,,,253,253,,,,253',
-',,,253,,,,,,,,,,253,,,,,,253,253,253,253,253,253,253,253,253,253,253',
-'253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253',
-'253,253,253,253,253,253,283,,283,,,,,,,,,,,,,,,,,,,,,,,,283,283,,,,283',
-',,,283,,,,,,,,,,283,,,,,,283,283,283,283,283,283,283,283,283,283,283',
-'283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283',
-'283,283,283,283,283,283,164,,164,,,,,,,,,,,,,,,,,,,,,,,,164,164,,,,164',
-',,,164,,,,,,,,164,,164,,,,,,164,164,164,164,164,164,164,164,164,164',
+'181,181,181,181,181,181,181,181,181,181,181,181,181,181,76,,76,,,,,',
+',,,,,,,,,,,,,,,,,,,,76,76,,,,76,,,,76,,,,,,,,,,76,,,,,,76,76,76,76,76',
+'76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76',
+'76,76,76,76,76,76,174,,174,,,,,,,,,,,,,,,,,,,,,,,,,,174,174,,,,174,',
+',,174,,,,,,,,,,174,,,,,,174,174,174,174,174,174,174,174,174,174,174',
+'174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174',
+'174,174,174,174,174,174,165,,165,,,,,,,,,,,,,,,,,,,,,,,,,,165,165,,',
+',165,,,,165,,,,,,,,165,,165,,,,,,165,165,165,165,165,165,165,165,165',
+'165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165',
+'165,165,165,165,165,165,165,165,164,,164,,,,,,,,,,,,,,,,,,,,,,,,,,164',
+'164,,,,164,,,,164,,,,,,,,164,,164,,,,,,164,164,164,164,164,164,164,164',
 '164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164',
-'164,164,164,164,164,164,164,280,,280,,,,,,,,,,,,,,,,,,,,,,,,280,280',
-',,,280,,,,280,,,,,,,,,,280,,,,,,280,280,280,280,280,280,280,280,280',
-'280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280',
-'280,280,280,280,280,280,280,280,86,,86,,,,,,,,,,,,,,,,,,,,,,,,86,86',
-',,,86,,,,86,,,,,,,,86,,86,,,,,,86,86,86,86,86,86,86,86,86,86,86,86,86',
-'86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,260,',
-'260,,,,,,,,,,,,,,,,,,,,,,,,260,260,,,,260,,,,260,,,,,,,,,,260,,,,,,260',
-'260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260',
-'260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,261',
-',261,,,,,,,,,,,,,,,,,,,,,,,,261,261,,,,261,,,,261,,,,,,,,,,261,,,,,',
-'261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261',
-'261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261',
-'209,,209,,,,,,,,,,,,,,,,,,,,,,,,209,209,,,,209,,,,209,,,,,,,,,,209,',
-',,,,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209',
-'209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209',
-'209,246,246,,,,,,,,246,,,,,,,,,,246,,,,,,246,246,246,246,246,246,246',
-'246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246',
-'246,246,246,246,246,246,246,246,246,246,88,88,,,,,,,,88,,,,,,,,,,88',
-',,,,,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88',
-'88,88,88,88,88,88,88,88,88,88,88,88,88,225,225,,,,,,,,225,,,,,,,,,,225',
-',,,,,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225',
-'225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,228,228',
-',,,,,,,228,,,,,,,,,,228,,,,,,228,228,228,228,228,228,228,228,228,228',
-'228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228',
-'228,228,228,228,92,92,,,,,,,,92,,,,,,,,,,92,,,,,,92,92,92,92,92,92,92',
-'92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92',
-'92,222,222,,,,,,,,222,,,,,,,,,,222,,,,,,222,222,222,222,222,222,222',
-'222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222',
-'222,222,222,222,222,222,222,289,,,,,,,,289,,,,,,,,,,289,,,,,,289,289',
+'164,164,164,164,164,164,164,164,164,257,,257,,,,,,,,,,,,,,,,,,,,,,,',
+',,257,257,,,,257,,,,257,,,,,,,,,,257,,,,,,257,257,257,257,257,257,257',
+'257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257',
+'257,257,257,257,257,257,257,257,257,257,43,,43,,,,,,,,,,,,,,,,,,,,,',
+',,,,43,43,,,,43,,,,43,,,,,,,,,,43,,,,,,43,43,43,43,43,43,43,43,43,43',
+'43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43',
+'43,289,,289,,,,,,,,,,,,,,,,,,,,,,,,,,289,289,,,,289,,,,289,,,,,,,,,',
+'289,,,,,,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289',
 '289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289',
-'289,289,289,289,289,289,289,289,289,289,289,289,268,,,,,,,,268,,,,,',
-',,,,268,,,,,,268,268,268,268,268,268,268,268,268,268,268,268,268,268',
-'268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268',
-'221,,,,,,,,221,,,,,,,,,,221,,,,,,221,221,221,221,221,221,221,221,221',
-'221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221',
-'221,221,221,221,221,288,,,,,,,,288,,,,,,,,,,288,,,,,,288,288,288,288',
+'289,289,288,,288,,,,,,,,,,,,,,,,,,,,,,,,,,288,288,,,,288,,,,288,,,,',
+',,,,,288,,,,,,288,288,288,288,288,288,288,288,288,288,288,288,288,288',
 '288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288',
-'288,288,288,288,288,288,288,288,288,288,267,,,,,,,,267,,,,,,,,,,267',
-',,,,,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267',
-'267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,82,,,,,',
-',,,,82,,,,,,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82',
-'82,82,82,82,82,82,82,82,82,82,82,210,,,,,,,,,,210,,,,,,210,210,210,210',
-'210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210',
-'210,210,210,210,210,210,210,210,210,172,,,,,,,,,,172,,,,,,172,172,172',
-'172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172',
-'172,172,172,172,172,172,172,172,172,172,198,,,,,,198,198,198,198,198',
-'198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198',
-'198,198,198,198,198,198,198,198,205,,,,,,205,205,205,205,205,205,205',
+'288,288,288,260,,260,,,,,,,,,,,,,,,,,,,,,,,,,,260,260,,,,260,,,,260',
+',,,,,,,,,260,,,,,,260,260,260,260,260,260,260,260,260,260,260,260,260',
+'260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260',
+'260,260,260,260,87,,87,,,,,,,,,,,,,,,,,,,,,,,,,,87,87,,,,87,,,,87,,',
+',,,,,87,,87,,,,,,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87',
+'87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,218,,218,,,,,,,,',
+',,,,,,,,,,,,,,,,,218,218,,,,218,,,,218,,,,,,,,,,218,,,,,,218,218,218',
+'218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218',
+'218,218,218,218,218,218,218,218,218,218,218,218,218,218,99,99,,,,,,',
+',99,,,,,,,,,,99,,,,,,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99',
+'99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,248,248,,,,,,',
+',248,,,,,,,,,,248,,,,,,248,248,248,248,248,248,248,248,248,248,248,248',
+'248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248',
+'248,248,248,248,248,103,103,,,,,,,,103,,,,,,,,,,103,,,,,,103,103,103',
+'103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103',
+'103,103,103,103,103,103,103,103,103,103,103,205,205,,,,,,,,205,,,,,',
+',,,,205,,,,,,205,205,205,205,205,205,205,205,205,205,205,205,205,205',
 '205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205',
-'205,205,205,205,205,205,211,,,,,,211,211,211,211,211,211,211,211,211',
-'211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211',
-'211,211,211,211,202,,,,,,202,202,202,202,202,202,202,202,202,202,202',
-'202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202',
-'202,202,214,,,,,,214,214,214,214,214,214,214,214,214,214,214,214,214',
-'214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214' ]
-        racc_action_check = arr = Array.new(9789, nil)
+'241,241,,,,,,,,241,,,,,,,,,,241,,,,,,241,241,241,241,241,241,241,241',
+'241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241',
+'241,241,241,241,241,241,238,238,,,,,,,,238,,,,,,,,,,238,,,,,,238,238',
+'238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238',
+'238,238,238,238,238,238,238,238,238,238,238,238,237,,,,,,,,237,,,,,',
+',,,,237,,,,,,237,237,237,237,237,237,237,237,237,237,237,237,237,237',
+'237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237',
+'276,,,,,,,,276,,,,,,,,,,276,,,,,,276,276,276,276,276,276,276,276,276',
+'276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276',
+'276,276,276,276,276,275,,,,,,,,275,,,,,,,,,,275,,,,,,275,275,275,275',
+'275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275',
+'275,275,275,275,275,275,275,275,275,275,297,,,,,,,,297,,,,,,,,,,297',
+',,,,,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297',
+'297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,296,,,,',
+',,,296,,,,,,,,,,296,,,,,,296,296,296,296,296,296,296,296,296,296,296',
+'296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296',
+'296,296,296,77,,,,,,,,,,77,,,,,,77,77,77,77,77,77,77,77,77,77,77,77',
+'77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,94,,,,,,,,,,94',
+',,,,,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94',
+'94,94,94,94,94,94,94,94,94,226,,,,,,,,,,226,,,,,,226,226,226,226,226',
+'226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226',
+'226,226,226,226,226,226,226,226,227,,,,,,227,227,227,227,227,227,227',
+'227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227',
+'227,227,227,227,227,227,230,,,,,,230,230,230,230,230,230,230,230,230',
+'230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230',
+'230,230,230,230,219,,,,,,219,219,219,219,219,219,219,219,219,219,219',
+'219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219',
+'219,219,215,,,,,,215,215,215,215,215,215,215,215,215,215,215,215,215',
+'215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215',
+'222,,,,,,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222',
+'222,222,222,222,222,222,222,222,222,222,222,222,222,222,222' ]
+        racc_action_check = arr = Array.new(8867, nil)
         idx = 0
         clist.each do |str|
           str.split(',', -1).each do |i|
@@ -707,349 +670,341 @@ def on_error(error_token_id, error_value, value_stack)
         end
 
 racc_action_pointer = [
-  4040,   245,   311,   280,   nil,  6866,   212,   nil,   nil,   562,
-   656,  7041,   nil,   844,   253,   nil,   nil,   nil,   nil,   nil,
-   nil,   246,  1126,   nil,   nil,   nil,   nil,   nil,   nil,   141,
-  1314,   nil,   nil,   nil,   143,   113,   nil,  8002,    60,   274,
-   nil,   161,   164,   nil,  2066,   nil,   nil,   nil,  2160,   nil,
-   nil,   nil,   nil,  2254,   nil,   nil,   nil,  2348,   nil,  2442,
-   nil,   nil,   nil,  2536,  2630,   nil,   nil,   nil,  2724,   nil,
-    93,  2912,  3006,   nil,   nil,     9,   115,   nil,   313,   -71,
-   225,   nil,  9434,    73,   156,  3852,  8512,    -2,  8885,   344,
-   114,   295,  9056,  4604,    77,   nil,   nil,   205,   145,  4980,
-    92,  5168,  5262,  5356,  5450,  5544,  5638,  6766,  5826,  5920,
-  6014,    -2,  6202,  6296,  6390,  6484,  6578,  6672,  5732,  6108,
-  3758,  3382,   321,   -40,   750,   468,   374,  5074,   938,  1972,
-  4886,  4792,  4698,  4510,  4416,  4322,   nil,  4228,  4134,   nil,
-   218,   240,   nil,   240,   nil,    -1,   nil,   nil,   nil,   165,
-  3946,   120,   110,  6821,   nil,  3664,   nil,  3570,   nil,   273,
-   257,   197,  7237,   461,  8342,   411,   438,   nil,   nil,   250,
-  3476,  8087,  9526,   232,   257,   204,   126,   nil,  3288,  3194,
-   180,  7917,   nil,   nil,   255,    77,     9,   nil,  7662,   nil,
-    26,  3100,  2818,   -17,  7577,   664,  1134,   208,  9562,  1416,
-   367,  7407,  9670,  1322,   299,  9598,   nil,  1228,   108,  8767,
-  9480,  9634,  1040,  1435,  9706,   476,  1341,   127,   185,   382,
-  1247,  9277,  9112,   570,  1153,  8944,   946,  1526,  9000,   852,
-   304,   758,  1510,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-  6951,   nil,   nil,   187,   167,   175,  8826,   nil,   -13,   nil,
-  1878,  1784,   nil,  8172,   145,   nil,   nil,   nil,   nil,   209,
-  8597,  8682,   nil,   114,   nil,   -16,   nil,  9387,  9222,   nil,
-  1690,  1596,   210,   nil,   nil,    27,  1502,   104,   166,   nil,
-  8427,  1408,  1220,  8257,  1032,   nil,   nil,   nil,  9332,  9167,
-   nil,    -7,  7832,   nil,   231,   nil,   -22,  7747,  7492,  7184,
-  7094,    63,   186,   276,   nil,  6866,   nil,   nil,  7322,   nil,
-   nil ]
+  4315,   227,   190,   269,   nil,   163,   nil,   427,   255,   585,
+   nil,   133,   nil,   nil,  6232,   nil,   822,  5978,   980,   nil,
+   nil,   nil,   164,   nil,   nil,   nil,   181,   nil,   nil,   nil,
+  1217,   nil,   nil,   nil,   nil,   nil,   -41,  1375,   nil,   nil,
+   nil,   172,     4,  7408,   nil,   310,   168,   nil,   nil,  1866,
+   nil,   nil,  1945,   nil,   nil,  2024,   nil,   nil,  2103,   nil,
+   nil,  2182,   nil,  2261,   nil,   nil,   nil,  2340,   nil,  2419,
+     0,   nil,   122,    61,  2735,    67,  6973,  8510,  3051,   nil,
+   nil,   117,   nil,   130,   176,  3367,   nil,  7756,   nil,   289,
+   nil,   287,   140,   145,  8556,  3920,    15,   160,   166,  7902,
+    -2,   319,   294,  8020,  4648,   nil,    61,   nil,   225,   -17,
+  4964,  5043,  5122,   nil,  5201,  5280,   nil,  5359,  5438,  5517,
+  5596,  5675,  4885,  3130,  2814,  2656,   901,   743,   664,   506,
+  6038,   348,  5754,  4806,  4727,  4569,  4490,  4411,  4236,  4157,
+   254,   171,  4078,  3999,  3841,  3762,  3683,  3604,  3525,  3446,
+  3288,   nil,   109,   154,   nil,   nil,   nil,  3209,   nil,    -2,
+   277,    -6,   -36,   -10,  7234,  7147,   293,   262,    92,   -56,
+    43,   nil,   nil,   126,  7060,   nil,  2972,    94,   nil,   103,
+    72,  6886,   nil,   nil,   nil,  5799,   nil,   146,   329,   113,
+   nil,  2577,  2498,   160,   nil,   270,   239,   264,   nil,  6625,
+   nil,   292,  1787,  1708,   -11,  8076,  1462,   751,  6227,   672,
+  6538,  6451,  6579,   356,    87,  8746,   593,   217,  7843,  8710,
+   514,   113,  8782,   nil,   435,   282,  8602,  8638,  6666,   922,
+  8674,  6318,   988,   218,   138,  4323,  1067,  8243,  8188,  6405,
+   909,  8132,  6492,   830,   nil,   nil,   nil,   nil,  7961,    72,
+    75,   nil,   -21,   nil,    -7,   -47,   nil,  7321,  1629,  1550,
+  7669,  1454,    23,   nil,   nil,   nil,   nil,   302,  6277,  6799,
+   nil,    86,   nil,    91,   nil,  8353,  8298,  1296,  1138,   nil,
+    92,   nil,   179,   259,   nil,  1059,   nil,   nil,  7582,  7495,
+  6083,  6175,   nil,   nil,   nil,   nil,  8463,  8408,   nil,   223,
+   nil,   -20,   -46,  6712,   nil,  5886,   253,   nil,   235,  2893,
+   nil,   nil,   nil,  6364 ]
 
 racc_action_default = [
-    -1,  -100,  -118,  -181,   -17,  -181,  -181,   -18,  -126,  -181,
-  -181,   -46,   -19,  -181,  -181,   -34,   -20,   -21,   -47,   -22,
-   -28,  -181,  -181,   -23,   -29,    -2,   -30,   -31,   -32,    -3,
-  -181,  -104,   -35,   -33,  -181,  -181,   -36,    -5,  -181,  -174,
-   -37,    -8,  -181,    -9,  -181,   -98,   -38,   -10,  -181,  -105,
-   -39,   -96,   -11,  -181,  -106,   -40,   -97,  -181,   -12,  -181,
-  -107,  -103,   -26,  -181,  -181,  -108,   -27,   -13,  -181,   -14,
-  -124,  -136,  -181,   -15,   -16,  -181,  -118,  -119,  -181,  -181,
-  -181,   -44,   -56,  -181,  -125,  -136,  -181,  -181,   -45,   -50,
-  -181,  -181,  -150,    -7,  -181,   -25,    -4,  -157,  -181,  -181,
+    -1,  -181,  -136,  -181,   -15,  -124,   -16,  -181,  -118,  -181,
+   -17,  -181,   -18,  -126,  -181,   -19,  -181,   -46,  -181,   -34,
+   -20,   -28,  -181,   -21,   -29,   -31,  -181,   -47,   -22,   -35,
+  -181,    -2,   -30,   -23,   -36,   -32,    -3,  -181,  -104,   -37,
+   -33,  -181,  -181,    -5,   -38,  -174,    -8,   -39,    -9,  -181,
+   -40,   -10,  -181,  -105,  -103,  -181,  -106,   -11,  -181,  -107,
+   -26,  -181,   -12,  -181,  -108,   -27,   -13,  -181,   -14,  -181,
+  -181,   -98,  -100,  -181,  -181,  -181,  -137,   -55,  -136,  -110,
+  -114,  -181,  -129,  -181,  -181,  -181,  -115,  -181,   -44,  -118,
+  -119,  -181,  -181,  -181,   -56,  -136,  -125,  -181,   -50,   -45,
+  -181,  -181,  -181,  -150,    -7,   -25,  -181,    -4,  -157,  -181,
+  -181,  -181,  -181,   -58,  -181,  -181,   -57,  -181,  -181,  -181,
   -181,  -181,  -181,  -181,  -181,  -181,  -181,  -181,  -181,  -181,
-  -181,   -93,  -181,  -181,  -181,  -181,  -181,  -181,  -181,  -181,
+   -93,  -181,  -181,  -181,  -181,  -181,  -181,  -181,  -181,  -181,
   -181,  -181,  -181,  -181,  -181,  -181,  -181,  -181,  -181,  -181,
-  -181,  -181,  -181,  -181,  -181,  -181,   -58,  -181,  -181,   -57,
-  -181,  -181,  -172,  -174,  -176,  -181,  -178,  -114,  -128,  -181,
-  -181,  -181,  -181,  -181,  -115,  -136,  -109,  -181,   -95,   -51,
-   -48,   -49,  -153,   -52,  -181,   -54,   -53,  -129,  -110,  -181,
-  -181,  -137,   -55,  -181,  -181,  -181,  -181,  -117,  -181,  -181,
-  -181,  -137,  -170,  -151,  -181,  -181,  -146,   311,    -6,   -24,
-  -181,  -181,  -181,  -181,  -154,   -81,   -70,   -59,   -83,   -71,
-   -60,  -179,   -84,   -72,   -61,   -85,   -82,   -73,   -62,  -180,
-   -91,   -86,   -74,   -63,   -87,   -75,   -64,  -181,  -181,   -76,
-   -65,   -92,   -88,   -77,   -66,   -89,   -78,   -67,   -90,   -79,
-   -68,   -80,   -69,   -94,   -99,  -173,  -177,  -171,  -175,  -111,
-  -181,  -112,  -113,  -127,  -181,  -181,   -41,  -152,  -181,  -143,
-  -181,  -181,  -135,  -138,  -181,  -101,  -123,  -121,  -120,  -181,
-   -42,   -43,  -132,  -181,  -147,  -181,  -158,  -159,  -160,  -156,
-  -181,  -181,  -155,  -102,  -116,  -130,  -181,  -181,  -181,  -165,
-  -140,  -181,  -181,  -139,  -181,  -122,  -149,  -148,  -162,  -161,
-  -131,  -181,  -144,  -163,  -181,  -166,  -181,  -141,  -142,  -102,
-  -181,  -167,  -181,  -181,  -169,  -181,  -133,  -168,  -145,  -164,
-  -134 ]
+  -181,  -172,  -181,  -174,  -176,  -178,  -109,  -181,  -128,  -181,
+   -51,   -48,   -49,   -52,  -153,  -181,   -54,   -53,  -181,  -181,
+  -181,   -96,   -97,  -181,  -138,  -143,  -181,  -181,  -135,  -181,
+  -181,  -137,  -111,  -112,  -113,  -181,  -170,  -181,  -181,  -181,
+  -117,  -181,  -181,  -181,  -151,  -181,  -181,  -146,   314,    -6,
+   -24,  -181,  -181,  -181,  -181,   -90,   -79,   -68,   -80,   -69,
+  -179,  -154,   -81,   -70,   -59,   -83,   -71,   -60,  -180,   -84,
+   -72,   -61,   -85,   -82,   -73,   -62,   -91,   -86,   -74,   -63,
+   -87,   -75,   -64,  -181,  -181,   -76,   -65,   -92,   -88,   -77,
+   -66,   -89,   -78,   -67,  -171,  -175,  -173,  -177,   -41,  -181,
+  -127,  -152,  -181,   -99,  -181,  -181,   -95,  -140,  -181,  -181,
+  -139,  -181,  -130,  -116,  -123,  -121,  -120,  -181,   -42,   -43,
+  -132,  -181,  -147,  -181,  -158,  -159,  -160,  -181,  -181,  -156,
+  -155,  -102,  -181,  -181,  -165,  -181,   -94,  -101,  -142,  -141,
+  -181,  -102,  -131,  -122,  -149,  -148,  -162,  -161,  -166,  -181,
+  -163,  -181,  -181,  -144,  -133,  -181,  -181,  -169,  -167,  -181,
+  -134,  -164,  -168,  -145 ]
 
 racc_goto_table = [
-    25,    84,    83,   154,   167,   168,    82,   193,    98,   169,
-    78,    29,    86,    87,    88,    81,    89,    21,   167,   168,
-   279,   144,   291,   180,   186,    92,   277,   234,   237,    93,
-   140,   143,   154,   290,    96,   142,   146,   nil,   nil,   nil,
-   nil,    94,   nil,   nil,   nil,   154,   154,   159,   nil,   295,
-   nil,   160,   nil,   nil,   nil,   nil,   161,   nil,   nil,    34,
-   162,   nil,   163,   257,   258,   nil,   164,   165,   304,   nil,
-   nil,   166,   nil,    90,   171,   172,   nil,   nil,   175,   nil,
-   nil,   nil,   nil,   nil,   174,   nil,   nil,   nil,   181,    81,
-   nil,   nil,   nil,   245,    93,   217,   188,   nil,   nil,   nil,
-   nil,   158,   194,   195,   196,   197,   198,   199,   200,   201,
-   202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
-   212,   213,   214,   215,   216,   236,   272,   219,   220,   221,
-   222,   223,   224,   225,   226,   227,   228,   229,   230,   235,
-   231,   232,   nil,   nil,   nil,   182,   nil,   285,   nil,   244,
-   243,   nil,   nil,   240,   nil,   nil,   nil,   nil,   181,   nil,
-   246,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   253,   175,   nil,   259,   nil,   167,   168,
-   nil,   260,   261,   nil,   nil,   nil,   nil,   nil,    81,    81,
-   nil,   nil,   nil,   nil,   267,   268,   nil,   nil,   nil,   233,
-   nil,   nil,   nil,   nil,   238,   154,   154,   nil,   nil,   nil,
+    31,    86,    71,    41,    88,    76,    77,   109,   158,   156,
+    87,    97,    94,    96,   173,    91,   265,   266,    75,    98,
+    99,   100,    26,   302,   284,   101,    36,   282,   197,   244,
+   204,    70,   153,   103,   292,   151,   104,   155,   nil,   nil,
+   nil,   107,    86,   nil,   nil,   nil,   nil,   nil,   nil,   154,
+   nil,   nil,   160,   nil,   298,   161,   nil,   nil,   162,   158,
+   156,   163,   nil,   106,   164,   nil,   165,   nil,   nil,   nil,
+   166,   nil,   167,   307,   nil,   nil,   nil,   174,   nil,   nil,
+   nil,   181,   nil,   nil,   nil,    88,   nil,   nil,   185,   nil,
+   186,   188,    86,    86,   180,   293,   187,   nil,   181,   nil,
+   nil,   nil,   nil,   nil,   nil,   233,   104,   199,   nil,   nil,
+   254,   193,   nil,   205,   206,   207,   nil,   208,   209,   nil,
+   210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+   220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+   230,   231,   232,   246,   nil,   235,   236,   237,   238,   239,
+   240,   241,   242,   243,   280,   245,   250,   247,   249,   nil,
+   248,   nil,   nil,   nil,   nil,   nil,   nil,   251,   nil,   253,
+   nil,   nil,   nil,   nil,   nil,   nil,   256,   259,   nil,   257,
+   260,   nil,   nil,   nil,    88,    88,   nil,   188,   nil,   267,
+   nil,   nil,   nil,   nil,   268,   269,   nil,   nil,   nil,   272,
+   nil,   nil,   nil,   nil,   nil,   275,   276,   279,   nil,   nil,
+   nil,   nil,   158,   156,   nil,   nil,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   247,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   264,   nil,   nil,   nil,   nil,   nil,
-   nil,   281,   269,   280,   283,   nil,   nil,   nil,   nil,   nil,
-   nil,   278,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,    81,   288,   289,   nil,   nil,   nil,   296,   292,
-   nil,   nil,   nil,   nil,   297,   298,   nil,   300,   nil,   nil,
-   278,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   307,   305,   nil,   nil,   308,   nil,   nil,   nil,   278,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   286,   nil,   287,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   301,   nil,   nil,   303 ]
+   nil,   nil,   nil,   nil,   nil,    86,    86,   nil,   283,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   286,   nil,   nil,
+   nil,   288,   289,    88,   290,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   294,   nil,   295,   nil,   283,   nil,
+   296,   297,   nil,   301,   nil,   nil,   nil,   nil,   303,   nil,
+   nil,   nil,   nil,   nil,   305,   nil,   nil,   283,   nil,   nil,
+   nil,   nil,   306,   nil,   nil,   308,   nil,   nil,   312,   nil,
+   nil,   nil,   313 ]
 
 racc_goto_check = [
-     2,    32,     6,    30,    36,    31,     5,    41,    40,    37,
-    34,     3,     5,     5,     5,    21,     5,     1,    36,    31,
-    43,    47,    38,    37,    39,     5,    42,    26,    44,     2,
-    25,    46,    30,     8,     2,    45,    48,   nil,   nil,   nil,
-   nil,     3,   nil,   nil,   nil,    30,    30,     5,   nil,    43,
-   nil,     5,   nil,   nil,   nil,   nil,     5,   nil,   nil,     4,
-     5,   nil,     5,    23,    23,   nil,     5,     5,    43,   nil,
-   nil,     5,   nil,     4,     5,     5,   nil,   nil,     2,   nil,
-   nil,   nil,   nil,   nil,    34,   nil,   nil,   nil,     5,    21,
-   nil,   nil,   nil,    37,     2,    40,     5,   nil,   nil,   nil,
-   nil,     4,     5,     5,     5,     5,     5,     5,     5,     5,
+     2,    30,    26,     4,    21,     5,     5,    40,    36,    31,
+     5,     6,     5,    32,    25,    34,    23,    23,    37,     5,
+     5,     5,     1,    38,    43,     4,     3,    42,    39,    44,
+    41,    24,    46,     5,     8,    45,     2,    48,   nil,   nil,
+   nil,     2,    30,   nil,   nil,   nil,   nil,   nil,   nil,    47,
+   nil,   nil,     5,   nil,    43,     5,   nil,   nil,     5,    36,
+    31,     5,   nil,     3,     5,   nil,     5,   nil,   nil,   nil,
+     5,   nil,     5,    43,   nil,   nil,   nil,     5,   nil,   nil,
+   nil,     5,   nil,   nil,   nil,    21,   nil,   nil,     5,   nil,
+     4,     2,    30,    30,    37,    23,    34,   nil,     5,   nil,
+   nil,   nil,   nil,   nil,   nil,    40,     2,     5,   nil,   nil,
+    25,    37,   nil,     5,     5,     5,   nil,     5,     5,   nil,
      5,     5,     5,     5,     5,     5,     5,     5,     5,     5,
-     5,     5,     5,     5,     5,    47,    41,     5,     5,     5,
-     5,     5,     5,     5,     5,     5,     5,     5,     5,    45,
-     5,     5,   nil,   nil,   nil,     4,   nil,    23,   nil,    32,
-     6,   nil,   nil,     5,   nil,   nil,   nil,   nil,     5,   nil,
-     5,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,     5,     2,   nil,     2,   nil,    36,    31,
-   nil,     5,     5,   nil,   nil,   nil,   nil,   nil,    21,    21,
+     5,     5,     5,     5,     5,     5,     5,     5,     5,     5,
+     5,     5,     5,    45,   nil,     5,     5,     5,     5,     5,
+     5,     5,     5,     5,    41,     4,     6,    47,    32,   nil,
+     5,   nil,   nil,   nil,   nil,   nil,   nil,     4,   nil,    26,
+   nil,   nil,   nil,   nil,   nil,   nil,     4,     2,   nil,     5,
+     5,   nil,   nil,   nil,    21,    21,   nil,     2,   nil,     2,
    nil,   nil,   nil,   nil,     5,     5,   nil,   nil,   nil,     4,
-   nil,   nil,   nil,   nil,     4,    30,    30,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,     4,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,     5,     5,     4,   nil,   nil,
+   nil,   nil,    36,    31,   nil,   nil,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,     4,   nil,   nil,   nil,   nil,   nil,
-   nil,     2,     4,     5,     5,   nil,   nil,   nil,   nil,   nil,
-   nil,    21,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,    21,     5,     5,   nil,   nil,   nil,     2,     5,
-   nil,   nil,   nil,   nil,     5,     5,   nil,     5,   nil,   nil,
-    21,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,     2,     5,   nil,   nil,     5,   nil,   nil,   nil,    21,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,     4,   nil,     4,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-     4,   nil,   nil,     4 ]
+   nil,   nil,   nil,   nil,   nil,    30,    30,   nil,    21,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,     4,   nil,   nil,
+   nil,     5,     5,    21,     5,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,     4,   nil,     4,   nil,    21,   nil,
+     5,     5,   nil,     2,   nil,   nil,   nil,   nil,     5,   nil,
+   nil,   nil,   nil,   nil,     5,   nil,   nil,    21,   nil,   nil,
+   nil,   nil,     4,   nil,   nil,     4,   nil,   nil,     2,   nil,
+   nil,   nil,     5 ]
 
 racc_goto_pointer = [
-   nil,    17,     0,    11,    59,     3,    -3,   nil,  -242,   nil,
+   nil,    22,     0,    26,     3,     3,    -3,   nil,  -228,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,    13,   nil,  -112,   nil,    -8,  -114,   nil,   nil,   nil,
-   -38,   -65,    -4,   nil,     8,   nil,   -66,   -62,  -254,   -66,
-   -27,   -91,  -222,  -228,  -117,    -4,    -8,   -18,    -3 ]
+   nil,    -4,   nil,  -172,    30,   -59,     1,   nil,   nil,   nil,
+    -4,   -37,    -1,   nil,     7,   nil,   -38,    16,  -262,   -73,
+   -35,   -79,  -225,  -228,  -123,   -10,   -13,     4,    -8 ]
 
 racc_goto_default = [
-   nil,   nil,   250,   nil,   nil,    37,    41,    43,    47,    52,
-    58,    67,    69,    73,    74,     4,     7,    12,    16,    17,
-    19,    23,    31,    77,    38,    42,    45,    49,    54,    60,
-    65,   156,    70,   147,   nil,     8,   148,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,    39,   nil,   nil,   nil,   nil ]
+   nil,   nil,   176,   nil,   nil,    43,    46,    48,    51,    57,
+    62,    66,    68,     4,     6,    10,    12,    15,    20,    23,
+    28,    33,    38,    90,   nil,   nil,   nil,    53,    56,    59,
+    64,    79,     5,    80,   nil,    13,    82,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,    45,   nil,   nil,   nil,   nil ]
 
 racc_reduce_table = [
   0, 0, :racc_error,
-  0, 100, :_reduce_1,
-  1, 100, :_reduce_2,
-  1, 100, :_reduce_3,
-  2, 100, :_reduce_4,
-  1, 102, :_reduce_5,
-  3, 102, :_reduce_6,
-  2, 102, :_reduce_7,
-  1, 104, :_reduce_none,
-  1, 104, :_reduce_none,
-  1, 104, :_reduce_none,
-  1, 104, :_reduce_none,
-  1, 104, :_reduce_none,
-  1, 104, :_reduce_none,
-  1, 104, :_reduce_none,
-  1, 104, :_reduce_none,
-  1, 104, :_reduce_none,
-  1, 104, :_reduce_none,
-  1, 104, :_reduce_none,
-  1, 104, :_reduce_none,
-  1, 104, :_reduce_none,
-  1, 104, :_reduce_none,
-  1, 104, :_reduce_none,
-  1, 104, :_reduce_none,
-  3, 103, :_reduce_24,
-  2, 103, :_reduce_25,
-  1, 101, :_reduce_none,
-  1, 101, :_reduce_none,
-  1, 121, :_reduce_28,
-  1, 121, :_reduce_29,
-  1, 121, :_reduce_30,
-  1, 121, :_reduce_31,
-  1, 121, :_reduce_32,
-  1, 121, :_reduce_33,
-  1, 121, :_reduce_34,
-  1, 121, :_reduce_35,
-  1, 121, :_reduce_36,
-  1, 121, :_reduce_37,
-  1, 121, :_reduce_38,
-  1, 121, :_reduce_39,
-  1, 121, :_reduce_40,
-  3, 109, :_reduce_41,
-  3, 122, :_reduce_42,
-  3, 122, :_reduce_43,
-  1, 122, :_reduce_44,
-  2, 113, :_reduce_45,
-  1, 113, :_reduce_46,
-  1, 120, :_reduce_47,
-  2, 108, :_reduce_48,
-  2, 108, :_reduce_49,
-  2, 108, :_reduce_50,
-  2, 108, :_reduce_51,
-  2, 108, :_reduce_52,
-  2, 108, :_reduce_53,
-  2, 108, :_reduce_54,
-  2, 108, :_reduce_55,
-  2, 108, :_reduce_56,
-  2, 108, :_reduce_57,
-  2, 108, :_reduce_58,
-  3, 108, :_reduce_59,
-  3, 108, :_reduce_60,
-  3, 108, :_reduce_61,
-  3, 108, :_reduce_62,
-  3, 108, :_reduce_63,
-  3, 108, :_reduce_64,
-  3, 108, :_reduce_65,
-  3, 108, :_reduce_66,
-  3, 108, :_reduce_67,
-  3, 108, :_reduce_68,
-  3, 108, :_reduce_69,
-  3, 108, :_reduce_70,
-  3, 108, :_reduce_71,
-  3, 108, :_reduce_72,
-  3, 108, :_reduce_73,
-  3, 108, :_reduce_74,
-  3, 108, :_reduce_75,
-  3, 108, :_reduce_76,
-  3, 108, :_reduce_77,
-  3, 108, :_reduce_78,
-  3, 108, :_reduce_79,
-  3, 108, :_reduce_80,
-  3, 108, :_reduce_81,
-  3, 108, :_reduce_82,
-  3, 108, :_reduce_83,
-  3, 108, :_reduce_84,
-  3, 108, :_reduce_85,
-  3, 108, :_reduce_86,
-  3, 108, :_reduce_87,
-  3, 108, :_reduce_88,
-  3, 108, :_reduce_89,
-  3, 108, :_reduce_90,
-  3, 108, :_reduce_91,
-  3, 108, :_reduce_92,
-  2, 119, :_reduce_93,
-  3, 107, :_reduce_94,
-  2, 107, :_reduce_95,
-  1, 124, :_reduce_96,
-  1, 124, :_reduce_97,
-  1, 123, :_reduce_98,
-  3, 123, :_reduce_99,
-  1, 125, :_reduce_none,
-  4, 125, :_reduce_101,
-  4, 118, :_reduce_102,
-  1, 105, :_reduce_103,
-  1, 105, :_reduce_104,
-  1, 105, :_reduce_105,
-  1, 105, :_reduce_106,
-  1, 105, :_reduce_107,
-  1, 105, :_reduce_108,
-  2, 105, :_reduce_109,
-  2, 105, :_reduce_110,
-  2, 130, :_reduce_111,
-  2, 130, :_reduce_112,
-  2, 130, :_reduce_113,
-  1, 130, :_reduce_114,
-  1, 130, :_reduce_115,
-  3, 132, :_reduce_116,
-  3, 127, :_reduce_117,
-  0, 133, :_reduce_118,
-  1, 133, :_reduce_119,
-  3, 133, :_reduce_120,
-  3, 133, :_reduce_121,
-  4, 133, :_reduce_122,
-  3, 133, :_reduce_123,
-  1, 106, :_reduce_124,
-  2, 106, :_reduce_125,
-  1, 106, :_reduce_126,
-  3, 117, :_reduce_127,
-  2, 131, :_reduce_128,
-  2, 131, :_reduce_129,
-  3, 135, :_reduce_130,
-  4, 135, :_reduce_131,
-  4, 134, :_reduce_132,
-  6, 129, :_reduce_133,
-  7, 129, :_reduce_134,
-  3, 126, :_reduce_135,
-  0, 136, :_reduce_136,
-  1, 136, :_reduce_137,
-  2, 136, :_reduce_138,
-  3, 136, :_reduce_139,
-  3, 136, :_reduce_140,
-  4, 136, :_reduce_141,
-  4, 136, :_reduce_142,
-  2, 136, :_reduce_143,
-  1, 137, :_reduce_144,
-  3, 137, :_reduce_145,
-  3, 111, :_reduce_146,
-  4, 111, :_reduce_147,
-  5, 111, :_reduce_148,
-  3, 138, :_reduce_149,
-  2, 112, :_reduce_150,
-  3, 128, :_reduce_151,
-  3, 114, :_reduce_152,
-  2, 114, :_reduce_153,
-  3, 114, :_reduce_154,
-  4, 115, :_reduce_155,
-  4, 115, :_reduce_156,
-  1, 139, :_reduce_157,
-  3, 139, :_reduce_158,
-  2, 140, :_reduce_159,
-  2, 140, :_reduce_160,
-  3, 140, :_reduce_161,
-  3, 140, :_reduce_162,
-  5, 116, :_reduce_163,
-  7, 116, :_reduce_164,
-  1, 141, :_reduce_165,
-  2, 141, :_reduce_166,
-  3, 142, :_reduce_167,
-  4, 142, :_reduce_168,
-  3, 142, :_reduce_169,
-  3, 143, :_reduce_170,
-  2, 144, :_reduce_171,
-  1, 145, :_reduce_172,
-  2, 145, :_reduce_173,
-  0, 146, :_reduce_174,
-  2, 146, :_reduce_175,
-  1, 147, :_reduce_176,
-  2, 147, :_reduce_177,
-  2, 110, :_reduce_178,
-  3, 110, :_reduce_179,
-  3, 110, :_reduce_180 ]
+  0, 102, :_reduce_1,
+  1, 102, :_reduce_2,
+  1, 102, :_reduce_3,
+  2, 102, :_reduce_4,
+  1, 104, :_reduce_5,
+  3, 104, :_reduce_6,
+  2, 104, :_reduce_7,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_none,
+  3, 105, :_reduce_24,
+  2, 105, :_reduce_25,
+  1, 103, :_reduce_none,
+  1, 103, :_reduce_none,
+  1, 123, :_reduce_28,
+  1, 123, :_reduce_29,
+  1, 123, :_reduce_30,
+  1, 123, :_reduce_31,
+  1, 123, :_reduce_32,
+  1, 123, :_reduce_33,
+  1, 123, :_reduce_34,
+  1, 123, :_reduce_35,
+  1, 123, :_reduce_36,
+  1, 123, :_reduce_37,
+  1, 123, :_reduce_38,
+  1, 123, :_reduce_39,
+  1, 123, :_reduce_40,
+  3, 111, :_reduce_41,
+  3, 124, :_reduce_42,
+  3, 124, :_reduce_43,
+  1, 124, :_reduce_44,
+  2, 115, :_reduce_45,
+  1, 115, :_reduce_46,
+  1, 122, :_reduce_47,
+  2, 110, :_reduce_48,
+  2, 110, :_reduce_49,
+  2, 110, :_reduce_50,
+  2, 110, :_reduce_51,
+  2, 110, :_reduce_52,
+  2, 110, :_reduce_53,
+  2, 110, :_reduce_54,
+  2, 110, :_reduce_55,
+  2, 110, :_reduce_56,
+  2, 110, :_reduce_57,
+  2, 110, :_reduce_58,
+  3, 110, :_reduce_59,
+  3, 110, :_reduce_60,
+  3, 110, :_reduce_61,
+  3, 110, :_reduce_62,
+  3, 110, :_reduce_63,
+  3, 110, :_reduce_64,
+  3, 110, :_reduce_65,
+  3, 110, :_reduce_66,
+  3, 110, :_reduce_67,
+  3, 110, :_reduce_68,
+  3, 110, :_reduce_69,
+  3, 110, :_reduce_70,
+  3, 110, :_reduce_71,
+  3, 110, :_reduce_72,
+  3, 110, :_reduce_73,
+  3, 110, :_reduce_74,
+  3, 110, :_reduce_75,
+  3, 110, :_reduce_76,
+  3, 110, :_reduce_77,
+  3, 110, :_reduce_78,
+  3, 110, :_reduce_79,
+  3, 110, :_reduce_80,
+  3, 110, :_reduce_81,
+  3, 110, :_reduce_82,
+  3, 110, :_reduce_83,
+  3, 110, :_reduce_84,
+  3, 110, :_reduce_85,
+  3, 110, :_reduce_86,
+  3, 110, :_reduce_87,
+  3, 110, :_reduce_88,
+  3, 110, :_reduce_89,
+  3, 110, :_reduce_90,
+  3, 110, :_reduce_91,
+  3, 110, :_reduce_92,
+  2, 121, :_reduce_93,
+  5, 109, :_reduce_94,
+  4, 109, :_reduce_95,
+  1, 126, :_reduce_96,
+  1, 126, :_reduce_97,
+  1, 125, :_reduce_98,
+  3, 125, :_reduce_99,
+  1, 127, :_reduce_none,
+  4, 127, :_reduce_101,
+  4, 120, :_reduce_102,
+  1, 107, :_reduce_103,
+  1, 107, :_reduce_104,
+  1, 107, :_reduce_105,
+  1, 107, :_reduce_106,
+  1, 107, :_reduce_107,
+  1, 107, :_reduce_108,
+  2, 107, :_reduce_109,
+  2, 107, :_reduce_110,
+  2, 132, :_reduce_111,
+  2, 132, :_reduce_112,
+  2, 132, :_reduce_113,
+  1, 132, :_reduce_114,
+  1, 132, :_reduce_115,
+  3, 134, :_reduce_116,
+  3, 129, :_reduce_117,
+  0, 135, :_reduce_118,
+  1, 135, :_reduce_119,
+  3, 135, :_reduce_120,
+  3, 135, :_reduce_121,
+  4, 135, :_reduce_122,
+  3, 135, :_reduce_123,
+  1, 108, :_reduce_124,
+  2, 108, :_reduce_125,
+  1, 108, :_reduce_126,
+  3, 119, :_reduce_127,
+  2, 133, :_reduce_128,
+  2, 133, :_reduce_129,
+  3, 137, :_reduce_130,
+  4, 137, :_reduce_131,
+  4, 136, :_reduce_132,
+  6, 131, :_reduce_133,
+  7, 131, :_reduce_134,
+  3, 128, :_reduce_135,
+  0, 138, :_reduce_136,
+  1, 138, :_reduce_137,
+  2, 138, :_reduce_138,
+  3, 138, :_reduce_139,
+  3, 138, :_reduce_140,
+  4, 138, :_reduce_141,
+  4, 138, :_reduce_142,
+  2, 138, :_reduce_143,
+  1, 139, :_reduce_144,
+  3, 139, :_reduce_145,
+  3, 113, :_reduce_146,
+  4, 113, :_reduce_147,
+  5, 113, :_reduce_148,
+  3, 140, :_reduce_149,
+  2, 114, :_reduce_150,
+  3, 130, :_reduce_151,
+  3, 116, :_reduce_152,
+  2, 116, :_reduce_153,
+  3, 116, :_reduce_154,
+  4, 117, :_reduce_155,
+  4, 117, :_reduce_156,
+  1, 141, :_reduce_157,
+  3, 141, :_reduce_158,
+  2, 142, :_reduce_159,
+  2, 142, :_reduce_160,
+  3, 142, :_reduce_161,
+  3, 142, :_reduce_162,
+  5, 118, :_reduce_163,
+  7, 118, :_reduce_164,
+  1, 143, :_reduce_165,
+  2, 143, :_reduce_166,
+  3, 144, :_reduce_167,
+  4, 144, :_reduce_168,
+  3, 144, :_reduce_169,
+  3, 145, :_reduce_170,
+  2, 146, :_reduce_171,
+  1, 147, :_reduce_172,
+  2, 147, :_reduce_173,
+  0, 148, :_reduce_174,
+  2, 148, :_reduce_175,
+  1, 149, :_reduce_176,
+  2, 149, :_reduce_177,
+  2, 112, :_reduce_178,
+  3, 112, :_reduce_179,
+  3, 112, :_reduce_180 ]
 
 racc_reduce_n = 181
 
-racc_shift_n = 311
+racc_shift_n = 314
 
 racc_token_table = {
   false => 0,
@@ -1071,88 +1026,90 @@ def on_error(error_token_id, error_value, value_stack)
   :PROTOTYPE_ACCESS => 16,
   :SOAK_ACCESS => 17,
   :CODE => 18,
-  :PARAM => 19,
-  :NEW => 20,
-  :RETURN => 21,
-  :TRY => 22,
-  :CATCH => 23,
-  :FINALLY => 24,
-  :THROW => 25,
-  :BREAK => 26,
-  :CONTINUE => 27,
-  :FOR => 28,
-  :IN => 29,
-  :OF => 30,
-  :BY => 31,
-  :WHEN => 32,
-  :WHILE => 33,
-  :SWITCH => 34,
-  :LEADING_WHEN => 35,
-  :DELETE => 36,
-  :INSTANCEOF => 37,
-  :TYPEOF => 38,
-  :SUPER => 39,
-  :EXTENDS => 40,
-  :ARGUMENTS => 41,
-  :NEWLINE => 42,
-  :COMMENT => 43,
-  :JS => 44,
-  :INDENT => 45,
-  :OUTDENT => 46,
-  "?" => 47,
-  :UMINUS => 48,
-  :NOT => 49,
-  "!" => 50,
-  "!!" => 51,
-  "~" => 52,
-  "++" => 53,
-  "--" => 54,
-  "*" => 55,
-  "/" => 56,
-  "%" => 57,
-  "+" => 58,
-  "-" => 59,
-  "<<" => 60,
-  ">>" => 61,
-  ">>>" => 62,
-  "&" => 63,
-  "|" => 64,
-  "^" => 65,
-  "<=" => 66,
-  "<" => 67,
-  ">" => 68,
-  ">=" => 69,
-  "==" => 70,
-  "!=" => 71,
-  :IS => 72,
-  :ISNT => 73,
-  "&&" => 74,
-  "||" => 75,
-  :AND => 76,
-  :OR => 77,
-  "-=" => 78,
-  "+=" => 79,
-  "/=" => 80,
-  "*=" => 81,
-  "%=" => 82,
-  "." => 83,
-  "||=" => 84,
-  "&&=" => 85,
-  "?=" => 86,
-  :ASSIGN => 87,
-  "=>" => 88,
-  "==>" => 89,
-  "\n" => 90,
-  ";" => 91,
-  "," => 92,
-  "[" => 93,
-  "]" => 94,
-  "{" => 95,
-  "}" => 96,
-  "(" => 97,
-  ")" => 98 }
-
-racc_nt_base = 99
+  :PARAM_START => 19,
+  :PARAM => 20,
+  :PARAM_END => 21,
+  :NEW => 22,
+  :RETURN => 23,
+  :TRY => 24,
+  :CATCH => 25,
+  :FINALLY => 26,
+  :THROW => 27,
+  :BREAK => 28,
+  :CONTINUE => 29,
+  :FOR => 30,
+  :IN => 31,
+  :OF => 32,
+  :BY => 33,
+  :WHEN => 34,
+  :WHILE => 35,
+  :SWITCH => 36,
+  :LEADING_WHEN => 37,
+  :DELETE => 38,
+  :INSTANCEOF => 39,
+  :TYPEOF => 40,
+  :SUPER => 41,
+  :EXTENDS => 42,
+  :ARGUMENTS => 43,
+  :NEWLINE => 44,
+  :COMMENT => 45,
+  :JS => 46,
+  :INDENT => 47,
+  :OUTDENT => 48,
+  "?" => 49,
+  :UMINUS => 50,
+  :NOT => 51,
+  "!" => 52,
+  "!!" => 53,
+  "~" => 54,
+  "++" => 55,
+  "--" => 56,
+  "*" => 57,
+  "/" => 58,
+  "%" => 59,
+  "+" => 60,
+  "-" => 61,
+  "<<" => 62,
+  ">>" => 63,
+  ">>>" => 64,
+  "&" => 65,
+  "|" => 66,
+  "^" => 67,
+  "<=" => 68,
+  "<" => 69,
+  ">" => 70,
+  ">=" => 71,
+  "==" => 72,
+  "!=" => 73,
+  :IS => 74,
+  :ISNT => 75,
+  "&&" => 76,
+  "||" => 77,
+  :AND => 78,
+  :OR => 79,
+  "-=" => 80,
+  "+=" => 81,
+  "/=" => 82,
+  "*=" => 83,
+  "%=" => 84,
+  "." => 85,
+  "||=" => 86,
+  "&&=" => 87,
+  "?=" => 88,
+  :ASSIGN => 89,
+  "=>" => 90,
+  "==>" => 91,
+  "\n" => 92,
+  ";" => 93,
+  "," => 94,
+  "[" => 95,
+  "]" => 96,
+  "{" => 97,
+  "}" => 98,
+  "(" => 99,
+  ")" => 100 }
+
+racc_nt_base = 101
 
 racc_use_result_var = true
 
@@ -1192,7 +1149,9 @@ def on_error(error_token_id, error_value, value_stack)
   "PROTOTYPE_ACCESS",
   "SOAK_ACCESS",
   "CODE",
+  "PARAM_START",
   "PARAM",
+  "PARAM_END",
   "NEW",
   "RETURN",
   "TRY",
@@ -1889,42 +1848,42 @@ def _reduce_93(val, _values, result)
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 202)
+module_eval(<<'.,.,', 'grammar.y', 203)
   def _reduce_94(val, _values, result)
-     result = CodeNode.new(val[0], val[2], val[1]) 
+     result = CodeNode.new(val[1], val[4], val[3]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 203)
+module_eval(<<'.,.,', 'grammar.y', 205)
   def _reduce_95(val, _values, result)
-     result = CodeNode.new([], val[1], val[0]) 
+     result = CodeNode.new([], val[3], val[2]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 208)
+module_eval(<<'.,.,', 'grammar.y', 210)
   def _reduce_96(val, _values, result)
      result = :func 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 209)
+module_eval(<<'.,.,', 'grammar.y', 211)
   def _reduce_97(val, _values, result)
      result = :boundfunc 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 214)
+module_eval(<<'.,.,', 'grammar.y', 216)
   def _reduce_98(val, _values, result)
      result = val 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 215)
+module_eval(<<'.,.,', 'grammar.y', 217)
   def _reduce_99(val, _values, result)
      result = val[0] << val[2] 
     result
@@ -1933,560 +1892,560 @@ def _reduce_99(val, _values, result)
 
 # reduce 100 omitted
 
-module_eval(<<'.,.,', 'grammar.y', 221)
+module_eval(<<'.,.,', 'grammar.y', 223)
   def _reduce_101(val, _values, result)
      result = SplatNode.new(val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 226)
+module_eval(<<'.,.,', 'grammar.y', 228)
   def _reduce_102(val, _values, result)
      result = SplatNode.new(val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 231)
+module_eval(<<'.,.,', 'grammar.y', 233)
   def _reduce_103(val, _values, result)
      result = ValueNode.new(val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 232)
+module_eval(<<'.,.,', 'grammar.y', 234)
   def _reduce_104(val, _values, result)
      result = ValueNode.new(val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 233)
+module_eval(<<'.,.,', 'grammar.y', 235)
   def _reduce_105(val, _values, result)
      result = ValueNode.new(val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 234)
+module_eval(<<'.,.,', 'grammar.y', 236)
   def _reduce_106(val, _values, result)
      result = ValueNode.new(val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 235)
+module_eval(<<'.,.,', 'grammar.y', 237)
   def _reduce_107(val, _values, result)
      result = ValueNode.new(val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 236)
+module_eval(<<'.,.,', 'grammar.y', 238)
   def _reduce_108(val, _values, result)
      result = ValueNode.new(val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 237)
+module_eval(<<'.,.,', 'grammar.y', 239)
   def _reduce_109(val, _values, result)
      result = val[0] << val[1] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 238)
+module_eval(<<'.,.,', 'grammar.y', 240)
   def _reduce_110(val, _values, result)
      result = ValueNode.new(val[0], [val[1]]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 243)
+module_eval(<<'.,.,', 'grammar.y', 245)
   def _reduce_111(val, _values, result)
      result = AccessorNode.new(val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 244)
+module_eval(<<'.,.,', 'grammar.y', 246)
   def _reduce_112(val, _values, result)
      result = AccessorNode.new(val[1], :prototype) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 245)
+module_eval(<<'.,.,', 'grammar.y', 247)
   def _reduce_113(val, _values, result)
      result = AccessorNode.new(val[1], :soak) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 246)
+module_eval(<<'.,.,', 'grammar.y', 248)
   def _reduce_114(val, _values, result)
      result = val[0] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 247)
+module_eval(<<'.,.,', 'grammar.y', 249)
   def _reduce_115(val, _values, result)
      result = SliceNode.new(val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 252)
+module_eval(<<'.,.,', 'grammar.y', 254)
   def _reduce_116(val, _values, result)
      result = IndexNode.new(val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 257)
+module_eval(<<'.,.,', 'grammar.y', 259)
   def _reduce_117(val, _values, result)
      result = ObjectNode.new(val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 262)
+module_eval(<<'.,.,', 'grammar.y', 264)
   def _reduce_118(val, _values, result)
      result = [] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 263)
+module_eval(<<'.,.,', 'grammar.y', 265)
   def _reduce_119(val, _values, result)
      result = val 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 264)
+module_eval(<<'.,.,', 'grammar.y', 266)
   def _reduce_120(val, _values, result)
      result = val[0] << val[2] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 265)
+module_eval(<<'.,.,', 'grammar.y', 267)
   def _reduce_121(val, _values, result)
      result = val[0] << val[2] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 267)
+module_eval(<<'.,.,', 'grammar.y', 269)
   def _reduce_122(val, _values, result)
      result = val[0] << val[3] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 268)
+module_eval(<<'.,.,', 'grammar.y', 270)
   def _reduce_123(val, _values, result)
      result = val[1] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 273)
+module_eval(<<'.,.,', 'grammar.y', 275)
   def _reduce_124(val, _values, result)
      result = val[0] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 274)
+module_eval(<<'.,.,', 'grammar.y', 276)
   def _reduce_125(val, _values, result)
      result = val[1].new_instance 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 275)
+module_eval(<<'.,.,', 'grammar.y', 277)
   def _reduce_126(val, _values, result)
      result = val[0] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 280)
+module_eval(<<'.,.,', 'grammar.y', 282)
   def _reduce_127(val, _values, result)
      result = ExtendsNode.new(val[0], val[2]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 285)
+module_eval(<<'.,.,', 'grammar.y', 287)
   def _reduce_128(val, _values, result)
      result = CallNode.new(val[0], val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 286)
+module_eval(<<'.,.,', 'grammar.y', 288)
   def _reduce_129(val, _values, result)
      result = CallNode.new(val[0], val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 291)
+module_eval(<<'.,.,', 'grammar.y', 293)
   def _reduce_130(val, _values, result)
      result = val[1] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 292)
+module_eval(<<'.,.,', 'grammar.y', 294)
   def _reduce_131(val, _values, result)
      result = val[1] << val[3] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 297)
+module_eval(<<'.,.,', 'grammar.y', 299)
   def _reduce_132(val, _values, result)
      result = CallNode.new(Value.new('super'), val[2]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 303)
+module_eval(<<'.,.,', 'grammar.y', 305)
   def _reduce_133(val, _values, result)
      result = RangeNode.new(val[1], val[4]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 305)
+module_eval(<<'.,.,', 'grammar.y', 307)
   def _reduce_134(val, _values, result)
      result = RangeNode.new(val[1], val[5], true) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 310)
+module_eval(<<'.,.,', 'grammar.y', 312)
   def _reduce_135(val, _values, result)
      result = ArrayNode.new(val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 315)
+module_eval(<<'.,.,', 'grammar.y', 317)
   def _reduce_136(val, _values, result)
      result = [] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 316)
+module_eval(<<'.,.,', 'grammar.y', 318)
   def _reduce_137(val, _values, result)
      result = val 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 317)
+module_eval(<<'.,.,', 'grammar.y', 319)
   def _reduce_138(val, _values, result)
      result = [val[1]] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 318)
+module_eval(<<'.,.,', 'grammar.y', 320)
   def _reduce_139(val, _values, result)
      result = val[0] << val[2] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 319)
+module_eval(<<'.,.,', 'grammar.y', 321)
   def _reduce_140(val, _values, result)
      result = val[0] << val[2] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 320)
+module_eval(<<'.,.,', 'grammar.y', 322)
   def _reduce_141(val, _values, result)
      result = val[0] << val[3] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 321)
+module_eval(<<'.,.,', 'grammar.y', 323)
   def _reduce_142(val, _values, result)
      result = val[0] << val[3] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 322)
+module_eval(<<'.,.,', 'grammar.y', 324)
   def _reduce_143(val, _values, result)
      result = val[0] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 327)
+module_eval(<<'.,.,', 'grammar.y', 329)
   def _reduce_144(val, _values, result)
      result = val[0] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 328)
+module_eval(<<'.,.,', 'grammar.y', 330)
   def _reduce_145(val, _values, result)
      result = ([val[0]] << val[2]).flatten 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 333)
+module_eval(<<'.,.,', 'grammar.y', 335)
   def _reduce_146(val, _values, result)
      result = TryNode.new(val[1], val[2][0], val[2][1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 334)
+module_eval(<<'.,.,', 'grammar.y', 336)
   def _reduce_147(val, _values, result)
      result = TryNode.new(val[1], nil, nil, val[3]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 336)
+module_eval(<<'.,.,', 'grammar.y', 338)
   def _reduce_148(val, _values, result)
      result = TryNode.new(val[1], val[2][0], val[2][1], val[4]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 341)
+module_eval(<<'.,.,', 'grammar.y', 343)
   def _reduce_149(val, _values, result)
      result = [val[1], val[2]] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 346)
+module_eval(<<'.,.,', 'grammar.y', 348)
   def _reduce_150(val, _values, result)
      result = ThrowNode.new(val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 351)
+module_eval(<<'.,.,', 'grammar.y', 353)
   def _reduce_151(val, _values, result)
      result = ParentheticalNode.new(val[1], val[0].line) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 356)
+module_eval(<<'.,.,', 'grammar.y', 358)
   def _reduce_152(val, _values, result)
      result = WhileNode.new(val[1], val[2]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 357)
+module_eval(<<'.,.,', 'grammar.y', 359)
   def _reduce_153(val, _values, result)
      result = WhileNode.new(val[1], nil) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 358)
+module_eval(<<'.,.,', 'grammar.y', 360)
   def _reduce_154(val, _values, result)
      result = WhileNode.new(val[2], Expressions.wrap(val[0])) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 365)
+module_eval(<<'.,.,', 'grammar.y', 367)
   def _reduce_155(val, _values, result)
      result = ForNode.new(val[0], val[3], val[2][0], val[2][1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 366)
+module_eval(<<'.,.,', 'grammar.y', 368)
   def _reduce_156(val, _values, result)
      result = ForNode.new(val[3], val[2], val[1][0], val[1][1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 371)
+module_eval(<<'.,.,', 'grammar.y', 373)
   def _reduce_157(val, _values, result)
      result = val 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 372)
+module_eval(<<'.,.,', 'grammar.y', 374)
   def _reduce_158(val, _values, result)
      result = [val[0], val[2]] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 377)
+module_eval(<<'.,.,', 'grammar.y', 379)
   def _reduce_159(val, _values, result)
      result = {:source => val[1]} 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 378)
+module_eval(<<'.,.,', 'grammar.y', 380)
   def _reduce_160(val, _values, result)
      result = {:source => val[1], :object => true} 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 380)
+module_eval(<<'.,.,', 'grammar.y', 382)
   def _reduce_161(val, _values, result)
      result = val[0].merge(:filter => val[2]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 382)
+module_eval(<<'.,.,', 'grammar.y', 384)
   def _reduce_162(val, _values, result)
      result = val[0].merge(:step => val[2]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 388)
+module_eval(<<'.,.,', 'grammar.y', 390)
   def _reduce_163(val, _values, result)
      result = val[3].rewrite_condition(val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 390)
+module_eval(<<'.,.,', 'grammar.y', 392)
   def _reduce_164(val, _values, result)
      result = val[3].rewrite_condition(val[1]).add_else(val[5]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 395)
+module_eval(<<'.,.,', 'grammar.y', 397)
   def _reduce_165(val, _values, result)
      result = val[0] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 396)
+module_eval(<<'.,.,', 'grammar.y', 398)
   def _reduce_166(val, _values, result)
      result = val[0] << val[1] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 401)
+module_eval(<<'.,.,', 'grammar.y', 403)
   def _reduce_167(val, _values, result)
      result = IfNode.new(val[1], val[2], nil, {:statement => true}) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 403)
+module_eval(<<'.,.,', 'grammar.y', 405)
   def _reduce_168(val, _values, result)
      result = IfNode.new(val[1], val[2], nil, {:statement => true}) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 404)
+module_eval(<<'.,.,', 'grammar.y', 406)
   def _reduce_169(val, _values, result)
      result = val[2].add_comment(val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 409)
+module_eval(<<'.,.,', 'grammar.y', 411)
   def _reduce_170(val, _values, result)
      result = IfNode.new(val[1], val[2]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 414)
+module_eval(<<'.,.,', 'grammar.y', 416)
   def _reduce_171(val, _values, result)
      result = val[1].force_statement 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 419)
+module_eval(<<'.,.,', 'grammar.y', 421)
   def _reduce_172(val, _values, result)
      result = val[0] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 420)
+module_eval(<<'.,.,', 'grammar.y', 422)
   def _reduce_173(val, _values, result)
      result = val[0].add_else(val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 425)
+module_eval(<<'.,.,', 'grammar.y', 427)
   def _reduce_174(val, _values, result)
      result = nil 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 426)
+module_eval(<<'.,.,', 'grammar.y', 428)
   def _reduce_175(val, _values, result)
      result = val[1] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 431)
+module_eval(<<'.,.,', 'grammar.y', 433)
   def _reduce_176(val, _values, result)
      result = val[0] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 432)
+module_eval(<<'.,.,', 'grammar.y', 434)
   def _reduce_177(val, _values, result)
      result = val[0].add_else(val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 437)
+module_eval(<<'.,.,', 'grammar.y', 439)
   def _reduce_178(val, _values, result)
      result = val[0].add_else(val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 438)
+module_eval(<<'.,.,', 'grammar.y', 440)
   def _reduce_179(val, _values, result)
      result = IfNode.new(val[2], Expressions.wrap(val[0]), nil, {:statement => true}) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 439)
+module_eval(<<'.,.,', 'grammar.y', 441)
   def _reduce_180(val, _values, result)
      result = IfNode.new(val[2], Expressions.wrap(val[0]), nil, {:statement => true, :invert => true}) 
     result
diff --git a/lib/coffee_script/rewriter.rb b/lib/coffee_script/rewriter.rb
index 964aa191e2..bb573e384d 100644
--- a/lib/coffee_script/rewriter.rb
+++ b/lib/coffee_script/rewriter.rb
@@ -6,7 +6,7 @@ module CoffeeScript
   class Rewriter
 
     # Tokens that must be balanced.
-    BALANCED_PAIRS = [['(', ')'], ['[', ']'], ['{', '}'], [:INDENT, :OUTDENT]]
+    BALANCED_PAIRS = [['(', ')'], ['[', ']'], ['{', '}'], [:INDENT, :OUTDENT], [:PARAM_START, :PARAM_END]]
 
     # Tokens that signal the start of a balanced pair.
     EXPRESSION_START = BALANCED_PAIRS.map {|pair| pair.first }
@@ -19,8 +19,8 @@ class Rewriter
 
     # Tokens pairs that, in immediate succession, indicate an implicit call.
     IMPLICIT_FUNC = [:IDENTIFIER, :SUPER]
-    IMPLICIT_END  = [:IF, :UNLESS, :FOR, :WHILE, "\n"]
-    IMPLICIT_CALL = [:IDENTIFIER, :NUMBER, :STRING, :JS, :REGEX, :NEW, :PARAM,
+    IMPLICIT_END  = [:IF, :UNLESS, :FOR, :WHILE, "\n", :PARAM_START]
+    IMPLICIT_CALL = [:IDENTIFIER, :NUMBER, :STRING, :JS, :REGEX, :NEW, :PARAM_START,
                      :TRY, :DELETE, :INSTANCEOF, :TYPEOF, :SWITCH, :ARGUMENTS,
                      :TRUE, :FALSE, :YES, :NO, :ON, :OFF, '!', '!!', :NOT]
 
@@ -34,7 +34,7 @@ class Rewriter
     # Single-line flavors of block expressions that have unclosed endings.
     # The grammar can't disambiguate them, so we insert the implicit indentation.
     SINGLE_LINERS  = [:ELSE, "=>", "==>", :TRY, :FINALLY, :THEN]
-    SINGLE_CLOSERS = ["\n", :CATCH, :FINALLY, :ELSE, :OUTDENT, :LEADING_WHEN]
+    SINGLE_CLOSERS = ["\n", :CATCH, :FINALLY, :ELSE, :OUTDENT, :LEADING_WHEN, :PARAM_START]
 
     # Rewrite the token stream in multiple passes, one logical filter at
     # a time. This could certainly be changed into a single pass through the
@@ -138,7 +138,8 @@ def add_implicit_indentation
           if (!tok || SINGLE_CLOSERS.include?(tok[0]) ||
               (tok[0] == ')' && parens == 0)) &&
               !(starter == :ELSE && tok[0] == :ELSE)
-            @tokens.insert(idx, [:OUTDENT, Value.new(2, line)])
+            insertion = @tokens[idx - 1][0] == "," ? idx - 1 : idx
+            @tokens.insert(insertion, [:OUTDENT, Value.new(2, line)])
             break
           end
           parens += 1 if tok[0] == '('
@@ -164,7 +165,7 @@ def add_implicit_parentheses
         next 1 unless IMPLICIT_FUNC.include?(prev[0]) && IMPLICIT_CALL.include?(token[0])
         @tokens.insert(i, ['(', Value.new('(', token[1].line)])
         open = true
-        next 2
+        next token[0] == :PARAM_START ? 1 : 2
       end
     end
 
@@ -188,7 +189,7 @@ def ensure_balance(*pairs)
     end
 
     # We'd like to support syntax like this:
-    #    el.click(event =>
+    #    el.click((event) =>
     #      el.hide())
     # In order to accomplish this, move outdents that follow closing parens
     # inwards, safely. The steps to accomplish this are:
diff --git a/test/fixtures/execution/test_arguments.coffee b/test/fixtures/execution/test_arguments.coffee
index dcfb7d28b3..32b61e1a4b 100644
--- a/test/fixtures/execution/test_arguments.coffee
+++ b/test/fixtures/execution/test_arguments.coffee
@@ -1,4 +1,4 @@
-area: x, y, x1, y1 =>
+area: (x, y, x1, y1) =>
   (x - x1) * (x - y1)
 
 x:  y:  10
@@ -18,14 +18,14 @@ print(area(
 
 
 # Arguments are turned into arrays.
-curried: =>
+curried: () =>
   print area.apply(this, arguments.concat(20, 20)) is 100
 
 curried 10, 10
 
 
 # Arguments is not a special keyword -- it can be assigned to:
-func: =>
+func: () =>
   arguments: 25
   arguments
 
diff --git a/test/fixtures/execution/test_array_comprehension.coffee b/test/fixtures/execution/test_array_comprehension.coffee
index b5005bd650..f0ab48c3ac 100644
--- a/test/fixtures/execution/test_array_comprehension.coffee
+++ b/test/fixtures/execution/test_array_comprehension.coffee
@@ -34,7 +34,7 @@ methods: ['one', 'two', 'three']
 
 for method in methods
   name: method
-  obj[name]: =>
+  obj[name]: () =>
     "I'm " + name
 
 print obj.one()   is "I'm one"
diff --git a/test/fixtures/execution/test_assignment.coffee b/test/fixtures/execution/test_assignment.coffee
index c1b5d127e3..ff25e765a3 100644
--- a/test/fixtures/execution/test_assignment.coffee
+++ b/test/fixtures/execution/test_assignment.coffee
@@ -12,7 +12,7 @@ print result is true and result2 is true
 
 # Assign to conditional.
 
-get_x: => 10
+get_x: () => 10
 
 if x: get_x() then 100
 
diff --git a/test/fixtures/execution/test_blocks.coffee b/test/fixtures/execution/test_blocks.coffee
index 720d82af81..4be80c692b 100644
--- a/test/fixtures/execution/test_blocks.coffee
+++ b/test/fixtures/execution/test_blocks.coffee
@@ -1,4 +1,4 @@
-results: [1, 2, 3].map() x =>
+results: [1, 2, 3].map() (x) =>
   x * x
 
 print results.join(' ') is '1 4 9'
\ No newline at end of file
diff --git a/test/fixtures/execution/test_calling_super.coffee b/test/fixtures/execution/test_calling_super.coffee
index c2f619ce02..e57baebc13 100644
--- a/test/fixtures/execution/test_calling_super.coffee
+++ b/test/fixtures/execution/test_calling_super.coffee
@@ -1,21 +1,21 @@
-Base: =>
-Base::func: string =>
+Base: () =>
+Base::func: (string) =>
   'zero/' + string
 
-FirstChild: =>
+FirstChild: () =>
 FirstChild extends Base
-FirstChild::func: string =>
+FirstChild::func: (string) =>
   super('one/') + string
 
-SecondChild: =>
+SecondChild: () =>
 SecondChild extends FirstChild
-SecondChild::func: string =>
+SecondChild::func: (string) =>
   super('two/') + string
 
-ThirdChild: =>
+ThirdChild: () =>
   this.array: [1, 2, 3]
 ThirdChild extends SecondChild
-ThirdChild::func: string =>
+ThirdChild::func: (string) =>
   super('three/') + string
 
 result: (new ThirdChild()).func 'four'
@@ -23,13 +23,13 @@ result: (new ThirdChild()).func 'four'
 print result is 'zero/one/two/three/four'
 
 
-TopClass: arg =>
+TopClass: (arg) =>
   this.prop: 'top-' + arg
 
-SuperClass: arg =>
+SuperClass: (arg) =>
   super 'super-' + arg
 
-SubClass: =>
+SubClass: () =>
   super 'sub'
 
 SuperClass extends TopClass
diff --git a/test/fixtures/execution/test_chained_calls.coffee b/test/fixtures/execution/test_chained_calls.coffee
index 1355015cd6..6d3725aecc 100644
--- a/test/fixtures/execution/test_chained_calls.coffee
+++ b/test/fixtures/execution/test_chained_calls.coffee
@@ -1,4 +1,5 @@
-identity_wrap: x => => x
+identity_wrap: (x) =>
+  () => x
 
 result: identity_wrap(identity_wrap(true))()()
 
diff --git a/test/fixtures/execution/test_everything.coffee b/test/fixtures/execution/test_everything.coffee
index 7a482e5a36..cc9860182b 100644
--- a/test/fixtures/execution/test_everything.coffee
+++ b/test/fixtures/execution/test_everything.coffee
@@ -1,4 +1,4 @@
-func: =>
+func: () =>
   a: 3
   b: []
 
@@ -9,7 +9,7 @@ func: =>
   c: {
     "text": b
     other: null
-    something_else: x => x + 5
+    something_else: (x) => x + 5
   }
 
   c: 'error' unless 42 > 41
diff --git a/test/fixtures/execution/test_existence.coffee b/test/fixtures/execution/test_existence.coffee
index 16c64c74c5..a0438aa981 100644
--- a/test/fixtures/execution/test_existence.coffee
+++ b/test/fixtures/execution/test_existence.coffee
@@ -26,7 +26,7 @@ print z is null and x is "EX"
 # Only evaluate once.
 
 counter: 0
-get_next_node: =>
+get_next_node: () =>
   throw "up" if counter
   counter++
 
diff --git a/test/fixtures/execution/test_expressions.coffee b/test/fixtures/execution/test_expressions.coffee
index 1760e341ea..042ea59ccf 100644
--- a/test/fixtures/execution/test_expressions.coffee
+++ b/test/fixtures/execution/test_expressions.coffee
@@ -5,7 +5,7 @@ items: [1, 2, 3, "bacon", 4, 5]
 for item in items
   break if item is "bacon"
 
-findit: items =>
+findit: (items) =>
   for item in items
     return item if item is "bacon"
 
@@ -17,7 +17,7 @@ print findit(items) is "bacon"
 
 obj: {
   num: 5
-  func: =>
+  func: () =>
     this.result: if false
       10
     else
diff --git a/test/fixtures/execution/test_functions.coffee b/test/fixtures/execution/test_functions.coffee
index bc85e206f3..4dde028c83 100644
--- a/test/fixtures/execution/test_functions.coffee
+++ b/test/fixtures/execution/test_functions.coffee
@@ -1,6 +1,6 @@
 x: 1
 y: {}
-y.x: => 3
+y.x: () => 3
 
 print x is 1
 print typeof(y.x) is 'function'
@@ -9,17 +9,17 @@ print y.x.name is 'x'
 
 
 # The empty function should not cause a syntax error.
-=>
+() =>
 
 
 obj: {
   name: "Fred"
 
-  bound: =>
-    (==> print(this.name is "Fred"))()
+  bound: () =>
+    (() ==> print(this.name is "Fred"))()
 
-  unbound: =>
-    (=> print(!this.name?))()
+  unbound: () =>
+    (() => print(!this.name?))()
 }
 
 obj.unbound()
@@ -29,18 +29,18 @@ obj.bound()
 # The named function should be cleared out before a call occurs:
 
 # Python decorator style wrapper that memoizes any function
-memoize: fn =>
+memoize: (fn) =>
   cache: {}
   self: this
-  args... =>
+  (args...) =>
     key: args.toString()
     return cache[key] if cache[key]
     cache[key] = fn.apply(self, args)
 
 Math: {
-  Add: a, b => a + b
-  AnonymousAdd: (a, b => a + b)
-  FastAdd: memoize a, b => a + b
+  Add: (a, b) => a + b
+  AnonymousAdd: ((a, b) => a + b)
+  FastAdd: memoize (a, b) => a + b
 }
 
 print Math.Add(5, 5) is 10
diff --git a/test/fixtures/execution/test_funky_comments.coffee b/test/fixtures/execution/test_funky_comments.coffee
index 8acaafd8f8..7265243142 100644
--- a/test/fixtures/execution/test_funky_comments.coffee
+++ b/test/fixtures/execution/test_funky_comments.coffee
@@ -1,5 +1,5 @@
   # comment
-func: =>
+func: () =>
 # comment
   false
   false   # comment
@@ -14,7 +14,7 @@ switch 'string'
   when null
     something_else()
 
-=>
+() =>
   code()
   # comment
 
diff --git a/test/fixtures/execution/test_literals.coffee b/test/fixtures/execution/test_literals.coffee
index 4dfb3b8c40..923014b501 100644
--- a/test/fixtures/execution/test_literals.coffee
+++ b/test/fixtures/execution/test_literals.coffee
@@ -1,4 +1,4 @@
-a: [(x => x), (x => x * x)]
+a: [(x) => x, (x) => x * x]
 
 print a.length is 2
 
@@ -14,7 +14,7 @@ neg: (3 -4)
 print neg is -1
 
 
-func: =>
+func: () =>
   return if true
 
 print func() is null
diff --git a/test/fixtures/execution/test_operations.coffee b/test/fixtures/execution/test_operations.coffee
index 9f0d51db94..e9de9324ba 100644
--- a/test/fixtures/execution/test_operations.coffee
+++ b/test/fixtures/execution/test_operations.coffee
@@ -13,6 +13,6 @@ print 50 > 10 > 5 is parseInt('5', 10)
 # more than once.
 
 i: 0
-func: => i++
+func: () => i++
 
 print 1 > func() < 1
diff --git a/test/fixtures/execution/test_splats.coffee b/test/fixtures/execution/test_splats.coffee
index c00cf11660..58338adcc0 100644
--- a/test/fixtures/execution/test_splats.coffee
+++ b/test/fixtures/execution/test_splats.coffee
@@ -1,4 +1,4 @@
-func: first, second, rest... =>
+func: (first, second, rest...) =>
   rest.join ' '
 
 result: func 1, 2, 3, 4, 5
@@ -8,7 +8,7 @@ print result is "3 4 5"
 
 gold: silver: bronze: the_field: null
 
-medalists: first, second, third, rest... =>
+medalists: (first, second, third, rest...) =>
   gold:       first
   silver:     second
   bronze:     third
diff --git a/test/fixtures/execution/test_switch.coffee b/test/fixtures/execution/test_switch.coffee
index 80535cd042..a978faf96f 100644
--- a/test/fixtures/execution/test_switch.coffee
+++ b/test/fixtures/execution/test_switch.coffee
@@ -16,7 +16,7 @@ result: switch num
 
 print result
 
-func: num =>
+func: (num) =>
   switch num
     when 2, 4, 6
       true
diff --git a/test/fixtures/generation/each.coffee b/test/fixtures/generation/each.coffee
index 89bade6171..544f96ed67 100644
--- a/test/fixtures/generation/each.coffee
+++ b/test/fixtures/generation/each.coffee
@@ -1,6 +1,6 @@
 # The cornerstone, an each implementation.
 # Handles objects implementing forEach, arrays, and raw objects.
-_.each: obj, iterator, context =>
+_.each: (obj, iterator, context) =>
   index: 0
   try
     if obj.forEach
diff --git a/test/fixtures/generation/each.tokens b/test/fixtures/generation/each.tokens
index aa5d853e2a..9244f37d7a 100644
--- a/test/fixtures/generation/each.tokens
+++ b/test/fixtures/generation/each.tokens
@@ -1 +1 @@
-[[:COMMENT, [" The cornerstone, an each implementation.", " Handles objects implementing forEach, arrays, and raw objects."]], ["\n", "\n"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "each"], [:ASSIGN, ":"], [:PARAM, "obj"], [",", ","], [:PARAM, "iterator"], [",", ","], [:PARAM, "context"], ["=>", "=>"], [:INDENT, 2], [:IDENTIFIER, "index"], [:ASSIGN, ":"], [:NUMBER, "0"], ["\n", "\n"], [:TRY, "try"], [:INDENT, 2], [:IF, "if"], [:IDENTIFIER, "obj"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "forEach"], [:INDENT, 2], [:IDENTIFIER, "obj"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "forEach"], ["(", "("], [:IDENTIFIER, "iterator"], [",", ","], [:IDENTIFIER, "context"], [")", ")"], [:OUTDENT, 2], [:ELSE, "else"], [:IF, "if"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "isArray"], ["(", "("], [:IDENTIFIER, "obj"], [")", ")"], [:OR, "or"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "isArguments"], ["(", "("], [:IDENTIFIER, "obj"], [")", ")"], [:INDENT, 2], [:IDENTIFIER, "iterator"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "call"], ["(", "("], [:IDENTIFIER, "context"], [",", ","], [:IDENTIFIER, "item"], [",", ","], [:IDENTIFIER, "i"], [",", ","], [:IDENTIFIER, "obj"], [")", ")"], [:FOR, "for"], [:IDENTIFIER, "item"], [",", ","], [:IDENTIFIER, "i"], [:IN, "in"], [:IDENTIFIER, "obj"], [:OUTDENT, 2], [:ELSE, "else"], [:INDENT, 2], [:IDENTIFIER, "iterator"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "call"], ["(", "("], [:IDENTIFIER, "context"], [",", ","], [:IDENTIFIER, "obj"], ["[", "["], [:IDENTIFIER, "key"], ["]", "]"], [",", ","], [:IDENTIFIER, "key"], [",", ","], [:IDENTIFIER, "obj"], [")", ")"], [:FOR, "for"], [:IDENTIFIER, "key"], [:IN, "in"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "keys"], ["(", "("], [:IDENTIFIER, "obj"], [")", ")"], [:OUTDENT, 2], [:OUTDENT, 2], [:CATCH, "catch"], [:IDENTIFIER, "e"], [:INDENT, 2], [:THROW, "throw"], [:IDENTIFIER, "e"], [:IF, "if"], [:IDENTIFIER, "e"], [:ISNT, "isnt"], [:IDENTIFIER, "breaker"], [:OUTDENT, 2], ["\n", "\n"], [:IDENTIFIER, "obj"], [:OUTDENT, 2], ["\n", "\n"]]
\ No newline at end of file
+[[:COMMENT, [" The cornerstone, an each implementation.", " Handles objects implementing forEach, arrays, and raw objects."]], ["\n", "\n"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "each"], [:ASSIGN, ":"], [:PARAM_START, "("], [:PARAM, "obj"], [",", ","], [:PARAM, "iterator"], [",", ","], [:PARAM, "context"], [:PARAM_END, ")"], ["=>", "=>"], [:INDENT, 2], [:IDENTIFIER, "index"], [:ASSIGN, ":"], [:NUMBER, "0"], ["\n", "\n"], [:TRY, "try"], [:INDENT, 2], [:IF, "if"], [:IDENTIFIER, "obj"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "forEach"], [:INDENT, 2], [:IDENTIFIER, "obj"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "forEach"], ["(", "("], [:IDENTIFIER, "iterator"], [",", ","], [:IDENTIFIER, "context"], [")", ")"], [:OUTDENT, 2], [:ELSE, "else"], [:IF, "if"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "isArray"], ["(", "("], [:IDENTIFIER, "obj"], [")", ")"], [:OR, "or"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "isArguments"], ["(", "("], [:IDENTIFIER, "obj"], [")", ")"], [:INDENT, 2], [:IDENTIFIER, "iterator"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "call"], ["(", "("], [:IDENTIFIER, "context"], [",", ","], [:IDENTIFIER, "item"], [",", ","], [:IDENTIFIER, "i"], [",", ","], [:IDENTIFIER, "obj"], [")", ")"], [:FOR, "for"], [:IDENTIFIER, "item"], [",", ","], [:IDENTIFIER, "i"], [:IN, "in"], [:IDENTIFIER, "obj"], [:OUTDENT, 2], [:ELSE, "else"], [:INDENT, 2], [:IDENTIFIER, "iterator"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "call"], ["(", "("], [:IDENTIFIER, "context"], [",", ","], [:IDENTIFIER, "obj"], ["[", "["], [:IDENTIFIER, "key"], ["]", "]"], [",", ","], [:IDENTIFIER, "key"], [",", ","], [:IDENTIFIER, "obj"], [")", ")"], [:FOR, "for"], [:IDENTIFIER, "key"], [:IN, "in"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "keys"], ["(", "("], [:IDENTIFIER, "obj"], [")", ")"], [:OUTDENT, 2], [:OUTDENT, 2], [:CATCH, "catch"], [:IDENTIFIER, "e"], [:INDENT, 2], [:THROW, "throw"], [:IDENTIFIER, "e"], [:IF, "if"], [:IDENTIFIER, "e"], [:ISNT, "isnt"], [:IDENTIFIER, "breaker"], [:OUTDENT, 2], ["\n", "\n"], [:IDENTIFIER, "obj"], [:OUTDENT, 2], ["\n", "\n"]]
\ No newline at end of file
diff --git a/test/fixtures/generation/statements_as_expressions.coffee b/test/fixtures/generation/statements_as_expressions.coffee
index 0541d95fe2..a9ddccb059 100644
--- a/test/fixtures/generation/statements_as_expressions.coffee
+++ b/test/fixtures/generation/statements_as_expressions.coffee
@@ -10,7 +10,7 @@ catch error
   3
 )
 
-func: x =>
+func: (x) =>
   return throw x
 
 print(x * x for x in [1..100])
\ No newline at end of file
diff --git a/test/fixtures/generation/whitespace.coffee b/test/fixtures/generation/whitespace.coffee
index 450fd9e5b0..94f816d45c 100644
--- a/test/fixtures/generation/whitespace.coffee
+++ b/test/fixtures/generation/whitespace.coffee
@@ -1,20 +1,20 @@
 # test
-f1: x =>
+f1: (x) =>
   x * x
-  f2: y =>
+  f2: (y) =>
     y * x
   f3: 3
 
 # Parens can close on the proper level.
-elements.each(el =>
-  el.click(event =>
+elements.each((el) =>
+  el.click((event) =>
     el.reset()
     el.show() if event.active
   )
 )
 
 # Or, parens can close blocks early.
-elements.each(el =>
-  el.click(event =>
+elements.each((el) =>
+  el.click((event) =>
     el.reset()
     el.show() if event.active))
\ No newline at end of file
diff --git a/test/unit/test_lexer.rb b/test/unit/test_lexer.rb
index ec08df018c..e9f10ac99d 100644
--- a/test/unit/test_lexer.rb
+++ b/test/unit/test_lexer.rb
@@ -25,8 +25,9 @@ def test_lexing_object_literal
   end
 
   def test_lexing_function_definition
-    code = "x, y => x * y"
-    assert @lex.tokenize(code) == [[:PARAM, "x"], [",", ","], [:PARAM, "y"],
+    code = "(x, y) => x * y"
+    assert @lex.tokenize(code) == [[:PARAM_START, "("], [:PARAM, "x"],
+      [",", ","], [:PARAM, "y"], [:PARAM_END, ")"],
       ["=>", "=>"], [:INDENT, 2], [:IDENTIFIER, "x"], ["*", "*"],
       [:IDENTIFIER, "y"], [:OUTDENT, 2], ["\n", "\n"]]
   end
diff --git a/test/unit/test_parser.rb b/test/unit/test_parser.rb
index fc0ae6aa78..8e8738ff3e 100644
--- a/test/unit/test_parser.rb
+++ b/test/unit/test_parser.rb
@@ -29,7 +29,7 @@ def test_parsing_an_object_literal
   end
 
   def test_parsing_an_function_definition
-    code = @par.parse("x, y => x * y").expressions.first
+    code = @par.parse("(x, y) => x * y").expressions.first
     assert code.params == ['x', 'y']
     body = code.body.expressions.first
     assert body.is_a?(OpNode)

From 29e4043f26ea9485ed80f2427e917b90708986be Mon Sep 17 00:00:00 2001
From: Jeremy Ashkenas 
Date: Tue, 26 Jan 2010 02:15:08 -0500
Subject: [PATCH 22/32] tests passing with smarter block syntax with optional
 parens

---
 documentation/coffee/arguments.coffee         |    2 +-
 documentation/coffee/long_arrow.coffee        |    2 +-
 .../coffee/range_comprehensions.coffee        |    2 +-
 documentation/coffee/scope.coffee             |    2 +-
 documentation/coffee/super.coffee             |    6 +-
 examples/code.coffee                          |   16 +-
 examples/computer_science/linked_list.coffee  |    8 +-
 examples/poignant.coffee                      |    8 +-
 examples/potion.coffee                        |   14 +-
 examples/underscore.coffee                    |   60 +-
 .../Syntaxes/CoffeeScript.tmLanguage          |   10 +-
 lib/coffee_script/grammar.y                   |    3 +-
 lib/coffee_script/lexer.rb                    |    1 +
 lib/coffee_script/narwhal/loader.coffee       |    2 +-
 lib/coffee_script/parser.rb                   | 1670 +++++++++--------
 lib/coffee_script/rewriter.rb                 |   18 +-
 test/fixtures/execution/test_arguments.coffee |    4 +-
 .../execution/test_array_comprehension.coffee |    2 +-
 .../fixtures/execution/test_assignment.coffee |    2 +-
 test/fixtures/execution/test_blocks.coffee    |    2 +-
 .../execution/test_calling_super.coffee       |   10 +-
 .../execution/test_chained_calls.coffee       |    2 +-
 .../fixtures/execution/test_everything.coffee |    2 +-
 test/fixtures/execution/test_existence.coffee |    2 +-
 .../execution/test_expressions.coffee         |    2 +-
 test/fixtures/execution/test_functions.coffee |   12 +-
 .../execution/test_funky_comments.coffee      |    4 +-
 test/fixtures/execution/test_literals.coffee  |    2 +-
 .../fixtures/execution/test_operations.coffee |    2 +-
 29 files changed, 963 insertions(+), 909 deletions(-)

diff --git a/documentation/coffee/arguments.coffee b/documentation/coffee/arguments.coffee
index 55c83348e4..afee37415a 100644
--- a/documentation/coffee/arguments.coffee
+++ b/documentation/coffee/arguments.coffee
@@ -1,4 +1,4 @@
-backwards: () =>
+backwards: =>
   alert arguments.reverse()
 
 backwards "stairway", "to", "heaven"
\ No newline at end of file
diff --git a/documentation/coffee/long_arrow.coffee b/documentation/coffee/long_arrow.coffee
index 90c3373187..33356a1715 100644
--- a/documentation/coffee/long_arrow.coffee
+++ b/documentation/coffee/long_arrow.coffee
@@ -2,5 +2,5 @@ Account: (customer, cart) =>
   this.customer: customer
   this.cart: cart
 
-  $('.shopping_cart').bind('click') (event) ==>
+  $('.shopping_cart').bind 'click', (event) ==>
     this.customer.purchase this.cart
\ No newline at end of file
diff --git a/documentation/coffee/range_comprehensions.coffee b/documentation/coffee/range_comprehensions.coffee
index 9b10f15571..8baa2e8787 100644
--- a/documentation/coffee/range_comprehensions.coffee
+++ b/documentation/coffee/range_comprehensions.coffee
@@ -1,6 +1,6 @@
 countdown: num for num in [10..1]
 
-egg_delivery: () =>
+egg_delivery: =>
   for i in [0...eggs.length] by 12
     dozen_eggs: eggs[i...i+12]
     deliver new egg_carton(dozen)
diff --git a/documentation/coffee/scope.coffee b/documentation/coffee/scope.coffee
index 4ae8401dec..b074dad293 100644
--- a/documentation/coffee/scope.coffee
+++ b/documentation/coffee/scope.coffee
@@ -1,5 +1,5 @@
 num: 1
-change_numbers: () =>
+change_numbers: =>
   new_num: -1
   num: 10
 new_num: change_numbers()
\ No newline at end of file
diff --git a/documentation/coffee/super.coffee b/documentation/coffee/super.coffee
index 7cedbf4451..9dc4d5a294 100644
--- a/documentation/coffee/super.coffee
+++ b/documentation/coffee/super.coffee
@@ -1,16 +1,16 @@
-Animal: () =>
+Animal: =>
 Animal::move: (meters) =>
   alert this.name + " moved " + meters + "m."
 
 Snake: (name) => this.name: name
 Snake extends Animal
-Snake::move: () =>
+Snake::move: =>
   alert "Slithering..."
   super 5
 
 Horse: (name) => this.name: name
 Horse extends Animal
-Horse::move: () =>
+Horse::move: =>
   alert "Galloping..."
   super 45
 
diff --git a/examples/code.coffee b/examples/code.coffee
index df8d54bdce..105bdbe023 100644
--- a/examples/code.coffee
+++ b/examples/code.coffee
@@ -7,7 +7,7 @@ odd: (x) => x % 2 isnt 0
 
 even: (x) => x % 2 is 0
 
-run_loop: () =>
+run_loop: =>
   fire_events((e) => e.stopPropagation())
   listen()
   wait()
@@ -22,7 +22,7 @@ spaced_out_multiline_object: {
   three: new Idea()
 
   inner_obj: {
-    freedom: () => _.freedom()
+    freedom: => _.freedom()
   }
 }
 
@@ -54,7 +54,7 @@ decoration: medal_of_honor if war_hero
 go_to_sleep() unless coffee
 
 # Returning early:
-race: () =>
+race: =>
   run()
   walk()
   crawl()
@@ -103,7 +103,7 @@ while true
 
 # Lexical scoping.
 v_1: 5
-change_a_and_set_b: () =>
+change_a_and_set_b: =>
   v_1: 10
   v_2: 15
 v_2: 20
@@ -128,7 +128,7 @@ activity: switch day
   else go_to_work()
 
 # Semicolons can optionally be used instead of newlines.
-wednesday: () => eat_breakfast(); go_to_work(); eat_dinner()
+wednesday: => eat_breakfast(); go_to_work(); eat_dinner()
 
 # Array slice literals.
 zero_to_nine: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
@@ -140,19 +140,19 @@ sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna
 aliquam erat volutpat. Ut wisi enim ad."
 
 # Inheritance and calling super.
-Animal: () =>
+Animal: =>
 Animal::move: (meters) =>
   alert(this.name + " moved " + meters + "m.")
 
 Snake: (name) => this.name: name
 Snake extends Animal
-Snake::move: () =>
+Snake::move: =>
   alert('Slithering...')
   super(5)
 
 Horse: (name) => this.name: name
 Horse extends Animal
-Horse::move: () =>
+Horse::move: =>
   alert('Galloping...')
   super(45)
 
diff --git a/examples/computer_science/linked_list.coffee b/examples/computer_science/linked_list.coffee
index 7154f71d07..8071f869f5 100644
--- a/examples/computer_science/linked_list.coffee
+++ b/examples/computer_science/linked_list.coffee
@@ -1,5 +1,5 @@
 # "Classic" linked list implementation that doesn't keep track of its size.
-LinkedList: () =>
+LinkedList: =>
   this._head: null # Pointer to the first item in the list.
 
 
@@ -60,7 +60,7 @@ LinkedList::remove: (index) =>
 
 
 # Calculate the number of items in the list.
-LinkedList::size: () =>
+LinkedList::size: =>
   current: this._head
   count:   0
 
@@ -72,7 +72,7 @@ LinkedList::size: () =>
 
 
 # Convert the list into an array.
-LinkedList::toArray: () =>
+LinkedList::toArray: =>
   result:   []
   current:  this._head
 
@@ -84,7 +84,7 @@ LinkedList::toArray: () =>
 
 
 # The string representation of the linked list.
-LinkedList::toString: () => this.toArray().toString()
+LinkedList::toString: => this.toArray().toString()
 
 
 # Tests.
diff --git a/examples/poignant.coffee b/examples/poignant.coffee
index 836a6155d5..4347daead4 100644
--- a/examples/poignant.coffee
+++ b/examples/poignant.coffee
@@ -14,9 +14,9 @@
 # end
 
 LotteryTicket: {
-  get_picks:          () => this.picks
+  get_picks:          => this.picks
   set_picks:      (nums) => this.picks: nums
-  get_purchase:       () => this.purchase
+  get_purchase:       => this.purchase
   set_purchase: (amount) => this.purchase: amount
 }
 
@@ -40,7 +40,7 @@ LotteryTicket: {
 # end
 
 LotteryDraw: {
-  play: () =>
+  play: =>
     result:   LotteryTicket.new_random()
     winners:  {}
     this.tickets.each (buyer, ticket_list) =>
@@ -65,7 +65,7 @@ LotteryDraw: {
 # end
 
 WishScanner: {
-  scan_for_a_wish: () =>
+  scan_for_a_wish: =>
     wish: this.read().detect((thought) => thought.index('wish: ') is 0)
     wish.replace('wish: ', '')
 }
diff --git a/examples/potion.coffee b/examples/potion.coffee
index 06e6a142f4..ef9ac898ba 100644
--- a/examples/potion.coffee
+++ b/examples/potion.coffee
@@ -53,8 +53,8 @@ for key, val of {dog: 'canine', cat: 'feline', fox: 'vulpine'}
 # Person print = ():
 #   ('My name is ', /name, '.') join print.
 
-Person: () =>
-Person::print: () =>
+Person: =>
+Person::print: =>
   print('My name is ' + this.name + '.')
 
 
@@ -73,7 +73,7 @@ print(p.name)
 
 Policeman: (rank) => this.rank: rank
 Policeman extends Person
-Policeman::print: () =>
+Policeman::print: =>
   print('My name is ' + this.name + " and I'm a " + this.rank + '.')
 
 print(new Policeman('Constable'))
@@ -115,13 +115,13 @@ table: {
 # String length = (): 10.
 
 # this foul business...
-String::length: () => 10
+String::length: => 10
 
 
 # block = :
 #   'potion' print.
 
-block: () =>
+block: =>
   print('potion')
 
 
@@ -187,7 +187,7 @@ HomePage::get: (url) =>
 # b /left = BTree ()
 # b /right = BTree ()
 
-BTree:    () =>
+BTree:    =>
 b:        new BTree()
 b.left:   new BTree()
 b.right:  new BTree()
@@ -199,7 +199,7 @@ b.right:  new BTree()
 # if (b ? /left):
 #   'left path found!' print.
 
-BTree: () =>
+BTree: =>
 b: new BTree()
 
 print('left path found!') if b.left?
diff --git a/examples/underscore.coffee b/examples/underscore.coffee
index b2dfc1298b..db87972311 100644
--- a/examples/underscore.coffee
+++ b/examples/underscore.coffee
@@ -71,7 +71,7 @@
   _.map: (obj, iterator, context) =>
     return obj.map(iterator, context) if (obj and _.isFunction(obj.map))
     results: []
-    _.each(obj) (value, index, list) =>
+    _.each obj, (value, index, list) =>
       results.push(iterator.call(context, value, index, list))
     results
 
@@ -80,7 +80,7 @@
   # inject, or foldl. Uses JavaScript 1.8's version of reduce, if possible.
   _.reduce: (obj, memo, iterator, context) =>
     return obj.reduce(_.bind(iterator, context), memo) if (obj and _.isFunction(obj.reduce))
-    _.each(obj) (value, index, list) =>
+    _.each obj, (value, index, list) =>
       memo: iterator.call(context, memo, value, index, list)
     memo
 
@@ -89,7 +89,7 @@
   # JavaScript 1.8's version of reduceRight, if available.
   _.reduceRight: (obj, memo, iterator, context) =>
     return obj.reduceRight(_.bind(iterator, context), memo) if (obj and _.isFunction(obj.reduceRight))
-    _.each(_.clone(_.toArray(obj)).reverse()) (value, index) =>
+    _.each _.clone(_.toArray(obj)).reverse(), (value, index) =>
       memo: iterator.call(context, memo, value, index, obj)
     memo
 
@@ -97,7 +97,7 @@
   # Return the first value which passes a truth test.
   _.detect: (obj, iterator, context) =>
     result: null
-    _.each(obj) (value, index, list) =>
+    _.each obj, (value, index, list) =>
       if iterator.call(context, value, index, list)
         result: value
         _.breakLoop()
@@ -109,7 +109,7 @@
   _.select: (obj, iterator, context) =>
     if obj and _.isFunction(obj.filter) then return obj.filter(iterator, context)
     results: []
-    _.each(obj) (value, index, list) =>
+    _.each obj, (value, index, list) =>
       results.push(value) if iterator.call(context, value, index, list)
     results
 
@@ -117,7 +117,7 @@
   # Return all the elements for which a truth test fails.
   _.reject: (obj, iterator, context) =>
     results: []
-    _.each(obj) (value, index, list) =>
+    _.each obj, (value, index, list) =>
       results.push(value) if not iterator.call(context, value, index, list)
     results
 
@@ -128,7 +128,7 @@
     iterator ||= _.identity
     return obj.every(iterator, context) if obj and _.isFunction(obj.every)
     result: true
-    _.each(obj) (value, index, list) =>
+    _.each obj, (value, index, list) =>
       _.breakLoop() unless (result: result and iterator.call(context, value, index, list))
     result
 
@@ -139,7 +139,7 @@
     iterator ||= _.identity
     return obj.some(iterator, context) if obj and _.isFunction(obj.some)
     result: false
-    _.each(obj) (value, index, list) =>
+    _.each obj, (value, index, list) =>
       _.breakLoop() if (result: iterator.call(context, value, index, list))
     result
 
@@ -168,7 +168,7 @@
   _.max: (obj, iterator, context) =>
     return Math.max.apply(Math, obj) if not iterator and _.isArray(obj)
     result: {computed: -Infinity}
-    _.each(obj) (value, index, list) =>
+    _.each obj, (value, index, list) =>
       computed: if iterator then iterator.call(context, value, index, list) else value
       computed >= result.computed and (result: {value: value, computed: computed})
     result.value
@@ -178,7 +178,7 @@
   _.min: (obj, iterator, context) =>
     return Math.min.apply(Math, obj) if not iterator and _.isArray(obj)
     result: {computed: Infinity}
-    _.each(obj) (value, index, list) =>
+    _.each obj, (value, index, list) =>
       computed: if iterator then iterator.call(context, value, index, list) else value
       computed < result.computed and (result: {value: value, computed: computed})
     result.value
@@ -186,12 +186,12 @@
 
   # Sort the object's values by a criteria produced by an iterator.
   _.sortBy: (obj, iterator, context) =>
-    _.pluck(((_.map(obj) (value, index, list) =>
+    _.pluck(((_.map obj, (value, index, list) =>
       {value: value, criteria: iterator.call(context, value, index, list)}
-    ).sort() (left, right) =>
+    ).sort((left, right) =>
       a: left.criteria; b: right.criteria
       if a < b then -1 else if a > b then 1 else 0
-    ), 'value')
+    )), 'value')
 
 
   # Use a comparator function to figure out at what index an object should
@@ -245,7 +245,7 @@
 
   # Return a completely flattened version of an array.
   _.flatten: (array) =>
-    _.reduce(array, []) (memo, value) =>
+    _.reduce array, [], (memo, value) =>
       return memo.concat(_.flatten(value)) if _.isArray(value)
       memo.push(value)
       memo
@@ -270,14 +270,14 @@
   # passed-in arrays.
   _.intersect: (array) =>
     rest: _.rest(arguments)
-    _.select(_.uniq(array)) (item) =>
-      _.all(rest) (other) =>
+    _.select _.uniq(array), (item) =>
+      _.all rest, (other) =>
         _.indexOf(other, item) >= 0
 
 
   # Zip together multiple lists into a single array -- elements that share
   # an index go together.
-  _.zip: () =>
+  _.zip: =>
     length:     _.max(_.pluck(arguments, 'length'))
     results:    new Array(length)
     for i in [0...length]
@@ -332,7 +332,7 @@
   # optionally). Binding with arguments is also known as 'curry'.
   _.bind: (func, obj) =>
     args: _.rest(arguments, 2)
-    () => func.apply(obj or root, args.concat(arguments))
+    => func.apply(obj or root, args.concat(arguments))
 
 
   # Bind all of an object's methods to that object. Useful for ensuring that
@@ -347,7 +347,7 @@
   # it with the arguments supplied.
   _.delay: (func, wait) =>
     args: _.rest(arguments, 2)
-    setTimeout((() => func.apply(func, args)), wait)
+    setTimeout((=> func.apply(func, args)), wait)
 
 
   # Defers a function, scheduling it to run after the current call stack has
@@ -360,14 +360,14 @@
   # allowing you to adjust arguments, run code before and after, and
   # conditionally execute the original function.
   _.wrap: (func, wrapper) =>
-    () => wrapper.apply(wrapper, [func].concat(arguments))
+    => wrapper.apply(wrapper, [func].concat(arguments))
 
 
   # Returns a function that is the composition of a list of functions, each
   # consuming the return value of the function that follows.
-  _.compose: () =>
+  _.compose: =>
     funcs: arguments
-    () =>
+    =>
       args: arguments
       for i in [(funcs.length - 1)..0]
         args: [funcs[i].apply(this, args)]
@@ -501,7 +501,7 @@
 
   # Run Underscore.js in noConflict mode, returning the '_' variable to its
   # previous owner. Returns a reference to the Underscore object.
-  _.noConflict: () =>
+  _.noConflict: =>
     root._: previousUnderscore
     this
 
@@ -511,7 +511,7 @@
 
 
   # Break out of the middle of an iteration.
-  _.breakLoop: () => throw breaker
+  _.breakLoop: => throw breaker
 
 
   # Generate a unique integer id (unique within the entire client session).
@@ -560,9 +560,9 @@
 
 
   # Add all of the Underscore functions to the wrapper object.
-  _.each(_.functions(_)) (name) =>
+  _.each _.functions(_), (name) =>
     method: _[name]
-    wrapper.prototype[name]: () =>
+    wrapper.prototype[name]: =>
       unshift.call(arguments, this._wrapped)
       result(method.apply(_, args), this._chain)
 
@@ -570,7 +570,7 @@
   # Add all mutator Array functions to the wrapper.
   _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift']) (name) =>
     method: Array.prototype[name]
-    wrapper.prototype[name]: () =>
+    wrapper.prototype[name]: =>
       method.apply(this._wrapped, arguments)
       result(this._wrapped, this._chain)
 
@@ -578,15 +578,15 @@
   # Add all accessor Array functions to the wrapper.
   _.each(['concat', 'join', 'slice']) (name) =>
     method: Array.prototype[name]
-    wrapper.prototype[name]: () =>
+    wrapper.prototype[name]: =>
       result(method.apply(this._wrapped, arguments), this._chain)
 
 
   # Start chaining a wrapped Underscore object.
-  wrapper::chain: () =>
+  wrapper::chain: =>
     this._chain: true
     this
 
 
   # Extracts the result from a wrapped and chained object.
-  wrapper::value: () => this._wrapped
+  wrapper::value: => this._wrapped
diff --git a/extras/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage b/extras/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage
index 850870fe04..7cba868cea 100644
--- a/extras/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage
+++ b/extras/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage
@@ -22,7 +22,7 @@
 			  1
 				
 					name
-					storage.type.function.coffee
+					variable.parameter.function.coffee
 				
 				2
 				
@@ -32,7 +32,7 @@
 				4
 				
 					name
-					storage.type.function.coffee
+					variable.parameter.function.coffee
 				
 				5
 				
@@ -292,6 +292,12 @@
 			name
 			keyword.other.coffee
 		
+		
+			match
+			=+>
+			name
+			storage.type.function.coffee
+		
 		
 			match
 			!|%|&|\*|\/|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\?|\|\||\:|\*=|(?<!\()/=|%=|\+=|\-=|&=|\^=|\b(instanceof|new|delete|typeof|and|or|is|isnt|not)\b
diff --git a/lib/coffee_script/grammar.y b/lib/coffee_script/grammar.y
index ce1eaac7b4..427a1564bf 100644
--- a/lib/coffee_script/grammar.y
+++ b/lib/coffee_script/grammar.y
@@ -202,8 +202,7 @@ rule
   Code:
     PARAM_START ParamList PARAM_END
       FuncGlyph Block                 { result = CodeNode.new(val[1], val[4], val[3]) }
-  | PARAM_START PARAM_END
-      FuncGlyph Block                 { result = CodeNode.new([], val[3], val[2]) }
+  | FuncGlyph Block                   { result = CodeNode.new([], val[1], val[0]) }
   ;
 
   # The symbols to signify functions, and bound functions.
diff --git a/lib/coffee_script/lexer.rb b/lib/coffee_script/lexer.rb
index bf4ff7f936..df14f0a5fa 100644
--- a/lib/coffee_script/lexer.rb
+++ b/lib/coffee_script/lexer.rb
@@ -241,6 +241,7 @@ def last_tag
     # parameter identifiers in order to avoid this. Also, parameter lists can
     # make use of splats.
     def tag_parameters
+      return if last_tag != ')'
       i = 0
       loop do
         i -= 1
diff --git a/lib/coffee_script/narwhal/loader.coffee b/lib/coffee_script/narwhal/loader.coffee
index 5012286f93..6f793a7336 100644
--- a/lib/coffee_script/narwhal/loader.coffee
+++ b/lib/coffee_script/narwhal/loader.coffee
@@ -8,7 +8,7 @@ loader: {
   # Reload the coffee-script environment from source.
   reload: (topId, path) =>
     coffeescript ||= require('coffee-script')
-    factories[topId]: () => coffeescript.makeNarwhalFactory(path)
+    factories[topId]: => coffeescript.makeNarwhalFactory(path)
 
   # Ensure that the coffee-script environment is loaded.
   load: (topId, path) =>
diff --git a/lib/coffee_script/parser.rb b/lib/coffee_script/parser.rb
index deb2bc3324..cf5821ee22 100644
--- a/lib/coffee_script/parser.rb
+++ b/lib/coffee_script/parser.rb
@@ -10,7 +10,7 @@ module CoffeeScript
 
 class Parser < Racc::Parser
 
-module_eval(<<'...end grammar.y/module_eval...', 'grammar.y', 451)
+module_eval(<<'...end grammar.y/module_eval...', 'grammar.y', 450)
   # Lex and parse a CoffeeScript.
   def parse(code)
     # Uncomment the following line to enable grammar debugging, in combination
@@ -34,301 +34,322 @@ def on_error(error_token_id, error_value, value_stack)
 ##### State transition tables begin ###
 
 clist = [
-'117,37,125,21,24,25,29,34,39,44,47,50,54,130,202,203,285,285,108,-181',
-'-181,169,277,278,27,27,35,40,140,144,81,83,84,118,171,172,37,133,287',
-'130,37,19,1,130,32,-181,-181,130,309,-181,-181,60,65,113,116,121,124',
-'128,132,136,139,143,147,150,112,115,120,123,127,131,135,138,142,146',
-'149,111,114,119,122,126,129,134,137,141,145,148,110,81,83,84,81,83,84',
-'2,168,8,7,18,194,21,24,25,29,34,39,44,47,50,54,200,85,7,72,1,78,175',
-'14,17,22,93,175,30,35,40,42,277,278,92,255,61,63,182,3,37,9,11,130,19',
-'37,27,32,258,113,116,183,49,52,55,58,67,69,171,172,60,65,16,37,152,27',
-'60,65,177,130,178,60,65,177,85,113,116,85,78,262,37,78,81,83,84,81,83',
-'84,102,299,81,83,84,60,65,261,2,184,8,7,18,264,21,24,25,29,34,39,44',
-'47,50,54,60,65,170,175,1,159,37,14,17,22,130,285,30,35,40,42,-181,-181',
-'281,27,61,63,300,3,191,9,11,95,19,192,27,32,74,60,65,189,49,52,55,58',
-'67,69,72,73,202,203,16,60,65,177,85,234,157,85,78,270,93,78,85,60,65',
-'130,78,108,92,37,7,113,116,21,24,25,29,34,39,44,47,50,54,271,2,37,8',
-'1,18,273,14,17,22,198,93,30,35,40,42,27,311,89,92,61,63,274,3,93,9,11',
-'130,19,152,27,32,92,-181,-181,201,49,52,55,58,67,69,130,60,65,,16,130',
-'-181,-181,27,93,89,113,116,121,124,128,130,92,195,196,,27,-181,-181',
-'7,60,65,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,27,30,35',
-'40,42,60,65,189,,61,63,190,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69',
-'130,,,,16,,113,116,121,124,128,132,136,139,143,147,150,112,115,,,,,',
-'7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42',
-',,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,130,,,,16,,113,116',
-'121,124,128,132,136,139,143,147,150,112,115,,,,,,7,,,21,24,25,29,34',
-'39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11',
-',19,,27,32,,,,,49,52,55,58,67,69,130,,,,16,,113,116,121,124,128,132',
-'136,139,143,147,150,112,115,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,',
-'2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,',
-'49,52,55,58,67,69,130,,,,16,,113,116,121,124,128,132,136,139,143,147',
-'150,112,115,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17',
-'22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69',
-'130,,,,16,,113,116,121,124,128,132,136,139,143,147,,,,,,,,,7,,,21,24',
-'25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63',
-',3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,130,,,,16,,113,116,121,124',
-'128,132,136,139,143,147,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2',
-',8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49',
-'52,55,58,67,69,130,,,,16,,113,116,121,124,128,132,136,139,143,147,,',
-',,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35',
-'40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,130,,,,16',
-',113,116,121,124,128,132,136,130,,,,,,113,116,121,124,128,7,,,21,24',
-'25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63',
-',3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,130,,,,16,,113,116,121,124',
-'128,132,136,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18',
-',14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58',
-'67,69,130,,,,16,,113,116,121,124,128,132,136,,,,,,,,,,,,7,,,21,24,25',
-'29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3',
-',9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,',
-',21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,',
-',,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,',
-',,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30',
-'35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16',
-',,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14',
-'17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,105,,,49,52,55,58',
-'67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2',
-',8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49',
-'52,55,58,67,69,130,,,,16,,113,116,121,124,128,132,136,139,143,147,150',
-'112,115,120,123,127,131,135,138,142,146,,291,,,,,,,,,,2,,8,7,18,,21',
-'24,25,29,34,39,44,47,50,54,,,,,1,,,14,17,22,,,30,35,40,42,,,,,61,63',
-',3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,',
-'7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42',
-',,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,',
-',,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30',
-'35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16',
-',,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14',
-'17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67',
-'69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8',
-'1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52',
-'55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50',
-'54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32',
-',,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39',
-'44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19',
-',27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25',
-'29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3',
-',9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,',
-',21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,',
-',,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,',
-',,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30',
-'35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16',
-',,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14',
-'17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67',
-'69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8',
-'1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52',
-'55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50',
-'54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32',
-',,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39',
-'44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19',
-',27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25',
-'29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3',
-',9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,',
-',21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,',
-',,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,',
-',,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30',
-'35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16',
-',,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14',
-'17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67',
-'69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8',
-'1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52',
-'55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50',
-'54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32',
-'74,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34',
-'39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11',
-',19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24',
-'25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63',
-',3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,',
-'7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42',
-',,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,',
-',,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30',
-'35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16',
-',,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14',
-'17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67',
-'69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8',
-'1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52',
-'55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50',
-'54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32',
-',,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39',
-'44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19',
-',27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25',
-'29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3',
-',9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,',
-',21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,',
-',,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,',
-',,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30',
-'35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,74,,,,49,52,55,58,67,69,,,,,16',
-',,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14',
-'17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67',
-'69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8',
-'1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52',
-'55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50',
-'54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32',
-',,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39',
-'44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19',
-',27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25',
-'29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3',
-',9,11,,19,,27,32,37,,,,49,52,55,58,67,69,130,,,,16,,113,116,121,124',
-'128,132,136,139,143,147,150,112,115,120,123,127,131,135,138,142,146',
-',,,,,,,,60,65,,2,,8,7,18,,21,24,25,29,34,39,44,47,50,54,,,,,1,,,14,17',
-'22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69',
-',,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1',
-'18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55',
-'58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54',
-',2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,',
-',49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44',
-'47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,',
-'27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29',
-'34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9',
-'11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21',
-'24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61',
-'63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,',
-',,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40',
-'42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,',
-',,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22',
-',,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,',
-',,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18',
-',14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58',
-'67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2',
-',8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49',
-'52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47',
-'50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27',
-'32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34',
-'39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11',
-',19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24',
-'25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63',
-',3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,',
-'7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42',
-',,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,',
-',,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30',
-'35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16',
-',,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14',
-'17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67',
-'69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8',
-'1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52',
-'55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50',
-'54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32',
-'117,,125,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,140,144,,,,118,,,,133',
-',,,,,,,,,130,2,,8,,18,113,116,121,124,128,132,136,139,143,147,150,112',
-'115,120,123,127,131,135,138,142,146,149,111,114,119,122,126,129,134',
-'137,179,145,148,110,117,,125,,,,,263,,,,,,,,,,,,,,,,,,,,,140,144,,,',
-'118,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147',
-'150,112,115,120,123,127,131,135,138,142,146,149,111,114,119,122,126',
-'129,134,137,141,145,148,110,,,,,,,,310,21,24,25,29,34,39,44,47,50,54',
-',,,,1,,,14,17,22,,,30,35,40,42,,,,,,63,,3,,9,11,,19,,27,32,,,,,49,52',
-'55,58,67,69,,,,,16,,,,21,24,25,29,34,39,44,47,50,54,,,,,1,,,14,17,22',
-',,30,35,40,,,,,,2,63,8,3,18,9,11,,19,,27,32,117,,125,,49,52,55,58,,',
-',,,,,,,,,,,,,,,,,,140,144,,,,118,,,,133,,,,,,,,,,130,2,,8,,18,113,116',
-'121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135,138',
-'142,146,149,111,114,119,122,126,129,134,137,141,145,148,110,,,,,,,,304',
-'21,24,25,29,34,39,44,47,50,54,,,,,1,,,14,17,22,,,30,35,40,,,,,,,63,',
-'3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,21,24,25,29,34,39,44',
-'47,50,54,,,,,,,,,,,,,,35,40,,,,,,,,,2,,8,,18,19,130,,32,117,,125,113',
-'116,121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135',
-'138,142,146,,,,,140,144,,,,118,,,,133,,,,,,,,,,130,2,,8,,18,113,116',
-'121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135,138',
-'142,146,149,111,114,119,122,126,129,134,137,141,145,148,110,117,130',
-'125,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120,123',
-'127,131,135,138,142,146,140,144,,,,118,,,,133,,,,,,,,,,130,,,,,,113',
-'116,121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135',
-'138,142,146,149,111,114,119,122,126,129,134,137,141,145,148,110,117',
-'130,125,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120',
-'123,127,131,135,138,142,146,140,144,,,,118,,,,133,,,,,,,,,,130,,,,,',
-'113,116,121,124,128,132,136,139,143,147,150,112,115,120,123,127,131',
-'135,138,142,146,149,111,114,119,122,126,129,134,137,141,145,148,110',
-'117,130,125,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115',
-'120,123,127,131,135,138,142,146,140,144,,,,118,,,,133,,,,,,,,,,130,',
-',,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120,123,127',
-'131,135,138,142,146,149,111,114,119,122,126,129,134,137,141,145,148',
-'110,117,130,125,,,,,113,116,121,124,128,132,136,139,143,147,150,112',
-'115,120,123,127,131,135,138,142,146,140,144,,,,118,,,,133,,,,,,,,,,130',
-',,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120,123,127',
-'131,135,138,142,146,149,111,114,119,122,126,129,134,137,141,145,148',
-'110,117,130,125,,,,,113,116,121,124,128,132,136,139,143,147,150,112',
-'115,120,123,127,131,135,138,142,146,140,144,,,,118,,,,133,,,,,,,,,,130',
-',,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120,123,127',
-'131,135,138,142,146,149,111,114,119,122,126,129,134,137,141,145,148',
-'110,117,,125,,,,,,,,,,,,,,,,,,,,,,,,,,140,144,,,,118,,,,133,,,,,,,,',
-',130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120,123',
-'127,131,135,138,142,146,149,111,114,119,122,126,129,134,137,141,145',
-'148,110,117,,125,,,,,,,,,,,,,,,,,,,,,,,,,,140,144,,,,118,,,,133,,,,',
-',,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120',
-'123,127,131,135,138,142,146,149,111,114,119,122,126,129,134,137,141',
-'145,148,110,117,,125,,,,,,,,,,,,,,,,,,,,,,,,,,140,144,,,,118,,,,133',
-',,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115',
-'120,123,127,131,135,138,142,146,149,111,114,119,122,126,129,134,137',
-'179,145,148,110,117,,125,,,,,,,,,,,,,,,,,,,,,,,,,,140,144,,,,118,,,',
-'133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112',
-'115,120,123,127,131,135,138,142,146,149,111,114,119,122,126,129,134',
-'137,141,145,148,110,117,,125,,,,,,,,,,,,,,,,,,,,,,,,,,140,144,,,,118',
-',,,133,,,,,,,,252,,130,,,,,,113,116,121,124,128,132,136,139,143,147',
-'150,112,115,120,123,127,131,135,138,142,146,149,111,114,119,122,126',
-'129,134,137,141,145,148,110,117,,125,,,,,,,,,,,,,,,,,,,,,,,,,,140,144',
-',,,118,,,,133,,,,,,,,37,,130,,,,,,113,116,121,124,128,132,136,139,143',
-'147,150,112,115,120,123,127,131,135,138,142,146,149,111,114,119,122',
-'126,129,134,137,141,145,148,110,117,,125,,,,,,,,,,,,,,,,,,,,,,,,,,140',
-'144,,,,118,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139',
-'143,147,150,112,115,120,123,127,131,135,138,142,146,149,111,114,119',
-'122,126,129,134,137,141,145,148,110,117,,125,,,,,,,,,,,,,,,,,,,,,,,',
-',,140,144,,,,118,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136',
-'139,143,147,150,112,115,120,123,127,131,135,138,142,146,149,111,114',
-'119,122,126,129,134,137,141,145,148,110,117,,125,,,,,,,,,,,,,,,,,,,',
-',,,,,,140,144,,,,118,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132',
-'136,139,143,147,150,112,115,120,123,127,131,135,138,142,146,149,111',
-'114,119,122,126,129,134,137,141,145,148,110,117,,125,,,,,,,,,,,,,,,',
-',,,,,,,,,,140,144,,,,118,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128',
-'132,136,139,143,147,150,112,115,120,123,127,131,135,138,142,146,149',
-'111,114,119,122,126,129,134,137,141,145,148,110,117,,125,,,,,,,,,,,',
-',,,,,,,,,,,,,,140,144,,,,118,,,,133,,,,,,,,,,130,,,,,,113,116,121,124',
-'128,132,136,139,143,147,150,112,115,120,123,127,131,135,138,142,146',
-'149,111,114,119,122,126,129,134,137,141,145,148,110,117,,125,,,,,,,',
-',,,,,,,,,,,,,,,,,,140,144,,,,118,,,,133,,,,,,,,37,,130,,,,,,113,116',
-'121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135,138',
-'142,146,149,111,114,119,122,126,129,134,137,141,145,148,110,117,,125',
-',,,,,,,,,,,,,,,,,,,,,,,,,140,144,,,,118,,,,133,,,,,,,,,,130,,,,,,113',
-'116,121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135',
-'138,142,146,149,111,114,119,122,126,129,134,137,141,145,148,110,140',
-'144,,,,,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143',
-'147,150,112,115,120,123,127,131,135,138,142,146,149,111,114,119,122',
-'126,129,134,137,141,145,148,110,140,144,,,,,,,,133,,,,,,,,,,130,,,,',
-',113,116,121,124,128,132,136,139,143,147,150,112,115,120,123,127,131',
-'135,138,142,146,149,111,114,119,122,126,129,134,137,141,145,148,110',
-'140,144,,,,,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139',
-'143,147,150,112,115,120,123,127,131,135,138,142,146,149,111,114,119',
-'122,126,129,134,137,141,140,144,,,,,,,,133,,,,,,,,,,130,,,,,,113,116',
-'121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135,138',
-'142,146,149,111,114,119,122,126,129,134,137,141,140,144,,,,,,,,133,',
-',,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115',
-'120,123,127,131,135,138,142,146,149,111,114,119,122,126,129,134,137',
-'141,140,144,,,,,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136',
-'139,143,147,150,112,115,120,123,127,131,135,138,142,146,149,111,114',
-'119,122,126,129,134,137,141,144,,,,,,,,133,,,,,,,,,,130,,,,,,113,116',
-'121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135,138',
-'142,146,149,111,114,119,122,126,129,134,137,141,144,,,,,,,,133,,,,,',
-',,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120',
-'123,127,131,135,138,142,146,149,111,114,119,122,126,129,134,137,141',
-'144,,,,,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143',
-'147,150,112,115,120,123,127,131,135,138,142,146,149,111,114,119,122',
-'126,129,134,137,141,144,,,,,,,,133,,,,,,,,,,130,,,,,,113,116,121,124',
-'128,132,136,139,143,147,150,112,115,120,123,127,131,135,138,142,146',
-'149,111,114,119,122,126,129,134,137,141,144,,,,,,,,133,,,,,,,,,,130',
-',,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120,123,127',
-'131,135,138,142,146,149,111,114,119,122,126,129,134,137,141,133,,,,',
-',,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120',
-'123,127,131,135,138,142,146,149,111,114,119,122,126,129,134,137,133',
-',,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115',
-'120,123,127,131,135,138,142,146,149,111,114,119,122,126,129,134,137',
-'133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112',
-'115,120,123,127,131,135,138,142,146,149,111,114,119,122,126,129,134',
-'137,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120',
-'123,127,131,135,138,142,146,149,111,114,119,122,126,129,134,137,130',
-',,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120,123,127',
-'131,135,138,142,146,149,111,114,119,122,126,129,134,137,130,,,,,,113',
-'116,121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135',
-'138,142,146,149,111,114,119,122,126,129,134,137,130,,,,,,113,116,121',
-'124,128,132,136,139,143,147,150,112,115,120,123,127,131,135,138,142',
-'146,149,111,114,119,122,126,129,134,137,130,,,,,,113,116,121,124,128',
-'132,136,139,143,147,150,112,115,120,123,127,131,135,138,142,146,149',
-'111,114,119,122,126,129,134,137' ]
-        racc_action_table = arr = Array.new(8867, nil)
+'119,37,127,21,24,25,29,34,39,44,48,51,55,132,202,203,284,284,255,-181',
+'-181,172,276,277,27,27,35,40,142,146,83,85,86,120,195,196,37,135,173',
+'132,1,19,75,132,32,115,118,132,308,-181,-181,56,59,115,118,123,126,130',
+'134,138,141,145,149,152,114,117,122,125,129,133,137,140,144,148,151',
+'113,116,121,124,128,131,136,139,143,147,150,112,83,85,86,83,85,86,2',
+'171,8,7,15,194,21,24,25,29,34,39,44,48,51,55,7,87,56,59,1,80,174,14',
+'18,22,95,174,30,35,40,42,276,277,94,182,61,66,286,3,37,9,11,132,19,201',
+'27,32,37,-181,-181,95,50,53,57,62,70,72,37,94,37,37,17,64,68,27,64,68',
+'176,132,177,64,68,176,87,115,118,87,80,269,198,80,83,85,86,64,68,83',
+'85,86,27,56,59,83,85,86,2,154,8,7,15,263,21,24,25,29,34,39,44,48,51',
+'55,64,68,161,200,1,64,68,14,18,22,132,298,30,35,40,42,-181,-181,174',
+'95,61,66,260,3,270,9,11,94,19,37,27,32,77,64,68,189,50,53,57,62,70,72',
+'64,68,280,284,17,64,68,159,87,202,203,27,80,87,299,272,27,80,91,87,64',
+'68,176,80,64,68,189,183,261,132,190,95,104,56,59,-181,-181,37,2,94,8',
+'7,15,97,21,24,25,29,34,39,44,48,51,55,273,192,37,95,1,191,110,14,18',
+'22,234,94,30,35,40,42,27,154,91,310,61,66,184,3,75,9,11,132,19,110,27',
+'32,,115,118,,50,53,57,62,70,72,27,132,,,17,,,115,118,123,126,130,134',
+'138,141,145,149,152,114,117,122,125,129,133,137,140,144,148,,132,,,',
+'56,59,-181,-181,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14',
+'18,22,132,,30,35,40,42,-181,-181,,,61,66,,3,,9,11,,19,,27,32,,,,,50',
+'53,57,62,70,72,132,,,,17,,115,118,123,126,130,134,138,141,145,149,152',
+'114,117,122,125,129,133,137,140,144,148,,,,,,,56,59,,,,2,,8,7,15,,21',
+'24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66',
+',3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,132,,,,17,,115,118,123,126',
+'130,134,138,141,145,149,152,114,117,122,125,129,133,137,140,144,148',
+',,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18',
+'22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72',
+'132,,,,17,,115,118,123,126,130,134,138,141,145,149,152,114,117,122,125',
+'129,133,137,140,144,148,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39',
+'44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27',
+'32,,,,,50,53,57,62,70,72,132,,,,17,,115,118,123,126,130,134,138,141',
+'145,149,152,114,117,122,125,129,133,137,140,144,148,,,,,,,56,59,,,,2',
+',8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42',
+',,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,132,,,,17,,115,118',
+'123,126,130,134,138,141,145,149,152,114,117,122,125,129,133,137,140',
+'144,148,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,',
+'1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57',
+'62,70,72,132,,,,17,,115,118,123,126,130,134,138,141,145,149,152,114',
+'117,122,125,129,133,137,140,144,148,,,,,,,56,59,,,,2,,8,7,15,,21,24',
+'25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3',
+',9,11,,19,,27,32,,,,,50,53,57,62,70,72,132,,,,17,,115,118,123,126,130',
+'134,138,141,145,149,152,114,117,122,125,129,133,137,140,144,148,,,,',
+',,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22',
+',,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,132',
+',,,17,,115,118,123,126,130,134,138,141,145,149,152,114,117,132,,,,,',
+'115,118,123,126,130,134,138,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44',
+'48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32',
+',,,,50,53,57,62,70,72,132,,,,17,,115,118,123,126,130,134,138,141,145',
+'149,152,114,117,132,,,,,,115,118,123,126,130,134,138,,56,59,,,,2,,8',
+'7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,',
+',,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,132,,,,17,,115,118',
+'123,126,130,134,138,141,145,149,152,114,117,132,,,,,,115,118,123,126',
+'130,134,138,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1',
+',,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57',
+'62,70,72,132,,,,17,,115,118,123,126,130,134,138,141,145,149,152,114',
+'117,132,,,,,,115,118,123,126,130,,,,56,59,,,,2,,8,7,15,,21,24,25,29',
+'34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11',
+',19,,27,32,,,,,50,53,57,62,70,72,132,,,,17,,115,118,123,126,130,134',
+'138,141,145,149,132,,,,,,115,118,123,126,130,134,138,141,145,149,,56',
+'59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30',
+'35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,132,,,',
+'17,,115,118,123,126,130,134,138,141,145,149,132,,,,,,115,118,123,126',
+'130,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,',
+'14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,108,,,50,53,57',
+'62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24',
+'25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3',
+',9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18',
+'22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72',
+',,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34',
+'39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19',
+',27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59',
+',,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35',
+'40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48',
+'51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,',
+',,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,',
+'8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42',
+',,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55',
+',,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50',
+'53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15',
+',21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61',
+'66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1',
+',,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57',
+'62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24',
+'25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3',
+',9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18',
+'22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72',
+',,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34',
+'39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19',
+',27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59',
+',,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35',
+'40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48',
+'51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,',
+',,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,',
+'8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42',
+',,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,',
+',,,,,,,,,,,,,,290,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51',
+'55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,',
+'50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7',
+'15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,',
+',61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,',
+',,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53',
+'57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21',
+'24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66',
+',3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14',
+'18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70',
+'72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29',
+'34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11',
+',19,,27,32,77,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22',
+',,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,',
+',,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34',
+'39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19',
+',27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59',
+',,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35',
+'40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48',
+'51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,',
+',,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,',
+'8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42',
+',,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55',
+',,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50',
+'53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15',
+',21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61',
+'66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1',
+',,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57',
+'62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24',
+'25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3',
+',9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18',
+'22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72',
+',,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34',
+'39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19',
+',27,32,77,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56',
+'59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30',
+'35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44',
+'48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32',
+',,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2',
+',8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42',
+',,,,61,66,,3,,9,11,,19,,27,32,37,,,,50,53,57,62,70,72,,,,,17,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,56,59,64,68,,2,,8,7,15,,21,24,25,29,34,39,44,48',
+'51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,',
+',,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,',
+'8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42',
+',,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55',
+',,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50',
+'53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15',
+',21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61',
+'66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1',
+',,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,258,,,,50,53',
+'57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,64,68,,2,,8,7,15',
+',21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61',
+'66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1',
+',,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57',
+'62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24',
+'25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3',
+',9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18',
+'22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72',
+',,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34',
+'39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19',
+',27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59',
+',,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35',
+'40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48',
+'51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,',
+',,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,',
+'8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42',
+',,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55',
+',,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50',
+'53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15',
+',21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61',
+'66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1',
+',,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57',
+'62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24',
+'25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3',
+',9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18',
+'22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72',
+',,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34',
+'39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19',
+',27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59',
+',,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35',
+'40,42,,,,,61,66,,3,,9,11,,19,,27,32,119,,127,,50,53,57,62,70,72,,,,',
+'17,,,,,,,,,,,,,,142,146,,,,120,,,,135,,,,,,56,59,,,132,2,,8,,15,115',
+'118,123,126,130,134,138,141,145,149,152,114,117,122,125,129,133,137',
+'140,144,148,151,113,116,121,124,128,131,136,139,143,147,150,112,,,,',
+',,,309,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,,,',
+',,,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,56,59,,,,2,,8,,15,21,24,25,29,34,39,44,48,51,55,,,,,1',
+',,14,18,22,,,30,35,40,42,,,,,,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62',
+'70,72,,,,,17,,,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30',
+'35,40,56,59,,,,2,66,8,3,15,9,11,,19,,27,32,119,,127,,50,53,57,62,21',
+'24,25,29,34,39,44,48,51,55,,,,,,,,,,,142,146,,35,40,120,,,,135,,,,,',
+'56,59,,19,132,2,32,8,,15,115,118,123,126,130,134,138,141,145,149,152',
+'114,117,122,125,129,133,137,140,144,148,151,113,116,121,124,128,131',
+'136,139,143,147,150,112,119,,127,,,,,303,,,,2,,8,,15,,,,,,,,,,,,,142',
+'146,,,,120,,,,135,,,,,,,,,,132,,,,,,115,118,123,126,130,134,138,141',
+'145,149,152,114,117,122,125,129,133,137,140,144,148,151,113,116,121',
+'124,128,131,136,139,179,147,150,112,119,,127,,,,,262,,,,,,,,,,,,,,,',
+',,,,,142,146,,,,120,,,,135,,,,,,,,,,132,,,,,,115,118,123,126,130,134',
+'138,141,145,149,152,114,117,122,125,129,133,137,140,144,148,151,113',
+'116,121,124,128,131,136,139,179,147,150,112,119,,127,,,,,,,,,,,,,,,',
+',,,,,,,,,,142,146,,,,120,,,,135,,,,,,,,37,,132,,,,,,115,118,123,126',
+'130,134,138,141,145,149,152,114,117,122,125,129,133,137,140,144,148',
+'151,113,116,121,124,128,131,136,139,143,147,150,112,119,,127,,,,,,,',
+',,,,,,,,,,,,,,,,,,142,146,,,,120,,,,135,,,,,,,,,,132,,,,,,115,118,123',
+'126,130,134,138,141,145,149,152,114,117,122,125,129,133,137,140,144',
+'148,151,113,116,121,124,128,131,136,139,143,147,150,112,119,,127,,,',
+',,,,,,,,,,,,,,,,,,,,,,142,146,,,,120,,,,135,,,,,,,,,,132,,,,,,115,118',
+'123,126,130,134,138,141,145,149,152,114,117,122,125,129,133,137,140',
+'144,148,151,113,116,121,124,128,131,136,139,143,147,150,112,119,,127',
+',,,,,,,,,,,,,,,,,,,,,,,,,142,146,,,,120,,,,135,,,,,,,,,,132,,,,,,115',
+'118,123,126,130,134,138,141,145,149,152,114,117,122,125,129,133,137',
+'140,144,148,151,113,116,121,124,128,131,136,139,143,147,150,112,119',
+',127,,,,,,,,,,,,,,,,,,,,,,,,,,142,146,,,,120,,,,135,,,,,,,,,,132,,,',
+',,115,118,123,126,130,134,138,141,145,149,152,114,117,122,125,129,133',
+'137,140,144,148,151,113,116,121,124,128,131,136,139,143,147,150,112',
+'119,,127,,,,,,,,,,,,,,,,,,,,,,,,,,142,146,,,,120,,,,135,,,,,,,,,,132',
+',,,,,115,118,123,126,130,134,138,141,145,149,152,114,117,122,125,129',
+'133,137,140,144,148,151,113,116,121,124,128,131,136,139,143,147,150',
+'112,119,,127,,,,,,,,,,,,,,,,,,,,,,,,,,142,146,,,,120,,,,135,,,,,,,,',
+',132,,,,,,115,118,123,126,130,134,138,141,145,149,152,114,117,122,125',
+'129,133,137,140,144,148,151,113,116,121,124,128,131,136,139,143,147',
+'150,112,119,,127,,,,,,,,,,,,,,,,,,,,,,,,,,142,146,,,,120,,,,135,,,,',
+',,,,,132,,,,,,115,118,123,126,130,134,138,141,145,149,152,114,117,122',
+'125,129,133,137,140,144,148,151,113,116,121,124,128,131,136,139,143',
+'147,150,112,119,,127,,,,,,,,,,,,,,,,,,,,,,,,,,142,146,,,,120,,,,135',
+',,,,,,,,,132,,,,,,115,118,123,126,130,134,138,141,145,149,152,114,117',
+'122,125,129,133,137,140,144,148,151,113,116,121,124,128,131,136,139',
+'143,147,150,112,119,,127,,,,,,,,,,,,,,,,,,,,,,,,,,142,146,,,,120,,,',
+'135,,,,,,,,,,132,,,,,,115,118,123,126,130,134,138,141,145,149,152,114',
+'117,122,125,129,133,137,140,144,148,151,113,116,121,124,128,131,136',
+'139,143,147,150,112,119,,127,,,,,,,,,,,,,,,,,,,,,,,,,,142,146,,,,120',
+',,,135,,,,,,,,,,132,,,,,,115,118,123,126,130,134,138,141,145,149,152',
+'114,117,122,125,129,133,137,140,144,148,151,113,116,121,124,128,131',
+'136,139,143,147,150,112,119,,127,,,,,,,,,,,,,,,,,,,,,,,,,,142,146,,',
+',120,,,,135,,,,,,,,,,132,,,,,,115,118,123,126,130,134,138,141,145,149',
+'152,114,117,122,125,129,133,137,140,144,148,151,113,116,121,124,128',
+'131,136,139,143,147,150,112,119,,127,,,,,,,,,,,,,,,,,,,,,,,,,,142,146',
+',,,120,,,,135,,,,,,,,,,132,,,,,,115,118,123,126,130,134,138,141,145',
+'149,152,114,117,122,125,129,133,137,140,144,148,151,113,116,121,124',
+'128,131,136,139,143,147,150,112,119,,127,,,,,,,,,,,,,,,,,,,,,,,,,,142',
+'146,,,,120,,,,135,,,,,,,,,,132,,,,,,115,118,123,126,130,134,138,141',
+'145,149,152,114,117,122,125,129,133,137,140,144,148,151,113,116,121',
+'124,128,131,136,139,143,147,150,112,119,,127,,,,,,,,,,,,,,,,,,,,,,,',
+',,142,146,,,,120,,,,135,,,,,,,,252,,132,,,,,,115,118,123,126,130,134',
+'138,141,145,149,152,114,117,122,125,129,133,137,140,144,148,151,113',
+'116,121,124,128,131,136,139,143,147,150,112,119,,127,,,,,,,,,,,,,,,',
+',,,,,,,,,,142,146,,,,120,,,,135,,,,,,,,,,132,,,,,,115,118,123,126,130',
+'134,138,141,145,149,152,114,117,122,125,129,133,137,140,144,148,151',
+'113,116,121,124,128,131,136,139,143,147,150,112,119,,127,,,,,,,,,,,',
+',,,,,,,,,,,,,,142,146,,,,120,,,,135,,,,,,,,37,,132,,,,,,115,118,123',
+'126,130,134,138,141,145,149,152,114,117,122,125,129,133,137,140,144',
+'148,151,113,116,121,124,128,131,136,139,143,147,150,112,119,,127,,,',
+',,,,,,,,,,,,,,,,,,,,,,142,146,,,,120,,,,135,,,,,,,,,,132,,,,,,115,118',
+'123,126,130,134,138,141,145,149,152,114,117,122,125,129,133,137,140',
+'144,148,151,113,116,121,124,128,131,136,139,143,147,150,112,142,146',
+',,,,,,,135,,,,,,,,,,132,,,,,,115,118,123,126,130,134,138,141,145,149',
+'152,114,117,122,125,129,133,137,140,144,148,151,113,116,121,124,128',
+'131,136,139,143,147,150,112,142,146,,,,,,,,135,,,,,,,,,,132,,,,,,115',
+'118,123,126,130,134,138,141,145,149,152,114,117,122,125,129,133,137',
+'140,144,148,151,113,116,121,124,128,131,136,139,143,147,150,112,142',
+'146,,,,,,,,135,,,,,,,,,,132,,,,,,115,118,123,126,130,134,138,141,145',
+'149,152,114,117,122,125,129,133,137,140,144,148,151,113,116,121,124',
+'128,131,136,139,143,142,146,,,,,,,,135,,,,,,,,,,132,,,,,,115,118,123',
+'126,130,134,138,141,145,149,152,114,117,122,125,129,133,137,140,144',
+'148,151,113,116,121,124,128,131,136,139,143,142,146,,,,,,,,135,,,,,',
+',,,,132,,,,,,115,118,123,126,130,134,138,141,145,149,152,114,117,122',
+'125,129,133,137,140,144,148,151,113,116,121,124,128,131,136,139,143',
+'142,146,,,,,,,,135,,,,,,,,,,132,,,,,,115,118,123,126,130,134,138,141',
+'145,149,152,114,117,122,125,129,133,137,140,144,148,151,113,116,121',
+'124,128,131,136,139,143,146,,,,,,,,135,,,,,,,,,,132,,,,,,115,118,123',
+'126,130,134,138,141,145,149,152,114,117,122,125,129,133,137,140,144',
+'148,151,113,116,121,124,128,131,136,139,143,146,,,,,,,,135,,,,,,,,,',
+'132,,,,,,115,118,123,126,130,134,138,141,145,149,152,114,117,122,125',
+'129,133,137,140,144,148,151,113,116,121,124,128,131,136,139,143,146',
+',,,,,,,135,,,,,,,,,,132,,,,,,115,118,123,126,130,134,138,141,145,149',
+'152,114,117,122,125,129,133,137,140,144,148,151,113,116,121,124,128',
+'131,136,139,143,146,,,,,,,,135,,,,,,,,,,132,,,,,,115,118,123,126,130',
+'134,138,141,145,149,152,114,117,122,125,129,133,137,140,144,148,151',
+'113,116,121,124,128,131,136,139,143,146,,,,,,,,135,,,,,,,,,,132,,,,',
+',115,118,123,126,130,134,138,141,145,149,152,114,117,122,125,129,133',
+'137,140,144,148,151,113,116,121,124,128,131,136,139,143,135,,,,,,,,',
+',132,,,,,,115,118,123,126,130,134,138,141,145,149,152,114,117,122,125',
+'129,133,137,140,144,148,151,113,116,121,124,128,131,136,139,135,,,,',
+',,,,,132,,,,,,115,118,123,126,130,134,138,141,145,149,152,114,117,122',
+'125,129,133,137,140,144,148,151,113,116,121,124,128,131,136,139,135',
+',,,,,,,,,132,,,,,,115,118,123,126,130,134,138,141,145,149,152,114,117',
+'122,125,129,133,137,140,144,148,151,113,116,121,124,128,131,136,139',
+'132,,,,,,115,118,123,126,130,134,138,141,145,149,152,114,117,122,125',
+'129,133,137,140,144,148,151,113,116,121,124,128,131,136,139,132,,,,',
+',115,118,123,126,130,134,138,141,145,149,152,114,117,122,125,129,133',
+'137,140,144,148,151,113,116,121,124,128,131,136,139,132,,,,,,115,118',
+'123,126,130,134,138,141,145,149,152,114,117,122,125,129,133,137,140',
+'144,148,151,113,116,121,124,128,131,136,139,132,,,,,,115,118,123,126',
+'130,134,138,141,145,149,152,114,117,122,125,129,133,137,140,144,148',
+'151,113,116,121,124,128,131,136,139,132,,,,,,115,118,123,126,130,134',
+'138,141,145,149,152,114,117,122,125,129,133,137,140,144,148,151,113',
+'116,121,124,128,131,136,139' ]
+        racc_action_table = arr = Array.new(10011, nil)
         idx = 0
         clist.each do |str|
           str.split(',', -1).each do |i|
@@ -338,329 +359,352 @@ def on_error(error_token_id, error_value, value_stack)
         end
 
 clist = [
-'100,302,100,159,159,159,159,159,159,159,159,159,159,162,109,109,252',
-'301,42,162,162,70,204,204,252,301,159,159,100,100,96,96,96,100,169,169',
-'204,100,255,163,254,159,262,161,159,163,163,100,302,161,161,36,36,100',
+'100,301,100,14,14,14,14,14,14,14,14,14,14,101,111,111,300,252,173,101',
+'101,73,204,204,300,252,14,14,100,100,98,98,98,100,103,103,204,100,75',
+'214,261,14,171,163,14,214,214,100,301,163,163,172,172,100,100,100,100',
 '100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100',
-'100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,249',
-'249,249,250,250,250,159,70,159,177,159,100,177,177,177,177,177,177,177',
-'177,177,177,106,96,152,168,177,96,75,177,177,177,189,180,177,177,177',
-'177,280,280,189,170,177,177,81,177,271,177,177,214,177,273,177,177,177',
-'214,214,83,177,177,177,177,177,177,73,73,106,106,177,152,153,189,75',
-'75,75,221,75,180,180,180,249,221,221,250,249,180,173,250,97,97,97,5',
-'5,5,26,282,46,46,46,177,177,179,177,84,177,2,177,187,2,2,2,2,2,2,2,2',
-'2,2,189,189,72,193,2,46,22,2,2,2,98,282,2,2,2,2,98,98,234,282,2,2,282',
-'2,92,2,2,11,2,93,2,2,2,187,187,187,2,2,2,2,2,2,1,1,233,233,2,193,193',
-'193,97,141,46,5,97,193,8,5,46,41,41,217,46,140,8,299,3,217,217,3,3,3',
-'3,3,3,3,3,3,3,195,2,196,2,3,2,197,3,3,3,102,89,3,3,3,3,8,306,8,89,3',
-'3,201,3,267,3,3,167,3,45,3,3,267,167,167,108,3,3,3,3,3,3,160,308,308',
-',3,225,160,160,89,188,89,225,225,225,225,225,166,188,101,101,,267,166',
-'166,131,283,283,131,131,131,131,131,131,131,131,131,131,,3,,3,131,3',
-',131,131,131,,188,131,131,131,131,91,91,91,,131,131,91,131,,131,131',
-',131,,131,131,,,,,131,131,131,131,131,131,213,,,,131,,213,213,213,213',
-'213,213,213,213,213,213,213,213,213,,,,,,7,,,7,7,7,7,7,7,7,7,7,7,,131',
-',131,7,131,,7,7,7,,,7,7,7,7,,,,,7,7,,7,,7,7,,7,,7,7,,,,,7,7,7,7,7,7',
-'224,,,,7,,224,224,224,224,224,224,224,224,224,224,224,224,224,,,,,,129',
-',,129,129,129,129,129,129,129,129,129,129,,7,,7,129,7,,129,129,129,',
-',129,129,129,129,,,,,129,129,,129,,129,129,,129,,129,129,,,,,129,129',
-'129,129,129,129,220,,,,129,,220,220,220,220,220,220,220,220,220,220',
-'220,220,220,,,,,,9,,,9,9,9,9,9,9,9,9,9,9,,129,,129,9,129,,9,9,9,,,9',
-'9,9,9,,,,,9,9,,9,,9,9,,9,,9,9,,,,,9,9,9,9,9,9,216,,,,9,,216,216,216',
-'216,216,216,216,216,216,216,216,216,216,,,,,,128,,,128,128,128,128,128',
-'128,128,128,128,128,,9,,9,128,9,,128,128,128,,,128,128,128,128,,,,,128',
-'128,,128,,128,128,,128,,128,128,,,,,128,128,128,128,128,128,209,,,,128',
-',209,209,209,209,209,209,209,209,209,209,,,,,,,,,127,,,127,127,127,127',
-'127,127,127,127,127,127,,128,,128,127,128,,127,127,127,,,127,127,127',
-'127,,,,,127,127,,127,,127,127,,127,,127,127,,,,,127,127,127,127,127',
-'127,207,,,,127,,207,207,207,207,207,207,207,207,207,207,,,,,,,,,16,',
-',16,16,16,16,16,16,16,16,16,16,,127,,127,16,127,,16,16,16,,,16,16,16',
-'16,,,,,16,16,,16,,16,16,,16,,16,16,,,,,16,16,16,16,16,16,243,,,,16,',
-'243,243,243,243,243,243,243,243,243,243,,,,,,,,,126,,,126,126,126,126',
-'126,126,126,126,126,126,,16,,16,126,16,,126,126,126,,,126,126,126,126',
-',,,,126,126,,126,,126,126,,126,,126,126,,,,,126,126,126,126,126,126',
-'240,,,,126,,240,240,240,240,240,240,240,229,,,,,,229,229,229,229,229',
-'18,,,18,18,18,18,18,18,18,18,18,18,,126,,126,18,126,,18,18,18,,,18,18',
-'18,18,,,,,18,18,,18,,18,18,,18,,18,18,,,,,18,18,18,18,18,18,232,,,,18',
-',232,232,232,232,232,232,232,,,,,,,,,,,,285,,,285,285,285,285,285,285',
-'285,285,285,285,,18,,18,285,18,,285,285,285,,,285,285,285,285,,,,,285',
-'285,,285,,285,285,,285,,285,285,,,,,285,285,285,285,285,285,236,,,,285',
-',236,236,236,236,236,236,236,,,,,,,,,,,,278,,,278,278,278,278,278,278',
-'278,278,278,278,,285,,285,278,285,,278,278,278,,,278,278,278,278,,,',
-',278,278,,278,,278,278,,278,,278,278,,,,,278,278,278,278,278,278,,,',
-',278,,,,,,,,,,,,,,,,,,,,30,,,30,30,30,30,30,30,30,30,30,30,,278,,278',
-'30,278,,30,30,30,,,30,30,30,30,,,,,30,30,,30,,30,30,,30,,30,30,,,,,30',
-'30,30,30,30,30,,,,,30,,,,,,,,,,,,,,,,,,,,277,,,277,277,277,277,277,277',
-'277,277,277,277,,30,,30,277,30,,277,277,277,,,277,277,277,277,,,,,277',
-'277,,277,,277,277,,277,,277,277,,,,,277,277,277,277,277,277,,,,,277',
-',,,,,,,,,,,,,,,,,,,37,,,37,37,37,37,37,37,37,37,37,37,,277,,277,37,277',
-',37,37,37,,,37,37,37,37,,,,,37,37,,37,,37,37,,37,,37,37,,37,,,37,37',
-'37,37,37,37,,,,,37,,,,,,,,,,,,,,,,,,,,261,,,261,261,261,261,261,261',
-'261,261,261,261,,37,,37,261,37,,261,261,261,,,261,261,261,261,,,,,261',
-'261,,261,,261,261,,261,,261,261,,,,,261,261,261,261,261,261,206,,,,261',
-',206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206',
-'206,206,206,206,,261,,,,,,,,,,261,,261,259,261,,259,259,259,259,259',
-'259,259,259,259,259,,,,,259,,,259,259,259,,,259,259,259,259,,,,,259',
-'259,,259,,259,259,,259,,259,259,,,,,259,259,259,259,259,259,,,,,259',
-',,,,,,,,,,,,,,,,,,,258,,,258,258,258,258,258,258,258,258,258,258,,259',
-',259,258,259,,258,258,258,,,258,258,258,258,,,,,258,258,,258,,258,258',
-',258,,258,258,,,,,258,258,258,258,258,258,,,,,258,,,,,,,,,,,,,,,,,,',
-',203,,,203,203,203,203,203,203,203,203,203,203,,258,,258,203,258,,203',
-'203,203,,,203,203,203,203,,,,,203,203,,203,,203,203,,203,,203,203,,',
-',,203,203,203,203,203,203,,,,,203,,,,,,,,,,,,,,,,,,,,202,,,202,202,202',
-'202,202,202,202,202,202,202,,203,,203,202,203,,202,202,202,,,202,202',
-'202,202,,,,,202,202,,202,,202,202,,202,,202,202,,,,,202,202,202,202',
-'202,202,,,,,202,,,,,,,,,,,,,,,,,,,,49,,,49,49,49,49,49,49,49,49,49,49',
-',202,,202,49,202,,49,49,49,,,49,49,49,49,,,,,49,49,,49,,49,49,,49,,49',
-'49,,,,,49,49,49,49,49,49,,,,,49,,,,,,,,,,,,,,,,,,,,52,,,52,52,52,52',
-'52,52,52,52,52,52,,49,,49,52,49,,52,52,52,,,52,52,52,52,,,,,52,52,,52',
-',52,52,,52,,52,52,,,,,52,52,52,52,52,52,,,,,52,,,,,,,,,,,,,,,,,,,,55',
-',,55,55,55,55,55,55,55,55,55,55,,52,,52,55,52,,55,55,55,,,55,55,55,55',
-',,,,55,55,,55,,55,55,,55,,55,55,,,,,55,55,55,55,55,55,,,,,55,,,,,,,',
-',,,,,,,,,,,,58,,,58,58,58,58,58,58,58,58,58,58,,55,,55,58,55,,58,58',
-'58,,,58,58,58,58,,,,,58,58,,58,,58,58,,58,,58,58,,,,,58,58,58,58,58',
-'58,,,,,58,,,,,,,,,,,,,,,,,,,,61,,,61,61,61,61,61,61,61,61,61,61,,58',
-',58,61,58,,61,61,61,,,61,61,61,61,,,,,61,61,,61,,61,61,,61,,61,61,,',
-',,61,61,61,61,61,61,,,,,61,,,,,,,,,,,,,,,,,,,,63,,,63,63,63,63,63,63',
-'63,63,63,63,,61,,61,63,61,,63,63,63,,,63,63,63,63,,,,,63,63,,63,,63',
-'63,,63,,63,63,,,,,63,63,63,63,63,63,,,,,63,,,,,,,,,,,,,,,,,,,,67,,,67',
-'67,67,67,67,67,67,67,67,67,,63,,63,67,63,,67,67,67,,,67,67,67,67,,,',
-',67,67,,67,,67,67,,67,,67,67,,,,,67,67,67,67,67,67,,,,,67,,,,,,,,,,',
-',,,,,,,,,69,,,69,69,69,69,69,69,69,69,69,69,,67,,67,69,67,,69,69,69',
-',,69,69,69,69,,,,,69,69,,69,,69,69,,69,,69,69,,,,,69,69,69,69,69,69',
-',,,,69,,,,,,,,,,,,,,,,,,,,192,,,192,192,192,192,192,192,192,192,192',
-'192,,69,,69,192,69,,192,192,192,,,192,192,192,192,,,,,192,192,,192,',
-'192,192,,192,,192,192,,,,,192,192,192,192,192,192,,,,,192,,,,,,,,,,',
-',,,,,,,,,191,,,191,191,191,191,191,191,191,191,191,191,,192,,192,191',
-'192,,191,191,191,,,191,191,191,191,,,,,191,191,,191,,191,191,,191,,191',
-'191,,,,,191,191,191,191,191,191,,,,,191,,,,,,,,,,,,,,,,,,,,125,,,125',
-'125,125,125,125,125,125,125,125,125,,191,,191,125,191,,125,125,125,',
-',125,125,125,125,,,,,125,125,,125,,125,125,,125,,125,125,,,,,125,125',
-'125,125,125,125,,,,,125,,,,,,,,,,,,,,,,,,,,74,,,74,74,74,74,74,74,74',
-'74,74,74,,125,,125,74,125,,74,74,74,,,74,74,74,74,,,,,74,74,,74,,74',
-'74,,74,,74,74,,,,,74,74,74,74,74,74,,,,,74,,,,,,,,,,,,,,,,,,,,124,,',
-'124,124,124,124,124,124,124,124,124,124,,74,,74,124,74,,124,124,124',
-',,124,124,124,124,,,,,124,124,,124,,124,124,,124,,124,124,,,,,124,124',
-'124,124,124,124,,,,,124,,,,,,,,,,,,,,,,,,,,309,,,309,309,309,309,309',
-'309,309,309,309,309,,124,,124,309,124,,309,309,309,,,309,309,309,309',
-',,,,309,309,,309,,309,309,,309,,309,309,,,,,309,309,309,309,309,309',
-',,,,309,,,,,,,,,,,,,,,,,,,,176,,,176,176,176,176,176,176,176,176,176',
-'176,,309,,309,176,309,,176,176,176,,,176,176,176,176,,,,,176,176,,176',
-',176,176,,176,,176,176,,,,,176,176,176,176,176,176,,,,,176,,,,,,,,,',
-',,,,,,,,,,78,,,78,78,78,78,78,78,78,78,78,78,,176,,176,78,176,,78,78',
-'78,,,78,78,78,78,,,,,78,78,,78,,78,78,,78,,78,78,78,,,,78,78,78,78,78',
-'78,,,,,78,,,,,,,,,,,,,,,,,,,,123,,,123,123,123,123,123,123,123,123,123',
-'123,,78,,78,123,78,,123,123,123,,,123,123,123,123,,,,,123,123,,123,',
-'123,123,,123,,123,123,,,,,123,123,123,123,123,123,,,,,123,,,,,,,,,,',
-',,,,,,,,,157,,,157,157,157,157,157,157,157,157,157,157,,123,,123,157',
-'123,,157,157,157,,,157,157,157,157,,,,,157,157,,157,,157,157,,157,,157',
-'157,,,,,157,157,157,157,157,157,,,,,157,,,,,,,,,,,,,,,,,,,,150,,,150',
-'150,150,150,150,150,150,150,150,150,,157,,157,150,157,,150,150,150,',
-',150,150,150,150,,,,,150,150,,150,,150,150,,150,,150,150,,,,,150,150',
-'150,150,150,150,,,,,150,,,,,,,,,,,,,,,,,,,,85,,,85,85,85,85,85,85,85',
-'85,85,85,,150,,150,85,150,,85,85,85,,,85,85,85,85,,,,,85,85,,85,,85',
-'85,,85,,85,85,,,,,85,85,85,85,85,85,,,,,85,,,,,,,,,,,,,,,,,,,,149,,',
-'149,149,149,149,149,149,149,149,149,149,,85,,85,149,85,,149,149,149',
-',,149,149,149,149,,,,,149,149,,149,,149,149,,149,,149,149,,,,,149,149',
-'149,149,149,149,,,,,149,,,,,,,,,,,,,,,,,,,,148,,,148,148,148,148,148',
-'148,148,148,148,148,,149,,149,148,149,,148,148,148,,,148,148,148,148',
-',,,,148,148,,148,,148,148,,148,,148,148,,,,,148,148,148,148,148,148',
-',,,,148,,,,,,,,,,,,,,,,,,,,147,,,147,147,147,147,147,147,147,147,147',
-'147,,148,,148,147,148,,147,147,147,,,147,147,147,147,,,,,147,147,,147',
-',147,147,,147,,147,147,,,,,147,147,147,147,147,147,,,,,147,,,,,,,,,',
-',,,,,,,,,,146,,,146,146,146,146,146,146,146,146,146,146,,147,,147,146',
-'147,,146,146,146,,,146,146,146,146,,,,,146,146,,146,,146,146,,146,,146',
-'146,,,,,146,146,146,146,146,146,,,,,146,,,,,,,,,,,,,,,,,,,,145,,,145',
-'145,145,145,145,145,145,145,145,145,,146,,146,145,146,,145,145,145,',
-',145,145,145,145,,,,,145,145,,145,,145,145,,145,,145,145,,,,,145,145',
-'145,145,145,145,,,,,145,,,,,,,,,,,,,,,,,,,,144,,,144,144,144,144,144',
-'144,144,144,144,144,,145,,145,144,145,,144,144,144,,,144,144,144,144',
+'100,100,100,100,100,100,100,100,100,100,100,100,100,5,5,5,250,250,250',
+'14,73,14,129,14,100,129,129,129,129,129,129,129,129,129,129,154,98,261',
+'261,129,98,76,129,129,129,189,193,129,129,129,129,279,279,189,83,129',
+'129,255,129,47,129,129,164,129,110,129,129,270,164,164,188,129,129,129',
+'129,129,129,272,188,254,154,129,41,41,189,76,76,76,221,76,193,193,193',
+'5,221,221,250,5,193,104,250,99,99,99,36,36,46,46,46,188,129,129,249',
+'249,249,129,45,129,2,129,187,2,2,2,2,2,2,2,2,2,2,189,189,46,107,2,307',
+'307,2,2,2,165,281,2,2,2,2,165,165,180,8,2,2,179,2,195,2,2,8,2,196,2',
+'2,2,187,187,187,2,2,2,2,2,2,282,282,234,281,2,107,107,46,99,233,233',
+'281,99,46,281,197,8,46,8,249,180,180,180,249,93,93,93,85,180,169,93',
+'91,26,2,2,169,169,22,2,91,2,3,2,11,3,3,3,3,3,3,3,3,3,3,201,95,298,266',
+'3,94,142,3,3,3,143,266,3,3,3,3,91,155,91,305,3,3,86,3,1,3,3,217,3,42',
+'3,3,,217,217,,3,3,3,3,3,3,266,208,,,3,,,208,208,208,208,208,208,208',
+'208,208,208,208,208,208,208,208,208,208,208,208,208,208,,167,,,,3,3',
+'167,167,,3,,3,151,3,,151,151,151,151,151,151,151,151,151,151,,,,,151',
+',,151,151,151,170,,151,151,151,151,170,170,,,151,151,,151,,151,151,',
+'151,,151,151,,,,,151,151,151,151,151,151,206,,,,151,,206,206,206,206',
+'206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206',
+',,,,,,151,151,,,,151,,151,7,151,,7,7,7,7,7,7,7,7,7,7,,,,,7,,,7,7,7,',
+',7,7,7,7,,,,,7,7,,7,,7,7,,7,,7,7,,,,,7,7,7,7,7,7,242,,,,7,,242,242,242',
+'242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242',
+'242,,,,,,,7,7,,,,7,,7,150,7,,150,150,150,150,150,150,150,150,150,150',
+',,,,150,,,150,150,150,,,150,150,150,150,,,,,150,150,,150,,150,150,,150',
+',150,150,,,,,150,150,150,150,150,150,239,,,,150,,239,239,239,239,239',
+'239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,,,,',
+',,150,150,,,,150,,150,9,150,,9,9,9,9,9,9,9,9,9,9,,,,,9,,,9,9,9,,,9,9',
+'9,9,,,,,9,9,,9,,9,9,,9,,9,9,,,,,9,9,9,9,9,9,212,,,,9,,212,212,212,212',
+'212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212',
+',,,,,,9,9,,,,9,,9,149,9,,149,149,149,149,149,149,149,149,149,149,,,',
+',149,,,149,149,149,,,149,149,149,149,,,,,149,149,,149,,149,149,,149',
+',149,149,,,,,149,149,149,149,149,149,235,,,,149,,235,235,235,235,235',
+'235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,,,,',
+',,149,149,,,,149,,149,148,149,,148,148,148,148,148,148,148,148,148,148',
+',,,,148,,,148,148,148,,,148,148,148,148,,,,,148,148,,148,,148,148,,148',
+',148,148,,,,,148,148,148,148,148,148,231,,,,148,,231,231,231,231,231',
+'231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,,,,',
+',,148,148,,,,148,,148,15,148,,15,15,15,15,15,15,15,15,15,15,,,,,15,',
+',15,15,15,,,15,15,15,15,,,,,15,15,,15,,15,15,,15,,15,15,,,,,15,15,15',
+'15,15,15,228,,,,15,,228,228,228,228,228,228,228,228,228,228,228,228',
+'228,228,228,228,228,228,228,228,228,,,,,,,15,15,,,,15,,15,17,15,,17',
+'17,17,17,17,17,17,17,17,17,,,,,17,,,17,17,17,,,17,17,17,17,,,,,17,17',
+',17,,17,17,,17,,17,17,,,,,17,17,17,17,17,17,216,,,,17,,216,216,216,216',
+'216,216,216,216,216,216,216,216,216,236,,,,,,236,236,236,236,236,236',
+'236,,17,17,,,,17,,17,147,17,,147,147,147,147,147,147,147,147,147,147',
+',,,,147,,,147,147,147,,,147,147,147,147,,,,,147,147,,147,,147,147,,147',
+',147,147,,,,,147,147,147,147,147,147,224,,,,147,,224,224,224,224,224',
+'224,224,224,224,224,224,224,224,232,,,,,,232,232,232,232,232,232,232',
+',147,147,,,,147,,147,146,147,,146,146,146,146,146,146,146,146,146,146',
+',,,,146,,,146,146,146,,,146,146,146,146,,,,,146,146,,146,,146,146,,146',
+',146,146,,,,,146,146,146,146,146,146,213,,,,146,,213,213,213,213,213',
+'213,213,213,213,213,213,213,213,240,,,,,,240,240,240,240,240,240,240',
+',146,146,,,,146,,146,145,146,,145,145,145,145,145,145,145,145,145,145',
+',,,,145,,,145,145,145,,,145,145,145,145,,,,,145,145,,145,,145,145,,145',
+',145,145,,,,,145,145,145,145,145,145,220,,,,145,,220,220,220,220,220',
+'220,220,220,220,220,220,220,220,229,,,,,,229,229,229,229,229,,,,145',
+'145,,,,145,,145,30,145,,30,30,30,30,30,30,30,30,30,30,,,,,30,,,30,30',
+'30,,,30,30,30,30,,,,,30,30,,30,,30,30,,30,,30,30,,,,,30,30,30,30,30',
+'30,207,,,,30,,207,207,207,207,207,207,207,207,207,207,209,,,,,,209,209',
+'209,209,209,209,209,209,209,209,,30,30,,,,30,,30,144,30,,144,144,144',
+'144,144,144,144,144,144,144,,,,,144,,,144,144,144,,,144,144,144,144',
 ',,,,144,144,,144,,144,144,,144,,144,144,,,,,144,144,144,144,144,144',
-',,,,144,,,,,,,,,,,,,,,,,,,,95,,,95,95,95,95,95,95,95,95,95,95,,144,',
-'144,95,144,,95,95,95,,,95,95,95,95,,,,,95,95,,95,,95,95,,95,,95,95,95',
-',,,95,95,95,95,95,95,,,,,95,,,,,,,,,,,,,,,,,,,,143,,,143,143,143,143',
-'143,143,143,143,143,143,,95,,95,143,95,,143,143,143,,,143,143,143,143',
-',,,,143,143,,143,,143,143,,143,,143,143,,,,,143,143,143,143,143,143',
-',,,,143,,,,,,,,,,,,,,,,,,,,142,,,142,142,142,142,142,142,142,142,142',
-'142,,143,,143,142,143,,142,142,142,,,142,142,142,142,,,,,142,142,,142',
-',142,142,,142,,142,142,,,,,142,142,142,142,142,142,,,,,142,,,,,,,,,',
-',,,,,,,,,,139,,,139,139,139,139,139,139,139,139,139,139,,142,,142,139',
-'142,,139,139,139,,,139,139,139,139,,,,,139,139,,139,,139,139,,139,,139',
-'139,,,,,139,139,139,139,139,139,,,,,139,,,,,,,,,,,,,,,,,,,,138,,,138',
-'138,138,138,138,138,138,138,138,138,,139,,139,138,139,,138,138,138,',
-',138,138,138,138,,,,,138,138,,138,,138,138,,138,,138,138,,,,,138,138',
-'138,138,138,138,,,,,138,,,,,,,,,,,,,,,,,,,,0,,,0,0,0,0,0,0,0,0,0,0,',
-'138,,138,0,138,,0,0,0,,,0,0,0,0,,,,,0,0,,0,,0,0,,0,,0,0,0,,,,0,0,0,0',
-'0,0,235,,,,0,,235,235,235,235,235,235,235,235,235,235,235,235,235,235',
-'235,235,235,235,235,235,235,,,,,,,,,0,0,,0,,0,137,0,,137,137,137,137',
-'137,137,137,137,137,137,,,,,137,,,137,137,137,,,137,137,137,137,,,,',
-'137,137,,137,,137,137,,137,,137,137,,,,,137,137,137,137,137,137,,,,',
-'137,,,,,,,,,,,,,,,,,,,,136,,,136,136,136,136,136,136,136,136,136,136',
-',137,,137,136,137,,136,136,136,,,136,136,136,136,,,,,136,136,,136,,136',
-'136,,136,,136,136,,,,,136,136,136,136,136,136,,,,,136,,,,,,,,,,,,,,',
-',,,,,135,,,135,135,135,135,135,135,135,135,135,135,,136,,136,135,136',
-',135,135,135,,,135,135,135,135,,,,,135,135,,135,,135,135,,135,,135,135',
-',,,,135,135,135,135,135,135,,,,,135,,,,,,,,,,,,,,,,,,,,104,,,104,104',
-'104,104,104,104,104,104,104,104,,135,,135,104,135,,104,104,104,,,104',
-'104,104,104,,,,,104,104,,104,,104,104,,104,,104,104,,,,,104,104,104',
-'104,104,104,,,,,104,,,,,,,,,,,,,,,,,,,,134,,,134,134,134,134,134,134',
-'134,134,134,134,,104,,104,134,104,,134,134,134,,,134,134,134,134,,,',
-',134,134,,134,,134,134,,134,,134,134,,,,,134,134,134,134,134,134,,,',
-',134,,,,,,,,,,,,,,,,,,,,133,,,133,133,133,133,133,133,133,133,133,133',
-',134,,134,133,134,,133,133,133,,,133,133,133,133,,,,,133,133,,133,,133',
-'133,,133,,133,133,,,,,133,133,133,133,133,133,,,,,133,,,,,,,,,,,,,,',
-',,,,,122,,,122,122,122,122,122,122,122,122,122,122,,133,,133,122,133',
-',122,122,122,,,122,122,122,122,,,,,122,122,,122,,122,122,,122,,122,122',
-',,,,122,122,122,122,122,122,,,,,122,,,,,,,,,,,,,,,,,,,,110,,,110,110',
-'110,110,110,110,110,110,110,110,,122,,122,110,122,,110,110,110,,,110',
-'110,110,110,,,,,110,110,,110,,110,110,,110,,110,110,,,,,110,110,110',
-'110,110,110,,,,,110,,,,,,,,,,,,,,,,,,,,111,,,111,111,111,111,111,111',
-'111,111,111,111,,110,,110,111,110,,111,111,111,,,111,111,111,111,,,',
-',111,111,,111,,111,111,,111,,111,111,,,,,111,111,111,111,111,111,,,',
-',111,,,,,,,,,,,,,,,,,,,,112,,,112,112,112,112,112,112,112,112,112,112',
-',111,,111,112,111,,112,112,112,,,112,112,112,112,,,,,112,112,,112,,112',
-'112,,112,,112,112,,,,,112,112,112,112,112,112,,,,,112,,,,,,,,,,,,,,',
-',,,,,114,,,114,114,114,114,114,114,114,114,114,114,,112,,112,114,112',
-',114,114,114,,,114,114,114,114,,,,,114,114,,114,,114,114,,114,,114,114',
-',,,,114,114,114,114,114,114,,,,,114,,,,,,,,,,,,,,,,,,,,115,,,115,115',
-'115,115,115,115,115,115,115,115,,114,,114,115,114,,115,115,115,,,115',
-'115,115,115,,,,,115,115,,115,,115,115,,115,,115,115,,,,,115,115,115',
-'115,115,115,,,,,115,,,,,,,,,,,,,,,,,,,,117,,,117,117,117,117,117,117',
-'117,117,117,117,,115,,115,117,115,,117,117,117,,,117,117,117,117,,,',
-',117,117,,117,,117,117,,117,,117,117,,,,,117,117,117,117,117,117,,,',
-',117,,,,,,,,,,,,,,,,,,,,118,,,118,118,118,118,118,118,118,118,118,118',
-',117,,117,118,117,,118,118,118,,,118,118,118,118,,,,,118,118,,118,,118',
-'118,,118,,118,118,,,,,118,118,118,118,118,118,,,,,118,,,,,,,,,,,,,,',
-',,,,,119,,,119,119,119,119,119,119,119,119,119,119,,118,,118,119,118',
-',119,119,119,,,119,119,119,119,,,,,119,119,,119,,119,119,,119,,119,119',
-',,,,119,119,119,119,119,119,,,,,119,,,,,,,,,,,,,,,,,,,,120,,,120,120',
-'120,120,120,120,120,120,120,120,,119,,119,120,119,,120,120,120,,,120',
-'120,120,120,,,,,120,120,,120,,120,120,,120,,120,120,,,,,120,120,120',
-'120,120,120,,,,,120,,,,,,,,,,,,,,,,,,,,121,,,121,121,121,121,121,121',
-'121,121,121,121,,120,,120,121,120,,121,121,121,,,121,121,121,121,,,',
-',121,121,,121,,121,121,,121,,121,121,,,,,121,121,121,121,121,121,,,',
-',121,,,,,,,,,,,,,,,,,,,,132,,,132,132,132,132,132,132,132,132,132,132',
-',121,,121,132,121,,132,132,132,,,132,132,132,132,,,,,132,132,,132,,132',
-'132,,132,,132,132,185,,185,,132,132,132,132,132,132,,,,,132,,,,,,,,',
-',,,,,185,185,,,,185,,,,185,,,,,,,,,,185,132,,132,,132,185,185,185,185',
+'243,,,,144,,243,243,243,243,243,243,243,243,243,243,225,,,,,,225,225',
+'225,225,225,,,,,,,144,144,,,,144,,144,37,144,,37,37,37,37,37,37,37,37',
+'37,37,,,,,37,,,37,37,37,,,37,37,37,37,,,,,37,37,,37,,37,37,,37,,37,37',
+',37,,,37,37,37,37,37,37,,,,,37,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,37,,,',
+'37,,37,284,37,,284,284,284,284,284,284,284,284,284,284,,,,,284,,,284',
+'284,284,,,284,284,284,284,,,,,284,284,,284,,284,284,,284,,284,284,,',
+',,284,284,284,284,284,284,,,,,284,,,,,,,,,,,,,,,,,,,,,,,,,,,,,284,284',
+',,,284,,284,277,284,,277,277,277,277,277,277,277,277,277,277,,,,,277',
+',,277,277,277,,,277,277,277,277,,,,,277,277,,277,,277,277,,277,,277',
+'277,,,,,277,277,277,277,277,277,,,,,277,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+'277,277,,,,277,,277,159,277,,159,159,159,159,159,159,159,159,159,159',
+',,,,159,,,159,159,159,,,159,159,159,159,,,,,159,159,,159,,159,159,,159',
+',159,159,,,,,159,159,159,159,159,159,,,,,159,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,159,159,,,,159,,159,276,159,,276,276,276,276,276,276,276,276,276',
+'276,,,,,276,,,276,276,276,,,276,276,276,276,,,,,276,276,,276,,276,276',
+',276,,276,276,,,,,276,276,276,276,276,276,,,,,276,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,276,276,,,,276,,276,141,276,,141,141,141,141,141,141,141,141',
+'141,141,,,,,141,,,141,141,141,,,141,141,141,141,,,,,141,141,,141,,141',
+'141,,141,,141,141,,,,,141,141,141,141,141,141,,,,,141,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,141,141,,,,141,,141,140,141,,140,140,140,140,140,140,140',
+'140,140,140,,,,,140,,,140,140,140,,,140,140,140,140,,,,,140,140,,140',
+',140,140,,140,,140,140,,,,,140,140,140,140,140,140,,,,,140,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,140,140,,,,140,,140,50,140,,50,50,50,50,50,50,50',
+'50,50,50,,,,,50,,,50,50,50,,,50,50,50,50,,,,,50,50,,50,,50,50,,50,,50',
+'50,,,,,50,50,50,50,50,50,,,,,50,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,50,,',
+',50,,50,53,50,,53,53,53,53,53,53,53,53,53,53,,,,,53,,,53,53,53,,,53',
+'53,53,53,,,,,53,53,,53,,53,53,,53,,53,53,,,,,53,53,53,53,53,53,,,,,53',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,53,53,,,,53,,53,57,53,,57,57,57,57,57,57',
+'57,57,57,57,,,,,57,,,57,57,57,,,57,57,57,57,,,,,57,57,,57,,57,57,,57',
+',57,57,,,,,57,57,57,57,57,57,,,,,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,57,57',
+',,,57,,57,61,57,,61,61,61,61,61,61,61,61,61,61,,,,,61,,,61,61,61,,,61',
+'61,61,61,,,,,61,61,,61,,61,61,,61,,61,61,,,,,61,61,61,61,61,61,,,,,61',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,61,61,,,,61,,61,62,61,,62,62,62,62,62,62',
+'62,62,62,62,,,,,62,,,62,62,62,,,62,62,62,62,,,,,62,62,,62,,62,62,,62',
+',62,62,,,,,62,62,62,62,62,62,,,,,62,,,,,,,,,,,,,,,,,,,,,,,,,,,,,62,62',
+',,,62,,62,66,62,,66,66,66,66,66,66,66,66,66,66,,,,,66,,,66,66,66,,,66',
+'66,66,66,,,,,66,66,,66,,66,66,,66,,66,66,,,,,66,66,66,66,66,66,,,,,66',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,66,66,,,,66,,66,70,66,,70,70,70,70,70,70',
+'70,70,70,70,,,,,70,,,70,70,70,,,70,70,70,70,,,,,70,70,,70,,70,70,,70',
+',70,70,,,,,70,70,70,70,70,70,,,,,70,,,,,,,,,,,,,,,,,,,,,,,,,,,,,70,70',
+',,,70,,70,72,70,,72,72,72,72,72,72,72,72,72,72,,,,,72,,,72,72,72,,,72',
+'72,72,72,,,,,72,72,,72,,72,72,,72,,72,72,,,,,72,72,72,72,72,72,,,,,72',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,72,72,,,,72,,72,260,72,,260,260,260,260',
+'260,260,260,260,260,260,,,,,260,,,260,260,260,,,260,260,260,260,,,,',
+'260,260,,260,,260,260,,260,,260,260,,,,,260,260,260,260,260,260,,,,',
+'260,,,,,,,,,,,,,,,,,,,,,,,,260,,,,,260,260,,,,260,,260,139,260,,139',
+'139,139,139,139,139,139,139,139,139,,,,,139,,,139,139,139,,,139,139',
+'139,139,,,,,139,139,,139,,139,139,,139,,139,139,,,,,139,139,139,139',
+'139,139,,,,,139,,,,,,,,,,,,,,,,,,,,,,,,,,,,,139,139,,,,139,,139,258',
+'139,,258,258,258,258,258,258,258,258,258,258,,,,,258,,,258,258,258,',
+',258,258,258,258,,,,,258,258,,258,,258,258,,258,,258,258,,,,,258,258',
+'258,258,258,258,,,,,258,,,,,,,,,,,,,,,,,,,,,,,,,,,,,258,258,,,,258,',
+'258,77,258,,77,77,77,77,77,77,77,77,77,77,,,,,77,,,77,77,77,,,77,77',
+'77,77,,,,,77,77,,77,,77,77,,77,,77,77,,,,,77,77,77,77,77,77,,,,,77,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,77,77,,,,77,,77,138,77,,138,138,138,138,138',
+'138,138,138,138,138,,,,,138,,,138,138,138,,,138,138,138,138,,,,,138',
+'138,,138,,138,138,,138,,138,138,,,,,138,138,138,138,138,138,,,,,138',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,138,138,,,,138,,138,257,138,,257,257,257',
+'257,257,257,257,257,257,257,,,,,257,,,257,257,257,,,257,257,257,257',
+',,,,257,257,,257,,257,257,,257,,257,257,,,,,257,257,257,257,257,257',
+',,,,257,,,,,,,,,,,,,,,,,,,,,,,,,,,,,257,257,,,,257,,257,80,257,,80,80',
+'80,80,80,80,80,80,80,80,,,,,80,,,80,80,80,,,80,80,80,80,,,,,80,80,,80',
+',80,80,,80,,80,80,80,,,,80,80,80,80,80,80,,,,,80,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,80,80,,,,80,,80,137,80,,137,137,137,137,137,137,137,137,137',
+'137,,,,,137,,,137,137,137,,,137,137,137,137,,,,,137,137,,137,,137,137',
+',137,,137,137,,,,,137,137,137,137,137,137,,,,,137,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,137,137,,,,137,,137,152,137,,152,152,152,152,152,152,152,152',
+'152,152,,,,,152,,,152,152,152,,,152,152,152,152,,,,,152,152,,152,,152',
+'152,,152,,152,152,,,,,152,152,152,152,152,152,,,,,152,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,152,152,,,,152,,152,136,152,,136,136,136,136,136,136,136',
+'136,136,136,,,,,136,,,136,136,136,,,136,136,136,136,,,,,136,136,,136',
+',136,136,,136,,136,136,,,,,136,136,136,136,136,136,,,,,136,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,136,136,,,,136,,136,87,136,,87,87,87,87,87,87,87',
+'87,87,87,,,,,87,,,87,87,87,,,87,87,87,87,,,,,87,87,,87,,87,87,,87,,87',
+'87,,,,,87,87,87,87,87,87,,,,,87,,,,,,,,,,,,,,,,,,,,,,,,,,,,,87,87,,',
+',87,,87,135,87,,135,135,135,135,135,135,135,135,135,135,,,,,135,,,135',
+'135,135,,,135,135,135,135,,,,,135,135,,135,,135,135,,135,,135,135,,',
+',,135,135,135,135,135,135,,,,,135,,,,,,,,,,,,,,,,,,,,,,,,,,,,,135,135',
+',,,135,,135,134,135,,134,134,134,134,134,134,134,134,134,134,,,,,134',
+',,134,134,134,,,134,134,134,134,,,,,134,134,,134,,134,134,,134,,134',
+'134,,,,,134,134,134,134,134,134,,,,,134,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+'134,134,,,,134,,134,133,134,,133,133,133,133,133,133,133,133,133,133',
+',,,,133,,,133,133,133,,,133,133,133,133,,,,,133,133,,133,,133,133,,133',
+',133,133,,,,,133,133,133,133,133,133,,,,,133,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,133,133,,,,133,,133,203,133,,203,203,203,203,203,203,203,203,203',
+'203,,,,,203,,,203,203,203,,,203,203,203,203,,,,,203,203,,203,,203,203',
+',203,,203,203,,,,,203,203,203,203,203,203,,,,,203,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,203,203,,,,203,,203,202,203,,202,202,202,202,202,202,202,202',
+'202,202,,,,,202,,,202,202,202,,,202,202,202,202,,,,,202,202,,202,,202',
+'202,,202,,202,202,,,,,202,202,202,202,202,202,,,,,202,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,202,202,,,,202,,202,131,202,,131,131,131,131,131,131,131',
+'131,131,131,,,,,131,,,131,131,131,,,131,131,131,131,,,,,131,131,,131',
+',131,131,,131,,131,131,,,,,131,131,131,131,131,131,,,,,131,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,131,131,,,,131,,131,97,131,,97,97,97,97,97,97,97',
+'97,97,97,,,,,97,,,97,97,97,,,97,97,97,97,,,,,97,97,,97,,97,97,,97,,97',
+'97,97,,,,97,97,97,97,97,97,,,,,97,,,,,,,,,,,,,,,,,,,,,,,,,,,,,97,97',
+',,,97,,97,192,97,,192,192,192,192,192,192,192,192,192,192,,,,,192,,',
+'192,192,192,,,192,192,192,192,,,,,192,192,,192,,192,192,,192,,192,192',
+',,,,192,192,192,192,192,192,,,,,192,,,,,,,,,,,,,,,,,,,,,,,,,,,,,192',
+'192,,,,192,,192,191,192,,191,191,191,191,191,191,191,191,191,191,,,',
+',191,,,191,191,191,,,191,191,191,191,,,,,191,191,,191,,191,191,,191',
+',191,191,,,,,191,191,191,191,191,191,,,,,191,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,191,191,,,,191,,191,0,191,,0,0,0,0,0,0,0,0,0,0,,,,,0,,,0,0,0,,',
+'0,0,0,0,,,,,0,0,,0,,0,0,,0,,0,0,0,,,,0,0,0,0,0,0,,,,,0,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,0,0,0,0,,0,,0,130,0,,130,130,130,130,130,130,130,130',
+'130,130,,,,,130,,,130,130,130,,,130,130,130,130,,,,,130,130,,130,,130',
+'130,,130,,130,130,,,,,130,130,130,130,130,130,,,,,130,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,130,130,,,,130,,130,308,130,,308,308,308,308,308,308,308',
+'308,308,308,,,,,308,,,308,308,308,,,308,308,308,308,,,,,308,308,,308',
+',308,308,,308,,308,308,,,,,308,308,308,308,308,308,,,,,308,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,308,308,,,,308,,308,128,308,,128,128,128,128,128',
+'128,128,128,128,128,,,,,128,,,128,128,128,,,128,128,128,128,,,,,128',
+'128,,128,,128,128,,128,,128,128,,,,,128,128,128,128,128,128,,,,,128',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,128,128,,,,128,,128,124,128,,124,124,124',
+'124,124,124,124,124,124,124,,,,,124,,,124,124,124,,,124,124,124,124',
+',,,,124,124,,124,,124,124,,124,,124,124,,,,,124,124,124,124,124,124',
+',,,,124,,,,,,,,,,,,,,,,,,,,,,,,,,,,,124,124,,,,124,,124,176,124,,176',
+'176,176,176,176,176,176,176,176,176,,,,,176,,,176,176,176,,,176,176',
+'176,176,,,,,176,176,,176,,176,176,,176,,176,176,176,,,,176,176,176,176',
+'176,176,,,,,176,,,,,,,,,,,,,,,,,,,,,,,,,,,,,176,176,176,176,,176,,176',
+'106,176,,106,106,106,106,106,106,106,106,106,106,,,,,106,,,106,106,106',
+',,106,106,106,106,,,,,106,106,,106,,106,106,,106,,106,106,,,,,106,106',
+'106,106,106,106,,,,,106,,,,,,,,,,,,,,,,,,,,,,,,,,,,,106,106,,,,106,',
+'106,175,106,,175,175,175,175,175,175,175,175,175,175,,,,,175,,,175,175',
+'175,,,175,175,175,175,,,,,175,175,,175,,175,175,,175,,175,175,,,,,175',
+'175,175,175,175,175,,,,,175,,,,,,,,,,,,,,,,,,,,,,,,,,,,,175,175,,,,175',
+',175,126,175,,126,126,126,126,126,126,126,126,126,126,,,,,126,,,126',
+'126,126,,,126,126,126,126,,,,,126,126,,126,,126,126,,126,,126,126,,',
+',,126,126,126,126,126,126,,,,,126,,,,,,,,,,,,,,,,,,,,,,,,,,,,,126,126',
+',,,126,,126,125,126,,125,125,125,125,125,125,125,125,125,125,,,,,125',
+',,125,125,125,,,125,125,125,125,,,,,125,125,,125,,125,125,,125,,125',
+'125,,,,,125,125,125,125,125,125,,,,,125,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+'125,125,,,,125,,125,112,125,,112,112,112,112,112,112,112,112,112,112',
+',,,,112,,,112,112,112,,,112,112,112,112,,,,,112,112,,112,,112,112,,112',
+',112,112,,,,,112,112,112,112,112,112,,,,,112,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,112,112,,,,112,,112,113,112,,113,113,113,113,113,113,113,113,113',
+'113,,,,,113,,,113,113,113,,,113,113,113,113,,,,,113,113,,113,,113,113',
+',113,,113,113,,,,,113,113,113,113,113,113,,,,,113,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,113,113,,,,113,,113,114,113,,114,114,114,114,114,114,114,114',
+'114,114,,,,,114,,,114,114,114,,,114,114,114,114,,,,,114,114,,114,,114',
+'114,,114,,114,114,,,,,114,114,114,114,114,114,,,,,114,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,114,114,,,,114,,114,116,114,,116,116,116,116,116,116,116',
+'116,116,116,,,,,116,,,116,116,116,,,116,116,116,116,,,,,116,116,,116',
+',116,116,,116,,116,116,,,,,116,116,116,116,116,116,,,,,116,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,116,116,,,,116,,116,117,116,,117,117,117,117,117',
+'117,117,117,117,117,,,,,117,,,117,117,117,,,117,117,117,117,,,,,117',
+'117,,117,,117,117,,117,,117,117,,,,,117,117,117,117,117,117,,,,,117',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,117,117,,,,117,,117,119,117,,119,119,119',
+'119,119,119,119,119,119,119,,,,,119,,,119,119,119,,,119,119,119,119',
+',,,,119,119,,119,,119,119,,119,,119,119,,,,,119,119,119,119,119,119',
+',,,,119,,,,,,,,,,,,,,,,,,,,,,,,,,,,,119,119,,,,119,,119,120,119,,120',
+'120,120,120,120,120,120,120,120,120,,,,,120,,,120,120,120,,,120,120',
+'120,120,,,,,120,120,,120,,120,120,,120,,120,120,,,,,120,120,120,120',
+'120,120,,,,,120,,,,,,,,,,,,,,,,,,,,,,,,,,,,,120,120,,,,120,,120,121',
+'120,,121,121,121,121,121,121,121,121,121,121,,,,,121,,,121,121,121,',
+',121,121,121,121,,,,,121,121,,121,,121,121,,121,,121,121,,,,,121,121',
+'121,121,121,121,,,,,121,,,,,,,,,,,,,,,,,,,,,,,,,,,,,121,121,,,,121,',
+'121,122,121,,122,122,122,122,122,122,122,122,122,122,,,,,122,,,122,122',
+'122,,,122,122,122,122,,,,,122,122,,122,,122,122,,122,,122,122,,,,,122',
+'122,122,122,122,122,,,,,122,,,,,,,,,,,,,,,,,,,,,,,,,,,,,122,122,,,,122',
+',122,123,122,,123,123,123,123,123,123,123,123,123,123,,,,,123,,,123',
+'123,123,,,123,123,123,123,,,,,123,123,,123,,123,123,,123,,123,123,,',
+',,123,123,123,123,123,123,,,,,123,,,,,,,,,,,,,,,,,,,,,,,,,,,,,123,123',
+',,,123,,123,127,123,,127,127,127,127,127,127,127,127,127,127,,,,,127',
+',,127,127,127,,,127,127,127,127,,,,,127,127,,127,,127,127,,127,,127',
+'127,304,,304,,127,127,127,127,127,127,,,,,127,,,,,,,,,,,,,,304,304,',
+',,304,,,,304,,,,,,127,127,,,304,127,,127,,127,304,304,304,304,304,304',
+'304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304',
+'304,304,304,304,304,304,304,304,304,304,304,,,,,,,,304,290,290,290,290',
+'290,290,290,290,290,290,,,,,290,,,290,290,290,,,290,290,290,,,,,,,290',
+',290,,290,290,,290,,290,290,,,,,290,290,290,290,290,290,,,,,290,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,290,290,,,,290,,290,,290,18,18,18,18,18,18,18',
+'18,18,18,,,,,18,,,18,18,18,,,18,18,18,18,,,,,,18,,18,,18,18,,18,,18',
+'18,,,,,18,18,18,18,18,18,,,,,18,,,,132,132,132,132,132,132,132,132,132',
+'132,,,,,132,,,132,132,132,,,132,132,132,18,18,,,,18,132,18,132,18,132',
+'132,,132,,132,132,289,,289,,132,132,132,132,161,161,161,161,161,161',
+'161,161,161,161,,,,,,,,,,,289,289,,161,161,289,,,,289,,,,,,132,132,',
+'161,289,132,161,132,,132,289,289,289,289,289,289,289,289,289,289,289',
+'289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289',
+'289,289,289,289,289,289,185,,185,,,,,289,,,,161,,161,,161,,,,,,,,,,',
+',,185,185,,,,185,,,,185,,,,,,,,,,185,,,,,,185,185,185,185,185,185,185',
 '185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185',
-'185,185,185,185,185,185,185,185,185,185,185,185,185,305,,305,,,,,185',
-',,,,,,,,,,,,,,,,,,,,305,305,,,,305,,,,305,,,,,,,,,,305,,,,,,305,305',
-'305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305',
-'305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,,,,,,,,305',
-'17,17,17,17,17,17,17,17,17,17,,,,,17,,,17,17,17,,,17,17,17,17,,,,,,17',
-',17,,17,17,,17,,17,17,,,,,17,17,17,17,17,17,,,,,17,,,,130,130,130,130',
-'130,130,130,130,130,130,,,,,130,,,130,130,130,,,130,130,130,,,,,,17',
-'130,17,130,17,130,130,,130,,130,130,290,,290,,130,130,130,130,,,,,,',
-',,,,,,,,,,,,,,290,290,,,,290,,,,290,,,,,,,,,,290,130,,130,,130,290,290',
-'290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290',
-'290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,,,,,,,,290',
-'291,291,291,291,291,291,291,291,291,291,,,,,291,,,291,291,291,,,291',
-'291,291,,,,,,,291,,291,,291,291,,291,,291,291,,,,,291,291,291,291,291',
-'291,,,,,291,14,14,14,14,14,14,14,14,14,14,,,,,,,,,,,,,,14,14,,,,,,,',
-',291,,291,,291,14,208,,14,268,,268,208,208,208,208,208,208,208,208,208',
-'208,208,208,208,208,208,208,208,208,208,208,208,,,,,268,268,,,,268,',
-',,268,,,,,,,,,,268,14,,14,,14,268,268,268,268,268,268,268,268,268,268',
-'268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268',
-'268,268,268,268,268,268,268,313,231,313,,,,,231,231,231,231,231,231',
-'231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,313,313',
-',,,313,,,,313,,,,,,,,,,313,,,,,,313,313,313,313,313,313,313,313,313',
-'313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313',
-'313,313,313,313,313,313,313,313,211,239,211,,,,,239,239,239,239,239',
-'239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,211',
-'211,,,,211,,,,211,,,,,,,,,,211,,,,,,211,211,211,211,211,211,211,211',
+'185,185,185,185,185,185,185,185,185,185,78,,78,,,,,185,,,,,,,,,,,,,',
+',,,,,,,78,78,,,,78,,,,78,,,,,,,,,,78,,,,,,78,78,78,78,78,78,78,78,78',
+'78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78',
+'78,78,89,,89,,,,,,,,,,,,,,,,,,,,,,,,,,89,89,,,,89,,,,89,,,,,,,,89,,89',
+',,,,,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89',
+'89,89,89,89,89,89,89,89,89,89,89,89,89,218,,218,,,,,,,,,,,,,,,,,,,,',
+',,,,,218,218,,,,218,,,,218,,,,,,,,,,218,,,,,,218,218,218,218,218,218',
+'218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218',
+'218,218,218,218,218,218,218,218,218,218,218,256,,256,,,,,,,,,,,,,,,',
+',,,,,,,,,,256,256,,,,256,,,,256,,,,,,,,,,256,,,,,,256,256,256,256,256',
+'256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256',
+'256,256,256,256,256,256,256,256,256,256,256,256,211,,211,,,,,,,,,,,',
+',,,,,,,,,,,,,,211,211,,,,211,,,,211,,,,,,,,,,211,,,,,,211,211,211,211',
 '211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211',
-'211,211,211,211,211,211,211,211,211,210,242,210,,,,,242,242,242,242',
-'242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242',
-'210,210,,,,210,,,,210,,,,,,,,,,210,,,,,,210,210,210,210,210,210,210',
+'211,211,211,211,211,211,211,211,211,211,211,211,211,259,,259,,,,,,,',
+',,,,,,,,,,,,,,,,,,259,259,,,,259,,,,259,,,,,,,,,,259,,,,,,259,259,259',
+'259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259',
+'259,259,259,259,259,259,259,259,259,259,259,259,259,259,267,,267,,,',
+',,,,,,,,,,,,,,,,,,,,,,267,267,,,,267,,,,267,,,,,,,,,,267,,,,,,267,267',
+'267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267',
+'267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,268,,268',
+',,,,,,,,,,,,,,,,,,,,,,,,,268,268,,,,268,,,,268,,,,,,,,,,268,,,,,,268',
+'268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268',
+'268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,210',
+',210,,,,,,,,,,,,,,,,,,,,,,,,,,210,210,,,,210,,,,210,,,,,,,,,,210,,,',
+',,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210',
 '210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210',
-'210,210,210,210,210,210,210,210,210,210,199,212,199,,,,,212,212,212',
-'212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212',
-'212,199,199,,,,199,,,,199,,,,,,,,,,199,,,,,,199,199,199,199,199,199',
-'199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199',
-'199,199,199,199,199,199,199,199,199,199,199,303,228,303,,,,,228,228',
-'228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228',
-'228,228,303,303,,,,303,,,,303,,,,,,,,,,303,,,,,,303,303,303,303,303',
-'303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303',
-'303,303,303,303,303,303,303,303,303,303,303,303,269,,269,,,,,,,,,,,',
-',,,,,,,,,,,,,,269,269,,,,269,,,,269,,,,,,,,,,269,,,,,,269,269,269,269',
-'269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269',
-'269,269,269,269,269,269,269,269,269,269,269,269,269,181,,181,,,,,,,',
-',,,,,,,,,,,,,,,,,,181,181,,,,181,,,,181,,,,,,,,,,181,,,,,,181,181,181',
-'181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181',
-'181,181,181,181,181,181,181,181,181,181,181,181,181,181,76,,76,,,,,',
-',,,,,,,,,,,,,,,,,,,,76,76,,,,76,,,,76,,,,,,,,,,76,,,,,,76,76,76,76,76',
-'76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76',
-'76,76,76,76,76,76,174,,174,,,,,,,,,,,,,,,,,,,,,,,,,,174,174,,,,174,',
-',,174,,,,,,,,,,174,,,,,,174,174,174,174,174,174,174,174,174,174,174',
-'174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174',
-'174,174,174,174,174,174,165,,165,,,,,,,,,,,,,,,,,,,,,,,,,,165,165,,',
-',165,,,,165,,,,,,,,165,,165,,,,,,165,165,165,165,165,165,165,165,165',
-'165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165',
-'165,165,165,165,165,165,165,165,164,,164,,,,,,,,,,,,,,,,,,,,,,,,,,164',
-'164,,,,164,,,,164,,,,,,,,164,,164,,,,,,164,164,164,164,164,164,164,164',
-'164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164',
-'164,164,164,164,164,164,164,164,164,257,,257,,,,,,,,,,,,,,,,,,,,,,,',
-',,257,257,,,,257,,,,257,,,,,,,,,,257,,,,,,257,257,257,257,257,257,257',
-'257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257',
-'257,257,257,257,257,257,257,257,257,257,43,,43,,,,,,,,,,,,,,,,,,,,,',
-',,,,43,43,,,,43,,,,43,,,,,,,,,,43,,,,,,43,43,43,43,43,43,43,43,43,43',
+'43,,43,,,,,,,,,,,,,,,,,,,,,,,,,,43,43,,,,43,,,,43,,,,,,,,,,43,,,,,,43',
 '43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43',
-'43,289,,289,,,,,,,,,,,,,,,,,,,,,,,,,,289,289,,,,289,,,,289,,,,,,,,,',
-'289,,,,,,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289',
-'289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289',
-'289,289,288,,288,,,,,,,,,,,,,,,,,,,,,,,,,,288,288,,,,288,,,,288,,,,',
-',,,,,288,,,,,,288,288,288,288,288,288,288,288,288,288,288,288,288,288',
+'43,43,43,43,43,43,43,43,43,43,287,,287,,,,,,,,,,,,,,,,,,,,,,,,,,287',
+'287,,,,287,,,,287,,,,,,,,,,287,,,,,,287,287,287,287,287,287,287,287',
+'287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287',
+'287,287,287,287,287,287,287,287,287,288,,288,,,,,,,,,,,,,,,,,,,,,,,',
+',,288,288,,,,288,,,,288,,,,,,,,,,288,,,,,,288,288,288,288,288,288,288',
 '288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288',
-'288,288,288,260,,260,,,,,,,,,,,,,,,,,,,,,,,,,,260,260,,,,260,,,,260',
-',,,,,,,,,260,,,,,,260,260,260,260,260,260,260,260,260,260,260,260,260',
-'260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260',
-'260,260,260,260,87,,87,,,,,,,,,,,,,,,,,,,,,,,,,,87,87,,,,87,,,,87,,',
-',,,,,87,,87,,,,,,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87',
-'87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,218,,218,,,,,,,,',
-',,,,,,,,,,,,,,,,,218,218,,,,218,,,,218,,,,,,,,,,218,,,,,,218,218,218',
-'218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218',
-'218,218,218,218,218,218,218,218,218,218,218,218,218,218,99,99,,,,,,',
-',99,,,,,,,,,,99,,,,,,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99',
-'99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,248,248,,,,,,',
-',248,,,,,,,,,,248,,,,,,248,248,248,248,248,248,248,248,248,248,248,248',
+'288,288,288,288,288,288,288,288,288,288,199,,199,,,,,,,,,,,,,,,,,,,',
+',,,,,,199,199,,,,199,,,,199,,,,,,,,,,199,,,,,,199,199,199,199,199,199',
+'199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199',
+'199,199,199,199,199,199,199,199,199,199,199,181,,181,,,,,,,,,,,,,,,',
+',,,,,,,,,,181,181,,,,181,,,,181,,,,,,,,,,181,,,,,,181,181,181,181,181',
+'181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181',
+'181,181,181,181,181,181,181,181,181,181,181,181,178,,178,,,,,,,,,,,',
+',,,,,,,,,,,,,,178,178,,,,178,,,,178,,,,,,,,,,178,,,,,,178,178,178,178',
+'178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178',
+'178,178,178,178,178,178,178,178,178,178,178,178,178,168,,168,,,,,,,',
+',,,,,,,,,,,,,,,,,,168,168,,,,168,,,,168,,,,,,,,168,,168,,,,,,168,168',
+'168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168',
+'168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,302,,302',
+',,,,,,,,,,,,,,,,,,,,,,,,,302,302,,,,302,,,,302,,,,,,,,,,302,,,,,,302',
+'302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302',
+'302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,166',
+',166,,,,,,,,,,,,,,,,,,,,,,,,,,166,166,,,,166,,,,166,,,,,,,,166,,166',
+',,,,,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166',
+'166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166',
+'166,312,,312,,,,,,,,,,,,,,,,,,,,,,,,,,312,312,,,,312,,,,312,,,,,,,,',
+',312,,,,,,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312',
+'312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312',
+'312,312,102,102,,,,,,,,102,,,,,,,,,,102,,,,,,102,102,102,102,102,102',
+'102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102',
+'102,102,102,102,102,102,102,102,102,102,102,248,248,,,,,,,,248,,,,,',
+',,,,248,,,,,,248,248,248,248,248,248,248,248,248,248,248,248,248,248',
 '248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248',
-'248,248,248,248,248,103,103,,,,,,,,103,,,,,,,,,,103,,,,,,103,103,103',
-'103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103',
-'103,103,103,103,103,103,103,103,103,103,103,205,205,,,,,,,,205,,,,,',
-',,,,205,,,,,,205,205,205,205,205,205,205,205,205,205,205,205,205,205',
+'248,248,248,238,238,,,,,,,,238,,,,,,,,,,238,,,,,,238,238,238,238,238',
+'238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238',
+'238,238,238,238,238,238,238,238,238,105,105,,,,,,,,105,,,,,,,,,,105',
+',,,,,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105',
+'105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,205,205',
+',,,,,,,205,,,,,,,,,,205,,,,,,205,205,205,205,205,205,205,205,205,205',
 '205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205',
-'241,241,,,,,,,,241,,,,,,,,,,241,,,,,,241,241,241,241,241,241,241,241',
+'205,205,205,205,241,241,,,,,,,,241,,,,,,,,,,241,,,,,,241,241,241,241',
 '241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241',
-'241,241,241,241,241,241,238,238,,,,,,,,238,,,,,,,,,,238,,,,,,238,238',
-'238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238',
-'238,238,238,238,238,238,238,238,238,238,238,238,237,,,,,,,,237,,,,,',
-',,,,237,,,,,,237,237,237,237,237,237,237,237,237,237,237,237,237,237',
-'237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237',
-'276,,,,,,,,276,,,,,,,,,,276,,,,,,276,276,276,276,276,276,276,276,276',
-'276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276',
-'276,276,276,276,276,275,,,,,,,,275,,,,,,,,,,275,,,,,,275,275,275,275',
-'275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275',
-'275,275,275,275,275,275,275,275,275,275,297,,,,,,,,297,,,,,,,,,,297',
-',,,,,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297',
-'297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,296,,,,',
+'241,241,241,241,241,241,241,241,241,241,295,,,,,,,,295,,,,,,,,,,295',
+',,,,,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295',
+'295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,296,,,,',
 ',,,296,,,,,,,,,,296,,,,,,296,296,296,296,296,296,296,296,296,296,296',
 '296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296',
-'296,296,296,77,,,,,,,,,,77,,,,,,77,77,77,77,77,77,77,77,77,77,77,77',
-'77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,94,,,,,,,,,,94',
-',,,,,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94',
-'94,94,94,94,94,94,94,94,94,226,,,,,,,,,,226,,,,,,226,226,226,226,226',
+'296,296,296,274,,,,,,,,274,,,,,,,,,,274,,,,,,274,274,274,274,274,274',
+'274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274',
+'274,274,274,274,274,274,274,274,275,,,,,,,,275,,,,,,,,,,275,,,,,,275',
+'275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275',
+'275,275,275,275,275,275,275,275,275,275,275,275,275,237,,,,,,,,237,',
+',,,,,,,,237,,,,,,237,237,237,237,237,237,237,237,237,237,237,237,237',
+'237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237',
+'237,96,,,,,,,,,,96,,,,,,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96',
+'96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,79,,,,,,,,,,79,,,,,,79',
+'79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79',
+'79,79,79,79,79,79,226,,,,,,,,,,226,,,,,,226,226,226,226,226,226,226',
 '226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226',
-'226,226,226,226,226,226,226,226,227,,,,,,227,227,227,227,227,227,227',
-'227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227',
-'227,227,227,227,227,227,230,,,,,,230,230,230,230,230,230,230,230,230',
-'230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230',
-'230,230,230,230,219,,,,,,219,219,219,219,219,219,219,219,219,219,219',
+'226,226,226,226,226,226,219,,,,,,219,219,219,219,219,219,219,219,219',
 '219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219',
-'219,219,215,,,,,,215,215,215,215,215,215,215,215,215,215,215,215,215',
-'215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215',
-'222,,,,,,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222',
-'222,222,222,222,222,222,222,222,222,222,222,222,222,222,222' ]
-        racc_action_check = arr = Array.new(8867, nil)
+'219,219,219,219,222,,,,,,222,222,222,222,222,222,222,222,222,222,222',
+'222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222',
+'222,222,230,,,,,,230,230,230,230,230,230,230,230,230,230,230,230,230',
+'230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230',
+'215,,,,,,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215',
+'215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,227,,,,',
+',227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227',
+'227,227,227,227,227,227,227,227,227,227,227,227,227' ]
+        racc_action_check = arr = Array.new(10011, nil)
         idx = 0
         clist.each do |str|
           str.split(',', -1).each do |i|
@@ -670,153 +714,153 @@ def on_error(error_token_id, error_value, value_stack)
         end
 
 racc_action_pointer = [
-  4315,   227,   190,   269,   nil,   163,   nil,   427,   255,   585,
-   nil,   133,   nil,   nil,  6232,   nil,   822,  5978,   980,   nil,
-   nil,   nil,   164,   nil,   nil,   nil,   181,   nil,   nil,   nil,
-  1217,   nil,   nil,   nil,   nil,   nil,   -41,  1375,   nil,   nil,
-   nil,   172,     4,  7408,   nil,   310,   168,   nil,   nil,  1866,
-   nil,   nil,  1945,   nil,   nil,  2024,   nil,   nil,  2103,   nil,
-   nil,  2182,   nil,  2261,   nil,   nil,   nil,  2340,   nil,  2419,
-     0,   nil,   122,    61,  2735,    67,  6973,  8510,  3051,   nil,
-   nil,   117,   nil,   130,   176,  3367,   nil,  7756,   nil,   289,
-   nil,   287,   140,   145,  8556,  3920,    15,   160,   166,  7902,
-    -2,   319,   294,  8020,  4648,   nil,    61,   nil,   225,   -17,
-  4964,  5043,  5122,   nil,  5201,  5280,   nil,  5359,  5438,  5517,
-  5596,  5675,  4885,  3130,  2814,  2656,   901,   743,   664,   506,
-  6038,   348,  5754,  4806,  4727,  4569,  4490,  4411,  4236,  4157,
-   254,   171,  4078,  3999,  3841,  3762,  3683,  3604,  3525,  3446,
-  3288,   nil,   109,   154,   nil,   nil,   nil,  3209,   nil,    -2,
-   277,    -6,   -36,   -10,  7234,  7147,   293,   262,    92,   -56,
-    43,   nil,   nil,   126,  7060,   nil,  2972,    94,   nil,   103,
-    72,  6886,   nil,   nil,   nil,  5799,   nil,   146,   329,   113,
-   nil,  2577,  2498,   160,   nil,   270,   239,   264,   nil,  6625,
-   nil,   292,  1787,  1708,   -11,  8076,  1462,   751,  6227,   672,
-  6538,  6451,  6579,   356,    87,  8746,   593,   217,  7843,  8710,
-   514,   113,  8782,   nil,   435,   282,  8602,  8638,  6666,   922,
-  8674,  6318,   988,   218,   138,  4323,  1067,  8243,  8188,  6405,
-   909,  8132,  6492,   830,   nil,   nil,   nil,   nil,  7961,    72,
-    75,   nil,   -21,   nil,    -7,   -47,   nil,  7321,  1629,  1550,
-  7669,  1454,    23,   nil,   nil,   nil,   nil,   302,  6277,  6799,
-   nil,    86,   nil,    91,   nil,  8353,  8298,  1296,  1138,   nil,
-    92,   nil,   179,   259,   nil,  1059,   nil,   nil,  7582,  7495,
-  6083,  6175,   nil,   nil,   nil,   nil,  8463,  8408,   nil,   223,
-   nil,   -20,   -46,  6712,   nil,  5886,   253,   nil,   235,  2893,
-   nil,   nil,   nil,  6364 ]
+  4990,   305,   190,   286,   nil,    72,   nil,   478,   218,   670,
+   nil,   191,   nil,   nil,    -2,   958,   nil,  1054,  7142,   nil,
+   nil,   nil,   237,   nil,   nil,   nil,   279,   nil,   nil,   nil,
+  1438,   nil,   nil,   nil,   nil,   nil,    86,  1630,   nil,   nil,
+   nil,    64,   316,  8204,   nil,   187,   165,    86,   nil,   nil,
+  2302,   nil,   nil,  2398,   nil,   nil,   nil,  2494,   nil,   nil,
+   nil,  2590,  2686,   nil,   nil,   nil,  2782,   nil,   nil,   nil,
+  2878,   nil,  2974,     0,   nil,   -47,    67,  3358,  7421,  9700,
+  3646,   nil,   nil,   114,   nil,   260,   309,  4030,   nil,  7508,
+   nil,   272,   nil,   179,   217,   213,  9654,  4702,    15,   160,
+    -2,   -36,  9046,     9,   173,  9220,  5566,   160,   nil,   nil,
+    44,   -17,  5950,  6046,  6142,   nil,  6238,  6334,   nil,  6430,
+  6526,  6622,  6718,  6814,  5374,  5854,  5758,  6910,  5278,    94,
+  5086,  4606,  7202,  4318,  4222,  4126,  3934,  3742,  3454,  3166,
+  2206,  2110,   293,   226,  1534,  1342,  1246,  1150,   862,   766,
+   574,   382,  3838,   nil,   107,   315,   nil,   nil,   nil,  1918,
+   nil,  7252,   nil,    -6,    87,   166,  8900,   323,  8726,   227,
+   358,    22,   -39,   -67,   nil,  5662,  5470,   nil,  8639,   142,
+   175,  8552,   nil,   nil,   nil,  7334,   nil,   146,   138,   113,
+   nil,  4894,  4798,    72,   nil,   215,   187,   236,   nil,  8465,
+   nil,   287,  4510,  4414,   -11,  9276,   390,  1446,   295,  1462,
+  8117,  7769,   678,  1254,   -10,  9890,  1062,   279,  7595,  9782,
+  1350,   113,  9818,   nil,  1158,  1558,  9746,  9926,   966,  1369,
+  9854,   870,  1177,   225,   164,   774,  1081,  9607,  9164,   582,
+  1273,  9332,   486,  1542,   nil,   nil,   nil,   nil,  9105,   171,
+    75,   nil,   -20,   nil,   106,    46,  7682,  3550,  3262,  7856,
+  3070,    21,   nil,   nil,   nil,   nil,   298,  7943,  8030,   nil,
+    94,   nil,   104,   nil,  9497,  9552,  2014,  1822,   nil,    92,
+   nil,   213,   155,   nil,  1726,   nil,   nil,  8291,  8378,  7247,
+  7047,   nil,   nil,   nil,   nil,  9387,  9442,   nil,   256,   nil,
+   -21,   -46,  8813,   nil,  6955,   272,   nil,   118,  5182,   nil,
+   nil,   nil,  8987 ]
 
 racc_action_default = [
     -1,  -181,  -136,  -181,   -15,  -124,   -16,  -181,  -118,  -181,
-   -17,  -181,   -18,  -126,  -181,   -19,  -181,   -46,  -181,   -34,
+   -17,  -181,   -18,  -126,  -181,  -181,   -19,  -181,   -46,   -34,
    -20,   -28,  -181,   -21,   -29,   -31,  -181,   -47,   -22,   -35,
   -181,    -2,   -30,   -23,   -36,   -32,    -3,  -181,  -104,   -37,
-   -33,  -181,  -181,    -5,   -38,  -174,    -8,   -39,    -9,  -181,
-   -40,   -10,  -181,  -105,  -103,  -181,  -106,   -11,  -181,  -107,
-   -26,  -181,   -12,  -181,  -108,   -27,   -13,  -181,   -14,  -181,
-  -181,   -98,  -100,  -181,  -181,  -181,  -137,   -55,  -136,  -110,
-  -114,  -181,  -129,  -181,  -181,  -181,  -115,  -181,   -44,  -118,
-  -119,  -181,  -181,  -181,   -56,  -136,  -125,  -181,   -50,   -45,
-  -181,  -181,  -181,  -150,    -7,   -25,  -181,    -4,  -157,  -181,
-  -181,  -181,  -181,   -58,  -181,  -181,   -57,  -181,  -181,  -181,
+   -33,  -181,  -181,    -5,   -38,  -174,    -8,  -181,   -39,    -9,
+  -181,   -40,   -10,  -181,  -105,  -103,   -96,  -181,  -106,   -97,
+   -11,  -181,  -181,  -107,   -26,   -12,  -181,  -108,   -27,   -13,
+  -181,   -14,  -181,  -181,   -98,  -100,  -181,  -181,  -137,   -55,
+  -136,  -110,  -114,  -181,  -129,  -181,  -181,  -181,  -115,  -181,
+   -44,  -118,  -119,  -181,  -181,  -181,   -56,  -136,  -125,  -181,
+  -181,   -50,   -45,  -181,  -181,  -150,    -7,  -181,   -25,    -4,
+  -157,  -181,  -181,  -181,  -181,   -58,  -181,  -181,   -57,  -181,
   -181,  -181,  -181,  -181,  -181,  -181,  -181,  -181,  -181,  -181,
-   -93,  -181,  -181,  -181,  -181,  -181,  -181,  -181,  -181,  -181,
+  -181,  -181,   -93,  -181,  -181,  -181,  -181,  -181,  -181,  -181,
   -181,  -181,  -181,  -181,  -181,  -181,  -181,  -181,  -181,  -181,
-  -181,  -172,  -181,  -174,  -176,  -178,  -109,  -181,  -128,  -181,
-   -51,   -48,   -49,   -52,  -153,  -181,   -54,   -53,  -181,  -181,
-  -181,   -96,   -97,  -181,  -138,  -143,  -181,  -181,  -135,  -181,
+  -181,  -181,  -181,  -172,  -181,  -174,  -176,  -178,  -109,  -181,
+  -128,  -181,   -95,   -51,   -48,   -49,  -153,   -52,  -181,   -54,
+   -53,  -181,  -181,  -181,  -143,  -181,  -181,  -135,  -138,  -181,
   -181,  -137,  -111,  -112,  -113,  -181,  -170,  -181,  -181,  -181,
-  -117,  -181,  -181,  -181,  -151,  -181,  -181,  -146,   314,    -6,
+  -117,  -181,  -181,  -181,  -151,  -181,  -181,  -146,   313,    -6,
    -24,  -181,  -181,  -181,  -181,   -90,   -79,   -68,   -80,   -69,
   -179,  -154,   -81,   -70,   -59,   -83,   -71,   -60,  -180,   -84,
    -72,   -61,   -85,   -82,   -73,   -62,   -91,   -86,   -74,   -63,
    -87,   -75,   -64,  -181,  -181,   -76,   -65,   -92,   -88,   -77,
    -66,   -89,   -78,   -67,  -171,  -175,  -173,  -177,   -41,  -181,
-  -127,  -152,  -181,   -99,  -181,  -181,   -95,  -140,  -181,  -181,
-  -139,  -181,  -130,  -116,  -123,  -121,  -120,  -181,   -42,   -43,
-  -132,  -181,  -147,  -181,  -158,  -159,  -160,  -181,  -181,  -156,
-  -155,  -102,  -181,  -181,  -165,  -181,   -94,  -101,  -142,  -141,
-  -181,  -102,  -131,  -122,  -149,  -148,  -162,  -161,  -166,  -181,
-  -163,  -181,  -181,  -144,  -133,  -181,  -181,  -169,  -167,  -181,
-  -134,  -164,  -168,  -145 ]
+  -127,  -152,  -181,   -99,  -181,  -181,  -140,  -181,  -181,  -139,
+  -181,  -130,  -116,  -123,  -121,  -120,  -181,   -42,   -43,  -132,
+  -181,  -147,  -181,  -158,  -159,  -160,  -181,  -181,  -156,  -155,
+  -102,  -181,  -181,  -165,  -181,   -94,  -101,  -141,  -142,  -181,
+  -102,  -131,  -122,  -149,  -148,  -162,  -161,  -166,  -181,  -163,
+  -181,  -181,  -144,  -133,  -181,  -181,  -169,  -167,  -181,  -134,
+  -164,  -168,  -145 ]
 
 racc_goto_table = [
-    31,    86,    71,    41,    88,    76,    77,   109,   158,   156,
-    87,    97,    94,    96,   173,    91,   265,   266,    75,    98,
-    99,   100,    26,   302,   284,   101,    36,   282,   197,   244,
-   204,    70,   153,   103,   292,   151,   104,   155,   nil,   nil,
-   nil,   107,    86,   nil,   nil,   nil,   nil,   nil,   nil,   154,
-   nil,   nil,   160,   nil,   298,   161,   nil,   nil,   162,   158,
-   156,   163,   nil,   106,   164,   nil,   165,   nil,   nil,   nil,
-   166,   nil,   167,   307,   nil,   nil,   nil,   174,   nil,   nil,
-   nil,   181,   nil,   nil,   nil,    88,   nil,   nil,   185,   nil,
-   186,   188,    86,    86,   180,   293,   187,   nil,   181,   nil,
-   nil,   nil,   nil,   nil,   nil,   233,   104,   199,   nil,   nil,
-   254,   193,   nil,   205,   206,   207,   nil,   208,   209,   nil,
-   210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
-   220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
-   230,   231,   232,   246,   nil,   235,   236,   237,   238,   239,
-   240,   241,   242,   243,   280,   245,   250,   247,   249,   nil,
-   248,   nil,   nil,   nil,   nil,   nil,   nil,   251,   nil,   253,
-   nil,   nil,   nil,   nil,   nil,   nil,   256,   259,   nil,   257,
-   260,   nil,   nil,   nil,    88,    88,   nil,   188,   nil,   267,
-   nil,   nil,   nil,   nil,   268,   269,   nil,   nil,   nil,   272,
-   nil,   nil,   nil,   nil,   nil,   275,   276,   279,   nil,   nil,
-   nil,   nil,   158,   156,   nil,   nil,   nil,   nil,   nil,   nil,
+    31,    88,    41,    90,    78,    79,   111,   160,   158,    89,
+    74,    96,    99,    98,    76,    93,    36,   100,   283,   101,
+   102,    26,   204,   301,   103,   264,   265,   197,   281,   254,
+   244,    73,   105,   155,   291,   156,   106,   157,   nil,   nil,
+   nil,   109,    88,   nil,   nil,   153,   nil,   297,   nil,   162,
+   nil,   nil,   163,   107,   nil,   164,   nil,   nil,   nil,   165,
+   160,   158,   nil,   166,   167,   nil,   306,   nil,   168,   nil,
+   nil,   nil,   169,   nil,   170,   nil,   nil,   nil,   nil,   178,
+   nil,   nil,   181,   nil,   nil,   nil,    90,   nil,   nil,   185,
+   nil,   186,   180,   188,    88,    88,   nil,   nil,   187,   181,
+   nil,   nil,   nil,   292,   nil,   nil,   233,   106,   199,   193,
+   nil,   nil,   nil,   nil,   205,   206,   207,   nil,   208,   209,
+   nil,   210,   211,   212,   213,   214,   215,   216,   217,   218,
+   219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
+   229,   230,   231,   232,   279,   247,   235,   236,   237,   238,
+   239,   240,   241,   242,   243,   246,   245,   nil,   nil,   250,
+   249,   248,   nil,   nil,   nil,   nil,   nil,   nil,   251,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   257,   256,   259,   nil,
+   253,   nil,   nil,    90,    90,   nil,   nil,   188,   nil,   266,
+   nil,   nil,   nil,   267,   268,   nil,   nil,   nil,   271,   nil,
+   nil,   nil,   nil,   nil,   274,   275,   278,   nil,   nil,   nil,
+   nil,   160,   158,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,    86,    86,   nil,   283,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   286,   nil,   nil,
-   nil,   288,   289,    88,   290,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   294,   nil,   295,   nil,   283,   nil,
-   296,   297,   nil,   301,   nil,   nil,   nil,   nil,   303,   nil,
-   nil,   nil,   nil,   nil,   305,   nil,   nil,   283,   nil,   nil,
-   nil,   nil,   306,   nil,   nil,   308,   nil,   nil,   312,   nil,
-   nil,   nil,   313 ]
+   nil,   nil,   nil,   nil,   nil,    88,    88,   282,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   285,   nil,   nil,   287,
+   288,    90,   289,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   293,   nil,   294,   nil,   282,   nil,   295,   296,
+   nil,   nil,   300,   nil,   nil,   nil,   302,   nil,   nil,   nil,
+   nil,   nil,   304,   nil,   nil,   282,   nil,   nil,   nil,   nil,
+   305,   nil,   nil,   307,   nil,   nil,   nil,   311,   nil,   nil,
+   312 ]
 
 racc_goto_check = [
-     2,    30,    26,     4,    21,     5,     5,    40,    36,    31,
-     5,     6,     5,    32,    25,    34,    23,    23,    37,     5,
-     5,     5,     1,    38,    43,     4,     3,    42,    39,    44,
-    41,    24,    46,     5,     8,    45,     2,    48,   nil,   nil,
-   nil,     2,    30,   nil,   nil,   nil,   nil,   nil,   nil,    47,
-   nil,   nil,     5,   nil,    43,     5,   nil,   nil,     5,    36,
-    31,     5,   nil,     3,     5,   nil,     5,   nil,   nil,   nil,
-     5,   nil,     5,    43,   nil,   nil,   nil,     5,   nil,   nil,
-   nil,     5,   nil,   nil,   nil,    21,   nil,   nil,     5,   nil,
-     4,     2,    30,    30,    37,    23,    34,   nil,     5,   nil,
-   nil,   nil,   nil,   nil,   nil,    40,     2,     5,   nil,   nil,
-    25,    37,   nil,     5,     5,     5,   nil,     5,     5,   nil,
-     5,     5,     5,     5,     5,     5,     5,     5,     5,     5,
+     2,    30,     4,    21,     5,     5,    40,    36,    31,     5,
+    26,     5,     6,    32,    37,    34,     3,     5,    43,     5,
+     5,     1,    41,    38,     4,    23,    23,    39,    42,    25,
+    44,    24,     5,    46,     8,    47,     2,    48,   nil,   nil,
+   nil,     2,    30,   nil,   nil,    45,   nil,    43,   nil,     4,
+   nil,   nil,     5,     3,   nil,     5,   nil,   nil,   nil,     5,
+    36,    31,   nil,     5,     5,   nil,    43,   nil,     5,   nil,
+   nil,   nil,     5,   nil,     5,   nil,   nil,   nil,   nil,     5,
+   nil,   nil,     5,   nil,   nil,   nil,    21,   nil,   nil,     5,
+   nil,     4,    37,     2,    30,    30,   nil,   nil,    34,     5,
+   nil,   nil,   nil,    23,   nil,   nil,    40,     2,     5,    37,
+   nil,   nil,   nil,   nil,     5,     5,     5,   nil,     5,     5,
+   nil,     5,     5,     5,     5,     5,     5,     5,     5,     5,
      5,     5,     5,     5,     5,     5,     5,     5,     5,     5,
-     5,     5,     5,    45,   nil,     5,     5,     5,     5,     5,
-     5,     5,     5,     5,    41,     4,     6,    47,    32,   nil,
-     5,   nil,   nil,   nil,   nil,   nil,   nil,     4,   nil,    26,
-   nil,   nil,   nil,   nil,   nil,   nil,     4,     2,   nil,     5,
-     5,   nil,   nil,   nil,    21,    21,   nil,     2,   nil,     2,
-   nil,   nil,   nil,   nil,     5,     5,   nil,   nil,   nil,     4,
-   nil,   nil,   nil,   nil,   nil,     5,     5,     4,   nil,   nil,
-   nil,   nil,    36,    31,   nil,   nil,   nil,   nil,   nil,   nil,
+     5,     5,     5,     5,    41,    47,     5,     5,     5,     5,
+     5,     5,     5,     5,     5,    45,     4,   nil,   nil,     6,
+    32,     5,   nil,   nil,   nil,   nil,   nil,   nil,     4,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,     2,     5,     5,   nil,
+    26,   nil,   nil,    21,    21,   nil,   nil,     2,   nil,     2,
+   nil,   nil,   nil,     5,     5,   nil,   nil,   nil,     4,   nil,
+   nil,   nil,   nil,   nil,     5,     5,     4,   nil,   nil,   nil,
+   nil,    36,    31,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,    30,    30,   nil,    21,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,     4,   nil,   nil,
-   nil,     5,     5,    21,     5,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,     4,   nil,     4,   nil,    21,   nil,
-     5,     5,   nil,     2,   nil,   nil,   nil,   nil,     5,   nil,
-   nil,   nil,   nil,   nil,     5,   nil,   nil,    21,   nil,   nil,
-   nil,   nil,     4,   nil,   nil,     4,   nil,   nil,     2,   nil,
-   nil,   nil,     5 ]
+   nil,   nil,   nil,   nil,   nil,    30,    30,    21,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,     4,   nil,   nil,     5,
+     5,    21,     5,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,     4,   nil,     4,   nil,    21,   nil,     5,     5,
+   nil,   nil,     2,   nil,   nil,   nil,     5,   nil,   nil,   nil,
+   nil,   nil,     5,   nil,   nil,    21,   nil,   nil,   nil,   nil,
+     4,   nil,   nil,     4,   nil,   nil,   nil,     2,   nil,   nil,
+     5 ]
 
 racc_goto_pointer = [
-   nil,    22,     0,    26,     3,     3,    -3,   nil,  -228,   nil,
+   nil,    21,     0,    16,     2,     2,    -2,   nil,  -227,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,    -4,   nil,  -172,    30,   -59,     1,   nil,   nil,   nil,
-    -4,   -37,    -1,   nil,     7,   nil,   -38,    16,  -262,   -73,
-   -35,   -79,  -225,  -228,  -123,   -10,   -13,     4,    -8 ]
+   nil,    -5,   nil,  -163,    30,  -143,     9,   nil,   nil,   nil,
+    -4,   -38,    -1,   nil,     7,   nil,   -39,    12,  -261,   -76,
+   -36,   -89,  -224,  -234,  -124,     0,   -12,   -10,    -8 ]
 
 racc_goto_default = [
-   nil,   nil,   176,   nil,   nil,    43,    46,    48,    51,    57,
-    62,    66,    68,     4,     6,    10,    12,    15,    20,    23,
-    28,    33,    38,    90,   nil,   nil,   nil,    53,    56,    59,
-    64,    79,     5,    80,   nil,    13,    82,   nil,   nil,   nil,
+   nil,   nil,   175,   nil,   nil,    43,    46,    49,    52,    60,
+    65,    69,    71,     4,     6,    10,    12,    16,    20,    23,
+    28,    33,    38,    92,   nil,    47,   nil,    54,    58,    63,
+    67,    81,     5,    82,   nil,    13,    84,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,    45,   nil,   nil,   nil,   nil ]
 
 racc_reduce_table = [
@@ -915,7 +959,7 @@ def on_error(error_token_id, error_value, value_stack)
   3, 110, :_reduce_92,
   2, 121, :_reduce_93,
   5, 109, :_reduce_94,
-  4, 109, :_reduce_95,
+  2, 109, :_reduce_95,
   1, 126, :_reduce_96,
   1, 126, :_reduce_97,
   1, 125, :_reduce_98,
@@ -1004,7 +1048,7 @@ def on_error(error_token_id, error_value, value_stack)
 
 racc_reduce_n = 181
 
-racc_shift_n = 314
+racc_shift_n = 313
 
 racc_token_table = {
   false => 0,
@@ -1855,35 +1899,35 @@ def _reduce_94(val, _values, result)
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 205)
+module_eval(<<'.,.,', 'grammar.y', 204)
   def _reduce_95(val, _values, result)
-     result = CodeNode.new([], val[3], val[2]) 
+     result = CodeNode.new([], val[1], val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 210)
+module_eval(<<'.,.,', 'grammar.y', 209)
   def _reduce_96(val, _values, result)
      result = :func 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 211)
+module_eval(<<'.,.,', 'grammar.y', 210)
   def _reduce_97(val, _values, result)
      result = :boundfunc 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 216)
+module_eval(<<'.,.,', 'grammar.y', 215)
   def _reduce_98(val, _values, result)
      result = val 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 217)
+module_eval(<<'.,.,', 'grammar.y', 216)
   def _reduce_99(val, _values, result)
      result = val[0] << val[2] 
     result
@@ -1892,560 +1936,560 @@ def _reduce_99(val, _values, result)
 
 # reduce 100 omitted
 
-module_eval(<<'.,.,', 'grammar.y', 223)
+module_eval(<<'.,.,', 'grammar.y', 222)
   def _reduce_101(val, _values, result)
      result = SplatNode.new(val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 228)
+module_eval(<<'.,.,', 'grammar.y', 227)
   def _reduce_102(val, _values, result)
      result = SplatNode.new(val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 233)
+module_eval(<<'.,.,', 'grammar.y', 232)
   def _reduce_103(val, _values, result)
      result = ValueNode.new(val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 234)
+module_eval(<<'.,.,', 'grammar.y', 233)
   def _reduce_104(val, _values, result)
      result = ValueNode.new(val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 235)
+module_eval(<<'.,.,', 'grammar.y', 234)
   def _reduce_105(val, _values, result)
      result = ValueNode.new(val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 236)
+module_eval(<<'.,.,', 'grammar.y', 235)
   def _reduce_106(val, _values, result)
      result = ValueNode.new(val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 237)
+module_eval(<<'.,.,', 'grammar.y', 236)
   def _reduce_107(val, _values, result)
      result = ValueNode.new(val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 238)
+module_eval(<<'.,.,', 'grammar.y', 237)
   def _reduce_108(val, _values, result)
      result = ValueNode.new(val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 239)
+module_eval(<<'.,.,', 'grammar.y', 238)
   def _reduce_109(val, _values, result)
      result = val[0] << val[1] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 240)
+module_eval(<<'.,.,', 'grammar.y', 239)
   def _reduce_110(val, _values, result)
      result = ValueNode.new(val[0], [val[1]]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 245)
+module_eval(<<'.,.,', 'grammar.y', 244)
   def _reduce_111(val, _values, result)
      result = AccessorNode.new(val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 246)
+module_eval(<<'.,.,', 'grammar.y', 245)
   def _reduce_112(val, _values, result)
      result = AccessorNode.new(val[1], :prototype) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 247)
+module_eval(<<'.,.,', 'grammar.y', 246)
   def _reduce_113(val, _values, result)
      result = AccessorNode.new(val[1], :soak) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 248)
+module_eval(<<'.,.,', 'grammar.y', 247)
   def _reduce_114(val, _values, result)
      result = val[0] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 249)
+module_eval(<<'.,.,', 'grammar.y', 248)
   def _reduce_115(val, _values, result)
      result = SliceNode.new(val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 254)
+module_eval(<<'.,.,', 'grammar.y', 253)
   def _reduce_116(val, _values, result)
      result = IndexNode.new(val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 259)
+module_eval(<<'.,.,', 'grammar.y', 258)
   def _reduce_117(val, _values, result)
      result = ObjectNode.new(val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 264)
+module_eval(<<'.,.,', 'grammar.y', 263)
   def _reduce_118(val, _values, result)
      result = [] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 265)
+module_eval(<<'.,.,', 'grammar.y', 264)
   def _reduce_119(val, _values, result)
      result = val 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 266)
+module_eval(<<'.,.,', 'grammar.y', 265)
   def _reduce_120(val, _values, result)
      result = val[0] << val[2] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 267)
+module_eval(<<'.,.,', 'grammar.y', 266)
   def _reduce_121(val, _values, result)
      result = val[0] << val[2] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 269)
+module_eval(<<'.,.,', 'grammar.y', 268)
   def _reduce_122(val, _values, result)
      result = val[0] << val[3] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 270)
+module_eval(<<'.,.,', 'grammar.y', 269)
   def _reduce_123(val, _values, result)
      result = val[1] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 275)
+module_eval(<<'.,.,', 'grammar.y', 274)
   def _reduce_124(val, _values, result)
      result = val[0] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 276)
+module_eval(<<'.,.,', 'grammar.y', 275)
   def _reduce_125(val, _values, result)
      result = val[1].new_instance 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 277)
+module_eval(<<'.,.,', 'grammar.y', 276)
   def _reduce_126(val, _values, result)
      result = val[0] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 282)
+module_eval(<<'.,.,', 'grammar.y', 281)
   def _reduce_127(val, _values, result)
      result = ExtendsNode.new(val[0], val[2]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 287)
+module_eval(<<'.,.,', 'grammar.y', 286)
   def _reduce_128(val, _values, result)
      result = CallNode.new(val[0], val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 288)
+module_eval(<<'.,.,', 'grammar.y', 287)
   def _reduce_129(val, _values, result)
      result = CallNode.new(val[0], val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 293)
+module_eval(<<'.,.,', 'grammar.y', 292)
   def _reduce_130(val, _values, result)
      result = val[1] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 294)
+module_eval(<<'.,.,', 'grammar.y', 293)
   def _reduce_131(val, _values, result)
      result = val[1] << val[3] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 299)
+module_eval(<<'.,.,', 'grammar.y', 298)
   def _reduce_132(val, _values, result)
      result = CallNode.new(Value.new('super'), val[2]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 305)
+module_eval(<<'.,.,', 'grammar.y', 304)
   def _reduce_133(val, _values, result)
      result = RangeNode.new(val[1], val[4]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 307)
+module_eval(<<'.,.,', 'grammar.y', 306)
   def _reduce_134(val, _values, result)
      result = RangeNode.new(val[1], val[5], true) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 312)
+module_eval(<<'.,.,', 'grammar.y', 311)
   def _reduce_135(val, _values, result)
      result = ArrayNode.new(val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 317)
+module_eval(<<'.,.,', 'grammar.y', 316)
   def _reduce_136(val, _values, result)
      result = [] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 318)
+module_eval(<<'.,.,', 'grammar.y', 317)
   def _reduce_137(val, _values, result)
      result = val 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 319)
+module_eval(<<'.,.,', 'grammar.y', 318)
   def _reduce_138(val, _values, result)
      result = [val[1]] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 320)
+module_eval(<<'.,.,', 'grammar.y', 319)
   def _reduce_139(val, _values, result)
      result = val[0] << val[2] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 321)
+module_eval(<<'.,.,', 'grammar.y', 320)
   def _reduce_140(val, _values, result)
      result = val[0] << val[2] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 322)
+module_eval(<<'.,.,', 'grammar.y', 321)
   def _reduce_141(val, _values, result)
      result = val[0] << val[3] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 323)
+module_eval(<<'.,.,', 'grammar.y', 322)
   def _reduce_142(val, _values, result)
      result = val[0] << val[3] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 324)
+module_eval(<<'.,.,', 'grammar.y', 323)
   def _reduce_143(val, _values, result)
      result = val[0] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 329)
+module_eval(<<'.,.,', 'grammar.y', 328)
   def _reduce_144(val, _values, result)
      result = val[0] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 330)
+module_eval(<<'.,.,', 'grammar.y', 329)
   def _reduce_145(val, _values, result)
      result = ([val[0]] << val[2]).flatten 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 335)
+module_eval(<<'.,.,', 'grammar.y', 334)
   def _reduce_146(val, _values, result)
      result = TryNode.new(val[1], val[2][0], val[2][1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 336)
+module_eval(<<'.,.,', 'grammar.y', 335)
   def _reduce_147(val, _values, result)
      result = TryNode.new(val[1], nil, nil, val[3]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 338)
+module_eval(<<'.,.,', 'grammar.y', 337)
   def _reduce_148(val, _values, result)
      result = TryNode.new(val[1], val[2][0], val[2][1], val[4]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 343)
+module_eval(<<'.,.,', 'grammar.y', 342)
   def _reduce_149(val, _values, result)
      result = [val[1], val[2]] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 348)
+module_eval(<<'.,.,', 'grammar.y', 347)
   def _reduce_150(val, _values, result)
      result = ThrowNode.new(val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 353)
+module_eval(<<'.,.,', 'grammar.y', 352)
   def _reduce_151(val, _values, result)
      result = ParentheticalNode.new(val[1], val[0].line) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 358)
+module_eval(<<'.,.,', 'grammar.y', 357)
   def _reduce_152(val, _values, result)
      result = WhileNode.new(val[1], val[2]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 359)
+module_eval(<<'.,.,', 'grammar.y', 358)
   def _reduce_153(val, _values, result)
      result = WhileNode.new(val[1], nil) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 360)
+module_eval(<<'.,.,', 'grammar.y', 359)
   def _reduce_154(val, _values, result)
      result = WhileNode.new(val[2], Expressions.wrap(val[0])) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 367)
+module_eval(<<'.,.,', 'grammar.y', 366)
   def _reduce_155(val, _values, result)
      result = ForNode.new(val[0], val[3], val[2][0], val[2][1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 368)
+module_eval(<<'.,.,', 'grammar.y', 367)
   def _reduce_156(val, _values, result)
      result = ForNode.new(val[3], val[2], val[1][0], val[1][1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 373)
+module_eval(<<'.,.,', 'grammar.y', 372)
   def _reduce_157(val, _values, result)
      result = val 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 374)
+module_eval(<<'.,.,', 'grammar.y', 373)
   def _reduce_158(val, _values, result)
      result = [val[0], val[2]] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 379)
+module_eval(<<'.,.,', 'grammar.y', 378)
   def _reduce_159(val, _values, result)
      result = {:source => val[1]} 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 380)
+module_eval(<<'.,.,', 'grammar.y', 379)
   def _reduce_160(val, _values, result)
      result = {:source => val[1], :object => true} 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 382)
+module_eval(<<'.,.,', 'grammar.y', 381)
   def _reduce_161(val, _values, result)
      result = val[0].merge(:filter => val[2]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 384)
+module_eval(<<'.,.,', 'grammar.y', 383)
   def _reduce_162(val, _values, result)
      result = val[0].merge(:step => val[2]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 390)
+module_eval(<<'.,.,', 'grammar.y', 389)
   def _reduce_163(val, _values, result)
      result = val[3].rewrite_condition(val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 392)
+module_eval(<<'.,.,', 'grammar.y', 391)
   def _reduce_164(val, _values, result)
      result = val[3].rewrite_condition(val[1]).add_else(val[5]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 397)
+module_eval(<<'.,.,', 'grammar.y', 396)
   def _reduce_165(val, _values, result)
      result = val[0] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 398)
+module_eval(<<'.,.,', 'grammar.y', 397)
   def _reduce_166(val, _values, result)
      result = val[0] << val[1] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 403)
+module_eval(<<'.,.,', 'grammar.y', 402)
   def _reduce_167(val, _values, result)
      result = IfNode.new(val[1], val[2], nil, {:statement => true}) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 405)
+module_eval(<<'.,.,', 'grammar.y', 404)
   def _reduce_168(val, _values, result)
      result = IfNode.new(val[1], val[2], nil, {:statement => true}) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 406)
+module_eval(<<'.,.,', 'grammar.y', 405)
   def _reduce_169(val, _values, result)
      result = val[2].add_comment(val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 411)
+module_eval(<<'.,.,', 'grammar.y', 410)
   def _reduce_170(val, _values, result)
      result = IfNode.new(val[1], val[2]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 416)
+module_eval(<<'.,.,', 'grammar.y', 415)
   def _reduce_171(val, _values, result)
      result = val[1].force_statement 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 421)
+module_eval(<<'.,.,', 'grammar.y', 420)
   def _reduce_172(val, _values, result)
      result = val[0] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 422)
+module_eval(<<'.,.,', 'grammar.y', 421)
   def _reduce_173(val, _values, result)
      result = val[0].add_else(val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 427)
+module_eval(<<'.,.,', 'grammar.y', 426)
   def _reduce_174(val, _values, result)
      result = nil 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 428)
+module_eval(<<'.,.,', 'grammar.y', 427)
   def _reduce_175(val, _values, result)
      result = val[1] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 433)
+module_eval(<<'.,.,', 'grammar.y', 432)
   def _reduce_176(val, _values, result)
      result = val[0] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 434)
+module_eval(<<'.,.,', 'grammar.y', 433)
   def _reduce_177(val, _values, result)
      result = val[0].add_else(val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 439)
+module_eval(<<'.,.,', 'grammar.y', 438)
   def _reduce_178(val, _values, result)
      result = val[0].add_else(val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 440)
+module_eval(<<'.,.,', 'grammar.y', 439)
   def _reduce_179(val, _values, result)
      result = IfNode.new(val[2], Expressions.wrap(val[0]), nil, {:statement => true}) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 441)
+module_eval(<<'.,.,', 'grammar.y', 440)
   def _reduce_180(val, _values, result)
      result = IfNode.new(val[2], Expressions.wrap(val[0]), nil, {:statement => true, :invert => true}) 
     result
diff --git a/lib/coffee_script/rewriter.rb b/lib/coffee_script/rewriter.rb
index bb573e384d..1fd77cfc84 100644
--- a/lib/coffee_script/rewriter.rb
+++ b/lib/coffee_script/rewriter.rb
@@ -19,7 +19,7 @@ class Rewriter
 
     # Tokens pairs that, in immediate succession, indicate an implicit call.
     IMPLICIT_FUNC = [:IDENTIFIER, :SUPER]
-    IMPLICIT_END  = [:IF, :UNLESS, :FOR, :WHILE, "\n", :PARAM_START]
+    IMPLICIT_END  = [:IF, :UNLESS, :FOR, :WHILE, "\n", :PARAM_START, :OUTDENT]
     IMPLICIT_CALL = [:IDENTIFIER, :NUMBER, :STRING, :JS, :REGEX, :NEW, :PARAM_START,
                      :TRY, :DELETE, :INSTANCEOF, :TYPEOF, :SWITCH, :ARGUMENTS,
                      :TRUE, :FALSE, :YES, :NO, :ON, :OFF, '!', '!!', :NOT]
@@ -155,16 +155,20 @@ def add_implicit_indentation
     # Insert the implicit parentheses here, so that the parser doesn't have to
     # deal with them.
     def add_implicit_parentheses
-      open = false
+      stack = [0]
       scan_tokens do |prev, token, post, i|
-        if open && IMPLICIT_END.include?(token[0])
-          @tokens.insert(i, [')', Value.new(')', token[1].line)])
-          open = false
-          next 2
+        stack.push(0) if token[0] == :INDENT
+        if (stack.last > 0 && (IMPLICIT_END.include?(token[0]) || post.nil?)) &&
+           !(token[0] == :PARAM_START && prev[0] == ',')
+          idx = token[0] == :OUTDENT ? i + 1 : i
+          stack.last.times { @tokens.insert(idx, [')', Value.new(')', token[1].line)]) }
+          size, stack[-1] = stack[-1] + 1, 0
+          next size
         end
+        stack.pop if token[0] == :OUTDENT
         next 1 unless IMPLICIT_FUNC.include?(prev[0]) && IMPLICIT_CALL.include?(token[0])
         @tokens.insert(i, ['(', Value.new('(', token[1].line)])
-        open = true
+        stack[-1] += 1
         next token[0] == :PARAM_START ? 1 : 2
       end
     end
diff --git a/test/fixtures/execution/test_arguments.coffee b/test/fixtures/execution/test_arguments.coffee
index 32b61e1a4b..3a3156a97d 100644
--- a/test/fixtures/execution/test_arguments.coffee
+++ b/test/fixtures/execution/test_arguments.coffee
@@ -18,14 +18,14 @@ print(area(
 
 
 # Arguments are turned into arrays.
-curried: () =>
+curried: =>
   print area.apply(this, arguments.concat(20, 20)) is 100
 
 curried 10, 10
 
 
 # Arguments is not a special keyword -- it can be assigned to:
-func: () =>
+func: =>
   arguments: 25
   arguments
 
diff --git a/test/fixtures/execution/test_array_comprehension.coffee b/test/fixtures/execution/test_array_comprehension.coffee
index f0ab48c3ac..b5005bd650 100644
--- a/test/fixtures/execution/test_array_comprehension.coffee
+++ b/test/fixtures/execution/test_array_comprehension.coffee
@@ -34,7 +34,7 @@ methods: ['one', 'two', 'three']
 
 for method in methods
   name: method
-  obj[name]: () =>
+  obj[name]: =>
     "I'm " + name
 
 print obj.one()   is "I'm one"
diff --git a/test/fixtures/execution/test_assignment.coffee b/test/fixtures/execution/test_assignment.coffee
index ff25e765a3..c1b5d127e3 100644
--- a/test/fixtures/execution/test_assignment.coffee
+++ b/test/fixtures/execution/test_assignment.coffee
@@ -12,7 +12,7 @@ print result is true and result2 is true
 
 # Assign to conditional.
 
-get_x: () => 10
+get_x: => 10
 
 if x: get_x() then 100
 
diff --git a/test/fixtures/execution/test_blocks.coffee b/test/fixtures/execution/test_blocks.coffee
index 4be80c692b..29ac5296b5 100644
--- a/test/fixtures/execution/test_blocks.coffee
+++ b/test/fixtures/execution/test_blocks.coffee
@@ -1,4 +1,4 @@
-results: [1, 2, 3].map() (x) =>
+results: [1, 2, 3].map (x) =>
   x * x
 
 print results.join(' ') is '1 4 9'
\ No newline at end of file
diff --git a/test/fixtures/execution/test_calling_super.coffee b/test/fixtures/execution/test_calling_super.coffee
index e57baebc13..61ac4daca4 100644
--- a/test/fixtures/execution/test_calling_super.coffee
+++ b/test/fixtures/execution/test_calling_super.coffee
@@ -1,18 +1,18 @@
-Base: () =>
+Base: =>
 Base::func: (string) =>
   'zero/' + string
 
-FirstChild: () =>
+FirstChild: =>
 FirstChild extends Base
 FirstChild::func: (string) =>
   super('one/') + string
 
-SecondChild: () =>
+SecondChild: =>
 SecondChild extends FirstChild
 SecondChild::func: (string) =>
   super('two/') + string
 
-ThirdChild: () =>
+ThirdChild: =>
   this.array: [1, 2, 3]
 ThirdChild extends SecondChild
 ThirdChild::func: (string) =>
@@ -29,7 +29,7 @@ TopClass: (arg) =>
 SuperClass: (arg) =>
   super 'super-' + arg
 
-SubClass: () =>
+SubClass: =>
   super 'sub'
 
 SuperClass extends TopClass
diff --git a/test/fixtures/execution/test_chained_calls.coffee b/test/fixtures/execution/test_chained_calls.coffee
index 6d3725aecc..e3aab11dc6 100644
--- a/test/fixtures/execution/test_chained_calls.coffee
+++ b/test/fixtures/execution/test_chained_calls.coffee
@@ -1,5 +1,5 @@
 identity_wrap: (x) =>
-  () => x
+  => x
 
 result: identity_wrap(identity_wrap(true))()()
 
diff --git a/test/fixtures/execution/test_everything.coffee b/test/fixtures/execution/test_everything.coffee
index cc9860182b..fd5231e40f 100644
--- a/test/fixtures/execution/test_everything.coffee
+++ b/test/fixtures/execution/test_everything.coffee
@@ -1,4 +1,4 @@
-func: () =>
+func: =>
   a: 3
   b: []
 
diff --git a/test/fixtures/execution/test_existence.coffee b/test/fixtures/execution/test_existence.coffee
index a0438aa981..16c64c74c5 100644
--- a/test/fixtures/execution/test_existence.coffee
+++ b/test/fixtures/execution/test_existence.coffee
@@ -26,7 +26,7 @@ print z is null and x is "EX"
 # Only evaluate once.
 
 counter: 0
-get_next_node: () =>
+get_next_node: =>
   throw "up" if counter
   counter++
 
diff --git a/test/fixtures/execution/test_expressions.coffee b/test/fixtures/execution/test_expressions.coffee
index 042ea59ccf..e8dea0c53b 100644
--- a/test/fixtures/execution/test_expressions.coffee
+++ b/test/fixtures/execution/test_expressions.coffee
@@ -17,7 +17,7 @@ print findit(items) is "bacon"
 
 obj: {
   num: 5
-  func: () =>
+  func: =>
     this.result: if false
       10
     else
diff --git a/test/fixtures/execution/test_functions.coffee b/test/fixtures/execution/test_functions.coffee
index 4dde028c83..ee88a0cb73 100644
--- a/test/fixtures/execution/test_functions.coffee
+++ b/test/fixtures/execution/test_functions.coffee
@@ -1,6 +1,6 @@
 x: 1
 y: {}
-y.x: () => 3
+y.x: => 3
 
 print x is 1
 print typeof(y.x) is 'function'
@@ -9,17 +9,17 @@ print y.x.name is 'x'
 
 
 # The empty function should not cause a syntax error.
-() =>
+=>
 
 
 obj: {
   name: "Fred"
 
-  bound: () =>
-    (() ==> print(this.name is "Fred"))()
+  bound: =>
+    (==> print(this.name is "Fred"))()
 
-  unbound: () =>
-    (() => print(!this.name?))()
+  unbound: =>
+    (=> print(!this.name?))()
 }
 
 obj.unbound()
diff --git a/test/fixtures/execution/test_funky_comments.coffee b/test/fixtures/execution/test_funky_comments.coffee
index 7265243142..8acaafd8f8 100644
--- a/test/fixtures/execution/test_funky_comments.coffee
+++ b/test/fixtures/execution/test_funky_comments.coffee
@@ -1,5 +1,5 @@
   # comment
-func: () =>
+func: =>
 # comment
   false
   false   # comment
@@ -14,7 +14,7 @@ switch 'string'
   when null
     something_else()
 
-() =>
+=>
   code()
   # comment
 
diff --git a/test/fixtures/execution/test_literals.coffee b/test/fixtures/execution/test_literals.coffee
index 923014b501..3f92a5842d 100644
--- a/test/fixtures/execution/test_literals.coffee
+++ b/test/fixtures/execution/test_literals.coffee
@@ -14,7 +14,7 @@ neg: (3 -4)
 print neg is -1
 
 
-func: () =>
+func: =>
   return if true
 
 print func() is null
diff --git a/test/fixtures/execution/test_operations.coffee b/test/fixtures/execution/test_operations.coffee
index e9de9324ba..9f0d51db94 100644
--- a/test/fixtures/execution/test_operations.coffee
+++ b/test/fixtures/execution/test_operations.coffee
@@ -13,6 +13,6 @@ print 50 > 10 > 5 is parseInt('5', 10)
 # more than once.
 
 i: 0
-func: () => i++
+func: => i++
 
 print 1 > func() < 1

From fb7fd53bdfd6623f3d0b46d6d2a5c0b4dee669d1 Mon Sep 17 00:00:00 2001
From: Jeremy Ashkenas 
Date: Tue, 26 Jan 2010 02:27:19 -0500
Subject: [PATCH 23/32] enabling passed functions to fire implicit method calls

---
 lib/coffee_script/rewriter.rb                 | 2 +-
 test/fixtures/execution/test_functions.coffee | 3 +++
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/lib/coffee_script/rewriter.rb b/lib/coffee_script/rewriter.rb
index 1fd77cfc84..369a4ac01a 100644
--- a/lib/coffee_script/rewriter.rb
+++ b/lib/coffee_script/rewriter.rb
@@ -22,7 +22,7 @@ class Rewriter
     IMPLICIT_END  = [:IF, :UNLESS, :FOR, :WHILE, "\n", :PARAM_START, :OUTDENT]
     IMPLICIT_CALL = [:IDENTIFIER, :NUMBER, :STRING, :JS, :REGEX, :NEW, :PARAM_START,
                      :TRY, :DELETE, :INSTANCEOF, :TYPEOF, :SWITCH, :ARGUMENTS,
-                     :TRUE, :FALSE, :YES, :NO, :ON, :OFF, '!', '!!', :NOT]
+                     :TRUE, :FALSE, :YES, :NO, :ON, :OFF, '!', '!!', :NOT, '=>']
 
     # The inverse mappings of token pairs we're trying to fix up.
     INVERSES = BALANCED_PAIRS.inject({}) do |memo, pair|
diff --git a/test/fixtures/execution/test_functions.coffee b/test/fixtures/execution/test_functions.coffee
index ee88a0cb73..79eeb6e458 100644
--- a/test/fixtures/execution/test_functions.coffee
+++ b/test/fixtures/execution/test_functions.coffee
@@ -52,3 +52,6 @@ print Math.FastAdd(20, 20) is 40
 print 100 > 1 if 1 > 0
 print true unless false
 print true for i in [1..3]
+
+print_func: (f) => print(f())
+print_func => true
\ No newline at end of file

From 55df898112781d1912e0a583c122fea979aa0cc6 Mon Sep 17 00:00:00 2001
From: Jeremy Ashkenas 
Date: Tue, 26 Jan 2010 10:41:28 -0500
Subject: [PATCH 24/32] adding bound functions to the list of implicit call
 activator tokens

---
 lib/coffee_script/rewriter.rb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/coffee_script/rewriter.rb b/lib/coffee_script/rewriter.rb
index 369a4ac01a..b3d37338e1 100644
--- a/lib/coffee_script/rewriter.rb
+++ b/lib/coffee_script/rewriter.rb
@@ -22,7 +22,7 @@ class Rewriter
     IMPLICIT_END  = [:IF, :UNLESS, :FOR, :WHILE, "\n", :PARAM_START, :OUTDENT]
     IMPLICIT_CALL = [:IDENTIFIER, :NUMBER, :STRING, :JS, :REGEX, :NEW, :PARAM_START,
                      :TRY, :DELETE, :INSTANCEOF, :TYPEOF, :SWITCH, :ARGUMENTS,
-                     :TRUE, :FALSE, :YES, :NO, :ON, :OFF, '!', '!!', :NOT, '=>']
+                     :TRUE, :FALSE, :YES, :NO, :ON, :OFF, '!', '!!', :NOT, '=>', '==>']
 
     # The inverse mappings of token pairs we're trying to fix up.
     INVERSES = BALANCED_PAIRS.inject({}) do |memo, pair|

From a9f016e2926df0afb67649fdab372d4e0db18a12 Mon Sep 17 00:00:00 2001
From: Jeremy Ashkenas 
Date: Tue, 26 Jan 2010 10:52:05 -0500
Subject: [PATCH 25/32] trying out new arrows for function literals -> is a
 function, => is a bound function

---
 documentation/coffee/arguments.coffee         |   2 +-
 documentation/coffee/blocks.coffee            |   4 +-
 documentation/coffee/expressions.coffee       |   2 +-
 documentation/coffee/functions.coffee         |   4 +-
 documentation/coffee/long_arrow.coffee        |   4 +-
 .../coffee/multiple_return_values.coffee      |   2 +-
 documentation/coffee/overview.coffee          |   6 +-
 .../coffee/range_comprehensions.coffee        |   2 +-
 documentation/coffee/scope.coffee             |   2 +-
 documentation/coffee/splats.coffee            |   2 +-
 documentation/coffee/super.coffee             |  12 +-
 documentation/index.html.erb                  |   8 +-
 examples/beautiful_code/binary_search.coffee  |   2 +-
 .../beautiful_code/quicksort_runtime.coffee   |   2 +-
 .../regular_expression_matcher.coffee         |   6 +-
 examples/code.coffee                          |  34 ++--
 .../computer_science/binary_search.coffee     |   2 +-
 examples/computer_science/bubble_sort.coffee  |   2 +-
 examples/computer_science/linked_list.coffee  |  14 +-
 .../computer_science/luhn_algorithm.coffee    |   2 +-
 examples/computer_science/merge_sort.coffee   |   2 +-
 .../computer_science/selection_sort.coffee    |   2 +-
 examples/poignant.coffee                      |  30 +--
 examples/potion.coffee                        |  22 +--
 examples/underscore.coffee                    | 186 +++++++++---------
 extras/coffee.vim                             |   2 +-
 index.html                                    |   8 +-
 lib/coffee_script/grammar.y                   |   6 +-
 lib/coffee_script/lexer.rb                    |   2 +-
 .../narwhal/coffee-script.coffee              |  12 +-
 lib/coffee_script/narwhal/loader.coffee       |   6 +-
 lib/coffee_script/parser.rb                   |   6 +-
 lib/coffee_script/rewriter.rb                 |   6 +-
 test/fixtures/execution/test_arguments.coffee |   6 +-
 .../execution/test_array_comprehension.coffee |   2 +-
 .../fixtures/execution/test_assignment.coffee |   2 +-
 test/fixtures/execution/test_blocks.coffee    |   2 +-
 .../execution/test_calling_super.coffee       |  22 +--
 .../execution/test_chained_calls.coffee       |   4 +-
 .../fixtures/execution/test_everything.coffee |   4 +-
 test/fixtures/execution/test_existence.coffee |   2 +-
 .../execution/test_expressions.coffee         |   4 +-
 test/fixtures/execution/test_functions.coffee |  26 +--
 .../execution/test_funky_comments.coffee      |   4 +-
 test/fixtures/execution/test_literals.coffee  |   4 +-
 .../fixtures/execution/test_operations.coffee |   2 +-
 test/fixtures/execution/test_splats.coffee    |   4 +-
 test/fixtures/execution/test_switch.coffee    |   2 +-
 test/fixtures/generation/each.coffee          |   2 +-
 test/fixtures/generation/each.tokens          |   2 +-
 .../statements_as_expressions.coffee          |   2 +-
 test/fixtures/generation/whitespace.coffee    |  12 +-
 test/unit/test_lexer.rb                       |   4 +-
 test/unit/test_parser.rb                      |   2 +-
 54 files changed, 259 insertions(+), 259 deletions(-)

diff --git a/documentation/coffee/arguments.coffee b/documentation/coffee/arguments.coffee
index afee37415a..ac548c127b 100644
--- a/documentation/coffee/arguments.coffee
+++ b/documentation/coffee/arguments.coffee
@@ -1,4 +1,4 @@
-backwards: =>
+backwards: ->
   alert arguments.reverse()
 
 backwards "stairway", "to", "heaven"
\ No newline at end of file
diff --git a/documentation/coffee/blocks.coffee b/documentation/coffee/blocks.coffee
index a80196b306..16d9bc07ff 100644
--- a/documentation/coffee/blocks.coffee
+++ b/documentation/coffee/blocks.coffee
@@ -1,4 +1,4 @@
-$('table.list').each (table) =>
-  $('tr.account', table).each (row) =>
+$('table.list').each (table) ->
+  $('tr.account', table).each (row) ->
     row.show()
     row.highlight()
diff --git a/documentation/coffee/expressions.coffee b/documentation/coffee/expressions.coffee
index f74f84427e..74a02466df 100644
--- a/documentation/coffee/expressions.coffee
+++ b/documentation/coffee/expressions.coffee
@@ -1,4 +1,4 @@
-grade: (student) =>
+grade: (student) ->
   if student.excellent_work
     "A+"
   else if student.okay_stuff
diff --git a/documentation/coffee/functions.coffee b/documentation/coffee/functions.coffee
index 3d00c8f1b3..4fd48d32f7 100644
--- a/documentation/coffee/functions.coffee
+++ b/documentation/coffee/functions.coffee
@@ -1,2 +1,2 @@
-square: (x) => x * x
-cube:   (x) => square(x) * x
+square: (x) -> x * x
+cube:   (x) -> square(x) * x
diff --git a/documentation/coffee/long_arrow.coffee b/documentation/coffee/long_arrow.coffee
index 33356a1715..4b7759d37f 100644
--- a/documentation/coffee/long_arrow.coffee
+++ b/documentation/coffee/long_arrow.coffee
@@ -1,6 +1,6 @@
-Account: (customer, cart) =>
+Account: (customer, cart) ->
   this.customer: customer
   this.cart: cart
 
-  $('.shopping_cart').bind 'click', (event) ==>
+  $('.shopping_cart').bind 'click', (event) =>
     this.customer.purchase this.cart
\ No newline at end of file
diff --git a/documentation/coffee/multiple_return_values.coffee b/documentation/coffee/multiple_return_values.coffee
index 116f8b534c..3fe572b1d9 100644
--- a/documentation/coffee/multiple_return_values.coffee
+++ b/documentation/coffee/multiple_return_values.coffee
@@ -1,4 +1,4 @@
-weather_report: (location) =>
+weather_report: (location) ->
   # Make an Ajax request to fetch the weather...
   [location, 72, "Mostly Sunny"]
 
diff --git a/documentation/coffee/overview.coffee b/documentation/coffee/overview.coffee
index 0d8cd4d503..3156f840af 100644
--- a/documentation/coffee/overview.coffee
+++ b/documentation/coffee/overview.coffee
@@ -6,7 +6,7 @@ opposite_day: true
 number: -42 if opposite_day
 
 # Functions:
-square: (x) => x * x
+square: (x) -> x * x
 
 # Arrays:
 list: [1, 2, 3, 4, 5]
@@ -15,11 +15,11 @@ list: [1, 2, 3, 4, 5]
 math: {
   root:   Math.sqrt
   square: square
-  cube:   (x) => x * square x
+  cube:   (x) -> x * square x
 }
 
 # Splats:
-race: (winner, runners...) =>
+race: (winner, runners...) ->
   print winner, runners
 
 # Existence:
diff --git a/documentation/coffee/range_comprehensions.coffee b/documentation/coffee/range_comprehensions.coffee
index 8baa2e8787..33790f5a29 100644
--- a/documentation/coffee/range_comprehensions.coffee
+++ b/documentation/coffee/range_comprehensions.coffee
@@ -1,6 +1,6 @@
 countdown: num for num in [10..1]
 
-egg_delivery: =>
+egg_delivery: ->
   for i in [0...eggs.length] by 12
     dozen_eggs: eggs[i...i+12]
     deliver new egg_carton(dozen)
diff --git a/documentation/coffee/scope.coffee b/documentation/coffee/scope.coffee
index b074dad293..30eedacf8a 100644
--- a/documentation/coffee/scope.coffee
+++ b/documentation/coffee/scope.coffee
@@ -1,5 +1,5 @@
 num: 1
-change_numbers: =>
+change_numbers: ->
   new_num: -1
   num: 10
 new_num: change_numbers()
\ No newline at end of file
diff --git a/documentation/coffee/splats.coffee b/documentation/coffee/splats.coffee
index ad919a5ca1..ea27d0c102 100644
--- a/documentation/coffee/splats.coffee
+++ b/documentation/coffee/splats.coffee
@@ -1,6 +1,6 @@
 gold: silver: the_field: "unknown"
 
-medalists: (first, second, rest...) =>
+medalists: (first, second, rest...) ->
   gold:       first
   silver:     second
   the_field:  rest
diff --git a/documentation/coffee/super.coffee b/documentation/coffee/super.coffee
index 9dc4d5a294..b45faff0ff 100644
--- a/documentation/coffee/super.coffee
+++ b/documentation/coffee/super.coffee
@@ -1,16 +1,16 @@
-Animal: =>
-Animal::move: (meters) =>
+Animal: ->
+Animal::move: (meters) ->
   alert this.name + " moved " + meters + "m."
 
-Snake: (name) => this.name: name
+Snake: (name) -> this.name: name
 Snake extends Animal
-Snake::move: =>
+Snake::move: ->
   alert "Slithering..."
   super 5
 
-Horse: (name) => this.name: name
+Horse: (name) -> this.name: name
 Horse extends Animal
-Horse::move: =>
+Horse::move: ->
   alert "Galloping..."
   super 45
 
diff --git a/documentation/index.html.erb b/documentation/index.html.erb
index 34f23c02d2..6b91505ed6 100644
--- a/documentation/index.html.erb
+++ b/documentation/index.html.erb
@@ -174,7 +174,7 @@ gem install coffee-script
-e, --eval Compile and print a little snippet of CoffeeScript directly from the - command line (or from stdin). For example:
coffee -e "square: (x) => x * x" + command line (or from stdin). For example:
coffee -e "square: (x) -> x * x" @@ -256,13 +256,13 @@ coffee --print app/scripts/*.coffee > concatenation.js

Functions and Invocation Functions are defined by a list of parameters, an arrow, and the - function body. The empty function looks like this: =>. All + function body. The empty function looks like this: ->. All functions in CoffeeScript are named by default, for easier debugging.

<%= code_for('functions', 'cube(5)') %>

If you'd like to create an anonymous function, just wrap it in parentheses: - ((x) => x * x) + ((x) -> x * x)

@@ -547,7 +547,7 @@ coffee --print app/scripts/*.coffee > concatenation.js

Function binding - The long arrow ==> can be used to both define a function, and to bind + The long arrow => can be used to both define a function, and to bind it to the current value of this, right on the spot. This is helpful when using callback-based libraries like Prototype or jQuery, for creating iterator functions to pass to each, or event-handler functions diff --git a/examples/beautiful_code/binary_search.coffee b/examples/beautiful_code/binary_search.coffee index 2c65982526..9c6e02d1c1 100644 --- a/examples/beautiful_code/binary_search.coffee +++ b/examples/beautiful_code/binary_search.coffee @@ -2,7 +2,7 @@ # The implementation of binary search that is tested. # Return the index of an element in a sorted list. (or -1, if not present) -index: (list, target) => +index: (list, target) -> [low, high]: [0, list.length] while low < high mid: (low + high) >> 1 diff --git a/examples/beautiful_code/quicksort_runtime.coffee b/examples/beautiful_code/quicksort_runtime.coffee index 2d1dc0b68d..affd775a5e 100644 --- a/examples/beautiful_code/quicksort_runtime.coffee +++ b/examples/beautiful_code/quicksort_runtime.coffee @@ -1,7 +1,7 @@ # Beautiful Code, Chapter 3. # Produces the expected runtime of Quicksort, for every integer from 1 to N. -runtime: (N) => +runtime: (N) -> [sum, t]: [0, 0] for n in [1..N] sum += 2 * t diff --git a/examples/beautiful_code/regular_expression_matcher.coffee b/examples/beautiful_code/regular_expression_matcher.coffee index 7f67840277..4ef8237e11 100644 --- a/examples/beautiful_code/regular_expression_matcher.coffee +++ b/examples/beautiful_code/regular_expression_matcher.coffee @@ -3,7 +3,7 @@ # '.', '^', '$', and '*'. # Search for the regexp anywhere in the text. -match: (regexp, text) => +match: (regexp, text) -> return match_here(regexp.slice(1), text) if regexp[0] is '^' while text return true if match_here(regexp, text) @@ -11,7 +11,7 @@ match: (regexp, text) => false # Search for the regexp at the beginning of the text. -match_here: (regexp, text) => +match_here: (regexp, text) -> [cur, next]: [regexp[0], regexp[1]] if regexp.length is 0 then return true if next is '*' then return match_star(cur, regexp.slice(2), text) @@ -20,7 +20,7 @@ match_here: (regexp, text) => false # Search for a kleene star match at the beginning of the text. -match_star: (c, regexp, text) => +match_star: (c, regexp, text) -> while true return true if match_here(regexp, text) return false unless text and (text[0] is c or c is '.') diff --git a/examples/code.coffee b/examples/code.coffee index 105bdbe023..85b7516948 100644 --- a/examples/code.coffee +++ b/examples/code.coffee @@ -1,14 +1,14 @@ # Functions: -square: (x) => x * x +square: (x) -> x * x -sum: (x, y) => x + y +sum: (x, y) -> x + y -odd: (x) => x % 2 isnt 0 +odd: (x) -> x % 2 isnt 0 -even: (x) => x % 2 is 0 +even: (x) -> x % 2 is 0 -run_loop: => - fire_events((e) => e.stopPropagation()) +run_loop: -> + fire_events((e) -> e.stopPropagation()) listen() wait() @@ -22,14 +22,14 @@ spaced_out_multiline_object: { three: new Idea() inner_obj: { - freedom: => _.freedom() + freedom: -> _.freedom() } } # Arrays: stooges: [{moe: 45}, {curly: 43}, {larry: 46}] -exponents: [(x) => x, (x) => x * x, (x) => x * x * x] +exponents: [(x) -> x, (x) -> x * x, (x) -> x * x * x] empty: [] @@ -54,7 +54,7 @@ decoration: medal_of_honor if war_hero go_to_sleep() unless coffee # Returning early: -race: => +race: -> run() walk() crawl() @@ -103,7 +103,7 @@ while true # Lexical scoping. v_1: 5 -change_a_and_set_b: => +change_a_and_set_b: -> v_1: 10 v_2: 15 v_2: 20 @@ -128,7 +128,7 @@ activity: switch day else go_to_work() # Semicolons can optionally be used instead of newlines. -wednesday: => eat_breakfast(); go_to_work(); eat_dinner() +wednesday: -> eat_breakfast(); go_to_work(); eat_dinner() # Array slice literals. zero_to_nine: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] @@ -140,19 +140,19 @@ sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad." # Inheritance and calling super. -Animal: => -Animal::move: (meters) => +Animal: -> +Animal::move: (meters) -> alert(this.name + " moved " + meters + "m.") -Snake: (name) => this.name: name +Snake: (name) -> this.name: name Snake extends Animal -Snake::move: => +Snake::move: -> alert('Slithering...') super(5) -Horse: (name) => this.name: name +Horse: (name) -> this.name: name Horse extends Animal -Horse::move: => +Horse::move: -> alert('Galloping...') super(45) diff --git a/examples/computer_science/binary_search.coffee b/examples/computer_science/binary_search.coffee index 8b07f7a551..443eaaa0fe 100644 --- a/examples/computer_science/binary_search.coffee +++ b/examples/computer_science/binary_search.coffee @@ -1,5 +1,5 @@ # Uses a binary search algorithm to locate a value in the specified array. -binary_search: (items, value) => +binary_search: (items, value) -> start: 0 stop: items.length - 1 diff --git a/examples/computer_science/bubble_sort.coffee b/examples/computer_science/bubble_sort.coffee index 0d9a3aca39..f671bedd98 100644 --- a/examples/computer_science/bubble_sort.coffee +++ b/examples/computer_science/bubble_sort.coffee @@ -1,5 +1,5 @@ # A bubble sort implementation, sorting the given array in-place. -bubble_sort: (list) => +bubble_sort: (list) -> for i in [0...list.length] for j in [0...list.length - i] [list[j], list[j+1]]: [list[j+1], list[j]] if list[j] > list[j+1] diff --git a/examples/computer_science/linked_list.coffee b/examples/computer_science/linked_list.coffee index 8071f869f5..6af3fddfd0 100644 --- a/examples/computer_science/linked_list.coffee +++ b/examples/computer_science/linked_list.coffee @@ -1,11 +1,11 @@ # "Classic" linked list implementation that doesn't keep track of its size. -LinkedList: => +LinkedList: -> this._head: null # Pointer to the first item in the list. # Appends some data to the end of the list. This method traverses the existing # list and places the value at the end in a new node. -LinkedList::add: (data) => +LinkedList::add: (data) -> # Create a new node object to wrap the data. node: {data: data, next: null} @@ -20,7 +20,7 @@ LinkedList::add: (data) => # Retrieves the data at the given position in the list. -LinkedList::item: (index) => +LinkedList::item: (index) -> # Check for out-of-bounds values. return null if index < 0 @@ -36,7 +36,7 @@ LinkedList::item: (index) => # Remove the item from the given location in the list. -LinkedList::remove: (index) => +LinkedList::remove: (index) -> # Check for out-of-bounds values. return null if index < 0 @@ -60,7 +60,7 @@ LinkedList::remove: (index) => # Calculate the number of items in the list. -LinkedList::size: => +LinkedList::size: -> current: this._head count: 0 @@ -72,7 +72,7 @@ LinkedList::size: => # Convert the list into an array. -LinkedList::toArray: => +LinkedList::toArray: -> result: [] current: this._head @@ -84,7 +84,7 @@ LinkedList::toArray: => # The string representation of the linked list. -LinkedList::toString: => this.toArray().toString() +LinkedList::toString: -> this.toArray().toString() # Tests. diff --git a/examples/computer_science/luhn_algorithm.coffee b/examples/computer_science/luhn_algorithm.coffee index ce3a78da07..042b249d6c 100644 --- a/examples/computer_science/luhn_algorithm.coffee +++ b/examples/computer_science/luhn_algorithm.coffee @@ -2,7 +2,7 @@ # numbers, national insurance numbers, etc. # See: http://en.wikipedia.org/wiki/Luhn_algorithm -is_valid_identifier: (identifier) => +is_valid_identifier: (identifier) -> sum: 0 alt: false diff --git a/examples/computer_science/merge_sort.coffee b/examples/computer_science/merge_sort.coffee index 4df0a59db8..fb3f8ce8fc 100644 --- a/examples/computer_science/merge_sort.coffee +++ b/examples/computer_science/merge_sort.coffee @@ -1,5 +1,5 @@ # Sorts an array in ascending natural order using merge sort. -merge_sort: (list) => +merge_sort: (list) -> return list if list.length is 1 diff --git a/examples/computer_science/selection_sort.coffee b/examples/computer_science/selection_sort.coffee index c134b225d9..f4b970a14a 100644 --- a/examples/computer_science/selection_sort.coffee +++ b/examples/computer_science/selection_sort.coffee @@ -1,5 +1,5 @@ # An in-place selection sort. -selection_sort: (list) => +selection_sort: (list) -> len: list.length # For each item in the list. diff --git a/examples/poignant.coffee b/examples/poignant.coffee index 4347daead4..0754284a75 100644 --- a/examples/poignant.coffee +++ b/examples/poignant.coffee @@ -2,7 +2,7 @@ # ['toast', 'cheese', 'wine'].each { |food| print food.capitalize } -['toast', 'wine', 'cheese'].each (food) => print(food.capitalize()) +['toast', 'wine', 'cheese'].each (food) -> print(food.capitalize()) @@ -14,10 +14,10 @@ # end LotteryTicket: { - get_picks: => this.picks - set_picks: (nums) => this.picks: nums - get_purchase: => this.purchase - set_purchase: (amount) => this.purchase: amount + get_picks: -> this.picks + set_picks: (nums) -> this.picks: nums + get_purchase: -> this.purchase + set_purchase: (amount) -> this.purchase: amount } @@ -40,11 +40,11 @@ LotteryTicket: { # end LotteryDraw: { - play: => + play: -> result: LotteryTicket.new_random() winners: {} - this.tickets.each (buyer, ticket_list) => - ticket_list.each (ticket) => + this.tickets.each (buyer, ticket_list) -> + ticket_list.each (ticket) -> score: ticket.score(result) return if score is 0 winners[buyer] ||= [] @@ -65,8 +65,8 @@ LotteryDraw: { # end WishScanner: { - scan_for_a_wish: => - wish: this.read().detect((thought) => thought.index('wish: ') is 0) + scan_for_a_wish: -> + wish: this.read().detect((thought) -> thought.index('wish: ') is 0) wish.replace('wish: ', '') } @@ -111,7 +111,7 @@ WishScanner: { Creature : { # This method applies a hit taken during a fight. - hit: (damage) => + hit: (damage) -> p_up: Math.rand(this.charisma) if p_up % 9 is 7 this.life += p_up / 4 @@ -120,7 +120,7 @@ Creature : { if this.life <= 0 then puts("[" + this.name + " has died.]") # This method takes one turn in a fight. - fight: (enemy, weapon) => + fight: (enemy, weapon) -> if this.life <= 0 then return puts("[" + this.name + "is too dead to fight!]") # Attack the opponent. @@ -156,12 +156,12 @@ Creature : { # Get evil idea and swap in code words print("Enter your new idea: ") idea: gets() -code_words.each((real, code) => idea.replace(real, code)) +code_words.each((real, code) -> idea.replace(real, code)) # Save the jibberish to a new file print("File encoded. Please enter a name for this idea: ") idea_name: gets().strip() -File.open("idea-" + idea_name + '.txt', 'w', (file) => file.write(idea)) +File.open("idea-" + idea_name + '.txt', 'w', (file) -> file.write(idea)) @@ -177,7 +177,7 @@ File.open("idea-" + idea_name + '.txt', 'w', (file) => file.write(idea)) # end # end -wipe_mutterings_from: (sentence) => +wipe_mutterings_from: (sentence) -> throw new Error("cannot wipe mutterings") unless sentence.indexOf while sentence.indexOf('(') >= 0 open: sentence.indexOf('(') - 1 diff --git a/examples/potion.coffee b/examples/potion.coffee index ef9ac898ba..c8c5ddf9a3 100644 --- a/examples/potion.coffee +++ b/examples/potion.coffee @@ -8,7 +8,7 @@ print("Odelay!") for i in [1..5] # add = (x, y): x + y. # add(2, 4) string print -add: (x, y) => x + y +add: (x, y) -> x + y print(add(2, 4)) @@ -31,7 +31,7 @@ print({language: 'Potion', pointless: true}['language']) # minus = (x, y): x - y. # minus (y=10, x=6) -minus: (x, y) => x - y +minus: (x, y) -> x - y minus(6, 10) @@ -53,8 +53,8 @@ for key, val of {dog: 'canine', cat: 'feline', fox: 'vulpine'} # Person print = (): # ('My name is ', /name, '.') join print. -Person: => -Person::print: => +Person: -> +Person::print: -> print('My name is ' + this.name + '.') @@ -71,9 +71,9 @@ print(p.name) # # Policeman ('Constable') print -Policeman: (rank) => this.rank: rank +Policeman: (rank) -> this.rank: rank Policeman extends Person -Policeman::print: => +Policeman::print: -> print('My name is ' + this.name + " and I'm a " + this.rank + '.') print(new Policeman('Constable')) @@ -115,13 +115,13 @@ table: { # String length = (): 10. # this foul business... -String::length: => 10 +String::length: -> 10 # block = : # 'potion' print. -block: => +block: -> print('potion') @@ -178,7 +178,7 @@ if (3).gender? # HomePage get = (url): # session = url query ? at ('session'). -HomePage::get: (url) => +HomePage::get: (url) -> session: url.query.session if url.query? @@ -187,7 +187,7 @@ HomePage::get: (url) => # b /left = BTree () # b /right = BTree () -BTree: => +BTree: -> b: new BTree() b.left: new BTree() b.right: new BTree() @@ -199,7 +199,7 @@ b.right: new BTree() # if (b ? /left): # 'left path found!' print. -BTree: => +BTree: -> b: new BTree() print('left path found!') if b.left? diff --git a/examples/underscore.coffee b/examples/underscore.coffee index db87972311..7dbb763adc 100644 --- a/examples/underscore.coffee +++ b/examples/underscore.coffee @@ -21,7 +21,7 @@ # If Underscore is called as a function, it returns a wrapped object that # can be used OO-style. This wrapper holds altered versions of all the # underscore functions. Wrapped objects may be chained. - wrapper: (obj) => + wrapper: (obj) -> this._wrapped: obj this @@ -31,7 +31,7 @@ # Create a safe reference to the Underscore object forreference below. - _: root._: (obj) => new wrapper(obj) + _: root._: (obj) -> new wrapper(obj) # Export the Underscore object for CommonJS. @@ -54,7 +54,7 @@ # The cornerstone, an each implementation. # Handles objects implementing forEach, arrays, and raw objects. - _.each: (obj, iterator, context) => + _.each: (obj, iterator, context) -> index: 0 try return obj.forEach(iterator, context) if obj.forEach @@ -68,36 +68,36 @@ # Return the results of applying the iterator to each element. Use JavaScript # 1.6's version of map, if possible. - _.map: (obj, iterator, context) => + _.map: (obj, iterator, context) -> return obj.map(iterator, context) if (obj and _.isFunction(obj.map)) results: [] - _.each obj, (value, index, list) => + _.each obj, (value, index, list) -> results.push(iterator.call(context, value, index, list)) results # Reduce builds up a single result from a list of values. Also known as # inject, or foldl. Uses JavaScript 1.8's version of reduce, if possible. - _.reduce: (obj, memo, iterator, context) => + _.reduce: (obj, memo, iterator, context) -> return obj.reduce(_.bind(iterator, context), memo) if (obj and _.isFunction(obj.reduce)) - _.each obj, (value, index, list) => + _.each obj, (value, index, list) -> memo: iterator.call(context, memo, value, index, list) memo # The right-associative version of reduce, also known as foldr. Uses # JavaScript 1.8's version of reduceRight, if available. - _.reduceRight: (obj, memo, iterator, context) => + _.reduceRight: (obj, memo, iterator, context) -> return obj.reduceRight(_.bind(iterator, context), memo) if (obj and _.isFunction(obj.reduceRight)) - _.each _.clone(_.toArray(obj)).reverse(), (value, index) => + _.each _.clone(_.toArray(obj)).reverse(), (value, index) -> memo: iterator.call(context, memo, value, index, obj) memo # Return the first value which passes a truth test. - _.detect: (obj, iterator, context) => + _.detect: (obj, iterator, context) -> result: null - _.each obj, (value, index, list) => + _.each obj, (value, index, list) -> if iterator.call(context, value, index, list) result: value _.breakLoop() @@ -106,47 +106,47 @@ # Return all the elements that pass a truth test. Use JavaScript 1.6's # filter(), if it exists. - _.select: (obj, iterator, context) => + _.select: (obj, iterator, context) -> if obj and _.isFunction(obj.filter) then return obj.filter(iterator, context) results: [] - _.each obj, (value, index, list) => + _.each obj, (value, index, list) -> results.push(value) if iterator.call(context, value, index, list) results # Return all the elements for which a truth test fails. - _.reject: (obj, iterator, context) => + _.reject: (obj, iterator, context) -> results: [] - _.each obj, (value, index, list) => + _.each obj, (value, index, list) -> results.push(value) if not iterator.call(context, value, index, list) results # Determine whether all of the elements match a truth test. Delegate to # JavaScript 1.6's every(), if it is present. - _.all: (obj, iterator, context) => + _.all: (obj, iterator, context) -> iterator ||= _.identity return obj.every(iterator, context) if obj and _.isFunction(obj.every) result: true - _.each obj, (value, index, list) => + _.each obj, (value, index, list) -> _.breakLoop() unless (result: result and iterator.call(context, value, index, list)) result # Determine if at least one element in the object matches a truth test. Use # JavaScript 1.6's some(), if it exists. - _.any: (obj, iterator, context) => + _.any: (obj, iterator, context) -> iterator ||= _.identity return obj.some(iterator, context) if obj and _.isFunction(obj.some) result: false - _.each obj, (value, index, list) => + _.each obj, (value, index, list) -> _.breakLoop() if (result: iterator.call(context, value, index, list)) result # Determine if a given value is included in the array or object, # based on '==='. - _.include: (obj, target) => + _.include: (obj, target) -> return _.indexOf(obj, target) isnt -1 if _.isArray(obj) for key, val of obj return true if val is target @@ -154,41 +154,41 @@ # Invoke a method with arguments on every item in a collection. - _.invoke: (obj, method) => + _.invoke: (obj, method) -> args: _.rest(arguments, 2) (if method then val[method] else val).apply(val, args) for val in obj # Convenience version of a common use case of map: fetching a property. - _.pluck: (obj, key) => - _.map(obj, ((val) => val[key])) + _.pluck: (obj, key) -> + _.map(obj, ((val) -> val[key])) # Return the maximum item or (item-based computation). - _.max: (obj, iterator, context) => + _.max: (obj, iterator, context) -> return Math.max.apply(Math, obj) if not iterator and _.isArray(obj) result: {computed: -Infinity} - _.each obj, (value, index, list) => + _.each obj, (value, index, list) -> computed: if iterator then iterator.call(context, value, index, list) else value computed >= result.computed and (result: {value: value, computed: computed}) result.value # Return the minimum element (or element-based computation). - _.min: (obj, iterator, context) => + _.min: (obj, iterator, context) -> return Math.min.apply(Math, obj) if not iterator and _.isArray(obj) result: {computed: Infinity} - _.each obj, (value, index, list) => + _.each obj, (value, index, list) -> computed: if iterator then iterator.call(context, value, index, list) else value computed < result.computed and (result: {value: value, computed: computed}) result.value # Sort the object's values by a criteria produced by an iterator. - _.sortBy: (obj, iterator, context) => - _.pluck(((_.map obj, (value, index, list) => + _.sortBy: (obj, iterator, context) -> + _.pluck(((_.map obj, (value, index, list) -> {value: value, criteria: iterator.call(context, value, index, list)} - ).sort((left, right) => + ).sort((left, right) -> a: left.criteria; b: right.criteria if a < b then -1 else if a > b then 1 else 0 )), 'value') @@ -196,7 +196,7 @@ # Use a comparator function to figure out at what index an object should # be inserted so as to maintain order. Uses binary search. - _.sortedIndex: (array, obj, iterator) => + _.sortedIndex: (array, obj, iterator) -> iterator ||= _.identity low: 0; high: array.length while low < high @@ -206,7 +206,7 @@ # Convert anything iterable into a real, live array. - _.toArray: (iterable) => + _.toArray: (iterable) -> return [] if (!iterable) return iterable.toArray() if (iterable.toArray) return iterable if (_.isArray(iterable)) @@ -215,7 +215,7 @@ # Return the number of elements in an object. - _.size: (obj) => _.toArray(obj).length + _.size: (obj) -> _.toArray(obj).length # -------------------------- Array Functions: ------------------------------ @@ -223,7 +223,7 @@ # Get the first element of an array. Passing "n" will return the first N # values in the array. Aliased as "head". The "guard" check allows it to work # with _.map. - _.first: (array, n, guard) => + _.first: (array, n, guard) -> if n and not guard then slice.call(array, 0, n) else array[0] @@ -231,35 +231,35 @@ # Especially useful on the arguments object. Passing an "index" will return # the rest of the values in the array from that index onward. The "guard" # check allows it to work with _.map. - _.rest: (array, index, guard) => + _.rest: (array, index, guard) -> slice.call(array, if _.isUndefined(index) or guard then 1 else index) # Get the last element of an array. - _.last: (array) => array[array.length - 1] + _.last: (array) -> array[array.length - 1] # Trim out all falsy values from an array. - _.compact: (array) => array[i] for i in [0...array.length] when array[i] + _.compact: (array) -> array[i] for i in [0...array.length] when array[i] # Return a completely flattened version of an array. - _.flatten: (array) => - _.reduce array, [], (memo, value) => + _.flatten: (array) -> + _.reduce array, [], (memo, value) -> return memo.concat(_.flatten(value)) if _.isArray(value) memo.push(value) memo # Return a version of the array that does not contain the specified value(s). - _.without: (array) => + _.without: (array) -> values: _.rest(arguments) val for val in _.toArray(array) when not _.include(values, val) # Produce a duplicate-free version of the array. If the array has already # been sorted, you have the option of using a faster algorithm. - _.uniq: (array, isSorted) => + _.uniq: (array, isSorted) -> memo: [] for el, i in _.toArray(array) memo.push(el) if i is 0 || (if isSorted is true then _.last(memo) isnt el else not _.include(memo, el)) @@ -268,16 +268,16 @@ # Produce an array that contains every item shared between all the # passed-in arrays. - _.intersect: (array) => + _.intersect: (array) -> rest: _.rest(arguments) - _.select _.uniq(array), (item) => - _.all rest, (other) => + _.select _.uniq(array), (item) -> + _.all rest, (other) -> _.indexOf(other, item) >= 0 # Zip together multiple lists into a single array -- elements that share # an index go together. - _.zip: => + _.zip: -> length: _.max(_.pluck(arguments, 'length')) results: new Array(length) for i in [0...length] @@ -288,7 +288,7 @@ # If the browser doesn't supply us with indexOf (I'm looking at you, MSIE), # we need this function. Return the position of the first occurence of an # item in an array, or -1 if the item is not included in the array. - _.indexOf: (array, item) => + _.indexOf: (array, item) -> return array.indexOf(item) if array.indexOf i: 0; l: array.length while l - i @@ -298,7 +298,7 @@ # Provide JavaScript 1.6's lastIndexOf, delegating to the native function, # if possible. - _.lastIndexOf: (array, item) => + _.lastIndexOf: (array, item) -> return array.lastIndexOf(item) if array.lastIndexOf i: array.length while i @@ -309,7 +309,7 @@ # Generate an integer Array containing an arithmetic progression. A port of # the native Python range() function. See: # http://docs.python.org/library/functions.html#range - _.range: (start, stop, step) => + _.range: (start, stop, step) -> a: arguments solo: a.length <= 1 i: start: if solo then 0 else a[0]; @@ -330,44 +330,44 @@ # Create a function bound to a given object (assigning 'this', and arguments, # optionally). Binding with arguments is also known as 'curry'. - _.bind: (func, obj) => + _.bind: (func, obj) -> args: _.rest(arguments, 2) - => func.apply(obj or root, args.concat(arguments)) + -> func.apply(obj or root, args.concat(arguments)) # Bind all of an object's methods to that object. Useful for ensuring that # all callbacks defined on an object belong to it. - _.bindAll: (obj) => + _.bindAll: (obj) -> funcs: if arguments.length > 1 then _.rest(arguments) else _.functions(obj) - _.each(funcs, (f) => obj[f]: _.bind(obj[f], obj)) + _.each(funcs, (f) -> obj[f]: _.bind(obj[f], obj)) obj # Delays a function for the given number of milliseconds, and then calls # it with the arguments supplied. - _.delay: (func, wait) => + _.delay: (func, wait) -> args: _.rest(arguments, 2) - setTimeout((=> func.apply(func, args)), wait) + setTimeout((-> func.apply(func, args)), wait) # Defers a function, scheduling it to run after the current call stack has # cleared. - _.defer: (func) => + _.defer: (func) -> _.delay.apply(_, [func, 1].concat(_.rest(arguments))) # Returns the first function passed as an argument to the second, # allowing you to adjust arguments, run code before and after, and # conditionally execute the original function. - _.wrap: (func, wrapper) => - => wrapper.apply(wrapper, [func].concat(arguments)) + _.wrap: (func, wrapper) -> + -> wrapper.apply(wrapper, [func].concat(arguments)) # Returns a function that is the composition of a list of functions, each # consuming the return value of the function that follows. - _.compose: => + _.compose: -> funcs: arguments - => + -> args: arguments for i in [(funcs.length - 1)..0] args: [funcs[i].apply(this, args)] @@ -377,43 +377,43 @@ # ------------------------- Object Functions: ---------------------------- # Retrieve the names of an object's properties. - _.keys: (obj) => + _.keys: (obj) -> return _.range(0, obj.length) if _.isArray(obj) key for key, val of obj # Retrieve the values of an object's properties. - _.values: (obj) => + _.values: (obj) -> _.map(obj, _.identity) # Return a sorted list of the function names available in Underscore. - _.functions: (obj) => - _.select(_.keys(obj), (key) => _.isFunction(obj[key])).sort() + _.functions: (obj) -> + _.select(_.keys(obj), (key) -> _.isFunction(obj[key])).sort() # Extend a given object with all of the properties in a source object. - _.extend: (destination, source) => + _.extend: (destination, source) -> for key, val of source destination[key]: val destination # Create a (shallow-cloned) duplicate of an object. - _.clone: (obj) => + _.clone: (obj) -> return obj.slice(0) if _.isArray(obj) _.extend({}, obj) # Invokes interceptor with the obj, and then returns obj. # The primary purpose of this method is to "tap into" a method chain, in order to perform operations on intermediate results within the chain. - _.tap: (obj, interceptor) => + _.tap: (obj, interceptor) -> interceptor(obj) obj # Perform a deep comparison to check if two objects are equal. - _.isEqual: (a, b) => + _.isEqual: (a, b) -> # Check object identity. return true if a is b # Different types? @@ -449,81 +449,81 @@ # Is a given array or object empty? - _.isEmpty: (obj) => _.keys(obj).length is 0 + _.isEmpty: (obj) -> _.keys(obj).length is 0 # Is a given value a DOM element? - _.isElement: (obj) => obj and obj.nodeType is 1 + _.isElement: (obj) -> obj and obj.nodeType is 1 # Is a given value an array? - _.isArray: (obj) => !!(obj and obj.concat and obj.unshift) + _.isArray: (obj) -> !!(obj and obj.concat and obj.unshift) # Is a given variable an arguments object? - _.isArguments: (obj) => obj and _.isNumber(obj.length) and !_.isArray(obj) and !propertyIsEnumerable.call(obj, 'length') + _.isArguments: (obj) -> obj and _.isNumber(obj.length) and !_.isArray(obj) and !propertyIsEnumerable.call(obj, 'length') # Is the given value a function? - _.isFunction: (obj) => !!(obj and obj.constructor and obj.call and obj.apply) + _.isFunction: (obj) -> !!(obj and obj.constructor and obj.call and obj.apply) # Is the given value a string? - _.isString: (obj) => !!(obj is '' or (obj and obj.charCodeAt and obj.substr)) + _.isString: (obj) -> !!(obj is '' or (obj and obj.charCodeAt and obj.substr)) # Is a given value a number? - _.isNumber: (obj) => toString.call(obj) is '[object Number]' + _.isNumber: (obj) -> toString.call(obj) is '[object Number]' # Is a given value a Date? - _.isDate: (obj) => !!(obj and obj.getTimezoneOffset and obj.setUTCFullYear) + _.isDate: (obj) -> !!(obj and obj.getTimezoneOffset and obj.setUTCFullYear) # Is the given value a regular expression? - _.isRegExp: (obj) => !!(obj and obj.exec and (obj.ignoreCase or obj.ignoreCase is false)) + _.isRegExp: (obj) -> !!(obj and obj.exec and (obj.ignoreCase or obj.ignoreCase is false)) # Is the given value NaN -- this one is interesting. NaN != NaN, and # isNaN(undefined) == true, so we make sure it's a number first. - _.isNaN: (obj) => _.isNumber(obj) and window.isNaN(obj) + _.isNaN: (obj) -> _.isNumber(obj) and window.isNaN(obj) # Is a given value equal to null? - _.isNull: (obj) => obj is null + _.isNull: (obj) -> obj is null # Is a given variable undefined? - _.isUndefined: (obj) => typeof obj is 'undefined' + _.isUndefined: (obj) -> typeof obj is 'undefined' # -------------------------- Utility Functions: -------------------------- # Run Underscore.js in noConflict mode, returning the '_' variable to its # previous owner. Returns a reference to the Underscore object. - _.noConflict: => + _.noConflict: -> root._: previousUnderscore this # Keep the identity function around for default iterators. - _.identity: (value) => value + _.identity: (value) -> value # Break out of the middle of an iteration. - _.breakLoop: => throw breaker + _.breakLoop: -> throw breaker # Generate a unique integer id (unique within the entire client session). # Useful for temporary DOM ids. idCounter: 0 - _.uniqueId: (prefix) => + _.uniqueId: (prefix) -> (prefix or '') + idCounter++ # JavaScript templating a-la ERB, pilfered from John Resig's # "Secrets of the JavaScript Ninja", page 83. - _.template: (str, data) => + _.template: (str, data) -> `var fn = new Function('obj', 'var p=[],print=function(){p.push.apply(p,arguments);};' + 'with(obj){p.push(\'' + @@ -555,38 +555,38 @@ # /*------------------------ Setup the OOP Wrapper: --------------------------*/ # Helper function to continue chaining intermediate results. - result: (obj, chain) => + result: (obj, chain) -> if chain then _(obj).chain() else obj # Add all of the Underscore functions to the wrapper object. - _.each _.functions(_), (name) => + _.each _.functions(_), (name) -> method: _[name] - wrapper.prototype[name]: => + wrapper.prototype[name]: -> unshift.call(arguments, this._wrapped) result(method.apply(_, args), this._chain) # Add all mutator Array functions to the wrapper. - _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift']) (name) => + _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift']) (name) -> method: Array.prototype[name] - wrapper.prototype[name]: => + wrapper.prototype[name]: -> method.apply(this._wrapped, arguments) result(this._wrapped, this._chain) # Add all accessor Array functions to the wrapper. - _.each(['concat', 'join', 'slice']) (name) => + _.each(['concat', 'join', 'slice']) (name) -> method: Array.prototype[name] - wrapper.prototype[name]: => + wrapper.prototype[name]: -> result(method.apply(this._wrapped, arguments), this._chain) # Start chaining a wrapped Underscore object. - wrapper::chain: => + wrapper::chain: -> this._chain: true this # Extracts the result from a wrapped and chained object. - wrapper::value: => this._wrapped + wrapper::value: -> this._wrapped diff --git a/extras/coffee.vim b/extras/coffee.vim index e0999d89f4..5235d3cbe4 100644 --- a/extras/coffee.vim +++ b/extras/coffee.vim @@ -29,7 +29,7 @@ syn match coffeeNumber "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>" syn region coffeeRegexpString start=+/[^/*]+me=e-1 skip=+\\\\\|\\/+ end=+/[gi]\{0,2\}\s*$+ end=+/[gi]\{0,2\}\s*[;.,)\]}]+me=e-1 contains=@htmlPreproc oneline syn match coffeePrototypeAccess "::" -syn match coffeeFunction "=>" +syn match coffeeFunction "->" syn keyword coffeeExtends extends syn keyword coffeeConditional if else switch then diff --git a/index.html b/index.html index 5c8c1effe3..1447e18e33 100644 --- a/index.html +++ b/index.html @@ -271,7 +271,7 @@

Installation and Usage

-e, --eval Compile and print a little snippet of CoffeeScript directly from the - command line (or from stdin). For example:
coffee -e "square: (x) => x * x" + command line (or from stdin). For example:
coffee -e "square: (x) -> x * x" @@ -353,7 +353,7 @@

Language Reference

Functions and Invocation Functions are defined by a list of parameters, an arrow, and the - function body. The empty function looks like this: =>. All + function body. The empty function looks like this: ->. All functions in CoffeeScript are named by default, for easier debugging.

square: (x) => x * x
@@ -375,7 +375,7 @@ 

Language Reference

;alert(cube(5));'>run: cube(5)

If you'd like to create an anonymous function, just wrap it in parentheses: - ((x) => x * x) + ((x) -> x * x)

@@ -1304,7 +1304,7 @@

Language Reference

Function binding - The long arrow ==> can be used to both define a function, and to bind + The long arrow => can be used to both define a function, and to bind it to the current value of this, right on the spot. This is helpful when using callback-based libraries like Prototype or jQuery, for creating iterator functions to pass to each, or event-handler functions diff --git a/lib/coffee_script/grammar.y b/lib/coffee_script/grammar.y index 427a1564bf..06f8f9841c 100644 --- a/lib/coffee_script/grammar.y +++ b/lib/coffee_script/grammar.y @@ -39,7 +39,7 @@ prechigh left EXTENDS left '||=' '&&=' '?=' right ASSIGN RETURN - right '=>' '==>' UNLESS IF ELSE WHILE + right '->' '=>' UNLESS IF ELSE WHILE preclow rule @@ -207,8 +207,8 @@ rule # The symbols to signify functions, and bound functions. FuncGlyph: - '=>' { result = :func } - | '==>' { result = :boundfunc } + '->' { result = :func } + | '=>' { result = :boundfunc } ; # The parameters to a function definition. diff --git a/lib/coffee_script/lexer.rb b/lib/coffee_script/lexer.rb index df14f0a5fa..dfda26a9e7 100644 --- a/lib/coffee_script/lexer.rb +++ b/lib/coffee_script/lexer.rb @@ -27,7 +27,7 @@ class Lexer OPERATOR = /\A([+\*&|\/\-%=<>:!?]+)/ WHITESPACE = /\A([ \t]+)/ COMMENT = /\A(((\n?[ \t]*)?#.*$)+)/ - CODE = /\A(=?=>)/ + CODE = /\A((-|=)>)/ REGEX = /\A(\/(.*?)([^\\]|\\\\)\/[imgy]{0,4})/ MULTI_DENT = /\A((\n([ \t]*))+)(\.)?/ LAST_DENT = /\n([ \t]*)/ diff --git a/lib/coffee_script/narwhal/coffee-script.coffee b/lib/coffee_script/narwhal/coffee-script.coffee index ce0ba01122..e9f496493d 100644 --- a/lib/coffee_script/narwhal/coffee-script.coffee +++ b/lib/coffee_script/narwhal/coffee-script.coffee @@ -12,14 +12,14 @@ Readline: require('readline') coffeePath: File.path(module.path).dirname().dirname().dirname().dirname().dirname().join('bin', 'coffee') # Our general-purpose error handler. -checkForErrors: (coffeeProcess) => +checkForErrors: (coffeeProcess) -> return true if coffeeProcess.wait() is 0 system.stderr.print(coffeeProcess.stderr.read()) throw new Error("CoffeeScript compile error") # Run a simple REPL, round-tripping to the CoffeeScript compiler for every # command. -exports.run: (args) => +exports.run: (args) -> if args.length for path, i in args exports.evalCS(File.read(path)) @@ -35,24 +35,24 @@ exports.run: (args) => print(e) # Compile a given CoffeeScript file into JavaScript. -exports.compileFile: (path) => +exports.compileFile: (path) -> coffee: OS.popen([coffeePath, "--print", "--no-wrap", path]) checkForErrors(coffee) coffee.stdout.read() # Compile a string of CoffeeScript into JavaScript. -exports.compile: (source, flags) => +exports.compile: (source, flags) -> coffee: OS.popen([coffeePath, "--eval", "--no-wrap"].concat(flags or [])) coffee.stdin.write(source).flush().close() checkForErrors(coffee) coffee.stdout.read() # Evaluating a string of CoffeeScript first compiles it externally. -exports.evalCS: (source, flags) => +exports.evalCS: (source, flags) -> eval(exports.compile(source, flags)) # Make a factory for the CoffeeScript environment. -exports.makeNarwhalFactory: (path) => +exports.makeNarwhalFactory: (path) -> code: exports.compileFile(path) factoryText: "function(require,exports,module,system,print){" + code + "/**/\n}" if system.engine is "rhino" diff --git a/lib/coffee_script/narwhal/loader.coffee b/lib/coffee_script/narwhal/loader.coffee index 6f793a7336..5b80e7330d 100644 --- a/lib/coffee_script/narwhal/loader.coffee +++ b/lib/coffee_script/narwhal/loader.coffee @@ -6,12 +6,12 @@ factories: {} loader: { # Reload the coffee-script environment from source. - reload: (topId, path) => + reload: (topId, path) -> coffeescript ||= require('coffee-script') - factories[topId]: => coffeescript.makeNarwhalFactory(path) + factories[topId]: -> coffeescript.makeNarwhalFactory(path) # Ensure that the coffee-script environment is loaded. - load: (topId, path) => + load: (topId, path) -> factories[topId] ||= this.reload(topId, path) } diff --git a/lib/coffee_script/parser.rb b/lib/coffee_script/parser.rb index cf5821ee22..68ae61f816 100644 --- a/lib/coffee_script/parser.rb +++ b/lib/coffee_script/parser.rb @@ -1141,8 +1141,8 @@ def on_error(error_token_id, error_value, value_stack) "&&=" => 87, "?=" => 88, :ASSIGN => 89, - "=>" => 90, - "==>" => 91, + "->" => 90, + "=>" => 91, "\n" => 92, ";" => 93, "," => 94, @@ -1264,8 +1264,8 @@ def on_error(error_token_id, error_value, value_stack) "\"&&=\"", "\"?=\"", "ASSIGN", + "\"->\"", "\"=>\"", - "\"==>\"", "\"\\n\"", "\";\"", "\",\"", diff --git a/lib/coffee_script/rewriter.rb b/lib/coffee_script/rewriter.rb index b3d37338e1..6c5d60ce32 100644 --- a/lib/coffee_script/rewriter.rb +++ b/lib/coffee_script/rewriter.rb @@ -22,7 +22,7 @@ class Rewriter IMPLICIT_END = [:IF, :UNLESS, :FOR, :WHILE, "\n", :PARAM_START, :OUTDENT] IMPLICIT_CALL = [:IDENTIFIER, :NUMBER, :STRING, :JS, :REGEX, :NEW, :PARAM_START, :TRY, :DELETE, :INSTANCEOF, :TYPEOF, :SWITCH, :ARGUMENTS, - :TRUE, :FALSE, :YES, :NO, :ON, :OFF, '!', '!!', :NOT, '=>', '==>'] + :TRUE, :FALSE, :YES, :NO, :ON, :OFF, '!', '!!', :NOT, '->', '=>'] # The inverse mappings of token pairs we're trying to fix up. INVERSES = BALANCED_PAIRS.inject({}) do |memo, pair| @@ -33,7 +33,7 @@ class Rewriter # Single-line flavors of block expressions that have unclosed endings. # The grammar can't disambiguate them, so we insert the implicit indentation. - SINGLE_LINERS = [:ELSE, "=>", "==>", :TRY, :FINALLY, :THEN] + SINGLE_LINERS = [:ELSE, "->", "=>", :TRY, :FINALLY, :THEN] SINGLE_CLOSERS = ["\n", :CATCH, :FINALLY, :ELSE, :OUTDENT, :LEADING_WHEN, :PARAM_START] # Rewrite the token stream in multiple passes, one logical filter at @@ -193,7 +193,7 @@ def ensure_balance(*pairs) end # We'd like to support syntax like this: - # el.click((event) => + # el.click((event) -> # el.hide()) # In order to accomplish this, move outdents that follow closing parens # inwards, safely. The steps to accomplish this are: diff --git a/test/fixtures/execution/test_arguments.coffee b/test/fixtures/execution/test_arguments.coffee index 3a3156a97d..71a6c9c763 100644 --- a/test/fixtures/execution/test_arguments.coffee +++ b/test/fixtures/execution/test_arguments.coffee @@ -1,4 +1,4 @@ -area: (x, y, x1, y1) => +area: (x, y, x1, y1) -> (x - x1) * (x - y1) x: y: 10 @@ -18,14 +18,14 @@ print(area( # Arguments are turned into arrays. -curried: => +curried: -> print area.apply(this, arguments.concat(20, 20)) is 100 curried 10, 10 # Arguments is not a special keyword -- it can be assigned to: -func: => +func: -> arguments: 25 arguments diff --git a/test/fixtures/execution/test_array_comprehension.coffee b/test/fixtures/execution/test_array_comprehension.coffee index b5005bd650..03c1e1f76b 100644 --- a/test/fixtures/execution/test_array_comprehension.coffee +++ b/test/fixtures/execution/test_array_comprehension.coffee @@ -34,7 +34,7 @@ methods: ['one', 'two', 'three'] for method in methods name: method - obj[name]: => + obj[name]: -> "I'm " + name print obj.one() is "I'm one" diff --git a/test/fixtures/execution/test_assignment.coffee b/test/fixtures/execution/test_assignment.coffee index c1b5d127e3..3fd42dd8eb 100644 --- a/test/fixtures/execution/test_assignment.coffee +++ b/test/fixtures/execution/test_assignment.coffee @@ -12,7 +12,7 @@ print result is true and result2 is true # Assign to conditional. -get_x: => 10 +get_x: -> 10 if x: get_x() then 100 diff --git a/test/fixtures/execution/test_blocks.coffee b/test/fixtures/execution/test_blocks.coffee index 29ac5296b5..2efd8aa84e 100644 --- a/test/fixtures/execution/test_blocks.coffee +++ b/test/fixtures/execution/test_blocks.coffee @@ -1,4 +1,4 @@ -results: [1, 2, 3].map (x) => +results: [1, 2, 3].map (x) -> x * x print results.join(' ') is '1 4 9' \ No newline at end of file diff --git a/test/fixtures/execution/test_calling_super.coffee b/test/fixtures/execution/test_calling_super.coffee index 61ac4daca4..546744b236 100644 --- a/test/fixtures/execution/test_calling_super.coffee +++ b/test/fixtures/execution/test_calling_super.coffee @@ -1,21 +1,21 @@ -Base: => -Base::func: (string) => +Base: -> +Base::func: (string) -> 'zero/' + string -FirstChild: => +FirstChild: -> FirstChild extends Base -FirstChild::func: (string) => +FirstChild::func: (string) -> super('one/') + string -SecondChild: => +SecondChild: -> SecondChild extends FirstChild -SecondChild::func: (string) => +SecondChild::func: (string) -> super('two/') + string -ThirdChild: => +ThirdChild: -> this.array: [1, 2, 3] ThirdChild extends SecondChild -ThirdChild::func: (string) => +ThirdChild::func: (string) -> super('three/') + string result: (new ThirdChild()).func 'four' @@ -23,13 +23,13 @@ result: (new ThirdChild()).func 'four' print result is 'zero/one/two/three/four' -TopClass: (arg) => +TopClass: (arg) -> this.prop: 'top-' + arg -SuperClass: (arg) => +SuperClass: (arg) -> super 'super-' + arg -SubClass: => +SubClass: -> super 'sub' SuperClass extends TopClass diff --git a/test/fixtures/execution/test_chained_calls.coffee b/test/fixtures/execution/test_chained_calls.coffee index e3aab11dc6..8f0b704307 100644 --- a/test/fixtures/execution/test_chained_calls.coffee +++ b/test/fixtures/execution/test_chained_calls.coffee @@ -1,5 +1,5 @@ -identity_wrap: (x) => - => x +identity_wrap: (x) -> + -> x result: identity_wrap(identity_wrap(true))()() diff --git a/test/fixtures/execution/test_everything.coffee b/test/fixtures/execution/test_everything.coffee index fd5231e40f..c6b54b95df 100644 --- a/test/fixtures/execution/test_everything.coffee +++ b/test/fixtures/execution/test_everything.coffee @@ -1,4 +1,4 @@ -func: => +func: -> a: 3 b: [] @@ -9,7 +9,7 @@ func: => c: { "text": b other: null - something_else: (x) => x + 5 + something_else: (x) -> x + 5 } c: 'error' unless 42 > 41 diff --git a/test/fixtures/execution/test_existence.coffee b/test/fixtures/execution/test_existence.coffee index 16c64c74c5..253a8bf288 100644 --- a/test/fixtures/execution/test_existence.coffee +++ b/test/fixtures/execution/test_existence.coffee @@ -26,7 +26,7 @@ print z is null and x is "EX" # Only evaluate once. counter: 0 -get_next_node: => +get_next_node: -> throw "up" if counter counter++ diff --git a/test/fixtures/execution/test_expressions.coffee b/test/fixtures/execution/test_expressions.coffee index e8dea0c53b..9686d1a418 100644 --- a/test/fixtures/execution/test_expressions.coffee +++ b/test/fixtures/execution/test_expressions.coffee @@ -5,7 +5,7 @@ items: [1, 2, 3, "bacon", 4, 5] for item in items break if item is "bacon" -findit: (items) => +findit: (items) -> for item in items return item if item is "bacon" @@ -17,7 +17,7 @@ print findit(items) is "bacon" obj: { num: 5 - func: => + func: -> this.result: if false 10 else diff --git a/test/fixtures/execution/test_functions.coffee b/test/fixtures/execution/test_functions.coffee index 79eeb6e458..ecc2ea5653 100644 --- a/test/fixtures/execution/test_functions.coffee +++ b/test/fixtures/execution/test_functions.coffee @@ -1,6 +1,6 @@ x: 1 y: {} -y.x: => 3 +y.x: -> 3 print x is 1 print typeof(y.x) is 'function' @@ -9,17 +9,17 @@ print y.x.name is 'x' # The empty function should not cause a syntax error. -=> +-> obj: { name: "Fred" - bound: => - (==> print(this.name is "Fred"))() + bound: -> + (=> print(this.name is "Fred"))() - unbound: => - (=> print(!this.name?))() + unbound: -> + (-> print(!this.name?))() } obj.unbound() @@ -29,18 +29,18 @@ obj.bound() # The named function should be cleared out before a call occurs: # Python decorator style wrapper that memoizes any function -memoize: (fn) => +memoize: (fn) -> cache: {} self: this - (args...) => + (args...) -> key: args.toString() return cache[key] if cache[key] cache[key] = fn.apply(self, args) Math: { - Add: (a, b) => a + b - AnonymousAdd: ((a, b) => a + b) - FastAdd: memoize (a, b) => a + b + Add: (a, b) -> a + b + AnonymousAdd: ((a, b) -> a + b) + FastAdd: memoize (a, b) -> a + b } print Math.Add(5, 5) is 10 @@ -53,5 +53,5 @@ print 100 > 1 if 1 > 0 print true unless false print true for i in [1..3] -print_func: (f) => print(f()) -print_func => true \ No newline at end of file +print_func: (f) -> print(f()) +print_func -> true \ No newline at end of file diff --git a/test/fixtures/execution/test_funky_comments.coffee b/test/fixtures/execution/test_funky_comments.coffee index 8acaafd8f8..9fbc030e98 100644 --- a/test/fixtures/execution/test_funky_comments.coffee +++ b/test/fixtures/execution/test_funky_comments.coffee @@ -1,5 +1,5 @@ # comment -func: => +func: -> # comment false false # comment @@ -14,7 +14,7 @@ switch 'string' when null something_else() -=> +-> code() # comment diff --git a/test/fixtures/execution/test_literals.coffee b/test/fixtures/execution/test_literals.coffee index 3f92a5842d..c462b565f1 100644 --- a/test/fixtures/execution/test_literals.coffee +++ b/test/fixtures/execution/test_literals.coffee @@ -1,4 +1,4 @@ -a: [(x) => x, (x) => x * x] +a: [(x) -> x, (x) -> x * x] print a.length is 2 @@ -14,7 +14,7 @@ neg: (3 -4) print neg is -1 -func: => +func: -> return if true print func() is null diff --git a/test/fixtures/execution/test_operations.coffee b/test/fixtures/execution/test_operations.coffee index 9f0d51db94..86332804ca 100644 --- a/test/fixtures/execution/test_operations.coffee +++ b/test/fixtures/execution/test_operations.coffee @@ -13,6 +13,6 @@ print 50 > 10 > 5 is parseInt('5', 10) # more than once. i: 0 -func: => i++ +func: -> i++ print 1 > func() < 1 diff --git a/test/fixtures/execution/test_splats.coffee b/test/fixtures/execution/test_splats.coffee index 58338adcc0..18083d894f 100644 --- a/test/fixtures/execution/test_splats.coffee +++ b/test/fixtures/execution/test_splats.coffee @@ -1,4 +1,4 @@ -func: (first, second, rest...) => +func: (first, second, rest...) -> rest.join ' ' result: func 1, 2, 3, 4, 5 @@ -8,7 +8,7 @@ print result is "3 4 5" gold: silver: bronze: the_field: null -medalists: (first, second, third, rest...) => +medalists: (first, second, third, rest...) -> gold: first silver: second bronze: third diff --git a/test/fixtures/execution/test_switch.coffee b/test/fixtures/execution/test_switch.coffee index a978faf96f..3911f043f8 100644 --- a/test/fixtures/execution/test_switch.coffee +++ b/test/fixtures/execution/test_switch.coffee @@ -16,7 +16,7 @@ result: switch num print result -func: (num) => +func: (num) -> switch num when 2, 4, 6 true diff --git a/test/fixtures/generation/each.coffee b/test/fixtures/generation/each.coffee index 544f96ed67..9b76b97694 100644 --- a/test/fixtures/generation/each.coffee +++ b/test/fixtures/generation/each.coffee @@ -1,6 +1,6 @@ # The cornerstone, an each implementation. # Handles objects implementing forEach, arrays, and raw objects. -_.each: (obj, iterator, context) => +_.each: (obj, iterator, context) -> index: 0 try if obj.forEach diff --git a/test/fixtures/generation/each.tokens b/test/fixtures/generation/each.tokens index 9244f37d7a..1f5761c444 100644 --- a/test/fixtures/generation/each.tokens +++ b/test/fixtures/generation/each.tokens @@ -1 +1 @@ -[[:COMMENT, [" The cornerstone, an each implementation.", " Handles objects implementing forEach, arrays, and raw objects."]], ["\n", "\n"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "each"], [:ASSIGN, ":"], [:PARAM_START, "("], [:PARAM, "obj"], [",", ","], [:PARAM, "iterator"], [",", ","], [:PARAM, "context"], [:PARAM_END, ")"], ["=>", "=>"], [:INDENT, 2], [:IDENTIFIER, "index"], [:ASSIGN, ":"], [:NUMBER, "0"], ["\n", "\n"], [:TRY, "try"], [:INDENT, 2], [:IF, "if"], [:IDENTIFIER, "obj"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "forEach"], [:INDENT, 2], [:IDENTIFIER, "obj"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "forEach"], ["(", "("], [:IDENTIFIER, "iterator"], [",", ","], [:IDENTIFIER, "context"], [")", ")"], [:OUTDENT, 2], [:ELSE, "else"], [:IF, "if"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "isArray"], ["(", "("], [:IDENTIFIER, "obj"], [")", ")"], [:OR, "or"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "isArguments"], ["(", "("], [:IDENTIFIER, "obj"], [")", ")"], [:INDENT, 2], [:IDENTIFIER, "iterator"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "call"], ["(", "("], [:IDENTIFIER, "context"], [",", ","], [:IDENTIFIER, "item"], [",", ","], [:IDENTIFIER, "i"], [",", ","], [:IDENTIFIER, "obj"], [")", ")"], [:FOR, "for"], [:IDENTIFIER, "item"], [",", ","], [:IDENTIFIER, "i"], [:IN, "in"], [:IDENTIFIER, "obj"], [:OUTDENT, 2], [:ELSE, "else"], [:INDENT, 2], [:IDENTIFIER, "iterator"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "call"], ["(", "("], [:IDENTIFIER, "context"], [",", ","], [:IDENTIFIER, "obj"], ["[", "["], [:IDENTIFIER, "key"], ["]", "]"], [",", ","], [:IDENTIFIER, "key"], [",", ","], [:IDENTIFIER, "obj"], [")", ")"], [:FOR, "for"], [:IDENTIFIER, "key"], [:IN, "in"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "keys"], ["(", "("], [:IDENTIFIER, "obj"], [")", ")"], [:OUTDENT, 2], [:OUTDENT, 2], [:CATCH, "catch"], [:IDENTIFIER, "e"], [:INDENT, 2], [:THROW, "throw"], [:IDENTIFIER, "e"], [:IF, "if"], [:IDENTIFIER, "e"], [:ISNT, "isnt"], [:IDENTIFIER, "breaker"], [:OUTDENT, 2], ["\n", "\n"], [:IDENTIFIER, "obj"], [:OUTDENT, 2], ["\n", "\n"]] \ No newline at end of file +[[:COMMENT, [" The cornerstone, an each implementation.", " Handles objects implementing forEach, arrays, and raw objects."]], ["\n", "\n"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "each"], [:ASSIGN, ":"], [:PARAM_START, "("], [:PARAM, "obj"], [",", ","], [:PARAM, "iterator"], [",", ","], [:PARAM, "context"], [:PARAM_END, ")"], ["->", "->"], [:INDENT, 2], [:IDENTIFIER, "index"], [:ASSIGN, ":"], [:NUMBER, "0"], ["\n", "\n"], [:TRY, "try"], [:INDENT, 2], [:IF, "if"], [:IDENTIFIER, "obj"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "forEach"], [:INDENT, 2], [:IDENTIFIER, "obj"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "forEach"], ["(", "("], [:IDENTIFIER, "iterator"], [",", ","], [:IDENTIFIER, "context"], [")", ")"], [:OUTDENT, 2], [:ELSE, "else"], [:IF, "if"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "isArray"], ["(", "("], [:IDENTIFIER, "obj"], [")", ")"], [:OR, "or"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "isArguments"], ["(", "("], [:IDENTIFIER, "obj"], [")", ")"], [:INDENT, 2], [:IDENTIFIER, "iterator"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "call"], ["(", "("], [:IDENTIFIER, "context"], [",", ","], [:IDENTIFIER, "item"], [",", ","], [:IDENTIFIER, "i"], [",", ","], [:IDENTIFIER, "obj"], [")", ")"], [:FOR, "for"], [:IDENTIFIER, "item"], [",", ","], [:IDENTIFIER, "i"], [:IN, "in"], [:IDENTIFIER, "obj"], [:OUTDENT, 2], [:ELSE, "else"], [:INDENT, 2], [:IDENTIFIER, "iterator"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "call"], ["(", "("], [:IDENTIFIER, "context"], [",", ","], [:IDENTIFIER, "obj"], ["[", "["], [:IDENTIFIER, "key"], ["]", "]"], [",", ","], [:IDENTIFIER, "key"], [",", ","], [:IDENTIFIER, "obj"], [")", ")"], [:FOR, "for"], [:IDENTIFIER, "key"], [:IN, "in"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "keys"], ["(", "("], [:IDENTIFIER, "obj"], [")", ")"], [:OUTDENT, 2], [:OUTDENT, 2], [:CATCH, "catch"], [:IDENTIFIER, "e"], [:INDENT, 2], [:THROW, "throw"], [:IDENTIFIER, "e"], [:IF, "if"], [:IDENTIFIER, "e"], [:ISNT, "isnt"], [:IDENTIFIER, "breaker"], [:OUTDENT, 2], ["\n", "\n"], [:IDENTIFIER, "obj"], [:OUTDENT, 2], ["\n", "\n"]] \ No newline at end of file diff --git a/test/fixtures/generation/statements_as_expressions.coffee b/test/fixtures/generation/statements_as_expressions.coffee index a9ddccb059..56baa37469 100644 --- a/test/fixtures/generation/statements_as_expressions.coffee +++ b/test/fixtures/generation/statements_as_expressions.coffee @@ -10,7 +10,7 @@ catch error 3 ) -func: (x) => +func: (x) -> return throw x print(x * x for x in [1..100]) \ No newline at end of file diff --git a/test/fixtures/generation/whitespace.coffee b/test/fixtures/generation/whitespace.coffee index 94f816d45c..781af19b6e 100644 --- a/test/fixtures/generation/whitespace.coffee +++ b/test/fixtures/generation/whitespace.coffee @@ -1,20 +1,20 @@ # test -f1: (x) => +f1: (x) -> x * x - f2: (y) => + f2: (y) -> y * x f3: 3 # Parens can close on the proper level. -elements.each((el) => - el.click((event) => +elements.each((el) -> + el.click((event) -> el.reset() el.show() if event.active ) ) # Or, parens can close blocks early. -elements.each((el) => - el.click((event) => +elements.each((el) -> + el.click((event) -> el.reset() el.show() if event.active)) \ No newline at end of file diff --git a/test/unit/test_lexer.rb b/test/unit/test_lexer.rb index e9f10ac99d..568d2986cf 100644 --- a/test/unit/test_lexer.rb +++ b/test/unit/test_lexer.rb @@ -25,10 +25,10 @@ def test_lexing_object_literal end def test_lexing_function_definition - code = "(x, y) => x * y" + code = "(x, y) -> x * y" assert @lex.tokenize(code) == [[:PARAM_START, "("], [:PARAM, "x"], [",", ","], [:PARAM, "y"], [:PARAM_END, ")"], - ["=>", "=>"], [:INDENT, 2], [:IDENTIFIER, "x"], ["*", "*"], + ["->", "->"], [:INDENT, 2], [:IDENTIFIER, "x"], ["*", "*"], [:IDENTIFIER, "y"], [:OUTDENT, 2], ["\n", "\n"]] end diff --git a/test/unit/test_parser.rb b/test/unit/test_parser.rb index 8e8738ff3e..1a95ae84fb 100644 --- a/test/unit/test_parser.rb +++ b/test/unit/test_parser.rb @@ -29,7 +29,7 @@ def test_parsing_an_object_literal end def test_parsing_an_function_definition - code = @par.parse("(x, y) => x * y").expressions.first + code = @par.parse("(x, y) -> x * y").expressions.first assert code.params == ['x', 'y'] body = code.body.expressions.first assert body.is_a?(OpNode) From 3775f682de40728eef0eba7c64e499665d8fad83 Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Tue, 26 Jan 2010 10:54:49 -0500 Subject: [PATCH 26/32] updated textmate highlighter for new function literal syntax --- .../CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/extras/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage b/extras/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage index 7cba868cea..49082c8a1b 100644 --- a/extras/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage +++ b/extras/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage @@ -41,9 +41,9 @@ comment - match stuff like: a => … + match stuff like: a -> … match - (\()([a-zA-Z0-9_?.$]*(,\s*[a-zA-Z0-9_?.$]+)*)(\))\s*(=+>) + (\()([a-zA-Z0-9_?.$]*(,\s*[a-zA-Z0-9_?.$]+)*)(\))\s*((=|-)>) name meta.inline.function.coffee @@ -294,7 +294,7 @@ match - =+> + (=|-)> name storage.type.function.coffee From ab4a4a55802b310d34c6ea78da2a918e33827443 Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Tue, 26 Jan 2010 14:49:33 -0500 Subject: [PATCH 27/32] make nested implicit indentation just a little bit smarter about outdents and stack levels --- lib/coffee_script/rewriter.rb | 6 +++++- test/fixtures/execution/test_functions.coffee | 11 ++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/coffee_script/rewriter.rb b/lib/coffee_script/rewriter.rb index 6c5d60ce32..7769694f87 100644 --- a/lib/coffee_script/rewriter.rb +++ b/lib/coffee_script/rewriter.rb @@ -158,6 +158,10 @@ def add_implicit_parentheses stack = [0] scan_tokens do |prev, token, post, i| stack.push(0) if token[0] == :INDENT + if token[0] == :OUTDENT + last = stack.pop + stack[-1] += last + end if (stack.last > 0 && (IMPLICIT_END.include?(token[0]) || post.nil?)) && !(token[0] == :PARAM_START && prev[0] == ',') idx = token[0] == :OUTDENT ? i + 1 : i @@ -165,7 +169,6 @@ def add_implicit_parentheses size, stack[-1] = stack[-1] + 1, 0 next size end - stack.pop if token[0] == :OUTDENT next 1 unless IMPLICIT_FUNC.include?(prev[0]) && IMPLICIT_CALL.include?(token[0]) @tokens.insert(i, ['(', Value.new('(', token[1].line)]) stack[-1] += 1 @@ -176,6 +179,7 @@ def add_implicit_parentheses # Ensure that all listed pairs of tokens are correctly balanced throughout # the course of the token stream. def ensure_balance(*pairs) + puts "\nbefore ensure_balance: #{@tokens.inspect}" if ENV['VERBOSE'] levels, lines = Hash.new(0), Hash.new scan_tokens do |prev, token, post, i| pairs.each do |pair| diff --git a/test/fixtures/execution/test_functions.coffee b/test/fixtures/execution/test_functions.coffee index ecc2ea5653..9fe19c8b39 100644 --- a/test/fixtures/execution/test_functions.coffee +++ b/test/fixtures/execution/test_functions.coffee @@ -54,4 +54,13 @@ print true unless false print true for i in [1..3] print_func: (f) -> print(f()) -print_func -> true \ No newline at end of file +print_func -> true + +# Optional parens can be used in a nested fashion. +call: (func) -> func() + +result: call -> + inner: call -> + Math.Add(5, 5) + +print result is 10 From aa93d3c38793e71766291d34d113be4b1b0bba13 Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Tue, 26 Jan 2010 20:59:52 -0500 Subject: [PATCH 28/32] first draft of whitespace-sensitive method calls and indexes. --- lib/coffee_script/grammar.y | 19 +- lib/coffee_script/lexer.rb | 9 + lib/coffee_script/parser.rb | 2532 +++++++++++++------------- lib/coffee_script/rewriter.rb | 37 +- test/fixtures/generation/each.tokens | 2 +- test/unit/test_lexer.rb | 4 +- 6 files changed, 1330 insertions(+), 1273 deletions(-) diff --git a/lib/coffee_script/grammar.y b/lib/coffee_script/grammar.y index 06f8f9841c..72a6550450 100644 --- a/lib/coffee_script/grammar.y +++ b/lib/coffee_script/grammar.y @@ -6,6 +6,7 @@ token NUMBER STRING REGEX token TRUE FALSE YES NO ON OFF token IDENTIFIER PROPERTY_ACCESS PROTOTYPE_ACCESS SOAK_ACCESS token CODE PARAM_START PARAM PARAM_END NEW RETURN +token CALL_START CALL_END INDEX_START INDEX_END token TRY CATCH FINALLY THROW token BREAK CONTINUE token FOR IN OF BY WHEN WHILE @@ -246,12 +247,12 @@ rule | PROTOTYPE_ACCESS IDENTIFIER { result = AccessorNode.new(val[1], :prototype) } | SOAK_ACCESS IDENTIFIER { result = AccessorNode.new(val[1], :soak) } | Index { result = val[0] } - | Range { result = SliceNode.new(val[0]) } + | Slice { result = SliceNode.new(val[0]) } ; # Indexing into an object or array. Index: - "[" Expression "]" { result = IndexNode.new(val[1]) } + INDEX_START Expression INDEX_END { result = IndexNode.new(val[1]) } ; # An object literal. @@ -290,13 +291,13 @@ rule # The list of arguments to a function invocation. Arguments: - "(" ArgList ")" { result = val[1] } - | "(" ArgList ")" Code { result = val[1] << val[3] } + CALL_START ArgList CALL_END { result = val[1] } + | CALL_START ArgList CALL_END Code { result = val[1] << val[3] } ; # Calling super. Super: - SUPER "(" ArgList ")" { result = CallNode.new(Value.new('super'), val[2]) } + SUPER CALL_START ArgList CALL_END { result = CallNode.new(Value.new('super'), val[2]) } ; # The range literal. @@ -307,6 +308,14 @@ rule "." "." "." Expression "]" { result = RangeNode.new(val[1], val[5], true) } ; + # The slice literal. + Slice: + INDEX_START Expression "." "." + Expression INDEX_END { result = RangeNode.new(val[1], val[4]) } + | INDEX_START Expression "." "." "." + Expression INDEX_END { result = RangeNode.new(val[1], val[5], true) } + ; + # The array literal. Array: "[" ArgList "]" { result = ArrayNode.new(val[1]) } diff --git a/lib/coffee_script/lexer.rb b/lib/coffee_script/lexer.rb index dfda26a9e7..ecb56021ba 100644 --- a/lib/coffee_script/lexer.rb +++ b/lib/coffee_script/lexer.rb @@ -50,6 +50,9 @@ class Lexer :FALSE, :NULL, :TRUE ] + # Tokens which could legitimately be invoked or indexed. + CALLABLE = [:IDENTIFIER, :SUPER, ')', ']', '}', :STRING] + # Scan by attempting to match tokens one character at a time. Slow and steady. def tokenize(code) @code = code.chomp # Cleanup code by remove extra line breaks @@ -58,6 +61,7 @@ def tokenize(code) @indent = 0 # The current indent level. @indents = [] # The stack of all indent levels we are currently within. @tokens = [] # Collection of all parsed tokens in the form [:TOKEN_TYPE, value] + @spaced = nil # The last value that has a space following it. while @i < @code.length @chunk = @code[@i..-1] extract_next_token @@ -190,6 +194,7 @@ def outdent_token(move_out) # Matches and consumes non-meaningful whitespace. def whitespace_token return false unless whitespace = @chunk[WHITESPACE, 1] + @spaced = last_value @i += whitespace.length end @@ -214,6 +219,10 @@ def literal_token tag_parameters if value && value.match(CODE) value ||= @chunk[0,1] tag = value.match(ASSIGNMENT) ? :ASSIGN : value + if !@spaced.equal?(last_value) && CALLABLE.include?(last_tag) + tag = :CALL_START if value == '(' + tag = :INDEX_START if value == '[' + end token(tag, value) @i += value.length end diff --git a/lib/coffee_script/parser.rb b/lib/coffee_script/parser.rb index 68ae61f816..a88d4570c4 100644 --- a/lib/coffee_script/parser.rb +++ b/lib/coffee_script/parser.rb @@ -10,7 +10,7 @@ module CoffeeScript class Parser < Racc::Parser -module_eval(<<'...end grammar.y/module_eval...', 'grammar.y', 450) +module_eval(<<'...end grammar.y/module_eval...', 'grammar.y', 459) # Lex and parse a CoffeeScript. def parse(code) # Uncomment the following line to enable grammar debugging, in combination @@ -34,322 +34,313 @@ def on_error(error_token_id, error_value, value_stack) ##### State transition tables begin ### clist = [ -'119,37,127,21,24,25,29,34,39,44,48,51,55,132,202,203,284,284,255,-181', -'-181,172,276,277,27,27,35,40,142,146,83,85,86,120,195,196,37,135,173', -'132,1,19,75,132,32,115,118,132,308,-181,-181,56,59,115,118,123,126,130', -'134,138,141,145,149,152,114,117,122,125,129,133,137,140,144,148,151', -'113,116,121,124,128,131,136,139,143,147,150,112,83,85,86,83,85,86,2', -'171,8,7,15,194,21,24,25,29,34,39,44,48,51,55,7,87,56,59,1,80,174,14', -'18,22,95,174,30,35,40,42,276,277,94,182,61,66,286,3,37,9,11,132,19,201', -'27,32,37,-181,-181,95,50,53,57,62,70,72,37,94,37,37,17,64,68,27,64,68', -'176,132,177,64,68,176,87,115,118,87,80,269,198,80,83,85,86,64,68,83', -'85,86,27,56,59,83,85,86,2,154,8,7,15,263,21,24,25,29,34,39,44,48,51', -'55,64,68,161,200,1,64,68,14,18,22,132,298,30,35,40,42,-181,-181,174', -'95,61,66,260,3,270,9,11,94,19,37,27,32,77,64,68,189,50,53,57,62,70,72', -'64,68,280,284,17,64,68,159,87,202,203,27,80,87,299,272,27,80,91,87,64', -'68,176,80,64,68,189,183,261,132,190,95,104,56,59,-181,-181,37,2,94,8', -'7,15,97,21,24,25,29,34,39,44,48,51,55,273,192,37,95,1,191,110,14,18', -'22,234,94,30,35,40,42,27,154,91,310,61,66,184,3,75,9,11,132,19,110,27', -'32,,115,118,,50,53,57,62,70,72,27,132,,,17,,,115,118,123,126,130,134', -'138,141,145,149,152,114,117,122,125,129,133,137,140,144,148,,132,,,', -'56,59,-181,-181,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14', -'18,22,132,,30,35,40,42,-181,-181,,,61,66,,3,,9,11,,19,,27,32,,,,,50', -'53,57,62,70,72,132,,,,17,,115,118,123,126,130,134,138,141,145,149,152', -'114,117,122,125,129,133,137,140,144,148,,,,,,,56,59,,,,2,,8,7,15,,21', -'24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66', -',3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,132,,,,17,,115,118,123,126', -'130,134,138,141,145,149,152,114,117,122,125,129,133,137,140,144,148', -',,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18', -'22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72', -'132,,,,17,,115,118,123,126,130,134,138,141,145,149,152,114,117,122,125', -'129,133,137,140,144,148,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39', -'44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27', -'32,,,,,50,53,57,62,70,72,132,,,,17,,115,118,123,126,130,134,138,141', -'145,149,152,114,117,122,125,129,133,137,140,144,148,,,,,,,56,59,,,,2', -',8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42', -',,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,132,,,,17,,115,118', -'123,126,130,134,138,141,145,149,152,114,117,122,125,129,133,137,140', -'144,148,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,', -'1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57', -'62,70,72,132,,,,17,,115,118,123,126,130,134,138,141,145,149,152,114', -'117,122,125,129,133,137,140,144,148,,,,,,,56,59,,,,2,,8,7,15,,21,24', -'25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3', -',9,11,,19,,27,32,,,,,50,53,57,62,70,72,132,,,,17,,115,118,123,126,130', -'134,138,141,145,149,152,114,117,122,125,129,133,137,140,144,148,,,,', -',,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22', -',,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,132', -',,,17,,115,118,123,126,130,134,138,141,145,149,152,114,117,132,,,,,', -'115,118,123,126,130,134,138,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44', -'48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32', -',,,,50,53,57,62,70,72,132,,,,17,,115,118,123,126,130,134,138,141,145', -'149,152,114,117,132,,,,,,115,118,123,126,130,134,138,,56,59,,,,2,,8', -'7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,', -',,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,132,,,,17,,115,118', -'123,126,130,134,138,141,145,149,152,114,117,132,,,,,,115,118,123,126', -'130,134,138,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1', -',,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57', -'62,70,72,132,,,,17,,115,118,123,126,130,134,138,141,145,149,152,114', -'117,132,,,,,,115,118,123,126,130,,,,56,59,,,,2,,8,7,15,,21,24,25,29', -'34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11', -',19,,27,32,,,,,50,53,57,62,70,72,132,,,,17,,115,118,123,126,130,134', -'138,141,145,149,132,,,,,,115,118,123,126,130,134,138,141,145,149,,56', -'59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30', -'35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,132,,,', -'17,,115,118,123,126,130,134,138,141,145,149,132,,,,,,115,118,123,126', -'130,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,', -'14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,108,,,50,53,57', -'62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24', -'25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3', -',9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18', -'22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72', -',,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34', -'39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19', -',27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59', -',,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35', -'40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48', -'51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,', -',,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,', -'8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42', -',,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55', -',,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50', -'53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15', -',21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61', -'66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1', -',,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57', -'62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24', -'25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3', -',9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18', -'22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72', -',,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34', -'39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19', -',27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59', -',,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35', -'40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48', -'51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,', -',,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,', -'8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42', -',,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,', -',,,,,,,,,,,,,,290,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51', -'55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,', -'50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7', -'15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,', -',61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,', -',,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53', -'57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21', -'24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66', -',3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14', -'18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70', -'72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29', -'34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11', -',19,,27,32,77,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22', -',,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,', -',,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34', -'39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19', -',27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59', -',,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35', -'40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48', -'51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,', -',,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,', -'8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42', -',,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55', -',,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50', -'53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15', -',21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61', -'66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1', -',,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57', -'62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24', -'25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3', -',9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18', -'22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72', -',,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34', -'39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19', -',27,32,77,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56', -'59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30', -'35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44', -'48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32', -',,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2', -',8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42', -',,,,61,66,,3,,9,11,,19,,27,32,37,,,,50,53,57,62,70,72,,,,,17,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,56,59,64,68,,2,,8,7,15,,21,24,25,29,34,39,44,48', -'51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,', -',,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,', -'8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42', -',,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55', -',,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50', -'53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15', -',21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61', -'66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1', -',,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,258,,,,50,53', -'57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,64,68,,2,,8,7,15', -',21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61', -'66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1', -',,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57', -'62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24', -'25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3', -',9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18', -'22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72', -',,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34', -'39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19', -',27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59', -',,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35', -'40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48', -'51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,', -',,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,', -'8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42', -',,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55', -',,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50', -'53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15', -',21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61', -'66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1', -',,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57', -'62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24', -'25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3', -',9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18', -'22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72', -',,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59,,,,2,,8,7,15,,21,24,25,29,34', -'39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,42,,,,,61,66,,3,,9,11,,19', -',27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,59', -',,,2,,8,7,15,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35', -'40,42,,,,,61,66,,3,,9,11,,19,,27,32,119,,127,,50,53,57,62,70,72,,,,', -'17,,,,,,,,,,,,,,142,146,,,,120,,,,135,,,,,,56,59,,,132,2,,8,,15,115', -'118,123,126,130,134,138,141,145,149,152,114,117,122,125,129,133,137', -'140,144,148,151,113,116,121,124,128,131,136,139,143,147,150,112,,,,', -',,,309,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30,35,40,,,', -',,,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62,70,72,,,,,17,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,56,59,,,,2,,8,,15,21,24,25,29,34,39,44,48,51,55,,,,,1', -',,14,18,22,,,30,35,40,42,,,,,,66,,3,,9,11,,19,,27,32,,,,,50,53,57,62', -'70,72,,,,,17,,,,21,24,25,29,34,39,44,48,51,55,,,,,1,,,14,18,22,,,30', -'35,40,56,59,,,,2,66,8,3,15,9,11,,19,,27,32,119,,127,,50,53,57,62,21', -'24,25,29,34,39,44,48,51,55,,,,,,,,,,,142,146,,35,40,120,,,,135,,,,,', -'56,59,,19,132,2,32,8,,15,115,118,123,126,130,134,138,141,145,149,152', -'114,117,122,125,129,133,137,140,144,148,151,113,116,121,124,128,131', -'136,139,143,147,150,112,119,,127,,,,,303,,,,2,,8,,15,,,,,,,,,,,,,142', -'146,,,,120,,,,135,,,,,,,,,,132,,,,,,115,118,123,126,130,134,138,141', -'145,149,152,114,117,122,125,129,133,137,140,144,148,151,113,116,121', -'124,128,131,136,139,179,147,150,112,119,,127,,,,,262,,,,,,,,,,,,,,,', -',,,,,142,146,,,,120,,,,135,,,,,,,,,,132,,,,,,115,118,123,126,130,134', -'138,141,145,149,152,114,117,122,125,129,133,137,140,144,148,151,113', -'116,121,124,128,131,136,139,179,147,150,112,119,,127,,,,,,,,,,,,,,,', -',,,,,,,,,,142,146,,,,120,,,,135,,,,,,,,37,,132,,,,,,115,118,123,126', -'130,134,138,141,145,149,152,114,117,122,125,129,133,137,140,144,148', -'151,113,116,121,124,128,131,136,139,143,147,150,112,119,,127,,,,,,,', -',,,,,,,,,,,,,,,,,,142,146,,,,120,,,,135,,,,,,,,,,132,,,,,,115,118,123', -'126,130,134,138,141,145,149,152,114,117,122,125,129,133,137,140,144', -'148,151,113,116,121,124,128,131,136,139,143,147,150,112,119,,127,,,', -',,,,,,,,,,,,,,,,,,,,,,142,146,,,,120,,,,135,,,,,,,,,,132,,,,,,115,118', -'123,126,130,134,138,141,145,149,152,114,117,122,125,129,133,137,140', -'144,148,151,113,116,121,124,128,131,136,139,143,147,150,112,119,,127', -',,,,,,,,,,,,,,,,,,,,,,,,,142,146,,,,120,,,,135,,,,,,,,,,132,,,,,,115', -'118,123,126,130,134,138,141,145,149,152,114,117,122,125,129,133,137', -'140,144,148,151,113,116,121,124,128,131,136,139,143,147,150,112,119', -',127,,,,,,,,,,,,,,,,,,,,,,,,,,142,146,,,,120,,,,135,,,,,,,,,,132,,,', -',,115,118,123,126,130,134,138,141,145,149,152,114,117,122,125,129,133', -'137,140,144,148,151,113,116,121,124,128,131,136,139,143,147,150,112', -'119,,127,,,,,,,,,,,,,,,,,,,,,,,,,,142,146,,,,120,,,,135,,,,,,,,,,132', -',,,,,115,118,123,126,130,134,138,141,145,149,152,114,117,122,125,129', -'133,137,140,144,148,151,113,116,121,124,128,131,136,139,143,147,150', -'112,119,,127,,,,,,,,,,,,,,,,,,,,,,,,,,142,146,,,,120,,,,135,,,,,,,,', -',132,,,,,,115,118,123,126,130,134,138,141,145,149,152,114,117,122,125', -'129,133,137,140,144,148,151,113,116,121,124,128,131,136,139,143,147', -'150,112,119,,127,,,,,,,,,,,,,,,,,,,,,,,,,,142,146,,,,120,,,,135,,,,', -',,,,,132,,,,,,115,118,123,126,130,134,138,141,145,149,152,114,117,122', -'125,129,133,137,140,144,148,151,113,116,121,124,128,131,136,139,143', -'147,150,112,119,,127,,,,,,,,,,,,,,,,,,,,,,,,,,142,146,,,,120,,,,135', -',,,,,,,,,132,,,,,,115,118,123,126,130,134,138,141,145,149,152,114,117', -'122,125,129,133,137,140,144,148,151,113,116,121,124,128,131,136,139', -'143,147,150,112,119,,127,,,,,,,,,,,,,,,,,,,,,,,,,,142,146,,,,120,,,', -'135,,,,,,,,,,132,,,,,,115,118,123,126,130,134,138,141,145,149,152,114', -'117,122,125,129,133,137,140,144,148,151,113,116,121,124,128,131,136', -'139,143,147,150,112,119,,127,,,,,,,,,,,,,,,,,,,,,,,,,,142,146,,,,120', -',,,135,,,,,,,,,,132,,,,,,115,118,123,126,130,134,138,141,145,149,152', -'114,117,122,125,129,133,137,140,144,148,151,113,116,121,124,128,131', -'136,139,143,147,150,112,119,,127,,,,,,,,,,,,,,,,,,,,,,,,,,142,146,,', -',120,,,,135,,,,,,,,,,132,,,,,,115,118,123,126,130,134,138,141,145,149', -'152,114,117,122,125,129,133,137,140,144,148,151,113,116,121,124,128', -'131,136,139,143,147,150,112,119,,127,,,,,,,,,,,,,,,,,,,,,,,,,,142,146', -',,,120,,,,135,,,,,,,,,,132,,,,,,115,118,123,126,130,134,138,141,145', -'149,152,114,117,122,125,129,133,137,140,144,148,151,113,116,121,124', -'128,131,136,139,143,147,150,112,119,,127,,,,,,,,,,,,,,,,,,,,,,,,,,142', -'146,,,,120,,,,135,,,,,,,,,,132,,,,,,115,118,123,126,130,134,138,141', -'145,149,152,114,117,122,125,129,133,137,140,144,148,151,113,116,121', -'124,128,131,136,139,143,147,150,112,119,,127,,,,,,,,,,,,,,,,,,,,,,,', -',,142,146,,,,120,,,,135,,,,,,,,252,,132,,,,,,115,118,123,126,130,134', -'138,141,145,149,152,114,117,122,125,129,133,137,140,144,148,151,113', -'116,121,124,128,131,136,139,143,147,150,112,119,,127,,,,,,,,,,,,,,,', -',,,,,,,,,,142,146,,,,120,,,,135,,,,,,,,,,132,,,,,,115,118,123,126,130', -'134,138,141,145,149,152,114,117,122,125,129,133,137,140,144,148,151', -'113,116,121,124,128,131,136,139,143,147,150,112,119,,127,,,,,,,,,,,', -',,,,,,,,,,,,,,142,146,,,,120,,,,135,,,,,,,,37,,132,,,,,,115,118,123', -'126,130,134,138,141,145,149,152,114,117,122,125,129,133,137,140,144', -'148,151,113,116,121,124,128,131,136,139,143,147,150,112,119,,127,,,', -',,,,,,,,,,,,,,,,,,,,,,142,146,,,,120,,,,135,,,,,,,,,,132,,,,,,115,118', -'123,126,130,134,138,141,145,149,152,114,117,122,125,129,133,137,140', -'144,148,151,113,116,121,124,128,131,136,139,143,147,150,112,142,146', -',,,,,,,135,,,,,,,,,,132,,,,,,115,118,123,126,130,134,138,141,145,149', -'152,114,117,122,125,129,133,137,140,144,148,151,113,116,121,124,128', -'131,136,139,143,147,150,112,142,146,,,,,,,,135,,,,,,,,,,132,,,,,,115', -'118,123,126,130,134,138,141,145,149,152,114,117,122,125,129,133,137', -'140,144,148,151,113,116,121,124,128,131,136,139,143,147,150,112,142', -'146,,,,,,,,135,,,,,,,,,,132,,,,,,115,118,123,126,130,134,138,141,145', -'149,152,114,117,122,125,129,133,137,140,144,148,151,113,116,121,124', -'128,131,136,139,143,142,146,,,,,,,,135,,,,,,,,,,132,,,,,,115,118,123', -'126,130,134,138,141,145,149,152,114,117,122,125,129,133,137,140,144', -'148,151,113,116,121,124,128,131,136,139,143,142,146,,,,,,,,135,,,,,', -',,,,132,,,,,,115,118,123,126,130,134,138,141,145,149,152,114,117,122', -'125,129,133,137,140,144,148,151,113,116,121,124,128,131,136,139,143', -'142,146,,,,,,,,135,,,,,,,,,,132,,,,,,115,118,123,126,130,134,138,141', -'145,149,152,114,117,122,125,129,133,137,140,144,148,151,113,116,121', -'124,128,131,136,139,143,146,,,,,,,,135,,,,,,,,,,132,,,,,,115,118,123', -'126,130,134,138,141,145,149,152,114,117,122,125,129,133,137,140,144', -'148,151,113,116,121,124,128,131,136,139,143,146,,,,,,,,135,,,,,,,,,', -'132,,,,,,115,118,123,126,130,134,138,141,145,149,152,114,117,122,125', -'129,133,137,140,144,148,151,113,116,121,124,128,131,136,139,143,146', -',,,,,,,135,,,,,,,,,,132,,,,,,115,118,123,126,130,134,138,141,145,149', -'152,114,117,122,125,129,133,137,140,144,148,151,113,116,121,124,128', -'131,136,139,143,146,,,,,,,,135,,,,,,,,,,132,,,,,,115,118,123,126,130', -'134,138,141,145,149,152,114,117,122,125,129,133,137,140,144,148,151', -'113,116,121,124,128,131,136,139,143,146,,,,,,,,135,,,,,,,,,,132,,,,', -',115,118,123,126,130,134,138,141,145,149,152,114,117,122,125,129,133', -'137,140,144,148,151,113,116,121,124,128,131,136,139,143,135,,,,,,,,', -',132,,,,,,115,118,123,126,130,134,138,141,145,149,152,114,117,122,125', -'129,133,137,140,144,148,151,113,116,121,124,128,131,136,139,135,,,,', -',,,,,132,,,,,,115,118,123,126,130,134,138,141,145,149,152,114,117,122', -'125,129,133,137,140,144,148,151,113,116,121,124,128,131,136,139,135', -',,,,,,,,,132,,,,,,115,118,123,126,130,134,138,141,145,149,152,114,117', -'122,125,129,133,137,140,144,148,151,113,116,121,124,128,131,136,139', -'132,,,,,,115,118,123,126,130,134,138,141,145,149,152,114,117,122,125', -'129,133,137,140,144,148,151,113,116,121,124,128,131,136,139,132,,,,', -',115,118,123,126,130,134,138,141,145,149,152,114,117,122,125,129,133', -'137,140,144,148,151,113,116,121,124,128,131,136,139,132,,,,,,115,118', -'123,126,130,134,138,141,145,149,152,114,117,122,125,129,133,137,140', -'144,148,151,113,116,121,124,128,131,136,139,132,,,,,,115,118,123,126', -'130,134,138,141,145,149,152,114,117,122,125,129,133,137,140,144,148', -'151,113,116,121,124,128,131,136,139,132,,,,,,115,118,123,126,130,134', -'138,141,145,149,152,114,117,122,125,129,133,137,140,144,148,151,113', -'116,121,124,128,131,136,139' ] - racc_action_table = arr = Array.new(10011, nil) +'125,11,133,26,28,31,37,39,43,48,53,58,60,88,90,92,200,1,172,259,19,23', +'86,278,87,56,40,46,259,49,54,61,121,126,69,2,46,141,12,1,20,155,30,32', +'160,41,276,46,51,56,56,152,275,68,71,4,9,137,140,144,147,150,154,158', +'120,124,129,132,136,139,143,146,149,153,157,119,123,128,131,135,138', +'142,145,148,151,156,118,122,127,130,134,162,69,2,273,171,308,24,173', +'29,11,34,196,26,28,31,37,39,43,48,53,58,60,56,69,2,202,1,7,13,19,23', +'7,13,56,98,40,190,183,49,54,61,62,96,295,265,289,6,12,184,20,165,30', +'32,98,41,285,46,51,271,255,260,96,68,71,4,9,15,18,98,7,13,274,35,7,13', +'56,96,46,281,282,7,13,192,259,204,205,189,190,7,13,188,46,56,152,291', +'182,46,74,190,-183,-183,69,2,7,13,56,24,116,29,11,34,46,26,28,31,37', +'39,43,48,53,58,60,281,282,7,13,1,180,98,19,23,7,13,192,287,40,96,98', +'49,54,61,62,7,13,192,96,6,12,110,20,165,30,32,203,41,313,46,51,56,88', +'90,92,68,71,4,9,15,18,86,152,87,46,35,99,56,137,140,144,147,150,46,106', +'99,11,204,205,26,28,31,37,39,43,48,53,58,60,88,90,92,181,1,69,2,19,23', +'86,24,87,29,40,34,152,49,54,61,62,116,137,140,74,6,12,211,20,,30,32', +'152,41,,46,51,,137,140,,68,71,4,9,15,18,152,7,13,188,35,186,137,140', +'144,147,150,154,158,198,199,11,7,13,26,28,31,37,39,43,48,53,58,60,88', +'90,92,,1,69,2,19,23,86,24,87,29,40,34,152,49,54,61,62,,-183,-183,,6', +'12,,20,,30,32,152,41,,46,51,,-183,-183,,68,71,4,9,15,18,152,,,,35,,137', +'140,144,147,150,154,158,,,11,,,26,28,31,37,39,43,48,53,58,60,88,90,92', +',1,69,2,19,23,86,24,87,29,40,34,152,49,54,61,62,,-183,-183,,6,12,,20', +',30,32,152,41,,46,51,,-183,-183,,68,71,4,9,15,18,152,,,,35,,137,140', +'144,147,150,154,158,,,11,,,26,28,31,37,39,43,48,53,58,60,88,90,92,,1', +'69,2,19,23,86,24,87,29,40,34,152,49,54,61,62,,-183,-183,,6,12,,20,,30', +'32,152,41,,46,51,,137,140,,68,71,4,9,15,18,152,,,,35,152,137,140,144', +'147,150,-183,-183,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19', +'23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68', +'71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,', +',1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46', +'51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53', +'58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32', +',41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39', +'43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12', +',20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28', +'31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62', +',,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,', +'11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49', +'54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,', +',,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29', +'40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18', +',,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23', +',24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,103,,,,68', +'71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,', +',1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46', +'51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53', +'58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32', +',41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39', +'43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12', +',20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28', +'31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62', +',,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,', +'11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49', +'54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,', +',,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29', +'40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18', +',,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23', +',24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71', +'4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1', +'69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51', +',,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58', +'60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,', +'41,,46,51,,114,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39', +'43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12', +',20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28', +'31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62', +',,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,', +'11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49', +'54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,', +',,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29', +'40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18', +',,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,310,,,,1,69,2,19', +'23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68', +'71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,', +',1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46', +'51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53', +'58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32', +',41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39', +'43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12', +',20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28', +'31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62', +',,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,', +'11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49', +'54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,', +',,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,300,,,,1,69,2,19,23,,24', +',29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9', +'15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2', +'19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,', +'68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60', +',,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41', +',46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48', +'53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30', +'32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37', +'39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6', +'12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26', +'28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61', +'62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,', +',,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34', +',49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,', +'35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24', +',29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9', +'15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2', +'19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,', +'68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60', +',,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41', +',46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48', +'53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30', +'32,,41,,46,51,103,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31', +'37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,', +',6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11', +',,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54', +'61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,', +',,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40', +'34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,', +',,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23', +',24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71', +'4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1', +'69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51', +',,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58', +'60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,', +'41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43', +'48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20', +',30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31', +'37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,', +',6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11', +',,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54', +'61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,', +',,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40', +'34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,', +',,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23', +',24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71', +'4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1', +'69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51', +',,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58', +'60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,', +'41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43', +'48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20', +',30,32,,41,,46,51,103,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28', +'31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62', +',,,,6,12,,20,,30,32,,41,,46,51,56,,,,68,71,4,9,15,18,152,,,,35,,137', +'140,144,147,150,154,158,120,124,129,132,136,139,143,146,149,153,157', +'119,123,128,,,,,,,69,2,7,13,,24,,29,11,34,,26,28,31,37,39,43,48,53,58', +'60,,,,,1,,,19,23,,,,,40,,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51', +',,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58', +'60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,', +'41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43', +'48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20', +',30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31', +'37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,', +',6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11', +',,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54', +'61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,', +',,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40', +'34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,', +',,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23', +',24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71', +'4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1', +'69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51', +',,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58', +'60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,', +'41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43', +'48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20', +',30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31', +'37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,', +',6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11', +',,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54', +'61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,', +',,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40', +'34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,', +',,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23', +',24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,125,,133,', +'68,71,4,9,15,18,152,,,,35,,137,140,144,147,150,154,158,120,124,129,132', +'136,139,,,,121,126,,,,141,,,,155,,69,2,,,,24,,29,152,34,,,,,137,140', +'144,147,150,154,158,120,124,129,132,136,139,143,146,149,153,157,119', +'123,128,131,135,138,142,145,148,151,156,118,122,127,130,134,125,,133', +',,,,,,311,,26,28,31,37,39,43,48,53,58,60,,,,,,,,,,,,121,126,,,,141,54', +'61,,155,,,,,,,,,,152,,41,,,51,137,140,144,147,150,154,158,120,124,129', +'132,136,139,143,146,149,153,157,119,123,128,131,135,138,142,145,148', +'151,156,118,122,127,130,134,,,,,,,,,,318,,,,,24,,29,,34,26,28,31,37', +'39,43,48,53,58,60,,,26,28,31,37,39,43,48,53,58,60,,,,,1,54,61,19,23', +',,,,40,,,49,54,61,,41,,,51,,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15', +'18,152,,,,35,,137,140,144,147,150,154,158,120,124,129,132,136,139,,', +',,,,,24,,29,,34,,,69,2,,,,24,,29,,34,26,28,31,37,39,43,48,53,58,60,', +',,,1,,,19,23,,,,,40,,,49,54,61,,,,,,,12,,20,,30,32,,41,,46,51,,,,,68', +'71,4,9,15,18,152,,,,35,,137,140,144,147,150,154,158,120,124,129,,,26', +'28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61', +'62,,,,,,12,,20,,30,32,,41,,46,51,125,,133,,68,71,4,9,15,18,152,,,,35', +',137,140,144,147,150,154,158,120,124,129,132,136,139,,,,121,126,,,,141', +',,,155,,69,2,,,,24,,29,152,34,,,,,137,140,144,147,150,154,158,120,124', +'129,132,136,139,143,146,149,153,157,119,123,128,131,135,138,142,145', +'148,151,156,118,122,127,130,134,125,152,133,,,,,137,140,144,147,150', +'154,158,120,124,129,132,136,139,143,146,149,153,157,119,123,128,,,,', +'121,126,,,,141,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158', +'120,124,129,132,136,139,143,146,149,153,157,119,123,128,131,135,138', +'142,145,148,151,156,118,122,127,130,134,125,152,133,,,,,137,140,144', +'147,150,154,158,120,124,129,132,136,139,143,146,149,153,157,119,123', +'128,,,,,121,126,,,,141,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150', +'154,158,120,124,129,132,136,139,143,146,149,153,157,119,123,128,131', +'135,138,142,145,148,151,156,118,122,127,130,134,125,152,133,,,,,137', +'140,144,147,150,154,158,120,124,129,132,136,139,143,146,149,153,157', +'119,123,128,,,,,121,126,,,,141,,,,155,,,,,,,,176,,152,,,,,,137,140,144', +'147,150,154,158,120,124,129,132,136,139,143,146,149,153,157,119,123', +'128,131,135,138,142,145,148,151,156,118,122,127,130,134,125,152,133', +',,,,137,140,144,147,150,154,158,120,124,129,132,136,139,143,146,149', +'153,157,119,123,128,,,,,121,126,,,,141,,,,155,,,,,,,,56,,152,,,,,,137', +'140,144,147,150,154,158,120,124,129,132,136,139,143,146,149,153,157', +'119,123,128,131,135,138,142,145,148,151,156,118,122,127,130,134,125', +'152,133,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139,143', +'146,149,153,157,119,123,128,,,,,121,126,,,,141,,,,155,,,,,,,,56,,152', +',,,,,137,140,144,147,150,154,158,120,124,129,132,136,139,143,146,149', +'153,157,119,123,128,131,135,138,142,145,148,151,156,118,122,127,130', +'134,125,152,133,,,,,137,140,144,147,150,154,158,120,124,129,132,136', +'139,143,146,149,153,157,119,123,128,,,,,121,126,,,,141,,,,155,,,,,,', +',,,152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139,143', +'146,149,153,157,119,123,128,131,135,138,142,145,148,151,156,118,122', +'127,130,134,125,152,133,,,,,137,140,144,147,150,154,158,120,124,129', +'132,136,139,143,146,149,153,157,119,123,128,,,,,121,126,,,,141,,,,155', +',,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139', +'143,146,149,153,157,119,123,128,131,135,138,142,145,148,151,156,118', +'122,127,130,134,125,152,133,,,,,137,140,144,147,150,154,158,120,124', +'129,132,136,139,,,,,,,,,,,,,121,126,,,,141,,,,155,,,,,,,,,,152,,,,,', +'137,140,144,147,150,154,158,120,124,129,132,136,139,143,146,149,153', +'157,119,123,128,131,135,138,142,145,148,151,156,118,122,127,130,134', +'125,152,133,,,,,137,140,144,147,150,154,158,120,124,129,,,,,,,,,,,,', +',,,121,126,,,,141,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158', +'120,124,129,132,136,139,143,146,149,153,157,119,123,128,131,135,138', +'142,145,148,151,156,118,122,127,130,134,125,152,133,,,,,137,140,144', +'147,150,154,158,120,124,129,,,,,,,,,,,,,,,,121,126,,,,141,,,,155,,,', +',,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139,143', +'146,149,153,157,119,123,128,131,135,138,142,145,148,151,156,118,122', +'127,130,134,125,,133,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,121,126,,,,141,,,', +'155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136', +'139,143,146,149,153,157,119,123,128,131,135,138,142,145,148,151,156', +'118,122,127,130,134,125,,133,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,121,126,,', +',141,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129', +'132,136,139,143,146,149,153,157,119,123,128,131,135,138,142,145,148', +'151,156,118,122,127,130,134,125,,133,,,,,,,,,,,,,,,,,,,,,,,316,,,,,', +',121,126,,,,141,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158', +'120,124,129,132,136,139,143,146,149,153,157,119,123,128,131,135,138', +'142,145,148,151,156,118,122,127,130,134,125,,133,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,121,126,,,,141,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150', +'154,158,120,124,129,132,136,139,143,146,149,153,157,119,123,128,131', +'135,138,142,145,148,151,156,118,122,127,130,134,125,,133,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,121,126,,,,141,,,,155,,,,,,,,,,152,,,,,,137,140,144', +'147,150,154,158,120,124,129,132,136,139,143,146,149,153,157,119,123', +'128,131,135,138,142,145,148,151,156,118,122,127,130,134,125,,133,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,121,126,,,,141,,,,155,,,,,,,,,,152,,,,,,137', +'140,144,147,150,154,158,120,124,129,132,136,139,143,146,149,153,157', +'119,123,128,131,135,138,142,145,148,151,156,118,194,127,130,134,125', +',133,,,,,,,,,,,,,,,,,,,,,,,262,,,,,,,121,126,,,,141,,,,155,,,,,,,,,', +'152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139,143,146', +'149,153,157,119,123,128,131,135,138,142,145,148,151,156,118,261,127', +'130,134,125,,133,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,121,126,,,,141,,,,155', +',,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139', +'143,146,149,153,157,119,123,128,131,135,138,142,145,148,151,156,118', +'122,127,130,134,125,,133,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,121,126,,,,141', +',,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129,132', +'136,139,143,146,149,153,157,119,123,128,131,135,138,142,145,148,151', +'156,118,122,127,130,134,125,,133,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,121,126', +',,,141,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124', +'129,132,136,139,143,146,149,153,157,119,123,128,131,135,138,142,145', +'148,151,156,118,122,127,130,134,125,,133,,,,,,,,,,,,,,,,,,,,,,,319,', +',,,,,121,126,,,,141,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154', +'158,120,124,129,132,136,139,143,146,149,153,157,119,123,128,131,135', +'138,142,145,148,151,156,118,122,127,130,134,121,126,,,,,,,,155,,,,,', +',,,,152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139,143', +'146,149,153,157,119,123,128,131,135,138,142,145,148,151,156,118,122', +'127,130,134,121,126,,,,,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150', +'154,158,120,124,129,132,136,139,143,146,149,153,157,119,123,128,131', +'135,138,142,145,148,151,156,118,122,127,130,134,121,126,,,,,,,,155,', +',,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139', +'143,146,149,153,157,119,123,128,131,135,138,142,145,148,151,156,118', +'122,121,126,,,,,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158', +'120,124,129,132,136,139,143,146,149,153,157,119,123,128,131,135,138', +'142,145,148,151,156,118,122,121,126,,,,,,,,155,,,,,,,,,,152,,,,,,137', +'140,144,147,150,154,158,120,124,129,132,136,139,143,146,149,153,157', +'119,123,128,131,135,138,142,145,148,151,156,118,122,121,126,,,,,,,,155', +',,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139', +'143,146,149,153,157,119,123,128,131,135,138,142,145,148,151,156,118', +'122,126,,,,,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120', +'124,129,132,136,139,143,146,149,153,157,119,123,128,131,135,138,142', +'145,148,151,156,118,122,126,,,,,,,,155,,,,,,,,,,152,,,,,,137,140,144', +'147,150,154,158,120,124,129,132,136,139,143,146,149,153,157,119,123', +'128,131,135,138,142,145,148,151,156,118,122,126,,,,,,,,155,,,,,,,,,', +'152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139,143,146', +'149,153,157,119,123,128,131,135,138,142,145,148,151,156,118,122,126', +',,,,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129', +'132,136,139,143,146,149,153,157,119,123,128,131,135,138,142,145,148', +'151,156,118,122,126,,,,,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150', +'154,158,120,124,129,132,136,139,143,146,149,153,157,119,123,128,131', +'135,138,142,145,148,151,156,118,122,155,,,,,,,,,,152,,,,,,137,140,144', +'147,150,154,158,120,124,129,132,136,139,143,146,149,153,157,119,123', +'128,131,135,138,142,145,148,151,156,118,155,,,,,,,,,,152,,,,,,137,140', +'144,147,150,154,158,120,124,129,132,136,139,143,146,149,153,157,119', +'123,128,131,135,138,142,145,148,151,156,118,155,,,,,,,,,,152,,,,,,137', +'140,144,147,150,154,158,120,124,129,132,136,139,143,146,149,153,157', +'119,123,128,131,135,138,142,145,148,151,156,118,152,,,,,,137,140,144', +'147,150,154,158,120,124,129,132,136,139,143,146,149,153,157,119,123', +'128,131,135,138,142,145,148,151,156,118,152,,,,,,137,140,144,147,150', +'154,158,120,124,129,132,136,139,143,146,149,153,157,119,123,128,131', +'135,138,142,145,148,151,156,118,152,,,,,,137,140,144,147,150,154,158', +'120,124,129,132,136,139,143,146,149,153,157,119,123,128,131,135,138', +'142,145,148,151,156,118,152,,,,,,137,140,144,147,150,154,158,120,124', +'129,132,136,139,143,146,149,153,157,119,123,128,131,135,138,142,145', +'148,151,156,118,152,,,,,,137,140,144,147,150,154,158,120,124,129,132', +'136,139,143,146,149,153,157,119,123,128,131,135,138,142,145,148,151', +'156,118' ] + racc_action_table = arr = Array.new(8898, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -359,352 +350,344 @@ def on_error(error_token_id, error_value, value_stack) end clist = [ -'100,301,100,14,14,14,14,14,14,14,14,14,14,101,111,111,300,252,173,101', -'101,73,204,204,300,252,14,14,100,100,98,98,98,100,103,103,204,100,75', -'214,261,14,171,163,14,214,214,100,301,163,163,172,172,100,100,100,100', -'100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100', -'100,100,100,100,100,100,100,100,100,100,100,100,100,5,5,5,250,250,250', -'14,73,14,129,14,100,129,129,129,129,129,129,129,129,129,129,154,98,261', -'261,129,98,76,129,129,129,189,193,129,129,129,129,279,279,189,83,129', -'129,255,129,47,129,129,164,129,110,129,129,270,164,164,188,129,129,129', -'129,129,129,272,188,254,154,129,41,41,189,76,76,76,221,76,193,193,193', -'5,221,221,250,5,193,104,250,99,99,99,36,36,46,46,46,188,129,129,249', -'249,249,129,45,129,2,129,187,2,2,2,2,2,2,2,2,2,2,189,189,46,107,2,307', -'307,2,2,2,165,281,2,2,2,2,165,165,180,8,2,2,179,2,195,2,2,8,2,196,2', -'2,2,187,187,187,2,2,2,2,2,2,282,282,234,281,2,107,107,46,99,233,233', -'281,99,46,281,197,8,46,8,249,180,180,180,249,93,93,93,85,180,169,93', -'91,26,2,2,169,169,22,2,91,2,3,2,11,3,3,3,3,3,3,3,3,3,3,201,95,298,266', -'3,94,142,3,3,3,143,266,3,3,3,3,91,155,91,305,3,3,86,3,1,3,3,217,3,42', -'3,3,,217,217,,3,3,3,3,3,3,266,208,,,3,,,208,208,208,208,208,208,208', -'208,208,208,208,208,208,208,208,208,208,208,208,208,208,,167,,,,3,3', -'167,167,,3,,3,151,3,,151,151,151,151,151,151,151,151,151,151,,,,,151', -',,151,151,151,170,,151,151,151,151,170,170,,,151,151,,151,,151,151,', -'151,,151,151,,,,,151,151,151,151,151,151,206,,,,151,,206,206,206,206', -'206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206', -',,,,,,151,151,,,,151,,151,7,151,,7,7,7,7,7,7,7,7,7,7,,,,,7,,,7,7,7,', -',7,7,7,7,,,,,7,7,,7,,7,7,,7,,7,7,,,,,7,7,7,7,7,7,242,,,,7,,242,242,242', -'242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242', -'242,,,,,,,7,7,,,,7,,7,150,7,,150,150,150,150,150,150,150,150,150,150', -',,,,150,,,150,150,150,,,150,150,150,150,,,,,150,150,,150,,150,150,,150', -',150,150,,,,,150,150,150,150,150,150,239,,,,150,,239,239,239,239,239', -'239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,,,,', -',,150,150,,,,150,,150,9,150,,9,9,9,9,9,9,9,9,9,9,,,,,9,,,9,9,9,,,9,9', -'9,9,,,,,9,9,,9,,9,9,,9,,9,9,,,,,9,9,9,9,9,9,212,,,,9,,212,212,212,212', -'212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212', -',,,,,,9,9,,,,9,,9,149,9,,149,149,149,149,149,149,149,149,149,149,,,', -',149,,,149,149,149,,,149,149,149,149,,,,,149,149,,149,,149,149,,149', -',149,149,,,,,149,149,149,149,149,149,235,,,,149,,235,235,235,235,235', -'235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,,,,', -',,149,149,,,,149,,149,148,149,,148,148,148,148,148,148,148,148,148,148', -',,,,148,,,148,148,148,,,148,148,148,148,,,,,148,148,,148,,148,148,,148', -',148,148,,,,,148,148,148,148,148,148,231,,,,148,,231,231,231,231,231', -'231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,,,,', -',,148,148,,,,148,,148,15,148,,15,15,15,15,15,15,15,15,15,15,,,,,15,', -',15,15,15,,,15,15,15,15,,,,,15,15,,15,,15,15,,15,,15,15,,,,,15,15,15', -'15,15,15,228,,,,15,,228,228,228,228,228,228,228,228,228,228,228,228', -'228,228,228,228,228,228,228,228,228,,,,,,,15,15,,,,15,,15,17,15,,17', -'17,17,17,17,17,17,17,17,17,,,,,17,,,17,17,17,,,17,17,17,17,,,,,17,17', -',17,,17,17,,17,,17,17,,,,,17,17,17,17,17,17,216,,,,17,,216,216,216,216', -'216,216,216,216,216,216,216,216,216,236,,,,,,236,236,236,236,236,236', -'236,,17,17,,,,17,,17,147,17,,147,147,147,147,147,147,147,147,147,147', -',,,,147,,,147,147,147,,,147,147,147,147,,,,,147,147,,147,,147,147,,147', -',147,147,,,,,147,147,147,147,147,147,224,,,,147,,224,224,224,224,224', -'224,224,224,224,224,224,224,224,232,,,,,,232,232,232,232,232,232,232', -',147,147,,,,147,,147,146,147,,146,146,146,146,146,146,146,146,146,146', -',,,,146,,,146,146,146,,,146,146,146,146,,,,,146,146,,146,,146,146,,146', -',146,146,,,,,146,146,146,146,146,146,213,,,,146,,213,213,213,213,213', -'213,213,213,213,213,213,213,213,240,,,,,,240,240,240,240,240,240,240', -',146,146,,,,146,,146,145,146,,145,145,145,145,145,145,145,145,145,145', -',,,,145,,,145,145,145,,,145,145,145,145,,,,,145,145,,145,,145,145,,145', -',145,145,,,,,145,145,145,145,145,145,220,,,,145,,220,220,220,220,220', -'220,220,220,220,220,220,220,220,229,,,,,,229,229,229,229,229,,,,145', -'145,,,,145,,145,30,145,,30,30,30,30,30,30,30,30,30,30,,,,,30,,,30,30', -'30,,,30,30,30,30,,,,,30,30,,30,,30,30,,30,,30,30,,,,,30,30,30,30,30', -'30,207,,,,30,,207,207,207,207,207,207,207,207,207,207,209,,,,,,209,209', -'209,209,209,209,209,209,209,209,,30,30,,,,30,,30,144,30,,144,144,144', -'144,144,144,144,144,144,144,,,,,144,,,144,144,144,,,144,144,144,144', -',,,,144,144,,144,,144,144,,144,,144,144,,,,,144,144,144,144,144,144', -'243,,,,144,,243,243,243,243,243,243,243,243,243,243,225,,,,,,225,225', -'225,225,225,,,,,,,144,144,,,,144,,144,37,144,,37,37,37,37,37,37,37,37', -'37,37,,,,,37,,,37,37,37,,,37,37,37,37,,,,,37,37,,37,,37,37,,37,,37,37', -',37,,,37,37,37,37,37,37,,,,,37,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,37,,,', -'37,,37,284,37,,284,284,284,284,284,284,284,284,284,284,,,,,284,,,284', -'284,284,,,284,284,284,284,,,,,284,284,,284,,284,284,,284,,284,284,,', -',,284,284,284,284,284,284,,,,,284,,,,,,,,,,,,,,,,,,,,,,,,,,,,,284,284', -',,,284,,284,277,284,,277,277,277,277,277,277,277,277,277,277,,,,,277', -',,277,277,277,,,277,277,277,277,,,,,277,277,,277,,277,277,,277,,277', -'277,,,,,277,277,277,277,277,277,,,,,277,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -'277,277,,,,277,,277,159,277,,159,159,159,159,159,159,159,159,159,159', -',,,,159,,,159,159,159,,,159,159,159,159,,,,,159,159,,159,,159,159,,159', -',159,159,,,,,159,159,159,159,159,159,,,,,159,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,159,159,,,,159,,159,276,159,,276,276,276,276,276,276,276,276,276', -'276,,,,,276,,,276,276,276,,,276,276,276,276,,,,,276,276,,276,,276,276', -',276,,276,276,,,,,276,276,276,276,276,276,,,,,276,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,276,276,,,,276,,276,141,276,,141,141,141,141,141,141,141,141', -'141,141,,,,,141,,,141,141,141,,,141,141,141,141,,,,,141,141,,141,,141', -'141,,141,,141,141,,,,,141,141,141,141,141,141,,,,,141,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,141,141,,,,141,,141,140,141,,140,140,140,140,140,140,140', -'140,140,140,,,,,140,,,140,140,140,,,140,140,140,140,,,,,140,140,,140', -',140,140,,140,,140,140,,,,,140,140,140,140,140,140,,,,,140,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,140,140,,,,140,,140,50,140,,50,50,50,50,50,50,50', -'50,50,50,,,,,50,,,50,50,50,,,50,50,50,50,,,,,50,50,,50,,50,50,,50,,50', -'50,,,,,50,50,50,50,50,50,,,,,50,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,50,,', -',50,,50,53,50,,53,53,53,53,53,53,53,53,53,53,,,,,53,,,53,53,53,,,53', -'53,53,53,,,,,53,53,,53,,53,53,,53,,53,53,,,,,53,53,53,53,53,53,,,,,53', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,53,53,,,,53,,53,57,53,,57,57,57,57,57,57', -'57,57,57,57,,,,,57,,,57,57,57,,,57,57,57,57,,,,,57,57,,57,,57,57,,57', -',57,57,,,,,57,57,57,57,57,57,,,,,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,57,57', -',,,57,,57,61,57,,61,61,61,61,61,61,61,61,61,61,,,,,61,,,61,61,61,,,61', -'61,61,61,,,,,61,61,,61,,61,61,,61,,61,61,,,,,61,61,61,61,61,61,,,,,61', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,61,61,,,,61,,61,62,61,,62,62,62,62,62,62', -'62,62,62,62,,,,,62,,,62,62,62,,,62,62,62,62,,,,,62,62,,62,,62,62,,62', -',62,62,,,,,62,62,62,62,62,62,,,,,62,,,,,,,,,,,,,,,,,,,,,,,,,,,,,62,62', -',,,62,,62,66,62,,66,66,66,66,66,66,66,66,66,66,,,,,66,,,66,66,66,,,66', -'66,66,66,,,,,66,66,,66,,66,66,,66,,66,66,,,,,66,66,66,66,66,66,,,,,66', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,66,66,,,,66,,66,70,66,,70,70,70,70,70,70', -'70,70,70,70,,,,,70,,,70,70,70,,,70,70,70,70,,,,,70,70,,70,,70,70,,70', -',70,70,,,,,70,70,70,70,70,70,,,,,70,,,,,,,,,,,,,,,,,,,,,,,,,,,,,70,70', -',,,70,,70,72,70,,72,72,72,72,72,72,72,72,72,72,,,,,72,,,72,72,72,,,72', -'72,72,72,,,,,72,72,,72,,72,72,,72,,72,72,,,,,72,72,72,72,72,72,,,,,72', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,72,72,,,,72,,72,260,72,,260,260,260,260', -'260,260,260,260,260,260,,,,,260,,,260,260,260,,,260,260,260,260,,,,', -'260,260,,260,,260,260,,260,,260,260,,,,,260,260,260,260,260,260,,,,', -'260,,,,,,,,,,,,,,,,,,,,,,,,260,,,,,260,260,,,,260,,260,139,260,,139', -'139,139,139,139,139,139,139,139,139,,,,,139,,,139,139,139,,,139,139', -'139,139,,,,,139,139,,139,,139,139,,139,,139,139,,,,,139,139,139,139', -'139,139,,,,,139,,,,,,,,,,,,,,,,,,,,,,,,,,,,,139,139,,,,139,,139,258', -'139,,258,258,258,258,258,258,258,258,258,258,,,,,258,,,258,258,258,', -',258,258,258,258,,,,,258,258,,258,,258,258,,258,,258,258,,,,,258,258', -'258,258,258,258,,,,,258,,,,,,,,,,,,,,,,,,,,,,,,,,,,,258,258,,,,258,', -'258,77,258,,77,77,77,77,77,77,77,77,77,77,,,,,77,,,77,77,77,,,77,77', -'77,77,,,,,77,77,,77,,77,77,,77,,77,77,,,,,77,77,77,77,77,77,,,,,77,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,77,77,,,,77,,77,138,77,,138,138,138,138,138', -'138,138,138,138,138,,,,,138,,,138,138,138,,,138,138,138,138,,,,,138', -'138,,138,,138,138,,138,,138,138,,,,,138,138,138,138,138,138,,,,,138', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,138,138,,,,138,,138,257,138,,257,257,257', -'257,257,257,257,257,257,257,,,,,257,,,257,257,257,,,257,257,257,257', -',,,,257,257,,257,,257,257,,257,,257,257,,,,,257,257,257,257,257,257', -',,,,257,,,,,,,,,,,,,,,,,,,,,,,,,,,,,257,257,,,,257,,257,80,257,,80,80', -'80,80,80,80,80,80,80,80,,,,,80,,,80,80,80,,,80,80,80,80,,,,,80,80,,80', -',80,80,,80,,80,80,80,,,,80,80,80,80,80,80,,,,,80,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,80,80,,,,80,,80,137,80,,137,137,137,137,137,137,137,137,137', -'137,,,,,137,,,137,137,137,,,137,137,137,137,,,,,137,137,,137,,137,137', -',137,,137,137,,,,,137,137,137,137,137,137,,,,,137,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,137,137,,,,137,,137,152,137,,152,152,152,152,152,152,152,152', -'152,152,,,,,152,,,152,152,152,,,152,152,152,152,,,,,152,152,,152,,152', -'152,,152,,152,152,,,,,152,152,152,152,152,152,,,,,152,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,152,152,,,,152,,152,136,152,,136,136,136,136,136,136,136', -'136,136,136,,,,,136,,,136,136,136,,,136,136,136,136,,,,,136,136,,136', -',136,136,,136,,136,136,,,,,136,136,136,136,136,136,,,,,136,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,136,136,,,,136,,136,87,136,,87,87,87,87,87,87,87', -'87,87,87,,,,,87,,,87,87,87,,,87,87,87,87,,,,,87,87,,87,,87,87,,87,,87', -'87,,,,,87,87,87,87,87,87,,,,,87,,,,,,,,,,,,,,,,,,,,,,,,,,,,,87,87,,', -',87,,87,135,87,,135,135,135,135,135,135,135,135,135,135,,,,,135,,,135', -'135,135,,,135,135,135,135,,,,,135,135,,135,,135,135,,135,,135,135,,', -',,135,135,135,135,135,135,,,,,135,,,,,,,,,,,,,,,,,,,,,,,,,,,,,135,135', -',,,135,,135,134,135,,134,134,134,134,134,134,134,134,134,134,,,,,134', -',,134,134,134,,,134,134,134,134,,,,,134,134,,134,,134,134,,134,,134', -'134,,,,,134,134,134,134,134,134,,,,,134,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -'134,134,,,,134,,134,133,134,,133,133,133,133,133,133,133,133,133,133', -',,,,133,,,133,133,133,,,133,133,133,133,,,,,133,133,,133,,133,133,,133', -',133,133,,,,,133,133,133,133,133,133,,,,,133,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,133,133,,,,133,,133,203,133,,203,203,203,203,203,203,203,203,203', -'203,,,,,203,,,203,203,203,,,203,203,203,203,,,,,203,203,,203,,203,203', -',203,,203,203,,,,,203,203,203,203,203,203,,,,,203,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,203,203,,,,203,,203,202,203,,202,202,202,202,202,202,202,202', -'202,202,,,,,202,,,202,202,202,,,202,202,202,202,,,,,202,202,,202,,202', -'202,,202,,202,202,,,,,202,202,202,202,202,202,,,,,202,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,202,202,,,,202,,202,131,202,,131,131,131,131,131,131,131', -'131,131,131,,,,,131,,,131,131,131,,,131,131,131,131,,,,,131,131,,131', -',131,131,,131,,131,131,,,,,131,131,131,131,131,131,,,,,131,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,131,131,,,,131,,131,97,131,,97,97,97,97,97,97,97', -'97,97,97,,,,,97,,,97,97,97,,,97,97,97,97,,,,,97,97,,97,,97,97,,97,,97', -'97,97,,,,97,97,97,97,97,97,,,,,97,,,,,,,,,,,,,,,,,,,,,,,,,,,,,97,97', -',,,97,,97,192,97,,192,192,192,192,192,192,192,192,192,192,,,,,192,,', -'192,192,192,,,192,192,192,192,,,,,192,192,,192,,192,192,,192,,192,192', -',,,,192,192,192,192,192,192,,,,,192,,,,,,,,,,,,,,,,,,,,,,,,,,,,,192', -'192,,,,192,,192,191,192,,191,191,191,191,191,191,191,191,191,191,,,', -',191,,,191,191,191,,,191,191,191,191,,,,,191,191,,191,,191,191,,191', -',191,191,,,,,191,191,191,191,191,191,,,,,191,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,191,191,,,,191,,191,0,191,,0,0,0,0,0,0,0,0,0,0,,,,,0,,,0,0,0,,', -'0,0,0,0,,,,,0,0,,0,,0,0,,0,,0,0,0,,,,0,0,0,0,0,0,,,,,0,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,0,0,0,0,,0,,0,130,0,,130,130,130,130,130,130,130,130', -'130,130,,,,,130,,,130,130,130,,,130,130,130,130,,,,,130,130,,130,,130', -'130,,130,,130,130,,,,,130,130,130,130,130,130,,,,,130,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,130,130,,,,130,,130,308,130,,308,308,308,308,308,308,308', -'308,308,308,,,,,308,,,308,308,308,,,308,308,308,308,,,,,308,308,,308', -',308,308,,308,,308,308,,,,,308,308,308,308,308,308,,,,,308,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,308,308,,,,308,,308,128,308,,128,128,128,128,128', -'128,128,128,128,128,,,,,128,,,128,128,128,,,128,128,128,128,,,,,128', -'128,,128,,128,128,,128,,128,128,,,,,128,128,128,128,128,128,,,,,128', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,128,128,,,,128,,128,124,128,,124,124,124', -'124,124,124,124,124,124,124,,,,,124,,,124,124,124,,,124,124,124,124', -',,,,124,124,,124,,124,124,,124,,124,124,,,,,124,124,124,124,124,124', -',,,,124,,,,,,,,,,,,,,,,,,,,,,,,,,,,,124,124,,,,124,,124,176,124,,176', -'176,176,176,176,176,176,176,176,176,,,,,176,,,176,176,176,,,176,176', -'176,176,,,,,176,176,,176,,176,176,,176,,176,176,176,,,,176,176,176,176', -'176,176,,,,,176,,,,,,,,,,,,,,,,,,,,,,,,,,,,,176,176,176,176,,176,,176', -'106,176,,106,106,106,106,106,106,106,106,106,106,,,,,106,,,106,106,106', -',,106,106,106,106,,,,,106,106,,106,,106,106,,106,,106,106,,,,,106,106', -'106,106,106,106,,,,,106,,,,,,,,,,,,,,,,,,,,,,,,,,,,,106,106,,,,106,', -'106,175,106,,175,175,175,175,175,175,175,175,175,175,,,,,175,,,175,175', -'175,,,175,175,175,175,,,,,175,175,,175,,175,175,,175,,175,175,,,,,175', -'175,175,175,175,175,,,,,175,,,,,,,,,,,,,,,,,,,,,,,,,,,,,175,175,,,,175', -',175,126,175,,126,126,126,126,126,126,126,126,126,126,,,,,126,,,126', -'126,126,,,126,126,126,126,,,,,126,126,,126,,126,126,,126,,126,126,,', -',,126,126,126,126,126,126,,,,,126,,,,,,,,,,,,,,,,,,,,,,,,,,,,,126,126', -',,,126,,126,125,126,,125,125,125,125,125,125,125,125,125,125,,,,,125', -',,125,125,125,,,125,125,125,125,,,,,125,125,,125,,125,125,,125,,125', -'125,,,,,125,125,125,125,125,125,,,,,125,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -'125,125,,,,125,,125,112,125,,112,112,112,112,112,112,112,112,112,112', -',,,,112,,,112,112,112,,,112,112,112,112,,,,,112,112,,112,,112,112,,112', -',112,112,,,,,112,112,112,112,112,112,,,,,112,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,112,112,,,,112,,112,113,112,,113,113,113,113,113,113,113,113,113', -'113,,,,,113,,,113,113,113,,,113,113,113,113,,,,,113,113,,113,,113,113', -',113,,113,113,,,,,113,113,113,113,113,113,,,,,113,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,113,113,,,,113,,113,114,113,,114,114,114,114,114,114,114,114', -'114,114,,,,,114,,,114,114,114,,,114,114,114,114,,,,,114,114,,114,,114', -'114,,114,,114,114,,,,,114,114,114,114,114,114,,,,,114,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,114,114,,,,114,,114,116,114,,116,116,116,116,116,116,116', -'116,116,116,,,,,116,,,116,116,116,,,116,116,116,116,,,,,116,116,,116', -',116,116,,116,,116,116,,,,,116,116,116,116,116,116,,,,,116,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,116,116,,,,116,,116,117,116,,117,117,117,117,117', -'117,117,117,117,117,,,,,117,,,117,117,117,,,117,117,117,117,,,,,117', -'117,,117,,117,117,,117,,117,117,,,,,117,117,117,117,117,117,,,,,117', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,117,117,,,,117,,117,119,117,,119,119,119', -'119,119,119,119,119,119,119,,,,,119,,,119,119,119,,,119,119,119,119', -',,,,119,119,,119,,119,119,,119,,119,119,,,,,119,119,119,119,119,119', -',,,,119,,,,,,,,,,,,,,,,,,,,,,,,,,,,,119,119,,,,119,,119,120,119,,120', -'120,120,120,120,120,120,120,120,120,,,,,120,,,120,120,120,,,120,120', -'120,120,,,,,120,120,,120,,120,120,,120,,120,120,,,,,120,120,120,120', -'120,120,,,,,120,,,,,,,,,,,,,,,,,,,,,,,,,,,,,120,120,,,,120,,120,121', -'120,,121,121,121,121,121,121,121,121,121,121,,,,,121,,,121,121,121,', -',121,121,121,121,,,,,121,121,,121,,121,121,,121,,121,121,,,,,121,121', -'121,121,121,121,,,,,121,,,,,,,,,,,,,,,,,,,,,,,,,,,,,121,121,,,,121,', -'121,122,121,,122,122,122,122,122,122,122,122,122,122,,,,,122,,,122,122', -'122,,,122,122,122,122,,,,,122,122,,122,,122,122,,122,,122,122,,,,,122', -'122,122,122,122,122,,,,,122,,,,,,,,,,,,,,,,,,,,,,,,,,,,,122,122,,,,122', -',122,123,122,,123,123,123,123,123,123,123,123,123,123,,,,,123,,,123', -'123,123,,,123,123,123,123,,,,,123,123,,123,,123,123,,123,,123,123,,', -',,123,123,123,123,123,123,,,,,123,,,,,,,,,,,,,,,,,,,,,,,,,,,,,123,123', -',,,123,,123,127,123,,127,127,127,127,127,127,127,127,127,127,,,,,127', -',,127,127,127,,,127,127,127,127,,,,,127,127,,127,,127,127,,127,,127', -'127,304,,304,,127,127,127,127,127,127,,,,,127,,,,,,,,,,,,,,304,304,', -',,304,,,,304,,,,,,127,127,,,304,127,,127,,127,304,304,304,304,304,304', -'304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304', -'304,304,304,304,304,304,304,304,304,304,304,,,,,,,,304,290,290,290,290', -'290,290,290,290,290,290,,,,,290,,,290,290,290,,,290,290,290,,,,,,,290', -',290,,290,290,,290,,290,290,,,,,290,290,290,290,290,290,,,,,290,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,290,290,,,,290,,290,,290,18,18,18,18,18,18,18', -'18,18,18,,,,,18,,,18,18,18,,,18,18,18,18,,,,,,18,,18,,18,18,,18,,18', -'18,,,,,18,18,18,18,18,18,,,,,18,,,,132,132,132,132,132,132,132,132,132', -'132,,,,,132,,,132,132,132,,,132,132,132,18,18,,,,18,132,18,132,18,132', -'132,,132,,132,132,289,,289,,132,132,132,132,161,161,161,161,161,161', -'161,161,161,161,,,,,,,,,,,289,289,,161,161,289,,,,289,,,,,,132,132,', -'161,289,132,161,132,,132,289,289,289,289,289,289,289,289,289,289,289', -'289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289', -'289,289,289,289,289,289,185,,185,,,,,289,,,,161,,161,,161,,,,,,,,,,', -',,185,185,,,,185,,,,185,,,,,,,,,,185,,,,,,185,185,185,185,185,185,185', -'185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185', -'185,185,185,185,185,185,185,185,185,185,78,,78,,,,,185,,,,,,,,,,,,,', -',,,,,,,78,78,,,,78,,,,78,,,,,,,,,,78,,,,,,78,78,78,78,78,78,78,78,78', -'78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78', -'78,78,89,,89,,,,,,,,,,,,,,,,,,,,,,,,,,89,89,,,,89,,,,89,,,,,,,,89,,89', -',,,,,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89', -'89,89,89,89,89,89,89,89,89,89,89,89,89,218,,218,,,,,,,,,,,,,,,,,,,,', -',,,,,218,218,,,,218,,,,218,,,,,,,,,,218,,,,,,218,218,218,218,218,218', -'218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218', -'218,218,218,218,218,218,218,218,218,218,218,256,,256,,,,,,,,,,,,,,,', -',,,,,,,,,,256,256,,,,256,,,,256,,,,,,,,,,256,,,,,,256,256,256,256,256', -'256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256', -'256,256,256,256,256,256,256,256,256,256,256,256,211,,211,,,,,,,,,,,', -',,,,,,,,,,,,,,211,211,,,,211,,,,211,,,,,,,,,,211,,,,,,211,211,211,211', -'211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211', -'211,211,211,211,211,211,211,211,211,211,211,211,211,259,,259,,,,,,,', -',,,,,,,,,,,,,,,,,,259,259,,,,259,,,,259,,,,,,,,,,259,,,,,,259,259,259', -'259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259', -'259,259,259,259,259,259,259,259,259,259,259,259,259,259,267,,267,,,', -',,,,,,,,,,,,,,,,,,,,,,267,267,,,,267,,,,267,,,,,,,,,,267,,,,,,267,267', -'267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267', -'267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,268,,268', -',,,,,,,,,,,,,,,,,,,,,,,,,268,268,,,,268,,,,268,,,,,,,,,,268,,,,,,268', -'268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268', -'268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,210', -',210,,,,,,,,,,,,,,,,,,,,,,,,,,210,210,,,,210,,,,210,,,,,,,,,,210,,,', -',,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210', -'210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210', -'43,,43,,,,,,,,,,,,,,,,,,,,,,,,,,43,43,,,,43,,,,43,,,,,,,,,,43,,,,,,43', -'43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43', -'43,43,43,43,43,43,43,43,43,43,287,,287,,,,,,,,,,,,,,,,,,,,,,,,,,287', -'287,,,,287,,,,287,,,,,,,,,,287,,,,,,287,287,287,287,287,287,287,287', -'287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287', -'287,287,287,287,287,287,287,287,287,288,,288,,,,,,,,,,,,,,,,,,,,,,,', -',,288,288,,,,288,,,,288,,,,,,,,,,288,,,,,,288,288,288,288,288,288,288', -'288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288', -'288,288,288,288,288,288,288,288,288,288,199,,199,,,,,,,,,,,,,,,,,,,', -',,,,,,199,199,,,,199,,,,199,,,,,,,,,,199,,,,,,199,199,199,199,199,199', -'199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199', -'199,199,199,199,199,199,199,199,199,199,199,181,,181,,,,,,,,,,,,,,,', -',,,,,,,,,,181,181,,,,181,,,,181,,,,,,,,,,181,,,,,,181,181,181,181,181', -'181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181', -'181,181,181,181,181,181,181,181,181,181,181,181,178,,178,,,,,,,,,,,', +'107,165,107,152,152,152,152,152,152,152,152,152,152,65,65,65,110,152', +'73,176,152,152,65,203,65,199,152,176,288,152,152,152,107,107,172,172', +'288,107,152,260,152,107,152,152,65,152,198,152,152,293,165,107,197,152', +'152,152,152,107,107,107,107,107,107,107,107,107,107,107,107,107,107', +'107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107', +'107,107,107,65,152,152,194,73,293,152,74,152,192,152,107,192,192,192', +'192,192,192,192,192,192,192,275,260,260,113,192,307,307,192,192,55,55', +'276,188,192,102,96,192,192,192,192,188,261,185,257,192,192,98,192,66', +'192,192,187,192,211,192,192,192,173,177,187,192,192,192,192,192,192', +'268,113,113,195,192,59,59,289,268,188,206,206,102,102,102,257,117,117', +'102,177,185,185,185,257,206,76,257,92,187,171,195,76,76,192,192,192', +'192,64,192,62,192,4,192,268,4,4,4,4,4,4,4,4,4,4,284,284,188,188,4,88', +'24,4,4,177,177,177,255,4,24,99,4,4,4,4,195,195,195,99,4,4,45,4,167,4', +'4,116,4,306,4,4,254,83,83,83,4,4,4,4,4,4,83,241,83,24,4,24,40,241,241', +'241,241,241,99,32,99,6,210,210,6,6,6,6,6,6,6,6,6,6,247,247,247,90,6', +'4,4,6,6,247,4,247,4,6,4,237,6,6,6,6,121,237,237,1,6,6,122,6,,6,6,234', +'6,,6,6,,234,234,,6,6,6,6,6,6,209,101,101,101,6,101,209,209,209,209,209', +'209,209,109,109,9,256,256,9,9,9,9,9,9,9,9,9,9,246,246,246,,9,6,6,9,9', +'246,6,246,6,9,6,108,9,9,9,9,,108,108,,9,9,,9,,9,9,78,9,,9,9,,78,78,', +'9,9,9,9,9,9,213,,,,9,,213,213,213,213,213,213,213,,,11,,,11,11,11,11', +'11,11,11,11,11,11,84,84,84,,11,9,9,11,11,84,9,84,9,11,9,170,11,11,11', +'11,,170,170,,11,11,,11,,11,11,169,11,,11,11,,169,169,,11,11,11,11,11', +'11,218,,,,11,,218,218,218,218,218,218,218,,,12,,,12,12,12,12,12,12,12', +'12,12,12,22,22,22,,12,11,11,12,12,22,11,22,11,12,11,82,12,12,12,12,', +'82,82,,12,12,,12,,12,12,231,12,,12,12,,231,231,,12,12,12,12,12,12,245', +',,,12,81,245,245,245,245,245,81,81,,,15,,,15,15,15,15,15,15,15,15,15', +'15,,,,,15,12,12,15,15,,12,,12,15,12,,15,15,15,15,,,,,15,15,,15,,15,15', +',15,,15,15,,,,,15,15,15,15,15,15,,,,,15,,,,,,,,,,,18,,,18,18,18,18,18', +'18,18,18,18,18,,,,,18,15,15,18,18,,15,,15,18,15,,18,18,18,18,,,,,18', +'18,,18,,18,18,,18,,18,18,,,,,18,18,18,18,18,18,,,,,18,,,,,,,,,,,153', +',,153,153,153,153,153,153,153,153,153,153,,,,,153,18,18,153,153,,18', +',18,153,18,,153,153,153,153,,,,,153,153,,153,,153,153,,153,,153,153', +',,,,153,153,153,153,153,153,,,,,153,,,,,,,,,,,20,,,20,20,20,20,20,20', +'20,20,20,20,,,,,20,153,153,20,20,,153,,153,20,153,,20,20,20,20,,,,,20', +'20,,20,,20,20,,20,,20,20,,,,,20,20,20,20,20,20,,,,,20,,,,,,,,,,,151', +',,151,151,151,151,151,151,151,151,151,151,,,,,151,20,20,151,151,,20', +',20,151,20,,151,151,151,151,,,,,151,151,,151,,151,151,,151,,151,151', +',,,,151,151,151,151,151,151,,,,,151,,,,,,,,,,,150,,,150,150,150,150', +'150,150,150,150,150,150,,,,,150,151,151,150,150,,151,,151,150,151,,150', +'150,150,150,,,,,150,150,,150,,150,150,,150,,150,150,,,,,150,150,150', +'150,150,150,,,,,150,,,,,,,,,,,149,,,149,149,149,149,149,149,149,149', +'149,149,,,,,149,150,150,149,149,,150,,150,149,150,,149,149,149,149,', +',,,149,149,,149,,149,149,,149,,149,149,,,,,149,149,149,149,149,149,', +',,,149,,,,,,,,,,,29,,,29,29,29,29,29,29,29,29,29,29,,,,,29,149,149,29', +'29,,149,,149,29,149,,29,29,29,29,,,,,29,29,,29,,29,29,,29,,29,29,29', +',,,29,29,29,29,29,29,,,,,29,,,,,,,,,,,30,,,30,30,30,30,30,30,30,30,30', +'30,,,,,30,29,29,30,30,,29,,29,30,29,,30,30,30,30,,,,,30,30,,30,,30,30', +',30,,30,30,,,,,30,30,30,30,30,30,,,,,30,,,,,,,,,,,148,,,148,148,148', +'148,148,148,148,148,148,148,,,,,148,30,30,148,148,,30,,30,148,30,,148', +'148,148,148,,,,,148,148,,148,,148,148,,148,,148,148,,,,,148,148,148', +'148,148,148,,,,,148,,,,,,,,,,,34,,,34,34,34,34,34,34,34,34,34,34,,,', +',34,148,148,34,34,,148,,148,34,148,,34,34,34,34,,,,,34,34,,34,,34,34', +',34,,34,34,,,,,34,34,34,34,34,34,,,,,34,,,,,,,,,,,35,,,35,35,35,35,35', +'35,35,35,35,35,,,,,35,34,34,35,35,,34,,34,35,34,,35,35,35,35,,,,,35', +'35,,35,,35,35,,35,,35,35,,,,,35,35,35,35,35,35,,,,,35,,,,,,,,,,,308', +',,308,308,308,308,308,308,308,308,308,308,,,,,308,35,35,308,308,,35', +',35,308,35,,308,308,308,308,,,,,308,308,,308,,308,308,,308,,308,308', +',,,,308,308,308,308,308,308,,,,,308,,,,,,,,,,,147,,,147,147,147,147', +'147,147,147,147,147,147,,,,,147,308,308,147,147,,308,,308,147,308,,147', +'147,147,147,,,,,147,147,,147,,147,147,,147,,147,147,,,,,147,147,147', +'147,147,147,,,,,147,,,,,,,,,,,49,,,49,49,49,49,49,49,49,49,49,49,,,', +',49,147,147,49,49,,147,,147,49,147,,49,49,49,49,,,,,49,49,,49,,49,49', +',49,,49,49,,,,,49,49,49,49,49,49,,,,,49,,,,,,,,,,,146,,,146,146,146', +'146,146,146,146,146,146,146,,,,,146,49,49,146,146,,49,,49,146,49,,146', +'146,146,146,,,,,146,146,,146,,146,146,,146,,146,146,,,,,146,146,146', +'146,146,146,,,,,146,,,,,,,,,,,56,,,56,56,56,56,56,56,56,56,56,56,,,', +',56,146,146,56,56,,146,,146,56,146,,56,56,56,56,,,,,56,56,,56,,56,56', +',56,,56,56,,56,,,56,56,56,56,56,56,,,,,56,,,,,,,,,,,145,,,145,145,145', +'145,145,145,145,145,145,145,,,,,145,56,56,145,145,,56,,56,145,56,,145', +'145,145,145,,,,,145,145,,145,,145,145,,145,,145,145,,,,,145,145,145', +'145,145,145,,,,,145,,,,,,,,,,,144,,,144,144,144,144,144,144,144,144', +'144,144,,,,,144,145,145,144,144,,145,,145,144,145,,144,144,144,144,', +',,,144,144,,144,,144,144,,144,,144,144,,,,,144,144,144,144,144,144,', +',,,144,,,,,,,,,,,143,,,143,143,143,143,143,143,143,143,143,143,,,,,143', +'144,144,143,143,,144,,144,143,144,,143,143,143,143,,,,,143,143,,143', +',143,143,,143,,143,143,,,,,143,143,143,143,143,143,,,,,143,,,,,,,,,', +',295,,,295,295,295,295,295,295,295,295,295,295,,,,,295,143,143,295,295', +',143,,143,295,143,,295,295,295,295,,,,,295,295,,295,,295,295,,295,,295', +'295,,,,,295,295,295,295,295,295,,,,,295,,,,,,,,,,,142,,,142,142,142', +'142,142,142,142,142,142,142,295,,,,142,295,295,142,142,,295,,295,142', +'295,,142,142,142,142,,,,,142,142,,142,,142,142,,142,,142,142,,,,,142', +'142,142,142,142,142,,,,,142,,,,,,,,,,,282,,,282,282,282,282,282,282', +'282,282,282,282,,,,,282,142,142,282,282,,142,,142,282,142,,282,282,282', +'282,,,,,282,282,,282,,282,282,,282,,282,282,,,,,282,282,282,282,282', +'282,,,,,282,,,,,,,,,,,68,,,68,68,68,68,68,68,68,68,68,68,,,,,68,282', +'282,68,68,,282,,282,68,282,,68,68,68,68,,,,,68,68,,68,,68,68,,68,,68', +'68,,,,,68,68,68,68,68,68,,,,,68,,,,,,,,,,,71,,,71,71,71,71,71,71,71', +'71,71,71,,,,,71,68,68,71,71,,68,,68,71,68,,71,71,71,71,,,,,71,71,,71', +',71,71,,71,,71,71,,,,,71,71,71,71,71,71,,,,,71,,,,,,,,,,,281,,,281,281', +'281,281,281,281,281,281,281,281,,,,,281,71,71,281,281,,71,,71,281,71', +',281,281,281,281,,,,,281,281,,281,,281,281,,281,,281,281,,,,,281,281', +'281,281,281,281,,,,,281,,,,,,,,,,,273,,,273,273,273,273,273,273,273', +'273,273,273,,,,,273,281,281,273,273,,281,,281,273,281,,273,273,273,273', +',,,,273,273,,273,,273,273,,273,,273,273,,,,,273,273,273,273,273,273', +',,,,273,,,,,,,,,,,141,,,141,141,141,141,141,141,141,141,141,141,273', +',,,141,273,273,141,141,,273,,273,141,273,,141,141,141,141,,,,,141,141', +',141,,141,141,,141,,141,141,,,,,141,141,141,141,141,141,,,,,141,,,,', +',,,,,,139,,,139,139,139,139,139,139,139,139,139,139,,,,,139,141,141', +'139,139,,141,,141,139,141,,139,139,139,139,,,,,139,139,,139,,139,139', +',139,,139,139,,,,,139,139,139,139,139,139,,,,,139,,,,,,,,,,,271,,,271', +'271,271,271,271,271,271,271,271,271,,,,,271,139,139,271,271,,139,,139', +'271,139,,271,271,271,271,,,,,271,271,,271,,271,271,,271,,271,271,,,', +',271,271,271,271,271,271,,,,,271,,,,,,,,,,,138,,,138,138,138,138,138', +'138,138,138,138,138,,,,,138,271,271,138,138,,271,,271,138,271,,138,138', +'138,138,,,,,138,138,,138,,138,138,,138,,138,138,,,,,138,138,138,138', +'138,138,,,,,138,,,,,,,,,,,136,,,136,136,136,136,136,136,136,136,136', +'136,,,,,136,138,138,136,136,,138,,138,136,138,,136,136,136,136,,,,,136', +'136,,136,,136,136,,136,,136,136,,,,,136,136,136,136,136,136,,,,,136', +',,,,,,,,,,270,,,270,270,270,270,270,270,270,270,270,270,,,,,270,136', +'136,270,270,,136,,136,270,136,,270,270,270,270,,,,,270,270,,270,,270', +'270,,270,,270,270,,,,,270,270,270,270,270,270,,,,,270,,,,,,,,,,,135', +',,135,135,135,135,135,135,135,135,135,135,,,,,135,270,270,135,135,,270', +',270,135,270,,135,135,135,135,,,,,135,135,,135,,135,135,,135,,135,135', +',,,,135,135,135,135,135,135,,,,,135,,,,,,,,,,,134,,,134,134,134,134', +'134,134,134,134,134,134,,,,,134,135,135,134,134,,135,,135,134,135,,134', +'134,134,134,,,,,134,134,,134,,134,134,,134,,134,134,,,,,134,134,134', +'134,134,134,,,,,134,,,,,,,,,,,133,,,133,133,133,133,133,133,133,133', +'133,133,,,,,133,134,134,133,133,,134,,134,133,134,,133,133,133,133,', +',,,133,133,,133,,133,133,,133,,133,133,,,,,133,133,133,133,133,133,', +',,,133,,,,,,,,,,,259,,,259,259,259,259,259,259,259,259,259,259,,,,,259', +'133,133,259,259,,133,,133,259,133,,259,259,259,259,,,,,259,259,,259', +',259,259,,259,,259,259,,,,,259,259,259,259,259,259,,,,,259,,,,,,,,,', +',86,,,86,86,86,86,86,86,86,86,86,86,,,,,86,259,259,86,86,,259,,259,86', +'259,,86,86,86,86,,,,,86,86,,86,,86,86,,86,,86,86,86,,,,86,86,86,86,86', +'86,,,,,86,,,,,,,,,,,87,,,87,87,87,87,87,87,87,87,87,87,,,,,87,86,86', +'87,87,,86,,86,87,86,,87,87,87,87,,,,,87,87,,87,,87,87,,87,,87,87,,,', +',87,87,87,87,87,87,,,,,87,,,,,,,,,,,156,,,156,156,156,156,156,156,156', +'156,156,156,,,,,156,87,87,156,156,,87,,87,156,87,,156,156,156,156,,', +',,156,156,,156,,156,156,,156,,156,156,,,,,156,156,156,156,156,156,,', +',,156,,,,,,,,,,,132,,,132,132,132,132,132,132,132,132,132,132,,,,,132', +'156,156,132,132,,156,,156,132,156,,132,132,132,132,,,,,132,132,,132', +',132,132,,132,,132,132,,,,,132,132,132,132,132,132,,,,,132,,,,,,,,,', +',131,,,131,131,131,131,131,131,131,131,131,131,,,,,131,132,132,131,131', +',132,,132,131,132,,131,131,131,131,,,,,131,131,,131,,131,131,,131,,131', +'131,,,,,131,131,131,131,131,131,,,,,131,,,,,,,,,,,130,,,130,130,130', +'130,130,130,130,130,130,130,,,,,130,131,131,130,130,,131,,131,130,131', +',130,130,130,130,,,,,130,130,,130,,130,130,,130,,130,130,,,,,130,130', +'130,130,130,130,,,,,130,,,,,,,,,,,205,,,205,205,205,205,205,205,205', +'205,205,205,,,,,205,130,130,205,205,,130,,130,205,130,,205,205,205,205', +',,,,205,205,,205,,205,205,,205,,205,205,,,,,205,205,205,205,205,205', +',,,,205,,,,,,,,,,,204,,,204,204,204,204,204,204,204,204,204,204,,,,', +'204,205,205,204,204,,205,,205,204,205,,204,204,204,204,,,,,204,204,', +'204,,204,204,,204,,204,204,,,,,204,204,204,204,204,204,,,,,204,,,,,', +',,,,,123,,,123,123,123,123,123,123,123,123,123,123,,,,,123,204,204,123', +'123,,204,,204,123,204,,123,123,123,123,,,,,123,123,,123,,123,123,,123', +',123,123,,,,,123,123,123,123,123,123,,,,,123,,,,,,,,,,,129,,,129,129', +'129,129,129,129,129,129,129,129,,,,,129,123,123,129,129,,123,,123,129', +'123,,129,129,129,129,,,,,129,129,,129,,129,129,,129,,129,129,,,,,129', +'129,129,129,129,129,,,,,129,,,,,,,,,,,154,,,154,154,154,154,154,154', +'154,154,154,154,,,,,154,129,129,154,154,,129,,129,154,129,,154,154,154', +'154,,,,,154,154,,154,,154,154,,154,,154,154,,,,,154,154,154,154,154', +'154,,,,,154,,,,,,,,,,,103,,,103,103,103,103,103,103,103,103,103,103', +',,,,103,154,154,103,103,,154,,154,103,154,,103,103,103,103,,,,,103,103', +',103,,103,103,,103,,103,103,,,,,103,103,103,103,103,103,,,,,103,,,,', +',,,,,,128,,,128,128,128,128,128,128,128,128,128,128,,,,,128,103,103', +'128,128,,103,,103,128,103,,128,128,128,128,,,,,128,128,,128,,128,128', +',128,,128,128,,,,,128,128,128,128,128,128,,,,,128,,,,,,,,,,,191,,,191', +'191,191,191,191,191,191,191,191,191,,,,,191,128,128,191,191,,128,,128', +'191,128,,191,191,191,191,,,,,191,191,,191,,191,191,,191,,191,191,,,', +',191,191,191,191,191,191,,,,,191,,,,,,,,,,,106,,,106,106,106,106,106', +'106,106,106,106,106,,,,,106,191,191,106,106,,191,,191,106,191,,106,106', +'106,106,,,,,106,106,,106,,106,106,,106,,106,106,106,,,,106,106,106,106', +'106,106,,,,,106,,,,,,,,,,,0,,,0,0,0,0,0,0,0,0,0,0,,,,,0,106,106,0,0', +',106,,106,0,106,,0,0,0,0,,,,,0,0,,0,,0,0,,0,,0,0,0,,,,0,0,0,0,0,0,217', +',,,0,,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217', +'217,217,217,217,217,,,,,,,0,0,0,0,,0,,0,127,0,,127,127,127,127,127,127', +'127,127,127,127,,,,,127,,,127,127,,,,,127,,,127,127,127,127,,,,,127', +'127,,127,,127,127,,127,,127,127,,,,,127,127,127,127,127,127,,,,,127', +',,,,,,,,,,184,,,184,184,184,184,184,184,184,184,184,184,,,,,184,127', +'127,184,184,,127,,127,184,127,,184,184,184,184,,,,,184,184,,184,,184', +'184,,184,,184,184,,,,,184,184,184,184,184,184,,,,,184,,,,,,,,,,,183', +',,183,183,183,183,183,183,183,183,183,183,,,,,183,184,184,183,183,,184', +',184,183,184,,183,183,183,183,,,,,183,183,,183,,183,183,,183,,183,183', +',,,,183,183,183,183,183,183,,,,,183,,,,,,,,,,,126,,,126,126,126,126', +'126,126,126,126,126,126,,,,,126,183,183,126,126,,183,,183,126,183,,126', +'126,126,126,,,,,126,126,,126,,126,126,,126,,126,126,,,,,126,126,126', +'126,126,126,,,,,126,,,,,,,,,,,112,,,112,112,112,112,112,112,112,112', +'112,112,,,,,112,126,126,112,112,,126,,126,112,126,,112,112,112,112,', +',,,112,112,,112,,112,112,,112,,112,112,,,,,112,112,112,112,112,112,', +',,,112,,,,,,,,,,,125,,,125,125,125,125,125,125,125,125,125,125,,,,,125', +'112,112,125,125,,112,,112,125,112,,125,125,125,125,,,,,125,125,,125', +',125,125,,125,,125,125,,,,,125,125,125,125,125,125,,,,,125,,,,,,,,,', +',162,,,162,162,162,162,162,162,162,162,162,162,,,,,162,125,125,162,162', +',125,,125,162,125,,162,162,162,162,,,,,162,162,,162,,162,162,,162,,162', +'162,,,,,162,162,162,162,162,162,,,,,162,,,,,,,,,,,124,,,124,124,124', +'124,124,124,124,124,124,124,,,,,124,162,162,124,124,,162,,162,124,162', +',124,124,124,124,,,,,124,124,,124,,124,124,,124,,124,124,,,,,124,124', +'124,124,124,124,,,,,124,,,,,,,,,,,118,,,118,118,118,118,118,118,118', +'118,118,118,,,,,118,124,124,118,118,,124,,124,118,124,,118,118,118,118', +',,,,118,118,,118,,118,118,,118,,118,118,,,,,118,118,118,118,118,118', +',,,,118,,,,,,,,,,,119,,,119,119,119,119,119,119,119,119,119,119,,,,', +'119,118,118,119,119,,118,,118,119,118,,119,119,119,119,,,,,119,119,', +'119,,119,119,,119,,119,119,,,,,119,119,119,119,119,119,,,,,119,,,,,', +',,,,,120,,,120,120,120,120,120,120,120,120,120,120,,,,,120,119,119,120', +'120,,119,,119,120,119,,120,120,120,120,,,,,120,120,,120,,120,120,,120', +',120,120,,,,,120,120,120,120,120,120,,,,,120,,,,,,,,,,,158,,,158,158', +'158,158,158,158,158,158,158,158,,,,,158,120,120,158,158,,120,,120,158', +'120,,158,158,158,158,,,,,158,158,,158,,158,158,,158,,158,158,,,,,158', +'158,158,158,158,158,,,,,158,,,,,,,,,,,157,,,157,157,157,157,157,157', +'157,157,157,157,,,,,157,158,158,157,157,,158,,158,157,158,,157,157,157', +'157,,,,,157,157,,157,,157,157,,157,,157,157,,,,,157,157,157,157,157', +'157,,,,,157,,,,,,,,,,,155,,,155,155,155,155,155,155,155,155,155,155', +',,,,155,157,157,155,155,,157,,157,155,157,,155,155,155,155,,,,,155,155', +',155,,155,155,,155,,155,155,299,,299,,155,155,155,155,155,155,233,,', +',155,,233,233,233,233,233,233,233,233,233,233,233,233,233,,,,299,299', +',,,299,,,,299,,155,155,,,,155,,155,299,155,,,,,299,299,299,299,299,299', +'299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299', +'299,299,299,299,299,299,299,299,299,299,299,312,,312,,,,,,,299,,160', +'160,160,160,160,160,160,160,160,160,,,,,,,,,,,,312,312,,,,312,160,160', +',312,,,,,,,,,,312,,160,,,160,312,312,312,312,312,312,312,312,312,312', +'312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312', +'312,312,312,312,312,312,312,,,,,,,,,,312,,,,,160,,160,,160,19,19,19', +'19,19,19,19,19,19,19,,,300,300,300,300,300,300,300,300,300,300,,,,,300', +'19,19,300,300,,,,,300,,,300,300,300,,19,,,19,,300,,300,,300,300,,300', +',300,300,,,,,300,300,300,300,300,300,236,,,,300,,236,236,236,236,236', +'236,236,236,236,236,236,236,236,,,,,,,,19,,19,,19,,,300,300,,,,300,', +'300,,300,310,310,310,310,310,310,310,310,310,310,,,,,310,,,310,310,', +',,,310,,,310,310,310,,,,,,,310,,310,,310,310,,310,,310,310,,,,,310,310', +'310,310,310,310,227,,,,310,,227,227,227,227,227,227,227,227,227,227', +',,23,23,23,23,23,23,23,23,23,23,,,,,23,310,310,23,23,,310,,310,23,310', +',23,23,23,23,,,,,,23,,23,,23,23,,23,,23,23,272,,272,,23,23,23,23,23', +'23,230,,,,23,,230,230,230,230,230,230,230,230,230,230,230,230,230,,', +',272,272,,,,272,,,,272,,23,23,,,,23,,23,272,23,,,,,272,272,272,272,272', +'272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272', +'272,272,272,272,272,272,272,272,272,272,272,272,264,208,264,,,,,208', +'208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208', +'208,208,208,,,,,264,264,,,,264,,,,264,,,,,,,,,,264,,,,,,264,264,264', +'264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264', +'264,264,264,264,264,264,264,264,264,264,264,264,264,264,269,229,269', +',,,,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229', +'229,229,229,229,229,,,,,269,269,,,,269,,,,269,,,,,,,,,,269,,,,,,269', +'269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269', +'269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,80,220', +'80,,,,,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220', +'220,220,220,220,220,,,,,80,80,,,,80,,,,80,,,,,,,,80,,80,,,,,,80,80,80', +'80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80', +'80,80,80,80,80,80,80,80,79,212,79,,,,,212,212,212,212,212,212,212,212', +'212,212,212,212,212,212,212,212,212,212,212,212,212,,,,,79,79,,,,79', +',,,79,,,,,,,,79,,79,,,,,,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79', +'79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,77,224,77,', +',,,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224', +'224,224,224,224,,,,,77,77,,,,77,,,,77,,,,,,,,77,,77,,,,,,77,77,77,77', +'77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77', +'77,77,77,77,77,77,77,263,244,263,,,,,244,244,244,244,244,244,244,244', +'244,244,244,244,244,244,244,244,244,244,244,244,244,,,,,263,263,,,,263', +',,,263,,,,,,,,,,263,,,,,,263,263,263,263,263,263,263,263,263,263,263', +'263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263', +'263,263,263,263,263,263,292,226,292,,,,,226,226,226,226,226,226,226', +'226,226,226,226,226,226,226,226,226,226,226,226,226,226,,,,,292,292', +',,,292,,,,292,,,,,,,,,,292,,,,,,292,292,292,292,292,292,292,292,292', +'292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292', +'292,292,292,292,292,292,292,292,63,240,63,,,,,240,240,240,240,240,240', +'240,240,240,240,240,240,240,,,,,,,,,,,,,63,63,,,,63,,,,63,,,,,,,,,,63', +',,,,,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63', +'63,63,63,63,63,63,63,63,63,63,63,63,63,297,221,297,,,,,221,221,221,221', +'221,221,221,221,221,221,,,,,,,,,,,,,,,,297,297,,,,297,,,,297,,,,,,,', +',,297,,,,,,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297', +'297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297', +'297,297,298,225,298,,,,,225,225,225,225,225,225,225,225,225,225,,,,', +',,,,,,,,,,,298,298,,,,298,,,,298,,,,,,,,,,298,,,,,,298,298,298,298,298', +'298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298', +'298,298,298,298,298,298,298,298,298,298,298,298,228,,228,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,228,228,,,,228,,,,228,,,,,,,,,,228,,,,,,228,228,228', +'228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228', +'228,228,228,228,228,228,228,228,228,228,228,228,228,228,222,,222,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,222,222,,,,222,,,,222,,,,,,,,,,222,,,,,,222', +'222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222', +'222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,309', +',309,,,,,,,,,,,,,,,,,,,,,,,309,,,,,,,309,309,,,,309,,,,309,,,,,,,,,', +'309,,,,,,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309', +'309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309', +'309,309,214,,214,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,214,214,,,,214,,,,214', +',,,,,,,,,214,,,,,,214,214,214,214,214,214,214,214,214,214,214,214,214', +'214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214', +'214,214,214,214,193,,193,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,193,193,,,,193', +',,,193,,,,,,,,,,193,,,,,,193,193,193,193,193,193,193,193,193,193,193', +'193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193', +'193,193,193,193,193,193,104,,104,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,104,104', +',,,104,,,,104,,,,,,,,,,104,,,,,,104,104,104,104,104,104,104,104,104', +'104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104', +'104,104,104,104,104,104,104,104,179,,179,,,,,,,,,,,,,,,,,,,,,,,179,', +',,,,,179,179,,,,179,,,,179,,,,,,,,,,179,,,,,,179,179,179,179,179,179', +'179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179', +'179,179,179,179,179,179,179,179,179,179,179,178,,178,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,178,178,,,,178,,,,178,,,,,,,,,,178,,,,,,178,178,178,178', '178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178', -'178,178,178,178,178,178,178,178,178,178,178,178,178,168,,168,,,,,,,', -',,,,,,,,,,,,,,,,,,168,168,,,,168,,,,168,,,,,,,,168,,168,,,,,,168,168', -'168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168', -'168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,302,,302', -',,,,,,,,,,,,,,,,,,,,,,,,,302,302,,,,302,,,,302,,,,,,,,,,302,,,,,,302', -'302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302', -'302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,166', -',166,,,,,,,,,,,,,,,,,,,,,,,,,,166,166,,,,166,,,,166,,,,,,,,166,,166', -',,,,,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166', -'166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166', -'166,312,,312,,,,,,,,,,,,,,,,,,,,,,,,,,312,312,,,,312,,,,312,,,,,,,,', -',312,,,,,,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312', -'312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312', -'312,312,102,102,,,,,,,,102,,,,,,,,,,102,,,,,,102,102,102,102,102,102', -'102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102', -'102,102,102,102,102,102,102,102,102,102,102,248,248,,,,,,,,248,,,,,', -',,,,248,,,,,,248,248,248,248,248,248,248,248,248,248,248,248,248,248', +'178,178,178,178,178,178,178,178,178,178,178,178,178,315,,315,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,315,315,,,,315,,,,315,,,,,,,,,,315,,,,,,315,315', +'315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315', +'315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,201,,201', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,201,201,,,,201,,,,201,,,,,,,,,,201,,,,', +',201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201', +'201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201', +'317,,317,,,,,,,,,,,,,,,,,,,,,,,317,,,,,,,317,317,,,,317,,,,317,,,,,', +',,,,317,,,,,,317,317,317,317,317,317,317,317,317,317,317,317,317,317', +'317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317', +'317,317,317,95,95,,,,,,,,95,,,,,,,,,,95,,,,,,95,95,95,95,95,95,95,95', +'95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95', +'95,95,95,248,248,,,,,,,,248,,,,,,,,,,248,,,,,,248,248,248,248,248,248', '248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248', -'248,248,248,238,238,,,,,,,,238,,,,,,,,,,238,,,,,,238,238,238,238,238', -'238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238', -'238,238,238,238,238,238,238,238,238,105,105,,,,,,,,105,,,,,,,,,,105', -',,,,,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105', -'105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,205,205', -',,,,,,,205,,,,,,,,,,205,,,,,,205,205,205,205,205,205,205,205,205,205', -'205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205', -'205,205,205,205,241,241,,,,,,,,241,,,,,,,,,,241,,,,,,241,241,241,241', -'241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241', -'241,241,241,241,241,241,241,241,241,241,295,,,,,,,,295,,,,,,,,,,295', -',,,,,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295', -'295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,296,,,,', -',,,296,,,,,,,,,,296,,,,,,296,296,296,296,296,296,296,296,296,296,296', -'296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296', -'296,296,296,274,,,,,,,,274,,,,,,,,,,274,,,,,,274,274,274,274,274,274', -'274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274', -'274,274,274,274,274,274,274,274,275,,,,,,,,275,,,,,,,,,,275,,,,,,275', -'275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275', -'275,275,275,275,275,275,275,275,275,275,275,275,275,237,,,,,,,,237,', -',,,,,,,,237,,,,,,237,237,237,237,237,237,237,237,237,237,237,237,237', -'237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237', -'237,96,,,,,,,,,,96,,,,,,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96', -'96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,79,,,,,,,,,,79,,,,,,79', -'79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79', -'79,79,79,79,79,79,226,,,,,,,,,,226,,,,,,226,226,226,226,226,226,226', -'226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226', -'226,226,226,226,226,226,219,,,,,,219,219,219,219,219,219,219,219,219', +'248,248,248,248,248,248,248,248,248,248,248,223,223,,,,,,,,223,,,,,', +',,,,223,,,,,,223,223,223,223,223,223,223,223,223,223,223,223,223,223', +'223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223', +'219,219,,,,,,,,219,,,,,,,,,,219,,,,,,219,219,219,219,219,219,219,219', '219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219', -'219,219,219,219,222,,,,,,222,222,222,222,222,222,222,222,222,222,222', -'222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222', -'222,222,230,,,,,,230,230,230,230,230,230,230,230,230,230,230,230,230', -'230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230', -'215,,,,,,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215', -'215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,227,,,,', -',227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227', -'227,227,227,227,227,227,227,227,227,227,227,227,227' ] - racc_action_check = arr = Array.new(10011, nil) +'219,219,219,219,219,219,111,111,,,,,,,,111,,,,,,,,,,111,,,,,,111,111', +'111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111', +'111,111,111,111,111,111,111,111,111,111,111,111,216,216,,,,,,,,216,', +',,,,,,,,216,,,,,,216,216,216,216,216,216,216,216,216,216,216,216,216', +'216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216', +'216,279,,,,,,,,279,,,,,,,,,,279,,,,,,279,279,279,279,279,279,279,279', +'279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279', +'279,279,279,279,279,279,304,,,,,,,,304,,,,,,,,,,304,,,,,,304,304,304', +'304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304', +'304,304,304,304,304,304,304,304,304,304,304,280,,,,,,,,280,,,,,,,,,', +'280,,,,,,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280', +'280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,303', +',,,,,,,303,,,,,,,,,,303,,,,,,303,303,303,303,303,303,303,303,303,303', +'303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303', +'303,303,303,303,215,,,,,,,,215,,,,,,,,,,215,,,,,,215,215,215,215,215', +'215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215', +'215,215,215,215,215,215,215,215,215,85,,,,,,,,,,85,,,,,,85,85,85,85', +'85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85', +'85,85,85,105,,,,,,,,,,105,,,,,,105,105,105,105,105,105,105,105,105,105', +'105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105', +'105,105,105,242,,,,,,,,,,242,,,,,,242,242,242,242,242,242,242,242,242', +'242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242', +'242,242,242,242,238,,,,,,238,238,238,238,238,238,238,238,238,238,238', +'238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238', +'238,238,232,,,,,,232,232,232,232,232,232,232,232,232,232,232,232,232', +'232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232', +'235,,,,,,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235', +'235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,243,,,,', +',243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243', +'243,243,243,243,243,243,243,243,243,243,243,243,243,207,,,,,,207,207', +'207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207', +'207,207,207,207,207,207,207,207,207,207,207' ] + racc_action_check = arr = Array.new(8898, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -714,341 +697,343 @@ def on_error(error_token_id, error_value, value_stack) end racc_action_pointer = [ - 4990, 305, 190, 286, nil, 72, nil, 478, 218, 670, - nil, 191, nil, nil, -2, 958, nil, 1054, 7142, nil, - nil, nil, 237, nil, nil, nil, 279, nil, nil, nil, - 1438, nil, nil, nil, nil, nil, 86, 1630, nil, nil, - nil, 64, 316, 8204, nil, 187, 165, 86, nil, nil, - 2302, nil, nil, 2398, nil, nil, nil, 2494, nil, nil, - nil, 2590, 2686, nil, nil, nil, 2782, nil, nil, nil, - 2878, nil, 2974, 0, nil, -47, 67, 3358, 7421, 9700, - 3646, nil, nil, 114, nil, 260, 309, 4030, nil, 7508, - nil, 272, nil, 179, 217, 213, 9654, 4702, 15, 160, - -2, -36, 9046, 9, 173, 9220, 5566, 160, nil, nil, - 44, -17, 5950, 6046, 6142, nil, 6238, 6334, nil, 6430, - 6526, 6622, 6718, 6814, 5374, 5854, 5758, 6910, 5278, 94, - 5086, 4606, 7202, 4318, 4222, 4126, 3934, 3742, 3454, 3166, - 2206, 2110, 293, 226, 1534, 1342, 1246, 1150, 862, 766, - 574, 382, 3838, nil, 107, 315, nil, nil, nil, 1918, - nil, 7252, nil, -6, 87, 166, 8900, 323, 8726, 227, - 358, 22, -39, -67, nil, 5662, 5470, nil, 8639, 142, - 175, 8552, nil, nil, nil, 7334, nil, 146, 138, 113, - nil, 4894, 4798, 72, nil, 215, 187, 236, nil, 8465, - nil, 287, 4510, 4414, -11, 9276, 390, 1446, 295, 1462, - 8117, 7769, 678, 1254, -10, 9890, 1062, 279, 7595, 9782, - 1350, 113, 9818, nil, 1158, 1558, 9746, 9926, 966, 1369, - 9854, 870, 1177, 225, 164, 774, 1081, 9607, 9164, 582, - 1273, 9332, 486, 1542, nil, nil, nil, nil, 9105, 171, - 75, nil, -20, nil, 106, 46, 7682, 3550, 3262, 7856, - 3070, 21, nil, nil, nil, nil, 298, 7943, 8030, nil, - 94, nil, 104, nil, 9497, 9552, 2014, 1822, nil, 92, - nil, 213, 155, nil, 1726, nil, nil, 8291, 8378, 7247, - 7047, nil, nil, nil, nil, 9387, 9442, nil, 256, nil, - -21, -46, 8813, nil, 6955, 272, nil, 118, 5182, nil, - nil, nil, 8987 ] + 4416, 290, nil, nil, 198, nil, 272, nil, nil, 346, + nil, 420, 494, nil, nil, 568, nil, nil, 642, 5725, + 790, nil, 494, 5910, 213, nil, nil, nil, nil, 1086, + 1160, nil, 248, nil, 1308, 1382, nil, nil, nil, nil, + 214, nil, nil, nil, nil, 239, nil, nil, nil, 1604, + nil, nil, nil, nil, nil, 26, 1752, nil, nil, 68, + nil, nil, 184, 6687, 145, -2, 138, nil, 2270, nil, + nil, 2344, nil, -3, 9, nil, 131, 6414, 339, 6323, + 6232, 507, 471, 235, 420, 8537, 3306, 3380, 204, nil, + 276, nil, 172, nil, nil, 7929, 35, nil, 46, 222, + nil, 238, 75, 4120, 7415, 8583, 4342, -2, 323, 317, + 16, 8159, 4812, 64, nil, nil, 146, 140, 5108, 5182, + 5256, 293, 224, 3898, 5034, 4886, 4738, 4516, 4194, 3972, + 3676, 3602, 3528, 3158, 3084, 3010, 2862, nil, 2788, 2640, + nil, 2566, 2122, 1974, 1900, 1826, 1678, 1530, 1234, 1012, + 938, 864, -2, 716, 4046, 5478, 3454, 5404, 5330, nil, + 5626, nil, 4960, nil, nil, -1, nil, 238, nil, 413, + 397, 168, -60, 61, nil, nil, -22, 126, 7597, 7506, + nil, nil, nil, 4664, 4590, 83, nil, 138, 119, nil, + nil, 4268, 98, 7324, 5, 137, nil, 22, 32, -26, + nil, 7779, nil, 9, 3824, 3750, 132, 8809, 6000, 280, + 240, 57, 6273, 354, 7233, 8490, 8215, 4424, 428, 8103, + 6182, 6728, 7051, 8047, 6364, 6819, 6546, 5844, 6960, 6091, + 5918, 487, 8701, 5486, 265, 8737, 5745, 249, 8665, nil, + 6637, 207, 8629, 8773, 6455, 502, 346, 272, 7988, nil, + nil, nil, nil, nil, 198, 136, 253, 133, nil, 3232, + 20, 45, nil, 6505, 6050, nil, nil, nil, 153, 6141, + 2936, 2714, 5959, 2492, nil, 62, 73, nil, nil, 8270, + 8380, 2418, 2196, nil, 176, nil, nil, nil, -13, 115, + nil, nil, 6596, -2, nil, 2048, nil, 6778, 6869, 5527, + 5737, nil, nil, 8435, 8325, nil, 194, 22, 1456, 7142, + 5836, nil, 5618, nil, nil, 7688, nil, 7870, nil, nil ] racc_action_default = [ - -1, -181, -136, -181, -15, -124, -16, -181, -118, -181, - -17, -181, -18, -126, -181, -181, -19, -181, -46, -34, - -20, -28, -181, -21, -29, -31, -181, -47, -22, -35, - -181, -2, -30, -23, -36, -32, -3, -181, -104, -37, - -33, -181, -181, -5, -38, -174, -8, -181, -39, -9, - -181, -40, -10, -181, -105, -103, -96, -181, -106, -97, - -11, -181, -181, -107, -26, -12, -181, -108, -27, -13, - -181, -14, -181, -181, -98, -100, -181, -181, -137, -55, - -136, -110, -114, -181, -129, -181, -181, -181, -115, -181, - -44, -118, -119, -181, -181, -181, -56, -136, -125, -181, - -181, -50, -45, -181, -181, -150, -7, -181, -25, -4, - -157, -181, -181, -181, -181, -58, -181, -181, -57, -181, - -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, - -181, -181, -93, -181, -181, -181, -181, -181, -181, -181, - -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, - -181, -181, -181, -172, -181, -174, -176, -178, -109, -181, - -128, -181, -95, -51, -48, -49, -153, -52, -181, -54, - -53, -181, -181, -181, -143, -181, -181, -135, -138, -181, - -181, -137, -111, -112, -113, -181, -170, -181, -181, -181, - -117, -181, -181, -181, -151, -181, -181, -146, 313, -6, - -24, -181, -181, -181, -181, -90, -79, -68, -80, -69, - -179, -154, -81, -70, -59, -83, -71, -60, -180, -84, - -72, -61, -85, -82, -73, -62, -91, -86, -74, -63, - -87, -75, -64, -181, -181, -76, -65, -92, -88, -77, - -66, -89, -78, -67, -171, -175, -173, -177, -41, -181, - -127, -152, -181, -99, -181, -181, -140, -181, -181, -139, - -181, -130, -116, -123, -121, -120, -181, -42, -43, -132, - -181, -147, -181, -158, -159, -160, -181, -181, -156, -155, - -102, -181, -181, -165, -181, -94, -101, -141, -142, -181, - -102, -131, -122, -149, -148, -162, -161, -166, -181, -163, - -181, -181, -144, -133, -181, -181, -169, -167, -181, -134, - -164, -168, -145 ] + -1, -183, -97, -11, -183, -106, -183, -26, -12, -183, + -107, -183, -183, -27, -13, -183, -108, -14, -183, -183, + -183, -15, -124, -46, -118, -16, -28, -17, -29, -138, + -183, -31, -183, -18, -183, -183, -126, -35, -19, -36, + -183, -34, -20, -37, -21, -183, -47, -22, -38, -183, + -2, -30, -23, -39, -32, -3, -183, -104, -40, -183, + -103, -33, -183, -5, -183, -8, -176, -9, -183, -96, + -10, -183, -105, -183, -100, -98, -49, -155, -52, -183, + -183, -54, -53, -183, -125, -55, -138, -183, -183, -110, + -183, -114, -183, -115, -129, -45, -183, -44, -183, -118, + -119, -183, -183, -183, -139, -56, -138, -183, -50, -183, + -183, -152, -7, -183, -25, -4, -159, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -58, -183, -183, + -57, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -93, -183, -183, -183, -183, -183, -183, -95, + -183, -109, -183, -128, -180, -183, -174, -176, -178, -51, + -48, -183, -183, -183, -154, -172, -183, -183, -139, -183, + -111, -112, -113, -183, -183, -183, -117, -183, -183, -137, + -145, -183, -183, -140, -183, -183, -153, -148, -183, -183, + 320, -6, -24, -183, -183, -183, -183, -87, -75, -64, + -183, -183, -76, -65, -181, -92, -88, -77, -66, -89, + -78, -67, -182, -90, -79, -68, -80, -69, -156, -81, + -70, -59, -83, -71, -60, -84, -72, -61, -85, -82, + -73, -62, -91, -86, -74, -63, -127, -183, -41, -173, + -177, -175, -179, -99, -183, -183, -183, -183, -167, -183, + -130, -183, -116, -42, -43, -123, -121, -120, -183, -142, + -183, -183, -141, -183, -132, -183, -183, -149, -160, -161, + -162, -183, -183, -158, -157, -102, -94, -101, -183, -183, + -168, -165, -146, -183, -131, -183, -122, -143, -144, -183, + -102, -150, -151, -164, -163, -171, -183, -169, -183, -183, + -102, -133, -183, -166, -170, -147, -135, -183, -134, -136 ] racc_goto_table = [ - 31, 88, 41, 90, 78, 79, 111, 160, 158, 89, - 74, 96, 99, 98, 76, 93, 36, 100, 283, 101, - 102, 26, 204, 301, 103, 264, 265, 197, 281, 254, - 244, 73, 105, 155, 291, 156, 106, 157, nil, nil, - nil, 109, 88, nil, nil, 153, nil, 297, nil, 162, - nil, nil, 163, 107, nil, 164, nil, nil, nil, 165, - 160, 158, nil, 166, 167, nil, 306, nil, 168, nil, - nil, nil, 169, nil, 170, nil, nil, nil, nil, 178, - nil, nil, 181, nil, nil, nil, 90, nil, nil, 185, - nil, 186, 180, 188, 88, 88, nil, nil, 187, 181, - nil, nil, nil, 292, nil, nil, 233, 106, 199, 193, - nil, nil, nil, nil, 205, 206, 207, nil, 208, 209, - nil, 210, 211, 212, 213, 214, 215, 216, 217, 218, - 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, 279, 247, 235, 236, 237, 238, - 239, 240, 241, 242, 243, 246, 245, nil, nil, 250, - 249, 248, nil, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, nil, nil, nil, 257, 256, 259, nil, - 253, nil, nil, 90, 90, nil, nil, 188, nil, 266, - nil, nil, nil, 267, 268, nil, nil, nil, 271, nil, - nil, nil, nil, nil, 274, 275, 278, nil, nil, nil, - nil, 160, 158, nil, nil, nil, nil, nil, nil, nil, + 50, 161, 163, 59, 258, 206, 75, 76, 101, 77, + 166, 97, 78, 168, 79, 80, 266, 267, 81, 161, + 163, 82, 102, 85, 45, 84, 95, 293, 83, 117, + 197, 55, 104, 105, 257, 254, 249, 107, 108, 73, + 167, 294, 164, 109, nil, nil, nil, nil, nil, nil, + nil, nil, 111, nil, nil, 112, nil, nil, nil, 115, + nil, nil, nil, nil, nil, nil, nil, 159, nil, nil, + nil, 169, nil, nil, 170, nil, nil, nil, nil, 177, + 174, nil, 175, 185, nil, 290, 97, 113, 210, 178, + 179, nil, nil, nil, nil, nil, nil, 296, 284, 195, + nil, 187, nil, nil, nil, nil, 193, nil, nil, 178, + nil, 251, nil, 112, 252, 201, 305, nil, nil, nil, + nil, 207, 208, 209, nil, nil, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + nil, 226, 227, nil, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, nil, 256, nil, 248, 247, nil, 250, 246, + nil, nil, nil, nil, 97, 97, 253, nil, nil, nil, + nil, nil, 161, 163, nil, 187, 263, 264, 268, nil, + nil, nil, 270, nil, 269, 272, nil, nil, nil, nil, + nil, nil, 277, nil, nil, nil, nil, 279, 280, 283, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 88, 88, 282, nil, nil, - nil, nil, nil, nil, nil, nil, 285, nil, nil, 287, - 288, 90, 289, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 293, nil, 294, nil, 282, nil, 295, 296, - nil, nil, 300, nil, nil, nil, 302, nil, nil, nil, - nil, nil, 304, nil, nil, 282, nil, nil, nil, nil, - 305, nil, nil, 307, nil, nil, nil, 311, nil, nil, - 312 ] + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, 256, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, 97, 288, 286, nil, nil, + nil, nil, 292, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, 297, 298, 256, 299, nil, 301, 302, + nil, nil, nil, nil, 303, 304, nil, nil, nil, nil, + nil, nil, 306, nil, nil, nil, 307, nil, 309, nil, + nil, nil, nil, 312, nil, nil, nil, 314, nil, nil, + nil, 315, nil, 317 ] racc_goto_check = [ - 2, 30, 4, 21, 5, 5, 40, 36, 31, 5, - 26, 5, 6, 32, 37, 34, 3, 5, 43, 5, - 5, 1, 41, 38, 4, 23, 23, 39, 42, 25, - 44, 24, 5, 46, 8, 47, 2, 48, nil, nil, - nil, 2, 30, nil, nil, 45, nil, 43, nil, 4, - nil, nil, 5, 3, nil, 5, nil, nil, nil, 5, - 36, 31, nil, 5, 5, nil, 43, nil, 5, nil, - nil, nil, 5, nil, 5, nil, nil, nil, nil, 5, - nil, nil, 5, nil, nil, nil, 21, nil, nil, 5, - nil, 4, 37, 2, 30, 30, nil, nil, 34, 5, - nil, nil, nil, 23, nil, nil, 40, 2, 5, 37, - nil, nil, nil, nil, 5, 5, 5, nil, 5, 5, - nil, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 2, 31, 37, 4, 44, 42, 26, 5, 35, 5, + 46, 21, 5, 48, 5, 5, 23, 23, 5, 31, + 37, 5, 38, 5, 1, 32, 5, 39, 6, 41, + 40, 3, 5, 5, 43, 25, 45, 5, 5, 24, + 47, 8, 49, 4, nil, nil, nil, nil, nil, nil, + nil, nil, 5, nil, nil, 2, nil, nil, nil, 2, + nil, nil, nil, nil, nil, nil, nil, 4, nil, nil, + nil, 5, nil, nil, 5, nil, nil, nil, nil, 38, + 4, nil, 4, 35, nil, 44, 21, 3, 41, 5, + 5, nil, nil, nil, nil, nil, nil, 23, 42, 38, + nil, 2, nil, nil, nil, nil, 5, nil, nil, 5, + nil, 46, nil, 2, 48, 5, 44, nil, nil, nil, + nil, 5, 5, 5, nil, nil, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + nil, 5, 5, nil, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 41, 47, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 45, 4, nil, nil, 6, - 32, 5, nil, nil, nil, nil, nil, nil, 4, nil, - nil, nil, nil, nil, nil, nil, 2, 5, 5, nil, - 26, nil, nil, 21, 21, nil, nil, 2, nil, 2, - nil, nil, nil, 5, 5, nil, nil, nil, 4, nil, - nil, nil, nil, nil, 5, 5, 4, nil, nil, nil, - nil, 36, 31, nil, nil, nil, nil, nil, nil, nil, + 5, 5, nil, 21, nil, 5, 32, nil, 4, 6, + nil, nil, nil, nil, 21, 21, 26, nil, nil, nil, + nil, nil, 31, 37, nil, 2, 5, 5, 2, nil, + nil, nil, 2, nil, 5, 5, nil, nil, nil, nil, + nil, nil, 4, nil, nil, nil, nil, 5, 5, 4, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 30, 30, 21, nil, nil, - nil, nil, nil, nil, nil, nil, 4, nil, nil, 5, - 5, 21, 5, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 4, nil, 4, nil, 21, nil, 5, 5, - nil, nil, 2, nil, nil, nil, 5, nil, nil, nil, - nil, nil, 5, nil, nil, 21, nil, nil, nil, nil, - 4, nil, nil, 4, nil, nil, nil, 2, nil, nil, - 5 ] + nil, nil, nil, nil, 21, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, 21, 2, 4, nil, nil, + nil, nil, 5, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, 5, 5, 21, 5, nil, 4, 4, + nil, nil, nil, nil, 5, 5, nil, nil, nil, nil, + nil, nil, 4, nil, nil, nil, 4, nil, 5, nil, + nil, nil, nil, 5, nil, nil, nil, 2, nil, nil, + nil, 5, nil, 5 ] racc_goto_pointer = [ - nil, 21, 0, 16, 2, 2, -2, nil, -227, nil, + nil, 24, 0, 31, 3, 3, 9, nil, -219, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, -5, nil, -163, 30, -143, 9, nil, nil, nil, - -4, -38, -1, nil, 7, nil, -39, 12, -261, -76, - -36, -89, -224, -234, -124, 0, -12, -10, -8 ] + nil, -13, nil, -171, 38, -137, 5, nil, nil, nil, + nil, -64, 6, nil, nil, -16, nil, -63, -7, -232, + -79, -33, -112, -142, -172, -129, -56, -26, -53, -24 ] racc_goto_default = [ - nil, nil, 175, nil, nil, 43, 46, 49, 52, 60, - 65, 69, 71, 4, 6, 10, 12, 16, 20, 23, - 28, 33, 38, 92, nil, 47, nil, 54, 58, 63, - 67, 81, 5, 82, nil, 13, 84, nil, nil, nil, - nil, nil, nil, nil, 45, nil, nil, nil, nil ] + nil, nil, 191, nil, nil, 63, 65, 67, 70, 3, + 8, 14, 17, 21, 25, 27, 33, 38, 42, 44, + 47, 52, 57, 100, nil, 64, nil, 72, 5, 10, + 16, 89, 22, 91, 93, nil, 36, 94, nil, nil, + nil, nil, nil, nil, nil, 66, nil, nil, nil, nil ] racc_reduce_table = [ 0, 0, :racc_error, - 0, 102, :_reduce_1, - 1, 102, :_reduce_2, - 1, 102, :_reduce_3, - 2, 102, :_reduce_4, - 1, 104, :_reduce_5, - 3, 104, :_reduce_6, - 2, 104, :_reduce_7, - 1, 106, :_reduce_none, - 1, 106, :_reduce_none, - 1, 106, :_reduce_none, - 1, 106, :_reduce_none, - 1, 106, :_reduce_none, - 1, 106, :_reduce_none, - 1, 106, :_reduce_none, - 1, 106, :_reduce_none, - 1, 106, :_reduce_none, - 1, 106, :_reduce_none, - 1, 106, :_reduce_none, - 1, 106, :_reduce_none, - 1, 106, :_reduce_none, - 1, 106, :_reduce_none, - 1, 106, :_reduce_none, - 1, 106, :_reduce_none, - 3, 105, :_reduce_24, - 2, 105, :_reduce_25, - 1, 103, :_reduce_none, - 1, 103, :_reduce_none, - 1, 123, :_reduce_28, - 1, 123, :_reduce_29, - 1, 123, :_reduce_30, - 1, 123, :_reduce_31, - 1, 123, :_reduce_32, - 1, 123, :_reduce_33, - 1, 123, :_reduce_34, - 1, 123, :_reduce_35, - 1, 123, :_reduce_36, - 1, 123, :_reduce_37, - 1, 123, :_reduce_38, - 1, 123, :_reduce_39, - 1, 123, :_reduce_40, - 3, 111, :_reduce_41, - 3, 124, :_reduce_42, - 3, 124, :_reduce_43, - 1, 124, :_reduce_44, - 2, 115, :_reduce_45, - 1, 115, :_reduce_46, - 1, 122, :_reduce_47, - 2, 110, :_reduce_48, - 2, 110, :_reduce_49, - 2, 110, :_reduce_50, - 2, 110, :_reduce_51, - 2, 110, :_reduce_52, - 2, 110, :_reduce_53, - 2, 110, :_reduce_54, - 2, 110, :_reduce_55, - 2, 110, :_reduce_56, - 2, 110, :_reduce_57, - 2, 110, :_reduce_58, - 3, 110, :_reduce_59, - 3, 110, :_reduce_60, - 3, 110, :_reduce_61, - 3, 110, :_reduce_62, - 3, 110, :_reduce_63, - 3, 110, :_reduce_64, - 3, 110, :_reduce_65, - 3, 110, :_reduce_66, - 3, 110, :_reduce_67, - 3, 110, :_reduce_68, - 3, 110, :_reduce_69, - 3, 110, :_reduce_70, - 3, 110, :_reduce_71, - 3, 110, :_reduce_72, - 3, 110, :_reduce_73, - 3, 110, :_reduce_74, - 3, 110, :_reduce_75, - 3, 110, :_reduce_76, - 3, 110, :_reduce_77, - 3, 110, :_reduce_78, - 3, 110, :_reduce_79, - 3, 110, :_reduce_80, - 3, 110, :_reduce_81, - 3, 110, :_reduce_82, - 3, 110, :_reduce_83, - 3, 110, :_reduce_84, - 3, 110, :_reduce_85, - 3, 110, :_reduce_86, - 3, 110, :_reduce_87, - 3, 110, :_reduce_88, - 3, 110, :_reduce_89, - 3, 110, :_reduce_90, - 3, 110, :_reduce_91, - 3, 110, :_reduce_92, - 2, 121, :_reduce_93, - 5, 109, :_reduce_94, - 2, 109, :_reduce_95, - 1, 126, :_reduce_96, - 1, 126, :_reduce_97, - 1, 125, :_reduce_98, - 3, 125, :_reduce_99, - 1, 127, :_reduce_none, - 4, 127, :_reduce_101, - 4, 120, :_reduce_102, - 1, 107, :_reduce_103, - 1, 107, :_reduce_104, - 1, 107, :_reduce_105, - 1, 107, :_reduce_106, - 1, 107, :_reduce_107, - 1, 107, :_reduce_108, - 2, 107, :_reduce_109, - 2, 107, :_reduce_110, - 2, 132, :_reduce_111, - 2, 132, :_reduce_112, - 2, 132, :_reduce_113, - 1, 132, :_reduce_114, - 1, 132, :_reduce_115, - 3, 134, :_reduce_116, - 3, 129, :_reduce_117, - 0, 135, :_reduce_118, - 1, 135, :_reduce_119, - 3, 135, :_reduce_120, - 3, 135, :_reduce_121, - 4, 135, :_reduce_122, - 3, 135, :_reduce_123, - 1, 108, :_reduce_124, - 2, 108, :_reduce_125, - 1, 108, :_reduce_126, - 3, 119, :_reduce_127, - 2, 133, :_reduce_128, - 2, 133, :_reduce_129, - 3, 137, :_reduce_130, - 4, 137, :_reduce_131, - 4, 136, :_reduce_132, - 6, 131, :_reduce_133, - 7, 131, :_reduce_134, - 3, 128, :_reduce_135, - 0, 138, :_reduce_136, - 1, 138, :_reduce_137, - 2, 138, :_reduce_138, - 3, 138, :_reduce_139, - 3, 138, :_reduce_140, - 4, 138, :_reduce_141, - 4, 138, :_reduce_142, - 2, 138, :_reduce_143, - 1, 139, :_reduce_144, - 3, 139, :_reduce_145, - 3, 113, :_reduce_146, - 4, 113, :_reduce_147, - 5, 113, :_reduce_148, - 3, 140, :_reduce_149, - 2, 114, :_reduce_150, - 3, 130, :_reduce_151, - 3, 116, :_reduce_152, - 2, 116, :_reduce_153, - 3, 116, :_reduce_154, - 4, 117, :_reduce_155, - 4, 117, :_reduce_156, - 1, 141, :_reduce_157, - 3, 141, :_reduce_158, - 2, 142, :_reduce_159, - 2, 142, :_reduce_160, - 3, 142, :_reduce_161, - 3, 142, :_reduce_162, - 5, 118, :_reduce_163, - 7, 118, :_reduce_164, - 1, 143, :_reduce_165, - 2, 143, :_reduce_166, - 3, 144, :_reduce_167, - 4, 144, :_reduce_168, - 3, 144, :_reduce_169, - 3, 145, :_reduce_170, - 2, 146, :_reduce_171, - 1, 147, :_reduce_172, - 2, 147, :_reduce_173, - 0, 148, :_reduce_174, - 2, 148, :_reduce_175, - 1, 149, :_reduce_176, - 2, 149, :_reduce_177, - 2, 112, :_reduce_178, - 3, 112, :_reduce_179, - 3, 112, :_reduce_180 ] - -racc_reduce_n = 181 - -racc_shift_n = 313 + 0, 106, :_reduce_1, + 1, 106, :_reduce_2, + 1, 106, :_reduce_3, + 2, 106, :_reduce_4, + 1, 108, :_reduce_5, + 3, 108, :_reduce_6, + 2, 108, :_reduce_7, + 1, 110, :_reduce_none, + 1, 110, :_reduce_none, + 1, 110, :_reduce_none, + 1, 110, :_reduce_none, + 1, 110, :_reduce_none, + 1, 110, :_reduce_none, + 1, 110, :_reduce_none, + 1, 110, :_reduce_none, + 1, 110, :_reduce_none, + 1, 110, :_reduce_none, + 1, 110, :_reduce_none, + 1, 110, :_reduce_none, + 1, 110, :_reduce_none, + 1, 110, :_reduce_none, + 1, 110, :_reduce_none, + 1, 110, :_reduce_none, + 3, 109, :_reduce_24, + 2, 109, :_reduce_25, + 1, 107, :_reduce_none, + 1, 107, :_reduce_none, + 1, 127, :_reduce_28, + 1, 127, :_reduce_29, + 1, 127, :_reduce_30, + 1, 127, :_reduce_31, + 1, 127, :_reduce_32, + 1, 127, :_reduce_33, + 1, 127, :_reduce_34, + 1, 127, :_reduce_35, + 1, 127, :_reduce_36, + 1, 127, :_reduce_37, + 1, 127, :_reduce_38, + 1, 127, :_reduce_39, + 1, 127, :_reduce_40, + 3, 115, :_reduce_41, + 3, 128, :_reduce_42, + 3, 128, :_reduce_43, + 1, 128, :_reduce_44, + 2, 119, :_reduce_45, + 1, 119, :_reduce_46, + 1, 126, :_reduce_47, + 2, 114, :_reduce_48, + 2, 114, :_reduce_49, + 2, 114, :_reduce_50, + 2, 114, :_reduce_51, + 2, 114, :_reduce_52, + 2, 114, :_reduce_53, + 2, 114, :_reduce_54, + 2, 114, :_reduce_55, + 2, 114, :_reduce_56, + 2, 114, :_reduce_57, + 2, 114, :_reduce_58, + 3, 114, :_reduce_59, + 3, 114, :_reduce_60, + 3, 114, :_reduce_61, + 3, 114, :_reduce_62, + 3, 114, :_reduce_63, + 3, 114, :_reduce_64, + 3, 114, :_reduce_65, + 3, 114, :_reduce_66, + 3, 114, :_reduce_67, + 3, 114, :_reduce_68, + 3, 114, :_reduce_69, + 3, 114, :_reduce_70, + 3, 114, :_reduce_71, + 3, 114, :_reduce_72, + 3, 114, :_reduce_73, + 3, 114, :_reduce_74, + 3, 114, :_reduce_75, + 3, 114, :_reduce_76, + 3, 114, :_reduce_77, + 3, 114, :_reduce_78, + 3, 114, :_reduce_79, + 3, 114, :_reduce_80, + 3, 114, :_reduce_81, + 3, 114, :_reduce_82, + 3, 114, :_reduce_83, + 3, 114, :_reduce_84, + 3, 114, :_reduce_85, + 3, 114, :_reduce_86, + 3, 114, :_reduce_87, + 3, 114, :_reduce_88, + 3, 114, :_reduce_89, + 3, 114, :_reduce_90, + 3, 114, :_reduce_91, + 3, 114, :_reduce_92, + 2, 125, :_reduce_93, + 5, 113, :_reduce_94, + 2, 113, :_reduce_95, + 1, 130, :_reduce_96, + 1, 130, :_reduce_97, + 1, 129, :_reduce_98, + 3, 129, :_reduce_99, + 1, 131, :_reduce_none, + 4, 131, :_reduce_101, + 4, 124, :_reduce_102, + 1, 111, :_reduce_103, + 1, 111, :_reduce_104, + 1, 111, :_reduce_105, + 1, 111, :_reduce_106, + 1, 111, :_reduce_107, + 1, 111, :_reduce_108, + 2, 111, :_reduce_109, + 2, 111, :_reduce_110, + 2, 136, :_reduce_111, + 2, 136, :_reduce_112, + 2, 136, :_reduce_113, + 1, 136, :_reduce_114, + 1, 136, :_reduce_115, + 3, 138, :_reduce_116, + 3, 133, :_reduce_117, + 0, 140, :_reduce_118, + 1, 140, :_reduce_119, + 3, 140, :_reduce_120, + 3, 140, :_reduce_121, + 4, 140, :_reduce_122, + 3, 140, :_reduce_123, + 1, 112, :_reduce_124, + 2, 112, :_reduce_125, + 1, 112, :_reduce_126, + 3, 123, :_reduce_127, + 2, 137, :_reduce_128, + 2, 137, :_reduce_129, + 3, 142, :_reduce_130, + 4, 142, :_reduce_131, + 4, 141, :_reduce_132, + 6, 135, :_reduce_133, + 7, 135, :_reduce_134, + 6, 139, :_reduce_135, + 7, 139, :_reduce_136, + 3, 132, :_reduce_137, + 0, 143, :_reduce_138, + 1, 143, :_reduce_139, + 2, 143, :_reduce_140, + 3, 143, :_reduce_141, + 3, 143, :_reduce_142, + 4, 143, :_reduce_143, + 4, 143, :_reduce_144, + 2, 143, :_reduce_145, + 1, 144, :_reduce_146, + 3, 144, :_reduce_147, + 3, 117, :_reduce_148, + 4, 117, :_reduce_149, + 5, 117, :_reduce_150, + 3, 145, :_reduce_151, + 2, 118, :_reduce_152, + 3, 134, :_reduce_153, + 3, 120, :_reduce_154, + 2, 120, :_reduce_155, + 3, 120, :_reduce_156, + 4, 121, :_reduce_157, + 4, 121, :_reduce_158, + 1, 146, :_reduce_159, + 3, 146, :_reduce_160, + 2, 147, :_reduce_161, + 2, 147, :_reduce_162, + 3, 147, :_reduce_163, + 3, 147, :_reduce_164, + 5, 122, :_reduce_165, + 7, 122, :_reduce_166, + 1, 148, :_reduce_167, + 2, 148, :_reduce_168, + 3, 149, :_reduce_169, + 4, 149, :_reduce_170, + 3, 149, :_reduce_171, + 3, 150, :_reduce_172, + 2, 151, :_reduce_173, + 1, 152, :_reduce_174, + 2, 152, :_reduce_175, + 0, 153, :_reduce_176, + 2, 153, :_reduce_177, + 1, 154, :_reduce_178, + 2, 154, :_reduce_179, + 2, 116, :_reduce_180, + 3, 116, :_reduce_181, + 3, 116, :_reduce_182 ] + +racc_reduce_n = 183 + +racc_shift_n = 320 racc_token_table = { false => 0, @@ -1075,85 +1060,89 @@ def on_error(error_token_id, error_value, value_stack) :PARAM_END => 21, :NEW => 22, :RETURN => 23, - :TRY => 24, - :CATCH => 25, - :FINALLY => 26, - :THROW => 27, - :BREAK => 28, - :CONTINUE => 29, - :FOR => 30, - :IN => 31, - :OF => 32, - :BY => 33, - :WHEN => 34, - :WHILE => 35, - :SWITCH => 36, - :LEADING_WHEN => 37, - :DELETE => 38, - :INSTANCEOF => 39, - :TYPEOF => 40, - :SUPER => 41, - :EXTENDS => 42, - :ARGUMENTS => 43, - :NEWLINE => 44, - :COMMENT => 45, - :JS => 46, - :INDENT => 47, - :OUTDENT => 48, - "?" => 49, - :UMINUS => 50, - :NOT => 51, - "!" => 52, - "!!" => 53, - "~" => 54, - "++" => 55, - "--" => 56, - "*" => 57, - "/" => 58, - "%" => 59, - "+" => 60, - "-" => 61, - "<<" => 62, - ">>" => 63, - ">>>" => 64, - "&" => 65, - "|" => 66, - "^" => 67, - "<=" => 68, - "<" => 69, - ">" => 70, - ">=" => 71, - "==" => 72, - "!=" => 73, - :IS => 74, - :ISNT => 75, - "&&" => 76, - "||" => 77, - :AND => 78, - :OR => 79, - "-=" => 80, - "+=" => 81, - "/=" => 82, - "*=" => 83, - "%=" => 84, - "." => 85, - "||=" => 86, - "&&=" => 87, - "?=" => 88, - :ASSIGN => 89, - "->" => 90, - "=>" => 91, - "\n" => 92, - ";" => 93, - "," => 94, - "[" => 95, - "]" => 96, - "{" => 97, - "}" => 98, - "(" => 99, - ")" => 100 } - -racc_nt_base = 101 + :CALL_START => 24, + :CALL_END => 25, + :INDEX_START => 26, + :INDEX_END => 27, + :TRY => 28, + :CATCH => 29, + :FINALLY => 30, + :THROW => 31, + :BREAK => 32, + :CONTINUE => 33, + :FOR => 34, + :IN => 35, + :OF => 36, + :BY => 37, + :WHEN => 38, + :WHILE => 39, + :SWITCH => 40, + :LEADING_WHEN => 41, + :DELETE => 42, + :INSTANCEOF => 43, + :TYPEOF => 44, + :SUPER => 45, + :EXTENDS => 46, + :ARGUMENTS => 47, + :NEWLINE => 48, + :COMMENT => 49, + :JS => 50, + :INDENT => 51, + :OUTDENT => 52, + "?" => 53, + :UMINUS => 54, + :NOT => 55, + "!" => 56, + "!!" => 57, + "~" => 58, + "++" => 59, + "--" => 60, + "*" => 61, + "/" => 62, + "%" => 63, + "+" => 64, + "-" => 65, + "<<" => 66, + ">>" => 67, + ">>>" => 68, + "&" => 69, + "|" => 70, + "^" => 71, + "<=" => 72, + "<" => 73, + ">" => 74, + ">=" => 75, + "==" => 76, + "!=" => 77, + :IS => 78, + :ISNT => 79, + "&&" => 80, + "||" => 81, + :AND => 82, + :OR => 83, + "-=" => 84, + "+=" => 85, + "/=" => 86, + "*=" => 87, + "%=" => 88, + "." => 89, + "||=" => 90, + "&&=" => 91, + "?=" => 92, + :ASSIGN => 93, + "->" => 94, + "=>" => 95, + "\n" => 96, + ";" => 97, + "," => 98, + "{" => 99, + "}" => 100, + "[" => 101, + "]" => 102, + "(" => 103, + ")" => 104 } + +racc_nt_base = 105 racc_use_result_var = true @@ -1198,6 +1187,10 @@ def on_error(error_token_id, error_value, value_stack) "PARAM_END", "NEW", "RETURN", + "CALL_START", + "CALL_END", + "INDEX_START", + "INDEX_END", "TRY", "CATCH", "FINALLY", @@ -1269,10 +1262,10 @@ def on_error(error_token_id, error_value, value_stack) "\"\\n\"", "\";\"", "\",\"", - "\"[\"", - "\"]\"", "\"{\"", "\"}\"", + "\"[\"", + "\"]\"", "\"(\"", "\")\"", "$start", @@ -1309,6 +1302,7 @@ def on_error(error_token_id, error_value, value_stack) "Accessor", "Invocation", "Index", + "Slice", "AssignList", "Super", "Arguments", @@ -1331,49 +1325,49 @@ def on_error(error_token_id, error_value, value_stack) # reduce 0 omitted -module_eval(<<'.,.,', 'grammar.y', 48) +module_eval(<<'.,.,', 'grammar.y', 49) def _reduce_1(val, _values, result) result = Expressions.new result end .,., -module_eval(<<'.,.,', 'grammar.y', 49) +module_eval(<<'.,.,', 'grammar.y', 50) def _reduce_2(val, _values, result) result = Expressions.new result end .,., -module_eval(<<'.,.,', 'grammar.y', 50) +module_eval(<<'.,.,', 'grammar.y', 51) def _reduce_3(val, _values, result) result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 51) +module_eval(<<'.,.,', 'grammar.y', 52) def _reduce_4(val, _values, result) result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 56) +module_eval(<<'.,.,', 'grammar.y', 57) def _reduce_5(val, _values, result) result = Expressions.wrap(val) result end .,., -module_eval(<<'.,.,', 'grammar.y', 57) +module_eval(<<'.,.,', 'grammar.y', 58) def _reduce_6(val, _values, result) result = val[0] << val[2] result end .,., -module_eval(<<'.,.,', 'grammar.y', 58) +module_eval(<<'.,.,', 'grammar.y', 59) def _reduce_7(val, _values, result) result = val[0] result @@ -1412,14 +1406,14 @@ def _reduce_7(val, _values, result) # reduce 23 omitted -module_eval(<<'.,.,', 'grammar.y', 85) +module_eval(<<'.,.,', 'grammar.y', 86) def _reduce_24(val, _values, result) result = val[1] result end .,., -module_eval(<<'.,.,', 'grammar.y', 86) +module_eval(<<'.,.,', 'grammar.y', 87) def _reduce_25(val, _values, result) result = Expressions.new result @@ -1430,504 +1424,504 @@ def _reduce_25(val, _values, result) # reduce 27 omitted -module_eval(<<'.,.,', 'grammar.y', 97) +module_eval(<<'.,.,', 'grammar.y', 98) def _reduce_28(val, _values, result) result = LiteralNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 98) +module_eval(<<'.,.,', 'grammar.y', 99) def _reduce_29(val, _values, result) result = LiteralNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 99) +module_eval(<<'.,.,', 'grammar.y', 100) def _reduce_30(val, _values, result) result = LiteralNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 100) +module_eval(<<'.,.,', 'grammar.y', 101) def _reduce_31(val, _values, result) result = LiteralNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 101) +module_eval(<<'.,.,', 'grammar.y', 102) def _reduce_32(val, _values, result) result = LiteralNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 102) +module_eval(<<'.,.,', 'grammar.y', 103) def _reduce_33(val, _values, result) result = LiteralNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 103) +module_eval(<<'.,.,', 'grammar.y', 104) def _reduce_34(val, _values, result) result = LiteralNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 104) +module_eval(<<'.,.,', 'grammar.y', 105) def _reduce_35(val, _values, result) result = LiteralNode.new(Value.new(true)) result end .,., -module_eval(<<'.,.,', 'grammar.y', 105) +module_eval(<<'.,.,', 'grammar.y', 106) def _reduce_36(val, _values, result) result = LiteralNode.new(Value.new(false)) result end .,., -module_eval(<<'.,.,', 'grammar.y', 106) +module_eval(<<'.,.,', 'grammar.y', 107) def _reduce_37(val, _values, result) result = LiteralNode.new(Value.new(true)) result end .,., -module_eval(<<'.,.,', 'grammar.y', 107) +module_eval(<<'.,.,', 'grammar.y', 108) def _reduce_38(val, _values, result) result = LiteralNode.new(Value.new(false)) result end .,., -module_eval(<<'.,.,', 'grammar.y', 108) +module_eval(<<'.,.,', 'grammar.y', 109) def _reduce_39(val, _values, result) result = LiteralNode.new(Value.new(true)) result end .,., -module_eval(<<'.,.,', 'grammar.y', 109) +module_eval(<<'.,.,', 'grammar.y', 110) def _reduce_40(val, _values, result) result = LiteralNode.new(Value.new(false)) result end .,., -module_eval(<<'.,.,', 'grammar.y', 114) +module_eval(<<'.,.,', 'grammar.y', 115) def _reduce_41(val, _values, result) result = AssignNode.new(val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 119) +module_eval(<<'.,.,', 'grammar.y', 120) def _reduce_42(val, _values, result) result = AssignNode.new(ValueNode.new(val[0]), val[2], :object) result end .,., -module_eval(<<'.,.,', 'grammar.y', 120) +module_eval(<<'.,.,', 'grammar.y', 121) def _reduce_43(val, _values, result) result = AssignNode.new(ValueNode.new(LiteralNode.new(val[0])), val[2], :object) result end .,., -module_eval(<<'.,.,', 'grammar.y', 121) +module_eval(<<'.,.,', 'grammar.y', 122) def _reduce_44(val, _values, result) result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 126) +module_eval(<<'.,.,', 'grammar.y', 127) def _reduce_45(val, _values, result) result = ReturnNode.new(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 127) +module_eval(<<'.,.,', 'grammar.y', 128) def _reduce_46(val, _values, result) result = ReturnNode.new(ValueNode.new(Value.new('null'))) result end .,., -module_eval(<<'.,.,', 'grammar.y', 132) +module_eval(<<'.,.,', 'grammar.y', 133) def _reduce_47(val, _values, result) result = CommentNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 139) +module_eval(<<'.,.,', 'grammar.y', 140) def _reduce_48(val, _values, result) result = OpNode.new(val[0], val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 140) +module_eval(<<'.,.,', 'grammar.y', 141) def _reduce_49(val, _values, result) result = OpNode.new(val[0], val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 141) +module_eval(<<'.,.,', 'grammar.y', 142) def _reduce_50(val, _values, result) result = OpNode.new(val[0], val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 142) +module_eval(<<'.,.,', 'grammar.y', 143) def _reduce_51(val, _values, result) result = OpNode.new(val[0], val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 143) +module_eval(<<'.,.,', 'grammar.y', 144) def _reduce_52(val, _values, result) result = OpNode.new(val[0], val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 144) +module_eval(<<'.,.,', 'grammar.y', 145) def _reduce_53(val, _values, result) result = OpNode.new(val[0], val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 145) +module_eval(<<'.,.,', 'grammar.y', 146) def _reduce_54(val, _values, result) result = OpNode.new(val[0], val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 146) +module_eval(<<'.,.,', 'grammar.y', 147) def _reduce_55(val, _values, result) result = OpNode.new(val[0], val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 147) +module_eval(<<'.,.,', 'grammar.y', 148) def _reduce_56(val, _values, result) result = OpNode.new(val[0], val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 148) +module_eval(<<'.,.,', 'grammar.y', 149) def _reduce_57(val, _values, result) result = OpNode.new(val[1], val[0], nil, true) result end .,., -module_eval(<<'.,.,', 'grammar.y', 149) +module_eval(<<'.,.,', 'grammar.y', 150) def _reduce_58(val, _values, result) result = OpNode.new(val[1], val[0], nil, true) result end .,., -module_eval(<<'.,.,', 'grammar.y', 151) +module_eval(<<'.,.,', 'grammar.y', 152) def _reduce_59(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 152) +module_eval(<<'.,.,', 'grammar.y', 153) def _reduce_60(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 153) +module_eval(<<'.,.,', 'grammar.y', 154) def _reduce_61(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 155) +module_eval(<<'.,.,', 'grammar.y', 156) def _reduce_62(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 156) +module_eval(<<'.,.,', 'grammar.y', 157) def _reduce_63(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 158) +module_eval(<<'.,.,', 'grammar.y', 159) def _reduce_64(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 159) +module_eval(<<'.,.,', 'grammar.y', 160) def _reduce_65(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 160) +module_eval(<<'.,.,', 'grammar.y', 161) def _reduce_66(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 162) +module_eval(<<'.,.,', 'grammar.y', 163) def _reduce_67(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 163) +module_eval(<<'.,.,', 'grammar.y', 164) def _reduce_68(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 164) +module_eval(<<'.,.,', 'grammar.y', 165) def _reduce_69(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 166) +module_eval(<<'.,.,', 'grammar.y', 167) def _reduce_70(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 167) +module_eval(<<'.,.,', 'grammar.y', 168) def _reduce_71(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 168) +module_eval(<<'.,.,', 'grammar.y', 169) def _reduce_72(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 169) +module_eval(<<'.,.,', 'grammar.y', 170) def _reduce_73(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 171) +module_eval(<<'.,.,', 'grammar.y', 172) def _reduce_74(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 172) +module_eval(<<'.,.,', 'grammar.y', 173) def _reduce_75(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 173) +module_eval(<<'.,.,', 'grammar.y', 174) def _reduce_76(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 174) +module_eval(<<'.,.,', 'grammar.y', 175) def _reduce_77(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 176) +module_eval(<<'.,.,', 'grammar.y', 177) def _reduce_78(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 177) +module_eval(<<'.,.,', 'grammar.y', 178) def _reduce_79(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 178) +module_eval(<<'.,.,', 'grammar.y', 179) def _reduce_80(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 179) +module_eval(<<'.,.,', 'grammar.y', 180) def _reduce_81(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 180) +module_eval(<<'.,.,', 'grammar.y', 181) def _reduce_82(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 182) +module_eval(<<'.,.,', 'grammar.y', 183) def _reduce_83(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 183) +module_eval(<<'.,.,', 'grammar.y', 184) def _reduce_84(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 184) +module_eval(<<'.,.,', 'grammar.y', 185) def _reduce_85(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 185) +module_eval(<<'.,.,', 'grammar.y', 186) def _reduce_86(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 186) +module_eval(<<'.,.,', 'grammar.y', 187) def _reduce_87(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 187) +module_eval(<<'.,.,', 'grammar.y', 188) def _reduce_88(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 188) +module_eval(<<'.,.,', 'grammar.y', 189) def _reduce_89(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 189) +module_eval(<<'.,.,', 'grammar.y', 190) def _reduce_90(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 191) +module_eval(<<'.,.,', 'grammar.y', 192) def _reduce_91(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 192) +module_eval(<<'.,.,', 'grammar.y', 193) def _reduce_92(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 197) +module_eval(<<'.,.,', 'grammar.y', 198) def _reduce_93(val, _values, result) result = ExistenceNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 203) +module_eval(<<'.,.,', 'grammar.y', 204) def _reduce_94(val, _values, result) result = CodeNode.new(val[1], val[4], val[3]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 204) +module_eval(<<'.,.,', 'grammar.y', 205) def _reduce_95(val, _values, result) result = CodeNode.new([], val[1], val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 209) +module_eval(<<'.,.,', 'grammar.y', 210) def _reduce_96(val, _values, result) result = :func result end .,., -module_eval(<<'.,.,', 'grammar.y', 210) +module_eval(<<'.,.,', 'grammar.y', 211) def _reduce_97(val, _values, result) result = :boundfunc result end .,., -module_eval(<<'.,.,', 'grammar.y', 215) +module_eval(<<'.,.,', 'grammar.y', 216) def _reduce_98(val, _values, result) result = val result end .,., -module_eval(<<'.,.,', 'grammar.y', 216) +module_eval(<<'.,.,', 'grammar.y', 217) def _reduce_99(val, _values, result) result = val[0] << val[2] result @@ -1936,561 +1930,575 @@ def _reduce_99(val, _values, result) # reduce 100 omitted -module_eval(<<'.,.,', 'grammar.y', 222) +module_eval(<<'.,.,', 'grammar.y', 223) def _reduce_101(val, _values, result) result = SplatNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 227) +module_eval(<<'.,.,', 'grammar.y', 228) def _reduce_102(val, _values, result) result = SplatNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 232) +module_eval(<<'.,.,', 'grammar.y', 233) def _reduce_103(val, _values, result) result = ValueNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 233) +module_eval(<<'.,.,', 'grammar.y', 234) def _reduce_104(val, _values, result) result = ValueNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 234) +module_eval(<<'.,.,', 'grammar.y', 235) def _reduce_105(val, _values, result) result = ValueNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 235) +module_eval(<<'.,.,', 'grammar.y', 236) def _reduce_106(val, _values, result) result = ValueNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 236) +module_eval(<<'.,.,', 'grammar.y', 237) def _reduce_107(val, _values, result) result = ValueNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 237) +module_eval(<<'.,.,', 'grammar.y', 238) def _reduce_108(val, _values, result) result = ValueNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 238) +module_eval(<<'.,.,', 'grammar.y', 239) def _reduce_109(val, _values, result) result = val[0] << val[1] result end .,., -module_eval(<<'.,.,', 'grammar.y', 239) +module_eval(<<'.,.,', 'grammar.y', 240) def _reduce_110(val, _values, result) result = ValueNode.new(val[0], [val[1]]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 244) +module_eval(<<'.,.,', 'grammar.y', 245) def _reduce_111(val, _values, result) result = AccessorNode.new(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 245) +module_eval(<<'.,.,', 'grammar.y', 246) def _reduce_112(val, _values, result) result = AccessorNode.new(val[1], :prototype) result end .,., -module_eval(<<'.,.,', 'grammar.y', 246) +module_eval(<<'.,.,', 'grammar.y', 247) def _reduce_113(val, _values, result) result = AccessorNode.new(val[1], :soak) result end .,., -module_eval(<<'.,.,', 'grammar.y', 247) +module_eval(<<'.,.,', 'grammar.y', 248) def _reduce_114(val, _values, result) result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 248) +module_eval(<<'.,.,', 'grammar.y', 249) def _reduce_115(val, _values, result) result = SliceNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 253) +module_eval(<<'.,.,', 'grammar.y', 254) def _reduce_116(val, _values, result) result = IndexNode.new(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 258) +module_eval(<<'.,.,', 'grammar.y', 259) def _reduce_117(val, _values, result) result = ObjectNode.new(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 263) +module_eval(<<'.,.,', 'grammar.y', 264) def _reduce_118(val, _values, result) result = [] result end .,., -module_eval(<<'.,.,', 'grammar.y', 264) +module_eval(<<'.,.,', 'grammar.y', 265) def _reduce_119(val, _values, result) result = val result end .,., -module_eval(<<'.,.,', 'grammar.y', 265) +module_eval(<<'.,.,', 'grammar.y', 266) def _reduce_120(val, _values, result) result = val[0] << val[2] result end .,., -module_eval(<<'.,.,', 'grammar.y', 266) +module_eval(<<'.,.,', 'grammar.y', 267) def _reduce_121(val, _values, result) result = val[0] << val[2] result end .,., -module_eval(<<'.,.,', 'grammar.y', 268) +module_eval(<<'.,.,', 'grammar.y', 269) def _reduce_122(val, _values, result) result = val[0] << val[3] result end .,., -module_eval(<<'.,.,', 'grammar.y', 269) +module_eval(<<'.,.,', 'grammar.y', 270) def _reduce_123(val, _values, result) result = val[1] result end .,., -module_eval(<<'.,.,', 'grammar.y', 274) +module_eval(<<'.,.,', 'grammar.y', 275) def _reduce_124(val, _values, result) result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 275) +module_eval(<<'.,.,', 'grammar.y', 276) def _reduce_125(val, _values, result) result = val[1].new_instance result end .,., -module_eval(<<'.,.,', 'grammar.y', 276) +module_eval(<<'.,.,', 'grammar.y', 277) def _reduce_126(val, _values, result) result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 281) +module_eval(<<'.,.,', 'grammar.y', 282) def _reduce_127(val, _values, result) result = ExtendsNode.new(val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 286) +module_eval(<<'.,.,', 'grammar.y', 287) def _reduce_128(val, _values, result) result = CallNode.new(val[0], val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 287) +module_eval(<<'.,.,', 'grammar.y', 288) def _reduce_129(val, _values, result) result = CallNode.new(val[0], val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 292) +module_eval(<<'.,.,', 'grammar.y', 293) def _reduce_130(val, _values, result) result = val[1] result end .,., -module_eval(<<'.,.,', 'grammar.y', 293) +module_eval(<<'.,.,', 'grammar.y', 294) def _reduce_131(val, _values, result) result = val[1] << val[3] result end .,., -module_eval(<<'.,.,', 'grammar.y', 298) +module_eval(<<'.,.,', 'grammar.y', 299) def _reduce_132(val, _values, result) result = CallNode.new(Value.new('super'), val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 304) +module_eval(<<'.,.,', 'grammar.y', 305) def _reduce_133(val, _values, result) result = RangeNode.new(val[1], val[4]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 306) +module_eval(<<'.,.,', 'grammar.y', 307) def _reduce_134(val, _values, result) result = RangeNode.new(val[1], val[5], true) result end .,., -module_eval(<<'.,.,', 'grammar.y', 311) +module_eval(<<'.,.,', 'grammar.y', 313) def _reduce_135(val, _values, result) - result = ArrayNode.new(val[1]) + result = RangeNode.new(val[1], val[4]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 316) +module_eval(<<'.,.,', 'grammar.y', 315) def _reduce_136(val, _values, result) - result = [] + result = RangeNode.new(val[1], val[5], true) result end .,., -module_eval(<<'.,.,', 'grammar.y', 317) +module_eval(<<'.,.,', 'grammar.y', 320) def _reduce_137(val, _values, result) - result = val + result = ArrayNode.new(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 318) +module_eval(<<'.,.,', 'grammar.y', 325) def _reduce_138(val, _values, result) - result = [val[1]] + result = [] result end .,., -module_eval(<<'.,.,', 'grammar.y', 319) +module_eval(<<'.,.,', 'grammar.y', 326) def _reduce_139(val, _values, result) - result = val[0] << val[2] + result = val result end .,., -module_eval(<<'.,.,', 'grammar.y', 320) +module_eval(<<'.,.,', 'grammar.y', 327) def _reduce_140(val, _values, result) - result = val[0] << val[2] + result = [val[1]] result end .,., -module_eval(<<'.,.,', 'grammar.y', 321) +module_eval(<<'.,.,', 'grammar.y', 328) def _reduce_141(val, _values, result) - result = val[0] << val[3] + result = val[0] << val[2] result end .,., -module_eval(<<'.,.,', 'grammar.y', 322) +module_eval(<<'.,.,', 'grammar.y', 329) def _reduce_142(val, _values, result) - result = val[0] << val[3] + result = val[0] << val[2] result end .,., -module_eval(<<'.,.,', 'grammar.y', 323) +module_eval(<<'.,.,', 'grammar.y', 330) def _reduce_143(val, _values, result) - result = val[0] + result = val[0] << val[3] result end .,., -module_eval(<<'.,.,', 'grammar.y', 328) +module_eval(<<'.,.,', 'grammar.y', 331) def _reduce_144(val, _values, result) - result = val[0] + result = val[0] << val[3] result end .,., -module_eval(<<'.,.,', 'grammar.y', 329) +module_eval(<<'.,.,', 'grammar.y', 332) def _reduce_145(val, _values, result) - result = ([val[0]] << val[2]).flatten + result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 334) +module_eval(<<'.,.,', 'grammar.y', 337) def _reduce_146(val, _values, result) - result = TryNode.new(val[1], val[2][0], val[2][1]) + result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 335) +module_eval(<<'.,.,', 'grammar.y', 338) def _reduce_147(val, _values, result) - result = TryNode.new(val[1], nil, nil, val[3]) + result = ([val[0]] << val[2]).flatten result end .,., -module_eval(<<'.,.,', 'grammar.y', 337) +module_eval(<<'.,.,', 'grammar.y', 343) def _reduce_148(val, _values, result) - result = TryNode.new(val[1], val[2][0], val[2][1], val[4]) + result = TryNode.new(val[1], val[2][0], val[2][1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 342) +module_eval(<<'.,.,', 'grammar.y', 344) def _reduce_149(val, _values, result) - result = [val[1], val[2]] + result = TryNode.new(val[1], nil, nil, val[3]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 347) +module_eval(<<'.,.,', 'grammar.y', 346) def _reduce_150(val, _values, result) - result = ThrowNode.new(val[1]) + result = TryNode.new(val[1], val[2][0], val[2][1], val[4]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 352) +module_eval(<<'.,.,', 'grammar.y', 351) def _reduce_151(val, _values, result) - result = ParentheticalNode.new(val[1], val[0].line) + result = [val[1], val[2]] result end .,., -module_eval(<<'.,.,', 'grammar.y', 357) +module_eval(<<'.,.,', 'grammar.y', 356) def _reduce_152(val, _values, result) - result = WhileNode.new(val[1], val[2]) + result = ThrowNode.new(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 358) +module_eval(<<'.,.,', 'grammar.y', 361) def _reduce_153(val, _values, result) - result = WhileNode.new(val[1], nil) + result = ParentheticalNode.new(val[1], val[0].line) result end .,., -module_eval(<<'.,.,', 'grammar.y', 359) +module_eval(<<'.,.,', 'grammar.y', 366) def _reduce_154(val, _values, result) - result = WhileNode.new(val[2], Expressions.wrap(val[0])) + result = WhileNode.new(val[1], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 366) +module_eval(<<'.,.,', 'grammar.y', 367) def _reduce_155(val, _values, result) - result = ForNode.new(val[0], val[3], val[2][0], val[2][1]) + result = WhileNode.new(val[1], nil) result end .,., -module_eval(<<'.,.,', 'grammar.y', 367) +module_eval(<<'.,.,', 'grammar.y', 368) def _reduce_156(val, _values, result) - result = ForNode.new(val[3], val[2], val[1][0], val[1][1]) + result = WhileNode.new(val[2], Expressions.wrap(val[0])) result end .,., -module_eval(<<'.,.,', 'grammar.y', 372) +module_eval(<<'.,.,', 'grammar.y', 375) def _reduce_157(val, _values, result) - result = val + result = ForNode.new(val[0], val[3], val[2][0], val[2][1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 373) +module_eval(<<'.,.,', 'grammar.y', 376) def _reduce_158(val, _values, result) - result = [val[0], val[2]] + result = ForNode.new(val[3], val[2], val[1][0], val[1][1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 378) +module_eval(<<'.,.,', 'grammar.y', 381) def _reduce_159(val, _values, result) - result = {:source => val[1]} + result = val result end .,., -module_eval(<<'.,.,', 'grammar.y', 379) +module_eval(<<'.,.,', 'grammar.y', 382) def _reduce_160(val, _values, result) - result = {:source => val[1], :object => true} + result = [val[0], val[2]] result end .,., -module_eval(<<'.,.,', 'grammar.y', 381) +module_eval(<<'.,.,', 'grammar.y', 387) def _reduce_161(val, _values, result) - result = val[0].merge(:filter => val[2]) + result = {:source => val[1]} result end .,., -module_eval(<<'.,.,', 'grammar.y', 383) +module_eval(<<'.,.,', 'grammar.y', 388) def _reduce_162(val, _values, result) - result = val[0].merge(:step => val[2]) + result = {:source => val[1], :object => true} result end .,., -module_eval(<<'.,.,', 'grammar.y', 389) +module_eval(<<'.,.,', 'grammar.y', 390) def _reduce_163(val, _values, result) - result = val[3].rewrite_condition(val[1]) + result = val[0].merge(:filter => val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 391) +module_eval(<<'.,.,', 'grammar.y', 392) def _reduce_164(val, _values, result) - result = val[3].rewrite_condition(val[1]).add_else(val[5]) + result = val[0].merge(:step => val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 396) +module_eval(<<'.,.,', 'grammar.y', 398) def _reduce_165(val, _values, result) - result = val[0] + result = val[3].rewrite_condition(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 397) +module_eval(<<'.,.,', 'grammar.y', 400) def _reduce_166(val, _values, result) - result = val[0] << val[1] + result = val[3].rewrite_condition(val[1]).add_else(val[5]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 402) +module_eval(<<'.,.,', 'grammar.y', 405) def _reduce_167(val, _values, result) - result = IfNode.new(val[1], val[2], nil, {:statement => true}) + result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 404) +module_eval(<<'.,.,', 'grammar.y', 406) def _reduce_168(val, _values, result) - result = IfNode.new(val[1], val[2], nil, {:statement => true}) + result = val[0] << val[1] result end .,., -module_eval(<<'.,.,', 'grammar.y', 405) +module_eval(<<'.,.,', 'grammar.y', 411) def _reduce_169(val, _values, result) - result = val[2].add_comment(val[0]) + result = IfNode.new(val[1], val[2], nil, {:statement => true}) result end .,., -module_eval(<<'.,.,', 'grammar.y', 410) +module_eval(<<'.,.,', 'grammar.y', 413) def _reduce_170(val, _values, result) - result = IfNode.new(val[1], val[2]) + result = IfNode.new(val[1], val[2], nil, {:statement => true}) result end .,., -module_eval(<<'.,.,', 'grammar.y', 415) +module_eval(<<'.,.,', 'grammar.y', 414) def _reduce_171(val, _values, result) - result = val[1].force_statement + result = val[2].add_comment(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 420) +module_eval(<<'.,.,', 'grammar.y', 419) def _reduce_172(val, _values, result) - result = val[0] + result = IfNode.new(val[1], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 421) +module_eval(<<'.,.,', 'grammar.y', 424) def _reduce_173(val, _values, result) - result = val[0].add_else(val[1]) + result = val[1].force_statement result end .,., -module_eval(<<'.,.,', 'grammar.y', 426) +module_eval(<<'.,.,', 'grammar.y', 429) def _reduce_174(val, _values, result) - result = nil + result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 427) +module_eval(<<'.,.,', 'grammar.y', 430) def _reduce_175(val, _values, result) - result = val[1] + result = val[0].add_else(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 432) +module_eval(<<'.,.,', 'grammar.y', 435) def _reduce_176(val, _values, result) - result = val[0] + result = nil result end .,., -module_eval(<<'.,.,', 'grammar.y', 433) +module_eval(<<'.,.,', 'grammar.y', 436) def _reduce_177(val, _values, result) - result = val[0].add_else(val[1]) + result = val[1] result end .,., -module_eval(<<'.,.,', 'grammar.y', 438) +module_eval(<<'.,.,', 'grammar.y', 441) def _reduce_178(val, _values, result) - result = val[0].add_else(val[1]) + result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 439) +module_eval(<<'.,.,', 'grammar.y', 442) def _reduce_179(val, _values, result) - result = IfNode.new(val[2], Expressions.wrap(val[0]), nil, {:statement => true}) + result = val[0].add_else(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 440) +module_eval(<<'.,.,', 'grammar.y', 447) def _reduce_180(val, _values, result) + result = val[0].add_else(val[1]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 448) + def _reduce_181(val, _values, result) + result = IfNode.new(val[2], Expressions.wrap(val[0]), nil, {:statement => true}) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 449) + def _reduce_182(val, _values, result) result = IfNode.new(val[2], Expressions.wrap(val[0]), nil, {:statement => true, :invert => true}) result end diff --git a/lib/coffee_script/rewriter.rb b/lib/coffee_script/rewriter.rb index 7769694f87..399e455328 100644 --- a/lib/coffee_script/rewriter.rb +++ b/lib/coffee_script/rewriter.rb @@ -6,7 +6,8 @@ module CoffeeScript class Rewriter # Tokens that must be balanced. - BALANCED_PAIRS = [['(', ')'], ['[', ']'], ['{', '}'], [:INDENT, :OUTDENT], [:PARAM_START, :PARAM_END]] + BALANCED_PAIRS = [['(', ')'], ['[', ']'], ['{', '}'], [:INDENT, :OUTDENT], + [:PARAM_START, :PARAM_END], [:CALL_START, :CALL_END], [:INDEX_START, :INDEX_END]] # Tokens that signal the start of a balanced pair. EXPRESSION_START = BALANCED_PAIRS.map {|pair| pair.first } @@ -45,6 +46,7 @@ def rewrite(tokens) remove_leading_newlines remove_mid_expression_newlines move_commas_outside_outdents + close_open_calls_and_indexes add_implicit_parentheses add_implicit_indentation ensure_balance(*BALANCED_PAIRS) @@ -119,6 +121,35 @@ def move_commas_outside_outdents end end + # We've tagged the opening parenthesis of a method call, and the opening + # bracket of an indexing operation. Match them with their close. + def close_open_calls_and_indexes + parens, brackets = [0], [0] + scan_tokens do |prev, token, post, i| + case token[0] + when :CALL_START then parens.push(0) + when :INDEX_START then brackets.push(0) + when '(' then parens[-1] += 1 + when '[' then brackets[-1] += 1 + when ')' + if parens.last == 0 + parens.pop + token[0] = :CALL_END + else + parens[-1] -= 1 + end + when ']' + if brackets.last == 0 + brackets.pop + token[0] = :INDEX_END + else + brackets[-1] -= 1 + end + end + next 1 + end + end + # Because our grammar is LALR(1), it can't handle some single-line # expressions that lack ending delimiters. Use the lexer to add the implicit # blocks, so it doesn't need to. @@ -165,12 +196,12 @@ def add_implicit_parentheses if (stack.last > 0 && (IMPLICIT_END.include?(token[0]) || post.nil?)) && !(token[0] == :PARAM_START && prev[0] == ',') idx = token[0] == :OUTDENT ? i + 1 : i - stack.last.times { @tokens.insert(idx, [')', Value.new(')', token[1].line)]) } + stack.last.times { @tokens.insert(idx, [:CALL_END, Value.new(')', token[1].line)]) } size, stack[-1] = stack[-1] + 1, 0 next size end next 1 unless IMPLICIT_FUNC.include?(prev[0]) && IMPLICIT_CALL.include?(token[0]) - @tokens.insert(i, ['(', Value.new('(', token[1].line)]) + @tokens.insert(i, [:CALL_START, Value.new('(', token[1].line)]) stack[-1] += 1 next token[0] == :PARAM_START ? 1 : 2 end diff --git a/test/fixtures/generation/each.tokens b/test/fixtures/generation/each.tokens index 1f5761c444..70d9cff13f 100644 --- a/test/fixtures/generation/each.tokens +++ b/test/fixtures/generation/each.tokens @@ -1 +1 @@ -[[:COMMENT, [" The cornerstone, an each implementation.", " Handles objects implementing forEach, arrays, and raw objects."]], ["\n", "\n"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "each"], [:ASSIGN, ":"], [:PARAM_START, "("], [:PARAM, "obj"], [",", ","], [:PARAM, "iterator"], [",", ","], [:PARAM, "context"], [:PARAM_END, ")"], ["->", "->"], [:INDENT, 2], [:IDENTIFIER, "index"], [:ASSIGN, ":"], [:NUMBER, "0"], ["\n", "\n"], [:TRY, "try"], [:INDENT, 2], [:IF, "if"], [:IDENTIFIER, "obj"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "forEach"], [:INDENT, 2], [:IDENTIFIER, "obj"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "forEach"], ["(", "("], [:IDENTIFIER, "iterator"], [",", ","], [:IDENTIFIER, "context"], [")", ")"], [:OUTDENT, 2], [:ELSE, "else"], [:IF, "if"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "isArray"], ["(", "("], [:IDENTIFIER, "obj"], [")", ")"], [:OR, "or"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "isArguments"], ["(", "("], [:IDENTIFIER, "obj"], [")", ")"], [:INDENT, 2], [:IDENTIFIER, "iterator"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "call"], ["(", "("], [:IDENTIFIER, "context"], [",", ","], [:IDENTIFIER, "item"], [",", ","], [:IDENTIFIER, "i"], [",", ","], [:IDENTIFIER, "obj"], [")", ")"], [:FOR, "for"], [:IDENTIFIER, "item"], [",", ","], [:IDENTIFIER, "i"], [:IN, "in"], [:IDENTIFIER, "obj"], [:OUTDENT, 2], [:ELSE, "else"], [:INDENT, 2], [:IDENTIFIER, "iterator"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "call"], ["(", "("], [:IDENTIFIER, "context"], [",", ","], [:IDENTIFIER, "obj"], ["[", "["], [:IDENTIFIER, "key"], ["]", "]"], [",", ","], [:IDENTIFIER, "key"], [",", ","], [:IDENTIFIER, "obj"], [")", ")"], [:FOR, "for"], [:IDENTIFIER, "key"], [:IN, "in"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "keys"], ["(", "("], [:IDENTIFIER, "obj"], [")", ")"], [:OUTDENT, 2], [:OUTDENT, 2], [:CATCH, "catch"], [:IDENTIFIER, "e"], [:INDENT, 2], [:THROW, "throw"], [:IDENTIFIER, "e"], [:IF, "if"], [:IDENTIFIER, "e"], [:ISNT, "isnt"], [:IDENTIFIER, "breaker"], [:OUTDENT, 2], ["\n", "\n"], [:IDENTIFIER, "obj"], [:OUTDENT, 2], ["\n", "\n"]] \ No newline at end of file +[[:COMMENT, [" The cornerstone, an each implementation.", " Handles objects implementing forEach, arrays, and raw objects."]], ["\n", "\n"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "each"], [:ASSIGN, ":"], [:PARAM_START, "("], [:PARAM, "obj"], [",", ","], [:PARAM, "iterator"], [",", ","], [:PARAM, "context"], [:PARAM_END, ")"], ["->", "->"], [:INDENT, 2], [:IDENTIFIER, "index"], [:ASSIGN, ":"], [:NUMBER, "0"], ["\n", "\n"], [:TRY, "try"], [:INDENT, 2], [:IF, "if"], [:IDENTIFIER, "obj"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "forEach"], [:INDENT, 2], [:IDENTIFIER, "obj"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "forEach"], [:CALL_START, "("], [:IDENTIFIER, "iterator"], [",", ","], [:IDENTIFIER, "context"], [:CALL_END, ")"], [:OUTDENT, 2], [:ELSE, "else"], [:IF, "if"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "isArray"], [:CALL_START, "("], [:IDENTIFIER, "obj"], [:CALL_END, ")"], [:OR, "or"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "isArguments"], [:CALL_START, "("], [:IDENTIFIER, "obj"], [:CALL_END, ")"], [:INDENT, 2], [:IDENTIFIER, "iterator"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "call"], [:CALL_START, "("], [:IDENTIFIER, "context"], [",", ","], [:IDENTIFIER, "item"], [",", ","], [:IDENTIFIER, "i"], [",", ","], [:IDENTIFIER, "obj"], [:CALL_END, ")"], [:FOR, "for"], [:IDENTIFIER, "item"], [",", ","], [:IDENTIFIER, "i"], [:IN, "in"], [:IDENTIFIER, "obj"], [:OUTDENT, 2], [:ELSE, "else"], [:INDENT, 2], [:IDENTIFIER, "iterator"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "call"], [:CALL_START, "("], [:IDENTIFIER, "context"], [",", ","], [:IDENTIFIER, "obj"], [:INDEX_START, "["], [:IDENTIFIER, "key"], [:INDEX_END, "]"], [",", ","], [:IDENTIFIER, "key"], [",", ","], [:IDENTIFIER, "obj"], [:CALL_END, ")"], [:FOR, "for"], [:IDENTIFIER, "key"], [:IN, "in"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "keys"], [:CALL_START, "("], [:IDENTIFIER, "obj"], [:CALL_END, ")"], [:OUTDENT, 2], [:OUTDENT, 2], [:CATCH, "catch"], [:IDENTIFIER, "e"], [:INDENT, 2], [:THROW, "throw"], [:IDENTIFIER, "e"], [:IF, "if"], [:IDENTIFIER, "e"], [:ISNT, "isnt"], [:IDENTIFIER, "breaker"], [:OUTDENT, 2], ["\n", "\n"], [:IDENTIFIER, "obj"], [:OUTDENT, 2], ["\n", "\n"]] \ No newline at end of file diff --git a/test/unit/test_lexer.rb b/test/unit/test_lexer.rb index 568d2986cf..db72a1a122 100644 --- a/test/unit/test_lexer.rb +++ b/test/unit/test_lexer.rb @@ -34,8 +34,8 @@ def test_lexing_function_definition def test_lexing_if_statement code = "clap_your_hands() if happy" - assert @lex.tokenize(code) == [[:IDENTIFIER, "clap_your_hands"], ["(", "("], - [")", ")"], [:IF, "if"], [:IDENTIFIER, "happy"], ["\n", "\n"]] + assert @lex.tokenize(code) == [[:IDENTIFIER, "clap_your_hands"], [:CALL_START, "("], + [:CALL_END, ")"], [:IF, "if"], [:IDENTIFIER, "happy"], ["\n", "\n"]] end def test_lexing_comment From e998a81b63db137075904d39519227c23b29efab Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Tue, 26 Jan 2010 21:05:26 -0500 Subject: [PATCH 29/32] removing block literals in favor of implicit calls --- examples/underscore.coffee | 4 +- lib/coffee_script/grammar.y | 1 - lib/coffee_script/parser.rb | 1387 ++++++++++++++++----------------- lib/coffee_script/rewriter.rb | 10 +- 4 files changed, 696 insertions(+), 706 deletions(-) diff --git a/examples/underscore.coffee b/examples/underscore.coffee index 7dbb763adc..8a29241600 100644 --- a/examples/underscore.coffee +++ b/examples/underscore.coffee @@ -568,7 +568,7 @@ # Add all mutator Array functions to the wrapper. - _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift']) (name) -> + _.each ['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], (name) -> method: Array.prototype[name] wrapper.prototype[name]: -> method.apply(this._wrapped, arguments) @@ -576,7 +576,7 @@ # Add all accessor Array functions to the wrapper. - _.each(['concat', 'join', 'slice']) (name) -> + _.each ['concat', 'join', 'slice'], (name) -> method: Array.prototype[name] wrapper.prototype[name]: -> result(method.apply(this._wrapped, arguments), this._chain) diff --git a/lib/coffee_script/grammar.y b/lib/coffee_script/grammar.y index 72a6550450..098509a7ae 100644 --- a/lib/coffee_script/grammar.y +++ b/lib/coffee_script/grammar.y @@ -292,7 +292,6 @@ rule # The list of arguments to a function invocation. Arguments: CALL_START ArgList CALL_END { result = val[1] } - | CALL_START ArgList CALL_END Code { result = val[1] << val[3] } ; # Calling super. diff --git a/lib/coffee_script/parser.rb b/lib/coffee_script/parser.rb index a88d4570c4..65aa8f59ca 100644 --- a/lib/coffee_script/parser.rb +++ b/lib/coffee_script/parser.rb @@ -35,55 +35,76 @@ def on_error(error_token_id, error_value, value_stack) clist = [ '125,11,133,26,28,31,37,39,43,48,53,58,60,88,90,92,200,1,172,259,19,23', -'86,278,87,56,40,46,259,49,54,61,121,126,69,2,46,141,12,1,20,155,30,32', -'160,41,276,46,51,56,56,152,275,68,71,4,9,137,140,144,147,150,154,158', -'120,124,129,132,136,139,143,146,149,153,157,119,123,128,131,135,138', -'142,145,148,151,156,118,122,127,130,134,162,69,2,273,171,308,24,173', -'29,11,34,196,26,28,31,37,39,43,48,53,58,60,56,69,2,202,1,7,13,19,23', -'7,13,56,98,40,190,183,49,54,61,62,96,295,265,289,6,12,184,20,165,30', -'32,98,41,285,46,51,271,255,260,96,68,71,4,9,15,18,98,7,13,274,35,7,13', -'56,96,46,281,282,7,13,192,259,204,205,189,190,7,13,188,46,56,152,291', -'182,46,74,190,-183,-183,69,2,7,13,56,24,116,29,11,34,46,26,28,31,37', -'39,43,48,53,58,60,281,282,7,13,1,180,98,19,23,7,13,192,287,40,96,98', -'49,54,61,62,7,13,192,96,6,12,110,20,165,30,32,203,41,313,46,51,56,88', -'90,92,68,71,4,9,15,18,86,152,87,46,35,99,56,137,140,144,147,150,46,106', -'99,11,204,205,26,28,31,37,39,43,48,53,58,60,88,90,92,181,1,69,2,19,23', -'86,24,87,29,40,34,152,49,54,61,62,116,137,140,74,6,12,211,20,,30,32', -'152,41,,46,51,,137,140,,68,71,4,9,15,18,152,7,13,188,35,186,137,140', -'144,147,150,154,158,198,199,11,7,13,26,28,31,37,39,43,48,53,58,60,88', -'90,92,,1,69,2,19,23,86,24,87,29,40,34,152,49,54,61,62,,-183,-183,,6', -'12,,20,,30,32,152,41,,46,51,,-183,-183,,68,71,4,9,15,18,152,,,,35,,137', -'140,144,147,150,154,158,,,11,,,26,28,31,37,39,43,48,53,58,60,88,90,92', -',1,69,2,19,23,86,24,87,29,40,34,152,49,54,61,62,,-183,-183,,6,12,,20', -',30,32,152,41,,46,51,,-183,-183,,68,71,4,9,15,18,152,,,,35,,137,140', -'144,147,150,154,158,,,11,,,26,28,31,37,39,43,48,53,58,60,88,90,92,,1', -'69,2,19,23,86,24,87,29,40,34,152,49,54,61,62,,-183,-183,,6,12,,20,,30', -'32,152,41,,46,51,,137,140,,68,71,4,9,15,18,152,,,,35,152,137,140,144', -'147,150,-183,-183,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19', -'23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68', -'71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,', -',1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46', -'51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53', -'58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32', -',41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39', -'43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12', -',20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28', -'31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62', -',,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,', +'86,184,87,56,40,46,276,49,54,61,121,126,275,281,282,141,12,273,20,155', +'30,32,160,41,173,46,51,56,56,152,56,68,71,4,9,137,140,144,147,150,154', +'158,120,124,129,132,136,139,143,146,149,153,157,119,123,128,131,135', +'138,142,145,148,151,156,118,122,127,130,134,162,69,2,56,171,274,24,56', +'29,11,34,196,26,28,31,37,39,43,48,53,58,60,183,259,190,294,1,152,98', +'19,23,46,190,137,140,40,96,202,49,54,61,62,69,2,7,13,6,12,278,20,307', +'30,32,265,41,165,46,51,7,13,7,13,68,71,4,9,15,18,7,13,192,46,35,285', +'189,255,7,13,192,56,260,7,13,11,204,205,26,28,31,37,39,43,48,53,58,60', +'289,7,13,188,1,69,2,19,23,180,24,190,29,40,34,74,49,54,61,62,98,56,7', +'13,6,12,116,20,96,30,32,98,41,287,46,51,281,282,259,96,68,71,4,9,15', +'18,46,152,56,291,35,98,98,-182,-182,7,13,192,110,96,96,11,165,46,26', +'28,31,37,39,43,48,53,58,60,46,203,99,312,1,69,2,19,23,182,24,56,29,40', +'34,106,49,54,61,62,46,46,99,181,6,12,116,20,74,30,32,152,41,211,46,51', +',137,140,,68,71,4,9,15,18,152,7,13,188,35,186,137,140,144,147,150,154', +'158,204,205,11,198,199,26,28,31,37,39,43,48,53,58,60,88,90,92,,1,69', +'2,19,23,86,24,87,29,40,34,152,49,54,61,62,,-182,-182,,6,12,,20,,30,32', +'152,41,,46,51,,-182,-182,,68,71,4,9,15,18,152,7,13,,35,,137,140,144', +'147,150,154,158,,,11,,,26,28,31,37,39,43,48,53,58,60,88,90,92,,1,69', +'2,19,23,86,24,87,29,40,34,152,49,54,61,62,,137,140,,6,12,,20,,30,32', +'152,41,,46,51,,-182,-182,,68,71,4,9,15,18,152,,,,35,,137,140,144,147', +'150,154,158,,,11,,,26,28,31,37,39,43,48,53,58,60,88,90,92,,1,69,2,19', +'23,86,24,87,29,40,34,152,49,54,61,62,,-182,-182,,6,12,,20,,30,32,,41', +',46,51,,88,90,92,68,71,4,9,15,18,86,,87,152,35,88,90,92,,137,140,144', +'147,150,86,11,87,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24', +',29,40,34,152,49,54,61,62,,-182,-182,,6,12,,20,,30,32,152,41,,46,51', +',-182,-182,,68,71,4,9,15,18,152,,,,35,,137,140,144,147,150,,,,,11,,', +'26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54', +'61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,', +',,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40', +'34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,', +',,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23', +',24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71', +'4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1', +'69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51', +',,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58', +'60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,', +'41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43', +'48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20', +',30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31', +'37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,', +',6,12,,20,,30,32,,41,,46,51,103,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,', '11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49', '54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,', ',,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29', '40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18', ',,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23', -',24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,103,,,,68', -'71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,', -',1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46', -'51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53', -'58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32', -',41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39', -'43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12', -',20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28', -'31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62', +',24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71', +'4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1', +'69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51', +',,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58', +'60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,', +'41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43', +'48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20', +',30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31', +'37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,', +',6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11', +',,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54', +'61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,', +',,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40', +'34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,114,,,68,71,4,9,15,18', +',,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23', +',24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71', +'4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1', +'69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51', +',,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58', +'60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,', +'41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43', +'48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20', +',30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31', +'37,39,43,48,53,58,60,309,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62', ',,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,', '11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49', '54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,', @@ -95,8 +116,8 @@ def on_error(error_token_id, error_value, value_stack) '69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51', ',,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58', '60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,', -'41,,46,51,,114,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39', -'43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12', +'41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43', +'48,53,58,60,299,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12', ',20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28', '31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62', ',,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,', @@ -104,50 +125,22 @@ def on_error(error_token_id, error_value, value_stack) '54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,', ',,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29', '40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18', -',,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,310,,,,1,69,2,19', -'23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68', -'71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,', -',1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46', -'51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53', -'58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32', -',41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39', -'43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12', -',20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28', -'31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62', -',,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,', -'11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49', -'54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,', -',,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,300,,,,1,69,2,19,23,,24', -',29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9', -'15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2', -'19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,', -'68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60', -',,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41', -',46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48', -'53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30', -'32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37', -'39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6', -'12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26', -'28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61', -'62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,', -',,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34', -',49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,', -'35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24', -',29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9', -'15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2', -'19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,', -'68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60', -',,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41', -',46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48', -'53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30', -'32,,41,,46,51,103,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31', +',,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23', +',24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71', +'4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1', +'69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51', +',,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58', +'60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,', +'41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43', +'48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20', +',30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31', '37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,', ',6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11', ',,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54', '61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,', ',,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40', -'34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,', -',,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23', +'34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,103,,,,68,71,4,9,15,18', +',,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23', ',24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71', '4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1', '69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51', @@ -166,16 +159,26 @@ def on_error(error_token_id, error_value, value_stack) ',24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71', '4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1', '69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51', +'271,,,,68,71,4,9,15,18,152,,,,35,,137,140,144,147,150,154,158,120,124', +'129,132,136,139,143,146,149,153,157,119,123,128,,,,,,,69,2,7,13,,24', +',29,11,34,,26,28,31,37,39,43,48,53,58,60,,,,,1,,,19,23,,,,,40,,,49,54', +'61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,', +',,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40', +'34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,', +',,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23', +',24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71', +'4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1', +'69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51', ',,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58', '60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,', -'41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43', -'48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20', -',30,32,,41,,46,51,103,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28', -'31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62', -',,,,6,12,,20,,30,32,,41,,46,51,56,,,,68,71,4,9,15,18,152,,,,35,,137', -'140,144,147,150,154,158,120,124,129,132,136,139,143,146,149,153,157', -'119,123,128,,,,,,,69,2,7,13,,24,,29,11,34,,26,28,31,37,39,43,48,53,58', -'60,,,,,1,,,19,23,,,,,40,,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51', +'41,,46,51,103,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39', +'43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12', +',20,,30,32,,41,,46,51,56,,,,68,71,4,9,15,18,152,,,,35,,137,140,144,147', +'150,154,158,120,124,129,132,136,139,143,146,149,153,157,119,123,128', +',,,,,,69,2,7,13,,24,,29,11,34,,26,28,31,37,39,43,48,53,58,60,,,,,1,', +',19,23,,,,,40,,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71', +'4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1', +'69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51', ',,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58', '60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,', '41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43', @@ -201,145 +204,141 @@ def on_error(error_token_id, error_value, value_stack) ',,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54', '61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,', ',,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40', -'34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,', -',,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23', -',24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,125,,133,', -'68,71,4,9,15,18,152,,,,35,,137,140,144,147,150,154,158,120,124,129,132', -'136,139,,,,121,126,,,,141,,,,155,,69,2,,,,24,,29,152,34,,,,,137,140', -'144,147,150,154,158,120,124,129,132,136,139,143,146,149,153,157,119', -'123,128,131,135,138,142,145,148,151,156,118,122,127,130,134,125,,133', -',,,,,,311,,26,28,31,37,39,43,48,53,58,60,,,,,,,,,,,,121,126,,,,141,54', -'61,,155,,,,,,,,,,152,,41,,,51,137,140,144,147,150,154,158,120,124,129', -'132,136,139,143,146,149,153,157,119,123,128,131,135,138,142,145,148', -'151,156,118,122,127,130,134,,,,,,,,,,318,,,,,24,,29,,34,26,28,31,37', -'39,43,48,53,58,60,,,26,28,31,37,39,43,48,53,58,60,,,,,1,54,61,19,23', -',,,,40,,,49,54,61,,41,,,51,,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15', +'34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,125,,133,,68,71,4,9,15', '18,152,,,,35,,137,140,144,147,150,154,158,120,124,129,132,136,139,,', -',,,,,24,,29,,34,,,69,2,,,,24,,29,,34,26,28,31,37,39,43,48,53,58,60,', -',,,1,,,19,23,,,,,40,,,49,54,61,,,,,,,12,,20,,30,32,,41,,46,51,,,,,68', -'71,4,9,15,18,152,,,,35,,137,140,144,147,150,154,158,120,124,129,,,26', -'28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61', -'62,,,,,,12,,20,,30,32,,41,,46,51,125,,133,,68,71,4,9,15,18,152,,,,35', -',137,140,144,147,150,154,158,120,124,129,132,136,139,,,,121,126,,,,141', -',,,155,,69,2,,,,24,,29,152,34,,,,,137,140,144,147,150,154,158,120,124', +',121,126,,,,141,,,,155,,69,2,,,,24,,29,152,34,,,,,137,140,144,147,150', +'154,158,120,124,129,132,136,139,143,146,149,153,157,119,123,128,131', +'135,138,142,145,148,151,156,118,122,127,130,134,125,,133,,,,,,,310,', +'26,28,31,37,39,43,48,53,58,60,,,,,,,,,,,,121,126,,,,141,54,61,,155,', +',,,,,,,,152,,41,,,51,137,140,144,147,150,154,158,120,124,129,132,136', +'139,143,146,149,153,157,119,123,128,131,135,138,142,145,148,151,156', +'118,122,127,130,134,,,,,,,,,,317,,,,,24,,29,,34,26,28,31,37,39,43,48', +'53,58,60,,,26,28,31,37,39,43,48,53,58,60,,,,,1,54,61,19,23,,,,,40,,', +'49,54,61,,41,,,51,,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,152', +',,,35,,137,140,144,147,150,154,158,120,124,129,132,136,139,,,,,,,,24', +',29,,34,,,69,2,,,,24,,29,,34,26,28,31,37,39,43,48,53,58,60,,,,,1,,,19', +'23,,,,,40,,,49,54,61,,,,,,,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15', +'18,152,,,,35,,137,140,144,147,150,154,158,120,124,129,,,26,28,31,37', +'39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,,12', +',20,,30,32,,41,,46,51,125,,133,,68,71,4,9,15,18,152,,,,35,,137,140,144', +'147,150,154,158,120,124,129,132,136,139,,,,121,126,,,,141,,,,155,,69', +'2,,,,24,,29,152,34,,,,,137,140,144,147,150,154,158,120,124,129,132,136', +'139,143,146,149,153,157,119,123,128,131,135,138,142,145,148,151,156', +'118,122,127,130,134,125,152,133,,,,,137,140,144,147,150,154,158,120', +'124,129,132,136,139,143,146,149,153,157,119,123,128,,,,,121,126,,,,141', +',,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129,132', +'136,139,143,146,149,153,157,119,123,128,131,135,138,142,145,148,151', +'156,118,122,127,130,134,125,152,133,,,,,137,140,144,147,150,154,158', +'120,124,129,132,136,139,143,146,149,153,157,119,123,128,,,,,121,126', +',,,141,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124', '129,132,136,139,143,146,149,153,157,119,123,128,131,135,138,142,145', '148,151,156,118,122,127,130,134,125,152,133,,,,,137,140,144,147,150', '154,158,120,124,129,132,136,139,143,146,149,153,157,119,123,128,,,,', -'121,126,,,,141,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158', +'121,126,,,,141,,,,155,,,,,,,,176,,152,,,,,,137,140,144,147,150,154,158', '120,124,129,132,136,139,143,146,149,153,157,119,123,128,131,135,138', '142,145,148,151,156,118,122,127,130,134,125,152,133,,,,,137,140,144', '147,150,154,158,120,124,129,132,136,139,143,146,149,153,157,119,123', -'128,,,,,121,126,,,,141,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150', +'128,,,,,121,126,,,,141,,,,155,,,,,,,,56,,152,,,,,,137,140,144,147,150', '154,158,120,124,129,132,136,139,143,146,149,153,157,119,123,128,131', '135,138,142,145,148,151,156,118,122,127,130,134,125,152,133,,,,,137', '140,144,147,150,154,158,120,124,129,132,136,139,143,146,149,153,157', -'119,123,128,,,,,121,126,,,,141,,,,155,,,,,,,,176,,152,,,,,,137,140,144', +'119,123,128,,,,,121,126,,,,141,,,,155,,,,,,,,56,,152,,,,,,137,140,144', '147,150,154,158,120,124,129,132,136,139,143,146,149,153,157,119,123', '128,131,135,138,142,145,148,151,156,118,122,127,130,134,125,152,133', ',,,,137,140,144,147,150,154,158,120,124,129,132,136,139,143,146,149', -'153,157,119,123,128,,,,,121,126,,,,141,,,,155,,,,,,,,56,,152,,,,,,137', +'153,157,119,123,128,,,,,121,126,,,,141,,,,155,,,,,,,,,,152,,,,,,137', '140,144,147,150,154,158,120,124,129,132,136,139,143,146,149,153,157', '119,123,128,131,135,138,142,145,148,151,156,118,122,127,130,134,125', -'152,133,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139,143', -'146,149,153,157,119,123,128,,,,,121,126,,,,141,,,,155,,,,,,,,56,,152', -',,,,,137,140,144,147,150,154,158,120,124,129,132,136,139,143,146,149', -'153,157,119,123,128,131,135,138,142,145,148,151,156,118,122,127,130', -'134,125,152,133,,,,,137,140,144,147,150,154,158,120,124,129,132,136', -'139,143,146,149,153,157,119,123,128,,,,,121,126,,,,141,,,,155,,,,,,', -',,,152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139,143', -'146,149,153,157,119,123,128,131,135,138,142,145,148,151,156,118,122', -'127,130,134,125,152,133,,,,,137,140,144,147,150,154,158,120,124,129', -'132,136,139,143,146,149,153,157,119,123,128,,,,,121,126,,,,141,,,,155', +'152,133,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139,,,,', +',,,,,,,,121,126,,,,141,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150', +'154,158,120,124,129,132,136,139,143,146,149,153,157,119,123,128,131', +'135,138,142,145,148,151,156,118,122,127,130,134,125,152,133,,,,,137', +'140,144,147,150,154,158,120,124,129,,,,,,,,,,,,,,,,121,126,,,,141,,', +',155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136', +'139,143,146,149,153,157,119,123,128,131,135,138,142,145,148,151,156', +'118,122,127,130,134,125,152,133,,,,,137,140,144,147,150,154,158,120', +'124,129,,,,,,,,,,,,,,,,121,126,,,,141,,,,155,,,,,,,,,,152,,,,,,137,140', +'144,147,150,154,158,120,124,129,132,136,139,143,146,149,153,157,119', +'123,128,131,135,138,142,145,148,151,156,118,122,127,130,134,125,,133', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,121,126,,,,141,,,,155,,,,,,,,,,152,,,,', +',137,140,144,147,150,154,158,120,124,129,132,136,139,143,146,149,153', +'157,119,123,128,131,135,138,142,145,148,151,156,118,122,127,130,134', +'125,,133,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,121,126,,,,141,,,,155,,,,,,,,', +',152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139,143,146', +'149,153,157,119,123,128,131,135,138,142,145,148,151,156,118,122,127', +'130,134,125,,133,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,121,126,,,,141,,,,155', ',,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139', '143,146,149,153,157,119,123,128,131,135,138,142,145,148,151,156,118', -'122,127,130,134,125,152,133,,,,,137,140,144,147,150,154,158,120,124', -'129,132,136,139,,,,,,,,,,,,,121,126,,,,141,,,,155,,,,,,,,,,152,,,,,', -'137,140,144,147,150,154,158,120,124,129,132,136,139,143,146,149,153', -'157,119,123,128,131,135,138,142,145,148,151,156,118,122,127,130,134', -'125,152,133,,,,,137,140,144,147,150,154,158,120,124,129,,,,,,,,,,,,', -',,,121,126,,,,141,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158', -'120,124,129,132,136,139,143,146,149,153,157,119,123,128,131,135,138', -'142,145,148,151,156,118,122,127,130,134,125,152,133,,,,,137,140,144', -'147,150,154,158,120,124,129,,,,,,,,,,,,,,,,121,126,,,,141,,,,155,,,', -',,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139,143', +'122,127,130,134,125,,133,,,,,,,,,,,,,,,,,,,,,,,315,,,,,,,121,126,,,', +'141,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129', +'132,136,139,143,146,149,153,157,119,123,128,131,135,138,142,145,148', +'151,156,118,122,127,130,134,125,,133,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,121', +'126,,,,141,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120', +'124,129,132,136,139,143,146,149,153,157,119,123,128,131,135,138,142', +'145,148,151,156,118,122,127,130,134,125,,133,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,121,126,,,,141,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154', +'158,120,124,129,132,136,139,143,146,149,153,157,119,123,128,131,135', +'138,142,145,148,151,156,118,122,127,130,134,125,,133,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,121,126,,,,141,,,,155,,,,,,,,,,152,,,,,,137,140,144,147', +'150,154,158,120,124,129,132,136,139,143,146,149,153,157,119,123,128', +'131,135,138,142,145,148,151,156,118,194,127,130,134,125,,133,,,,,,,', +',,,,,,,,,,,,,,,262,,,,,,,121,126,,,,141,,,,155,,,,,,,,,,152,,,,,,137', +'140,144,147,150,154,158,120,124,129,132,136,139,143,146,149,153,157', +'119,123,128,131,135,138,142,145,148,151,156,118,261,127,130,134,125', +',133,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,121,126,,,,141,,,,155,,,,,,,,,,152', +',,,,,137,140,144,147,150,154,158,120,124,129,132,136,139,143,146,149', +'153,157,119,123,128,131,135,138,142,145,148,151,156,118,122,127,130', +'134,125,,133,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,121,126,,,,141,,,,155,,,,', +',,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139,143', '146,149,153,157,119,123,128,131,135,138,142,145,148,151,156,118,122', '127,130,134,125,,133,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,121,126,,,,141,,,', '155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136', '139,143,146,149,153,157,119,123,128,131,135,138,142,145,148,151,156', -'118,122,127,130,134,125,,133,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,121,126,,', -',141,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129', -'132,136,139,143,146,149,153,157,119,123,128,131,135,138,142,145,148', -'151,156,118,122,127,130,134,125,,133,,,,,,,,,,,,,,,,,,,,,,,316,,,,,', -',121,126,,,,141,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158', -'120,124,129,132,136,139,143,146,149,153,157,119,123,128,131,135,138', -'142,145,148,151,156,118,122,127,130,134,125,,133,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,121,126,,,,141,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150', -'154,158,120,124,129,132,136,139,143,146,149,153,157,119,123,128,131', -'135,138,142,145,148,151,156,118,122,127,130,134,125,,133,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,121,126,,,,141,,,,155,,,,,,,,,,152,,,,,,137,140,144', -'147,150,154,158,120,124,129,132,136,139,143,146,149,153,157,119,123', -'128,131,135,138,142,145,148,151,156,118,122,127,130,134,125,,133,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,121,126,,,,141,,,,155,,,,,,,,,,152,,,,,,137', -'140,144,147,150,154,158,120,124,129,132,136,139,143,146,149,153,157', -'119,123,128,131,135,138,142,145,148,151,156,118,194,127,130,134,125', -',133,,,,,,,,,,,,,,,,,,,,,,,262,,,,,,,121,126,,,,141,,,,155,,,,,,,,,', -'152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139,143,146', -'149,153,157,119,123,128,131,135,138,142,145,148,151,156,118,261,127', -'130,134,125,,133,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,121,126,,,,141,,,,155', -',,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139', -'143,146,149,153,157,119,123,128,131,135,138,142,145,148,151,156,118', -'122,127,130,134,125,,133,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,121,126,,,,141', -',,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129,132', -'136,139,143,146,149,153,157,119,123,128,131,135,138,142,145,148,151', -'156,118,122,127,130,134,125,,133,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,121,126', +'118,122,127,130,134,125,,133,,,,,,,,,,,,,,,,,,,,,,,318,,,,,,,121,126', ',,,141,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124', '129,132,136,139,143,146,149,153,157,119,123,128,131,135,138,142,145', -'148,151,156,118,122,127,130,134,125,,133,,,,,,,,,,,,,,,,,,,,,,,319,', -',,,,,121,126,,,,141,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154', -'158,120,124,129,132,136,139,143,146,149,153,157,119,123,128,131,135', -'138,142,145,148,151,156,118,122,127,130,134,121,126,,,,,,,,155,,,,,', -',,,,152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139,143', -'146,149,153,157,119,123,128,131,135,138,142,145,148,151,156,118,122', -'127,130,134,121,126,,,,,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150', -'154,158,120,124,129,132,136,139,143,146,149,153,157,119,123,128,131', -'135,138,142,145,148,151,156,118,122,127,130,134,121,126,,,,,,,,155,', -',,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139', -'143,146,149,153,157,119,123,128,131,135,138,142,145,148,151,156,118', -'122,121,126,,,,,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158', -'120,124,129,132,136,139,143,146,149,153,157,119,123,128,131,135,138', -'142,145,148,151,156,118,122,121,126,,,,,,,,155,,,,,,,,,,152,,,,,,137', -'140,144,147,150,154,158,120,124,129,132,136,139,143,146,149,153,157', -'119,123,128,131,135,138,142,145,148,151,156,118,122,121,126,,,,,,,,155', -',,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139', -'143,146,149,153,157,119,123,128,131,135,138,142,145,148,151,156,118', -'122,126,,,,,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120', +'148,151,156,118,122,127,130,134,121,126,,,,,,,,155,,,,,,,,,,152,,,,', +',137,140,144,147,150,154,158,120,124,129,132,136,139,143,146,149,153', +'157,119,123,128,131,135,138,142,145,148,151,156,118,122,127,130,134', +'121,126,,,,,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120', '124,129,132,136,139,143,146,149,153,157,119,123,128,131,135,138,142', -'145,148,151,156,118,122,126,,,,,,,,155,,,,,,,,,,152,,,,,,137,140,144', -'147,150,154,158,120,124,129,132,136,139,143,146,149,153,157,119,123', -'128,131,135,138,142,145,148,151,156,118,122,126,,,,,,,,155,,,,,,,,,', +'145,148,151,156,118,122,127,130,134,121,126,,,,,,,,155,,,,,,,,,,152', +',,,,,137,140,144,147,150,154,158,120,124,129,132,136,139,143,146,149', +'153,157,119,123,128,131,135,138,142,145,148,151,156,118,122,121,126', +',,,,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129', +'132,136,139,143,146,149,153,157,119,123,128,131,135,138,142,145,148', +'151,156,118,122,121,126,,,,,,,,155,,,,,,,,,,152,,,,,,137,140,144,147', +'150,154,158,120,124,129,132,136,139,143,146,149,153,157,119,123,128', +'131,135,138,142,145,148,151,156,118,122,121,126,,,,,,,,155,,,,,,,,,', '152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139,143,146', '149,153,157,119,123,128,131,135,138,142,145,148,151,156,118,122,126', ',,,,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129', '132,136,139,143,146,149,153,157,119,123,128,131,135,138,142,145,148', '151,156,118,122,126,,,,,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150', '154,158,120,124,129,132,136,139,143,146,149,153,157,119,123,128,131', -'135,138,142,145,148,151,156,118,122,155,,,,,,,,,,152,,,,,,137,140,144', -'147,150,154,158,120,124,129,132,136,139,143,146,149,153,157,119,123', -'128,131,135,138,142,145,148,151,156,118,155,,,,,,,,,,152,,,,,,137,140', -'144,147,150,154,158,120,124,129,132,136,139,143,146,149,153,157,119', -'123,128,131,135,138,142,145,148,151,156,118,155,,,,,,,,,,152,,,,,,137', -'140,144,147,150,154,158,120,124,129,132,136,139,143,146,149,153,157', -'119,123,128,131,135,138,142,145,148,151,156,118,152,,,,,,137,140,144', -'147,150,154,158,120,124,129,132,136,139,143,146,149,153,157,119,123', -'128,131,135,138,142,145,148,151,156,118,152,,,,,,137,140,144,147,150', +'135,138,142,145,148,151,156,118,122,126,,,,,,,,155,,,,,,,,,,152,,,,', +',137,140,144,147,150,154,158,120,124,129,132,136,139,143,146,149,153', +'157,119,123,128,131,135,138,142,145,148,151,156,118,122,126,,,,,,,,155', +',,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139', +'143,146,149,153,157,119,123,128,131,135,138,142,145,148,151,156,118', +'122,126,,,,,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120', +'124,129,132,136,139,143,146,149,153,157,119,123,128,131,135,138,142', +'145,148,151,156,118,122,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154', +'158,120,124,129,132,136,139,143,146,149,153,157,119,123,128,131,135', +'138,142,145,148,151,156,118,155,,,,,,,,,,152,,,,,,137,140,144,147,150', '154,158,120,124,129,132,136,139,143,146,149,153,157,119,123,128,131', -'135,138,142,145,148,151,156,118,152,,,,,,137,140,144,147,150,154,158', -'120,124,129,132,136,139,143,146,149,153,157,119,123,128,131,135,138', -'142,145,148,151,156,118,152,,,,,,137,140,144,147,150,154,158,120,124', -'129,132,136,139,143,146,149,153,157,119,123,128,131,135,138,142,145', -'148,151,156,118,152,,,,,,137,140,144,147,150,154,158,120,124,129,132', -'136,139,143,146,149,153,157,119,123,128,131,135,138,142,145,148,151', -'156,118' ] +'135,138,142,145,148,151,156,118,155,,,,,,,,,,152,,,,,,137,140,144,147', +'150,154,158,120,124,129,132,136,139,143,146,149,153,157,119,123,128', +'131,135,138,142,145,148,151,156,118,152,,,,,,137,140,144,147,150,154', +'158,120,124,129,132,136,139,143,146,149,153,157,119,123,128,131,135', +'138,142,145,148,151,156,118,152,,,,,,137,140,144,147,150,154,158,120', +'124,129,132,136,139,143,146,149,153,157,119,123,128,131,135,138,142', +'145,148,151,156,118,152,,,,,,137,140,144,147,150,154,158,120,124,129', +'132,136,139,143,146,149,153,157,119,123,128,131,135,138,142,145,148', +'151,156,118,152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136', +'139,143,146,149,153,157,119,123,128,131,135,138,142,145,148,151,156', +'118,152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139,143', +'146,149,153,157,119,123,128,131,135,138,142,145,148,151,156,118' ] racc_action_table = arr = Array.new(8898, nil) idx = 0 clist.each do |str| @@ -351,327 +350,327 @@ def on_error(error_token_id, error_value, value_stack) clist = [ '107,165,107,152,152,152,152,152,152,152,152,152,152,65,65,65,110,152', -'73,176,152,152,65,203,65,199,152,176,288,152,152,152,107,107,172,172', -'288,107,152,260,152,107,152,152,65,152,198,152,152,293,165,107,197,152', +'73,176,152,152,65,98,65,199,152,176,198,152,152,152,107,107,197,206', +'206,107,152,194,152,107,152,152,65,152,74,152,152,206,165,107,275,152', '152,152,152,107,107,107,107,107,107,107,107,107,107,107,107,107,107', '107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107', -'107,107,107,65,152,152,194,73,293,152,74,152,192,152,107,192,192,192', -'192,192,192,192,192,192,192,275,260,260,113,192,307,307,192,192,55,55', -'276,188,192,102,96,192,192,192,192,188,261,185,257,192,192,98,192,66', -'192,192,187,192,211,192,192,192,173,177,187,192,192,192,192,192,192', -'268,113,113,195,192,59,59,289,268,188,206,206,102,102,102,257,117,117', -'102,177,185,185,185,257,206,76,257,92,187,171,195,76,76,192,192,192', -'192,64,192,62,192,4,192,268,4,4,4,4,4,4,4,4,4,4,284,284,188,188,4,88', -'24,4,4,177,177,177,255,4,24,99,4,4,4,4,195,195,195,99,4,4,45,4,167,4', -'4,116,4,306,4,4,254,83,83,83,4,4,4,4,4,4,83,241,83,24,4,24,40,241,241', -'241,241,241,99,32,99,6,210,210,6,6,6,6,6,6,6,6,6,6,247,247,247,90,6', -'4,4,6,6,247,4,247,4,6,4,237,6,6,6,6,121,237,237,1,6,6,122,6,,6,6,234', -'6,,6,6,,234,234,,6,6,6,6,6,6,209,101,101,101,6,101,209,209,209,209,209', -'209,209,109,109,9,256,256,9,9,9,9,9,9,9,9,9,9,246,246,246,,9,6,6,9,9', -'246,6,246,6,9,6,108,9,9,9,9,,108,108,,9,9,,9,,9,9,78,9,,9,9,,78,78,', -'9,9,9,9,9,9,213,,,,9,,213,213,213,213,213,213,213,,,11,,,11,11,11,11', -'11,11,11,11,11,11,84,84,84,,11,9,9,11,11,84,9,84,9,11,9,170,11,11,11', -'11,,170,170,,11,11,,11,,11,11,169,11,,11,11,,169,169,,11,11,11,11,11', -'11,218,,,,11,,218,218,218,218,218,218,218,,,12,,,12,12,12,12,12,12,12', -'12,12,12,22,22,22,,12,11,11,12,12,22,11,22,11,12,11,82,12,12,12,12,', -'82,82,,12,12,,12,,12,12,231,12,,12,12,,231,231,,12,12,12,12,12,12,245', -',,,12,81,245,245,245,245,245,81,81,,,15,,,15,15,15,15,15,15,15,15,15', -'15,,,,,15,12,12,15,15,,12,,12,15,12,,15,15,15,15,,,,,15,15,,15,,15,15', -',15,,15,15,,,,,15,15,15,15,15,15,,,,,15,,,,,,,,,,,18,,,18,18,18,18,18', -'18,18,18,18,18,,,,,18,15,15,18,18,,15,,15,18,15,,18,18,18,18,,,,,18', -'18,,18,,18,18,,18,,18,18,,,,,18,18,18,18,18,18,,,,,18,,,,,,,,,,,153', -',,153,153,153,153,153,153,153,153,153,153,,,,,153,18,18,153,153,,18', -',18,153,18,,153,153,153,153,,,,,153,153,,153,,153,153,,153,,153,153', -',,,,153,153,153,153,153,153,,,,,153,,,,,,,,,,,20,,,20,20,20,20,20,20', -'20,20,20,20,,,,,20,153,153,20,20,,153,,153,20,153,,20,20,20,20,,,,,20', -'20,,20,,20,20,,20,,20,20,,,,,20,20,20,20,20,20,,,,,20,,,,,,,,,,,151', -',,151,151,151,151,151,151,151,151,151,151,,,,,151,20,20,151,151,,20', -',20,151,20,,151,151,151,151,,,,,151,151,,151,,151,151,,151,,151,151', -',,,,151,151,151,151,151,151,,,,,151,,,,,,,,,,,150,,,150,150,150,150', -'150,150,150,150,150,150,,,,,150,151,151,150,150,,151,,151,150,151,,150', -'150,150,150,,,,,150,150,,150,,150,150,,150,,150,150,,,,,150,150,150', -'150,150,150,,,,,150,,,,,,,,,,,149,,,149,149,149,149,149,149,149,149', -'149,149,,,,,149,150,150,149,149,,150,,150,149,150,,149,149,149,149,', -',,,149,149,,149,,149,149,,149,,149,149,,,,,149,149,149,149,149,149,', -',,,149,,,,,,,,,,,29,,,29,29,29,29,29,29,29,29,29,29,,,,,29,149,149,29', -'29,,149,,149,29,149,,29,29,29,29,,,,,29,29,,29,,29,29,,29,,29,29,29', -',,,29,29,29,29,29,29,,,,,29,,,,,,,,,,,30,,,30,30,30,30,30,30,30,30,30', -'30,,,,,30,29,29,30,30,,29,,29,30,29,,30,30,30,30,,,,,30,30,,30,,30,30', -',30,,30,30,,,,,30,30,30,30,30,30,,,,,30,,,,,,,,,,,148,,,148,148,148', -'148,148,148,148,148,148,148,,,,,148,30,30,148,148,,30,,30,148,30,,148', -'148,148,148,,,,,148,148,,148,,148,148,,148,,148,148,,,,,148,148,148', -'148,148,148,,,,,148,,,,,,,,,,,34,,,34,34,34,34,34,34,34,34,34,34,,,', -',34,148,148,34,34,,148,,148,34,148,,34,34,34,34,,,,,34,34,,34,,34,34', -',34,,34,34,,,,,34,34,34,34,34,34,,,,,34,,,,,,,,,,,35,,,35,35,35,35,35', -'35,35,35,35,35,,,,,35,34,34,35,35,,34,,34,35,34,,35,35,35,35,,,,,35', -'35,,35,,35,35,,35,,35,35,,,,,35,35,35,35,35,35,,,,,35,,,,,,,,,,,308', -',,308,308,308,308,308,308,308,308,308,308,,,,,308,35,35,308,308,,35', -',35,308,35,,308,308,308,308,,,,,308,308,,308,,308,308,,308,,308,308', -',,,,308,308,308,308,308,308,,,,,308,,,,,,,,,,,147,,,147,147,147,147', -'147,147,147,147,147,147,,,,,147,308,308,147,147,,308,,308,147,308,,147', -'147,147,147,,,,,147,147,,147,,147,147,,147,,147,147,,,,,147,147,147', -'147,147,147,,,,,147,,,,,,,,,,,49,,,49,49,49,49,49,49,49,49,49,49,,,', -',49,147,147,49,49,,147,,147,49,147,,49,49,49,49,,,,,49,49,,49,,49,49', -',49,,49,49,,,,,49,49,49,49,49,49,,,,,49,,,,,,,,,,,146,,,146,146,146', -'146,146,146,146,146,146,146,,,,,146,49,49,146,146,,49,,49,146,49,,146', -'146,146,146,,,,,146,146,,146,,146,146,,146,,146,146,,,,,146,146,146', -'146,146,146,,,,,146,,,,,,,,,,,56,,,56,56,56,56,56,56,56,56,56,56,,,', -',56,146,146,56,56,,146,,146,56,146,,56,56,56,56,,,,,56,56,,56,,56,56', -',56,,56,56,,56,,,56,56,56,56,56,56,,,,,56,,,,,,,,,,,145,,,145,145,145', -'145,145,145,145,145,145,145,,,,,145,56,56,145,145,,56,,56,145,56,,145', -'145,145,145,,,,,145,145,,145,,145,145,,145,,145,145,,,,,145,145,145', -'145,145,145,,,,,145,,,,,,,,,,,144,,,144,144,144,144,144,144,144,144', -'144,144,,,,,144,145,145,144,144,,145,,145,144,145,,144,144,144,144,', -',,,144,144,,144,,144,144,,144,,144,144,,,,,144,144,144,144,144,144,', -',,,144,,,,,,,,,,,143,,,143,143,143,143,143,143,143,143,143,143,,,,,143', -'144,144,143,143,,144,,144,143,144,,143,143,143,143,,,,,143,143,,143', -',143,143,,143,,143,143,,,,,143,143,143,143,143,143,,,,,143,,,,,,,,,', -',295,,,295,295,295,295,295,295,295,295,295,295,,,,,295,143,143,295,295', -',143,,143,295,143,,295,295,295,295,,,,,295,295,,295,,295,295,,295,,295', -'295,,,,,295,295,295,295,295,295,,,,,295,,,,,,,,,,,142,,,142,142,142', -'142,142,142,142,142,142,142,295,,,,142,295,295,142,142,,295,,295,142', -'295,,142,142,142,142,,,,,142,142,,142,,142,142,,142,,142,142,,,,,142', -'142,142,142,142,142,,,,,142,,,,,,,,,,,282,,,282,282,282,282,282,282', -'282,282,282,282,,,,,282,142,142,282,282,,142,,142,282,142,,282,282,282', -'282,,,,,282,282,,282,,282,282,,282,,282,282,,,,,282,282,282,282,282', -'282,,,,,282,,,,,,,,,,,68,,,68,68,68,68,68,68,68,68,68,68,,,,,68,282', -'282,68,68,,282,,282,68,282,,68,68,68,68,,,,,68,68,,68,,68,68,,68,,68', -'68,,,,,68,68,68,68,68,68,,,,,68,,,,,,,,,,,71,,,71,71,71,71,71,71,71', -'71,71,71,,,,,71,68,68,71,71,,68,,68,71,68,,71,71,71,71,,,,,71,71,,71', -',71,71,,71,,71,71,,,,,71,71,71,71,71,71,,,,,71,,,,,,,,,,,281,,,281,281', -'281,281,281,281,281,281,281,281,,,,,281,71,71,281,281,,71,,71,281,71', -',281,281,281,281,,,,,281,281,,281,,281,281,,281,,281,281,,,,,281,281', -'281,281,281,281,,,,,281,,,,,,,,,,,273,,,273,273,273,273,273,273,273', -'273,273,273,,,,,273,281,281,273,273,,281,,281,273,281,,273,273,273,273', -',,,,273,273,,273,,273,273,,273,,273,273,,,,,273,273,273,273,273,273', -',,,,273,,,,,,,,,,,141,,,141,141,141,141,141,141,141,141,141,141,273', -',,,141,273,273,141,141,,273,,273,141,273,,141,141,141,141,,,,,141,141', -',141,,141,141,,141,,141,141,,,,,141,141,141,141,141,141,,,,,141,,,,', -',,,,,,139,,,139,139,139,139,139,139,139,139,139,139,,,,,139,141,141', -'139,139,,141,,141,139,141,,139,139,139,139,,,,,139,139,,139,,139,139', -',139,,139,139,,,,,139,139,139,139,139,139,,,,,139,,,,,,,,,,,271,,,271', -'271,271,271,271,271,271,271,271,271,,,,,271,139,139,271,271,,139,,139', -'271,139,,271,271,271,271,,,,,271,271,,271,,271,271,,271,,271,271,,,', -',271,271,271,271,271,271,,,,,271,,,,,,,,,,,138,,,138,138,138,138,138', -'138,138,138,138,138,,,,,138,271,271,138,138,,271,,271,138,271,,138,138', -'138,138,,,,,138,138,,138,,138,138,,138,,138,138,,,,,138,138,138,138', -'138,138,,,,,138,,,,,,,,,,,136,,,136,136,136,136,136,136,136,136,136', -'136,,,,,136,138,138,136,136,,138,,138,136,138,,136,136,136,136,,,,,136', -'136,,136,,136,136,,136,,136,136,,,,,136,136,136,136,136,136,,,,,136', -',,,,,,,,,,270,,,270,270,270,270,270,270,270,270,270,270,,,,,270,136', -'136,270,270,,136,,136,270,136,,270,270,270,270,,,,,270,270,,270,,270', -'270,,270,,270,270,,,,,270,270,270,270,270,270,,,,,270,,,,,,,,,,,135', -',,135,135,135,135,135,135,135,135,135,135,,,,,135,270,270,135,135,,270', -',270,135,270,,135,135,135,135,,,,,135,135,,135,,135,135,,135,,135,135', -',,,,135,135,135,135,135,135,,,,,135,,,,,,,,,,,134,,,134,134,134,134', -'134,134,134,134,134,134,,,,,134,135,135,134,134,,135,,135,134,135,,134', -'134,134,134,,,,,134,134,,134,,134,134,,134,,134,134,,,,,134,134,134', -'134,134,134,,,,,134,,,,,,,,,,,133,,,133,133,133,133,133,133,133,133', -'133,133,,,,,133,134,134,133,133,,134,,134,133,134,,133,133,133,133,', -',,,133,133,,133,,133,133,,133,,133,133,,,,,133,133,133,133,133,133,', -',,,133,,,,,,,,,,,259,,,259,259,259,259,259,259,259,259,259,259,,,,,259', -'133,133,259,259,,133,,133,259,133,,259,259,259,259,,,,,259,259,,259', -',259,259,,259,,259,259,,,,,259,259,259,259,259,259,,,,,259,,,,,,,,,', -',86,,,86,86,86,86,86,86,86,86,86,86,,,,,86,259,259,86,86,,259,,259,86', -'259,,86,86,86,86,,,,,86,86,,86,,86,86,,86,,86,86,86,,,,86,86,86,86,86', -'86,,,,,86,,,,,,,,,,,87,,,87,87,87,87,87,87,87,87,87,87,,,,,87,86,86', -'87,87,,86,,86,87,86,,87,87,87,87,,,,,87,87,,87,,87,87,,87,,87,87,,,', -',87,87,87,87,87,87,,,,,87,,,,,,,,,,,156,,,156,156,156,156,156,156,156', -'156,156,156,,,,,156,87,87,156,156,,87,,87,156,87,,156,156,156,156,,', -',,156,156,,156,,156,156,,156,,156,156,,,,,156,156,156,156,156,156,,', -',,156,,,,,,,,,,,132,,,132,132,132,132,132,132,132,132,132,132,,,,,132', -'156,156,132,132,,156,,156,132,156,,132,132,132,132,,,,,132,132,,132', -',132,132,,132,,132,132,,,,,132,132,132,132,132,132,,,,,132,,,,,,,,,', -',131,,,131,131,131,131,131,131,131,131,131,131,,,,,131,132,132,131,131', -',132,,132,131,132,,131,131,131,131,,,,,131,131,,131,,131,131,,131,,131', -'131,,,,,131,131,131,131,131,131,,,,,131,,,,,,,,,,,130,,,130,130,130', -'130,130,130,130,130,130,130,,,,,130,131,131,130,130,,131,,131,130,131', -',130,130,130,130,,,,,130,130,,130,,130,130,,130,,130,130,,,,,130,130', -'130,130,130,130,,,,,130,,,,,,,,,,,205,,,205,205,205,205,205,205,205', -'205,205,205,,,,,205,130,130,205,205,,130,,130,205,130,,205,205,205,205', -',,,,205,205,,205,,205,205,,205,,205,205,,,,,205,205,205,205,205,205', -',,,,205,,,,,,,,,,,204,,,204,204,204,204,204,204,204,204,204,204,,,,', -'204,205,205,204,204,,205,,205,204,205,,204,204,204,204,,,,,204,204,', -'204,,204,204,,204,,204,204,,,,,204,204,204,204,204,204,,,,,204,,,,,', -',,,,,123,,,123,123,123,123,123,123,123,123,123,123,,,,,123,204,204,123', -'123,,204,,204,123,204,,123,123,123,123,,,,,123,123,,123,,123,123,,123', -',123,123,,,,,123,123,123,123,123,123,,,,,123,,,,,,,,,,,129,,,129,129', -'129,129,129,129,129,129,129,129,,,,,129,123,123,129,129,,123,,123,129', -'123,,129,129,129,129,,,,,129,129,,129,,129,129,,129,,129,129,,,,,129', -'129,129,129,129,129,,,,,129,,,,,,,,,,,154,,,154,154,154,154,154,154', -'154,154,154,154,,,,,154,129,129,154,154,,129,,129,154,129,,154,154,154', -'154,,,,,154,154,,154,,154,154,,154,,154,154,,,,,154,154,154,154,154', -'154,,,,,154,,,,,,,,,,,103,,,103,103,103,103,103,103,103,103,103,103', -',,,,103,154,154,103,103,,154,,154,103,154,,103,103,103,103,,,,,103,103', -',103,,103,103,,103,,103,103,,,,,103,103,103,103,103,103,,,,,103,,,,', -',,,,,,128,,,128,128,128,128,128,128,128,128,128,128,,,,,128,103,103', -'128,128,,103,,103,128,103,,128,128,128,128,,,,,128,128,,128,,128,128', -',128,,128,128,,,,,128,128,128,128,128,128,,,,,128,,,,,,,,,,,191,,,191', -'191,191,191,191,191,191,191,191,191,,,,,191,128,128,191,191,,128,,128', -'191,128,,191,191,191,191,,,,,191,191,,191,,191,191,,191,,191,191,,,', -',191,191,191,191,191,191,,,,,191,,,,,,,,,,,106,,,106,106,106,106,106', -'106,106,106,106,106,,,,,106,191,191,106,106,,191,,191,106,191,,106,106', -'106,106,,,,,106,106,,106,,106,106,,106,,106,106,106,,,,106,106,106,106', -'106,106,,,,,106,,,,,,,,,,,0,,,0,0,0,0,0,0,0,0,0,0,,,,,0,106,106,0,0', -',106,,106,0,106,,0,0,0,0,,,,,0,0,,0,,0,0,,0,,0,0,0,,,,0,0,0,0,0,0,217', -',,,0,,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217', -'217,217,217,217,217,,,,,,,0,0,0,0,,0,,0,127,0,,127,127,127,127,127,127', -'127,127,127,127,,,,,127,,,127,127,,,,,127,,,127,127,127,127,,,,,127', -'127,,127,,127,127,,127,,127,127,,,,,127,127,127,127,127,127,,,,,127', -',,,,,,,,,,184,,,184,184,184,184,184,184,184,184,184,184,,,,,184,127', -'127,184,184,,127,,127,184,127,,184,184,184,184,,,,,184,184,,184,,184', -'184,,184,,184,184,,,,,184,184,184,184,184,184,,,,,184,,,,,,,,,,,183', -',,183,183,183,183,183,183,183,183,183,183,,,,,183,184,184,183,183,,184', -',184,183,184,,183,183,183,183,,,,,183,183,,183,,183,183,,183,,183,183', -',,,,183,183,183,183,183,183,,,,,183,,,,,,,,,,,126,,,126,126,126,126', -'126,126,126,126,126,126,,,,,126,183,183,126,126,,183,,183,126,183,,126', -'126,126,126,,,,,126,126,,126,,126,126,,126,,126,126,,,,,126,126,126', -'126,126,126,,,,,126,,,,,,,,,,,112,,,112,112,112,112,112,112,112,112', -'112,112,,,,,112,126,126,112,112,,126,,126,112,126,,112,112,112,112,', -',,,112,112,,112,,112,112,,112,,112,112,,,,,112,112,112,112,112,112,', -',,,112,,,,,,,,,,,125,,,125,125,125,125,125,125,125,125,125,125,,,,,125', -'112,112,125,125,,112,,112,125,112,,125,125,125,125,,,,,125,125,,125', -',125,125,,125,,125,125,,,,,125,125,125,125,125,125,,,,,125,,,,,,,,,', -',162,,,162,162,162,162,162,162,162,162,162,162,,,,,162,125,125,162,162', -',125,,125,162,125,,162,162,162,162,,,,,162,162,,162,,162,162,,162,,162', -'162,,,,,162,162,162,162,162,162,,,,,162,,,,,,,,,,,124,,,124,124,124', -'124,124,124,124,124,124,124,,,,,124,162,162,124,124,,162,,162,124,162', -',124,124,124,124,,,,,124,124,,124,,124,124,,124,,124,124,,,,,124,124', -'124,124,124,124,,,,,124,,,,,,,,,,,118,,,118,118,118,118,118,118,118', -'118,118,118,,,,,118,124,124,118,118,,124,,124,118,124,,118,118,118,118', -',,,,118,118,,118,,118,118,,118,,118,118,,,,,118,118,118,118,118,118', -',,,,118,,,,,,,,,,,119,,,119,119,119,119,119,119,119,119,119,119,,,,', -'119,118,118,119,119,,118,,118,119,118,,119,119,119,119,,,,,119,119,', -'119,,119,119,,119,,119,119,,,,,119,119,119,119,119,119,,,,,119,,,,,', -',,,,,120,,,120,120,120,120,120,120,120,120,120,120,,,,,120,119,119,120', -'120,,119,,119,120,119,,120,120,120,120,,,,,120,120,,120,,120,120,,120', -',120,120,,,,,120,120,120,120,120,120,,,,,120,,,,,,,,,,,158,,,158,158', -'158,158,158,158,158,158,158,158,,,,,158,120,120,158,158,,120,,120,158', -'120,,158,158,158,158,,,,,158,158,,158,,158,158,,158,,158,158,,,,,158', -'158,158,158,158,158,,,,,158,,,,,,,,,,,157,,,157,157,157,157,157,157', -'157,157,157,157,,,,,157,158,158,157,157,,158,,158,157,158,,157,157,157', -'157,,,,,157,157,,157,,157,157,,157,,157,157,,,,,157,157,157,157,157', -'157,,,,,157,,,,,,,,,,,155,,,155,155,155,155,155,155,155,155,155,155', -',,,,155,157,157,155,155,,157,,157,155,157,,155,155,155,155,,,,,155,155', -',155,,155,155,,155,,155,155,299,,299,,155,155,155,155,155,155,233,,', -',155,,233,233,233,233,233,233,233,233,233,233,233,233,233,,,,299,299', -',,,299,,,,299,,155,155,,,,155,,155,299,155,,,,,299,299,299,299,299,299', -'299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299', -'299,299,299,299,299,299,299,299,299,299,299,312,,312,,,,,,,299,,160', -'160,160,160,160,160,160,160,160,160,,,,,,,,,,,,312,312,,,,312,160,160', -',312,,,,,,,,,,312,,160,,,160,312,312,312,312,312,312,312,312,312,312', -'312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312', -'312,312,312,312,312,312,312,,,,,,,,,,312,,,,,160,,160,,160,19,19,19', -'19,19,19,19,19,19,19,,,300,300,300,300,300,300,300,300,300,300,,,,,300', -'19,19,300,300,,,,,300,,,300,300,300,,19,,,19,,300,,300,,300,300,,300', -',300,300,,,,,300,300,300,300,300,300,236,,,,300,,236,236,236,236,236', -'236,236,236,236,236,236,236,236,,,,,,,,19,,19,,19,,,300,300,,,,300,', -'300,,300,310,310,310,310,310,310,310,310,310,310,,,,,310,,,310,310,', -',,,310,,,310,310,310,,,,,,,310,,310,,310,310,,310,,310,310,,,,,310,310', -'310,310,310,310,227,,,,310,,227,227,227,227,227,227,227,227,227,227', -',,23,23,23,23,23,23,23,23,23,23,,,,,23,310,310,23,23,,310,,310,23,310', -',23,23,23,23,,,,,,23,,23,,23,23,,23,,23,23,272,,272,,23,23,23,23,23', -'23,230,,,,23,,230,230,230,230,230,230,230,230,230,230,230,230,230,,', -',272,272,,,,272,,,,272,,23,23,,,,23,,23,272,23,,,,,272,272,272,272,272', -'272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272', -'272,272,272,272,272,272,272,272,272,272,272,272,264,208,264,,,,,208', +'107,107,107,65,152,152,293,73,195,152,276,152,156,152,107,156,156,156', +'156,156,156,156,156,156,156,96,288,102,261,156,234,188,156,156,288,195', +'234,234,156,188,113,156,156,156,156,172,172,306,306,156,156,203,156', +'293,156,156,185,156,66,156,156,55,55,59,59,156,156,156,156,156,156,102', +'102,102,188,156,211,102,173,195,195,195,289,177,113,113,4,117,117,4', +'4,4,4,4,4,4,4,4,4,257,185,185,185,4,156,156,4,4,88,156,177,156,4,156', +'171,4,4,4,4,187,64,188,188,4,4,62,4,187,4,4,99,4,255,4,4,284,284,257', +'99,4,4,4,4,4,4,257,82,254,257,4,24,268,82,82,177,177,177,45,24,268,6', +'167,187,6,6,6,6,6,6,6,6,6,6,99,116,99,305,6,4,4,6,6,92,4,40,4,6,4,32', +'6,6,6,6,24,268,24,90,6,6,121,6,1,6,6,237,6,122,6,6,,237,237,,6,6,6,6', +'6,6,218,101,101,101,6,101,218,218,218,218,218,218,218,210,210,9,109', +'109,9,9,9,9,9,9,9,9,9,9,84,84,84,,9,6,6,9,9,84,6,84,6,9,6,170,9,9,9', +'9,,170,170,,9,9,,9,,9,9,76,9,,9,9,,76,76,,9,9,9,9,9,9,213,256,256,,9', +',213,213,213,213,213,213,213,,,11,,,11,11,11,11,11,11,11,11,11,11,83', +'83,83,,11,9,9,11,11,83,9,83,9,11,9,231,11,11,11,11,,231,231,,11,11,', +'11,,11,11,169,11,,11,11,,169,169,,11,11,11,11,11,11,209,,,,11,,209,209', +'209,209,209,209,209,,,12,,,12,12,12,12,12,12,12,12,12,12,246,246,246', +',12,11,11,12,12,246,11,246,11,12,11,108,12,12,12,12,,108,108,,12,12', +',12,,12,12,,12,,12,12,,22,22,22,12,12,12,12,12,12,22,,22,241,12,247', +'247,247,,241,241,241,241,241,247,15,247,,15,15,15,15,15,15,15,15,15', +'15,,,,,15,12,12,15,15,,12,,12,15,12,81,15,15,15,15,,81,81,,15,15,,15', +',15,15,78,15,,15,15,,78,78,,15,15,15,15,15,15,245,,,,15,,245,245,245', +'245,245,,,,,18,,,18,18,18,18,18,18,18,18,18,18,,,,,18,15,15,18,18,,15', +',15,18,15,,18,18,18,18,,,,,18,18,,18,,18,18,,18,,18,18,,,,,18,18,18', +'18,18,18,,,,,18,,,,,,,,,,,153,,,153,153,153,153,153,153,153,153,153', +'153,,,,,153,18,18,153,153,,18,,18,153,18,,153,153,153,153,,,,,153,153', +',153,,153,153,,153,,153,153,,,,,153,153,153,153,153,153,,,,,153,,,,', +',,,,,,20,,,20,20,20,20,20,20,20,20,20,20,,,,,20,153,153,20,20,,153,', +'153,20,153,,20,20,20,20,,,,,20,20,,20,,20,20,,20,,20,20,,,,,20,20,20', +'20,20,20,,,,,20,,,,,,,,,,,151,,,151,151,151,151,151,151,151,151,151', +'151,,,,,151,20,20,151,151,,20,,20,151,20,,151,151,151,151,,,,,151,151', +',151,,151,151,,151,,151,151,,,,,151,151,151,151,151,151,,,,,151,,,,', +',,,,,,150,,,150,150,150,150,150,150,150,150,150,150,,,,,150,151,151', +'150,150,,151,,151,150,151,,150,150,150,150,,,,,150,150,,150,,150,150', +',150,,150,150,,,,,150,150,150,150,150,150,,,,,150,,,,,,,,,,,149,,,149', +'149,149,149,149,149,149,149,149,149,,,,,149,150,150,149,149,,150,,150', +'149,150,,149,149,149,149,,,,,149,149,,149,,149,149,,149,,149,149,,,', +',149,149,149,149,149,149,,,,,149,,,,,,,,,,,29,,,29,29,29,29,29,29,29', +'29,29,29,,,,,29,149,149,29,29,,149,,149,29,149,,29,29,29,29,,,,,29,29', +',29,,29,29,,29,,29,29,29,,,,29,29,29,29,29,29,,,,,29,,,,,,,,,,,30,,', +'30,30,30,30,30,30,30,30,30,30,,,,,30,29,29,30,30,,29,,29,30,29,,30,30', +'30,30,,,,,30,30,,30,,30,30,,30,,30,30,,,,,30,30,30,30,30,30,,,,,30,', +',,,,,,,,,148,,,148,148,148,148,148,148,148,148,148,148,,,,,148,30,30', +'148,148,,30,,30,148,30,,148,148,148,148,,,,,148,148,,148,,148,148,,148', +',148,148,,,,,148,148,148,148,148,148,,,,,148,,,,,,,,,,,34,,,34,34,34', +'34,34,34,34,34,34,34,,,,,34,148,148,34,34,,148,,148,34,148,,34,34,34', +'34,,,,,34,34,,34,,34,34,,34,,34,34,,,,,34,34,34,34,34,34,,,,,34,,,,', +',,,,,,35,,,35,35,35,35,35,35,35,35,35,35,,,,,35,34,34,35,35,,34,,34', +'35,34,,35,35,35,35,,,,,35,35,,35,,35,35,,35,,35,35,,,,,35,35,35,35,35', +'35,,,,,35,,,,,,,,,,,307,,,307,307,307,307,307,307,307,307,307,307,,', +',,307,35,35,307,307,,35,,35,307,35,,307,307,307,307,,,,,307,307,,307', +',307,307,,307,,307,307,,,,,307,307,307,307,307,307,,,,,307,,,,,,,,,', +',147,,,147,147,147,147,147,147,147,147,147,147,,,,,147,307,307,147,147', +',307,,307,147,307,,147,147,147,147,,,,,147,147,,147,,147,147,,147,,147', +'147,,,,,147,147,147,147,147,147,,,,,147,,,,,,,,,,,49,,,49,49,49,49,49', +'49,49,49,49,49,,,,,49,147,147,49,49,,147,,147,49,147,,49,49,49,49,,', +',,49,49,,49,,49,49,,49,,49,49,,,,,49,49,49,49,49,49,,,,,49,,,,,,,,,', +',146,,,146,146,146,146,146,146,146,146,146,146,,,,,146,49,49,146,146', +',49,,49,146,49,,146,146,146,146,,,,,146,146,,146,,146,146,,146,,146', +'146,,,,,146,146,146,146,146,146,,,,,146,,,,,,,,,,,56,,,56,56,56,56,56', +'56,56,56,56,56,,,,,56,146,146,56,56,,146,,146,56,146,,56,56,56,56,,', +',,56,56,,56,,56,56,,56,,56,56,,56,,,56,56,56,56,56,56,,,,,56,,,,,,,', +',,,145,,,145,145,145,145,145,145,145,145,145,145,,,,,145,56,56,145,145', +',56,,56,145,56,,145,145,145,145,,,,,145,145,,145,,145,145,,145,,145', +'145,,,,,145,145,145,145,145,145,,,,,145,,,,,,,,,,,144,,,144,144,144', +'144,144,144,144,144,144,144,,,,,144,145,145,144,144,,145,,145,144,145', +',144,144,144,144,,,,,144,144,,144,,144,144,,144,,144,144,,,,,144,144', +'144,144,144,144,,,,,144,,,,,,,,,,,143,,,143,143,143,143,143,143,143', +'143,143,143,,,,,143,144,144,143,143,,144,,144,143,144,,143,143,143,143', +',,,,143,143,,143,,143,143,,143,,143,143,,,,,143,143,143,143,143,143', +',,,,143,,,,,,,,,,,294,,,294,294,294,294,294,294,294,294,294,294,,,,', +'294,143,143,294,294,,143,,143,294,143,,294,294,294,294,,,,,294,294,', +'294,,294,294,,294,,294,294,,,,,294,294,294,294,294,294,,,,,294,,,,,', +',,,,,142,,,142,142,142,142,142,142,142,142,142,142,294,,,,142,294,294', +'142,142,,294,,294,142,294,,142,142,142,142,,,,,142,142,,142,,142,142', +',142,,142,142,,,,,142,142,142,142,142,142,,,,,142,,,,,,,,,,,282,,,282', +'282,282,282,282,282,282,282,282,282,,,,,282,142,142,282,282,,142,,142', +'282,142,,282,282,282,282,,,,,282,282,,282,,282,282,,282,,282,282,,,', +',282,282,282,282,282,282,,,,,282,,,,,,,,,,,68,,,68,68,68,68,68,68,68', +'68,68,68,,,,,68,282,282,68,68,,282,,282,68,282,,68,68,68,68,,,,,68,68', +',68,,68,68,,68,,68,68,,,,,68,68,68,68,68,68,,,,,68,,,,,,,,,,,71,,,71', +'71,71,71,71,71,71,71,71,71,,,,,71,68,68,71,71,,68,,68,71,68,,71,71,71', +'71,,,,,71,71,,71,,71,71,,71,,71,71,,,,,71,71,71,71,71,71,,,,,71,,,,', +',,,,,,281,,,281,281,281,281,281,281,281,281,281,281,,,,,281,71,71,281', +'281,,71,,71,281,71,,281,281,281,281,,,,,281,281,,281,,281,281,,281,', +'281,281,,,,,281,281,281,281,281,281,,,,,281,,,,,,,,,,,273,,,273,273', +'273,273,273,273,273,273,273,273,,,,,273,281,281,273,273,,281,,281,273', +'281,,273,273,273,273,,,,,273,273,,273,,273,273,,273,,273,273,,,,,273', +'273,273,273,273,273,,,,,273,,,,,,,,,,,141,,,141,141,141,141,141,141', +'141,141,141,141,273,,,,141,273,273,141,141,,273,,273,141,273,,141,141', +'141,141,,,,,141,141,,141,,141,141,,141,,141,141,,,,,141,141,141,141', +'141,141,,,,,141,,,,,,,,,,,139,,,139,139,139,139,139,139,139,139,139', +'139,,,,,139,141,141,139,139,,141,,141,139,141,,139,139,139,139,,,,,139', +'139,,139,,139,139,,139,,139,139,,,,,139,139,139,139,139,139,,,,,139', +',,,,,,,,,,271,,,271,271,271,271,271,271,271,271,271,271,,,,,271,139', +'139,271,271,,139,,139,271,139,,271,271,271,271,,,,,271,271,,271,,271', +'271,,271,,271,271,,,,,271,271,271,271,271,271,,,,,271,,,,,,,,,,,138', +',,138,138,138,138,138,138,138,138,138,138,,,,,138,271,271,138,138,,271', +',271,138,271,,138,138,138,138,,,,,138,138,,138,,138,138,,138,,138,138', +',,,,138,138,138,138,138,138,,,,,138,,,,,,,,,,,136,,,136,136,136,136', +'136,136,136,136,136,136,,,,,136,138,138,136,136,,138,,138,136,138,,136', +'136,136,136,,,,,136,136,,136,,136,136,,136,,136,136,,,,,136,136,136', +'136,136,136,,,,,136,,,,,,,,,,,270,,,270,270,270,270,270,270,270,270', +'270,270,,,,,270,136,136,270,270,,136,,136,270,136,,270,270,270,270,', +',,,270,270,,270,,270,270,,270,,270,270,,,,,270,270,270,270,270,270,', +',,,270,,,,,,,,,,,135,,,135,135,135,135,135,135,135,135,135,135,,,,,135', +'270,270,135,135,,270,,270,135,270,,135,135,135,135,,,,,135,135,,135', +',135,135,,135,,135,135,,,,,135,135,135,135,135,135,,,,,135,,,,,,,,,', +',134,,,134,134,134,134,134,134,134,134,134,134,,,,,134,135,135,134,134', +',135,,135,134,135,,134,134,134,134,,,,,134,134,,134,,134,134,,134,,134', +'134,,,,,134,134,134,134,134,134,,,,,134,,,,,,,,,,,133,,,133,133,133', +'133,133,133,133,133,133,133,,,,,133,134,134,133,133,,134,,134,133,134', +',133,133,133,133,,,,,133,133,,133,,133,133,,133,,133,133,,,,,133,133', +'133,133,133,133,,,,,133,,,,,,,,,,,259,,,259,259,259,259,259,259,259', +'259,259,259,,,,,259,133,133,259,259,,133,,133,259,133,,259,259,259,259', +',,,,259,259,,259,,259,259,,259,,259,259,,,,,259,259,259,259,259,259', +',,,,259,,,,,,,,,,,86,,,86,86,86,86,86,86,86,86,86,86,,,,,86,259,259', +'86,86,,259,,259,86,259,,86,86,86,86,,,,,86,86,,86,,86,86,,86,,86,86', +'86,,,,86,86,86,86,86,86,,,,,86,,,,,,,,,,,87,,,87,87,87,87,87,87,87,87', +'87,87,,,,,87,86,86,87,87,,86,,86,87,86,,87,87,87,87,,,,,87,87,,87,,87', +'87,,87,,87,87,,,,,87,87,87,87,87,87,,,,,87,,,,,,,,,,,132,,,132,132,132', +'132,132,132,132,132,132,132,,,,,132,87,87,132,132,,87,,87,132,87,,132', +'132,132,132,,,,,132,132,,132,,132,132,,132,,132,132,,,,,132,132,132', +'132,132,132,,,,,132,,,,,,,,,,,131,,,131,131,131,131,131,131,131,131', +'131,131,,,,,131,132,132,131,131,,132,,132,131,132,,131,131,131,131,', +',,,131,131,,131,,131,131,,131,,131,131,,,,,131,131,131,131,131,131,', +',,,131,,,,,,,,,,,130,,,130,130,130,130,130,130,130,130,130,130,,,,,130', +'131,131,130,130,,131,,131,130,131,,130,130,130,130,,,,,130,130,,130', +',130,130,,130,,130,130,,,,,130,130,130,130,130,130,,,,,130,,,,,,,,,', +',205,,,205,205,205,205,205,205,205,205,205,205,,,,,205,130,130,205,205', +',130,,130,205,130,,205,205,205,205,,,,,205,205,,205,,205,205,,205,,205', +'205,,,,,205,205,205,205,205,205,,,,,205,,,,,,,,,,,204,,,204,204,204', +'204,204,204,204,204,204,204,,,,,204,205,205,204,204,,205,,205,204,205', +',204,204,204,204,,,,,204,204,,204,,204,204,,204,,204,204,,,,,204,204', +'204,204,204,204,,,,,204,,,,,,,,,,,129,,,129,129,129,129,129,129,129', +'129,129,129,,,,,129,204,204,129,129,,204,,204,129,204,,129,129,129,129', +',,,,129,129,,129,,129,129,,129,,129,129,,,,,129,129,129,129,129,129', +',,,,129,,,,,,,,,,,123,,,123,123,123,123,123,123,123,123,123,123,,,,', +'123,129,129,123,123,,129,,129,123,129,,123,123,123,123,,,,,123,123,', +'123,,123,123,,123,,123,123,,,,,123,123,123,123,123,123,,,,,123,,,,,', +',,,,,192,,,192,192,192,192,192,192,192,192,192,192,,,,,192,123,123,192', +'192,,123,,123,192,123,,192,192,192,192,,,,,192,192,,192,,192,192,,192', +',192,192,192,,,,192,192,192,192,192,192,226,,,,192,,226,226,226,226', +'226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226', +',,,,,,192,192,192,192,,192,,192,154,192,,154,154,154,154,154,154,154', +'154,154,154,,,,,154,,,154,154,,,,,154,,,154,154,154,154,,,,,154,154', +',154,,154,154,,154,,154,154,,,,,154,154,154,154,154,154,,,,,154,,,,', +',,,,,,103,,,103,103,103,103,103,103,103,103,103,103,,,,,103,154,154', +'103,103,,154,,154,103,154,,103,103,103,103,,,,,103,103,,103,,103,103', +',103,,103,103,,,,,103,103,103,103,103,103,,,,,103,,,,,,,,,,,128,,,128', +'128,128,128,128,128,128,128,128,128,,,,,128,103,103,128,128,,103,,103', +'128,103,,128,128,128,128,,,,,128,128,,128,,128,128,,128,,128,128,,,', +',128,128,128,128,128,128,,,,,128,,,,,,,,,,,191,,,191,191,191,191,191', +'191,191,191,191,191,,,,,191,128,128,191,191,,128,,128,191,128,,191,191', +'191,191,,,,,191,191,,191,,191,191,,191,,191,191,,,,,191,191,191,191', +'191,191,,,,,191,,,,,,,,,,,106,,,106,106,106,106,106,106,106,106,106', +'106,,,,,106,191,191,106,106,,191,,191,106,191,,106,106,106,106,,,,,106', +'106,,106,,106,106,,106,,106,106,106,,,,106,106,106,106,106,106,,,,,106', +',,,,,,,,,,0,,,0,0,0,0,0,0,0,0,0,0,,,,,0,106,106,0,0,,106,,106,0,106', +',0,0,0,0,,,,,0,0,,0,,0,0,,0,,0,0,0,,,,0,0,0,0,0,0,208,,,,0,,208,208', '208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208', -'208,208,208,,,,,264,264,,,,264,,,,264,,,,,,,,,,264,,,,,,264,264,264', +'208,208,,,,,,,0,0,0,0,,0,,0,127,0,,127,127,127,127,127,127,127,127,127', +'127,,,,,127,,,127,127,,,,,127,,,127,127,127,127,,,,,127,127,,127,,127', +'127,,127,,127,127,,,,,127,127,127,127,127,127,,,,,127,,,,,,,,,,,184', +',,184,184,184,184,184,184,184,184,184,184,,,,,184,127,127,184,184,,127', +',127,184,127,,184,184,184,184,,,,,184,184,,184,,184,184,,184,,184,184', +',,,,184,184,184,184,184,184,,,,,184,,,,,,,,,,,183,,,183,183,183,183', +'183,183,183,183,183,183,,,,,183,184,184,183,183,,184,,184,183,184,,183', +'183,183,183,,,,,183,183,,183,,183,183,,183,,183,183,,,,,183,183,183', +'183,183,183,,,,,183,,,,,,,,,,,126,,,126,126,126,126,126,126,126,126', +'126,126,,,,,126,183,183,126,126,,183,,183,126,183,,126,126,126,126,', +',,,126,126,,126,,126,126,,126,,126,126,,,,,126,126,126,126,126,126,', +',,,126,,,,,,,,,,,112,,,112,112,112,112,112,112,112,112,112,112,,,,,112', +'126,126,112,112,,126,,126,112,126,,112,112,112,112,,,,,112,112,,112', +',112,112,,112,,112,112,,,,,112,112,112,112,112,112,,,,,112,,,,,,,,,', +',125,,,125,125,125,125,125,125,125,125,125,125,,,,,125,112,112,125,125', +',112,,112,125,112,,125,125,125,125,,,,,125,125,,125,,125,125,,125,,125', +'125,,,,,125,125,125,125,125,125,,,,,125,,,,,,,,,,,162,,,162,162,162', +'162,162,162,162,162,162,162,,,,,162,125,125,162,162,,125,,125,162,125', +',162,162,162,162,,,,,162,162,,162,,162,162,,162,,162,162,,,,,162,162', +'162,162,162,162,,,,,162,,,,,,,,,,,124,,,124,124,124,124,124,124,124', +'124,124,124,,,,,124,162,162,124,124,,162,,162,124,162,,124,124,124,124', +',,,,124,124,,124,,124,124,,124,,124,124,,,,,124,124,124,124,124,124', +',,,,124,,,,,,,,,,,118,,,118,118,118,118,118,118,118,118,118,118,,,,', +'118,124,124,118,118,,124,,124,118,124,,118,118,118,118,,,,,118,118,', +'118,,118,118,,118,,118,118,,,,,118,118,118,118,118,118,,,,,118,,,,,', +',,,,,119,,,119,119,119,119,119,119,119,119,119,119,,,,,119,118,118,119', +'119,,118,,118,119,118,,119,119,119,119,,,,,119,119,,119,,119,119,,119', +',119,119,,,,,119,119,119,119,119,119,,,,,119,,,,,,,,,,,120,,,120,120', +'120,120,120,120,120,120,120,120,,,,,120,119,119,120,120,,119,,119,120', +'119,,120,120,120,120,,,,,120,120,,120,,120,120,,120,,120,120,,,,,120', +'120,120,120,120,120,,,,,120,,,,,,,,,,,158,,,158,158,158,158,158,158', +'158,158,158,158,,,,,158,120,120,158,158,,120,,120,158,120,,158,158,158', +'158,,,,,158,158,,158,,158,158,,158,,158,158,,,,,158,158,158,158,158', +'158,,,,,158,,,,,,,,,,,157,,,157,157,157,157,157,157,157,157,157,157', +',,,,157,158,158,157,157,,158,,158,157,158,,157,157,157,157,,,,,157,157', +',157,,157,157,,157,,157,157,,,,,157,157,157,157,157,157,,,,,157,,,,', +',,,,,,155,,,155,155,155,155,155,155,155,155,155,155,,,,,155,157,157', +'155,155,,157,,157,155,157,,155,155,155,155,,,,,155,155,,155,,155,155', +',155,,155,155,298,,298,,155,155,155,155,155,155,240,,,,155,,240,240', +'240,240,240,240,240,240,240,240,240,240,240,,,,298,298,,,,298,,,,298', +',155,155,,,,155,,155,298,155,,,,,298,298,298,298,298,298,298,298,298', +'298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298', +'298,298,298,298,298,298,298,298,311,,311,,,,,,,298,,160,160,160,160', +'160,160,160,160,160,160,,,,,,,,,,,,311,311,,,,311,160,160,,311,,,,,', +',,,,311,,160,,,160,311,311,311,311,311,311,311,311,311,311,311,311,311', +'311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311', +'311,311,311,311,,,,,,,,,,311,,,,,160,,160,,160,19,19,19,19,19,19,19', +'19,19,19,,,299,299,299,299,299,299,299,299,299,299,,,,,299,19,19,299', +'299,,,,,299,,,299,299,299,,19,,,19,,299,,299,,299,299,,299,,299,299', +',,,,299,299,299,299,299,299,230,,,,299,,230,230,230,230,230,230,230', +'230,230,230,230,230,230,,,,,,,,19,,19,,19,,,299,299,,,,299,,299,,299', +'309,309,309,309,309,309,309,309,309,309,,,,,309,,,309,309,,,,,309,,', +'309,309,309,,,,,,,309,,309,,309,309,,309,,309,309,,,,,309,309,309,309', +'309,309,225,,,,309,,225,225,225,225,225,225,225,225,225,225,,,23,23', +'23,23,23,23,23,23,23,23,,,,,23,309,309,23,23,,309,,309,23,309,,23,23', +'23,23,,,,,,23,,23,,23,23,,23,,23,23,272,,272,,23,23,23,23,23,23,236', +',,,23,,236,236,236,236,236,236,236,236,236,236,236,236,236,,,,272,272', +',,,272,,,,272,,23,23,,,,23,,23,272,23,,,,,272,272,272,272,272,272,272', +'272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272', +'272,272,272,272,272,272,272,272,272,272,264,229,264,,,,,229,229,229', +'229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229', +'229,,,,,264,264,,,,264,,,,264,,,,,,,,,,264,,,,,,264,264,264,264,264', '264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264', -'264,264,264,264,264,264,264,264,264,264,264,264,264,264,269,229,269', -',,,,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229', -'229,229,229,229,229,,,,,269,269,,,,269,,,,269,,,,,,,,,,269,,,,,,269', +'264,264,264,264,264,264,264,264,264,264,264,264,269,217,269,,,,,217', +'217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217', +'217,217,217,,,,,269,269,,,,269,,,,269,,,,,,,,,,269,,,,,,269,269,269', '269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269', -'269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,80,220', -'80,,,,,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220', -'220,220,220,220,220,,,,,80,80,,,,80,,,,80,,,,,,,,80,,80,,,,,,80,80,80', +'269,269,269,269,269,269,269,269,269,269,269,269,269,269,80,224,80,,', +',,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224', +'224,224,224,224,,,,,80,80,,,,80,,,,80,,,,,,,,80,,80,,,,,,80,80,80,80', '80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80', -'80,80,80,80,80,80,80,80,79,212,79,,,,,212,212,212,212,212,212,212,212', -'212,212,212,212,212,212,212,212,212,212,212,212,212,,,,,79,79,,,,79', -',,,79,,,,,,,,79,,79,,,,,,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79', -'79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,77,224,77,', -',,,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224', -'224,224,224,224,,,,,77,77,,,,77,,,,77,,,,,,,,77,,77,,,,,,77,77,77,77', +'80,80,80,80,80,80,80,79,212,79,,,,,212,212,212,212,212,212,212,212,212', +'212,212,212,212,212,212,212,212,212,212,212,212,,,,,79,79,,,,79,,,,79', +',,,,,,,79,,79,,,,,,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79', +'79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,77,220,77,,,,,220', +'220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220', +'220,220,220,,,,,77,77,,,,77,,,,77,,,,,,,,77,,77,,,,,,77,77,77,77,77', '77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77', -'77,77,77,77,77,77,77,263,244,263,,,,,244,244,244,244,244,244,244,244', -'244,244,244,244,244,244,244,244,244,244,244,244,244,,,,,263,263,,,,263', -',,,263,,,,,,,,,,263,,,,,,263,263,263,263,263,263,263,263,263,263,263', +'77,77,77,77,77,77,263,244,263,,,,,244,244,244,244,244,244,244,244,244', +'244,244,244,244,244,244,244,244,244,244,244,244,,,,,263,263,,,,263,', +',,263,,,,,,,,,,263,,,,,,263,263,263,263,263,263,263,263,263,263,263', '263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263', -'263,263,263,263,263,263,292,226,292,,,,,226,226,226,226,226,226,226', -'226,226,226,226,226,226,226,226,226,226,226,226,226,226,,,,,292,292', -',,,292,,,,292,,,,,,,,,,292,,,,,,292,292,292,292,292,292,292,292,292', +'263,263,263,263,263,263,292,233,292,,,,,233,233,233,233,233,233,233', +'233,233,233,233,233,233,,,,,,,,,,,,,292,292,,,,292,,,,292,,,,,,,,,,292', +',,,,,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292', '292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292', -'292,292,292,292,292,292,292,292,63,240,63,,,,,240,240,240,240,240,240', -'240,240,240,240,240,240,240,,,,,,,,,,,,,63,63,,,,63,,,,63,,,,,,,,,,63', -',,,,,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63', -'63,63,63,63,63,63,63,63,63,63,63,63,63,297,221,297,,,,,221,221,221,221', -'221,221,221,221,221,221,,,,,,,,,,,,,,,,297,297,,,,297,,,,297,,,,,,,', -',,297,,,,,,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297', +'292,63,227,63,,,,,227,227,227,227,227,227,227,227,227,227,,,,,,,,,,', +',,,,,63,63,,,,63,,,,63,,,,,,,,,,63,,,,,,63,63,63,63,63,63,63,63,63,63', +'63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63', +'63,296,221,296,,,,,221,221,221,221,221,221,221,221,221,221,,,,,,,,,', +',,,,,,296,296,,,,296,,,,296,,,,,,,,,,296,,,,,,296,296,296,296,296,296', +'296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296', +'296,296,296,296,296,296,296,296,296,296,296,297,,297,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,297,297,,,,297,,,,297,,,,,,,,,,297,,,,,,297,297,297,297', '297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297', -'297,297,298,225,298,,,,,225,225,225,225,225,225,225,225,225,225,,,,', -',,,,,,,,,,,298,298,,,,298,,,,298,,,,,,,,,,298,,,,,,298,298,298,298,298', -'298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298', -'298,298,298,298,298,298,298,298,298,298,298,298,228,,228,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,228,228,,,,228,,,,228,,,,,,,,,,228,,,,,,228,228,228', +'297,297,297,297,297,297,297,297,297,297,297,297,297,228,,228,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,228,228,,,,228,,,,228,,,,,,,,,,228,,,,,,228,228', '228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228', -'228,228,228,228,228,228,228,228,228,228,228,228,228,228,222,,222,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,222,222,,,,222,,,,222,,,,,,,,,,222,,,,,,222', +'228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,222,,222', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,222,222,,,,222,,,,222,,,,,,,,,,222,,,,', +',222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222', '222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222', -'222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,309', -',309,,,,,,,,,,,,,,,,,,,,,,,309,,,,,,,309,309,,,,309,,,,309,,,,,,,,,', -'309,,,,,,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309', -'309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309', -'309,309,214,,214,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,214,214,,,,214,,,,214', -',,,,,,,,,214,,,,,,214,214,214,214,214,214,214,214,214,214,214,214,214', +'308,,308,,,,,,,,,,,,,,,,,,,,,,,308,,,,,,,308,308,,,,308,,,,308,,,,,', +',,,,308,,,,,,308,308,308,308,308,308,308,308,308,308,308,308,308,308', +'308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308', +'308,308,308,214,,214,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,214,214,,,,214,,,', +'214,,,,,,,,,,214,,,,,,214,214,214,214,214,214,214,214,214,214,214,214', '214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214', -'214,214,214,214,193,,193,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,193,193,,,,193', -',,,193,,,,,,,,,,193,,,,,,193,193,193,193,193,193,193,193,193,193,193', -'193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193', -'193,193,193,193,193,193,104,,104,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,104,104', -',,,104,,,,104,,,,,,,,,,104,,,,,,104,104,104,104,104,104,104,104,104', +'214,214,214,214,214,201,,201,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,201,201,,', +',201,,,,201,,,,,,,,,,201,,,,,,201,201,201,201,201,201,201,201,201,201', +'201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201', +'201,201,201,201,201,201,201,104,,104,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,104', +'104,,,,104,,,,104,,,,,,,,,,104,,,,,,104,104,104,104,104,104,104,104', '104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104', -'104,104,104,104,104,104,104,104,179,,179,,,,,,,,,,,,,,,,,,,,,,,179,', -',,,,,179,179,,,,179,,,,179,,,,,,,,,,179,,,,,,179,179,179,179,179,179', +'104,104,104,104,104,104,104,104,104,179,,179,,,,,,,,,,,,,,,,,,,,,,,179', +',,,,,,179,179,,,,179,,,,179,,,,,,,,,,179,,,,,,179,179,179,179,179,179', '179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179', '179,179,179,179,179,179,179,179,179,179,179,178,,178,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,178,178,,,,178,,,,178,,,,,,,,,,178,,,,,,178,178,178,178', '178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178', -'178,178,178,178,178,178,178,178,178,178,178,178,178,315,,315,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,315,315,,,,315,,,,315,,,,,,,,,,315,,,,,,315,315', -'315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315', -'315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,201,,201', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,201,201,,,,201,,,,201,,,,,,,,,,201,,,,', -',201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201', -'201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201', -'317,,317,,,,,,,,,,,,,,,,,,,,,,,317,,,,,,,317,317,,,,317,,,,317,,,,,', -',,,,317,,,,,,317,317,317,317,317,317,317,317,317,317,317,317,317,317', -'317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317', -'317,317,317,95,95,,,,,,,,95,,,,,,,,,,95,,,,,,95,95,95,95,95,95,95,95', -'95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95', -'95,95,95,248,248,,,,,,,,248,,,,,,,,,,248,,,,,,248,248,248,248,248,248', +'178,178,178,178,178,178,178,178,178,178,178,178,178,314,,314,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,314,314,,,,314,,,,314,,,,,,,,,,314,,,,,,314,314', +'314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314', +'314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,193,,193', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,193,193,,,,193,,,,193,,,,,,,,,,193,,,,', +',193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193', +'193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193', +'316,,316,,,,,,,,,,,,,,,,,,,,,,,316,,,,,,,316,316,,,,316,,,,316,,,,,', +',,,,316,,,,,,316,316,316,316,316,316,316,316,316,316,316,316,316,316', +'316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316', +'316,316,316,248,248,,,,,,,,248,,,,,,,,,,248,,,,,,248,248,248,248,248', '248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248', -'248,248,248,248,248,248,248,248,248,248,248,223,223,,,,,,,,223,,,,,', -',,,,223,,,,,,223,223,223,223,223,223,223,223,223,223,223,223,223,223', +'248,248,248,248,248,248,248,248,248,248,248,248,95,95,,,,,,,,95,,,,', +',,,,,95,,,,,,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95', +'95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,216,216,,,,,,,,216,,,,', +',,,,,216,,,,,,216,216,216,216,216,216,216,216,216,216,216,216,216,216', +'216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216', +'223,223,,,,,,,,223,,,,,,,,,,223,,,,,,223,223,223,223,223,223,223,223', '223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223', -'219,219,,,,,,,,219,,,,,,,,,,219,,,,,,219,219,219,219,219,219,219,219', +'223,223,223,223,223,223,219,219,,,,,,,,219,,,,,,,,,,219,,,,,,219,219', '219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219', -'219,219,219,219,219,219,111,111,,,,,,,,111,,,,,,,,,,111,,,,,,111,111', +'219,219,219,219,219,219,219,219,219,219,219,219,111,111,,,,,,,,111,', +',,,,,,,,111,,,,,,111,111,111,111,111,111,111,111,111,111,111,111,111', '111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111', -'111,111,111,111,111,111,111,111,111,111,111,111,216,216,,,,,,,,216,', -',,,,,,,,216,,,,,,216,216,216,216,216,216,216,216,216,216,216,216,216', -'216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216', -'216,279,,,,,,,,279,,,,,,,,,,279,,,,,,279,279,279,279,279,279,279,279', +'111,279,,,,,,,,279,,,,,,,,,,279,,,,,,279,279,279,279,279,279,279,279', '279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279', -'279,279,279,279,279,279,304,,,,,,,,304,,,,,,,,,,304,,,,,,304,304,304', -'304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304', -'304,304,304,304,304,304,304,304,304,304,304,280,,,,,,,,280,,,,,,,,,', -'280,,,,,,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280', -'280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,303', +'279,279,279,279,279,279,302,,,,,,,,302,,,,,,,,,,302,,,,,,302,302,302', +'302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302', +'302,302,302,302,302,302,302,302,302,302,302,215,,,,,,,,215,,,,,,,,,', +'215,,,,,,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215', +'215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,303', ',,,,,,,303,,,,,,,,,,303,,,,,,303,303,303,303,303,303,303,303,303,303', '303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303', -'303,303,303,303,215,,,,,,,,215,,,,,,,,,,215,,,,,,215,215,215,215,215', -'215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215', -'215,215,215,215,215,215,215,215,215,85,,,,,,,,,,85,,,,,,85,85,85,85', +'303,303,303,303,280,,,,,,,,280,,,,,,,,,,280,,,,,,280,280,280,280,280', +'280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280', +'280,280,280,280,280,280,280,280,280,85,,,,,,,,,,85,,,,,,85,85,85,85', '85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85', '85,85,85,105,,,,,,,,,,105,,,,,,105,105,105,105,105,105,105,105,105,105', '105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105', @@ -679,10 +678,10 @@ def on_error(error_token_id, error_value, value_stack) '242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242', '242,242,242,242,238,,,,,,238,238,238,238,238,238,238,238,238,238,238', '238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238', -'238,238,232,,,,,,232,232,232,232,232,232,232,232,232,232,232,232,232', -'232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232', -'235,,,,,,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235', -'235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,243,,,,', +'238,238,235,,,,,,235,235,235,235,235,235,235,235,235,235,235,235,235', +'235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235', +'232,,,,,,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232', +'232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,243,,,,', ',243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243', '243,243,243,243,243,243,243,243,243,243,243,243,243,207,,,,,,207,207', '207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207', @@ -697,91 +696,91 @@ def on_error(error_token_id, error_value, value_stack) end racc_action_pointer = [ - 4416, 290, nil, nil, 198, nil, 272, nil, nil, 346, - nil, 420, 494, nil, nil, 568, nil, nil, 642, 5725, - 790, nil, 494, 5910, 213, nil, nil, nil, nil, 1086, - 1160, nil, 248, nil, 1308, 1382, nil, nil, nil, nil, - 214, nil, nil, nil, nil, 239, nil, nil, nil, 1604, - nil, nil, nil, nil, nil, 26, 1752, nil, nil, 68, - nil, nil, 184, 6687, 145, -2, 138, nil, 2270, nil, - nil, 2344, nil, -3, 9, nil, 131, 6414, 339, 6323, - 6232, 507, 471, 235, 420, 8537, 3306, 3380, 204, nil, - 276, nil, 172, nil, nil, 7929, 35, nil, 46, 222, - nil, 238, 75, 4120, 7415, 8583, 4342, -2, 323, 317, - 16, 8159, 4812, 64, nil, nil, 146, 140, 5108, 5182, - 5256, 293, 224, 3898, 5034, 4886, 4738, 4516, 4194, 3972, - 3676, 3602, 3528, 3158, 3084, 3010, 2862, nil, 2788, 2640, - nil, 2566, 2122, 1974, 1900, 1826, 1678, 1530, 1234, 1012, - 938, 864, -2, 716, 4046, 5478, 3454, 5404, 5330, nil, - 5626, nil, 4960, nil, nil, -1, nil, 238, nil, 413, - 397, 168, -60, 61, nil, nil, -22, 126, 7597, 7506, - nil, nil, nil, 4664, 4590, 83, nil, 138, 119, nil, - nil, 4268, 98, 7324, 5, 137, nil, 22, 32, -26, - nil, 7779, nil, 9, 3824, 3750, 132, 8809, 6000, 280, - 240, 57, 6273, 354, 7233, 8490, 8215, 4424, 428, 8103, - 6182, 6728, 7051, 8047, 6364, 6819, 6546, 5844, 6960, 6091, - 5918, 487, 8701, 5486, 265, 8737, 5745, 249, 8665, nil, - 6637, 207, 8629, 8773, 6455, 502, 346, 272, 7988, nil, - nil, nil, nil, nil, 198, 136, 253, 133, nil, 3232, - 20, 45, nil, 6505, 6050, nil, nil, nil, 153, 6141, - 2936, 2714, 5959, 2492, nil, 62, 73, nil, nil, 8270, - 8380, 2418, 2196, nil, 176, nil, nil, nil, -13, 115, - nil, nil, 6596, -2, nil, 2048, nil, 6778, 6869, 5527, - 5737, nil, nil, 8435, 8325, nil, 194, 22, 1456, 7142, - 5836, nil, 5618, nil, nil, 7688, nil, 7870, nil, nil ] + 4416, 269, nil, nil, 172, nil, 246, nil, nil, 320, + nil, 394, 468, nil, nil, 542, nil, nil, 616, 5725, + 764, nil, 505, 5910, 232, nil, nil, nil, nil, 1060, + 1134, nil, 252, nil, 1282, 1356, nil, nil, nil, nil, + 221, nil, nil, nil, nil, 245, nil, nil, nil, 1578, + nil, nil, nil, nil, nil, 53, 1726, nil, nil, 55, + nil, nil, 199, 6687, 157, -2, 143, nil, 2244, nil, + nil, 2318, nil, -3, -43, nil, 313, 6414, 535, 6323, + 6232, 519, 181, 394, 320, 8537, 3280, 3354, 182, nil, + 270, nil, 256, nil, nil, 7988, 20, nil, -70, 212, + nil, 212, 63, 4120, 7415, 8583, 4342, -2, 445, 294, + 16, 8215, 4812, 76, nil, nil, 164, 140, 5108, 5182, + 5256, 273, 205, 3872, 5034, 4886, 4738, 4516, 4194, 3798, + 3576, 3502, 3428, 3132, 3058, 2984, 2836, nil, 2762, 2614, + nil, 2540, 2096, 1948, 1874, 1800, 1652, 1504, 1208, 986, + 912, 838, -2, 690, 4046, 5478, 98, 5404, 5330, nil, + 5626, nil, 4960, nil, nil, -1, nil, 246, nil, 387, + 297, 182, 39, 77, nil, nil, -22, 146, 7597, 7506, + nil, nil, nil, 4664, 4590, 92, nil, 201, 113, nil, + nil, 4268, 3946, 7779, -50, 71, nil, 4, 14, -26, + nil, 7324, nil, 125, 3724, 3650, -2, 8809, 4424, 402, + 285, 75, 6273, 328, 7233, 8380, 8047, 6091, 254, 8159, + 6364, 6728, 7051, 8103, 6182, 5844, 3954, 6637, 6960, 6000, + 5745, 371, 8737, 6546, 65, 8701, 5918, 239, 8665, nil, + 5486, 479, 8629, 8773, 6455, 550, 468, 519, 7929, nil, + nil, nil, nil, nil, 184, 131, 286, 184, nil, 3206, + nil, 27, nil, 6505, 6050, nil, nil, nil, 233, 6141, + 2910, 2688, 5959, 2466, nil, 1, 47, nil, nil, 8270, + 8490, 2392, 2170, nil, 186, nil, nil, nil, 73, 119, + nil, nil, 6596, 43, 2022, nil, 6778, 6869, 5527, 5737, + nil, nil, 8325, 8435, nil, 212, 39, 1430, 7142, 5836, + nil, 5618, nil, nil, 7688, nil, 7870, nil, nil ] racc_action_default = [ - -1, -183, -97, -11, -183, -106, -183, -26, -12, -183, - -107, -183, -183, -27, -13, -183, -108, -14, -183, -183, - -183, -15, -124, -46, -118, -16, -28, -17, -29, -138, - -183, -31, -183, -18, -183, -183, -126, -35, -19, -36, - -183, -34, -20, -37, -21, -183, -47, -22, -38, -183, - -2, -30, -23, -39, -32, -3, -183, -104, -40, -183, - -103, -33, -183, -5, -183, -8, -176, -9, -183, -96, - -10, -183, -105, -183, -100, -98, -49, -155, -52, -183, - -183, -54, -53, -183, -125, -55, -138, -183, -183, -110, - -183, -114, -183, -115, -129, -45, -183, -44, -183, -118, - -119, -183, -183, -183, -139, -56, -138, -183, -50, -183, - -183, -152, -7, -183, -25, -4, -159, -183, -183, -183, - -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, - -183, -183, -183, -183, -183, -183, -183, -58, -183, -183, - -57, -183, -183, -183, -183, -183, -183, -183, -183, -183, - -183, -183, -93, -183, -183, -183, -183, -183, -183, -95, - -183, -109, -183, -128, -180, -183, -174, -176, -178, -51, - -48, -183, -183, -183, -154, -172, -183, -183, -139, -183, - -111, -112, -113, -183, -183, -183, -117, -183, -183, -137, - -145, -183, -183, -140, -183, -183, -153, -148, -183, -183, - 320, -6, -24, -183, -183, -183, -183, -87, -75, -64, - -183, -183, -76, -65, -181, -92, -88, -77, -66, -89, - -78, -67, -182, -90, -79, -68, -80, -69, -156, -81, + -1, -182, -97, -11, -182, -106, -182, -26, -12, -182, + -107, -182, -182, -27, -13, -182, -108, -14, -182, -182, + -182, -15, -124, -46, -118, -16, -28, -17, -29, -137, + -182, -31, -182, -18, -182, -182, -126, -35, -19, -36, + -182, -34, -20, -37, -21, -182, -47, -22, -38, -182, + -2, -30, -23, -39, -32, -3, -182, -104, -40, -182, + -103, -33, -182, -5, -182, -8, -175, -9, -182, -96, + -10, -182, -105, -182, -100, -98, -49, -154, -52, -182, + -182, -54, -53, -182, -125, -55, -137, -182, -182, -110, + -182, -114, -182, -115, -129, -45, -182, -44, -182, -118, + -119, -182, -182, -182, -138, -56, -137, -182, -50, -182, + -182, -151, -7, -182, -25, -4, -158, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -58, -182, -182, + -57, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -93, -182, -182, -182, -182, -182, -182, -95, + -182, -109, -182, -128, -179, -182, -173, -175, -177, -51, + -48, -182, -182, -182, -153, -171, -182, -182, -138, -182, + -111, -112, -113, -182, -182, -182, -117, -182, -182, -136, + -144, -182, -182, -139, -182, -182, -152, -147, -182, -182, + 319, -6, -24, -182, -182, -182, -182, -87, -75, -64, + -182, -182, -76, -65, -180, -92, -88, -77, -66, -89, + -78, -67, -181, -90, -79, -68, -80, -69, -155, -81, -70, -59, -83, -71, -60, -84, -72, -61, -85, -82, - -73, -62, -91, -86, -74, -63, -127, -183, -41, -173, - -177, -175, -179, -99, -183, -183, -183, -183, -167, -183, - -130, -183, -116, -42, -43, -123, -121, -120, -183, -142, - -183, -183, -141, -183, -132, -183, -183, -149, -160, -161, - -162, -183, -183, -158, -157, -102, -94, -101, -183, -183, - -168, -165, -146, -183, -131, -183, -122, -143, -144, -183, - -102, -150, -151, -164, -163, -171, -183, -169, -183, -183, - -102, -133, -183, -166, -170, -147, -135, -183, -134, -136 ] + -73, -62, -91, -86, -74, -63, -127, -182, -41, -172, + -176, -174, -178, -99, -182, -182, -182, -182, -166, -182, + -130, -182, -116, -42, -43, -123, -121, -120, -182, -141, + -182, -182, -140, -182, -131, -182, -182, -148, -159, -160, + -161, -182, -182, -157, -156, -102, -94, -101, -182, -182, + -167, -164, -145, -182, -182, -122, -142, -143, -182, -102, + -149, -150, -163, -162, -170, -182, -168, -182, -182, -102, + -132, -182, -165, -169, -146, -134, -182, -133, -135 ] racc_goto_table = [ 50, 161, 163, 59, 258, 206, 75, 76, 101, 77, - 166, 97, 78, 168, 79, 80, 266, 267, 81, 161, - 163, 82, 102, 85, 45, 84, 95, 293, 83, 117, - 197, 55, 104, 105, 257, 254, 249, 107, 108, 73, - 167, 294, 164, 109, nil, nil, nil, nil, nil, nil, + 168, 97, 78, 166, 79, 80, 266, 267, 81, 161, + 163, 82, 102, 85, 45, 83, 95, 293, 84, 117, + 257, 55, 104, 105, 197, 249, 254, 107, 108, 167, + 73, 164, nil, 109, nil, nil, nil, nil, nil, nil, nil, nil, 111, nil, nil, 112, nil, nil, nil, 115, nil, nil, nil, nil, nil, nil, nil, 159, nil, nil, nil, 169, nil, nil, 170, nil, nil, nil, nil, 177, 174, nil, 175, 185, nil, 290, 97, 113, 210, 178, - 179, nil, nil, nil, nil, nil, nil, 296, 284, 195, + 179, nil, nil, nil, nil, nil, nil, 295, 284, 195, nil, 187, nil, nil, nil, nil, 193, nil, nil, 178, - nil, 251, nil, 112, 252, 201, 305, nil, nil, nil, + nil, 252, nil, 112, 251, 201, 304, nil, nil, nil, nil, 207, 208, 209, nil, nil, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, nil, 226, 227, nil, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, - 244, 245, nil, 256, nil, 248, 247, nil, 250, 246, + 244, 245, nil, 256, nil, 248, 246, nil, 250, 247, nil, nil, nil, nil, 97, 97, 253, nil, nil, nil, nil, nil, 161, 163, nil, 187, 263, 264, 268, nil, nil, nil, 270, nil, 269, 272, nil, nil, nil, nil, @@ -792,30 +791,30 @@ def on_error(error_token_id, error_value, value_stack) nil, nil, nil, nil, 256, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 97, 288, 286, nil, nil, nil, nil, 292, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 297, 298, 256, 299, nil, 301, 302, - nil, nil, nil, nil, 303, 304, nil, nil, nil, nil, - nil, nil, 306, nil, nil, nil, 307, nil, 309, nil, - nil, nil, nil, 312, nil, nil, nil, 314, nil, nil, - nil, 315, nil, 317 ] + nil, nil, nil, 296, 297, 256, 298, nil, 300, 301, + nil, nil, nil, nil, 302, 303, nil, nil, nil, nil, + nil, nil, 305, nil, nil, nil, 306, 308, nil, nil, + nil, nil, 311, nil, nil, nil, 313, nil, nil, nil, + 314, nil, 316 ] racc_goto_check = [ 2, 31, 37, 4, 44, 42, 26, 5, 35, 5, - 46, 21, 5, 48, 5, 5, 23, 23, 5, 31, - 37, 5, 38, 5, 1, 32, 5, 39, 6, 41, - 40, 3, 5, 5, 43, 25, 45, 5, 5, 24, - 47, 8, 49, 4, nil, nil, nil, nil, nil, nil, + 48, 21, 5, 46, 5, 5, 23, 23, 5, 31, + 37, 5, 38, 5, 1, 6, 5, 39, 32, 41, + 43, 3, 5, 5, 40, 45, 25, 5, 5, 47, + 24, 49, nil, 4, nil, nil, nil, nil, nil, nil, nil, nil, 5, nil, nil, 2, nil, nil, nil, 2, nil, nil, nil, nil, nil, nil, nil, 4, nil, nil, nil, 5, nil, nil, 5, nil, nil, nil, nil, 38, 4, nil, 4, 35, nil, 44, 21, 3, 41, 5, 5, nil, nil, nil, nil, nil, nil, 23, 42, 38, nil, 2, nil, nil, nil, nil, 5, nil, nil, 5, - nil, 46, nil, 2, 48, 5, 44, nil, nil, nil, + nil, 48, nil, 2, 46, 5, 44, nil, nil, nil, nil, 5, 5, 5, nil, nil, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, nil, 5, 5, nil, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, nil, 21, nil, 5, 32, nil, 4, 6, + 5, 5, nil, 21, nil, 5, 6, nil, 4, 32, nil, nil, nil, nil, 21, 21, 26, nil, nil, nil, nil, nil, 31, 37, nil, 2, 5, 5, 2, nil, nil, nil, 2, nil, 5, 5, nil, nil, nil, nil, @@ -828,16 +827,16 @@ def on_error(error_token_id, error_value, value_stack) nil, nil, 5, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 5, 5, 21, 5, nil, 4, 4, nil, nil, nil, nil, 5, 5, nil, nil, nil, nil, - nil, nil, 4, nil, nil, nil, 4, nil, 5, nil, - nil, nil, nil, 5, nil, nil, nil, 2, nil, nil, - nil, 5, nil, 5 ] + nil, nil, 4, nil, nil, nil, 4, 5, nil, nil, + nil, nil, 5, nil, nil, nil, 2, nil, nil, nil, + 5, nil, 5 ] racc_goto_pointer = [ - nil, 24, 0, 31, 3, 3, 9, nil, -219, nil, + nil, 24, 0, 31, 3, 3, 6, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, -13, nil, -171, 38, -137, 5, nil, nil, nil, - nil, -64, 6, nil, nil, -16, nil, -63, -7, -232, - -79, -33, -112, -142, -172, -129, -56, -26, -53, -24 ] + nil, -13, nil, -171, 39, -136, 5, nil, nil, nil, + nil, -64, 9, nil, nil, -16, nil, -63, -7, -232, + -75, -33, -112, -146, -172, -130, -53, -27, -56, -25 ] racc_goto_default = [ nil, nil, 191, nil, nil, 63, 65, 67, 70, 3, @@ -978,62 +977,61 @@ def on_error(error_token_id, error_value, value_stack) 2, 137, :_reduce_128, 2, 137, :_reduce_129, 3, 142, :_reduce_130, - 4, 142, :_reduce_131, - 4, 141, :_reduce_132, - 6, 135, :_reduce_133, - 7, 135, :_reduce_134, - 6, 139, :_reduce_135, - 7, 139, :_reduce_136, - 3, 132, :_reduce_137, - 0, 143, :_reduce_138, - 1, 143, :_reduce_139, - 2, 143, :_reduce_140, + 4, 141, :_reduce_131, + 6, 135, :_reduce_132, + 7, 135, :_reduce_133, + 6, 139, :_reduce_134, + 7, 139, :_reduce_135, + 3, 132, :_reduce_136, + 0, 143, :_reduce_137, + 1, 143, :_reduce_138, + 2, 143, :_reduce_139, + 3, 143, :_reduce_140, 3, 143, :_reduce_141, - 3, 143, :_reduce_142, + 4, 143, :_reduce_142, 4, 143, :_reduce_143, - 4, 143, :_reduce_144, - 2, 143, :_reduce_145, - 1, 144, :_reduce_146, - 3, 144, :_reduce_147, - 3, 117, :_reduce_148, - 4, 117, :_reduce_149, - 5, 117, :_reduce_150, - 3, 145, :_reduce_151, - 2, 118, :_reduce_152, - 3, 134, :_reduce_153, - 3, 120, :_reduce_154, - 2, 120, :_reduce_155, - 3, 120, :_reduce_156, + 2, 143, :_reduce_144, + 1, 144, :_reduce_145, + 3, 144, :_reduce_146, + 3, 117, :_reduce_147, + 4, 117, :_reduce_148, + 5, 117, :_reduce_149, + 3, 145, :_reduce_150, + 2, 118, :_reduce_151, + 3, 134, :_reduce_152, + 3, 120, :_reduce_153, + 2, 120, :_reduce_154, + 3, 120, :_reduce_155, + 4, 121, :_reduce_156, 4, 121, :_reduce_157, - 4, 121, :_reduce_158, - 1, 146, :_reduce_159, - 3, 146, :_reduce_160, + 1, 146, :_reduce_158, + 3, 146, :_reduce_159, + 2, 147, :_reduce_160, 2, 147, :_reduce_161, - 2, 147, :_reduce_162, + 3, 147, :_reduce_162, 3, 147, :_reduce_163, - 3, 147, :_reduce_164, - 5, 122, :_reduce_165, - 7, 122, :_reduce_166, - 1, 148, :_reduce_167, - 2, 148, :_reduce_168, - 3, 149, :_reduce_169, - 4, 149, :_reduce_170, - 3, 149, :_reduce_171, - 3, 150, :_reduce_172, - 2, 151, :_reduce_173, - 1, 152, :_reduce_174, - 2, 152, :_reduce_175, - 0, 153, :_reduce_176, - 2, 153, :_reduce_177, - 1, 154, :_reduce_178, - 2, 154, :_reduce_179, - 2, 116, :_reduce_180, - 3, 116, :_reduce_181, - 3, 116, :_reduce_182 ] - -racc_reduce_n = 183 - -racc_shift_n = 320 + 5, 122, :_reduce_164, + 7, 122, :_reduce_165, + 1, 148, :_reduce_166, + 2, 148, :_reduce_167, + 3, 149, :_reduce_168, + 4, 149, :_reduce_169, + 3, 149, :_reduce_170, + 3, 150, :_reduce_171, + 2, 151, :_reduce_172, + 1, 152, :_reduce_173, + 2, 152, :_reduce_174, + 0, 153, :_reduce_175, + 2, 153, :_reduce_176, + 1, 154, :_reduce_177, + 2, 154, :_reduce_178, + 2, 116, :_reduce_179, + 3, 116, :_reduce_180, + 3, 116, :_reduce_181 ] + +racc_reduce_n = 182 + +racc_shift_n = 319 racc_token_table = { false => 0, @@ -2140,365 +2138,358 @@ def _reduce_130(val, _values, result) end .,., -module_eval(<<'.,.,', 'grammar.y', 294) - def _reduce_131(val, _values, result) - result = val[1] << val[3] - result - end -.,., - module_eval(<<'.,.,', 'grammar.y', 299) - def _reduce_132(val, _values, result) + def _reduce_131(val, _values, result) result = CallNode.new(Value.new('super'), val[2]) result end .,., module_eval(<<'.,.,', 'grammar.y', 305) - def _reduce_133(val, _values, result) + def _reduce_132(val, _values, result) result = RangeNode.new(val[1], val[4]) result end .,., module_eval(<<'.,.,', 'grammar.y', 307) - def _reduce_134(val, _values, result) + def _reduce_133(val, _values, result) result = RangeNode.new(val[1], val[5], true) result end .,., module_eval(<<'.,.,', 'grammar.y', 313) - def _reduce_135(val, _values, result) + def _reduce_134(val, _values, result) result = RangeNode.new(val[1], val[4]) result end .,., module_eval(<<'.,.,', 'grammar.y', 315) - def _reduce_136(val, _values, result) + def _reduce_135(val, _values, result) result = RangeNode.new(val[1], val[5], true) result end .,., module_eval(<<'.,.,', 'grammar.y', 320) - def _reduce_137(val, _values, result) + def _reduce_136(val, _values, result) result = ArrayNode.new(val[1]) result end .,., module_eval(<<'.,.,', 'grammar.y', 325) - def _reduce_138(val, _values, result) + def _reduce_137(val, _values, result) result = [] result end .,., module_eval(<<'.,.,', 'grammar.y', 326) - def _reduce_139(val, _values, result) + def _reduce_138(val, _values, result) result = val result end .,., module_eval(<<'.,.,', 'grammar.y', 327) - def _reduce_140(val, _values, result) + def _reduce_139(val, _values, result) result = [val[1]] result end .,., module_eval(<<'.,.,', 'grammar.y', 328) - def _reduce_141(val, _values, result) + def _reduce_140(val, _values, result) result = val[0] << val[2] result end .,., module_eval(<<'.,.,', 'grammar.y', 329) - def _reduce_142(val, _values, result) + def _reduce_141(val, _values, result) result = val[0] << val[2] result end .,., module_eval(<<'.,.,', 'grammar.y', 330) - def _reduce_143(val, _values, result) + def _reduce_142(val, _values, result) result = val[0] << val[3] result end .,., module_eval(<<'.,.,', 'grammar.y', 331) - def _reduce_144(val, _values, result) + def _reduce_143(val, _values, result) result = val[0] << val[3] result end .,., module_eval(<<'.,.,', 'grammar.y', 332) - def _reduce_145(val, _values, result) + def _reduce_144(val, _values, result) result = val[0] result end .,., module_eval(<<'.,.,', 'grammar.y', 337) - def _reduce_146(val, _values, result) + def _reduce_145(val, _values, result) result = val[0] result end .,., module_eval(<<'.,.,', 'grammar.y', 338) - def _reduce_147(val, _values, result) + def _reduce_146(val, _values, result) result = ([val[0]] << val[2]).flatten result end .,., module_eval(<<'.,.,', 'grammar.y', 343) - def _reduce_148(val, _values, result) + def _reduce_147(val, _values, result) result = TryNode.new(val[1], val[2][0], val[2][1]) result end .,., module_eval(<<'.,.,', 'grammar.y', 344) - def _reduce_149(val, _values, result) + def _reduce_148(val, _values, result) result = TryNode.new(val[1], nil, nil, val[3]) result end .,., module_eval(<<'.,.,', 'grammar.y', 346) - def _reduce_150(val, _values, result) + def _reduce_149(val, _values, result) result = TryNode.new(val[1], val[2][0], val[2][1], val[4]) result end .,., module_eval(<<'.,.,', 'grammar.y', 351) - def _reduce_151(val, _values, result) + def _reduce_150(val, _values, result) result = [val[1], val[2]] result end .,., module_eval(<<'.,.,', 'grammar.y', 356) - def _reduce_152(val, _values, result) + def _reduce_151(val, _values, result) result = ThrowNode.new(val[1]) result end .,., module_eval(<<'.,.,', 'grammar.y', 361) - def _reduce_153(val, _values, result) + def _reduce_152(val, _values, result) result = ParentheticalNode.new(val[1], val[0].line) result end .,., module_eval(<<'.,.,', 'grammar.y', 366) - def _reduce_154(val, _values, result) + def _reduce_153(val, _values, result) result = WhileNode.new(val[1], val[2]) result end .,., module_eval(<<'.,.,', 'grammar.y', 367) - def _reduce_155(val, _values, result) + def _reduce_154(val, _values, result) result = WhileNode.new(val[1], nil) result end .,., module_eval(<<'.,.,', 'grammar.y', 368) - def _reduce_156(val, _values, result) + def _reduce_155(val, _values, result) result = WhileNode.new(val[2], Expressions.wrap(val[0])) result end .,., module_eval(<<'.,.,', 'grammar.y', 375) - def _reduce_157(val, _values, result) + def _reduce_156(val, _values, result) result = ForNode.new(val[0], val[3], val[2][0], val[2][1]) result end .,., module_eval(<<'.,.,', 'grammar.y', 376) - def _reduce_158(val, _values, result) + def _reduce_157(val, _values, result) result = ForNode.new(val[3], val[2], val[1][0], val[1][1]) result end .,., module_eval(<<'.,.,', 'grammar.y', 381) - def _reduce_159(val, _values, result) + def _reduce_158(val, _values, result) result = val result end .,., module_eval(<<'.,.,', 'grammar.y', 382) - def _reduce_160(val, _values, result) + def _reduce_159(val, _values, result) result = [val[0], val[2]] result end .,., module_eval(<<'.,.,', 'grammar.y', 387) - def _reduce_161(val, _values, result) + def _reduce_160(val, _values, result) result = {:source => val[1]} result end .,., module_eval(<<'.,.,', 'grammar.y', 388) - def _reduce_162(val, _values, result) + def _reduce_161(val, _values, result) result = {:source => val[1], :object => true} result end .,., module_eval(<<'.,.,', 'grammar.y', 390) - def _reduce_163(val, _values, result) + def _reduce_162(val, _values, result) result = val[0].merge(:filter => val[2]) result end .,., module_eval(<<'.,.,', 'grammar.y', 392) - def _reduce_164(val, _values, result) + def _reduce_163(val, _values, result) result = val[0].merge(:step => val[2]) result end .,., module_eval(<<'.,.,', 'grammar.y', 398) - def _reduce_165(val, _values, result) + def _reduce_164(val, _values, result) result = val[3].rewrite_condition(val[1]) result end .,., module_eval(<<'.,.,', 'grammar.y', 400) - def _reduce_166(val, _values, result) + def _reduce_165(val, _values, result) result = val[3].rewrite_condition(val[1]).add_else(val[5]) result end .,., module_eval(<<'.,.,', 'grammar.y', 405) - def _reduce_167(val, _values, result) + def _reduce_166(val, _values, result) result = val[0] result end .,., module_eval(<<'.,.,', 'grammar.y', 406) - def _reduce_168(val, _values, result) + def _reduce_167(val, _values, result) result = val[0] << val[1] result end .,., module_eval(<<'.,.,', 'grammar.y', 411) - def _reduce_169(val, _values, result) + def _reduce_168(val, _values, result) result = IfNode.new(val[1], val[2], nil, {:statement => true}) result end .,., module_eval(<<'.,.,', 'grammar.y', 413) - def _reduce_170(val, _values, result) + def _reduce_169(val, _values, result) result = IfNode.new(val[1], val[2], nil, {:statement => true}) result end .,., module_eval(<<'.,.,', 'grammar.y', 414) - def _reduce_171(val, _values, result) + def _reduce_170(val, _values, result) result = val[2].add_comment(val[0]) result end .,., module_eval(<<'.,.,', 'grammar.y', 419) - def _reduce_172(val, _values, result) + def _reduce_171(val, _values, result) result = IfNode.new(val[1], val[2]) result end .,., module_eval(<<'.,.,', 'grammar.y', 424) - def _reduce_173(val, _values, result) + def _reduce_172(val, _values, result) result = val[1].force_statement result end .,., module_eval(<<'.,.,', 'grammar.y', 429) - def _reduce_174(val, _values, result) + def _reduce_173(val, _values, result) result = val[0] result end .,., module_eval(<<'.,.,', 'grammar.y', 430) - def _reduce_175(val, _values, result) + def _reduce_174(val, _values, result) result = val[0].add_else(val[1]) result end .,., module_eval(<<'.,.,', 'grammar.y', 435) - def _reduce_176(val, _values, result) + def _reduce_175(val, _values, result) result = nil result end .,., module_eval(<<'.,.,', 'grammar.y', 436) - def _reduce_177(val, _values, result) + def _reduce_176(val, _values, result) result = val[1] result end .,., module_eval(<<'.,.,', 'grammar.y', 441) - def _reduce_178(val, _values, result) + def _reduce_177(val, _values, result) result = val[0] result end .,., module_eval(<<'.,.,', 'grammar.y', 442) - def _reduce_179(val, _values, result) + def _reduce_178(val, _values, result) result = val[0].add_else(val[1]) result end .,., module_eval(<<'.,.,', 'grammar.y', 447) - def _reduce_180(val, _values, result) + def _reduce_179(val, _values, result) result = val[0].add_else(val[1]) result end .,., module_eval(<<'.,.,', 'grammar.y', 448) - def _reduce_181(val, _values, result) + def _reduce_180(val, _values, result) result = IfNode.new(val[2], Expressions.wrap(val[0]), nil, {:statement => true}) result end .,., module_eval(<<'.,.,', 'grammar.y', 449) - def _reduce_182(val, _values, result) + def _reduce_181(val, _values, result) result = IfNode.new(val[2], Expressions.wrap(val[0]), nil, {:statement => true, :invert => true}) result end diff --git a/lib/coffee_script/rewriter.rb b/lib/coffee_script/rewriter.rb index 399e455328..1aecae8291 100644 --- a/lib/coffee_script/rewriter.rb +++ b/lib/coffee_script/rewriter.rb @@ -20,10 +20,11 @@ class Rewriter # Tokens pairs that, in immediate succession, indicate an implicit call. IMPLICIT_FUNC = [:IDENTIFIER, :SUPER] - IMPLICIT_END = [:IF, :UNLESS, :FOR, :WHILE, "\n", :PARAM_START, :OUTDENT] + IMPLICIT_END = [:IF, :UNLESS, :FOR, :WHILE, "\n", :OUTDENT] IMPLICIT_CALL = [:IDENTIFIER, :NUMBER, :STRING, :JS, :REGEX, :NEW, :PARAM_START, :TRY, :DELETE, :INSTANCEOF, :TYPEOF, :SWITCH, :ARGUMENTS, - :TRUE, :FALSE, :YES, :NO, :ON, :OFF, '!', '!!', :NOT, '->', '=>'] + :TRUE, :FALSE, :YES, :NO, :ON, :OFF, '!', '!!', :NOT, + '->', '=>', '[', '(', '{'] # The inverse mappings of token pairs we're trying to fix up. INVERSES = BALANCED_PAIRS.inject({}) do |memo, pair| @@ -193,8 +194,7 @@ def add_implicit_parentheses last = stack.pop stack[-1] += last end - if (stack.last > 0 && (IMPLICIT_END.include?(token[0]) || post.nil?)) && - !(token[0] == :PARAM_START && prev[0] == ',') + if stack.last > 0 && (IMPLICIT_END.include?(token[0]) || post.nil?) idx = token[0] == :OUTDENT ? i + 1 : i stack.last.times { @tokens.insert(idx, [:CALL_END, Value.new(')', token[1].line)]) } size, stack[-1] = stack[-1] + 1, 0 @@ -203,7 +203,7 @@ def add_implicit_parentheses next 1 unless IMPLICIT_FUNC.include?(prev[0]) && IMPLICIT_CALL.include?(token[0]) @tokens.insert(i, [:CALL_START, Value.new('(', token[1].line)]) stack[-1] += 1 - next token[0] == :PARAM_START ? 1 : 2 + next 2 end end From 386d3dd307ff87b3710e5d1d8b1b6230143acbbb Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Tue, 26 Jan 2010 21:15:56 -0500 Subject: [PATCH 30/32] complete implicit functions, I think these are done. --- lib/coffee_script/rewriter.rb | 2 +- test/fixtures/execution/test_functions.coffee | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/coffee_script/rewriter.rb b/lib/coffee_script/rewriter.rb index 1aecae8291..d085c8f718 100644 --- a/lib/coffee_script/rewriter.rb +++ b/lib/coffee_script/rewriter.rb @@ -19,7 +19,7 @@ class Rewriter EXPRESSION_CLOSE = [:CATCH, :WHEN, :ELSE, :FINALLY] + EXPRESSION_TAIL # Tokens pairs that, in immediate succession, indicate an implicit call. - IMPLICIT_FUNC = [:IDENTIFIER, :SUPER] + IMPLICIT_FUNC = [:IDENTIFIER, :SUPER, ')', :CALL_END, ']', :INDEX_END] IMPLICIT_END = [:IF, :UNLESS, :FOR, :WHILE, "\n", :OUTDENT] IMPLICIT_CALL = [:IDENTIFIER, :NUMBER, :STRING, :JS, :REGEX, :NEW, :PARAM_START, :TRY, :DELETE, :INSTANCEOF, :TYPEOF, :SWITCH, :ARGUMENTS, diff --git a/test/fixtures/execution/test_functions.coffee b/test/fixtures/execution/test_functions.coffee index 9fe19c8b39..50552ce347 100644 --- a/test/fixtures/execution/test_functions.coffee +++ b/test/fixtures/execution/test_functions.coffee @@ -64,3 +64,15 @@ result: call -> Math.Add(5, 5) print result is 10 + + +# And even with strange things like this: + +funcs: [(x) -> x, (x) -> x * x] +result: funcs[1] 5 + +print result is 25 + +result: ("hello".slice) 3 + +print result is 'lo' \ No newline at end of file From 3524d618d88de9a412a1a59b7d068f9961d49149 Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Tue, 26 Jan 2010 22:14:18 -0500 Subject: [PATCH 31/32] adding unary plus, new version of Underscore, still passes tests. Rebuilt Narwhal --- documentation/css/idle.css | 1 + documentation/underscore.html | 603 ++--- examples/underscore.coffee | 41 +- lib/coffee_script/grammar.y | 3 +- .../narwhal/lib/coffee-script.js | 2 +- lib/coffee_script/parser.rb | 2259 +++++++++-------- 6 files changed, 1478 insertions(+), 1431 deletions(-) diff --git a/documentation/css/idle.css b/documentation/css/idle.css index eca8faf960..23667531d3 100644 --- a/documentation/css/idle.css +++ b/documentation/css/idle.css @@ -28,6 +28,7 @@ pre.idle .LibraryConstant { color: #A535AE; } pre.idle .FunctionArgument { + color: #0076ad; } pre.idle .BuiltInConstant { color: #A535AE; diff --git a/documentation/underscore.html b/documentation/underscore.html index 5ce7f0cc61..357a94c0a7 100644 --- a/documentation/underscore.html +++ b/documentation/underscore.html @@ -19,7 +19,7 @@

   1 
    2    # Underscore.coffee
-   3    # (c) 2009 Jeremy Ashkenas, DocumentCloud Inc.
+   3    # (c) 2010 Jeremy Ashkenas, DocumentCloud Inc.
    4    # Underscore is freely distributable under the terms of the MIT license.
    5    # Portions of Underscore are inspired by or borrowed from Prototype.js,
    6    # Oliver Steele's Functional, and John Resig's Micro-Templating.
@@ -40,7 +40,7 @@
   21    # If Underscore is called as a function, it returns a wrapped object that
   22    # can be used OO-style. This wrapper holds altered versions of all the
   23    # underscore functions. Wrapped objects may be chained.
-  24    wrapper: obj =>
+  24    wrapper: (obj) ->
   25      this._wrapped: obj
   26      this
   27 
@@ -50,7 +50,7 @@
   31 
   32 
   33    # Create a safe reference to the Underscore object forreference below.
-  34    _: root._: obj => new wrapper(obj)
+  34    _: root._: (obj) -> new wrapper(obj)
   35 
   36 
   37    # Export the Underscore object for CommonJS.
@@ -58,22 +58,22 @@
   39 
   40 
   41    # Create quick reference variables for speed access to core prototypes.
-  42    slice:                Array::slice
-  43    unshift:              Array::unshift
-  44    toString:             Object::toString
-  45    hasOwnProperty:       Object::hasOwnProperty
-  46    propertyIsEnumerable: Object::propertyIsEnumerable
+  42    slice:                Array::slice
+  43    unshift:              Array::unshift
+  44    toString:             Object::toString
+  45    hasOwnProperty:       Object::hasOwnProperty
+  46    propertyIsEnumerable: Object::propertyIsEnumerable
   47 
   48 
   49    # Current version.
-  50    _.VERSION: '0.5.5'
+  50    _.VERSION: '0.5.7'
   51 
   52 
   53    # ------------------------ Collection Functions: ---------------------------
   54 
   55    # The cornerstone, an each implementation.
   56    # Handles objects implementing forEach, arrays, and raw objects.
-  57    _.each: obj, iterator, context =>
+  57    _.each: (obj, iterator, context) ->
   58      index: 0
   59      try
   60        return obj.forEach(iterator, context) if obj.forEach
@@ -87,36 +87,36 @@
   68 
   69    # Return the results of applying the iterator to each element. Use JavaScript
   70    # 1.6's version of map, if possible.
-  71    _.map: obj, iterator, context =>
+  71    _.map: (obj, iterator, context) ->
   72      return obj.map(iterator, context) if (obj and _.isFunction(obj.map))
   73      results: []
-  74      _.each(obj) value, index, list =>
+  74      _.each obj, (value, index, list) ->
   75        results.push(iterator.call(context, value, index, list))
   76      results
   77 
   78 
   79    # Reduce builds up a single result from a list of values. Also known as
   80    # inject, or foldl. Uses JavaScript 1.8's version of reduce, if possible.
-  81    _.reduce: obj, memo, iterator, context =>
+  81    _.reduce: (obj, memo, iterator, context) ->
   82      return obj.reduce(_.bind(iterator, context), memo) if (obj and _.isFunction(obj.reduce))
-  83      _.each(obj) value, index, list =>
+  83      _.each obj, (value, index, list) ->
   84        memo: iterator.call(context, memo, value, index, list)
   85      memo
   86 
   87 
   88    # The right-associative version of reduce, also known as foldr. Uses
   89    # JavaScript 1.8's version of reduceRight, if available.
-  90    _.reduceRight: obj, memo, iterator, context =>
+  90    _.reduceRight: (obj, memo, iterator, context) ->
   91      return obj.reduceRight(_.bind(iterator, context), memo) if (obj and _.isFunction(obj.reduceRight))
-  92      _.each(_.clone(_.toArray(obj)).reverse()) value, index =>
+  92      _.each _.clone(_.toArray(obj)).reverse(), (value, index) ->
   93        memo: iterator.call(context, memo, value, index, obj)
   94      memo
   95 
   96 
   97    # Return the first value which passes a truth test.
-  98    _.detect: obj, iterator, context =>
+  98    _.detect: (obj, iterator, context) ->
   99      result: null
- 100      _.each(obj) value, index, list =>
+ 100      _.each obj, (value, index, list) ->
  101        if iterator.call(context, value, index, list)
  102          result: value
  103          _.breakLoop()
@@ -125,47 +125,47 @@
  106 
  107    # Return all the elements that pass a truth test. Use JavaScript 1.6's
  108    # filter(), if it exists.
- 109    _.select: obj, iterator, context =>
+ 109    _.select: (obj, iterator, context) ->
  110      if obj and _.isFunction(obj.filter) then return obj.filter(iterator, context)
  111      results: []
- 112      _.each(obj) value, index, list =>
+ 112      _.each obj, (value, index, list) ->
  113        results.push(value) if iterator.call(context, value, index, list)
  114      results
  115 
  116 
  117    # Return all the elements for which a truth test fails.
- 118    _.reject: obj, iterator, context =>
+ 118    _.reject: (obj, iterator, context) ->
  119      results: []
- 120      _.each(obj) value, index, list =>
+ 120      _.each obj, (value, index, list) ->
  121        results.push(value) if not iterator.call(context, value, index, list)
  122      results
  123 
  124 
  125    # Determine whether all of the elements match a truth test. Delegate to
  126    # JavaScript 1.6's every(), if it is present.
- 127    _.all: obj, iterator, context =>
+ 127    _.all: (obj, iterator, context) ->
  128      iterator ||= _.identity
  129      return obj.every(iterator, context) if obj and _.isFunction(obj.every)
  130      result: true
- 131      _.each(obj) value, index, list =>
+ 131      _.each obj, (value, index, list) ->
  132        _.breakLoop() unless (result: result and iterator.call(context, value, index, list))
  133      result
  134 
  135 
  136    # Determine if at least one element in the object matches a truth test. Use
  137    # JavaScript 1.6's some(), if it exists.
- 138    _.any: obj, iterator, context =>
+ 138    _.any: (obj, iterator, context) ->
  139      iterator ||= _.identity
  140      return obj.some(iterator, context) if obj and _.isFunction(obj.some)
  141      result: false
- 142      _.each(obj) value, index, list =>
+ 142      _.each obj, (value, index, list) ->
  143        _.breakLoop() if (result: iterator.call(context, value, index, list))
  144      result
  145 
  146 
  147    # Determine if a given value is included in the array or object,
  148    # based on '==='.
- 149    _.include: obj, target =>
+ 149    _.include: (obj, target) ->
  150      return _.indexOf(obj, target) isnt -1 if _.isArray(obj)
  151      for key, val of obj
  152        return true if val is target
@@ -173,49 +173,49 @@
  154 
  155 
  156    # Invoke a method with arguments on every item in a collection.
- 157    _.invoke: obj, method =>
+ 157    _.invoke: (obj, method) ->
  158      args: _.rest(arguments, 2)
  159      (if method then val[method] else val).apply(val, args) for val in obj
  160 
  161 
  162    # Convenience version of a common use case of map: fetching a property.
- 163    _.pluck: obj, key =>
- 164      _.map(obj, (val => val[key]))
+ 163    _.pluck: (obj, key) ->
+ 164      _.map(obj, ((val) -> val[key]))
  165 
  166 
  167    # Return the maximum item or (item-based computation).
- 168    _.max: obj, iterator, context =>
+ 168    _.max: (obj, iterator, context) ->
  169      return Math.max.apply(Math, obj) if not iterator and _.isArray(obj)
  170      result: {computed: -Infinity}
- 171      _.each(obj) value, index, list =>
+ 171      _.each obj, (value, index, list) ->
  172        computed: if iterator then iterator.call(context, value, index, list) else value
  173        computed >= result.computed and (result: {value: value, computed: computed})
  174      result.value
  175 
  176 
  177    # Return the minimum element (or element-based computation).
- 178    _.min: obj, iterator, context =>
+ 178    _.min: (obj, iterator, context) ->
  179      return Math.min.apply(Math, obj) if not iterator and _.isArray(obj)
  180      result: {computed: Infinity}
- 181      _.each(obj) value, index, list =>
+ 181      _.each obj, (value, index, list) ->
  182        computed: if iterator then iterator.call(context, value, index, list) else value
  183        computed < result.computed and (result: {value: value, computed: computed})
  184      result.value
  185 
  186 
  187    # Sort the object's values by a criteria produced by an iterator.
- 188    _.sortBy: obj, iterator, context =>
- 189      _.pluck(((_.map(obj) value, index, list =>
+ 188    _.sortBy: (obj, iterator, context) ->
+ 189      _.pluck(((_.map obj, (value, index, list) ->
  190        {value: value, criteria: iterator.call(context, value, index, list)}
- 191      ).sort() left, right =>
+ 191      ).sort((left, right) ->
  192        a: left.criteria; b: right.criteria
  193        if a < b then -1 else if a > b then 1 else 0
- 194      ), 'value')
+ 194      )), 'value')
  195 
  196 
  197    # Use a comparator function to figure out at what index an object should
  198    # be inserted so as to maintain order. Uses binary search.
- 199    _.sortedIndex: array, obj, iterator =>
+ 199    _.sortedIndex: (array, obj, iterator) ->
  200      iterator ||= _.identity
  201      low: 0; high: array.length
  202      while low < high
@@ -225,7 +225,7 @@
  206 
  207 
  208    # Convert anything iterable into a real, live array.
- 209    _.toArray: iterable =>
+ 209    _.toArray: (iterable) ->
  210      return []                   if (!iterable)
  211      return iterable.toArray()   if (iterable.toArray)
  212      return iterable             if (_.isArray(iterable))
@@ -234,7 +234,7 @@
  215 
  216 
  217    # Return the number of elements in an object.
- 218    _.size: obj => _.toArray(obj).length
+ 218    _.size: (obj) -> _.toArray(obj).length
  219 
  220 
  221    # -------------------------- Array Functions: ------------------------------
@@ -242,7 +242,7 @@
  223    # Get the first element of an array. Passing "n" will return the first N
  224    # values in the array. Aliased as "head". The "guard" check allows it to work
  225    # with _.map.
- 226    _.first: array, n, guard =>
+ 226    _.first: (array, n, guard) ->
  227      if n and not guard then slice.call(array, 0, n) else array[0]
  228 
  229 
@@ -250,35 +250,35 @@
  231    # Especially useful on the arguments object. Passing an "index" will return
  232    # the rest of the values in the array from that index onward. The "guard"
  233    # check allows it to work with _.map.
- 234    _.rest: array, index, guard =>
+ 234    _.rest: (array, index, guard) ->
  235      slice.call(array, if _.isUndefined(index) or guard then 1 else index)
  236 
  237 
  238    # Get the last element of an array.
- 239    _.last: array => array[array.length - 1]
+ 239    _.last: (array) -> array[array.length - 1]
  240 
  241 
  242    # Trim out all falsy values from an array.
- 243    _.compact: array => array[i] for i in [0...array.length] when array[i]
+ 243    _.compact: (array) -> array[i] for i in [0...array.length] when array[i]
  244 
  245 
  246    # Return a completely flattened version of an array.
- 247    _.flatten: array =>
- 248      _.reduce(array, []) memo, value =>
+ 247    _.flatten: (array) ->
+ 248      _.reduce array, [], (memo, value) ->
  249        return memo.concat(_.flatten(value)) if _.isArray(value)
  250        memo.push(value)
  251        memo
  252 
  253 
  254    # Return a version of the array that does not contain the specified value(s).
- 255    _.without: array =>
+ 255    _.without: (array) ->
  256      values: _.rest(arguments)
  257      val for val in _.toArray(array) when not _.include(values, val)
  258 
  259 
  260    # Produce a duplicate-free version of the array. If the array has already
  261    # been sorted, you have the option of using a faster algorithm.
- 262    _.uniq: array, isSorted =>
+ 262    _.uniq: (array, isSorted) ->
  263      memo: []
  264      for el, i in _.toArray(array)
  265        memo.push(el) if i is 0 || (if isSorted is true then _.last(memo) isnt el else not _.include(memo, el))
@@ -287,330 +287,339 @@
  268 
  269    # Produce an array that contains every item shared between all the
  270    # passed-in arrays.
- 271    _.intersect: array =>
+ 271    _.intersect: (array) ->
  272      rest: _.rest(arguments)
- 273      _.select(_.uniq(array)) item =>
- 274        _.all(rest) other =>
+ 273      _.select _.uniq(array), (item) ->
+ 274        _.all rest, (other) ->
  275          _.indexOf(other, item) >= 0
  276 
  277 
  278    # Zip together multiple lists into a single array -- elements that share
  279    # an index go together.
- 280    _.zip: =>
- 281      args:       _.toArray(arguments)
- 282      length:     _.max(_.pluck(args, 'length'))
- 283      results:    new Array(length)
- 284      for i in [0...length]
- 285        results[i]: _.pluck(args, String(i))
- 286      results
+ 280    _.zip: ->
+ 281      length:     _.max(_.pluck(arguments, 'length'))
+ 282      results:    new Array(length)
+ 283      for i in [0...length]
+ 284        results[i]: _.pluck(arguments, String(i))
+ 285      results
+ 286 
  287 
- 288 
- 289    # If the browser doesn't supply us with indexOf (I'm looking at you, MSIE),
- 290    # we need this function. Return the position of the first occurence of an
- 291    # item in an array, or -1 if the item is not included in the array.
- 292    _.indexOf: array, item =>
- 293      return array.indexOf(item) if array.indexOf
- 294      i: 0; l: array.length
- 295      while l - i
- 296        if array[i] is item then return i else i++
- 297      -1
+ 288    # If the browser doesn't supply us with indexOf (I'm looking at you, MSIE),
+ 289    # we need this function. Return the position of the first occurence of an
+ 290    # item in an array, or -1 if the item is not included in the array.
+ 291    _.indexOf: (array, item) ->
+ 292      return array.indexOf(item) if array.indexOf
+ 293      i: 0; l: array.length
+ 294      while l - i
+ 295        if array[i] is item then return i else i++
+ 296      -1
+ 297 
  298 
- 299 
- 300    # Provide JavaScript 1.6's lastIndexOf, delegating to the native function,
- 301    # if possible.
- 302    _.lastIndexOf: array, item =>
- 303      return array.lastIndexOf(item) if array.lastIndexOf
- 304      i: array.length
- 305      while i
- 306        if array[i] is item then return i else i--
- 307      -1
+ 299    # Provide JavaScript 1.6's lastIndexOf, delegating to the native function,
+ 300    # if possible.
+ 301    _.lastIndexOf: (array, item) ->
+ 302      return array.lastIndexOf(item) if array.lastIndexOf
+ 303      i: array.length
+ 304      while i
+ 305        if array[i] is item then return i else i--
+ 306      -1
+ 307 
  308 
- 309 
- 310    # Generate an integer Array containing an arithmetic progression. A port of
- 311    # the native Python range() function. See:
- 312    # http://docs.python.org/library/functions.html#range
- 313    _.range: start, stop, step =>
- 314      a:        _.toArray(arguments)
- 315      solo:     a.length <= 1
- 316      i: start: if solo then 0 else a[0];
- 317      stop:     if solo then a[0] else a[1];
- 318      step:     a[2] or 1
- 319      len:      Math.ceil((stop - start) / step)
- 320      return [] if len <= 0
- 321      range:    new Array(len)
- 322      idx:      0
- 323      while true
- 324        return range if (if step > 0 then i - stop else stop - i) >= 0
- 325        range[idx]: i
- 326        idx++
- 327        i+= step
+ 309    # Generate an integer Array containing an arithmetic progression. A port of
+ 310    # the native Python range() function. See:
+ 311    # http://docs.python.org/library/functions.html#range
+ 312    _.range: (start, stop, step) ->
+ 313      a:        arguments
+ 314      solo:     a.length <= 1
+ 315      i: start: if solo then 0 else a[0];
+ 316      stop:     if solo then a[0] else a[1];
+ 317      step:     a[2] or 1
+ 318      len:      Math.ceil((stop - start) / step)
+ 319      return [] if len <= 0
+ 320      range:    new Array(len)
+ 321      idx:      0
+ 322      while true
+ 323        return range if (if step > 0 then i - stop else stop - i) >= 0
+ 324        range[idx]: i
+ 325        idx++
+ 326        i+= step
+ 327 
  328 
- 329 
- 330    # ----------------------- Function Functions: -----------------------------
- 331 
- 332    # Create a function bound to a given object (assigning 'this', and arguments,
- 333    # optionally). Binding with arguments is also known as 'curry'.
- 334    _.bind: func, obj =>
- 335      args: _.rest(arguments, 2)
- 336      => func.apply(obj or root, args.concat(_.toArray(arguments)))
+ 329    # ----------------------- Function Functions: -----------------------------
+ 330 
+ 331    # Create a function bound to a given object (assigning 'this', and arguments,
+ 332    # optionally). Binding with arguments is also known as 'curry'.
+ 333    _.bind: (func, obj) ->
+ 334      args: _.rest(arguments, 2)
+ 335      -> func.apply(obj or root, args.concat(arguments))
+ 336 
  337 
- 338 
- 339    # Bind all of an object's methods to that object. Useful for ensuring that
- 340    # all callbacks defined on an object belong to it.
- 341    _.bindAll: obj =>
- 342      funcs: if arguments.length > 1 then _.rest(arguments) else _.functions(obj)
- 343      _.each(funcs, (f => obj[f]: _.bind(obj[f], obj)))
- 344      obj
+ 338    # Bind all of an object's methods to that object. Useful for ensuring that
+ 339    # all callbacks defined on an object belong to it.
+ 340    _.bindAll: (obj) ->
+ 341      funcs: if arguments.length > 1 then _.rest(arguments) else _.functions(obj)
+ 342      _.each(funcs, (f) -> obj[f]: _.bind(obj[f], obj))
+ 343      obj
+ 344 
  345 
- 346 
- 347    # Delays a function for the given number of milliseconds, and then calls
- 348    # it with the arguments supplied.
- 349    _.delay: func, wait =>
- 350      args: _.rest(arguments, 2)
- 351      setTimeout((=> func.apply(func, args)), wait)
+ 346    # Delays a function for the given number of milliseconds, and then calls
+ 347    # it with the arguments supplied.
+ 348    _.delay: (func, wait) ->
+ 349      args: _.rest(arguments, 2)
+ 350      setTimeout((-> func.apply(func, args)), wait)
+ 351 
  352 
- 353 
- 354    # Defers a function, scheduling it to run after the current call stack has
- 355    # cleared.
- 356    _.defer: func =>
- 357      _.delay.apply(_, [func, 1].concat(_.rest(arguments)))
+ 353    # Defers a function, scheduling it to run after the current call stack has
+ 354    # cleared.
+ 355    _.defer: (func) ->
+ 356      _.delay.apply(_, [func, 1].concat(_.rest(arguments)))
+ 357 
  358 
- 359 
- 360    # Returns the first function passed as an argument to the second,
- 361    # allowing you to adjust arguments, run code before and after, and
- 362    # conditionally execute the original function.
- 363    _.wrap: func, wrapper =>
- 364      => wrapper.apply(wrapper, [func].concat(_.toArray(arguments)))
+ 359    # Returns the first function passed as an argument to the second,
+ 360    # allowing you to adjust arguments, run code before and after, and
+ 361    # conditionally execute the original function.
+ 362    _.wrap: (func, wrapper) ->
+ 363      -> wrapper.apply(wrapper, [func].concat(arguments))
+ 364 
  365 
- 366 
- 367    # Returns a function that is the composition of a list of functions, each
- 368    # consuming the return value of the function that follows.
- 369    _.compose: =>
- 370      funcs: _.toArray(arguments)
- 371      =>
- 372        args: _.toArray(arguments)
- 373        for i in [(funcs.length - 1)..0]
- 374          args: [funcs[i].apply(this, args)]
- 375        args[0]
+ 366    # Returns a function that is the composition of a list of functions, each
+ 367    # consuming the return value of the function that follows.
+ 368    _.compose: ->
+ 369      funcs: arguments
+ 370      ->
+ 371        args: arguments
+ 372        for i in [(funcs.length - 1)..0]
+ 373          args: [funcs[i].apply(this, args)]
+ 374        args[0]
+ 375 
  376 
- 377 
- 378    # ------------------------- Object Functions: ----------------------------
- 379 
- 380    # Retrieve the names of an object's properties.
- 381    _.keys: obj =>
- 382      return _.range(0, obj.length) if _.isArray(obj)
- 383      key for key, val of obj
+ 377    # ------------------------- Object Functions: ----------------------------
+ 378 
+ 379    # Retrieve the names of an object's properties.
+ 380    _.keys: (obj) ->
+ 381      return _.range(0, obj.length) if _.isArray(obj)
+ 382      key for key, val of obj
+ 383 
  384 
- 385 
- 386    # Retrieve the values of an object's properties.
- 387    _.values: obj =>
- 388      _.map(obj, _.identity)
+ 385    # Retrieve the values of an object's properties.
+ 386    _.values: (obj) ->
+ 387      _.map(obj, _.identity)
+ 388 
  389 
- 390 
- 391    # Return a sorted list of the function names available in Underscore.
- 392    _.functions: obj =>
- 393      _.select(_.keys(obj), key => _.isFunction(obj[key])).sort()
+ 390    # Return a sorted list of the function names available in Underscore.
+ 391    _.functions: (obj) ->
+ 392      _.select(_.keys(obj), (key) -> _.isFunction(obj[key])).sort()
+ 393 
  394 
- 395 
- 396    # Extend a given object with all of the properties in a source object.
- 397    _.extend: destination, source =>
- 398      for key, val of source
- 399        destination[key]: val
- 400      destination
+ 395    # Extend a given object with all of the properties in a source object.
+ 396    _.extend: (destination, source) ->
+ 397      for key, val of source
+ 398        destination[key]: val
+ 399      destination
+ 400 
  401 
- 402 
- 403    # Create a (shallow-cloned) duplicate of an object.
- 404    _.clone: obj =>
- 405      return obj.slice(0) if _.isArray(obj)
- 406      _.extend({}, obj)
+ 402    # Create a (shallow-cloned) duplicate of an object.
+ 403    _.clone: (obj) ->
+ 404      return obj.slice(0) if _.isArray(obj)
+ 405      _.extend({}, obj)
+ 406 
  407 
- 408 
- 409    # Invokes interceptor with the obj, and then returns obj.
- 410    # The primary purpose of this method is to "tap into" a method chain, in order to perform operations on intermediate results within the chain.
- 411    _.tap: obj, interceptor =>
- 412      interceptor(obj)
- 413      obj
+ 408    # Invokes interceptor with the obj, and then returns obj.
+ 409    # The primary purpose of this method is to "tap into" a method chain, in order to perform operations on intermediate results within the chain.
+ 410    _.tap: (obj, interceptor) ->
+ 411      interceptor(obj)
+ 412      obj
+ 413 
  414 
- 415 
- 416    # Perform a deep comparison to check if two objects are equal.
- 417    _.isEqual: a, b =>
- 418      # Check object identity.
- 419      return true if a is b
- 420      # Different types?
- 421      atype: typeof(a); btype: typeof(b)
- 422      return false if atype isnt btype
- 423      # Basic equality test (watch out for coercions).
- 424      return true if `a == b`
- 425      # One is falsy and the other truthy.
- 426      return false if (!a and b) or (a and !b)
- 427      # One of them implements an isEqual()?
- 428      return a.isEqual(b) if a.isEqual
- 429      # Check dates' integer values.
- 430      return a.getTime() is b.getTime() if _.isDate(a) and _.isDate(b)
- 431      # Both are NaN?
- 432      return true if _.isNaN(a) and _.isNaN(b)
- 433      # Compare regular expressions.
- 434      if _.isRegExp(a) and _.isRegExp(b)
- 435        return a.source     is b.source and
- 436               a.global     is b.global and
- 437               a.ignoreCase is b.ignoreCase and
- 438               a.multiline  is b.multiline
- 439      # If a is not an object by this point, we can't handle it.
- 440      return false if atype isnt 'object'
- 441      # Check for different array lengths before comparing contents.
- 442      return false if a.length and (a.length isnt b.length)
- 443      # Nothing else worked, deep compare the contents.
- 444      aKeys: _.keys(a); bKeys: _.keys(b)
- 445      # Different object sizes?
- 446      return false if aKeys.length isnt bKeys.length
- 447      # Recursive comparison of contents.
- 448      # for (var key in a) if (!_.isEqual(a[key], b[key])) return false;
- 449      return true
+ 415    # Perform a deep comparison to check if two objects are equal.
+ 416    _.isEqual: (a, b) ->
+ 417      # Check object identity.
+ 418      return true if a is b
+ 419      # Different types?
+ 420      atype: typeof(a); btype: typeof(b)
+ 421      return false if atype isnt btype
+ 422      # Basic equality test (watch out for coercions).
+ 423      return true if `a == b`
+ 424      # One is falsy and the other truthy.
+ 425      return false if (!a and b) or (a and !b)
+ 426      # One of them implements an isEqual()?
+ 427      return a.isEqual(b) if a.isEqual
+ 428      # Check dates' integer values.
+ 429      return a.getTime() is b.getTime() if _.isDate(a) and _.isDate(b)
+ 430      # Both are NaN?
+ 431      return true if _.isNaN(a) and _.isNaN(b)
+ 432      # Compare regular expressions.
+ 433      if _.isRegExp(a) and _.isRegExp(b)
+ 434        return a.source     is b.source and
+ 435               a.global     is b.global and
+ 436               a.ignoreCase is b.ignoreCase and
+ 437               a.multiline  is b.multiline
+ 438      # If a is not an object by this point, we can't handle it.
+ 439      return false if atype isnt 'object'
+ 440      # Check for different array lengths before comparing contents.
+ 441      return false if a.length and (a.length isnt b.length)
+ 442      # Nothing else worked, deep compare the contents.
+ 443      aKeys: _.keys(a); bKeys: _.keys(b)
+ 444      # Different object sizes?
+ 445      return false if aKeys.length isnt bKeys.length
+ 446      # Recursive comparison of contents.
+ 447      # for (var key in a) if (!_.isEqual(a[key], b[key])) return false;
+ 448      return true
+ 449 
  450 
- 451 
- 452    # Is a given array or object empty?
- 453    _.isEmpty:      obj => _.keys(obj).length is 0
+ 451    # Is a given array or object empty?
+ 452    _.isEmpty:      (obj) -> _.keys(obj).length is 0
+ 453 
  454 
- 455 
- 456    # Is a given value a DOM element?
- 457    _.isElement:    obj => obj and obj.nodeType is 1
+ 455    # Is a given value a DOM element?
+ 456    _.isElement:    (obj) -> obj and obj.nodeType is 1
+ 457 
  458 
- 459 
- 460    # Is a given value an array?
- 461    _.isArray:      obj => !!(obj and obj.concat and obj.unshift)
+ 459    # Is a given value an array?
+ 460    _.isArray:      (obj) -> !!(obj and obj.concat and obj.unshift)
+ 461 
  462 
- 463 
- 464    # Is a given variable an arguments object?
- 465    _.isArguments:  obj => obj and _.isNumber(obj.length) and !_.isArray(obj) and !propertyIsEnumerable.call(obj, 'length')
+ 463    # Is a given variable an arguments object?
+ 464    _.isArguments:  (obj) -> obj and _.isNumber(obj.length) and not obj.concat and
+ 465                             not obj.substr and not obj.apply and not propertyIsEnumerable.call(obj, 'length')
  466 
  467 
  468    # Is the given value a function?
- 469    _.isFunction:   obj => !!(obj and obj.constructor and obj.call and obj.apply)
+ 469    _.isFunction:   (obj) -> !!(obj and obj.constructor and obj.call and obj.apply)
  470 
  471 
  472    # Is the given value a string?
- 473    _.isString:     obj => !!(obj is '' or (obj and obj.charCodeAt and obj.substr))
+ 473    _.isString:     (obj) -> !!(obj is '' or (obj and obj.charCodeAt and obj.substr))
  474 
  475 
  476    # Is a given value a number?
- 477    _.isNumber:     obj => toString.call(obj) is '[object Number]'
+ 477    _.isNumber:     (obj) -> (obj is +obj) or toString.call(obj) is '[object Number]'
  478 
  479 
  480    # Is a given value a Date?
- 481    _.isDate:       obj => !!(obj and obj.getTimezoneOffset and obj.setUTCFullYear)
+ 481    _.isDate:       (obj) -> !!(obj and obj.getTimezoneOffset and obj.setUTCFullYear)
  482 
  483 
  484    # Is the given value a regular expression?
- 485    _.isRegExp:     obj => !!(obj and obj.exec and (obj.ignoreCase or obj.ignoreCase is false))
+ 485    _.isRegExp:     (obj) -> !!(obj and obj.exec and (obj.ignoreCase or obj.ignoreCase is false))
  486 
  487 
  488    # Is the given value NaN -- this one is interesting. NaN != NaN, and
  489    # isNaN(undefined) == true, so we make sure it's a number first.
- 490    _.isNaN:        obj => _.isNumber(obj) and window.isNaN(obj)
+ 490    _.isNaN:        (obj) -> _.isNumber(obj) and window.isNaN(obj)
  491 
  492 
  493    # Is a given value equal to null?
- 494    _.isNull:       obj => obj is null
+ 494    _.isNull:       (obj) -> obj is null
  495 
  496 
  497    # Is a given variable undefined?
- 498    _.isUndefined:  obj => typeof obj is 'undefined'
+ 498    _.isUndefined:  (obj) -> typeof obj is 'undefined'
  499 
  500 
  501    # -------------------------- Utility Functions: --------------------------
  502 
  503    # Run Underscore.js in noConflict mode, returning the '_' variable to its
  504    # previous owner. Returns a reference to the Underscore object.
- 505    _.noConflict: =>
+ 505    _.noConflict: ->
  506      root._: previousUnderscore
  507      this
  508 
  509 
  510    # Keep the identity function around for default iterators.
- 511    _.identity: value => value
+ 511    _.identity: (value) -> value
  512 
  513 
  514    # Break out of the middle of an iteration.
- 515    _.breakLoop: => throw breaker
+ 515    _.breakLoop: -> throw breaker
  516 
  517 
  518    # Generate a unique integer id (unique within the entire client session).
  519    # Useful for temporary DOM ids.
  520    idCounter: 0
- 521    _.uniqueId: prefix =>
+ 521    _.uniqueId: (prefix) ->
  522      (prefix or '') + idCounter++
  523 
  524 
- 525    # JavaScript templating a-la ERB, pilfered from John Resig's
- 526    # "Secrets of the JavaScript Ninja", page 83.
- 527    _.template: str, data =>
- 528      `var fn = new Function('obj',
- 529        'var p=[],print=function(){p.push.apply(p,arguments);};' +
- 530        'with(obj){p.push(\'' +
- 531        str.
- 532          replace(/[\r\t\n]/g, " ").
- 533          split("<%").join("\t").
- 534          replace(/((^|%>)[^\t]*)'/g, "$1\r").
- 535          replace(/\t=(.*?)%>/g, "',$1,'").
- 536          split("\t").join("');").
- 537          split("%>").join("p.push('").
- 538          split("\r").join("\\'") +
- 539        "');}return p.join('');")`
- 540      if data then fn(data) else fn
- 541 
- 542 
- 543    # ------------------------------- Aliases ----------------------------------
- 544 
- 545    _.forEach: _.each
- 546    _.foldl:   _.inject:      _.reduce
- 547    _.foldr:   _.reduceRight
- 548    _.filter:  _.select
- 549    _.every:   _.all
- 550    _.some:    _.any
- 551    _.head:    _.first
- 552    _.tail:    _.rest
- 553    _.methods: _.functions
+ 525    # By default, Underscore uses ERB-style template delimiters, change the
+ 526    # following template settings to use alternative delimiters.
+ 527    _.templateSettings: {
+ 528      start:        '<%'
+ 529      end:          '%>'
+ 530      interpolate:  /<%=(.+?)%>/g
+ 531    }
+ 532 
+ 533 
+ 534    # JavaScript templating a-la ERB, pilfered from John Resig's
+ 535    # "Secrets of the JavaScript Ninja", page 83.
+ 536    # Single-quotea fix from Rick Strahl's version.
+ 537    _.template: (str, data) ->
+ 538      c: _.templateSettings
+ 539      fn: new Function 'obj',
+ 540        'var p=[],print=function(){p.push.apply(p,arguments);};' +
+ 541        'with(obj){p.push(\'' +
+ 542        str.replace(/[\r\t\n]/g, " ")
+ 543           .replace(new RegExp("'(?=[^"+c.end[0]+"]*"+c.end+")","g"),"\t")
+ 544           .split("'").join("\\'")
+ 545           .split("\t").join("'")
+ 546           .replace(c.interpolate, "',$1,'")
+ 547           .split(c.start).join("');")
+ 548           .split(c.end).join("p.push('") +
+ 549           "');}return p.join('');"
+ 550      if data then fn(data) else fn
+ 551 
+ 552 
+ 553    # ------------------------------- Aliases ----------------------------------
  554 
- 555 
- 556    #   /*------------------------ Setup the OOP Wrapper: --------------------------*/
- 557 
- 558    # Helper function to continue chaining intermediate results.
- 559    result: obj, chain =>
- 560      if chain then _(obj).chain() else obj
- 561 
- 562 
- 563    # Add all of the Underscore functions to the wrapper object.
- 564    _.each(_.functions(_)) name =>
- 565      method: _[name]
- 566      wrapper.prototype[name]: =>
- 567        args: _.toArray(arguments)
- 568        unshift.call(args, this._wrapped)
- 569        result(method.apply(_, args), this._chain)
- 570 
+ 555    _.forEach: _.each
+ 556    _.foldl:   _.inject:      _.reduce
+ 557    _.foldr:   _.reduceRight
+ 558    _.filter:  _.select
+ 559    _.every:   _.all
+ 560    _.some:    _.any
+ 561    _.head:    _.first
+ 562    _.tail:    _.rest
+ 563    _.methods: _.functions
+ 564 
+ 565 
+ 566    #   /*------------------------ Setup the OOP Wrapper: --------------------------*/
+ 567 
+ 568    # Helper function to continue chaining intermediate results.
+ 569    result: (obj, chain) ->
+ 570      if chain then _(obj).chain() else obj
  571 
- 572    # Add all mutator Array functions to the wrapper.
- 573    _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift']) name =>
- 574      method: Array.prototype[name]
- 575      wrapper.prototype[name]: =>
- 576        method.apply(this._wrapped, arguments)
- 577        result(this._wrapped, this._chain)
- 578 
+ 572 
+ 573    # Add all of the Underscore functions to the wrapper object.
+ 574    _.each _.functions(_), (name) ->
+ 575      method: _[name]
+ 576      wrapper.prototype[name]: ->
+ 577        unshift.call(arguments, this._wrapped)
+ 578        result(method.apply(_, arguments), this._chain)
  579 
- 580    # Add all accessor Array functions to the wrapper.
- 581    _.each(['concat', 'join', 'slice']) name =>
- 582      method: Array.prototype[name]
- 583      wrapper.prototype[name]: =>
- 584        result(method.apply(this._wrapped, arguments), this._chain)
- 585 
- 586 
- 587    # Start chaining a wrapped Underscore object.
- 588    wrapper::chain: =>
- 589      this._chain: true
- 590      this
- 591 
- 592 
- 593    # Extracts the result from a wrapped and chained object.
- 594    wrapper::value: => this._wrapped
+ 580 
+ 581    # Add all mutator Array functions to the wrapper.
+ 582    _.each ['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], (name) ->
+ 583      method: Array.prototype[name]
+ 584      wrapper.prototype[name]: ->
+ 585        method.apply(this._wrapped, arguments)
+ 586        result(this._wrapped, this._chain)
+ 587 
+ 588 
+ 589    # Add all accessor Array functions to the wrapper.
+ 590    _.each ['concat', 'join', 'slice'], (name) ->
+ 591      method: Array.prototype[name]
+ 592      wrapper.prototype[name]: ->
+ 593        result(method.apply(this._wrapped, arguments), this._chain)
+ 594 
+ 595 
+ 596    # Start chaining a wrapped Underscore object.
+ 597    wrapper::chain: ->
+ 598      this._chain: true
+ 599      this
+ 600 
+ 601 
+ 602    # Extracts the result from a wrapped and chained object.
+ 603    wrapper::value: -> this._wrapped
 

obj and _.isNumber(obj.length) and !_.isArray(obj) and !propertyIsEnumerable.call(obj, 'length') + _.isArguments: (obj) -> obj and _.isNumber(obj.length) and not obj.concat and + not obj.substr and not obj.apply and not propertyIsEnumerable.call(obj, 'length') # Is the given value a function? @@ -473,7 +474,7 @@ # Is a given value a number? - _.isNumber: (obj) -> toString.call(obj) is '[object Number]' + _.isNumber: (obj) -> (obj is +obj) or toString.call(obj) is '[object Number]' # Is a given value a Date? @@ -521,21 +522,31 @@ (prefix or '') + idCounter++ + # By default, Underscore uses ERB-style template delimiters, change the + # following template settings to use alternative delimiters. + _.templateSettings: { + start: '<%' + end: '%>' + interpolate: /<%=(.+?)%>/g + } + + # JavaScript templating a-la ERB, pilfered from John Resig's # "Secrets of the JavaScript Ninja", page 83. + # Single-quotea fix from Rick Strahl's version. _.template: (str, data) -> - `var fn = new Function('obj', + c: _.templateSettings + fn: new Function 'obj', 'var p=[],print=function(){p.push.apply(p,arguments);};' + 'with(obj){p.push(\'' + - str. - replace(/[\r\t\n]/g, " "). - split("<%").join("\t"). - replace(/((^|%>)[^\t]*)'/g, "$1\r"). - replace(/\t=(.*?)%>/g, "',$1,'"). - split("\t").join("');"). - split("%>").join("p.push('"). - split("\r").join("\\'") + - "');}return p.join('');")` + str.replace(/[\r\t\n]/g, " ") + .replace(new RegExp("'(?=[^"+c.end[0]+"]*"+c.end+")","g"),"\t") + .split("'").join("\\'") + .split("\t").join("'") + .replace(c.interpolate, "',$1,'") + .split(c.start).join("');") + .split(c.end).join("p.push('") + + "');}return p.join('');" if data then fn(data) else fn @@ -564,7 +575,7 @@ method: _[name] wrapper.prototype[name]: -> unshift.call(arguments, this._wrapped) - result(method.apply(_, args), this._chain) + result(method.apply(_, arguments), this._chain) # Add all mutator Array functions to the wrapper. diff --git a/lib/coffee_script/grammar.y b/lib/coffee_script/grammar.y index 098509a7ae..174a498dcc 100644 --- a/lib/coffee_script/grammar.y +++ b/lib/coffee_script/grammar.y @@ -22,7 +22,7 @@ token INDENT OUTDENT # Declare order of operations. prechigh left '?' - nonassoc UMINUS NOT '!' '!!' '~' '++' '--' + nonassoc UMINUS UPLUS NOT '!' '!!' '~' '++' '--' left '*' '/' '%' left '+' '-' left '<<' '>>' '>>>' @@ -141,6 +141,7 @@ rule '!' Expression { result = OpNode.new(val[0], val[1]) } | '!!' Expression { result = OpNode.new(val[0], val[1]) } | '-' Expression = UMINUS { result = OpNode.new(val[0], val[1]) } + | '+' Expression = UPLUS { result = OpNode.new(val[0], val[1]) } | NOT Expression { result = OpNode.new(val[0], val[1]) } | '~' Expression { result = OpNode.new(val[0], val[1]) } | '--' Expression { result = OpNode.new(val[0], val[1]) } diff --git a/lib/coffee_script/narwhal/lib/coffee-script.js b/lib/coffee_script/narwhal/lib/coffee-script.js index 0ea0822738..b2283d0fa6 100644 --- a/lib/coffee_script/narwhal/lib/coffee-script.js +++ b/lib/coffee_script/narwhal/lib/coffee-script.js @@ -42,7 +42,7 @@ } catch (e) { return print(e); } - })()); + }).call(this)); } return __b; }; diff --git a/lib/coffee_script/parser.rb b/lib/coffee_script/parser.rb index 65aa8f59ca..9b342e4b56 100644 --- a/lib/coffee_script/parser.rb +++ b/lib/coffee_script/parser.rb @@ -34,312 +34,318 @@ def on_error(error_token_id, error_value, value_stack) ##### State transition tables begin ### clist = [ -'125,11,133,26,28,31,37,39,43,48,53,58,60,88,90,92,200,1,172,259,19,23', -'86,184,87,56,40,46,276,49,54,61,121,126,275,281,282,141,12,273,20,155', -'30,32,160,41,173,46,51,56,56,152,56,68,71,4,9,137,140,144,147,150,154', -'158,120,124,129,132,136,139,143,146,149,153,157,119,123,128,131,135', -'138,142,145,148,151,156,118,122,127,130,134,162,69,2,56,171,274,24,56', -'29,11,34,196,26,28,31,37,39,43,48,53,58,60,183,259,190,294,1,152,98', -'19,23,46,190,137,140,40,96,202,49,54,61,62,69,2,7,13,6,12,278,20,307', -'30,32,265,41,165,46,51,7,13,7,13,68,71,4,9,15,18,7,13,192,46,35,285', -'189,255,7,13,192,56,260,7,13,11,204,205,26,28,31,37,39,43,48,53,58,60', -'289,7,13,188,1,69,2,19,23,180,24,190,29,40,34,74,49,54,61,62,98,56,7', -'13,6,12,116,20,96,30,32,98,41,287,46,51,281,282,259,96,68,71,4,9,15', -'18,46,152,56,291,35,98,98,-182,-182,7,13,192,110,96,96,11,165,46,26', -'28,31,37,39,43,48,53,58,60,46,203,99,312,1,69,2,19,23,182,24,56,29,40', -'34,106,49,54,61,62,46,46,99,181,6,12,116,20,74,30,32,152,41,211,46,51', -',137,140,,68,71,4,9,15,18,152,7,13,188,35,186,137,140,144,147,150,154', -'158,204,205,11,198,199,26,28,31,37,39,43,48,53,58,60,88,90,92,,1,69', -'2,19,23,86,24,87,29,40,34,152,49,54,61,62,,-182,-182,,6,12,,20,,30,32', -'152,41,,46,51,,-182,-182,,68,71,4,9,15,18,152,7,13,,35,,137,140,144', -'147,150,154,158,,,11,,,26,28,31,37,39,43,48,53,58,60,88,90,92,,1,69', -'2,19,23,86,24,87,29,40,34,152,49,54,61,62,,137,140,,6,12,,20,,30,32', -'152,41,,46,51,,-182,-182,,68,71,4,9,15,18,152,,,,35,,137,140,144,147', -'150,154,158,,,11,,,26,28,31,37,39,43,48,53,58,60,88,90,92,,1,69,2,19', -'23,86,24,87,29,40,34,152,49,54,61,62,,-182,-182,,6,12,,20,,30,32,,41', -',46,51,,88,90,92,68,71,4,9,15,18,86,,87,152,35,88,90,92,,137,140,144', -'147,150,86,11,87,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24', -',29,40,34,152,49,54,61,62,,-182,-182,,6,12,,20,,30,32,152,41,,46,51', -',-182,-182,,68,71,4,9,15,18,152,,,,35,,137,140,144,147,150,,,,,11,,', -'26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54', -'61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,', -',,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40', -'34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,', -',,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23', -',24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71', -'4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1', -'69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51', -',,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58', -'60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,', -'41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43', -'48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20', -',30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31', -'37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,', -',6,12,,20,,30,32,,41,,46,51,103,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,', -'11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49', -'54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,', -',,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29', -'40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18', -',,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23', -',24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71', -'4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1', -'69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51', -',,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58', -'60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,', -'41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43', -'48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20', -',30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31', -'37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,', -',6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11', -',,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54', -'61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,', -',,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40', -'34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,114,,,68,71,4,9,15,18', -',,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23', -',24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71', -'4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1', -'69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51', -',,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58', -'60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,', -'41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43', -'48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20', -',30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31', -'37,39,43,48,53,58,60,309,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62', -',,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,', -'11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49', -'54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,', -',,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29', -'40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18', -',,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23', -',24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71', -'4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1', -'69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51', -',,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58', -'60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,', -'41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43', -'48,53,58,60,299,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12', -',20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28', -'31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62', -',,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,', -'11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49', -'54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,', -',,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29', -'40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18', -',,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23', -',24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71', -'4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1', -'69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51', -',,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58', -'60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,', -'41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43', -'48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20', -',30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31', -'37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,', -',6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11', -',,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54', -'61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,', -',,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40', -'34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,103,,,,68,71,4,9,15,18', -',,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23', -',24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71', -'4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1', -'69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51', -',,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58', -'60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,', -'41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43', -'48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20', -',30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31', -'37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,', -',6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11', -',,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54', -'61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,', -',,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40', -'34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,', -',,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23', -',24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71', -'4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1', -'69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51', -'271,,,,68,71,4,9,15,18,152,,,,35,,137,140,144,147,150,154,158,120,124', -'129,132,136,139,143,146,149,153,157,119,123,128,,,,,,,69,2,7,13,,24', -',29,11,34,,26,28,31,37,39,43,48,53,58,60,,,,,1,,,19,23,,,,,40,,,49,54', -'61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,', -',,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40', -'34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,', -',,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23', -',24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71', -'4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1', -'69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51', -',,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58', -'60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,', -'41,,46,51,103,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39', -'43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12', -',20,,30,32,,41,,46,51,56,,,,68,71,4,9,15,18,152,,,,35,,137,140,144,147', -'150,154,158,120,124,129,132,136,139,143,146,149,153,157,119,123,128', -',,,,,,69,2,7,13,,24,,29,11,34,,26,28,31,37,39,43,48,53,58,60,,,,,1,', -',19,23,,,,,40,,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71', -'4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1', -'69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51', -',,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58', -'60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,', -'41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43', -'48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20', -',30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31', -'37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,', -',6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11', -',,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54', -'61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,', -',,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40', -'34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,', -',,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23', -',24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71', -'4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1', -'69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51', -',,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43,48,53,58', -'60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20,,30,32,', -'41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31,37,39,43', -'48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,6,12,,20', -',30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11,,,26,28,31', -'37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,', -',6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,,,,,,,,11', -',,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54', -'61,62,,,,,6,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,,,,,35,,,,', -',,,,,,11,,,26,28,31,37,39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40', -'34,,49,54,61,62,,,,,6,12,,20,,30,32,,41,,46,51,125,,133,,68,71,4,9,15', -'18,152,,,,35,,137,140,144,147,150,154,158,120,124,129,132,136,139,,', -',121,126,,,,141,,,,155,,69,2,,,,24,,29,152,34,,,,,137,140,144,147,150', -'154,158,120,124,129,132,136,139,143,146,149,153,157,119,123,128,131', -'135,138,142,145,148,151,156,118,122,127,130,134,125,,133,,,,,,,310,', -'26,28,31,37,39,43,48,53,58,60,,,,,,,,,,,,121,126,,,,141,54,61,,155,', -',,,,,,,,152,,41,,,51,137,140,144,147,150,154,158,120,124,129,132,136', -'139,143,146,149,153,157,119,123,128,131,135,138,142,145,148,151,156', -'118,122,127,130,134,,,,,,,,,,317,,,,,24,,29,,34,26,28,31,37,39,43,48', -'53,58,60,,,26,28,31,37,39,43,48,53,58,60,,,,,1,54,61,19,23,,,,,40,,', -'49,54,61,,41,,,51,,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15,18,152', -',,,35,,137,140,144,147,150,154,158,120,124,129,132,136,139,,,,,,,,24', -',29,,34,,,69,2,,,,24,,29,,34,26,28,31,37,39,43,48,53,58,60,,,,,1,,,19', -'23,,,,,40,,,49,54,61,,,,,,,12,,20,,30,32,,41,,46,51,,,,,68,71,4,9,15', -'18,152,,,,35,,137,140,144,147,150,154,158,120,124,129,,,26,28,31,37', -'39,43,48,53,58,60,,,,,1,69,2,19,23,,24,,29,40,34,,49,54,61,62,,,,,,12', -',20,,30,32,,41,,46,51,125,,133,,68,71,4,9,15,18,152,,,,35,,137,140,144', -'147,150,154,158,120,124,129,132,136,139,,,,121,126,,,,141,,,,155,,69', -'2,,,,24,,29,152,34,,,,,137,140,144,147,150,154,158,120,124,129,132,136', -'139,143,146,149,153,157,119,123,128,131,135,138,142,145,148,151,156', -'118,122,127,130,134,125,152,133,,,,,137,140,144,147,150,154,158,120', -'124,129,132,136,139,143,146,149,153,157,119,123,128,,,,,121,126,,,,141', -',,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129,132', -'136,139,143,146,149,153,157,119,123,128,131,135,138,142,145,148,151', -'156,118,122,127,130,134,125,152,133,,,,,137,140,144,147,150,154,158', -'120,124,129,132,136,139,143,146,149,153,157,119,123,128,,,,,121,126', -',,,141,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124', -'129,132,136,139,143,146,149,153,157,119,123,128,131,135,138,142,145', -'148,151,156,118,122,127,130,134,125,152,133,,,,,137,140,144,147,150', -'154,158,120,124,129,132,136,139,143,146,149,153,157,119,123,128,,,,', -'121,126,,,,141,,,,155,,,,,,,,176,,152,,,,,,137,140,144,147,150,154,158', -'120,124,129,132,136,139,143,146,149,153,157,119,123,128,131,135,138', -'142,145,148,151,156,118,122,127,130,134,125,152,133,,,,,137,140,144', -'147,150,154,158,120,124,129,132,136,139,143,146,149,153,157,119,123', -'128,,,,,121,126,,,,141,,,,155,,,,,,,,56,,152,,,,,,137,140,144,147,150', -'154,158,120,124,129,132,136,139,143,146,149,153,157,119,123,128,131', -'135,138,142,145,148,151,156,118,122,127,130,134,125,152,133,,,,,137', -'140,144,147,150,154,158,120,124,129,132,136,139,143,146,149,153,157', -'119,123,128,,,,,121,126,,,,141,,,,155,,,,,,,,56,,152,,,,,,137,140,144', -'147,150,154,158,120,124,129,132,136,139,143,146,149,153,157,119,123', -'128,131,135,138,142,145,148,151,156,118,122,127,130,134,125,152,133', -',,,,137,140,144,147,150,154,158,120,124,129,132,136,139,143,146,149', -'153,157,119,123,128,,,,,121,126,,,,141,,,,155,,,,,,,,,,152,,,,,,137', -'140,144,147,150,154,158,120,124,129,132,136,139,143,146,149,153,157', -'119,123,128,131,135,138,142,145,148,151,156,118,122,127,130,134,125', -'152,133,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139,,,,', -',,,,,,,,121,126,,,,141,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150', -'154,158,120,124,129,132,136,139,143,146,149,153,157,119,123,128,131', -'135,138,142,145,148,151,156,118,122,127,130,134,125,152,133,,,,,137', -'140,144,147,150,154,158,120,124,129,,,,,,,,,,,,,,,,121,126,,,,141,,', -',155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136', -'139,143,146,149,153,157,119,123,128,131,135,138,142,145,148,151,156', -'118,122,127,130,134,125,152,133,,,,,137,140,144,147,150,154,158,120', -'124,129,,,,,,,,,,,,,,,,121,126,,,,141,,,,155,,,,,,,,,,152,,,,,,137,140', -'144,147,150,154,158,120,124,129,132,136,139,143,146,149,153,157,119', -'123,128,131,135,138,142,145,148,151,156,118,122,127,130,134,125,,133', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,121,126,,,,141,,,,155,,,,,,,,,,152,,,,', -',137,140,144,147,150,154,158,120,124,129,132,136,139,143,146,149,153', -'157,119,123,128,131,135,138,142,145,148,151,156,118,122,127,130,134', -'125,,133,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,121,126,,,,141,,,,155,,,,,,,,', -',152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139,143,146', -'149,153,157,119,123,128,131,135,138,142,145,148,151,156,118,122,127', -'130,134,125,,133,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,121,126,,,,141,,,,155', -',,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139', -'143,146,149,153,157,119,123,128,131,135,138,142,145,148,151,156,118', -'122,127,130,134,125,,133,,,,,,,,,,,,,,,,,,,,,,,315,,,,,,,121,126,,,', -'141,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129', -'132,136,139,143,146,149,153,157,119,123,128,131,135,138,142,145,148', -'151,156,118,122,127,130,134,125,,133,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,121', -'126,,,,141,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120', -'124,129,132,136,139,143,146,149,153,157,119,123,128,131,135,138,142', -'145,148,151,156,118,122,127,130,134,125,,133,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,121,126,,,,141,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154', -'158,120,124,129,132,136,139,143,146,149,153,157,119,123,128,131,135', -'138,142,145,148,151,156,118,122,127,130,134,125,,133,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,121,126,,,,141,,,,155,,,,,,,,,,152,,,,,,137,140,144,147', -'150,154,158,120,124,129,132,136,139,143,146,149,153,157,119,123,128', -'131,135,138,142,145,148,151,156,118,194,127,130,134,125,,133,,,,,,,', -',,,,,,,,,,,,,,,262,,,,,,,121,126,,,,141,,,,155,,,,,,,,,,152,,,,,,137', -'140,144,147,150,154,158,120,124,129,132,136,139,143,146,149,153,157', -'119,123,128,131,135,138,142,145,148,151,156,118,261,127,130,134,125', -',133,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,121,126,,,,141,,,,155,,,,,,,,,,152', -',,,,,137,140,144,147,150,154,158,120,124,129,132,136,139,143,146,149', -'153,157,119,123,128,131,135,138,142,145,148,151,156,118,122,127,130', -'134,125,,133,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,121,126,,,,141,,,,155,,,,', -',,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139,143', -'146,149,153,157,119,123,128,131,135,138,142,145,148,151,156,118,122', -'127,130,134,125,,133,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,121,126,,,,141,,,', -'155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136', -'139,143,146,149,153,157,119,123,128,131,135,138,142,145,148,151,156', -'118,122,127,130,134,125,,133,,,,,,,,,,,,,,,,,,,,,,,318,,,,,,,121,126', -',,,141,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124', -'129,132,136,139,143,146,149,153,157,119,123,128,131,135,138,142,145', -'148,151,156,118,122,127,130,134,121,126,,,,,,,,155,,,,,,,,,,152,,,,', -',137,140,144,147,150,154,158,120,124,129,132,136,139,143,146,149,153', -'157,119,123,128,131,135,138,142,145,148,151,156,118,122,127,130,134', -'121,126,,,,,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120', -'124,129,132,136,139,143,146,149,153,157,119,123,128,131,135,138,142', -'145,148,151,156,118,122,127,130,134,121,126,,,,,,,,155,,,,,,,,,,152', -',,,,,137,140,144,147,150,154,158,120,124,129,132,136,139,143,146,149', -'153,157,119,123,128,131,135,138,142,145,148,151,156,118,122,121,126', -',,,,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129', -'132,136,139,143,146,149,153,157,119,123,128,131,135,138,142,145,148', -'151,156,118,122,121,126,,,,,,,,155,,,,,,,,,,152,,,,,,137,140,144,147', -'150,154,158,120,124,129,132,136,139,143,146,149,153,157,119,123,128', -'131,135,138,142,145,148,151,156,118,122,121,126,,,,,,,,155,,,,,,,,,', -'152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139,143,146', -'149,153,157,119,123,128,131,135,138,142,145,148,151,156,118,122,126', -',,,,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129', -'132,136,139,143,146,149,153,157,119,123,128,131,135,138,142,145,148', -'151,156,118,122,126,,,,,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150', -'154,158,120,124,129,132,136,139,143,146,149,153,157,119,123,128,131', -'135,138,142,145,148,151,156,118,122,126,,,,,,,,155,,,,,,,,,,152,,,,', -',137,140,144,147,150,154,158,120,124,129,132,136,139,143,146,149,153', -'157,119,123,128,131,135,138,142,145,148,151,156,118,122,126,,,,,,,,155', -',,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139', -'143,146,149,153,157,119,123,128,131,135,138,142,145,148,151,156,118', -'122,126,,,,,,,,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154,158,120', -'124,129,132,136,139,143,146,149,153,157,119,123,128,131,135,138,142', -'145,148,151,156,118,122,155,,,,,,,,,,152,,,,,,137,140,144,147,150,154', -'158,120,124,129,132,136,139,143,146,149,153,157,119,123,128,131,135', -'138,142,145,148,151,156,118,155,,,,,,,,,,152,,,,,,137,140,144,147,150', -'154,158,120,124,129,132,136,139,143,146,149,153,157,119,123,128,131', -'135,138,142,145,148,151,156,118,155,,,,,,,,,,152,,,,,,137,140,144,147', -'150,154,158,120,124,129,132,136,139,143,146,149,153,157,119,123,128', -'131,135,138,142,145,148,151,156,118,152,,,,,,137,140,144,147,150,154', -'158,120,124,129,132,136,139,143,146,149,153,157,119,123,128,131,135', -'138,142,145,148,151,156,118,152,,,,,,137,140,144,147,150,154,158,120', -'124,129,132,136,139,143,146,149,153,157,119,123,128,131,135,138,142', -'145,148,151,156,118,152,,,,,,137,140,144,147,150,154,158,120,124,129', -'132,136,139,143,146,149,153,157,119,123,128,131,135,138,142,145,148', -'151,156,118,152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136', -'139,143,146,149,153,157,119,123,128,131,135,138,142,145,148,151,156', -'118,152,,,,,,137,140,144,147,150,154,158,120,124,129,132,136,139,143', -'146,149,153,157,119,123,128,131,135,138,142,145,148,151,156,118' ] - racc_action_table = arr = Array.new(8898, nil) +'128,59,136,28,31,33,38,42,47,51,56,61,64,92,93,95,175,92,93,95,284,285', +'90,276,91,296,90,59,91,59,57,65,124,130,59,155,288,144,287,261,169,158', +'143,147,164,44,155,49,54,309,193,155,173,143,147,150,153,157,143,147', +'150,153,157,161,123,127,132,135,139,142,146,149,152,156,160,122,126', +'131,134,138,141,145,148,151,154,159,121,125,129,133,137,140,166,11,174', +'13,17,191,29,262,34,11,40,198,28,31,33,38,42,47,51,56,61,64,206,207', +'203,155,1,59,100,21,25,193,-183,-183,193,43,98,291,52,57,65,66,13,17', +'206,207,6,12,59,22,59,32,35,267,44,280,49,54,13,17,188,59,189,73,4,9', +'15,19,24,13,17,49,37,46,118,261,13,17,191,13,17,191,192,49,11,278,293', +'28,31,33,38,42,47,51,56,61,64,277,13,17,188,1,2,7,21,25,275,29,59,34', +'43,40,75,52,57,65,66,100,255,13,17,6,12,114,22,98,32,35,155,44,169,49', +'54,200,201,143,147,261,73,4,9,15,19,24,100,49,155,37,46,100,100,182', +'98,-183,-183,13,17,98,98,11,49,59,28,31,33,38,42,47,51,56,61,64,92,93', +'95,108,1,2,7,21,25,90,29,91,34,43,40,49,52,57,65,66,49,49,101,101,6', +'12,183,22,184,32,35,155,44,314,49,54,13,17,-183,-183,185,73,4,9,15,19', +'24,155,284,285,37,46,13,17,143,147,150,153,157,161,123,186,11,2,7,28', +'31,33,38,42,47,51,56,61,64,92,93,95,202,1,2,7,21,25,90,29,91,34,43,40', +'155,52,57,65,66,205,75,-183,-183,6,12,118,22,217,32,35,155,44,,49,54', +',,-183,-183,,73,4,9,15,19,24,155,,,37,46,,,143,147,150,153,157,161,123', +',11,,,28,31,33,38,42,47,51,56,61,64,92,93,95,,1,2,7,21,25,90,29,91,34', +'43,40,155,52,57,65,66,,,143,147,6,12,,22,,32,35,155,44,,49,54,,,-183', +'-183,,73,4,9,15,19,24,155,,,37,46,,,143,147,150,153,157,161,123,,11', +',,28,31,33,38,42,47,51,56,61,64,92,93,95,,1,2,7,21,25,90,29,91,34,43', +'40,155,52,57,65,66,,,-183,-183,6,12,,22,,32,35,155,44,,49,54,,,-183', +'-183,,73,4,9,15,19,24,155,,,37,46,,,143,147,150,153,157,,,,11,,,28,31', +'33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66,', +',,,6,12,,22,,32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,', +',,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40,', +'52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,,37', +'46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,,29', +',34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54,,,,,,73,4,9,15', +'19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1,2', +'7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54,,', +',,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56,61', +'64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35,,44', +',49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38,42,47', +'51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12,,22', +',32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31', +'33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66,', +',,,6,12,,22,,32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,', +',,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40,', +'52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,,37', +'46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,,29', +',34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54,,,,,,73,4,9,15', +'19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1,2', +'7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54,106', +',,,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56', +'61,64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35', +',44,,49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38', +'42,47,51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12', +',22,,32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28', +'31,33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66', +',,,,6,12,,22,,32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,', +',,,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40', +',52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,', +'37,46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,', +'29,,34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54,,,,,,73,4,9', +'15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1', +'2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54', +',,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56', +'61,64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35', +',44,,49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38', +'42,47,51,56,61,64,310,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,', +'6,12,,22,,32,35,,44,,49,54,,116,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,', +',,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40,', +'52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,,37', +'46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,,29', +',34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54,,,,,,73,4,9,15', +'19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1,2', +'7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54,,', +',,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56,61', +'64,300,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35', +',44,,49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38', +'42,47,51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12', +',22,,32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28', +'31,33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66', +',,,,6,12,,22,,32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,', +',,,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40', +',52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,', +'37,46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,', +'29,,34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54,,,,,,73,4,9', +'15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1', +'2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54', +',,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56', +'61,64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35', +',44,,49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38', +'42,47,51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12', +',22,,32,35,,44,,49,54,272,,,,,73,4,9,15,19,24,155,,,37,46,,,143,147', +'150,153,157,161,123,127,132,135,139,142,146,149,152,156,160,122,126', +'131,134,,,,,,2,7,13,17,,29,,34,11,40,,28,31,33,38,42,47,51,56,61,64', +',,,,1,,,21,25,,,,,43,,,52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54,,', +',,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56,61', +'64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35,,44', +',49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38,42,47', +'51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12,,22', +',32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31', +'33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66,', +',,,6,12,,22,,32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,', +',,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40,', +'52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,,37', +'46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,,29', +',34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54,,,,,,73,4,9,15', +'19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1,2', +'7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54,,', +',,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56,61', +'64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35,,44', +',49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38,42,47', +'51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12,,22', +',32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31', +'33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66,', +',,,6,12,,22,,32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,', +',,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40,', +'52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,,37', +'46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,,29', +',34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54,106,,,,,73,4,9', +'15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1', +'2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54', +',,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56', +'61,64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35', +',44,,49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38', +'42,47,51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12', +',22,,32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28', +'31,33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66', +',,,,6,12,,22,,32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,', +',,,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40', +',52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,', +'37,46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,', +'29,,34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54,,,,,,73,4,9', +'15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1', +'2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54', +',,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56', +'61,64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35', +',44,,49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38', +'42,47,51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12', +',22,,32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28', +'31,33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66', +',,,,6,12,,22,,32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,', +',,,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40', +',52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,', +'37,46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,', +'29,,34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54,,,,,,73,4,9', +'15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1', +'2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54', +'106,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38,42,47,51', +'56,61,64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12,,22,,32', +'35,,44,,49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33', +'38,42,47,51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,', +'6,12,,22,,32,35,,44,,49,54,59,,,,,73,4,9,15,19,24,155,,,37,46,,,143', +'147,150,153,157,161,123,127,132,135,139,142,146,149,152,156,160,122', +'126,131,134,,,,,,2,7,13,17,,29,,34,11,40,,28,31,33,38,42,47,51,56,61', +'64,,,,,1,,,21,25,,,,,43,,,52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54', +',,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56', +'61,64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35', +',44,,49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38', +'42,47,51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12', +',22,,32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28', +'31,33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66', +',,,,6,12,,22,,32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,', +',,,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40', +',52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,', +'37,46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,', +'29,,34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54,,,,,,73,4,9', +'15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1', +'2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54', +',,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56', +'61,64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35', +',44,,49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28,31,33,38', +'42,47,51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,,6,12', +',22,,32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,,,,,11,,,28', +'31,33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66', +',,,,6,12,,22,,32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,,,', +',,,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,,29,,34,43,40', +',52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,', +'37,46,,,,,,,,,,,11,,,28,31,33,38,42,47,51,56,61,64,,,,,1,2,7,21,25,', +'29,,34,43,40,,52,57,65,66,,,,,6,12,,22,,32,35,,44,,49,54,,128,,136,', +'73,4,9,15,19,24,155,,,37,46,,,143,147,150,153,157,161,123,127,132,135', +'139,142,146,,,124,130,,,,144,,,,158,,2,7,,,,29,,34,155,40,,,,,,143,147', +'150,153,157,161,123,127,132,135,139,142,146,149,152,156,160,122,126', +'131,134,138,141,145,148,151,154,159,121,125,129,133,137,140,128,,136', +'155,,,,,,319,143,147,150,153,157,161,123,127,132,135,139,142,146,149', +'152,156,160,122,126,131,134,,124,130,,,,144,,,,158,,,,,,,,,,155,,,,', +',,143,147,150,153,157,161,123,127,132,135,139,142,146,149,152,156,160', +'122,126,131,134,138,141,145,148,151,154,159,121,125,129,133,137,140', +',,,,,,,,,313,28,31,33,38,42,47,51,56,61,64,,,,,1,,,21,25,,,,,43,,,52', +'57,65,,,,,,,12,,22,,32,35,,44,,49,54,,,,,,73,4,9,15,19,24,,,,37,46,', +',,,28,31,33,38,42,47,51,56,61,64,,,,,1,,,21,25,,,,,43,2,7,52,57,65,29', +',34,,40,,12,,22,,32,35,,44,,49,54,,,,,,73,4,9,15,19,24,155,,,37,46,', +',143,147,150,153,157,161,123,127,132,135,,28,31,33,38,42,47,51,56,61', +'64,,,,,1,2,7,21,25,,29,,34,43,40,,52,57,65,66,,,,,,12,,22,,32,35,,44', +',49,54,,,,,,73,4,9,15,19,24,,,,37,46,,,,,28,31,33,38,42,47,51,56,61', +'64,,,,,1,,,21,25,,,,,43,2,7,52,57,65,29,,34,,40,,12,,22,,32,35,,44,', +'49,54,,,,,,73,4,9,15,,28,31,33,38,42,47,51,56,61,64,155,,,,,,,143,147', +'150,153,157,161,123,127,132,135,57,65,,,,,,2,7,,,,29,,34,44,40,155,54', +',128,,136,,143,147,150,153,157,161,123,127,132,135,139,142,146,149,152', +'156,160,122,126,131,134,,,,,,,,124,130,,,,144,,,,158,,,,,,,29,,34,155', +'40,,,,,,143,147,150,153,157,161,123,127,132,135,139,142,146,149,152', +'156,160,122,126,131,134,138,141,145,148,151,154,159,121,125,129,133', +'137,140,128,155,136,,,,,,143,147,150,153,157,161,123,127,132,135,139', +'142,146,149,152,156,160,122,126,131,134,,,,124,130,,,,144,,,,158,,,', +',,,,,,155,,,,,,,143,147,150,153,157,161,123,127,132,135,139,142,146', +'149,152,156,160,122,126,131,134,138,141,145,148,151,154,159,121,125', +'129,133,137,140,128,155,136,,,,,,143,147,150,153,157,161,123,127,132', +'135,139,142,146,,,,,318,,,,,,,124,130,,,,144,,,,158,,,,,,,,,,155,,,', +',,,143,147,150,153,157,161,123,127,132,135,139,142,146,149,152,156,160', +'122,126,131,134,138,141,145,148,151,154,159,121,125,129,133,137,140', +'128,155,136,,,,,,143,147,150,153,157,161,123,127,132,135,139,142,146', +'149,152,156,160,122,126,131,134,,,,124,130,,,,144,,,,158,,,,,,,,,,155', +',,,,,,143,147,150,153,157,161,123,127,132,135,139,142,146,149,152,156', +'160,122,126,131,134,138,141,145,148,151,154,159,121,125,129,133,137', +'140,128,155,136,,,,,,143,147,150,153,157,161,123,127,132,135,139,142', +'146,149,152,156,160,122,126,131,134,,,,124,130,,,,144,,,,158,,,,,,,', +'178,,155,,,,,,,143,147,150,153,157,161,123,127,132,135,139,142,146,149', +'152,156,160,122,126,131,134,138,141,145,148,151,154,159,121,125,129', +'133,137,140,128,155,136,,,,,,143,147,150,153,157,161,123,127,132,135', +'139,142,146,149,152,156,160,122,126,131,134,,,,124,130,,,,144,,,,158', +',,,,,,,,,155,,,,,,,143,147,150,153,157,161,123,127,132,135,139,142,146', +'149,152,156,160,122,126,131,134,138,141,145,148,151,154,159,121,125', +'129,133,137,140,128,155,136,,,,,,143,147,150,153,157,161,123,127,132', +'135,139,142,146,,,,,,,,,,,,124,130,,,,144,,,,158,,,,,,,,,,155,,,,,,', +'143,147,150,153,157,161,123,127,132,135,139,142,146,149,152,156,160', +'122,126,131,134,138,141,145,148,151,154,159,121,125,129,133,137,140', +'128,155,136,,,,,,143,147,150,153,157,161,123,127,132,135,139,142,146', +',,,,,,,,,,,124,130,,,,144,,,,158,,,,,,,,,,155,,,,,,,143,147,150,153', +'157,161,123,127,132,135,139,142,146,149,152,156,160,122,126,131,134', +'138,141,145,148,151,154,159,121,125,129,133,137,140,128,155,136,,,,', +',143,147,150,153,157,161,123,127,132,135,,,,,,,,,,,,,,,124,130,,,,144', +',,,158,,,,,,,,,,155,,,,,,,143,147,150,153,157,161,123,127,132,135,139', +'142,146,149,152,156,160,122,126,131,134,138,141,145,148,151,154,159', +'121,125,129,133,137,140,128,,136,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,124,130', +',,,144,,,,158,,,,,,,,,,155,,,,,,,143,147,150,153,157,161,123,127,132', +'135,139,142,146,149,152,156,160,122,126,131,134,138,141,145,148,151', +'154,159,121,125,196,133,137,140,128,,136,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,124,130,,,,144,,,,158,,,,,,,,,,155,,,,,,,143,147,150,153,157,161,123', +'127,132,135,139,142,146,149,152,156,160,122,126,131,134,138,141,145', +'148,151,154,159,121,125,129,133,137,140,128,,136,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,124,130,,,,144,,,,158,,,,,,,,,,155,,,,,,,143,147,150,153,157', +'161,123,127,132,135,139,142,146,149,152,156,160,122,126,131,134,138', +'141,145,148,151,154,159,121,125,129,133,137,140,128,,136,,,,,,,,,,,', +',,,,,,,,,,,320,,,,,,,124,130,,,,144,,,,158,,,,,,,,,,155,,,,,,,143,147', +'150,153,157,161,123,127,132,135,139,142,146,149,152,156,160,122,126', +'131,134,138,141,145,148,151,154,159,121,125,129,133,137,140,128,,136', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,,124,130,,,,144,,,,158,,,,,,,,59,,155,,', +',,,,143,147,150,153,157,161,123,127,132,135,139,142,146,149,152,156', +'160,122,126,131,134,138,141,145,148,151,154,159,121,125,129,133,137', +'140,128,,136,,,,,,,,,,,,,,,,,,,,,,,264,,,,,,,124,130,,,,144,,,,158,', +',,,,,,,,155,,,,,,,143,147,150,153,157,161,123,127,132,135,139,142,146', +'149,152,156,160,122,126,131,134,138,141,145,148,151,154,159,121,125', +'263,133,137,140,128,,136,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,124,130,,,,144', +',,,158,,,,,,,,,,155,,,,,,,143,147,150,153,157,161,123,127,132,135,139', +'142,146,149,152,156,160,122,126,131,134,138,141,145,148,151,154,159', +'121,125,129,133,137,140,128,,136,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,124,130', +',,,144,,,,158,,,,,,,,,,155,,,,,,,143,147,150,153,157,161,123,127,132', +'135,139,142,146,149,152,156,160,122,126,131,134,138,141,145,148,151', +'154,159,121,125,129,133,137,140,128,,136,,,,,,,,,,,,,,,,,,,,,,,,,,,', +',,124,130,,,,144,,,,158,,,,,,,,,,155,,,,,,,143,147,150,153,157,161,123', +'127,132,135,139,142,146,149,152,156,160,122,126,131,134,138,141,145', +'148,151,154,159,121,125,129,133,137,140,128,,136,,,,,,,,,,,,,,,,,,,', +',,,,,,,,,,124,130,,,,144,,,,158,,,,,,,,,,155,,,,,,,143,147,150,153,157', +'161,123,127,132,135,139,142,146,149,152,156,160,122,126,131,134,138', +'141,145,148,151,154,159,121,125,129,133,137,140,128,,136,,,,,,,,,,,', +',,,,,,,,,,,,,,,,,,124,130,,,,144,,,,158,,,,,,,,,,155,,,,,,,143,147,150', +'153,157,161,123,127,132,135,139,142,146,149,152,156,160,122,126,131', +'134,138,141,145,148,151,154,159,121,125,129,133,137,140,128,,136,,,', +',,,,,,,,,,,,,,,,,,,,,,,,,,124,130,,,,144,,,,158,,,,,,,,59,,155,,,,,', +',143,147,150,153,157,161,123,127,132,135,139,142,146,149,152,156,160', +'122,126,131,134,138,141,145,148,151,154,159,121,125,129,133,137,140', +'128,,136,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,124,130,,,,144,,,,158,,,,,,,,', +',155,,,,,,,143,147,150,153,157,161,123,127,132,135,139,142,146,149,152', +'156,160,122,126,131,134,138,141,145,148,151,154,159,121,125,129,133', +'137,140,124,130,,,,,,,,158,,,,,,,,,,155,,,,,,,143,147,150,153,157,161', +'123,127,132,135,139,142,146,149,152,156,160,122,126,131,134,138,141', +'145,148,151,154,159,121,125,129,133,137,140,124,130,,,,,,,,158,,,,,', +',,,,155,,,,,,,143,147,150,153,157,161,123,127,132,135,139,142,146,149', +'152,156,160,122,126,131,134,138,141,145,148,151,154,159,121,125,129', +'133,137,140,124,130,,,,,,,,158,,,,,,,,,,155,,,,,,,143,147,150,153,157', +'161,123,127,132,135,139,142,146,149,152,156,160,122,126,131,134,138', +'141,145,148,151,154,159,121,125,129,124,130,,,,,,,,158,,,,,,,,,,155', +',,,,,,143,147,150,153,157,161,123,127,132,135,139,142,146,149,152,156', +'160,122,126,131,134,138,141,145,148,151,154,159,121,125,129,124,130', +',,,,,,,158,,,,,,,,,,155,,,,,,,143,147,150,153,157,161,123,127,132,135', +'139,142,146,149,152,156,160,122,126,131,134,138,141,145,148,151,154', +'159,121,125,129,124,130,,,,,,,,158,,,,,,,,,,155,,,,,,,143,147,150,153', +'157,161,123,127,132,135,139,142,146,149,152,156,160,122,126,131,134', +'138,141,145,148,151,154,159,121,125,129,130,,,,,,,,158,,,,,,,,,,155', +',,,,,,143,147,150,153,157,161,123,127,132,135,139,142,146,149,152,156', +'160,122,126,131,134,138,141,145,148,151,154,159,121,125,129,130,,,,', +',,,158,,,,,,,,,,155,,,,,,,143,147,150,153,157,161,123,127,132,135,139', +'142,146,149,152,156,160,122,126,131,134,138,141,145,148,151,154,159', +'121,125,129,130,,,,,,,,158,,,,,,,,,,155,,,,,,,143,147,150,153,157,161', +'123,127,132,135,139,142,146,149,152,156,160,122,126,131,134,138,141', +'145,148,151,154,159,121,125,129,130,,,,,,,,158,,,,,,,,,,155,,,,,,,143', +'147,150,153,157,161,123,127,132,135,139,142,146,149,152,156,160,122', +'126,131,134,138,141,145,148,151,154,159,121,125,129,130,,,,,,,,158,', +',,,,,,,,155,,,,,,,143,147,150,153,157,161,123,127,132,135,139,142,146', +'149,152,156,160,122,126,131,134,138,141,145,148,151,154,159,121,125', +'129,158,,,,,,,,,,155,,,,,,,143,147,150,153,157,161,123,127,132,135,139', +'142,146,149,152,156,160,122,126,131,134,138,141,145,148,151,154,159', +'121,125,158,,,,,,,,,,155,,,,,,,143,147,150,153,157,161,123,127,132,135', +'139,142,146,149,152,156,160,122,126,131,134,138,141,145,148,151,154', +'159,121,125,158,,,,,,,,,,155,,,,,,,143,147,150,153,157,161,123,127,132', +'135,139,142,146,149,152,156,160,122,126,131,134,138,141,145,148,151', +'154,159,121,125,155,,,,,,,143,147,150,153,157,161,123,127,132,135,139', +'142,146,149,152,156,160,122,126,131,134,138,141,145,148,151,154,159', +'121,125,155,,,,,,,143,147,150,153,157,161,123,127,132,135,139,142,146', +'149,152,156,160,122,126,131,134,138,141,145,148,151,154,159,121,125', +'155,,,,,,,143,147,150,153,157,161,123,127,132,135,139,142,146,149,152', +'156,160,122,126,131,134,138,141,145,148,151,154,159,121,125,155,,,,', +',,143,147,150,153,157,161,123,127,132,135,139,142,146,149,152,156,160', +'122,126,131,134,138,141,145,148,151,154,159,121,125,155,,,,,,,143,147', +'150,153,157,161,123,127,132,135,139,142,146,149,152,156,160,122,126', +'131,134,138,141,145,148,151,154,159,121,125' ] + racc_action_table = arr = Array.new(9160, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -349,344 +355,351 @@ def on_error(error_token_id, error_value, value_stack) end clist = [ -'107,165,107,152,152,152,152,152,152,152,152,152,152,65,65,65,110,152', -'73,176,152,152,65,98,65,199,152,176,198,152,152,152,107,107,197,206', -'206,107,152,194,152,107,152,152,65,152,74,152,152,206,165,107,275,152', -'152,152,152,107,107,107,107,107,107,107,107,107,107,107,107,107,107', +'110,294,110,21,21,21,21,21,21,21,21,21,21,70,70,70,76,248,248,248,208', +'208,70,197,70,263,248,257,248,69,21,21,110,110,208,239,255,110,217,290', +'71,110,239,239,70,21,211,290,21,294,197,110,75,211,211,211,211,211,110', +'110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110', +'110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,70,169', +'76,197,197,197,21,179,21,148,21,110,148,148,148,148,148,148,148,148', +'148,148,212,212,115,112,148,277,188,148,148,105,112,112,179,148,188', +'259,148,148,148,148,308,308,119,119,148,148,278,148,169,148,148,187', +'148,205,148,148,103,103,103,201,103,148,148,148,148,148,148,115,115', +'188,148,148,66,259,105,105,105,179,179,179,105,259,4,200,259,4,4,4,4', +'4,4,4,4,4,4,199,187,187,187,4,148,148,4,4,196,148,291,148,4,148,174', +'4,4,4,4,269,173,188,188,4,4,53,4,269,4,4,236,4,171,4,4,111,111,236,236', +'178,4,4,4,4,4,4,190,178,77,4,4,29,101,92,190,77,77,258,258,29,101,6', +'269,43,6,6,6,6,6,6,6,6,6,6,249,249,249,35,6,4,4,6,6,249,4,249,4,6,4', +'190,6,6,6,6,29,101,29,101,6,6,93,6,95,6,6,83,6,307,6,6,67,67,83,83,98', +'6,6,6,6,6,6,223,286,286,6,6,62,62,223,223,223,223,223,223,223,100,9', +'175,175,9,9,9,9,9,9,9,9,9,9,27,27,27,114,9,6,6,9,9,27,6,27,6,9,6,82', +'9,9,9,9,118,1,82,82,9,9,124,9,129,9,9,79,9,,9,9,,,79,79,,9,9,9,9,9,9', +'220,,,9,9,,,220,220,220,220,220,220,220,,11,,,11,11,11,11,11,11,11,11', +'11,11,84,84,84,,11,9,9,11,11,84,9,84,9,11,9,243,11,11,11,11,,,243,243', +'11,11,,11,,11,11,87,11,,11,11,,,87,87,,11,11,11,11,11,11,215,,,11,11', +',,215,215,215,215,215,215,215,,12,,,12,12,12,12,12,12,12,12,12,12,85', +'85,85,,12,11,11,12,12,85,11,85,11,12,11,109,12,12,12,12,,,109,109,12', +'12,,12,,12,12,172,12,,12,12,,,172,172,,12,12,12,12,12,12,247,,,12,12', +',,247,247,247,247,247,,,,15,,,15,15,15,15,15,15,15,15,15,15,,,,,15,12', +'12,15,15,,12,,12,15,12,,15,15,15,15,,,,,15,15,,15,,15,15,,15,,15,15', +',,,,,15,15,15,15,15,15,,,,15,15,,,,,,,,,,,19,,,19,19,19,19,19,19,19', +'19,19,19,,,,,19,15,15,19,19,,15,,15,19,15,,19,19,19,19,,,,,19,19,,19', +',19,19,,19,,19,19,,,,,,19,19,19,19,19,19,,,,19,19,,,,,,,,,,,130,,,130', +'130,130,130,130,130,130,130,130,130,,,,,130,19,19,130,130,,19,,19,130', +'19,,130,130,130,130,,,,,130,130,,130,,130,130,,130,,130,130,,,,,,130', +'130,130,130,130,130,,,,130,130,,,,,,,,,,,22,,,22,22,22,22,22,22,22,22', +'22,22,,,,,22,130,130,22,22,,130,,130,22,130,,22,22,22,22,,,,,22,22,', +'22,,22,22,,22,,22,22,,,,,,22,22,22,22,22,22,,,,22,22,,,,,,,,,,,24,,', +'24,24,24,24,24,24,24,24,24,24,,,,,24,22,22,24,24,,22,,22,24,22,,24,24', +'24,24,,,,,24,24,,24,,24,24,,24,,24,24,,,,,,24,24,24,24,24,24,,,,24,24', +',,,,,,,,,,133,,,133,133,133,133,133,133,133,133,133,133,,,,,133,24,24', +'133,133,,24,,24,133,24,,133,133,133,133,,,,,133,133,,133,,133,133,,133', +',133,133,,,,,,133,133,133,133,133,133,,,,133,133,,,,,,,,,,,128,,,128', +'128,128,128,128,128,128,128,128,128,,,,,128,133,133,128,128,,133,,133', +'128,133,,128,128,128,128,,,,,128,128,,128,,128,128,,128,,128,128,,,', +',,128,128,128,128,128,128,,,,128,128,,,,,,,,,,,309,,,309,309,309,309', +'309,309,309,309,309,309,,,,,309,128,128,309,309,,128,,128,309,128,,309', +'309,309,309,,,,,309,309,,309,,309,309,,309,,309,309,,,,,,309,309,309', +'309,309,309,,,,309,309,,,,,,,,,,,32,,,32,32,32,32,32,32,32,32,32,32', +',,,,32,309,309,32,32,,309,,309,32,309,,32,32,32,32,,,,,32,32,,32,,32', +'32,,32,,32,32,,,,,,32,32,32,32,32,32,,,,32,32,,,,,,,,,,,34,,,34,34,34', +'34,34,34,34,34,34,34,,,,,34,32,32,34,34,,32,,32,34,32,,34,34,34,34,', +',,,34,34,,34,,34,34,,34,,34,34,34,,,,,34,34,34,34,34,34,,,,34,34,,,', +',,,,,,,127,,,127,127,127,127,127,127,127,127,127,127,,,,,127,34,34,127', +'127,,34,,34,127,34,,127,127,127,127,,,,,127,127,,127,,127,127,,127,', +'127,127,,,,,,127,127,127,127,127,127,,,,127,127,,,,,,,,,,,37,,,37,37', +'37,37,37,37,37,37,37,37,,,,,37,127,127,37,37,,127,,127,37,127,,37,37', +'37,37,,,,,37,37,,37,,37,37,,37,,37,37,,,,,,37,37,37,37,37,37,,,,37,37', +',,,,,,,,,,40,,,40,40,40,40,40,40,40,40,40,40,,,,,40,37,37,40,40,,37', +',37,40,37,,40,40,40,40,,,,,40,40,,40,,40,40,,40,,40,40,,,,,,40,40,40', +'40,40,40,,,,40,40,,,,,,,,,,,126,,,126,126,126,126,126,126,126,126,126', +'126,,,,,126,40,40,126,126,,40,,40,126,40,,126,126,126,126,,,,,126,126', +',126,,126,126,,126,,126,126,,,,,,126,126,126,126,126,126,,,,126,126', +',,,,,,,,,,46,,,46,46,46,46,46,46,46,46,46,46,,,,,46,126,126,46,46,,126', +',126,46,126,,46,46,46,46,,,,,46,46,,46,,46,46,,46,,46,46,,,,,,46,46', +'46,46,46,46,,,,46,46,,,,,,,,,,,52,,,52,52,52,52,52,52,52,52,52,52,,', +',,52,46,46,52,52,,46,,46,52,46,,52,52,52,52,,,,,52,52,,52,,52,52,,52', +',52,52,,,,,,52,52,52,52,52,52,,,,52,52,,,,,,,,,,,296,,,296,296,296,296', +'296,296,296,296,296,296,,,,,296,52,52,296,296,,52,,52,296,52,,296,296', +'296,296,,,,,296,296,,296,,296,296,,296,,296,296,,,,,,296,296,296,296', +'296,296,,,,296,296,,,,,,,,,,,59,,,59,59,59,59,59,59,59,59,59,59,296', +',,,59,296,296,59,59,,296,,296,59,296,,59,59,59,59,,,,,59,59,,59,,59', +'59,,59,,59,59,,59,,,,59,59,59,59,59,59,,,,59,59,,,,,,,,,,,285,,,285', +'285,285,285,285,285,285,285,285,285,,,,,285,59,59,285,285,,59,,59,285', +'59,,285,285,285,285,,,,,285,285,,285,,285,285,,285,,285,285,,,,,,285', +'285,285,285,285,285,,,,285,285,,,,,,,,,,,284,,,284,284,284,284,284,284', +'284,284,284,284,,,,,284,285,285,284,284,,285,,285,284,285,,284,284,284', +'284,,,,,284,284,,284,,284,284,,284,,284,284,,,,,,284,284,284,284,284', +'284,,,,284,284,,,,,,,,,,,275,,,275,275,275,275,275,275,275,275,275,275', +',,,,275,284,284,275,275,,284,,284,275,284,,275,275,275,275,,,,,275,275', +',275,,275,275,,275,,275,275,,,,,,275,275,275,275,275,275,,,,275,275', +',,,,,,,,,,272,,,272,272,272,272,272,272,272,272,272,272,275,,,,272,275', +'275,272,272,,275,,275,272,275,,272,272,272,272,,,,,272,272,,272,,272', +'272,,272,,272,272,,,,,,272,272,272,272,272,272,,,,272,272,,,,,,,,,,', +'271,,,271,271,271,271,271,271,271,271,271,271,,,,,271,272,272,271,271', +',272,,272,271,272,,271,271,271,271,,,,,271,271,,271,,271,271,,271,,271', +'271,,,,,,271,271,271,271,271,271,,,,271,271,,,,,,,,,,,261,,,261,261', +'261,261,261,261,261,261,261,261,,,,,261,271,271,261,261,,271,,271,261', +'271,,261,261,261,261,,,,,261,261,,261,,261,261,,261,,261,261,,,,,,261', +'261,261,261,261,261,,,,261,261,,,,,,,,,,,207,,,207,207,207,207,207,207', +'207,207,207,207,,,,,207,261,261,207,207,,261,,261,207,261,,207,207,207', +'207,,,,,207,207,,207,,207,207,,207,,207,207,,,,,,207,207,207,207,207', +'207,,,,207,207,,,,,,,,,,,73,,,73,73,73,73,73,73,73,73,73,73,,,,,73,207', +'207,73,73,,207,,207,73,207,,73,73,73,73,,,,,73,73,,73,,73,73,,73,,73', +'73,,,,,,73,73,73,73,73,73,,,,73,73,,,,,,,,,,,206,,,206,206,206,206,206', +'206,206,206,206,206,,,,,206,73,73,206,206,,73,,73,206,73,,206,206,206', +'206,,,,,206,206,,206,,206,206,,206,,206,206,,,,,,206,206,206,206,206', +'206,,,,206,206,,,,,,,,,,,194,,,194,194,194,194,194,194,194,194,194,194', +',,,,194,206,206,194,194,,206,,206,194,206,,194,194,194,194,,,,,194,194', +',194,,194,194,,194,,194,194,,,,,,194,194,194,194,194,194,,,,194,194', +',,,,,,,,,,191,,,191,191,191,191,191,191,191,191,191,191,,,,,191,194', +'194,191,191,,194,,194,191,194,,191,191,191,191,,,,,191,191,,191,,191', +'191,,191,,191,191,191,,,,,191,191,191,191,191,191,232,,,191,191,,,232', +'232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232', +'232,232,232,,,,,,191,191,191,191,,191,,191,186,191,,186,186,186,186', +'186,186,186,186,186,186,,,,,186,,,186,186,,,,,186,,,186,186,186,186', +',,,,186,186,,186,,186,186,,186,,186,186,,,,,,186,186,186,186,186,186', +',,,186,186,,,,,,,,,,,185,,,185,185,185,185,185,185,185,185,185,185,', +',,,185,186,186,185,185,,186,,186,185,186,,185,185,185,185,,,,,185,185', +',185,,185,185,,185,,185,185,,,,,,185,185,185,185,185,185,,,,185,185', +',,,,,,,,,,166,,,166,166,166,166,166,166,166,166,166,166,,,,,166,185', +'185,166,166,,185,,185,166,185,,166,166,166,166,,,,,166,166,,166,,166', +'166,,166,,166,166,,,,,,166,166,166,166,166,166,,,,166,166,,,,,,,,,,', +'132,,,132,132,132,132,132,132,132,132,132,132,,,,,132,166,166,132,132', +',166,,166,132,166,,132,132,132,132,,,,,132,132,,132,,132,132,,132,,132', +'132,,,,,,132,132,132,132,132,132,,,,132,132,,,,,,,,,,,161,,,161,161', +'161,161,161,161,161,161,161,161,,,,,161,132,132,161,161,,132,,132,161', +'132,,161,161,161,161,,,,,161,161,,161,,161,161,,161,,161,161,,,,,,161', +'161,161,161,161,161,,,,161,161,,,,,,,,,,,160,,,160,160,160,160,160,160', +'160,160,160,160,,,,,160,161,161,160,160,,161,,161,160,161,,160,160,160', +'160,,,,,160,160,,160,,160,160,,160,,160,160,,,,,,160,160,160,160,160', +'160,,,,160,160,,,,,,,,,,,159,,,159,159,159,159,159,159,159,159,159,159', +',,,,159,160,160,159,159,,160,,160,159,160,,159,159,159,159,,,,,159,159', +',159,,159,159,,159,,159,159,,,,,,159,159,159,159,159,159,,,,159,159', +',,,,,,,,,,158,,,158,158,158,158,158,158,158,158,158,158,,,,,158,159', +'159,158,158,,159,,159,158,159,,158,158,158,158,,,,,158,158,,158,,158', +'158,,158,,158,158,,,,,,158,158,158,158,158,158,,,,158,158,,,,,,,,,,', +'157,,,157,157,157,157,157,157,157,157,157,157,,,,,157,158,158,157,157', +',158,,158,157,158,,157,157,157,157,,,,,157,157,,157,,157,157,,157,,157', +'157,,,,,,157,157,157,157,157,157,,,,157,157,,,,,,,,,,,156,,,156,156', +'156,156,156,156,156,156,156,156,,,,,156,157,157,156,156,,157,,157,156', +'157,,156,156,156,156,,,,,156,156,,156,,156,156,,156,,156,156,,,,,,156', +'156,156,156,156,156,,,,156,156,,,,,,,,,,,125,,,125,125,125,125,125,125', +'125,125,125,125,,,,,125,156,156,125,125,,156,,156,125,156,,125,125,125', +'125,,,,,125,125,,125,,125,125,,125,,125,125,,,,,,125,125,125,125,125', +'125,,,,125,125,,,,,,,,,,,90,,,90,90,90,90,90,90,90,90,90,90,,,,,90,125', +'125,90,90,,125,,125,90,125,,90,90,90,90,,,,,90,90,,90,,90,90,,90,,90', +'90,90,,,,,90,90,90,90,90,90,,,,90,90,,,,,,,,,,,91,,,91,91,91,91,91,91', +'91,91,91,91,,,,,91,90,90,91,91,,90,,90,91,90,,91,91,91,91,,,,,91,91', +',91,,91,91,,91,,91,91,,,,,,91,91,91,91,91,91,,,,91,91,,,,,,,,,,,154', +',,154,154,154,154,154,154,154,154,154,154,,,,,154,91,91,154,154,,91', +',91,154,91,,154,154,154,154,,,,,154,154,,154,,154,154,,154,,154,154', +',,,,,154,154,154,154,154,154,,,,154,154,,,,,,,,,,,153,,,153,153,153', +'153,153,153,153,153,153,153,,,,,153,154,154,153,153,,154,,154,153,154', +',153,153,153,153,,,,,153,153,,153,,153,153,,153,,153,153,,,,,,153,153', +'153,153,153,153,,,,153,153,,,,,,,,,,,152,,,152,152,152,152,152,152,152', +'152,152,152,,,,,152,153,153,152,152,,153,,153,152,153,,152,152,152,152', +',,,,152,152,,152,,152,152,,152,,152,152,,,,,,152,152,152,152,152,152', +',,,152,152,,,,,,,,,,,151,,,151,151,151,151,151,151,151,151,151,151,', +',,,151,152,152,151,151,,152,,152,151,152,,151,151,151,151,,,,,151,151', +',151,,151,151,,151,,151,151,,,,,,151,151,151,151,151,151,,,,151,151', +',,,,,,,,,,150,,,150,150,150,150,150,150,150,150,150,150,,,,,150,151', +'151,150,150,,151,,151,150,151,,150,150,150,150,,,,,150,150,,150,,150', +'150,,150,,150,150,,,,,,150,150,150,150,150,150,,,,150,150,,,,,,,,,,', +'149,,,149,149,149,149,149,149,149,149,149,149,,,,,149,150,150,149,149', +',150,,150,149,150,,149,149,149,149,,,,,149,149,,149,,149,149,,149,,149', +'149,,,,,,149,149,149,149,149,149,,,,149,149,,,,,,,,,,,131,,,131,131', +'131,131,131,131,131,131,131,131,,,,,131,149,149,131,131,,149,,149,131', +'149,,131,131,131,131,,,,,131,131,,131,,131,131,,131,,131,131,,,,,,131', +'131,131,131,131,131,,,,131,131,,,,,,,,,,,146,,,146,146,146,146,146,146', +'146,146,146,146,,,,,146,131,131,146,146,,131,,131,146,131,,146,146,146', +'146,,,,,146,146,,146,,146,146,,146,,146,146,,,,,,146,146,146,146,146', +'146,,,,146,146,,,,,,,,,,,145,,,145,145,145,145,145,145,145,145,145,145', +',,,,145,146,146,145,145,,146,,146,145,146,,145,145,145,145,,,,,145,145', +',145,,145,145,,145,,145,145,,,,,,145,145,145,145,145,145,,,,145,145', +',,,,,,,,,,106,,,106,106,106,106,106,106,106,106,106,106,,,,,106,145', +'145,106,106,,145,,145,106,145,,106,106,106,106,,,,,106,106,,106,,106', +'106,,106,,106,106,,,,,,106,106,106,106,106,106,,,,106,106,,,,,,,,,,', +'144,,,144,144,144,144,144,144,144,144,144,144,,,,,144,106,106,144,144', +',106,,106,144,106,,144,144,144,144,,,,,144,144,,144,,144,144,,144,,144', +'144,,,,,,144,144,144,144,144,144,,,,144,144,,,,,,,,,,,108,,,108,108', +'108,108,108,108,108,108,108,108,,,,,108,144,144,108,108,,144,,144,108', +'144,,108,108,108,108,,,,,108,108,,108,,108,108,,108,,108,108,108,,,', +',108,108,108,108,108,108,,,,108,108,,,,,,,,,,,134,,,134,134,134,134', +'134,134,134,134,134,134,,,,,134,108,108,134,134,,108,,108,134,108,,134', +'134,134,134,,,,,134,134,,134,,134,134,,134,,134,134,,,,,,134,134,134', +'134,134,134,,,,134,134,,,,,,,,,,,0,,,0,0,0,0,0,0,0,0,0,0,,,,,0,134,134', +'0,0,,134,,134,0,134,,0,0,0,0,,,,,0,0,,0,,0,0,,0,,0,0,0,,,,,0,0,0,0,0', +'0,219,,,0,0,,,219,219,219,219,219,219,219,219,219,219,219,219,219,219', +'219,219,219,219,219,219,219,,,,,,0,0,0,0,,0,,0,141,0,,141,141,141,141', +'141,141,141,141,141,141,,,,,141,,,141,141,,,,,141,,,141,141,141,141', +',,,,141,141,,141,,141,141,,141,,141,141,,,,,,141,141,141,141,141,141', +',,,141,141,,,,,,,,,,,140,,,140,140,140,140,140,140,140,140,140,140,', +',,,140,141,141,140,140,,141,,141,140,141,,140,140,140,140,,,,,140,140', +',140,,140,140,,140,,140,140,,,,,,140,140,140,140,140,140,,,,140,140', +',,,,,,,,,,139,,,139,139,139,139,139,139,139,139,139,139,,,,,139,140', +'140,139,139,,140,,140,139,140,,139,139,139,139,,,,,139,139,,139,,139', +'139,,139,,139,139,,,,,,139,139,139,139,139,139,,,,139,139,,,,,,,,,,', +'138,,,138,138,138,138,138,138,138,138,138,138,,,,,138,139,139,138,138', +',139,,139,138,139,,138,138,138,138,,,,,138,138,,138,,138,138,,138,,138', +'138,,,,,,138,138,138,138,138,138,,,,138,138,,,,,,,,,,,137,,,137,137', +'137,137,137,137,137,137,137,137,,,,,137,138,138,137,137,,138,,138,137', +'138,,137,137,137,137,,,,,137,137,,137,,137,137,,137,,137,137,,,,,,137', +'137,137,137,137,137,,,,137,137,,,,,,,,,,,117,,,117,117,117,117,117,117', +'117,117,117,117,,,,,117,137,137,117,117,,137,,137,117,137,,117,117,117', +'117,,,,,117,117,,117,,117,117,,117,,117,117,,,,,,117,117,117,117,117', +'117,,,,117,117,,,,,,,,,,,136,,,136,136,136,136,136,136,136,136,136,136', +',,,,136,117,117,136,136,,117,,117,136,117,,136,136,136,136,,,,,136,136', +',136,,136,136,,136,,136,136,,,,,,136,136,136,136,136,136,,,,136,136', +',,,,,,,,,,135,,,135,135,135,135,135,135,135,135,135,135,,,,,135,136', +'136,135,135,,136,,136,135,136,,135,135,135,135,,,,,135,135,,135,,135', +'135,,135,,135,135,,,,,,135,135,135,135,135,135,,,,135,135,,,,,,,,,,', +'121,,,121,121,121,121,121,121,121,121,121,121,,,,,121,135,135,121,121', +',135,,135,121,135,,121,121,121,121,,,,,121,121,,121,,121,121,,121,,121', +'121,,,,,,121,121,121,121,121,121,,,,121,121,,,,,,,,,,,122,,,122,122', +'122,122,122,122,122,122,122,122,,,,,122,121,121,122,122,,121,,121,122', +'121,,122,122,122,122,,,,,122,122,,122,,122,122,,122,,122,122,,,,,,122', +'122,122,122,122,122,,,,122,122,,,,,,,,,,,123,,,123,123,123,123,123,123', +'123,123,123,123,,,,,123,122,122,123,123,,122,,122,123,122,,123,123,123', +'123,,,,,123,123,,123,,123,123,,123,,123,123,,,,,,123,123,123,123,123', +'123,,,,123,123,,,,,,,,,,,142,,,142,142,142,142,142,142,142,142,142,142', +',,,,142,123,123,142,142,,123,,123,142,123,,142,142,142,142,,,,,142,142', +',142,,142,142,,142,,142,142,,312,,312,,142,142,142,142,142,142,235,', +',142,142,,,235,235,235,235,235,235,235,235,235,235,235,235,235,,,312', +'312,,,,312,,,,312,,142,142,,,,142,,142,312,142,,,,,,312,312,312,312', +'312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312', +'312,312,312,312,312,312,312,312,312,312,312,312,312,301,,301,226,,,', +',,312,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226', +'226,226,226,226,226,,301,301,,,,301,,,,301,,,,,,,,,,301,,,,,,,301,301', +'301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301', +'301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,,,,,,,,', +',301,310,310,310,310,310,310,310,310,310,310,,,,,310,,,310,310,,,,,310', +',,310,310,310,,,,,,,310,,310,,310,310,,310,,310,310,,,,,,310,310,310', +'310,310,310,,,,310,310,,,,,300,300,300,300,300,300,300,300,300,300,', +',,,300,,,300,300,,,,,300,310,310,300,300,300,310,,310,,310,,300,,300', +',300,300,,300,,300,300,,,,,,300,300,300,300,300,300,233,,,300,300,,', +'233,233,233,233,233,233,233,233,233,233,,25,25,25,25,25,25,25,25,25', +'25,,,,,25,300,300,25,25,,300,,300,25,300,,25,25,25,25,,,,,,25,,25,,25', +'25,,25,,25,25,,,,,,25,25,25,25,25,25,,,,25,25,,,,,155,155,155,155,155', +'155,155,155,155,155,,,,,155,,,155,155,,,,,155,25,25,155,155,155,25,', +'25,,25,,155,,155,,155,155,,155,,155,155,,,,,,155,155,155,155,,164,164', +'164,164,164,164,164,164,164,164,227,,,,,,,227,227,227,227,227,227,227', +'227,227,227,164,164,,,,,,155,155,,,,155,,155,164,155,229,164,,204,,204', +',229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229', +'229,229,229,229,,,,,,,,204,204,,,,204,,,,204,,,,,,,164,,164,204,164', +',,,,,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204', +'204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204', +'204,68,234,68,,,,,,234,234,234,234,234,234,234,234,234,234,234,234,234', +'234,234,234,234,234,234,234,234,,,,68,68,,,,68,,,,68,,,,,,,,,,68,,,', +',,,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68', +'68,68,68,68,68,68,68,68,68,68,68,68,311,242,311,,,,,,242,242,242,242', +'242,242,242,242,242,242,242,242,242,,,,,311,,,,,,,311,311,,,,311,,,', +'311,,,,,,,,,,311,,,,,,,311,311,311,311,311,311,311,311,311,311,311,311', +'311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311', +'311,311,311,311,311,231,222,231,,,,,,222,222,222,222,222,222,222,222', +'222,222,222,222,222,222,222,222,222,222,222,222,222,,,,231,231,,,,231', +',,,231,,,,,,,,,,231,,,,,,,231,231,231,231,231,231,231,231,231,231,231', +'231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231', +'231,231,231,231,231,231,81,214,81,,,,,,214,214,214,214,214,214,214,214', +'214,214,214,214,214,214,214,214,214,214,214,214,214,,,,81,81,,,,81,', +',,81,,,,,,,,81,,81,,,,,,,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81', +'81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,224,210,224', +',,,,,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210', +'210,210,210,210,210,,,,224,224,,,,224,,,,224,,,,,,,,,,224,,,,,,,224', +'224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224', +'224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,273', +'246,273,,,,,,246,246,246,246,246,246,246,246,246,246,246,246,246,,,', +',,,,,,,,273,273,,,,273,,,,273,,,,,,,,,,273,,,,,,,273,273,273,273,273', +'273,273,273,273,273,273,273,273,273,273,273,273,273,273,273,273,273', +'273,273,273,273,273,273,273,273,273,273,273,273,216,238,216,,,,,,238', +'238,238,238,238,238,238,238,238,238,238,238,238,,,,,,,,,,,,216,216,', +',,216,,,,216,,,,,,,,,,216,,,,,,,216,216,216,216,216,216,216,216,216', +'216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216', +'216,216,216,216,216,216,216,216,274,230,274,,,,,,230,230,230,230,230', +'230,230,230,230,230,,,,,,,,,,,,,,,274,274,,,,274,,,,274,,,,,,,,,,274', +',,,,,,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274', +'274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274', +'274,107,,107,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,107,107,,,,107,,,,107,,,,', +',,,,,107,,,,,,,107,107,107,107,107,107,107,107,107,107,107,107,107,107', '107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107', -'107,107,107,65,152,152,293,73,195,152,276,152,156,152,107,156,156,156', -'156,156,156,156,156,156,156,96,288,102,261,156,234,188,156,156,288,195', -'234,234,156,188,113,156,156,156,156,172,172,306,306,156,156,203,156', -'293,156,156,185,156,66,156,156,55,55,59,59,156,156,156,156,156,156,102', -'102,102,188,156,211,102,173,195,195,195,289,177,113,113,4,117,117,4', -'4,4,4,4,4,4,4,4,4,257,185,185,185,4,156,156,4,4,88,156,177,156,4,156', -'171,4,4,4,4,187,64,188,188,4,4,62,4,187,4,4,99,4,255,4,4,284,284,257', -'99,4,4,4,4,4,4,257,82,254,257,4,24,268,82,82,177,177,177,45,24,268,6', -'167,187,6,6,6,6,6,6,6,6,6,6,99,116,99,305,6,4,4,6,6,92,4,40,4,6,4,32', -'6,6,6,6,24,268,24,90,6,6,121,6,1,6,6,237,6,122,6,6,,237,237,,6,6,6,6', -'6,6,218,101,101,101,6,101,218,218,218,218,218,218,218,210,210,9,109', -'109,9,9,9,9,9,9,9,9,9,9,84,84,84,,9,6,6,9,9,84,6,84,6,9,6,170,9,9,9', -'9,,170,170,,9,9,,9,,9,9,76,9,,9,9,,76,76,,9,9,9,9,9,9,213,256,256,,9', -',213,213,213,213,213,213,213,,,11,,,11,11,11,11,11,11,11,11,11,11,83', -'83,83,,11,9,9,11,11,83,9,83,9,11,9,231,11,11,11,11,,231,231,,11,11,', -'11,,11,11,169,11,,11,11,,169,169,,11,11,11,11,11,11,209,,,,11,,209,209', -'209,209,209,209,209,,,12,,,12,12,12,12,12,12,12,12,12,12,246,246,246', -',12,11,11,12,12,246,11,246,11,12,11,108,12,12,12,12,,108,108,,12,12', -',12,,12,12,,12,,12,12,,22,22,22,12,12,12,12,12,12,22,,22,241,12,247', -'247,247,,241,241,241,241,241,247,15,247,,15,15,15,15,15,15,15,15,15', -'15,,,,,15,12,12,15,15,,12,,12,15,12,81,15,15,15,15,,81,81,,15,15,,15', -',15,15,78,15,,15,15,,78,78,,15,15,15,15,15,15,245,,,,15,,245,245,245', -'245,245,,,,,18,,,18,18,18,18,18,18,18,18,18,18,,,,,18,15,15,18,18,,15', -',15,18,15,,18,18,18,18,,,,,18,18,,18,,18,18,,18,,18,18,,,,,18,18,18', -'18,18,18,,,,,18,,,,,,,,,,,153,,,153,153,153,153,153,153,153,153,153', -'153,,,,,153,18,18,153,153,,18,,18,153,18,,153,153,153,153,,,,,153,153', -',153,,153,153,,153,,153,153,,,,,153,153,153,153,153,153,,,,,153,,,,', -',,,,,,20,,,20,20,20,20,20,20,20,20,20,20,,,,,20,153,153,20,20,,153,', -'153,20,153,,20,20,20,20,,,,,20,20,,20,,20,20,,20,,20,20,,,,,20,20,20', -'20,20,20,,,,,20,,,,,,,,,,,151,,,151,151,151,151,151,151,151,151,151', -'151,,,,,151,20,20,151,151,,20,,20,151,20,,151,151,151,151,,,,,151,151', -',151,,151,151,,151,,151,151,,,,,151,151,151,151,151,151,,,,,151,,,,', -',,,,,,150,,,150,150,150,150,150,150,150,150,150,150,,,,,150,151,151', -'150,150,,151,,151,150,151,,150,150,150,150,,,,,150,150,,150,,150,150', -',150,,150,150,,,,,150,150,150,150,150,150,,,,,150,,,,,,,,,,,149,,,149', -'149,149,149,149,149,149,149,149,149,,,,,149,150,150,149,149,,150,,150', -'149,150,,149,149,149,149,,,,,149,149,,149,,149,149,,149,,149,149,,,', -',149,149,149,149,149,149,,,,,149,,,,,,,,,,,29,,,29,29,29,29,29,29,29', -'29,29,29,,,,,29,149,149,29,29,,149,,149,29,149,,29,29,29,29,,,,,29,29', -',29,,29,29,,29,,29,29,29,,,,29,29,29,29,29,29,,,,,29,,,,,,,,,,,30,,', -'30,30,30,30,30,30,30,30,30,30,,,,,30,29,29,30,30,,29,,29,30,29,,30,30', -'30,30,,,,,30,30,,30,,30,30,,30,,30,30,,,,,30,30,30,30,30,30,,,,,30,', -',,,,,,,,,148,,,148,148,148,148,148,148,148,148,148,148,,,,,148,30,30', -'148,148,,30,,30,148,30,,148,148,148,148,,,,,148,148,,148,,148,148,,148', -',148,148,,,,,148,148,148,148,148,148,,,,,148,,,,,,,,,,,34,,,34,34,34', -'34,34,34,34,34,34,34,,,,,34,148,148,34,34,,148,,148,34,148,,34,34,34', -'34,,,,,34,34,,34,,34,34,,34,,34,34,,,,,34,34,34,34,34,34,,,,,34,,,,', -',,,,,,35,,,35,35,35,35,35,35,35,35,35,35,,,,,35,34,34,35,35,,34,,34', -'35,34,,35,35,35,35,,,,,35,35,,35,,35,35,,35,,35,35,,,,,35,35,35,35,35', -'35,,,,,35,,,,,,,,,,,307,,,307,307,307,307,307,307,307,307,307,307,,', -',,307,35,35,307,307,,35,,35,307,35,,307,307,307,307,,,,,307,307,,307', -',307,307,,307,,307,307,,,,,307,307,307,307,307,307,,,,,307,,,,,,,,,', -',147,,,147,147,147,147,147,147,147,147,147,147,,,,,147,307,307,147,147', -',307,,307,147,307,,147,147,147,147,,,,,147,147,,147,,147,147,,147,,147', -'147,,,,,147,147,147,147,147,147,,,,,147,,,,,,,,,,,49,,,49,49,49,49,49', -'49,49,49,49,49,,,,,49,147,147,49,49,,147,,147,49,147,,49,49,49,49,,', -',,49,49,,49,,49,49,,49,,49,49,,,,,49,49,49,49,49,49,,,,,49,,,,,,,,,', -',146,,,146,146,146,146,146,146,146,146,146,146,,,,,146,49,49,146,146', -',49,,49,146,49,,146,146,146,146,,,,,146,146,,146,,146,146,,146,,146', -'146,,,,,146,146,146,146,146,146,,,,,146,,,,,,,,,,,56,,,56,56,56,56,56', -'56,56,56,56,56,,,,,56,146,146,56,56,,146,,146,56,146,,56,56,56,56,,', -',,56,56,,56,,56,56,,56,,56,56,,56,,,56,56,56,56,56,56,,,,,56,,,,,,,', -',,,145,,,145,145,145,145,145,145,145,145,145,145,,,,,145,56,56,145,145', -',56,,56,145,56,,145,145,145,145,,,,,145,145,,145,,145,145,,145,,145', -'145,,,,,145,145,145,145,145,145,,,,,145,,,,,,,,,,,144,,,144,144,144', -'144,144,144,144,144,144,144,,,,,144,145,145,144,144,,145,,145,144,145', -',144,144,144,144,,,,,144,144,,144,,144,144,,144,,144,144,,,,,144,144', -'144,144,144,144,,,,,144,,,,,,,,,,,143,,,143,143,143,143,143,143,143', -'143,143,143,,,,,143,144,144,143,143,,144,,144,143,144,,143,143,143,143', -',,,,143,143,,143,,143,143,,143,,143,143,,,,,143,143,143,143,143,143', -',,,,143,,,,,,,,,,,294,,,294,294,294,294,294,294,294,294,294,294,,,,', -'294,143,143,294,294,,143,,143,294,143,,294,294,294,294,,,,,294,294,', -'294,,294,294,,294,,294,294,,,,,294,294,294,294,294,294,,,,,294,,,,,', -',,,,,142,,,142,142,142,142,142,142,142,142,142,142,294,,,,142,294,294', -'142,142,,294,,294,142,294,,142,142,142,142,,,,,142,142,,142,,142,142', -',142,,142,142,,,,,142,142,142,142,142,142,,,,,142,,,,,,,,,,,282,,,282', -'282,282,282,282,282,282,282,282,282,,,,,282,142,142,282,282,,142,,142', -'282,142,,282,282,282,282,,,,,282,282,,282,,282,282,,282,,282,282,,,', -',282,282,282,282,282,282,,,,,282,,,,,,,,,,,68,,,68,68,68,68,68,68,68', -'68,68,68,,,,,68,282,282,68,68,,282,,282,68,282,,68,68,68,68,,,,,68,68', -',68,,68,68,,68,,68,68,,,,,68,68,68,68,68,68,,,,,68,,,,,,,,,,,71,,,71', -'71,71,71,71,71,71,71,71,71,,,,,71,68,68,71,71,,68,,68,71,68,,71,71,71', -'71,,,,,71,71,,71,,71,71,,71,,71,71,,,,,71,71,71,71,71,71,,,,,71,,,,', -',,,,,,281,,,281,281,281,281,281,281,281,281,281,281,,,,,281,71,71,281', -'281,,71,,71,281,71,,281,281,281,281,,,,,281,281,,281,,281,281,,281,', -'281,281,,,,,281,281,281,281,281,281,,,,,281,,,,,,,,,,,273,,,273,273', -'273,273,273,273,273,273,273,273,,,,,273,281,281,273,273,,281,,281,273', -'281,,273,273,273,273,,,,,273,273,,273,,273,273,,273,,273,273,,,,,273', -'273,273,273,273,273,,,,,273,,,,,,,,,,,141,,,141,141,141,141,141,141', -'141,141,141,141,273,,,,141,273,273,141,141,,273,,273,141,273,,141,141', -'141,141,,,,,141,141,,141,,141,141,,141,,141,141,,,,,141,141,141,141', -'141,141,,,,,141,,,,,,,,,,,139,,,139,139,139,139,139,139,139,139,139', -'139,,,,,139,141,141,139,139,,141,,141,139,141,,139,139,139,139,,,,,139', -'139,,139,,139,139,,139,,139,139,,,,,139,139,139,139,139,139,,,,,139', -',,,,,,,,,,271,,,271,271,271,271,271,271,271,271,271,271,,,,,271,139', -'139,271,271,,139,,139,271,139,,271,271,271,271,,,,,271,271,,271,,271', -'271,,271,,271,271,,,,,271,271,271,271,271,271,,,,,271,,,,,,,,,,,138', -',,138,138,138,138,138,138,138,138,138,138,,,,,138,271,271,138,138,,271', -',271,138,271,,138,138,138,138,,,,,138,138,,138,,138,138,,138,,138,138', -',,,,138,138,138,138,138,138,,,,,138,,,,,,,,,,,136,,,136,136,136,136', -'136,136,136,136,136,136,,,,,136,138,138,136,136,,138,,138,136,138,,136', -'136,136,136,,,,,136,136,,136,,136,136,,136,,136,136,,,,,136,136,136', -'136,136,136,,,,,136,,,,,,,,,,,270,,,270,270,270,270,270,270,270,270', -'270,270,,,,,270,136,136,270,270,,136,,136,270,136,,270,270,270,270,', -',,,270,270,,270,,270,270,,270,,270,270,,,,,270,270,270,270,270,270,', -',,,270,,,,,,,,,,,135,,,135,135,135,135,135,135,135,135,135,135,,,,,135', -'270,270,135,135,,270,,270,135,270,,135,135,135,135,,,,,135,135,,135', -',135,135,,135,,135,135,,,,,135,135,135,135,135,135,,,,,135,,,,,,,,,', -',134,,,134,134,134,134,134,134,134,134,134,134,,,,,134,135,135,134,134', -',135,,135,134,135,,134,134,134,134,,,,,134,134,,134,,134,134,,134,,134', -'134,,,,,134,134,134,134,134,134,,,,,134,,,,,,,,,,,133,,,133,133,133', -'133,133,133,133,133,133,133,,,,,133,134,134,133,133,,134,,134,133,134', -',133,133,133,133,,,,,133,133,,133,,133,133,,133,,133,133,,,,,133,133', -'133,133,133,133,,,,,133,,,,,,,,,,,259,,,259,259,259,259,259,259,259', -'259,259,259,,,,,259,133,133,259,259,,133,,133,259,133,,259,259,259,259', -',,,,259,259,,259,,259,259,,259,,259,259,,,,,259,259,259,259,259,259', -',,,,259,,,,,,,,,,,86,,,86,86,86,86,86,86,86,86,86,86,,,,,86,259,259', -'86,86,,259,,259,86,259,,86,86,86,86,,,,,86,86,,86,,86,86,,86,,86,86', -'86,,,,86,86,86,86,86,86,,,,,86,,,,,,,,,,,87,,,87,87,87,87,87,87,87,87', -'87,87,,,,,87,86,86,87,87,,86,,86,87,86,,87,87,87,87,,,,,87,87,,87,,87', -'87,,87,,87,87,,,,,87,87,87,87,87,87,,,,,87,,,,,,,,,,,132,,,132,132,132', -'132,132,132,132,132,132,132,,,,,132,87,87,132,132,,87,,87,132,87,,132', -'132,132,132,,,,,132,132,,132,,132,132,,132,,132,132,,,,,132,132,132', -'132,132,132,,,,,132,,,,,,,,,,,131,,,131,131,131,131,131,131,131,131', -'131,131,,,,,131,132,132,131,131,,132,,132,131,132,,131,131,131,131,', -',,,131,131,,131,,131,131,,131,,131,131,,,,,131,131,131,131,131,131,', -',,,131,,,,,,,,,,,130,,,130,130,130,130,130,130,130,130,130,130,,,,,130', -'131,131,130,130,,131,,131,130,131,,130,130,130,130,,,,,130,130,,130', -',130,130,,130,,130,130,,,,,130,130,130,130,130,130,,,,,130,,,,,,,,,', -',205,,,205,205,205,205,205,205,205,205,205,205,,,,,205,130,130,205,205', -',130,,130,205,130,,205,205,205,205,,,,,205,205,,205,,205,205,,205,,205', -'205,,,,,205,205,205,205,205,205,,,,,205,,,,,,,,,,,204,,,204,204,204', -'204,204,204,204,204,204,204,,,,,204,205,205,204,204,,205,,205,204,205', -',204,204,204,204,,,,,204,204,,204,,204,204,,204,,204,204,,,,,204,204', -'204,204,204,204,,,,,204,,,,,,,,,,,129,,,129,129,129,129,129,129,129', -'129,129,129,,,,,129,204,204,129,129,,204,,204,129,204,,129,129,129,129', -',,,,129,129,,129,,129,129,,129,,129,129,,,,,129,129,129,129,129,129', -',,,,129,,,,,,,,,,,123,,,123,123,123,123,123,123,123,123,123,123,,,,', -'123,129,129,123,123,,129,,129,123,129,,123,123,123,123,,,,,123,123,', -'123,,123,123,,123,,123,123,,,,,123,123,123,123,123,123,,,,,123,,,,,', -',,,,,192,,,192,192,192,192,192,192,192,192,192,192,,,,,192,123,123,192', -'192,,123,,123,192,123,,192,192,192,192,,,,,192,192,,192,,192,192,,192', -',192,192,192,,,,192,192,192,192,192,192,226,,,,192,,226,226,226,226', -'226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226', -',,,,,,192,192,192,192,,192,,192,154,192,,154,154,154,154,154,154,154', -'154,154,154,,,,,154,,,154,154,,,,,154,,,154,154,154,154,,,,,154,154', -',154,,154,154,,154,,154,154,,,,,154,154,154,154,154,154,,,,,154,,,,', -',,,,,,103,,,103,103,103,103,103,103,103,103,103,103,,,,,103,154,154', -'103,103,,154,,154,103,154,,103,103,103,103,,,,,103,103,,103,,103,103', -',103,,103,103,,,,,103,103,103,103,103,103,,,,,103,,,,,,,,,,,128,,,128', -'128,128,128,128,128,128,128,128,128,,,,,128,103,103,128,128,,103,,103', -'128,103,,128,128,128,128,,,,,128,128,,128,,128,128,,128,,128,128,,,', -',128,128,128,128,128,128,,,,,128,,,,,,,,,,,191,,,191,191,191,191,191', -'191,191,191,191,191,,,,,191,128,128,191,191,,128,,128,191,128,,191,191', -'191,191,,,,,191,191,,191,,191,191,,191,,191,191,,,,,191,191,191,191', -'191,191,,,,,191,,,,,,,,,,,106,,,106,106,106,106,106,106,106,106,106', -'106,,,,,106,191,191,106,106,,191,,191,106,191,,106,106,106,106,,,,,106', -'106,,106,,106,106,,106,,106,106,106,,,,106,106,106,106,106,106,,,,,106', -',,,,,,,,,,0,,,0,0,0,0,0,0,0,0,0,0,,,,,0,106,106,0,0,,106,,106,0,106', -',0,0,0,0,,,,,0,0,,0,,0,0,,0,,0,0,0,,,,0,0,0,0,0,0,208,,,,0,,208,208', -'208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208', -'208,208,,,,,,,0,0,0,0,,0,,0,127,0,,127,127,127,127,127,127,127,127,127', -'127,,,,,127,,,127,127,,,,,127,,,127,127,127,127,,,,,127,127,,127,,127', -'127,,127,,127,127,,,,,127,127,127,127,127,127,,,,,127,,,,,,,,,,,184', -',,184,184,184,184,184,184,184,184,184,184,,,,,184,127,127,184,184,,127', -',127,184,127,,184,184,184,184,,,,,184,184,,184,,184,184,,184,,184,184', -',,,,184,184,184,184,184,184,,,,,184,,,,,,,,,,,183,,,183,183,183,183', -'183,183,183,183,183,183,,,,,183,184,184,183,183,,184,,184,183,184,,183', -'183,183,183,,,,,183,183,,183,,183,183,,183,,183,183,,,,,183,183,183', -'183,183,183,,,,,183,,,,,,,,,,,126,,,126,126,126,126,126,126,126,126', -'126,126,,,,,126,183,183,126,126,,183,,183,126,183,,126,126,126,126,', -',,,126,126,,126,,126,126,,126,,126,126,,,,,126,126,126,126,126,126,', -',,,126,,,,,,,,,,,112,,,112,112,112,112,112,112,112,112,112,112,,,,,112', -'126,126,112,112,,126,,126,112,126,,112,112,112,112,,,,,112,112,,112', -',112,112,,112,,112,112,,,,,112,112,112,112,112,112,,,,,112,,,,,,,,,', -',125,,,125,125,125,125,125,125,125,125,125,125,,,,,125,112,112,125,125', -',112,,112,125,112,,125,125,125,125,,,,,125,125,,125,,125,125,,125,,125', -'125,,,,,125,125,125,125,125,125,,,,,125,,,,,,,,,,,162,,,162,162,162', -'162,162,162,162,162,162,162,,,,,162,125,125,162,162,,125,,125,162,125', -',162,162,162,162,,,,,162,162,,162,,162,162,,162,,162,162,,,,,162,162', -'162,162,162,162,,,,,162,,,,,,,,,,,124,,,124,124,124,124,124,124,124', -'124,124,124,,,,,124,162,162,124,124,,162,,162,124,162,,124,124,124,124', -',,,,124,124,,124,,124,124,,124,,124,124,,,,,124,124,124,124,124,124', -',,,,124,,,,,,,,,,,118,,,118,118,118,118,118,118,118,118,118,118,,,,', -'118,124,124,118,118,,124,,124,118,124,,118,118,118,118,,,,,118,118,', -'118,,118,118,,118,,118,118,,,,,118,118,118,118,118,118,,,,,118,,,,,', -',,,,,119,,,119,119,119,119,119,119,119,119,119,119,,,,,119,118,118,119', -'119,,118,,118,119,118,,119,119,119,119,,,,,119,119,,119,,119,119,,119', -',119,119,,,,,119,119,119,119,119,119,,,,,119,,,,,,,,,,,120,,,120,120', -'120,120,120,120,120,120,120,120,,,,,120,119,119,120,120,,119,,119,120', -'119,,120,120,120,120,,,,,120,120,,120,,120,120,,120,,120,120,,,,,120', -'120,120,120,120,120,,,,,120,,,,,,,,,,,158,,,158,158,158,158,158,158', -'158,158,158,158,,,,,158,120,120,158,158,,120,,120,158,120,,158,158,158', -'158,,,,,158,158,,158,,158,158,,158,,158,158,,,,,158,158,158,158,158', -'158,,,,,158,,,,,,,,,,,157,,,157,157,157,157,157,157,157,157,157,157', -',,,,157,158,158,157,157,,158,,158,157,158,,157,157,157,157,,,,,157,157', -',157,,157,157,,157,,157,157,,,,,157,157,157,157,157,157,,,,,157,,,,', -',,,,,,155,,,155,155,155,155,155,155,155,155,155,155,,,,,155,157,157', -'155,155,,157,,157,155,157,,155,155,155,155,,,,,155,155,,155,,155,155', -',155,,155,155,298,,298,,155,155,155,155,155,155,240,,,,155,,240,240', -'240,240,240,240,240,240,240,240,240,240,240,,,,298,298,,,,298,,,,298', -',155,155,,,,155,,155,298,155,,,,,298,298,298,298,298,298,298,298,298', +'107,107,107,316,,316,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,316,316,,,,316,,,', +'316,,,,,,,,,,316,,,,,,,316,316,316,316,316,316,316,316,316,316,316,316', +'316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316', +'316,316,316,316,316,195,,195,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,195,195,,', +',195,,,,195,,,,,,,,,,195,,,,,,,195,195,195,195,195,195,195,195,195,195', +'195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195', +'195,195,195,195,195,195,195,317,,317,,,,,,,,,,,,,,,,,,,,,,,317,,,,,', +',317,317,,,,317,,,,317,,,,,,,,,,317,,,,,,,317,317,317,317,317,317,317', +'317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317', +'317,317,317,317,317,317,317,317,317,317,78,,78,,,,,,,,,,,,,,,,,,,,,', +',,,,,,,,78,78,,,,78,,,,78,,,,,,,,78,,78,,,,,,,78,78,78,78,78,78,78,78', +'78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78', +'78,78,78,181,,181,,,,,,,,,,,,,,,,,,,,,,,181,,,,,,,181,181,,,,181,,,', +'181,,,,,,,,,,181,,,,,,,181,181,181,181,181,181,181,181,181,181,181,181', +'181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181', +'181,181,181,181,181,180,,180,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,180,180,,', +',180,,,,180,,,,,,,,,,180,,,,,,,180,180,180,180,180,180,180,180,180,180', +'180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180', +'180,180,180,180,180,180,180,265,,265,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,265', +'265,,,,265,,,,265,,,,,,,,,,265,,,,,,,265,265,265,265,265,265,265,265', +'265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265', +'265,265,265,265,265,265,265,265,265,295,,295,,,,,,,,,,,,,,,,,,,,,,,', +',,,,,,295,295,,,,295,,,,295,,,,,,,,,,295,,,,,,,295,295,295,295,295,295', +'295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295', +'295,295,295,295,295,295,295,295,295,295,295,299,,299,,,,,,,,,,,,,,,', +',,,,,,,,,,,,,,299,299,,,,299,,,,299,,,,,,,,,,299,,,,,,,299,299,299,299', +'299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299', +'299,299,299,299,299,299,299,299,299,299,299,299,299,298,,298,,,,,,,', +',,,,,,,,,,,,,,,,,,,,,,298,298,,,,298,,,,298,,,,,,,,,,298,,,,,,,298,298', '298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298', -'298,298,298,298,298,298,298,298,311,,311,,,,,,,298,,160,160,160,160', -'160,160,160,160,160,160,,,,,,,,,,,,311,311,,,,311,160,160,,311,,,,,', -',,,,311,,160,,,160,311,311,311,311,311,311,311,311,311,311,311,311,311', -'311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311', -'311,311,311,311,,,,,,,,,,311,,,,,160,,160,,160,19,19,19,19,19,19,19', -'19,19,19,,,299,299,299,299,299,299,299,299,299,299,,,,,299,19,19,299', -'299,,,,,299,,,299,299,299,,19,,,19,,299,,299,,299,299,,299,,299,299', -',,,,299,299,299,299,299,299,230,,,,299,,230,230,230,230,230,230,230', -'230,230,230,230,230,230,,,,,,,,19,,19,,19,,,299,299,,,,299,,299,,299', -'309,309,309,309,309,309,309,309,309,309,,,,,309,,,309,309,,,,,309,,', -'309,309,309,,,,,,,309,,309,,309,309,,309,,309,309,,,,,309,309,309,309', -'309,309,225,,,,309,,225,225,225,225,225,225,225,225,225,225,,,23,23', -'23,23,23,23,23,23,23,23,,,,,23,309,309,23,23,,309,,309,23,309,,23,23', -'23,23,,,,,,23,,23,,23,23,,23,,23,23,272,,272,,23,23,23,23,23,23,236', -',,,23,,236,236,236,236,236,236,236,236,236,236,236,236,236,,,,272,272', -',,,272,,,,272,,23,23,,,,23,,23,272,23,,,,,272,272,272,272,272,272,272', -'272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272', -'272,272,272,272,272,272,272,272,272,272,264,229,264,,,,,229,229,229', -'229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229', -'229,,,,,264,264,,,,264,,,,264,,,,,,,,,,264,,,,,,264,264,264,264,264', -'264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264', -'264,264,264,264,264,264,264,264,264,264,264,264,269,217,269,,,,,217', -'217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217', -'217,217,217,,,,,269,269,,,,269,,,,269,,,,,,,,,,269,,,,,,269,269,269', -'269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269', -'269,269,269,269,269,269,269,269,269,269,269,269,269,269,80,224,80,,', -',,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224', -'224,224,224,224,,,,,80,80,,,,80,,,,80,,,,,,,,80,,80,,,,,,80,80,80,80', +'298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,80,,80,', +',,,,,,,,,,,,,,,,,,,,,,,,,,,,80,80,,,,80,,,,80,,,,,,,,80,,80,,,,,,,80', '80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80', -'80,80,80,80,80,80,80,79,212,79,,,,,212,212,212,212,212,212,212,212,212', -'212,212,212,212,212,212,212,212,212,212,212,212,,,,,79,79,,,,79,,,,79', -',,,,,,,79,,79,,,,,,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79', -'79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,77,220,77,,,,,220', -'220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220', -'220,220,220,,,,,77,77,,,,77,,,,77,,,,,,,,77,,77,,,,,,77,77,77,77,77', -'77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77', -'77,77,77,77,77,77,263,244,263,,,,,244,244,244,244,244,244,244,244,244', -'244,244,244,244,244,244,244,244,244,244,244,244,,,,,263,263,,,,263,', -',,263,,,,,,,,,,263,,,,,,263,263,263,263,263,263,263,263,263,263,263', -'263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263', -'263,263,263,263,263,263,292,233,292,,,,,233,233,233,233,233,233,233', -'233,233,233,233,233,233,,,,,,,,,,,,,292,292,,,,292,,,,292,,,,,,,,,,292', -',,,,,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292', -'292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292', -'292,63,227,63,,,,,227,227,227,227,227,227,227,227,227,227,,,,,,,,,,', -',,,,,63,63,,,,63,,,,63,,,,,,,,,,63,,,,,,63,63,63,63,63,63,63,63,63,63', -'63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63', -'63,296,221,296,,,,,221,221,221,221,221,221,221,221,221,221,,,,,,,,,', -',,,,,,296,296,,,,296,,,,296,,,,,,,,,,296,,,,,,296,296,296,296,296,296', -'296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296', -'296,296,296,296,296,296,296,296,296,296,296,297,,297,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,297,297,,,,297,,,,297,,,,,,,,,,297,,,,,,297,297,297,297', -'297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297', -'297,297,297,297,297,297,297,297,297,297,297,297,297,228,,228,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,228,228,,,,228,,,,228,,,,,,,,,,228,,,,,,228,228', +'80,80,80,80,80,80,80,80,80,80,266,,266,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', +'266,266,,,,266,,,,266,,,,,,,,,,266,,,,,,,266,266,266,266,266,266,266', +'266,266,266,266,266,266,266,266,266,266,266,266,266,266,266,266,266', +'266,266,266,266,266,266,266,266,266,266,88,88,,,,,,,,88,,,,,,,,,,88', +',,,,,,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88', +'88,88,88,88,88,88,88,88,88,88,88,88,88,250,250,,,,,,,,250,,,,,,,,,,250', +',,,,,,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250', +'250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250', +'250,228,228,,,,,,,,228,,,,,,,,,,228,,,,,,,228,228,228,228,228,228,228', '228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228', -'228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,222,,222', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,222,222,,,,222,,,,222,,,,,,,,,,222,,,,', -',222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222', -'222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222', -'308,,308,,,,,,,,,,,,,,,,,,,,,,,308,,,,,,,308,308,,,,308,,,,308,,,,,', -',,,,308,,,,,,308,308,308,308,308,308,308,308,308,308,308,308,308,308', -'308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308', -'308,308,308,214,,214,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,214,214,,,,214,,,', -'214,,,,,,,,,,214,,,,,,214,214,214,214,214,214,214,214,214,214,214,214', -'214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214', -'214,214,214,214,214,201,,201,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,201,201,,', -',201,,,,201,,,,,,,,,,201,,,,,,201,201,201,201,201,201,201,201,201,201', -'201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201', -'201,201,201,201,201,201,201,104,,104,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,104', -'104,,,,104,,,,104,,,,,,,,,,104,,,,,,104,104,104,104,104,104,104,104', +'228,228,228,228,228,228,228,113,113,,,,,,,,113,,,,,,,,,,113,,,,,,,113', +'113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113', +'113,113,113,113,113,113,113,113,113,113,113,113,113,225,225,,,,,,,,225', +',,,,,,,,,225,,,,,,,225,225,225,225,225,225,225,225,225,225,225,225,225', +'225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225', +'225,221,221,,,,,,,,221,,,,,,,,,,221,,,,,,,221,221,221,221,221,221,221', +'221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221', +'221,221,221,221,221,221,221,305,,,,,,,,305,,,,,,,,,,305,,,,,,,305,305', +'305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305', +'305,305,305,305,305,305,305,305,305,305,305,305,304,,,,,,,,304,,,,,', +',,,,304,,,,,,,304,304,304,304,304,304,304,304,304,304,304,304,304,304', +'304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304', +'218,,,,,,,,218,,,,,,,,,,218,,,,,,,218,218,218,218,218,218,218,218,218', +'218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218', +'218,218,218,218,218,282,,,,,,,,282,,,,,,,,,,282,,,,,,,282,282,282,282', +'282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282', +'282,282,282,282,282,282,282,282,282,282,281,,,,,,,,281,,,,,,,,,,281', +',,,,,,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281', +'281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,244,,,,', +',,,,,244,,,,,,,244,244,244,244,244,244,244,244,244,244,244,244,244,244', +'244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,86,', +',,,,,,,,86,,,,,,,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86', +'86,86,86,86,86,86,86,86,86,86,86,86,86,104,,,,,,,,,,104,,,,,,,104,104', '104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104', -'104,104,104,104,104,104,104,104,104,179,,179,,,,,,,,,,,,,,,,,,,,,,,179', -',,,,,,179,179,,,,179,,,,179,,,,,,,,,,179,,,,,,179,179,179,179,179,179', -'179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179', -'179,179,179,179,179,179,179,179,179,179,179,178,,178,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,178,178,,,,178,,,,178,,,,,,,,,,178,,,,,,178,178,178,178', -'178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178', -'178,178,178,178,178,178,178,178,178,178,178,178,178,314,,314,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,314,314,,,,314,,,,314,,,,,,,,,,314,,,,,,314,314', -'314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314', -'314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,193,,193', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,193,193,,,,193,,,,193,,,,,,,,,,193,,,,', -',193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193', -'193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193', -'316,,316,,,,,,,,,,,,,,,,,,,,,,,316,,,,,,,316,316,,,,316,,,,316,,,,,', -',,,,316,,,,,,316,316,316,316,316,316,316,316,316,316,316,316,316,316', -'316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316', -'316,316,316,248,248,,,,,,,,248,,,,,,,,,,248,,,,,,248,248,248,248,248', -'248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248', -'248,248,248,248,248,248,248,248,248,248,248,248,95,95,,,,,,,,95,,,,', -',,,,,95,,,,,,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95', -'95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,216,216,,,,,,,,216,,,,', -',,,,,216,,,,,,216,216,216,216,216,216,216,216,216,216,216,216,216,216', -'216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216', -'223,223,,,,,,,,223,,,,,,,,,,223,,,,,,223,223,223,223,223,223,223,223', -'223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223', -'223,223,223,223,223,223,219,219,,,,,,,,219,,,,,,,,,,219,,,,,,219,219', -'219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219', -'219,219,219,219,219,219,219,219,219,219,219,219,111,111,,,,,,,,111,', -',,,,,,,,111,,,,,,111,111,111,111,111,111,111,111,111,111,111,111,111', -'111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111', -'111,279,,,,,,,,279,,,,,,,,,,279,,,,,,279,279,279,279,279,279,279,279', -'279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279', -'279,279,279,279,279,279,302,,,,,,,,302,,,,,,,,,,302,,,,,,302,302,302', -'302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302', -'302,302,302,302,302,302,302,302,302,302,302,215,,,,,,,,215,,,,,,,,,', -'215,,,,,,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215', -'215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,303', -',,,,,,,303,,,,,,,,,,303,,,,,,303,303,303,303,303,303,303,303,303,303', -'303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303', -'303,303,303,303,280,,,,,,,,280,,,,,,,,,,280,,,,,,280,280,280,280,280', -'280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280', -'280,280,280,280,280,280,280,280,280,85,,,,,,,,,,85,,,,,,85,85,85,85', -'85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85', -'85,85,85,105,,,,,,,,,,105,,,,,,105,105,105,105,105,105,105,105,105,105', -'105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105', -'105,105,105,242,,,,,,,,,,242,,,,,,242,242,242,242,242,242,242,242,242', -'242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242', -'242,242,242,242,238,,,,,,238,238,238,238,238,238,238,238,238,238,238', -'238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238', -'238,238,235,,,,,,235,235,235,235,235,235,235,235,235,235,235,235,235', -'235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235', -'232,,,,,,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232', -'232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,243,,,,', -',243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243', -'243,243,243,243,243,243,243,243,243,243,243,243,243,207,,,,,,207,207', -'207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207', -'207,207,207,207,207,207,207,207,207,207,207' ] - racc_action_check = arr = Array.new(8898, nil) +'104,104,104,104,104,104,104,104,104,104,104,237,,,,,,,237,237,237,237', +'237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237', +'237,237,237,237,237,237,237,237,237,240,,,,,,,240,240,240,240,240,240', +'240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240', +'240,240,240,240,240,240,240,213,,,,,,,213,213,213,213,213,213,213,213', +'213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213', +'213,213,213,213,213,209,,,,,,,209,209,209,209,209,209,209,209,209,209', +'209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209', +'209,209,209,245,,,,,,,245,245,245,245,245,245,245,245,245,245,245,245', +'245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245', +'245' ] + racc_action_check = arr = Array.new(9160, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -696,342 +709,345 @@ def on_error(error_token_id, error_value, value_stack) end racc_action_pointer = [ - 4416, 269, nil, nil, 172, nil, 246, nil, nil, 320, - nil, 394, 468, nil, nil, 542, nil, nil, 616, 5725, - 764, nil, 505, 5910, 232, nil, nil, nil, nil, 1060, - 1134, nil, 252, nil, 1282, 1356, nil, nil, nil, nil, - 221, nil, nil, nil, nil, 245, nil, nil, nil, 1578, - nil, nil, nil, nil, nil, 53, 1726, nil, nil, 55, - nil, nil, 199, 6687, 157, -2, 143, nil, 2244, nil, - nil, 2318, nil, -3, -43, nil, 313, 6414, 535, 6323, - 6232, 519, 181, 394, 320, 8537, 3280, 3354, 182, nil, - 270, nil, 256, nil, nil, 7988, 20, nil, -70, 212, - nil, 212, 63, 4120, 7415, 8583, 4342, -2, 445, 294, - 16, 8215, 4812, 76, nil, nil, 164, 140, 5108, 5182, - 5256, 273, 205, 3872, 5034, 4886, 4738, 4516, 4194, 3798, - 3576, 3502, 3428, 3132, 3058, 2984, 2836, nil, 2762, 2614, - nil, 2540, 2096, 1948, 1874, 1800, 1652, 1504, 1208, 986, - 912, 838, -2, 690, 4046, 5478, 98, 5404, 5330, nil, - 5626, nil, 4960, nil, nil, -1, nil, 246, nil, 387, - 297, 182, 39, 77, nil, nil, -22, 146, 7597, 7506, - nil, nil, nil, 4664, 4590, 92, nil, 201, 113, nil, - nil, 4268, 3946, 7779, -50, 71, nil, 4, 14, -26, - nil, 7324, nil, 125, 3724, 3650, -2, 8809, 4424, 402, - 285, 75, 6273, 328, 7233, 8380, 8047, 6091, 254, 8159, - 6364, 6728, 7051, 8103, 6182, 5844, 3954, 6637, 6960, 6000, - 5745, 371, 8737, 6546, 65, 8701, 5918, 239, 8665, nil, - 5486, 479, 8629, 8773, 6455, 550, 468, 519, 7929, nil, - nil, nil, nil, nil, 184, 131, 286, 184, nil, 3206, - nil, 27, nil, 6505, 6050, nil, nil, nil, 233, 6141, - 2910, 2688, 5959, 2466, nil, 1, 47, nil, nil, 8270, - 8490, 2392, 2170, nil, 186, nil, nil, nil, 73, 119, - nil, nil, 6596, 43, 2022, nil, 6778, 6869, 5527, 5737, - nil, nil, 8325, 8435, nil, 212, 39, 1430, 7142, 5836, - nil, 5618, nil, nil, 7688, nil, 7870, nil, nil ] + 4700, 340, nil, nil, 174, nil, 249, nil, nil, 324, + nil, 399, 474, nil, nil, 549, nil, nil, nil, 624, + nil, -2, 774, nil, 849, 6008, nil, 324, nil, 235, + nil, nil, 1149, nil, 1224, 243, nil, 1374, nil, nil, + 1449, nil, nil, 202, nil, nil, 1599, nil, nil, nil, + nil, nil, 1674, 215, nil, nil, nil, nil, nil, 1824, + nil, nil, 219, nil, nil, nil, 152, 203, 6272, -22, + -2, 37, nil, 2424, nil, -38, -5, 185, 7376, 317, + 8020, 6548, 301, 242, 399, 474, 8838, 392, 8172, nil, + 3575, 3650, 229, 276, nil, 278, nil, nil, 210, nil, + 231, 236, nil, 53, 8885, 71, 4400, 7008, 4550, 451, + -2, 196, 64, 8349, 342, 64, nil, 5176, 260, 101, + nil, 5401, 5476, 5551, 351, 3500, 1524, 1299, 999, 277, + 699, 4175, 2975, 924, 4625, 5326, 5251, 5101, 5026, 4951, + 4876, 4801, 5626, nil, 4475, 4325, 4250, nil, 99, 4100, + 4025, 3950, 3875, 3800, 3725, 6074, 3425, 3350, 3275, 3200, + 3125, 3050, nil, nil, 6130, nil, 2900, nil, nil, 91, + nil, 219, 467, 120, 184, 232, nil, nil, 188, 74, + 7560, 7468, nil, nil, nil, 2825, 2750, 93, 114, nil, + 230, 2649, nil, nil, 2574, 7192, 108, -2, nil, 159, + 163, 102, nil, nil, 6180, 133, 2499, 2349, -17, 9033, + 6590, -7, 79, 8996, 6498, 408, 6824, -52, 8631, 4709, + 333, 8463, 6406, 258, 6640, 8406, 5720, 6092, 8292, 6126, + 6866, 6456, 2658, 5942, 6222, 5635, 167, 8922, 6774, -18, + 8959, nil, 6314, 376, 8791, 9070, 6682, 483, 2, 249, + 8232, nil, nil, nil, nil, -54, nil, -24, 150, 126, + nil, 2274, nil, -65, nil, 7652, 8112, nil, nil, 203, + nil, 2199, 2124, 6732, 6916, 2049, nil, 68, 89, nil, + nil, 8743, 8687, nil, 1974, 1899, 275, nil, nil, nil, + -2, 149, nil, nil, -50, 7744, 1749, nil, 7928, 7836, + 5933, 5768, nil, nil, 8575, 8519, nil, 245, 37, 1074, + 5867, 6364, 5676, nil, nil, nil, 7100, 7284, nil, nil, + nil ] racc_action_default = [ - -1, -182, -97, -11, -182, -106, -182, -26, -12, -182, - -107, -182, -182, -27, -13, -182, -108, -14, -182, -182, - -182, -15, -124, -46, -118, -16, -28, -17, -29, -137, - -182, -31, -182, -18, -182, -182, -126, -35, -19, -36, - -182, -34, -20, -37, -21, -182, -47, -22, -38, -182, - -2, -30, -23, -39, -32, -3, -182, -104, -40, -182, - -103, -33, -182, -5, -182, -8, -175, -9, -182, -96, - -10, -182, -105, -182, -100, -98, -49, -154, -52, -182, - -182, -54, -53, -182, -125, -55, -137, -182, -182, -110, - -182, -114, -182, -115, -129, -45, -182, -44, -182, -118, - -119, -182, -182, -182, -138, -56, -137, -182, -50, -182, - -182, -151, -7, -182, -25, -4, -158, -182, -182, -182, - -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, - -182, -182, -182, -182, -182, -182, -182, -58, -182, -182, - -57, -182, -182, -182, -182, -182, -182, -182, -182, -182, - -182, -182, -93, -182, -182, -182, -182, -182, -182, -95, - -182, -109, -182, -128, -179, -182, -173, -175, -177, -51, - -48, -182, -182, -182, -153, -171, -182, -182, -138, -182, - -111, -112, -113, -182, -182, -182, -117, -182, -182, -136, - -144, -182, -182, -139, -182, -182, -152, -147, -182, -182, - 319, -6, -24, -182, -182, -182, -182, -87, -75, -64, - -182, -182, -76, -65, -180, -92, -88, -77, -66, -89, - -78, -67, -181, -90, -79, -68, -80, -69, -155, -81, - -70, -59, -83, -71, -60, -84, -72, -61, -85, -82, - -73, -62, -91, -86, -74, -63, -127, -182, -41, -172, - -176, -174, -178, -99, -182, -182, -182, -182, -166, -182, - -130, -182, -116, -42, -43, -123, -121, -120, -182, -141, - -182, -182, -140, -182, -131, -182, -182, -148, -159, -160, - -161, -182, -182, -157, -156, -102, -94, -101, -182, -182, - -167, -164, -145, -182, -182, -122, -142, -143, -182, -102, - -149, -150, -163, -162, -170, -182, -168, -182, -182, -102, - -132, -182, -165, -169, -146, -134, -182, -133, -135 ] + -1, -183, -97, -10, -183, -106, -183, -98, -11, -183, + -107, -183, -183, -26, -12, -183, -108, -27, -13, -183, + -109, -183, -183, -14, -183, -46, -15, -125, -28, -119, + -16, -29, -183, -31, -138, -183, -17, -183, -35, -18, + -183, -127, -36, -183, -34, -19, -183, -37, -20, -47, + -21, -38, -183, -183, -30, -22, -39, -32, -2, -183, + -23, -40, -3, -105, -104, -33, -183, -183, -5, -183, + -8, -176, -9, -183, -99, -101, -183, -48, -155, -49, + -183, -183, -53, -55, -183, -126, -56, -54, -45, -130, + -138, -183, -183, -183, -111, -183, -115, -116, -183, -44, + -183, -119, -120, -183, -57, -183, -183, -139, -138, -51, + -183, -183, -50, -152, -183, -183, -25, -7, -159, -183, + -4, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -59, -183, -183, -183, -58, -183, -183, + -183, -183, -183, -183, -183, -94, -183, -183, -183, -183, + -183, -183, -96, -129, -183, -110, -183, -178, -180, -183, + -174, -176, -52, -183, -183, -183, -154, -172, -183, -183, + -139, -183, -112, -113, -114, -183, -183, -183, -183, -118, + -183, -183, -137, -145, -183, -140, -183, -183, -153, -148, + -183, -183, 321, -24, -6, -183, -183, -183, -183, -87, + -75, -64, -183, -88, -76, -65, -181, -183, -93, -77, + -66, -89, -78, -67, -182, -90, -79, -68, -91, -80, + -69, -156, -81, -70, -82, -71, -60, -84, -72, -61, + -85, -83, -73, -62, -92, -86, -74, -63, -128, -183, + -41, -177, -173, -179, -175, -183, -100, -183, -183, -183, + -167, -183, -131, -183, -117, -42, -43, -124, -121, -183, + -122, -183, -183, -141, -142, -183, -132, -183, -183, -149, + -160, -161, -162, -158, -183, -183, -157, -103, -102, -95, + -183, -183, -168, -165, -183, -146, -183, -123, -143, -144, + -103, -183, -150, -151, -164, -163, -171, -183, -169, -183, + -103, -183, -183, -133, -166, -170, -147, -183, -135, -134, + -136 ] racc_goto_table = [ - 50, 161, 163, 59, 258, 206, 75, 76, 101, 77, - 168, 97, 78, 166, 79, 80, 266, 267, 81, 161, - 163, 82, 102, 85, 45, 83, 95, 293, 84, 117, - 257, 55, 104, 105, 197, 249, 254, 107, 108, 167, - 73, 164, nil, 109, nil, nil, nil, nil, nil, nil, - nil, nil, 111, nil, nil, 112, nil, nil, nil, 115, - nil, nil, nil, nil, nil, nil, nil, 159, nil, nil, - nil, 169, nil, nil, 170, nil, nil, nil, nil, 177, - 174, nil, 175, 185, nil, 290, 97, 113, 210, 178, - 179, nil, nil, nil, nil, nil, nil, 295, 284, 195, - nil, 187, nil, nil, nil, nil, 193, nil, nil, 178, - nil, 252, nil, 112, 251, 201, 304, nil, nil, nil, - nil, 207, 208, 209, nil, nil, 212, 213, 214, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - nil, 226, 227, nil, 228, 229, 230, 231, 232, 233, - 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, - 244, 245, nil, 256, nil, 248, 246, nil, 250, 247, - nil, nil, nil, nil, 97, 97, 253, nil, nil, nil, - nil, nil, 161, 163, nil, 187, 263, 264, 268, nil, - nil, nil, 270, nil, 269, 272, nil, nil, nil, nil, - nil, nil, 277, nil, nil, nil, nil, 279, 280, 283, + 58, 74, 260, 208, 67, 167, 165, 163, 77, 170, + 78, 62, 268, 79, 270, 80, 81, 99, 105, 82, + 165, 163, 119, 83, 84, 85, 86, 103, 87, 88, + 53, 294, 259, 199, 252, 257, 104, 171, 107, 76, + 168, 109, nil, nil, 110, nil, nil, 111, nil, nil, + 112, nil, nil, nil, nil, nil, 113, nil, nil, nil, + nil, nil, 117, nil, nil, nil, nil, 120, nil, nil, + 115, nil, nil, 162, 179, nil, nil, 172, nil, nil, + 212, nil, 176, 292, 177, nil, nil, nil, nil, 99, + nil, nil, 197, 297, 180, 181, 286, nil, nil, 187, + nil, nil, nil, 190, nil, 253, nil, nil, nil, 254, + 195, nil, 180, nil, 306, 117, nil, nil, nil, nil, + nil, 204, nil, nil, nil, 209, 210, 211, nil, 213, + 214, 215, 216, nil, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, nil, 231, 232, + 233, nil, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 258, 248, 249, nil, + 250, nil, nil, 251, 256, nil, 99, nil, 99, nil, + nil, nil, nil, nil, 165, 163, nil, 190, 269, 265, + 266, 271, nil, nil, nil, 273, nil, nil, 274, nil, + nil, nil, nil, nil, nil, 279, nil, nil, nil, nil, + 281, 282, 283, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 256, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 97, 288, 286, nil, nil, - nil, nil, 292, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 296, 297, 256, 298, nil, 300, 301, - nil, nil, nil, nil, 302, 303, nil, nil, nil, nil, - nil, nil, 305, nil, nil, nil, 306, 308, nil, nil, - nil, nil, 311, nil, nil, nil, 313, nil, nil, nil, - 314, nil, 316 ] + nil, nil, nil, nil, nil, nil, nil, 258, nil, nil, + nil, nil, nil, nil, nil, nil, nil, 99, 290, nil, + nil, 289, nil, nil, nil, 295, nil, nil, nil, nil, + nil, nil, nil, nil, nil, 298, 299, nil, 258, 301, + nil, 302, 303, nil, nil, nil, nil, nil, 304, 305, + nil, nil, nil, nil, nil, 307, nil, nil, 308, nil, + 311, nil, nil, nil, 312, nil, nil, nil, 315, nil, + nil, nil, nil, 316, 317 ] racc_goto_check = [ - 2, 31, 37, 4, 44, 42, 26, 5, 35, 5, - 48, 21, 5, 46, 5, 5, 23, 23, 5, 31, - 37, 5, 38, 5, 1, 6, 5, 39, 32, 41, - 43, 3, 5, 5, 40, 45, 25, 5, 5, 47, - 24, 49, nil, 4, nil, nil, nil, nil, nil, nil, - nil, nil, 5, nil, nil, 2, nil, nil, nil, 2, - nil, nil, nil, nil, nil, nil, nil, 4, nil, nil, - nil, 5, nil, nil, 5, nil, nil, nil, nil, 38, - 4, nil, 4, 35, nil, 44, 21, 3, 41, 5, - 5, nil, nil, nil, nil, nil, nil, 23, 42, 38, - nil, 2, nil, nil, nil, nil, 5, nil, nil, 5, - nil, 48, nil, 2, 46, 5, 44, nil, nil, nil, - nil, 5, 5, 5, nil, nil, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - nil, 5, 5, nil, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, nil, 21, nil, 5, 6, nil, 4, 32, - nil, nil, nil, nil, 21, 21, 26, nil, nil, nil, - nil, nil, 31, 37, nil, 2, 5, 5, 2, nil, - nil, nil, 2, nil, 5, 5, nil, nil, nil, nil, - nil, nil, 4, nil, nil, nil, nil, 5, 5, 4, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 2, 26, 44, 42, 4, 48, 31, 37, 5, 46, + 5, 3, 23, 5, 23, 5, 5, 21, 38, 5, + 31, 37, 41, 5, 6, 32, 5, 35, 5, 5, + 1, 39, 43, 40, 45, 25, 5, 47, 5, 24, + 49, 5, nil, nil, 5, nil, nil, 4, nil, nil, + 5, nil, nil, nil, nil, nil, 5, nil, nil, nil, + nil, nil, 2, nil, nil, nil, nil, 2, nil, nil, + 3, nil, nil, 4, 38, nil, nil, 5, nil, nil, + 41, nil, 4, 44, 4, nil, nil, nil, nil, 21, + nil, nil, 38, 23, 5, 5, 42, nil, nil, 35, + nil, nil, nil, 2, nil, 48, nil, nil, nil, 46, + 5, nil, 5, nil, 44, 2, nil, nil, nil, nil, + nil, 5, nil, nil, nil, 5, 5, 5, nil, 5, + 5, 5, 5, nil, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, nil, 5, 5, + 5, nil, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 21, 6, 32, nil, + 5, nil, nil, 4, 26, nil, 21, nil, 21, nil, + nil, nil, nil, nil, 31, 37, nil, 2, 2, 5, + 5, 2, nil, nil, nil, 5, nil, nil, 5, nil, + nil, nil, nil, nil, nil, 4, nil, nil, nil, nil, + 5, 5, 4, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 21, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 21, 2, 4, nil, nil, - nil, nil, 5, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 5, 5, 21, 5, nil, 4, 4, - nil, nil, nil, nil, 5, 5, nil, nil, nil, nil, - nil, nil, 4, nil, nil, nil, 4, 5, nil, nil, - nil, nil, 5, nil, nil, nil, 2, nil, nil, nil, - 5, nil, 5 ] + nil, nil, nil, nil, nil, nil, nil, 21, nil, nil, + nil, nil, nil, nil, nil, nil, nil, 21, 2, nil, + nil, 4, nil, nil, nil, 5, nil, nil, nil, nil, + nil, nil, nil, nil, nil, 5, 5, nil, 21, 5, + nil, 4, 4, nil, nil, nil, nil, nil, 5, 5, + nil, nil, nil, nil, nil, 4, nil, nil, 4, nil, + 5, nil, nil, nil, 5, nil, nil, nil, 2, nil, + nil, nil, nil, 5, 5 ] racc_goto_pointer = [ - nil, 24, 0, 31, 3, 3, 6, nil, nil, nil, + nil, 30, 0, 11, 4, 4, 3, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, -13, nil, -171, 39, -136, 5, nil, nil, nil, - nil, -64, 9, nil, nil, -16, nil, -63, -7, -232, - -75, -33, -112, -146, -172, -130, -53, -27, -56, -25 ] + nil, -12, nil, -176, 38, -140, 0, nil, nil, nil, + nil, -64, 4, nil, nil, -2, nil, -63, -16, -230, + -78, -44, -116, -146, -176, -135, -62, -34, -66, -31 ] racc_goto_default = [ - nil, nil, 191, nil, nil, 63, 65, 67, 70, 3, - 8, 14, 17, 21, 25, 27, 33, 38, 42, 44, - 47, 52, 57, 100, nil, 64, nil, 72, 5, 10, - 16, 89, 22, 91, 93, nil, 36, 94, nil, nil, - nil, nil, nil, nil, nil, 66, nil, nil, nil, nil ] + nil, nil, 194, nil, nil, 68, 70, 72, 3, 8, + 14, 18, 23, 26, 30, 36, 39, 45, 48, 50, + 55, 60, 63, 102, nil, 69, nil, 5, 10, 16, + 20, 94, 27, 96, 97, nil, 41, 89, nil, nil, + nil, nil, nil, nil, nil, 71, nil, nil, nil, nil ] racc_reduce_table = [ 0, 0, :racc_error, - 0, 106, :_reduce_1, - 1, 106, :_reduce_2, - 1, 106, :_reduce_3, - 2, 106, :_reduce_4, - 1, 108, :_reduce_5, - 3, 108, :_reduce_6, - 2, 108, :_reduce_7, - 1, 110, :_reduce_none, - 1, 110, :_reduce_none, - 1, 110, :_reduce_none, - 1, 110, :_reduce_none, - 1, 110, :_reduce_none, - 1, 110, :_reduce_none, - 1, 110, :_reduce_none, - 1, 110, :_reduce_none, - 1, 110, :_reduce_none, - 1, 110, :_reduce_none, - 1, 110, :_reduce_none, - 1, 110, :_reduce_none, - 1, 110, :_reduce_none, - 1, 110, :_reduce_none, - 1, 110, :_reduce_none, - 1, 110, :_reduce_none, - 3, 109, :_reduce_24, - 2, 109, :_reduce_25, - 1, 107, :_reduce_none, - 1, 107, :_reduce_none, - 1, 127, :_reduce_28, - 1, 127, :_reduce_29, - 1, 127, :_reduce_30, - 1, 127, :_reduce_31, - 1, 127, :_reduce_32, - 1, 127, :_reduce_33, - 1, 127, :_reduce_34, - 1, 127, :_reduce_35, - 1, 127, :_reduce_36, - 1, 127, :_reduce_37, - 1, 127, :_reduce_38, - 1, 127, :_reduce_39, - 1, 127, :_reduce_40, - 3, 115, :_reduce_41, - 3, 128, :_reduce_42, - 3, 128, :_reduce_43, - 1, 128, :_reduce_44, - 2, 119, :_reduce_45, - 1, 119, :_reduce_46, - 1, 126, :_reduce_47, - 2, 114, :_reduce_48, - 2, 114, :_reduce_49, - 2, 114, :_reduce_50, - 2, 114, :_reduce_51, - 2, 114, :_reduce_52, - 2, 114, :_reduce_53, - 2, 114, :_reduce_54, - 2, 114, :_reduce_55, - 2, 114, :_reduce_56, - 2, 114, :_reduce_57, - 2, 114, :_reduce_58, - 3, 114, :_reduce_59, - 3, 114, :_reduce_60, - 3, 114, :_reduce_61, - 3, 114, :_reduce_62, - 3, 114, :_reduce_63, - 3, 114, :_reduce_64, - 3, 114, :_reduce_65, - 3, 114, :_reduce_66, - 3, 114, :_reduce_67, - 3, 114, :_reduce_68, - 3, 114, :_reduce_69, - 3, 114, :_reduce_70, - 3, 114, :_reduce_71, - 3, 114, :_reduce_72, - 3, 114, :_reduce_73, - 3, 114, :_reduce_74, - 3, 114, :_reduce_75, - 3, 114, :_reduce_76, - 3, 114, :_reduce_77, - 3, 114, :_reduce_78, - 3, 114, :_reduce_79, - 3, 114, :_reduce_80, - 3, 114, :_reduce_81, - 3, 114, :_reduce_82, - 3, 114, :_reduce_83, - 3, 114, :_reduce_84, - 3, 114, :_reduce_85, - 3, 114, :_reduce_86, - 3, 114, :_reduce_87, - 3, 114, :_reduce_88, - 3, 114, :_reduce_89, - 3, 114, :_reduce_90, - 3, 114, :_reduce_91, - 3, 114, :_reduce_92, - 2, 125, :_reduce_93, - 5, 113, :_reduce_94, - 2, 113, :_reduce_95, - 1, 130, :_reduce_96, - 1, 130, :_reduce_97, - 1, 129, :_reduce_98, - 3, 129, :_reduce_99, - 1, 131, :_reduce_none, - 4, 131, :_reduce_101, - 4, 124, :_reduce_102, - 1, 111, :_reduce_103, - 1, 111, :_reduce_104, - 1, 111, :_reduce_105, - 1, 111, :_reduce_106, - 1, 111, :_reduce_107, - 1, 111, :_reduce_108, - 2, 111, :_reduce_109, - 2, 111, :_reduce_110, - 2, 136, :_reduce_111, - 2, 136, :_reduce_112, - 2, 136, :_reduce_113, - 1, 136, :_reduce_114, - 1, 136, :_reduce_115, - 3, 138, :_reduce_116, - 3, 133, :_reduce_117, - 0, 140, :_reduce_118, - 1, 140, :_reduce_119, - 3, 140, :_reduce_120, - 3, 140, :_reduce_121, - 4, 140, :_reduce_122, - 3, 140, :_reduce_123, - 1, 112, :_reduce_124, - 2, 112, :_reduce_125, - 1, 112, :_reduce_126, - 3, 123, :_reduce_127, - 2, 137, :_reduce_128, - 2, 137, :_reduce_129, - 3, 142, :_reduce_130, - 4, 141, :_reduce_131, - 6, 135, :_reduce_132, - 7, 135, :_reduce_133, - 6, 139, :_reduce_134, - 7, 139, :_reduce_135, - 3, 132, :_reduce_136, - 0, 143, :_reduce_137, - 1, 143, :_reduce_138, - 2, 143, :_reduce_139, - 3, 143, :_reduce_140, - 3, 143, :_reduce_141, - 4, 143, :_reduce_142, - 4, 143, :_reduce_143, - 2, 143, :_reduce_144, - 1, 144, :_reduce_145, - 3, 144, :_reduce_146, - 3, 117, :_reduce_147, - 4, 117, :_reduce_148, - 5, 117, :_reduce_149, - 3, 145, :_reduce_150, - 2, 118, :_reduce_151, - 3, 134, :_reduce_152, - 3, 120, :_reduce_153, - 2, 120, :_reduce_154, - 3, 120, :_reduce_155, - 4, 121, :_reduce_156, - 4, 121, :_reduce_157, - 1, 146, :_reduce_158, - 3, 146, :_reduce_159, - 2, 147, :_reduce_160, - 2, 147, :_reduce_161, - 3, 147, :_reduce_162, - 3, 147, :_reduce_163, - 5, 122, :_reduce_164, - 7, 122, :_reduce_165, - 1, 148, :_reduce_166, - 2, 148, :_reduce_167, - 3, 149, :_reduce_168, - 4, 149, :_reduce_169, - 3, 149, :_reduce_170, + 0, 107, :_reduce_1, + 1, 107, :_reduce_2, + 1, 107, :_reduce_3, + 2, 107, :_reduce_4, + 1, 109, :_reduce_5, + 3, 109, :_reduce_6, + 2, 109, :_reduce_7, + 1, 111, :_reduce_none, + 1, 111, :_reduce_none, + 1, 111, :_reduce_none, + 1, 111, :_reduce_none, + 1, 111, :_reduce_none, + 1, 111, :_reduce_none, + 1, 111, :_reduce_none, + 1, 111, :_reduce_none, + 1, 111, :_reduce_none, + 1, 111, :_reduce_none, + 1, 111, :_reduce_none, + 1, 111, :_reduce_none, + 1, 111, :_reduce_none, + 1, 111, :_reduce_none, + 1, 111, :_reduce_none, + 1, 111, :_reduce_none, + 3, 110, :_reduce_24, + 2, 110, :_reduce_25, + 1, 108, :_reduce_none, + 1, 108, :_reduce_none, + 1, 128, :_reduce_28, + 1, 128, :_reduce_29, + 1, 128, :_reduce_30, + 1, 128, :_reduce_31, + 1, 128, :_reduce_32, + 1, 128, :_reduce_33, + 1, 128, :_reduce_34, + 1, 128, :_reduce_35, + 1, 128, :_reduce_36, + 1, 128, :_reduce_37, + 1, 128, :_reduce_38, + 1, 128, :_reduce_39, + 1, 128, :_reduce_40, + 3, 116, :_reduce_41, + 3, 129, :_reduce_42, + 3, 129, :_reduce_43, + 1, 129, :_reduce_44, + 2, 120, :_reduce_45, + 1, 120, :_reduce_46, + 1, 127, :_reduce_47, + 2, 115, :_reduce_48, + 2, 115, :_reduce_49, + 2, 115, :_reduce_50, + 2, 115, :_reduce_51, + 2, 115, :_reduce_52, + 2, 115, :_reduce_53, + 2, 115, :_reduce_54, + 2, 115, :_reduce_55, + 2, 115, :_reduce_56, + 2, 115, :_reduce_57, + 2, 115, :_reduce_58, + 2, 115, :_reduce_59, + 3, 115, :_reduce_60, + 3, 115, :_reduce_61, + 3, 115, :_reduce_62, + 3, 115, :_reduce_63, + 3, 115, :_reduce_64, + 3, 115, :_reduce_65, + 3, 115, :_reduce_66, + 3, 115, :_reduce_67, + 3, 115, :_reduce_68, + 3, 115, :_reduce_69, + 3, 115, :_reduce_70, + 3, 115, :_reduce_71, + 3, 115, :_reduce_72, + 3, 115, :_reduce_73, + 3, 115, :_reduce_74, + 3, 115, :_reduce_75, + 3, 115, :_reduce_76, + 3, 115, :_reduce_77, + 3, 115, :_reduce_78, + 3, 115, :_reduce_79, + 3, 115, :_reduce_80, + 3, 115, :_reduce_81, + 3, 115, :_reduce_82, + 3, 115, :_reduce_83, + 3, 115, :_reduce_84, + 3, 115, :_reduce_85, + 3, 115, :_reduce_86, + 3, 115, :_reduce_87, + 3, 115, :_reduce_88, + 3, 115, :_reduce_89, + 3, 115, :_reduce_90, + 3, 115, :_reduce_91, + 3, 115, :_reduce_92, + 3, 115, :_reduce_93, + 2, 126, :_reduce_94, + 5, 114, :_reduce_95, + 2, 114, :_reduce_96, + 1, 131, :_reduce_97, + 1, 131, :_reduce_98, + 1, 130, :_reduce_99, + 3, 130, :_reduce_100, + 1, 132, :_reduce_none, + 4, 132, :_reduce_102, + 4, 125, :_reduce_103, + 1, 112, :_reduce_104, + 1, 112, :_reduce_105, + 1, 112, :_reduce_106, + 1, 112, :_reduce_107, + 1, 112, :_reduce_108, + 1, 112, :_reduce_109, + 2, 112, :_reduce_110, + 2, 112, :_reduce_111, + 2, 137, :_reduce_112, + 2, 137, :_reduce_113, + 2, 137, :_reduce_114, + 1, 137, :_reduce_115, + 1, 137, :_reduce_116, + 3, 139, :_reduce_117, + 3, 134, :_reduce_118, + 0, 141, :_reduce_119, + 1, 141, :_reduce_120, + 3, 141, :_reduce_121, + 3, 141, :_reduce_122, + 4, 141, :_reduce_123, + 3, 141, :_reduce_124, + 1, 113, :_reduce_125, + 2, 113, :_reduce_126, + 1, 113, :_reduce_127, + 3, 124, :_reduce_128, + 2, 138, :_reduce_129, + 2, 138, :_reduce_130, + 3, 143, :_reduce_131, + 4, 142, :_reduce_132, + 6, 136, :_reduce_133, + 7, 136, :_reduce_134, + 6, 140, :_reduce_135, + 7, 140, :_reduce_136, + 3, 133, :_reduce_137, + 0, 144, :_reduce_138, + 1, 144, :_reduce_139, + 2, 144, :_reduce_140, + 3, 144, :_reduce_141, + 3, 144, :_reduce_142, + 4, 144, :_reduce_143, + 4, 144, :_reduce_144, + 2, 144, :_reduce_145, + 1, 145, :_reduce_146, + 3, 145, :_reduce_147, + 3, 118, :_reduce_148, + 4, 118, :_reduce_149, + 5, 118, :_reduce_150, + 3, 146, :_reduce_151, + 2, 119, :_reduce_152, + 3, 135, :_reduce_153, + 3, 121, :_reduce_154, + 2, 121, :_reduce_155, + 3, 121, :_reduce_156, + 4, 122, :_reduce_157, + 4, 122, :_reduce_158, + 1, 147, :_reduce_159, + 3, 147, :_reduce_160, + 2, 148, :_reduce_161, + 2, 148, :_reduce_162, + 3, 148, :_reduce_163, + 3, 148, :_reduce_164, + 5, 123, :_reduce_165, + 7, 123, :_reduce_166, + 1, 149, :_reduce_167, + 2, 149, :_reduce_168, + 3, 150, :_reduce_169, + 4, 150, :_reduce_170, 3, 150, :_reduce_171, - 2, 151, :_reduce_172, - 1, 152, :_reduce_173, - 2, 152, :_reduce_174, - 0, 153, :_reduce_175, - 2, 153, :_reduce_176, - 1, 154, :_reduce_177, - 2, 154, :_reduce_178, - 2, 116, :_reduce_179, - 3, 116, :_reduce_180, - 3, 116, :_reduce_181 ] - -racc_reduce_n = 182 - -racc_shift_n = 319 + 3, 151, :_reduce_172, + 2, 152, :_reduce_173, + 1, 153, :_reduce_174, + 2, 153, :_reduce_175, + 0, 154, :_reduce_176, + 2, 154, :_reduce_177, + 1, 155, :_reduce_178, + 2, 155, :_reduce_179, + 2, 117, :_reduce_180, + 3, 117, :_reduce_181, + 3, 117, :_reduce_182 ] + +racc_reduce_n = 183 + +racc_shift_n = 321 racc_token_table = { false => 0, @@ -1089,58 +1105,59 @@ def on_error(error_token_id, error_value, value_stack) :OUTDENT => 52, "?" => 53, :UMINUS => 54, - :NOT => 55, - "!" => 56, - "!!" => 57, - "~" => 58, - "++" => 59, - "--" => 60, - "*" => 61, - "/" => 62, - "%" => 63, - "+" => 64, - "-" => 65, - "<<" => 66, - ">>" => 67, - ">>>" => 68, - "&" => 69, - "|" => 70, - "^" => 71, - "<=" => 72, - "<" => 73, - ">" => 74, - ">=" => 75, - "==" => 76, - "!=" => 77, - :IS => 78, - :ISNT => 79, - "&&" => 80, - "||" => 81, - :AND => 82, - :OR => 83, - "-=" => 84, - "+=" => 85, - "/=" => 86, - "*=" => 87, - "%=" => 88, - "." => 89, - "||=" => 90, - "&&=" => 91, - "?=" => 92, - :ASSIGN => 93, - "->" => 94, - "=>" => 95, - "\n" => 96, - ";" => 97, - "," => 98, - "{" => 99, - "}" => 100, - "[" => 101, - "]" => 102, - "(" => 103, - ")" => 104 } - -racc_nt_base = 105 + :UPLUS => 55, + :NOT => 56, + "!" => 57, + "!!" => 58, + "~" => 59, + "++" => 60, + "--" => 61, + "*" => 62, + "/" => 63, + "%" => 64, + "+" => 65, + "-" => 66, + "<<" => 67, + ">>" => 68, + ">>>" => 69, + "&" => 70, + "|" => 71, + "^" => 72, + "<=" => 73, + "<" => 74, + ">" => 75, + ">=" => 76, + "==" => 77, + "!=" => 78, + :IS => 79, + :ISNT => 80, + "&&" => 81, + "||" => 82, + :AND => 83, + :OR => 84, + "-=" => 85, + "+=" => 86, + "/=" => 87, + "*=" => 88, + "%=" => 89, + "." => 90, + "||=" => 91, + "&&=" => 92, + "?=" => 93, + :ASSIGN => 94, + "->" => 95, + "=>" => 96, + "\n" => 97, + ";" => 98, + "," => 99, + "{" => 100, + "}" => 101, + "[" => 102, + "]" => 103, + "(" => 104, + ")" => 105 } + +racc_nt_base = 106 racc_use_result_var = true @@ -1216,6 +1233,7 @@ def on_error(error_token_id, error_value, value_stack) "OUTDENT", "\"?\"", "UMINUS", + "UPLUS", "NOT", "\"!\"", "\"!!\"", @@ -1627,7 +1645,7 @@ def _reduce_56(val, _values, result) module_eval(<<'.,.,', 'grammar.y', 149) def _reduce_57(val, _values, result) - result = OpNode.new(val[1], val[0], nil, true) + result = OpNode.new(val[0], val[1]) result end .,., @@ -1639,9 +1657,9 @@ def _reduce_58(val, _values, result) end .,., -module_eval(<<'.,.,', 'grammar.y', 152) +module_eval(<<'.,.,', 'grammar.y', 151) def _reduce_59(val, _values, result) - result = OpNode.new(val[1], val[0], val[2]) + result = OpNode.new(val[1], val[0], nil, true) result end .,., @@ -1660,7 +1678,7 @@ def _reduce_61(val, _values, result) end .,., -module_eval(<<'.,.,', 'grammar.y', 156) +module_eval(<<'.,.,', 'grammar.y', 155) def _reduce_62(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result @@ -1674,7 +1692,7 @@ def _reduce_63(val, _values, result) end .,., -module_eval(<<'.,.,', 'grammar.y', 159) +module_eval(<<'.,.,', 'grammar.y', 158) def _reduce_64(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result @@ -1695,7 +1713,7 @@ def _reduce_66(val, _values, result) end .,., -module_eval(<<'.,.,', 'grammar.y', 163) +module_eval(<<'.,.,', 'grammar.y', 162) def _reduce_67(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result @@ -1716,7 +1734,7 @@ def _reduce_69(val, _values, result) end .,., -module_eval(<<'.,.,', 'grammar.y', 167) +module_eval(<<'.,.,', 'grammar.y', 166) def _reduce_70(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result @@ -1744,7 +1762,7 @@ def _reduce_73(val, _values, result) end .,., -module_eval(<<'.,.,', 'grammar.y', 172) +module_eval(<<'.,.,', 'grammar.y', 171) def _reduce_74(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result @@ -1772,7 +1790,7 @@ def _reduce_77(val, _values, result) end .,., -module_eval(<<'.,.,', 'grammar.y', 177) +module_eval(<<'.,.,', 'grammar.y', 176) def _reduce_78(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result @@ -1807,7 +1825,7 @@ def _reduce_82(val, _values, result) end .,., -module_eval(<<'.,.,', 'grammar.y', 183) +module_eval(<<'.,.,', 'grammar.y', 182) def _reduce_83(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result @@ -1863,7 +1881,7 @@ def _reduce_90(val, _values, result) end .,., -module_eval(<<'.,.,', 'grammar.y', 192) +module_eval(<<'.,.,', 'grammar.y', 191) def _reduce_91(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result @@ -1877,74 +1895,74 @@ def _reduce_92(val, _values, result) end .,., -module_eval(<<'.,.,', 'grammar.y', 198) +module_eval(<<'.,.,', 'grammar.y', 194) def _reduce_93(val, _values, result) - result = ExistenceNode.new(val[0]) + result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 204) +module_eval(<<'.,.,', 'grammar.y', 199) def _reduce_94(val, _values, result) - result = CodeNode.new(val[1], val[4], val[3]) + result = ExistenceNode.new(val[0]) result end .,., module_eval(<<'.,.,', 'grammar.y', 205) def _reduce_95(val, _values, result) - result = CodeNode.new([], val[1], val[0]) + result = CodeNode.new(val[1], val[4], val[3]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 210) +module_eval(<<'.,.,', 'grammar.y', 206) def _reduce_96(val, _values, result) - result = :func + result = CodeNode.new([], val[1], val[0]) result end .,., module_eval(<<'.,.,', 'grammar.y', 211) def _reduce_97(val, _values, result) - result = :boundfunc + result = :func result end .,., -module_eval(<<'.,.,', 'grammar.y', 216) +module_eval(<<'.,.,', 'grammar.y', 212) def _reduce_98(val, _values, result) - result = val + result = :boundfunc result end .,., module_eval(<<'.,.,', 'grammar.y', 217) def _reduce_99(val, _values, result) - result = val[0] << val[2] + result = val result end .,., -# reduce 100 omitted - -module_eval(<<'.,.,', 'grammar.y', 223) - def _reduce_101(val, _values, result) - result = SplatNode.new(val[0]) +module_eval(<<'.,.,', 'grammar.y', 218) + def _reduce_100(val, _values, result) + result = val[0] << val[2] result end .,., -module_eval(<<'.,.,', 'grammar.y', 228) +# reduce 101 omitted + +module_eval(<<'.,.,', 'grammar.y', 224) def _reduce_102(val, _values, result) result = SplatNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 233) +module_eval(<<'.,.,', 'grammar.y', 229) def _reduce_103(val, _values, result) - result = ValueNode.new(val[0]) + result = SplatNode.new(val[0]) result end .,., @@ -1986,84 +2004,84 @@ def _reduce_108(val, _values, result) module_eval(<<'.,.,', 'grammar.y', 239) def _reduce_109(val, _values, result) - result = val[0] << val[1] + result = ValueNode.new(val[0]) result end .,., module_eval(<<'.,.,', 'grammar.y', 240) def _reduce_110(val, _values, result) - result = ValueNode.new(val[0], [val[1]]) + result = val[0] << val[1] result end .,., -module_eval(<<'.,.,', 'grammar.y', 245) +module_eval(<<'.,.,', 'grammar.y', 241) def _reduce_111(val, _values, result) - result = AccessorNode.new(val[1]) + result = ValueNode.new(val[0], [val[1]]) result end .,., module_eval(<<'.,.,', 'grammar.y', 246) def _reduce_112(val, _values, result) - result = AccessorNode.new(val[1], :prototype) + result = AccessorNode.new(val[1]) result end .,., module_eval(<<'.,.,', 'grammar.y', 247) def _reduce_113(val, _values, result) - result = AccessorNode.new(val[1], :soak) + result = AccessorNode.new(val[1], :prototype) result end .,., module_eval(<<'.,.,', 'grammar.y', 248) def _reduce_114(val, _values, result) - result = val[0] + result = AccessorNode.new(val[1], :soak) result end .,., module_eval(<<'.,.,', 'grammar.y', 249) def _reduce_115(val, _values, result) - result = SliceNode.new(val[0]) + result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 254) +module_eval(<<'.,.,', 'grammar.y', 250) def _reduce_116(val, _values, result) - result = IndexNode.new(val[1]) + result = SliceNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 259) +module_eval(<<'.,.,', 'grammar.y', 255) def _reduce_117(val, _values, result) - result = ObjectNode.new(val[1]) + result = IndexNode.new(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 264) +module_eval(<<'.,.,', 'grammar.y', 260) def _reduce_118(val, _values, result) - result = [] + result = ObjectNode.new(val[1]) result end .,., module_eval(<<'.,.,', 'grammar.y', 265) def _reduce_119(val, _values, result) - result = val + result = [] result end .,., module_eval(<<'.,.,', 'grammar.y', 266) def _reduce_120(val, _values, result) - result = val[0] << val[2] + result = val result end .,., @@ -2075,51 +2093,51 @@ def _reduce_121(val, _values, result) end .,., -module_eval(<<'.,.,', 'grammar.y', 269) +module_eval(<<'.,.,', 'grammar.y', 268) def _reduce_122(val, _values, result) - result = val[0] << val[3] + result = val[0] << val[2] result end .,., module_eval(<<'.,.,', 'grammar.y', 270) def _reduce_123(val, _values, result) - result = val[1] + result = val[0] << val[3] result end .,., -module_eval(<<'.,.,', 'grammar.y', 275) +module_eval(<<'.,.,', 'grammar.y', 271) def _reduce_124(val, _values, result) - result = val[0] + result = val[1] result end .,., module_eval(<<'.,.,', 'grammar.y', 276) def _reduce_125(val, _values, result) - result = val[1].new_instance + result = val[0] result end .,., module_eval(<<'.,.,', 'grammar.y', 277) def _reduce_126(val, _values, result) - result = val[0] + result = val[1].new_instance result end .,., -module_eval(<<'.,.,', 'grammar.y', 282) +module_eval(<<'.,.,', 'grammar.y', 278) def _reduce_127(val, _values, result) - result = ExtendsNode.new(val[0], val[2]) + result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 287) +module_eval(<<'.,.,', 'grammar.y', 283) def _reduce_128(val, _values, result) - result = CallNode.new(val[0], val[1]) + result = ExtendsNode.new(val[0], val[2]) result end .,., @@ -2131,365 +2149,372 @@ def _reduce_129(val, _values, result) end .,., -module_eval(<<'.,.,', 'grammar.y', 293) +module_eval(<<'.,.,', 'grammar.y', 289) def _reduce_130(val, _values, result) + result = CallNode.new(val[0], val[1]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 294) + def _reduce_131(val, _values, result) result = val[1] result end .,., module_eval(<<'.,.,', 'grammar.y', 299) - def _reduce_131(val, _values, result) + def _reduce_132(val, _values, result) result = CallNode.new(Value.new('super'), val[2]) result end .,., module_eval(<<'.,.,', 'grammar.y', 305) - def _reduce_132(val, _values, result) + def _reduce_133(val, _values, result) result = RangeNode.new(val[1], val[4]) result end .,., module_eval(<<'.,.,', 'grammar.y', 307) - def _reduce_133(val, _values, result) + def _reduce_134(val, _values, result) result = RangeNode.new(val[1], val[5], true) result end .,., module_eval(<<'.,.,', 'grammar.y', 313) - def _reduce_134(val, _values, result) + def _reduce_135(val, _values, result) result = RangeNode.new(val[1], val[4]) result end .,., module_eval(<<'.,.,', 'grammar.y', 315) - def _reduce_135(val, _values, result) + def _reduce_136(val, _values, result) result = RangeNode.new(val[1], val[5], true) result end .,., module_eval(<<'.,.,', 'grammar.y', 320) - def _reduce_136(val, _values, result) + def _reduce_137(val, _values, result) result = ArrayNode.new(val[1]) result end .,., module_eval(<<'.,.,', 'grammar.y', 325) - def _reduce_137(val, _values, result) + def _reduce_138(val, _values, result) result = [] result end .,., module_eval(<<'.,.,', 'grammar.y', 326) - def _reduce_138(val, _values, result) + def _reduce_139(val, _values, result) result = val result end .,., module_eval(<<'.,.,', 'grammar.y', 327) - def _reduce_139(val, _values, result) + def _reduce_140(val, _values, result) result = [val[1]] result end .,., module_eval(<<'.,.,', 'grammar.y', 328) - def _reduce_140(val, _values, result) + def _reduce_141(val, _values, result) result = val[0] << val[2] result end .,., module_eval(<<'.,.,', 'grammar.y', 329) - def _reduce_141(val, _values, result) + def _reduce_142(val, _values, result) result = val[0] << val[2] result end .,., module_eval(<<'.,.,', 'grammar.y', 330) - def _reduce_142(val, _values, result) + def _reduce_143(val, _values, result) result = val[0] << val[3] result end .,., module_eval(<<'.,.,', 'grammar.y', 331) - def _reduce_143(val, _values, result) + def _reduce_144(val, _values, result) result = val[0] << val[3] result end .,., module_eval(<<'.,.,', 'grammar.y', 332) - def _reduce_144(val, _values, result) + def _reduce_145(val, _values, result) result = val[0] result end .,., module_eval(<<'.,.,', 'grammar.y', 337) - def _reduce_145(val, _values, result) + def _reduce_146(val, _values, result) result = val[0] result end .,., module_eval(<<'.,.,', 'grammar.y', 338) - def _reduce_146(val, _values, result) + def _reduce_147(val, _values, result) result = ([val[0]] << val[2]).flatten result end .,., module_eval(<<'.,.,', 'grammar.y', 343) - def _reduce_147(val, _values, result) + def _reduce_148(val, _values, result) result = TryNode.new(val[1], val[2][0], val[2][1]) result end .,., module_eval(<<'.,.,', 'grammar.y', 344) - def _reduce_148(val, _values, result) + def _reduce_149(val, _values, result) result = TryNode.new(val[1], nil, nil, val[3]) result end .,., module_eval(<<'.,.,', 'grammar.y', 346) - def _reduce_149(val, _values, result) + def _reduce_150(val, _values, result) result = TryNode.new(val[1], val[2][0], val[2][1], val[4]) result end .,., module_eval(<<'.,.,', 'grammar.y', 351) - def _reduce_150(val, _values, result) + def _reduce_151(val, _values, result) result = [val[1], val[2]] result end .,., module_eval(<<'.,.,', 'grammar.y', 356) - def _reduce_151(val, _values, result) + def _reduce_152(val, _values, result) result = ThrowNode.new(val[1]) result end .,., module_eval(<<'.,.,', 'grammar.y', 361) - def _reduce_152(val, _values, result) + def _reduce_153(val, _values, result) result = ParentheticalNode.new(val[1], val[0].line) result end .,., module_eval(<<'.,.,', 'grammar.y', 366) - def _reduce_153(val, _values, result) + def _reduce_154(val, _values, result) result = WhileNode.new(val[1], val[2]) result end .,., module_eval(<<'.,.,', 'grammar.y', 367) - def _reduce_154(val, _values, result) + def _reduce_155(val, _values, result) result = WhileNode.new(val[1], nil) result end .,., module_eval(<<'.,.,', 'grammar.y', 368) - def _reduce_155(val, _values, result) + def _reduce_156(val, _values, result) result = WhileNode.new(val[2], Expressions.wrap(val[0])) result end .,., module_eval(<<'.,.,', 'grammar.y', 375) - def _reduce_156(val, _values, result) + def _reduce_157(val, _values, result) result = ForNode.new(val[0], val[3], val[2][0], val[2][1]) result end .,., module_eval(<<'.,.,', 'grammar.y', 376) - def _reduce_157(val, _values, result) + def _reduce_158(val, _values, result) result = ForNode.new(val[3], val[2], val[1][0], val[1][1]) result end .,., module_eval(<<'.,.,', 'grammar.y', 381) - def _reduce_158(val, _values, result) + def _reduce_159(val, _values, result) result = val result end .,., module_eval(<<'.,.,', 'grammar.y', 382) - def _reduce_159(val, _values, result) + def _reduce_160(val, _values, result) result = [val[0], val[2]] result end .,., module_eval(<<'.,.,', 'grammar.y', 387) - def _reduce_160(val, _values, result) + def _reduce_161(val, _values, result) result = {:source => val[1]} result end .,., module_eval(<<'.,.,', 'grammar.y', 388) - def _reduce_161(val, _values, result) + def _reduce_162(val, _values, result) result = {:source => val[1], :object => true} result end .,., module_eval(<<'.,.,', 'grammar.y', 390) - def _reduce_162(val, _values, result) + def _reduce_163(val, _values, result) result = val[0].merge(:filter => val[2]) result end .,., module_eval(<<'.,.,', 'grammar.y', 392) - def _reduce_163(val, _values, result) + def _reduce_164(val, _values, result) result = val[0].merge(:step => val[2]) result end .,., module_eval(<<'.,.,', 'grammar.y', 398) - def _reduce_164(val, _values, result) + def _reduce_165(val, _values, result) result = val[3].rewrite_condition(val[1]) result end .,., module_eval(<<'.,.,', 'grammar.y', 400) - def _reduce_165(val, _values, result) + def _reduce_166(val, _values, result) result = val[3].rewrite_condition(val[1]).add_else(val[5]) result end .,., module_eval(<<'.,.,', 'grammar.y', 405) - def _reduce_166(val, _values, result) + def _reduce_167(val, _values, result) result = val[0] result end .,., module_eval(<<'.,.,', 'grammar.y', 406) - def _reduce_167(val, _values, result) + def _reduce_168(val, _values, result) result = val[0] << val[1] result end .,., module_eval(<<'.,.,', 'grammar.y', 411) - def _reduce_168(val, _values, result) + def _reduce_169(val, _values, result) result = IfNode.new(val[1], val[2], nil, {:statement => true}) result end .,., module_eval(<<'.,.,', 'grammar.y', 413) - def _reduce_169(val, _values, result) + def _reduce_170(val, _values, result) result = IfNode.new(val[1], val[2], nil, {:statement => true}) result end .,., module_eval(<<'.,.,', 'grammar.y', 414) - def _reduce_170(val, _values, result) + def _reduce_171(val, _values, result) result = val[2].add_comment(val[0]) result end .,., module_eval(<<'.,.,', 'grammar.y', 419) - def _reduce_171(val, _values, result) + def _reduce_172(val, _values, result) result = IfNode.new(val[1], val[2]) result end .,., module_eval(<<'.,.,', 'grammar.y', 424) - def _reduce_172(val, _values, result) + def _reduce_173(val, _values, result) result = val[1].force_statement result end .,., module_eval(<<'.,.,', 'grammar.y', 429) - def _reduce_173(val, _values, result) + def _reduce_174(val, _values, result) result = val[0] result end .,., module_eval(<<'.,.,', 'grammar.y', 430) - def _reduce_174(val, _values, result) + def _reduce_175(val, _values, result) result = val[0].add_else(val[1]) result end .,., module_eval(<<'.,.,', 'grammar.y', 435) - def _reduce_175(val, _values, result) + def _reduce_176(val, _values, result) result = nil result end .,., module_eval(<<'.,.,', 'grammar.y', 436) - def _reduce_176(val, _values, result) + def _reduce_177(val, _values, result) result = val[1] result end .,., module_eval(<<'.,.,', 'grammar.y', 441) - def _reduce_177(val, _values, result) + def _reduce_178(val, _values, result) result = val[0] result end .,., module_eval(<<'.,.,', 'grammar.y', 442) - def _reduce_178(val, _values, result) + def _reduce_179(val, _values, result) result = val[0].add_else(val[1]) result end .,., module_eval(<<'.,.,', 'grammar.y', 447) - def _reduce_179(val, _values, result) + def _reduce_180(val, _values, result) result = val[0].add_else(val[1]) result end .,., module_eval(<<'.,.,', 'grammar.y', 448) - def _reduce_180(val, _values, result) + def _reduce_181(val, _values, result) result = IfNode.new(val[2], Expressions.wrap(val[0]), nil, {:statement => true}) result end .,., module_eval(<<'.,.,', 'grammar.y', 449) - def _reduce_181(val, _values, result) + def _reduce_182(val, _values, result) result = IfNode.new(val[2], Expressions.wrap(val[0]), nil, {:statement => true, :invert => true}) result end From ca0a65ab9511a46faa4b3874f5948311edb4ca8f Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Tue, 26 Jan 2010 23:23:59 -0500 Subject: [PATCH 32/32] updating documentation for 0.3 --- coffee-script.gemspec | 4 +- documentation/coffee/blocks.coffee | 4 - .../{long_arrow.coffee => fat_arrow.coffee} | 0 documentation/coffee/overview.coffee | 2 +- documentation/coffee/soaks.coffee | 1 + documentation/coffee/splats.coffee | 4 +- documentation/index.html.erb | 138 +++++----- documentation/js/blocks.js | 8 - .../js/{long_arrow.js => fat_arrow.js} | 0 documentation/js/soaks.js | 4 + documentation/js/splats.js | 6 +- index.html | 239 +++++++++--------- lib/coffee-script.rb | 2 +- package.json | 2 +- 14 files changed, 200 insertions(+), 214 deletions(-) delete mode 100644 documentation/coffee/blocks.coffee rename documentation/coffee/{long_arrow.coffee => fat_arrow.coffee} (100%) create mode 100644 documentation/coffee/soaks.coffee delete mode 100644 documentation/js/blocks.js rename documentation/js/{long_arrow.js => fat_arrow.js} (100%) create mode 100644 documentation/js/soaks.js diff --git a/coffee-script.gemspec b/coffee-script.gemspec index f8a1c08a3a..8fdf3e5341 100644 --- a/coffee-script.gemspec +++ b/coffee-script.gemspec @@ -1,7 +1,7 @@ Gem::Specification.new do |s| s.name = 'coffee-script' - s.version = '0.2.6' # Keep version in sync with coffee-script.rb - s.date = '2010-1-17' + s.version = '0.3.0' # Keep version in sync with coffee-script.rb + s.date = '2010-1-26' s.homepage = "http://jashkenas.github.com/coffee-script/" s.summary = "The CoffeeScript Compiler" diff --git a/documentation/coffee/blocks.coffee b/documentation/coffee/blocks.coffee deleted file mode 100644 index 16d9bc07ff..0000000000 --- a/documentation/coffee/blocks.coffee +++ /dev/null @@ -1,4 +0,0 @@ -$('table.list').each (table) -> - $('tr.account', table).each (row) -> - row.show() - row.highlight() diff --git a/documentation/coffee/long_arrow.coffee b/documentation/coffee/fat_arrow.coffee similarity index 100% rename from documentation/coffee/long_arrow.coffee rename to documentation/coffee/fat_arrow.coffee diff --git a/documentation/coffee/overview.coffee b/documentation/coffee/overview.coffee index 3156f840af..23bdb4bd85 100644 --- a/documentation/coffee/overview.coffee +++ b/documentation/coffee/overview.coffee @@ -26,4 +26,4 @@ race: (winner, runners...) -> alert "I knew it!" if elvis? # Array comprehensions: -cubed_list: math.cube(num) for num in list +cubed_list: math.cube num for num in list diff --git a/documentation/coffee/soaks.coffee b/documentation/coffee/soaks.coffee new file mode 100644 index 0000000000..964fef5b72 --- /dev/null +++ b/documentation/coffee/soaks.coffee @@ -0,0 +1 @@ +lottery.draw_winner()?.address?.zipcode diff --git a/documentation/coffee/splats.coffee b/documentation/coffee/splats.coffee index ea27d0c102..9faf40155e 100644 --- a/documentation/coffee/splats.coffee +++ b/documentation/coffee/splats.coffee @@ -1,6 +1,6 @@ gold: silver: the_field: "unknown" -medalists: (first, second, rest...) -> +award_medals: (first, second, rest...) -> gold: first silver: second the_field: rest @@ -18,7 +18,7 @@ contenders: [ "Usain Bolt" ] -medalists contenders... +award_medals contenders... alert "Gold: " + gold alert "Silver: " + silver diff --git a/documentation/index.html.erb b/documentation/index.html.erb index 6b91505ed6..6ab260f8c0 100644 --- a/documentation/index.html.erb +++ b/documentation/index.html.erb @@ -51,7 +51,7 @@

Latest Version: - 0.2.6 + 0.3.0

Table of Contents

@@ -65,7 +65,6 @@ Objects and Arrays
Lexical Scoping and Variable Safety
Conditionals, Ternaries, and Conditional Assignment
- The Existential Operator
Aliases
Splats...
Arguments are Arrays
@@ -73,17 +72,16 @@ Comprehensions (Arrays, Objects, and Ranges)
Array Slicing and Splicing with Ranges
Everything is an Expression
+ The Existential Operator
Inheritance, and Calling Super from a Subclass
- Blocks
Pattern Matching
- Function Binding
+ Function Binding
Embedded JavaScript
Switch/When/Else
Try/Catch/Finally
Chained Comparisons
Multiline Strings and Heredocs
Resources
- Contributing
Change Log

@@ -188,7 +186,7 @@ gem install coffee-script
-v, --verbose As the JavaScript is being generated, print out every step of code - generation, including lexical scope and the node in the + generation, including lexical scope and the nodes in the AST. @@ -248,6 +246,11 @@ coffee --print app/scripts/*.coffee > concatenation.js
use indentation.

+

+ You don't need to use parentheses to invoke a function, if you're passing + arguments:
print "coffee" +

+

You can use newlines to break up your expression into smaller pieces, as long as CoffeeScript can determine that the line hasn't finished yet. @@ -307,12 +310,12 @@ coffee --print app/scripts/*.coffee > concatenation.js

CoffeeScript output is wrapped in an anonymous function: (function(){ ... })(); This safety wrapper, combined with the automatic generation of the var keyword, make it exceedingly difficult - to pollute the global namespace by accident. + to pollute the global namespace by accident.

-

- If you'd like to create top-level variables for other scripts to use, - attach them as properties on window, or on the exports - object in CommonJS. The existential operator (below), gives you a +

+ If you'd like to create top-level variables for other scripts to use, + attach them as properties on window, or on the exports + object in CommonJS. The existential operator (below), gives you a reliable way to figure out where to add them, if you're targeting both CommonJS and the browser: root: exports ? this

@@ -336,20 +339,6 @@ coffee --print app/scripts/*.coffee > concatenation.js
truthy variables.

-

- The Existential Operator - It's a little difficult to check for the existence of a variable in - JavaScript. if (variable) ... comes close, but fails for zero, - the empty string, and false. The existential operator ? returns true unless - a variable is null or undefined, which makes it analogous - to Ruby's nil? -

-

- It can also be used for safer conditional assignment than ||= - provides, for cases where you may be handling numbers or strings. -

- <%= code_for('existence', 'speed') %> -

Aliases Because the == operator frequently causes undesirable coercion, @@ -487,10 +476,39 @@ coffee --print app/scripts/*.coffee > concatenation.js

<%= code_for('expressions_try', true) %>

There are a handful of statements in JavaScript that can't be meaningfully - converted into expressions, namely break, continue, - and return. If you make use of them within a block of code, + converted into expressions, namely break, continue, + and return. If you make use of them within a block of code, CoffeeScript won't try to perform the conversion.

+ +

+ The Existential Operator + It's a little difficult to check for the existence of a variable in + JavaScript. if (variable) ... comes close, but fails for zero, + the empty string, and false. CoffeeScript's existential operator ? returns true unless + a variable is null or undefined, which makes it analogous + to Ruby's nil? +

+

+ It can also be used for safer conditional assignment than ||= + provides, for cases where you may be handling numbers or strings. +

+ <%= code_for('existence', 'speed') %> +

+ The accessor variant of the existential operator ?. can be used to soak + up null references in a chain of properties. Use it instead + of the dot accessor . in cases where the base value may be null + or undefined. If all of the properties exist then you'll get the expected + result, if the chain is broken, undefined is returned instead of + the TypeError that would be raised otherwise. +

+ <%= code_for('soaks') %> +

+ Soaking up nulls is similar to Ruby's + andand gem, and to the + safe navigation operator + in Groovy. +

Inheritance, and Calling Super from a Subclass @@ -514,15 +532,6 @@ coffee --print app/scripts/*.coffee > concatenation.js

<%= code_for('super', true) %> -

- Blocks - Many common looping functions (in Prototype, jQuery, and Underscore, - for example) take a single function as their final argument. To make - final functions easier to pass, CoffeeScript includes block syntax, - so you don't have to close the parentheses on the other side. -

- <%= code_for('blocks') %> -

Pattern Matching (Destructuring Assignment) To make extracting values from complex arrays and objects more convenient, @@ -545,16 +554,16 @@ coffee --print app/scripts/*.coffee > concatenation.js

<%= code_for('object_extraction', 'poet + " — " + street') %> -

+

Function binding - The long arrow => can be used to both define a function, and to bind + The fat arrow => can be used to both define a function, and to bind it to the current value of this, right on the spot. This is helpful when using callback-based libraries like Prototype or jQuery, for creating iterator functions to pass to each, or event-handler functions - to use with bind. Functions created with the long arrow are able to access + to use with bind. Functions created with the fat arrow are able to access properties of the this where they're defined.

- <%= code_for('long_arrow') %> + <%= code_for('fat_arrow') %>

Embedded JavaScript @@ -625,6 +634,12 @@ coffee --print app/scripts/*.coffee > concatenation.js

  • Bugs, Feature Requests, and General Discussion
  • +
  • + CoffeePot
    + An implementation of CoffeeScript, written in CoffeeScript, by + Tim Caswell. Compiles just + a limited subset at this point. +
  • BistroCar
    A Rails plugin by @@ -640,39 +655,24 @@ coffee --print app/scripts/*.coffee > concatenation.js
  • -

    Contributing

    +

    Change Log

    - Here's a wish list of things that would be wonderful to have contributed: + 0.3.0 + CoffeeScript 0.3 includes major syntax changes: +
    + The function symbol was changed to + ->, and the bound function symbol is now =>. +
    + Parameter lists in function definitions must now be wrapped in parentheses. +
    + Added property soaking, with the ?. operator. +
    + Made parentheses optional, when invoking functions with arguments. +
    + Removed the obsolete block literal syntax.

    -
      -
    • - - A CoffeeScript version of the compiler. - -
    • -
    • - Test cases for any syntax errors you encounter that you think CoffeeScript - should be able to compile properly. -
    • -
    • - A tutorial that introduces CoffeeScript from the ground up for folks - without knowledge of JavaScript. -
    • -
    • - Integration with Processing.js's JavaScript API (this would depend on - having a JavaScript version of the compiler). -
    • -
    • - A lot of the code generation in nodes.rb gets into messy - string manipulation. Techniques for cleaning this up across the board - would be appreciated. -
    • -
    - -

    Change Log

    -

    0.2.6 Added Python-style chained comparisons, the conditional existence diff --git a/documentation/js/blocks.js b/documentation/js/blocks.js deleted file mode 100644 index f95dd31b45..0000000000 --- a/documentation/js/blocks.js +++ /dev/null @@ -1,8 +0,0 @@ -(function(){ - $('table.list').each(function(table) { - return $('tr.account', table).each(function(row) { - row.show(); - return row.highlight(); - }); - }); -})(); \ No newline at end of file diff --git a/documentation/js/long_arrow.js b/documentation/js/fat_arrow.js similarity index 100% rename from documentation/js/long_arrow.js rename to documentation/js/fat_arrow.js diff --git a/documentation/js/soaks.js b/documentation/js/soaks.js new file mode 100644 index 0000000000..efacb69265 --- /dev/null +++ b/documentation/js/soaks.js @@ -0,0 +1,4 @@ +(function(){ + var __a; + ((__a = lottery.draw_winner()) == undefined ? undefined : __a.address == undefined ? undefined : __a.address.zipcode); +})(); \ No newline at end of file diff --git a/documentation/js/splats.js b/documentation/js/splats.js index 4fb2085bca..052437fe47 100644 --- a/documentation/js/splats.js +++ b/documentation/js/splats.js @@ -1,7 +1,7 @@ (function(){ - var contenders, gold, medalists, silver, the_field; + var award_medals, contenders, gold, silver, the_field; gold = (silver = (the_field = "unknown")); - medalists = function medalists(first, second) { + award_medals = function award_medals(first, second) { var rest; rest = Array.prototype.slice.call(arguments, 2); gold = first; @@ -9,7 +9,7 @@ return the_field = rest; }; contenders = ["Michael Phelps", "Liu Xiang", "Yao Ming", "Allyson Felix", "Shawn Johnson", "Roman Sebrle", "Guo Jingjing", "Tyson Gay", "Asafa Powell", "Usain Bolt"]; - medalists.apply(this, contenders); + award_medals.apply(this, contenders); alert("Gold: " + gold); alert("Silver: " + silver); alert("The Field: " + the_field); diff --git a/index.html b/index.html index 1447e18e33..86ed85b874 100644 --- a/index.html +++ b/index.html @@ -37,7 +37,7 @@

    CoffeeScript

    Latest Version: - 0.2.6 + 0.3.0

    Table of Contents

    @@ -51,7 +51,6 @@

    Table of Contents

    Objects and Arrays
    Lexical Scoping and Variable Safety
    Conditionals, Ternaries, and Conditional Assignment
    - The Existential Operator
    Aliases
    Splats...
    Arguments are Arrays
    @@ -59,17 +58,16 @@

    Table of Contents

    Comprehensions (Arrays, Objects, and Ranges)
    Array Slicing and Splicing with Ranges
    Everything is an Expression
    + The Existential Operator
    Inheritance, and Calling Super from a Subclass
    - Blocks
    Pattern Matching
    - Function Binding
    + Function Binding
    Embedded JavaScript
    Switch/When/Else
    Try/Catch/Finally
    Chained Comparisons
    Multiline Strings and Heredocs
    Resources
    - Contributing
    Change Log

    @@ -85,7 +83,7 @@

    Mini Overview

    number: -42 if opposite_day # Functions: -square: (x) => x * x +square: (x) -> x * x # Arrays: list: [1, 2, 3, 4, 5] @@ -94,18 +92,18 @@

    Mini Overview

    math: { root: Math.sqrt square: square - cube: (x) => x * square x + cube: (x) -> x * square x } # Splats: -race: (winner, runners...) => +race: (winner, runners...) -> print winner, runners # Existence: alert "I knew it!" if elvis? # Array comprehensions: -cubed_list: math.cube(num) for num in list +cubed_list: math.cube num for num in list
    var __a, __b, __c, cubed_list, list, math, num, number, opposite_day, race, square;
     // Assignment:
     number = 42;
    @@ -285,7 +283,7 @@ 

    Installation and Usage

    -v, --verbose As the JavaScript is being generated, print out every step of code - generation, including lexical scope and the node in the + generation, including lexical scope and the nodes in the AST. @@ -345,6 +343,11 @@

    Language Reference

    use indentation.

    +

    + You don't need to use parentheses to invoke a function, if you're passing + arguments:
    print "coffee" +

    +

    You can use newlines to break up your expression into smaller pieces, as long as CoffeeScript can determine that the line hasn't finished yet. @@ -356,8 +359,8 @@

    Language Reference

    function body. The empty function looks like this: ->. All functions in CoffeeScript are named by default, for easier debugging.

    -
    square: (x) => x * x
    -cube:   (x) => square(x) * x
    +    
    square: (x) -> x * x
    +cube:   (x) -> square(x) * x
     
    var cube, square;
     square = function square(x) {
       return x * x;
    @@ -444,7 +447,7 @@ 

    Language Reference

    var yourself.

    num: 1
    -change_numbers: () =>
    +change_numbers: ->
       new_num: -1
       num: 10
     new_num: change_numbers()
    @@ -478,12 +481,12 @@ 

    Language Reference

    CoffeeScript output is wrapped in an anonymous function: (function(){ ... })(); This safety wrapper, combined with the automatic generation of the var keyword, make it exceedingly difficult - to pollute the global namespace by accident. + to pollute the global namespace by accident.

    -

    - If you'd like to create top-level variables for other scripts to use, - attach them as properties on window, or on the exports - object in CommonJS. The existential operator (below), gives you a +

    + If you'd like to create top-level variables for other scripts to use, + attach them as properties on window, or on the exports + object in CommonJS. The existential operator (below), gives you a reliable way to figure out where to add them, if you're targeting both CommonJS and the browser: root: exports ? this

    @@ -526,38 +529,6 @@

    Language Reference

    truthy variables.

    -

    - The Existential Operator - It's a little difficult to check for the existence of a variable in - JavaScript. if (variable) ... comes close, but fails for zero, - the empty string, and false. The existential operator ? returns true unless - a variable is null or undefined, which makes it analogous - to Ruby's nil? -

    -

    - It can also be used for safer conditional assignment than ||= - provides, for cases where you may be handling numbers or strings. -

    -
    solipsism: true if mind? and not world?
    -
    -speed ?= 140
    -
    -
    -
    -
    -
    -
    var solipsism, speed;
    -if ((typeof mind !== "undefined" && mind !== null) && !(typeof world !== "undefined" && world !== null)) {
    -  solipsism = true;
    -}
    -speed = (typeof speed !== "undefined" && speed !== null) ? speed : 140;
    -

    -

    Aliases Because the == operator frequently causes undesirable coercion, @@ -615,7 +586,7 @@

    Language Reference

    gold: silver: the_field: "unknown"
     
    -medalists: (first, second, rest...) =>
    +award_medals: (first, second, rest...) ->
       gold:       first
       silver:     second
       the_field:  rest
    @@ -633,14 +604,14 @@ 

    Language Reference

    "Usain Bolt" ] -medalists contenders... +award_medals contenders... alert "Gold: " + gold alert "Silver: " + silver alert "The Field: " + the_field -
    var contenders, gold, medalists, silver, the_field;
    +
    var award_medals, contenders, gold, silver, the_field;
     gold = (silver = (the_field = "unknown"));
    -medalists = function medalists(first, second) {
    +award_medals = function award_medals(first, second) {
       var rest;
       rest = Array.prototype.slice.call(arguments, 2);
       gold = first;
    @@ -648,13 +619,13 @@ 

    Language Reference

    return the_field = rest; }; contenders = ["Michael Phelps", "Liu Xiang", "Yao Ming", "Allyson Felix", "Shawn Johnson", "Roman Sebrle", "Guo Jingjing", "Tyson Gay", "Asafa Powell", "Usain Bolt"]; -medalists.apply(this, contenders); +award_medals.apply(this, contenders); alert("Gold: " + gold); alert("Silver: " + silver); alert("The Field: " + the_field); -

    There are a handful of statements in JavaScript that can't be meaningfully - converted into expressions, namely break, continue, - and return. If you make use of them within a block of code, + converted into expressions, namely break, continue, + and return. If you make use of them within a block of code, CoffeeScript won't try to perform the conversion.

    + +

    + The Existential Operator + It's a little difficult to check for the existence of a variable in + JavaScript. if (variable) ... comes close, but fails for zero, + the empty string, and false. CoffeeScript's existential operator ? returns true unless + a variable is null or undefined, which makes it analogous + to Ruby's nil? +

    +

    + It can also be used for safer conditional assignment than ||= + provides, for cases where you may be handling numbers or strings. +

    +
    solipsism: true if mind? and not world?
    +
    +speed ?= 140
    +
    +
    +
    +
    +
    +
    var solipsism, speed;
    +if ((typeof mind !== "undefined" && mind !== null) && !(typeof world !== "undefined" && world !== null)) {
    +  solipsism = true;
    +}
    +speed = (typeof speed !== "undefined" && speed !== null) ? speed : 140;
    +

    +

    + The accessor variant of the existential operator ?. can be used to soak + up null references in a chain of properties. Use it instead + of the dot accessor . in cases where the base value may be null + or undefined. If all of the properties exist then you'll get the expected + result, if the chain is broken, undefined is returned instead of + the TypeError that would be raised otherwise. +

    +
    lottery.draw_winner()?.address?.zipcode
    +
    var __a;
    +((__a = lottery.draw_winner()) == undefined ? undefined : __a.address == undefined ? undefined : __a.address.zipcode);
    +

    +

    + Soaking up nulls is similar to Ruby's + andand gem, and to the + safe navigation operator + in Groovy. +

    Inheritance, and Calling Super from a Subclass @@ -1078,19 +1099,19 @@

    Language Reference

    object's prototype, and converts super() into a call against the immediate ancestor's method of the same name.

    -
    Animal: () =>
    -Animal::move: (meters) =>
    +    
    Animal: ->
    +Animal::move: (meters) ->
       alert this.name + " moved " + meters + "m."
     
    -Snake: (name) => this.name: name
    +Snake: (name) -> this.name: name
     Snake extends Animal
    -Snake::move: () =>
    +Snake::move: ->
       alert "Slithering..."
       super 5
     
    -Horse: (name) => this.name: name
    +Horse: (name) -> this.name: name
     Horse extends Animal
    -Horse::move: () =>
    +Horse::move: ->
       alert "Galloping..."
       super 45
     
    @@ -1179,25 +1200,6 @@ 

    Language Reference

    tom.move(); ;'>run
    -

    - Blocks - Many common looping functions (in Prototype, jQuery, and Underscore, - for example) take a single function as their final argument. To make - final functions easier to pass, CoffeeScript includes block syntax, - so you don't have to close the parentheses on the other side. -

    -
    $('table.list').each (table) =>
    -  $('tr.account', table).each (row) =>
    -    row.show()
    -    row.highlight()
    -
    $('table.list').each(function(table) {
    -  return $('tr.account', table).each(function(row) {
    -    row.show();
    -    return row.highlight();
    -  });
    -});
    -

    -

    Pattern Matching (Destructuring Assignment) To make extracting values from complex arrays and objects more convenient, @@ -1229,7 +1231,7 @@

    Language Reference

    But it's also helpful for dealing with functions that return multiple values.

    -
    weather_report: (location) =>
    +    
    weather_report: (location) ->
       # Make an Ajax request to fetch the weather...
       [location, 72, "Mostly Sunny"]
     
    @@ -1302,20 +1304,20 @@ 

    Language Reference

    city = __c[1]; ;alert(poet + " — " + street);'>run: poet + " — " + street
    -

    +

    Function binding - The long arrow => can be used to both define a function, and to bind + The fat arrow => can be used to both define a function, and to bind it to the current value of this, right on the spot. This is helpful when using callback-based libraries like Prototype or jQuery, for creating iterator functions to pass to each, or event-handler functions - to use with bind. Functions created with the long arrow are able to access + to use with bind. Functions created with the fat arrow are able to access properties of the this where they're defined.

    -
    Account: (customer, cart) =>
    +    
    Account: (customer, cart) ->
       this.customer: customer
       this.cart: cart
     
    -  $('.shopping_cart').bind('click') (event) ==>
    +  $('.shopping_cart').bind 'click', (event) =>
         this.customer.purchase this.cart
     
    var Account;
     Account = function Account(customer, cart) {
    @@ -1497,6 +1499,12 @@ 

    Resources

  • Bugs, Feature Requests, and General Discussion
  • +
  • + CoffeePot
    + An implementation of CoffeeScript, written in CoffeeScript, by + Tim Caswell. Compiles just + a limited subset at this point. +
  • BistroCar
    A Rails plugin by @@ -1512,39 +1520,24 @@

    Resources

  • -

    Contributing

    +

    Change Log

    - Here's a wish list of things that would be wonderful to have contributed: + 0.3.0 + CoffeeScript 0.3 includes major syntax changes: +
    + The function symbol was changed to + ->, and the bound function symbol is now =>. +
    + Parameter lists in function definitions must now be wrapped in parentheses. +
    + Added property soaking, with the ?. operator. +
    + Made parentheses optional, when invoking functions with arguments. +
    + Removed the obsolete block literal syntax.

    -
      -
    • - - A CoffeeScript version of the compiler. - -
    • -
    • - Test cases for any syntax errors you encounter that you think CoffeeScript - should be able to compile properly. -
    • -
    • - A tutorial that introduces CoffeeScript from the ground up for folks - without knowledge of JavaScript. -
    • -
    • - Integration with Processing.js's JavaScript API (this would depend on - having a JavaScript version of the compiler). -
    • -
    • - A lot of the code generation in nodes.rb gets into messy - string manipulation. Techniques for cleaning this up across the board - would be appreciated. -
    • -
    - -

    Change Log

    -

    0.2.6 Added Python-style chained comparisons, the conditional existence diff --git a/lib/coffee-script.rb b/lib/coffee-script.rb index 399cb9a8a2..73189edd60 100644 --- a/lib/coffee-script.rb +++ b/lib/coffee-script.rb @@ -10,7 +10,7 @@ # Namespace for all CoffeeScript internal classes. module CoffeeScript - VERSION = '0.2.6' # Keep in sync with the gemspec. + VERSION = '0.3.0' # Keep in sync with the gemspec. # Compile a script (String or IO) to JavaScript. def self.compile(script, options={}) diff --git a/package.json b/package.json index c1d5b0d736..e891cfa1d0 100644 --- a/package.json +++ b/package.json @@ -5,5 +5,5 @@ "description": "Unfancy JavaScript", "keywords": ["javascript", "language"], "author": "Jeremy Ashkenas", - "version": "0.2.6" + "version": "0.3.0" }