radius 0.6.1 → 0.7.0.prerelease

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. data/CHANGELOG +21 -12
  2. data/LICENSE +19 -0
  3. data/QUICKSTART.rdoc +7 -7
  4. data/README.rdoc +10 -28
  5. data/Rakefile +8 -31
  6. data/VERSION +1 -0
  7. data/lib/radius.rb +3 -2
  8. data/lib/radius/context.rb +21 -13
  9. data/lib/radius/delegating_open_struct.rb +6 -0
  10. data/lib/radius/ord_string.rb +13 -0
  11. data/lib/radius/parse_tag.rb +1 -1
  12. data/lib/radius/parser.rb +25 -11
  13. data/lib/radius/parser/JavaScanner$Flavor.class +0 -0
  14. data/lib/radius/parser/JavaScanner$Tag.class +0 -0
  15. data/lib/radius/parser/JavaScanner.class +0 -0
  16. data/lib/radius/parser/JavaScanner.java +634 -0
  17. data/lib/radius/parser/JavaScanner.rl +179 -0
  18. data/lib/radius/parser/java_scanner.jar +0 -0
  19. data/lib/radius/parser/scanner.rb +1255 -0
  20. data/lib/radius/parser/{scan.rl → scanner.rl} +6 -4
  21. data/lib/radius/parser/squiggle_scanner.rb +1238 -0
  22. data/lib/radius/parser/squiggle_scanner.rl +126 -0
  23. data/lib/radius/utility.rb +10 -0
  24. data/lib/radius/version.rb +6 -12
  25. data/tasks/jeweler.rake +22 -0
  26. data/tasks/rdoc.rake +13 -0
  27. data/tasks/rubinius.rake +4 -0
  28. data/tasks/scan.rake +64 -12
  29. data/tasks/test.rake +7 -0
  30. data/test/benchmarks.rb +35 -0
  31. data/test/context_test.rb +2 -2
  32. data/test/multithreaded_test.rb +63 -0
  33. data/test/ord_string_test.rb +18 -0
  34. data/test/parser_test.rb +21 -4
  35. data/test/quickstart_test.rb +9 -11
  36. data/test/squiggle_test.rb +281 -0
  37. data/test/test_helper.rb +10 -2
  38. data/test/utility_test.rb +30 -0
  39. metadata +67 -64
  40. data.tar.gz.sig +0 -0
  41. data/Manifest.txt +0 -21
  42. data/lib/radius/parser/scan.rb +0 -700
  43. metadata.gz.sig +0 -0
@@ -0,0 +1,179 @@
1
+ %%{
2
+ machine parser;
3
+
4
+ action _prefix { mark_pfx = p; }
5
+ action prefix {
6
+ prefix = input.substring(mark_pfx, p);
7
+ }
8
+ action _check_prefix {
9
+ if ( !prefix.equals(tag_prefix) ) {
10
+ // have to manually add ':' / Sep
11
+ // pass the text through & reset state
12
+ pass_through(input.substring(tagstart, p) + ":");
13
+ prefix = "";
14
+ fgoto main;
15
+ }
16
+ }
17
+
18
+ action _starttag { mark_stg = p; }
19
+ action starttag { name = input.substring(mark_stg, p); }
20
+ action _attr { mark_attr = p; }
21
+ action attr {
22
+ attributes.op_aset(
23
+ runtime.getCurrentContext(),
24
+ RubyString.newString(runtime, nat),
25
+ RubyString.newString(runtime, vat)
26
+ );
27
+ }
28
+
29
+ action _nameattr { mark_nat = p; }
30
+ action nameattr { nat = input.substring(mark_nat, p); }
31
+ action _valattr { mark_vat = p; }
32
+ action valattr { vat = input.substring(mark_vat, p); }
33
+
34
+ action opentag { flavor = RubySymbol.newSymbol(runtime, "open".intern()); }
35
+ action selftag { flavor = RubySymbol.newSymbol(runtime, "self".intern()); }
36
+ action closetag { flavor = RubySymbol.newSymbol(runtime, "close".intern()); }
37
+
38
+ Closeout := empty;
39
+
40
+ # words
41
+ PrefixChar = [\-A-Za-z0-9._?] ;
42
+ NameChar = [\-A-Za-z0-9._:?] ;
43
+ TagName = NameChar+ >_starttag %starttag;
44
+ Prefix = PrefixChar+ >_prefix %prefix;
45
+ Open = "<";
46
+ Sep = ":" >_check_prefix;
47
+ End = "/";
48
+ Close = ">";
49
+
50
+ Name = Prefix Sep TagName;
51
+
52
+ NameAttr = NameChar+ >_nameattr %nameattr;
53
+ Q1Char = ( "\\\'" | [^'] ) ;
54
+ Q1Attr = Q1Char* >_valattr %valattr;
55
+ Q2Char = ( "\\\"" | [^"] ) ;
56
+ Q2Attr = Q2Char* >_valattr %valattr;
57
+
58
+ Attr = NameAttr space* "=" space* ('"' Q2Attr '"' | "'" Q1Attr "'") space* >_attr %attr;
59
+ Attrs = (space+ Attr* | empty);
60
+
61
+ CloseTrailer = End Close %selftag;
62
+ OpenTrailer = Close %opentag;
63
+
64
+ Trailer = (OpenTrailer | CloseTrailer);
65
+
66
+ OpenOrSelfTag = Name Attrs? Trailer;
67
+ CloseTag = End Name space* Close %closetag;
68
+
69
+ SomeTag = Open (OpenOrSelfTag | CloseTag);
70
+
71
+ main := |*
72
+ SomeTag => {
73
+ tag(prefix, name, attributes, flavor);
74
+ prefix = "";
75
+ name = "";
76
+ attributes = RubyHash.newHash(runtime);
77
+ flavor = RubySymbol.newSymbol(runtime, "tasteless".intern());
78
+ };
79
+ any => {
80
+ pass_through(input.substring(p, p + 1));
81
+ tagstart = p + 1;
82
+ };
83
+ *|;
84
+ }%%
85
+
86
+ package radius.parser;
87
+
88
+ import java.util.HashMap;
89
+ import java.util.LinkedList;
90
+ import org.jruby.Ruby; // runtime
91
+ import org.jruby.RubyObject;
92
+ import org.jruby.runtime.builtin.IRubyObject;
93
+ import org.jruby.RubyArray;
94
+ import org.jruby.RubyString;
95
+ import org.jruby.RubyHash;
96
+ import org.jruby.RubySymbol;
97
+
98
+ public class JavaScanner {
99
+
100
+ Ruby runtime = null;
101
+ RubyArray rv = null;
102
+
103
+ void pass_through(String str) {
104
+ RubyObject last = ((RubyObject)rv.last());
105
+ if ( rv.size() > 0 && last != null && (last instanceof RubyString) ){
106
+ // XXX concat changes for ruby 1.9
107
+ ((RubyString) last).concat(RubyString.newString(runtime, str));
108
+ } else {
109
+ rv.append(RubyString.newString(runtime, str));
110
+ }
111
+ }
112
+
113
+ void tag(String prefix, String name, RubyHash attr, RubySymbol flavor) {
114
+ RubyHash tag = RubyHash.newHash(runtime);
115
+ tag.op_aset(
116
+ runtime.getCurrentContext(),
117
+ RubySymbol.newSymbol(runtime, "prefix"),
118
+ RubyString.newString(runtime, prefix)
119
+ );
120
+ tag.op_aset(
121
+ runtime.getCurrentContext(),
122
+ RubySymbol.newSymbol(runtime, "name"),
123
+ RubyString.newString(runtime, name)
124
+ );
125
+ tag.op_aset(
126
+ runtime.getCurrentContext(),
127
+ RubySymbol.newSymbol(runtime, "attrs"),
128
+ attr
129
+ );
130
+ tag.op_aset(
131
+ runtime.getCurrentContext(),
132
+ RubySymbol.newSymbol(runtime, "flavor"),
133
+ flavor
134
+ );
135
+ rv.append(tag);
136
+ }
137
+
138
+ public JavaScanner(Ruby runtime) {
139
+ this.runtime = runtime;
140
+ }
141
+
142
+ %% write data;
143
+
144
+ public RubyArray operate(String tag_prefix, String input) {
145
+ char[] data = input.toCharArray();
146
+ String disposable_string;
147
+
148
+ String name = "";
149
+ String prefix = "";
150
+ RubySymbol flavor = RubySymbol.newSymbol(runtime, "tasteless".intern());
151
+ RubyHash attributes = RubyHash.newHash(runtime);
152
+
153
+ int tagstart = 0;
154
+ int mark_pfx = 0;
155
+ int mark_stg = 0;
156
+ int mark_attr = 0;
157
+ int mark_nat = 0;
158
+ int mark_vat = 0;
159
+
160
+ String nat = "";
161
+ String vat = "";
162
+
163
+ int cs;
164
+ int p = 0;
165
+ int pe = data.length;
166
+ int eof = pe;
167
+ int act;
168
+ int ts;
169
+ int te;
170
+
171
+ rv = RubyArray.newArray(runtime);
172
+ char[] remainder = data;
173
+
174
+ %% write init;
175
+ %% write exec;
176
+
177
+ return rv;
178
+ }
179
+ }
@@ -0,0 +1,1255 @@
1
+ # coding: utf-8
2
+
3
+ # line 1 "scanner.rl"
4
+
5
+ # line 84 "scanner.rl"
6
+
7
+
8
+ module Radius
9
+ class Scanner
10
+ def operate(prefix, data)
11
+ data = Radius::OrdString.new data
12
+ buf = ""
13
+ csel = ""
14
+ @prematch = ''
15
+ @starttag = nil
16
+ @attrs = {}
17
+ @flavor = :tasteless
18
+ @cursor = 0
19
+ @tagstart = 0
20
+ @nodes = ['']
21
+ remainder = data.dup
22
+
23
+ until remainder.length == 0
24
+ p = perform_parse(prefix, remainder)
25
+ remainder = remainder[p..-1]
26
+ end
27
+
28
+ return @nodes
29
+ end
30
+
31
+ private
32
+ def perform_parse(prefix, data)
33
+ stack = []
34
+ p = 0
35
+ ts = 0
36
+ te = 0
37
+ act = 0
38
+ eof = data.length
39
+
40
+ @prefix = prefix
41
+
42
+ # line 42 "scanner.rb"
43
+ class << self
44
+ attr_accessor :_parser_trans_keys
45
+ private :_parser_trans_keys, :_parser_trans_keys=
46
+ end
47
+ self._parser_trans_keys = [
48
+ 0, 0, 45, 122, 45, 122,
49
+ 9, 122, 9, 122, 9,
50
+ 122, 9, 61, 9, 39,
51
+ 34, 92, 34, 92, 9, 122,
52
+ 9, 122, 62, 62, 34,
53
+ 92, 9, 122, 9, 122,
54
+ 9, 122, 9, 92, 9, 92,
55
+ 9, 122, 34, 92, 34,
56
+ 92, 34, 92, 9, 122,
57
+ 39, 92, 39, 92, 9, 122,
58
+ 9, 122, 9, 92, 9,
59
+ 92, 34, 92, 34, 92,
60
+ 9, 122, 9, 122, 9, 122,
61
+ 9, 92, 9, 92, 9,
62
+ 122, 34, 92, 9, 122,
63
+ 9, 122, 39, 92, 39, 92,
64
+ 45, 122, 45, 122, 45,
65
+ 122, 9, 122, 9, 62,
66
+ 0, 0, 60, 60, 45, 122,
67
+ 0, 0, 0, 0, 34,
68
+ 92, 34, 92, 34, 92,
69
+ 34, 92, 39, 92, 39, 92,
70
+ 0, 0, 0
71
+ ]
72
+
73
+ class << self
74
+ attr_accessor :_parser_key_spans
75
+ private :_parser_key_spans, :_parser_key_spans=
76
+ end
77
+ self._parser_key_spans = [
78
+ 0, 78, 78, 114, 114, 114, 53, 31,
79
+ 59, 59, 114, 114, 1, 59, 114, 114,
80
+ 114, 84, 84, 114, 59, 59, 59, 114,
81
+ 54, 54, 114, 114, 84, 84, 59, 59,
82
+ 114, 114, 114, 84, 84, 114, 59, 114,
83
+ 114, 54, 54, 78, 78, 78, 114, 54,
84
+ 0, 1, 78, 0, 0, 59, 59, 59,
85
+ 59, 54, 54, 0
86
+ ]
87
+
88
+ class << self
89
+ attr_accessor :_parser_index_offsets
90
+ private :_parser_index_offsets, :_parser_index_offsets=
91
+ end
92
+ self._parser_index_offsets = [
93
+ 0, 0, 79, 158, 273, 388, 503, 557,
94
+ 589, 649, 709, 824, 939, 941, 1001, 1116,
95
+ 1231, 1346, 1431, 1516, 1631, 1691, 1751, 1811,
96
+ 1926, 1981, 2036, 2151, 2266, 2351, 2436, 2496,
97
+ 2556, 2671, 2786, 2901, 2986, 3071, 3186, 3246,
98
+ 3361, 3476, 3531, 3586, 3665, 3744, 3823, 3938,
99
+ 3993, 3994, 3996, 4075, 4076, 4077, 4137, 4197,
100
+ 4257, 4317, 4372, 4427
101
+ ]
102
+
103
+ class << self
104
+ attr_accessor :_parser_indicies
105
+ private :_parser_indicies, :_parser_indicies=
106
+ end
107
+ self._parser_indicies = [
108
+ 1, 1, 0, 1, 1, 1, 1, 1,
109
+ 1, 1, 1, 1, 1, 2, 0, 0,
110
+ 0, 0, 1, 0, 1, 1, 1, 1,
111
+ 1, 1, 1, 1, 1, 1, 1, 1,
112
+ 1, 1, 1, 1, 1, 1, 1, 1,
113
+ 1, 1, 1, 1, 1, 1, 0, 0,
114
+ 0, 0, 1, 0, 1, 1, 1, 1,
115
+ 1, 1, 1, 1, 1, 1, 1, 1,
116
+ 1, 1, 1, 1, 1, 1, 1, 1,
117
+ 1, 1, 1, 1, 1, 1, 0, 3,
118
+ 3, 0, 3, 3, 3, 3, 3, 3,
119
+ 3, 3, 3, 3, 3, 0, 0, 0,
120
+ 0, 3, 0, 3, 3, 3, 3, 3,
121
+ 3, 3, 3, 3, 3, 3, 3, 3,
122
+ 3, 3, 3, 3, 3, 3, 3, 3,
123
+ 3, 3, 3, 3, 3, 0, 0, 0,
124
+ 0, 3, 0, 3, 3, 3, 3, 3,
125
+ 3, 3, 3, 3, 3, 3, 3, 3,
126
+ 3, 3, 3, 3, 3, 3, 3, 3,
127
+ 3, 3, 3, 3, 3, 0, 4, 4,
128
+ 4, 4, 4, 0, 0, 0, 0, 0,
129
+ 0, 0, 0, 0, 0, 0, 0, 0,
130
+ 0, 0, 0, 0, 0, 4, 0, 0,
131
+ 0, 0, 0, 0, 0, 0, 0, 0,
132
+ 0, 0, 5, 5, 6, 5, 5, 5,
133
+ 5, 5, 5, 5, 5, 5, 5, 5,
134
+ 0, 0, 0, 7, 5, 0, 5, 5,
135
+ 5, 5, 5, 5, 5, 5, 5, 5,
136
+ 5, 5, 5, 5, 5, 5, 5, 5,
137
+ 5, 5, 5, 5, 5, 5, 5, 5,
138
+ 0, 0, 0, 0, 5, 0, 5, 5,
139
+ 5, 5, 5, 5, 5, 5, 5, 5,
140
+ 5, 5, 5, 5, 5, 5, 5, 5,
141
+ 5, 5, 5, 5, 5, 5, 5, 5,
142
+ 0, 8, 8, 8, 8, 8, 0, 0,
143
+ 0, 0, 0, 0, 0, 0, 0, 0,
144
+ 0, 0, 0, 0, 0, 0, 0, 0,
145
+ 8, 0, 0, 0, 0, 0, 0, 0,
146
+ 0, 0, 0, 0, 0, 9, 9, 10,
147
+ 9, 9, 9, 9, 9, 9, 9, 9,
148
+ 9, 9, 9, 0, 0, 0, 11, 9,
149
+ 0, 9, 9, 9, 9, 9, 9, 9,
150
+ 9, 9, 9, 9, 9, 9, 9, 9,
151
+ 9, 9, 9, 9, 9, 9, 9, 9,
152
+ 9, 9, 9, 0, 0, 0, 0, 9,
153
+ 0, 9, 9, 9, 9, 9, 9, 9,
154
+ 9, 9, 9, 9, 9, 9, 9, 9,
155
+ 9, 9, 9, 9, 9, 9, 9, 9,
156
+ 9, 9, 9, 0, 13, 13, 13, 13,
157
+ 13, 12, 12, 12, 12, 12, 12, 12,
158
+ 12, 12, 12, 12, 12, 12, 12, 12,
159
+ 12, 12, 12, 13, 12, 12, 12, 12,
160
+ 12, 12, 12, 12, 12, 12, 12, 12,
161
+ 14, 14, 12, 14, 14, 14, 14, 14,
162
+ 14, 14, 14, 14, 14, 14, 12, 12,
163
+ 15, 12, 14, 12, 14, 14, 14, 14,
164
+ 14, 14, 14, 14, 14, 14, 14, 14,
165
+ 14, 14, 14, 14, 14, 14, 14, 14,
166
+ 14, 14, 14, 14, 14, 14, 12, 12,
167
+ 12, 12, 14, 12, 14, 14, 14, 14,
168
+ 14, 14, 14, 14, 14, 14, 14, 14,
169
+ 14, 14, 14, 14, 14, 14, 14, 14,
170
+ 14, 14, 14, 14, 14, 14, 12, 16,
171
+ 16, 16, 16, 16, 12, 12, 12, 12,
172
+ 12, 12, 12, 12, 12, 12, 12, 12,
173
+ 12, 12, 12, 12, 12, 12, 16, 12,
174
+ 12, 12, 12, 12, 12, 12, 12, 12,
175
+ 12, 12, 12, 12, 12, 12, 12, 12,
176
+ 12, 12, 12, 12, 12, 12, 12, 12,
177
+ 12, 12, 12, 17, 12, 17, 17, 17,
178
+ 17, 17, 12, 12, 12, 12, 12, 12,
179
+ 12, 12, 12, 12, 12, 12, 12, 12,
180
+ 12, 12, 12, 12, 17, 12, 18, 12,
181
+ 12, 12, 12, 19, 12, 21, 20, 20,
182
+ 20, 20, 20, 20, 20, 20, 20, 20,
183
+ 20, 20, 20, 20, 20, 20, 20, 20,
184
+ 20, 20, 20, 20, 20, 20, 20, 20,
185
+ 20, 20, 20, 20, 20, 20, 20, 20,
186
+ 20, 20, 20, 20, 20, 20, 20, 20,
187
+ 20, 20, 20, 20, 20, 20, 20, 20,
188
+ 20, 20, 20, 20, 20, 20, 20, 22,
189
+ 20, 24, 23, 23, 23, 23, 23, 23,
190
+ 23, 23, 23, 23, 23, 23, 23, 23,
191
+ 23, 23, 23, 23, 23, 23, 23, 23,
192
+ 23, 23, 23, 23, 23, 23, 23, 23,
193
+ 23, 23, 23, 23, 23, 23, 23, 23,
194
+ 23, 23, 23, 23, 23, 23, 23, 23,
195
+ 23, 23, 23, 23, 23, 23, 23, 23,
196
+ 23, 23, 23, 25, 23, 26, 26, 26,
197
+ 26, 26, 12, 12, 12, 12, 12, 12,
198
+ 12, 12, 12, 12, 12, 12, 12, 12,
199
+ 12, 12, 12, 12, 26, 12, 12, 12,
200
+ 12, 12, 12, 12, 12, 12, 12, 12,
201
+ 12, 27, 27, 28, 27, 27, 27, 27,
202
+ 27, 27, 27, 27, 27, 27, 27, 12,
203
+ 12, 12, 29, 27, 12, 27, 27, 27,
204
+ 27, 27, 27, 27, 27, 27, 27, 27,
205
+ 27, 27, 27, 27, 27, 27, 27, 27,
206
+ 27, 27, 27, 27, 27, 27, 27, 12,
207
+ 12, 12, 12, 27, 12, 27, 27, 27,
208
+ 27, 27, 27, 27, 27, 27, 27, 27,
209
+ 27, 27, 27, 27, 27, 27, 27, 27,
210
+ 27, 27, 27, 27, 27, 27, 27, 12,
211
+ 30, 30, 30, 30, 30, 12, 12, 12,
212
+ 12, 12, 12, 12, 12, 12, 12, 12,
213
+ 12, 12, 12, 12, 12, 12, 12, 30,
214
+ 12, 12, 12, 12, 12, 12, 12, 12,
215
+ 12, 12, 12, 12, 31, 31, 32, 31,
216
+ 31, 31, 31, 31, 31, 31, 31, 31,
217
+ 31, 31, 12, 12, 12, 33, 31, 12,
218
+ 31, 31, 31, 31, 31, 31, 31, 31,
219
+ 31, 31, 31, 31, 31, 31, 31, 31,
220
+ 31, 31, 31, 31, 31, 31, 31, 31,
221
+ 31, 31, 12, 12, 12, 12, 31, 12,
222
+ 31, 31, 31, 31, 31, 31, 31, 31,
223
+ 31, 31, 31, 31, 31, 31, 31, 31,
224
+ 31, 31, 31, 31, 31, 31, 31, 31,
225
+ 31, 31, 12, 34, 12, 35, 23, 23,
226
+ 23, 23, 23, 23, 23, 23, 23, 23,
227
+ 23, 23, 23, 23, 23, 23, 23, 23,
228
+ 23, 23, 23, 23, 23, 23, 23, 23,
229
+ 23, 23, 23, 23, 23, 23, 23, 23,
230
+ 23, 23, 23, 23, 23, 23, 23, 23,
231
+ 23, 23, 23, 23, 23, 23, 23, 23,
232
+ 23, 23, 23, 23, 23, 23, 23, 25,
233
+ 23, 36, 36, 36, 36, 36, 23, 23,
234
+ 23, 23, 23, 23, 23, 23, 23, 23,
235
+ 23, 23, 23, 23, 23, 23, 23, 23,
236
+ 36, 23, 24, 23, 23, 23, 23, 23,
237
+ 23, 23, 23, 23, 23, 37, 37, 38,
238
+ 37, 37, 37, 37, 37, 37, 37, 37,
239
+ 37, 37, 37, 23, 23, 23, 39, 37,
240
+ 23, 37, 37, 37, 37, 37, 37, 37,
241
+ 37, 37, 37, 37, 37, 37, 37, 37,
242
+ 37, 37, 37, 37, 37, 37, 37, 37,
243
+ 37, 37, 37, 23, 25, 23, 23, 37,
244
+ 23, 37, 37, 37, 37, 37, 37, 37,
245
+ 37, 37, 37, 37, 37, 37, 37, 37,
246
+ 37, 37, 37, 37, 37, 37, 37, 37,
247
+ 37, 37, 37, 23, 40, 40, 40, 40,
248
+ 40, 23, 23, 23, 23, 23, 23, 23,
249
+ 23, 23, 23, 23, 23, 23, 23, 23,
250
+ 23, 23, 23, 40, 23, 24, 23, 23,
251
+ 23, 23, 23, 23, 23, 23, 23, 23,
252
+ 41, 41, 42, 41, 41, 41, 41, 41,
253
+ 41, 41, 41, 41, 41, 41, 23, 23,
254
+ 23, 43, 41, 23, 41, 41, 41, 41,
255
+ 41, 41, 41, 41, 41, 41, 41, 41,
256
+ 41, 41, 41, 41, 41, 41, 41, 41,
257
+ 41, 41, 41, 41, 41, 41, 23, 25,
258
+ 23, 23, 41, 23, 41, 41, 41, 41,
259
+ 41, 41, 41, 41, 41, 41, 41, 41,
260
+ 41, 41, 41, 41, 41, 41, 41, 41,
261
+ 41, 41, 41, 41, 41, 41, 23, 44,
262
+ 44, 44, 44, 44, 23, 23, 23, 23,
263
+ 23, 23, 23, 23, 23, 23, 23, 23,
264
+ 23, 23, 23, 23, 23, 23, 44, 23,
265
+ 24, 23, 23, 23, 23, 23, 23, 23,
266
+ 23, 23, 23, 45, 45, 23, 45, 45,
267
+ 45, 45, 45, 45, 45, 45, 45, 45,
268
+ 45, 23, 23, 46, 23, 45, 23, 45,
269
+ 45, 45, 45, 45, 45, 45, 45, 45,
270
+ 45, 45, 45, 45, 45, 45, 45, 45,
271
+ 45, 45, 45, 45, 45, 45, 45, 45,
272
+ 45, 23, 25, 23, 23, 45, 23, 45,
273
+ 45, 45, 45, 45, 45, 45, 45, 45,
274
+ 45, 45, 45, 45, 45, 45, 45, 45,
275
+ 45, 45, 45, 45, 45, 45, 45, 45,
276
+ 45, 23, 47, 47, 47, 47, 47, 23,
277
+ 23, 23, 23, 23, 23, 23, 23, 23,
278
+ 23, 23, 23, 23, 23, 23, 23, 23,
279
+ 23, 47, 23, 24, 23, 23, 23, 23,
280
+ 23, 23, 23, 23, 23, 23, 23, 23,
281
+ 23, 23, 23, 23, 23, 23, 23, 23,
282
+ 23, 23, 23, 23, 23, 23, 48, 23,
283
+ 23, 23, 23, 23, 23, 23, 23, 23,
284
+ 23, 23, 23, 23, 23, 23, 23, 23,
285
+ 23, 23, 23, 23, 23, 23, 23, 23,
286
+ 23, 23, 23, 23, 23, 25, 23, 48,
287
+ 48, 48, 48, 48, 23, 23, 23, 23,
288
+ 23, 23, 23, 23, 23, 23, 23, 23,
289
+ 23, 23, 23, 23, 23, 23, 48, 23,
290
+ 49, 23, 23, 23, 23, 50, 23, 23,
291
+ 23, 23, 23, 23, 23, 23, 23, 23,
292
+ 23, 23, 23, 23, 23, 23, 23, 23,
293
+ 23, 23, 23, 23, 23, 23, 23, 23,
294
+ 23, 23, 23, 23, 23, 23, 23, 23,
295
+ 23, 23, 23, 23, 23, 23, 23, 23,
296
+ 23, 23, 23, 23, 23, 23, 23, 23,
297
+ 23, 23, 25, 23, 51, 51, 51, 51,
298
+ 51, 20, 20, 20, 20, 20, 20, 20,
299
+ 20, 20, 20, 20, 20, 20, 20, 20,
300
+ 20, 20, 20, 51, 20, 21, 20, 20,
301
+ 20, 20, 20, 20, 20, 20, 20, 20,
302
+ 52, 52, 53, 52, 52, 52, 52, 52,
303
+ 52, 52, 52, 52, 52, 52, 20, 20,
304
+ 20, 54, 52, 20, 52, 52, 52, 52,
305
+ 52, 52, 52, 52, 52, 52, 52, 52,
306
+ 52, 52, 52, 52, 52, 52, 52, 52,
307
+ 52, 52, 52, 52, 52, 52, 20, 22,
308
+ 20, 20, 52, 20, 52, 52, 52, 52,
309
+ 52, 52, 52, 52, 52, 52, 52, 52,
310
+ 52, 52, 52, 52, 52, 52, 52, 52,
311
+ 52, 52, 52, 52, 52, 52, 20, 24,
312
+ 23, 23, 23, 23, 23, 23, 23, 23,
313
+ 23, 23, 23, 23, 23, 23, 23, 23,
314
+ 23, 23, 23, 23, 23, 23, 23, 23,
315
+ 23, 23, 23, 55, 23, 23, 23, 23,
316
+ 23, 23, 23, 23, 23, 23, 23, 23,
317
+ 23, 23, 23, 23, 23, 23, 23, 23,
318
+ 23, 23, 23, 23, 23, 23, 23, 23,
319
+ 23, 25, 23, 57, 56, 56, 56, 56,
320
+ 58, 56, 56, 56, 56, 56, 56, 56,
321
+ 56, 56, 56, 56, 56, 56, 56, 56,
322
+ 56, 56, 56, 56, 56, 56, 56, 56,
323
+ 56, 56, 56, 56, 56, 56, 56, 56,
324
+ 56, 56, 56, 56, 56, 56, 56, 56,
325
+ 56, 56, 56, 56, 56, 56, 56, 56,
326
+ 56, 56, 56, 56, 56, 59, 56, 61,
327
+ 60, 60, 60, 60, 35, 60, 60, 60,
328
+ 60, 60, 60, 60, 60, 60, 60, 60,
329
+ 60, 60, 60, 60, 60, 60, 60, 60,
330
+ 60, 60, 60, 60, 60, 60, 60, 60,
331
+ 60, 60, 60, 60, 60, 60, 60, 60,
332
+ 60, 60, 60, 60, 60, 60, 60, 60,
333
+ 60, 60, 60, 60, 60, 60, 60, 60,
334
+ 60, 62, 60, 64, 64, 64, 64, 64,
335
+ 63, 63, 63, 63, 63, 63, 63, 63,
336
+ 63, 63, 63, 63, 63, 63, 63, 63,
337
+ 63, 63, 64, 63, 63, 63, 63, 63,
338
+ 63, 24, 63, 63, 63, 63, 63, 65,
339
+ 65, 66, 65, 65, 65, 65, 65, 65,
340
+ 65, 65, 65, 65, 65, 63, 63, 63,
341
+ 67, 65, 63, 65, 65, 65, 65, 65,
342
+ 65, 65, 65, 65, 65, 65, 65, 65,
343
+ 65, 65, 65, 65, 65, 65, 65, 65,
344
+ 65, 65, 65, 65, 65, 63, 68, 63,
345
+ 63, 65, 63, 65, 65, 65, 65, 65,
346
+ 65, 65, 65, 65, 65, 65, 65, 65,
347
+ 65, 65, 65, 65, 65, 65, 65, 65,
348
+ 65, 65, 65, 65, 65, 63, 24, 63,
349
+ 63, 63, 63, 63, 63, 63, 63, 63,
350
+ 63, 63, 63, 63, 63, 63, 63, 63,
351
+ 63, 63, 63, 63, 63, 63, 63, 63,
352
+ 63, 63, 63, 63, 63, 63, 63, 63,
353
+ 63, 63, 63, 63, 63, 63, 63, 63,
354
+ 63, 63, 63, 63, 63, 63, 63, 63,
355
+ 63, 63, 63, 68, 63, 61, 63, 63,
356
+ 63, 63, 63, 63, 63, 63, 63, 63,
357
+ 63, 63, 63, 63, 63, 63, 63, 63,
358
+ 63, 63, 63, 63, 63, 63, 63, 63,
359
+ 63, 63, 63, 63, 63, 63, 63, 63,
360
+ 63, 63, 63, 63, 63, 63, 63, 63,
361
+ 63, 63, 63, 63, 63, 63, 63, 63,
362
+ 63, 63, 68, 63, 69, 69, 69, 69,
363
+ 69, 63, 63, 63, 63, 63, 63, 63,
364
+ 63, 63, 63, 63, 63, 63, 63, 63,
365
+ 63, 63, 63, 69, 63, 63, 63, 63,
366
+ 63, 63, 24, 63, 63, 63, 63, 63,
367
+ 70, 70, 71, 70, 70, 70, 70, 70,
368
+ 70, 70, 70, 70, 70, 70, 63, 63,
369
+ 63, 72, 70, 63, 70, 70, 70, 70,
370
+ 70, 70, 70, 70, 70, 70, 70, 70,
371
+ 70, 70, 70, 70, 70, 70, 70, 70,
372
+ 70, 70, 70, 70, 70, 70, 63, 68,
373
+ 63, 63, 70, 63, 70, 70, 70, 70,
374
+ 70, 70, 70, 70, 70, 70, 70, 70,
375
+ 70, 70, 70, 70, 70, 70, 70, 70,
376
+ 70, 70, 70, 70, 70, 70, 63, 73,
377
+ 73, 73, 73, 73, 63, 63, 63, 63,
378
+ 63, 63, 63, 63, 63, 63, 63, 63,
379
+ 63, 63, 63, 63, 63, 63, 73, 63,
380
+ 63, 63, 63, 63, 63, 24, 63, 63,
381
+ 63, 63, 63, 74, 74, 63, 74, 74,
382
+ 74, 74, 74, 74, 74, 74, 74, 74,
383
+ 74, 63, 63, 75, 63, 74, 63, 74,
384
+ 74, 74, 74, 74, 74, 74, 74, 74,
385
+ 74, 74, 74, 74, 74, 74, 74, 74,
386
+ 74, 74, 74, 74, 74, 74, 74, 74,
387
+ 74, 63, 68, 63, 63, 74, 63, 74,
388
+ 74, 74, 74, 74, 74, 74, 74, 74,
389
+ 74, 74, 74, 74, 74, 74, 74, 74,
390
+ 74, 74, 74, 74, 74, 74, 74, 74,
391
+ 74, 63, 76, 76, 76, 76, 76, 63,
392
+ 63, 63, 63, 63, 63, 63, 63, 63,
393
+ 63, 63, 63, 63, 63, 63, 63, 63,
394
+ 63, 76, 63, 63, 63, 63, 63, 63,
395
+ 24, 63, 63, 63, 63, 63, 63, 63,
396
+ 63, 63, 63, 63, 63, 63, 63, 63,
397
+ 63, 63, 63, 63, 63, 63, 77, 63,
398
+ 63, 63, 63, 63, 63, 63, 63, 63,
399
+ 63, 63, 63, 63, 63, 63, 63, 63,
400
+ 63, 63, 63, 63, 63, 63, 63, 63,
401
+ 63, 63, 63, 63, 63, 68, 63, 77,
402
+ 77, 77, 77, 77, 63, 63, 63, 63,
403
+ 63, 63, 63, 63, 63, 63, 63, 63,
404
+ 63, 63, 63, 63, 63, 63, 77, 63,
405
+ 78, 63, 63, 63, 63, 79, 63, 63,
406
+ 63, 63, 63, 63, 63, 63, 63, 63,
407
+ 63, 63, 63, 63, 63, 63, 63, 63,
408
+ 63, 63, 63, 63, 63, 63, 63, 63,
409
+ 63, 63, 63, 63, 63, 63, 63, 63,
410
+ 63, 63, 63, 63, 63, 63, 63, 63,
411
+ 63, 63, 63, 63, 63, 63, 63, 63,
412
+ 63, 63, 68, 63, 80, 56, 56, 56,
413
+ 56, 58, 56, 56, 56, 56, 56, 56,
414
+ 56, 56, 56, 56, 56, 56, 56, 56,
415
+ 56, 56, 56, 56, 56, 56, 56, 56,
416
+ 56, 56, 56, 56, 56, 56, 56, 56,
417
+ 56, 56, 56, 56, 56, 56, 56, 56,
418
+ 56, 56, 56, 56, 56, 56, 56, 56,
419
+ 56, 56, 56, 56, 56, 56, 59, 56,
420
+ 81, 60, 60, 60, 60, 81, 60, 60,
421
+ 60, 60, 60, 60, 60, 60, 60, 60,
422
+ 60, 60, 60, 60, 60, 60, 60, 60,
423
+ 60, 60, 60, 60, 60, 60, 60, 60,
424
+ 60, 60, 60, 60, 60, 60, 60, 60,
425
+ 60, 60, 60, 60, 60, 60, 60, 60,
426
+ 60, 60, 60, 60, 60, 60, 60, 60,
427
+ 60, 60, 62, 60, 82, 82, 82, 82,
428
+ 82, 60, 60, 60, 60, 60, 60, 60,
429
+ 60, 60, 60, 60, 60, 60, 60, 60,
430
+ 60, 60, 60, 82, 60, 61, 60, 60,
431
+ 60, 60, 35, 60, 60, 60, 60, 60,
432
+ 83, 83, 84, 83, 83, 83, 83, 83,
433
+ 83, 83, 83, 83, 83, 83, 60, 60,
434
+ 60, 85, 83, 60, 83, 83, 83, 83,
435
+ 83, 83, 83, 83, 83, 83, 83, 83,
436
+ 83, 83, 83, 83, 83, 83, 83, 83,
437
+ 83, 83, 83, 83, 83, 83, 60, 62,
438
+ 60, 60, 83, 60, 83, 83, 83, 83,
439
+ 83, 83, 83, 83, 83, 83, 83, 83,
440
+ 83, 83, 83, 83, 83, 83, 83, 83,
441
+ 83, 83, 83, 83, 83, 83, 60, 86,
442
+ 86, 86, 86, 86, 60, 60, 60, 60,
443
+ 60, 60, 60, 60, 60, 60, 60, 60,
444
+ 60, 60, 60, 60, 60, 60, 86, 60,
445
+ 61, 60, 60, 60, 60, 35, 60, 60,
446
+ 60, 60, 60, 87, 87, 88, 87, 87,
447
+ 87, 87, 87, 87, 87, 87, 87, 87,
448
+ 87, 60, 60, 60, 89, 87, 60, 87,
449
+ 87, 87, 87, 87, 87, 87, 87, 87,
450
+ 87, 87, 87, 87, 87, 87, 87, 87,
451
+ 87, 87, 87, 87, 87, 87, 87, 87,
452
+ 87, 60, 62, 60, 60, 87, 60, 87,
453
+ 87, 87, 87, 87, 87, 87, 87, 87,
454
+ 87, 87, 87, 87, 87, 87, 87, 87,
455
+ 87, 87, 87, 87, 87, 87, 87, 87,
456
+ 87, 60, 90, 90, 90, 90, 90, 60,
457
+ 60, 60, 60, 60, 60, 60, 60, 60,
458
+ 60, 60, 60, 60, 60, 60, 60, 60,
459
+ 60, 90, 60, 61, 60, 60, 60, 60,
460
+ 35, 60, 60, 60, 60, 60, 91, 91,
461
+ 60, 91, 91, 91, 91, 91, 91, 91,
462
+ 91, 91, 91, 91, 60, 60, 92, 60,
463
+ 91, 60, 91, 91, 91, 91, 91, 91,
464
+ 91, 91, 91, 91, 91, 91, 91, 91,
465
+ 91, 91, 91, 91, 91, 91, 91, 91,
466
+ 91, 91, 91, 91, 60, 62, 60, 60,
467
+ 91, 60, 91, 91, 91, 91, 91, 91,
468
+ 91, 91, 91, 91, 91, 91, 91, 91,
469
+ 91, 91, 91, 91, 91, 91, 91, 91,
470
+ 91, 91, 91, 91, 60, 93, 93, 93,
471
+ 93, 93, 60, 60, 60, 60, 60, 60,
472
+ 60, 60, 60, 60, 60, 60, 60, 60,
473
+ 60, 60, 60, 60, 93, 60, 61, 60,
474
+ 60, 60, 60, 35, 60, 60, 60, 60,
475
+ 60, 60, 60, 60, 60, 60, 60, 60,
476
+ 60, 60, 60, 60, 60, 60, 60, 60,
477
+ 60, 94, 60, 60, 60, 60, 60, 60,
478
+ 60, 60, 60, 60, 60, 60, 60, 60,
479
+ 60, 60, 60, 60, 60, 60, 60, 60,
480
+ 60, 60, 60, 60, 60, 60, 60, 60,
481
+ 62, 60, 94, 94, 94, 94, 94, 60,
482
+ 60, 60, 60, 60, 60, 60, 60, 60,
483
+ 60, 60, 60, 60, 60, 60, 60, 60,
484
+ 60, 94, 60, 95, 60, 60, 60, 60,
485
+ 96, 60, 60, 60, 60, 60, 60, 60,
486
+ 60, 60, 60, 60, 60, 60, 60, 60,
487
+ 60, 60, 60, 60, 60, 60, 60, 60,
488
+ 60, 60, 60, 60, 60, 60, 60, 60,
489
+ 60, 60, 60, 60, 60, 60, 60, 60,
490
+ 60, 60, 60, 60, 60, 60, 60, 60,
491
+ 60, 60, 60, 60, 60, 62, 60, 97,
492
+ 97, 97, 97, 97, 56, 56, 56, 56,
493
+ 56, 56, 56, 56, 56, 56, 56, 56,
494
+ 56, 56, 56, 56, 56, 56, 97, 56,
495
+ 80, 56, 56, 56, 56, 58, 56, 56,
496
+ 56, 56, 56, 98, 98, 99, 98, 98,
497
+ 98, 98, 98, 98, 98, 98, 98, 98,
498
+ 98, 56, 56, 56, 100, 98, 56, 98,
499
+ 98, 98, 98, 98, 98, 98, 98, 98,
500
+ 98, 98, 98, 98, 98, 98, 98, 98,
501
+ 98, 98, 98, 98, 98, 98, 98, 98,
502
+ 98, 56, 59, 56, 56, 98, 56, 98,
503
+ 98, 98, 98, 98, 98, 98, 98, 98,
504
+ 98, 98, 98, 98, 98, 98, 98, 98,
505
+ 98, 98, 98, 98, 98, 98, 98, 98,
506
+ 98, 56, 61, 60, 60, 60, 60, 35,
507
+ 60, 60, 60, 60, 60, 60, 60, 60,
508
+ 60, 60, 60, 60, 60, 60, 60, 60,
509
+ 60, 60, 60, 60, 60, 60, 101, 60,
510
+ 60, 60, 60, 60, 60, 60, 60, 60,
511
+ 60, 60, 60, 60, 60, 60, 60, 60,
512
+ 60, 60, 60, 60, 60, 60, 60, 60,
513
+ 60, 60, 60, 60, 62, 60, 97, 97,
514
+ 97, 97, 97, 56, 56, 56, 56, 56,
515
+ 56, 56, 56, 56, 56, 56, 56, 56,
516
+ 56, 56, 56, 56, 56, 97, 56, 57,
517
+ 56, 56, 56, 56, 58, 56, 56, 56,
518
+ 56, 56, 98, 98, 99, 98, 98, 98,
519
+ 98, 98, 98, 98, 98, 98, 98, 98,
520
+ 56, 56, 56, 100, 98, 56, 98, 98,
521
+ 98, 98, 98, 98, 98, 98, 98, 98,
522
+ 98, 98, 98, 98, 98, 98, 98, 98,
523
+ 98, 98, 98, 98, 98, 98, 98, 98,
524
+ 56, 59, 56, 56, 98, 56, 98, 98,
525
+ 98, 98, 98, 98, 98, 98, 98, 98,
526
+ 98, 98, 98, 98, 98, 98, 98, 98,
527
+ 98, 98, 98, 98, 98, 98, 98, 98,
528
+ 56, 103, 103, 103, 103, 103, 102, 102,
529
+ 102, 102, 102, 102, 102, 102, 102, 102,
530
+ 102, 102, 102, 102, 102, 102, 102, 102,
531
+ 103, 102, 102, 102, 102, 102, 102, 21,
532
+ 102, 102, 102, 102, 102, 104, 104, 105,
533
+ 104, 104, 104, 104, 104, 104, 104, 104,
534
+ 104, 104, 104, 102, 102, 102, 106, 104,
535
+ 102, 104, 104, 104, 104, 104, 104, 104,
536
+ 104, 104, 104, 104, 104, 104, 104, 104,
537
+ 104, 104, 104, 104, 104, 104, 104, 104,
538
+ 104, 104, 104, 102, 107, 102, 102, 104,
539
+ 102, 104, 104, 104, 104, 104, 104, 104,
540
+ 104, 104, 104, 104, 104, 104, 104, 104,
541
+ 104, 104, 104, 104, 104, 104, 104, 104,
542
+ 104, 104, 104, 102, 24, 63, 63, 63,
543
+ 63, 63, 63, 63, 63, 63, 63, 63,
544
+ 63, 63, 63, 63, 63, 63, 63, 63,
545
+ 63, 63, 63, 108, 63, 63, 63, 63,
546
+ 63, 63, 63, 63, 63, 63, 63, 63,
547
+ 63, 63, 63, 63, 63, 63, 63, 63,
548
+ 63, 63, 63, 63, 63, 63, 63, 63,
549
+ 63, 68, 63, 21, 102, 102, 102, 102,
550
+ 102, 102, 102, 102, 102, 102, 102, 102,
551
+ 102, 102, 102, 102, 102, 102, 102, 102,
552
+ 102, 102, 102, 102, 102, 102, 102, 102,
553
+ 102, 102, 102, 102, 102, 102, 102, 102,
554
+ 102, 102, 102, 102, 102, 102, 102, 102,
555
+ 102, 102, 102, 102, 102, 102, 102, 102,
556
+ 107, 102, 109, 109, 0, 109, 109, 109,
557
+ 109, 109, 109, 109, 109, 109, 109, 0,
558
+ 0, 0, 0, 0, 109, 0, 109, 109,
559
+ 109, 109, 109, 109, 109, 109, 109, 109,
560
+ 109, 109, 109, 109, 109, 109, 109, 109,
561
+ 109, 109, 109, 109, 109, 109, 109, 109,
562
+ 0, 0, 0, 0, 109, 0, 109, 109,
563
+ 109, 109, 109, 109, 109, 109, 109, 109,
564
+ 109, 109, 109, 109, 109, 109, 109, 109,
565
+ 109, 109, 109, 109, 109, 109, 109, 109,
566
+ 0, 110, 110, 0, 110, 110, 110, 110,
567
+ 110, 110, 110, 110, 110, 110, 111, 0,
568
+ 0, 0, 0, 110, 0, 110, 110, 110,
569
+ 110, 110, 110, 110, 110, 110, 110, 110,
570
+ 110, 110, 110, 110, 110, 110, 110, 110,
571
+ 110, 110, 110, 110, 110, 110, 110, 0,
572
+ 0, 0, 0, 110, 0, 110, 110, 110,
573
+ 110, 110, 110, 110, 110, 110, 110, 110,
574
+ 110, 110, 110, 110, 110, 110, 110, 110,
575
+ 110, 110, 110, 110, 110, 110, 110, 0,
576
+ 112, 112, 0, 112, 112, 112, 112, 112,
577
+ 112, 112, 112, 112, 112, 112, 0, 0,
578
+ 0, 0, 112, 0, 112, 112, 112, 112,
579
+ 112, 112, 112, 112, 112, 112, 112, 112,
580
+ 112, 112, 112, 112, 112, 112, 112, 112,
581
+ 112, 112, 112, 112, 112, 112, 0, 0,
582
+ 0, 0, 112, 0, 112, 112, 112, 112,
583
+ 112, 112, 112, 112, 112, 112, 112, 112,
584
+ 112, 112, 112, 112, 112, 112, 112, 112,
585
+ 112, 112, 112, 112, 112, 112, 0, 113,
586
+ 113, 113, 113, 113, 0, 0, 0, 0,
587
+ 0, 0, 0, 0, 0, 0, 0, 0,
588
+ 0, 0, 0, 0, 0, 0, 113, 0,
589
+ 0, 0, 0, 0, 0, 0, 0, 0,
590
+ 0, 0, 0, 114, 114, 0, 114, 114,
591
+ 114, 114, 114, 114, 114, 114, 114, 114,
592
+ 114, 0, 0, 0, 115, 114, 0, 114,
593
+ 114, 114, 114, 114, 114, 114, 114, 114,
594
+ 114, 114, 114, 114, 114, 114, 114, 114,
595
+ 114, 114, 114, 114, 114, 114, 114, 114,
596
+ 114, 0, 0, 0, 0, 114, 0, 114,
597
+ 114, 114, 114, 114, 114, 114, 114, 114,
598
+ 114, 114, 114, 114, 114, 114, 114, 114,
599
+ 114, 114, 114, 114, 114, 114, 114, 114,
600
+ 114, 0, 116, 116, 116, 116, 116, 0,
601
+ 0, 0, 0, 0, 0, 0, 0, 0,
602
+ 0, 0, 0, 0, 0, 0, 0, 0,
603
+ 0, 116, 0, 0, 0, 0, 0, 0,
604
+ 0, 0, 0, 0, 0, 0, 0, 0,
605
+ 0, 0, 0, 0, 0, 0, 0, 0,
606
+ 0, 0, 0, 0, 0, 0, 0, 117,
607
+ 0, 118, 120, 119, 122, 122, 123, 122,
608
+ 122, 122, 122, 122, 122, 122, 122, 122,
609
+ 122, 121, 121, 121, 121, 121, 122, 121,
610
+ 122, 122, 122, 122, 122, 122, 122, 122,
611
+ 122, 122, 122, 122, 122, 122, 122, 122,
612
+ 122, 122, 122, 122, 122, 122, 122, 122,
613
+ 122, 122, 121, 121, 121, 121, 122, 121,
614
+ 122, 122, 122, 122, 122, 122, 122, 122,
615
+ 122, 122, 122, 122, 122, 122, 122, 122,
616
+ 122, 122, 122, 122, 122, 122, 122, 122,
617
+ 122, 122, 121, 124, 125, 24, 23, 23,
618
+ 23, 23, 23, 23, 23, 23, 23, 23,
619
+ 23, 23, 23, 23, 23, 23, 23, 23,
620
+ 23, 23, 23, 23, 23, 23, 23, 23,
621
+ 23, 23, 23, 23, 23, 23, 23, 23,
622
+ 23, 23, 23, 23, 23, 23, 23, 23,
623
+ 23, 23, 23, 23, 23, 23, 23, 23,
624
+ 23, 23, 23, 23, 23, 23, 23, 25,
625
+ 23, 24, 23, 23, 23, 23, 23, 23,
626
+ 23, 23, 23, 23, 23, 23, 23, 23,
627
+ 23, 23, 23, 23, 23, 23, 23, 23,
628
+ 23, 23, 23, 23, 23, 23, 23, 23,
629
+ 23, 23, 23, 23, 23, 23, 23, 23,
630
+ 23, 23, 23, 23, 23, 23, 23, 23,
631
+ 23, 23, 23, 23, 23, 23, 23, 23,
632
+ 23, 23, 23, 25, 23, 61, 60, 60,
633
+ 60, 60, 35, 60, 60, 60, 60, 60,
634
+ 60, 60, 60, 60, 60, 60, 60, 60,
635
+ 60, 60, 60, 60, 60, 60, 60, 60,
636
+ 60, 60, 60, 60, 60, 60, 60, 60,
637
+ 60, 60, 60, 60, 60, 60, 60, 60,
638
+ 60, 60, 60, 60, 60, 60, 60, 60,
639
+ 60, 60, 60, 60, 60, 60, 60, 62,
640
+ 60, 61, 60, 60, 60, 60, 35, 60,
641
+ 60, 60, 60, 60, 60, 60, 60, 60,
642
+ 60, 60, 60, 60, 60, 60, 60, 60,
643
+ 60, 60, 60, 60, 60, 60, 60, 60,
644
+ 60, 60, 60, 60, 60, 60, 60, 60,
645
+ 60, 60, 60, 60, 60, 60, 60, 60,
646
+ 60, 60, 60, 60, 60, 60, 60, 60,
647
+ 60, 60, 60, 62, 60, 24, 63, 63,
648
+ 63, 63, 63, 63, 63, 63, 63, 63,
649
+ 63, 63, 63, 63, 63, 63, 63, 63,
650
+ 63, 63, 63, 63, 63, 63, 63, 63,
651
+ 63, 63, 63, 63, 63, 63, 63, 63,
652
+ 63, 63, 63, 63, 63, 63, 63, 63,
653
+ 63, 63, 63, 63, 63, 63, 63, 63,
654
+ 63, 63, 68, 63, 24, 63, 63, 63,
655
+ 63, 63, 63, 63, 63, 63, 63, 63,
656
+ 63, 63, 63, 63, 63, 63, 63, 63,
657
+ 63, 63, 63, 63, 63, 63, 63, 63,
658
+ 63, 63, 63, 63, 63, 63, 63, 63,
659
+ 63, 63, 63, 63, 63, 63, 63, 63,
660
+ 63, 63, 63, 63, 63, 63, 63, 63,
661
+ 63, 68, 63, 126, 0
662
+ ]
663
+
664
+ class << self
665
+ attr_accessor :_parser_trans_targs
666
+ private :_parser_trans_targs, :_parser_trans_targs=
667
+ end
668
+ self._parser_trans_targs = [
669
+ 49, 1, 2, 3, 4, 3, 12, 52,
670
+ 4, 5, 12, 52, 49, 6, 5, 7,
671
+ 6, 7, 8, 42, 9, 10, 13, 9,
672
+ 10, 13, 11, 5, 12, 52, 11, 5,
673
+ 12, 52, 51, 14, 15, 16, 20, 54,
674
+ 15, 16, 20, 54, 17, 16, 18, 17,
675
+ 18, 19, 21, 15, 16, 20, 54, 53,
676
+ 22, 23, 14, 31, 22, 23, 31, 24,
677
+ 26, 27, 41, 58, 25, 26, 27, 41,
678
+ 58, 28, 27, 29, 28, 29, 30, 40,
679
+ 23, 32, 33, 34, 38, 56, 33, 34,
680
+ 38, 56, 35, 34, 36, 35, 36, 37,
681
+ 39, 33, 34, 38, 56, 55, 24, 26,
682
+ 27, 41, 58, 25, 57, 44, 44, 45,
683
+ 46, 47, 46, 59, 47, 59, 0, 49,
684
+ 50, 49, 1, 43, 49, 49, 49
685
+ ]
686
+
687
+ class << self
688
+ attr_accessor :_parser_trans_actions
689
+ private :_parser_trans_actions, :_parser_trans_actions=
690
+ end
691
+ self._parser_trans_actions = [
692
+ 1, 0, 2, 3, 4, 0, 4, 4,
693
+ 0, 5, 0, 0, 6, 7, 0, 7,
694
+ 0, 0, 0, 0, 8, 9, 8, 0,
695
+ 10, 0, 11, 12, 13, 13, 0, 14,
696
+ 15, 15, 0, 10, 11, 12, 13, 16,
697
+ 0, 14, 15, 17, 7, 0, 7, 0,
698
+ 0, 10, 0, 18, 19, 20, 21, 22,
699
+ 8, 23, 9, 8, 0, 10, 0, 0,
700
+ 11, 12, 13, 16, 0, 0, 14, 15,
701
+ 17, 7, 0, 7, 0, 0, 0, 10,
702
+ 9, 10, 11, 12, 13, 16, 0, 14,
703
+ 15, 17, 7, 0, 7, 0, 0, 10,
704
+ 10, 18, 19, 20, 21, 22, 8, 18,
705
+ 19, 20, 21, 8, 22, 24, 0, 2,
706
+ 3, 4, 0, 4, 0, 0, 0, 27,
707
+ 28, 29, 24, 0, 30, 31, 32
708
+ ]
709
+
710
+ class << self
711
+ attr_accessor :_parser_to_state_actions
712
+ private :_parser_to_state_actions, :_parser_to_state_actions=
713
+ end
714
+ self._parser_to_state_actions = [
715
+ 0, 0, 0, 0, 0, 0, 0, 0,
716
+ 0, 0, 0, 0, 0, 0, 0, 0,
717
+ 0, 0, 0, 0, 0, 0, 0, 0,
718
+ 0, 0, 0, 0, 0, 0, 0, 0,
719
+ 0, 0, 0, 0, 0, 0, 0, 0,
720
+ 0, 0, 0, 0, 0, 0, 0, 0,
721
+ 25, 25, 0, 0, 0, 0, 0, 0,
722
+ 0, 0, 0, 0
723
+ ]
724
+
725
+ class << self
726
+ attr_accessor :_parser_from_state_actions
727
+ private :_parser_from_state_actions, :_parser_from_state_actions=
728
+ end
729
+ self._parser_from_state_actions = [
730
+ 0, 0, 0, 0, 0, 0, 0, 0,
731
+ 0, 0, 0, 0, 0, 0, 0, 0,
732
+ 0, 0, 0, 0, 0, 0, 0, 0,
733
+ 0, 0, 0, 0, 0, 0, 0, 0,
734
+ 0, 0, 0, 0, 0, 0, 0, 0,
735
+ 0, 0, 0, 0, 0, 0, 0, 0,
736
+ 0, 26, 0, 0, 0, 0, 0, 0,
737
+ 0, 0, 0, 0
738
+ ]
739
+
740
+ class << self
741
+ attr_accessor :_parser_eof_trans
742
+ private :_parser_eof_trans, :_parser_eof_trans=
743
+ end
744
+ self._parser_eof_trans = [
745
+ 0, 1, 1, 1, 1, 13, 13, 13,
746
+ 13, 13, 13, 13, 13, 13, 13, 13,
747
+ 13, 13, 13, 13, 13, 13, 13, 13,
748
+ 13, 13, 13, 13, 13, 13, 13, 13,
749
+ 13, 13, 13, 13, 13, 13, 13, 13,
750
+ 13, 13, 13, 1, 1, 1, 1, 1,
751
+ 0, 0, 122, 125, 126, 125, 126, 125,
752
+ 126, 125, 126, 127
753
+ ]
754
+
755
+ class << self
756
+ attr_accessor :parser_start
757
+ end
758
+ self.parser_start = 49;
759
+ class << self
760
+ attr_accessor :parser_first_final
761
+ end
762
+ self.parser_first_final = 49;
763
+ class << self
764
+ attr_accessor :parser_error
765
+ end
766
+ self.parser_error = 0;
767
+
768
+ class << self
769
+ attr_accessor :parser_en_Closeout
770
+ end
771
+ self.parser_en_Closeout = 48;
772
+ class << self
773
+ attr_accessor :parser_en_main
774
+ end
775
+ self.parser_en_main = 49;
776
+
777
+
778
+ # line 120 "scanner.rl"
779
+
780
+ # line 780 "scanner.rb"
781
+ begin
782
+ p ||= 0
783
+ pe ||= data.length
784
+ cs = parser_start
785
+ ts = nil
786
+ te = nil
787
+ act = 0
788
+ end
789
+
790
+ # line 121 "scanner.rl"
791
+
792
+ # line 792 "scanner.rb"
793
+ begin
794
+ testEof = false
795
+ _slen, _trans, _keys, _inds, _acts, _nacts = nil
796
+ _goto_level = 0
797
+ _resume = 10
798
+ _eof_trans = 15
799
+ _again = 20
800
+ _test_eof = 30
801
+ _out = 40
802
+ while true
803
+ if _goto_level <= 0
804
+ if p == pe
805
+ _goto_level = _test_eof
806
+ next
807
+ end
808
+ if cs == 0
809
+ _goto_level = _out
810
+ next
811
+ end
812
+ end
813
+ if _goto_level <= _resume
814
+ case _parser_from_state_actions[cs]
815
+ when 26 then
816
+ # line 1 "scanner.rl"
817
+ begin
818
+ ts = p
819
+ end
820
+ # line 1 "scanner.rl"
821
+ # line 821 "scanner.rb"
822
+ end
823
+ _keys = cs << 1
824
+ _inds = _parser_index_offsets[cs]
825
+ _slen = _parser_key_spans[cs]
826
+ _trans = if ( _slen > 0 &&
827
+ _parser_trans_keys[_keys] <= data[p] &&
828
+ data[p] <= _parser_trans_keys[_keys + 1]
829
+ ) then
830
+ _parser_indicies[ _inds + data[p] - _parser_trans_keys[_keys] ]
831
+ else
832
+ _parser_indicies[ _inds + _slen ]
833
+ end
834
+ end
835
+ if _goto_level <= _eof_trans
836
+ cs = _parser_trans_targs[_trans]
837
+ if _parser_trans_actions[_trans] != 0
838
+ case _parser_trans_actions[_trans]
839
+ when 24 then
840
+ # line 5 "scanner.rl"
841
+ begin
842
+ mark_pfx = p end
843
+ # line 5 "scanner.rl"
844
+ when 2 then
845
+ # line 6 "scanner.rl"
846
+ begin
847
+
848
+ if data[mark_pfx..p-1] != @prefix
849
+ closing = data[mark_pfx-1,1] == '/'
850
+ @nodes.last << data[mark_pfx-(closing ? 2 : 1)..p]
851
+ begin
852
+ p += 1
853
+ _goto_level = _out
854
+ next
855
+ end
856
+
857
+ end
858
+ end
859
+ # line 6 "scanner.rl"
860
+ when 3 then
861
+ # line 13 "scanner.rl"
862
+ begin
863
+ mark_stg = p end
864
+ # line 13 "scanner.rl"
865
+ when 4 then
866
+ # line 14 "scanner.rl"
867
+ begin
868
+ @starttag = data[mark_stg..p-1] end
869
+ # line 14 "scanner.rl"
870
+ when 11 then
871
+ # line 15 "scanner.rl"
872
+ begin
873
+ mark_attr = p end
874
+ # line 15 "scanner.rl"
875
+ when 15 then
876
+ # line 16 "scanner.rl"
877
+ begin
878
+
879
+ @attrs[@nat] = @vat
880
+ end
881
+ # line 16 "scanner.rl"
882
+ when 5 then
883
+ # line 25 "scanner.rl"
884
+ begin
885
+ mark_nat = p end
886
+ # line 25 "scanner.rl"
887
+ when 7 then
888
+ # line 26 "scanner.rl"
889
+ begin
890
+ @nat = data[mark_nat..p-1] end
891
+ # line 26 "scanner.rl"
892
+ when 8 then
893
+ # line 27 "scanner.rl"
894
+ begin
895
+ mark_vat = p end
896
+ # line 27 "scanner.rl"
897
+ when 10 then
898
+ # line 28 "scanner.rl"
899
+ begin
900
+ @vat = data[mark_vat..p-1] end
901
+ # line 28 "scanner.rl"
902
+ when 27 then
903
+ # line 79 "scanner.rl"
904
+ begin
905
+ te = p+1
906
+ begin
907
+ @nodes.last << data[p]
908
+ @tagstart = p
909
+ end
910
+ end
911
+ # line 79 "scanner.rl"
912
+ when 29 then
913
+ # line 79 "scanner.rl"
914
+ begin
915
+ te = p
916
+ p = p - 1; begin
917
+ @nodes.last << data[p]
918
+ @tagstart = p
919
+ end
920
+ end
921
+ # line 79 "scanner.rl"
922
+ when 1 then
923
+ # line 79 "scanner.rl"
924
+ begin
925
+ begin p = ((te))-1; end
926
+ begin
927
+ @nodes.last << data[p]
928
+ @tagstart = p
929
+ end
930
+ end
931
+ # line 79 "scanner.rl"
932
+ when 6 then
933
+ # line 1 "scanner.rl"
934
+ begin
935
+ case act
936
+ when 1 then
937
+ begin begin p = ((te))-1; end
938
+
939
+ tag = {:prefix=>@prefix, :name=>@starttag, :flavor => @flavor, :attrs => @attrs}
940
+ @prefix = nil
941
+ @name = nil
942
+ @flavor = :tasteless
943
+ @attrs = {}
944
+ @nodes << tag << ''
945
+ begin
946
+ p += 1
947
+ _goto_level = _out
948
+ next
949
+ end
950
+
951
+ end
952
+ when 2 then
953
+ begin begin p = ((te))-1; end
954
+
955
+ @nodes.last << data[p]
956
+ @tagstart = p
957
+ end
958
+ end
959
+ end
960
+ # line 1 "scanner.rl"
961
+ when 13 then
962
+ # line 15 "scanner.rl"
963
+ begin
964
+ mark_attr = p end
965
+ # line 15 "scanner.rl"
966
+ # line 16 "scanner.rl"
967
+ begin
968
+
969
+ @attrs[@nat] = @vat
970
+ end
971
+ # line 16 "scanner.rl"
972
+ when 14 then
973
+ # line 16 "scanner.rl"
974
+ begin
975
+
976
+ @attrs[@nat] = @vat
977
+ end
978
+ # line 16 "scanner.rl"
979
+ # line 25 "scanner.rl"
980
+ begin
981
+ mark_nat = p end
982
+ # line 25 "scanner.rl"
983
+ when 18 then
984
+ # line 27 "scanner.rl"
985
+ begin
986
+ mark_vat = p end
987
+ # line 27 "scanner.rl"
988
+ # line 15 "scanner.rl"
989
+ begin
990
+ mark_attr = p end
991
+ # line 15 "scanner.rl"
992
+ when 9 then
993
+ # line 27 "scanner.rl"
994
+ begin
995
+ mark_vat = p end
996
+ # line 27 "scanner.rl"
997
+ # line 28 "scanner.rl"
998
+ begin
999
+ @vat = data[mark_vat..p-1] end
1000
+ # line 28 "scanner.rl"
1001
+ when 23 then
1002
+ # line 28 "scanner.rl"
1003
+ begin
1004
+ @vat = data[mark_vat..p-1] end
1005
+ # line 28 "scanner.rl"
1006
+ # line 27 "scanner.rl"
1007
+ begin
1008
+ mark_vat = p end
1009
+ # line 27 "scanner.rl"
1010
+ when 31 then
1011
+ # line 30 "scanner.rl"
1012
+ begin
1013
+ @flavor = :open end
1014
+ # line 30 "scanner.rl"
1015
+ # line 70 "scanner.rl"
1016
+ begin
1017
+ te = p
1018
+ p = p - 1; begin
1019
+ tag = {:prefix=>@prefix, :name=>@starttag, :flavor => @flavor, :attrs => @attrs}
1020
+ @prefix = nil
1021
+ @name = nil
1022
+ @flavor = :tasteless
1023
+ @attrs = {}
1024
+ @nodes << tag << ''
1025
+ begin
1026
+ p += 1
1027
+ _goto_level = _out
1028
+ next
1029
+ end
1030
+
1031
+ end
1032
+ end
1033
+ # line 70 "scanner.rl"
1034
+ when 30 then
1035
+ # line 31 "scanner.rl"
1036
+ begin
1037
+ @flavor = :self end
1038
+ # line 31 "scanner.rl"
1039
+ # line 70 "scanner.rl"
1040
+ begin
1041
+ te = p
1042
+ p = p - 1; begin
1043
+ tag = {:prefix=>@prefix, :name=>@starttag, :flavor => @flavor, :attrs => @attrs}
1044
+ @prefix = nil
1045
+ @name = nil
1046
+ @flavor = :tasteless
1047
+ @attrs = {}
1048
+ @nodes << tag << ''
1049
+ begin
1050
+ p += 1
1051
+ _goto_level = _out
1052
+ next
1053
+ end
1054
+
1055
+ end
1056
+ end
1057
+ # line 70 "scanner.rl"
1058
+ when 32 then
1059
+ # line 32 "scanner.rl"
1060
+ begin
1061
+ @flavor = :close end
1062
+ # line 32 "scanner.rl"
1063
+ # line 70 "scanner.rl"
1064
+ begin
1065
+ te = p
1066
+ p = p - 1; begin
1067
+ tag = {:prefix=>@prefix, :name=>@starttag, :flavor => @flavor, :attrs => @attrs}
1068
+ @prefix = nil
1069
+ @name = nil
1070
+ @flavor = :tasteless
1071
+ @attrs = {}
1072
+ @nodes << tag << ''
1073
+ begin
1074
+ p += 1
1075
+ _goto_level = _out
1076
+ next
1077
+ end
1078
+
1079
+ end
1080
+ end
1081
+ # line 70 "scanner.rl"
1082
+ when 22 then
1083
+ # line 1 "scanner.rl"
1084
+ begin
1085
+ te = p+1
1086
+ end
1087
+ # line 1 "scanner.rl"
1088
+ # line 70 "scanner.rl"
1089
+ begin
1090
+ act = 1; end
1091
+ # line 70 "scanner.rl"
1092
+ when 28 then
1093
+ # line 1 "scanner.rl"
1094
+ begin
1095
+ te = p+1
1096
+ end
1097
+ # line 1 "scanner.rl"
1098
+ # line 79 "scanner.rl"
1099
+ begin
1100
+ act = 2; end
1101
+ # line 79 "scanner.rl"
1102
+ when 12 then
1103
+ # line 15 "scanner.rl"
1104
+ begin
1105
+ mark_attr = p end
1106
+ # line 15 "scanner.rl"
1107
+ # line 16 "scanner.rl"
1108
+ begin
1109
+
1110
+ @attrs[@nat] = @vat
1111
+ end
1112
+ # line 16 "scanner.rl"
1113
+ # line 25 "scanner.rl"
1114
+ begin
1115
+ mark_nat = p end
1116
+ # line 25 "scanner.rl"
1117
+ when 20 then
1118
+ # line 27 "scanner.rl"
1119
+ begin
1120
+ mark_vat = p end
1121
+ # line 27 "scanner.rl"
1122
+ # line 15 "scanner.rl"
1123
+ begin
1124
+ mark_attr = p end
1125
+ # line 15 "scanner.rl"
1126
+ # line 16 "scanner.rl"
1127
+ begin
1128
+
1129
+ @attrs[@nat] = @vat
1130
+ end
1131
+ # line 16 "scanner.rl"
1132
+ when 17 then
1133
+ # line 1 "scanner.rl"
1134
+ begin
1135
+ te = p+1
1136
+ end
1137
+ # line 1 "scanner.rl"
1138
+ # line 16 "scanner.rl"
1139
+ begin
1140
+
1141
+ @attrs[@nat] = @vat
1142
+ end
1143
+ # line 16 "scanner.rl"
1144
+ # line 70 "scanner.rl"
1145
+ begin
1146
+ act = 1; end
1147
+ # line 70 "scanner.rl"
1148
+ when 19 then
1149
+ # line 27 "scanner.rl"
1150
+ begin
1151
+ mark_vat = p end
1152
+ # line 27 "scanner.rl"
1153
+ # line 15 "scanner.rl"
1154
+ begin
1155
+ mark_attr = p end
1156
+ # line 15 "scanner.rl"
1157
+ # line 16 "scanner.rl"
1158
+ begin
1159
+
1160
+ @attrs[@nat] = @vat
1161
+ end
1162
+ # line 16 "scanner.rl"
1163
+ # line 25 "scanner.rl"
1164
+ begin
1165
+ mark_nat = p end
1166
+ # line 25 "scanner.rl"
1167
+ when 16 then
1168
+ # line 1 "scanner.rl"
1169
+ begin
1170
+ te = p+1
1171
+ end
1172
+ # line 1 "scanner.rl"
1173
+ # line 15 "scanner.rl"
1174
+ begin
1175
+ mark_attr = p end
1176
+ # line 15 "scanner.rl"
1177
+ # line 16 "scanner.rl"
1178
+ begin
1179
+
1180
+ @attrs[@nat] = @vat
1181
+ end
1182
+ # line 16 "scanner.rl"
1183
+ # line 70 "scanner.rl"
1184
+ begin
1185
+ act = 1; end
1186
+ # line 70 "scanner.rl"
1187
+ when 21 then
1188
+ # line 1 "scanner.rl"
1189
+ begin
1190
+ te = p+1
1191
+ end
1192
+ # line 1 "scanner.rl"
1193
+ # line 27 "scanner.rl"
1194
+ begin
1195
+ mark_vat = p end
1196
+ # line 27 "scanner.rl"
1197
+ # line 15 "scanner.rl"
1198
+ begin
1199
+ mark_attr = p end
1200
+ # line 15 "scanner.rl"
1201
+ # line 16 "scanner.rl"
1202
+ begin
1203
+
1204
+ @attrs[@nat] = @vat
1205
+ end
1206
+ # line 16 "scanner.rl"
1207
+ # line 70 "scanner.rl"
1208
+ begin
1209
+ act = 1; end
1210
+ # line 70 "scanner.rl"
1211
+ # line 1211 "scanner.rb"
1212
+ end
1213
+ end
1214
+ end
1215
+ if _goto_level <= _again
1216
+ case _parser_to_state_actions[cs]
1217
+ when 25 then
1218
+ # line 1 "scanner.rl"
1219
+ begin
1220
+ ts = nil; end
1221
+ # line 1 "scanner.rl"
1222
+ # line 1222 "scanner.rb"
1223
+ end
1224
+
1225
+ if cs == 0
1226
+ _goto_level = _out
1227
+ next
1228
+ end
1229
+ p += 1
1230
+ if p != pe
1231
+ _goto_level = _resume
1232
+ next
1233
+ end
1234
+ end
1235
+ if _goto_level <= _test_eof
1236
+ if p == eof
1237
+ if _parser_eof_trans[cs] > 0
1238
+ _trans = _parser_eof_trans[cs] - 1;
1239
+ _goto_level = _eof_trans
1240
+ next;
1241
+ end
1242
+ end
1243
+
1244
+ end
1245
+ if _goto_level <= _out
1246
+ break
1247
+ end
1248
+ end
1249
+ end
1250
+
1251
+ # line 122 "scanner.rl"
1252
+ return p
1253
+ end
1254
+ end
1255
+ end